pax_global_header00006660000000000000000000000064136221111170014505gustar00rootroot0000000000000052 comment=4d3c074c16b4b4d0fc9b350e3e9243f3075397be drawing-0.4.11/000077500000000000000000000000001362211111700132235ustar00rootroot00000000000000drawing-0.4.11/.github/000077500000000000000000000000001362211111700145635ustar00rootroot00000000000000drawing-0.4.11/.github/ISSUE_TEMPLATE/000077500000000000000000000000001362211111700167465ustar00rootroot00000000000000drawing-0.4.11/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000012501362211111700214360ustar00rootroot00000000000000--- name: Bug report about: Create a report to help us improve title: '' labels: bug assignees: '' --- ## Description ## Steps to reproduce the bug: 1. ... 2. ... 3. ... ## Expected behavior ## Screenshots ---- ## System - Device (desktop computer/tablet/phone/...): - OS: - Desktop environment: - Package format (flatpak, DEB, AUR ?): - App version: ## Additional context drawing-0.4.11/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000012321362211111700224710ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea for this project title: '' labels: enhancement assignees: '' --- ## Problem ## Suggested solution ### Possible drawbacks ### Possible alternatives drawing-0.4.11/.gitignore000066400000000000000000000000541362211111700152120ustar00rootroot00000000000000*/tags.* /tags.* /_* /.flatpak* */_* /*.deb drawing-0.4.11/CONTRIBUTING.md000066400000000000000000000107621362211111700154620ustar00rootroot00000000000000# How to contribute to Drawing ---- ## If you want to translate the app #### I assume this will be the most usual contribution so i detail: - Fork the repo and clone it on your disk. - `git checkout 0.4` to contribute to the `0.4` branch. - Add your language to `po/LINGUAS`. - Build the app once, and then run `ninja -C _build drawing-update-po` at the root of the project. It will produce a `.po` file for your language. - Use a text editor or [an adequate app](https://flathub.org/apps/details/org.gnome.Gtranslator) to translate the strings of this `.po` file. Do not translate the app id (`com.github.maoschanz.drawing`). - If you want to test your translation: - GNOME Builder isn't able to run a translated version of the app so export it as a `.flatpak` file. - Install it with `flatpak install path/to/that/file`. - Run `git add . && git commit && git push` - Submit a "pull request"/"merge request". ---- ## If you want to fix a bug or to add a new feature - The issue has to be reported first. - Tell on the issue that you'll try to fix it. ### Syntax - Use tabs in `.py` files. - Use 2 spaces in `.ui` or `.xml` files. - Try to not do lines longer than 80 characters. - In the python code, use double quotes for translatable strings and single quotes otherwise. - Good comments explain *why* the code does it, if a comment needs to explain *what* it does, the code is probably bad. - I like `GAction`s and i've added wrapper methods for using them, try to use that instead of directly connecting buttons/menu-items to a method. Concerning design, try to respect GNOME Human Interface Guidelines as much as possible, while making your feature available from the (hidden by default) menubar. ### Explanation of the code The `data` directory contains data useless to the execution (app icons, desktop launcher, settings schemas, appdata, …). I know, it should contains the resources according to some people, but i don't care: resources used by the app (`.ui` files, in-app icons, …) are in `src`, along with the python code. - `main.py` defines the application, which has: - a preferences window (`preferences.py`) - a menubar (hidden with most layouts) - an appmenu (for GNOME Shell <= 3.30) - dialogs (about, shortcuts) - some `GioAction`s - implementations of CLI handling methods - several **windows** - `window.py` defines a GtkApplicationWindow: - the **properties** dialog (`proporties.py`) depends on the window - a window's decorations can change quite a lot, which is partly handled by… - `headerbar.py` for the headerbar - `color_popover.py` for the color palettes (default bottom panel) - `minimap.py` for the minimap, which shows a thumbnail of the currently opened image - some `GioAction`s - a window has several **tools** - a window has several **images** - `image.py` defines an image, which contains: - an "undo" history and a "redo" history - a selection, managed by `selection_manager.py` - a pixbuf (as an attribute), named `main_pixbuf` - **tools** are managed by a bunch of files in the `tools` directory. There are several types of tools: - the selection translates users input into operations using the selection_manager - the "canvas tools" can be applied the selection pixbuf or the main pixbuf - the classic tools, draw on the main pixbuf using **`cairo`** In my opinion, he complexity of the code comes mainly from 2 points: - tools are window-wide, while operations, which are stored in the history, are image-wide - the interactions with the selection are ridiculously complex and numerous _(defining, explicit applying, explicit canceling, import, clipboard methods, cancelled use by other tools, confirmed use by other tools, deletion, implicit applying, implicit canceling, …)_ >**If you find some bullshit in the code, or don't understand it, feel free to ask me about it.** ---- ## If you find a bug Usability and design issues are considered as bugs. - If you can, try to check if it hasn't already been fixed but not released. - Report it with: - OS version - Flatpak version - App version - If it's meaningful, screenshots. ---- ## If you want a new feature Usability and design issues are **not** considered as features. - Report it as an issue, and explain what it does, not how it does it. - Is it… - a general feature ? - a new standalone tool ? - a new option for an existing tool ? ---- #### And thank you for caring about this app! drawing-0.4.11/INSTALL_FROM_SOURCE.md000066400000000000000000000027021362211111700165570ustar00rootroot00000000000000# Install of the unstable version from `master` ## Run as flatpak with GNOME Builder (recommended) - Clone this repo (`git clone https://github.com/maoschanz/drawing.git`) - Open it as a project with GNOME Builder - Be sure the runtime is installed - Run it (or export it as a `.flatpak` bundle) ## Install on your system with meson Dependencies: | Distribution | Package names | Packages for building | |--------------|---------------|-----------------------| | Debian | `python3-gi python3-gi-cairo gir1.2-gtk-3.0` | `meson appstream-util libglib2.0-dev-bin` | | ... | `???` | `meson ??? ???` | (feel free to complete with other distros) ``` git clone https://github.com/maoschanz/drawing.git cd drawing meson _build cd _build ninja sudo ninja install ``` The app can then be removed with: ``` sudo ninja uninstall ``` You can also build a debian package with the script `deb_package.sh` and install/uninstall it. ## With flatpak-builder (not recommended, that's just for me) Initial installation: ``` wget https://raw.githubusercontent.com/maoschanz/drawing/master/com.github.maoschanz.drawing.json flatpak-builder --force-clean _build2/ --repo=_repo com.github.maoschanz.drawing.json flatpak --user remote-add --no-gpg-verify local-drawing-repo _repo flatpak --user install local-drawing-repo com.github.maoschanz.drawing ``` Update: ``` flatpak-builder --force-clean _build2/ --repo=_repo com.github.maoschanz.drawing.json flatpak update ``` drawing-0.4.11/LICENSE000066400000000000000000001045131362211111700142340ustar00rootroot00000000000000 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 . drawing-0.4.11/README.md000066400000000000000000000072051362211111700145060ustar00rootroot00000000000000# Drawing (branch 0.4.x) ## A simple drawing application for Linux. This application is a basic image editor, similar to Microsoft Paint, but aiming at the GNOME desktop. PNG, JPEG and BMP files are supported. Besides GNOME, some more traditional design layouts are available too, as well as an elementaryOS layout. It should also be compatible with smartphone screens (Librem 5, PinePhone, etc.) ### Available tools (and a few of their options) Classic tools: | Tool | Options | |:---------:|:--------------:| |Pencil |Dashes, eraser, …| |Line |Arrow, dashes, gradient … |Arc |Arrow, dashes, …| |Insert text|Font, shadow, font size| |Rectangle |Filling | |Circle |Regular circle or oval; Filling |Polygon |Filling | |Free shape |Filling | |Color picker| | |Paint |Remove a color | The selection tool allows you to define an area (rectangle or free), which you can move, cut, copy, paste, edit with canvas tools, export, open as a new image, etc. Canvas/selection edition tools: | Tool | Options | |:---------:|:---------:| |Crop* | | |Flip |Horizontally or vertically |Scale |Keep proportions or not |Rotate | | |Saturate | | \*Remark: The previewed picture isn't at the actual scale. ### Available languages - Brazilian portuguese (thanks to [Antonio Hauren](https://github.com/haurenburu)) - Castillan (thanks to [Adolfo Jayme-Barrientos](https://github.com/fitojb) and [Xoan Sampaiño](https://github.com/xoan)) - Danish (thanks to [scootergrisen](https://github.com/scootergrisen)) - Dutch (thanks to [Heimen Stoffels](https://github.com/Vistaus)) - English - Finnish (thanks to [MahtiAnkka](https://github.com/mahtiankka)) - French - German (thanks to [Onno Giesmann](https://github.com/Etamuk)) - Hebrew (thanks to [moriel5](https://github.com/moriel5) and [Shaked Ashkenazi](https://github.com/shaqash)) - Hungarian (thanks to [KAMI911](https://github.com/kami911)) - Italian (thanks to [Jimmy Scionti](https://github.com/amivaleo) and [Albano Battistella ](https://github.com/albanobattistella)) - Polish (thanks to [Piotr Komur](https://github.com/pkomur)) - Russian (thanks to [Artem Polishchuk](https://github.com/tim77)) - Turkish (thanks to [Serdar Sağlam](https://github.com/TeknoMobil)) ---- ## Screenshots These screenshots show the main default user interface (for GNOME/Budgie), but there are other more traditional window layouts (with a menubar and/or a toolbar using diffent styles of icons). ![The primary menu opened](./help/C/figures/screenshot_menu.png) ![The options of the "arc" tool](./help/C/figures/screenshot_arc.png) ![Here part of the image is selected, and the selection menu is opened](./help/C/figures/screenshot_selection.png) ![An example of a tool modifying the whole canvas](./help/C/figures/screenshot_saturate.png) The default "GNOME" UI can be resized to be compatible with the Purism Librem 5 phone. [Screenshot](./docs/screenshots/librem_options.png) and [screencast on Youtube](https://www.youtube.com/watch?v=xwfDnPd5NDU) (version 0.2). ---- ## Installation ### Stable version >**Recommended** You can install it from flathub.org using the instructions on [this page](https://flathub.org/apps/details/com.github.maoschanz.drawing). ### Native packages [![Packaging status](https://repology.org/badge/vertical-allrepos/drawing.svg)](https://repology.org/project/drawing/versions) - Ubuntu 18.04, 19.04 and 19.10: [PPA](https://launchpad.net/~cartes/+archive/ubuntu/drawing/) - ["Snap" package](https://snapcraft.io/drawing) ### Unstable/nightly version [See here](./INSTALL_FROM_SOURCE.md) drawing-0.4.11/build-aux/000077500000000000000000000000001362211111700151155ustar00rootroot00000000000000drawing-0.4.11/build-aux/meson/000077500000000000000000000000001362211111700162365ustar00rootroot00000000000000drawing-0.4.11/build-aux/meson/postinstall.py000077500000000000000000000011721362211111700211700ustar00rootroot00000000000000#!/usr/bin/env python3 from os import environ, path from subprocess import call prefix = environ.get('MESON_INSTALL_PREFIX', '/usr/local') datadir = path.join(prefix, 'share') destdir = environ.get('DESTDIR', '') # Package managers set this so we don't need to run if not destdir: print('Updating icon cache...') call(['gtk-update-icon-cache', '-qtf', path.join(datadir, 'icons', 'hicolor')]) print('Updating desktop database...') call(['update-desktop-database', '-q', path.join(datadir, 'applications')]) print('Compiling GSettings schemas...') call(['glib-compile-schemas', path.join(datadir, 'glib-2.0', 'schemas')]) drawing-0.4.11/com.github.maoschanz.drawing.json000066400000000000000000000007551362211111700216000ustar00rootroot00000000000000{ "app-id" : "com.github.maoschanz.drawing", "runtime" : "org.gnome.Platform", "runtime-version" : "3.34", "sdk" : "org.gnome.Sdk", "command" : "drawing", "finish-args" : [ "--share=ipc", "--socket=x11", "--socket=wayland", "--metadata=X-DConf=migrate-path=/com/github/maoschanz/drawing/" ], "modules" : [ { "name" : "drawing", "buildsystem" : "meson", "sources" : [ { "type" : "git", "url" : "https://github.com/maoschanz/drawing" } ] } ] } drawing-0.4.11/data/000077500000000000000000000000001362211111700141345ustar00rootroot00000000000000drawing-0.4.11/data/com.github.maoschanz.drawing.appdata.xml.in000066400000000000000000000137441362211111700243600ustar00rootroot00000000000000 com.github.maoschanz.drawing CC0-1.0 GPL-3.0-or-later AppMenu HiDpiIcon ModernToolkit UserDocs Drawing A drawing application for the GNOME desktop

"Drawing" is a basic image editor, supporting PNG, JPEG and BMP file types.

It allows you to draw or edit pictures with tools such as pencil, line or arc (with various options), selection (cut/copy/paste/drag/…), shapes (rectangle, circle, polygon, …), text insertion, resizing, cropping, rotating, …

Version 0.4.11 features several minor bug fixes, and various new translations.

A few features have been added to the tools: the color picker picks the alpha channel too, the ellipses are now geometrically correct, the text can be outlined with the secondary color, and the corners of the rectangles can be rounded.

It's now impossible to accidentally delete the selection while editing it with the 'scale' or the 'crop' tool.

Tabs can be closed with a middle-click.

What replaces the transparent channel when saving as JPEG or BMP is now an option the user can change in the preferences window.

Version 0.4.10 features several minor bug fixes, and various new translations.

The "rotate" tool where buttons were inverted has been fixed, and tools icons look better with the Adapta theme.

Replace transparency with white (instead of black) when saving a JPG or a BMP file.

Also, fix the color picker tool.

Add a "New image with custom size" action, the ability to open or import images with drag-and-drop, and don't close saved but non-blank images when opening a new image.

The UI of the preferences window, the toolbar, the spinbuttons and the menubar have been improved.

Version 0.4.5 features several minor bug fixes, and various new translations.

Clicking on both mouse buttons will no longer crash the tools, and the confusing UI for changing the colorspace has been deleted since it was causing bugs with the history.

Version 0.4.4 features several minor bug fixes, and various new translations.

Version 0.4.3 includes new translations, and is compatible with older distributions such as Ubuntu 18.04 LTS.

Version 0.4.2 features several minor bug fixes, and various new translations.

Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar for the "legacy" and "toolbar only" layouts, an action for creating an image from the clipboard content, a smoother pencil, and various new translations.

First stable release, including a few basic tools.

Romain F. T. rrroschan@gmail.com https://github.com/maoschanz/drawing/issues https://maoschanz.github.io/drawing https://paypal.me/maoschannz https://raw.githubusercontent.com/maoschanz/drawing/0.4/help/C/figures/screenshot_menu.png The default window and its primary menu https://raw.githubusercontent.com/maoschanz/drawing/0.4/help/C/figures/screenshot_selection.png The selection and the actions associated with it https://raw.githubusercontent.com/maoschanz/drawing/0.4/help/C/figures/screenshot_arc.png The "arc" tool and its options https://raw.githubusercontent.com/maoschanz/drawing/0.4/help/C/figures/screenshot_saturate.png An example of use of the "saturate" tool drawing com.github.maoschanz.drawing.desktop drawing
drawing-0.4.11/data/com.github.maoschanz.drawing.desktop.in000066400000000000000000000012431362211111700236070ustar00rootroot00000000000000[Desktop Entry] Name=Drawing Comment=Simple drawing utility Exec=drawing %U # Icon name, do not translate Icon=com.github.maoschanz.drawing Terminal=false Type=Application StartupNotify=true # This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. Keywords=Paint;Sketch;Pencil; Categories=Graphics;GNOME;GTK; MimeType=image/png;image/bmp;image/jpeg; Actions=new-window;new-tab;edit-clipboard; [Desktop Action new-window] Name=New Window Exec=drawing --new-window [Desktop Action new-tab] Name=New Image Exec=drawing --new-tab [Desktop Action edit-clipboard] Name=Edit Image in Clipboard Exec=drawing --edit-clipboard drawing-0.4.11/data/com.github.maoschanz.drawing.gschema.xml000066400000000000000000000105121362211111700237360ustar00rootroot00000000000000 false Use large icons Use 24px symbolic icons instead of 16px. It's an accessibility feature which is off by default because it makes icons blurry. 'auto' Type of window decorations Can be 'auto', 'csd', 'csd-eos', 'ssd', 'ssd-toolbar', 'ssd-symbolic', 'ssd-toolbar-symbolic', 'ssd-menubar' or 'everything'. [] Optional tools to disable A list of optional tools' id to disable. All tools are not optional, but putting garbage in the list isn't catastrophic so try any id you want. 'white' What will replace transparent pixels if needed What will replace transparent pixels when saving to a file format not supporting it, such as JPG or BMP. It can be 'white', 'black', 'ask' (the value isn't memorized and a dialog is prompted each time), 'nothing' (the alpha channel is removed, which usually replace deleted areas with black but preserves semi-transparent colors' saturation), or 'checkboard'. 250 Preview size Size of the bigger dimension of the preview (px). false Experimental features Turn on devel features (not recommended). ['1.0', '1.0', '1.0', '1.0'] Default color background The default color background of a new image. 1000 Default width Default width of a new image (px). 600 Default height Default height of a new image (px). false State of the window The state of the last closed window. 'pencil' Default active tool The id of the last active tool, saved when closing a window. ['1.0', '1.0', '0.0', '0.5'] Last right-click color The last edition color for the right click, saved when closing a window. ['0.8', '0.0', '0.0', '1.0'] Last left-click color The last edition color for the left click, saved when closing a window. 5 Last tool size The last tool size (px), saved when closing a window. false Don't use a color palette If a click on the color button should display directly the complete color selector. false Wide side panel Visibility of tools' labels in the side panel. drawing-0.4.11/data/icons/000077500000000000000000000000001362211111700152475ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/000077500000000000000000000000001362211111700167065ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/128x128/000077500000000000000000000000001362211111700176435ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/128x128/apps/000077500000000000000000000000001362211111700206065ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/128x128/apps/com.github.maoschanz.drawing.png000066400000000000000000000103601362211111700267670ustar00rootroot00000000000000PNG  IHDR>asBIT|d pHYs8/vtEXtSoftwarewww.inkscape.org<tEXtTitleAdwaita Icon Template?tEXtAuthorGNOME Design Team`v~RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDATx{Ձ[կGCgP 5z1>'<59xn'guOFTш㚣Cc̳]u1̣3=n߯nݺ4Fh4Fh4Fh4Fh4F -6uL&oZSwr墑PoZSl.%_I)xm!1M#l e6%ee^ޚvt P !%)7_4@F>t}Kɦ+R @y~!MK?4:Bʏ75]zmW|([%_mx!H.`V6i>y܎Nw<iYs\"]%J6[b˖mr6nXzw;0G)٣ !ik~2l'#%H&\VcGBR ƍKoOsxesSgr ZV{wOߩ9\0 IX,2F$eKyveB׮x7j?7rDIœqf'׀Hf ;]=!eRrYe;mIk5nTW <{$a#,F$%_嚊' Z:YjwebPz )Q}3Um.H45tV6}ܳsft$ʆý6!?3S-e尾T}p$i^/Y䦏o)ԧ‚g=* ;|=cJ:\ﰸ֑x9!__iˇngTf5W!.Ww5l0$Hw϶B~,nv4ek1a[רר]!H8R)6@fI>YaM~R9hRkIJ*VĂ I|d:& )vkFE%&+3(wu[)6{ 2GػwHk0kvͻVFw/"Gl0֗tP0&K[-e} I&q'iXE(#Ogi$Up(//gIQ K0AϞɡ[Yp! Y; *ʗi]d|/;k2N:cj%[e d} C D~]*8W>`T U bXo0b:}KF` %n+I|H/pGp;>?z0(_z9¶PXD1M(*z`PF8%_IG*u+6OB AoDx=/,([Ee>1?V!n ߻ )+{J܀(-Ǝ@_2`9_>ynrl(p<YWDq1΅o;A7߾3f@~*doŷ63x#[Eq"Q\omח}s@v]=g7[Eq$r0$\.|߾7oMl>L>p4Ư왶֠<89 QØ0w\?,uOKgprYos5-Mk^C<탞q9 Us$*z ϯC;ؗcլh6aQ==WE'ro*$',8[>2 Y#VT;'.$v'[>0"Kxxx|SI_XN ք4[!&u9+:Y')%+YLS{-'muZʇ9oNtgjg{L[2a:ep*ONgU[;K}p\EW|O&!)ܯV_\J#fLCl1Ѷ J<2~?{xq0*¬1e2i+q̝Y15j/yRJ #|>n`~Y ņV_\*~!kڛhY=hYy*C_!on3gP=>meۼ;h߻bJL3T,ax0Ŷakb= %J쭷Бu(y 3%--NwZw= y+9P'u및!;A&_<+ߖR>V5D00᳤Wމlu6R"m\ ,;P@ H"nC`pw8qg;oh eضbe8r&(6DZ=|A:߽3g|OϢ^ye(K,˖lI(R(o|˖l>o[p˘< ܗ/=AOK\0A/ e#6(8Ig,|eKg2 F~*޻?w{:ܿjoOłNSlɮ@XjRpGP;0|HD_yԄDAKF%"nq~k;ފ ,[;# ex[0/Զͨ!w]loj;e*qfO(DG<>CsMe }G3^L*_/sN J>U8z:T,sRYX6s5gTG 1ƧÁi4  PZR^y`dI´z6e1DEXR;~c"rp8Ӗі|(/l9dΞN ף Sw9xp8үOpF /sz>'Ӓ/-E4\+{c|_1D99? #GG+ 9B(eE)ɷ E i%D?6)a{-95 cLn 6@\ʖʏzh\|M/%̚離ɓ'{nbXN1_pGe#ee/^LD:{B0yd)΢y桔魞f՟IP$v%jI ?ֹsP}LӤ*|>߀ !"XFFeZ>xJ5Zgb~`g.gURYyA ЉCkw%[:}jjR(@N'J*]4" JR\H5o}H:O/0JXV|;"yp)*SDy6ۖel5߾ڛ&wXųl}ڵ5'[>]ϛp|>WWb6eaY֠0a&I[[;>pHrǮIR)Yz5K< ,s= ۸@JI4dK;˖-۱,++6R*[z50[I5 ';u+]yf%Y W~olߕ#Ynh4Fh4Fh4F H+IENDB`drawing-0.4.11/data/icons/hicolor/256x256/000077500000000000000000000000001362211111700176475ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/256x256/apps/000077500000000000000000000000001362211111700206125ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/256x256/apps/com.github.maoschanz.drawing.png000066400000000000000000000206401362211111700267750ustar00rootroot00000000000000PNG  IHDR\rfsBIT|d pHYsetEXtSoftwarewww.inkscape.org<tEXtTitleAdwaita Icon Template?tEXtAuthorGNOME Design Team`v~RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/Tb IDATxyu׷{&r($A$rJ<`E0"PaUVx(>PQa5"X@$ B.r's}TGOOf|<|0TWW oUWB!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!BQ^T#~m/(OJ\)~3|})!*$~WkWfI,v9K@ @ !h$j)[ HQf_kp5Z%DsYJ@ @2* eKPK@ @2GAkÁe0Y$_QĊH]fݿ%  D ڛMK@ @,˔%  D x%m׳P^lD_ ß h2bUFBxLGkUEH?81WRBx؞NM(R?dْTbB%PIf2B8|V$FCTp\ бiW6 P<ze<4>w`Gڶ]l_YϪ}1L~XZ5+@ s߭eÛ]-Q P6j_lpq!#De6Ylk-JR w\ QI 07ƪA4~I?ߜZ¯*WLãg#t=5[w%~QwpǦ=;Ss+EvN2Gkze:,@_%(|'YheG֦5_r`%MsT>~QocI>a9׵ 'h>vJƭ[hg/ XjD9M9 K;L7uZf FkTa#Gwvm[F @\d8H3u3\XK& n%?d52ys@w$d2]f 4#7Zk>Ԯ@+1V\Pv+~ %*ck}>($1ß[vIk_E:G/R*~2n{;LڧK)δ?C-*6uI?_% U"oAd_:\Js/3yISv]σ[|#f`@<7\n=BwIp]J]/Ad U ߽(|.vBTN=W RfAp _$bL"h` ?Zsq"a_4FRA2|>賹W^[˕#  P9Ÿb+Åfaɼ,ieK &?rVlS"/63n?,kT_<d H%Ÿ{EF U|ٰv8) *ܲH.;l (  @5?wE:R(h_6}|FIŸEլ~cs4w ͦ~4Gu< ?@Աj ?ZI{k |mRNUss˖fb| [{SHh5mJQLA @ԡZ5c\.{z_uM%۔ f ?xxQP!>4WdW}17OTnU%=e  xi=_S4q_kGӌC&wa5K.?~KQ׮Hh͟ZG SS3-,o( jh9Cls0}ŅS& rEDΟ3R5Ilԕm~//2 (jL.ݔw|3%?@ԐC /DM(d؟3ӧxR:9yE4$GQ3h2A d x9@B_ )Q;8Ă %w؟sE+$"#QU&28+jUm*LtWpm"d *n~Cga)()QQ|%Őb&: I% *b~|>$( 68;((+к-z^״KRlr Q>|LU~I;`isvϐ|JB @D*f[)(-5w|@qa30pM? iI;2z&prHf,sH%%'w1~{q5;OخTCq_q94xHǡ K $Slw$U?J @xG_S) ͅj(@gt G8m*kI_L/]ip!t}/Xf9wqI+: 58myW3̢kyzvAI+PG ?y+}W}5_Deس$xPS0^W{e ]jY30gNs썛2M n5V(EWs||nwD; $u~Jm?wښ˴'-wӎ?_=hsױ,M>n͝S:Z缰a싣hz]xO:UGFw0?~O[5IU]qsǭggG@s'oO/~Ƒס,gy78L{R.`ۇZur ,x(aHL'p{F_0}aњ5JslSoM+bߦ];vd1 sToӄυMi9(n<2$u 7@)ӞTP-kGs$cXIS_4@L{R! nY4 80[S+2]j`snCsCnX$5 @q=9Hυ 7ڝK綟O_}~unwOL< nY|f9hp<%5 6: C7oJ r}SF%<__c0 w]`;eک)Qsڵ`XFGHkHxc_v;=~C+Ѷ]Xß;߆$;.ˌ&6Q;sqv_c$gAN|3Ƥ_fOX)YkW2A3L%ހH=;? =ל9 Gb͙9k&)Nɓ0Lc%5xY;۳ø?~ Ml-`਀IKH 5ג|Ϸ:1u1o)3u2$ Lwa4- pn).OF8;@:c$Ԫ# \Sy!e󰠷,海bJqV|U5OP,I$% 0KˤV>VS~?ΧbLh9›7 ,ooF- k׌VK ىcRКmwѱDY^RB4*.N;_Ȧ29u`N?w뭶K ;a -< xhCLzABK_DwO/ݳm[9H5 㸺\H10nkP4nwGꁇǸ~iSXd{^2Y%=8Ɇ6d^k &,C &^7*.~ #@H?g>;0^*{78̢K/ѴeRŪ}TY.FPSHRs{zq^یe qvݻ'E"g[&? 'tqx'9r$ّ@f!A6J\͓,IKGhC(7ٶ k)=w Mt?X5wW>=lȖlP\Me/2\ƫ yyE-) 4%~؛ƾdƴ{1ǁ> }ٯ3¯]7[Ū}4!p慁(5vLzHu|#OM<ؓ۷ׯ+8RiN0 ήa C,A$'PBK8򳼫GWюK \Mvx1N J@5_ƼqGpnX¿@P&euX|`N (1 >%!ҏ@g2ǁd7.9lxö͋D$ G go$d?䡋?b6'+H@Xʤ}M?_ģ{~=s s67)2q*yI=2E~QOßٟL1?"tJ@!P.J<}yWI=鿠yϾD9=ptfm"3lBP_(t?;DȬ~wC% g"!_p7xiXQ<4fz˦?wR/dBW'qYLp?x_)a2 Rj^kM,!K@:=5MY¯ϾDyI|]]1v%g 6ba1PFŶ3e[JS~fON58\~Huv_?0!L<H$Le(:;'5:hTShSZN-6Rm|8/+IO~ӓz R@05UJ(;eY4ߞ>1oau46Ov({O{+=oYJRho#O aK6IRa pH?:w{q²}pБ(k>6eؾcR ~ZL沄_}owFl̑wg>4+c ?HT9wASZQJ4Ǿ,dY{G[Zez 07%V )^JA`J[Ÿinf{b w0b…u~e 17) PΎ Z4<|4dzN:CY`# [^ ?HT1i@'y̙ziwTSjiie֬L>uYz w~cZC(zN}bo̝;)S… Xz t-"܅ZfqFTcA bTW8Pm {7k+š9shkmq˲XDǩwQ@qN2M|^3F< 0ZMMYݧS໳iYL>9gpZJ<_)Q9 {ځV |Tv}'= 3={VzJyܿR_nw'!X| }GaB{<]KJU~ LR27mݏN=(v-DO/x#Mm?&uHv{:LzEv-XH=rRL<#8&=^_*,3ϐI'|Ӳ1csfϮR*/P&R2 R~):Qh Ğ(J~#J@&J@ZJ)MƜ9sdbD)JR8aΝ̞5K&JlP eJ#hkm}Qy~ UErMQ3(hnH.!!jB5@)m]xMQ-u_(vE@${%!jX5vNjF߇{M&~uٶGN񓀮K8_f:~n/4Zv<9{߾{ Q9kNOaT:M#BTj?dS4k׮-|ٝWZL&COO7iVQpc֚5.{uq‘SZ78b];w춇$Sb7+D?@<öGm]+?e;eF:ibT8[{J7H$kLbmAQXU0@p;[*T5O^ (x~5԰ǕB&hض8he@TW483 F_mZ/֏}5mu~4ld5WY |X>e|UQ'_SlIBٳ'4@22Vx͢ emہBx-; P-YuLH$XL W?v{(׼ڶ'_Щ୑H_X:NR;d"P42ab&a`fd۶7sSw?߫@'x_qvxFEOhIDATVo5h!LQW?XwŲel:!B!B!B!B!B!B!B!B!B!B!B!{C RIENDB`drawing-0.4.11/data/icons/hicolor/48x48/000077500000000000000000000000001362211111700175055ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/48x48/apps/000077500000000000000000000000001362211111700204505ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/48x48/apps/com.github.maoschanz.drawing.png000066400000000000000000000032751362211111700266400ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYsmhtEXtSoftwarewww.inkscape.org<tEXtTitleAdwaita Icon Template?tEXtAuthorGNOME Design Team`v~RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDAThklU3{^hrMA "VMKF!$!0#BJTAI4 PHF "D-FQPkݝ9]vZ mΙ3;4! .`Gwb9-@}Z؛c-5jjm ^%i}mnPi=dΏ%.\\Tڨ>VOKHB6p6]&@ e{um7`JN4eKNjSqRҰLRo?|_.Қs&ǼTѠCoXH˩n;{<%z'E뽝IOtz'|4)nt@~wW%rt|вxk 12 q ̬Y ~ + v)O>5'^Rx8tB/{u Hѽ{XMR.]1nI^/72^xcce  i۬}`7Q3Z>34m]+oŨQS9Ⱥw7Q$cakHA< Ԁ`U!lgm@J3n)\a{iu^!P*)8cxު_%"xCb`37 44 2ż2msbA.39`"a 磿s>S.;~fv:6o݄82-6 !E> ЗfNJdNFe~C9۷rdǻL0MRb1m^';W,>UnbO3onJQۘ4 *iKusd dJ@9}c$?E^HD q?E$lKi0eŒ~# he.Zi)t'n` :ϖEy,V8O1/4 ^,8b`V{@{$ētDyh{jM^0HOYҍzLFߛ7mEs4p-WL"'{;0ƕJFtM%U+bx z4l0ćc-)P(2p|qK{&M*{}jkuhѲ1Bۄ޹$tmrM3!]HCjIENDB`drawing-0.4.11/data/icons/hicolor/512x512/000077500000000000000000000000001362211111700176355ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/512x512/apps/000077500000000000000000000000001362211111700206005ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/512x512/apps/com.github.maoschanz.drawing.png000066400000000000000000000426161362211111700267720ustar00rootroot00000000000000PNG  IHDRxsBIT|d pHYs;;̶tEXtSoftwarewww.inkscape.org<tEXtTitleAdwaita Icon Template?tEXtAuthorGNOME Design Team`v~RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/Tb IDATxw|wU$wlje88@b. pq׾p(!RHI`NoV޶jdIlI;3z> ;u[И .HʰQ-v l *ܑ>aϧ(懿ΖLiK= nM #J`=0cTe;~3IVPwc]Nxmԕy$ukkVuc_3FU4޴3yWPob͔Լr_,N[_U~EP5-d(YAG};@M`Ktڎߕ T8N2-@MRc,@ͨrLJP Ɍ: n%Ob/?fenY "2tXqSKob+/I-/ټ9(@,E4NcY..K&odL)*+b#f?yvHd[7Gg%,:)@FOuh j,΢ [vo>}m@/ӂp j4K+=VW*n^厝` r %Nh@DJN`Rx u,Bl^uG` tmm}zVX_12Rg|я~tb&yX:{r&^7<2,&2S(bOyfLuvg/5Y~zzK=lc4>ud5)u&z]]P3ipO= app1~3$9>{xRkSv.Sp {@w{f?132>QV}.S(l^uιs]O}t:6F=CHY ҘQb% ynxCqa0?1=fK^jmҪ7,+lуǞz鎰}tkOpU8]kU"]]{W={qm./}mevX]7z`a% /} f)ҧZ/uloa% ;߾;ž`~Io.A]'lK 11/,^{wo~/{udtپP X"uJr,w^% r{u%o{ϞbđtקM)x]ޛ5͖>Xt>]ܼvsrjr=?Ĉ#|@K['$#]l >.u:]ΩDjo8~_&Լs$U`~#]ћ5͒>ө?P6y}{>Zڠћ"'0h: ɘN׶<؃Ȅ5\sĭ7ѕP IocJ'ڊ:weduf-YXzp$47nK2v tNF>ZԚX?NWf֕/iu<.|3s$IېU#k,.gר33'[2gc/ZE7o_r;oͭ{s$]IV^ cWuP%@,7izc<מz{z=DHzGb$1z"[x 4> zInLW%7`ːLJkȨS022xGһ2U 76K| ddFkZo/E N|'aPHzosFEU;F{]lnyuRVFG{s74y2u`K,GAfF)ϭ^_ 3=?+`Ik OaqB+\l'hl&kq ˑ|{cCeKcH>ZlG1uXW/E<;Ť?ȵ,6ZO*^$i>jju+ $!UkR_FxH>je u+N>Uй*&uɩ(P,zHҐlSN͇DW`RZ O DR DJ]*F-?z7s|`oȲ1U][/Q.bcsr:B%PK/ED@Z9 $+Z ?l_o$b2Wl!ܠ֘B̈́ ԴzvNr_ Y>l``_@ͪ^gtUj[/Q&cc+ zN>% ԜzuժL Dc#/QY*l}C];yL}j?yי^m*Pl[lZ'l7/Q&99֤+W '$r0;з̦OSnOnoC=ZS&%V {mqL*ŐmSJ+([yN~Ne!ѧ-;`&=v_@,99k czUB%mpCOtX t2=&#bdJ@irdW-\ ?yr#:;72@C,^'ȅD#'ss*?2#:;[8z2TKs-K:TMfXEI?NPM-]1~ DkY:ܮ<ܧC:;3CO:X0?y6M3$:gW@4\C2F 謑M?c|J@HT$C 육5,4;;;|JL$YE:V9C2~(Pu Im ic 4v`Vzz*J/Q IZ9%]5fU_r_HXpo_@UtT#Ÿ/*,𗤣/ *(_Hk\ (P!A$=E@3(J]Z >w(J$V'DT*-IH@*tJJL@TW(PJ I: XJ$U2F/RJ:)9ŸoKzkS_¿j$IzFBLc (0G v[z"i Z/IhEECfolTi:AAT3;?_E5߶/*]4FW fP4K¿z(0MĔŸ. LR_fK&Y1¿*(0hIY_5PߖviKOUEP6$?1FW@] #*u?1Fnii"'Pԥ0қZ1?Tnj #iB#C B$Vԑ0>EK 1?2(Bÿ*}9|o)5Ė>!=##U;Oac$QԬj%Z$gA?OW@Mf߷IMM=QԜj))Ko3ZbPԔj%MzqC)Ic,PԌj%MZ-[?_5LRz[t|ҚH+W?ܕ޸HڔdILcP[ c^" 4F@|ҷX/i멜W.SKg)aG0FǖFG̡oӌQјgtco^746RNotf&P94F% io&]3è;Fzz*/e3-ؑ:JJ듖k+OW`>SfXyRRFIKtZ`0VBO}r]8@|, elI-1Ÿwv9Y`OLc?_('8 h# T@t?* E=?ᏊŸGUpj*ůM߳C@Vkܣ+o_&=Y! T gÏhM6V"_nV9g) fu'LgTA~v ]FF|Uj8l5uZ[+8; ¿Qj!ͫ,ZVkF5Y--ŸSa֘+l\pK藿T_h:!#  2zNH`tVX3l@(¿αP 4%. = ojTPq׮oz_j~wgeŸG$PbۭG髯{*?"PAΪUbQF?? QD @'/*5K5OZ! D O#r(d%JU{ޤO|j O#(rd/Y\K_uƾ}E8(ŸGdQ*joS׾(j9/)3" D 'oP5YTu4gou'y LMRß+x|ھŊ?0OcN>  $ǻϕ*Siz +` ŸǜQLO~ѯ}KŝO{2-Տe56o` ŸǼ]8 dWhnTg?&gaާ>?b1Fr.\@(=TOcAXVcZ>~_MYxr6}S?bQ瞦])w]0]@L  œ#~%rV,{_)0+@?@8{2}"YdY1ciXs?j Q;V~8e#  @L4]ֲ/*Q5V*^]>ŸG͡H/*Ȩ}=u'Q(1weu'Q(qbYr:]x=M5'Q(1t)fx$?j0?֢Eeߌ4,?oIOJuoޤ"+1c57u36LP W8$V+cflVykSqH/X?ji3ϿS 6Y}O跒dR:@HI3e/'L5crK's2\$g#Q#(1SfZ0=}ӖOFQb+N@-}ɗV$ŸGL˺lI@3A*}ڛזaס  FXZ^a-Իϓ_y< @gdReq3y-'W)|k' n>O+h˨G)Yukby[F=ŸGQbdYw:h&I^Os'' 0F?Zu0;Ţguϓ~O,mjᯃ(VT|챲va_YO?;,%ײ}H3?9%O#V(1Q|zX}GCnLߦG2x $}~4O#n(1Q|Mҥ6%}ld Ec?bG[OF@3A$#b_VT|aP%c?b2 s"M͖e[0T*GPbTyt)mmj/vR tkv|DŽ{ʺs4f30l럗*v?"PPqowYp&-0K2lUغ%g3 @ x~/H^'jNmj>2o|qѭy'A(]ի$Pc-+Wr6O#bH(>; h&M>Qvuk! D ޲o^L Ʒ76Jj*Rvuk& D F;ry@A*Ɔ LbsCR(1u% 4U lcCmL &u[h?*&-vc* U>g>B% m?F+uS .Coc胭Fx OҗI湄 T o2CƤ?z)SsIT  -^gD"Lp (4Vϙ(1`/^\ f"?1韚+S\l,@@(1t^[& h6?vFj.Vx͸?P%8M@AD<3PФ۔ *Āsa1Kdf$3\OؘL 0M3T  ,U e#/4#*fzdž 5v?PAH<1vUkH"|1 ?pTJբە D̍gk= 38P} H EI @Le}sE=r/ZPd >VA IDATf'<( .l[o~}`3CWߖؾq5vQp+SⴖVHe 276:b}+H72x8+TEW/_6jo 1 BAo~IMmS- ^[%]ҦBvs#WM-f0 fF>y}>(y%6Ćg)Y}:` ?k6nͅ?vG ++ `^z_jy=={P˒S']5k=BN皲SP/߷nIFe뤎EjISsE2% 7M,XP-h{e^\e-]"{K^!{r˗}"8~8:Ԓpj.;LJ{G#-IQ( 2U'?{sf/]*{29V=('YϔjeS¿Mɱ mjq'] FsE5Ud)?@X30׼IŝO=K+q6濐|YS ̡wLNm?;LB_D 01<?@Xx[Uܽ'òR/|~E`=v²UM PB_+RޓצlGP(e)v=׽Vm+yij<ꅒD3CmR f x +J"B%`_riAC|J4ΪjzpYVjMk+zyžNeض{{dGc}Wbz:դ4SOlɑ cT;?yN;/*0ԣ3&͹49a {P'LܯnV)wÞNE$ImT$dh?Q]M%rcN5Gwf ӱTz;`ځƝvJ58Plcm?(Pc~$YF~]Þcmۦ;nѱ;SMz葝ryL HǒN\Ժ*56˕*=86B#2(P|Z-*[2\S*|:59G{*߽gμj>6O;_kײJ%qj.;}2%H  2L.}pϽoG;Tz2i-h/߻wV҆?6mN5pߴPw-K',L@-?߻)}#HU>?*@4?C٥Bד*v=;U|ȯX--[r?.]wީboIm9]J6GvJ¬qJ]s6K׬sǪ3SQ(y[Ož~yG^oȌCC\&w]8?M?թ4 4FO'࣏K¬s%ڪf׮J4-嗀?(獌{I_{S~vpTj:w+xr17'O;%sR hq DuKᏨP꒷G-*˛K')nT RUjh{gw]R>7kO90eꁁ5ݕh,Z2@#(Wܵ[o,b/עD?.~񃄿E>%tLȕK@?vWr~%Gԅ]{4 Uj~{~\(kѢh[~!Sac#ำYHXsoǞӅ/ ͟Qo(U>o^<}BACL& nʹ_۫Fu5R5,{K%{NfT\-J@[x1EEjtHGw!+l_Q3>4b;-3  "^Xx^M{o>'xt/W 5rXx>4Bamk$ң[`!(>QGU-|p< d A_Vҟ .mʑ!puyc}dtꁁ5}=6wu坫`(w5P|a6MyrhHG9\Js`Y>Pko$K:%/^y迗q?PB@4jmo_G*ʡ!}j+xF h8Z,S&}yc楁K?x+uՒϥ0~` ,~rOxV K_uO\?O3 b90ǿLŧv-|C2w^v@0S]4FGGǏ zE@5ejx_S(h!r?b`@G\U:c'Ҷ_ P{-@ #y=c.+sC {֯\5~@ׂ11:@= K*"~?&``vJ jBϕ{1e'N;W'"o騕+ĤK W0FL܎jY(>rwaw.{o¿F{tԊK3+^5#yJvr\9g 3WG-_)9o 1߇j5({_fN6/Ñ {yoJ@bg-_Fyc#=Vz;4D5L>̏~r'{YOZb*3Y@ 4Me#}? `s,^ӣg,[!9 ߘ)I*x1L>PPsR/yeȣ*<5 n'b}=:r Y3D ?ڿ @Xee'w-3chPc}=Zt;kюLt@7  (I #YVY3_$2vg ox7'65=rT>w#?0u0嗱{Ew-^:R 5ܳA̖[ ~iC?Ѻ%/ 4C #?&Ͳ\7<ܯ'y2ÿ́[Gڗȸ<{  Dh>E;Z>rS*%Ǒ2{T+m/߳OZT .k\ƃ`{LٲEc6eɶٶ-˶dYcs2ѩ9s9YFr,+?u32Ï |ٞ}Z׶xƿL _xڑ͌_;Hm+LQ MJRr 9[*J%P+*А@S 5-i$}}f}ig >Ecto63q ¿~Y%7PCcR r݄,;dͤdɦؤ%aO-Y}c֗|W:0p☀_ESz;`ʁݰ,KDD"YZ:|Ʋ_ܶMfu{oZc#h#㺥W٢_$}JYO5X7F[g-Y*+5xю\VH8˶jhT2{Q//QP$-H;* /٬F5q]544ʮgRO/QPE?jAMX$Y$u԰nl?dgwqǨ]/f L!c#s{3(G})N%-j>ryM, m>S ڷdr9¿F%)e^K#ʢM-fp9gŽ{tԊ ?D} Y|A/96Ie_k%@ $]?6iJ\t`_9g=Sz3|{?,V2< cߏ=SV?>T͝GOE@p;8m 5s=p'# {͡ @jE$)̣*~u9)=o Gͱ ; >/hns ꆕJYB]g~rYki#F_hnRso bY۶zjutt{UX<}=XuvvVlN5?hkqnj%->olj=trREs\WWֺk Ijll' Y~ф 5vnjo8ARj٢Ȇ'icy5}}Թf?p9Nޮgz%exmGV Ou8p $;D.̊طhQ:;hժU] 帵s~(+ @bik¿ԤgggY.]N-Y2Ko]? =˒+iH%g=y}?S G{{N= YUPPWiLWfֆPt*tN:Q?g:-ć] G@}i<0j8bܖ'KǬލQ؇XԌFR>Vwm`矩e}s=˲_> 2{FR~v9M@ÿԨ}'=gO @D 4^O>anI&޿ب7ިܡa:hn:]bQm3;Z\j= cr_y:*x־Ʀ&ի9u? X@3h֭9a @=+ ]8QPO/Q(jCD[K "R%EQ) p>DY @D -؇8sK "k%7az@@ͥp`*@P(J@"5G}0 \8@@Lx>-YPY]0\ž0'mkҥ?0OaO yUÞ@X(=@E( aO0zÞ@ m@9`S@H=@@EHS&sg,ᄚz 8@y1g$B/B^l&ic̽---{ÞG@b?c E =< 3N_Qes|_t&o!EH@_Sp==aOaBd @o_#ڷ;iLLQ@/IqB]v$) W0-DE3\ K 04Ɂ ,0z{)۟sLtVC/C3illʳȔ>@B ?LF3~``̫ @A?<2|!L@M#5080yzؽg1o ?|^CCv=s. @:jIt&3(@!E/htllXxG7 ,<Ԯ94ϏW CP((;1kO=[F$Es9,JQq%)2XRo}I*HR`@eM$d;~Vw>IVo6W<$I<ȼi;9Ky* nٖ[w(3~{cY }bH#ɺOu'iMy'˒,ٲ,KxIRʲDJ!OƓ<#ٖ-۶'b!2m,網' W~o$Nuw%/yQ`7ƨXyyy^Q^qxEV ~)eN3i۶mNtW\k0B @ѯm[՞{Üe۳{yKo6Dpkmc~㛦\>8oly~DKФ##ӟ2p?鯴oߔ?z߾#$@dt?{dX?um>e}G9/2!g]ҔҎu'?ip$|&2/oL3X>XX`N}1]T,N.^}Ù"S$q_4E* ηҶ;fڱ>}[)?J9Nl֭cN8uX^6y;JIDATSss֮[3seeY'&;mY'm[=J'ڲv}k/W?+.OmN" IG_ #ay ?_Lf H\^W^qtn՟Dj@lbNyi[eΗ]O֭۴nZ-Y.}_ֽ;mES|^]4+uNptL^t1L&(yYHH ?eg߹1|oGEH=ܽcÉtlyɧtۭUP̧d39W7o]a}.d՞~19/|sgȈnuMI\-_^WgnuݺNϬ,Z}aV_ o O$k׮ѩ9J˖/tMg(jeG<{Ե9H[2֗^" @WHz|Ҭ#N+V,ҥdb54$L&&ܲ b\6l6l6{v>GWtvkRL ${Ncjї%=ae_ 'ߛwoKj {.6zW}[aOd!bW$]pz9aPYz˕W^2.`7ݛyIKÞ . HGفm8Iқ%I1PR[ԤAI_/^s=aO&/ ν-2eΗѱaP,s~e = Lͯsm֒+IǫF' pFҽF֯,ϻ/+ UJW #L˲Qe]F-aPU9Y1F~=dyu_m\sް':3IENDB`drawing-0.4.11/data/icons/hicolor/scalable/000077500000000000000000000000001362211111700204545ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/scalable/apps/000077500000000000000000000000001362211111700214175ustar00rootroot00000000000000drawing-0.4.11/data/icons/hicolor/scalable/apps/com.github.maoschanz.drawing-symbolic.svg000066400000000000000000000032001362211111700314250ustar00rootroot00000000000000 image/svg+xml Gnome Symbolic Icon Theme Gnome Symbolic Icon Theme drawing-0.4.11/data/icons/hicolor/scalable/apps/com.github.maoschanz.drawing.svg000066400000000000000000000367611362211111700276300ustar00rootroot00000000000000 Adwaita Icon Template image/svg+xml GNOME Design Team Adwaita Icon Template drawing-0.4.11/data/icons/meson.build000066400000000000000000000001651362211111700174130ustar00rootroot00000000000000icon_themes = ['hicolor'] foreach theme : icon_themes install_subdir(theme, install_dir: 'share/icons/') endforeach drawing-0.4.11/data/meson.build000066400000000000000000000023501362211111700162760ustar00rootroot00000000000000desktop_file = i18n.merge_file( input: 'com.github.maoschanz.drawing.desktop.in', output: 'com.github.maoschanz.drawing.desktop', 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 appstream_file = i18n.merge_file( input: 'com.github.maoschanz.drawing.appdata.xml.in', output: 'com.github.maoschanz.drawing.appdata.xml', po_dir: '../po', install: true, install_dir: join_paths(get_option('datadir'), 'metainfo') ) appstream_util = find_program('appstream-util', required: false) if appstream_util.found() test( 'Validate appstream file', appstream_util, args: ['validate', appstream_file] ) endif install_data( 'com.github.maoschanz.drawing.gschema.xml', 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 message('Making a list of icons') subdir('icons') drawing-0.4.11/deb_package.sh000077500000000000000000000024371362211111700157750ustar00rootroot00000000000000#!/bin/bash DISTRO="unstable" # TODO lister les valeurs possibles (debian ? ubuntu ? elementary ?) PACKAGE_NAME="drawing" # TODO et pour elementary ? VERSION="0.4.10" echo "targeted distribution: $DISTRO" echo "package name: $PACKAGE_NAME" echo "package version: $VERSION" echo "" echo "Is it correct? [Return/^C]" # XXX ptêt écrasé dans la suite des opérations ? read confirmation # se souvenir du dossier courant (qui est la racine du projet) pour y amener le paquet à la fin previous_dir=`pwd` # mettre en place la structure à la con voulue par les scripts de debian DIR_NAME=$PACKAGE_NAME'-'$VERSION FILE_NAME=$PACKAGE_NAME'_'$VERSION DIR_PATH=/tmp/building-dir mkdir -p $DIR_PATH/$DIR_NAME/ cp -r build-aux $DIR_PATH/$DIR_NAME/ cp -r data $DIR_PATH/$DIR_NAME/ cp -r debian $DIR_PATH/$DIR_NAME/ cp -r help $DIR_PATH/$DIR_NAME/ cp -r po $DIR_PATH/$DIR_NAME/ cp -r src $DIR_PATH/$DIR_NAME/ cp meson.build $DIR_PATH/$DIR_NAME/ cd $DIR_PATH/ tar -Jcvf $FILE_NAME.orig.tar.xz $DIR_NAME cd $DIR_PATH/$DIR_NAME/ # création automatique des fichiers supplémentaires pour la construction dh_make -i -y # la construction dpkg-buildpackage -i -us -uc -b # récupérer le paquet dans /tmp cp $DIR_PATH/*.deb $previous_dir # nettoyage ls $DIR_PATH ls $DIR_PATH/$DIR_NAME rm -r $DIR_PATH cd $previous_dir drawing-0.4.11/debian/000077500000000000000000000000001362211111700144455ustar00rootroot00000000000000drawing-0.4.11/debian/changelog000066400000000000000000000035611362211111700163240ustar00rootroot00000000000000drawing (0.4.11) unstable; urgency=low * Fix the sensitivity of the "delete" action during the selection editing * Close tabs with middle-click (#164 @raggesilver) * Support color-picking with the alpha channel * Add an "outline" option to the text tool * Geometrically correct ellipses (circle tool) * Rounded rectangle option (rectangle tool) * Update translations * Rewrite preferences window to include help labels * Transparency replacement options -- Romain F. T. Sun, 16 Feb 2020 20:00:00 +0100 drawing (0.4.10) unstable; urgency=low * Fix the "rotate" tool where buttons were inverted * Change tools icons alignment with Adapta theme * Update translations -- Romain F. T. Thu, 20 Dec 2019 20:00:00 +0100 drawing (0.4.9) unstable; urgency=low * Remove GTK warning at the initialisation of the window * Replace transparency with white (instead of black) when saving a JPG or a BMP file * Fix the color picker tool -- Romain F. T. Thu, 20 Nov 2019 20:00:00 +0100 drawing (0.4.8) unstable; urgency=low * Add a "New image with custom size" action * Better "File" menu (in the menubar) * More usable "Windows" menu (in the menubar) * Fix the units inside the spinbuttons on systems without Cantarell * Improve the preferences window UI * Do not close saved but non-blank images when opening a new image * Fix the toolbar style * Open or import images with drag-and-drop * Add tooltips on color buttons for colorblind users -- Romain F. T. Thu, 5 Nov 2019 20:00:00 +0100 drawing (0.4.7) unstable; urgency=low * Version bump -- Romain F. T. Thu, 10 Oct 2019 20:34:00 +0100 drawing (0.4.6) unstable; urgency=low * Bug fixes * New translations -- Romain F. T. Mon, 22 Jul 2019 00:18:12 +0100 drawing-0.4.11/debian/compat000066400000000000000000000000031362211111700156440ustar00rootroot0000000000000010 drawing-0.4.11/debian/control000066400000000000000000000010151362211111700160450ustar00rootroot00000000000000Source: drawing Section: graphics Priority: optional Maintainer: Romain F. T. Build-Depends: meson (>=0.45), appstream-util (>=0.7.7), libglib2.0-dev-bin (>=2.56) Standards-Version: 4.4.0 Homepage: https://maoschanz.github.io/drawing/ Package: drawing Architecture: all Depends: python3-gi-cairo (>=3.26.0), gir1.2-gtk-3.0 (>=3.22.30) Description: A drawing application for the GNOME desktop. A simple application to draw or edit pictures. It includes tools like: Pencil, Selection, Shape, Text, … drawing-0.4.11/debian/copyright000066400000000000000000000020231362211111700163750ustar00rootroot00000000000000Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: drawing Upstream-Contact: Romain F. T. Source: https://github.com/maoschanz/drawing.git Files: * Copyright: 2018-2019 Romain F. T. License: GPL-3 License: GPL-3 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 . . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file '/usr/share/common-licenses/GPL-3'. drawing-0.4.11/debian/rules000077500000000000000000000001641362211111700155260ustar00rootroot00000000000000#!/usr/bin/make -f # -*- makefile -*- %: dh $@ --buildsystem=meson override_dh_auto_test: echo "Don't do tests" drawing-0.4.11/help/000077500000000000000000000000001362211111700141535ustar00rootroot00000000000000drawing-0.4.11/help/C/000077500000000000000000000000001362211111700143355ustar00rootroot00000000000000drawing-0.4.11/help/C/canvas_tools.page000066400000000000000000000046151362211111700176740ustar00rootroot00000000000000 Romain F. T. rrroschan@gmail.com Transform the image canvas or the current selection Edit the canvas or the selection

These tools are available from the side bar (along with the other tools), or from a right click on a selected area.

If a selection is defined, these tools will have an effect on the selected area, otherwise they will have an effect on the picture as a whole.

After finding the value you need, you have to apply the result with the Apply button at the right. Otherwise you can cancel the edition with the Cancel button at the left.

Crop

Change the size of the image, by removing parts of it. The side you're cropping is indicated by the mouse cursor: it changes depending on the position of the mouse pointer on the canvas.

The exact size can be set using the values in the bottom bar.

The previewed image might not be at a 100% scale.

Scale

Resize the image, using the mouse or the values in the bottom bar.

Proportions can be locked or not.

Rotate

Change the orientation of the image using the buttons in the bottom bar.

Flip

Flip the image, horizontally or vertically, using the buttons in the bottom bar.

Saturate

Change the saturation of the image, using the value in the bottom bar.

A saturation bigger than 100% will boost the colors, a saturation smaller than 100% will produce a greyish image.

drawing-0.4.11/help/C/drawing_tools.page000066400000000000000000000060061362211111700200500ustar00rootroot00000000000000 Romain F. T. rrroschan@gmail.com Draw with simple tools. Classic tools

Various tools are available, most of them use the selected color: drawing with a left click uses the left color, while drawing with a right click uses the right color. The tool size and options are also important, and are available in the bottom bar.

Pencil: The pencil draws following the pointer, and according to the chosen color.

Its options include the shape of the lead, the use of dashes, and the edition mode: the "classic" mode applies the color of the pencil on top of the image's pixels, the "source color" mode replaces the pixels by the selected color, and the "eraser" mode delete existing colors.

Circle and oval, with various filling options.

Rectangle, with various filling options.

Polygon, with various filling options. You have to click on the first point of the polygon to close its shape, which applies it to the image.

Free shape, with various filling options. You have to click on the first point of the shape to close its shape, which applies it to the image.

Line: This tool can draw straight lines. Its options include the shape of the lead, the use of dashes, the possibility to draw arrows, and the edition mode (some of these options are common with the pencil tool).

Arc: This tool can draw arcs. Its options include the shape of the lead, the use of dashes, and the possibility to draw arrows.

Text: Insert text on the image. For better contrast, the text can use the secondary color for its shadow, or as a rectangle background.

Don't forget to confirm the insertion using the Insert here button.

Paint: this tool is not reliable, don't use it.

Color picker: Select the color to use within the edited image.

The selection tool doesn't draw, but its capabilities are very powerful and useful for any image manipulation.

Other tools allow you to transform the canvas or the selection.

drawing-0.4.11/help/C/figures/000077500000000000000000000000001362211111700160015ustar00rootroot00000000000000drawing-0.4.11/help/C/figures/icon.png000066400000000000000000000032751362211111700174460ustar00rootroot00000000000000PNG  IHDR00WsBIT|d pHYsmhtEXtSoftwarewww.inkscape.org<tEXtTitleAdwaita Icon Template?tEXtAuthorGNOME Design Team`v~RtEXtCopyrightCC Attribution-ShareAlike http://creativecommons.org/licenses/by-sa/4.0/TbIDAThklU3{^hrMA "VMKF!$!0#BJTAI4 PHF "D-FQPkݝ9]vZ mΙ3;4! .`Gwb9-@}Z؛c-5jjm ^%i}mnPi=dΏ%.\\Tڨ>VOKHB6p6]&@ e{um7`JN4eKNjSqRҰLRo?|_.Қs&ǼTѠCoXH˩n;{<%z'E뽝IOtz'|4)nt@~wW%rt|вxk 12 q ̬Y ~ + v)O>5'^Rx8tB/{u Hѽ{XMR.]1nI^/72^xcce  i۬}`7Q3Z>34m]+oŨQS9Ⱥw7Q$cakHA< Ԁ`U!lgm@J3n)\a{iu^!P*)8cxު_%"xCb`37 44 2ż2msbA.39`"a 磿s>S.;~fv:6o݄82-6 !E> ЗfNJdNFe~C9۷rdǻL0MRb1m^';W,>UnbO3onJQۘ4 *iKusd dJ@9}c$?E^HD q?E$lKi0eŒ~# he.Zi)t'n` :ϖEy,V8O1/4 ^,8b`V{@{$ētDyh{jM^0HOYҍzLFߛ7mEs4p-WL"'{;0ƕJFtM%U+bx z4l0ćc-)P(2p|qK{&M*{}jkuhѲ1Bۄ޹$tmrM3!]HCjIENDB`drawing-0.4.11/help/C/figures/screenshot_arc.png000066400000000000000000003164371362211111700215270ustar00rootroot00000000000000PNG  IHDR+Q}*zTXtRaw profile type exifxڭir$:Vpfs9|ZXҘF%X]#xߚ˥6fr=iy]>"/-y;5>|ׅ~uytg}Fu?a=wL.\/EO ɿs(RO>Y+Kkq~>?F~MB?CۈBzK_=e_wq2}St4?b6:Ȍߐ#p+,㉕c\1ZǕ>KpcuNZ\s,ݷ~ܬqxg \5Ϸ ݫA?K̸ahw ~iy/Z 7͍~~.1K[s?SĽ !sR |<6g0r@((cNdB-|Xe(Hbr.ȷF WRɥ+˰dيUNjZ^GK-ҬZoǞ[} n:Z^qg6lϱWYjNpvm=N8ɧ;ϸM7rn}UsUokx5cbx Qk[9jfR*Q-Z1V0 ?usnVi?Vi~[߬n[ e!s B&y,\lܕf톶v}yc|w>]wYݜV+@bJ(UZmv8wȸ\Uw?El2 (8<7hƶ>o>%lXu얝ZgZ.\v)<]fô.6x|px 7vK{nkY1 [Yf1q f5,3Jٹ( 9瞞w$잹2[zJ09Khzl]~ C>:ggSK}Uz5tFZwVsu Z[ Vi"~xN8Sɱ-+m|ywR #ݯ ?9]dAԲ&aC"P?}{L,yغ)U/!9V mhLV -sꊵSxofѝN6> ܮt ׾i11UmYI ^3[=w/ď5Nh4cѿt~g,Lk ֥~F<9RJ+Cb $42ֵ ڸyZN|պ"d=E-n݃6꓂q>'BǙ'匡[IڊӏS}KHIeyT2"860pf]hk~!wW>j~@e62b'5 1/69xf180 2! _ =wE4W*~Ôk,172Eb,m¹QAn5H{#dIٮ~쳣ۂS#k#dX&<*5 D)ê[armǚ:glɫk"h:W \r? p;ā@RA \bIy."˔̟5Y4x$81S41AFʬeHH =P382VcfSrZt 5W8Sgy1}yp&нS|!&)%/ HByS2-$  =vwϸχG=RSnL5A,"-J%&  z7u"|:G?gd }F8]3"̽;J7"=*Qs5 h_'4/;r!sR;I>sgBz3$tDfgZ %e@ Dy|?EZfi5RG6r 2U,1W8qfi%xeFV6'ݪ3 @ DZ["cDʐPHUPbyTX+1S.]׈rXы1+gV1IJgr2ڽ ]~aZ̰, H,*]wgƌd EH5Ahf  eܯÀ~n#Fk8 Qy5UXlk7݂B' <ͱbֲ_ T"Lcf `L" #bˈLYgDǩqt&t4 M%4(e\4e8 6ˊAc$%9L LvY8J=.DXIZ(z|fK ,)R ~oFsg|A}2ˆ1y1,I z|DLXȵ!ZyaE&9`r=aPz: Ee3Тy4e7k W6lccXk~2Fڤhz gT78Bu lla*k>!oV'JH/Y:24fg+A)GW`O$ B">Vp'3_6j @!=T3o;;teH,_Q.$Oگ4˔)c\m@ (&Ap^U.:A i4 6Qɀ@&As}6w1瀹Io N}4i2Py'kAnDƌͫxpJ^$ceQŜ^ChA 7 ӶwA_:f' aAtJa J ^ABoXȕBW>s3,q}߆A`?e@N r!8!SC<'lPh:6ހ"{llQaN׮&XC@?*!.B558\x,W& LôZ;BI~T&ZJ}&S`XQܐРirɵⲀ)辦 M%ԣQ͛5oWUKf61XKJf(@5FJ n(@Z{dsA]UqAy?ϗ^\^HЂA ሬSwIAPhF"zbE6ro#'U[$rnjK(؝9GI0 v`CȖ['$#t>3bV3N9yzn۟ rQ\N|Aɓ0W%XC3URX G+[SD#ѵKoMYD"Lsc$# lr@a1!OG(ƁL*Xօ75)h9jz` fHD(T+mTirM(.=60ĒZݰO c3pNT֍ `KH!A`teյ$*3@xD.``A0)P6L]d6z&Sb}b{D/sn|7e9BC, 4/QO=]"b!ۢ`L܂51 @8 15b Zj2=(~7΋yka fнQxH#.m 3 \Xd)caF痠rHl[Ў+ ^*Kăa ?aɡn Ued݃O,fy:6],8|i 8\NԆZ/Pdm"pv1M".? 06.Y eݡ* .jOL ?qNI!rcK2y& 00=*3*czdPG#*ݜ~~|7+beK"}&K9L΂;pJuʚCb\ tֲ^Z,Qkr>}KB  !|[M6Bj^aHReNHZd%^ }q$66f;b}SˏV,w?hDCnhi&>0<LUUWϿ3&+ǿ׼ =9/0s҄6OcSմ &m{7 ̊W-,I58Lj!cbo&UCH%w#H[3 xACqpDL|KjY- `D0+S֌ga0g*U0 Y1c95\⋠sL lji;\Pobӳ|D& kq0YPt<@j"9L&J$YѬ><7u84S/ii#x T +l @,SK V**D:'v٥LZ !}2=PcЖwǬ,yP\ 0řr%h*Ԟ{eMXU\#|mcˎbՉsUÜPKơmXN⾍%ǡ:ٷ,_W#bBbXDRknDKD+2 -kB*\+Q6I >HMbL8LmuA>f'cY5,˜gH bp^ p{䅚eUqebYASRCtU!|4JXf 1g,Dǜ0S^)/,| i=3ժ\,ѡ3gz>J$˜k*ưx '߉]*)Lqxd?S/$AqMzPW F=s'>иJ$t mNP# ҫj8\hs]ٰY@rj#^aaeCHZ*PK%@@ޠ$--W>1:J,0ǫ$6Ӯ6IC}L jcyɁfՠ{i=3,׹l~"owz.:/Bą6]1^jl˞C \y `:RBNcy!KQ;0DS]OZ9Afm]#N [stOCVUYm_q4GScG P;VёD|L `7(ZH Ԗ *`r+y f%:*>''8c 67tg[VZ3CT";_JDG":k!_@a]PPА6MEL;%L-B*d9) 1I%Ai{m u`\H'eAߍ&2 L50n. ."k HbuQ; 2ŐPSjо&)YB=DZ^@1U dh`Uњj?m(a|c*]#BAq/S;wDe9$ZI7V*"!mK]RzW_.#S5!ظNM: 0!^I^IxqdF (O-M@it:$cbNM"` jÁ76L\R~ü'()O{MDsDhh%(]?!q`=F~} q$YӢ6`1 Suשt Q&oZ'$+ L+7>絢JZ$ gc!5:hWS#P`j*{؆8diuY:C%4^Hٲ@d6]L`C\M\L7: q ^V8CҨ]ll6\M. %b@ǩω%(yiWX^11ͱvAB W 㫒F!kqc-,xQ>[%bsoS6>c5VLIT7ґLƷwf]'-_]Qp֧ \n6EX.Uׁh5ȺXԺ?GOo rZ:ʧHb@uEUL\xvn>IlFzCiVabG!1pph Or\]l%+4WSt;?uDg^l"POS)ބM`<\!60g16&?J:Dѩz^F Rm֣%PGL{TWڅCgͼ아ZD4,EZw+V !+,R_/lK-ԟBR-ѪPӑoEvͩZ-͒gx:y3{"Km:vW2Q&>FM1).ِw\q X?gȵ(=S1h Y|{g'l!*YM"~[ h!륗`?XQ^0`juQ`cXE"ö A7',dq S'iiB"n.s]e a6mJy)1&utH %F ,H!4HxK'ʍ! ŭՆ. 6ZL 4U}q3EE@$ գ՟̣̎ `\{|wnӡ٩U%jl!zDnkJDH *e>#!vt«֮ 1f*bCP[JDGu#t*AYpJ@5S+?0;?A# h # tukPWG"Ҿ;$t誖eppqw[?˫*W.hS׭F<s~N˱$O^wucgkkՇ@SS1^"x۝Bώ؟6m:@'X-Iî]Qk:, XUMZ=8A^_!(AWH<e._ҧRgj@* ;oxϠ'&WG"zQd) 57O]0}#5Npu DjqL0U5;4WwjKtR RUS-?ݿ۲5so"ڛ&3@ i>jVaXAI6'̱]D߽#, '[g_ެi4:cYߦLu{ v&~S/*eZQCG*tׁ YMi+<:B_!0gJ0}~;~DqgiUML`+#fе\Duм?p9@8DvR~Z] j0h5>C7\ ݡ/OoxP?[~5/oiXr?&?1YK8 iG5zK7-8nV߇:2jq'$׿X2:Cf1oZ3z|.2g!-""W9*59x(oױZΙQ=ȳWNLGjcT;M$UA+^<%iCCPICC profile(}=H@_S-vqP,MP VhIC(X:8* .N.RB JL:MT".f+bB1L2f%) u_<ܟ#,Df6:mp'tAG+.q.4Xa3#6VژMx8j: U[R5_K\9 "TlDiIȥk(Cn|lM Ɓ@8ǎS?k'Ֆ9떦;!rCy) =no}>i*y#^xww{oirƖLBbKGD pHYs.#.#x?vtIME  94)WG IDATxwxwv7[{!J H @EHQ@'xE" JUPDE PB@ldMnH e'dnwΙ3G"#qOgeeee 0F~'"""""G3{ş?4J@[CRJ֭]O<񢭭X, 3MF[XXgϞn ʒ;t;=r"֣%ht6b2 [;uKXUHaaaO8MqI %"""""@v%ݺO> B)O=K%YV)=JJI"""""" &!~5ꊉCQ e_[\T7Q#Nc28YKosK;Ӓۗ666v[Ednk(<(dGS!i|sJYNjkQ6GE̶H"""2D άE=͑T*Onox먖l/c;HA,AIQjUM#$ He,+k ;He2$""%֎2vfmiG7JG:cFA bj>9ٙ|"bRcehݾsVA^^.JXẅKm.̚ӬF# 4JElZP>;HYRRmjT4y ms"l^$AXt}H, pemmHDDD&Vَ2vf iJsAܟ'JPzcZju()._*vj !B$#V־@,RSnh49w~+|/9;N9;A*"E =M|8"2Ŧ̥YzТBn-poc2|Z[;{Ot:l)OXY?,G'*E_ŌC,C*"/733r6aNg'AR3xDdzm,̦Y]=-D|j^GPf@*ǣkZbe0>4QssuAhW ˾D½t$ 80$"S˚؎2vzZ^/?2TJ _q0Ko?HH tjDpqvb>i,/+`Sh_CUZ-=#?[Sq%8;9熡wnO JgA,c蓃쐧yXf.\ T}{c˶xxaDT]v3 ӂrC65رkɤ2}R٩#TrD Oe|$<֦ΎADHlg6rҨ UtFvϐCxXL\r-ӏlom -NRϘڷkbǟ"_x'~6_T\JEbjuLrҠ*'v[ δ*9‚?ջ{~bVaa2q<=ܭ.C.i:s. n&{`DDdXaa!.+;`8}E˲I\9չǫ<ޘq7ƬXbRcnFf&{=Gor{oWO=1p8~gaWߠyP<=s缇֭̓wOƹ Ρi&YhD3mk۩HJIAڕ{{Q'h4jw5 V!CoO<=x<=`}W9W3|\sǪ@V,U}mxqpʡQ^^FWc^?FB0i+TTXz >R>zbڔW!^{vǟǎ#!&|}7MDD}zXOBjl霸ƛě7/f'8~ݽy. {)*cJSޫR^$ㇵ>ǝ;;mi;N ?DTvUHGhHp*uj2*_NDZz<=d>>? >$ܼ~u,cHH?kƝH$ž}6l7=>_ yya(J|\\33gΞ?x{{aŪo0Oa#HY06lނ2Ǐ+c4ʶc?ěI4JelllƢkN^dD; hZerrr]0#Y$FXODϜA״)CD F"'/z <h޼J?? ( 7|`!Z¯YS<1q|hu:FN=~/|7%ߞĤd|$L7i뭅cG#Ziiprr4.Vo//dfeꗏxa8BCCbp aチ\f'Mӧ}'#0:^m;~FrJ N_S1Ѯͺ_;6R^ǎJY(ۯRQTU_Fµ0<&%%aCD}nD  ݽ+<"vyMtk֭m1F{H}gF1F`ǯ;q56͚SPkԸVB|b"";wBN^nרܟ5cB ~o%%@&Q_X8 -t+{⑈\]\p] 1: 77W 4F<7{"qܥf%hlݶ7f͘ae$JOKo+WL(KTCNBDx8<^ݻA"ԸnR:hפEQ#??ҲO rs qR(c5KӳGes.I>(r88XywT i0Ӊ Y P\TXJ_T?=t˰/0eta۳/*{f,kLJMV)i=aJdQD"#߻'ID&CVAV!$8]H$ =$07ѿOoL8>ޘ>Jد~S&OaޘΝ5y&/rr|V5oĿk6\䣜 y/< ~ٽ)oWYݺ {^A~2׮!0 >ޞP(A䣰 y(ϫtX5=FPTTPU*K0z2qLǾ$__-~~}rUJlٺP_yO*7KK+>$F"""7:ѨQ\\Ow2õב7M}} %޿m!6.bcѩC;蠫a;4:萟[G]׳.}< }ҸX|#mlQȞ{ΪڻGDvgiMF_~bf|n:4B0le' лGaQzwcm -=99luhzU*Qq(KJLju:-㦍D{Ou֪;`瞽8}& DI*bFDDDks%нk$!plڲߞ 7w[O:{qq4u:-/@JK k7vfǟQ#N,|>f>b%GV+c_pRx{ᱶmyJi Sg|w@VXl) GwPHE%[66RNNlQ0)t]/GH N FeIqၑ]:a'A$hPRRO,U*%F0cFH$N[:$S*} *R;@3U|s!h5(%PcXοY37kfu_HDqi'ĈUPaLNH,X, #+bQw;v؀#Ǐ#,ylk}Ő=QvƏ/ A@ TR/ ؗF)SVWj;JajR;l q˩z֏ UjHsߺ8j6mL%%5.hȶ8 r mzXл:}@wڽҁc2_quF?ĹLh4ܹf͚"m<:cn "eQHE7JJJp8~ 4Lſ{HLBM6Dd)i7t:]5)Qk;kڞovf}&ml|G;Qwj׶MW!?7-gDT[RS㍠?$LufddߡL&C@6L}>ޞHKO7lgj?9Uz!cj*h4U1={h1ic'DpsugR`cc_ X[ #3 ϞCQq1r9\__II 6R h4'G<=#]@QQrtwWWa8y: O>>/;k#;wDo/t:>˯pmch9c18|8<=hNRvZӃ3)+ɼڙVGzr]dR*R*XEjr~"2* 9pw )~eAA!\]ѡPZD쌒dJ/(B!^Noݺt(JU&>>HHJA`@@;v޵ =e2trywڷ|][b/:'NN-GOV-A@.qQ2x`tnr9zt-]rll ?CCFcD޾o~fv3 SgG(@ cׯ^^\UYFVh"j?Z7!ŐHl g!Vq1hݾsAQ#Z4$Hj8 ڔ(s~ {j0$ӺVj*ơCά $,bT5wA(JAn{*dy9'3rceH1¶<"``ސH&9pOCDTն̥YzZ"r;{$ARxK D:AX$2xfRceKN7NbR,i$j?&Y/6'GD v63kZOM˃Q,!Ln ?DYXS,JDDDdm-kmsK;&%%c%ʼ_H$0a$"""Lm.̚ӪNJ;a+sADDDd.-kksK;ı6EܶB}$YPBemsig>B=-2q|c'"""b;,"cVR#CDDDDDD.=32u(5n3DDDDDd9#w/T81DD"'+6RYoCTG""""""G""""""bHDDDDDDL#1q$""""""&DDDDDDđ8G"""""""ȲCr. IDAT\n#"""STXayyՖutGʘQǑ;vv7HuFQk4PՕS1h4t:g?~?r03T/Jѓ:n 7HLNADDGOD!t:@Vv6n܄ĐGbK'"a|q3vrs>ٰ޿Qz^Epp0dRi߀'>pD2;'ϜEFV6$`A =yYzQ|%WC&"'7~<>Rņ[Ҽ9ڶk8z$U_z+O"$8ڲֻspqLyey&|=V]vm[cѼyU4ZqYZ"zw^~6TGdjKNN 8ɅRD ;aoEգ} w@II ^0w!1) ! Y-BB`#)Mj5bn 77;d̓X6$( 7/:B8I V]%X4Sd kg%&L7*Ɂ=~&~¨At:jq=@4 ѓ {*ا'ҡb֯O˸s7 bP:RUKπX$3_ţuXK7îC$}S'PPX: 6zOTJL g@aJ "-#"ATɝx6F~Ag@&"y6y`BRSSq*ܽ{QHL88أW"#+~M}4 @p)*.FfV6QT\b8uliZdf@ViTk4ʆ3dyjO9ۣKIxԙFNJ7b~-lJBi,**B 5R9g8ZJ'.:%O;iTpݲ_8,,bxrv{idMQѮu+D"Hիթl3`g'Cؕ X y^nީRFS01drrI3\\!Kǜ\BAA!3*=QvcSǟG+EIIDQ.~M4ѯ]Qqw5k1IcxP B@QQ\gVwWM' 2dZ4G{iP(FRa-ac#Ѥ,NHąKWA+쐝#'NVԻjt!y0^WзGWbHJ+z|"BᎻiixy!RDíz}WT\?#R+̜Zq V ,3rr~2DSb4ooOOJME|B$ =$aGԷ4KK3Ѣy08Xkצ56ELuL{h퍣'NrGPÝ,),Z{[Zu<ַ:q!I^ƄxճE@qYEUY̓YzHr k]AеS{x!y.o] FƆ.;Cg^"A@- & 鱶hZ7YVtlF=L&`{?\LԻ`on:=2_^poHH$3HV#}{Bvv6:t1ڵi W@p` <+ܶ n8v45gs ߾H$ӏ>@!99IIZ~<~R #+ IAp)D)XaA]c瞽xxARx۩wiトz;N w/qdgҾ<ݰA*лֹ>Nӽk˓ N.n 46 ʥ_:n܄u?l9D. 2 HC^|^6ָlTtkTu>T_+>vHLgMMs_*RSSެYބUj]nZYtpU""[F?aVg B$Q㽴4ܺ}nnnܡ=zt}{ز YYm}(xĐŹiiprtDvvsrѴ6Ru9 b!AAV;[[$DDulˏpLBZL,bnhPCH"6f\\\bto݈7zG"K ITp39 !hKzz:^}UDFF"**G%Ynxijڶh=s "##o"??G'Y^X'AMʥKg6z.] jh4,^ZΝ;ye%5AVZfVWg6m0}tj&%%aȐ!2dRRRxe$5A,OM13+ ϘD륋tXx1N:߹s'"""xbNCDDDDD8ֶ{ 7Ҽ9}9:رcXjܪ-7|C||c#gh8aˇ={f(]\\rJ:t-ZlQQ}] 4III<ȼGsq^ko/}ug.\~TZm~ [ƪUx$y$xJ41uۈOH@P` ?>wBo:u ;vlnn.L!C 55G3~hnN{4i E 4vɓX`ryewڅmDDDDDT/$u_~\aB!T܈/Mn&sb1f͚z ǏǙ3gMKKÐ!C0vX|װMDDDDDu^z>?P?{RƔx3 O=<1dwRXX?yA&U[vԩ.^ȣL/q,AOS&$ fϞ(o߾ڲҥ /^#=ƍ6"""p ̝;~)4rx7テ ]IDDDDDETsرc O?;r*1qF]t1zj]~]tի4"""""bhmqF]FcҤI7n8"""""bhmƍWs֯_޽{#))A#"""""&&44'NԩS-wtGeЈJXl6n;;;п|w 1qFGFTTÍQ*8q"LZ͠GkӲeK}o߾hӦ A`;vСC8|0233kLdff"**R2<<1h ೦@)/fhNjdFȞ^ׯcСv2غu+̝GD5jq!_{{=1x`3 X,f㧟~ºu@{bԨQ;v,t`Ο?_w,̐וC^35V&$$ǎC6l6nȀ%''C@@ kKذa ???;HLLN "Yf/2< I#P+|rDFFm۶ؼyˢ1qBػw/OnRرc#"0c hCrrr۷pB_իWSj$''cԩ Fŋ1j(c͚5L 8H$Xx1-ZagfH޽{xW%KT;BCjغu+"""0fr'RT7o°bŊGH$pqqA@@GGG_ll,&LN:ɓa?0m̙K/dgˍ&DdZ-V\YYY///l3$ j5۷o#&& Vƍ믿⣏>ԩS!Y?zGXڢ[nڵ+ZlPhF_ҥK8|p޽;&NyՕ;qr`JTEqƌ5kְ!Fd1jԨZ=dҥ 맟ٹƯKp!:t'Nՙ:`ӦM $"V1g|gt5zM&M0zh 2]tL&6m*<-[`޽5)YfشiwΝjr&L\'xFuƆ;JϘ0aBsСƎ1cͭQTT;wbݺuػw/j_+WbԨQܑDd1j(;veE"{9L4gNKKæM|r>D"'|wyU2đIUV8z(BCCټy3FY{yjx뭷>0id2e 3fi /~WaڴiP(վ&//GԩSkh'O}Lmll/#::[nŠAvE>}:i&iӦjgxz8L???9rm0rH6ˆ,XII F/aQӦMC||EEEܹDdك ==r •+Wf͚jOX#G… Xv-<==-}v 4ˣ# OOOu۶m0aB'NAA ՖС?KI&RW///,Z/_ƀ-/o߾N&"qF 6 Fb֭ػwI\-ƍG=rzY8%pqq}Э[7e֯_I&"m"2}EEESvF/1cyXcٻoR0Ob/۱{OYS_^Ǭ#:u–-[ H .?p@nQٰaN:epĉsYv<ӦM3ʕ+Xz5"jYF 6ol {6 F<57˗Wprr zoZ&Mp5&G-z`3%%%aӦM7ni$J%ЩPAB(j+WSbgNY Vk]ͭj.B/Æ ,==W)ý{JU]ݻw;̜sVZP]1K.pM BĠ 5IIOI<A &&Ь[ږгD&AÇβmŊP){޸r =~'mYYYx $$$$ 99 HJJBrr2/M`nn&MѤI888@KKKcfVq3nYKM}PS~Fxfk|%Ʀ<޽mڴADDDobȑ8yd (G1%CjU}Κ5 /Q۷oO.A/2_D֫WȉF^BdRi0- ii˗Z0'Lݏ ٸq#ckYegΜ91..-BzD7o}ׯ`|>777l-ZI*X!w]p.ao#U'5³/#|ӡ=CCC:u m۶EFFFӧOc͚5AT?ƍ1h E߾}g ;MvUn(DÇH{!sdA+W͍G9xnl ^`9hu O?fbbbJSM///o7o,QxbkX,ӧOSl߾ ]K.hٲ*Dr-w\RbVݭsg-.QQ(W`kk۷~3fݻwPQK{2֍?5Bp0aƺ0Vee!%X7 ɦMq` Dڃr'(HMEԎڣԫ{?ǏBݻ!eq`nnm~7nH$BPPfϞ֭[ݻ! K8x<8:C*b"O|q(d2tX+J^ߢ5bǟp5rrsA7O~x{;;}>>>4ibС"CD s $&&2޿}}}U&f˗!d$Cܥ ΘY!?Dy7㬳3.oS]!‘aÆ4Tz###$y=8Ç 8sLFE`_CHh(rrXׇg7V5˗?Ӧ#ufΛ_[X"_?ݻ۷o{ &O[aN:PvгgO;v Nyyz}>]]px<>$~& |.[U~)nZ>0ruE5k`I?޾}0VꨩaРA>_ի:u@OOzzzׇ>//%J T*Enn.ӑ$K,}-ػw/ _eMeRmϤG5U"H$±peDEƍнsg{%^}.) pmAnpqqa tM2N򈇇d秲vٹs'F 5Xg~zmemKKhC05 ԍu>Td ?) CVX2?⯺Vˁb-,GD`=ztrggg<| ;c<9Y%`aaF 4իSSSԯ_fffpQQQxu+22O>E\\\Я_?L2mڴ)SgJ-yN@!B5 G8y$cn033ӧOabbB P###-./_ o͏:d$==CZ GG6im++jx #E;H~IAAH{҂r+` QYθUuԩ'/b3۷/ 7)) !!! Ahh(ݻ>͛]VpjDҧO3q[jRR&LÇyhWlmmU6 65L##:MzrBBNPS'ƞ8x"ëssq矑xn5CCQD b,رc^ׯw^?@aa!7n!C`ĉ5oCy1b fffٳ'zYTK.ԩSt}[n[nܹ3V\-ZTusgLT7k׮EӦM9ǏaK6ݮ];ʭ Q}:<==QP Uc9S$eq7nN:4>}.9.]-[b̘1HHH H(رcv??"gc  EU&aҥ߿?pРA[[[pr)wwO #G/!>oc^O3//(tP76Fs֛6A~RyxM5izmCtt4]+V4hBCCgϞ26*#ٳ'vލ$Gښ+Hm6888&H(2e cݻw0g2AT#^bLD"Yp5@OOV2!@ ]o݂Uhد4S>@'<3gz(;W{D"J܃w  .`hԨ455Ѻu@h7n@zaѢvZbŽ`̘1ϟרlJs1l0={>}: 1aݻw'H(Ɔ p2ATL># ׯ{\pւe}5 Uutd z=}:Z'-,-__DG?0(rJ{޼yؽ{7Ǝӧ#""ݺuѧOahܸqѱ!55lؐѯ2++Y*XYYaٲeϓp$uuu_џJ*bĉVQ2 W'[n_Gm6{f7U@iSt}<\I3bU dVVV>wNN߿Yfa! ѿ9sk֬o˗/ׯ/Xt)1dȐÁejcԩڵk_#K‘Q?0=x۷o'#D GJfk\$p [W"n !!C#0$]V؞W,W7|pss{Qڴiú LѣGٳgXn}6BꈟI&ט>}z'H V)KYfQAX٠ 1][‘i7Dvv6d2G!`eg㺏 RRF(-ܹ3,XYwHU=5jTO;I,TWڪL&w^5jTؚM8feeQGdN:XlBBBB‘PνtRƺd,[DU [ʍʊMlAJ>`7rkx  BI$xp!||PQUvW"lHR;[lŋ1k֬Z3:5k{aٲeղH‘F WWWƺ5k͛7d$B'S3ݵIu( >,sߟ E(=N\x|n?ay J1zhl۶ /ٳkz$ cyyQ:|>ӧOǝ;w$ GrXnL~AA,X@F"*foj` ={X<;';"ڴrg4D~;wĒ%Kj]4=jpuuѻwo0ٳ/^ #D5 Ǵ42N)vA 3 ̙u2AƲb@ʄ$/wGF*p6mH$,^رc5~MlWQӫO&%j˗ĉ((((~#H0o<>|DU[THxxx}|/ׯOԻwxr#b&3P "<-zl1~ׯ^ܹsK4}kb MUK‘U0n8[DѣGq}*%5A֖<<<֯m׮]x- ==b/.nGk Ν8Ӭ K?= 332!χ(++3RԢ,$H !ffR)$U5p|>\55[C|MZZ}r@ߺKH(3SnYgg߷u;w.VWn]fm6l XkǎرcGǏUDac#Q3p$jYfF7Eɓd$$vvv/_k [}nٲeG6M±tlǏ/9KrZ2#Hh"/1))MME~J RRPQvv[6T\ #Xкukƺ+Wm.3wgggS)͚/c]Νȡ{xȭ[qs`65IEؚ5HqDc5Qw*|]F*3ٙC‘ >믿B3GOD"^ Dۛ6BGf/\ZrXphD>$MɦMqQ#PJƩGץ cǎ$@(tOSh*!7aԨQذaC9ED%ԩ.\X<((111T94HdhDlTmh6~(D۷#A?YijjA5CCput==pxbQN.$ 8; _(b׮]_HxxxA+>Jg̚5Klo>A ǯa4DnRױ0#Q۷_HՁLw. 쯿9Ȥ*5##h[X@aCXZBЬW01zzih(SywRj{ӳD]ǎr!y-_κ"J2wԉ~$ 85B߾}qСuׯĉ+ p\ :%6mڄj [ TƺCBnDi zF,C^MH8V^J?.Z,\A=[[;8@zгe3zPg622;c$]vpLKKÙ3gzELdBޘ8q"cyxx8.^H"J0bXٳGlq!<nY~c,|Y%'[_%0qwݤIp D0 @{n8Θ}BDcp|4?ߜ8*??0>|*m} ӧu4QOOO4oޜn Am۶e[lYPʊL&Ò%K5k(SOOhX!'Q1QQܩǏ+n80tv9 HKC[rZ46 zEmiׯ8p c llܸQe(j*ƺ@CI?p$*mHII!D%1ccWyf;ƺ3gR'$YVcaE(2"pE $V ͟""Çp]u 4L~Ç0n׮߇>zXzj婤-݋7o0Q*TE"m#O>h֬hzR?==U<7i NRI|}J#Y2PKLE//_|p1EEh`t4!CV< \G@аX2w#YwCH8EϾ~GJ9 s xI= AmF"JpX#feeaڴiJ3g"99n)n\e05E=bU11-buF>>t*.]Y4dfemp䮣Ê%ϥ, D"{s:wnbzL Ҷm[3۷ D`ӦM0l' & 9r$d2Yɇ!׃Q"{d0Hz T7 )KxpGp41Պz:UکS'-v• *2~~~d[`\S)cL9 B_/)˭g{{ܺRM7g}z̔zI-–:СC? Of?3 B 8hB߿gY__GuYv3y$C7(9gܮ}SG9G 60Nd2 :JuOOO7W5(J1}ܢQhx>Z5Ν!ONɳgaoo)0tPƽ111&D%Yhlmm>}؎ ED$G(AFOhط/cy?qDø9t(d,q8\.Z,Z7oBΎ 899N%%%aСJ"ɓ':u*c6mD&\.c9S>"%BƆz :6d]8p *<ȘW 0d'M"`ȑ8<000P ͘0':ׯ@_ XXAÇ4gNr… annXwU@f̻wÚzguU"X8>x_ [tc ͛cZvǏGVv`ػw/1hժujB̃ @Q}Y}MLMU\B1ݻYXjҴ7++ ={dyQP5ɷV/[sfQH$,_XU`b111xRDU0n8_|]tAJJB'==]tÇY5j~Wz]2 Nj8I5lQQjFFt" [ c)!;vĜ9sXN]v)|;sssデ2*jsѸjQ1`MMM,_%e:Ճc?'CUƺu0p@`ƍrݎz={D@@=KW!c[p,c@WϓhTr͛Ν;3O,d9r$V\KOOGnp7nDƍ3pd8F󅮮NQA,I8D>\ڵ ެK, RWXVnϧ/0iߞ1AaF2=Sy'%̕nۆ:,rL&aԩ={EEqMc,X!CPGP%XhTqqD޽;c! @QEԩSٳ'1bgF˖-qmSL)˄hUQ.6lxӺ5c]r)IU!td39L JI2ҥK`=fɒ%mz*Zn/^3~x̟?:PӭSg.lhjj[aX/4!nܺ m(Ѻuk*,,իWѻwo2R5gϞ!&&"B(((֭ SSS Qpq3;wd=СF9s,Y[n-g~РAعs': ڵ)7o¦Ze' Do2nIGhРΜ9OOOL(:u ؿX`.]Z꽹X~=}(srJF%v11) cclk qm<}KDrܹ3Wܹs$Lwȑ# œ'O*<ggglٲeooObR|>oߎ bɒ%~T۷#00C X*Dzeȯ0iߞY8]vyp!szFph;J7n{c<&&&3f /7 ???ܻw|}}}v#(xNeXl)\]Ũѳ=/^mmm|xw􄽽N>o X=z>QÇU3߽KDFJ\vW RRRPn]cXXC9ӧO1o<8qy<ڷo^z_~=MK};vD-P^r?)) ?ƵkpU@̒ ٳg]]ɓ0W]#W{@¹s%MLu۷omll0sL֨ {-m6z,1ydrkS?u޽/+e;I( PXeXd)Ϛ)ׁo>{q#,3 k7n"=#-`O±qssChhh 6`„ driӦ:;p1cƠ_~wd2bڴiHJJs)z@(B(۷x2223ԩe˖aѴ(G3m+Q|B4Sߙ/^4ˤ˲ep>: QH$¬YjժrMZXX`Ĉ>|x+#00Ǐ/5('4h{Cp$H8s qǏ-8p &Lgggj|ݻwHHH@zzz#""p}deeA,/5j,Y:uЗ)gZ'N,Qǎ-L 9Ԍ W 8s Frm۶իѪUJ!JMMŵkpe=zB=z]`llL_ G& www;wqJ!//6o\iii000&tuu󑑑D %%R+D@@@1uTӇV T5k &&HLLDrr2+ަcǎwrssk=jjj4hΝ[mDaK{@~"2 F={ŋ6mvYǻwݻ]]]n5̊v~hii!==BوūWϟٳg0433Ê+0l0p8 G.[$Dٷ~[.qrѡC 8]tAƍ+ EHHBCCqΝ=۷/1}t 2W1\.Z‚ *QQQؼy3YcO?~ʻpl2Xy۷(HMD$=|.MFB oߎ~~~xiߛ˗/2KP~b͚5DdB000 c]pp0 RSSѩS2E>,X8\v ~~~hڴiCd7i?._ɓ;vlϟ??lܸL{bxzzԬyaffyիWu~RXWsss;AAAAQAkkCeE8#C4CZ)۩wC(۷ǣGpIlR~ٳgصkFQk׎'99;văRcƌ+;Z/⧟~Bdd$<{{{E(pܾ}; RD8p ?z- W\Up777,^W\A@@?^f.>C~)S`ڵ3gƌC>U޽{Wx[1RC[[[cǎ0h[y"jkk +ptqA޽%#Ce$-245aާu⫟>>>۷oo>l۶ .\1|pׯR G6!/ Cb͵vrܹ3:wxر[lALLLeX;vE%ԩN:U1''BKKKʫ°IWw9\'&,,,0}tL6 ?ƕ+WpU!;;oڴ) ///I8}}}dff+œ'OjlM^ (5z OnVr1{lL6 {2///˗/m1U ϝ;={V(`NmFS%#qNJw1:Qp88;;'OX,FXX+#>>(P(Dnn. vں( }$ ZrhӦ .\PÇ*-oO<+WK0@PرcXt)BCC|ߩS?`̘1Xx19WOOO9s;w.ab+fdm }[\&"+Ie@/cϞ9prr18PD\XϞ=SYd2?u_~r+߿?BBBp9xzzXM6޾ܹf-I8_cyVxR1iVV1 HAfH8~Ν;q%:{{{l߾]Pv AAAx"ZhQ)))9r$`'yAQ DM ̰0nw$_bܶ-u H8Duբ"plL6NKK 'N¶s Ŗ-[ʕƍpuuży(}G9ILLw}WaED-c8Ӻ5u H8Duaggǘ )) *gHIIa?>$V$x<ƌ,[L!\PPEYχR"HTX8VU\$ HՇ:RXz5c+&OTqƕ6** ݻwǰaÐF?/d3f YVCtttyfhjjp$F88f3*,%$(xJ !9v5k ==꼖2 RRD^&&&ذanݺU.={ Okٲeسg8n݊QFٳy?)Qssv ss˲dzXmeu JA(p>!:BCuͫ_E}cܽ[bEBM(pc׵ҵ7#A$ ppp`,Tlذ{h] 2H0 D #c1@ML_BBJ"GcFaؐAu_V۷qѣGET*-ZiLF} KDp81AFW?B,D‘-\yi H8DCٷd2:tnV*HPPPwq01m=XDуY}hkPPPDBF!ʅN&tn\J޼DfX.u H8DM`mmX܁O޽.ژ#,i$`XI#UG𵴠ajZ$ [j870jFF H5A&M˕}#GaQPR",Qa8 #̄H$軄'Rv泬6jCA H5ۊoU T !mQ%m]p$H82PXΰJA‘ 6Geު/^0ATp$㘭dV$ P0}L&ÁG<>߀iiq~ݾEn?xox|>9Ғt4\.P4UW/)23QPF A(ժ222-W wsqe8t/VqaXbP%-2 ;w0;99A-@p\XZ"իuQQJ0441xeX8$ R) Yk xx^B4~hv&SH8m۶@¡Ӹ1pFERQ&0 g$#Bҭ;Űco?= R,cݦZoC{쁑$''#))D@ PC >>>}z̽A"[0wv#% G?atGZq$#;7kR4qA7n;.)9m؄Y~:<66x ;{%Su5ea-%Wr[[[3D&$wtVՀ#AB㰷ÈaetV5~ȠUr Q39rM4sa޼y p͛7ABºUUVŮ%=%Bֽ[`I櫯y3J% lmbPܳ#~uƐH$̠\PN=z*%KN: r[[[ Dƍ޽x aNtttкeK_*P+K ϊyw}z:дImSTg/^ -- zƳ׫[8plm*5޿C#Ctfe  SS!)V.AAj*ԍ\\R:A$?!0oDd IDAT 7ȖΘ?k&LMj'EG6`eh}0p88a蠁n}:&3ڸ"'4o߿?,Apqq1cݑ*]| b/_{x<гGw|DD+Waff CGo{@]M !2~NAAscG!+Ř4uK#`/?C }|||0w\,\YvB8ʃp|.WW^~A^cm /_.T͝wsu/ C%ST/H Jkag}F||^̹h`n^=ye]Gil'A( j>A}"ҥ>Oaֱb=h*AJL/.-҂ @ĉט1c6l0mZp!7n>|8&M߻>C'' /?jAOyޕ3룋단7ݔEY‚b'%Q$E3g`ѿW_`=vµǶUV H5N8r)S(T{u2W˜pvvƦM滕H%/Jxpuv;wLl!SR>P[ x9*Ϋ&W#)9yyyx )?ʼnOH@/ `YDEG#//CP(*Dƍl'A(ܠCM G+: fG/c B e}=z4mV|̙Rxyy~Ν;OJl'CZӳ,-ڭ%|>nDP---hwNp06l ~;p?q^k(((@׸}. ah`ous`Ѱnݾԫ[}+ TZ; Bhczzx~}Z[+LUƁ.pΦ@bݿ8P KndݻDd$m2F5ӷo_?~Àuk+l[&_ G"7oJ8phoxL4!444(-Q.ϙgZ/Ew࠸c p[u;wFQ<|oʱN3ӻWeBl9 CD i*Tmсc:.+VFbbb{ !C`8y$1Æ S`8A(/h‡wOoeH(/ Qܼy}AzzWٲekhh%U>Dr?,«A[[NWW5<zzikkCc<kjj b``PF]]?87nΜ9DR M6źu먳иZ5$yy%Li~>d ဧǝbRHnRܪ\QmK jahhdAOءĹ5yBs޻w9x0{H8AT5UK"@ LLF jMjL4:911Ȧ:AT#H-~~~É'X4-,,DNNNqYYYEc!dT'L2,Bd(^T M5A!m18|>4LLAp$Tooox{{GŅnӦM=zt<8l<33R l?-H$*EAAA=88AAA%O[[bٟ B؏Y(*>qyR?ZhhAX\#Q#7w!j۟ Q+Wd,755Ő!CJkjj8Z9?''9991cFE2Rتji8//D(rJ,lѼՇ.ٸ׮M}|Db9h2<+:P' UT -s }OCϞ=1_q:-- G G(8˅[{:彽鉌gJnsۖ&*Kn\NA3`=v,}Ap$E`ڵ50aѣG3 ǣG"==FV>Xd1dR)qVgt555UL&T*ňu ѶMK˒@*;@,CXLڸZҪ#QP%J{Q4@S??=Έt'7at4AJN;ﰨ.,mDA{ޱKbb n5&vlXv""Ezg!1*(eGg޹3޽3UUPILLdÆ jmC ʪPշe۞Ʈ]E`ld *:PDwѨRx"_RN-^)+3g#<<{Q(2m/ԭ[/y/" ~YvUnҤy3gs*%ܔ@ hiiʡCDc#k֬Q-U"0vBW_SSS],H_ODk1Rɖ;1v]3qt#"w ;vБغcþ 4snݹeW(]>},\Xǽa_ΑPT(U*bcH3 mʹ-SljNYw(ǞB4 /_ln.R*2%vEZ$pٓ | >>KٓJ*z1B۷osbGqjjTXq.hD&fE ^eqeիVeڬ9ddd~z.u u: )_ ?EbjQ̏g2ؖA:.WeGf8ljp2YR)>p ںH/CT2}tFK6~B[fֶ͚hѢ"/W]Q4jٚN=?!5%3~zz:IqPe=}* ]ctjʕ07/`ψ! d2IT[y.7kӗ)cRE֧WzيjS29%yJF7 _25mZe <%p/ve˖|R4;ŏ?ֶm[6mZiܾ}H[:?S>4oB"4T**UUАjU\ ~Ndz@*%55Зa(J\=\ cAJJUIhZںoɕo4 /Aa&h ji:fL,.Ί ʕ+4hЀk׮xK-ZDBBZۼy }?sTU*Uuhggs|_`e(l"EWWoDoVe„?Qw~m)))|g̚5Ky摒ezΜ9E<Ǝq ˗i߳?1;g|HLl,WDw @#" G|,CCCt?pAqlںGը,q!D'ɚ>Y 6r_Уm`QPXQ3ZS5 <bSo/U*.NJh?@ p wFży۷/ɯ ƍ>Sj׮]dRZ-[bg ףrlڶIcРMcpRSRq?^_}9 7&bogN7a7թ̈́)~@P(HKK#66ORQUJ%abd]2$XD[V*DXOձ@"dxp+`nnT*E[[[tqkw'빱3zA%p*yy>jΞM)>Y~2=uٛ[c@d21'Oj,wmիE{C )r^L9sxߟ272RB,%BR!G@\BQր}c\)cY}5f*Pј@?gn#Wm4[UzUt@ (7**;w100- ]t… уgϞih(ڷo?̐!CJ|%&&jhllٳ͜9]v6vXnܸV%%1@;[k6%0Ăb}B3Y՜`NRH$YAaC%sGÚuJ0`@_Ԕ=ٸjX֯O;1+p̙p͡h\Y&W^O>;wNmt??C bIdΜ9j40k,5ȤI;wn6۝;wXnl077,HKKC.LˡT*==7@PyMjm5f,ܰ֐'8hk"_;ӫKU+3gň[^ĉ :4r+Wk׮Ǘvw+5Z*cǎ-8ydھ;%eD}}}J*E2eΎ2ePT)ߘiHFb"w Alc>3uqA2vez:7nB8FMؾa=92}iUh@3zzzlڴ1ǀǎYf&f^QT= /̫WFWWȟ!/Vk=4JF?" HPk5oGm|}aոZcD !M~G_5~"111c8rJcz.׷Ĵի50VZs߿?M5@޽" x|- "+wj~ E=˸9 G}=={}wӧ !C>;:tgggeر#6m*ɓLMMYdI{_bƵgFҸS IH EɓQq68v{[$kz'B8jSvlc##˶]E灪UrZnL&c3&|E\')))jsΥlٲ3fZ۫W0`pŒǏwZ㧟jt;;c!Tȁ3oKrly Z4gͺ̞PmXXX뺶+W駟6rZ[Æ u vyfΜ)n@PpUs]G ]uSI B8F,=)s9}1E炎+Wdݺu9_iݺ54122b۶m:7ox/f׮]&ņ;sVexsXp[wvMt@ ]٭+ޫW.cĨ=wA@9r$G\c˗/ӴiS>|X7))!CP(G*W\qj:Bf#F_D#* J%BPs~Pk3rtV bVZuB8'U\\⽖ժ3٬YخOڶm˕+WrL?QF={H_~ǏںwΈ#JLO2n\RSSҥ 7 PTT(T|Bu\>K ֮EȨy۟nJW/d`v;]^X"/^yҡCo^$qʕܹSooZZZlڴ *GGGӡC~D=_>AHNJQP3oW9~)e;u*0x05I))Z%:X H|'?}~cii}XF&ɂ Թ]tI&ioڴ2eʔ>ȑ#x-ZhPyģ142Zz4uHSTUC##=͋  NtMM|y?iҔӐ[2p*II[x سg}]/3f`E"uË/ݻ72L/k׮%ϫT¶mVk UVܽ{U;?x(-wK>v [(rGAmpthkkcljSe4k: Z)|h@;Ri"s.jsgK\DB8 >2Æ ѣ<{LסT*0`W5o`1M dFѣ+W(S(?qfXSr IDATё]:cS݌?hTT$'*굳q^pRS˪?xfZ9 ׯW;W6ubj*E]@P MPi۶-.\K.-s7oαcprr*4u8q"Z6v*T- L4 Rɔ)S3223f .]bݺu~ٯj֨޴IMMU\~˗bW,sgSv-'{rx{s(Sښѩ}9~}>q=`Ѽ94,#8s2 -K "-_S֡.5j௿K.-C4i‘#Gpssu^x1?h:Uɓg/ŋټy3[ աs,G? KTT)[5zݟ cllĶ }cٱx\RNeSrY_G1fWؿ^'dzuϤd]ES4 qؗs" K2ܿ}=sx_x޽˕+W8y$}NNNmۖMҦMȚ7A4.Gk A8j4S|9ǎLOI;w51@ (Wb-9Zj?j]oT n=C 1ªƎ˞={0[sڶm0v8fN̍7< >kx).طwNO0k[w8W]Y[< (3rPtHEg'R}9|8BR(S4?,kSYzyvSo`,=-s!\U;w̷~˯/ ((ooo<==^zXh(\5X NNHnJ-98'@ ((q1 LRRݺuc`ذagZjźuDg恾}rرT*۷oՕŋx$DB6پq=׬ޞSs!^DTȷtco>{._@tL,iiio{SDATt>9HNN)}G:[}Y~:cǎ!тGʕm٢֦-|^J*Y4>&_ pرcG:r9ÇJ>L5quu~COOOtdiժ׮]nݺ)SҥK+ըVYӦЭs'8@Th&P/bRSS>j4^E1s0ḲRE\bbl fس{vq跽$00ѣr=wuoa٘ $W8۵+2 jLQ q[gIz$-CvJ'\.իrexFO@ʕqssݝ͛cdd$V cIW^?~=zhtOܲe ر#DwOؘ̽#GPjUY@wfb͚5y ر{/^"+(_']6M ?Z̈́)֦}6ox|% /CkNYHoiV~<!JYJ"##`ϊp"ss +ܣr՚QQ]-161EKK:::jՊvѺukԩ;/""gˑ#GxE^{ƍEd̹=I Rk׷V8隙|7FE#H Фs!vӧILL|}ӧYd 4nܘO?P0JUd=a+Z@u@}oi򏰰p^nݣC9D[ݻwIFFZ!]\(۷0aNʱKRG,#m;ؕ-+:-~TUܙD@[[U=y> +{͑H$=~ܾDjBJJ%աT*x"۷ogyz1ˋe˖+.R&ln8.ӣ͉nٲطų]h/׷/MwD"Q[+سgYOO.]_x/R֭[:t˗oDazvEzn[Dj8wNNNҮ];bbbxVbEY&'Oחf͚)f-033]n]D$'%P(P($'%)_BGW3KbeeU`*Hh֭֬#$$cmm^r%yӀBFhÆ!!s g5ڟ^PhXN"۷o3x`W?AD#d:pmڴnݺ۷q/_ .~={ݻ=z4UTB80v\r͛w{iP2e ^^^#gJҬiժ.\|bGD6V[aQڎd uHNNƢ&B[[;k(affy)˖-T.)hܸ1LAFÇ_5>m *QRgR&+|;w&#!A\DAڵپ}; ߟ~Ѵi|cf?O>̟?=z`ccC 0`k֬!?9Ʊbcc/ݻw8s}Znɓ'qppe2Æ cΝqڵk':ӰaC~"##ٱc۶m֭[aGO677ȈLҲָ J144DOO/Kpe0a|رC/h޼9,nX AԚ?ĵDB-[1e"Ξxnٳg 4x]p!ӧO`Сlڴm||<111Ƌ/ %,,m)))}7nd>kŌc F__={0l0o߮Lpp0ZԩSjѣ?XL2PV-{{{"_< Q [jiiT-=8Fsww͛xzzreRRRի'OiӦ'xiPj(N={Jh12q a>>jbb8ӱ#ΥhIĪʙ3g <<<ײڸ3h 틁;V^ի3|p_ζmصkQQQ9~ٳg4mڔӧ3k֬jy+}HZZ$%%ŽZZϰ<7TB<1Q$k\H$FXZLӘɉcǎQre?L%%%b…̜9Ssjj*=z… TRE\4"5w}R>-mT4chHиT%ss4^:Dӝ;1PA4\ 㧟~bرs0j(ƍM 777-ZĆ Xt)!!!r̙CPP7nsL\|JRRѼz(HII!>>,wݴ42yGZZǓF:%B!OIɩB!ESMp,$?˲eԖuP~ݣbѢE̜93G rС\# %휧O=#FP4:::_akk+.w@ǹstps蚘== WxvrQ.q^=\IRzfuMWWc2eʔ[/// 6nȌ3r}vٻw/FFF\zEPPAAA<} ::|E]]]j׮MÆ iܸ1yᘔOrR"R6I $%ċ|Zt)VVVL2EmXڵk... ^x=zpQ\2 OOOdjN._Lչ~\_HRqrrRJTTʕ+B >F>-%B.A"&- rg2j(kB__u)S  վ|̟?͛Ӷm[X_mh|²~}:]΃e˸3o 5+??teT:݅/(J<<L/JO?Tb}Z;vXNԔ{HD !#(z?CLO'0_KB߾<߷yrh… >uttXzٳ)_ZۥKx%'Onݺ1g>\ćni׮D4 .]?m۶e"`ƍnAAAnݚHJ2eK*fff|jm{!5HE'O8ӱ#}Ѳ~}:߼I9 kCm4پT+W++|;wڵ- ?~޽{ڼUV:_CCC-[]qݴmۖk׮w^*W,.BGz},JB"55tR2rH.7={dݺu.]:mȐ!$%%=[n>}Z P4* ^?%U<}OWO6ؕ+DVlcDzl2&!!Cѯ_bw/YŋQXVKG*&Pk\1XQa@* HԥKXA(;%"xy/¼Nv<~Im ##b_zi4hZZZۗ޽{o۶y%\yㆢ>gҤIZޞ+V'X믿F.3n8+WгgO9]4T*B?#Lu; IDATCN-ї?=-{7 } {}%Q>>$u_a>>W*$\/DcƆ~Kh{tv~177YX۹3w.$…\g=zlutt?~|>={ֶCj===ꉨͅ|q\i+ǹ# n <2J%&&F$$&D=(k#!!!̟? 6Űvڬ[ fϞMRR˗/Wk߽{7^Zt@O=!/5xK ȐgvKKK}Eܢ.]D|5h-c1úI4Ug/z稪 Ҽvm, 77̪TAKGG4عsڵ޾XD"S ]Xxq *Q!@:u\{RRSy9OMjz:4nP;[@RR˖-cŤaȈ3g2qDdҥDDD9Xf o] 'ѨWIӣ]v/lER8F? ;y2O >cU'MB+nbT}"5УG 7^?LCNHK#e._~2]BIRə3g\"`РA̘1#PݻGMZRcjj* Fnh`@*.T"Z`̜93Lvի)W{_KKM6ѣOV¹| 6lip0VnՒF~ddlW_bSPi3>'OB͔ddYKLikDT7a>}~C5T]BRn^ `RcǸd {e9: $HM޽QD^@ü8tG{T.]"ҥ^: )Unn׮i*gQ$޺uKm{zQ"9;;;4i… >kp,AQu5-f/ *`ʔ)<þRJ|t5_뢫˯J?u.:ȷg1hڝȨ(eYe? .>&]&cŬoNX㽞Yp>Fl۹_ףvv,^0Sg|TuuűCx%ƍt7mfڬ9tuurg^qamڴQƍd2 qDьDw& 3uuޏ?bۡJ8Z::qw;u/'CO$)}}ɈϗSRIiҘU U+FA14մiS J̵֦MחoF܌%F8a` %>>QԩSL6W橼~-cǎ-(>|-[r֭lvLF߾}xSBB.ӤQ#LLL011ɲ%$$rq_GR|f_M8d2uVP3Fs࡬2{39p~@rtҙ*.=>Cxe˾{I8;;cccCxx/r9O+W䩼_~%sz-H8r5ŋtڕ/bee%:[|9fMӽKgJ%N˻/P*Te8q %>>ج}Tu` k=vB8~|\]] G͛vGEz:/ᑷ7a'NL%զLh{ikcըVQ} T  #쵘L@-OI! bnfӖJ1([c''0y=sBՎj7mڴ+W4i5kkkӡC:BÆ ͖K<<<*(ގOD"E>}XhNNNvvv>|͛f4ѣGՋSNcc)7RRRDO/͛>ÔpS% abl fﵔ%t|F RRD"ɞ](55FӺeK{ƦLi~;%˞S=r3zӾKpLNNfѢE>}d20x`x njҷJ%.\|"*G tѪ$g̘AӨ?hVZػw/ݺuC.g|lٲEtr1[wʶ.;8Uο\֮MڵyҿC** [[[ Rxrjogzud? $>>_祇C]=s k=e&v.ƞ={r)]h7Uޔh1)J.or}Ν<۵LL@Qy=!;;/_sz|t5a Y\7yScg- K{<lͱ.4(?~|"Cq aɒ%y>Z(cI9gOf̘sJ*`S(BwؑkInݺz_/tЁ~a|,-,u53gt sy??֯ 7oa bfj.?e:oʔ.[D"..W7ҥc/93akcÞg--,IJNfiݲ]Σ'OH\}n±8޸q#K4\~66SD%A5s޻ .]Ä:D:u嗔8CCP| ʖŮlYu!E'\N͛$>AA ,rzޛc`cU?BZtֶd=rcݺu9%:tRuFtggg@&OÆ MV ^9… c9Q\9N-dyFÇYtZqVZ JY'~Z3NIZZ+:pl 1) sYΛ9yf(yB*ǕDFFbiie|ÏV3a4tttҩcLc9F9vFեazYͭS=wU8p9hҤ $.F\#ϟ羆ې/}|=t>>R'u!\3%IŊT㧟fmVfd1 @ƒ2 yRR,6\oiLx;wf֪U+ykV\gha51$KÆ pQ _Xd 0a_|R5y -ɓ'߿?M.ӯ_?^JPı̚]T]Y[/Z%X"ag2O$TLϔ㳶}9bX߃>ϠS=6{Ͷ<3}'zz4t?P$Ə͛mmmٽ{77n=z(P6QAP'u^H "?uXTww3.СTACY*Utdɀ< =#)8e!^%ONFLY:/1P(ܹs'p.]#ǎjӭ?~ի~~~ * GPThiiafnGP== di= *˥\ݻG޽i U"k׎kxkXY+_~ 4bo"5]㕟_$VQS'* ]nh%"bضkA"5,O3go9JP>0*clle1114mڔ]v̙3v7XFFFj'kH:vǏMQ؅D" ʩT*$b]uJ.3fL}1;x 4PM4!񨅖,*7Ǘ%]==L,)eY:k?A@@-Z &&&KАt/^رc.翦n^h:V < }]#]j^ޱ)ݬ=6mi{V$EyyFSсy` ,e~)qDD͋K&Mݤ ?JG7E|>|~">BKErXgT^[ʾ}0yd B!tuF HLTP]}}ucիJ坝1w\3A9 BTT2 5 QV>>pxdffؘN6U@̣2l6}EHPũShpaG TH*˭y=z`hҤIGӭ\]>uZna//zyщJ6-Z0c?~R%>3 nB-кukD"oXx1c]J/Jҭ]RGűcN:MU#Q;hjjbXx1ZjQvڅQF1O>~~~!Vd2ARA%K`ٲeQ;tƍ ex0n% akk:pu%477y<NAa8z(>|{{{ -Ru߽{щ1<<>>hѢ + w-45ǫW O899!((ƍSAaa!˘vYeH$ě8rioҡ  M jT5F (³X[U!U;hlҥKb .=#G9s/nmm$';v brO'HBBCC|>\1ӧO?\UpB! BK ڵ+277o~]?>Xf`~ϲ|/D#8t4%K0:!ꏄDX,*L&S>ZZpqrD^~~˿P4aС*nFtR{iLXAT3egg(۷ ]vtAՁѿ4i666:t(֭[k׮\Ucr+T www|yB'NQ(҂ATH,JRe5_\kiiСC*5~e#Y#Bix<8QcJ72a„ Qհ$[lAHH̏ZHŋqڵryؾ};fϞM UϰX,E* " ֟|?o%!-K?7s#m />o4ܹ3\R.}ʕJ bccp] x.IHR5˟Ra9j36@?+?}tL4 7n@HHXxN8Qfd6m۷G{#rlݻmڴa4Xx1>NK} ;jz2 Ndd&:C_OܼB7a--ۿs̙3eܫ5JA(wrrRxaxx$t t2Q) ~cؾ};/^`ƍ Cm7\1>@FAhee1c`̘1|ܽ{QQQ Epp0jlE"_~@qH9777~~~011it V^͘iӦQ#FLCG {/PcR'C.)#=q*RI5oƑ#GvZ\zGQÇ> ND *EWWf۴i챯\1:t` ܹsn[x5p5zL ڵk1`4jmڴipA<{#8*ԩSqQ;AQC#yy{1ڄJ IDAT)BoF`5L, $$$UXGrWOl puuUgΜh[b… o޼ٳ+?눈V~/Dw"##寸3qJALL|V]vEnЭ[7XXXp$ڀfcpss@ (?g:::XDE\AG??D"\L±Dr_=~V@?d?lЮuqz5k0w ͛7W=;;4=Pq~>_@˗(QaF}[!H ElMMputG[mmhCȨ iSA㽼УG\tQ$5 1k, wwx򂗗r]W\\BU%55vvvrٽ{w[J‘PiZjŋcɒ%򒒒qF|P"(Hpz0V} X{EeM2 Çƹ 0֬X^ ӥR)>.!++ m۴sf9\ P˗) Db7{v@sۆ>VΟ?L3ub8osX'HYGUٳb̫a*G7A" $$%(#C¢s34vӦjܸZб(ָ1XxbFXPP Nj0֭[q=Ƽs*7?c,S*5q}7&GDDD7o=v®]r`Ȑ!hѢ GPϟCVZcǒzBjdHRm PT[ҩ+?mÜ4cz”=šCKS[/Ea폐J`x"n˅㽘6H^=§>3~4 ŪcQ~H_pg{ThH$ ZhÇN|TȤR>yxH-Deg#ѣ X67Nf-}5Nf45-Y@@z쉋/;}480FxlӦM1c :u*.\? }A>}i/^@dd\P<*P|7pssÐ!C0d899p$ꠡ 6_~ ME+W6 --Mxrqзwrۿ^TTE Qu>A,!c8;ߨ;3r8:X[Y!<"l_HK&ŜO vl)1GycWpysTu툎f[`JŘ$ZG99Hu lj*m _FP+:m ..غixx0.ř>}:쬶M#F(taTݻwWkcM`cc :@[n!44/^߈Ftt4,Ygggl۶+yU%Ԃ}y#G(4 j&(pMD@BnuF555}?=K@&CK{{y\")H@dTѾ"-6E  W8J2H2<|#/sʈQyq=i55UUUIKKҥK󬬬H?A8?/ϜA̙8ۦ NjlR/\ Xt.[Cb Eװa[D|Ǐǜ9sо}Ŋ+777O*q>А*6lٲW\A{kR)-[ӧOS#1LaÑ_+Wcʲ!U#EGU"T b9#~?ƌt>vm㍐[ѥS2޾S k/dA(bWshC7Ud/ŘrJ9ENH=w#-8\W8 ₂*{eoccѽCpqÇÀp%s8g8q1OOOOq:t-[T㶰a0lذ/'ׯ_˗qeU{!((| ٳgۛ#AT=M͛7?^o ?gnX2g7%,!p~ ݊M6$ =!1}}zz? nWָp|/džِɀ=}/?^FEMرc&ԚܧOx0AN||ǃ%tݴ)4LMKfbR, km$r) ˃03¬җ7o {pqoלbذa8y$jkMl2lݺUaΝ;?XY 0 Pl˗/HNNR}G#GٳgcuFɧS߾qR,\w. Y&oU'%1h,,,DȭXv]H$W[56aиq#޷7B;bw7ڳ3033:/gh}`uM̽X]Wp1x<vء&PQU|8v Vׯif֭aЪK=M΀SiWk{T 7(JOGaj* HKCWyW">Uضm&LXܹsҥ Μ9SG;L&üyae&OѣGשy;wԩS8y$U=gao1v:5 UIƍ1g._۷oLJxT58$zhYl`Nؼg{|W ¶_vE!HӮ6+KYQ.&G;i EBqAAh4hPu̝;tQj;whf8vFa߿_a]صkF2aÆ1,7oބq5g?6>}H777l޼:u*~]?>øE/7 ]B"BJꫯN:OR#)Arr2͛:T&DPjRb02b! $3c1۲L] ͫjff&P4ĉ$ 5P28v ;:"xРjFMSS؎`pj*&$a5 ^^$k&M`ھ=  /5pYh,ڵ zRXWNNFɓ'׻MH͛ŋ$leo  66!!!0attΝ;cHJsCjӱvZIH$ذavA>+V_~Qh,L^U, SzB&Kęd)'͍0{˗/ѫW/B| [f%^ V-63*vhiT̬,猌́C˖hbV1}J̘1_w숐¬,A*CuX Qn.ĀC7\։߾Q_~ HTiYC''.^fÆMΝ,s.\_~Rm[[[AOOJD^^^xǏ#!!bqwiuƸq0x`Z 7n5s$J9 QP8'M_kH;Vo8C fU+AR_8RSS1o޼JY,VXŋ#'>g\\ ShDn.zzD!9cSiYKK;sq]L>oV}ի1n8  66&L@DDD;w?KR@kHOOkǽk.̜9J)۶m;x@k"xhZn@022XD<~y&B 6mRuDioDRa9&Mv*؍KD͈Xӹ31vsCSkޜPD\z׮]í[I%֭[+mHb111UF "77fk7n@@@@:ޢ"L: v؁ÇcdDݍ>e4k.**ž6 D;gcF033!//_u<AAAXt)tfsw|Reummp!9%!>㢯/rj.F{nK“'Oc|dee!77Bl6[~?622BVj2TG4ѥK;w\pqҥ u (MuCxy7[bQ|>FXKr=z4-ZVZUi[Etn+(xf ZL&@ B"ƶ+VoASSp(A ; ޽{3?cff&uVhxXn._Lt}~Tbc@I  cUad/6y 8mcG 2[3Y,xnL fC>}0k֬rGZZ4y)_FϞ=q}e5jMGʘ>%%AKd]=zBMs@G@JR܎'O `kӬax9 ÿo]o[WX,bر1b?N9sx כ1!ra}Ѵ[7UG, űcH8xPh+/E Ќ#`c(&ǖ޽{W(۴ip%yz"n4R\ݹwnJ ۻ'F %6v8^$%_9|( 7Æ`!BXxDnO?-ZzЫW/[O+鱗ml;*b066Gpp0bbb8$$$T(vVZUVw:LG6 %\ >R}x.^,#P `͡kc=[[X[Cqc!E%/ |1vhY QtkP<HÇWGƾ}CG]bȨ;hQwK390+YY062T&Cwᗳ2 pyT*H,n0mYVVV;vls933yyywHAOOׯ--.^i ëaտssg6 h b6<0<[S7N ##$H8!Zz/Ϝa3tvo #AԡpdΝ;Dj/ٳgO6 ۶mJU=nGFЀ%WLD LZ^\p9H$dd`1ڶi-Ә VV700pvlE&y _gσfɱ [7<.7n 7/:::rw'l;:Jۘy{ۻXOȼwaaȌFփȎ8$Mn#f hfHO\ʺ ֧Y:T QǴnݚ1=..N-oXcǎACC: au~eo\.:uG7O.;!s'yww7xQi T*$\xzD yyy OLD^b"Q5+,Rwxc8}5lGla1]-Ə Q8991'$$_~?3cN:%__GD-bֻw֩׼97WXD"@-޾0#{QFdb1Dr1I$@RTT\Oa!$A*;5oAш۰֡I`` ~mfDFul'F GP6m ---qo¤$i&vZ5WA|8mW1jWy[@ϑ̻wBWJ|~sOA8UAF27  X,򒒒TR8yk׮U(7nHKuL#4ٓB--:;s=Bŋxu"^_PXa=Y11nW69oBBӭ  2 M*hw}Ƽ;w¸A|8n+W6x'.5#9 NIdž &qwo>} !]Ƭ&ݺ B GP%7n̘r={0%z\]]jj٨ bcoty={Wc}3R0T། #ApTC$Kp8 W BYd2BKQWl}<~ ɓ{wWcSNɸm[8: HczvvJgFF~7Ƽ'Օ:PdJ}J!-LB/8޵ {* Il>1|ɘ[A( u ---8gΝ;_r`HZ1e6HD4[#:8(I=iR2"gD(\_ȫA$ Ty(ɰw^ƼÇ9NU8 _ шO-9M;}@fv.n&`un䒀$5:]ߺF:qrsӵXA dJ4H444T^8S>K0p(tcOľCcOj}?&O_vi|@KC"]~ago![)YRdI!d}zvAbz!}|nDf 0%:$cXlKA$ QGE۷Z_w+֬Ğ;0vH4wpqrlz϶FC$r|)2HeTe̗u. ^J95Z \.d{qX1 Uy@ljcByD?&Lm': G**3b󥥥#Gu ƌ^F4V.زg =zOʔ Ss>:SWf͝c,#;cǣgzbNKSkxf" Te2d>&o!n[$XQXY7ñ4H+ưٓ1/<&b;A4H|TQ _ݻwZgO1~lfx<.,-vװbZ8;:¦5rss1w3s:v>EEų1\-޻#ClsYp ym YGsLU}>`q/ߥ MSw5}}}V>"ŶMв%g%цAݼ ʿx/q200jݚ1=+&FE\ >jxz0mڌ/ǂ_s@GVP4(c]kFo, }UvӃRRSa®Jfeeҕx)66twè&/vԗЪD43R>`ʟc$wT {u:G>WpMed4cyhPkj|ضq=5NNֆ6\լغGlں׃oRu*%...TvgXi*mWXXf =ú+Ҿ7*6ž5+`wxIy0SX꠰PAU*.=.cI24աQ# BUX266hkKff"'>: @yM~ gZhkVb͆MBCQGfCBB;vl3ßg"c{91u BGG,wnnn7ص}+CB+WESH$>> X.\Ĺp1H$4FeFyB/YS=sk7}.5VX 31VL1b-[ڣ=U`P(%tlf M4!vnʜHK}S8ZbGU~ 22|:!nzF( WU]x2zqTu1)) 999uuuѼy}zD^=QFb(Maͪ* ?n`.j0bcx<f\0ޥ1/@OCmCCCLTz'?91]Y3<&]qAAtaVRϝ'Pq Ǫ>z@ň=PAL2gggl8ʢ'1`bBof 3p5߈ P\~ \[4OZԨxEEcm:;)3xk$Js#ܞ<۶1n8{6, /-,,"NNJOHH{$TLtCCzݯg{_8Duc頃eF;&p/xT]ѫZYl6l6D#J.6Xc<\OwT(JO˗˥7j Jѯ.\px2;t^ jEz&IJJbLN#>Rhll ]]863@ Ĺ˅ttt4M ьhciv۶o`*<۳RkG(tD5Yq2S\v^ j!DJ fjP JMMKg555addsssXZZ022fFm$T ~Dc5؁4o88y&&t2G###,%^BS|[,U UqLV`eJx! 9p{9ʑ Qvvt> ]\T~uml L[5cv۷X2AD)ܚs@qY_C]гkWؕx|._?Wc_SGVPG>CPzN#jL<%X,d2jofL7m,GmC;wy<I$xycZAV;t#|dX\.?_uA!>‘ j 2LR)D"Ql6;?SbΝUFCC\MMD$=4Eך0ܹAz y_ox۶UJXrr{ɑ$hA (A(bܹسg މ#{Ǎ?+U^*"**\ɓkL4͛wV :tD#A bLoҥ xZwq~rC·oSeNa!$A9,0;(Y'~Xgw3VAJ t./',>H )**l"ĵ`׷T'-WtGѣGk~Zcll+Wbʔ)UVOO'NN=vލÇWy[???̟?: (+R6B|$!I(T(Dԩx? j|%y$ `\T ugĉ۷ѱkذa1cF100CQ#jFL\$=w#u;Qn?A~^A(C?޽u&j<,ֳp TI&j4H=l6۷oG!U?Ǹqj}6l؀۷o3db֭N%,@"#52޼MsXA[WP ~݇i&P#Q/Aaq8h5{65A;wT'&(D[nǕ 2t:P$¾C1rt} ŗ\3~"._V+q,";v ppg`;X$ij!AT fQal,X[Czvv0trEx]P[yӧxUSЌ#`Xz5N:w<住.?^+aggO>Qhhaa_~AÆ-?gX4o.,ȐNZ@&A*"5x< yU|#͚fӬ#Ǡ 3U.hk`si%::`kj232J8%X<xzz{'<WW5Gl puuc:_ BU H45j+V`̙ l۶ uo_|Pݻj.] ?MkW1lml%(P4x*v7Ĭ1tJYI<LXg(GS9Uf/t.m]ZNK pDUbfn9!<!ETP~\]]=˅$A GP3Ne˖M)ݺum~'C;=zh/~HN GrR8|g/\BVVڶiFss@epw+063.L2 Çƹ 0֬X^d8z:HPEEQE M)!ԐB(mvrG!=|2wwfΩVI pA(\Ç/0gbb/~myu qyH$¹sЮ];hrG[[[ԩS~"?óߧ<= uNܾ.D,ߦ͘WO7Ybpuqm?.\o-L&CY|Y뇴t޾j5n6o.:-{Qz"\ᘑ o[{G= ș@ґ08\:'\h22ҟM‘ Ql߾ӧO/0jnxW QeaaaH=0ơC1f۷^bXYz/Δ BH_ۇz*>Aͱg7ńcl/ԯWՒ1xh\q]:u,}M}hػ6Q/V{ȐI޾Uoש'oW]e/o>KѕcRUu bSbwĦPgrˍH z,\4G#+XZsgVl,ٌ Qt:|F[e|Nv sSg޸qc>Ĺ^ ,Z-vmTfٽzvGOpȿX, 4Q#_94Ȣq 1P1 aْ |3ENq^||3 X^^9fYtxwoLѣf}wxSa%+Q  Qr$''SE1JJRwBBB޿qC_4n @gޠVkc"E$ @bLÃ8i`ufȬJ|ǗYJ-$KXB_R*:r$+DYZ ߳VYTp)4SOD8FL&UD5\e`:CBQ=g9D"WźK-gu ^Q98.DͥVHIJ2$'4HT4TݻpZ!#8!:iY1g IDATcA G(g~WQETaT*,_=_WOa@>酕?EpH(RRS ppG-M7‘c9vFwcuBĕkבRD$˜Q#i6 a) NQn%BtL,X-Tx 6:ZFmFHHe69D#Q(##qcG$^Z2BCqCĞ>]ae}=Nh33ɐAh*a4mϞ=Å -LOOKT";;hڏvjj*RSSq633Azz tѓŹ(::uja߁VCڵp'ٽO?[a%th׺5֭^h XF{{; ۷HV}?߀i@0H0y8H$Y Fob]mefxKRFZH-amcgO',‚RKxzD"{&7I}G6GݒPg(۱\1__?}Z }ǰjؐJQXEv&Z<@ 5 58LsGwvv.uAxXpaև\.VT*dee^hdggD"Ox>Vi!u:T*RSSOyq;&/CP )!u DSs 8B L>m$F Ub"Z]kystM5sfOw=H GqwƱT_*^^^xQǏWp$jyP*PIUgPD333Qbԟ,B,D'1!Eym_1 GZJ GÌ#44,ɓ'd$$ '{*F( G Qs?&##sbެ# EJ J K,Cg:eY.HDM6eϙWKU7n̙#} (!I2Ԕ3]E3A##b5ظy+>$''cT*^zM333i֑ C17 GrCDM—&%%"*:QcD1@6mܹsnܸM ;ML2Qt 3XAe'LlܲqqqQhѴ)"4$/_B ArJJR Jọ}͛1c D¹TR+o 9Q X\څ#ǎ_))شe+$b1>8@ f++nbv8oܸA"* rCTᘕUiښ#A$B*`1sT4;҂K<<@jZխKV ʄ/_rTp20$%%ΎFP|3˲ml#"c4a,n޾ pF|l,9Y(3^x^^J)-<==Z``m׏FhdYJE&␑"b298܂#Q儣#8AW:nnU4 DI14XY0\͛d0NEԫ z3ss4l A}аi+#CDzN? pG34HD ܽ޺}_ Z/w;w"[<3a ی# gϞ=ҫ>]{a/; ˬpP N D&h۩;ݻ,,RBGx@ # Hęj'iƑ ڍT_^8H8F"**3N:V.C3n݂FӼYSݷ]G%,˂aDHdZ Ehج5߿Wp]|>–AVU5M:{ B33b0L: H8D'$NOOǂϿ cag$>>8#DT"##xmooJAoܸ1,,,F/\7oSNճc aQIkhӘyiFq99Ǩ(!,, Fxx8233 |J0774h///x{{Epuu%C4 G>R%27*w  Op^.D&"4mϞŤ3Xrlq 5%k%@ @.]pyOmL!F 'O`f97mmÕk7G{L?}{ԟwmlWx v6n̜6hy/8j5v錏f΀DbmZ191Y8|rX(رcGzrrի<==ѵkWt ݺu=ux1>d8 =e gf,N;ẎL]۶`ǖe>:K?_Ȭ,=ѫW/ӧOW[{t:dT>MoD=mz4i"..Xkߵ7߯«Hl2 G:U+;믷fcb{ھ""y/޳scFZ*lrockԜ2(OID öm0j(8;;8p*Q QZLG''x2A52qt 8t,bߢ{wtgP(D>"wp_,A cq޽{s߽{r^}t?Ȥc1}d&OB}3l`O?=qAS IIjx];HRH_!1ؽ}+d2`7gv#윥lĦ*65:[s^nGc!q 8q1bϟ P'XqSGGt GIMMo ABB222L|XXX2 ^^^~c ̅㩳 Zj}_8a`gGp[_Jx{{^z0 Ο?#GV;{n~p"6)HOOGrJ*T8A0z$t|=-[""0 >[T-V?{V]lȼ9@gYv/;w_~XlZnMauX8p$\t W^ŵkP빻Gѣw!i%y82QC_"CbڔIdL0T#۷o/~j)KBVV|8 ݺt 耏?[ܻOaehټ9V\n Y )2#Ke\XRed0uP(VJرc8~8 ~ /EH8D7;={:˼Kϱm6l۶ ]vŸq0l0}Np,1{j9#1) =w%*zFⱷW^ԩSd\ ==fLo£EfhѬGSgggJ$zTR+$%轣|b,f|>4imKɠ<8!!! Ahh(nݺy-˲8z(Μ9 bѢEz!X8XKU q!Jpp0V^BTt:Ξ=gbܹ?~<,X7772 ǒӡ};QIHH@RRRt=z@('OaÆ&yq "SGE.qn=c|ڶnT"%LD"5nZ6o$WuVx e\ [ik]Xq֭۷/jժA1y{V===1`}zRR.^sСCHLL|T*/_}a֭޽;uU uz:C^p+""hD7Cއ˙4_[lqh"ZQSU t///B(L&3U89F.:0k4l߹ Wm33qe`z #ǎoIξaȑXn=ٟChXXn<ZH-amcgO 0 ‚RKx\sŧ_~eÇ͛~fѫW/,]LoV.LYZVj!HT ;w.ZjDjر>>>;w.Dw4`@os"ӏ숍CZb ZDQϘ5kV#FFSί_~eƍÇ^NJT$DOԘyBa"). |!0D"<4:vNu|\X3%116m_Hv#ˆDR FUrV+G`df&(>_~ERs|><==///xxx@& ` rIIIxkxxxuaСd8#$00xm/;-w ZHUITu>}ʙcT1bp|K$ExF*3 n2;HL,%R,d ƪMW_aΜ9Ú5k sehGE6m1TʞmrXժ9è%!ʐ$?E>F׮]ֶDq9ro='22Æ Ä i&rSMD&4h`p/I$J,|>  ?A+uς@PR U,_7n\&$$[n*.3ݐGӊƬvmtZJ%W\Af͊_bܸq8s ^z7bذa%PV-;;v@LL  :Hvލ6mɓ'dHa\,kP86isdLt9>kkk88: NUv6Nppt/OO كGUP`Ȑ!8p5#%ˀp4Ѵ11s2Q&l۶ ݺuCtttIR|gxك=zKnbbСC ! ='((mڴcȠ$ x CFFFt xy7QFqdPD-5b2 pqq ! U%oc D޽ V1vXݻb(&('5;#4GoӧO/u>#|Vc׫W[lg gP*xk.2, G0 mmڴQΦx{{qƜy\(S)@Ƈ$_'Nw}gA02e -[5B^q:;E,cp0(1,bܹXtiǵmoԃuqquuŁpYxNVɓf22 G|߿ϙ޼ys-#8Ӎ,Q c'&#ԔFaÆڵkhC3w|RC1$Gŋcs+WТx@޽;߿9s*?B H͛79Ӎc-p ɨDɚȠApId2, </^b$ ^zzE,KT*2 Ql֭[+W̷ǩSHdtH$޽{ :o<:t N‘ *F;wpjhf͚qmٲ KeHΝqEX[[s'''cԨQPTY 0q4(JaVw ^0ğy̯[.^={;gϞ5Ua̘1ʃ#AT߇B(niii0셱0qD?" KD4m߆߾}-dϞA#HhihcEXXLe97nk׮?CkW\g~vv6F$j$ b1w10&LYtJ={q i۶-o0ٺuREU")VX7o2R##E"O@9^Μ9ZƎ.\'!t0~x H.Lf0֭[C% e=2h XŌ3NUI$p۶liT1#QT>33^jժ3gTh~8vR)g?֭[G #AT ŋy:t0}t`\|LJ(2, aaMsСC9bcc_R#$ϟjFgƀM 0dHP޽M6q晚ĉ[nΖ-[W-[ H8DȹFm۶о}{aCnJF&J,rD<y7/qmD<"S^#Î;P^=7Kx>|șgodH,4¢@&#gȘAٳ8ׯ_MV۷/.\șO> G(Μ9ÙޱcBASNL?tDNEԫ z3ss4l A}аi+#CDzNWcL&Þ={8Ôt:|GԨ*3g(q|am`cҍdL ۶mí[8F>=_;:u G(_Ξ=˙^\Vرc9j{]{]nϠ# qvASgƖ_vf?߀` x%~p-ChжSwq,,P m:vVFxt[_;vĄ 8]fQ>DgsFY^6m8 l F=bB!~WH$ŋ>|Q~ʕ+B8JR33oHLL6jެ)Ξ8G`ՊѨ/>]ܕGCGml^\c!ީO##obL+D&hج<аYkE"DY`̱+VP ԩ9y3 G.]}믿"""3oհ pݻw^ԑp$ 4f>SJz 07>`|K_7qtH4h ;[[X[C(""2 FF'YRx4hLOF͑,.Y5 ҥKz*5 ⯿dgH7S^FYfΝ9C(""xJCb՜ym۶ŤI},^ḳu$ 8tg>~#1bgƍV-֩;s嚟8q:tqSbŪpЭ'&NPk4۴bO됥R;iڇ?}[n}݀"{~L1]{ø)Sѣ|Bm?0rD8 >_"]=pμ/suu-̻|2 !H8DQ*7R{U NћN-|Ƶgwv,Y)FA3صm `Z?D`-ص} ^EDb_]ѧgl۸M5*y7y//[&g/sfݹ=wJVkhisq.R#2Rsd S$ ͛ǙhxˑSg^ѣ˙}(Ǟ={8ӛ5k>}Ԙzo򄵵 njFrJ "hw,Z0^pG݋uW9lĦEmMMV8Y?s#08pucB||ԵQݹGbXTq @rr2N8p1ۘX,Ɯ9s8VK ȡBDb׮]7豫xb??bٲeU~IIvn aْ4V Bbo`SYYYJ oOl5c~2 X^e5ƍS{nNu.]k0o`mѱ{w,-ȗU*{4܆ !#8x _kkk mdXdISNhH8D鉋ӧ9 Jn={.j*L4 nnnU{.476CfeU ^噊v!2#KeR*`"P?Ç@>d0  8:رF ū ÇI8`pqĈUwIprrB=pÓɓ'I89eTUTb`ƜX{le'9z 7n‹WEM{r.c6_|T*:0Hp 9/Zt -kgͥVHIJ2$'5q1-ZqƜy' JΣFFHg^Å !"j7{#F.'CpZajl Cv9j45E8FGG̹ `t,,:/'k5`0MODaY;w4^qܹ{ݻwst:dTP*{V|?ym"ąشu0Oteq5:׮CdT %\,.zǃj5Eߨh &G0`јǨQ8Sl2% <13gVgqߟSjrw2v ' o,er2o߾K^8_T>}111p2[Q>z'O1}HL#>>x7cwBV ފ?9&NX~ɓ' ` ,ŋG^عg}qH$Xn=`kk^r^>_oYsjOJ$vt#rf -ó'-’JEXcXBj @Ϟ=dɒW\AvvvyAUd'&ژ1`u:?`!88Qp8Y /1u*seN:A$zqpp/a84i\WeΝs>|L6t:T*"!|Vț=dH@ @}/_uZ-C` kkkXYǧ!H ƌN=RSS9:Q^ƹݑxgxsŝ;s7n,tR|xʐYf>(";-w LqB||T*|r57^r{CCCqܾ}{]8U!$4 k7l< 4oڔIUVqmmmtRμ/_bѢE0x6.P(x < ~BHev@ 69;oQqu(Nmo~ QCz>5!]PP_[,Zx#XJq5\m;wȏ=Yx+aaaؿ?gއ~X]YϞ=^bo޼ ?#j&|>|>pptl\aW.jՅ+l_h0Sh22piD:dFKՀSBI (x|95Hjj*RRR K$Ԯ]Z}mxx852ߟ3> Gߚ8sB(Jj$~iŐdptt \\\LX?2,Æ CݺuyٳgpMUj1=|8VLb;;xϞ͙y%D%==3ɩR^څo;{{{XYYyXzuDE{3333<(:r\rKZX .>JJPP~7|ڴipvvuзo_L03ٳg>$ o|-M:/ŋKKKCwwwNon nك[#=(1:={M( j,S@RQèb貳K5pB*VʳX|9LLL0qDL>< .DΝ]g-,=˲ǡ Xh"""ph4Xa#F'G?"' go$ >Sk׮5(pd\1W@FG("<<8}4cH$2}KKKbbppch K{8Ispeʕ@WGY哆Oe ǡC˗x"~^9r$oUx Յx;OƖ-[&0,L;@^qaÇɓy3g΄K͉immm۶q1 ѣG#)) Q޽3غz:u97pnuFU*dJmoSҿ?< Q% aę!Z{⨏b,Y74-n<}XjիSSSiׯ_m}n^ lx0 \1333tچSr0a-R8gd{Y!7:uhSSSv0Q,̟?&61`d###1j(@T:cǎѣG1dj ~-ݱl2۷׵@Æ 2H8VVg۷㨗y={6:> A5ulf"Ari dPéjR{qDʽ{%EYYY%*C^?:uT,\aaaݻ7 4}n^p_WTkhVk +vZ-FrG]{ӣ>ۙ3_$i`{/,McŊxg_|7>֯_oϝ;+VP!*B1cѣXv->;wشiSۮ];<~bp|;~~8[ӦA]v@ CZ3b܆  ;GTAco Dr!] # wŋW_aΝİapannѣGWxkl@:gƕ+We.,}(: KR!"2 ?ɳg 33S_9?xD&Xz5gΝ[c۷o7p8s 5"RiѢڷo["m۶ 2 2 l2VU%=#vqAC[ϑ5i7n5Zmg^>f :* YD;mB~^s̙3 ҥKN[k*_٢,bx16lPB((L|S+&_~%nʙ' >².xpH(q6y|#3qB,afj HH'{o@ucXp!Vr8Y`cƌ{ 5 N:lll\eނG޽H/>(XFKE~M\\ݸBRJ2zɉB 0L9RpD,0W8Ҍ#AAp$ʐڮn}*0(ʍ{MfDqʘYHjP 2=jy(!jU_|><*OCp'LD"h$?ssJ H8eCo/DDF>G8ģ@~q0:Xmȡx I#ի}4sۉP DD#ADnhEAp$> ۠Ua, ejj6W'Z:ychdX> 4ڽXu BpA G jy=.Le6dR< +aiiY2`$ AU:K="1* bqhKA Ga3'js*59s*9‘( BA$= jLycuJAQdӤ A5X1O4JaLEADOU@;GgXZYPZAAp* xx$HADMA"yh@fkO  ť繁70PrO/YD#AA15!1Q ,q+ `2,K#AAe'I4V- ,XE<IPe)©"eY|. χ vZ(2HILR 7x= `fa[;YHt<#)I P)e؏VT!AD+SOb <#'%!3= nu`%yk첆a0 woENZPVD*K ;BArb<ҒZR+kHOMM/N<=/aem[{B| L9D&&%xW_qh5jDzs )է:! M4VW7H8Y4x5j aVg٪ ol:],YV%6xZ»Q<~T?cf#Pfʑ&- /(@ 2<}xfg33ҡȔC,1%U| df#AQ.c51iɉpr FS)k.2ejR10Zr?91nuI4oBqGb|Aᘜ j{ƒI $ r'j BHfPeeaXN)"̺ЙtRAK!|** (*鉪¹ar,C;,yxnTсO}Rl.r6lcuG 섊 HDMW`KU,d#  j   ({IW  *иfǢYZJo|tKU^  2J/)KYV=2tLEbRR 7z!  cOy _G>ErRr׍* }6m sss`Ϟ=k, c܌9R__ZF/mw?xAQqЭ:tN=`؉y/R>cl۱tcic5ՍX*xzGdTfI5V7jtظq#>}ٙ:*Bѣo+WHX8D"!ѕoׁ8p|i-6GԨ bu#|Z6ogOcX8x +Tzshܨ!7ќJWGO8"gcÏ ʽ,Uۑ[nA(i"kצ^(5nAfMjp=ӦїyH>d8 1@(Lhݲ}3?sf̀un˜`:LU*X=t# *,F믿bʔ)zh,d-7ǣ'OFC\|<^znn N71 nݽOfNJu#[DoVot&_ļY,s8r9oOAPH0V| [FPxs'̞>_~$1>_0_}DPpjf}<ڵCs~ 7+WCKrʨQcn7gvZ- 6n;#uۦ  ϞOQAjnV#ӧODZc 0uT,Y|~۸ HLL˲0HpuqVN#Gy9 ,=CՂaYm[6wܮ`?j8GN­@̙6R < }Ԣ=z&ƌ{MƼ]GU`|>A!h4ZbIDATqab?b/; =fʄq4nl} 8ҿ(=bcRB)}AO36o))ӲTTJ4|hӦ ] ~-va{} ^ ufff b?㟣G1t`4kҤʑm=+,~7i > |pǍ2]:GmWMLjqv5:moqls9L0n.`YL\S.gLS&ť,UMHLvmZ8ν{kB?%^hRUDsss̟?SLL<o1uJlj9;C$ӣ><=*" _קGVہ1y(dgg6ch4DcM^OLZF,KHXu\i HQ{B,CRn4l_|M[h=8w7} %|0AӦZfPDRaR[@EҎSE  4ED ξawyfv67ss~9gީ-v/<24cԾ=rEwD}a9~:A Ϭ.\$Ix^sDXS&߉aDn.SRR[7mDzzXhw)[oa7PI>"|kfLWj0h`&{I QW_Cr3Rx|;{ivGBCixh$ MXlΝp ?C7r$֮^2,U/];v}rs7|*. _݋쾸tgܽgo?f><;>م?o܄Ă۱y~xm)Qùa/$d=!Oڶ׏ .+×9쭭(qcQv.WRS1&o6mj.fXEېW/A;'džùhjnmۑ7tGٱ 4a&@w'#ł@}C#ZTBRRRL.%Ř^R̓Ԟu-K{i{_״g>7$QBMe:]ն,I{N)&/t"*3}%%&bL~>6m4 ?ڎI lEg¼9r8a5x8S] {֢OVV6jzZƞ={daXz5x@ Q<~Ȳd@΀ؼ/m۔7jpa1278Xǖvx)6֐xzl1V (b$%%mأポRHQ% { >ر MMzӍo-=sϔɨ<]g_Xy1BZm8TV?+6;K<v+QL]6sg̈́>9o+E+Gf`ؐ#2w*}~}ɲ&Uo ?o,cba!}Fv}V @yb^Vew\8s8nyM>*TC}S GU=fǯ~ oٹӽe@zéit:h4aUV#(n/1uuxfRL.i9T{q˨|ůUVCo09˯c"U4aجNDDԙh$&&AӅ1Lp:p:߯KH %GvZz 6'  m9Ĥ$$&$lnVe i1v8UUe5X9TS7S/xeDD=b'(ܠ ǐG Yo=:*[vz, &ZXQ荦_O6!J"+׽H6XDD''7(eD! MJ 2PW IX*AC]-2h-O6{DJD ϟEVdɆTEo;u Yt8'ADD]'+7ƶRp[4M0RPuME6_X0R7 7ReheBc}-N?,)!5hLAQt1@y`EZvSR`JMcQG L5H<ZTȲ I "q{%I$1N/VCjz&Z-AF$܂˰YehBf~0܄˰[8t5. z}aJah$"23#߽=\_6o\3U~7owofLu9ߐn8!xbk;ZO-'76G~,ur\},w~ܬsg 3.F~˅UCP0'Ō+2y +7/%6ܙsUJ/[KhuBĽ s5j-qg2r\d W1ʘb7i7yx!4M@$++)J*RK+2kZk©R˭ZmSϽ[}9HXq6cNn:ZO^XqWYuXsS>;nﱧEK8֬۰y¡N>N?Kt-vw~WV笅ŗ(/ApR32s Mr{9*sʙۥT",Je b{~do6oOsJGRS?d.$ d]'Q7mC卐iZ dYwʆ7j*}]O\޸{=V+|sm^Y踞\dAk}q,=e^@։heVǺi*-AX.S.bv32dRfmF9=@QO|_n \lZOf{Խ1w.DpF $w>IHuY15 sf.}wǹg5m\oώ/Pڥ\s^ZX-ZdsP4J ҳ31/'Za> Ԙ()WW!0Jlc7Nr]hm8CqDZPbFxh ʤ ͼ$[۹MN^/1cL2p *߻({۹Uc$+pxtT:\Fec|m>,ޝ'O3 ]9kbpgY* fTLke _?IEVˆT|jKĮ 3Զ\X5\0$i9U,V_8}H/x'DYܸ->QHmIQyo"4A%jN f \A'xp{@ؓ$p=dն,X(d^; 0BZ5F肳Rm}]}3nݠP \:e`0$'&"A41GB;r\?$J5J2[WV =m[6kQRsĉ>=v۱;LY7mٵƠ>XN5JC4/S@iܳƚSm#Bsk~ 4@RݰgB *Ou'xG@DCqÏŠRgA'ch}S;2#"#uAMw I.J5VLؘʛaK3zKyFkH+'5DnXS C5#ZMHNGACBYjg}"A W#<"S+&aPC#HBTBnÀ &­ z\+[\QRђlUG$|ZʌIM.9# OV/Wml}4won a;'Z#2ʨ ۸RN!k3&TɊ0z9#\n*E߉0 >@:}(ʍrUPQ*aiadF@iLL(HrEtAsM?Zv`ކ,*S92y;DK[{OY!I[FxsQ{fKCMdFmx8 p\'e)IBqjwE5`#Qon`"Q;t""6J"eh Ih5i7HmOqKc> n# ! n3Ywnp1bΆIܔڡ\h*] kCZK[`&ˁ](ucGHJIt=lfebĉԥ]MBc 9J(qLH(Hpٓ2S1b Tn[v]lIc--L]PT?aM P^wi}gvP oAؐft,R/O66dBH]ja 7JGs x,&WeRU#kudgqq8dYu/k0:Q F$%>|YAnui@2$F#|6dၿ1óah5JH @@yF|F o'̅F^ Tm9⎰RQH/M kHܤd2sw4g-PXОBUq#޼9Ƌ`GB! ;dn+E cI CiL鎱A8yCMC`>=ˉ. q ֨ U/}vć KZ.6?hB @榵F.! R.B۰&J0 > )ڦ8ǂ/:w~p?q7!P]/jRY=#>^Ġ0[!M Tw@#EF:Eqn}#?Lw+DtB|Iw< fB9F-B "_yd@'{n[0Jfb/u%uZ)EMjӴx&}G+> #`cʹ||S' !0BH/Sj6E)SR #ӐqBz+~})ZE)57(։L4ߨrbu:>R zgGڵ*[;ڦ 7m-,Q90FWϢ1:~ktW|GlG8"័7uxfg1"$LJg)mHWi5L bA\VMp|THjEDF7}L`>6N"ۇD)iq?905(P hC3tau yIqOe"ZvrBi??ݖfb[V@x`M)Y)6shiMA\qm}w@KQoq-7."- ftZ-(({YiұShld`m㡽XsU|l5JVֆKf"mK;Ơ2N|chTUGr#k[[?C:ŵN?,ŁH/XCcUb |dD* :EH&|]0q^t >E|pzmۃ6yr~Ҁ6R1޽ is=6 #6p $&z[ E˨(&\SS /$F Q0魜o8E J<q>Җ. "].-Wbgv@1A=T僖ȮK-61kG"8U| mQ]8,ZKb P*{eFSם>rVcàr E`ǃMB bѵ,1JCx32(cENʻ~E Be˥0ԃQ?3L$AZBބZ'"^_Z} > Awmw5>÷uV a^b@D +ב^$-F!*饖lhC)l$wxҀI:}Pk-QF_mD IH` L63:h=J |mZG2AJ #͖"ІU<&J&(6([Fh pCK=;HҙZɬ+XQY\K\k=M9 Qj՟cYyE) .G/.ٰ~`ANHXMŕ$aeH@ؐYoH"H0:R&CFlÓk>X 00/ky?rrV\c=:5dXQ!8 d l qhEh]iMY!4L Fy:\PEL؝΢UCA=1@!ѵ09Z #an;ec)zf13 sf 3~{QA9SKoʳ=^k'7z\ :2 DUQ$_`6 _Lc:;FQI7-_lL 1tgϵ$ ;!FS$6/7t"4oFZC*b'!ohA!&:wTAtR݁]J@)V-2E$3>(H 7$zHPU1@ @elk!W$]u]!VjRD/X*:2Cݶ5-wbVDkc7-Tubh! +n-R*zXL"$hBbZKBg!FC:-٢Ikun.;bRpR;HAcf NtjSTwEثkOy%$tHRT[x{暪5jݩ5w HњPO˂c/0{Z]G0f+@9Zc#Hkb*L!AK[<-:8/i =3^E'ѵK@Z+~(kP5T2J8S}ثtR{]tfnXb)P8 AIN )<F}K+T"mliQjg #; PZ;C;ٿoI!6t-t|M Is:`^!s7(@7_!~Πmju ,.UgS@PY"jдƳoikI= ~Aғs0`=/26lYim@;l23p$_sAn'ϒhNVg16ḣ6z,%L +jV#2Lu (w@I`1ځ'ZX@N[Q:d_É:'Pk8"B[Tk#s b_W>f;3@ {TƗ]oSYR:TGw{P>Pezk nB a:x{I:y eBj&19릃FѾ:)%laȅ|ɺfM֝]I?Ekg;*Ћ:%KCuu봔 `I ]Z2RpVR᳊3w'dGG F _&l^ UU+FVZ;TD7{/k5k￞ωˡM^R{§h3IviCtD69\nzOg!Ύ Ac>{)-Gyk qON:Ri2ztF2zwifS.;SJUl`Q~޹#ȪOwe3+~DF3r5"Ɍ c*̴9@ .LX>xumǑUgtN3h:׳>]5t %#w1 .CgNji:δM=N#׽uthcO25i 0!FrAKC}o$t#4"Q:VrYְЊ. -ǩ::KT\!Dya'$z67F@yXS[) 2^xlMnpzqQ/X7@lI LM_XC=W(@dF iD+>11e"жuGI(`"YIScS ~3&9p8mv-Ќv f-)@/Iyl_pyjIө"0Õ:2(MM}m輶K hWS!n7Y~8쒎 H .zd2v~bj Ҋ߅˟#THmK&9Ycҁ(^d鋘Y;?xJ+-">ax+Ag!e>n(G @KRDPQJ (aGN+_zF%y<7^ӱZ|yZH#nɼ.ꉖgtY}ymF1Jj]j6,<.&mq9Sp;+OTD)L贬ҒVCP[Ǻ# Dn/OD+k3XBP8qS3}9չbP,li @(~q]Z3QEzb״G}FaGcUD FE*(>ѡ3 4@ܩTOAڵL."Ŭ'lM( v=Ehh]/5᥵+V=J9zZ  #O2q%-" "B(# (fP6v+h⮣t#1T(vNBbI'++wL1{1Fkg]V)LW@#jGp@|MG2vD/frg<㌜ FS5oa'tҋ:g.QE@]}nXG(=BӔhX;e,_'u"J_Zpfv:TzJchF׆w\-q^|y$LgLUR,$ΣT.ؿL@i[Y:!ovP6{ڍ-E\/A5ao!ʉ2c[kԿmG|o:;?a0x /gA^y^q|X;ž/gw=ht#jr^UKݶ !10tN> 봇0uQ:;t2рj*N\up0ݺߩ*lyMڴX$9 9)=cr-W*#.&EhZ5]sWO .E4 lmP,?hl9Bt3:kߦȕPNA&yǁ~glda ajGY{cصtP֮i6mS5C:/::G[͖7~k1*etDNs!r6`շZizV YO8bdҤJET|AF*ݾm$gZ a:҆A#íqŬ #"F2e`D-:8.S:u}F_#2d5DoB34~f}/Xk"LU[E#u?~EȔF}p=Ct :ʛ/k(6݈h`qMy`V?=<+HGjW)OAڧt+ϻUz=sӷ?%ůoWfj?+?12wad#st`}c3bScԍVk*P9:ϖd5gK@Q?xcMjokjZ ya>,:@=w~Dz~pjZGuGGPY\)Cbx/e@%F-F@\ܰMiCCPICC profile(}=H@_S-vqP,MP VhIC(X:8* .N.RB JL:MT".f+bB1L2f%) u_<ܟ#,Df6:mp'tAG+.q.4Xa3#6VژMx8j: U[R5_K\9 "TlDiIȥk(Cn|lM Ɓ@8ǎS?k'Ֆ9떦;!rCy) =no}>i*y#^xww{oirƖLBbKGD pHYs.#.#x?vtIME  98 6 IDATxwUǿgMfSHH{DAxJQQJQQnAAI@IH/ouܹ3s-l璻=ss<{_=}/?7e R$EJ BbI$:~\x\ǜ@0^eӦMd*hSUPPPPPPPPPPPQV^I,K͛7o"F86Hc~'d3T*$# G5eC &:P":PIK&:PZ} ﳭj[kPl:۶> #K8.y{dG\1L\b]tjl_ųBv3·KYmcQHAAAAAAa"CPVx10j(6d)RlfHB #.(^,&/'HAAAAAA$89Ҽi=D'iH=5M#/uJqD hn"jdPld3dR)ƌ@u0PhLb#yW,C4P8pPoV?yʽMàVy)(((((((tE]ki޼J0 t:'VP3__FIcqԀiG27өt)3f"Mt:C)xTTV1u.|{#mE`ݮe5 hNuM-,>2eyTتR_7S CAAAa!GgLtN%V?.BHT2I2I,߮₄<1u7J )I%il"nHI6E1ZP8!>@55+; }a5{k&F44<<%^~ .[A2dzx}24MV?Գq1GS<2:p纕VsdQ뮄Ãsߞ<,+V}ڃO9X,\%Yh1u8 ooﺇvٙo}Oͷg 1a|cIu,VnwC)mimkʇ vz԰>{q_qʸ7_[wI'p)ק~5t[[ G[+ B4κ M8j?w@l!OcfCEVCEeU5+%~pwN%7_mf73罹1Əi,]VK}A%͛hqO2a|#?僖4_3z7ႅ<ԿhniҋE5b&;Mʒ˸O/=ҫ[oYs5rS&ObλsaQEUݳk ']fM¤}XV^ӫ2Kqo;mTa;;sߧ{*c)=K=3L:El5MI%[KpGGQH E@{aF.W_g|8-_jޚ5IګB##?_9h^|բv]W-5s<>D "]ȸ[J[Z8P[Sӥku)u"kRzTWz\QY^W*7XAbٞe5ۯIk:ihFmM e3yTUVr׾J܁iĢQ6l<ys3jk99B`&;KzXz 7jN99pkt oh'kq%].?=cO>ŕ}}ܝp&{4p^zc~ֶ63}2,ܙs:ʂ{ݹ P|Š8ÈD"]NV&Mh3Ocb~_-I~>(ҙ oΚ|cg>ݣRF o`;N6R4dYsޥ!"uu[os1jb߿g^ʲNM2q:SG#w]wm[9p^~u̡̱ޔyQGt)bıԲxd8u,t eWk@)cH\tttx6jjp8.6w},s:{ H)Ïz~waߖ)T׌? ee4_o"z\K{* n}E*wsԵsm0,ue+D®rl>OkOOdr,K.$lYCunɲR: +>!!i^{0}ǩÏ6+F4a{XYta:t:oR h{v) ['|MH7e7g~Xʯtמ,k~~#BK;f]mM5wʼ?^}h4¾{"=irusWuזJ'Rs?`;љHb* RJ}oOFN u%Ysd>%]aȑ:LZaL&?3~5kRQ^&sfJ!ο`W.pݍ73kl.4m:+WO>Y_9_:v:e 1 Fz#oV͛ࢋYc. nTۿq&.,XWva|OQ^V Y_<-\KreWHeE9K`dxghy׻6+Ȥ MY >4562zǝ.r TUU0f(V^׿FaR 8$vuf5Zr=4Ov11G\ޞ]ݗn0z>Zj0EoOC}}`}G^ n{wlVDcFs/z~rO'-yU-_QUY5kxɧ\.\opӦNᰃ_FݰZƎłE|*&O:5-w&,Zfwm),7r;+vu>LSN:!ȧ;d^zx<ơ_zYJw'6r퍿6+ƍeݮ]wڑq=rxTAaK7>^^=Ǎw{ښmd̾U׿]u~d艵`Poߗ_;ЃnX 3|mvN9_)+ mX4o~+&OȲ~_yf. ,\Ĵ`=K6m|qS|(/禟]i̤ Xz /eLa'}$a˯äI2czA9ujͷg3vh~7f t;V_d&+ǥ^ MN9J߼?N~ \E$.N4~tť V^ê5pE_#P(U߿ً6/w-TRSlXI}nռk+wVr0u|Bj88fy{λ|v~hL^YR*D:xFKSwrfI4o5q+.eםq|J"BP0<|⋘6uQF:졇%whc k/~iKHkv@~x[CV"Ma6ô|K}vi:uFA7rN[~i;r/☣Kȷ.iE2p]_"Nsq_q\8xXtcƌ}]fs;ΟKEU #4KՁGZ^yDL $\+xR7rǭP^zRV"O=ͦM?~ں rIg| u(((5xoΕ^{쮄@Wd[pGwWx62O?c켪?bQw٥oC#ɏS.'//`׷/YBS8;!ѵ7d2ƏW]o8e m23%˗?txCXb%ӧ툦i<̿e2j(ӟw# n6}Np]p7X~o͚͕#G^3 wC<))G{?=.9Kg3*mkoo+X[l9|D5pI'rYg>{m:-_gaƍxMKK OC򨠠#w9GDߚBǎUQC!>sܱ_p{L<񍍜3x*췯sN a 3x*Ǔ_ƍa= kd`Ajk䓵Cp470fh^FZ :ΰ3Xj5+W4M.n>4z6kX\4~08d_ܧ=-{U`u.I9 ;8L*_[Sn]x.c_Sdroǽ3[s`b3е|jSjoRoSk_ j jjikk/uu89ԚЭN_:799y<~1ßp%sa{E~-lڴt*Jwc8 顒Գg_RY[D90-*aĭ9wߛˡF۸i| wA>xJ+ヒ;@N_"jcMӒ6z8 dgmKc'Ǣ_r`".2~_z;e˗o4[ gL!O?l7*l;4rZz#9#9H Sa#͐faD~|w B< pq$ οq!|s5r$_vG~87?˼t7z`$--`ŪU4\iekWP[]eƾϟt"O<4+W.=v5> MM9x}k J峬 8TjP_JJyhF{[>}ysޢQs|_ۼ\p޹w}[NN&tm߾LlO4eCsť uׇЃYYh޺ IDATys)M8ҳOVTrW4h+<3u9.1c8eGUUPP>^Ⰳp"]nMC>i?O֮cy'I s&xVZM2+C:l&ø_??{/{;w|Ïpޗ|^K/ɤٸ~E#wN8aBEE|z cJ0Hj4aT!L/|d8 h4-Lb{27D0iR^"YK4 -Hs?nǍWxKqI'xVD5t]$Ͼ"77ksexC=短ukL:_ڪ-ӣq_Bh+A:" ?3O" 0찜F6ѝNفYj.=;=c˞qn%Fҷ.HQm_S%MmWtvhSdu˺󌝸-6Xiome{ ]0 >YqƲ|j&Mhs-vx5T*;s?7 f~v.g)j^AAQ%ڥ\cdzg֥Jh}Cu.ܩ$ʹ6HT[ ֬ąLljdRƍϋFL8֭p߰Auҹ6h8 ]oRVͭn Იz8lwrcFAA(/YN;Nn0^{-2 pGM|d){6Iظi3oΚM"$qAŜRp _ `%9~ƍ9X}܃aL$x`Ss3o6}${Iٰ:{2zmo&NSYQY**hkkW냂:ЕtAH ;O&&No{c*%M[Kv~L&CsK+ 5+W9 a]?L6 }#;a55R)ѨNX^ߛCa::;?n,t^z?j\^z>nQDUe%K-7O&ŗ^K/;+hP@AAAQ qm`)0z{+3 ,[yLL`%:B0љK֯a5Հ$̱X,B2,}bz]&2SSUEMu i;͔ v@Ue ij+߰JjzzփD2I,U냂յtAHK.縣`Xm `EcOUd>qivqG?yt*+0L^aGd] B\#(ҹ3sHl&m5T2IUu-hl͸ .!8Bp{HEeuA a'+S][g>jO2[xGT6F4!PQPPqQ"(HT2I8F [0A&!BJvBii+`d2钃lF8)UVjk;ͭ#3!uH4fF+C8"R]5SI:;:H%BA(f48:-g*FcD"A|d Ji=݃z{ն\=u]wꪠ0usgƆy?C4 by{ն~ EI8tRLm8;PCEVZPPPPPPPPVsg* "X,9Tp4JNۍ;79#B2}3"qK'+(Y+((((((((=JaD-/QQPPPPPPPPPPPP(N9%~Ě5м~ @YE%HIgGF_–Aˆ3I)g0yv t: -hBR Ha&&͝]YiI~/i|}ŠLR߮/i %B5KD2 Ȉ@NK3+tD L4Y;-F!~ DI, \x"קȍ\?^=Wha5f%[!ҐHi [_Atu ]θɉv_{aU!դ] )Lr&dAC8X넡I>@ܗi)CR D.h^YMt7/AZ^u͞W)%hh4e/}OhZd5^[}Eik\n^rr0cCH<{>[2ܑChYo@ibfMRChfP@Jl/6)BAAOذv 7~(FRBqa{qژzmzsyIMm7ʧ@KѓBZʐV!u-C8ENatv&zSݟ(-FfAkdFZʅ&="V _N̑E6zti+k "&2jBԄ=!RQYCec eeQ̔y&֭[E*I&He0! ːMМY,Roxd -$:[}dɒV㓞ob'"}iMVGK#)8 ]GbzL:M3)2.,=#q߳BS0ss} mJߚ>Tn<`ϱt ȰkBXˊ k ȓ{!-`6lBKY{ja?@4F~eduɜ=DifsrE [uks}@>Ьv R"5fSi{2/ 뛵ƂY5MoODD&03,\)Љ"d通N2s/T BHckf&N y,8 ZVk܁@Ζaf {RYsdc`vޛBk?~ 0G40ui G1lu2WdtqhpvsE @};ΎrwϷ.@l3,&99e#$Ie 1 61bI-Ӧ&K e٣ ɔ{d 7S,(s1r%ߣA?>U8,(/eht3"(QBx$?K#k1악(J&#n멻QY0&# g FLgVZ4פF^g>aσRe{޵Y8։۳'I鬧kISPBF=RQQV4Q;Ԣ@+"+c^UGIɢJtȬ)~P:WY({Ȼ7bmNɣwHAAAH"8bRHC#kͧt-GRq)آ@u;P((xVG=~\sQ3\nK]^J3OXse5 Ät0hp(fDcãy-< TqR{johcW&E3?AB l蚜xIdʢ-I%t"S/+Kwqs+I&VxU ].u<fW4@ߜdy] tyK cu݊Pl]]`#fmhPA %U`̍/s;c [4* [Jk);˥9u}L翼ʤĻy]YtGgWƃvՅ6-2Ę>rftQmq Ä!eb0.5"4DV85w;@+x \܂`_PI2O\o鍫X5ѝ $_!*TeӉ&j 2;gsEl.r&|$t8=μSy7rdFx<"4r3nR?k% F撏aP㤊x! -]spЉ !]Vӵj񜷮synۨ0q0H"8BCC'lfm̆ W 73Y\4$L[ EÌ"ݯHWRrAEL&>CkݮC-˩ 6ȭWs,!BDX M*M;nzG:# O!x6o]N!gMqϺ{E35{D #L,t%H9pPlTX|_k.e"iq@%akXʾl` {=tF9G$rd9Uq)cP+(((l Ҩȣ" Cl8rdyV-R荰="AL=1PM$ք2g댍-6Y>hFpmfl?AKlN9kܒeO  Eih]PȒMl%. wϥ\Sq Bܨ!¨n+psW|,^ ІWhev[%Kj抚jO鞾w;on2Dko-hƋWL8L1P-!٣sr[`1ݯA"I!bĩ&N%)tvȣ;%}nZ쮟MA٨ (abdH,)uz¸Ǎw~0CN[""m%SPBJW^R5lZ (a !8ny#T@,N )MQuڲruB H "*ÌSs3;D4lףܵ׮:#SL_`t T=9;(>k>)\EC!M# A@ "e:w׊~E$uկ8uG4YYGn 0-M ]^ $GMvD4l[ iUϊEAEi\ʶi \”.} ܌gvk7ԽUwYX k[RhQ휓62>ijKצNnQdأ+{-QQ>97fR$:.~Ҩv#iz^n08޲^@hTTj(@4M(q`H i4{}m- ]қYI) [EpCFE@$żmJ 0 ֿ[ʅb"K,I%Jw4 ;Z:dvLJT!u"HC ia ;[9gn]/S ]mE-y \~anFoB]LJY≏,m "RfJVhq#a"=0Ҟat07>-eQ0WDXdH%^o lY5=sUD+Kk^J'($kaK9"u׮\'ƬA!A IBDR$I cG+ {0:4.Z+IIz 9.gYe/Y"{nM -AsD1ɐJv A64M%AJlϤ1<&tvvkF(!^VNh,N8vdGE8֮s⥓Q#X[9HۄJ'Cc=V-@ŕG˭k.¨d%"diҤӶ]eIj@ |11"yeI9AmB Ta,KtQuTJt 0 8!]/^uR: 8۷qP8+x]DAQ]Z!9 ѳ-8 GGT@%ȿ C"M*4D('Lc ڛI(_Eklژ.꟧n˰ 3d`?嬮`=ҕppz(km]L+ 6h,M?I;aQ V- ȜE7 2d0H\&_|>^rKnk{IAa Ic&!Jy: #KͰzFDKЀ 1qA]G4ɤtyZt=Dmp"јC <*8Q>p%bO}`.eRgg4r.gmck7x-`d]ntYM Aȶb$5bДI1|tfػ4YT"Y;%e=]gI,!Fr*&l&C\uh!5Gvs'$Tp`K .kY ,vPfk>G%.3hX9"DЁPHyx4FEy%1QDܲN:z2J8E5,TT3͉ 2ɒ$C&5a$t [A2l2IgXm !N9QD!%eBL;L<cono@Njޓ9jCʹ'4*])i\M%t[#ҟ|oz&ۜ*/=ʬ٨\= ݊e@iQzt#s'D9+"xS]u DD/gWP{4pv 0:qkyI_.YĎXX䣫v%# 8sk< Z Wm][Aa Hc&!Haj46Q^QMAAm]h˗Q?r B~<8qr}̝)+o5.^|_6 BػHOKnQLx-zs@qO%<\e1؊RI A81:N(QGTRS_ILZ͌@'LHCh5H&l*cWEX7'Hd:{f3K'ĈŎ'Q1'6E¦)O2*,Yt)T,p*tVDDu\.F* .d2E2sC `---WT_ Zz.#u( `ˏ^2QxO:31hk6Љ'N%TTŨVATSU_F"$)t B!$4%Q#L|t5M!ň.ΰqD ў -dD!g6r=Q]qڦَf)lvz&ʼn44!I$2g͸bQ92('YvD qM4/=.̚/#1憟y%+f6AbO!LTH@Bش0(nj\K qxjxuc}oӱdɣ; p% O~Jz慿4RY|ܖWnΨ5=eֺtJ٦Ö:?^@.D:P]A=v/&Yd *zM UAژfɤSAͰz%mu4oZO&$zF_~580#f~cwP!%k֬)zm{GotLzjt]a ?q+^E&hv/̩>vHյwQ5>NucUãU$#N'!=D$!+4:Ӡ:XhN.JEMjٴﬤyE3#ELҶ*hD>bA!I!e1Ba"ieȀ/X,j}?#Z<(?G}`3!Q2p[r mFPS \+胼O (jP;2bxQȡ,:&o(H> ;sq}T;7Ʈ*ꎦ]lnSv@KWEaA5IͰ-OAa@c!VO+PNo1 ;??[o/ysdz3\w~6o/G"E,y9_!H㣵snWZdQ-|)˽.Anlr~ҐWSs 7t„85Ք)jb0+ IdS#YQ5 !d8Bu q*GG2i__śi^Fbca vK8yDޝ5'P,5hM2(+vy>Y@Ly>{|ӜgeQDQwGnHOb`"?9굨i5xZdg?3P%qzFP}H8_+fG?bI/fCqh ڤ3Kᶅ?8ۊ }ˀugK?uDE*((rf3Y‘vp$B6!b&Rz?ߟ|=3p^| ̔pMS' ^;!3yp%Eϒ%I $Yv\cFh1pI $bjY#,&RaHCbJY'M]Mpjd2NEy˟͛ې 4 yٙ\2MM=YR]gcmZkOg_UW7v{DIH$ '5$V D1I JBdHGcm՛⏽k}^UUw^{8~o>s+&-sL;`F_R]'6^\ oBՀ_ '[Sɖ('[F;_rX;R䋎 T͢F#V@ZBc\.Vfk勚AZUaXccr+@uI@xK}Pkڞy3,y*+^ޠ$=UVv1ȑKv3롗t]`-Y-H݀t36 H6!]736+G~|(^h/ '3_hn6l,3 ؊=?aFpO ,*1%!j A̖g @] ڔ=qLb+K]A)RkBl $cbο6צ(Hj3|,(X,t:ͳY4Xm97?~a{)v9b߲ e@Yɪ= rr8P$D$5Kn,5,.܃f^c;-ȿ71S7c3EBIƽW5W朽營AИe!Z'>P<3_b%%Kt.1EǴ2Ir5d\M :b! Mf4)ƦcLc]ck1bAK(|HQ, +2'MJ!# {C4bcG,'_`E Hpma^3OPF-(lђ@Ғ`xZO/ HRܣ?-Y}N;xǛn [jkp;kZiPv,{,}W ~px"J6рd_K߬vżD^la(WSVY'P|upG[0+{Ph^hvg&gN@@Ȑg"O _{>6́l¿wnf}۵"tur!X c0@ak%Vj(>E:S J"W1` F[0hH*@@4I k9Ӥά vl'lNPXdM[拞^F:ٰ){Vl/L=b11#'%cVVAPe 4G?e!.sPzlxcb q}Ѯ@:`mq"0kZLq,5Q!>*k CVym VIV#=x XWܶЋ?1]u c;sK6ufFe3셠Ϸtz{r36A1==sb{gY3J"Ww|fB3tQpzrr1b >oϷ}˧<_G$IxX<&I~Ӆn[?$Uv%V|A?ï,J$]>hH(ebӗr6̯F|m06Ӟks%Vd*[ZGz,mWZ{YԾw*ۻphu6grׅz韟BW,9Kr$ڙ~Yǐ˕Z\<7\(e-ظS'|߄5,K!]n&9Ӻ_fRu!O'?ydxk]o)pTRw/ /'.ku_+ks[n!8Ƥ&|fExk H#KëX*]ǔ%d82$DŠ='b!s9'֖S –rW!sT%x D3"DHkPEH[`Qd 0 $}9q]+U %Pˮ+d]'܀X/"wJ9hl[8I]N ^al]VӮSffZeh[^)jW* M+]t*=ehw,˅g 'j鮩@yd,3E>M*Z9ns?S3xFaDI-cF̓^rDu{\mVȇv ]2.0"dv2BeBcA('R F`EZgcMY5VVm^*[a :g)Al0D2R6\ƭdEURu&&L_ LV(+> Ն3\+}>}n^,=bWQ0|mUG]Q_'\T+tuݼsj[g1ks=n r6YX9x7m?߆c,B6~[[ǦY?bXi:K;ӻ. EH@HHB@՘B#Wc5Zj0%$+\!kTZt *ögAIQ*]% fkPQv6PR& T Hw>ֱvmnsE_5XyT>:sV@ + .>ErTF:dPDC{މ4%bJH.kŪT`k#6h[zŶa@Oqɢ$ĞOÚVҁ odjhW.vU˪}uøqĮ6Q$F9uu/^a[}x"E:LϢ]S}x:3qd_WVU8^f⚟xo޾qBv7 LYڠE4APP`2%dM BQ5KBA e-B4!,) B@J$DmKԉ{49' ڒ) m݃Vx   R*&h=Vh[pPҴDm!{k^RB[H|`^Ac +u8ofghZQa>Z鮋AdDD E`Y-x2/_hGiKCMmu 3ʚ^TKh7U`-f!IAK(hOD1JuI΂>w#/fĮ8h3+˶XM, x{2+Vn96<."Ok"A%$Җ? laArBu!'Qыkjֿ` IDATd5 E鞫BA(W'19K4)q-r@"E[Lj|} _YMȖj|VPxr˨cw EǸGb"̔竲)^4dXVQݒ)6-jQ",G4׊d~c"! Ģȁ% $ AHȈ-9`+H$Sy9/=eTDQUٺZWW[݂mջ\_ Z`^ȜqS0BS Qd,b||DZzKwȉ]pFX'7iGJC-ϕr\ʽ-7c36c3ͱXi\-${|Aw9GY_!QBr mɒH!r,^oN%Q~k}+nmS46ҩG!R @@H0:"~^1 MAar@!( K@;=S\dǭ:Xgϭ>{{l}T@]ی3|R8b;/ :LYkz}q 1N;[rf>MgdHsjtO/_1fBBqs rb$$l[sƈ) ijW:ƚZJm]߱~r{Q75^]怒_#-~wID@Bd3y*ϗfRmua=–א"" & t3݌H[ N׋~^*2ݞlƳ~nKFqyuelz% wwa?ظ<#ibP3Twݑ-|x،wیFDQU <. H=PL',0SCDH4J:kB"5ZR]`c N&cLӁ @TI-QHILt.S` \+ LMLihS霴HkUÐEwrlX9QQ[a6 x=3x1bEJ@RQsު5, ’zDɰ"+ #[n[vcidm7.9cJhR 9;ec^xDQ8Zr2`t+$0I9!)9RqC9+@p0EM]W%8`$k?*ڤdSCgx:3!G8Yec8 >P[oܙE䮿Q _<&ncW׶lū: #cAǼ.ߎ.vm3?&nflc?}>˿7G w~gяgVv8;Z/hAEZceO-/@cDcT EZlN| \ڍ0 D%$D!QLDeZQ(b[# XaeLUtŶ ksyt#ǓX/*2.gRШT5EH@E3#eIB*7 =֪%H ^l{ KIQD \\iRԒrrc "P`@[ъ4(;&-/  RZPra6͂" h['Y-!H@8XY9 (BLIY0''s-tVsa>33t|/`eb{$mi(Ș9>4Sz5us| wF wd,HxZIc%$ZM]o.mB!Y/ެ^sWA }xh/}?g>O}9kվCײ] }j[gaL B ERVj!Sd35#DR`2 & ¯)D^qil IlB`)B)xғSAci^V>QyՠIZv̈́JH-Ah'S @VoK\#&}m9Ü)SNqԒF 1bI@FΜz~S2bWXϔ) {Xl1Gc9e6傩p V0E-,m^BY3fBAJ9K 0`6 H0``j2LI H"bqmZ[iIq1ci1C$ ݢ@ynkƒKL@mچP)!mXV{sIR H]5le,Mpt-vPsnX1׶8"ٌ n|\|6K1G/+g,?n^:m 8oqϊ)DG*׬N^^/2(2`QX0kMU~vc a[ Nk{,`50$+\?/Ue>0!#DØ@-Rml\=fio].6f(((X3a}qp}B",sB^]KN kcɪ f>\Zx!E#gpxīd9b1bP:IbΖ|Xpr4)'(C]ᅫ/bƾqA6[\&J0"Ø8J"J˜ӻ398aq)g@vFn]1y1DF_+G07gs~䢼(bBn%7ٹ@qCtʹ 9's ː!osk ǘCޣ] w8a֔_4f܈nuu m4BHsgxqLUhHnO..ƙ'Ǖ>2Y /r5O/~b<Uu36qS'zͧ7@P-C~U?W^?OmfQ~x[>2u2Dz].Fj*i,h%!Ɩme=v}Lt4H%,"c *' Zzd A!@p1>axőVg#Mt@b|1Av]Qq &N$cJ̄ -aѵkayKg[c0"/y9.Wx^ĕU&c(#O $K~z{_|G2眄Aˇ989|x(4  #&[+Xm9rzv)s/~ ޞPd_9@0;_0)$H>?r!3!}g3$f;f܄B ,$H-gpWWwW8y= 9Yl1nCIj(y w PD{urmND- pj-ύopFṟ1a}nq[nH:%$fm!^3&`dQ*5oC{7>a޷˺8U U. lmS_e h-}U K܌؜O wiEʱg;1Oޗ)m;8E&|AVzf_M¤kJ/5dU*jgI'z,T1X4tӧq9noUhBb{&(s"h(܉W5laR)Cl&CELHqN}+0:'д c9FS26ms):i9);si9Žx dN9 `1#=ww]l ?Ѽ2 Nlϕ:>zc r`ٻޭ=j53=ǔyĀ5V8&Srb_v. w r}N^;ޝwI9'"$ZF{mrJs^ϓȐe#_>%笲QȮf ݂1󗏉b S4RGt_ŎR|,=rF؍w 1==aۻx95o@;c7SOt}}^.q7]q/cMikc)͂C Ht<*=:㫿:Μ)ܧ #f1&͐F% NH9G 9y0c1{*orδcrSS y6.CחΗ6``ww+yʘ 2Ή=Ģ|y;?`8S҇)RD@u=zW/gdc7F/{\}6zmXn4 8xq2Uwo#xWkxOynl{死gww8 q4x\5f Phª)|;~O&؄uk)ЅZ.4Zs9M'{\*OL8&DVY]2(\e}h{}"E<ÐΉR1y' s&S)֝b wђS^ED$Lvwٺ 0N7xNO̐0O8ZXɧٙ{u*_ǣNx!eg҇3߂N­篳{7oqCv^m&'s9^Ԇ> rVE0R Z0G|ʃ{o׾̝y")]՛W[ݙLUeʜrC~7sΙҒyJ*E1r,P >]wF9ǵkʒgh!a38gTx1$GsYrN{C>ї]FZ1c^0VuE/r֨ˬQ&T$'iQb{-tvw~j%s^߯Eߡ._>m{D7?̷~:Y}x[UySWm*<@50VJMA9r`Kh0@:wUl:J+BPb}ɸ8( K"Ph;\>Xi LB0 JM"cq%) rN̈tL8 H ˼Xg| sǧ4}((:kۨ0G.h 35$ g)9E.iBrd(&AyB e),f*M,)YPֳ"P=x1=Ap^~cr˜( V7')UVeɏҍX\P1(2c k}YNj.d1Dΐ0 Y9)KLJV} 钬(3 Kir^tM9#:*| D&0GA=x6Pf NЎil @{=U&vRmZZ2](u;ą殸a7c3.-~7M#>[f3~?2a'G?fr6\ΰk!_Om8j/Z17%&ї^YE{f+("ϑB"B[ B&9?a#]Y f5SZoX[:"+񀔡j_HFAQ2Om6L]!-n3Ǡв}l$vpl DIYp8k\ekoKn~M~Ƚw8|p) E܃`:rvYqYE&s$$`SR2:CDl(U.@T%,Pd4I9xk $"7o%`H RģΈ12Ve}UFke g93)X0a[W8s<`\NJEZƲ pk@HTjL-D)$A$%9)S4)ITdVaF3 -n76-@2U֎r+ݴl;Wxkpz|b>'?PQS.dIYf,9 ̳2g8a$(].ES9!EX=!$ăhl>)-22 Pj%sYzJi XP axc7G8gRUqre@" 'ol)l)V(rY,)EF&NԒsL+,BA@DnQz/\H1JnC0`IH2dhhBd5;x9Z|9BׯϷrpuymj7]+UNk3L/T׿mb:I>~޻U܌ 7.|D9=?{wa_7NNNW?>}7fM,h7{f!CrDJ^x%hbX_OyV,aR2XeBQR]-1/3 e#Y%%" E͸$#H*0'1h+eSX0wOi R2. :.{J])D//mW6s}AA8ƫpWC[kƵ!*gG IDATxS T/>^ġB1` a#CydEV$$#OvGCh@X . 'KuNgՋ0V]g0*! {{ CH3r-!#BoAZǮ gy`9]/,KRtn򺌈G1 ȥ;b8"Q輠Jv;pM1QiAzb Io`UjmmHˆ%!*S %H"P1DQ@< @,='O K[o) LEu: pc]ӇtsUٕa/l [drZ̚}(Vċxou۷glpofl{};]?/_җ7ӧz p܌l/÷v͵qKmUYj}U[ճ1+_Q ]YAB*d^6u뻒.u=ٱNH  I(‘r]X11 %dH@H"Wg FS  CplY;Τ-3x[AYw9)meepzd$cS ??νn[׶$"֊-^ 2f,ΦhҲW l08f]C@$<-T!d `$1Rc9)!  HP4EܐAR>VXRå%].F--yZAI/PĎyFHLj,Yg蹩xJilV^5J*!4N⪽:nODӂ<5-@.qJ=EQ0_ÇxWO)tpghgt;9Ss RN+;o.$gNS-1$b$ѥ1Q9IJǺa6ۋ/W[<[DJKM5&zo*K1-y36c6خw:"~Xg%ͭ.UX!:L{۬XeVDMц+3^j:ǥϪz賏UV<%kX/$$r| #dLDOH8`7vX9OBFjHȘc-H0e>ф[5\Fb !-nc!1qLVbLźH( Qh`kBr6+Yؙό d"EFʲ^Xq*$iʆ(lF;ړXρ 1ԖP,4٬ gd *N"?bh "tؕ39;K9 5U8-\9=:d% VX!Hˮ6S: 2Z@2jkJSHV±5q!0$hT݀1EmH"ҭ1T4; IQ?XMe2qK%+mkU;,co*bw׾N9_b@*ND>E 8xW?+rJ hb"B}x uнd]:b˿U}Py2PL)恓hQ;!&H :䙋!2p,֓̊s U^ŏ|9` ʖ*ba8źQA'b@{ე2`de R g5ZKr pnwo(d`W͢ޫ;L]7I1ٌ،wz| 5֚lOw|L|wv76a%{7 se1hVʡ< (`‹PFْWnߠH-*Zqp/~cR޹ςs2fu[ガm 0DF\ '*L9.5`)b3`sJ b0 2FZ,P%?5UHbBqr@ |^Խy\>[ܸ} 1hȘٝ3쎦2DhIJst LJpl"LH$ܾa!d4d t&8~tkG<Ѹˆ!;9K,0HF7rkA2r]L"WČ@&e ҈'`u ҹJy)CŐ1fjye T#9:>䍯eQln<عC*0,xi?B^Ȍ,<>Tx>W2¹6q]mY{B<$UY]nV@UNJ]Ó{tkho&.@ږi`.Vlf<{f\vE{g+E c SE,NGd#BDZJ)ApVe3h+ik<|V`PZ!V S $41{-1%fʜ.]Ѓ%b\1dТ0<0O݉X8fD+Ǫ1JAg 6 C"Fuun\y%]̼jiUnIFB`I#Bax80AF0`<6YĎc}pk\c 2)L)x4Ϟrs{/YsXF^2_2/H9>l>'1ST5!c$L Nml܃Ҍ}` lwǮp#XF%3̸%\rȌk'T¹Β-'TX`EW?hr0qVBPiQHJM Q.: f`` 3exXh{%9Zo#Ν:(WD ڢ1ݩFjh @VdB12&1ń o$f,Xz t6mE)D!pYBf0v%x"cʘ-gR9SHNf KkBC`B8xå9}ϻSK\w}:\;Y7JJp q=cgg2D"JKj,_,\1LQ^ >> .cgc a^+4ZT6 \|P wg9O~x]4e,gen]Xr鱫\=x%sD>ے%a8eM_;O[ +$E.XgƇ8x4g}_"H]KG`C.rU!X E1! .ή`.ם+CNE!W~GϰIbb+^w|BcdL]4y}oh9hF(mi(5ܝجg(Om<:sʫ;Lw#c>_6DPR: ފ˜SPŏkhAO{1yH)Z#ƍJ LqayJx⥍ M EZ{˕#^ff ZVPڢi5xR {?Z'pE㍏9G7'c@K a8uvS; .eKNͨbi,YSEZBVV褠Jpf8WC,HbiVSI34(XhubVz}ؗWg{Wj%!e6%3.׮ru?xSnSr=MF,ث,H1bn`{{Bl RڂQXd #aʈ *J {\ W\ԕ2c/8P.9ɫ5AVC3a,KYP5 c6޺9,lNQ\xG9(Q@ (:>[IkۜC昿ܝ sOǻsB(`\{9]kcw8cI[wFRo`yOB+$PG;t9͂\xtc`qdž1WpZ1' _G͛~ޟZytD$JP0cq({)~½kPn4J']RH+PIBiJ Uh+V㊦ C:vc/8GoDaDHk D8 10K bTxԲߚ1d2//X вpƅ{Dg+ -sy@dQ)#C1W0@Lֱeҁz)@icڦ>u&B$G"su95(P@^GULYιT9k&ˀ݊t zP]}fdQ3FX="0}c ڀ;aXIxjpEeYb()1XF`R28S5B߿⨢:?ӎkygW\60>&u -Ԃ]bpsݜÓ(܆K~P^Z+L -h6ٛ&^0Y,nR &L7xbskg%aøա`'?! MO xV7n ;;ua}occ$fC֊nÆ!l/20aKZkwSK1pýCt^P.T(T= (hU6}:R$"A :&jSHFHP%V#DȃL¦^qfmmw>y``T!ܾG\uW{4-l9"9ԃ$ףiy[m hzp3? ׉Wres Ay]!x(LЗl43Ht,vı g6Ժoa= k#;s^׆Ud^ P_U 5;/nAtg=/8;"37k7Q~{_bB &wOMl(c@ Zg Bǿ`J2bG4 p4cϴ;*T=ē}.Yg.Ig6:nJ)Ξ4˸|yh0c4B IDATwrb?SgPJŐLq@8O8ׯof{[!s';IkJomu<"2!xo\~V-/7)}Ϥ؊ˇfF$vd #iJ֒U][QXvE'J!A1N'b(ISXZ6L)&Xa(T,I3SBd b~]Sj]1d[w-'¢SoNp y P'/ĻWkM5r0 d2`MU"> 3]-e"iuC(")] hr$cFZQ\םrZ*,>lI&Ee6( bPdp-nB Mñ'o4^g<`5~.5=bm_n;b$~6S g.S㩣Ymy 2S@76tȥr*8Rzv-vj'$$VDK6jCUmtoN<GDݪԸo+j?K,$cw'h|m} [;1aP0>O|@h!RJ 8B[kׯ-<<?tGVv-oA0L6Z0Z+cyq0,3.-()G@. R4//uD=ї4BGe@H1jRk0ƂռA)TE餎•9+ rV`*MYhʢBk9(&zGp]tp}b r`P_SzӾ 2 md7g|+,E>$>)Ta |>%K1+=8; \z@%a >}M``BPv [ݮ](1QQ/uk `#cE0T̘BW)-]4ւi&bEpٚ${XjR /Ce  PLɈl>B0%e͆-z`K)Ҧ(R$a&DEVسBinzuNr Am#cTsVr>(Mklga{M("f+u<0gU:`=6Ϟ0_4~'?Clo`ϣt6%WV_NQmH'kqɁi\QϜ2|1J}TXphh\ VR38GUc1V`ec! )ʢ&͒:$1$dBJ߷}P$vF6%#F2  c:f10-k7J3o `1mlyG26߇h-{I 9 <=:XΙ5rs.p-p,\tY<422C&ah> u vl'L1ie!ȓpoY8z@Ed+:DCɫ, 8X.@Qw١[;u5fW [߶̙/#AP{1mhñTq,~3x+akk{OԳjc: ANa z;|&1)qnmQ j`!MMZ{_>ԄcWWWfi}ߌXYHd6Am4SĚ>Y,bRJlF&XjB*$69tI[Bgo+Lt=̉;6Ce4ڂA(紝({71Y*patwkDS&L9+Yz-KڀFz֭5 J8Df9-#}"*wdhl].I$$TDO@>ʌn`خ@[p8d!sB \T˷[[a@՚Ӷs6cmRŸ֖j5Hb$IRD-1q695YJHĈ,&c$6%!s1փ, qXZ{G nO-uB8m/]6BSQ--#c=+?Ib3<6Y3 B4uޠu)%uD[$ABLCLM/͜Ӽ?c뤾X":b7ӯ7("$ewCƇc))_< x`k1C,"Z&w Rf8cn]Hʼnۓc0ta_GxӟS-<`u_7ܪ$;ލzG)Y6ӛ?TmoYdn*o;j49"mHFC@"R~Sl>m[TU0@6vIP׌nEXXIj•4vBZׇJ7#GhP,'YN %SR**9Rgrss,L." NkLLYSd&Ьn}Q׃Zp.5Sˠ|kuP+?ڹ'%PB f Ɋ(6M:e S:R 5!̹q ƃ9 od|fپX,:8tD6ZqGc,m?^M @MԆrmȥՊU!6β 3+=veqFgcfWJc`A.9aր$f.2m0-`vF_@Y cCQdzgY>d* a01a )O'yogWݦ-ll7I|`\gf2p3EiwΚ__J(eN1$ ! HTo7tn4Qt()Xwذ2 h05()Hd N8K ACCVNE. Xti0KE6(>k7R @S؝dְx3<֟S݉WIu}yI^!{l-z[@H %iI sx@DʵC'N=&JS7T\ ([ ޳eu DۻU]8 Wż/9Q5Kc=#^p1ZeûxĝS"KɍlNf[w1a cOՐ'fo q_7~s C ;mweW58CK$ L'`].(*O}cWgIBBFƈ2m==E- (NFc5j?a J 22fĈ4)Cʢ Ua0E/ 4^WUЈEF\1󬢨x5.Dj 2 yndځ֬%Ap,kXH$k=Tّv-=E}ծClt¸5ǩrP;Qub(JxSG4|qp#x n D(nu}hɟW. ވ[{sr7@a cxwq_&M&Oxc5haΞ91xv)kؽD=apkFu%KS^'Dl鄌 2#9.0b Q-vOhLr\!BrիM~oa,QJiI$5$q=<}, '.*f9=JLi)%%؁LJ`L8؞61@)EAa֡SDbo2=;5+|Zd,Q_nNclPϯ:kksg{L o{)稩:)t5k'w+5z;Upl3pM7h;lfw,b q7OĜQs pB ߱ccxO"B A#>ywSyc? c2/~[[꯿g?|u|L':(i&8Ơ.`+{QG_3˶n[H2"!#녓&1&CT h2ZB"@&=iKяmJ D HTIg&$$rt)&&23.]̥'/r.݅dK&5R작)Z& AJ@IΟ6)`10"FD XˢsĐ1ro\Dun N]m[4Fyŀ:4iť"fVvk \`*h1fE?o*km{@M EQHqg(.>NbťhQl>{2=ڣN zfc2xq29yǡ Z6ΥXJmY_uei8Ch&!S-J{6HW3 !z #kcJ!PeLIH@YBI$tCV1S[$ӄl_-\7\ސ%u oDa{S 0t3l6m u̞"B鍎`zή&JkӚohцY[؍@Z㠘\=Y>›ڈFyxi.,5[U0E'EYKJڎd^F7vgzTrnľFi$o{,pOnt3 Ő3wyڧ݇a c8>]SX!}vجVWWPj wm Eû g|Bwf%?e J-I⤪\}Xu. Xh4c?A SK23<8 ??:#40HƤjƽeN%5 S,lr1&,`1B%SٕXuɈ!+YЁ$6 OlHj! @Eo͒(vF(tOloBf?DpakDq 47#6ݑGV󻮈=qH}߲M;j#=`lO8.Z+PH%T\G[bU,0A&{8^qem c̡=0SuW6 Mq],AҼz}$*M!dYR 2B([Wk I*D$tծQTcVXSFZ%y9W/\0YJ#n!TU[FG6g;6$cbm )l6Z>+7gVҚЄM @jz-u>ֳh HhmeH] >:q>`}6h\ۨ7(dϖZ,0.t95,f` "EзlI:.XݳlgYk5#`k\`|=F_ UAfe0:,K-\I>խʆȚh!\:)A:a cp8a y!,J0.Yo V:Vyvzi:" x7 "W5%%eYRiIHI2 _cZS:#S F PVTGj_R"MRZDQZr%J A!XHY4%fq D7>i޵b[9冘)tG^XtM/bCvBՇz2 _Y!cVlgT8ʣpS`(][,ԗM؀,ZѰƻZ"(YP1GPd"dVz9B!!c2C9plBELpdGd-ŪY9kywκRXqı׋ٳkB3\Ϳ _5Lz-; D[D~ ٿ֮J9u018~\Bƾ3"J;ظ&g3%g]Yq#T[h˵Ej!26!, nIEI>/(dӠRBQZ5E)J$"f1Xո]D_A$*IF#FZȤ (Y.(6%KndǨ1!'%* ٰ$Vyvȭ vkM ^hCX[2(E8Rv9N*Hg=)MT ci蔧7/{d4 ȱ buûZkq,`q?DxI!% J\f]MIF{ `j@d<_$菤G.蘈ś-vd?}7b*Uͤ G'&:]s$ovŢ?Wu>ξsk+ݾ=^sma cqADfcg9ψ13f:) 铱8,."D'>%d^'\ ݾΘKי%I qh2!B". cX`m936Xm@JLULGc%(֔X[ PS8r%ɐȑ@d:&Xؑp9j&*~C?88=DO15#Պ{[ii B(ב7ڧƱwpۯ'ONF2wʀ!l8.۱)SpJMc@X_v׋*ʙiq%䐂zbQ6`)cNQ$BcNAA&a>ɭqb_tsBpRո!!!I"$(z謁HĽ`FQ;ʙ9eLHm &EumV\csغ1dNSQP0#zs1a cøshd"=79Ph*Yxv$eU߸V6clcOt2̙O+o)ŀ/شk]XR֚Qԯ=֢me5JEіZMq;&̶{0i$de-! ۻbnckTߎ(OaڬІjB㥟oM|<֕mJl[e=NX|=X˼LH`X(8@svڄ ջveq(Kw.Zغxq-3|lASPreą<,3=3sg8Ô1Ւ'ft͌ Cu8 D >@ֺ-ta];,2ёa!Mv9ַXBbPߢG|PDY*Yh!0N(K/"'dsc#p IDATOOO cX?d$sQgYkʠHi68Eʸfا`cHЮ-BKF@p!e}Z")P<(S;j _*6yKlNݗ0`$ (!b {nl u~F[:}PƠ,A6H[Z%dt%kJxF,L)KajW*,jXaCgAήnx > i?\kQQ.m^.i{KgSMĐ")ccΫuՒGȌ CprƸܔFi)-+R3H #26H2"!sd(/}Y3jsur&mOi,ߧ@8}ӸO>0g`SDI3>ϳsz?Ʃkeq9##d1^*sYbD/ e&Z}[Y5 U %">@xl'$r1 eB˜c>nbl)o w=K?E皸=Xm#*qo??|y׻éS;q;vhuI%93rXPQKd ʰ ݰĵ+~}06jWዻ㬚bt"˜݋[cJ^]PVX҂!AIw"Lꎈa,BXH!R0$XV(4u&h *I"Y0IG(ϰ>i?f4s%m=RLreiRt} X9P8+K nrKb d` dXWKlr۫蔚$yw!Vd$>%RŪ!K"%VWㄛ>Κ L\&$b(Ȗ bl䣆%C*1AHNoezbތsgx O39SfUA,KvN 9;bvNr3NU wvhr]oWP.DH'^kVYAGs7k"uL4'x0WzZCUڷXp=Lu\yps\o,5@̩\J_魃~ 6?/x>gNY?<a q@.*XRQ:䂂YdDӔu5vR/t8;(8"pE[&sj%B-k1RfbS(f×Vu{sl2,Ii t\UQIs,#dOF mK*SLY{Z+!a"7Ǜ_f{bKGĐjX͖9(JR7j[8uD2BdL A{92+V^%1)YuguЂz+I 5,(k~8vGYVӷ?+? WGoV7yO;)ʒ~oQo3oj;_ ?s|s W _5ÉZh"bwX$hW> 1ipћyͯݾzC\& `;$))ccQH@Nk 5n, }{%嬎i•_F*@(S)4ibH%dm0R aA"HQ,YKh`AHgΠ"ret|]IskϘ耛XٰxF2B&%#ubCt:6gIp3i ̆2:D2nDk#:}w͢F<˪V.:`lłzQa8k@cRF:qh s1s$ $$,);{?m3?mg}YNKؒX`"T, A و,II))ILF $UasfE`PȢ!Qll]X}8cmǍ5>\Epgnjbʎ/cNE|NdG]@xozrOwl1lssx4Mky5??ʟ15?V^Gc~73}s?SygW>[1Ԋ)x|1?#?gW;wspp~?䛾x#˥+Wb8S;Vm°lT5Ka:vJ~u…9a]_W<@W mYL!MÆJ _,t1%U8BA EJۨVc%p.LZ(mA*+QU\UFljѦ,$aID"R̈%& LQrDn#Gc39P=Rp%1 2^:ZM TUIux塿pG+(CMvCzF'jCx ֕5+dzKQ@AŌ8s*{`yQ9r9JȱU(c Qm͔@ԩ-OXaHZ4D@!v[̇6:/e:@Krr *,¾W{pg]$k}2Mgt,>'q>ꕏW>ӷm_.~w,s&+>/|>/c<珽c WU8j;~a^7->^k/cO0 p~{50JA]C-,%Ow ibLIU@N[(JTACY̘Zj$v:s_xF) `9f5brzGU-(XP;rp.cTb!Q DuS%jxLEj#"iYC,=.4y?t#lP8S{ (HIPHrb\ sJ ,9}&j2asi0ی{W Ң=@S:73ͱFGDYQ>2R6qC2ʙbdAS,v%fAys#-~6a:}R:l綉Fn boe)NJ%% Z:o{[9s}^eGq!م:7:M֞':׈9' b1x \RʯG_b7+^W+9[~wGx$o~w=9sK덶#'~;!/y cwXU':} AzI\n7z_uLeY߇"ULf,sIYU$F V R8FN6 HChl"=DJ"BȦc6Omyvxl}$x&%5PDB)6`J[ϴ3n;GN1lJ4@+BF;cĄ 2fK8k{ *}=43:e;}10OqCԣ(?e^1gddp9ډ)j-`N@c<ݲU|mCjѾkjjVfvYǚn@;K%ǰtpt.#0)6aY%[+N gsb9ҤTؼ/vT˜j.[DuzlgY6(b1S,1~ZgY^ȠDŽîƮN'uuFUTjrrgU_5 +s_mkwv|gJv-'^owcOq9x韲ϛk^/y988}??3_s6Oы_\rgsp҆1ǻ:BloJ ËFUװ"` k~hAp'L% ,˜6X R(mk)+G@rEaۖ2ܾ뛌{l(aellﰱ̜M>.YIDniņ1@&:W`Fk}vῇRXn]I $bB]6zdmF1f&9# 3pyP:>]JPy7\'[JKɞqIw68%vrlΣ?H)y羂^RVdiʗyϝ%/~._awwOOF?xg~[[wx6?#?J|7廿￟[;x _K>aܹ{a#^ڨ!mą])Vِ]:voVLM'w}d;CEoXx31V xt+݁5(]O"9:JMªldcQx -)'l$S6)"92EVp5ҷ4V>ϯ}Yn#,V7C'Hh QJBJ$G">v C)J**xlܷ3e3H6l3Ns<{<%9 wD&`7) _"*+AG E{M2"0Qޤݡ{Xd1m xӠ\g|>Cl;EM$i:CC`F,X/s8ߧZjLn &V tJ:%w_c1PΜgk{jN̜I"N !:B^1;ɭ62JIi EmŘjo?VO.(:R'=<3W? |䉏RUg=-oU|z&ogO_zɧz罒_7~WD?7xs%Ξ=W|W㍶spx~mfs~|w#,K>qYb x=aܙ!"h++jv JտOɱq/!>Y.WA`Ʌ??Jw8cP"I0ujXZ~ H}a|Cv 6b!H(ʌ6ӝSEAIBƈ̎1[;1Pph oz$7#p(0 hDeu8s5LH>/9`AӤ)2EmSj \#X>Z^p pg2=-ɲm]rbՏ q ܕ5^욥mz9%&Zj1]!{֊j҃GKkWU0s3md CPא!I IIX^fY % DY1lN66vl3wixG3RV)Lظ\Ũ?֥6.;;ZiѮ<K)C%3pyg(n]g}ުN(Y.wlK0|W GR/=5s͕K)y_^Qyx?޵g'?DqwmTh(ITŨADK)M5AtI4xmQDEQ@(i ΩsnZqlST:{vsc}#&km//{nL VBVxO!NgQ:ɽ]:[jhO'_]sIc!Gw}<`ǡa`Dad*|@}f5H'J٣=lj xe _NS脥EI ['Rb_[fSUU=cCCpPbnWদgTQK-`wmpoLC-CкMlb;.ߡ-udZ[6^]V(y) ^ߧUü(8sAv(UE z"={TZVSf"VQ;g *zjQDþGU)̱>ˆŚI2!Ix(X{I\ؿe(U UX ;22Hy[PRdVd*J.xM0A%RQbJ,K"2`@p+pZ">H~~3>͙Ht&-w;\ y(t*P|wt~_Otۍ월GUklZyu:PԲĶ(âw|Nn.P/WED10 >bp,q&'=& +4UuDҮHvd9Ed^d]&;c/-B'll3r@Яg@!bh>-6)CJ41N6s&U9ڠjKgWQՃ5 lT@q]Y_fo2xucK: KMlb8~ ,w{9DҾ0H"7&W_'a7vN}AFhݦVjLEp%+F#] IDAT/BG@IlS@= RF! j*|.>ˋGĐDqӒٱg 3ply"[ZaUHb=af}XD8ʰPs[!Q۷C j}cR4ͬce 2'%&y Mvr-7$Ach@;uT^ziz- - M9įk3ڟ#5 \G攻}Ȥ=+usюaqv(u(8Tp$#C2O8EˌX"\y("9Gx,vH ]ŧ{,9Ϙ_+~ؔo|Ɋ0cŸVBFhzEIzeRC@zt>G:%kpRs|2B?r=ѓKua uaIr%K w|7Mlbq2Hz$2bAˏHAo2mYzmQZlL$z=ʊV:>60%F{:TňE#4hS3 %`R:W%H$z{@\QQd)O@a`k󒬊 LpLɸk<{8 JHS(}vO$yMwG:qy8|nv!‡]=ۂoюv>뛝AeTt[ڻe[ONTCja)[85;If+Le1KLT &F`.u$iDt2Gg[v)2SИ wqq$fR@]֌7oq=,K!&i):a^c.͚ͻꚩP(`S5Xe׮2PnZd\>,5hOۭo}f@9``Ԟh&6TݺaC_*$9f`l>V-qW|#m!6 ɜ$JA3cb*:7sԝHӡ%WcGUQ\ę)#p 0) J pkeA`b:"n`;3mrW5&w:e9@; :Oi;4GA"钺 ) JPҥƀ:{VsD ~ o%9uzRLdpe{9 Vx47X.*h:ٯQU ,cV5CZߐ4ŁrU^e g0tnٺ!e4pq-,0fkƂpV+} ށ{H)PFs"F(deO:=|@+%S]0a&5k)]Q{Ca0p^;ڙ~am׮`R V!9Ni0 ]5ͺ{h ~}MlbǏ38o}H0̌czB9 'O ;'a{;c29+]XvAb_g%G}/a\Հb8̟%#HRɊ2G%I$dpL<ᮃ, h%9XnZpwf(#NKF:|~4 Y,ٝ3<y{~2GP3F;;b\&X |Z5MlbqQ` >snHM`u2q[6>&EK#KE$ܐ헔b"Ha5 yÍ߽u4mhy@đ$  얠+:+(t&ģZL"&[)3SrF[/V5}qz;;dM4U\~1 %!a%y I)I⸃\=%N( e5֌3W[.%H(4ؖDNEGŘCh׽A:0EQ:xlg-2!b 8}5ٱYwwWGE-04J} x/`DPy5IK9A\qNd,ϰh⑃2qx VTsw|pozDNfD0x_Ђm<{QG}nOG= 3gKSm35uJ Gșk"n~ N[MKYee.0RK*U v!ĆaW` T(9$۠9l jK%"c%N# e(:p}9Q߹6WH?-JvfL+<7?baԧgwy8̂v;}AZ۰PѦ7oN)^mEa0|(RTY_M ]K!QeMlb8~D4tNH(!ןQǬZLCLJI mt$(+bD%RL*JW5 m!4Y3X0IJ6K:Jm*)jJ VVx)ʌ,*: 3PV1\4is6n.Ghqcs R43Ov Ep̂!1[X1e`8SK8@KX.Z]D0*%q!q'L9otUn "|rE[[\.&# e[{;k}αY/Qme`Sk 8EȱxD,gΤ|믉:$^teYg. qmIS9ji )|Tm.g:gT4WBlbd;J |0ꪦZk(4<:92NC,0j:cDĄ(e8nt?/uK>JtLůSXQHv(GX ҈K Ե?XҺpV+^G-\mb&6c>0w/&5R) 3"Pqne/!l !bDUm<ԁX0(`H'.3N]o챿[EAN\HkJl!GĨ1KʢtATF-|XG c*1.?\_b[Am}Cp@,1DSV±r* R8 SE9K%i VoqM9='n8wwke}2DڮS qߙ|635㽔v:*"לKeX<@ŒṈr9p*Ix'0U9fv\/P$=,.ZIP`(F@@&@dEc2|EK Qai,lSTcI Vut^pJu[?jPXuͳm:#zT:IF?knJvblEDrX+awW=:6+mHuw&6 p828^;rvFj0@*@@t8z܌xj#Sw*{fk?aI;W,V,qbzL AL4uQN$j5( TET jfZwkrENpy1Hԥ*r@u[Mm/Y;\u|,b@ Jj_5[(&MQH`^SZ*-rX=?Ѭ vB4xݣ vħ|v)7'kz6thz]uᢦvkIt4#k@EzgXW]w::kW |= %WݜrƘhG r@y =1 J*!VZٙV:5YB0q8:xS/]WKA5==4L +>rV衖Ȁ^ThQUU(+nTixV7ƣt\/i"9VBjCU&6 p,y&oxIs}g_[-oO (l`}_-|oGKG[&gϣIea(.Sʷ)uUkH]kmS;XEII N$CGû5N x);V3W/LuKqXjc{fxJfQ;4YꟳK׏W̚onn箢w =}åm; i{tf+L46Mlbcy,o<9oۿ-wk_K^-oYW Y6%kUޭu^'d\ܥs"Ny*at;+DnW6^<1jD|v9JqU|+0b("WL@Cҷ! 5QR=a(&D/EnLFש8w$KGzF6"c>%x"fXib)2 sJ[mz'jNʒbJ ޞ(5$,B9>K bIeGWC0 ݔ*XJ11Gq8M ?]X6)+*J`A"I}МO\)tNNVrg5DŽ.x*@-U:"t0=kV > Aʶ{bpqA3]Rb>3}uxpat]lZ[} G.vjRxvȷF^Ug F$礷p\sӣF9*[Mlb8ʧg#"}/fyۻ7[GWǏ㵯reY$f'mxϋ%GJ{hfﭐC9g$ӇQ_3Hxt¯Mf֨y, Cރڐ8Ԫi]5E9Iru'WS#]xAUN u]3InZhll6#MSc/2nQϏF(qv|ێB]}C:lV6iKH%3S۳(% LFx&h v̱Xa?HvAʹ'چd'Lk,)6^g *XAMII+E+[pތ'{[ðDX`:##횷u-}+NF`]1]ՅUjM;O2А knBYXsW:J9ξ@JeQp+8D` O1RܐC:C Nï_g88Hc]>|xQ9}K+zEKx)ҟ.-6q]G>1lG^t:_ć8U?Iۛ3UDN>?<&M|Mxwo\Ra^wҍ:k4omQ k+ߥ^3 P4hjDIH ٱ5c̚(J=k>$N9*+"wDQ+=edB|8eC,e:'(biZfbƯe.46t]0,YRQ$ J Z쨄sLu5sg5 U"8 sD=/2,` v v1w9Y+tRu0'2gAeebWzp0pp,H &@~1haLfz@ӵ_ 9J##@0DT$fDLlmE\~3f+Vr PR)Ry \4( U籚 爯` (D| IDATW8+S[tץ _).\=Ou^ɡ N+#^*=3)=.Kll= a~M|%Q|a\?r?3Ν;wΞ=//_xU7Q:S%eMvJv$S}tYZ;kY'6$w>u*UD\J46vئiA^R{B%=}D^Q(aNI QbMъ#KTQpΫM-K`\x̵](HE"Rl/z]zf.(X] _oRPQvt #L5:"wsPx ɬR*XM@bbPuDTɋyaMqIJ T:'[$ӄ~S+0_,W=dBV3t*ZeEm5 7k(m]2j߀h?'fNVs [W *8yfɫ&sGYy]s3K%( ZTUCC}:Di}M ]Gs6X[Fks{su168ҹ>#À/ޭ{A˾v/ U01'޳1ʑx8'.Dt؉WWk-/yW5~_OYY(WG̝grxWvЧ*t&JX".ZUxhъ,HTjxT $є*&v@Mii_2#< TU]KvAj%7u^qclzA3o(L&3x+J%{䠌1&LfKYFXqRwVꮟ鉄T&lK~MN5øИ%!f%bnPB&)HR'AgxgIBE#αkڄ.*qZ$1X/2 k<6I xSVɢ K 9b['9=0/w0,~1ߞso9(syrAFAƊCuTf-JS[lT@pD(O-Nfڔ1N'O xZ}"ac,X]rΒ8sҝĻ`=ΆaAB1x4*hN9ZT@5)B+LhjQF{-UU7f=ht#錇 p o9j9C]g^Ĥu} USe]9R<:j;M|sjOmDG<˿y +|ӟ+~x|k^˭/|>^s5?[_yxIȋ;)~{?㧈*ɏ<9>6|| wgsy-{ o_ ?^Me݀Ǡ&"Ghf7Ft4YAkR}oۉ>XP%eVb TKWX{]uRa-Z*avcjDQg{%2Bt$ eFK Z.bȋ&PJcppAztnv+d,1R"@eOMnvaC 1*V-.lTl{&~.oNOʠwO@G̲oOmv>լy97Gm371{c>Oy8'|Ƿ|O:>a=}}@OxЃg}ȃy?y,M\9… チpEuUỵɗ>Y/x {̣7;z<;K7;v'|g?9N/&yۻkO~?Z4O: G맦kV #{@I\f* W(i%.0ުTDF{#xBԼޢ.Hi:3N2*5$e5hǯ;866IZ &FS$UɖxB[ cSvN' ٢S9xbjU^/jc* dƉtSL$S!L'M tf"&%z hTeTʀQJ7%*Qi4v.U$(j<_5W/xїMo7~u|GbμQx3||si3O^ʯ:]Xcxϓ$S|ی[rU&nt0)=1AI`],SdK5/)~#y^ jV_nGDV>-=nb .;z/A!Tʥ{S,kJdeQTh r!fRC(V,@ը+\j &=ђ-b&()ʮ4rDwQJBX]wdK䀋KB9ib]ā吗ܞ`sIsc'X0 ӌ<hY%XS`eD8"I҄Ԝ!_M8uqgWDK!"A|+< w%+ƣce،릜iΉvd)L*%oKr4*pVqF)}F.%xzT=&UćXۙ!::ބڒQ55h`lL$ Pwxׇgᰓ 9T-]ꕈ ?򯅇LqvFGJ˰Drw `nk$];;W Y7x?<_ܯ<*<GU7 z#sS/eFŋG?oΗ峹Y:}zC7c78O{*OSR=;it叞a327L<[f9+B8`"Fo~WdP[h휣h,jLeLzS\YgJjEY vPR4j+ E0(|$RD fR)o:>\9j]Jc{|p_b.0Ɠ\&Sʾ!_Arj>._g9ZH"(Fy eIZX\ĖL( HM"5D"D{<*-WU1A(O\0=c '*1RZ }%/w(fOXHn[fa:cH)QơL55" TMM`*DldlSw 4 s=F|n~AU"ob)e>BSF rݖ諦U8B瞆?\ydP"HlbWc8=}?3e_tM͏ڼU?3p_gOlG},/}9{C!J߿/{~8~^|ezi_ ۾nFʟi~O}̣g{l>ȏ,O K8$q~;_w* >jq6枋o|?Rk~6N@0WX#AujM:͆y~QaMn:EԠ w '~mVvj߀Ė׈#S-F;ŭ%=62Dŋՠ^IDTb8u*ECAOiQTNʽmvi[go]͇pbYJئYVQA0bWoHv,%Y)JH5(lqEʲdOP;#Ir"F8ӄ(ɳ"8JI|]tNrSƶxX*`Y$fқNnMmǂ]౬Ћ"8q|%{pٲ7Z{GiٷJf hZЇ蓲{*v>-)ŶlWE>˲gStң胤&{i"bcF{N6@&+sD]1ǘc5uTUԡbib.x1["P8?dG O艡Dm-&<*q$[4 3mRlsEewv/ct8gH g/bSeΒ5!Dg}ߒ6gU[ Xޅ`?NØu=2A^YYY1E*۠3lֽBkY,] ^XAM5RK*$J@-%H_GR&J,Q G' IDATˊŢpN).9p3& @U伪9Eׂ&!Pe{zcaIhk&G}ax&Xf {"_\ 2P&#pCfK.+*c*R=^O6Ϧ8($ĂhQ< 30+&)>#DkM&Bzw͓4r]7:sfYYYCo=/Cb9빧6Dql]tlh<@a\ oo7<,Xp[9b6IHHR 2p;5fF Iꚺ &ńR88*j&b Uuv51˥ qV%i莣 W'ϋҶLA 3Jfy?ϲyoF&Kb I#PaBY 8`eE%,,QTJqD\2l1M7V  bTbH˴ 4sDS)ka۽5@9|>h錙fc+2-k269g5=q.ǶLBL9V)jblEr^Ms"92oJ{lɶ&a_8Hb=&D h>SkbkaЅ#C7%fS E>gO#ȍwF9X f3ɎE6 hGA2vD74? *Jbn*_s( X[`YY#F@9V+CH S2rqcGdqgbsj([7ذ,myRS(5ysvSeléǩF,,9 RòQEre;(È^dGt9\PK䉥0̨sγ<)Lbh.MQ0ISbyqI>6 1H8X.-4f6fk,pc2Ѽ$&ΐv@R&Û  3ћl$g] b[!ۄ)13:1:o nDkB2MѠTOQ 4FGpiphײ|-ý!VfgWOд[+ՀL(٢dB煛I5`AUD:h Ҥ]Oy {ccYYek![l%ցH %೑Cl%wlWmYhюn/dұЄ|AMq D54tb8[QIlC,Vha1b$ƈd:p%K!aZr,j;lOKRrd"8&ϱu"V<-tLb6Eta`0C>ik7ҳ{$JqH &8xKOUO*NruIA%f1G 3Q4T@2P ̤&9j71(n~٠%٩@r860w cowX&؎416iѧa!Rf,MN>=GF$ 2^ޗi2BPĪFhh}79q_ͩ% ~MPKb,FSa,c$,&Dߞ}i6Ԧ{j T,T,k67YO$qD<&ֳLLsbol6Z{<%̆@Xf7rڬڬ pGiYh=[x·u^ J, w&a*$kIOkH, 5n=poOUoʀI@w`51x$I2' .̈1T tl6h\@}pGA-nl6KO7;`p9ٛ9M7Ĕ|V0x>2Fd!KZV'mS5pVel%y/meA)WsTr!~pۻWR$0hL1_>"^pQ}z BLM$)N_0Bb#ɳH^GrH3Dg@&S1N %|mC kf"gQMrSU5j&qkG%# h,qB [?Sĝ]8LUIZk6SHl`[h$J-UO'[ r;( @Ky>{!)tT6Sn?`~?ׂ9 5PSQ @hUĽzMn_6׵eQ@dH۬ڬڬ pƦCB=JT7-$K]=vum݅ʭ Gs IYyϝAfmbdq+Y$ ԃ%ekpcxhpǹ{UwxXi != )2FK+b D֫)bfj96yBK j9[=r;?^==9Jn"1u6k6k6kQ1,g;lzà/_h4ar\gf)΅` Dm4z47sXbB" B->FQw;7dS OgP¢Ο*{rfR*?"M#٘ Sw_^wF!-vVb?H6MDCp܂[((3*@ά_;sȍ_#̨ %7 T؞VjTLGD3MJbnngP%o[ F42j H7/j Sc1q68bKRMX({h4’jzuSv"]\8]mBU<.L_9@B%X6j m!M5ռgM&FҠjLq!`3:m$&z(ce8k+#sM 8|hMhz .,fV"TK1#Qq qJdJIf( (U$$֋'5U323.NU^kGˏg;KL"llt[?QroU۹{\PYYY1Vۤe+Jtu3hN`?}>S0f5=<ĔY<%'x7Ip&QEr^JeY. ng%L#^`SWǗfӜ>}!c&0)mL- ^g#?}h^; 3h:mHڈ(YƱY=vH9NdQU}9)FIJ;jmqFv 3 gbө|{[FN:k37`q6k6k]yBSnsKLph `+5){%=K*Y5ͦX&Kdc9/{ŨTӆAi]./%&b8Kſ/^ oIL%3\t@9|2{;enUz.Yϒl@z/GA!dx 򤉵簠bIEpxJU, Zyk! :fyVnTub1`Y4GEAÅX`Z8Zńf8|;}`=`(톞GuM[;:}c"aHZ+onEBv-())(p) Z &x[(s%ۨh Z56&3 +ʄ4$iD0{oibDsP׋ҽ9sagm%6GKs݀An JhQxPLp:iXD+jU *̶4{SȪ|~hdwrCFR~\?ͪQcYiҝq;Bڬڬͺ+ظwdC9rcrLݚ-N lgYpy|ܛ>ÿۨP &s,9dA gX9"()-,Ϳ fFh8ΚǸfRyh9*uH(UX1a{Z{jٌC# p(__-BG˨A^ۘ @2)ˉ{Ql)/P8'x<yf5YEI@Iqmla^~d#)1Ұbm4tNfF6e}06!B e_kF:y{kh6NV11`QL jǘZ@u|:# Ѩ%,~E;Nwyϼ+66tL1"k88*}Do+[n[vrDFJV>삀}56Yu^7pt]NW]w=mDYu^ qǏhi҆<ge$w$ +eqXp94uu2}@8QZc Y[^eʁJn틦EIRm"N"QrdRVg%"Z}vtÕ;c̵s}wCRhiHͅjylhc|o;h4I$7Qqu5Q2hgY.,9n$V)O)'rRx**e V!ĈRSu͔kx5]9a 98 'zlcNND5$}!Sre θ`I3c1vNwy6k6k`񤠱ylp7=uz)iqQ>#C"9۬GO _f'ѕ>]+Қ9@gTH*Ӣ$SeJdb $W%nYzJ^OM|h+kJ6<Π 1Kq!"1UzxuY/&dpW؊̱?Wڷ JdU5QZ;;d<҂Cz9~QY8dʄ .S4W^|x3W0!іaNvm!EW4ljiδ :L'So+[]squ=+|24`u7S:Sq̓-\:v3*umyny{ۗgH!ځN^HDS$(DzFN&yKOU@-"EU'=x? Y:29z!~t_fhs>u71ae糮mw~K:Yp[u c#! o_l^nfmfAcn^QN+C pw:> W}dft~/6b넙GiT/r{3$=WA5?@A hFuUCf@MCD} 5 O#kY[ꈵW\بɷ (vAi%y:5 z ]wt%儠P6q6kAxI\ih&~w1ֿ{};>7t8n7b_Zicc@k9 RƲ.#ya 8C2f-?yGQTKs!]!j*8>Q1Ji$eš㩐dQe!D%(eifL3i,efFز֊(E^?|u_'<ȗ}x߾bP]OiO*>>wso?.0N?׽/9wx?Q'1_/_?7yc(褡)ѷҩ@E`Ah\dd" CDzQE);UTz}2ϲi23s xhfψ6dL F f(Nr ~ u*˺`y146~`Z s!d_n|\9ٟ3)kHPSRrbn\\z[,QXT)CjLp[G#ԑif^5IVZ:dd";[V3t5Q[0Fܱ˨f(u2F8vn$Qw(֑wc { Hjoc iW5o~5oYlh̥B]l \Axb2c\:ᆇ_lkz{xτe AϘcچn'@jsrnm'}ţ ;qM9lQրwlF1R~&pcYڬzo\{5;w_Ǚ3S? fS[ys>$qK&tF\ϳa0 +_.vyx$ƘІ뚒VQ RW#V>v6"1?J)5+#cg_\1^8&J28* !D,D1|Q0=3Cdʴ2%Q=UŘM=x^W@ql:Ꭾ9 \0499J3OJy.W=hӗzthpR ,= cT$(gM#2Rsl=:f:= FoŔi@u hD}TЬņqP4n_;ZWJ;k&HyW?eaJi3 EK3ڝ]YFjÜbNybX)Els͛/=YrL̽8|GVNnsIq1NvUIɡkYp9bk]GQW@"}59:BArA)ؽ [9)2Ə^'|;7k+K$pEq}9и;\mxۿoqu\v|/sm?>wGI¡&~f .l*Tb;f.wbPyܨXϊn+(\ ˋ?Sn6>Sw}rWQ>ߵ` _oG?~Ʒʯ/~"suh_|>/._ԧO q۳n5kb[8cϪ5EwzwߪP}Tg:=Bb 96<^IIWy3[&|DW\uٕ5T*Қuwe}Vz4vpl c8lTaɄ gPdinxe\\tc]9'=(N:<}?Eo&?1zԑկ}-g쇢\{5s=/_},??΍z_7N\sU|ӿ|<~_/j~gyo/Kw ;uooxWOR^?%/s=7r gϝ'~g>oxL\O'_x>y2DŽx_W5|cC?SRY߹~a.P6ׁ|ES{LTh;3nY-4ٰ?$#hj|%"sMn:@jNƜSG]58J.]\N#AQڠt] .T ʺ3 5uf(S"gPls}\trElR"A"zz0=y} dRFfSc{ [SekLPxppjdnJщP%7Ěw>ڪ rL=R)|%ǂ.q6od2(kB\0ArtuL[V!f $bϢlQq<Ƙt~ιGa7FD:m/#JW^vi .$q^w:T|Yj9hw<: ;nN`kO\4ъ6Ns<*JVy 2Sv):i=m<=Oc ΏK<E␐f\ȇu6L7-Zy8qEgxʓow=, o6kgq9^WU?o_o8{,~{׼<'^︟oG<]>y'/wOZ___*U;W_u% ~_?/'œ03'qUWw-_[Ν;ϋ} gΜ/k˗mI;uw[vfY?>7~~=.b^/cw_/f2u+ȓ,TVDN2'N@˵80<\7=bK?aEȜ*!" T!"1X R+D\؉( 2JL e2DF,CRsBqZ#u pB@*VT X!ynW<`uH4k }Cs8]Z##$b,Y :}3\B|lO Nl_=({lk$q%GN|:=$~d5e ܳc3+)1a+^?ݱm ʏBv}jHeskXJ%G6oyx۟omm273xk_p^vo5{=wk_weq׻/>}_ԧL؉n6^ʛqYnڙa]r>=&|?};GǏa1F>`pxGulom>~7|'%:`N-*[5rvV0~wlbkH?/j# 7D$*4OHZD%CbGpi5Bڬ~4ii46&זI 0u08eu0ͺjtvܸ~҈pcaPj%d8f57ls})v:Y>U(s"`rQ06k|~pG?bYb\1E)x̣>˓$>tMpu|#>|ͷƒNqd{?7џ<'C'8<h;P=zH%^xXXo`*kg-^KJT2D2985Ti t 2^2;\Zƚ]7qŇϩ93^뎕\2!U9Jifke=F,3OSS. _)\6aSsa>30G{T˳<R3<2TL$Pqpx'DQהy-^Dec) 6'ڜY.S a dꍙCz3~s7ܔnۘ/9*j'7<{+6dz.#ИRﵝksx)a&Rzˡu,Ԝhih" O*gy~O1?~?rcgw}ͺ{@T,ge=ʨ |Tk}v#MrIwɣ8{@RÄJfYF)r] ,]جͺg+ s?k03ޜ5 IDAT 󖷾OzoG^WiKg=o╯kٟ⦎X1^$۳n=!L^?_|覛n>gtn:ફb6ߕxU o|3tz h.N4s cdzuW8,o|;h+2zR1&ZH.6ޖ~!KR#L&3+3s! D=08l=BDS\ U`2'H`Ʋ!Ř:6YfL?TBO7jt. [It1*ʻ2(S3s e{.zJXP>2XP]A˚},{?m7SBՑ(S&*-/L}d3o ( pfW6IHCg$i; Iffh`kNl9fcZ¤PK!ηw[Vo6o=1~;{P,Dɮx4zPjJl>3`ntv_j( !BƙqV_ A G9-mNQ0( 7`,j߭7~#&]dMđ@ XR3﹪vkVˣlH@٣bqLeل\+]g6j`H>߰lSń-2c-0T \ӧЌ.fƩ^nv6s2n|׻x>ȟo|=Dϱ~mr<~/Mnmm>/K暫"ȣ/2^q-p8z'ٞgN3f~覛Mof6rԩ۵//}n6%)'œfo˶}63gyt[Y{kUN:Bg\M$aHH琛Q"FQPD :L4W܋ ɸ*+QUZk1jj;`1jZs5>o7qP[ 'fBCzu)Z]d+^%+uSm T$Ù)UQ$L݆Hв{Y|i ?Ru*C90E,+H&(% )cr1JbyJ_fn@KeP̛stXIa%PҬmeLv˅2J;dceUr<=:קb3fAng %2/!U-Fr2J=]eS1X%ޔRDI}͌zc._t"WPhA%:g9&lMp.gM! ҷ)5574byo EW%S?6U˖-j F U_J5fSϱw=0#=Г֔OpUkOQP1\t6B8y{\&̨=3QZ;=GKVUUe﬩S/I-5 ߑ W*K'XdM@9#cL{>վ'7Rӈz: 4ț34>?[_Md2i^~~Y}Wlw,}F;;x߻%lr V?{g UZWPZ!,L{ߩ{k0!5b,)Gx9d<]>3ɜ{B2k+lˠB%RbM;,yN: 'd\lȊmv%>Q|ʹ=8lz_gw%C6<A.K!՞,=lң~p@!dʊ(R3cr䘜#fgCySoarc]ph6L*&ۖsx..]+O|?*3Y&{;gGɘ|cQsXrfL޷UӺjm8 2; XzJhN@HqY^!2'w" ?3i;.q'ogzx׮pp|DQMxs~8pG=lg~ |bLijZJnH3iHjj2E"efc]M^,ιӍ9w+{{{b~?ijo> $϶ 4~w~ ok;F*/O-%oZ=[h{4㻲$R&Xm8Rb61RCSGl@ϻPh*`Sf~()ZR%}/J"viRQ|0ɀn5jЙT]3>*UqفGP;L19-rΊcc2ˆ!TZ,hePpxwAq4†k{L-vϰ6քlc [y8VɰG D4oBP$^u*ю &UWtǝs]sם\%txFdc$#bΞgoc}* FjAnRPU$UMsj5U%YAkr:Td:I(J bJ&ۛ̏;yqLER4f.:5Ѕ0| 5m4^tSn `9;iojRo6tOP]MUT l`(8N=IjR2Su:+<%?h䦓[XxG㍆{Ox2h|jc9SE+p< 4v}Śz3YS.KsCMîg?/="IYgwAhGap&QB|ePuG"FP)/ԨYuL cOoTY1uTS?Z 6G+V~ @y7:J^SW~mtDʁ#*b`L9NAJ @a5pcȷ7a .9mP;Jɮ#)jSK]qd!+bFQu\'>|sxTR2x5ʔm K8g.vu*YrSe/-R64mnrHIT(U< HVt8(N V AAh(ː"+ #;XD$gv0rptј+&D|g $JS¼}-pTE^jjoB ).sϥqu22RӤQ|sLluf=qTӒՕOo_o !ň4kC> 0Hmo6i׏.rX!H|`5֑-NLmyL։UZ$jx.*i[NZWKA$pz-Hi4n&S72qYg=SrBQ0[xu}N<3IHG4I֊|l\Gv,3f=c=21$A|cS}Z;;;(tǣㅿcKKy~?Ο'6|W7jam_ r:C~(mkí}_]: CzbQzr tMR_A^,r׌Gnʔ u _|/戤m!)P=sc c6nA< OUN:pǂPU.9|HAL0RokR%kڊT>{M}/vKy475 0`I}G` #W2Fq1Tbtβmx#s6{^{])$ K9gtذCQ34UT[ DlOG8Cjg{kA+^aɸ(ӧv}*:Fy@쳝s@sev.l@E zw}o|S[x<)wkS?'>3{{oK/rJ/՟z.>}oCnbhD,-o_&duk, #!UZ>I-/o4ZEMHzjk(⸢8,9:3?.0dz)(xLS5&@-HlT ͠ B\PUK/=! a#@rPFQz4Gb%m0rMdw+og6r\3xN>: q-%(N`0Ɏ%V65%{*klm`GdgNb3CúrB+KbTAAĴ(FѴS+!]t.f:HMfZ~6"wvvwؔ.% ۗŵnUcRлn*,U:* '׍/K{odnRdWWcݱ1AX% 6(=ᨥ nw+PvČUm269}gh~&VKU/IV[nӞq}3]ZSXx]ztŠtTpVhv,=KٳP1eʔ+\_^?c7֢ P1FRIWùQm'cR;p6?jQR[4RBC#%Th -óE9XKA>_애Gfz –llGOA_ ٨nXX6c#ѳ^g<ަ̎/|,lʒr:Gqy!_5GoA-RQ;3uFd9f(xL6:$ #g1(cX1 PVJJ0+Qɢxk *_' KPD휟8'OI9\N X_~W~/ʯ8' //;%%=z-A_bw#\;Ţ|HzKi$գ iBA\K$#imE|PU1l &dt:ÆDM6A1s6bV~4Hm^Oл>'AɿwazX8eoUN0@ca.@c\I`5PHD'U&bkU(98>`9goa{ md ;P U:GADR|L}HKĬ M] W`M(f3ȑgPzRk 6&hB$kϦP0j6s#`a$u]ߪR $cnx[k2GZy@!ǰ9awvRU|-C:gn-4<:.[nXWڳ8'=zj>޽:\e𘥷5VʉO5b6#K}dQ{_tC'?bb]UjOAlyzz<؁zhk2$` *#զXuH,&OuEklbN|3֎3"EfbQlC,! Mc6UM&:*+B^e$&P/rZ!i6ME o9k8?a<Α6b5;5ӫ>ں$l,YF2fC A6`AeEBfnt@ IDATiy`6 7 Qui!BB|?7vi-B0ϒ,c!HEYB9Ȍ xmlUlOP"Ul]Q/K( V,Y>N#\U Ksq_)Z ]]'xNY9#UPXCc)U]cc!ٮl=ϩ$=%~ c=c=omTYq]~! 0kV2{HGA 1B啫w=;&pn#z $W0mt}j9n1ZgtiϜ61S(X  ;R  QTml/ZqURĈ*攪da4i47Pģ՜2YvQWKFP+gP}|!,YE5*QmK!,UhσTǕhCRU4 S.T4,k=Eo.ԂǛ]"fr~;i TP) (.3qQ!1]w(jaeTݥw }I E,\哻u)u4t4Oe׾PG}w?9w3f(lUK]<u_J2dfx[XX5p\.=6XoI/K Z>mt)lm0BSpr>;Gl˙ma'& d*F;MAz ܭ(Dculnnյ)5&g78{,n6cnF30Ҩ#Kzu0]8 BIVԔ*Jg®Ԡ+ FZEDTZ|! iBK1}>VƦIim+4LDp*]1hbZ1/0)C™)jT(U#pjg:kDkU[Wl^֛>0Jj`pTYZ[ӝ~I!TuJva8RkսES@ Y1h# T C𱐇Ђxkh j$ )VFC^UKjĘPCPGV4JT1 kPip2ubC^ШJ骦.MUuevP&̙@\͕*1w9FOzȮhf)n~Ȃ2R^O=?޷K1T׵xA{UE?W% x6y>,ib%K;IG=YCXX5p2^JK[hC ?n zHvҵ$j~.MhG ]5`$%ha@\"H"X,tBFL0!ߊ`ĤXyc EOT0F6#ET P%f ZUQmdLFZ&}6yQaې>iAߛ"a9RR&V* <,\pNUU߀@Aqb%M~E2k^)''=.-1tOzT,TY7 S$چȩz.OΤ=oif$'N嚺&A3~5?NIF^ʗx|ߊ!qovy{c֓kiV ]?>ճ}pd[zÇU,*- @i)fQXBtiet2%UE1+0GHfx. Ժ)CSEȋ)$|)"UUSŐ\wpxpջ.Uf(~@W%J:Ph{B`*es-Oie J} IBQ ŬlTT,x!in$X=XţV>;W8E|ēo%OR@Hk ‚ $BVAРTk0'HUŸ-ECOq viJk""HHHV4^"Z }b)2Z>5 [p ,·MJb=q&V *V?]Q!x(:d˲S\x.Ly¬B{Mj@z}% aɱ雫}y +yÚ~wڡ/nc̘sDa{)c΅,\koժWpƒ%)0dd6K9eBW%w/c=O?@UUG?ƛ6~گ~c ;^5p"+}VC,s+h>}X£|i1t5= ,vYn1@AEl6@1(KKn .˨"4/0R@jVWT14~]hڸI1RL"ExC9Lgs]с/q'Nng@`;ާl NU\_A__X?}!XQJ*fxxk}NHWWft8r,9r\bN K>-4xʩ,58ƊmoYP]Qk0jU]xα s;o[7p̙{OvO~8zc CO]()%{k–6VVwЅiRH)%SJ9Φ༭4G2Y:\W#4J+(f89^d~|>q̵*\g%cPp#)S>]JEK7%vk C }Q]Jdv( )R_4]S&C3u-T M V* P$ˎb58xh!RD$H=HRܔaOQĉU=<>sEQ;S/xg_O[{ƿ<~]'~WU wy??<_MWn~g_ϝ_|U_Pq=N΀/OYP>uiYVY/aYdp" w'P*Ab~r( 4V䁇KW]ӷ먖N]I8fW W*Y -Z}aqkf[AjeVOQâkE_L~:/q_zNxe-'Hs {RN7-h\֪,.RB׵jOu+/8zuG!Z"a$h$ϱC@c\cC+T` bx9F9NQ7E oՃl ă`<=% PMn%ⰋDEZp&JCnԶ*jcB 3Z9|VYwFl |ac Z0vI {wh!k8ɢx$hA0*6w2n}ygnq~\ˉxo@YE1g{ZwS÷NWf@dF1%ǔB0r]9y8Fcp=q)(8lYنڧb]^vVF@_Ʉ$s#ړldg.=UA;T︃7|ݝW|G_ /goo[o{?r̽}'>3gxWWp'?IYV/oOx\/:նtx6YO~byupp*+溔hDT ۚ}]6QU2:=šV3 EJ0|tH&^oRHVϚI#_Tb>Qa5f8 >]3Kon&VmGT#_!Ÿ ei͹;׵#wԞ(IV0!0vHyTR v,&K .+c[Ci5Ŵ\$ 6y+FP#@@BGxQ2Jla, f\k/ !WHKj'D"!ۈik5^sTt*] ĪjԀi;=N4Yj^ BHdbM#6RuF#Tٶgr2>.; -x4*N鐱 =z.a$WM0zEՁKh' Bk[SLxMeVvMRR[1.%>w{6JJf2a0|6)7.^ëff3j 7Cp9^}K{?!oUU1V~i?s|C&1︝lΓާ><O%/{_?~sEc]>RKb)a|2hԦ% `i)U2;c09Ԏ^_%6v:f/01& XrS-W0CiUE&ShI*ǐtqaػ!w\.QJ2Q4]0_X*(ѵ7VB(ӊٵX,T0"q&cL=6x2VU'0AS/TBPysP2FelgX& O d-ZgQ:~ 5jUUgTg~>s_>W?o1}#k<?q - Rhҩ C e WEg O' n}:`ReʱpxΣy;)WŘ^M]iq GCRٜC|9x#ccoވͽ 1fAnF`)RkSIYWBRE֤׎-Ǫh(ﯽgp6@˜Mrfp݇j !p.{یqTU y\Q0r\<- IDATQi" V@lsV qSLgWK=E9Sa,x%+ ZA梟c q*SXESzm|>OjRUIc+ "DB#tc`LGXchi*mEmlUtNga$1BL$p X‡䄼br𐧞!vL>:'3.x d oFBӪ8 vm(qb]0T_e!& a:o`,T-V$J{u9N C)YRw?,K{Ozǃ2v<e2/Og==/g}ն̧?^WkxΟ__sbApΆdݛ;|g#h0eJf+S9 c!#1(-œ21J&\QFc5CŔ?F1O1Y 9$TO2sx(Hja *< ѕc+U A!Uhtd+Q3YֵXX#Eh5\LhHPjې1+> =s?訪+5p$zo]Mڈx?1y6F枃?L:Z&h1佾nKzYZ,ѥGez@o]<' lYu=ZI:Z&'_ljJςe굧3F e~=wYWȏ;[x3=/q5'o/3g>7g|y3'n{9lomk+`g{uVd3ky۸ <^>G6_-)=Z:C߬-hYB#Qd293)zFUZ61Ix,JC3',>uuQc% *uhP~U"P\_eaa`9>:4s|1:hA!xD,be-1YpU_q4J)6S8r0`DH!75'<,RJ+Atkoz.%VcJ:{#XJEӊ.!D@<*ɠڀGimzj-1P=5ʪUEe2VŮN'ʌ( cP+0*"lL0F U$uvYb*FEԐ7`jzL͒ ֥:ZL(uI"V)Cq2xfT{#"kޫt\&C&xFRUφI5H\/1oy;{8w,/g~ ?ūᛨ'<|CJC>P&x}ߟ'L&E3&b sp j[c?㩜qۥ|c|?G~} `Ĉ\gTd5ɖ<}x-s*96Q6 RVP)NU[0/?auFc Zq̧n b푙mυP3*!@8qɱ#Ş(CaH1HmEd>A1 Hֽ!`K,!(+R4(bLOx_CXlw)7ƇD5 {HM mbSB&QH3|a͡ !2WWf/W3+'^%UX30I%*K}|HyD,ڞ$ӻT&UjaOqʷNڷYVsZ %·ɪ$E-]WoDVmM盲NըB*pE{xыׁzܯ{l6ڵk_;ksVXkog=y |((ǿv~q:Aa&t &?e[Օ,8!aRQPPPR7 eۮ̪sn=I4 9M: da,,8!!,@؄@ $!+_n( HzORHݹٻ\kNX+2>^Z7=Tծʚc1vvnVE UH>?7!TxM&w!6Ɍh[ φ.UbYS5_W'PaL8\Wa e85Mr3anyfZN9NV4dEOCp}'/=+j']S#zr) gФFrWDh^HjQ7o3,Dxu]X^#ӄ1pUD6Rtrh\Nb5N'(Q\;!)w#;͊IB.! YMq8ɿsLd< =ap 4ŗ#) meTZgt8'9$8*yՔ tAX=NEtk{ҳ{bxW9a[*v*J)xir=-:e?;t=fU*AN"4 !S3޹"؊Ċ~C^x1͟Q f޻&L[iܗϟ+NLܐOgd"I܎g-Sv wIp3i|[4ۭ2Z;>}V3E&e-2ۓHeDL ׬XT !#R!8sԖ,PM8j6-Sٲy1'x+ U2*))Bg<\_):#) ǴYa 'YD-BmÙ[d9o$;RP:ࢡ.=)'જ;i9jjEn3r08-zڍeҊ`cw!G}X\UGULਫJC"ϙ*HlxQUU@b ܒwxpFgc3/:R_ 4l37Bœ89mn#9;Mrb{~M6峖vpKTG@.\Zm%|FV =XP(3oCF˪wjHG6zOrGGXrt:::O٥YRv8up|o'[g ?,D8DUxR7bMHT˜%23P*Nrd`C:p)#K("xBXPP"FUUTUnj1 80a,Hvǧ_7qMG(8ݣ8On",BX.DZ Zs!K\Ė|E堪,jhT X{*o`FnwQoTЇ*;%#tPմ):$T4Ii9ՆY`0ka a$=f8" YgD%,ifPL8qbTXP+E2S=Q< +bql5c f.qsJY-&sZ!R$-ОY?rpS=[#'g`nhP skNFPh 4>jhĨ S+*ĶfxnN`߼У̀bP(BitHl<Oôn2gMAn]7)WH-9v&9! B`7W*% ;r2=nXHwTf6 ɘ2v4zlsK2aPsHx"55:*Y.Q`oՂ;tkDO6sqT v{ BC,rτOH9cЮZc,:^$ܻ`=5+P .5AӧD-nH#VR$ãX4d/sǧ\JMβl3Rp\~25)E|\,Ѻ3F"-xpPh#&iFS4!wMJ92>0)s;˝ۯt5=Y >ZqfR㤥G'ֻq @9g!e;gsvkyyy}Ǐp]ocRJIRwhJ_puGrJ9 hnp{?&Ih}Ut*x'EP](쇂KQb$b6 Bv8IZ{z=oWEK,Cґ Urtc2_s$kq$j"KZ"ƂӢ~Mk+\K\VZrh@J6x:"Zt %8r-UX\x@Z̃<\N04cGq.RI CI1!C^*Ya%R֋JwTNXxHN?ٲ~m~ ]5r9%Z'V#nS 꺧#oЀaKvg'h\q0Lrn Ѷ|fr3*?]K*CZ,_ %R,jfLϳb¢Xez%/>_pp:ҽ(1*]&ƞѕϠG( D\Ɇ DCj,؏uݔI}`n96lz\ΜOr@efZ OM:2OXz*Fgҙ:yy} G3~~z>/~ ??Ċ>e<ҧH["3tgoE;)LeDxZd3-sIX p,0'% ;GeG,BPX9侗-{]vK7lkX= 4r  [MXğLgŝV8e"v􏋴a+ IDAT\c x"= GK ,WV Yow\_|z,E2vI]svs.}6 5~Kzb*Bz}#]Ւju$UD#M!(-^;bERE4ᴄ7(HTL!ZP987}K!sdhm^B6F5j >.T*vn".t$sqOs!7Zv55CE:%yr̈9;ΊGw5d ˹E"k0м1ETC0KnMpE}Uy<޳iwʣksHlX+FؾnnIcb Ap/7QU@ 2h?ix2}T̐gx$wNB:>?6`mz[5@E`1^U=/ۨ怾 LeK*P,cnu^u^Ijioz&kG'y8*d3"j:JA4ҔDLRNL<i8BVXn܂9k>\8ϛ<\S:-l=s^^zN8O{'pWoŏO)%=FUiۖr1{{~:睿f '>@e*,exPLYLOH1ѵԠjg%YQK18z)mٴO쟲mewC[T.K]UKpWa~PTIM9G`nOG9n)-nܗr"{օ} GPV$vmKonX?Y{|\^ݧn*q"InOZvyuo"+fl6=t{^˞Wk+߿|LX\Ž ]Bu-zV!3Q ,|Jjf&2mNm"zM5״Ob6I2X?qU"+xxǓY{i,%4gzIZܐǘ+YqW&{89fj2cS9:q<-ŀGQJ)`pshДTC} }lڈׄJ𾤤:7¢rXY8j1݂a{'atO#n{tF}b6'`-fg'4F# .ZGY!c4N?%\snǣ̸Iҏ6Nd⫛=w4y:O*=}Ϳ#8kk }?OClo2ԽOpw }pF3?HQu=* 9-j :mC3cΚ$pCEi.>9n֏&z]SM#UEֹPT^ ˸ d 4-6LɉTY GRp.DrdR&_Q͍E'b.%KnQ#-* m68 %qV"\.i[p.;\4ڧ-Gͯv<<~B@젨 Kk0yR>mK kH~el8qFɚ pMqZGYITy{58~~3ȳT 88i{6 rq¿o} w/A9~z?}7_oȇ1%+=;ysqRF s@4- D9C br^{֯n訆?F&7D9L E,9\DH#j[ҵ^↶]tKþ]79 ^/\.LPD~~f>^٩0Ŵb~ppJN?y'Y+pa4B5_:dfyŠen (` (ޘyω:' {.{^O/4/^UJ߷X#ART3`FSO#qcyݦ]'v5^i)ӔG*qE t bP:|pì'階6^%}ZҚbEP0_a^NOy'3,3Y=+#P)IFLExe)!P/*mdkdH㳄5ei:)L1;dD9M=QniŹ^q>{.AiC3ֿ#;O;nqi$0Z"vά8Z`=Qb$<<6bqUgefM\Ry=7-c1`}38vx,w e2o[N#z^u^SJv;B|#_𗾝oo&7ſm|[\^^~pDssMYN,_vo'd[o}xd , z]Ve&w(=3>:.B $- v%ˎ> Y$Dz|TM}ڀۢێ5j{b[ء)S_%gbMaA:3=&21͐[HG |1:a֑,I,bKF㩩K⁺ru^u^Q4 kحÏGяʫ7o/ sN}O3yiT:/K#Y6m X2W=#m"]!dZl ɁM)@2.PC8zӓCSK6lOٷkRP hJ8Duԏe TD9+580r>59?# OgMC"1sR&pxcI2 p?ytr2?)B܁>27k[]V/WuO]R-=-쟂K8lSml lm!?|J![RDf\ҡbHDPsKXόfQ \>˳YyQ,f<6eG1k3*[h(No.a `Xپ'4sq.o#B N᪊68XhC]j Ԉvyǃw-<"mnݳykv~-ȾяCkXZF%hGvi 6KM2rO9$F!mނl48"=nrz?@ ~r=4꘹9ua93u^u^T>sr{g>G~Tt}/=pf^<;΁;qޭDE }2}3¨H$ql QStDglt٢u$iKmh=c2/vΎ9gh37ԏ͎ _1@iQ*H P0-c,33Ua+3plNFƊ+'@8=Æ+&@t4hoѣM-l+OjABJne 1*@IH؍ 3Ƹ¨P 9{LWJT#iq%|yX(@? $%fp;MIlWG8 sΤd RI=Gܖ;fŀ QʌgBM\(!T-W4MEsbs7=I[%vE]tO`RdJkm>vOD!bEr騱A2OKWE>dRW79̧f[k>D&kmy\ob dqʬyyק p_/­߿~7|LxJy{/2{|W,RJ%Z0y!rRw o'h#`utȓB=8Z" okPU\MtI̊\;R SEI$mq!"'G'̕'t}Wd¢Y4 #C:Cšq> 7:Nr"C>ryy @5+ΒFW22b2i1]pP 2VW~[9ar,䡷HsNM9OUC k;6&~RWm&b}0.aUm"huأrd.,G)aـ'"UHE\crZvPamY<|JCHTr$:DYVfUo#wTV>W"k; ~ĎhIGOS>Yʁ=s%:a'zG͡ܭWyÅ&*'Zɼ缙6<yy} Ǫ?5}?w||;񱉺?.ʷ} }>!?3DD| ??_nAG9* /B#%>ѽ'O gkOᗁP. vztEe&JD!/@DhBHHtO U Msyj-08,Dmݗ1SlԜŽ s,safcf6QŨHpCp4DG:*";0nr 2nǥtp 83NkW9-l 2m.ƨ@f/,ki5p _Uˉr^$C"-Y۝ls`1%ÃZ8f9QBD\DP"|,M|>1܁sE&B23 D/N:NrUCl9jTl$&;ww`>awa0<)T>ERl[Iwyr pX^TTVAJн{y;-#75[myclPۘFq8+y[X؛bm|Ii +lyz\ Gs]o*>u&J,+6>΀/7~f1r;C|+?zK4oJ1ukx/yO_4 InhG!;n^&woϗ/M\gdGeK "*sMኊi* 50ғ`T*;:01=[v_WyC4zܲ?AoPQN diL6Z! )%NΓ4xK<-H͞\ks$gH sIk5pe)|*G`3 ,\.;K.GsbEDnY]{/:-;.-*Hyql0aQpS{1B_,FT  ^; 9'Mai-4Kx1%$ l]xE@R2l+%2d#kq__OyW3]'o&`ۙ)).SǮ{/c< 'qXihXCII>f"'C1-K&\(qaK{bjWja9AWed~աq%U&Ք?^Qh3 c7) fDg3ьY$n&aT{-؝{^ xLG`p 6ph#c&g2g#uSC?ٶZi}ϢY-bAw7EW bx=OgٳjxϠrsa3p>sL8J69B%LĀZ?Ma˻*0{Á*٘ hizdhO$*g1 B;>ۖnOG{zzٿ,Su#H-g.g1siH:0+ u8sHQ33i=A<"bX@Zz.^hhV7\dx <--= [n]$𷁼E ligV@gw~=S @%GlFRnm0QOD_aܸ>Ɂ/'+W|6I>*_<2 íZ㖎U\Q.gjsuBdFP(Rː<Nsޔٓ艱rوPS*,KBj7\ٱA;,rd"QΚŹz!':ͳ-|=v>e xp;9#"{Z1Iآw3)D%% 3sWrx8 RyfY3Y"Un[nwݞ%]j IDAT.y1,i e_G@el:3o:\ =Be8hhy!uut>gRg^ˉ@^B~MM +h  :/LPq$UzGM7tqOw ʲZ+Rp5 1!%>$H09sy_hYˬ¾&HftHji }@']=WV%Wv={eͶIlIHl4cs> k<&纴A y3O\N@]Ll0{yu}}'/2ソ?|59^~߿Mݶ-"B]w^g 0N?2cf4 &l~rڶ{~_,Cqs’̎ xˎb q}@bbX\TuO+o@chXA*:eM0Zݕ)3髝ao @9)r3w nlH@hG0(+4NtnbIG)tnY:@gίL4w a>Y௠z93M; í78CG# ZNC:h"s:wuGwmǎ#>gY7<E2b 稔 SG+VH9,e8 +X@Slؤ }V띚ÜXM`+2YG* 2ȳwBKKER x"=BQ68۔khV Ę &jg7[k ht#^?M@k=pÚo*H>qyǛ=]ꈪt;PwY\ʊݰtIk.:Z1Qص 9PbÉ{Ù#G |R4LS"X@&" Ԑ3I`Hs8il- 1;b%Σ*xPW Ɲ}LlcOV ufpuց^ /ԲY"˕13ʖGqN\-PLKPi *7nT{ ő훶 jUScTQˡcpk*iXP3$eoyM_kdӖ6L)m}NrWX~[g83c*J҈Zݴe[, \8iՄPy?q"М:ο,xV}h!3 2ᄖ{2rϾsRQ.6j'~{>->7ȍ }'ijmaIkVy޴}/拾 W܏]I|__ _ K]?S??o_QLg}f|?G9;;Odwx+WEԏy;}y>Y>s?CotȈmHG}=\M8e]̬8)4nJhdyQڈKtX,Y,/,D<}H`6PG^).[ixg @ܶy.ǾHٺ P 8:Gü9q1Y5In; GmV@[E/a]|舺Kz 'O1mVT,--c2h+jF-7mR)eԺ픒ǣYd>E+M[ #'V3qt W%ifLrJHc- 79Ʋ%&bGrt N3&;P2IF`I NE4Pը*&k.ځ8R 5y;`(@4j~3Rl -kߧңңGJ'S7`5/m^k<)?0poa95sTr e7^Gpx| dlYm7g ?&uP9t{/cտL0qFU>>o_~mַů} /||?N+索1?_wIM~]Iy[>w}>լVkO᫾9==u˜:}˿/c>{p0%#6?h(]Ve}v.<3uD4PO3$v)jJͫʃ"F3x*=jŃ?xWt3(rQ_R˚{e5*%(Fqmw4d/d_Z︌}J ?l Ve¡%p" C[8aEQr3<:7%`ڡ0D3TNՙ3QZXd<Pg|2ˤ|>8}3VzA Y۳lC T*i\IO倸`V7骒jă3E,+RVC-$%% &^^P6VPq`H:z$_2uwF0HR>'KFeuǥkP{h?=":q qv}֥R1L dZM$;+dP+>0 =q!]NJeJ-Cb$&-)΂VIXVEs8TMb2eztS&*{nq{\|%ozy񻼈;o=_2Η)~?o~?g>O{2 o/|=b|ć}N8߰w׶c2CtfdX%֋UL*\=7ӐCAĊM >N΁s.FBUju&84 ey~AJh1w%{4E[cyQ"moa)Ɖ,W!j" !2Ar%Ro嬙˥\+%Y4~7!AŃK{sRIcQ@s䘻&HH%Q+d8:,%bL^)K; SLi n@%q9%U4r$.CJoÃ0fn$;/DR%9A!@۵XlJ ׭´'Gl&/ỳRۓ.6Wg6HK_ѦH>8z6)soyn" CiOaRbC޼%ਓF˩AoLcm`B]ӮWuG) gNNh&n+=QiH9J WEC,TY"fU=ͬ O y]3KvgEqrS#0Yn/}ywoC~+$ka#e;l)=n`\rg]a;p1Q|Gƿ⋾Z>dzoy zg7ޛ?kN:}[Bv#XxK_ʫ_J> '}'I?B 8<_2üPr`uҮ[5q12hWj h 3;oݘbN uYFRrD^q=2М3 oSU8ɐ)jpGCI"^O)I=}?Zbp􎄔eI1yCBuUM9Yfq Ԓ3*wB5p9Μ,<8<8~km|5%F]~o.|yŌJinqH6[]F.RoJ9a;xx{Ϗz$pE~ n6w-bv+97/ ^W5'0C뙹bWjә?i&4u<.{{1JhDHhu$3]i`'/3 JSP>ʏU9]ORBVA'm6@܈߅l}B08v':N'\(I9Tgf;}W$U rU5ABr]YT3nQJɶ1[D20isn>08GڔVEщ@RZ_ @[U5lÉH.[C-ږbA۷횡m5BIjB`R̦쨝㨙PW=ʎyaBj5G !3s5RJ@U ؑIMf:Et1;r]/MotX +Ίxj$!BpV^ WcvFPr9}EK*<3f5%їݫm;<EKa`҈V S`֡#H"OhP ؈xIT5b0GJ/ę} T2Hj XB78+g zqeK162i=ۄB{Tp1e^JN9\'̴KRl LsG0laY IO&$\KXId;:KahQQGT{, HLVe`Ɍg0\ U&!Hmv=ú!TJh1jNfs3&eUsiy.(9v NrSEuȝśt2^a< ?C8>:u% NN'yFlѳŚ?>$o,  xtR]!tH R+*=}ߣ6}OZ.  6C .0i&uⱪ@PAHW?b4;+V[h"(]"?ݰ*} 5+6i,rOEY g2X:} , Fs(X5E+Hi/>DI,] N`6Ώ [ɲP 5,A-zY;GqDo:7W˷V%ӠxqiZ{|S",3uMCe?̡qR’H9A\ 4J TU,bb#KXeUʁk]:c|Y)U3*YOWtG9YuE<>@pBpMJJCTsm'aS AjrIIU*Yr:H4"FOߙrX7GP^1uXQ8k|3O !3c|-+[:dzA$^ws9{ \\0FJ?淾%|G}?_[o狾I)a||sݧ|^K|?/bK_/ _^ދd-Z>3??~z}ge~oog\җ[B{xuYV7xɧ8{? *Np2bƁ'cHWqgj:6\,e-€'Pq)UOy{uQ.,sv tj IDATI\ǐ1;#_K{+o]J\ΞΞz8G'/yjί}~~̋1:Z-ĶB?}.v;]Xc-sݳIL.=bqs\.O7"OKEg=fxLȔ5VΩO9^v<qzZo}V f/]AfLFbܴheN̦p4"e9&8еF߱oBa]PTn\e4f09ÒݲcTXoSKvMrB5㪊P42U&H0ť $Nq\AN5$=ك(hy: )q{.-r-b@d--)ahB%j#Nܑbk#Fb"idHtiΎ $SV}KwDUD x mzB=N(bxq96 :),^9Q"`.9bϨ&Ԑ 0ǙÙ'T ѷ'Ƨy|a GM`RXO`}7aWwMl/ќ2wT_xv[W7wh_a |eVI~zam9;;ӼB^5~/d9oO^8t/n޿gٴ]XtOеvSN槬'YG?"##{,+}vdQ躈Y[ѯcTCϹFkZΰmVwW\-0i[;mh[v~'a۾/`/g썴K#S[ɞﹶ/#.5qD>)GT\B%Q1أr W*zfdIlׄjId ] M;3}60ir0@JCf0ŹjUK%K:-ҹ99LF]F'[Zw#׃;=B\\Ofґ@e 1ARĹH js/9ϡ.>A'Y&0|DHf$s$lz|]` |%!ۂ+ !i,ub 4e/.Q#)F!Py8fikA#!K-H'רw_'-פr$a5P|B)*|MAS"4æ/rb )dq`Y`.9ϻ $jaY F*STx,Sߘ] Y4#t&a@}CLvoDV0ӌdx!ajPMm%O(9]QGGv2}ɳ2]/aa8; { `hÝ+ޖ uk"VftjMC:!dV]IE %"],]:r55vdIxUCSMXF{2idz kr~mDWZ/Lw/nz1Gqeg#Į6YK-| @(%0>J9Zkp>=\aD&H%Աé;X/I* Bf!./cEjvnS$018bVCĔ{ CX-u hj !3u ռJfO, 0WtTF8 FK: d,;1\n"D2`,kQQPBrj-]tBh*IF&I]1uiHJ K% 4!\(pw}+[MN$n9uAEQ6QمaEj9h,Yo}k`vW:TC-e㚜;􉴄Aɚ5Z:$iJ/~iI4g׃ܽc;D=JYxu4o}/yIrqqq;Jn_MeFw'e&*FFH\&'KQ)m a  |4UKZg'4XHO7\ `N8PWێz"2lI?wu2bms~2~$}˶ 0~oɕ"{ƛeϹchcB`BÄX@J+](x$8Sލ㣚<[ˈ9})ZXW`-KXQa3Ihp&xSR4cXDVrGF:.zC'\tprz4 .aK$@*b^qnJ)f5Q HL xhzJjftÂ~Xa6db"I0ꢰidh2RŢc}1(uk9\]МΘUfҠuD1 5Ʉf#pVJnjTg9U*d*BT!).es\գXaHݎy) KƆuز*%ew7WA{eeX-@Zv5EkcXEt5rRУ "'鎥lE Ḫ#o ['MLF[MiD#? @WFA7400qaE,>GK9a#^&U$J: ^>slQ* &jŲO ߂͏Ni"'ʼ2ŏIU$LQ1E~Ǹtjh1(EڞҮ>ovCx!Y,n-K7,#R4|b0*B)hPdj.u=S2 xo?{N9sDXqup>8+)} ڣ i6p;{e01,.{V|țCʦ L=hЁ7Optru>eDN>xDj N*ԘUhr8sdࣖ3I%C#6^I#i,&|%B 컘''EAC1 J{ Oj/ >ǃda88>Ks9kfM!1Rn1Uݪf2ʡWCzRʌ]KFSå)hڔiDG 8EMD9K|؀RqTzxL "#vfqU(QyjD D*xyλבfrђyms$6GJ&pQ\##N[mTҚo+ݐ`TFOIW|lVsaa8>ޞ|Q}{SqmRK T%~Ae bd,KOɀ34]aK]G688 ]OWt%Tؓ5M]z#jO^nTSٌXlV[6~Ͷ=_/ln:kW߱ V`{v5&JLOG JD*6rUr1EE~*XO;n㴥]F\nBoO̓TY]!jhX3PRdZrQHԍl`́:a[e-0SM3RW$ ӂ7=RZ4'É+D!慴< 1(+L)$O-KIF  gR=9!dhR4Tt6|WݚEbu9zIEd(J|2!xacbzTqycE7D+FB8$8PR[o@\mYQW(`Jӕ;1^I<\FK:qhJ4j=ިPj"Gw&oG7$޺m).yX6}(S_%#۞|utz@q t,Er].#ߌ jmz`00psX vb%!/\HdۈL1)ńHœfI+ L3$1ԻHsЄ@@ F&*k^Bۀ-ږ;fsԴ eލ.TGgF _9_u.nܸkZ1cP@'E[6#hX3-p$Bv{ϡK`ӌwRCsX]9M`Qѵ sKd9b\ k,GbB\zIh5)h̀U9%;UG\cHrDɔ$89flD,ތKVh\NMA}g))}?`NsH U/i>bԡDqv;-PUq:$K~@jGpI=aLRq4PK!TMrM7rs2[%T'@;4!rf_0 -KWbD6u-`"JPe_LƋy@bZ䬣|,K8E\mrd |pj'fs9$۞^ۜ*- iiѳdhd4gGNajw\uUAjq+acqqqo(|PDd=Xv _'ڳaU1r9w$',jp:ED=aHY!zdz9~J8Sr`єZiMf [S”PB7܍/ 4wlt| /8{9^vdo'7,,9ۼȀ2 7FfJCEhs]5 3J''h8;8n/FlJTiǘ7Ա\MX^&US$TxS**h@!.8Hl3)#ޑ,ڦ93\ B1ERg"%]<X. _Mfsi U " Cr{;Ça hE#*R7&!PX*|:;Vr۟9!IpAuZV3_qk2cZ͠O,/) n ~ɀ/F):ikXfw>16)08 d$Y{S$ PrfLg ,>M{1Uȍsy w魺ٿu Lp$(k])M9qqNo>2;sy~1;`HڗTz B$1spwy]NK[7nv."f3o9= <6%f _k^]7/ `+N̛2Zh`F9!2!XCn#Рt \}YN H Gmy\Wzk}f[t|F3t~jq`ʝ63ZpzҴlhnRl%דMvr؍oJSnrhCI[VIhxfikLgYɋeB/xoXQl }c Z3& +o{˳pĭ;ܾs­Ln'@%b!|6W]2o6^J! ]q5pȃv ֍n<RPu&<+ B"0G9JN8XLT=.G)ux.aEl~9ş~"òc*s?(jĞȝ1ϤEk H29L85G%ZGb%3 $S0W9i#t%e^3 Oؑ $zlPsejR]Ë9!pVuJ( CX"ErѲZ:=$WCHEU۲;s,.H2UĘXaRRau0[I"'cIIE42w>*mHQ$Z h|GXI~5-%@_6sr J؆^^wvzQHe_z卋Ơ004އs51Hځ=_c$%ǔ-PN[0J"!%p0--vs:Z^Rc 4)߯rBz={cvMw.K~Zk_ܾ[_aa?G IDATlcb+Cdqla0w bF((`61,زb8ĊQ8`Bss}Y}U9=#Em>ߩNZ}i(4_W[/yEKW (*8:&CG-`nB311$䈦H0EШXۡҀkm1"^*/.Q%\iA VSHALUG'%!FX\ eMYL)ibqqz5ŒDO!R.㽧Gd&2@w#FQ)]RϊmDӴTu2q.@!}R?E!Y!kZ2@ȸp8@!ӵG5l:8(+xCjYWzO= S&}{s plKE}(ѧ\_m7ӈڬ3=֍}wso#^Ƽλam٬ .a=į(7~wv6a㸏}c{ฏ75 [#2WrR@=dϕG2d{oe3?HV$<}r3iG*6ј:,:#6-X6Nqjh2cw1tꅻՏglQkfkjmaC8 M\ FKd~0gm8.Go0=Z-~x 6ݰ a @PD|AUMУ =SSgD) #9<$AŲ leN3Ec&nQ=P:Xw(Ex [EUQh뫞fٰlsDzI(x_QSBB<Q^h"%}j␺QBaBlT2rE1^˶WPUh%qrA$)K,*1*1NYUK qd; MaL~Fj h"YD$-"^XWqLAYAD,^ӚfbNH:/[ϹMMf45LY߭ Grcp$نyk>=p ޼!(ʖz6%n<ڶ :!GEǝWdEը ZTzL;BB/OY3?Ǒ8i/zX-[.D0؝s#u?*ngaE߶0=mUmGqDh;c PNv`bw0fs_*a(5< =gE#ĭ^}06]h4=|y (PF%&-hKz*ZkP!̥ԁ~1B?3,5ǻK,^cDx9 MpPTV/'N'*/i,.Kk..ӄ$+pD !m{G!6s- aQApGM-#~("NX %|2 3L%3Pw@脲R3C)ΣΑKf205P,|ʭ:mwխTW3 (nH4*RVlYG0IAI@C?qX0oHOSZ=],= nMG^im6lQbhκˋX|=:llzˊ.c8˦^t;>aېs:Y^HuFC}BrF5C x4EĄ<)ł w\SJrի\=nxұxe4 >u`eخr6`q66̖Dμ]2+%qXx7|v~{q]K0)4؉G"SDI"Y5%6XzTu~-𮹷BkN!YKS|~>+NaaUR,uAc".iY\A@PrCUi%,P4("X%Z@TA8f>sfRך`3b爭KW|SDj('TC>ć R+j_.,tg=rL eIUθ hhSVzaUH"]m$IXr>b]DxuL\U( ҕ8ZI^5n5(|4rnT-g26opN*>u ,Xa(C+eU''E(P&Ϭ +! hhn=oWkT9"[7ʺ}#)717`B z"A0Fl+%q损˿ď_گ狾 kZ+~`xacE;<U6w+hlȍ}d #&):z[05*WP"4MOs`q6p:Lh,ל>M38_ELFa=luaܔ>{]~3SZ^وn m]CM5#J( xJ k+txK9@c"t2JC!M5J }0)(j\ JDV5)>Q*(Hd{fy3 :b~?)iAo%}+S"G\M)5)?r7Ƽ]\EyKQӣ{>L<5͒\r 5PJkj-Hj{BM$hx`(1E>PB`b0 fO0ʒgʘǥyG􎄣3#ƜJ2%ع];2z ѯ#%|D}Z~AW[߽y}S,$>ۍ8L3أ0_gÒw_UA#t9ݶQT#U7Z3κкʶP T<pb,̢?Owc'W}m <9㛾L&}jq߮Dn*o+oM;3AU0|tP])Nb.Y C\Q˴UA4X-f<<|g}E._:'uAJ aB@1q} mfϳOxڠ;WH;|!oB&Urq[ݩ4_[6ViyZ- 5d8(Ugx=u1hMi|<%W#W-#м&2W)hK?*E2=5 %L"* "H-=T3rM{C2 ==B$iPt:&A80{m=0))3fq!euHk&˞'Oy)/^м ]AyoJ 'dd8*BIGdQX#x3< 0q)-#uI:*)kDy,4WsCzJ+Q1$u>_ CovT3lPS˿Ѷ!PzGa-#WV /3 )-N Zҗh, %T B;N;##Ʈú +ԍhvFu)ٮlKX%@Qdۂ8 Ԯھ}co)//Ŀ_]Hr#dǛ\ؖo2ز5X:BS {Li6J"FI>+kMH"y$EH]dѓIqHi5,ϸ|"~N!cDO"ڜVj{ȣ,mir!0^ˎY޶ʝS/lF">T+:mbԸvyz [{q%d; #"̨hp\#t吞2ii756JRGk`f pChkB\zc BQb"KNHY5)iks(IApvp7ubzDS` łfa.x .9}ryK,G' DV8՗832uԓNQ}lls8-8L9.fȯ@$cs%EdD2 HLh>"}spp/cpF3< *^9JZV鸕0cZiiJ-5UU&NWZqo|g:>}.Mo=?Gk|»ŷo`?p_<#*_1LUe% >_Vӵ6Xlgĸ\'WSʁxTZHBLړYpx*_CWW,7 WA*>>^3}l] ŘvB?뭶wBÛL^Wv{gs%2r*9 , *CiBJKCvCGVF."jTWӀ)8 1C(FF Eo@o$2@tin'DN;dwQU)"78-d.C.#Qp&܄G&A.jG^}ӳK&bUXZoҤ<\u-1uTQfoAlt8|4n tVSpU uL{u:~`)6*PÒ.'ʿ@_6,) T!Wb3\ÊۓL]i4NnG2# `[z Zݪɽ}"IJin> ,???S?Au|Om|?/~+?,w|˷};}}oBطR=v8l#{e`%eͽDvCGAiSuOӞfiOl!Α4oTIGdϕL/!{G4%>TQzB(\d5Y޳55 m*R\`Ar~n$8?V˖OvԵ1 Z,YCbN3zá~Y)C9(rcsvC_;z\{)K7%ց/dꇪYr` aɁ.8Be )' ZXV?Pz!DH]OX(낺RmcyY6<i F  BRIֳlL)0Ak _~ // Bu‚bI橪dB]$]|"UE!*.J2TCY;5R0WM_45x6,CeL")O^%' LӼEuO(rzĦEbÑDݱNݜ1.MkC0$>ެ\^^Orrr}WW^8?>FOΟ/>~G{~W~WܿCfK*'&,Z!i1W,<2p4oo_-N]»>HjaAqeuRe{7&ov5Wn9/խͶJ8<zdGXRӢC=G@Q=a=% 3\Р,ɴ] zб-rS£C:@()1  w|I|N^hO҄9E )u F2 d=ɕ6h=)]/PZT/m{܁1+'Lf*\%.wx,nVQ?D hԡA3%׏i^Y!pRs>9IID6J(BI }"1 A-h+`V:8M4×ԳȢmYJ"tt^(9TۺpG]e|e|8$H!WE-FB!+3xËR5Ӄ=~G~x#6>-H*~oWu)6v_;ڗ#;؀EG P">K8o7 R6WB(,. Wg, A]%T$djO^l-2 nk3TAHbEaLuF*lW|E&d([ou-}9^v}77?z{eHt.(8fJRs%#`N5pr:SF9ҔnvUpȤ>aR%ppHꌶ퉵_8CšedWGH u-..+) bS"5EQR/ΐhבHfLQzBehY%MUߒzZiIl-;ҢF ~Jy0avbRf"f!S2Uh.Su'Clg"m"t| #SO\4r,c)+\;hD"3o,2C Țc'هs"[rqL_=ə>ߣ*`S (1K?ԇwLYU_/Xv& x|gZv+:P}uHz_/qoXQKc~UUto.ช}{^~ __t{K:6te\#xG[gu$.[.{ͩ0zZkw4~ihE(0q.ꕚe&7lT/i㒦=L  ` o%@/- N21 Fyz#`ml1VAKaWqۿmmI~} hdu08qTK 9M,g2=q Xn^::? Bb^\Mg ]Q]N`L Dzvͼh('u;Ԡ}J[O)"639Fڒ ɓ9ql`zxL=]tEXxELDhێœ/]p"PP :a a#~³>8|)IbnբtT (d^._д=Q#.D-R*D&\Ğkd -;Cj 돽P8sV۸}aN̠p[eF͕GviR$;|ǻ{W,)jx[+U0Z7冔kZCV@So%,t*:?<_?~|>_Ǜ8|Oɟ7ooK'Kdg-@NLtՊFD|@z\s!88)ED KQ}G3}1=<h-/L1+<yb6ٸ}4s:d1D7 ͦm ͙mֵ@#]A4ݎTv[A:*.-n IDATa]Udwup8GwwNy&Q ӗJOHO@ |cɞ h=%8#zIYz+xP?e)9q~IxxD8>TuZkzI$gYcDDZ|&NvC*)8QTq#$˚Ey's^|HkBDVT;RHʴPHE\(q̓E$[}TnJJ VNx 7Hi45M TMV]UW0-ڦLӶ }RY`'dMhqjOMk:*se3JD&Q]h۽M(c[nj^ʼn n&3=fWϘF|&IvSzfG£w{\=#tk]SW:ڐm=Kf PC%iKe|#wnxEY?͟ > >W?S8>9ŗ>'?s>xߧ ?bXyǛ8̦Yx Cٶ>w+dn/J/ig䆪P t6ʱhL<,gꊲPyӱ;o!:Ptڵ 7:)Re&R;FW~*w]ﮚˈ1ߖϏ8*Qs>|3za̯"\ӳ@(H8 Qo&8ulkd#>׶/y *>5_uʃ/5p/S}w{?o'yrzg}|o(EǛ8=||;Cpr>V[3Wt^ZXbl. oѥ,HQN8~$䎻dS rI5Ma&$鰅Z98/m4+L/| 4 ;4d;H}+yIAr %r|wrP?3~v!-)%cqX\YM{5!𗲕G@vFXό^]1%:oDe)4P@#B'f]/%zs'P=!)h;X Oz~O9\F&{3Ε,q]y΁/ PO8 PZIj՜Oh7*a yGOFɻf'5~РEԡU/KhY^5jMLI_Y-cDʀ+aY(t 2q䌖.tagޡ^H^HjDޔ0yvkh䆌6>MH]pXo$qeT<{_lХcIKrrH~ 1J4 <@c7" nD玵q振/㫾nq//˾o=|>s@ >=g?_5goVh3R[?P°mSw%5t1Mf^H1R7-'g O{y|UOv )Q$ ܬ6 mmoͱYҳ>FmD*6oWt$ycVi;ӱyMb?l5j#?!f?cyߺCSURh<1ǵTt6F"G96UHF6;bc h\,:ybKT%U]ϧPT; IIҐe$%p!==BI-zХ 4PJJS J*uΦċ|ɓ^5COubqж OpJս q+]J<<%m:GGcZFYM5D)& i,,r.XVV]KoI)RD!,!`IsIN.1ד2٦ȋms.5sVV>+;?3bqm~^} -}{p?;9׹| 4VĻ6Aol6D*H- lfo3L'|}BBFcQ\u(1 _P\ U VRtdZgϾ'3f  ..7gt֮aZUr/%J nlos\\_9sOPO f'@oPdolٞAT@*YRZ`}M55NjD+p%Msvd Ǐ=}G'Ɍ>A=O4Q%B"WOϹ8=ey~;L{ JRX6 9qhJɔ갦7$z|aHp (PPY$T)'..s~2Ca>p=x,ꖜsIFrulg4U)H`oBk טl;QU_3 m9h0wcC_UPÜ;J|y&aJ`ɃK構|}G)x^GeL$PmS @jE}cxUf+ݟgwn9OGrG?sF\Վ t2Gj~,6SӼtGUP`tqN]vpy`(-Ɍ3(DKI`1cR_ L ԕTg 1\WWRâ좡x!76ry5'$Gt=E0Qr}~TޟRJ^^6=r䐺L9:D\psX"T)TP)pФml%j0=rf}:q,kΛyK"8Ot"jjХDzt8AO'iMNu7N֟_f+:#Z 8; 5]mlѧ lk\LdH#jj$ԥHS#G'^* ƕ{;1Cd-6=2:@RjWMޮq>m3(yDvrZAs*~YX,8 ۞e۠ }RjGVJo=*&V T%}W=h!Kk1EMW,bBL1FEŋ>~B>s[~TfBA][HrM;ز1 1[,o5dԳnFF==RP0*~߻yCʪdE*'<{"&=+U}p*\oAJA%a>lsP[WS`2ȫYJP8 J؃k>I5p& 8F"Cf{ԡ=aR!V w 69\\z=fu1ud Wܔ7'jHj"iHs~WҷR}N2SWg429L;T\@x&&!휤ZnI&Eղ:ү& ”IQQa$W H}G͔oy&xܷb"\ie8\5mLcRkTuB |YDCeH_96:[oy14Yu,2JW = 蠼j8 W]=2]t$Ym kW;'\?WihhYY`"9aXq,GkĮwfmֺrpYtg> \Zn}W]FP<7}<sO앉hq u$[D!AjP;"א%*Sä%e0FG׵,s.ϹӦvr;Jm@Ťn(Qs#!>ZȭWFH:@ud gC_cAIus>>_y(H;k$WRQ̸]e (_)#_|S|dt}h}kK G sY[qh *T@ Aj 18jK^3Οt+:$!V|Q#,1y ?t'b0ɔOpcqvAOG @0+|œb¬{&ҊAXHV>$>_7lpT#N0⚗_zW>23G%0_NTxt=-"(f s43 D'{!(7 ƛUim;h47 jYH4P)uPsX(= 8únvRn]kVZ+A=x>=pۦ_nnŰ`ށ ئ0RJtm򞧏=INc4 !Ӻ-taHDzvu*)55ze\.XtttTYR[?wC{0捂ۓ7v)kGD͑"jqB} ~s{RT^t] ʤZ(A^(qsRGyPQ0 R^{;"t5m&x !h,Hccи 8g`eq̠Ulr/HF9Mp$q-+pVlB]1iYp#+\-"ROgsR.U JO Ct9M1!TSII=˴$JO ʩ=(JrY,8'.RhcOڀ&mzWϹz:q G{x)_6\\\qˏ}HT{wo\<\ǫ'LO>v`PA`qIXSn=YS-b!%~]+aɂ)l@%FQE3B@S%RApU$ w3grlqJQ5C ViV] ..'@UXM05A{FK3P( EEEYkj"a= $ǟv6,nIfV]CDJ[QVsgέStT($S Oa L;7̀fT)%ZcDPNSÞ #d/.a}xK$"'$A!JD#cOb=>vhe[`Ttf ޷x:ԜH1Wh %]*׫+xUq)0,cYm#Qc2_@hY.ޣ9^7  $P$t1ҠkHm[-$D\\SJX}Ҹ+7`>LoiXr#\~v@Q3*, O=8~ZC9PV "3pcf Kq|DPBgzVӤDYX$  HA9rJ,j_~4F)dJeYjJ^ ඉ*;V]VhzN# YaXFGxo=ΦWX= % AYB}ѵx6:Ea5K[nn(*tU0H` _D|s\SL(L )dJlMjmz$=VU4,8{$Hx6C*Kʢ:D?*G#hP/y `&'쪣 L ,H V IDATZR@0v^cYqldɌ%)j8ƃev5eu32fӓ5eՠ IJФ)+X \IO#aD!x=Gu?}+ u>B͡y9T&$gW6CFx,n0] @=yS&04 ,8zC0زDO&'SR-8 O5}!xG!OE"%%K6Jb &Z ɣR$DG:b!=h DY\mzڶgh~'>"u) ir=Dzm 20j [(z >9f2F5c@V+cԌN=ܫae`,/Oi\Tzܮ48>X݈HQ賹`ǭm*(' 1@ ρ~7f+{=t.ߎYp G.^#wRxU]U]pG|ٔ^}180#j9[!IAR8Ǥ'7J,1 9Em#b;VmG\ ,"(CUjoiQDtt_**!:9q9p FoAc9%ږ̟_cyO>aUK'Zܰ),AeN ]X[#e @< c)D;C"E5fnH,,5.7[7H M;-1h:J<4K^ЇGN\`[~LA~2s ;$fw͔IrZDH4먤GȺeY&jae>2Kf9Gat$YmEɨbn}v2דislL⡤,x xRGׄTv Qޓ o%2heP!h}>}DG c&DUхNS U(eH1q#x4hl"S*,88./n@n`ljH?T6E9_H'8Bf2{A∠q%|l;gG3R`<ք yDkpUY(G^ שA0m J!@&K%zMTTJń\Q!AS1u%Iɔ[MM̨S=,NHh[Swocv4BJ nQ(Y!R [zնqw?Y[v@t-(ب`1'bvWBl3B$[MAJnPJ曂㶢_Vķ{ZFyjT^1=ulwPBpO]c1 ꪮꪮ 8~֓g`},Ms1'P{T"˲B30JRѠ- =lHR(]St 5y5Ac bYRj5x C)>'F{ os//=PpxISj|uR1ye,>7!#"Q^DK$U EQ%! gC$v4LŔ {D/]$FO@QSm{ K`3LQ,uU>D#G&*Kz1{B2zAbEBOGi>hin^Cek)cѺDb ŴF%h1b)ma HD*C9j wn}.hc 4@ .K dʤ,t_wN״ iHCV=bZQn+FD7%յcTac`iʱԁY`DXM +AB1`CAkK㒕[ƔY}WUG1d{Xmw<Ju_p(Nƺ[N˕$bpeQ7]dplgl)umax$S3Z `JO29r_u!9h'Hmr ROTu0V0Q+T$`P$hWVwk53a:9"/>6 ܽu;Ofł%)v`RL1\sQA3ՊY{G=32xEB"*ȬU%3↌M[(}0h[R?dit)ye KwcRTYBj, 6'9EO߶(1eAYUGLU yK?!d CJǍG_QScLGND9B qH q} n> qe ARG78! .bí5EU&305]],Ռb6GQeIBp_Ӷ {JJi e]PNj)@gS6{6`5RjFam4'+ @rاw";FrjBuGdd_+qlb:_R) @i J.bR D1R8wGG0# {L:PK/r#]&WQWߢ(,\ί|џzG+;_y|g|:?~"|W|_[/ďًyssu\ǫآ|Pn|BDzg%Hi"#$9~-3$$*O R,lFl=C۱<[|.֜  lQbb dbfIB@؄D\Ԃ Z81QFB Z@+A42ʲlـ*$"{lY,OKeW0vmGʝu|]z 2+xGQD*x K 5 }^GMv {D`ї(`pbꣳ^E8x/G8~H üy/e/}Go|ՅG꣤ҥӐmF$҇a2pLLq 1BhHyEQ5R5Lg׹~!G)QMl @epLJ p2/~tT2\ۇ#NMk\{֜':!S֚(h@ e1:%M`mҹnC̜8btybqJn CJeC!TuEYaZ\2DcI)kNiY'2PbX!8NВMof80~](=H̉brClôa%{v`ܰoȻݿn;O|qwl+L' 崦:P&4;))늢({\_ܥ [Rhtt* r֐J@dnNb5tx9aU|=͚r b $-&G3Nvݠ69ep #002-6=@Jc4V.-Z|$fv=J)jLiY-Պg*heo= )Yo8;=E0(z4;7$v}:_r>RSLC%6hrDP#` a#gknpzzƦX0 fz0¤&NrF.yTtQ*b9JyfM/VŒo 78\(cb`6uHfլgV 1CPB@C~‡쌳 Ja'%,hNT Dq͝1Dd0%)ѵ9ipD_D8F[b*vȴ"Y+&jQ.R$S `-0~Q%nudHvf'1#Hw]1cޑ 6'F+i|.G`*v;@5w)&De4mFS>3[owpMC v1AF[ءWtrV$̫?:1F>>apyÛK_=~ɿS|wJ~)~o*K~'WO~1ɧog~wݷ|FPAyͼq43'T95hų=k߲V,%͒)jAwm]z  xkr:Ԩ@ hz>!VM<&r XĎMĀgo<┳ Q+i〓أdUdYF$RXB:Dغ%1'vZ*Q1kZX-ݺ]oX/7يz1%|8/$A3tޮ IDATϠ7 oAGy$^"xDrthRQWBP9q&h ?ACFcFR^43N Mh :k6%7o^)IA]X.3z`']?_[Fz/}m%Wy|W>?iUx/}k^??_}pX)Q2_n8Z `s&7 iT$!ƐR"pJcH >e)cwn^ )˒z8ݬ6 Ihc s뉫3޹Ki 1T"4B,5/-n8?O 4@lc[*Xb0tkynf3 <~kUz304sX(cUimhh+e 8C| }WuU-58/ͫiY0崰OO]y/H<盦S^I߇[og=౲wOOOy/xoX,}.ݸeYoS>o^=w~-oY|&oz[x>~(*ڶ|#{S 8]zeY}NFJx7tƳF"zef1C׽<5?E mb8 ϱDݳOMHH(RQl -hK 1c̯9qtax,IDjG$`ȻH&[qtoZٳ 3EId剦Vf=1WPA)%D<)E$%ʢ@bu !(SМSbNPH]jэH(N Ap2A((4OuAsmF5G+X-҅5}?\xcY,X l%.2vret-3I` CouYgsh ibrC9wt3\&48г͙0BYC=if5h:N"葑6aPETCӡۖh ITSG4cjS g=l{3Q)a0Bs8hƞf?)ECı(ESJ` L%Qi*(%x0 (ѨT1 $mF7tnx3|i#:$lShM5f+gR& THH:/)O Igh#;bwlK%2$d8%(1VA1t9NR̎kx?Ì`xdE-]Gƭ]GM7zGsoz[}}Zbw/y״m˷|+yK^·WЃ7/B^/~?n|"/zyK^;wO~4mlz #C= ZTYX->[8@vX71OLڴaXгgTa3}G2yԸT%3CwT h  G7N1IcPc%ǘ ! {<8׎ܳ~w~r{ignt9CIq}C}gO0Dlb(' zI ɓT0) fڐeH*ĘPB.C4$UIhjno>~۷Y=aeЯ>5q,AZǐ0 @ceI*h&WO`랅lxvo= vf|M'CG֭Gz]L*ڒz>G߸qZڲC<{eXoA>cOL &Q%ӓcf\5Dt-nuIJ]P5NE$iJ,G&f%h 7 fӱ =@(,DfKpi=fCQ~pJSΛ1JGDRL #d#EU".bL )"5Rљ_J]Tj 2[-P|V ~Tc9"GJZe^F`#$DQф]Vd-~B$˴]:J#G_=ȶ*1\kWW `y  `.8!'!!T9PrWq"2H+8Tpab\l#IHWW޿D!5k%3bv;o.[0HlbqGK|}??r8AŌ?03~7}g~#W0 +͟Y/^Rʿ.|?a%?σO<|g,?c?[f>moϿ|?_7{yt\xK/4^B:Vjc tO6}]cODF?8nA'ąZ+-,J=zvG߿Ϸc__E|%bLP|'~"<4? 9~>{_of~6gO6~o+?oÝwY.,sf;X)|e?}Lˍ[7oq^~_O͗%,K⻿/uNO=u{-?o'q\/|ٗm}k_;.8nOX`C1n6!!W> (Xʂظ8I1pVRuEkYׂC20eV7,,`Ma&U`x -ٕQG _UZ8hG'ַ~~/ү@Uy{>z?܇|}?{y˛~c/=L? -?fs/qfӠ7m`w'Y,W375o| .7گ k{>_.Q#a􇮣_yBO\̆<ozN l]L֦%ӌZ&çLW2.O,,D)^W"x]}L>^%? eI&5DreXwJ8u;+}C1|xS~7?x损x d2Δux<k7{l#/@-9y7og,ZrC5R2KjX>[%T2YKfq 3!%.#JGmЎ1rVsağ'!Ewʍ7gr{>#/M_3PnTOn⡐xp;[^8~SGΙq>|yWǝwʯo x;[pua9a_7?E5|qRU{"vWz`rHl/s$%sɪjڧWF \0,l2ㆲ wDF  {q!zHGjݔLm|]NciҜo^3oSo8eyӝh[r`.\z_[oh}/4+ )E̽#Ya:,{,%ɪBg9;jo(>НldƝ$yer̖s!02Ԏ9T~6s7y.V y2$ PXb!O s)e"I< ,Mٲ*J!ȃѳ=\3$xɉ "8ݮDL  1<}µ7<)I!2QeT?\|-XʌSM#qJIXKDpW{S S2TP#:= ΔlƜ"AEt({K&Lly1Q 6y"O{t-Z*\#DPӪ(PC-EvR&Wu_B6 CG%|u.-\glɭW-D.FxOM<8~k_{ AG?'^bnW*Ni;Tn^%Nqe;ZS<R:~"➑ aꢈ#Յիy(#̸$U}Г(kXW%`8Ҽ^+(Ww?G xVg>n}i~$Okd9aHLx1$&4PĚm/ (J̅)&QRCBPJ'1٬Sv)t<=5^`+y1RD&LLLUF2[ (iF'X .):g\j,ےH%3ȜX b Xi&DrJ\L6ԟu++:D"m=R 굖Xw"3]J/qd29N^sؤDҙ9;C|Ems/}$#x<8ǯ={˛Yܹsw|o|Ϳr#p|5ȏ o8`=1z(ٕu5l{{ք7#̸lj2b1VM\OE[܇}Ye:&ܞQ.=v 5+=;.Wf 3CP*0s |g?#\0LE3fs"RA `B=jw (0dk%x b&4MiOA#"$U;ܲ{GҜs"3)3*x0 g2#3#Z!,'{Ӷ#o<jp͑'$5(e q5O4'U%h9{xkÈ!:ۗ6`l#%ͤk/c^o(\GzB]ZA IDATU3I$qX~/j9Yt,,S]7tӹyS=ܐsC1BPbK˜9pɉ9 `!O)4\k"$j̃(8!)\u Y$<3SdLG8ql\bLq;!383y3!}}+1t5W4)TYi\c'(eff,3;B hqf ZiN[UNn֞ԢIMdJu $돈/N[q헯qD˪̴ߛ5I|d<8?<})?816x~qN|jO8<K&G*hIPZ4Xa ]@x iINqdd2w2Z]JGJܯ8&>“/-7zƭOnП:ǻļ>qycLH|IN/հs+{ h)w:{(jd-+{\<+'Ts3)0lgb\EO机(Hn;mTL ֺ8/g7)^u#aL}b5si:"UZRTJXl^]CONH$מLĴ2=\cDK)~BtEBI+'sT %eJ` A'=23St~60  @{Hf%[R)/h!iLV1IF+ZRj ZƗddll#cI$3FtƉ@}ry;1Gņ|ERAFĬZ#QRێk&H1D;X eN(PJ g TI%on>O1':Tmj(˝@[QwH t nΖ<3VD,, ,s2j{ tnGqqq egqfR rpZfesA.dh5édqLkt@&B<'r, z(H չx<62B[s{Xb:WXѱr N~לNI&aΙ R݂js>,45CA=\)}G 9D 2ە@'׮yvcI& 3`VOžj^8% &`v-z4Ď깎 B0.-װHfnɘ23N B .xfjyJILS+2 #\Ht{3 >s1bSal C]- (} 3*z%t'=A*Pʅ Q HUꗭʟw0GȂ@%Š;G'ZpfeJy{ B'<2_:CQTؖlWOFL tNY-"-C3 ibyt~.:UPW{Q8'ɗsXPp 5UxeF)̾J7Bʅ;SBJ+sĹ%:q )t1$k {JaTb\x8:e)Ƃ]a&WPRBڳjmC贺v~$řxSA*ʯd/7+*A򷹐aVM2.S w̖U i-1:5:OÜsqx t&/.~o_L)MA*8ĿAUNcAw,ntH/$M|)sBhi#A7 egtǴCJ$Q\;RSbSFś0Cq<3dւM4N'-\qZ(,|ű>0D]{.~=X5{1l-=ӌ[fp<6浨і9#S{5u)[ eN)"|@X‹L$'!Qzgh]=Q IIV`15S&q9՞F)MPpub#s[}8jc":[,P`Z*#L:F@2(HhLIRs~[b#1tpߌhrj0J`aXO<G'ٕ f2JsvEAz) N=B%k&B*xq > K5+ʭ?Rj Uw9J.0.*m-Z #Ȓ6HH(ħr,(cbf2' Z$i3@roYqqq={??~=ޅWx:1Pu˂I4ȱjԪic-ThL#E2ij6[ՀӁnn ;#/(G02}c̦TBEi#%*#Rc+N]ѝtl5|Kce8J6aYs^{ax_c4J6fbDST;-e"e^QBB4:g,;3H(Lbl0'!t1;מ8]3((cj Ў̞D֫ծM`l\' u;;At 0ZI31T2zHe[~*@Gn 6ʽ҈="ga.Oq'LAx0OZeQtnu?^<ϽYCU_eǻp 'RGhny!E n6"}meơY5hJ^X6kA78u9k{.Nw.ْ(-B$V4;<Od$!16K>F-GK# M@0 ,nv~Šҽ;yHYdJ?Ragۚ1h 0ǂxu dHr"+=u/14EΖg ,BJ{b㈍yqE0x^&8cHvgiL+9ҶF.efG+Pp]\=xxvI)s{~Ot'q]w9p'7gGGsaGY-pB)ub ZVvAAeHszDXЇˋ:*vRjSzRٱj,uH5Jd.yHioX@|EI(^1^:f,ϕ1upG>7ܙLi$Yj7.Ӛkq!fBA=+u]O/I,^rij v}]YzuUhSm_MV_]XyQ{2WR-MÝS"Ze>Ɔ[ QD-nbys\Ǎ7-<)L88J|^OLw_̸}+_ҝ 5«t<9Ik8P&kY%ptŚ[U3 * N&,OV ބ3|F{a`AO)l[FَͲHbsWIGO)8<[)f]93c*̘%`䍵1lEe7>錛]c8 i͇^zOL]㆞~BǻLRO*U*S»"u.1NkL VΙqBo6#8O/xg{3qȘm$m'rΨWJ)Ly,vtxy"[rX6l0$ 8.Y Pj.R(K]i.Sr)Z/[4yI{cdl#%Gq:xDp*@r]$0aA}J\r(hcV!kl#-OgXdkXNi.G 4exC߷?!=f Z1BVW>kT$-fB IYW%rG>'rBwBe-טQ8n:-sXxD=׻*`=A)t*^ X5D/*kmTa¬bh)C:+@XAUT&_Vp+T5t] Ū]1|Z E2˧'s={=LĦK+4%PçS95S{&p /[p/XIv! Wr*˟[Ya9[{/fF_s(BY9e\gHLp3l7pu>A_VCT\#xqч@#pq!\Yqݒsmo}˕/ >ȧ~+rs;{sv'?+WVL¡SY)Sm5EDg\pB;;R/\͹Fäw&],n1 >lիe߇אvK< 7x tGzh{]vQuL\7_9Xo'o9)eHyf>q=}CT9"p$bP竑nzWg )DFFINYvAp2SX%D#fy?i6'H-$`M[c;Q ,=SYZIw8o˿@viG耶Ⱥa&(t,Yʊma-Z.G5zc&$Q$8J I&]U# BVY}HUu\DY&3%E.fX-u./+x UNJiA> wZWJֽpQYscCų^hMx0eUVQr")SXYria@p%7K'Sq"ur' 6[ bQ($CJuU-E*`v֜~۷ݒ;~ IDAT߈ Zj| W_ͬ&RUzd3G.Nt.--60QjJ pl9)xTUłCw>?gX,P9cuӣ#S*z^d' z've <fa&>HvUrn͑$Iާjf@^շ]rW(BE7,rvwz뒙"T`TV_f{CKPH@=G1C ҥ_j Ϊ&@JiRϘ)`3B"6԰1@ɶp]asl R.8ɸ<@ӗ-:DIy8gv_w3w AZP2,K"~LQ ъAQ:&$ %KK;ќ}#i"b21W̄R#P3ÂPRdrֹ=ִb?SMW7Mth} j ѹOmGE\FigLkKcMu4BڗȖ6 䈓kKOvdox>uSH)̡E8)( IRmum `*?'qOCˌ\?7Džz*ģaNJy|9U\ >̺^McHU|nQ.͖U[ v7I]uƑʻhdG"iB}y 5ᓐġ*{WĝD\ j+Av~r#7S~l@"]nz/~XE~uW賌-kƟ'6ŚK=۵vhbT _";mo)'4IDW^x?3 Mq&WBo͎j=nu?h1RK7_ś[_ܝw~ 8tcJ.yB&ƾyx|OÞlƖ(Z}q51,sJ&DgLqsD[0{] nYy ^0glbH-#.6^ ?>a#_~+=OXUʹ%aHUшkBĆfռ6ŅTc.%7'ȀnCJ)nXhPwګSA9ẅ36xʙ,;aK0v@X3M`yݲE WeHwg$\ #}aC7P, 8]>-cs%N=&=5'#C1b=TsP4l.+u4k᱆&"B\m/n#.ȞN"Ӂ ?Iu.:G@=2 Ʌj[Gc`yu" ӬK G fkqv'Ѥ":<>G q4#5g Bw~bs+sfJQQ(AY䨰n)mq!fC*AK孙q}no. ‰ [hF48\/;Y'91@庮51^-b%0❁-y_L鈼`8{d3s40Z尲9dwf33r5JvJ"B%pƒ+Kmw"H ِ 22vZ'lLz q!;c` VJq v1ؽ͕N)s{ͩ5qNw)2$gΡޛ P(w!q{Wb6d) dD S64( vnbJľټnjH^tK[sO7놋ǵđ0i7/FN_`Lao6N_59[w#?VqGea{/g_7|vϦܝo5_+W6cT7y[ eB}f@Q݀QcL pNX(3HJS!U64j: i Tdg>W6ˆ 5okezU6g6k4F ]ϝT|2\XSm]s?߼%ߜȏTnDŽ?*nbLwHTY綉/zfF,(DBΥ&IVȴfB3faHhܬlc*9( s%B"vCA PCȘ`+9Y3  -paLL±3!c;;ac$!vᏴՌ7QsQ&; g2 z F;v){>XFQah&C B?< ;ٍVՉAS!xyR#W0 ðc PggΧT# edR񡢃ҮϾ _f0CLGc;W l˹ 5C$BXQAoքTeEUBh%Wj&s-N-XYJ}X-Jdȕ=3 yDWAlLAy&R-V|*fb+Wd𧁼 6D-sswJ(#!'M:(R f)̹"͛Ř- r7"xH)DqbTΩ% 16-2*,c"R |_dbbwWzg1m*0ׁOns8ā2'ڄDaqCsW,ex/{Qr.-uj48Pun{sqOF;GUb9%sBThNquBXŝswLc,K$FaHq" ʝ5駞 `\85>})\ kE[T+0|E ^"8Z7 ƷK`Xap$!:MX=g$ ɜ1(3$-oֺ$h4E65@`ݛOG)W ~޻wI>q aw&i MK@B$Qܻ`߄q?pfOeQY8Q8Ӯ6w݊ʷ{_Ko~#;RbכOOO< qosSV?R Ĕas^LqU?>]äWƯ>1 p=YmN}eTDd8S|fsЙ!QM-2g0%Xy\5wQ* V\w\tL7s~]3JIƺFs\YA{ƿ#dOd?G|Hq;bknd S>Vw31 d 5:5BSsvw,Ġx:ѕPj >&vH %g7j<3yFJݏoCk@k$앲 ]T"6"_5gDn-%llqg &(LT,C cNF8X)D$g#"H@ %)ǞV)]QpzzR.ue}I ;aUHTiv^@i8k&ǘ :0K/X6q|] cBp;\M@(DEދcV)n~zxsZ">G3Q!j‡#Wcdޚ6pa+[xӀaB |,.kVZ\o0M0@ 8 ;WJIWQσk_ Za;jL.Q'==ypq)M^ZO'N_~}U8C\0|>JX+ Wܕ}\ᰱc*7O_p7a>09yTlvȇg3l%ۥkAK;5÷(m6l`$b$#GeXftwqhT`++3aL#L{Mi1 f`YZk)-/:iBRL,Ket=SWbZ32R /P Zπ2ћ^7'A7)  yc\c=\fυe.^ b- c7%>UX'n^cNanġ3YnC^r B%'*~[@51 a=(ӑ\^#Q3" Bf#/ajJ5@;^*43ryxw_VNLwgϟ5wͯAt>\^=e0Q8̇KP&1-mh`&%rl gLxǓG12Y! V8׌#ڣ(T SBTj4 ds!\Y7 D"ĉev> ]8ި^6vetk;TDP:k1 걝)팈4z 8WF(zu{nu k-2$mtCĒIR)>7xHutJ M?UqOu!Qry\f0DVjwEcY^oTuy!w#6f-= 4IKN V6pz)u(ZR\> Q:19r:x|x#2̸ZS+F% 7V܌l4cL!1 f)#l~O*bD^=VYH@yˋwɇuf. BcB47PBH5<9f|a,ʃcDc2Ήb %VK{)Q)̐F kΣ!)%QONΘ ,u*&5P2Tu'];c$ݎ h;,` t }@Y#ys^A@ pztr`W;&$^1(OZHI') GiQi Wў5&=[Bg۫ ;~]hD0; 4鉇eՒIR2fPcfs+ &DAƁ:D+y_XBifWՈܦtV;60i$lcb 4dy&v/B#^ᔗ6w! );dJ I*PX9Ϝ˙vI7+pE5=zu~i:}̾wϣbn#IZ+Q8)>q1D~v%@lm 8V8y𞯿'˯Q {Ϲ~*Z|lfctY`,}g*Oc 3JH%L%1teRB>n`B$LAvQSsh%BCc΀ ",Qi—|ȋ+qS*͞';5~BP)H0vadHE(9cŠ- UFj=q>"9EIWR ՙz`quc@"iHh+Z8FĔfVǧC`3ӥ^u$5-mmH\6ϼ2cS] _,QX[gH32221qꎒ޹KD 8Xs𫫥xI=A[&Dr2YjYXc䴯FkfPaGG./]J0CjU1|t^xcS]ae) =ʦ<чyW8[y")bsFҀbBcB'#6ԺC@ԡviM.`v r? {onjF#ѕ:/! OVa Nc[C!"՛*c>tzgD uVD:iP -5RGqaIxgjR_ߛe4nڀ |$᪈㋟|?WdJo6lz[V?tyKa~BLL̸+HBлxFr92Fhȳ+o=wķ#z1s^N,,0nDC"D!񽣇@J. b]CP\mk%Xq#c6J "Ac,n!|H

ƌqJ*}17o"IB?u?ςp:S^E(#V2.0_9{v_NoXdC6Pu}v{Ӽխnup__}`[/;XsjlLMYx@ G46I869em \.D#)5e֤v])]A mZI:8#z+/@!Hx32}rcB NVxA}A4 ;?c8x"F==̇etYn2413/3njQ ͍u c #cTD2K,izځt0b3}~p ]DY3h |/W=q^i&PPU] CIwsΫ͹"3n;%v̱MW}3uH fn#jw~1¹W.ti+5ȰXuSʐv$=Ɍבʈ2d8? 2s@sJňBb3v> F|PZל>ǩ0iwVjT<9 ΐFvӞiQf T1$j"Dťr'yY0kL@Pej!!Q"** C׺񤚛V|i\<+ݼyŶ{\&4 S`Lv@p͒ԛ#tèzLnnu[݀_\rnrׯ-ׯ,D& zLBXh9ShxiP_ogւ[X9t pKԪ-5.,Jlw >һ9]ao3yQ+|>6.,OG=;ꤔKp: bbk :0clZ)BybMjpʑsxHP b po4()mVK.Yg؀ŀV.sz=^%X"A"" /Efsrss;Z2Xiϵ .lvoOJpխ>my‰0+ XX&_c*VnΘy>'X HFG bQFyH`;ƚ2!y0(H ع{E% S:sc  t @Ű mVUʱL"9gJm.b R 5*5wbmάRwİDt c7%#V4MX2KNzeK\c^sbb.M)!kOL_V$^G,Ïid#3ތݾ193s[V 8a?{mm~,Яx9ϴG\BYz[&5cLw Q1ԅ [EZĪb+M(٦rr73YVf}k~+7ugZ6C(06 L_[⫡1%G(K14J3) #i;'m(< S`S<-s[=Kؼ5B`:˜C"/;v*:SY( "q\$+՚Tyc iw&iCN=I>(g#ZQ퉘Kh[tojw1ukS_XF%rX:-dS{*S2Y`io\ͤ]!x]gz,M2%X@]7pQ #8=CMt` |iP`xczqyO`ߑeE]҈ w]] \fFzh0b)!P\rYQJXFj$F%Sse aaaI"JksuVIO993<_y :?`wVWt}^1ψt۟g{;PTf.ʂ ADխnup_0d]r,z;{a$υ nUhlwm3n#::niml K2 `XB:P1e2W߮xq0<,u&{,m-rpf5 ? ^(<3:s2 ǂ1)> v)eSoNR8? 㞈==2ss 6u".cXdk˳/@`#>?н23燙o_YZ=hAqBk- 4rY؛[}žc?zPdӉ !;9&8c_i bfv{Ew`՘.a@``b=@3Vg,g&/Xj{KULOnĘ5*qq;p{:WktHKbd:ՏY M./ğic=K`T o!UZbrpSB#w= FLد˶5U:: /2&ڲkot#oLsIWaXp,8%Ӵ*(.HG`b)J"]finY%_[mLs {  ,ڱGG!0='E'ph\ &JHihϩe]"$B 4K``\w}ǰ߱Qqa H3qm|[.ݐKO!Mk04ߞ]RD](ʾ}Wf5M?F,Cxu?OcJs^y/W=x cbmp|c#[ tLL̜,}$Л=sL-. ЮC׶zRmka(#Hc f,23F;k k4 ~rl6dF?̐mQCNznO PRbΙl)11ݠw~Ƀ3·I'V3uroi е0g?'4Ü9OsAg <*^$DT$v۾ ] Cvr2Ju"Թє ؼ i5Dd˲,GO6@Q6 (}Z5)#AzV7|pApK$k!R:A<[`_^%&!lR%r 0%Son8~q>T̩7 1ejVO{esb[U]yKw^KLtx4~ 0(vw;z eXO%1W% GApݚYI*lcswzug\=t8q!qy'x㿽y.'n>݆{ ܚ"3ĩZb?0= #3W%-|ȦbMKil vJR" &Dsz9g}s89cX6lX2Sƿ-3;wmm%֪3sbIfh$&f؃E#ךn5S*#tCSO,a-<v$p;}ZRUUN Mv;upgyƽTֺX͌b)/u͙`/>u IDATHqnmo Z?}͞Z_a묷K>h/{t6AeoQcUzHZ骯y`%i;azTFE=T VD"F #VU8###Lh戬-繨wm ,h&1O4!q yIf|,3K 4uMo,~1|즕ijIWQ oduDQF9l*d1FXלUrky.1|#^WVɪRu՞ tѐY>DB߳ L0@^䙬9BHWoch ajYr̭b@![& J= s%6oXٹ㏉9G2 fT͑.t*Ko(_9Ø)÷'dJ2ye{Tw`zXTɐD`mv|J=ǮJʉϔ()4K&[2g^nr v5$i.>'qNM6.KX.y6gЂsrj}iHVzB'%16Ș27DU~V *U`KuVuEq?d~H{⎗4N~8L'o'8}s B:: O@;^:\@ :y~/iBM{StoB(5tg'yYps4@7t}+yU@…A\\Ky5țXZd#S+ʞJ`%W{{;3 Pc`MEwc"5T{s*+|;́A +6ȍX&FS՟yh,U\,2!OP\9Y>c;Sap80̉7޹qiM۾|fŗLTxۨ"EٱǛ {Cy UCݪ(]zB׹\ yh(*x2fi"|)cF&#dmn!7Ǝ@Vk &5`q }[a0`3Dzo#p&o10xPΛQ>n]Psc%u,iUh+Eݰ4`&k5@,6߃Cn2G%p =MN{n`}2b{69 i__L}&\5G2 V*IxK5870)c=:~v7ߜI_glVQ wH븎븎ƿ^@ksYSP_FsS7 `^aLyb:g:[#RpaL}#0q a3V}Vt,˥/aj 'ҭ̙#3FAzr|c O.qRh2}[,/V:+E$,"5f hHpF.b)SM8YaVT.`ua6 ۊ0jZ')n %;sVbY B*5g=2Z$Z#c3x?Fe.닲V)AV${$dJjs_B$ $WL-lsF25rժDr(Lif. r?8Dg!6r=[SJUv-,- k16/hP߶0{}q;U]7p:Ɓ""FBW(Nh+擶vJʅɗ7D|6d Yy $ P7dE 'ZFw2!ǿ;qDiurqqIynB-CPM^ǹZ7pdLL<6^I>ięoy;nZ6>5m%h%KG@1#_#y&J^Wc+p<;.F=W#+{⻞QF8y~~jClД{Y牜n0n%o .8o3>ady1yi:8J-1, Z{=A nPԲ$1jk`*M #3hJtL.'fw6{ dD2 m /Gk/s>Ȱu8r+pIf,'&{b&ht7 -qBv$ ʋ?  kG8:;Ug!2|3#VOd!"ȡ wpoޙȚI✃Sh7tlaj̳J=ycv6и̱ *k7.#YFHz ;^ޅ Icwd|n= lKo߿jV_i޶GiUaXѠС] uZejXOdcZ06}ǻ }4I%":: Ce~GwxPxkVdf]c5hyq Y W;r8tĜ 3$ Y0RV$XKRsLYS@ 9'hf "RJe=o>8)$rW*ǯl~[ue~-muM",A`JP y/bύDH-[؛ EPSbSF3+&.ڧSd̢,5?u 6ۥ L׊f$m<!KO.)T0۔\e0fT ˆ p15w=ӎq|::8S+lcI)?±TZLBd#/zjKe0O GZJnj3BC$%ZaW6cY2#۾kBfLav&TɴYch㾡Tٷ&I󄍆ॴSЁԪՋ`E 6GzظP蹡mIKtG"Y[jcrye6lC < շ&-i8;ALzr+8rjgDwz,g{QV7򉱂W~!qBn3h(mY+yrKM-0A҅P=q_Z n3IZ8:˸W/$#wpG3HLd&Uzq»>D_!e31jDz(^@P~%O;V^E[pLyLRMsJ9SrBBA%-*-fS}O<[Ա# %Gַ%Quzj ;:yK@MO ;1D~v=t`HLzIMVJ*S>Ǜw|$՞3r6›Hi2W6*ţڲgy]u\u\u\=aA;[OE2)ϘA8sE"Ē~yeI/-hY 3z*K#= VSj2 +BZ'҅]`7іXc!8mu]IIד- M8~Qz!syd'S| "}M԰DV]d}_/S~t65# myIal/bGR#@H]-Pj4bl\gfƻZ+T9p;q嘅lHO#GL\8s*۲ump BP%t*>5ߥGZ \cB1't:ag4$B!) E>:b m\{Bf&[ -"ғtbҶE!JTD@vD99vW!3p[oo9OL3M!&Y sg뼄 `i Kx,lK\t.m'Yvp\j+A_Y}C(tP1UB>ҀzF< V{,Yh^#!^}^;x=7O i=.=YԾ%5.g=7 7~F)|]tZѪǯ(da]IK5bw IDATKH`428ݎԄUUV #,tU.A {LyUg'[ ;D?cߍ7|?oa>DԮZ8L&c(X^gz PJ9n5]W@q FJr[ Ǟ]'{rh4Pz8S,17!q,oH|fy#tOr(y0"=pӺYRD'EMc#KВ ,@ǎՉmo]ؿyK_vħHQݰcL-תiU}%m^l@b*0:.oL[-[ 2ކcc.MT-H@4(2QihusY7̽Z2[h,>aӰÒe^Wk㢴0PTov撘K&&NH b38ڑ)**heC)OD)h>C2p{v_ݐ({?^qqWxLz~x]U}K>mg- uj=%p Yr?T`W& h$Ԧ͉ /4V?RRzƨZQ 5;/JKCMʺpW1PgLf̍o}ǧ2D2vm;fFfevQtg<un'\JK ĢMgsa̞=;n}K+d) nϾcjImcA+}DCRhD:**m]$ƞ@$!I)0==a6B>?N<=S(3ĈvnpSi#.!`>i^:s3qЪ8rY3}:!sH5𞎷1zWRӘl_hFЍC1mU {gƯ~Q:iq\^g(A)t6=n#*]Wa964`.Tgobg;n7<}5m\u\u\8^_\K޼^;7 WS%+c CqzSO H t#xS3Yd%VY{!=Ǒ@Ļ3Az sA ݎN:4 y䇉.sX!y%!sI ^O>֌Zѹ2ߖ`$϶ZFE#֞8ޕ)1D^P5U,RF^]PYq}߿ /8v<}$7,(A;书f񺷣ucj.GkV\7oeOk7ђ!v7;n8f#+qqq3BFy]U0{OмUNZgj5أ:GXҎ'VZj/h O:\* a\z!Pv9 "q@3%\K+AQxjn$s{.ʫ6dh`E)IpD V_璹rYՎ37[pD6F+VϦow$ּHOn7tGE(<'NSh Pɒ+h,j MȬ<:XO]RikkxT0>+ !a^*K+X1V/J}i\oi64ǷbTec#s!Xo5h8S833\ajܮ[!-ebN)yؾ'0KhR QCd3#XqSǂL$As̆ UQb Nʊt2l9 52#w ?9Jߺ*HOWƥVA {@8* <>q*OOJ3\P=hݦnY&I5oP\[Cu:QnB#d8fgΡ7GV1u|Q$,[sD6eW)RfJDn6XZ4_6oʬT(*L8O3sd%fˤRxH "-8M"x jȀ=a6:::/du6~|'mZ(g?CO^a) c, ¤ƂQf$r]z;rU j5UXE!* {+4Gi~2z%uy8?;®PB]l&+LJagN'(;N*+7\tB6U\X-hwYk>v4mb~_vr}XN,mR])k6Ȓ 1CLӄ=`:=>rfRp(dzxe CK ybKp\'$o./Th,_[y7lshNQ$ 1r  QeV*IִY."a\[i83pdl>3='qj8kT&/oX`pMjK 6*Wzwu owwwyzx=圑.1R)Lc"2TQL̴Z&!GUe9Z߈2䌑8e0T@<_a?3wKd|:3CT F(88+."JjXek>|) KؒI)$/j+p_/<y6mnsg_| ? P^BE.I>J,YnO+ HuT: ,}zr9UcW1'E{t[/&BdUʫ*ݞg;.ںDsXKa*jSXЫk[LWD_bЋfĦ[ڮn[E 4L&CUm)EܥHRrs:Mhk%3(h1,W,/D)Gax&/m 쯝m1iV]*oy X;˲PU8j$UmZ[Ɖ}>H"Sf,θ:j"΅z oS61HBZhXc$DKC3%`*7`-S.gchSv]8Y!C$/N.Ym਷`Z_ֽb]ayrM{@tb92bwos8oq{UtU >O__bU"0 sqnS vp \ MJcŚ8z1^zACk,:.pW&ȢQhHf2)%6OU0waV"BBzA-{jih$^[Z%ud 񾑲AxƯ^l}p-Ȧ$ 14&:!. _Or*X>* ̬Vy刳a=9b5g,-++^ڼf p@6X#1|<\acر{qe!B9W>v8* [nU8χ'k`M|W=6z4]`-\&~5a73\2w+Ka,F0'V3\@UgvYj1Gʊx.t9^*yӺbCbgb_MUBl~H~ʏqk% <c! &t*Mҷzv<&M+-i>RW)1c`K̿T6m,W_d$\>IJOrZv|olxCoKUC[g.Z3luԅtak=cSgJWB_b]i_ /5|y=>0aa- hKPV82xKa팗q9v"gevXh[8^^@.ڞxwօΆk0_' I_F99;am pT)蜰@zd=< 䡅4BJwT,/PVff(b w;@'Xؖ,ԓqXX?q/Ϝ3{{n.GUj yHYRLⵝk)%Sp]=i c*4BuW~~A:/GĔvih `} ΒƺԖ΁v엲6c1Y'im@n4pw<)/T3B9'^1-Uϼ_?5q-A$A 9\+%g\[R\jd@fUb_YE1S Իq˕o?amns?xi9y^?&ƿ __~ o?_KS?OT{tژe;ܝQ=97uH/<-L\' oށʋuyA>v~ǰt706 SRГ'_>3x믛շ60?&뷕^}Fvy,9'{RۂN# !(<*܉B$` h_*$HuEMWHJ i}Sa.Ouk!6"-\h12v{qԅ8wN̂Pw8NqEkB-)+3jJW;.KERb尲 k}ڏԎ`,y6!w2'd]sys)ݐ8=L(Ǝk#MuhpBuu!<điޅhB?UmDyiwI?UcF|zp|9<Ps”CxU 3{sݱ304WsTUB/V Qv$Skɬ`)"֪GK餰ERm+@hrfnbݞ۟6os?~~;%'ozDyYGyA:¾uəiA0F% $jڼ^y-}1e^^sH z2%%YjW"[ $f݀OcY(b4T3'dU9FxE]!-2n`m멻~ݿ-Ap6]{߀žKU0qY:߂()(C1T`Iyy$FHt,ÉXH886T)cnUؒvw]r9?zڧФ҂@jGv;>8 {{߿;HJ0<) Rhry;h&fXR!.?`?7؁pgj908JN ߌ-Va(ҘWvu(TG49Iw1ݼc=PR s&D8.IsBX V|1v<@݀VXʋ_X0&v$:3mns܀%S ny|^c[<@VE8άº07\@PxRġ/[D^ρ%sy]~v9B${/gҷ3ȩbCl $kHUnθ_t܇JffQыJp, ^M9 fe)*L!a,bZc{>Bsht[sf6r{.KT-մy[A4,PN +v O a0 1"C" Fڊ%kV)u)c<Gd` cm3JIgAL>OwwrdQ#y7SDёui!>P d~PN`٣|;L1 Tl Lia9,)#ZpiC$AӖa+'>#+eYĞ:"j3C!1F%IߖKx+I_Aߑ|}VV*jKJ%]6Tz(Pm>Xn S54M55#L-#۞)Ph}`Sqmnsp7?Czp%cs>¤x0TNYjbA0]^۪b/h8;LF+;Q ]Pb$$J*Cs 5CD @L€DZJnyW |,yDzXJmV#FU hb y41h bR/OFoȫ 2"Ϫj u:X(:SkehVao>![rA|xx67x?7/ɮ 0}3 ˨xq#_`.^q~&DM7R3\FJLH?Nŏ)@>Z&~\LWrNhi5OpXYԧL}~r Jamw}hbSyfÄ Lz0Q&iJ wPawwȇ;껉00$JjRB t 4YF,f nIJH(cqDn ~;Vۑ\^+ 6BB pՏI!x * NB{mqrEB`?E5vI~sBi=X]: |>4ArXyZǺ#(<H$ʜ{y&TG=0Oqb4Ƥ^ZŅ 9(l̢u6~mUo{"7w!A!'jWH 3Qͭ zR|wp_*+- Ҭ0% ?mnss?k?/o180;s}¦S.,Eᡱ8Wm}[xEfB f.: NrY%=+%y *9U^6Qx~\yQ*=荽C+UBK*]s[Vb)CU֗+)dj_2g 'Hf1fYLi1+xIs9S8χ ѵqܜ=x|RwDqiƈ,VXjiJ "i Y vZ8BNagvw=w8SY#G{r:ˮ/ǭc;P;Cw#68k,p`e5 =N ւHTwf`0jQyC0$fZjך03J5#c" NyrxG7~(XFH8yc#aWT m% ڙpٴF z hf5W, &7T^LzTF֊/'vjAM .vŝ=J;VmϨd]sP1/ĩ6 86@~-a-0*RW+B>*: xD\Ho{$HHKdڢk׏Q^Ig_bҗ~3|&~_%sG9NV(A( /8r*Y/yD.Z!4}E׀7@Z%pD`Mn1H˭ep*EɈ櫪NPi IvHx>֌/G<3bHft`T*ٛ2o/S;$ոAZEoW4v:0#0&( [ԃ]⊄H| X]ت@*[EJa7N,ae] ԅBGwsQWYȑzS}2 $X Izjڏ kRQٝJ4cpclʌ.(È>FRp+jF0o;f=5{+ZI!PE ˅C<+N+GN'Ƚ# !L8 L uz ~E;oLϺ2Fݗ?nq٬VTsJ1ڥrDڎ㼬H5̴վն^h.W'~Di^u-77͍(փ sHKpmnsp74&h<͟$ssOo?Ͷ`b/iD u\aQlU*HHJ(|;w]K[cO@k8{ncKԾxiF܌ġ>QvPX9U8(/ k WqW J@ϠW9:Wǥsd ha q͈Z°8RxЁ e@JS_dsƟNc%s/Tc e%qGl-XPH"s顲պDЉ`mZۂd8W #N 1r7#~@'88QXj@N`1Ta;DG {@c`&;vѬo>#/ܰ蹋O<J(ZX ,al;2ո+;dX 3B*Ƙ]H<ȝìq!%AQ:pjV%&XIm3TAY,W^B酓UꐨYyĨ~ڳLa"20$|h"v8=W6獪Ɵ%ܛ?A^@iKݢfAM䥱ȥU(b̽fx^٪Ma}ۆJ5/j aTŴ2$zmnsO*3ǑWoA}y%G}X{|aee=.b_s-Wfxmm_U,{nOw ;~@FeeO-f|_3 pn !4k[MǛnRo%O;_%^'ll=K{[AK)Y?fi`3f~ɔC!<.c%]2v8#+cGcdDўkdvИ6_ˮp -i9KXuSۥ<&6>;01sOGdh %n&Hw+:iKLCĘrDQQ.$8RȪ1*1$b 0&v3rW,VlJMmGv"2u6<NX*d%&h<C"i|@2RWc"0k`$2lkAɶWcb Sk^!r|>8nn!f> ;vHbPk 6yضrV|F|}t&R.oT9 aPuea^1y[dJEٛA7BTQ[:u6mns(fOX+(vQt퇼|EϬQd5 !Mb'\@ C^ '=n7 tڛT$޳_% N,X9jEd֑}kf: fxX#iB?ODoU%_޿'\ y}_$4Xu<.kc(,ƣ`cƟ@:dꌦh,*@aGd0Qx Mvjjm[bX@(\\uF"29L#xq8jFTBJ%Pb&M@@ 13g(zyAoI/'ʬH X,e 2M4z=w~&Aw!p#)1%'U*DqD[8TóSpSs(15DttX'NSc&eFybifG|^GZ{JKh 8~.5M.zէx-Uoum 9?:o$(JC"0 x BBJaP,%~n{ 1Pw@vi\G6 8ֿg+$o575Xk2. R9=-eFnuoCBTy%^U ƆVJ[^:Zc ܊(LP&eϞwvPH SɲBY2Fg̽UAHW[ F%Ò[ϣTTdbPOl .BGtN,jHTVYYOq*#B_~* 0#{F0xy`7 %F𥥦e|#ƻ|il[qv )( SR[=C:9u11kg}pt`JX! .J Mj.asjZXܨ՝%,ytX(ڂDHA! 6EtJ cb:b8Ps&QHH iou^Kg V"m)U5?wOOݹb<ĺ |ZIC`HSإU­'Q;H7 "hOT\{O.I]]'{%RB6mn6j kpz53d}] /vUp}JRB+:Wod\΅R u)my\K\į[E?$bk|>/}j%7 & 筑& B`pH,!zWa{L-Ŷ DQv!p #0LّEZKKnrfAH,"[E,ܩ欵| DMxU8vx1H\~+;*כE֮ҫ3"SLh֛SSuϤ@s&خ?)6HT6 8|_oSV?_叾gi. HyJzXY9RWË|~lA4Hőwɨq%i1 K /RU ]a/fX؁DzJm [d)/Jj_Y:mՕK_"uzkp{,cx$%@n)MS!@.i qJC{=9bSJ23&  R-p82r1fره1-.^`uP[Z*!d*=33{3nd|?+?>/DX\0˜ʉ/Q DҩN8?WX_|GS2D;bgÎgN3prVN$CUFJD@(>YBS@zWNJq>rҕ5'qoNzemoK#0&ccJ-G^>@=P蹛 0nWK҃..~JO#zyh?b'}F{YIaf\ VN/{a)Soܙ6vĎ;ƿyGEdM'NRXuR6BueFjCCkiRꤚɌyCУn ǦR^8p(Ō,*GhAh>^XJf/<&;M$R 4K#iNG&O|Ƭ OK[IA_ݗ{#_ ٹpsZf d¬8r80D,vήmIཪu4BTmS寷mnspm0oe18W2HOfgoh8+ #/3Hv/ԚlJz T4 ݈,0y&pfQQv" w7&Qg8ʊ+%)%vy: *WXs8Dغ!1 UXqR\5+eXE}c˭qM}XrZPl7\ 83I$xgzé%^.ۛm - G[ՂtCmnsWmWu\'n%/Zzd4OX tI;n]*Q w!Bm{tWFHgy+O?Jq^l%:/'e6usKy$jq~Xvhoh!9(3bqOklu,^fnh`9f?8;1{&EKZ=wE-E DBɰCENyK+e)xv42ca//kÅPƸ?|o޳~[9ƅZ eXyɟBt$C;w2ķC. 񀸁UToRrG)2uvY߇qsUր ;zNQl-ļxT{9UMa;B>09Nd]Ɓ᠄ 3X>1x1E8ܒ;uP*BںL MUhpxP3old>* %$}:ESbFnTM n`JZI&BKqF=äϜ&%uN: _5I'ҮwA[bnNR@p!WHJ(FtH[HuY/Kn]+"DvuǼRaV{븎븎븎LIGb؊Úlq`^)쨮Q:ּykL(gL*ҡGc-=}9pSFȡR)jeଳn1Co] 1EnKM줁:35a>ϳMMF!I֋%m kŗ@VFH>D ҩͤC'g\kzPN%I$P^ Hj)TknLe(!gxIQݼ,iwƤU%h@9'ݎ΅̑#UۑgzՋ4z% 8Ub-Љf)=8},tsxpC9Nx` ppv& ϙʴI^e{Rc[j`-LDN3d5<sN5$^^fT1|֦Ř˂B 3U yʃemMS8*B1ehjELj""wqdN]g ZIz`Vfr}^1D9nosJU{`Ӭ~qUZňB+EZpXՈ>-Z'JmM vlYb:::~z!uu,YX:X:H)0B/4<5EepL QԲP]^>X|:="Pk]Ș:RhFX{]~gu#/ Wav!FUH(&?3ZN8t0~m3};c+K:-P SybX̷\n. @&Z0KqZt)d*Jq0YOv}5 X'8 qVsyAQX(5w@[?M["KS,;G709rOh?;b7f+Ih䖻o}|ArsjNJ)f c0N쭱!DPx\NP+EvH-p,'My[s@}}5M%ўozPl`2H@P;o ^`GԶl?@3[+#cz-7IwÎa`=!;" \BqMn6IK"پ^QsvfP ݿ6@cΗahV&)ֻv3#j,\ݍّb}nL̽qyYusۆ(az ϞA(Zw"OȘӁrVP Jd5g4mBnL^y8G0P>:bO^|L@e9D3>>-KX^j厝Bzfo4n`9Sv%Ssa7c-\d<̛bG/זv (f0 Ooh=[RS7O5-Z7%$֎ӖLjody_NgÕ#0]2O{lHJgW횑#x i jNK_.z㸞30yRfҀV뱞Au\u\u\T^AGhvf/g`E@5 H/€$f\R5O6ĺ#Mb6"7WlB{oRI+]glkϛ\IV!e702(bzb P܉E{OAT.m7I (挘Kh} {Y||[6bb0&dNyɎM'p'2`3oVٳx8n)Q#1 u);SX1F";n v/}"5vH 숻[-xs$dBhu@-`UV`H [GeY!;ưCNP߸֙ʌW^%|%RnC9rrAfTYy07>)˜yf9T~.MN35;9 Kqnm5楲C>P2^yэYrfC+RH`a+QXd]bubws@5GQiPYY7ncaROzRgYk )58yR b~WB&7TN;0 !aMxe븎븎/X=zn@πSxkhk1jOv =EZONiOzIwuߣӂ†l4wq_ ;Ĕ mG ɔ CJ+댗jFBL c#T'N')&d]mDI bPZE9d]X9K2}^.xX ;ݞ8MCs%#@ @fk;PzB iq|>:a_(yd9cx'298m|\yRs[YQǁ,sa>-dQf^ݩhpBcWNrXzhT F<׻쎙=rk03a(FFGJZt\ wil.pT( Ѕ\C\N}/MW\#UDl)S=VT6DE]k7lߵ/Ӗ Yd,Ҥ*<x(-(븎븎+p^O6F%Tgu]܊54@T.l M Xש"P , c>x }cd`O`f>>=W T -4fZY:jߕ`Sν,d bGHio{y Rs-/yج jqTuȒI"ERc<[Koa]+}_#ò^($|O񻯙y$2zmJۓU~=9\SHj_PkڽJ|%|kÛ#F~#}BLM,K H"8Q ,(Á́pz#{t>A_(Ld39Tf#:tXG[鑛e! ZC.ُFG1RveѱYh A 9MNR8f^cQ<(ɜr@%^vV0T#U^+ZX &DG]53sk̲UCzWiKU0% 2k+<յۃk۳_#/{WJ\ !s}OCOu:::K=l<OKsvĨdT-dD!@e@(Uy^/^Tzm6ںȼ:La2p d<k=)4ts1VʵQ]dQ*-,.<[ oV:1rnP,'hɧ[/$vbL_Q4A 0Hc_J g@/KJӃB Hs抝3uY(Gjg撄{];h[\-8,P6f`.BXjF2vTwG5aa z W_P@H"!Xv.XiMbL[T.\[*;sK6P'E$셪 C$#h4f*p ?>pyQyAg68[wLK&tV>/ d'f7$ m[.BDʸ0E Uɩ8nf{y :?|qkR\ˆC~=áZEkc`k1r.Xj˂.jRԚWݼ]-rMU븎Ǐ?~{OO~7?W^} A @n^,%E6%\:+k~Dх%X=Dj$"!1S.?-5XFO2Q4HlA;"2KxS-zME Lz4^*\dȕ[G"E;9(u _&kҋxN-ֵO;al_86ŢPj}Ɨ^` o 'UJN<|QF`dNj/yKRL,H)uOM=xrwGb+/bS!3K;3v IDATos} #[g2Sw5x,*rwSqvg2A. v/^0|%)B1!?0=p:2/3s,YZ9H)4NAܘ6{%V',&UWP:@L]ţԝUQD XVĚ,sЕw?6ৗsZO} 8|^5ܽ&mN:dݽk\*d!}eo%bbGkh hBCD1 =)W qq__ 7}OGGs?W:~G k αgߦ+OoqG"HLkPg>/j3ӂQBgmΞD|v70/4p#7aDi@kePs.ߛ1")!CDRA5BΜ Gm@OU2/C6؅07A[(M$lH۵~2uFu k__9r%\-C ŀEUh"ыU(ݽfOmMn?[x)q bbF  m._Wx{q`-5one%SƑjgVqT*A?@ #ǙPƾ6B9U 27sH`H/8Pd&{\&_#Ҙd=$!D*\R,)pLЛj Qa`ـMJ%ԂXm݊Yc|={Wl-!w>9[A >oV65!ρ'DhTn{%ܫ҆z+ @2ՀJᭁT_u\u\8~k[-_})eٰ{-x & Todr.,o]hJp gnZo3 # ]Fޟr.)CGkk&q s,Apa̰Fxn9$(qH=K+6D$܋&P]^~kОdmSza[KВD#{ 㻞t9M6ښ[)mX#u[BF $KJiX]6u Gl5> ,~Yc h#DKDvqd =ɤ7Kro-yF'en樆K2.+ZG܌*Հ O:eÌ5LmđbG|ﱸQV{ L}>Rg7$nǑݞZӴP 9KΜre΅y} %y۷A ecWѝAT[A}Έ3Jt'̈A1$!*hvXm PPcХxٳuDvu'vdZOw VOҭCxqIvI&\3ʛ#=wi5v,p0"-vpџ-sTk뾕V}dbLLosN39nF1⽀r.yPC%6l1ԿE^(ub"J pĨ(/4j~ZF~s1 !p?XR8 {^yqsaܑ8 NL4)Ӻ9SkF=22J13N#{Wќr^( CbޣW΋G_Ng<,- [oMy  1Uspk3h4!q7i$kӀsgkk:=ݰI YAwߚ1)#B-@PSUN' ,\dFU+ڶ7cE.49~;tٺ%-6]\b~ m") )" ~Ywo,= g&%FH//n XuiݕQQ#q`Pka^N$Jpn㞛x` b^6VJ5'wfy?MȎV#7!+ (51;;j{!>)' T`J#,ZA*] 9FZJ.'miǟ}7{o笣?kW~흣JA>v UE 3mek}zDE#-DH!K#)&Yzqq??ڗn ?m<LrOrhB֓7ki,TЈDi ˌI h 7BOGDInyBJe"tvjxWqfjf6CE Q GOGl){%ؼF`M0==4U/abQCjà{+x)8;#02'qrK&rCWxqEoNZD}/2No7ӟ[E~G ,97a@ Vb YELӱU!Ax=RXtb( ef`!$&nKIidEa&k!H$Ild}2Z#bp+d@dΙuX ud#\W+60gwt )|7\h/GZJ _)+gnM(j,"Z`_(Rd/mLeB{aJE&_DHDH>mj@2ooT.@6Z&Kbw~!Zփ^Ȳ>mɅJ.OӑaFXjDqkA"h95|0F+EKmR,*i15Oa*H^R!b9wĤ%WljLj,RkeF1k#9#57I*bфyFĝ܄HB0G (qGB;Z A2'[x(Ǽ0ϙbR1F ނuV?؆nW`AOؼC@zܿG'yhl+I=bs|Rx"T3je DP(UŞlj9daAH1RJ!LWu\u\8|_?#?+|߸~ g@g=(G%Ć@[,nXL4s3 bO@눘2ʩd|t_)% ̡̼k\z/% DtÙmN63VE Мs4Zلnc,/U.-PYavb_ry*ֈTX(H4` ^+T*KXe+GԿi$rDV?sJ@슙, svݷDݢe*pA~%V8׌J@B^>zfؽƝUZE9+8HwF)PZUU B3q&/'2 LTZ87y2"FnS";W::py!LZm1EZUWp/Z莘s 2s_'uf* K,ff.4"j5Q gVeU'~3 m{<ȐV, 1FИ*cRZ^Xǩ,M+::/8_~pO`'?{Sd[yB^Buz_=TS\[t{Ե1=2/]"7222=_= DdXԘأ՘N!{+ ds 1)!k|k`gJei  !W04rC+98V63&g}|c\{]f 4e I}^:/kO1'DςdH3 ki T2 `VąmTIQROQ"\B@Au>"ܷTƂhi]?)T2KO'Q812n( T8rf}qI8KMD1,#D%i`} `0g*fscXD؅ĞX]VY=4  5B)칉mcr&7iհ`BmzzX%Z.5Bl.9M28/Lea SxEUp(DjJ kXbZSW=~^0𳤯Sw6}<ۥ!_eCiVToaDV(y bSl]Wxq? 's|?__oSwϺw;}7R^!'wKFb܁ FWI AS@=:tuK%+=9DB yx7z=޻(}KՎNH]4z-{ p)`J!$&RP@=7} 9~KOBDϼt,p}4l=98Hg$BȮUݎcZ!{jDIPfVɠ@kGX,SB99 n;EWsGB TCJ $0r3$\O'D]M܌#0EKh 'B{{?7! f:ܺpRĝ$nFFx?ݯ|-|&JOLNJ#B21-3ǼPg暙4AJd1{&zГzVdҍ9cJ؂(9?no ,uiz/k lJ ysƽ??wW^u\u\8zg7_TOٟi^|yH=y-n[k^q=By4}8JM#U"Jx{ݻ f,;nÈTϿdoY05=5vߔ8C (,KR4 m=R9MS+o+43 FaӅh"W}(7>ŕ}|,S`j` v\QkԐ@-s0ELX6RKNz?>w7f摈hNGﬣ] 8m;:G]~n`o2e:NS~Ǚ*Tk#$Î fJiy}P5ef'X2>MX1JLErĽ"#o ޝ >z_dі.iJYV-v,GJ9C`~"Q%cfC!%a`)$71"F41dQjZ,"z[8YA< h;3"Y ӲpkKPhD TJv&ψ@zZW XxPD;,S?K=gu]{?w1n^3٘G1|N4@)e,psE; ٹ2RUZ{g8^u\u|A#c?_̟?O{g_/?S?_- Ͳ}ݮwnpoɦ;R17Z?xoYW96Y٪sS 5QvaL;M2aO sfx'8Uy/~)#q&F!Q5 &bZ3݈/>Dxy}7Ԭ,4$3[Y=hOSU W'#u7T}wIm\TkL}ڣv1Ն64;af7~d % &]%a؏ٙ,GX}jo2#'?;.9AYG&"x@-W,T,,u!Ĉၠ~j aʣ3 p{HX4JZTdi h ݳ$I8\_k;b:X*b=ҁNmQsY7j8f}Ƌ#e$-Kzsmq:ҙ@q{`GDXSsoi `졖q۲[#|4pKq#̂wO%&ǣʱ{j]\ഀ !-\(d˹1!"a@B {I?ٍoޠ(Rba\@b^d-MH{&G,;󻺘KVYU=|Ěͬά̈pwjsψ,z{NeyˌB!-32{ ^09~Sɿ >WA]413QDΙ>r#]k.'RÉe:nVխno8V\OS?tBoJǖ 3B ƽM8gȘ.XdJ0qdMqe&O'drF"sVγwN j1(*÷ )D<X!N0w)()f{}Ii _MjWiXz6@<mҔ(9WA<|0,f}Sgx<GF<@O&s8qXSYlcDc.B6G~4Zj:<=Ꭱ190dLtB 38PTJlq2D눳prk W eWs| ;O/Laa 1ƨW|YwJ0ég錕 xZ=t@CWM(7(U-"5S Pa_-(iЙ˅4|C41r)5zT# "NqrcDeokn7ZY r쌤s mdƟu9GUCs*38Di^}b59T]@Ͷ~VխnVBsGԷ OIir}VdF 8<:bx >7`]0&+؄鄓DI3#%_8\>:!Ϊg¶@O(Uײ(GƑ02I/ӣKNDH<՚|] $kF5+sds=]c:dor5ɹDf86>Jh뻴M*EKf~S@?L,?])mgBAipc{X7qK\7u$9p9^Ή491^[k02Zǻ/9dM@#:tPt2sēh]L20O@GGx8f\tLz0=N]luVce0w<.0RyctxuUP䒑x&/;sJ!'̡R%8!zȢ *-AFvlʬ"ƒ3Y\ S9/$jIRmA;. \$_Yƚ̪W7R.$6:cQv瀣b? Ӏծ9Xf/ eIֶ. \c@@nu[݀RkE|-ZB_\o.3 yilR)\Hz&t0m.!$J(zB$!bdbZ;^@R E?b6Ejxh _q22p[Pk\􅅱 h/ /ab)<e)M ׬.b1 z t@:q<NuZa`䮰tVp21FXruͲ0:s ރ7LŪpJ@}}y De–B }u[l=ٌe*Iwd_,JBVcHe8;.p 52XP޾G7:g#4vѵ?iVz(դK7r^I3%ޟR^]Z.iS ȊbYb[/fml׾5GVխnuQQϷ~uAǫtx]G6Qv\ >*P\465&D8?,'D:C ^ f+>'zNP#7F*r|&c *W\c=w 1-0)v3 |%Ag2IJig6ZbD((G3-O;X̘f)~V{ljf8J.\>y>s ݀|w>@ c,<9xz|LA8"E(%(b,^P/]}`:U$S1zJ,h4WFY\I`IgPa.XT,qZp.'!v1JZBlqZ e8[f,Q))t(ZZ֤͒ Ik,2O)U op\[>F"ҜpW7ŪWgՊu=Zٺkżzn_W|/rgVϕHwRuSS*C@±T!`[O->[V 8:Aۄ,v # h&y?ubnԕݩ0aOqj?M0(t/E80_-)%-22O,y?eBd"y7((zcX S 'Qp\$F Y:34c'wA io}5ιJwK4RZdtG+yWVrsTr5s$DzqK&3΍O$!\,QX2H5Yy5Yv"i vɥ=*g2@CpR\IP <ͤR\AtyB ̭%D4wsPz1RGSQ(Bh|$Sg&.~3o@9PQƼ\a-1usV|DGp&tb 2ЇBʊ{G59SwBuqB(kY~F]e7)"yh#rzڦXbEd3縭?|lۦrU]29Q[VU?G؛ްS"k: ju\qM@ywo~s W2.g=&T3yLG|<KˉC*#uh(k4X/ 8qQ"#ą3̼發U@=}~I5m۲~xڌF]d=q22k@qWܐ{ m'9s+&^ 1Oh;P}Wϗ8d"f!dbN\2PKK[lx\тXYi%og s;k/o 3]Ol5a8hV,XT-' ]|0.4\v1(:L\maxI5 9  mq)^ 'O"j&`51RGypE -3z5!RҩAvxלJk7Vɔ*/%?9sΐCY]ރy)HQ൲ZC7p L ٕ[yV,Җ0^9 4 W_7k({$%#:c?upc.a)3.bv\cyku6V 8WۃB xNޚXO[yb;{mf)+XlQ2N??ozz8ƌ32HgFʅiI3 yB'x wo s% 4 Wnܠoρg.23=fd4&Y4Wiݸٰ-R_febA ;R?XR!&pq#Aw!HE jiQJwLޘ1cqdIȏ?}I\(mLT `yBezO#PS焳Bq]قfW,&uWPTK*4C~x(}- q%Sh{Vײ}0:/y(aؘQnx.w൳ >O<2ɂ2nDnqݫk*&YPI Mzrx8y"DkVGhjc:P>$wpLϼJ^xy~?rY8H W{~@, k؀C E$RY8p#| xpX(Ŏ쫧Z(6-w=@̎A<3&WvέΨWIfveJWj~ho>5nT9o9o(֣y[I P]o+|A X Lט,5dj @Qu6иr5r ᮂ>4::|Y hيx77jg6T%np %w(ص,qt|#].t.9 %Jˢ/do,(yc$E=SLoQ#EOY^8+pmm#){T9֠!GѺ/VխnWR7[@v\-n:! Wp١<%=0:};G@wp?eǣH;L9`)'f[0_[p8N>]WqHP =9ni895wjSaBn ]y/N{YpS&'I֠J(@:>wmϻ&ve5^c5Y[@Jr5QHMVۀ,9B eFwK{@[g%mϵ-Mq'KJUn:o9`; ۻ #˄E%μUKsjT@(bq=+jТBD./LsfL ”}zݩw]A4jw0$AZ+(UBueFou[V7\+ upK{|-K3_kkw_,2: yD>͔21X.!Y=~Cw8O\FH'GXR/ cMC&N{G@7׎‘'S+f23Prs\+O& Kɞ Z%T^ b;\]as3P>ĕAT5|MvjC"r;~eȥR8ksiyImwuvYst Ԕkr}߃*м`) *])om 8XA0cѴ ˂Mۤ=+<i{dGua "xqU`XRE3dQ\tE/|f"3R0yrbR.@љ< jz< ;w52WwzkU7F\u;.f$+,LZ5W F: / sIM([ӷ+ ܘW^7{CNkDuJKĿX3:єnu[oI*ʛj5i8*S|AG o ?3x=K:3=8Qr;=>·wŀ~/N!\` 3̅W!+(g! (ʁvd:R"wH N3ĕ4FeFL.S T&6i 8>R+;wx\hM_Ҳ+Zkjh#KC&ήR 'ȵ!t(G|CԀc"37F:[Onʛ+ksD"m;+7 u8j:b3UXG*3|!%! ]u;wCo' LcUk`IEaHdL8uk )!%w>:g] ."K5!^O|X. "C:G.x)9K,Sr ^6ib}1JɠѼmbf4k Ed)/,VJf. \TNjknGJ_tC  }1_,9{mngiv̮݉2֌oĹjlR{庈jفpխnupկ0~go^VRi |" o|3'Կ0x9Gry{߂+h_ek"{"_qR|g>#cwL?< i>q#}0yLVYCX]17}`>;$ܒ!+S$eyiYg8wФ5_X($pA1F?ࠥVwOkyWfѿY05;xqBX'U m H <2>g4rH Ʊ{s CDM_}9Ur#^kLBlWE-\й'eW8585c;sQ(@6c*#ǹjbHW,d޳.xv( Oh0d2E(]$ N)tκwvRbA-|'3p5t˓\мN"=8&d,F9gBr\(uHP&Ng SRZ|ˌT. u3b^dsTx$M㝈L܀Ιaȸ߸z_c7G'c9'&QtB 3XaR!Iy%sH7MRhDT%![AIG{\Q 3t#:W\؁wB4rpLL>//ϼ<dO4R\ĉg2je=&V#JɨŌ9gi">ƚ)8-UD^2XBڥ Ϲg^TF֜jX2B]/T{yaȅQT* 6_Y,݃>PzE^[p,Z{]^2IƠc蹏=./yL+ e#ۉ# G!bvlT |((sZ8呅қ*O[<zz7PYkJ`h/9>r HAn:fTp*h.dx|wYpE0g9Y{?zdJ/h LN  ˴pfqf~>3r/p,/sx.p!xzGNmF=dh 7.r0G(`5&Ry Hs1"_f *ϊB.gUs7yqD.D8@tu/ UGڪ+Pc;Mr>g ~"{7vX׃iWFҮ6zYAci#FrGVխnVfivdY\$I/{BkbD%b8 7q7پ|* Vi{jg<IH|-S} H==970XK.qpT8B:c=E.8V'T&re-{+lT/I,w1JT)NK+юIJH2c9 Jaό "CFW,ZeG=ּil\QYF=Xtw˶ px8O,,+G\; H 0>{"tժv}`s8;ߘ\c<  aVΣwǛU:]=}!eBtwG#^8{t"У;++`c71wc\fRQ.)3ẞCuՄE CAXTkdx/'hƒb W>owSJ)2 *\GtY3>+{/ B'`NBtGW*,BsN"\{Dz3YF{Xo{׎TS#pխnup_x|KX0N[^ 8]}X1¹ޒqy}oYvJ^:gѦTW.q *J]&W19ف'U\Ukg^91t~o" l8Ervp2$k*[-N"V4&"cs3i79|RX^F2:0@Qq3` -&,ZXMX3k6?^Z׺ֵS@F:7޴7Vp:5OJ*d-C2 b7Z1y h,RmJ-QecX0 *c3_b $=DhSw}v#2;.l4pa -o'XTsk 0+ Fd =dҹf6'X8A8fHYӁ( \6Atˎ3;r \ G"eBiraoNf,,# gcL嶇.¦sI9Q8Ĝm05P*M)Z]W*Wsk]Z׺o)a/G0$fSО&JzjQ6I'DP&r͌ .LB|s@.䂡t*o|r'7Y RNIWv^*[;26FoFiĖ a/<8w1`SrAJ֘hX.Cl974%f2Ύ \f!͎D#e/.!s@)-J@&9g9N ^2^AΫR=AZE5<::~\FicÍy:L\R@=QƩ iq#&VM#7sTZLKQ\NZGR Pf#Nwų Ӊ`v}݌ߍLzʳDNm#t'2tg PP<F%ƈc 6U9t3f0 )%Rs. 5߻LiQz JNP>׎8IS%F'Ry}#]ى &mo R{ k2aư6vN/?"{ǯG|hQD"J S!]ܴifr/DD4gKlǞnqA_(idԈf% s.pO>"GJsy151q j&L@P2 ?XdJJaucRL#S8J{\tJˌՏbSBs:R#;ڔJ;V֤Q#سcNęU ^r5(ZzNDyEf^§`e >Ymo6Wc{٪Vm/^owhƝK[4UB mUֵu+p7`|t!kO+#>kmp{ PeD\RƅE72 $[=Ut 0,]$][lE{ TȞތYX0_"t'-;:|N؃p .9\ԼMY8 XRVI}33bbRGt;s'IzB tq́qG33j`%7'^_e7a.yG4rxHi`]v$r4?eOO[_,g53ڏ0?bcih2^Xޔ#예(jbמF_?7̬uB톬H̳.TcS*O]a,u7/5ZR *h@GӹHI)-BB 'F&kjoSPs!ީmZ}ke sQh1;"CNtie]#G&vdv^L?"Y4k$y`*3* 1q.0' !)1(Ly88ÈeG, u)t]` y)6jF/W)UNTnj>EQSdfA x*2 TN\J m#-R5sj C_*)dr>='bq|{yNoIs:u|rqH"ʆjJ|V .E|I tΡIvܔ[HǍ1TAgR@s]03{9c%m&[$" 6Zs )N 㖵mѭ~ylkjd //(ܝRA.+n4j6s :u+$:ǯe^iv1v}Ͽ`| {3l|JD<"``'8nx;>q ;rFD ƙng·M`re xrހـʧ 6 chN(D71k~Zd4ڗ%KGeBH0|{a^r۰YmNڌXVjPP tzR=~~`GgJɈq$4a0bG'e7.tep+k1{a'.b1! )2\%Ï䩫jAEU`]ϮI}9[v47HVdM< 1SP4!\rܐqDEbJ&fO#)Rf8; t3ҮC@*۝8%!Rqz8|˿QJa&r<ܿիov&RԖy3)9;=C93w't[aeK} ׻z& 6-<ﲺ(|eQ !ԷytJ:OL7|=-@v93yF/e-:;~+]paiWVyV68/+ڦ (TZ׺ֵ>G,_}= T] ϓ5cUu6۫g-aG#z(k,) 4pg[ 8r1љܲn]'9 #3'AVk1~|3Y_jܶ/3i!>^DŴF_)-2U H^ /+l+,,S1t{|ݞx7;peGGnv;Ү'( TP%%6"U@$q[dhffBf&#. s#k^[dǞvz~waǎEGkniT!2gr)rx<1inNFF$8Fz'u5sHp>lʌ9nz"<<&Fvc̤34eD !o v!U32\9gyboȶG#1leF͘O,24W~g;_pFB+ݠ&:|\-CКT6H-&M+2zyyR\O_Jo^3Y rUۇ7ʭ]teuZ5 U~ֵu:p/?Sw:?[>uo{=|EO*{̀kCuYZ=5ܐm3#/9đtf){8c&r zgPr_/ϲ2(NׄKCiH̰zcJ-0i|4JȺN҈x+F0X۞Gk""-yY 9 KKscmJ{_RڎWfwvAv=egG9 >^ݣℨtʸI' @0n|t{V a6gjŹQ0G<9woQx\=t!sw83v]!aND:JkL *F/2Olydϔ %̡"FJB:;Lx59=WF)<c!Bxy>3Ox.@3{Y^ٿs@(HJwxWlj< y"J8(*T 32̄{C)e"{f9@:z $B^\KQI- BZ&åWϭ EkˮgkͬV̈́oql: kJ԰f (>}M˽mEA>Ƿ[a "mN DTCm YCV9Z׺ֵ>;ͿO?5A#{LJ~ z^P| P?cr۱,-B97Aȑ1'>d#(8Mz/ea9&۳Wi!d2&;/9Brh4ÔpyyY%{VG%OEW)]``&#d^zT̳sعpy$ʯcuFg{ xrB}.0Q0Ϥv(HˈhpVSqx3' x{ ^H5Ү\V8œ/f.əu O|\y}F%vx~Ůt6;]!jpֵu:p|[??ȥ~ͯG~4gww#-'%fz-ʭǸ8.hW.ّ%0t@D]Wiq1)k洺DL43 r5YMr j  N+ylqOEU`z RehUo/*vm[vE&i~wRmoec[|6d".jBsRLy8I~%~~V}_{o.O aȅhBt%#fF'4Wv/eaQA Se@Sd hTbP !Od= 6plGGGH))Z}}.@DB4Nt8zqmIJKMϔ |@pmtS67&E ][ e ީ`Uw5pr': "jSy^@sXHGqZ62֜X߅zFqcU"-aZ"n{r#tqd@=Rk]Z{@|w7K| ~_|G~^7(2{_[ $#TKiMv4 +vq&.xmym4䵱 C3fYR *W1سc [S@.Qx6]yKw`{c@AL r0g[?6n65Ơ6PI ,:ˁ18ox]yfpGj (ȫrD#N41,@6iolI, `B Y3dGBh,[4P#@v)>J {$̊*i'8AzyvBsywLH1bBMXS2M.2UؘOXԖ@ ٵ]zw|4V\T*- qͬfX}ߋ}MIy-Dn[@}/pG_E+ mljdB(rѐ(1FG^|uk}ց+̝(W*~?a;>._O?8ԟW$)Xo=xJ =4rJCM9a1-ے1ߞyw}>6CyXaS$= Ag&T3 v L`Am fXOFoّ’nhI2EFcQ0ϕ! -@O讲>_/m0Oϱ3x$=O<{9(9/9#2̌/'5/n,X./}y $ 61`@%bg}Ӎ׵mVY ti9Tv`ƳN% Z*˧" R(;͞xAěpRd`bN<3N#cx?,9]PXPl::y"͔E>LrCP \leM}G SRYhZZcub-᳕e[wVg|P~e P} T唕Ǻ7 k:H[9}۬L/?+E,3<!U*'՟*}~^Z׺g8O/'?7?v?'$?/|ữG3 _o\ F9s9Dg # @v,x%f8+J:"6gFDBؖ +3YZ LBxFfF#5m=KWԚ^O IDAT ?]TfiM d8j¡]l؅UmrR2/^q.ݒvw`ȩ0NÙr|}sׯk]Z??H_o T|mO"|ǀ:D;2ҫf5 y~еo F[40#G25!t0a 91Paz!u=i?^D׽bO2I/`3.ΜG89R5}16@V#BokP%A 9&GәD =g:1"]zNRet̟"4HlOT }RJ7_[^]-$O8#iI${pÞHV~'  JͭrXSNX}G=Me0%s|er83qvF>9׼q`nZ]hU#B8b5OQѤtQȹ %)1wh2< M!# @3}rR6RqB,ȅ2 (ۆ7|FXX ~[z eMi-/R@X"4ՋC&}uauSz_׼ߣal,OSE6~;ĒfX\FcE@zCe焙b_x'_z?~_Z׺g8S@#m?- yqlcM7ޛ4ef&`L`ZHmr9iAڀ+|BxQ#cw{nG&_yK^cf~㍡̋ďq3b~/.=rz&/R]"5 2t7+2avt@Fk(Z 5DERSu&Mzi07eP*-сMuZ  Or3š^)ݻyٻscw#<_ahͨH%jkxFi2S'į>7c=5'xZ n/m7}k VWelmtUy(TfbƙAQH jErȧD;rfIXr3R Ͽ 0L L-cq B'@\&طm鈴<ś[uC7W.RŗmOǍGfcǎ;ʞ25KoN}BW{.TcX3S>`1B:Qb89Ng^ 3!#Mw}E?W/9<ӏ0'^`Lx_abR&%CT{^7Q4r3 X̄5efKh:<{4$K}@,6Rs-9*ix{T)F9q%fbmyf^Ϻܥ(E/PmnO@k!-_Q*/Ww_5v'Q}4Ҝa]꺋8\p׸@Ywte.Հʲp>N^q<4?t"`Z׺ֵ>[e=)f#6#I9,X/~]kS 9Ff"5&؀cZ0^sO59d^Z@mD 6h,@wjm0U^IIsLWظWZ{~/0&cY^v\@X~EШ#؛N:9bBs .z!k۷^NG>#DaQx= Dx`Oi4O h|2EUɆ(m&Sߚoީ&xY?I/q!͕6E "H\e"&c:^}rGܿ8g>^vuk]8^[&5v9cVlMqًܯeػe^qXLFxlh[| iv#NfZa}3L1ܸ@V=Ә.O3(-f"O}(>:= Ot{F_:Z/h O΄Kdl=^a24mG+*R1r2%9n0L  @@Y7K쐕GƵK=;=la:reT("e5H꨻Go_;A.LL'J  =&d)d1!J`uBʤY"$6JS9wF 4?HQ|)3dVs2Cxb)y"0\ ETC:s %=1DNgK\"8㹺E(L@9I G%6U^y51ua6et5/˽N `C{]U%;P2Hq9n\MX=jV֛W&Ǜ&x$sAkO'mBѺ>& CZ?[MFx*<|2|x7_y4̭ݯ_׺ֵu@ z 37z!GW9fYN$fK$Kާjf Z6C0PHʐ=}Ω%3#*/@de5gx@bCoϵw# :ַvm͋,i {&"'2s^.ƩͳwKb i,SKlE~*z1|7|s][5Jݯ̠>_Mf3$T$*Eځ>޸w-rYE҄J}X6uF̑IF'|k(d2s$B/HحBF.ٴ DHJ +,j{Z#% 6u9#D>3 3KkY92ڷ I$$hd_{4|vye02&ŗĭ+;SBXxPcD% Giߐ1 ѱ{™lE DpZX?Ȁ\X?[(NSDvLϙlJ0#ǒҴ19Cr"Z%sʞ^[ GH[)bPj]vx:MyR+[zSidKf ̖ޛ\Il7QB ЮvbSUWIzkg}rISi7&Lەh-`.FN&jU(jg}]'J^6.@1>}s.?ae;G_<5A }ђkw>;(aЁ A'|d'F[zJ%ta&߸65rz:]NBIJ^vگ7F9Tnlr9?96/_vale.eQ ijA̡C%*t>nڿ'(*X@4alxY(d!(U@!ܝZ+=lhQ`PXJe *tZw q()DERxȊ\z"MC ;-Mp}|PZ*N5Y7=vnY3/_Zc.1 e'͜KEƉ_5O_d;RH`ݣֹzzI. T C@z?(> udmCa ^seC {qrG ^ ^y4)8&&Wvȥ)S`&Mm}@.m+tMvE{7KYϓΕ5Kubڷ44yRrF ^f50\5PD'/)Hlzz dwwMBΆ/rt_2o9_'J)]1m'>}#o-+sv! Tt؝[G-Şx.ƍ|&#0C \BO{{!$oO6du 굮z7g{ݴN=qȒWT#jEJ_MiV^ H"B R+؅VۡV 畗IՉu2Jbw#HU)]PgbFN)R@ޘĨ|j`=;H2X7s6 s^u.dV~ve clϸD2ƼY@`FJ04鄜~7qBt!MI v= 3_gZ F9W Q;V+ȋb/АY#Èc!ڄ ZRqOk!4YlZ̹2.ξι2\۹jc ] qP zـ"HOTE{_|h5䰵nc(粰LPC$Mc;kUbۤ+h$\弁`W5t%MlDnݦɴ=I8[fi˼y>%G ^:s. cO?}#^bnS }>?|A9~Eއ-&_I))n14[0I,2+xdpx:q@:_w<~-ptq'ʿr "Kx )]~Z8zOd@.эpNʹ3۱+?DXqCKj6@D',)U3A#V|9Z q7v2&$I `Q >04$|!(&+oea!Z&G]{F Bg,d = ZN&FI]Xrs΂Yo:>׭vD%õ7v.*RXҴ#@` :貢^N3y%(7w|}/' 7Y}B `0%v1P煷+>R35;yqb??qPגq<{I  WEN ХՆ2ؑ9_BYw^ ג$wO1+Wf{aN'eZ>`QyM+69(fY+Db1a]7S+egtar!"ǂ!LCD6jtiVN[$65ֵ)I[Sb̥R o%s)FJEͷ4H{} Υ xzuH r =ِ]Ov+6"æ  d2N!ǡ]+d1*eW^KTd@{>8!`? W7-X5S TUD_KΣz;[j/yc&S;*]Bmdl#B Q#,8Sg@WJ!mfwcqD=#(BYAJw ("&SQjW .=a3hUk9oE%e@<IݻĘlg]Dw^z@;3`e_Cs NJ51GRO]փ\jSWXiB`X!RR#%1vҶqQ 199T\_bbu!3 aؠLcJi xKC!BJ"z2K#|+cv!?Kz.kWWLP[)$@)99?|;g}0uyu ´}]X ΤYb^Z)uGj@$!T>HJP*+4uߴIT]ZjD<L1xl($0kEBfyWm EooJǷU?.݋[ד매W4ߦkc M(i,liC xIʯo/}>eaTȫS'G(;>8G BF4oҟKgog߽7jc!-]#ơ܅S Ǜ{;dVP^F&ۑk1@ \~ҫgdv깂nRJ};Qɤ燶pjZn׊ZT+?Q(5i+d7&{1Sũ& \{H|墶"x pSkиdžaV:\9L){(~y18vV.>2s"c,cbX'XB|ha'GʒG$wAI Ҏf QK`W*B;#| Ĝ=eDj _|!{#ۻ#{AR XW3aJ = YyHȇ&t7!Ŕ,0Ʉ[J\* FuZ ox!xKCm-FR%# @)Z0/Txtf6C[h@5!1A:a[*k)d1ԅP,ڤŽ5Jmo#"sozIUo()[C6I^UWne\#6J i>gp :2mOܧ-NkC.1SY`,cv}7U[(h>_V7 9P/ﱓ/_xS]YOuзʭJ$QEnJ@xdY6'/P"@0Bx80jSD>J)D3THʹ(RHN IDATX$b{9sI鋗'vyªMK$'|Tjof&ht@f qkw%g̍3=sƗ\[`ʼVkav( HOG!20? ^y[^xĉo̼]LOCcKneey{P Mzdx5@T P+v,Ć`}#"<"aEH81.̽b9hR*v{U-1!TK RnjbXSCUuqiHi`f] jUS-||̵@YB`ҫ[:98Vo:p޵ll=&zoPv?*T :B)M8PxZON_H:ewI?L?}sC[^] B_;3]U"@EzF/_~{60I$v鑏?>'U_V#'6Fr& UP" ;}>~Ø5.yay0 oTy~Gy໧|?zO9y}2'Թ2;>P,TVFx14""Ҳ71^71o4.~mx0V<hFqO;&i%Ls$JJ+ y\-q[t=s97xbjɗ+d̍t+AÎD47|llu5BњЪ집]3uiRi} vĜWb DŽ} u&D7gYOOԥ U)o !}#劯,%=Q{&dO*W9avq fBI1D8V#{H[jQe}ajcsܺDi@Wݫbte\nxt*KL{m$߱OUn~n[{Py?J_G&y`^ eGc*>b.7/ gsWמ˻/2 ޳ Wgzx`74]18N\wBĚ.R[th 2EHig"8F5m]At|^@7d^ƀji}q'MI~9v9jnLexܠ|%Yq+d>\g'=h3ҳ٘ӕ̩1'A#Cܱ? qJ!cˉZ+y≯K|nd+bxxs|r~c}Kا}Ǔ`48Ӿ]7$.7Pu08=U8U#vХ bV"> dy{g,f?9L5)Y +dY]Y+W*R%/R-3N0%"j-Чk7 A[Tzgsm7T#G4EBq dmcP7ܮtwo"M.xcSKTE>jٻ(^Lb@[HQ0 :Y[sg<Lfε dug^oU9dOXLH d]>?`}t"M=6ۊ̝ww}3ovnx;fV֜(?0>| |1<q &4r^ϔ$C}Y+ʞgf  <| D瑅7 3 \ ,'nzaj~"W|}`4Y2KE+u8Z?NLr^nmqN)xi7F+Q7Lv4T*r^Lo/o?OL%VĕD_Jʿ^DꜼ-7& IL+kZo7sTpV*3B'x+o|m7VzXO}S00> \j$84ix|w?bLYW# 4bdT&m*w.+k֕,$ڹ*\ޟ4hl֘0$Ԙ_+TY`^ԗtljKN *#@D P'L}#䊫64lgT +b][1Ӱ#ihLeAbqzi "}Q(J\2 {9b$3xW7@%;"% H^\-67*g5fAVmlcLSM@m+dQc>ϜgN3KJ$"`Ym0eEW/&sDŽx riۂrm}lqpS^ށn> .g~`?~/y!Ɏ=2^6;YW^+2s$P+g@dP#?_#?FWR @`}d7 W/,mO{E/0lu@έ`2"넜n;;#zmC @dI v8, @d0Ѻ.efcϜB3gLL$"Ҍ70Ё醝-u=V=JMS~s%Y|K]$hm$:!JPX|. R1UZ.jLҙ3-FYI"uuBg—s& .8Ko˼Zn,a lwmm{m_|Ba:SLe^Ҽ}6紬qA~pӁ=?N<>OLUP|-2:y # HD37<~f" = G Mqb Hq5g^8z,X.32n"s9(h5S̰R!6a(F)E[畜`H4VEQ+njDFu&S hz9=I kC1XebŜdJ-mUHF хSk8շ'SCcd JH튵|fJ΍@5F,ĖJkHpA]))XoCAzwq>Җ`ܮ7Y;4Pؤ4_fn(歺P#e)c9~Z/ޜX"1vό$LȲ2`}s;pc|7_͕i-`ylBa7SR+h4?c+7~Z_?lT0F=?zd]87D.NLjñ8q`*M|80p`!Xxw}R`m(ZV\k[ȋb@K+KN5@uDSoA.>TǺP(L`PH\V7VL^7٥ U("ފOo{? x΅mM};7֯*lWlI:׸C^֊o+d a㪰s{|˞r`%QZ fԾqb8.I[k:5|^) f1nvhY4;0}X1qZf>4)eqvnstZ͏{H8 SêCϱ9 ^ M2[,dL+Y3E 1 msۘP4\%jv05b% T˔5RS%(h=Brqnwm A:{dOED M&bBhX[2!ݿ=fw=̽ѴݏIc!khl7p~y]2Džg!D8i|@579֊>}>AG?޹xzdm L̊o|{[axwoWq ֛ 8bEl_a 1u&0NY ,~Kp{B<0;J0 ž U##¾3{fV^swUH򰲒BQ.,5S-#*e*n⎻mԫ,  $V1i~d"TH94q4Sɽdms\˥w_os~Kc4$Զ̀L210?%r ;w}#Y+~|b:YB #]1[ b }=^6YxMز'[@'001q` 3r qBx Qށ+n䉫yJuWNV,͵%*tFg"B焱yЉsPɼ]?.+#Z> NTs6{Ypc+#=YBGC'GcE,T\#yKvE{I - g` #[½:b(JA4#ԡ[$ꮷz.VnX((t+kI}q=rSY_ku9iɔL6wFqcwx_?P}|+S)'y:MEO 8 (3{(Hx x N%8 UBBO#<c553HargX(V23JcT,oO1epl9¸ HƥyrNR2Xa.D")Hqe%GȋQ F49@G F8O7"!D r>C_M?/z%[SB8WT vMJQaVX@.EHb]u%#| #Ftv4vr~9H>?dvJBn.r xܚ;"<#x p  H7|_ uj8nY_/rBg#0vV9rd䁱72o}hNTF2%3g*z)5PnO.z&jԘa#dJZx@CdO,h]^y=]jc[ǣ&&+(-E0[i<3v1M KhqbzgV ۍܽIB^ bqR_$8*jď;ed'I9u Gfkc9}'t )4đb(u`+ qG]즟 *;blF-\k 񊗵@ AQ$C$02;|WʅuBm$%z9yo!}~0:K]C9WokŰ 9su!T/N,!a@449Q֕!7Pzǹ}s;pϿ?j8?w¥9Vȼx&Y⟛t䫷Iz˿_^Wp&g*wEV@$T gNp Gx0}Yu^J9"Wҵ 4Cc%Y_@:(56&Jj^h,ZA@[T% c:A5z_y]C(T-u5W@nel3kŏ+i,g]7.'t{͂v{Iv۶6r\Dwߢ N|?g8ȓ8i_?ȜUP+eܚkzKt@^wzwB f A)Q٧4r2bjy,22HW|HBm-$S8.iiLnw k xm *זyܯϙ;x:4`;-kt|@:yVLz[ڑ]4ZY W'; a IDAT&$D WIU3n7zsPoyL zZH*FBJ02t`"3aAkٔ߆_.Z[ B,5߂qnfWu o#ړDaIUݰ"xUj6S2Է k D:<0 x VyBՄy+=D>}sw: NMjܛSX9Go,u`a7כ \KSȪ8?q8|2gwQ~򥁐=e̙_X$^[q$pڄYm !0!a!2wѢ0ړGC-R'22qhrڒ[ZfP!sJ޺ DZB>0<9'~>ygz8؅V wZ$Jd#IA׊ 9y%FvKMJXv7E/|P@U/gQjcjU 84E#Ӈ, P]&LU2ԕ9i;Vv^nhh2^Qi9I~a=Ž`wRmɚ1Р삲DeZpg]FM)VL>[2h~G^=2I$˗7fp`3t"Ƕ# Žo6χ&w>ibl\!4Y@Ȇ5}(12oTzMkHbV\B$B1C{۶1eU}9ݶ$ @H @X$CQ@EBcb,+<3!+8&$J>]j5c~O.|nÞ\8#;8lV{@S}qYOiV̛b58(S3G/x})%#+9nX: =Re_q e!2qQ :g:D^>33vf~,~W^^q T*@G̰WtPҬD3EIYfچ{%sA+Nػ؟U=*]99og 3݂j;iJd@ء]ƭtCd*ڿ[l}vpڐ\fܼ8W¸7># %s勇`xg%3ԕ)v7VKIhɪ4ʄtUk!H>ز-VtFF Wi yO Ցz8s=ɕ?+^gɩF9:z/*ڽ}BGBO >9R#ȹkH]%0dLZ$b/ ( g@(Y]IaGHjʼQs%x QmvVb  lRK; INf]rJ We\U3uJg ^z흠\6m &]]zPr[98e 8aIz #ZZqړ n<<3p|y ўKK@e`pP,\ ؽ`x|I>%-E#Lz^#: "[F|50pKo#7+vzM8ͤ!bs8d, | EV±;;B:=zHw^z{!9B`b`&ە|X/#KӀNN3,-iܾJ k̃/ Q&|٨_,>w|T֞[^Tr`"5ADˤG <)"1d2=3ˆ1nMեHOlUITI=?o|Ws+q.Ԭ##Ky}CdsZAh,%V)/ɱ_9Z7e)8)6 iėVBزPB˓Fr0ܠBJ!-(øc AFp!J^.Z]-2F3zUv"g6rj*MH!rgF6(lڛVuqV+*5L"fSJjigb3 P)6oĬU$Q[!xi.Հ5TQ>vjulu6G]QE*ŭ,CB`&x1ea-=W"5P*gQD"a @ץ{O[ДDg"=,*yygkjE\ecO8+L@Tk7' _-qHb[] Gҙe WL/_rxz&L yFq78:iVdg /57(/);fylG\:{{V ##BLuE:Ov 4X莿3?%Xˍ*cfw{|ɣ'K /@ieZ"*lrm!|qW!1;mp2RO}ESy=W0+Vd9 1N>* t.|.Jꭚ (1(˖ՁG__2W,l p^V{#&/^_BucBpUIp{݀xA^̮@GQCY* hq $4UЌx@lّRAsa[Vi^Aii _O(띴4Vil9ijm+lL>X`'g}~oſ"18JΙZ @Vq$ )Bxyy? wS?Nw #g]i o{|oyRI7E#VKErcFD#q=UD?a(!|+H3o^q<~J=ys>m*o[4&l5)8Z]AqcLZ]L]s}{ׯxaH )*)P8!扪ºm mA@ jQ\+49ZءI:2;C% @6Eٶ Ug* XJQ.#>s;NRɕKbw,"pL#"~ڨw-ˍsK]'8/VDDFUEbRT ֕sعsv'RvC"&;VBs SܩVU*gXZJpkA++Ż\)ymf&/7cpQ'^Vi2]E~)E 4Vq΅-;祲B;K% a}0|oa{!Lv#I&tTʊzF/<<Ϗ:pekfνz#`Qz Hfp^vj"U%= <W2+$0^τoD^ lɹpi'"e<y02JG{c_pr)~SK ꌵ0l٩ULnV CܱvEI_vj|b9]ۉ7ø{dXZ@кE RѨ2& lM#i$r}/㣯}o|[z5/n(5ST3L1unıkqGZP,MjbP+"N+ɍI[B,@1:)N\핁E <5gضBWa+YIJ% `d 1r͗W+ֶyf7ٚTHQY7J9Dwh>(!@P%ƀ(-PȽU>Y Bq ɕZ/xEj՚UmFD %T])66qH|SvG* `1oDA1[  :(`:XrN`ɺL56dN'.'4? /R+ViOLݭ ,]'؏;^_z%ۈkT>/y[H%!u1B`cCȢd T!1V7n<ïч͟6~5vWLDRYb1 ԨYrno-fRCܩRz/ lt{k`V1LDL0* AZ JԀSsƬ`B@QƖ teQaآ y@!\]j#y<í3c4F8EbDz'zd}lRpt#cvZl;/;݉©lgT\2 :IBsl +oJqXj7˜3'1@-Ez=8iFT[ZG&;j}B0v4ҥ;ID*-95 ꭟ1וebj†bd1"yuټЛƈ%GǣvN`QI0֣!)o<O>}M~g?7p)xDu#\+^޾nN J"s G G?S^s`%| [''Я-7_#Źummr{?f͎.@im,m7 i~{lŏ2+$2I(geE`ll=c5?JvXwD+GVT#)BuqJ6V2Xf?3L>8 mQ'~=&ZH**1<4" TGwz&Zr_xb_LH˜nTcg7ꂑYVLV$a N :kF1^r_īW޼`'DuH sfc BL╝:(^YKSqT+iJrcy16@IM"(V$gl72 L)Duӫr1ZDDQB`)] kv[!o7W9:.9zgBC:m= !,#rq%K !,¸ a! ljbLjBnHN%%Wa~>jOq$6]'ٍ; !+w!c\K"0d!j`HP`z1U1hmCG]wJ&1X @mOFjK:9ޫ6/h]β.)xWEB@XiAC JjKLqLlg2~3>Q[2Q $<@NvgC:lT5t4<]><GU_??K8Á?3?ۼ|' ^@#'y:¯~{C/#|Wخ L$ /yqC" \j"G Έ3QfFF^P9s*_ps]>#0#_g!h{(r>9c}pb'aUWW:G,_Vurcێ=B C~n~]Կ'~<҅?~P}J_<ӼK81IĎ+fn~P82)^W ]u#sR~"|c|ѷ_^aPJ5Pm ˖?勻3{i ֥=xfc%2!3 hܶSe`da⎕1=3g [+ $Zgce}LZv/=Ʉ7JlMyqrmWR{gL `2]V88de%51WLD+^+2I 3ed6VDo X:8&8tO8HUcv4rZBcs@ "/^KWW qԊ Rs![%I DLRBbauކQ MP$țb>؃ZRĚ&mVȘ&FI6WNVPpfow Kvsõy(AJI)c -$)Idzv\.t^џ5(8d-+#-I.ByKgD6.Rئp¢ Iԕ{$nÎ0(ga'0b Wj=)L֪ +:$^BGJ:Q㈴Z.*_KL1Ý IDAT`D۟Khc¨\bkC P

<<Ϗ>p_?"7/5oҟ;CA~+O?:i,!<04 z]ϙa˙"*2!L;2o88V0ްgj 6^"|Cn3\]ݢi, j6_ĺFLO2>DZxa!GOF YL>qFF gD+TV ɜXlxЙŊHGhOO`6u(԰˂́%T KlLTO.5?Z- (HHFS">0!LGb6^`~1L0 B+ lKSX)ԭKyND0*q7i`~.ODIafbhXa?0AB%W#9 Z[*lDƀZ6`UX,R\x"GVƴFI SSo*bBTƚ>vE6Ř"ZbhTՠTT\6DxZ ҙYZZBwɼt60Fcb5BuF1Q*T]10GHEyiH?ݙP7a :WN1R[ڭjXVs"Nm!u<@Wl#@ MP3jhX#хXX!Vicr?ic|'U *iK`ʪΚ"0p46Hi>K ,WJ3)p_pOlCK!}0L[q703\<^ʸK,G65=[\)XmeQ>%5}6o݅?mR$1pFeq8@́5p,nF9( pOᾃ@ bHJcd`f: E}bʍ`4'803qJlZXX2Aϼ-[22_H'!h6/ AiD#;ΰ! -ʃ1D(18j/i-Rp Y*.ybEB"@Q#:ON yJjTJL"¢SH"6Z/۷+{I Kj1D)yurq1Dy, Q[eP1=hs_H ɩW  $Gp5œ3 SQ+r(Q7s .E:#%Ҙ6Kl5p$hR#jj3E֬tB4?KAc݃>u۹tޮ0q6u7$[$+#KHrsue+xs>yfk%QR $6p'p٨XvdAo`dnR%Gx%!R%ƖꜵiJ͸y!>#I, u3l yv]R--p 67yy7Y'߯>S'?~?zN[c7X'2⁷| qǐ!yGxK& ƙ{ QhXzhEm̼ۥ(]M"''%": ad,90̒K{XGk[y+o'^|A#2<故2r[LH3+%3RP 7 \Ɂ_rxgr&\E!!}0-+k4b穡ՕmsJT䛄=崒ũ3ۑ*ᓂ^dh49R )P{5l?v+-p޴9qݑ7w3dǩ DڡD`ip Snq)oZp͑ /#bƴc0*)KN=tf vWi? 1:J9xR d GBog^ڝ{..Cee@#yXx?1^ } x)RC]D2NNAZ{zE>>PB9 *=iqRxX8fu40 #(p,X3Ju"љл@IwĦD̆:WM>ru=[+"Olrs,WyLcNӈU*qat2o1e2ٙ!K(YX ՒF8"sxfL}Q*r1?*itE81GF uxݼCub)F.Un0DUCKUZ,M|=2b Yആwzf,3HY1jz`Ȁ9&aZ$l(fG%Ne LUuT֪i՘*!_sxDaLW-qIl6Cُ s7{O*GWU ̒0O~j <Wk6 & yo6ES&eU.,"WٶT!cn2zt ,4J;)tNͪOۅ3fUT{|=OQBş.?cۑxJ@Nvm6UM)~K>U;"s $ OGf)bKϻnEܞ ЍԻX9%< , $Wu.ٹ<~堣\,>胸&Qa>xv'DJBJ Z9QQTN4X {Jt(FJu5;qȰް9>bycŰ4ߺ .Z22. >W /N{zz˺LaH*#Tqh,*ըjZ+)ir'U#[!qcU "B},;wJLJ(ޜHowDQ  V߹JR;qVs+gڕJo g}6YNe .[iCCCÓ8Vk~'9_WMo6|+WЕ\zbWmv49CƛisZW*_l0PP2ƸB= ö.s 0(~T er|*=syfwP5Jٹxvp| N6ժ߅oHcNH{ww.=c-69\l F*f9e3XI~(.Th҂9jN j&jYD}@$,f4rd}W9ƚk 9_.; BPR,d1gۡ#ň30暅X'!`%2*Z)L;:`FHL+:wNEpu֌u0Hs8NkqCl\#sg*ض" &PPsx *8fq:lдA]aV9+-3s|W7͘Vp&LYJ*ŦY#-XZq0G@q,\2hcj2Snj΂2Ly9e GjbIĜFIuU<8X+z,OSũcHR&d54:fף^q:eG*f Y9GoV%c! ~,,$#zٛ!A=sIuGF@~FzH&ȓ4;ɅeY1q"\XIT-^7j;qhSdH:QfZqS6z# JeФ O_c^3TCN5{ig1gs>XۑxJfidN'qEs{nCG; 6(q ʊau~Gg3y*[P.[iF-CJPmkPXݸΰΰZ>> r\+]>y5ߥae-Pfs.p{ec9*JN <*:RRn ޡśDK\5ȈNϩ"Ytq(dۀ'',1.q}jư #7X^,XY^]]uHYyV6e''׎8±! ۠_Xf3ВE(%WroʩįH*f+RKf,XR x/Usƥq"ծ:D(MH%8a[2Q]KP)JUu"[SLDM^Y%d (F%DZY5!*]gRS \.R1rXƢM*FRϛRD ڋ}IC\|51L`pFaγ2#cfF /32#SϢe) gDb(i$w &U_ɐ+bzW"p)Sd#k""2SS8V0rc[ IDAT-FcVuQ(jL\{b5 \V%z3&^ c*U^D/nefPG%r9m|Ubt7UD/7c!9k5ْ*G7?JSQ2 Oټ5C]aw .spp>?I=jENO<.Qm5Q^S!Sn:w?OI]$Z둰XP8fCbIa#㙱GqF8Gv+[u@:3lFQ6`:k,3l者0qy Cu|gcV+yGb=e_YF6B Yɖz4J]I(=!qCLS=NR{lҖI",q Q (E #c6#es-f@Ȱ),^gy͵#*SƄK,~C^/d-5Cׯq$'t><6v٥*&gUnHʹ ]Ui#jTN1MSC2JۗTrGJ2Fhu, 'sORGRaqBXDH.Sv=lK<,l>r{g1vR29ff$`qh&I$;?zdf 宾9łwż;ŕƂF.U] hѩVl,@Zv+wBgI :Écf5#b";sM9%L601En)̝c;.PE =ٌus0a#cJٌ'$tZ"ʁ Q'1LlYMy#k"B^8DjjVOzo;xؔKkDFgdU*rxգTwܐa߫XR3EMcތ`FgЙ!)aS(f] Qz s+lR}]ǭʳs7y_|ѵ[CCCÓ8 v#tetKܤ0OQϑ-FnAꞯ"ec~N~.Ȅa k`;C867YH5 ;3$'Nϡ7i0;uVcLkuϴmiD.39'6S*T.ɅhJ#1( \3NI~}P[w7GX*StSK2UNsʤH"dxrLI#Rg\$.(B IP o 8'c%1΁bsH!&Ӗ}fuAiE(V MKDk#[L@%s.P xHpj)e{5\q,$/d$IЙ!:Jmc:-(E8F6]dx2U&⺎ H*UPu]*40P`:@&S P=L>>2Eȩ A'KzNhLy&O2(ф3OIa)+!%V%R%[=#k%$_lVҹrK582;\UdS|a NfY p=;cDS"HT"li簔\*KLF8BVHt^Jf{y ofAԷ!NN1չM9a'3]ÆXFpN}IY':&r'=܉NRE8`8644446~嬷k>& ѩRl%0{\-ygcM)&mܝ ,:D2=f;$3#똘_Xr),70(6f~X.7O;Wۗ9G,OKa'l Y9%ʢJf8Xb+o,d"U^=T<\393HaUUPLօsl3^.:U))cr$Dfؗyq萈6*ƚm9) w;1+BZ%V\1V$B,\~J j%e S-P|H%!+!L]ۗz(Npz$U6)I N cNS:Sz/3 DW:]()5(] tJ BZ'ʘCuFS [~OBЅ@; Tr=ޮ6bRcOSt&\k6MX~؇=&u744444C9,[#0 hVzskju ܩ8n[C6q+-y8]= T=6WJ'g8#dnO LN;3ziũp7u)s[c߷=/,ؽ 7oN&EO^ܻ!^@:IC7B8<5E Q7͍/p{@^IHNIjQq{0 :9&6ݟI5ju9I=2U<~Ý3G.X}eAC2s=kYW5ZJh\5~8!*e<%iaṟ,h Kݛ2t(N'ȧ |,:W{Ӛ Q,=֨o2zHc0(DIj/LsgLLrnFƭ{e41\:nʸBy!KUqYcqng#+[r:fܦ)DζZe12aDmD!bu:2u󌡰Iz SMo| tBb$kfF)Bg\ND|`4#H*2l"78K|z.G5E#!*m7*8}8F/䠤γ4a[%o `lVWUR'T HFTNCE64kU#SrF[urbx1.،Mթmˆ;#7744444$IȹXrJY*o?[t;N,*ދi~q:W?r)7@ 8:oLcӒ-cVpA񦸠U }ӣmz~GCCCCC#Ovې8Ȓ=nov'rP_񼭖i;'9Rɇg7i(,)ěj !?Y1%K̪ k2HfOU99m=z;ِ9^qr/nAp w LJRCTe$ #7UCdYwEw7 8H80X _J5[ "iBXj?c]?(ۂ"qAV 6 j?ɟ-S"T]5`dCrDQ]`"82Bɤ؜lq 7._C`ytxzB"" m!lFwBd|;.lNiwaHΛS'RD B%8G J}{GXDf=j?gé'v0FٌSB:s:T 'MIrs.gǍ.pCJB`!W9:"9.A$ddΣf ]XtđU kt q<G:~YM"l3V^INcF5 'B0UJ˓n*,wnrhFddDTS7v{>}"qnrE٠_71';e4cL)lJZHSaSTa@nw0(f8(YYLIfJ%< (i@@S, T |U;6#Mb2\RP&ւe/̜1= >9cB|5RqhpɊƁ%)edFae±eb:JDeX[ͦM&q|cq]JHZ!9\j)NM䝧L^UR'6H{G-hʣ?g(.N =\Z(Z#쬋SWb5TL`". xox7p =%?g?x {h;ca#tBJ~RK~-T,1ʓu-jZVuS[gtjUv_P+)Da]z(Z+Fua1fA-U[2:GrXEIJE'UJZP ni,P3t;(|@.E0MD +~Ԉ1$]AuxB@z}UufVeP&wױ#AQ+tiu)&*y]se.,D/EX#,cCu9I) j864444?)1 #S[c2(P4+Rr›u:e͝i9H8{]0GGrG:ٹw]äVXN7\ѱXAʎd"MY2cHy#3>%lŷDo-l\!1O08NS(Zk kĘQj5I PL;Jʨ:>LUBu䜙o6*9rzVek2m_tL=TK l],rV#ӌԶn%c)<5{W.I'_3W`}d4ěc aI`8VҖ0Z";Wsjſb5#/'$)8IΤfƨ9c9tͯRM=LEЗțX1C|5I(nd'?'|x O84{Fqlhhhhhhhhhhhhxz?x˛턆'qlǏ|s۞ihhhhhhhhhhhhZcCCCCCCCCCCCCC# 86444444444444tRDlӣluѷr.bFJ wG=W/?ӞF{];zpk# yl'^ۃ\YX춃|65أmg5WؿpQ+zԾ4444446xb{QJ?ߪw;m"͙SR2zK8Nط\GOVعRa[ncԺ֎mCCCCCC<5]R<ۖ[y44444444C#8M+g??~OV mЈ-:k/ .8Qv5KCCCCCCC?4>p䥯R^^6 > ys#?#v4<1ya>Z?1la//;_ݶ>`}!/yBO]כ>?IoF>Þo_ʕWqG˿˼կ-oy zիڅ |ʧOۍ7zto?xkC|>U؏Ϳ?ɗ}S?ݿ-}rxJU_~[ .%/-忁;_#/T~ ^W?3~~Ot>_̛ӯo%>/' 9~w+964444ûc[19%>sC#?og3I\koo^OW>ݽ~on/-'}ڧ[Oߎ:wr W}{;d@oop_O$9>>ʯDEm}]\|3c>_%d^Ηs?Oq+ŋT_ooo{/x^U_//E~9?+^Rqd1_/1qDաNg/ {xwʯGج7|Wm^/$z!O_o}wۿy_lgV O \<;|^ ?}8|+o|{!_D1CE |_{|wOR ʯJ7׸tgPJy߇_x>yyz/r~-oCocwgNݖ~ylq__}?|| ^{}"ď菱X,xɋkׯ׼9?g?n۱#|Og>Xο1+}}.?~ş|'>x7yӟ/?Bu7v3 ~;[_1o<},Μ x"g~aPKf_k[WH)>pg=k|gҿwy|^>mhhhhhx:.ٺSw,k֭g$Z.ɓ˖` /7'Ug> Lѣ465ӧ):(ɓ&WU:~Çyхu}kh֫ 5}-ZSϻ8ŋx%Ν?O)=XSТ"zc v;nt\>8j /@EEK.|<)767 Dˆ73rpFso~Ø[F2I[+C;I'u>233/%?[ˍCkoG}Y`hQ2q1|]w6\VM`:>?K]soCWpYf2zH&_-vo&N|c1TV};KSB ,&3wQC=C^ ( ƸΜɚ7⩥Kػo?Λ7Τ5c4Y\lhdhvTczY)MM9kt}~jSs +VJ8yoϞô{ggWḄ@BrݗR^^Ύ;>cia@>ݳ==}'kn6wnk{0O?ewCʨcq޻7fPJni;q"iC 0 |e3U aۜ;ƍÆUU<\Ql[F^⽟of\hhpUTRXt9=AAHl6(l`'}k 6\NNg`zZhĩS;q)&IddN:E*NkLLT82 C떯OWU5)`2%XX_R[[˩eΝlڴgy&-lf˻[Ғ7zKfLg8X]w}*ZMhu[_n37RWWr_Ux5Бc˦|}lz8IsS 6R<~B8mߧr_--?r ~@|^MSc#<ݛKܹ PU6nX"<+ :~In&YMf[n0s8>u977l@/b4;VVf&ٶ𔸂| /,PS>l^=?rСlٸs4Mrvŧ,Æ cݬ\STTڵk3gNZؚRg߇aX!C<|μr敗aN6wv{Ƶ>cZoC(29na5/j#7afEذhFSYu4򼇒)Sym4662nlٰ@z`.%̼k罳yĿ7N?Vcp\ -*~LFGo#MRAÕ}E Yq/\?=Q#.|,[ t"-0{4~?xmᘡǏ8>U^@FuXؗ4jL?[jnj"RW{SePÓ3_-G7ܻPOy_$/Qn=ł((yU_}QCqɴ^kbyn*?imn"_T=r[1ݱ 8mq{UUζڝelZ Y,,BU<8~{?&ńix؊`ec6QU?u*xnvbYYVLf3:^MM AAN 33 Œ'QޒdC=#3ز(_wVFF&Y@ 2ḔgW|+pUU0ȶZټaWWǎw{ǴbpaqR :>EQ}ϦRkHxTn^kzx2{|h<}Geƾ MPV M;%^S8$8-%4|/>Xm6i/0Mq( ?~hӪ2OA$~ըx]WBE]"rf/H"  LƮСh4:!+Z|t,WNv,WB*w߉;DAѰ\hӮZٯPAH{mRe  Ѕ2SrAAAD08N-b27L)}p)F ө,!t]OZ7&M0(Q[I=RcGA;Hk}ᕱ= Oh3O}Tq9ڲm,7JmrbĎ B CQ&x inlo-ׯ͍ + P8` gϜNƅCSUϜbĎȍA-%~>J'z6l9v<-Mh&w>ɣ_mŖcdRV~=~9E5͍ RB/SЯ\A?*DdL`x;Jj麎i\jit+[ t]coԐbfy\w c61L(JhnCV}{ʱN0L5쁐:;" Wgؿ|+Ua^ˆGS05)/` V{B* vDAAYc FZU5<@>C躁#-Vf׿(nf kAoCQ9Vv nYT.eAm.@;" H Շ;ׁО#D:EP뮮7־zkxug}f5Pg׿>0믭aT Όى!}Eqo_9_}#U, gU~!zy{6`_د7>?ݻ۽t#GCxN +3Y//$"+HVJ9QBSι[yXRɥZSƚjjŖZnZo[Xv[} n:`8̳:s,gWYuض.'J餓O9ϸڍ7|˭~Ϭ}e{~?g-|e^t]5^Ap32f) PЦR2eN9ݢ1JL'Xg~eo5oWsJGR9o=Ɨ u!1!#wWف0Me_>b$GTN|og>/FmTc/8BI)mR촏qgslzWzoukaC9u"C8(=U@(wp=Z1jr"Uf';6j!F_׈i@Z]'5(6-P5x6o;~^sfzk(qMz%0'Y ?<)ģ.zF=Ә-o9}FT<+בWF < F=D>-R{e0Q;Qca$5+Lg܏峀knɴ $oo;lJH'V/E4Pe4DtyV)$!'#~v?ս)vq"tDң _{DD9Һdꩡ_C1A<ۨ*QP4XWyoYSs[Ag G;H0_D]ޖϡ܏}(@0S_/jcoD6CmR/w qhqlVA ћO{=CHC͈Lc4n2s|o-=(vɷ"vÅ@JYC vp: =}h5Hf37HDpF5o0[ ADŽ5 !f$z4iTTtǚt)~i9jFqGBAX.d<rɼ95!I( v< a'/t@XCA>O'0@'+%LSCJA''K#7ZF}$h2p3("\'ː!N]bA9pu&"(cBvz"D%%ԞMA\Vcf:& w4l!^ž(wP n7+d -˖U|nT 41xFC³J#66aC[}6f9֥Y^#~#Ntqd2`S "`-3_Qutr*ݺ*zBx` ~TJ{ZrĎ~*9ܧƩ il7xhӚo.NT,5-A}@Rd DG=u-3ၟ@E ,A a3\ّOzK*ѷq,}!)l>̃Z@m3ұAd8m' 8⩈ 1Cq8!| $Pk6M@lḠ ZЧ(_Qc,gE³4tGqMyj4V#=ɸ"s\bsh*EŞSU~Fyfn^V&o#N4d3aZRy-c9ɍ20S{n'ZBGhAFCaGa=4džeULaOB!.!R2F=U :po;ԋ]G2YgOH,l#99EMѕN1ӅN0BHXH-Cƭj+ Ii2d<"pGoB9 G@ ;$ #{Wj:x.y:>|*ElD,(w X'pjHpT jy#?Ea) FEվW2?eDamk48vt o M!pRj bO=3!O)|x"cdq/^"8Ӣ!?CWk=* nCg)q7M`@gRk 5C\ AK ^ #|&:jviPA7ҁF)ʹa;; FTEe& 2pHfNWaGu@Hg$zxJ4;/C@uW -׳#Q :Cب.EI?X:6 AKtj :Yĩ\AA1PjlBl<}/+a?jB3\ʳai͏yz_ _UnnA 8(9\ r;kik5ea0Z"%epXiPsX Hv8hڼXbxK Y7xDWC мqSmJ0A@hvL+"`vK A𧼸$ Dޖi 2e7~ wD޶OR|+^6LxW4Ze$`EOOWhhqԗ2t$o, dOM"BM ZA1U(m JC`m9{+WIˣi! B"%dR  82H9@ +I: 'x#8hfZA(VXrNDZ-ǭWEBPw`XF㣴5fYm .5a)&k=x8o-:c[?G/Gƴ :6r` }fZjz t<#F{CE A9| macH-o#:S*S2Ąh\*T YMQX,bŽڡms=e7GHL봀OެI^S 58n 5EQdҙZdH(hRSHF8`*5ũV&J]suYk^ Petژ9aJãOy4ck}IP'yڔ|b,V  e&ĕeH'Da\pp[x!͝AX@Ѵ"FwcM$۲` ERޅN"[¸v&5iJCgmF:EvgBu-I, L=ҝCWc:HgHa9t:=ݢ <<`BnQ`t܃4^Wk:U'h͓AV Ԋ(ehwN}<%xuuȞ#!;GvAbM)tS{@6E@QܴL<$0G.]VNxa߄Q41JJ0sy7_p"8Bpv<%5AAnzƛ%NrкcI_At l|kPRbmjE&txBK[:RiDgAZdd^ CW9j`] tEH)MM-qnvzVv9_zV/ooK'XyV+WK؎Ck}뼍E/h Jcy[_GT[z0BrO&' bBBZ"TAso[KѸlX/m,=5{q=$ %G"qv CQ(-@I14tIλ ([S=#T:4┷<: o<9j)mŻGCoo?#vׅ 8'ܟ/:,#^Lй>KׁDeZ*Z?]UF4 Qz@3t!Bѥz|La{G;>sXž-cM+HaK^֞t"DVYgdX3WwM!F5|{MFC#Cnh`t"HŢ $X#JhXg\h  .?͎,7%52Yu5&Rc}O5HkחX^.X ދi*y#^xww{oirƖLBbKGD pHYs.#.#x?vtIME  :#k IDATx}w\UsnmBKHT~*b;@ 6`C"{)IB BH633gιdwϓ|&;s{ޗ P \9 yo *Wv]PbB'#&F{˛N><4MCwPd4Daz}? Q4Q] sΝƦ}u|8Fq~/o~{W+>`$ymEtx# ].s9{8AöqwC<9hso4yʯGYGB*acSFΰl:ꯡ_"4e"gsyq6N>"P:j"UD)P{#*P!e#%Vԟ-PT˶ 'ӻF&8d"gG#p"T)'\߃W*a=6eI>:;aL˖VY{}yL6F0]R,%==زi#LfIhCEήW}Oe`a@GyېV|f^ J)f͜O8Ǎ-uϬDzOa㫟 !y7Y>p޹6/~˞x |ގ_m;yZGvX gvlܴ mۆSN| xԲ0j2yͯ\wMX_1w}e>{̜|rBmK˝A2Вt!&lzesj6 p6zxZ1ؤрH*!TwSAwO`7޶[_C/t0zh{WǗeOGǷW~(K ù\j7#` 2%Y-{=h==(\[R4y$˞˽\,L/p˯ϻo<4gS?<%gkyx@.8ʹ=TnqG?/_wx>}[o}جkti<\َ;p%g%}?;;vnX*ab۶m w7`L{;r46Xv-~hAhhhBמ0c4̜1 Y\L0{l)FഓO#&NijT=?|S0m,}bk6^{bTK \ӧM) eY[m7`i29"~;:/\{£K4MRuaڔX|K_ŤKkʣ1Tk~c3]߿=݈4X[?t)9 cǴ.5?( by5l^ċ/}RW,`۶m?nn9&;ק8 LĄ=KQ-}f΀a?X:r,+Ru-)' A/=Λ[wy\abQ7gՑݗC:@XOYdjok>{Ƭ30n\E7vL;Z6e 0}?)tcݽ׿;@ZfUuOwg^tN#ы?wu6֮}s쇋>| N:xs?Y3f|sby 77\9×أzϿ"NO^8oP yjskq⩧a3>A7}"Yr?vtv'tn|҉gއO}  /ڊO}w.>EZ5~˪.ZpHg-Zx bT=|wT]_O| {eZk_*_KGo|Nﱥޮ A^C0 ޳[RAX}7Gm1axw{q o!_o~۰fW*NrGt]Azis=v3Wk_W_Ĭ3a_z:ĝƏDŽƗ1w~0 ?|OaɸW'>9[҂Go~y\ŗu솛pG"0 u^xi#+FL4 W ;ф'# [nCkhh`ĉQw} 4 \>?q%<[or6r6>xхW}=O9c P}gwu7625s'+'sρ~"\=[% !P) !^ۺ? N>ĝJ_z%,y/z&p=< ?luK'1{L<< 8g15446 >ɏc[;ļsp{đ/._0@3q=b3Oc8tk`sѱ^xLr>G͙_ێ ~ݫqIL`ĉ5W!g#8 BQMPؿ ƴW`^u6L2]0/oz/ a}[r\9C?@D7f Q*Ŝ[6߃FW긷8w@ y q9+AcCN{)%ىcԓOFcC8>r%}|)-bǟX8lѡ8px-cI؀QdǷxZ4 ~}~'#_k-<qo-tq/'M.tOxq]p>O@%J,_3ޞݶ/wtu߸7m4xů_gںSo Dz%W^[~#3{O5aY0y466o; ^{وz f[e'u *3߉]x>t8ܳŝVz܌b˖ת \mmm;uR\|k[b̘1x[NѤQCCCCCCc Q,aq5@Anzt#6u2 #&0==xggp肃@TGr!gSPvgzjy8 ߸{e^|J̚9/oz_5;'jĨu/:cG'=X \w">[0eD?wӽ(pQG?FL??[mCgW`4YӣqK܌ΚqM/\sN,Zg!7?G~DD,iv)ǜxr\Va/`߾w?sg}v?_ o~?kɓ&[ocPE7b8`ُ~'=uVӎss&{:Μ1'"~pIJ喊Cn5 ƍÂCMO:⨪EA`Y?܎M^9cO G 0}\[o/n.8/ZT#'7?܎?r>}GOx[pqϮm;xe ;<;~?W_[i: RA|O7w=qr, a"! [*VEc;N? o{i0 P*UKmF.x[ZZF/ X OA0MĈlccr/ b1&N  $γ}? A-κȑS榔f\R*j9{g#E%FÒ"4@xϢݝHGwwL,-, ǥ[_ۺm'}544F2]qp(Yա:0&A>bc[ ihNh5 ѥ1g1zԨw>1m8 27Byv~"4Jh`#!6o|4aYv36J?y ܵڀAuk`Y6,{F =t,Ps] .!8N7!:_&MQ5)$3 @oO^}%A4>hl`l50y :"Vme466z2msА#U*rv=pCfS!a C44`/ܺ uÀm;hjn%aH5 õ֟W?؎W6 @wa5mFLӄkI]<<#k f 89ٳI IDATPJw) À~ RfkL -s9?"bG$tfj R Ǒ&s9{V2@uNf#_CCCCCCCCc`H=Ray:OFyF=tXꯡ12审"g`ymH> n $H-^z^8ve7έ>Qc` $#2[[0a0j.}& Y/z+wZkߺ)@ei߈~DKQ; ]C- Ep@~@ot(V{7Pem}wg~a*7j>w_Cxc]G#@` ru#5{C+H~G&‹regA1fXB w=mMl7wY6\E=dp~Nhs9b o0ȗ)Tdb{y#SVV3_D=ߑ/v|\N;;^t\l=6Gk+6/Me뵩&X@&xk40rѵ  hۣ[x΁ B m rBJ~Ԡ TY_!0ǺzZq'id]xW/ۭ U*\a3Ta!^L0[ ¼ !'Ta^2őq}I$$e}l BI=\1jEw$}|*! I 4E$!{RH)Qe^٭ 4ô=P qqZMHQmGLd 9>c35C?6~/BQNnDM]g#$4QK"[\ 9 ASH /xyP)ԯ YdE(j-q$B2iVzHAH"@0F~?;݌ARHQ玄$=JO;I$Q'oAMS&:0ͶH[\;e,ID('aauPr#B{8R^^'mF1O`JeO򻀰cj@&G|U+BG` OJE+eA [8kHH!yQYBU%c- yF đ;@PIP75"ԁJ~.Y/f^4HB"P\xWPV@ !w4K"R eV0wewSYUI"8f!YD:S$> )KhB[V'S$GSBԗ*ksZj]T׆P_IQTI(=>%rkY*15Q=bƄа"wTl @7"F+@"VW5`⨡.6R>`@}Ïb+;4Ya{BjdVFۍmWa:xsbҘ"@{;"?;@6u#%n9h'Ze?FZ,?2<s#PBLr#܇eyM!iĨEa?UNqQ{ אMb+AUU HEӈ]J"n-J6jύ"xRʪ:(zFHh iŖ7"9\v$W!-k3Qx)DGNJRnmœ+5q{H(!HD{AFVD# ;cT?"ǹ8Ax# Тh@aB񹤰E :8j agM( $JǠ "$> pX$v9eR6XR7L~ :8aO ,F:@EFx>-0uw9!Ľۑ P~(T.e^, ,dY ,6!JRȰvPm8e, sŔ=3-Pj"A$48nDRkIߩ\Tw$AiC%sJH*Rܪ!۰$¸jíۢr l=BȌ v7`V#wGrTQ:1y42UCC[5444q9p `O XVZ؉:|o1 CR&g!AH>40 bU?Ya|Cpуfi6ESIzR8 0

r͙'콏ku߄v>j ֦!*NX<'Ĉr[ |9T[n$:,2\AcjH %oaOFAL:2/ԃm/2TyT^ ;(sj檈'Ml' nN72ydQ$^TQVn.G% E:Tᨡ!;KsHj͓G4(("j UBhDG (GA"8KQ Zt } mxEN`GظA"ma/9 JT f*rr]EH I()##"9]G|( #/u/McHuAEHԱ?V2qnHV0fa5ĮaI44444q_|B(eS! tR`#Rra'xc Q8!@@8pUխ*E $>#2R&j#T sѕp0H$/ wUD- D#$EpsP27AsٗY,`koE˫ 2RLBR~e!KL[AuTT~<I;QNpv$u<$GX:K)K@2.q s#4Am:z sA`*T*v|nRjO1x_1]G[{\]r> H(ٹw :0KHS9}q h*-;-Y:jrBV~$!fa$䑕K;R ]nY=@H` p9!GPYB4_w#îҼWv)I'Ѝяƴ$*@=|eA'tyC52)Ji"aWlXbme$cY{SF*,}u\ ` Do)'BD[.avb ǤJ_ȓ+ ;kl.aevu= DNĐ\BQi@)ENeibBL$aB&LQֈ9C[ާhs*Qhb@EqXo :MRFEgOS8gDudm -Ej {MߏH%q*`gY㨬tQcpI[Gksp7!yRt#x &J1d^y5l ȥ*T 2>>ڦ- Y^|HY|PreAF Ѣ)d%P"S% O;w"Kx(t ĉ*ȚJV$.MHS 4QU nI9B<ĹJd d@Z D!I2Z BB'T!h4r2)B0Y0hd%vge4•oْ{>vK;'ź;ULyƝ+nDh'U^L )AX9>h] vnwpb_ڒIv`Q)dd| ΞƁ؎iL!fKH>FeYM:M$cߋ  Yΐ0 B{4I|4uS| S!kmZyl_@6N9 3^4LFFew\Z1T/n74\oqU~rj|ӗ.h0h%Q0,*G6MhHO[S'9]6S` )|!A6^ #&5t#طp:^@ɭ_cƐFmN8 *Zg*j]LPfJ,#|5 6iv_bqY4#ETY()L_ b5OA -ȁ\!/VP"63PՋrB<(FIH\a-w|.OvƸ@$/_<+_nW_PU;+9%J%gd #`,<$Ƿ-%O; ԞtǓN:;* &o!CQ/y)梊pIK!J"S@ueZA|Yv skHy·}AsE(aSnHbrs\FBsYkQC8yp/oxr%>k-r׵R%|BsK o幄WVW[1iRA%bER\wdbE.7^L#f^Y`ϋv®؅r>GEҤE=-2( B@vkV ( 4. 08.?h ëE;EmV℟Mē^QOM+˞۟3eiĨϼr{R]NIPJ T?uDEf(IF۟h pQY-E{ziʸ:6^DHStO՞e\ƥlLdWRO@UZT,bߋ ~OR.uH,'!DQN1ڳb.ʤt>F$=sStpk*i8Qh P+ZJ.kXA5xMCSTXjhhh )oM o;T>5kmCW~;pXįo 9|}}}֮SDH !ap )n!|4Z.2i!&["9@ݬm9 0 r (~>1Sd0YޒUF]$T;r(h5ZL)-b`,6 :Hhd+nB$+1_!LkXtYƿHI#hHJ+k]_6&9e)*ݭuYX6>ٹvv_Ѽ=N +ؘ(kl-i6.-QqBۍ>p)C{*mJđF{^m}}2bhllƘ&NB䌣a nDVevqHc_>`DD3Af'ެ*lσaEbh Kqr@)I'"Ş*E,f!Q<!U` iBjI@G鄄qn EDW*"EQCEq+,p+>Qʔ7PvZD,)/ [,.i,Mॼ»J& B J%kRޚn )d-IQ!NGHp2d~)GNk/aMISPQ$[mXq”&>g;!_':ċ\Raf>>g99#[uFSgv~~}42uXis֙4v̽Qn$C{hAHgͳ`kBp{+ฝވH@*P" N`$ 4|*+ e+$Aj%! a KT6@d3r5U\NtEdjlԞ$k#*$yU^W)|ntZ e LĭIOsiC IfHkT Yݟ3(OYK IF UԶu2P~;)rc)CU$,Z "3usҕQ>PF upnoj>CfQY"΄Po4- ƒpp}I: QE^*cGn"F"<tF1z蟌40BDdK(k,EIY &9&P/=*) R Fm4Fy4++ ,v>o]vv?C$dfYʋ䮰NBf\, "Bd|[T,Kt$c!!N~HckۣX3'wWV }7bK#ceCsf4+Ar>Ш;nZK/8;ʚH_&ƑFi>Y:7"a)"v)֢vƤqKyH/z+ZE t%I$*WtȄ(.ˑYu3b5IR*@Y Ri(k'ѥRu걶 bgemS QYT"H6z~Rv MP(H-6HG2wL[ 6䮽4o/)겗@W+ldʪJ-̽ͺ0wR*_#&b2zҕF~P&q 3\,@'`uVEWHzyVg 4~p7<)).|x=2K#v"zd >T8Aj* 77|. (nx "7Яl, /0ѯv%Y(-I%oi%)d=̻ 34PF|r$s&WY2 8D}YA4Y8H,b!j-RY >ԑ{Y9s,JHyB )휔^tIS$=YRO*^|@1LT[̪s< s#YdBQ+;ʟvBH 3{|uSƈ*+NsMFe)d GkBTL[Ma?"Ƣ!_~=2$#{$03RڭQG.$]-* CRfTT?ڍUCCcw"ܡʥ]d([xSƧLiI&yK 4$};DPx P[)! w+^].y7h%@l @XIIk'ѫ8q|ɧ>=gr*Hk[IAKƷ#4fGDފ*s*BRk͂ASHL( ߓXC-;'5" cv yp  0(ՓY\Kӽ2 (#;vS-GHgKȻlH%٬*+ 8O1VD M"2,H?HsK>"kIO2&Tֆ:##l-4a " $Y ZCS%ɺ!C[XU\|''CD!\R@u(ʘCm.koR@W-I(D!~H^ACY]}чoXQ\ ]MMoy#5kHTNg۠aك~JgBjz肃&m!S!!XRs]錾w}w(PG7h;hCE *ZGشy$ ^9'hwAoI: y9VzjY[gey.4Q>oIPGPY-I%!4/*zV@)@)M +%@ i$Iu&S/CJ ҏr/Y#ydw̕]6ǜ奌$huV?WYg]dQ\_չHSX7ErJP)H, +DA : *AqJǧZ Q C[#q9)0A=b!nY\ׅnG1qנUJvx' k?QF=Y[rvx!Sڨr=iEe*մoIgHlZ;D%,i)dESF(d6Пb9iJZ BDyYDd<:PZSRLmdP[42v8cyL :$Ĉ͢2ʖ12g܄ge @%޳[#R捪-0rE`VWm"((DɔFF=M## >7&3Za/-=0n{@aS萦 @CCCC!G~0fO;wDSNGJ8D7Lf&ƂE #W](OnQ,R}@]JnT!DionCUA)sUeS:hY$|p^)q׋Ag39dqUJ%R>0k1Q0A3mi3r^%_R5(;L#dCuMN&D9)""QJǓE~[+f>kƱ8U/`"iDy-6d+~pW PcUkjhhh⨱ ȍZV]RʹF ~dJ@)vM;"%E (GPq2CTGN &w-Xx T!بeZ&S&8u F B/9iji !dg8eV["|s:)*ln|iPvfi4`ZT UD"TEIY7N(XN/YTHS)d :y\'YMePHYI#FGISX;odHiyW9Cf`tXㅸe/5,3 x[ Mw9IuKbʙ„H@h˻g'K]΍wIJhJ]D2HdV_Du Dn; >#0^3τP_M?LHH?(IȜ,ɻ,XWޕ$SU^PߨBnAּաy3}Ym0,0&isv Y˒E*/r 0LEtۀeiZHOK E2IyEUvB}Dk/YT1"2RzPܟGF Y?]r%DP$ Qp>}1k#K 8݀P)qGi z#e \zH[m*y]bihhh⨱!P5}"H {MF"m'Rp(`VH T{x6%LsBDIBTH%Id#dU.ji,!"I)*!V?'|8:8h)I!fIѫ|UdyDWl4OIug}' F;&FDuʌ4w^3UT^0樂YM\HY2MT)H<d5ʯeX :!Ըf,«x3 Q: +"6"Zqv;rElg%idAP >xC؆_4QPcc Ъ2-K{jK+!*OLAS!) Xwֶ2,Z_4&)x gubB%'| S,dd j4\CTWfuT%pimoZ{״Ͻ?!R42eBF"F2!14`TYJMEP-IU*)ԕt @3t={=^kwֳwXswOծ}k3P G1@/j5:n~ xnjxPE#"FX?p37 p!2'1yVY? aC<$>ovP8qO@pOY g01qf "tbZ e6E nj5֥@HMQr eN;Vеb4kuCI<ڽԞ{Ռ$>QݡYѱ+S׎ҟ0>gLy{Z[B~[yڪOos~+e-Ў~E:`ig(;y7qiaar-WpLF7>:ٙKv˥L.&?ռ=]f,Y|I8H` ȡ{.pq23HO%+ \v{1Àϻw]As S̻)-ãгk1b-,.)H[┏XHXkg- 4Kok5:yy|ͻ4E@zcR ι 3k ȵM{ZK 1_4EJ0hL ;ρm<"U;DUw;&AAIS?(# _b.=g^b s%PkI/vܲ{oqY!I|ebob+(Nx^a$: !HxFsxcz-JD~:kM.#:O ocT^B}֞{Ӟ 0 P[r :߷K-J;yYyZl#kthb11رo.Rc^Oky8Zhg#-ρ+u9L/rk~_dɒ%!^/єm$ ҸݶZJj8Բ94\6˙9{O3 Y&ecpc]·٨n&%AiTrQR[[%)\HB̬94k!ye'=g!&Ю}Jp@=Fls؈z\ t_߱ZP>)OňXiB:`tXIaco^j3 8#@Qy84TW۠Q}u^'ẋ.bD,snWn]pgAwX[9qs;óx^@d>=f/ί9;fɒ%7 w-٨QG`3k.=`M\]`r8g)P=3hd2YKle[PV2)IOBmBJ#1(r7(5RY2J[4^ # k( SbO1cn8wM[vvL@4K )תy֏Go$?jXvBSjuƀE<$RL]x]iǤw:v 0NJCgd+օR;^ǀ_`a5ϥ:,hrs^R!hlΡք̒%K AcOۏ7{BW}a8`:Yd_8\Au|z)pQr/gqN2ބX;PjQ b9ž_"\Γ CN7N*w~5ڀYc!<2sqh[&A=4Hr \_x>a%d1 8Y{UwVB#-XR:Zb.Igu[[z)6{lRAY影S3h IDATPpcqϴqqY;$)qǴr3z+dmW^AdegU fbaaDYuf,YdxD  SUS Z|O;t90.TuX?7baP\7d^/&[>S+igoZX`eM!FyyRP4h<$+UPP9My8%=!a X)u6]d7GfȘj$ǫA%6кcU+ 􍜿6xڷ±Rh&Ԟw$Gu)fy _(pj$ aHl 'n;BWѯXη4ڹVU,]ԯ/DMO_'3I `,[b~2p̒%KO6"H*vFK0W-gocݟ.^E XiF1xsf=J^GSt4f=DF;?^HZd蔼82 y^kRS KFKn!?k `Բ5⹡ltnSƺ  F^'y])~`FgbXקQS#w_MАAkkfDL )RI;Ux.!mva΁u`X E`7UdɒV4> byW *]Rg%fJxϠq|bFV #SSfR9L yak&Zpm=1RIk4SDϛUbݑr rɄB!)gPP1Q .`{ |apS *hoXM\i$bUƏ!0/ {ŒvO:uVwڃ'Ce =_s%<`-k|:fơH֞|6߸=(Ζ=+3l6f-K,8Ħ>.01xIY=}O\v{-9`m;Vt7rWKY%}wHip =W1iT8(z =2vN(gLP@r9eo O}!ucF r0:pcQU`=s\6R>MVlj.vJ_p!욞FO$GY{z&0r5\UoyuUC`7\_R/=lr{Ǥ@LW5bõ` dɒ%40YFxrR,hp ͵ss3`c| 4d^ 쬮Gq_)Q8GEwSRPi,eL&~h B/<]|!!b,o~@gԊrRoXO 1b0(|McʞY_yc79dR=@jYe+P"GQ0(mx_, hr0t&-o\_ .Eh.+:}`%PxYdɒczaSz59x  h΁hZ@9%OϠ0=OiYx y R)SjAj(کl!tP pu/4c"b* a)8N=l?xH{(מԚ[YwCkjXz}kCX/XصƽH |ZYV 䎏jP 1.FI7.R* fW1{w_{F*1K,8krAγR i|aH-[hQ\rRc] h\с=YJ!LFGQ=6٧9E#ƞE ^֣8Hk`*S~')% O$7qUzRIWj&=sϭyc6fNSRMz>m"!ݣu}/ 3kiDWrO&:Rkb9 ^E?_?`/"͐TLG;\w}vY4twa; 1S+yF ,¹IIh!M&@,bCu. ~-y GYbᢱF6V?ЧKЄG^dϓB.C 94ۼ1 yv@S;߬ 1_m:K,8&x2M&Tα8.qPXKE/igl`=G=p=VycsVFr^&#e"l'8Nl#߽䦥ZOeC55ia.jCCsJȔ\IY$T<2Ҝ0 mcf˜alBB)!\}cq=#]E\x)S6f 3Fu;[axGi$Em>fɒ%{+MӠ: R8BOY,v\6~p=[ ' A- lfGz:GEŚZi>7cC " ONl{jIV@f]cu8{2LH۬'È\{V8ȗ |ACm{癵[X7!Њ}TGTLu J'@ S;2) Biw_}p(s8E6Mc/ǽ.޹v dA(c`m@`^{)˒r~g)UGAVY&̥4KX;s6X{F{!Ã/D=Iz0֌(rKC)Vz"zK(G4y-|XkPSk/uH_ `l` p.K,YpF+7&_淨q{4VU:{A.+%{fqj4͞Ⱦz!yUtvJ#t+n@gZMĞݩ%vaýiw&߭r\uOX((6|a=0- z~_@_4'SMoISr}1q/c}cmBZbhd AԩSU>\R-sqM;f>OZ<_ gɒ%KܪzIM_ CE꼍  09:80"Ss`TL쉼a#Ѝ,fsVbsЦ^HDlUjS:}Hؐ2>p8#>opSETYu_+לdJL VScy|zhoq"\{UlPo.p Nµo@ŐyFy_-p8lBϲ<&Mu:f*}'GvjZtRYg{OՁ$ ݲ]!]Ӎ0^'ρf9%K Oz[w3;玻|w}>xt"AGbj+ +p0sFjM?u3@boW SsyxD5!8)yUhJ<#i"c:61# mkm:&;xni5݄8XOhJ jg KWD,N1"mk=@UJDG#8rmW)[a")WJy/+"K,Y^ ^W ج 0Lf0s.#B`r9#(Ýjc%Tw!i`M֞(UvJSOqyr|m.wT0o)J("}d~U0 FPuQovw}7gP5/yOe7𳗆<> |FU_>k:[G1Ҿ)C( #h D>i}ׅ|Kx\R 04Ȓ%KSNrS}qx>/GꭝZ+b h}Bۈ91 "T9`?KO |O-0 |G~Z(%.YGB=n5%MP|yB>jK/LP~gzNb#.Fb+/5ֹKo|gb,?E#^>FzX{aClo)uS8gƻ2mzk-mYGVpoıdԑu8cű}Wdvݠþ޳dɒ%Q^_>k/?W+kw UHp[ω+O1X`z`vݱgsnpuU[S1Yx7W8OBRH+z̊!6+mJ"(}N EVo(C-/" +JhL SrO50.!2jm5&lM)[3vߵ?;XGWm4CBʷ'Niz\8:Zh[B0o/f}`zE&ϒ%K[sc.vނW_d~G~tTzAWfxHݤMYilpVK`r\4xZc]ߏ9TY8e,]l=5܆`GS|90 V9?th@a$4ߑ6aXp.jʏ~N/x{ OBrF`*IJCK˜\J 0:`MG@;-E(AQJRrYa]Sw Vc@Ð"bB x+3z`hr57}yqJ!e(cDS]?y }/ṄsqH`14\W0g-c(L3f؈ҮAHS@idg{q 6}5T8q1 Yv|^3@jnZ̹U0j Džkq\C+k1?X{0vjoX֍Kr'ZS[Z0`Glu}B2%K4y)9;?W??sW3)uqX;cFr+ F_G4rk91^GxaL} ӳAuy#pp*r%3*-_ 2ыz Q//-fDPnMcVYf6g]n<$kIb!sH}yIZ8E?76t]amߖD8)vo,5\bUo༕-C=Zϵ \@y &%KdOx{lu˒|p!|o-/_ǜ$of Y>z3)#)j)ap;}!H*!| ;O>!#.73JJڢV vynPA/ro<>uC1~6l\uqf0^)vyBwNn<{AL%KMr'o I}_u?-S/Tgy6Ƙ]`>ͩ\ncɟ*pv~9zjaW-[{28:Ł-sG&bl`NW7*}݆hPZHo6]LD>ի{6a"vJ 0 IDATt;BCJh;ľ As籚&2}c#־Ke75Q3Fu0>dtO2ϒ x$}>5cYd(wq~4d0qhca1@a!3jqX:ARճ$G;{`,v?o<=%8&MgϱXa<{Mηs&;`[m)ѱO K)Dy&nrL)ʗ[5AY_k4[ 7mK-OɔGnR?gmWY.ekAr OhYU3XoYW{o;] =`CA|Z3;cw̠] `swXׅͼ,Yd*vd,.8֋ɱ|MWp̙š|byg b¤ 7>/J&YIzMPJb`D+O1 YoSb5)mi[`(X&CJ$MPCv))wg̹>͡zCֱyEn8nJ>5{g3r^y\XD#SK8=溝طkdR,Ydks0 L5nw4px*.R.khr<\żN0ƅ.jRQl~~0r6-g]w|^Er-(0 <Bk٩$<[Q|7|>f:~O߅´S `(0Emc_M S.C Q-6iTDZs$)#1fe$T{g,Y^dznE\ JWҮ| ;pUa_gcU9 m%s|TcȖsimli pT y!7~ʀQj]#^*}%xicy ?bCwuDF(!6҆F  2S:+=cj}b= PpO-R̈́7J6p#ُkXg{V2IƙI~T{^SmZZ7)GTx,YdfJYIQ'b3 h\@c5^@m,s牔|u\Wб21!آ t kx[9DM%$*>%6>?h6=6&~6J_'elmAja2T:T.Ğ0N% Vy>x~69_]{77蓐x!ޜ`=OqI6`iÙ{kށ]3xj rdɒ㽖\6%j=+ ǩ^r\A,nK(ҭ i)ZU;Dzm㔖T0_hŹvlMA J! κ\& WS9S\S6kj0ТN1ly{DE12o%]c8I!26-6ZoRȤn^F΢][qqjIqjG=#u.{}N0~ICP0*3*_!J1}gc,Y2p|cc u+M(Fa4:inye7qM!z{ESʕS DQcofcliG{baMt6hK.Uooxw rwK+ϼ5M$kPB#uqQ)Ez^(85ׁ:<&qXZ5K,8fy-^a33blB\.=0l"b-\/Sx2A6_X&;#pln嬗L cK<+0uЋk_Py\Mǹតbn岘"S˧ ^(s\F7m,1ګuS0cS~@KO=_CPQӸw C@^; T\GH|DFExbޜjs纤u@)o]BMXjF^;* l+1^eC\,Y2prGҔ@yp N<`*`XPf顇@q lS,?_v Xb;q&4^5pX@#phiS&@uM" F8pmmRiSPS bJ-5ʑZ{jGict2hbJpJɸ1EZ1/" U@.0^ P| tc9Z8l?~{xV59.ОsqΥ tϸM5ԑ}A7Knvµu(ia3dh|! TF\UiFTQK{2W%^fzY% @QApR46S*q΁s+Fc,Ydxvx 4U||pE vZ~ 4ڙUusAYQMX36XjK+E֞ΣcPxv‘J^HSRcB>sha|`By8}(~{)ڷSxu3譠[YO N8C|}b\ؖ#x9Q>@?na;Kt\f nzvL?i<)HRp^iI0qjy{o}sW8xѺX XIkm% 91K,8o1VQv&a9@X'+-uY'E*Yz< )A xJ_ʨn{GjE4 ة=8'\ϧhH+ *C1rgɠy|ʮM& Zj4FI UGYz)yxGO+w =ߔ0j:/Cc60ݭ!)FP}E [mIx@mDSJlcpsߓNZw\|%k%KR&xd<lu`C}4c/%lubq(Sdq5ʆ,EZ~j= &Td>`Dpfo'懲E S Kp`#/߸0ebiE6A\w˹F">a쇞.3FVTh~oƳc-N=_Nc#Cn5R+u6ѤBk!) `+=|!YdlozY zCZ-Ov̲axb4: haL("iSĦkS,$ߠt<5[n:QɂBb {A(v V]`&{m@)~ߌ==S(^)_N>Lϛp+OZ'.L~oZo͆?5 Z_Ȑۨ=3>ƺ'|ΨT#Zm1N=ghx?&2'X8ǚ{y;5,YdxoL8GejǠjjw O\Ʃwet62S?O%: Jshs6T15wDc )6 ( ܸ3Fd;Z<+՞6 2 fȰBmSW62k̀3>) KZtβE:hV_e& do1D%56T'XޯvM` s=d5X3k"a8Io}0fYd!Z?F2f&GmIygZa; ƸÚY.@,u {5̻RcB&„^\WSR;]j:;E&<>ʎdN= ;c[;x bkNgZ_J?Jɐߊjװ_1^rSƟEU55lVw*25VX@pu 3b84AܱQdmM_ k^/ggqk5˹3@UѹJ:f뎮"K,2M?{/~||w.E<1Ǘ) m Wpb_mP3+df[5ӡ]){ccoh}@Ͳy (K paV+Ia+)m6b&V(UR8&qhx8 M]^J {*K4݉Pivy>Ã<AR*>l4 }k#IqjxƐG^*knJߍ0)hI:9)-6&%`_n UV 8wuMbfA6rGF1dY#콿}{2pOrmFTƔ NOΘ59#~ˊZvi4.u } +wpF2,xq (g8x55NQRD6lD@dQ= {isLM@iN(iyܢpV:`$1j]5EX qAT iaFdg0#Cm|xcPZ$>ҦaoI99z؃mx =NDZoYn˕R׍,Y|ɯo(fVVRqZEû*pxKnI35ݹ8$m :+>.Q# bbL1_d*QPR]5P!)"ʺb2 88"a 3.C {2NL8.H/9;〕+YlW@6pxcpG8 )Ub|^x[ 7>yMUs#rǀKr$8"EnG -'wXwXe <)]@Be/[P`v;xr#tV(ZB1s_-&\qhPSVjO Xq5+V&Zڋ qDI2Xm2܌0dNh13>pЎ>POkX8Jp.ƀk%MG$+~60cD:Z :q}R/9g 4g^rH2sj3] Ȟki>3{JdɒN2p|iDk4Hc b)`*:skaM 8 -.lVQЭP C1' !D)#)lxv\S7os-l}p{tt߭YxY=ւZ 3c~%=8Ρ4_jA£iVk7S@L2bOQKGZ ֖F=w`]QOuqN>S)CAkOqnmRjCJB5` }oN\Niڋ!C sJslXG[b^IA@fɒ%75,,Ң@Q4*^ԫA6=Lx\@4CߐGQkSkJMXS:# L~8/V0t~'K;Bx@[%Uw[m4t_ҳgCXgIm<,im!b@_q {Gns#c_ٌKZ/ډfYNq&UDghhufqޮ !j:r9Om/>F`8S@N }K nfn >}v㺜=1X ?GNXkfc,Y2p@19) ls <]!ʮ7u>d9kbLώqNvΣ02 D,1%x j:xR@vӋs,s"ѵ_ъwK4' X(6{8`5 M-q` ,3!S!ƣdu1Q*yE9BAm$;R Hg d*Ł!ٍ7YNJRbGNc-0 m' ))Jr̃u[ vTn/ml\nR }=&?DsAn eQLYdɒ˕Q50cCKy aշ .O8B$t@a] (2-$[@V2iHks{ .{s,! H`/uGJ6rg 86K\*:$Mi8NSBa 4I/z(2Kels@TMԟ̲S?9x >j ;u>gj]*ݡbw-7B+={qX|c`i 2ylCT;>vO ]=֥]q)-;]B4J#{sh'CPD}1V%P0}89)oq֎JhQ 6xpkDA5[[38J h, n@Pln}rmD~ykA0 Y!UC4zQ(T) 5<&,YdŊAa Sa:pS3EѡBE 3\.&WrfV΁@sFIr@ Nٖu Iu4z6A::L1Tbب"i[kEJ_+ g+0NYD d`C=9DZ4(Kq0+A% 5{611$@ {,B\rN 䚏<9qT5r`<{,(>@m1*g27ͷl IDATǖ"i p>e^n蘉ϰK@#$<"jbkHzK<5ahݮ> (仍kpT3/ce<[x~/֛J\7~[#${<"y~nw㡤۬eɒ%{)JXf_ 3p|Mafxu`{|:ã|aQm8LB۠{epPA(rԥ(Q{ftR{6|Q| 앩pu&RPd[2t:H~) SdŚ ǁ8`ff,e@EKcTz(OpGVpO0J6O(ÆQvITgW} #e7JR쨦{P֝0h WƖmo^6S,eJj1OΩQw_h+zG7O,Ydƕ#*mѰYnTWP@?v<(z%) XBRmE֘ VXao,e4t"'L{U9 ` <* Rr-I=J\1:ft;Fu6j YQ55UE.97TXsRIq(+챮g=\ rk5+,{#mE{:%I-ź(*&a-l^s m@ps8{Ո<%r9,Yd*m'~g~xއ_E_uc􏠪*~=;ͲWMC|,f  Zfo G EǀThcN͖/B wyLޡ}gx0^]aU0$Y @IϳƤae.kb#'bj~~rAc%L΃+R3N :SogXH`8  8Ss4Ln_qh{Yg:?чLϘw߰h9/$T1z |klX끻Q|lc<ʽݭ=29N,Y2pLO|~8p]/= %LaWcq o΁yh/jI9 8eMJmڣ,v/zKCLq~<7vI)͔̐j 90^W00A/`t^#(?VW9ց&KnltO X\60'8Q)knowVllq tFk$֑ Pa]C2dN^(L}K8O"ή s7 xZ ]f3&Hj#\yUKM P{N}6jU~g8fɒ~Gk-ͯ:c?{|YoV| ӄG;_y[+ xt 3uf& W r}g]lRk8B$Xm0KY#,6Juhm Xtā=7x(8xr$`4`䎽:/ݽzٟ|} 4xb8GkPT\uL]O,#+@{TOs R>4.4sQ4)=$mk1,,j=g,2\O2;.Uk Atϴq??c),E\#cO+=`M 3W̓ڈ~e1r)dI\a!8J Ȍ&I1^0rSh5`ƌF\2ɐdC3rg嵎cM(s`xuGkߤl^.x<=1K,8]׾Ga_>sy3mߊn~W}w91J iB R4TTh:^90\ց3H:E=jqltY#6H5h\(' U֣׉ vqJ30; '{#rq,*"]VЋKrY8ؒ_Cᒓl|2CavfWA`n*9qqhɲ F$68Ȼ~ƺL "adHǬ: _x d2^::Lgfv\/Ùn_{òᘙU7ʚq:e5dJ@)9F>`ijpU#bMT%2f DiצК-_ @J.rl?ִQq,YdyS8SO~Sg_C 2Zw)6 VUG\쀩s`c׺\6* t δT "ٻ28)6L@bpm)DMR,2qVqyau X@b(N{Wl0Ph 2HH埁PhB}J$wG0N ,sdCDu1l9`sE %纐ZϥI(Z)WY_kfؑJiHأ+<s, lz6`>/Cz4ĻƐ2ݧ:y&a~KRm¹ Q]H,-Ègy@&ɒ%Ir?"~w/h4z';~ K&?^9N,0YTS9hghU.0T “`bmu䚀l.iʥ#:a:e o8rS|8-}@ZzKe=>=aM 4p% \Km{F/b)^bj9bҾmV>Y@+# 8wgL.}mً+=y#?eMk t}1{+++T:LaȫT^qXZj^T@u chz}bŽ5yAM@I=r~HߞBm^PX%Kq?G/ށw0ggb_N|[O=;gI~nKNM!Q~b֜Y/^m;wVpN({`WlD)OƦ( D^w]JdфׅqeRw&׈MИc%xC.W;*^`y֞= JJb/e1ذH+/A%:2X{0F\[-/>lܩixV  XJO>4Ȇ RאyǴY'4پ2<;a={aI9G gV,Y Z%mz8:y~ SzoCSxߏ?'ߎm7~/௿0˾`ńf%`.Vn)1-qu=p䘔wt8HpH`8$(!› ^Q&W$^?vR;1Kf'@ 3\\.#{F <8Zqu w'Q Ԯ}?֐Ɯ!5En ǡZ~Ӗ>׀C"\Mn-s^و3h޹~1=xڂs6AkAH74 s#Σc2/wJLZد Q~l=ۺ߆#4JFw֤T9T5K,/8_??_յ__|5KyiW?ώݿK_z[aZ ~x{vG8c3&C!F{6)IS%Sc\D']0Yz dx` ҇3hqVY㸦U[nˊڦ$a͋W DkĚХgf{u:p+ QΑ&Kx3CM)_wwM:U>> y|W?(%_&|[ߊoC߀yl&kY րj{^aMщlZ1kSj(3)`nSH{ I,Um9/a:o"`\HRf!u>ig@r}ì&rF Y䞁PE&ἱ£kT(I8lx$0fehzC%)-XY<2s \w LJxJ֒ 셞K]{ q:#$vKLBqP[F&+aȵŸWnNITw @ʟ u_4G, dɒe7u?-ߌ?-®YZ>o{40]u]SsCV%ѩ+`  k:ac#[:[̴MR+m 0ح[GI5הUBIIAeo:]X| z ^ PD[IL֑"Úl ܸ*2Лq#`,.02xdP@s'9<a'ۧÚe>6pzO.Qѽ4߹_ɰ5+#9Rc`sy;E@rH{טɐsa4 Ê[aH.|kﲖibTàc ;\sXl>,e]lȒ%KTE/Wb٫8}lF k[@#x;98g"ešASZ8⍌7o55KNf/ljuvKEI:Z%+\_,C#H9. HYdR~ap ZBɘ>PcV^Va'_"p6,7.mpEn#d$@QA`!zl,i<xugZIsD[DrĒƥN-@jGVH#2pPXwbZ.ݽԯ UJB#.FO sGQRo.RghIku%H1 E:#aZ~:%2ִDp9({w-`M&s;sTIYdɒ=f& - 75Oa';[-f}]/x}7o{4gcYb Hf蔷-|٭G6P \W'*85/UPk#'IEEzZRő+:b.!ONvJ`VһBd 5g}e1r;4X3r5?`mi^źZ(+:uTZbᨮ[Z9R{a)#=:5ƚ[#_1ky9.'ň"\N܇bX&i/i#%uÖc/K,8 :eEUR_4!ȡx8vvMGN&m`m n^CK) VZ+oŲz8p+DIp@QZG7b<8&418xPV\ ko|g"gu!N*9_N  R*1sŹ*8\U,h 4YV䷃-A7$m,>t60cr+␁Brdɒ%KXn`f%1K,y ecsN\y4*p\n%dm¦{Ic諅k4{SEP.88TIvOx@zL6R8aB Pz8d aP:^=8\H8FXplsbki5W٣X/(ip3j$;7ˏQd'K' qX+k )hؖ<2XS23-{}d:5fYBoN\sF.Di$S <㭇*)dɒ}(k.fY5E@omi ׈u}CHq(+o>F(h |e/bm&h5ꀢV[Dd&)z[P+0p{׭:o ;w8b\:N{z.΋d6U5wv Q'Ś}<#}+;_I A3,2m#7CnC 0J/V(d7n=o Kzu'IsOzw_- agkY3cYVOggJ-?L➱۸ \kW+,Yd%IӲ-$:?@u O֞ 0: N_ٸYCFlHY޻۲]aڏsN@ $@`cr& N 6!L@g{{TZ{ի{x|#'a݃Et{GYi( FI1^|aIpb& (2A.a% RR kF=5=OEaPvN#sF"^ҽѸǪY9X r?:$j:|y UE(jR}>rϵqsds/[%}}d}UbYwNX_kjfʈ+6OGPت>.؟*ĈtO j̃I5w=;-VYe8.#;\r;(x/K} L (ݓ7UYʌfV&nO>סso\Fq2Ep%eD<K !K2X5*N)@gt}Ě ir%aD)a)D]ǗU%SP<;jZ|cv X!S)q_j\)@b03" 'xC@=5, K 8R}D]O\CR 1g~>F(3|di\.qS/ QE\UWyN5W*"z@r@ʲ{ȶ@r |; { ɫTnhfz, Pʕ^A'"NQ9&`E 4WkJjr!,7̜{\`:5fuQSBI [E+Vr]3.zT,f@&Va ̞LVmO;ފϹ>ϔẍ DF ѳ|0Í[j~P>YS = 3)cVv%OZYNr]a+>ڒ6%$,0QE@Mn}&~cK[-'Gs=R=9zX{ S 2W~`u7fq$G1z8VYe+q|} <; Γ@{mvq:T# 7dkX%Y) ȽS_.ݸ2LΑ|[PjCP }A}y!ds)!`*e.%@Q)ƹkg=5~[4\:m^MS!jwR@2<8,Ę%UdVMr pTm2#.TO=Lhm%^9l7)#fEX9*}\2t0*{q|1&U1Vqޕp0T7 { zFR*Q"U,6t}jcZyW p3O|`Jozm`*'8'-%p:L+3"橩aJfRgӦ{5p u v1HhI|ByG1 e8r9VDXeb`}uj"Kքbj\g<W.\gbʾYxoL1Εְrb)}ȩ bd8>LI{J}8W~C٨FBECVxYd=ʘt)071+?C9ٛZSpƧXO/c720ad ƘzUVYeO^?@Ip TƴWk[wvN՘ +hH _%Ęp& ESs|:%[>t8j^dɠK ~!md|EU(9JiNj,$AHZӨ Tc# cQ25앋FU+ΌՌ0fNe_㬽i:SF{-UVYea}c;a(BrQ(wJaJ Q-hk*ZؒP:\Kn H34> 42!YȌcOvh2QwsM U v..`lTe󑸞& f:-C-ֹ CrGC)6]'C(AHѪ\T\ȩM=n2ߚ F} izϸ>#{mu=†YU i4ɹ7Զ  (r)M3"q8jjG,|%QMƄsF^G-uHڎ oe3'QF?7-ڮ0 {*Kp{^cԽc(`^eUV'J[FrR)8[9Oa 562Ys3żg@+te,(IH@턲X6\cs0DYCW^t3nI}gIv3! lƙK &pZkk_a]ZaOG\s<ڏu*{UVYeW\P j1ls=P|T"f$ zKaJ3c\J`Ҟ0|J ` =<&6ZHHly a~3@8kG :91q\B刮y_ dE\Lf,&Bu#u0 sYJ~Z9äS{=!s*!Um o|#^Y_7<x{ߋOďǗ}~ף1zOao1hy I]X}q4NJ,+Bu67m=?|VMKe ei|'QVuЌ8|J 7M3r *mi >cx~i:b> p AX[S@i1&ѡz[R/yN =_/144Gvb+5X6Ƹg3;[5bw/" }qbQEGi_Σ¦>]Z6 :Utl3P<4rXrUVYe=x˿[uW~ǫ4v]}?˲e_?}U/:uif1§}>>!z Ϸ}c+@Pc!ʪeY@Mdp{lK߆ᱹ8c3+صkιrzLk졔TscG՜@xluP񰱧P0h0^FAkjbO,t!%ju{Jبv #&{01>H;CXCSnfD6O%x{FЫe~6(m(+RDVnB>zLۺ=_ɪqh1c)@l{N1#Q`~COwΣhyxqmҜ/18/%]wqjScx,s#dce0Tk=Bd|1ѹ1xl+`<[ ݅`2x`3qRve)>w(qKʤ"YYr.LҒæ#Co %[i"f;r]ڣ<<zj9SpK]B'){ݨ~>ͩ/K5]*YZ35\D%k o5F?6sZ4.4v3\?b /L!R[u<6(Zs )oY Ğ1IKjV3U5X+*Lȍz$ٟm~)[^OVt_̗3\^7 m@V ڳ ) ==5F7\)cV H`Nu s<S[1[ i;Z 2HW8P$KT  ׋垕t/;O9̟/9,TqhS`]6V^,xqfл, 6eogq4:[C. k!5KÒAV@_*h-Ěf{+GfZvZɎߪVby=y1"Lg!I_zӸ*\AnO3Y'XSM\@z4 \8]=SH%λaŘk-թ5 wc`L]NN]k{@9c6a B򥴇 #A~Ɯ# fr)R!,3Ǫ3\#dENSU]9gwVYeUʍy%^+E4x7`[}KՕm(%PՀ *5@+XzEFRz$M)RE!*`[^ *O+²w3 Uޕ@F>DUbv-b \:$W=v%&#>iu[gf;f&=0̦c{#AX?Yvk`yL/02TQ1C5rr]RL,Y9/sa TFu".Ҍ Lܩ/<=]a&2~LǞ+KUVYe82h׼ /[[}ի$ɳ{?&\2iY ubi܇p{V B BIJ?+֘0p^ ۱aZZ0o^8`\g0U@"!V4a+?~Bz ב$:cNR ,DcF- }wA^YEPXޏ 博+'A-8̘b\G:/j^ a9;KT #`t#@+ \eUq 4g__}`s)nw0$,RZEM4%H3r1퇩8M}6[ryos%8RoVc,sDr:N C }K=K#`LU;؋S!lJKUk&P, #ɳ%`*#ey!d|q{rz8D#eo eY#M< Ր$lUZ" ym1.k0AsԼaHqxc4UrAsmE p _b^oaޮr2V}W* Jo|e6F4}ߏs ~ '`R3 :-`.rkiŅjt.܆$yʧa]' QܷVcV;XI\UJgOc(YC90) +̹X 6CCeU :l'!1 Lk7VZscs:[V,L0@R!$fqgX j:!9'h$3`S8e:Ép)aqbZ4c8d`bv cS1&eb0s["gAs*;&Lܬg >N24 \`y*8oG_6,?+^w}.~Esy|sx^cQM\=TO(}( A)1*M=:9qNQ8Db{N1 scR al.N(%E_AXOjT. "`VXO1΃% r:GΚ+ԏC;c7%0LQĔL0 B$E)P&{OGF vR\=4ꋪ zhvy ܩ:zNV~ f=1VU;eG,#` 4[À1G#F 0xo׊[&>9:`}øUVY6ǷFiOm_߅//_?io;yOd>IMThP'8Ul@6)[uPQmtn\sNε@ v0܏q!aOEO(\Bs{\NB t\Q@B.ke4Ѕks5O R aI#R gѨg+ at!MUjl]dY}Dn e;5PqKSc; #$"*"c ,Z((_Bg cZR[ c<Y/0fu76xE^Y-b4v*<㷿5wNO]y@Y#K*|^4:_.3qQEaFmy >RkG]1Cex1.-rjݞ#a϶1!L7u9_=UY&ƴ1baSUVYeG _o·5x+V~џxߎsW&%/~QhUE 6RՌ 8Ca",B*5e: ̡zBNWI Q玁ۜZ*{\<˜UejvMkNZ8<<^9~1\s7גMJrX'Y@ҷ/;.v-pw;r<ERYy pˀ.ctǷm7v?O_ q{ OJ} xL!^ւ=֚ld(cB'Jj:2b=ڠ92+ʫg}(`|T*OGO[_/[|1g\6(Zwѕ@^*9Ms[,hβ=RjÝ$߈yEլ@Wd]=\s-)$GAyT&z!~OtI^䳂Z ’ )°U J".{Zy4V9Ŭ "`m|5uzbVJ\*< _sq ɶWo4pWxuSo`|9/nf3]H5JcXnIYm`b~r)8 ъnێ,U7 :; kc ԻyV,eK::lM%6Jj98%!7e(}_՝7Ыw@wBX1Y4*a7P/ {$IW"o6T?s52up־pPrO1_U=Ba /1RV(+64bKJrԦJϹkoݭ4bC]w"urF{yUVYJhކt:RȆm)$KobW~% Q=N5+sܮKaL@KtWv^"t4.9\]0@iݑ{Z߅YsaIs=c72f֘hp @`ȹym6  <5TM?ӵS8\)<|.ppËHr>{eҍw]ݩz&11H(1? 5kUG~Wk#F5o:yP{ Qᨇq`6y]H5kleM-g%`:UVYe8>"i9PЕք 9w :V[&$&KU+k]g͕"_Erb#.Mwr23}cy ӕc(0~Amdh0cM:3CG/= ۇA5/^r=s0P=c ,'.  T3 zNr-L]Sxꏄ.qvi㘢 @8s]#O<G)IO'z;[݀I>Njʺ/f2Q*C,r=Og#(K[-y\*aZwRإZmԃ! gS/o>~ΗO2)T)YEsM݂/5Zr:vނUVYe8>N;ͯ=4wY1 \&@{{`MkyB )!Qڤ%$REA sA F-WmH+L6o0"q+M/U 4HuD$VJE1#B} IwuKta5º=MT])OR 2 XS`~rџO1ƻ@Hs和"Tm0Z6ʐy1 &d1MChH0_}Uu>,ikhMR3.ț-{u_<69P#PTf @0PT 8<*51B' $Z<%Zy~:ԒuEs5/V ԆQpj&ĩE(bdU9K^ӷ7 ;:7N%lnGK0bye 1&^*+p=-P pK<* ܆^ t Zf1:C!pJVa,,7Btj-טWUyq}Fw9|{h Hw@ĝ^;ruxWyNNz,t^@BJqI0dokXe17RZRs(=J7;cdIW:c@6c#@s]aNznM%^Cw-8n;;\O>8iwA-G7}yq%Tفw{ZQ!.s$Cn<l0aN-6' UgS6+PJ|Nb0m)2VzSec붬%޸.Ͽ6]c3-*Y!I_i:/+iyY¹m Mq-S `CyYxGn7UД{3t(&D ,oLtxq8=D7?ClбwC)&ڶ嚺+P+H0&9:a4V,X -8R9cl6P3) <7)]IHi>m)w7)"m0R4H4S9&-) '{lWQK@ 1/ᵉY_!b;)\` "˱W^QFw#r3{T="S_@&FsRmUVYeOCggI<@2bkh)+a6oK,zÄb[OmI54s%(ry; oչlб>]$Ps8f 346Ny Ha?Ohq=C$n=ʺԶ@e2zߏO6G4΂o۬ SPp]?Iғx 1&ўcmH"-%f$3kc7ZSGcJ֊ c3b?쭒;nA`G`ˍ}嬲*+p|H뼐84| 1'7}-å?5¹ P"i#(iAH+-R"ptBR>'q]鈺r\MU2;$D )q8&iUfՏC`50Ms! BV9P|} ش@ۇ6{/B uˉGG)B\s%i*툢sBsv ,2I[+Dq1f$g~1 mjXbҥ]50\֢X suk|1qo׭*qG(yhϷ}8ׅ fxj8 1_17@>ʊSJ\R* TR' VظS\i\{*`dLs>:T!х)pI߅Y6IySpD-U6D"a\n ʢWAPFڌs*X޷{8 p駈"uF Q.usB]Fom.a8CD]:sz kasF70qCёSaTN|<7ɞ뺑7a,̺ɞګxG" VYe8rp^YvDin; -ρ YXzcZ+&VEʜfcL(e eJWES=8&ZC$/P"ބs)W (r3vIIFetݡcq ޯ?u(ۓnjm?D;'ȋ*AqO{.\nѶAISs?w{|ݻ_}$NОVrQ[4[=[5='sV *?ms9WQ9'Om8?S,#l`3N&j;6 +(08nхS^vmlR޾SznaM%;[Մ$H3[7CTKtƄy>׆x 7m-V ˚v:D' ^9KzCMX\R *p((8*v8?(v7%ޣJ?|'Ng~pܑ1NU9@i HPLzٰ97BϮQOƹkzKnBp3 % P046zl`qdnFO_恞]%!I*M;cyރFVf4har#E$” K٩2v 2b!1Lo0$522sz[} 2,Bd=aB-5TC~7<Ђ.F21͕15au!gMf ZK""_h:\a¨w(7yW䙪\eUVhSp~vc8Mh!M3$G)ϞSlc4SN7-CShbNb1emjuC`ɆOh( }-mg5YJ -е|☗%E&5 l'I?*iH7 O8X ַ*[{2 pGkn1(v!P9<9,ABT8sX~= fVo ̔xww/Q{vw T ﴇ/k7`UAa>I1+:SbS,NCm{ зQٿy2ږ׫ΙUVYe3&=~x1yQ=~̑w:ι< ily[W%=`,}T Ꮮ 0No;:^2,db\1%TKIud>WTeS†u![53QRbChjeeHkNm`c)ͺ6}z,X l#m'Se=ʩ{9Kr^/Xzt9PDH}R5 L#YV381由|bR^- Hje#,`(7^g+zO~o)Yza1ԟss6dz?'BJPSb&pA3k`[ ;SJrIFXTe;J_<ƥW n;׭i:tNT<%< ZyӁ\nUVY㡥#y3ڶA3;o]WáhRap)Ll o^;{x-! EhI ̭f6=vO@W$1'$Wfe6CjnKJ%pgO aU) 9s *<WCh9{ Paa՗CG t%C+cZ=}pQSl\ea*"k\+8g㩔(X=xg';ϩux6t^]感5Ci<\_D$ ~4]6q 97Uq <&>`p}2 &iK57Ms|*U,@6cԠ$.9vgCxADq:SBZd yH\9/$W,VN(B$ k*ƹ*[3 e@kjH/7!R0Eh-eY4xM) %!~:$p)]vCӑM EAB^V'cdpu}86B‚2XHydTJ) ŋ1F<^Ҹ&\-=Wr߻3》}tk3Ř`/ŏC(iR)zd5BαC M`@`0 N#-{'Z6]E:u6Q&h<\1Q&\?W0Xo)=_S)7:;}]Zh1`l dH>XzjC vSIVYe8rR᪢ʐl͙CAo-BC.F!^Ңo@<=;W (&Q(m5|vH, ,j[@y%/䖀0sjxN~yFMz87TT9PI΅ v<,<7=w9<.P=;IQ8dbL;r&K:R[~H]SC`s-5ےuӤrbaбn"bxXة0c6\dfF2h)0.ET(cŎ&ru Ț@MxnW&, mC<wJ+*ǧ>)w.F8a)0c.L  @ul!+(G*0 ˙!1=)v!I';8E*N-Bw =x7 zB`II BƗ&bZCj5 b%(sԀ;NݞapT0rmJ 5{q^sJsBU*@W])k^87FÜ[raSsIY 5{;B~ 8"0ai;ܒZDr <#-1AeQ W%sD`m詭>5c:3~呺a_q'J^BoqCϜ}1xt@*q 7(no?_|G} ;*%8 x~#^q38 4>P(-Kx@)sM>D1** ~yyj rei``HGCAzD {>ns-ʺpa1jRJvqQ$I ~4@[0Ƃ/ecHrVe1>qzcAsBB cz6vH~xyĉR>I|v1DKc9qgSB\ f9]XCA Cl=pa \Z~0?{WYeUn+pm MS/@tZ˿ q^hq/:8x=)+g' )NSI|^4T-[xJ  S 8o3Lrk:@enKp[>,dQ2 =+"KFlܘJΔ@ǣȓ88*2 1LJmkb8+TyKqׂS׆}C%F{ht3Yaȡj~}" 4 9*8z?3[uiɟ˿#¿_o>ß~ƧySx_^|[uvy ;騁A՝}cŊ=/Ć92&)$@C3RoI"`*w k ]-K'}:~^g2]|rUtS}s]X}B~$@/+9feORS嘡5-I:b hhmx.oN;]`izJ8e:ohg6LGZd,TK%!JXkx@~昙ZHrGM:1 95#Aae3%u!+ڳ}W=%;ݞmq7ԯ*O[___U/R~_7~W)TPV=x5m 5U<=v| y+;,+}`2 -C5eS\8a{.StgEޠ+ICVc:Jparyn ,n*TK+[^!=<͝Kz.8Kƺqr \*!bF-by H*^]o3e8_YwDrbDG4meJiԘyԎLZct. Q(15o)ftboh ==NCp^5)Pw]23w6<OvDJv\|*<,|'~_25~i!rhǏƓ$Fg^ x?iYHVwk rz kh0x Gy[*c\Z\6^߳, Aփ  Mԍڴ eL S}[9oP+23ƏC9wJg徚5^EQhv%pI뾺Gc gtRkot2V~N/sC]ZN}jvKNх>(A!NƢ~!a^ާ9(uܖKpxmh!;0fWY'p 4cXyi2NBΛ@8EQ_\9-&b}c aiR\eUVYU_׿? ~߼ MӘu#/yҿz8aocUE`bh鍅WBW-gzQ '6w7܄bePdO]+Hm/M۟W7#o-BC#E n 'uFR&%ƞ 50&6'gI׬oGxe<[ ɹnIœ@2 CƴvPTuKq` Ta##w@w6C@"(غb,_X{= [aSSgDjEWT@1&q~IӮ@׸ G'@pW͛zdM/=yvUF@W[KcX2,+Q/ ' :665i.rú1xs}2W>*6W86KK ܖm~a_*!7BlmF_=W}߄7Mqw+nc>zPw1y?Ku`*.&nm U|7Q]q"rQ NY~{daCK ֝p R]T- :%Zrx0e$x0)’{'J?>ɀ$ilv黣pZkªNk/S''Q* 6ϞA ]P @q ;+ y(QAKq D8Ę>^{[^<9kd{sxK ^'}OibNN lHrߏxy!ߏn;Eg:t!I_r.i"dH8:?s5{)r('5Ƽ٤(CK7c9ڑ`\+2,sm#OU.]4>ľ-0:e3/3&%ϱUVY<XG撔)ڨ+J(=D2ڣn+zBa<LDܠ3]RQcBs0N*2#z#oBOsC~ie8/{u2|_2ѭZMe _>%7:m[|_hY-}۾[ gb{dg@h puk R"Jpm%5&Eܝ G)œv3R#s@Pb&Fo#$JުBH8|B਒dv..˜2%(j-Py YyN{d`b< [[<\rJ"ʝ7Ɵ;R: R'1pCb?g YgKr-5e܄#m(gu8`+2dK4=Hy ׍Գ%543qL܀$_ԙrW%|=OdrbpB֗V3-qb6Dhib. O8_f1Y=G;z؀`X{ۘۺ,k=H89{r$i?jbZC"*F 6X,MiDmbK@,)&hm"B҃ b{z{g9Xk׼zgq'kg5לc1u\NY7C7!M6WF]zFگ`蘨`R ؏s?/">|o~~ُp&i]<Ų h?s`x~Zo o@@1r2et:.'1+x,\Mג`odm2^=Ã=)1cG=ņ.PasŔl&ԤA zhK | a:ɵGr \^XwH@an:(a̪'@ a+T|~i$9MCuZ?< J,g;M -#tp;;#r@eM ՝Z?b+fB$+_ѹXVΑ5hHbu3 V@ǐ)Fm\Bޢcqy*qx]LxqUTA:?C~vIY:_FMҜ[%lppA3CBʹodи ^\D  )僀ME׍4ᖺC;ly<%1@E?]dܕSs?RΞ?szK1^Zttˆ\^η~u lWҝ#t\8pPBDpCخ9 [Qɼ>ם<'aRؖf q}0d `QCHejI[$Vʘ3}0>TwkZ$eQWS2uc+J*Do{%i1]mzcSvj2e!_0Ls-,w~"k,wbl6 BاzR!,qΞ 9J=X; nScӞnY?V"!xļu)K $!1 ib 2:sTٓ3 f>n'`WpcyC¯pszƄ#se{w\Nב!C?^g й؋^Ҽ.8@ ܋ePX۪@A-h8'/6Ui6B@;?zo3ӠM{k>.9DJʰ\plꍆ&|qty<4M)1,Ghkq߅NRVZX\ ~^|=?¾Qz)102M5TR'_84XRbDt10]!YU_h)?[V$h=q;ѱ"|ɑJ<];&j>3$2 c\lwzScz8sٰc.c`k5sO4$͂Έ̢DVshV8!}aaibP[GZC04j8v eѐU?Gc>x9%9Ê?dpHZd*Tdؖ{>[π\]Çr{~ 9)-}`HRJ d@>6Œ h^Cb<}N%Bbm(۩&(6Ywzc|i8&hWe˜wXnKuCg&5Ҝ ԇ3`lEvٛ:=rπ KdބK&=%(u ?!F݋Zo}Ԯ;抶`μqk8`;8 8{1 ( x.t'O"s80WaȄ9;l# ,X4zzu@#'؆B}^Ƽv}J-QR k k*#^LjʬZJ86Ms}zg{4M7ǺArR 6\E-) 6^k!HOD]YC{RR?(Wa8PXs^oq։!xV;R|u-F}30aj c57B@ |\.J e+fζ;|K ܴG@7]4`?Ms*FgG0Һ2:NƏ]4gp&QqI}F|.4BG4^d5XiEPosQcA!z)px!]\{}@2 *UTy-iD۾[Znn"~t4㇝뀻9qj),[ވrΊE13KKX1g@:NZןIy==U 6u  1'VwR6aG bF:r y-=QCes;ɋTh6;IqJ:lK,~O+<ə" <ͩc}-G3:dhv.OR-5:XZ9`rw*k23ɺ@:F8L?<!<ޜF gˏN'MPac0qbha~Zug7FM15-c9X[x35[xLK1<Z_ Q_*U˯Wb&x2ӽ S_y[ 8=fK#c0ԮE ; J*8ɻ%<~nʙ] H"Q!c(9%6\]bÍ)<1vB ,n${EC&cF-.~hw "[=t^@@D128.AcrFb_%_?S}TcS뺛 b!<UYfiNJPC_ad͆lk}X3siX{{È/XcR@cBPߏZ1#@k*XK!α~F!@NiPTR!zӝgN-^0wFRg@Pa= |A#*z ^=9vubJ ,j%f%אdNg6̛ew 'e K2abIsaG;aecPNoK[!z:(ܯUr̀| P\2kQ k'MV4CBAKK@Qx N%Zcij/~xjRJoLIy Q6&kqM2-jxߺ\#ʉDM6h/"cFPt YD1伸|=)\kkrz v8is`[ww$PQ{a-Hk kZύU;5ܲU](WҸ7<?(ِy1\}c؄R1EW=sy~ }#Z 0i)罀VEِKoeq-QBC?LƦ%OGT=Kd䙑D ,ZsdCbj…keLź1np\o_1[7蹰!^J*8ir{Ba7>AH%,{R܀t~, c e`"#]$(Z-عq Fm$NNw7-8BE'R^k&6o`qw+'DzD3:VQC.fbMam xh=A~g8pαzLb8-)pN.u M։7ƈ (p?FK>d"f \΋<9%~s1X`#d^h]9ܱg}'tXŌRfb%Gs" ʐg9#]%ex*ja0a#qS|sdN( |u.RvRs*/1Z=UTKTfsrЅJz(K,lmod|<᫬ݑ'@-%z^DH@e S^?8QKFȡa.5\ #03 rQ[Zi's{&N jdb)3X"k<=Zsp Ff6ȜfO#gKeK&Ⱥ# y2c%YP`$$8Kwx*UT }$n'M=OoZ\ /@bS~(^}al xziߞ (J|F|i7V? h)  tƼ pE.-Ћ"|0@;yOL)SO\(-Y ["@l˘xf{>ⴈa2LSw #BFmY<؋c 5 +&=Z5$ r;]~/4 =(wKr-ƇTRJUr{8ywNOH'lGkO^>_"9;Nr} PMnB` 0؆QZᦈXƉl'P ۍ2$y (fp.΅ r`i dϲ#HiX2yR'A=ʮ@PYڢal4e a]K^qGIp-Y^penuȡ<$VADI~{2 ve(OHVRJo4'MݞKo@?}/ʆIPTُyC6t1X{1AV(*P%E7sG qBg/#iҺA1`uF]*X gj]=c$Rlc€c=P*A`qY2q&aמ9@ϴ~̹N@K#.!DC; ! \d{ԭ=#cϥ3֩}f bĺfkG El[1"Y(%RJ*8 rs!7ҟ_?Z7Q|YF-4K\dS ~,PAa^pX{Q<)#{A k8yRjaH1r;,b``y97^\]Y|Q@p(\.12q#]i*{Gj k6bY0cP) B\&C˫x+}d^,,7vO}ѽ{/ nvy;Q, ú4ͮ{k@/hmWvKz|=GN# e8ײJ*8i'7oّauܟUoeU-amjȦ4(.Mv* =JVڃ'HVY)\=Y ޒkf81 kb(N{'9Ð1a7H-\f=Lk+ILŁE7>/ˤI>b L2X"n qX{06؆rl`Ɩxn٣w֛ 9zS0&Qh ȝ>^B-jk@$ [8'ioڈxp@%E.2'Bx-p]=UTmx-F֒ݓsN8b\ Yzs R8oK{);4W5(W8arXr<* ֔*Hd`S|hZ9Fy,,O &@X{wXȱJ˲0bwkQa ^uW52"Yk 3/!]Lv{cY9T2 cǵGjm/{`f74`C籧9 _3x^"`KNd]o4%Q..uW<Ef?qࡆ*UT.S9-ώ$9.펄9;s &̙^2@+ݤS!'Q1^-E{ 4qd!wX~\L+Oa{@ʙ*JBλaamd6pzm[QB?946vqk[}wM~'O/㦊[e_#]Uŀ`M ǔwreIfs"}?m<1d캣U(r LuH=Ҭחg@ܫboY TSp.ƽRJ4ugS?g0؏G(/S OIlÜzLݯE;ٔ:ڼ=auU%Gut ō_ڱzo;l^[!;8Bh^ք3Z`#rSO)mkd>X5;=<{@ԕ W5kع̀r9zqzLsAӭA% O|c9d( AO׊Y"r,.:x  9&iyaMt pߦصG gG@w*!`_`x5|6g!\h=UTG8og ?ooZ{x%π0+?z/@{[εژp"( Xi !m 儕ڽ|eu64f-2cO,&\ 犕kOrJ='e|O@%9D/x4L3b;梃wdy5>Runzu  nGcĿޙ0t Gי ꠬@s_AN-sl=|v7C#!KIr:c=rf{ g<;=- 7ލCGC).a]K 4گA]gs{19c]L<(8vFz+)1Eͤgw 1'G\V:}`*UT)1OM?Wǟ<^6#0=_o|n:BΟi> *e y(5*Y8 ؖnHy߼k-YX1/+ףB-!bl(T NR[G;2rPʜwڷ13`0/gnk c< fDƀ<䪬ug?0~Glbe>|co]hs +*{Mdlu4 #WZ:z?xȭ>6*C\ż.缑@YnS ֛K#Ip>UTGg>m//K7@pN 󟛏a9'J·6>jYs+F2hUP+1VJ\BѲ OoKP;]P+a]/^I)~1E_a<Xu꽧BJ2 w)+a̜VqGsu0!!ZuM+ײ51纒tzB[kX猶zuUOUn3/֯n'aE > x1d})%)m'Ê٣,\Lۚ ee(r.E*UTyvÀ? _߅s?W{04bPțj?9r¡)9R+]B:3e@,׋m%y(B)CĢZ1UVfI NƻŚDYFp}!o a#ǧ2%ʠwˊ5KpwW*z2vN^6 ]/x92c:{M"µiMbb6b'._}hWtKAG)0 -='7F__s 皝Mh/|ոd]3S%pd/]o#VRWp ;[~=&_=mO/] w/b)qYD 8Rw/ cN (Md JbS]("`ǖ(=AqQk9C  Ա1BpIcY{ xϬp>>*&+^' d7WGz~<ַ4oE@ug%`˄s@C[JN3 Xd^p~zع*!e1uD-STx_beaĨ@ ;*!SœY`.lWX]@@ SƁe:ZM:0x:lFr$[dT1)'qMeM¶c^.33Ϗ>blF k:RcVj&#d*ݴba%^Qm+O8ުĹb3mRB1Y-=V!q@To].ps^S99dblp0E:^\rt ϴL}!\SsIZ'8Sz(4:Z14yi{Z{{ZZ۽oRʛß? 7{ޮGޟi09 IDAT vq(W86O+wgz ZSJ>'8(1SbΉ+!?볧"0(3d&;fxxp RfQP\DIvޑZ!ƺI2@iڕu;r4:4zù@ [@?=2X谮svXk/(AbM41J3q {;d'Pw]}sZ{{/X'_<>bdx =sb|]Z_*U*p|4M߇oM~?vvߞp'bw;.g!- @-"[y:)l9 Rzf#'8`:\aPFy  rOΆFbc!L8@g~Gmx @n–x 4kSOd\=L4.笹xa3֎xNh(u9/TM(j-3r(nKmlɰ<UtNS׺I7 vl|9ƄgT5 =e–d_p J+X!kha8 cSF ίRJ78޾^v _̶`1(<{R♙1 >6ldsΒ92/ܔ/ D6.vp@ C ;90YUe v CiOv!k(\*`1C\2~NPxol8,4f ֞#c]b#qJ:M ^A=וbL!C ⛒únrlXv P7e'Kf\QTĕj ʥ.Q|r ;{8l-RfM@ 1+(K.{+`+͕w(qk2\~qEmkj@Xj( YidTL·} b4?Ǻ4Gk(,$7v nWO}P`@D@ x Isc+p_ @΅#Ƶ=YcrAE1vնJQ./S. "'r}Y5TJ*8a2 @;уN+Xnƛq?y9|Bf UTQM>&p)HS!(.S``J(Y1fሓ|f87,g1\r6iƚ %(w8{[:vmd|vof跁w2>&J smx;#Z aLXr{% Z}L;tU@$Eׄ5fL-C) dDЫP4NR-cr}k{ bͶyaqq:91I+O(b\n,:gSab+ֹpgWuGʽӼXOvwODž^wX3,)r͎VO?$GGN<53ñ# \2> ~^gb$aݽ1:'lXk& zhM|Ur(l h˳%.1fUbKA\XjEc8'8OS5|sBzITRc-;{_Xv^=P5ƟJpܜaPvllOls.i[\hjU&TI$G $5Ŕ+ v e)W p,S7`@8zHB%^<-6hڟ9V@#uXl)e3'15u$B`1) 8 }hB}?@4+ 2*| (NΧl4jc&qVdAwRkmIsl /BW!Ms m}08(`tL. $gn)fNmޱMvJ(K% nꁵ\s( 3ijжPu/ xL '=5i"}lpq'HdZ}/n;7fi 0ђ2etp{le !SAb?O! NƇKq0Ngίkz=3sPk@0D٘17|< KˬNAi%*t+?RۧJ#c}1 WRJ<8_N+0@p'`yIɼw|p(HL<o)lKdxB,*J>E] $Z(]Pdw>URkoQfըǶH`"bb^@*H@Eޘ3]D :`^V h)VK2ÖaUQ!\C9q!Hz2l*P:'-}1xM~(۲# <%OX{&}.͓3Hn]S4n~ -Rd0.{YbƹX,`>$@?K146*<CX}1BYȜ}TRONBqg<%޸r:/'+ZRQa(hI$ŔaksS/JrR JI5S2Fk_/ 03ӥU=^UTR"@)ЍxqN+s@.G)mk8[)lG v# F \Io(:!0lw1(j}!qVV)2{L\RP9Q9nc`5g2x2`!&-d 1eg|W@3eX2/7<к=pȵa kZ ۥ$%*<$_K~\c*U*p|dMc^cR{^18HZ>!?O+ԅER;a K?Ud,kKûr!X'J: %ME;k=aˊ;oIa1heu{6htG_!N&)a({Q|gŶޢ;1q^5h}]GI=jL#f\]8-~*/5sq"ן :UWՖUTRg]u{dϋ^T[+L0qru񗰵Y޸cO}X syGq V-0r6$/]* Xd-, xbuiGE=X^ZdDLj7xI> &]KJ׹2ƪc ͸,4!VĆK1_>;<>x٥E.%s*U*p #ύ;{]x?pD6ofR82pIH+yos`>lI>NNS qⱚY֠ % Ecp{C9aD#}iYr[2 νԜN|TDn9 rem,tikX ;r<{w[&+5!ɼ5rN*}B!{2  ali>'GZ6.cvr?~O0h;"bȗ(zI5%.//9J*U*p|äqgO#43|wMm |̨:!n]aSoD1_)|^E1XZ}H\"qg(+QLXO5(p\Bm(s^!5CA֒Z b`ds !;y͓U߷Xj:1o|di̝u`3FKڑ2-fC T9 /\/a6M1o_b$>XU}Ǽ9 X^s}Q(1r[U*UTf^8m }~\ѻCz/y#ùiVR25 90Fs{_mBP~57,`_Wp]%3*TR7LgGpsJ*n)X/(_",qcޫU󏯋(cB!Z ~ Tr\Xld) >}ϩc%Gf2N;c< C@c eR<'(" cb㕲f >91V'ZCG1 􈇚> ax)i>ȵ> Ř<̅ISJ*8~2epe ]fp{M{u$H͍Bui0U2z%$kXÎ?DO)1 i;]pRᐯܳ~0? ǚpd('GmZ~ !VWb(\_'%9$/z97i6{'1VZ 0淗hJk@xtȂϲZb)A4VmƌAtf>}3ƳgAk+"#Gdcb@iD:bBb @};lYs{| kn*UT >p9{`?M ; _v3_nIiN  @#l.s8'l46@6^aPHS92Z.(\\[ ֡}sa6a3~_=r\ދBj" 5|g Oh?0>dw{#ga1Sv[RefP9Ό-NiC1aXY"ڒY(q6Os8}^\qY@ e7k/U׆h̴9 UN}Y5Sys99f{%Zu =;noƘkۺ#}4cQ9f79I;u 83F7X tE2_a]  aH_ZJ*8~¥09,ЅqsqwdtVRѦ؉ƴW؆D-̊hC !@3h-"Һ˛t26zV܌g33΁"K#\˜a";Qԋ**ntA 5cqr)->sP8QJ{وm cjSW.bmc@`"Ї;vNcC"9r5w)_|dusn91C|۰i%/[s2F`|j%ɩRJoHX&{4XBǓV0̪GO+ul| 96M8Vsau)ln^r U媥lyφ"dY'8D@/ IDATD^ X[Bcʸ*M\+q"p>jbeʌՔC_]xP*1i)C|_ֹ9Fc?N{Hr 4Ñ]b֮&b5Vmy{3ޣ[Z^W+\.!)=.F'@k Kɸ$ ߗ#@VR7D~L6/a,9`y2w! 'r2BZ\d-VfzءDV.X F\ :Z])cJd(!7:|J; Bإ b^8Q~T_Pxc7L.2I;o+gO 0/3 e͇q2=C):b4%`QJJ()Jn,cA1=(MJ{2u^.Rs2@z#a嚣x̳u)'c8peT)rx/aVWJ8>{ϟ8EڇL+4u>H}EoN;]=RLO(xxdg*MGYHU)pmżL)KQFQ\Gb( 6f}zg`8#]KF1 眍s:CϜʟ)r#ӱVw˛hX$EHbG5ƂgByRK )agȅX/bփ g,E5e 1bHku=Fؕ\p`%}X)cdOR[-5˧0'On"ֽw xÉrrys-}pZ10, |#KԊ9'lzª;5đ lN7~W"Jf},58<./>#'u\8y[~8dƈB`(Z>E#?ܱ2%=u\:\SF`̙X~#GmK-+-+:Sc>rߡ4CKEL;Qo{耽<|% P9^t;sub$E@wnL 6SG>,IqwxYL.[)SXgc<ҽhujK<Đa*AJ*U?_W|Sg>u"(3x;=F}yvRЮقa3m& .`nEnHr܁z ^9(~&34r,*W%[Vj^Td 1 C-}ܫ6ǵy6eD%1?`:* yE 9lpy%%mx 5.򨧌!$>Sfe~R¬>q a챭}f֬0@x Ce`Jc3w1o[ly:-PTB8PƘR+$*k+RC"QHY6[H1I)/=d;0XL>3x.$LJ1c6ϧdA I*4{|yOk1ɱRJܝC:u(Y?|0Z2s CZ" 椶gɬ/ *[I#wQJ*8򗾄鿄|+suk7q8o{z{'k@?$}ar0,wMH:v3>I[sx\s v8p6foR~.+Dy-ݠ9ͪCS'ęv ,UzM`%q{YP:c<59fK5HL a%cBL0$z(v¿g.2cޔe2bt\'~) V`xyrj].0dĚZJx8E%3'\k9!HH #KW?`ͭ=+[qR??g43??{ {]|O_E4M_U_vv5s`|,ρv|o7n4Od%&8lv8Cv@#76} Peh.J%lIhT܅ Q,3G~'Eq)Tp<v(/Z C5SK/prb̳V!ylK˻3eL8 /T0{aKHTܭRgHk̀$Y1a<lQ@W0x[/mnE#i b9d|ী<:]8ָNR27kK[ƫTRU8gy[3/|__ċw?oI|g?Vu;@[ {=WDR݋cɎqv 05| CВR||)buIxQOuRy~)LiG)Xk6.f1fL@LZ '@]`Sn$";L%kMqC"3 2@8f<pІwWeoj+@3bː'rR^܇MNgaד5:_1PRJ4d^3>rr^!n*0~;9WjZ iUTy=ٳg}[ooE#6?i_[=Пvp±fxOpl ZL HBUdq2F1eM/1㑲zc@?e<+1Ї#8ؖ:md !;ƈ(coe7Nnl4(jƺd#FB[[G]4<3r=9 s|6'Fx6adFy@+ [Ƭ<4gEy5h=@gKktuZBIi*UTy 7җ~jl}3uf a0v|8x:; pdLNVޅD5Nؔ,!O<)K)I%%iHD槊q=:~^*|-aIfԧ]=zJ$W+T1!]} wزsh(v' 㦵œ<ó̫F5G` BgSE"ЈQNCYR!ca3k  ͋cm֕)Cg;߫ p^c$@XJsܯ[o'jFqDz,FܺLaWxq:)a>GbV0uRGwK7mr:Y5CKARBj+?~ŵÆlKxv9hG5#_ϣWwQBJ gLnLҨ128e9M 8X `=b_P*:!~ yNi0@q qyس²^8z&vR_\G$H?hPl]fULM5%֞qµEr`3$rFZRH7G  ;`G^haD%wֹLl SzK}̴_= -5ycae.T?_rF= sg0q+J˱􈡗CtV㍤/v\}Bs9з.CQLȇs G;юkwxyy9zzܣA}=ylPZM@7O=PiKS{ Xm &)c;{ ]%JVK#ؘQm!9O'ssB-|63/s"u^)3 HRChG;oGL{@OcB'w@H wa,a~sϞ~f]}\IaeIRVTLcD_p{yOI̊ ܌?c-{sDStj^N|G9W͓x^<* j3+]C8XEYގ6 [?=&G\ZH| c}[mKI7ݬxA>'S$p|+b^煢R]7 068tdm02xE D,[8'=HZ}I`sWl)C sXKxu2- "aJ7Z26_B íQԈz+vg`=$c@ﱜHt/`SqJB'<-GtSY'24΀=T%ȔV's@Ts9zؼ,h_>юv8]S"( ?l>o nq30H{Ң?dCj([.<\m@>Læ<?C)DJK Pxvȭ֌KDB3l G!p!~"gKq7Iՙgh{Ug7s /se.D7wT #c{vRi?ԗ˯34 K] J-Ļu A,$.!Aeqp͡+ҾŶޟ2.\'9תdobxಣhq|kyn瓴}z4JjaYMʪ|D/sm_ Փp\67>`0 `|/5nWp xc@`e,>b83bB0 <,B 7AY-$MC hEσ`Cʆ Al9,k-5{\= 1Bhi!}KsGds|?3{!nȑ.spHcC˫D HՈRr K&+ގa3?̓KOp17'ϣBk aL8Odtc!T Y[y Ǩ*tlzû՘wr {! gj:޲w=[/iAv~F!) {p*!IԬG`-`^>-r5+ #ZXe8 _=iy.mC IDATu6c"l2"Cثw /ĩy,#B{"gU[uakϑƀe8_| d/V27ȼe {gFo-ysrw5~qH%Au,B>ykkKIKI{ZKָ$gND2 qmW+}UǚSCߵ}kP{>PЂgz}񌥘OLe8Tt 圄d޶{ >C[)XZ{h3IOXjX@D:!)!6b5Pg8Z?gsP7XzV=es??_h5@6#ѱP\k7_1XC{`>HD{!`ko-`V ieՃ7س k4Xp=@ #jw9dҞ@O=r#=Y3DC]*ģBs$[!=dOHF6e2Pwq_=a9:@!}v\ @1Cؐ!Jz؜VT_"<^$Rvxp %̫ uȒW: ]1cbޒ킥HN &fA19v19 QuQd_'R9zRi<6;gV>[%{Ogaqюv8&8&$T2 -%'>P}.?OEd|N0S Pz2I{ $[_ny"!ZB-gkyꠁǸJ- . ᇭǥv_RO~LjIz6@1l7uh{e5O C=<1CuBH{ +r΢RqXkQ+n3C1nޢFq53Y?g?> \6cpJ&;:1R՞Lhst!KɠG U[E? c+1hG;AwСn1V夰QTrNhFTU(sƁꞪy vN10H2i4`!vOz95|ɀ"7R)RX8T#gi:$L s)4X%9V B8ı΀,R g::8GĤ!/2fc$c 2s L+2T#z*<;s2xH'XH= y9&ӿ*e'Q_ t- {P:,9?*X>TKf5\tl#JR(ɉ5Wڗ] ͣ7mMǣhq|4oSbWrHZ7{m|x!T@Uq, ]CPBXՍ>τ|3up-,ͪy(3uaF\;w"(`I˜O 6o!2A2r!VOX/tF&X`Y$a !-u(Փ9iOUC#^Nk# g,C[=@s1}>##<9;CuN{}cYc%ᐬ!O¸2ZaYźD:$E}JF^V?gH?ȅõ%c} 6Vቍ2[yj@3X Bq1z8=XK!&g,v!5*uN2CGZ12x:^"`u_F=sظ6vǣhq|m&="@M89H-Z$`?MzGm>)bwnF^Ќ@!iAR(Ʌ D8X UT^; ~bꞽg"VòL ȡAu x[HJ*;#yi˒^:&,q1H|Lb0/:"C9D ZÒ H-}=V3\s!3'F92$ _2)5p] y32ЗZ,l"r6.\GgdaΓ/G;юvߊ4~.Q{4*M>}Όgob?#P?ljDBR%Ccy䥓[fKG,@@:谔l?k|&,s$B}&N L4Z@9zP%R*!z1 TC0$c/Ǝ K5W. e+Tƀ|AH6X,ߞ^6ʺ5PƏ$լ ]',kNjZԢ+eΨ߿u==x%i\h]4ɞY|ng脰p{{c`DkSUy#Ü'q τ~z"293^k?'McP\:O=})cXx>eeϭu6Py'S#\fúze#{\k8RK q2f|&GXÑlwDB$k*"_d|d}2,]iJ Buϩ6A"v0r>g590D$P+h2d@OX{8ji̓T0 PPV́ ~zz؝ddF˰\;c$K^Go:c/Z-2F lc3JGXi ."BW;n?eٹfMcc|sxǒ =Oݬlju2-R&,C,K@zʾ`]2猡E!c8Լ9VE=c{pYzqκdsƙ%)C"zq 7|wxd-j< mThG;A;}1lKz䓧¤ N6N1?xt"2|HCeAUa;5!Pc9UpUad^ ~du8&6/UQ[ v5K $!ObzNx hƜw潀xOA*Jέ!TQ3Dx0az{+xnz* Z8{XN` k4#g5c",?# < GМ<0yp.&9]G7. lc16gF3 ~ ݣocb˨MI5Hd^k-PU=юvo˝n?9'_=CLo'RA U(p{ӕ$HYj\8H>ܭ .2MXPÞQ8; ?dͼFO1 _0u(*.v0ynt Aq亁R(qЯ 5~*!!n6IܰgeȨ_zt_>ac,$ X2 1u:sTk2;c]֥b"6\1t <^mF^㺭F0.B5W34a\Ӟc~s5[ʫ[Cͭ-Ll[D7l c(e@s`hq|͐ƣj9ˋC})j &Fdu (F`Ky2gTrs}O'"įᭀ^aH(p,FWU>cjdC]4wP= uKhጩHsox5&'W"@:,_ ϩbpdk/ǯ:įadD{x6ȒiyIJ+7I0(qܙL+N/Dzۀn~/gKϢ:F,v~ѳtW'9Q{<#B:2$ Sm4²g bhhrhG;za:>he>C~spQZ섥5 B( +**=0aHEr@V >v1Qd@}o5VᆹdPB`Oɣy=pKko+ k/ >*^wOR}γ.تOs YtX y>G,x޺ 瞷>;ܰb4u'GYa\% AThٸg {H| o=WB泿Ohiʙo |hq|{A\# FqE?\,zG` @.n/A\!) '! s_sM:KwX{+9z+P00o4 0 I1CKnod8OcRc`{ N?R^Y`Aڍӧ/֜cQ06d~]5Ylp v ΅׽_pQtͫNR2Vs@/װV;x o%88`{|5~\Y"$0}  @Ʋ08g K/OMa%8 ZÑ "Ȧ(땙\ tTTWkQadqܻesj/?=9k &C'%ƔɣS+),6 XCe_5$Gr-U?o7̛N5^HO+ pZB`|#LhG;A; F@Z:a[3H^-3&9#ЄzơrT-ڦߣ֭^XdA{\ePZ 08;x-ͽ'sѾݦmؘ\Gq@ UP+iáq(~Y㺍ּT~d@'W2vrή^E<;Aq *2Cި2wA:hq|㧯t%P9,aT]v}p^͜ !^Ӹ#;!5h9|h{a^czxrh]I׵e@Μ" wg[H Ϙ! coQ|:_>:ӽ-Ed jG8QsFx ; ," poPǸAk4&14Ep7WYX" +qa"׭5yrfXz17@juQ꬯hSl3Μꅴ(\1S=юvǷg\IGd;FP]CtLÜJ"օǍάM8e;̀ra ̫ <ǁX@n fXj L4%e Jځz `慾jIz%*@Th@ d툂23vX? dc;u-| 3b2oTE=QN?/l+ Vخzsmo.Ir%YYŝj1Ry6Bf Wޣu*| xm{+FYǵj,\v&}?Ϣ 5B =@N֘#ş{ T@@W$OӉh:cjBI؀r'@qH'Ԣ9,eъ O6` €Xkv@t `< "b!9o7ȋװFu$pF!~l_9ͯ^u:^S#:׈y9:sYy42ǿ$Gظ bUC-f)2dhG;~+%$K%TyD{<P j]_cäzJ c` P~B ?N@ 0{w[c+a F`ȞBȁj"z(3GpUw298u@VtZU59rMV^?3dbD1X%Ǎ#R 6nZ^KGRQϣWcP2ː/QYy{,G*=<LO&TH{?g2 X=AS IDATN13` 꼹PÎ7>C>ƌa I#{}Bﰌ쨰cz.x5XzP= MFXTr-|1_#g‰ơ_Ñxǣxڀ-v?:Td)~t Vts8H1 tsb^T?N=|u;]X,amem9s-|OPrU` KP4!_3Rpq N{)q`Q\q c˪ g5đsZi./:#|Q~!`OeC2'3 “۫"pĜrp/9ϓgO-h]͝K9F DXě1,^T휜/XsK2F'#gDdA>Eh﹣uXqjXVHdΆ֙|}()vΝAjk=ˉtnx{sshq$ -EQ։71ƹt U5,ND@CdVUn;:jT?ʁ%*= K2QS"ֽ/*20WH6^pS&'Cqn.6H Cw P.s^CÎѢA Ty! L|aTu ,PU h/JL2 !A Il/ e+Ow~(X1 v 5 C:7RIqt AH`sGvkyH$r?>#?m2skI9;^r"ql5ۚƨuhq|s گ,W3c3<.z|\^Z I]s8^@LIJΖ7kn>0ⷴ-YH;Tq-ek>ue (isڃd 9ON'PEcB)zE9V'@G/ \EVN=g^{oyE{{Qt95xi&>K?B야4{:0 U0s<ȹчhG;A1(0 j8R =IH?gE @{  ?.=m $Z:Э-; : ⧒R%~.{d?[%3rLtw{;8'y>7F*z 8߫ZƢ(ָxm5'G{; =TЇ'E4jů-W@9={2nVqt%D` %FFVAHz ZWasd!N20jp\!V  ʅ>!+(0y27~cMT73X'<9[Uq=m cU\; H >.I?{,,X,lXFnC!\+iښ͟-.NΥ88[Kd #>N'HLd!]6=W/jG_:V# 0խ\Lpd|~ZUX cLkGs=Z'ЫpKυnpX_dH 0h.qĂ:b$v^gbRlY[ZzqlVxOX tXFx=ϤF0k  8 oeL5%#nx. Oe!xĻ"bX3v PSӺxi'Ru@LetidN?Mk{/@jL*9,G\N@ Ik &@DD̀@6.#$򙭜p eX4*aW":l)ub9#-DmKY6GW[-+ @2][B\0olP3gςCDk@ 7ձ-7MY1.8 s3&r*DDUp^ n9m%4ﵦ7diTA-d#L"` {DZ\嚷 9_fʥ<ĥTQU 1hy+͜b G;юvǷL! AN,u>ˆx=WlٯXqg+l!E|^A)ؑ( \(TDLXDz^[-~"ɦ'' }CAe} D;J`ί f9"soOh^ ܪ9s[L䙸FsGγ*u~)Y ~8uN&m#L<5nF}%}wtGZ8̺ګct# Ddc^p4X9F\CNO@hF!|Nc/BȂCnic,MBs{}֢ւBjT\~3埝i"4#hG;A Z/C@cQSLO""> ,)$Z<fK @*L g >/ ?=aO:ꬭ `Z[z-a\!DF`kY̭y X@½4?, Z5:gOXp3P<:b1 "y^9 9TIWXj:jg@f Yyo!^y+ g`X[L7ܻGyisY%fh/ > 1hozJnTuR{o!DrJk*IluID1:A9ZP[C-^҆aFS{^Ċ 'IS=RXbTi hG;״կi MƸirrZnM )KgI@1L98Koh-`QS/%wYd2^b'r! S-q BX b@ Dm}bY).03X*{ ekJbw8Csd.YH%s5-faf1\8iٺ=`[8E=2NId@-}2O~l4l>op1OuXIb}db!Q~C2릢P='8p8&%%l˨CC`ĊcYNQD&q  Av6?׶x_GA@?x $ Փ@NTc=P@(Z{& FTW{+rK%0ic;.y<ޥ8mʾE0iX"_qKBΕ!WP𜜹s+@>LSP gB2USuQ^z/Z|/=yp^9}<Za:z"jD˞T Wˎcy`c"7dY8'r<^-J-CkJKgO7+= ;Ɯ-bp:8+3c{M/M2p; @㤮y^&e;yCĈȧlkxX_eygT h~ hG:Oo= 2@y44T"}ۚ\N·fV@@(L*a]L͓iZbt(5UO& \z\2]uɁ6UXP ՙdT~H_{6sS[[:d 0)ޔTPZξ#3Y0iqXXGka4fL}bu0uoUʄGk$`yE\s$ [K-d:|BMcb3+PQ? ^f+#ЖS&^Hm!C0 d1&VѺ {8O"@=iZj mW9F7x])pFk`R=:+ɐU?<4 ^\U{RG,V !eA4G$"d's}κ(.Ayⶮ1~TXٞVd!~Bk!8sHKcǵ4~OX*69"|?@S\y q<юvǿfV'ZmCLq>ŚGiʋ @zY<R Fثr lV~ _OUD;!t'lʃ w#pUh'"]r xyỈH=K~g/*}.\ëyY!/r[u8'Cm# xq[!w[^ LX.k˚Ɋ310}b%O#"֡9ɽ^fhy8j}B;BlEŀ%7 $ZDIsHm2[A| c6HYXy}0TM!FVo_kVgrL \&N4G@z M0v oBB<@.\SJ sixs]qaR^5pD6{, 49(CYaDQX.R:*~Kb/Di$W;$ޙj*[9RgHY&F>1CC|O[s!nY[z R-iS'٭s@W_g0f悥GUsGZ쵉oJ\;Ǡ(<͍İ: o +WR󢱒rg+2ıkX 312OԯwB69$ qԚ+{Dv n)A}U?vja^y)s6i9b\ m5P?NF|Ϥ1vo1F"h8${^~Ü2NrVznҀsi PEϊ# k [H> ٽ~'C,\p&-H?B[ #QZ,$T=NMU;p>CشzP:wH5ւ+[yWsei:+Vղ.ܳzWo:Y҆3}-BykYs74!2xK8$uf0B XQ*-v*qq]'jȆoS9lǽpܜ5/3 {ˍS"`)ko'.z_! gRg׹JʶBYl2c;y>k)m<Xr$5ф_}ڋa3T5G-A IDATlHm+RPUs<~P{ |u1IY{юv yŤ1%0@h2޺˜T|%n\0 m5@ CIaA^!F^-#!|&b4k!HM.3C%1k]d.|7185ײ`#NwɄޫ#1Nx ȐOdw-U 1›%T RIkeI ː;!l((@2:KMT7 /eD= d,\+~S'D;5K/Cb J\a^r]Ge舵GFɮ\ z-׳]԰3p}: lAssUIydX+IhTS?w!{r sw X]zb x=˽9Ǭ&YwQHm$L0B`]XV{KB@ (Q *Cd/XJrQws? {z\^^udt|U𵲛Dn@PU{h U5 f !Ha`YrN]KSb#|o5*l6͞Uf=A{jO,-á[,:=TƾEc4ӄFzNۋ}?2:뉉m$"6k1/ЎCmN 73N 3D؋A//XQu4`N@HGKϬ!=u>!/MM ?c 2}7ƵcEgUyD P=Mxs"x (HXHei[L 2#0tWa@3e9(*bΣ޻ +^.J.|=[&^A{9Go.|]mJ1s,_9%"IK 7 ۔bZ:[t/-Y!hVj ŀI%HH?B~{aCHCœxǝޑ@<{1L5خsX:}ec穗VX1C iXWJ_h9+Oi>{+{)ʕa1 L$Bx/Rޞ3fξ9: @֬ |o5nZg^nz=HV߽`s,j; =ΤBj&1`8yhG;ۏ]rcG ee֟, >ob _sKWX{.;; `XZwlDKy)XPᛸA {,sgU=Fsu5J5,Bւfq2VRBOX{r-rљWLkRF*!t_{57 {CTm ~=}$ ! WmE p8D8О} ֡Ƽ~,K>2/'KץWG]}rQ.b3b4V],N@!D#y2vvhq's=xwZ1Eta26~>`Lq$S\x?r `:\vèL2|A@)0Ah/lgrVÄu[Gy= /l*WfczJx 1 lo1e\2INM&bseO]sr9|pE΋vm&4OB$ՓᕜHPUPm+|z! DμX{KKs R "\MfoX}By*/2f9 qJ q< ֳ <KPK!{> 1$y:C!W'Ppl84w@f*@'2hG;F*2]™l"&8LmS˟uz"/ZsRbҘ#9a6.ZAE *4VγF? c!{ h$AyDIC[M`ydDk/nyuZ)G>:l+rh5=9dk14嬒@uwjzhv@|5@p`hq|-_q@Y!3ؔ/@'@H@*4{ŜɜֹJ|2':`E<.NPCn;kօki4v:41z" fUfykSie" yC(}4خ}!@-* _vHcMcw9!ҵv|̆Q%38kM QdϢRʡL+=:jԗ?i5Z`dⷕb;| Ve5$笖0^o^=3N_H{=吙^.sax?&xS}z.yuŽ<юv8vljfR&c,fqP@2wuڹSYugoSW ^f_Qn/4'< ҆@r5օG=#^Y%|=-_m:ZB$Ք7kLz}d+.! q2]~^߽\5)k30506;ġڣ`9y:?T=!!C^G&;}=uXF9j=<5DgTkejg~ζRXD4yXnE9ra\K~l-o?mB`Ctx ƞDgx$_Asd4m91쟑'y74qwrX68qvӴ|h+y $!1U  @&j|{B3Y7:Af,-ꃃU*>a^I@hr= V ר2V" |?枘%aP€'ޚ8X DEk|>H8p*JJJ~vg$ \x> q [ık̴܏:|51%ueS_!]ha2kj㨆!&Z'ҫm!FX x88UC,BGCrxQiY'[?o(oRgyg}8#M.4< B˟]$~p WmӤ~~?Dz G;юvo|=w~YX,RZpYh"13X~O+ g4e +BS%T&pG!UE٫DnB ^dZk/QWHI.Y~;!SZXQRZ|$Þ W/^kB*L$8:X' 6z(eVn|XjvϣeVCe96܃C2Jn~F(A{N֘wXV:Z6 C(3 Upl/b,М <-U_y'Pd&a]PJ} Xy,j1Z5X#Ll(hL_h>G6xKT%D*amihs%εs`Sry-"ci70<8D4FӜV jُ˹:j:eDX65R`R?zu>;Z/J+eV5a \]Щvw^5{=cCc3h'/daz{rGhG;[l*pdגZhY$vz:FY>݇IU4O<%,sp6@zZT4 8rC,xUt{ڋ-!sbV7= 5IC5 V1ϊ?#Xκ 7R.Dt_+siO)r2=rɹW&򐿳aEYzg/3刐Yڏ^ɡk i9\~==_%Qףf9~q I'*79x[j=юv8Ƃ"cw0EWHzjѩ^x x O@qE|,[,%/g-g{%y:! {EEJ8B*{kjUO(p2xQZXy$XZvsE祹_驍"c7 F?74~†ho2O_6r=a x{o3_t|eb-"Tj9m |_scìKPcR~io{ueBjvhNc+?^?<rJ΃ ̈́Rt':0Y(?L$S\鳧tz! 3bƪ;dX-e$ÎT)e/_.'xyfYG~NSUPpӎü9N$) ,ic6^m>h*`.ᇏV\r7޸Z|o'kAI=G SpT5 8*eRZKlX?T(ҙ^V<BȺ2VgpƘU* Uu#(؁\ RT n$JtQuh$z z* lgm~˪#P 0f2lɳ.0|>"B q<ю?_o; _oÇ=nDD)1s*xwI}r,?,9} S3m9ױmgd?Dt@,S(/N|7[1?O &hye'b:hdfB(*(P˳ft Xj<npw{Kp2< g݃mϘϵ}=կMH@S @CGQZjT4$TAUH  $FP(I$K vHJTB$NM߾ךc~ƘksOwqj:{ߟ[8>6$c2fZ?FKԩTBtC~1c$}j,"j\"JoRIJWl(ٍѓ,uJ"]V؍kF(i/hWVj Hʵw/%s`X[vS`I `ur݈6x|!Ya""jT'UkYKq:Z.&s"j#+?.nNhoy΁{UƝ 㼃<90Up]R_.3?7|oMgW>I~_?9;~÷~8{:nmZ:,e1Ξlf `@y #+G .. pл m'dH@GBF 1!0K]׻hO.a.`,ƾgk*懈tX 6DrA 82 o1suk}%S?O$c%3*=u 7:gnWst"~;fFB" |[Ius IDAT[%QW>DS[KqO;c|d3@ǚEQsauEReHj{X8g\eIb _tqEԝGSX0XB|ǟٿ؟~է^}MaxLVG-D_F?|8ʮrZg5ֱ% G,sp*/J{EEV+5bØ]cSo] 0ޑfhq?vX51-Zhl#Be?k t c uMG mȎ&Z ?YGi ɭ`3ة1Q}w1 ALzM1vvjHNy}J-1Smnk_ZvM,i[o fb9(Rk&ưW}$ kTHKopϠ&"iōV𙄤cZ&εR퍩1ЬiB&ǚܻV[I.ƧTgZ.WPd5d/Al唶dxKc^{01G.c׏,e6,e)KIYGЏY~h?)~O Q=zP0eIԻENlHZV t<{;z{:XxWS` o C88pK1hXQLV 31y)\k4)p/I(=J ŀo,"kdB^ak!e'm"پVt<$6  _kR`Sm Hh#md#-+rR}{`/# Y5E@ [vsԵ3褒'1b<;m9Խ6{wέվIa&FznCⵉU)SN9.JTRRhL5b{arb>;4,T {V(hBXcұ{nQs7`8=38*QIS4 4YOc1-%}>V]э^KYR|oӟ!~yp\It~X3{8$GD2w7gG)`(q2[îrg5@.s[Nl$ }M L8SaCWlbi <\ OdjjJP߷Ƭ];w|FO1вgιO cˣv_ QsD%l= .Shx̎ݡY#jcF1HПWKYR2]W|O~'g_+𕯼aB;U-r5j.ձk:o*(5-c煕ľ1 ;n!^g6~'ab: RigJ0ޔ!jùbI0ύ :gޚ-}+>%cˊx :"V3B;&J!S&KjT¥UJ1v$;ZPo_ͷ|s=<XkQ4  ExsC#d֭U_61wӖSXb)NL!ǶUEVc犎 Z΄`Skqf{Gu~[Zz ^Ά*cRqKR_xS dA1nŕY҃pO\_v^:tobtW;J6 |Dv9`/ a"x"h]AX >)`dxNzITDcT?5zTclLN ۈ+6eb'K'A'Ð(W vY;5w8uZ|zclڅ4%5 >.Pd$ yJ+U?)~%7"nj&(怞,#@Y+flD-V?xz M}XRRDvCg24v@"W~ۏ{\ZqLJ#G ^! ` 4+̵Iu".e)KzGk_⛿f]/~}֌v5ޞx>ێV vͥKQMQZ `Uў@Lo, |ba.ew{ Áʹn{fUzɖBjKRPI'kq1&!HaV!0IVRMDp Xޱ:&PE_hO!_sIΉOzpG9vյ+KR_fǟg}z|_T'Rd.^%fmk]k888Ius -NWCuGP@6t`}`bq Gf]li7$my ]acZ}DKOXkQi|jT?z M+Uv{FPPӕc&f9.6Ь:{,^PTu*e$㩉C*5l_N)alihňCH*n2TOơIiLfb~R؄2j B.ڂ9Uc^Su?'}31KP.Znpsrbτx}9#SV_kԙ#O16(#J!v[~8u ?@cV{c . AoSY!u)KYpw|w;o?k?g/ 4~5J "c!S˯he,x {`]RIk!pyY@)o]7`V/3;hWЬHv bN"@`\³mBЊnN-O&v9k(Fv-{1ُ1btOmᘛ;r'UBؕk]Z5pgJտ7#sF3[@M}1:ou)Ŋ[JWu4 0&N0oȼ푚9L̩p&HuvK\VN(ĺ?N|&SlB}b+np ٬4^+X R|3eU==={a0 ??ɇLJXAd3-=Ikuq|WmS6kjSгcM1>l_K0 B'}v%>P{hHV RnYuM熴`N }?ْ׌Ic#ԐC[B̥e&.B[|4#TNetù6Q$T9b9R읱._@F 9k`뮝=}ݨYm⅘F}qj}j%é4fU4-S06'uzUj>:4w d8Q5vC#wviv餓0.e)Kg ~÷oo?i^}_s?g[g'j>pidYA#4PucJk:o|4 3@1#`;.5y^1aͮeHjz+)2P I%r! p6%̤bh\Be{49vC1Byߖ;j]1*"fvJ2oT기aB]"&!˲a?#kg\즴:F};giO;{ [[fK˴eO2L  -J5ZͿ`o&K?_Xlb=HR̭ Z\hWКNQpmRWdmlwY@R??-(?W/:>Ư_q{ ߟ`ͤۊ7\MU\, I)x =p~^8kvnC9=t }\pې%K`0J ׯ؍;CJ,Z#@M61B~o,M$VڳQpu OԵt+ir=(,CC(:ON5uRA)2 NF,6$f'V0*7 }1=7')~-i&2 6`#s:V F Vбwkj߅6zͪ9,e) e8~z]J;h+jϺ<8a6`%iQ@KFؑg.dAw0gcA(Z Z8lp+z^e5O1iI[trbxb9Ԃ},1c)Rϛ 0ʰGk#}]EMw2I 6-i]# eZC[R71KQG{C@IWSyLl߈UI uJ}-VrtVLhb9^|Ir!a,mZl| u>CToXARM$L2̉/?7u=m#ViB^w٨q5%s7,f >0ɫ睲4 ʝv2Ju3h,e)bqZu7njg,p·*Tj*#PגV܎xrJ`e;PBsH\E-4|-Sx,VK~N7sb|Ry}`7ؾ̱8~א&Vbm5J.l4js: d< assI 1)aQ zlI[Ku\([͌y606|F1h'2P2LCf-sj]hy:σ=㜫ziO) dR}:aH΂h|̋.T>GrV ɪ,e)_XYl%|؛2M&a3WSĘ1\ֻY GH6Bpʉ3aA„Wia0~͉ YQS"%|n=D}jvZn%lV 8[j,vuR+7bidR|KwPu1YqM#L5 f%.S$FFF#f5 +kԺd@1 cҮ(MtD; ng2g 7 p< @')" .:]Am3K˳(aM<_ipSExSN$͑OvZx~>qQ/e)KeYpkT0v s/HCPZjK EUa\OZp@c*\Řdʵ1%hىR1\K 걯0bϨfi˳)KM,-Zϧ|i9Jb` i%vv`D21z={TI}} l=s %7lO{qm֠QTEp.[[Ʊ7~@qg\zȑ󼩎sjV{o=6.̯긔,kV״zFc:9b*HSJ!I|OU.wcxV IDAT5P`qnp<"K) P .2_ɴ"= *KBowš2,ڒ x;!Hw}pv@'>g#b*iyj|ݨq܈qȈ0ePsZ16}&LmN:VU22Q>!ˑ% %өL*RTs]X[0'Y,샌ݸb ~ʡ}3>ٯ-s{}ZՕd~S&:\S7CCg9pX r_Y\n%)x ,急,e) p\r1-Dy A+Z+ִ;KKF0GB;scn'pWCā͑#Qutmg[RpxodLK-cHP3N|!eJ@JBkX6jKQs-vb?xa"i;`]EfdH7g!T JސN!S/Hy,$퉹tNdH 4hb(R*Lm)CgLc5vƸ7I%G0l-Mpi+yI() iՔ7̉)X|MY[1EG114 ݯ8Ȍeb '@:wX{A'+ 'P ]P:X^Bs[Ca͝.#_9@j۰ې=!VDʘ=ɿOͳxX% z!0ȿs d@RU aO U@5[k~6)!C1] ~~Yxne?Ş&rnivIiw1W6 *5LYjV XAw}F[?g`׭Fy&,u_ kJ)B.#źC+F(ٰKbw~U֢ԜfǎOf"}Z)EV|}zM\aO( <5b? lRb j_,غyYAqS+j;@_w ﰦt/ {HW29 !&(,[&@c iH^8@)hh)c0!\u?`j 0(5x61IcG[2w{)y( k6:'cagtcoT;c:%lJX5J@8e4T-K)0,R177 Ƥ&FSlIhRZ 琎IT=cbע,bc>:5=`}٨~N).2! @ݱK# M6#c\ntP}!h'<UԜ6Xor-luڪ{JI\W=̓m9v::>[G~>^Ѽ,e) pC"z3)\Hւ'hEp$1 f &c'ht%UIA&1!}a969[Zz%=l=cT* t2,DޏkfSV)s#0vKR}5&Z} y3S}a1CN||Z00VTMbuB}x]NF͋|.>5&sJ9c-~7:C[3$b^sbRQl'cjj@=!eSpnf8~<ؚHGsJ-1it ~\g(ΟGxᳲt(/ .]Ǚ}sq\RcD#@蔴?[n3|+Aud^xoT#P)p -0 i;̿UfP߂8(7JҬr|: GQ,Q3!쌡n J {آ+a! Pb}aJ9W}?F>6eiv7HwO5ŬS;Oc3)h(qC Fulhj=<-SrYoWok+cc 9Q[~v&-ЩI#ΙA( ڭ_cM>+7ܲt`^+m/a(Jߥ,e)KY)G?,'xQdivcܯ >r ?njwVD89Br@f35<|} v|9$TtFJ2-SrO5ClXhR0cI*pQHTQ𬜱1$TX'}Tgm&ZotjOQR؆:tl\1eJR@pHr; J|h1 \U|Kho,R,븘T<;9"Qi2.1k0ylj;8p ƺwթ9U C8%T?PkqȇA 23X_$YEVKQ j)76eRkm DO s,ĽoJpoy)j37MYcM=Mt1&$#{f)CX;S'YgOccPKRE1Lj=`DZzn< ]fL`#,<NQE=5XR`A4꺊qDdH@b%@c+;`auzsw㉛Uj ڪL%R,Xd46"T2Y`"_6h-'BYn;.p᥍b L,e oau aw# +ZVy0)QDF -yǤT'őY2v &dT&c} ]:@Zr73lL޷~n8&sm],bjsvk}ykybgOޞlF}&MДR>3{l_\f.Xn<bT.LPVJAɔ,tNԧ`J?Kc!@h} %?mt"UD{g4=l1[, .;Gm㬏;ͱMHtJ঄G7-ƘQcR8~p*pq̡hdOSӧ<[G8aO'NЃ <Ҹks8PmnN3߂ ~\-z~+%HdB1RpV iD Lʧs<:Iy8(x_)KƔhy=S57lڈp qL!t')vBYb2T63N[glS *])BV1&21}zOY=R'[ܦ=kD@\7eD1d."wcc74<lb?}W%J(4NM5\44V%rm`V9wաk3V^yo+*4F2w[` ;5 )hB,eZ21/@/kT:aOitj|$KYl杴\cԝZ E&0q_UDMd<5DrV`Y 3q[ޅՃƬvHv.(}HF{nj8܆]X{)Ns+ur7 P\Rw v w} S$a T$wnd{P8#=8vli[zys' _W @ AM@5sMggK49#^9wޕ|g:6/31i1˝e^Mhk6"dH}CkTifÍigf#;ÜNnW9!,w{U2^*rih[~SpH2kC}6l㬚Hr/US@$\tR{Yv`cM}Dclo[rhˆx*`b AyߘҠYb`H5ۜ}`l]+#Zp]HQ)e[8G&(;`^s9W.m WpYCva9P;[@qy`RLŬv]MYo_m~i-,8~7_[|w+~8z;·{*x 8im42K:sTń]=^m`cu1P ʹz@huPA*]<ͅ?l/8o6wW=[`\%цVi,2)FN VwHV;B;½0ƪLp0Է bQ/Y:YJ)FeCD1qd9a"ag;,s캳JߘۮG&>fǵw*00~WpPX :9`;^;xIfQ$1?*՗WBJ cWlC䞵LYǙ|%+ź$`/(T5#wQ>5[vsĂ1GL/\\cY:Ye^K%3= CM߯k- @UUfzx|{{|ŝm߷čJ eoZLWE<覮RvT!c"}\U d\du ݕ{7꾺N]BЭE}+> m/&]锒 1`gpVK.T ؃mȕJa2]!OX];nFyqiʛXS8SZ7-ҳHYFA *-sRU @-ް[]bEKLQ(Ԥc!Kvӈ~c֋ysQKu땏+[Um8^\gBT.[A` BXЌkE*qRXV^pZ8H7M@IJ)D -L)(-F&mjsUڵ. qݘV6{V%b V8xKia.R^7sI a-J8/YiJ}" 7SgVLQ$JPIq5ĔQ  vUH b8eJa%I{*0  b csF:vn.92g0B:j]~ }Nx \WB` su\b׌kDI0(hIf`{!xjGi)k77+ٍ5c/s9Fun8\ s` EA˘ %b.XijUxjR&@O[Uih9'C6ǬZV Qׅz+J˼Q҈THAI_m)u߉-/$9`gLJ&A[/Vd1=j BZlUr"2nSɕPH\5¿st%@|Na~N /Yѝ9`9K9ڻ@Byc70SkdPy2ldde3<ǘKYRu'۽[eO]abal 9Gh|xC=$'I(a ,:ɠR`qca]LSc+Ag>*!rqw.CuW2XG]=FU &)F\#V 1k^Ќ0 duƄ"2PkEshLpJLFNOM:Qm,=52J} h0Q`$<;Wc-Y2OJ_έ jLl)eiKo~Zuݮ;υ/sIW%:UauեVS#E᭍Jf>61JegKBa>Cp ,S[?7|+{Mp oZF&Ş@vkscgh@5Ϟ=C3@kSґBq NcL=П;V;.n}+X?%r8.CKv]V?|Kb))-:Ƚ ւAAZ dj)5Jh p:思ͮR )SPFKkq8ɚ]:2>{)X|:DKz1N!1Z'}p`!%ض J>/O@EPQcj3&1F[bׅ`HD >:hB*2jv(qz1w1%Z)zWRl\F^12Ht6c+5_%b*ΰ}P+AU5(g0Je^ryͱspp%X`ݹA~Y YyKan\ħR> KΤ,W9#f祜¹[m c_pCh_?+?p!{lhh1&؜`4R^]ݻr! -59!r0뱑֝fel$@3q|l+VBHqt;e*ތ e8ŀs/} JNDZhgiɹ֒A$3%-2'd2mAxC֩ К5Q* b4 \sZe<6XIed/)H`qވ濴ɸ/++F){$sN+1nbߑ\z֊lO5W*gʞ DKuvfb;fnHUqFp ap8N/AqLm\ 'pyjxG8p$7'jJ0az}i,+;.:6Tu15l9\a&6ϾjL]Ԕb\R.oߏ?3?G׾ws{;+H>W~o5Hi1, sZksFYyTyC\V9rl}派ήm{4 \^^; decY  EisI鼗*~+Ռ,Qm+tQTФ-J~-J r_ck]Ǝ/g*6ҥv$3́1!S.l$0¥[Xe" @C$KIhsi+笓sH:]1DaXD)-)uug[%Ay! M쯃~Bˆ c+m=c7]9ʊ.Ko=R!)ʼn2P8lZ텂dD#m+mcsX5.PpJ1h& 0JްvH3MlEBǘ@aKtgŮA/Xa}u+h d=l|o,[p.r6ރU ҹ>gpOX_^py Պ d^s\Mڎ-iSc999.}7`T( O3^RpO]ռORV%| ˋ/'G5ѐ&@8Mhh/WHqMZ\a^Ǟx, S{,MCܪPv2^1\6c(V&K8]5t.,'O!zޝ -XIj\l=a,.|W+. 4417ka[^ʹswBcR\Kd hO`xShyk70ɓskğa>祗^{_?9S^8GmYX8\TFj4O8jmˏ򉏳c(rh8X+.\{yx뭷_Çz>|H8Ufd-PZ:]J8) ^톗җX$A8N|ކ+up$b 9(iH3Gy!L ciΝq./ӓPGåནDOKYR+ 8?s_){mV[W~/xO.#qy./.0!2+ mڨpSַ+3lPশs褮p8fx&o_y㍯k;9{li/|.3^3z>sԹ?N#~ dO xG^:a7)Mt[ 3{Mx^B\%7AWokgppvѩ֡0TO\'ϡ5H0lz> 04mBn=W*x>;S,bR s+V WE!< 7~~;WKez|=ek?~| KoʻV/Ý`|v`.ca/Dx>9lT"t_}1|Wx]KéOLGrJprw*x>|π nV9{n?Wnsn[n|>h_:ʨXU;w6@ɣKokM~Y7ᒪr|^nn~W_Zw}"VU+喲,Wp~n"G"Q??O}[oeIQhP*ѐf[lh1UXhh20@w=/ _7wrن+hy6^^8sy,(+`.Kpݡ|} /_:׬o|>^^ cUɸ,TA8pKg1 X!IZN \(Os/z̹Kq;GE,I_'n" Q|x#<7^owm# S# Qn6p\n `v hwO$zd.]j1'Qsw ?dpcpϿ^·|Ꮎ5 ^^A :m:{ ,6]XMe|eoUǏ ;v_u80 O|\_ ^sst= ,}61XwRH6 C>x#Dl(=Dg#g%ǨvGYH5|wkRPw SrfP1]2W88/?-WWv:|><6vTD H>{qt=h""v"R;__oyf;%0Lb!ZMڎNvchuZ3M͘s$)[:$-*֖dV>zE΅qh>b雯#Ε/V?⚆-t DN1 p-l>–q|C_Jqt(qIu2Oq. F=Y9j- ceҷyj+```{8x D9.yP,`Tbww~ Ƃ.L!PtWA_5^fm^`xE8ᶱ'{˻f_~Ej|ݣ >?cg6O\C'߻xtk wN鴳O`<#?P.-ۓK|VV4]AvJ^'_[KXeni6M TU14Gf>YהeiUM15 BiSD`@~9ar{Iz6&8Y29*w=bUVO4N4Iy9Op)OwFYtD_*نAӋ4CHhZӎ\P #fUC5aSYPE2> ܃FC$Q⑶IIEFU iUEQ,>ly==)Yw+6,n5I0Q}]f r!\ұeBKINJf.NoC/Y9UA} x}o oZQX^pɎێ;qx|?^p|8Ȋ Yp' >17A>8ܣ6wm,{'CPTW0ETz IDATtz1Iz0y_PL._x_̳lߧA ue 22<,wk)epI/kye56;auJ_wtO.z"Y&6%\6|l'̯2Ȁh.ܥVKkڲ34~>-7؜ڶG/Ȕ-zTYwZAUm\Ÿׄ |=0eH<46 p?|7o/cxG3%_apor KFL`7/?'03, M՗9%b-36*b^mXw-m9>3iX뵢,u $G)D!^`ZILm$fxZaѠOAz>\  O4Np47”F4fXD$n2B =H"۴0jPҘAh!(BƐ$3ane$M)AxuIӰhJr1-5y<"qڻZ@dH1s9EۡbMDMGDp@~ q\uG`јOwCC\DE+Y.y,% WMfZZt]RZ<s.|kQnuGU{'ԺfFL!;=i`v AW N=h, H2A"=R.P\{J~af-; \ TbnưZ11b5`Mv%L~=]`@ 8}OftM⚎7,b۾"5a9`n`Q;g?Q&l/:`cn!'n{# EXɔz A^e9b Ab+%**b\nEpoY"~+v[C/iŌ")rM1(x]p ^Ȫ V[ð6a] *clZۂibW.0RbLCmr`c%\\\rtt:eDbb)$ꤵNaii!~TDhbo8JSA;ơCc>P CP>~MJxRE]WF뎲,y|,95]YGDQDSk W'K1gCyg$3 vencxx0JYIy4{Wf[)\]91. HVm[Ds۶V%h#jivq|>^eIi4HF F(8&I/_r $Y wO>88I#ҿ`d4M5mRUh{%Bu|Gk@ C1 ✛xl_y3윺Ix.y||۷oݒ@c46hUVص6}{Vv2+G!q0lmwkx~Pc#qgB+(/LR&cP5ƂC: 0!f Lo 2r;GG)I= X -woes1G \\UmV{de)VMĒ)=u5XȽ `:kY Z } 8 /L~` әh@⪰^] ^C[W:)`kvSsYw;{K5 [{6q \ ;wޗf(ڧ1c ]4 ͖fMQhD!P] )Q1( 3^W_}A 믗"M廻9]0klV|#^ T 4 FfaS}_7o?1 bEB1ßM~rKKa|ntcם֋v.j6ܞwH%꺵 {P3@̾ ]M\ @o^iJO_,stX>qkVglsxtsnu[Qa/sz׵}5 4Y3 -&HȨHoX^I޴]c/Pi (Lڊ.hG^ɗ8SK{&<۫ 3ЗLcNvZxC5VR'lbc^*@!diՐwGC_ZŚs5Ơ,KVlanRuBUU{\- ނDXI*F9ggg\]]qs}t2%R,1MLr88pW?~,)D;,##F>sbqdi?䈢4TSJѴ UU"DUfLF̹5*J)7,F1nQMD)C&KuM30pe٥!A`)]揀bHGJMakר=-\̰vrɰ.,4w=\Ca}*GcX"oB` 臾) L:@y(N$Ҽ"sA3z=jL `~>cf1M,("i@5ꖚ;4Ä+"rxp{D>=(2m}'z0} pó+}-ze2YXPE6 @d8ZlWltz=ގcx6-z9[_G_Ă;̆\U pMcWmsgkgk]` yt^/ |mK-,W{=>;FRaȄ AD"YmE>(#M<[>_ gnAj_:ں6u *ieigaLc1!X638%׉e1BJSw32n5m錤# b!': mWZl+Br$Z~}f٠0EζecZS%EUKQ FC{h-֖Y4MW9֘ c^z 0xǒxq'xOcAaUUљ r;4f}X-Er>}@^FM|dk-H;B9ShRa,*)hn ^od"b0`Aip0勗eJ}6Jѭ(E[LTŸ+#sf7NqD_逕]c2XiJILEBCC!{%pE䯴NlZBUCJD cc x6mrOYi(huxgF^4CY mpۦ$0{g0KpV"HMM8^P+g#R"A P0B?@A7$Hyw ?yd&5|Qn2-k9l#Q~S! {zx9.pd$pϮ?^144ڍ|SX`Uo7n~"rZǞcmE>Fo3H઀m+e9Y]VVG]VfU61^DH_LL,cNJPP9m›_2QԖ[QjKڧq[].e)d#-`@s^c1VM:Mcs>܌| !si;T7枋򖻤mii))b"4a+SlI~]B<Ƈ2d*g\xlȳg-_3kv"C[Arջ;/ OS5t UI5 4Ȩxo)e[$IhٌK. {i(54N4N*t&;w8m3V?&m4Smka<%""tydRV-A7eS߱X̙L&g d$@s=Q[F3A,6DQD!+Q T *HZ, 0;̖=hj* EBCzv4ps_tѲi;%ܜ}ҫIl=w r'.| h Eޞ5 |,pzWA2N!xփJN.*g4Ef`> bOb: $$IWU~F` bNI85]4sԓ~jJKe(jO `g)rcY ne( `: 6nݳpHǙw]X|9=P竳Kc\ՙYrc G(2ڪ Xr2sloi\`K7efE,[Z\cthZQRС( hزpzS[oSGPkP,w G /",py62 e:ۧXk>&#Tٌes@d 2i`шL2V v1#li@11+ Sw)v>9eEm !775ϯj6Mά:h6%bXPQ MA3h[ EQP)}TJ$$#C`0`<syyd2nY=pii 8+eFJC8zr04 NS:863o˃iHc̞)'ؾl:P+FQ^/2DzN4eh!XcqB cbHUG:z,+V{ޮY`d:a8+Ek.ƂO2ϐ_[27%<73.xma@݃hsqrc喊Xfva!K--Kx`)~*3 xg8Ƀ:qswE`7vVh?#җ"C9i h%k5  mۡi q#"v 1@;g RG@6f5WW ; 7 (4B:U qYEQk|g8T'٬7~ CJ(v;8Oy˗gx1# Q3:c/ @$(gq6?_Cii$ )㞎p?~*S"R2NLS<*'. :F21m)Q%nKih8b0p3 3Q˫(g5QtKFC9# t!KP/lJ Z9o ZA[<ТMGG':hh]LĖ~*R[!@Z#1 C!`zcXV@YXto6lˆ{$1v1{4(T7yp97ó4(#zRgB@B#mPZtSi͆?Ma\_a7,z*f 鴋 TZcum̙>N`Hط>97ZT ]ȀLLr3|γF IDAT _s!--$LͰ 1:GCIKUD#K]G&[[lut#̰c뷰\KV; Δż-H3S '5 4 $9HA܀RUׄ I[..~ngIBe ]ױn)iLuI]z6UMMVwGQLf38eqv -Iڶ3?ex4N4N@ Y'ZQ~?SBGA`bf!h'Sϒ*ii?ܓ$qrHSs'!Q$e4 5ٙ\+拚hQqI4!dErl6b2a<se5/o0AKR έjA.QU˻֖L,P lHJK<3|Z[Fggpuw RE#U9=]30GAmOw4`@e.Hic hLeE#XIۯQ$8ʘjOHg'H:1@AoML7{2`.аcD KGɥ>M8t@ɐpyy(ؗ?³vM7j_.a/}c^E}*-05=hE{K`|IonǨ 0z x?-}_el[D <<]'mcdĻjMrg+I7:x9^蕁.;eoxSL hm/]ccΗn=*2g›'tHsЗ^فҶ)e]2/`g* q\S9YW0)+vt]Ge<ʌ߶-wK6eGJM Cm͢p@YW:c(@^RXm Clʋc>\ۂ7z׹I$#z:gkvˆznkT#Z,Yv;֮(Hi@F$$dYpqq`0pP+iLsS ?|qq,>R(hSE cfgvA^D2bDQ}3L1-a+ūW+nnnxuuL\[@XIlXuym,a66^!8熃$܋}Q "X_N)q5 8&ҞAW$v\,dQ~)GrW@m+ r}˼*󯳁ӜkCVt(ա5d ަ@n Wܵ@y&+ƸnC7p% d#M=pSYl+-sGӴc6q}}Ϲ'?KtՏ088p>ď|GFե2 s7MnO=ڄWW g4Y#/y=A)s6еm5J*0H9L K*׷"Ę3(Hmk)ƚ#55k{÷[?bh ra=ƌ*|Cc %G~&Q8$Ɔ%)#Έ>vag/IJ.INoQV% [;-7sX4vZy5l5ykxcllaɎUl->#R!uCj lj(pHn ' H#N $J:ZGy3Ęn8ϙySzhiuLkp0QT3p~~γg={d2;z'ks$syqqR3)QPA$r!$N{G)EhSijۇ"K^~fq ZWnMc4m'HpXB "$BHFJ8/ŜA[miB۷7r_̐/v0WrH ֶ-M٘&5xR1BΤ{qN94|!hYS:p441 u^LC5jS#=$X[MmB[ԛ&9{}7m1oX9ߙ)Dˀb:nk÷ C"4,I,úWaAvTY`IbML\fAw0à hS:o`1DbkAʂC"U`r[nܱ 1&{(gG1D C펣yXeI~&)X,vNؓC#F $*1mG|II)u}qλnj,KdfYSאub-All^8P= I0G> !5w +jtZ ƽuȾ1++\._􊖆z:rۥ3;\@=,=@; Ϲ~͇Iۢ 1{f߽Yr~~N;ٰ^oX,,KۣJ Z QƫWOnx%dYnmX5p_:<QJi 8?h>ryX<<<^5ZY=r!dj*R*{FMx9_~%/^`r!rУ?>FQD~ T=8pcCMO X׵e_lv*Cȡ #4*tC$181ДQr0 &~ҏH)~š8TWU=Ε=^xta2v(:B:H^'  \ƞB:൲kQ(tD  ?c`-ϰʱFPRBo#ՉU}WW51S@)ŀh1&gQ~ T&Ƚ$2$g1٦qb@Z旀RjKgٳ^fV(8 l~&X uα.vRjRDF+bj Hi\#t$0M`9*(EKbG :iw֚ Ě@0՜^21No)زkZ{0#bRTUv+iJXTUEUIw9OQ} *$a2q~~$Fdi~mےxgp/Rk}O4N4NPDڃ_jZ[32HP ѡ( 5>Mabeg3|wTgHE$`p{e=eKxZC4MQJQ%q3K8GsDQh42Yޗ˗kr-A C5 JURzWv-sxCk c@rPȷsg\Ÿt7@KlXO$Q6~$JTTUZ1L \ Me:Bɢn:Ӏb̓66MLϚeU1Ѱޔk ֩'ۣE>>y_%|_֯vφ_.N){=Э(4;=l IG}5F6u|g"(kxgz}/,ڸ @830 _t6|v̓8!=&֟&4L]!_Z==nb[?#2T<%"HsV=.Zí; (Y^͡Pg ݓ/O,i}_Wn^#ʌ  Ön?>\FXThjJ+^[B-j $w f)r* ^- s_: NFNVK"(^߼l7;{S3فy3!du8;Eؖ+[Zcx ^c T,7Ӛ0<0l%gM 'ۋlɣB :Dɵa$ fyj5f\JL=WvLl"TmAHA("f/'\^0ɞ%iQQUyN4{4/V= {˲d0uJ})Rj?iiiQW=b 0y${ߤ] 1(ztoV)^/`8r}}#|l6nC J P{0jjЙ 5- !Ab̖SXo4oV[< 3 & ^B2ڤc[U6(jI 15qPy\/esIrSjkgWÙĽhb{ ZA&{_cȚGLL{o:!~xtRVYU5`qÎuOEHZAbc߻̱tN(`Rh'֚OUv2t` `JPuKMV 6F!8dz4M w+a-GFGږun+U啺߾Rw3ldd+ 4;}ea_&x!ΝY4Ui 'BF̃}[kdo "& 5 RMXKvpH)*ǩ{Cc {Xٶ7f_ZUݷq`!AA DJ ;n{5~ su[Z{UlsPGD5ig6oȲUoⴊȲjh`\Q><]N{>a$pp8ijv jnԂHw~.204Ȉ;6]c۱v,'ϲߐ*w߼ooK]!ASDzCJ7~>1~|35ϟnnn5z+hU|A5gb<# _xJhbn%*d,D1*E' CzjC"+Q bOCg_!Q%,HcVQM~ӵcbRmLegOhpv Ț22JPj )SULF[8y}_[XF4}))3.ISZu`ł~ qBy%lo[Ru6Nd $_b`4g_8a0I11Ј=yS+i %㣂}!KH929A&'8FsuЊb$ \п=%C49ZR{ LU44$.6|pwM凌6#jIYQG=|i$c8=;e6ǬyY Z(X.{V!u ioaHC)xl~y}۱jm,K:o={B4m_3Vϟ+65f\v;uU1+>Yn[=g_4Bgv eEЪ}= 1h+VK}3b+1UJn`7\3N wG ꬐n2-B("ձz<.<(@FϬE|k;t=V[xҿ٫V5tTfN2҆3x6DS0  ʐMO#RRnٲkjR|ʧ6圮K@۞LfC'x8F,}jI!mMߵ 1 0O2|,5<-W|^v)zC\X.{R 2UaB!M]|xtb`>imIw)iXU͆+8f0i@4RGcNNN|pٌ4sϭo.Fz>ŋz<ύ[0tUF'''''I3*VlknY\.y ׼~eQTUEJQ$9iʌJKvҀN*# O>הUCzg#Qt,Z(v /C w{phː;-;@⩲ebCNس tnSQ9w[̑A81v&vom=u][47?w9QNpg2ðLD&K W%iK4ˋEl`ߖq $=X }|nlNz{\׾ylnk5C[7Z+Bg`ѮX}{k0֨ѦB*>ܤv֊6k5yL e>1 djv9ODŽۓ01Vt˥-]_R>2ezzm;>kLЉyKlz1J= uZEv@g$b``K"gDᓵM0H3~Bĺ$/Z5ܼb8~Bl at?W/g=J k9>~Ɋ0M)EY=-6WUI1c:2ϋNZc|[yitǏɲܳ\.oK":}( nnnnj'<$SFL''AT}B=A{{__a)ʶՔ$ITVpvlvڷKy:o~;^npUU9www|oruu˗}(ȲHӔ||>┡7kvՊݲ憗/_o~ZA K#kaDˋd H%#khc6i7$&[R@mZ>VT6wBCkU:,B R\\ ]^hS͢/,iQ:@#8`3<ݮ4@>9YTb['0^. `AT2A l44u_p[|b&e Ck۾`! Pwt߷JtkbYOAFWSfhDi&ҴC41[ݏ/C}*Tź1y*uNi )Z9զ>-LT*k#3!,1,4́H4jft\u^,vqbn=uO`]@ҀU+6>0K`;.='g:EuWJvXФіz X CـS...b=ژ[B!ݳ^s<( LiB )XKKzN8??Çp}}MQ.*- \KX94 !Z;HӔNOO9;?c4$awy TW;]f{nQJX hY<B0L(˒Kʲ{ehkA3&ثI QPYnd=V[Ul6fhJo@FQw[j5Oh|=Vl*khؘ%9r 5U7t.|XfbK~@S~ /! bL- ޼7oǡLCl 0I}};׌wk@/[XDn23Ġ8<7S_+-HESx<7yȨHjI!=D Lj!! ɖFcp LTc`ٻ*.Zt^*,{S{*>J 6ãDx@hO=!N>֥LhhhP(Isp6hD6`t– 7Fi]6L ⳡ yA@UʼnR 7 d-CQH($L&e y9U,X5y !u; !AJsiJAd“'s|O(s`KIH5Uٮ= {vyC:UUxf Wx d̗j䴟vl6UUqvv[{.PGqc;c;cTx?KqqLYl[%׼|_g^DZf!<"7PFCdCJI/1 9?;' |Ⓩ?艶NJUҠ,F0k:!/8=$=@d^& 6 W5[8Y WOHYi5C]/xv oWf׉~*Hz:KLтzr$BCX4zby\h7ЪTFuDIBØ5 ƥJge& Y*(7o`[ga.XPPZfNؼBW+4*/;,',k'qw' Vk|v3+ԢęD) bzz*uts;2U!ACLbR4DSЇEh&Eg@To֫ž6Ope9u$0<9An &ESط1~ÉK{wVH69o2ડG#̌W3{1mBhkA,#[JzTHz4`&Pj|075*(r6[x\YM7TF(d mhEE({uL97773NU=]#nM힮7 M QL&v IzIkaGkګ5BLP$UԀ~ڧ 3a`[(4n[6|VUgsWiˎ=w؎؎8;j]vQA#DrNYدoq<ܺf=i2I9gvZ퐲A BxTYJB zFuۭN*p )k뛌_2w)Ib!D߰ߒk6ךE}r' m7;OS4b}-zt5cMhkzoj}x:de+{ҸuLE-9)y{14b**.h+LB5Wм֌gG~9OOOǒ-Yk*j`vlbH3M̖MSn RXQk  9R2zf۾_v ,vwYa$t6jَ")JJ6G408M^HŽFJ/OQ%h^'h}3[E!;ep:Ox0}-p=I8\EfaHE:ݷÐ8ZK+c!? ۱۱n/[.9?;씳真ES[TqJcI{QTkyI1|FRUN"j5WWaR&>i1uUSݎ/_/^pwGQXߘ THBI z=P{i@Mc.~˗lwI}PdF(`ycqYrd2atRpH?׬;7YͭF@Ob]Z`ƱesFtR61t ]殥t\V>0n:Kh$TT4(R56얂[$ZLi IW-lހN3s+MR IR9!V'W*hnb-Â.].KֵbE„2F{?: jY$2İIv57`怒O:2lfgc+-TfQl 0Zy9@{k>k;)j0I{;`g)%+!Ňcs̗f[jh͉` 6xpǖ})Z>jãa`@z>D,vkmc:_ RƮCn8< Jd$)K7;zMjx|2bowwwC>zコNPg)ù 4ED)LVY՜?'O_Sf)a xC$-{C8 f3NNNx-ySU5'Z[[VYZ7`>3 cSb+hcAoz5Ϲ0ֻXE~>9vl/^'?}Gnh8SWʿov?1wV)RÕ(T||#=iFzlYͦv7$ISWWڳoZ-5x .<H5JA𼜓c SdZq#~x=?}'sunh*O[-B|c~UЦu_v.Dnt韾C CZpi˄ֿyt,ڳQ(NZ lD! ~Q)͚AÑƇ*W]hsNaGWX!gAMƖR\xD#]^̌.ǹANI0yu>۾p1Dv \;dVG%9¡'c3&^16d_-CgյvK)5Wz+ PH֒^D:bgqtl?rg0Z]4B1()Dxxxdxx$fhR\GCg~ 8pwK#zdԄT} "k$LC#:;?puLkOV}Wa5OCR Bv-YUF2l-Klv \m=P.$ L&2SԢDHQ] ֫ />+W`z#HSW& #f<ѣ\__Zl,u^}R*H]5Uj?!ٔC's4,;Xr-װ5.sh2Z[UU@α۱}n?O+?~QAfWWWzuŇ/Y=|p3?XhpN)D~_\\#>#65ndдF!|:2\U_|ɫW:}5VUU( /r[D H2d>K_*MlJl4􂬑!9>+/!SQ z DJ4!zg 0l'ao/%]|8“ H.-APw];LU,]eP"`uaBLmTH]U]qVQkQ|fosBdTmItEMh"|_N&f}# +xV,f}?LXXLW8G+.[6J9 w0Va}g1my3|4 RqOm4DU~#Z:UE#)P3MB)3:q\} _t޷xC^͉((JÍ(l'>FgUIJ0@ONI`dm[w fpfíKI:@Dkl,#fHC=&yy%dY} Qa;&aUswUNFf_(NMT>TւgE.(rP咺Y>/6E4T锇Cx:v@N>fE|BF=9?b>khZ@צeNcRQuF۱۱GI_ig`0K_zfq@L;snjQ$(8??KOU7u䶩?9"FCULJTJ"$aH-VbD}A/bij}ï|KGZ}pH|w F|bL)(V^BHJ^Q.8FjAQ Ot4fBt{C5x't᮸K~w@C>mDSa+R-Y&fl]Y'c`v-%;(L/D{@Z ItcK\EՒjMh`UL@ih(:b ')hf@Ƞ֊.h}[MGZ|:low :hǪa?S98'6N4iblŇBJPHf- dL!cęwvЅs9>h8 ![ft@ْx!hmsHǎZ%>a gxt5>u{x)r.ϓO;p@rNLpz @nmlB9zU ksۇ5l:A^PȜB]h`@ rXEx ir/)-SxGFHlO)!X,\\\0JWgdTiÐ~dv^O[xҹ=gSM{TCYvC"z7Z 5vl3?/_ٟ'ڟk-@{$/[|u-w}|lzn|~z|d%[e9HJJUIu4MC5D)#4 h %Iш|3fz.%DMYjU8'): Kx)5=6P_&z]ŚEDK<Z{V&sMtvYy`v xjV=C,ĭ& HEp\e'm)\| :9\-K:Ca"p^$8Gᬳ EТ7a쥥'Q)@3xLʦ1Uhŭ ik*9uqMPH:?Phn-c)v>C:Y0A{>T[hLuGXoe"2M*f ,VUվRXu-[-[hHK(@)'ZdVitK%ZhSIp4d2080:.S}Y4M ZpXhAPZ`!AU5vl^_?__[S*ƿ{wOmnYo*NZ& -5Aګ<Ŵn/ҢA8$),8\Èb=H`9<}kcWr"Zs. W[AnR@2ܛ?n֐%;÷)}fOtVR=,T)2yAus7 -M ^jmtJ*6tE- 9A\t zخO[uKwg6u3y[;3xXkQZAc:k\QMnU{mG$l93/eƣ){H٠dEIGH_k|kDlJ =d`h#ok9&< noC$IV0-ݳiTQ)ɔlt6%MSн)8~6 azX2 |Zh}iGxlvl+Z~pďׯ8=]{~oww`OW8Hii*GإnDd:H1ѐׯ^49 t_ ylrx(YTd4RDxR* Ds9rv>'\> _җ2=K4B41Qj.#!eA7k݋~ "{sy{c*k#j'(E4 1! = 00^}q ')<>/?<36Ѯ+FeHK~ŷ%u z t/2E{=xxO猟rF<,lsN @+0Dۄ첂5jt*t =!u#}$IΦ,=ϿlJ(ɫw}!J)j!S(jljхIWw &! EQJQdYAo`ɼ|׿)햻6å=֯k/g"oMO&$'>ް!''i/uiH)M},tl|>'˲3o}(<4MEQPI $I:vlvl;hEp05=}&>~8 0N_Őkf}Ҧv ԨP{vŵ@C$<0LIoD  )>鳧s& I^htV\Aȷ@j϶%!gggdM pӛW׼yw:7<-2iJ%a#`4~Fۦ b]?6bp£swﴞ:Fȶ)vv: WHꪬv,\SsDYhHd|b.&ͻ̬U '0S1Y/M<&(1Z@jN!t)ͦ.qs7A-{SXװFAdӇ謁܃>}E09_w悭?sn Z z#`w.hQ~! Vz=|K_р yn)db2F|Ws#R | EX,Fc`U޿VT*j7 {w0ve ҦZ_lCSjC]wQGQW$$I“'Ox5ݮreRm~I$ ^oizlvl[XU679?;{ Ϟ_GxЦOMgD/>i(,xv/Jsssê(t¤!Ze8O=& \ɄIhM4YE`מr[}XŘY6:`-tm=$AE;(`2U kP@)0(Vļ`I oaʠE`!n t(6OhڄE;V"k{t)6U89l NoҠ=\Y0v2Zj͌0Ak-M-4r@S3xwrF'O"f,7=5k4+vMA 'pP9e~lu9THtL!9swA{8}ٖ ,FG1HŽ6MAeY+#c^Dn(I<~'O0=HSrMef3!nooY.X L@//<``"lZ 邷4Mf в,w=-2`>svv M)=L}^O[zv;쬵z)˒rIQ-hBiukgud؎s ?2ܿ~o_ ?ަQ|gl i;eulZE?a/g40~|rbYswX.v;?d|;8=9;lGhz>ZŐq0f{]6Hp[˂PR3?'$ɉ}Dp=D;[RI0L8?@ժ6Gߤ<IӔOF-U 6dYƦªښr۷o)x6Eѧ_Ead3PȎ 8ZjUX\! h~g0lY<י1z H&IƒxҬDZpzTU=c;p_~?_~~OHg]'! x@4U `4'EE2 <H>q6JA]C]WeI]׭J ,l6sssnke 1ZhbŅ.] Ð8[j޳q#<̾$˗l6޼yfiv筨N쌋 qˎZVM=c;c./+?ynnnI??/}qlaz߽4-FB[U 3=(v`Ӂ =X|J,.8wM󜻊UwOvPU-@*va8aXȾϡ8Xgc᜷Uى}~:ais,` gZAK)a9=F9߱۲'@^As׷pJ !3ޙQ]GWwO=$$\VnAV٠Yq]#*^(ⱲxQY9u0 L! k2WO_uzd|߯W3UO=u={L9͑l֎EM vSO?=9i҄:%ؙڱts'iˤQ̨z"HZdnvkJOdsT;',BFhy+pL.mяft|8~5,3|e*B4 àߗu9,ƶj^T)*\.ǂu]bӦM\-[P,̦ėrtB@GGӦMr\l]TQmZZrWU1*O?ׯg<EnˤINUgR UnA #W^CR:?G"W5Zyks+“%zظ0A',Ea:#C 2vPwWQw3*˟N,RYtMC[3uVFP 1~C|BāgkO%Xҭv. 5WԵ#_4p7ChG5i_#]|B~|T!c%\sa3j*XGJ$yj̄;h!1ƦM(XAy?^lf,h -aB!L4|ӧOkA*QiWT NZF__7nd֭l۶-.֪Jww73f`֬YtwwmЭ[$a c^M_6m!u75mkmM ';z(05 L IDATbP.H><.$ >̛ ;)y8 ,ˡZU-Z86 c1jĖ3+ )b&LgE5dUƜ*nU&Cx@πop|2 ȴGul*au&ᠰ+j)%Lm퓴(B2`Iq>V­/= }YsʊJX1_F fZhS"ɒ #$(tweyTqh[; D#oxPV^墸M5m=z7p0QHmf׏2<= }x \p| @&dS9&10Ekn!RwUet]Vn& tXipӪ\0P+$>JUsT/a%SmLxvq ,8`v]'vU0`gÎDf>T@nvfǁ/SBSϛի8ըn;raӦMl 6lcddrȈqFb֭J%*JleTՆ\.t"u.7:o27fqfJⴖʍXP7J&k B6EiTpa%ftP': $g^ ~rbQI;iN3n|辧j {(0lڴkGR3.J%THU"r`FOO ,-qB%nx˻JOԣg?Ub͛YnׯX,Uzzzbk̙3ikk#8~RAa-: Q8,n!V1uZnѸH}guZb`{zP|+k1.d-ˎ᦮>\'LSs"X$∲:֢\ϊɀ96 cKlD%15vӴ5Sw}MdSTON.s,BNJ@3`.v6媑hOی6ΧWq(-cwRUO␴R:l4aX[n mfBz6Wa&[H4GYkKڊ^XTS焗Fm!vִc1zleՄ ^k u]8 >8>3aԬ0]p[tk通rYUI#sI$[#7ըSDiY0pϫ~œJH@ur~>WnTa鎰6(ˉjAĢMYtQ,L4NJgg'---sgG*qs%X*lذ~uֱqFjnzzzXp!tuuűa0, u%THApj.@*5(y5zxv~A]1d''tm4!$᷅cXs V.F}UFNip(B){)U5ԊF7rKh8 cd$;v>PU5`HZbۦN }v~JTst=ݪ8$ˆ薥Fn0 C:`zN6%DFH G#%>vU|jp5;lm;H)9T E2^VIVЍuEk56Ewhd;j:C HhBJ%i0C|k ~:Pl*nibI>!f3uQM&%H=odu;i ^s}PQ-53)Znr،:L F`#x^Lf,+1,8{j#OO JAOY5Uc.QʍVΙ3sCWWi.@r'A4hpp~6n͛0DOOO\=^dVJr QH9sW~!ģmWN ŗGI.MѠQ<3j0bjQԢMjo f1J3z_~R7PpCZ0Q5Ю@UYhPFF1M!ieMtJP)]lm >Ġا-^裁ӅTEϕhdEiQ^sSoU#H9hJ-C.TH}cKũmsP-sRs KKI*GCUs0ڀ^B4Mֶv >\wM쳺0hE}NjCwHx_2_#Yo"Y3ڕՄe0!f6e*ӨFMB։{t1S(r^;ԯ G%Ŏ8IѨK+TjUPY (%ջ*Nooo"#vk=j8OS/g=UO}b1gchmTG%;;;qoKA(X(0pp`i#`&t(^Ql; VjF+?XuPs}"CU)brFJ ׀ʬ=/rؑFjhPiT$[HL`>I- EU 3SIF!hTBuRFGDL Lj?h 2[Ӭ0R/4dHqЭ*nuVt\8 Tg`$N&4EN#tUmMIw%Uzmô- ~L[ Pɦׅ>1OVxc2~\ַjoVkPH*j[4e3,<+LeE-Ʉ7[۠)Tב nq{9:=ԭu=M@(^z)|L(UTU|lQBUr9c9sp!0o 2фsJD*ɴi/@{{;,Z3gM]8Jl :\rl½n2Xv,OFJ)c~` 7R Q*0U:FGKZ61FկjЏ̲n4c)(m9POئ-A%ډ>V̉njZ3ԓP+3*gBZ( a(n3*0vUJJS@])=?%RyL8j;+{UCw>%0k#m_S5xC 6$],kvKJcpXӶڵQ/&-0Ӈ`(j ,A@Ɔv18h8[^ko& LҳfR!T?FiI Hݍnۦ6OX0=&AlmbƉDZ7CO\g9#/`kl aDU7NhYVXRȨb2h4C8~גU52vNYGυ F*L/\,Ƕ+vPxvttE>VOT !,iB˲( ضM[[3f`֬Y̚5s2m4Z[[imm3٨'Qb^J$pӳA>a{{;###qFU4i\.NS(5#kZ"PҘ,;%GA815[3D8 ) -F{kίv3 ~3ccMauX+ F#T=#r= G`8j` " ˠ.kVbd:sJ%L2O~UF}T~dK{ԉT Ov=Od&شT̜FW-~,ʍ ڐa Pd4!nk^3q}tZu?Em1yeA05<=E"5z~YapsR^KN{rj}AJc_Թcjb;qR=ھXDVVYuk #gn$"mP1{=(Y^8GׁLh Mi8lŠ5EXlwD}r.u]T*Dle2D-ɓ'3k,W[[[ꪒΨlf]\EX0*Sh:L&C64M*W,cS(bQA[[[얪Jn+![/}ߥr>;g;UV\.G60d2qɺKoШjFA81M-Ev}KO8Ш''\}F"2[q05xe[ݙ+5´NpNIو2aC.hof#րƵ |E̤qg[@JJc=9Uܥ:6$-n֯j"W%jT~%]zegl48捄]I6JMZ6Sz"%3ݎ:UPקWku8aՊ\>v7mpƽI婌{S46b0 rӧOgpp0Q3Qq-,ˢ)ͱpS ̩zzHHu~fN q2Wz_1~(ž Q8XƽdiT84bDĪfRmtaٱ>-*:?ޞZeOճBxcjX% dƞjxcvӳMТďԩzjhkk#CڨDc*j6ATڎ2e*SeQ.8~/n..AD8o}TFiMsT?Ar^SKQ5<L&ԀCji[A+gAAA㡋AAAbQAAA(   pAAAFQVd1AAA'=e"8HAAAg){W7[%n)NZMyZZ̷]ʤSN(pZTf*Z "2:wt{, h _<97w+ו&dK_ɇ6ﲞ2#KogcF7\–GWJKs39>a34>r% 8]K:G[GAߖE,q ?Qb(>1ģO9fK~KL ,Gϟ#/vhήL-4W*a S ͬ}, 2:.8/hFU:SY:E /om?ӧag,<73[w.)sgw_I݅|f?`p~ Qd*l8& avX}>k6֤3AТV+cY}(< ˻a"'>jW-G9HA)l: RnX>]RǭI W4*=5R)U\b%=eDAAAAҟFa&vxANxt _ ȉU]Q9؂   %vK   ]v⸗6\ |66'ˑAAg'b|O<9{A8`j|;e%ĉ=#W~*V^T*Tqiom ٿ'1 c Zr7򲗽vNҥKټysbO=g}6wq|߫9\,ʅ  Rtb =Mj3eŔ9(K.yf^WqG//\zG?s;M7K.{;N;lN;lA*^O5zj\]Us6~|'3;ߞbÛ.!(y}/|G@gGgگcomB?A.AQ850q͒E {ei/ZU5EǢݴYAH|?}֮[72 _ o|[9gqŗp}+O9o6g{>crO<N>nw,=N9~,m|\g>Q^ظ1[=wq㭗3\ ǖ^~ddcw^Xfɒ%wo۵p]9%[g׭7- HA]xY{z&(^Lq8*.M4(N&c3_z9ײ`Q̘>k?IrgE;+._|]|Fw2]̘>}m뿾q3?> r×ʻ}XG^I|[cG?Lޫ}<<< 7u]Ggg'|+g>üye\ץ~}cw֭K, 0?:F6lsUhj|Qs<:̘>].AOoWh=\0`hս|żһ%߱cW{۷90^XW^x[m*g <+9cҋ«^x\/UꝹG~:3ٞnRK̛3k>pEwW^{: 쒷\]?u3wڿW]uǙ;C?}ѯڒ|<"?(bIm̜6rhkEOxۋu\,yäôJC\RFR49S8SXēuG>ʇ%z_?300־m=v6lO~rHYSS6vɝ6u*\RNog4~}\e]ƒ%KXjgY`?0ͣmK03eʔ=:窫p=SN:t#.\H{[[ޏi|એի9A8j+/ wAAB4"ܳ EN3.dzx1˿C{KE< ppqaYw?zJ-SN<.Sy߇ݑd[JA08cP[Ť .WZ(8X|9G}47?͌3Xf g]v==tmmiyfZӷm\.j-2w(KXAi{ao>畉'Njc/pnj1rpP1eJ7H0ej`455a0Zd;gwi-3=^OvyVa9oK< ,h3Mz{{9n2wy'z*{My_9sۋiWW i2w0A&帓߽;W}ZQYG4qဤT.O}_<+>,/lx~p;D]] y<_z*~φ xǹ袋;w.vWfٲe<<쳬]믿_W,Ye˖f ~i~ru}h`% ɓ&%KrǏ⋖=Y.Aэ _~xsEݽ /}mQ>-y+˿E }ÖW*g 1w&r?ˇ%z zgr;M7 ^rܱy?=VN;$>wO]y.d)'O✳Ί3n+w7~|y/;gIO<]nvdcF7`˯;W6lObݷvkfcضaXAa/odQ'] l룭Sڢqj.xAx:QS)Z: Z$yhPO5TPwU[YLAA{[/wM   qbHbAAAZ7ck!QA c`"(  jlTqk%WUAAAS? LփbG}*A8@e I_ї֢G>c LxsbBܑpԵa`{aW9h=p(phCoOHg'Jv,aBcG֪*1##=Јf]6j1}[}}0L_VHQA88[jܹm I =n{dXd`K0aS < >|nyK_Ѷ#=Љv7Y48_~߰0eZ$ `ﱺV_CI4   ڜ0&(HUF;MU    G<n"ncIENDB`drawing-0.4.11/help/C/figures/screenshot_selection.png000066400000000000000000007165371362211111700227540ustar00rootroot00000000000000PNG  IHDR+Q}"zTXtRaw profile type exifxڭirc^a9 x^j")H~&%vwuV&Cuş^w^G?y't|~~^:>}.Ks5L^/?뮭7_IOkD_7Jzٍ7|mnϹp]<)$'%FFקJ{%~kpiѷi_P~y=}|iD!~]g}-}ձ\kRߦBc9{[o~E6S5F 90 }]Ol|q^W&1-"x9~KxzJʕ0X0734V卷fỸ #7Idr0=Ӿ;}I Y$na4'ϩi/ƲkW;&@=7Xy\)-DF"˗qRgNMUtF_sHJ^wd]<7%[&.lcy'ZӋiQЙnm{u;Q>w$~绣+3b1\5)|s,1B'iļf25 JF<I)538)ۃɕ@XYc}(pǶ A#\ljvѢtUӼF+̾˻z`01pkrbL8? 6B-ֈp="x#+jD6˶̇-Ij*w>UףYb>W)s 8ɕ&1)l^xldnBr{Z,fVEd/(Z5V6[pHeߟvl I.VZП; ^Y8X *c=2WO%314{Έ4+o2n&?)yֆ{ouO;瞉iB.~kn;aIaeri28P%&UnYWc \kFtB"iE}ܘ< e"\]‹g&H_,B9II\  Aw,Oz}htH9*#)PP` Jv+̜8E&5~+‹(,!m/8Ȱa, lHid(DJ=ܫt8BcI*5XbX.kCh/qJUc5fd@cI)U,j.rjN ϔ%\DS|y Nω 6ط!CsjOHU3_4j+YTGx*mHFyQ!S_APw}3Y}qUUy @AO ),%Fjo[ Uŭ!U"/%k]H䄔$QO:Ojy`׸@=>H5:3(P҂LW>ٮ vdD НAІy; F/L j8'/4UtW)4XTdGLBAX:2RХ' 0) oIb4,y $?p#fC*R)2Gr.Z  ;7yQ=sm .+r r L9y$%1+m\!nޡeȐV<|+>FٳX6Ir[‹ &tN'@ULp mY Pb`t/i,janO*A^R _< (!_[6kĊ- TC#'D\ M0 CN`z.h:`:EZ)@f.p4*qolqBP@X`i?b'fP]`b @ } qECy4LS@*t vgA8:1%+ Fꨑc"8C4PH= 6ٜxE\z?JS l9F* [ب/E)Z'.!rPv#h+"XQmze)p+I0P |L-iD =}?Ewgs_Y xY}&)M, `DQZ+5=..* F'5cmj2Ԛ3w .8E-'@,_"}P%F1 Ө04p?Cz;9$YtS8]ⰰqMsH=4Jp)PmMVJ{Cp-0Q y,ATptOE߂#ϯtG9Cn3DI cIYT1w1@JE^cGx5PX΂$2+؂Qe%qϕTRJQnT?e0f%r,DةN `ח،j)BSKH)αU!:YDMM ^P[W==!Hu~ȓԉ:J:AAl"PՇ@t@P&H-eMMJÚęai'1,4Ó G;U(3[ (A5 Q0jhMWʍ65 ubkdL뵓7g HLj!@p PT֬P/yd2آښ1Ғ,bJw~^LU;%w kMA# Rw yfԝ]dR^Q-J`xW7Y~@'9\ջ(\|"q^ɉM2gÖFAFrasHDt2">GhMG j\Cm̺+ .^GEB5HHd_QӼeTVKES z}Wʍ|CJf&;#E.R&j# Z1NHK)]V͵V==TWPBP_Yj9S<8ARvXTԼzE|6e,)JUi:m:=Q1~+8Fڻ:tƳwqhbG!9עDX}:)zl?x1Y'oi8DAzv.2O- =ҝPB_@$t2 pƬhkv莴T>F5ܭ0L\P' I hTc͒޲P iڡ8a# K39Pwd,Xΐ`jG6(l5w)>.]a_ 'hȊomEjSV{D0(}G/-#;+k,vsaH`3hc5a=!$l 8|2+`{况ShBb5#M KDɵݵ_;בP+ {ѦR CM $aVRP,Ľî@8$㥟I" .ڿiXA7RKwYZB1;@-;XL/Pg QԾ* l&nKPѠ|AT7Z*$Y幡B@@h0&&N ̵s}iX]'tI/D_q0Li;6kpY"z*a|[h`5?Wa~fO0أ!yecw4@#_E\*mb$0\8u[8.0XFB#K;3Ӑ(ȚGPBAC ?HoD|i*{M:ɲ'r`kr,$ =ȸU]X.Bzgdj-B\n.nD~-=("8 "4:4w3;+th>u0daֺ,ƑܔHo_A>xyOGC^UᬁlEQ)SO?,̓U/E8Y[P0I™HA@9$6% Yyݾ׆ay:ԷhЇ uaWXE3b&fJAXwYGՑ%3h 3p)6Y XY[ɉ^ԦSZ:",UQ>Pt Eo/9E2G 9P ΡOd5;+sTM6GN9XUĈvΐiuR%#~bDqxJqKi#/e oՓqgĸz8*?$ܯҒbQ $H{I])xGYug͚۫ͤm]Is+ xxj 4 ވ"2BEU`` m"a#p3P穩.ypTڪu8;ox{7S3닎Ї cv䅺[G0(}: bh{'|֡9ۈQMmicLi^0VNuIڂ>;ěۀ{L-FΚ [yOQ +DH@wkhY&[Ќe*?5'S N!ƊVd `3@ 5ɊdŚb^D>ŨJQB(\͖^ `@;uH)'&Ήl2N2#^M@M-ka" m5 5ͨjm[ TBi~ :k:-!-X@L2sFƨS(SNpeH=Q7ff zd]gMs$\ﺟkۅO֮`}l[OWt7:#>0` u}x88d l8sI4 !I|SLu=7 eV#7>Feџbz3^__]^$%|t.{W :QOEEޅ`9A ?['A߹tMpd+v|w3Y>?AWv3tԡ ?t/W@B" *]`}2j[`UQm'z5~__^k٦v-"v6uQ(@yH+*G}2#𕑜KI <:)SHb:(OZ1|*P&_οe}vWJߒ$+HC%B(h ޴Z1na Γ,f" tKB살P˨T/Ixr:hд9%V2U6yvg>P>ǎȸ]t? F>2R:Z G?!~]wOFk2?^Qv:7BHy4g |c?M:jS74浫N >ׯ ξtt^`ǁw(Nݖv.\jcnmm1fS⮁ђ4tN Iyj?|CaA~- owfwB"=tdP}Гtfv;ۋtI9}TfcxG,%)G$\M CtXMx_67Fpf#LPsԙ 1-eѰOP +Pv Tu-#a9h7zIZb;1j tzYYɱ/qqwV긺F4Ѧ GLQ>ዹBumՅVPbLԈN6=)?T&#' \%l;ߎi,ES2KMCvtE"mjD}~ΓK01?#_EqK>WQv޵Z~^_<__-޿''s$dtΣ9YbעnE՞.Y器v3YxaU&m\ >\CNGS,Uɕ|}DDi/;DFFti3)j'Pnr 3&?i*y#^xww{oirƖLBbKGD pHYs.#.#x?vtIME  :$$r IDATxyEUgsfL2Y2Y@VAAM\pEQUQ^{]U([žNٷ3gze9g2LBf~|ݧꩪWS#J@޿@wm;.|(/%khhhhhhhhhhhhT ?6.pNbdʀ7g{oJ$aH! 4mN*5׿wl=XhS) U~o%SCdilB)1!0Lb8e$é'6lx|o0+DO;чq:t544444444444! xWիWR!hı4ave34F,njDwix'`T򋟿qLx*1TTk4444444 =U_ڶE$I.;bi//ȎClۺ'lx_ĽBșb(4ИRDqSE܋zNEDs[Z l`hZ!sJuR\6Cfxͨ@9BL3BH46`ퟰ"eI~ jhhhhhh44=j{S)<pR}&mfLy󩪮03mˢ[7#0#EtTmGg1+^{;@?m0Fd1)i:T3[)m0i,F%q[HdY,]r ̤9BP^Q!KdsڞIeZjAUu 9≄Ȥ44brXQy4tF|²,EcS+tQ3GVS Ӥt*5J^?ScY6?^z9;v{-joK/?{ J啝JyG>? ,pᥗ\;vLbK/瓟„e /=GgSEg=t +,bqV?8\J7T$GM%=T=I/Cieq,r-.bbβИRbHqTWL$]8缚l.c+WaH ;]Z㿾>z~|7P7Nsc+$rk_E=A~yF{~^{NO~v8{K֫g#8z2|eTUVy1Mu{ץ۶g7]r=s46m5: ɤ߰o`yAn) |˟G'߻gqdɘR_oz3^&KGGΫnF8˗/~p?3?cR%000EA]?NR)o#ѫ++X߻g\}ջGoOow'P*m~G;c'߻gl۾c4443! 8bQWUQl!Vns}WgÖ,_"55ӲA1uFFGjP*E" P___0iHAs@#랖eD,Wޞ[dJ֬]+Q)cXy3NלW*,w(0ht9hhh:֣9M8 ;Q;vWs% _wwN3(H#uGkZ'rИX0?8Xy-*4EcOHZ {%H.Vv\$ku۸z:65!hjlUἲ[$>hޱ2,O>-M'q~ۮx7g{|dg}"E-ŹTnU?N{{;VW¡ކ3QkժGu]!^\W_s-_Uf͚5-?iֽqA?'s_뚰44KxUbO1֭+6υwN[k+>~xu$oϝsj<_oǟ#ߛ6_-c/ķHeqLd- ^1Gɪᓟ'8mwL&oȥz}bUPN|ݷ\ƆO}xE=堡q0ə߼Ỽa#L_?O= 5SdOyYg뺉zNE-6N'sM7qi0ZƷ5Vw,߼FrYK!.RC>X~,Z[OnZ.ke݋9Cʥtw+Ls1Gk2O]\p.K.avǽtuwu]|ڏqԲov;(e7X. snnK0 yٛ1M?T*n[ڷFz}ڏqԑnǮ7TWdBRW7@8*{bs. HǶ-|CWs!IŘ0_ssf3LKX W-؟}mG }ްn#S(Ga6,>l>cO8p|ettuqɛ6v(~՜곸ƍ?aE2ß{ul3N;^q%_駞>MijGG.]xqͳWVcB2Ny9*w1!py݁dZ^ڰyI&&ˎY1)e MUUZe糫fV~jh sȧ>a/[[u~q.̟ʷIÊcCC㠡s,/ÜwK^y.fs9> }1㚏孿e k}vzg$u]jpp)_lظ>O _:7omyhͿ'no\#?#g|\ŧ> |K׷1ͩ0QdYlB孿7tk|^ rͧ>K6iιk" ,ʷ_I'eVX$]]]yu#O\QCC *8<)67pŋh9hhhL_DL ;^\*,Z4yuS/λK_=֖f=lկ(x7Q?`7|cװiV>寁Mu%PuǑ!jMIUUeѲc0g=Kz9dq=W~*wyc}|?χ>} ZQo{ y}h2&{S_F$}J2reƾ&ㅵk~} A԰s.]5]4͝˶leV6Ǒ˖Ҿm;pk>ූeBt, ^W[KYYtfRܒdS]M1q#}){Qv.m`y|߻.#ɼl7^Ͽ}j6l̒E ߡ:87ro''sҥr$DJ8 b``_̚U/:K/)%s{-M,|NHCszsWz gu&ϭ^nO~濸﹗g~fr~gq:>(K?yN~a[?IS˶#+o|o' y9y3N=eԹnvy 8n[~ q\ LѠ?S{b}?ƽlJǸ~u].nؼe~O_o/K;,4λ&QCCOO-zvJAJ~e尬.s$ir?cxxw:t{hlhC|<>L\wCsEjBzˉU?8ھs_[mJ6o_2TUwҾL7^r1㯴o>Oo%8k `5_xmm46̦sARC 048fSxjdj<9կSNcxxhBf37pՕ+l6}PQI÷ikmkIg!|K糫W߸Z.|y4jhhhhhh7I϶-afP(^xEF$n nz^X= ~p `>]4^q7Fۼyo~DOJN?N\q-{Da/nf9qaJ s) P\ַH::;B7رڴoz|EVj)\&;f2UrRJFB uޅ}5/=={$3 ΝN7rI'mXg{w\Yu 򿿻3N;'Vb󪳂+37~SNzK,~虧}﮿{=6lĒE\q'u̾|_O\hl˗s-?'jyIO<~߿tuul^"+.{+e8صY5\K9d`soN;P|/hH$!KsՕ☣ĶV&=lVzQU5fl?-}/~-o6 `">`Ɓ#CsԱo~{mێe[kmS~3N=+y.-=V'}w"O>}ǣK.cWE?H[7(J ,BO(aKxoBJG9ضM6x ?_浴0e=4^zz1C{I]eGvr}YTVpٺtUl|F~ ]W{9 _jhLdNL&yeo+ށ ːB/8Иg>ZԸt\c[vIs˭gOy,M,VGs6+{ ~H1vwty44B4گı&~_8z"/v*sRr 'V2Ɔ9c~fwnU"Y͟;:P67sKݬZxEm Ԏ'E7jM3NO0M]BksS!g#5¶/[J4(E ;U<5't|!"XOXA<c')O&xiyGqE2߾9aTWWWFEyy-l۱?H$Ǣ(O ?xGQ jj+\To{[̓=X+B$2 /{{wQ{(arV[/1ɐfIRI?tww344 ضl6Wo% QBς|Rg6e0 ʈbqH$L&eٔSUUEuu5eeeA{|Zh5 [y,F}O})$PB @86[_چD$`f;lI#/qPRqܕR(Ɛm#z(ww?g i-RA᲍EvP3rC4uǤrmyQ Y1tgTH)FD,ma1B 4k⨡1݈b"~Fa诶vuu{n줣^z{{r"bh4VUUQVVF$ \L}bK_!,l6X6-bxxL&===XE:&DH&DQjjjhhhf Ȥ_ J1U,ׯo;P(!Rb``8& .cwc#G (acQc_pS<\_((R cҲ, ig6SʒAZ\i8ah`]vQQQAmm- ~7ҏ^IRb{nҾLdp` [7380HF9+G:9YwI b*:j⨡0'| O)E* ul۶zzzظq#T* ZTWWndjBǃ>꿴]x%}DrF<Ų,, o.#ˑdmT*`^d줻~z{{yIӔ1g7oS]]XIm "+ rdR0bZxވ.E(KaJȥ2$p$Fz!@R<0P gQ)V%T)@" R4G|0Rq4cvr][}| Oz.djdtǗONEgS3ˢ2 uߝZZ, G{{89bTq8)wfh:SHI4=7\/J# xss -BRŃFyRRUUeYtuuQYYIYYJ 7x&eYjjj0 vĢϙCeeҳ"fHe)//gxx/Xx##AEj+ǩOXG wvuuyfvɦMؼy3455L2 ,QQQA"Kyyy` GV, 0SXb{CEAnuJ/X$}T*E* 2o< mc֯_ٳ?>mmm477Byyy#"pgbr@A]EFN`e("2Jԉ`bbئ 4 ?hrB#1|eZFtM\+'"#Cq1T^Y, /~Y ۣUD}W9F .r)F\<'nUm qPL]P|FL9.te#؋?"NZ4W <\Uyr AP^{>+"P!Q[*> \MG8JB8}Z+>K>rl߱]vhhh`֬Y0UDX^~>?)k14 7A3&<q,\l6MγNHg\b4\l6R]]]Q7kX,N줯/X,++#JaimmE],]]]O&uVjjj`](CRQYA$%aHI$#YQNX4FFaǎڽH4BUe%Ms'\,a<ݹ5ȞFbޢ5_j$&ӇH]Rٶmk׮矧=[hiiJx_ѷ0nbM=>c+ƥXa5=7pdT*X!@@188Ȏ;ؾ};6m"1{l.]ʡJ[[f $rp{{.aD\`&1Ǐ[rB"!F6yBzn2&0r\*wMU=RI8&}^ O)#g 5uU=R!2tÀg=Mxw]%X_U9*raeJS NA ()ו/ H!0I <m 0B!c.Ŭkl`zT)+ $s>TG2$R6Rd JQ[[KEyyF"Xނ\4Og28nO0 LĶ,l"a $H&B0NC:F)DƮ gY޽4 65Q__O.c׮]ع3 HĢ8e2oz(x`OcۼyI#qqeΜ95~*)pe2z{{ 8lٲ,Xܹsٱs'ttv2w\$z{$ڽX;;TVW1B;M)*>w;qo8=|#KFQCCC &}+l]vdqڵ8DϟOccc@=~ ?MXW Kސ=];2 s*X߾,  顽Ny饗{YdI:w\>?hȸr|yFc(!3a)M4b63]q- nSvB|WA "lvzʕ!ͼqND?RK So#$u S~Л!ba I7"LA$`;t#jx爯) 8"Y!'LL+q#Z)@B=x\t0ELBW#BW,6,XE<'H^o·aQjE”HKE8v.y8a2aʢ1+(O$Eaqҙ qVאcnv1(/~6!' WhSS , kNlD. @l:m۰mZ\Nb(g1;H ؈mtttGy<0=QQ]os۷S[[K[[ܹ3pe Hgf!ò,hoo'NcHa[7o. n3AHA49 sf4N*> {GƁ M8"ҾJ!<{FG n[ 8͛yxٴibշ0644H$\uc YRj"w3h1׾bbIÿq@w]AV李A:;;ٽ{7:oﻔTB%`3GGy cյ$,Yk ɎmY55D@bHči.4#Q 0U$.69fphL&ˬH #P$ *H/C(mFa*Œa+jUԢ V̪*[\΢,AC\fi xb1gYds9rH4BZjHnPB˱Φini&LDU@fHg3,t&C&AJYuuA4ww, p04#H̻nH)M ݿm&h,8~"鈉alL.8drY[)|DXY$Q][CvwLaHSoNEEc70Lm"ey[C8!Mp +Ð&~#Hxф AXwCFY<%\8׬a…Ģїy̙3/~3ZИG?By'yٸq#hf/^̢E=w~DpDƅ{K)ʼnepv:/*9r*wvFFSWWGOO;v젲FΝˮ]زe 7okY k*k/OJc@9٤H$A.tg(iFhiifNl{x57O;KZlܼ)vtEwNaF(('XEW.â~n ic's*CJ6TVVJ 148D,F.%׺ x=>~T E71q2 S3{@*WX\\'F8Q㣵&0Hv;/ZS,ۛ[.'Q!D*j<*ڏX]Y5B0??O'4)3\.Se %6%b[ (F (p32Hr]9D9.aKPRLV'BFˣ&bBk%nټaed<:arl uC(wp<8hOFSVVr5C&RRT)KllTb'VXs\FK8,B0ZWϽ&1yZy b<޹9~7oNVE8nƣnQo6Pkg)) sP{)Kqϸq\H)OX $HM`O` 89Τ?{ܯ*|.^^̧;vxEgWn_\x)%sss9r9Ǿ}r"3'gv-[9Z&m5j'vi63-닋yǙdaaWs%^z%~a?Pt414c =Ov(-'(Fi _H\(5'#DtڬWys(G1{AFG|w'zК}W^~'s]wlrLNr³i3M!h|-O;ᡇ"SV,-.q׸{ʗ8}/i|#jӧS 7k<'p3.{߃E^ewY]@ht K" pd# (!Qš$ndefv`eirQ%Ft0gLFh zKw=8vӿlp]7}AK!h4aҒq,VZ-FFFr4MR2;;+W$h48tNK.Aw tn}d0Y\Z$.մbomVc2EQmTĪeq=L6PZkơ&&&iV +3o|RdfTU* \W}25=իWi4 CMf0::(?j*B qciiWl6븮*סP* FT*,ܼIyt|YQ9(X*"bzf!rkSS#eSchhu9d22,y8z(RD:>1ATJz5t <{ʠ4?"9T㏿E~>Ͻgs+/jiLNO~g7lllP(_wgcwb?g+ |;ᩧW^pnNs36ctpPϿƭ! ,;Z|"gXrr9auvv6|g|2'O}/{ob`v9Ȉ>8RXF Q ؜:#Z#m6] -B"9FC({pk +uf:.sqN=xE'Kz]|_qqu2;>4#C%bKg0<<{Ng}kט;23*muEF/bfv+Ws'FU=wW_e(1DІy5V)qT>Zbd0B]L; z,A +nVQ.g@= 5 ]9JI?7[f:[O6exx(T*t:DFo;&>T`uu5r9H9F%&&&p]UZR ̵k,,,$~CCCƝZݻQVV{޽LMMft+YzO6䀌tѪ?g+w8qb:ؾfAfrr}ǔtOAFQ(ܼy/fmm-ُSSS,,,pVbz\$p]:<ƘJ2(qq)(LLLd(Jy睌OLbhhcǎ1N+8ezz: ft:"|>1 󘘘`ll qq]$ݻ7BcJ}TQوT(Oaw,IN=X]x7ч_~w,/t9uj.&߸qcuB~wf;v;@+Fϟ<3T*Ƹ8qsss0228mMf):k}9y|QXYYX,2==h~,--q=011A>aEiOic$$B}<ЊO^bظ$$B<&ǹ1<4/~??q׽wߤ֬r~M3*AyjG013N@p4N '+qs}r΃\x/~ ?p#w!?Gf%NN!R9d]R5!Rwݕ !77})CC'ה=6y|\|0n̞@|j2e "D´td;-Zc3&)Nx~>kO+Μ=9u߻~`umO|giZd?lwݱ;vm7l[qR X^^'駟W_edd{Ǐs=pRbLUAo7zYgql\>anܸA6M*Νŋߘ?G<Ǣ58 "41AjI(M52̀ B(бHK)Б`uyo}).^G?1&| A;d0ԊgWWW~:V#߿}̥KY0BrFyVWW͛\vd jJ%jal6QԣxBa&SS{_L? WJ癞frr:f5:qւhXʪdB%} qPq5Nˋ1KTϤ RJmO \-fu>gffx@KKK4M2 wqa,B0998LMM%R;#Mt2fuwRO>uqew_Xn#"9'ǓsH `o[x_g]ih~N3umFt*{v%ზ;xXQ"zdi)a-4#|_'@vX.c6]`zj€G)w=NK/?7M=z)f={ v?n׳},m7i~[\~bRׯ /|W_}}c:ur<2|HFh@j+dG!|z 8ʁD'X>g&@N+b*t㇮rǞ#u̿vjf g^z1F4 $\&P~qF e%sEd}ȩ,.24* N#cd<.Hё1(bdhe:-Z= Ҭ4:} _>,?33yHB)"BdZʫ/BX8UEiG##cM@D4 -$l8#!N'mA@իjc΄aZꮯ'k+ `lLRJBRaddYhٜ#2vC+t [JurY|Z-_R"c_ZZ5c?11WСCxgl.2>>*q1@'?hھM ͨg,2W^M&4b5fD{2 IDAT?S~iDln0fzWm4q]k_CM-VqkA_ڤ q$X*/5u6~%YV:f"AO(ϩ ">2tA]@֣(F`#pD;\e}b&yqZ51&E[,ʥVv\|> XݸyG|#3ݱ;vǛ l?O/|vyѣGa]@FVr5Hd2IVe2.\sM>1;;ȧl㹶-D$"d8yT>i¢EDh'SB(+ 2dYOpq/̰py'vhqՅuX"B"2aKg.̷!h., lZu~,oP_k?2tpudu:]Ѻ"1ZUY[[T*w^juT.X,e3gg{׶0@ϣM71n[yQݶi8Shw;vxÌT߂V?c=Ʒ-r?{/{ob3<<nߏi֑ d6u,JH6P(p9q6G8tPR|CG?۔M!qMd<ډ4YQ(!: Sw x3\:wJe!:g4ə_븞CeF *>?^=fX_!\x"&tɯ?I//d]#[!՛54 ] ;k+acc#NK2@?he6 ADXt<=M8D eTqM#՝HZF,,,j5V! Kh4T*ۭopSG"Rѱ1^y0jz"46ֲevKӡV@!0==C.G b)R*g^Ž0}wqux^i)( 81I}R[N?xgiӲA#+@Ŀc[X)߷eO/e'cIR5wt=<1Ӳ /D|M`JZ &ٻ tAG̘+brA\8IU7G5C A??S?Sݱ;vэ //}K\v{r X]v3=)murgF5-w{YzS壯ߛGH'bvxX,rʕnW_Ӭc?c5`Q12](MjQz.Ri°cr.]XUH$0 PZ#P0DDWB3َZaKid }}ZkEQTZHk͞={Vō7XZZP(055{H.%SJ%P)EݎzrlE:u"{cccu(bbb")ܸq#?sdx(n+gt:t:m# ƀl&CH$aFFGtB ffX^^f{̄1v%dLLL$FAZkTdsyJ"aCCeNMJ)$w<&W$n6 ۣ*:sMT*4oخnN#9)Isoѫ95#*xmh|N5I3@+%B<°{B*k,0'ftpo^/GB[AHiKr}4'ط#s߸םqdRLu ;uO}M?i~m;w'fदh?}/ݙ?ǤG,//SO,--q!ww QXT?e܂1 yDhux;A/'Ku 1;;lI{xFbÈ7yt]2 $RKU1#SF}+E@"Tl\AK\TaqXx9'ݿ˜Rǁ:o촉ZCHDyzӖ>HYHs<2>RieCtP0DґejJ*kab"miA^23ǡP($Z˗<}177ŋ{՚XpE### jT*1334뉳uaHhlF}3@6"fggY__g}}!}\ONN2<<Ç311A1~Hz $jSS. 8.uϴ̞ &ǽaRSE1W;J0J bwcEˤc Fj2͆1Y[:}o5TTm2[.6Yu"hMuME|3= ܽ1wh|K{ɟ~[nuMnܸ7_?iWw߿6k׮O#>N:ѣGIdd=6U(иI'mFktWœyHn:U!RI#22)8..-quxϻO}oۍF6q9lfw־;vxRJ._̗%x Rc|b|[ U1qߟյZ-.,ΝK_RJNfeL\<Çjd2-\.DZcǨVA'\._ҍ)5Ӌ&a6YF b/k5h7z?7̶a >=igH50eFGq^Ð( b\gR*Dd+%%2a7_j|?{Y{]#(@F]FĨ(y0%C}\G;`˄ZzWrS|A^.)%[fi]z3u 8(C3]ĹW[j>b<G%%~#6\.S.|v _2qw+`aa~|_'?<ص1dhhƯku0!4k\p!Zp҅Gk={EFu8@NMXZbl$edl2QQ,h4#r ߦ^222pɈqfpEO\.wߝ[M\vP#PhbBhI4NB eF( a8 ƵBwPVg&]WZ "LYz?Wɲz2UXƿƀ?mcnV# t3Kbt T#gr,^GBP(0==M>Ob"2'N}gjj*^r;_k9rHNG;N62oЂ P,вw{aҭ-eX.>tvuZM&Atqo\;,oM~PHtm:vvE"{Bd 2G&4@n)Ph%t#v=KdA$#Lg<6nYq+w5AW۝6s+q;63oiv-p.?յ5rLoa (\r/|_gzzw.y{PJ 1==ׯa[7J4r-twQM"Wڭ%SFd,Y4ci:j /db ,+,5DOݦVQ٠Ѩn5F;^ z_UG&"wS5q(YzYsV';{?B&Cg+R [XM.kW1ЙK =å*RLK_HV>׿.qoonC\.lni {B̳e}Q177'> N<^;ٳ( M654zO ЉٻKn$++#>4K&V7o&g`ϞZ#y}zz&%&ӛ뺌n;SRd@{xkKPW69.Zk?VmwS$:hXk0DBԴhImLubs I=4A a&@`޽ uH@Ke-*z"2Jl[1=Nve;[A^;m;пnuݱ;vHKZO<7x]w.ah4TJ?< r(LF((sA+WRDFPĉ㌌ 355EIdwqZg}qFFFz7.p+U\rx*F!#Ie?"rR T;v)w#ɒ}7 b¯+jE4$LnhkiZJ" ;7*Q!M&Hʮ*[%Vn'z r,ذpePZFi\?÷ I2IlL›T'̛&$A-o8g R_>V+Vy^b7jUj f-c0#t0ci5c x l&[z*222֚z~M'Ywݙ\wjt^[[a\.H6콙 vbޡ-qw*rA$,8mqy0ɓ'cɑuAlˍaa144F4Jʕ%J\}L?3 ]eCжxsϾq8a#@t&D_?2SJb;R[݇ .Nvp:0qwϨ\|ݱ;v<:L&7HϩSzJ)=$fl4-\%T*={/~LNNrԩd2S605'M !X]mL @I :4m"P*gԥS!J~پDhB%PLDG͗ `y/~ϣN+זֽt+#KuUcw7HZ{gc>>$L^Ze>}__೟,Ї^z,//}|;~?O>$x+<$&j5.]ľ}h6;w'xifff#nгr$AJIJ#<:Є <DHRHa Hi'ŖQ'wvxⲚzoZ6{4?Y^xwӧ[/}?Trv#.\ǾG?$ 䍌=~ARTu]cyyvYZZ駟ȑ# Q. !3334 NMqHrpi%(b*q$իW KI0LBڭ|ۺ9*JF:HXɸ/]i rr2JNC#9zh랝߼yW/311,?__|uO?=##|쟑!;1; o#/3s?Gu=~98^-099ѣGyZsw|'x;RF6G~GXXX{Nl6K>GAfbFƞ={x衇 _kkkÔG4up$0':f|>O6V!]f̤<W(x}?G++OOٟK^Mn\}}{|k_cii_+>F-_%~'~bӾio|eKN|Q~ gw׾5ٿ??3?yGqJ)g>oo/omנgyyGX^^fffO}S|G)v;T=2 wy'VN>}{woGtf *mrbb'O&r˗/y%|ߧn377Rsi C`nnq9|0J)fffq333"tJlR׍G\hxܹseNRJZ{aRannH|rkרu^~,ǏhtV1p=+W.sKZ-llC8?|O%?<3I4Cw]jsiC lmZN'F?cuv[pZf RRIb1S# \vIQ;,@VEQqB)D yrYHAwhEru#a{r "W!ka*t:Gh¸YmHU]ϣP(P*F_P'(8ah$nJ߿]anhG% ԯأr@eh 4ol֫(n `5ޙ^cw쎿v#}cUJc=?ѣGy衇8rR(6GQ).{47?/y!j69oɟ)yQ~'_z!KӸ+9j.qr]{oTRk$kddclO&dLx2 Lf, 2fKfdXLɀlǶll /ZK޷{yKWUWKrFǟkuW:[~y޻k(pl麯 KG/<iZgm_F]/q8k}>O|+R)[] Oo?1]}l78x=t__n8Ovt{ Rnhtvv288H2$100ӧyꩧs^a֒XE{{;6mB)ӧ㴶(S(E *M2d玝Y(@zqi:1 yg]@R P37;ZplrV?>D>?O.A\#๴lQ,wT\w·k-<,.G/K&ڴ^WWy !8v?8RJvͮ]rMV iYKqk_Wx'[Q︃={_Glܵ>=G.a]sww}xKܵ?ɽˣ_2k_B{ju{_PKٹkW|Liz{3_27w|A^;7:1rW_ PaG5}{H\}5k]tw۔'ロ/pM?Ժ5ضb͚5, qXf gΜZfN>ͳ>˵^Kggg #i4j^׆S.e2;vU;wQ) =.yJahJ0Ŵ8tM3::(w^u'O#l\W033,7n2VR$lc=H!R*Us?v ufvv6`l*ͭo\U Ab(-,PD.:;;qYdd*I.EwOwSiiFtmxE?˒9C,UےSbNK9gih4&{2p.~ÙeVtr]n+F)%bgy3gΰgvIWWW ]a`XjZ<  ~/f4:'?ɏ|sd7lK}@sk|}@+uxY矧sn<`g?lx׻VQ$:;'?vmmm8yoߵ\Qw@?k۶-~>}5k҃kyAٖ+dQN}+l k֬Ybd23<<̓O>Ɏ;fuMImed(e|IlB&P(cfqi\׍Z1t(HZ6r<Ùӧ1Jc /R*3gΰm6ۙСCL2448c  ;r4ƫTޓO2?;DZ#GƶmH$ y.ٳGOO/04t"Nońt*BH:.c|BFDZrM jҘH!?5F/N@u=g`dx驩1%LbI Ƕ,I y@4@fC!#V@JX>з۱c95ϫ+Hj<7גc2!1Bb,M6}؎Q ~Қd2H))8$]tyEZxXfnPc*ǬJZ ݯ1MPk`ܲ( Ng}4$6l`||uرc9rvsρ8x`H X8硔BJ뺌377#Z5tJ<p qј矧\f0`|?{l61BvBH4R(˲p],G n) ňrE^|L&`Aגd2-0ѭVT0663,hR d (=Qc F!ps0RaV\sID0,:FDVߡ6Ĩ T/=D&fZZk<~ XZB>O*$͒pY,ڹ0=ը梌&qΈrvڅ Ϸ>8?Z۟sisexPf$gф-B~9^%.,j:`k2 z[Z n^.7sX*ʸxO<{#*QhQԚpuV5Rslh nxG\__:t"|3?@fݺ}<ύ.9Í?|ortbG l߰/I:YZyRm_tNh.4]]]r9FGG9|0۷o[TXJ(BZT^@`U(_+|E;wh!L Tj[Z%pN6P~a$5@.Pj|W7p0X{~TX`]\S^"\#EjȈFc͠` HΡ@ s>D[r'_6].F͌,nx5@$lN 9P x*r0f()K$R)LX:?3(  TKEa4e$(QaΎs:2`B K` F tEwk\ #28` B0 J 9O²r~g[I$,ўBX˱fgQJёi,lǡ F|ZjJkP& 81|ͤXm`byh)Vp\*%;u^Ƃx9mⵁRb/퇾5j5.0(/|ZZ"(eۘ@ WX 5tL IDAT,ۮ1Wy4_K_9y{T,c#6Q2===8qCqM742JFz{i,PkLHc0Is YBmHu2j4 %ơŇ?)b#F6[ۭf`2DD4WSq~[CY;W( k= S;d ( LON1>:bu)˸*M²ɦMJ4Aı.i R5,&8$ lN& W$HUh1YB.k!%F,m !$l),\\Jj}y>TIXkT+:#,,F\Jd0B!Hm8i/qzKj/<敶S/+ a[ /WekMYLYeuh\mb,JQ d2SSST*rCb1:6!s97Hxj~t%֌Im%DBc"2<<or{8ϠrK>IGwB8KVu9s,@k͞ 'Ī_I`Ћ 7hOTPX oz|gFɄ*ׅr ק~E===tww3;; 'N_d||^|ߏkkEEqޠC(Q]CݺHRl4kk5A0bQ f)RkҴMjB5R"sR~s\.p_wьrRV?N_yXchJ177 ? (e[(sfx#PB9u d2dضD>n0 ja0X&k j$@U} "5ubM5"EcF@Oi -c <1ؾOU$(uV+acD"A±=?L{1Vi,,-Lwann?쪗vQZ$\*8qSSSK.c-tvvn[Y>۷7P֦[/xέѣ!Җl}J$cg0q,SS(vyF`Β\G'l( y bH!C-G:1d Ph{H!R l+vB04iD0'HѕH&ViYdض, l,vFb$¶ [Ì$jRiJE@{^6KV] RcqlcYqTR?hɒ-Za`|V  yf&ulRJR,=ut^FcX[.zM 9r?|' BJ5"?Qomu n__?cw~]h߾]V`,?euorbC2wo_Tk,ּͤrG>sw~=t:8r9t\.N)jsB@)@'3*ah˽VD{Fv4KO#BE!ATP>硕RPH8?7Gan\A.[ SD~LdNHR8MgvfjB2@JK- +JΒqTKFGh!P[:{5 ƬDȠN8io ,҆bWqitZ|-d`2̄dRXMURQ8P hX(+Q^͏e^̜I囗^c 8d%B\FN Ά+^Fk? `2zrWcnũ ҲT*峦\G;G q!:@*pKdT*=y`:qJy-HӬߴk@T*q1 |>6LS7.J&J(:??ϡC(\_h?W<,/]#ڧFL_2W9oR ЇZz{/~)>NPVIRM`GGeB022e~r=+F[gL 堭|"yy)Zm}v4c%u~ 5DzϣOzՖJ9vyF3ۚCk H)d(-NNELLQV}jW e] 1D"G*T8ccL9AVC uM B}RbKE0梨Kod|9a:sܛeR R6|33T=?|(z_V>X(q*":€"0$NJ-#rkJ$}^ʹJY-Klz\nIhY`B~Bd*wP5o)B%f7զVVU\СC<,,,vZn뭼HT/"`aa>غ 7JmW{;|ϝ 011Ƀ>NOmqϕIɎ_εbyK[দ1D&&&fif0:Q]]d fŴ`8-^j,C\4Qo7%2FQ]f+DWՋ@0J0˶fWh@hDX  JQAmVO-LmHX-4B`Qkh< -@oَNʞprBB= Vt00(8^P+mŌAw ϡMKD][JӋ޹ rqzj'xE W!N"ex !B~fjj׼5_b[ٰqJ:?L:mx!FFyoL&a4v~m,,,cq}133mFww7N⩧b[غe+/~9l;:v^u,K8N"&Bf)JXX,06Z~H)abb\.dž HR74IS w/:Yuz;tCCC|_u}۱C=m妵M h%QdfyfffN(Rq]-hl;@Ab]Mcp~9ot]14*( ٘$&"sf# ոgvShN 9+bkDE4u+Gկ`Pq+*w1$)XXXT*HII:"8(sB`[DzB&TPLhC@V֤Ii@8P~⭥1V<-Bi]uA R4qd;;` I,Ar)v$W+R T ;u2*$R) h?C̑Ve<޾B$D-JHrO٤J-WЩH^ԧPβ}NcӦlܸG1S*9t9[p-od`` =?#O> }kho-`,&~I:J:jˆ6&d%}d2lZ6pb8vabr3 tt0|}9 cc|Wo}vlL& 1p"0q k#ո`JJ%=JP`ݬYd2r==k O}l4d;~`WU;;7=?SעB)vAgg۲F@42 Td(н rT*U'ٍkl%UYOGY u2" ybC|R;k"Fu"Klssx\M#^n'aT*}X=۲}jRJ+n!R*q%DLJ)q]7۶M$Il(DK)?V"MZ5BUjŚ@L8/d:p|XXa$1jAXN&I86Z\ LҢ6UZeAHJRƗ>R)\=<'+2Zc+E\m6H%CU' zf 学0Ίer|㕞VpԶG ,3dc*]aM\喷`Y)<5}coGU>CNl+!iیk) s̙KhYVE(ki^- 2-˜o~v)x*r ײqsh~R)DHLu]fggLĀqRFʐo-:k6n1ثbU" b]`iX2ؤa-k6j8*4& 6>Y-^Tڭ1C\)FͶ 1%.v!kjKQMڦǵ )[.(.*rBab!O1'?3KanRH\u}2񹥴bɉ(XR`Il@ UẊm,K#1GFaR.Ws+~U*sQoFlh3BhE@cK%@lnq  CґS6J 3SV%vuёm#$H&$K>JyJ  *" y y\>ǫ} _Z+| \MDŽ1K hq 7oRDx,Ρ ȰFQEGJ[k;&[ߍ~Iv1uliaK mIRO9S"I[%ƆrB'YNafxч0n\4IJ_c`caF HTh[J$kI:ZAiN>G>s//?:t?񦷐~[TJ2>1N__ΒJصk裏211QGS /ke} FGGd2 W`vv)!>7ӹ{D -f/׮n~Nwwsu?'?y㉟y'u;gZX;ؽ{+7:;W.m4ڶM2D)E1$iJ^EͶjwڜYɁb52 R@ϱ-!YOu9e-ěj_UE&k&c#ક7:v>Q+mW+QfAM.H3"\!B SSLN{.\jDP8](#R,@d}DZ" rH%Ha! a;$%$X >0X2LKE#-kE(&0!<0F8MHiʐpԱ$  PQ\4#-ic)璴]mY$dI҉ɄC*at Q..PϓR,*hETd!?OT >3: 0eh7TGtm}Z,&Du[k붉I:>heke&`rͲuk.8^n)AV )(==sO=A2t(4S;`fbw= Sy˚G\c 33X3 0v荖)c*Z-b/lZG}02ICMLil:{ژ:K]M[g6wi /N)c Ѥ\@,"ԫ;\x8^n l;[hRa᡽"gԁ0r03|2l[:ykϱg9_J7Nrpvkw"d"YӾV @L5$5 ;v١#w91|Mlr /Nokd03nΌP%e%1<{,Bd2F5$8? EB* SSSxG.-NmZSTu^>h o}UҷyLNp[&WkG:Vr^4REuݺ:0j$.qҊ n\UkY IDATU  ׋\)& 4rѳg8= |) FɀFcjs^QBR!LKggg`>mmjrNLLO|޽{Ї~y~Cǹ[>){9o055ڵkiD1jϾ/:x;{λ_?OO|~i.H8lٲ\iBF-4c#ZaS6ѿ5e:%喁]\}P WzwW^W4[AɆcll4H D҉euhR" UW4(M !,-CGGGZ RBpp:vjIw1(#%20W`k;ɘ )f@ÄhrA&dvDgRbV˸^J ȅ )-XXS,b;y&L+; s"T*'7r ng;_E~~۪%/vtn"Xci*"sSy}{lX`Ӛxc/[7g_dw<̺v$pņ68;$aU9vo`Z Fy䡯qv RT(星RUq)>4-9K/8{-쾚[!vojmlT]bMwsY;0@ww7ҞqFGG7 lݺvzz(%3o^˿c-QL,;p731,,,VA"`ppêWw|[}{/fgS[w!s:p޷$32=?xt:ͦw_Oo|1|cӟ4xi.m߾t tod\k(1pI-/~m`IHӸ^H^5k6jnZ#d3[9rƽڵ5D"V0kcI y&'ǩJTe|?`iJDuQ*li ƒĆ$,l*E{6C6rd DzIX6 $IJl"L ,JA Yԏ9a]-ǖؖj+Ŀ0}TRZ ByBT`a~RaX`[L*I*ᐰ,$T22QV~ GbnJR kLOOrf4O1=9WNHTʕPT,<׈T>:8?l ::j|MuY\пZf=ѱ8}\<\7ط3ź" a~N X(K:{08;R,LHv_I&hKl߰v=L]O? R Nj#OOE+?sLySiZ>i.7=CrEO7YCU\,I.DZZt& R2Sȓe vA&,6o^^ꫯG\.WV1Hp:^*֡Dզ\KS vLjUVzvogou,nڶl _28vm]tw۔'ロ/pM?B5pW_.V* z+}{  R_=#<Ѓ׽=9ϰKn%}Ql޼n\Gckd"#q:AK!Rt.jB̽\x:ZJ.Ke-r`4w9N c|l DKJTJ#cŀG!iɠ1cX &2vdtўL2ITį)h4:H[#JDRAD;(!ATLULL+´΀PGMH#$"$`y |/(Q<|SHut`ْL:IG[R) rY)OW}/JĠNpL6Kww}}Yq83zTe|êI]qΜc\${Fs4GW"\Y $:̀flWDǪǻ~__LKhK<~/s˸n>F~SY?d]<]Ĩ2$.r{vPɗ4SUΎbK$5X[8u 8۶gT:͵{/ܳf[ϕINQVall N\.ڢ4VBRJj!mdiړ)TBZ&ɠV& ep$=ܹÇC"`˖-]Z=c exx'O޽{󼺴B@>GkM[[]]]ylffc ՓEVYmtDzUc[ z+M0}q5 \k϶\y%Gr+_k]}57>mږY~cg {逸яd#j=~Hj!5,YDŽ1k Z/ΥT*:NYp=_ =s=j-ٷ$adm3&aPBS3??ƐfH%67ӂUq\FW],cpdt2Iw,T"%x2%0+d9ȥkdBgYai(!p @DH'%(; |_ђ8%2dr ct"5:"`|K-H$Fؒt\<%N ӨPRLX c,lii:}rX83ttvNH%hJawJ/E ,U K583;/|?pIشܚqWgiqKgL.Ҳ<W.π_%1_apxUi%=i\S&꠷Krvo| =LјPP(fffjʺu¿9+H))q} 'O 㤲 B7<Ύ24>Jj:,aP@@\e``y9͛ټy3uD+^jgy'έZ266Ƒ#G&ɰg8e\E=|Fcdd2.̅ Lt%ә3gjdY{[Y[09wo{gm[ዳ P=vnüWn[i<%ٺu#Lj[Xc@)U{ H:S΃fՈ̅U>](`{ᅰ{%35 N#twlPF *8z*5HAlNl:T"Hmh9 )S;blU*0rDM@cF6dZR5f N%E+iYehXu-*2)FL.љ`(U_Kٲs*Ya-$dzbfbnd[/ Ӌm00_`T1 LvlD"|!c-|>eYY\.8THO]T83E,=_Ci\wP,P*PY(Nd21Y}̱f LXGd2F:WnÇO pЕ m7/F/Tw~=GO }7pɭ?ssӔJ?{oeU~gsݚ',Y<"y ^~NBw!iyZIz Ix+@BwKH S #<Ȓ4J5~so*ݚT%Jsgo~Kre@Yh\ٸZcl)+H)(¸ܗ׹tr(^`VI"&D/JMj_SJ5UK[J @lnԗ+٩.v6l|T:+&V)@3Pd(r++%~Wfm QC!H+N;M;l慟q=$&B%zNRi!%]T CX 6kq}+4Q+"Bmm VF6;'+$6'Gɸ<6Զ&_OwJƲ (k V'tPI2MIu||(?)ॳ8(|!qJDa@hb6T.M&KZAx^_hH vFL#b&Sj4[{-5"@5LU2qY*E! RZ$ea_AFd)o#"J#m Ej#1v[)q|ZP2`vąi24[?맱A)LSED}u3Y6X3ed/:vŎ't-A~??O~:k/v-)7e 6R y: 288rhTSmF{E,qăe4CRS 7lo.r5"RLNNriS.8H4뀍Mv8J`X1ILg3 CXanf0Rd ,$ZB%7SDc1-Hbbh}Y;Z&бC+)D$RJsy<g'+l#$C9|4;vgH< :}CRjm^|B@PUOѻ}@?/d϶Qtyos4#Հb.ŵ[…9hz'4{'|{}wy'No?8o~W2::ek\Ȗӌ,c<?1n4sVcZk6$==&'g74~/~|jfw~ O>$<0Luz޽(ŃZ3Vcdd?7??9/ hԙ:ϵd`ss}܂vzNVa@?===!ZQ+'Krڬ`:;[Gdz{/4^~Y jb:/0 fvnU^axHG%}FbDv\!Iff yٲm B t85Q0 a@V\.4؄ĦD$ZNXqK!/Z;;ۋ9f->$=AFP45VJ158J\G"kIG~'EZJFd2== G6mXgsMެyyU2FTW?=cWo~QT `QX0a2 EZBm "*Y"ᣰ`P(nZ:|gJb JIvbM\c8`ΝcT*R)J ׺Hooph0P(wg8;8‚jNZ惀0;;7-hhh҉c4- v9,֕,33Stw_z,O|_yAGٷ};yMɃĵ"[G?A>/6Aqgv\3~Mo?uet>FFF:FJmg+ժT*T*.\[DQͬEh$i7s38õŗ+D!oy/0,>iAPZ|'aeG!McmD(W>*c ISȤ=)l6E&Uӓk8Bbu<, IDATDA MRV$Q82g1qzl$Цqb2h>b1ٶdE34R6Agik<7!c""B|#J}^G*EinZBШa6(F XRc t獵zzzHSq pVWbBЏ:iO/] w]!Ī3.OkB:ضq킐Byj>Jb VGHA+ًB!,.a(G(W5U{2QGIXR.ϑNqΜ9Ù3gرc%4fT k-FHr}p <:(㐶z~{zȠAƑ/yp* HeRE؍,?soV/sQGؿ:n箻oXaZeӌKjDf?wb]ϛwwwS,jTUz{{W+8z#ݻ>ǡ?0>Qw|^W?c/{Oo_t;AԩFnf9OP=u }s>'[9?O=<[;?ы.kml-[#e=ƘjBRl d˖-(x3R.'r-4+^vБQKH݌hCgvyARw5&$ӴH& wt-Ԥ[8 {iwI.zd2>ք(X4ssK;ZصktMHpVjQQ*i42y[la߾}-ff{5aTҍ-KI\:zAAQKK\f흗kky6HA\Th43 U GJ 0 NT E1#[ ƒK 4Sd>pAWR*&N^kaU &E (qF oHJ,JXL,!%$oeJ}Ue#b&B(D _Q:и8iZGh)e8RSCxJ!~&E.#N( d2M^}-%4UE@wΆEזRʅEZc]ttHm>`\/_Ïpl~wIyǥRT{X ??MHG-MvأgtlLy~$C;yf*!BA :aLL0ғɧypKnLe3Z~18_rQj:~͝S٣|GHg獵DIcz6ވ'g8w,R v"hY˘ZZDJLMM===T+ JssY&OQ.W滘#(U`bA!BaF RNȵ{>ГG)=[ }'‘g1<^3kGuA@\q<Kˣ7Öm}.,,E;}΃ go|g9ugΜazzc4-"f} c t,.nRjM_җ9p=ت>8po|/yܽNNN׿8p罗Zǁ{׽ hԗ-59V̽FF11ahhol6))Wx)i6~/_JiHn7cS*IԒ|TUz ڒseqP |Iq*eLdcQHV\V-u2c}R(K%K∤K:J%:qm _FnRvD۱{ %%Iet 1K_o}y\'J8Tru!NdB(VQ/bR㜅ߋ{K4vrր+MvG=ͯ]u/in6A8]"Jy;liLLLw ]}:y5lǪuG5G8Y3iz"2)^8q>"McA["F@RU G9(Vb)3GT-+)I6(|Ç}M? iȤ|P2"25 lVGF8!C8@@0|E$s$ B4h5Rir0ǑpRpر5 u/5$ϏկJݷdgo/sO<ɓAHd4q=+4Cxz===LϜF9RZ锋tw)u"MZФ=X"Ν=K&fn~<$7컝nN] %}2ZGtwb xI-F譛r[ladd'xCqu}It]۷0>>Mo>567z$6äחugϞ zQMJIT*Ν;P(pגuR6b,_r0vr5 r9-t=}}j5KKUS]nKXat(Q2!3h+V#dƪI1"8MU \iP6%Bbz @X/SM5Hs|N?Zڌ\?D;1LR, 0"v޷6&si’Ė?(:54D@d Q"kLRy^K7SXPRJ1(.TqT )1h; $-d5to]\AZ;n \ޣbT:U*p^F- Cfff|>|ٳclq w_\Lڠoh+gU '(͟=uzЦT6zIb}&]̓(bWEt:(KIwWu7 ?O&ׅ-i;mjfz8TjUT*^qsn c&UqP& #zH}} 09y!<0Xh0Du|6DQLYV@ }]ypV`&'QaN?vWNP׹09R\jX tuuuV|IyΝ;GX\,llkLرk6 !yk~aD_j^Dzo|nUqAq5$8Ռ5\:gΜ|ٳ>^n^J}P5o`i=}r`hrɍDۣ)Ys/li?3<<jc\t2Ha% #[{( ZG~*ZGJ2I9#%N) :aT"ڥ?/˥XM/8¨-F06$Ĥr~҅mwZmim(*UDŽq]g~,aE&%J-/jE_& $6]/\6s\Uxu42 ###\pzN.Ery]fˎDQ)M-\k[_"?{_gߥؕOx^E99j2 +*z'2Xq( s};W?4ڲ9}Šz'NԩS\Ít㍸&N;bD&&aMKFA,)\ocL eZ/7BK%F, ,d24ea}ag+\GXc09,C#DazzÇ'NgժQ… ϗS>O*+ Ns 7c166ٹsg݃T:ksئ_?a~W~n~7ЇxM/}#?<癚b׮ݼᦛn{{~#:tl6/›y[ߺ賣(ⓟ$_9wJ)9x kpa_|ӧOyr oٻw~|;W+KVazzo~M1h4(LNNr118pq4z'r)إՌ=`\q/Xi۰ىni_,WB2=ף&'i4jTtNqZ_҂&J2%`D1S*&S*9'PR5("BT"'h4'/=HarY!ZY;];E!מL_m:mdYH6XB&%zQ*EQk4Iͤ88Rxab['Nɤfhw)ZDK ?]]g"kխ Q!*@t}Ls8s/^O:О8(r<98lBQ )2ߗEJ0DQSox[~7Q02 EI_T8pM7EO*lH#%6PƩRKj/~gI4G8' Jfi4jL1V8yvlVzzfc8q?E:SSL_&q|dR S v\( twwa j Ξ=`,}: ={سgOđ#G8p@]Yk`ԮuL< Rur.ʥ2:>Rcx;޾N5w⌌ۙ*s|qzz9 uu?a>O]ӧN34}#"_'=^m#}|Cgȷ-z뀻ߏΏecE^[W$YMJIRarrΜ9ùsعs'{uMaVzN`r#Jq:JTZz%ةO1$XR.uG M<UEԺ)lFbD 5RT6DZS[`8ju0KZL&C6anOVJ׾z."ة'fe%MLb-1QD`t&k(Q| l3k`2!}uq]wZJvkܢ,/Mz^ꚵQ%pR.U˼bڕ02^.╼KA10 VJhǢ)$^bcONN>KW1MPuW^cvnzqȧ=sTrȷJ#=F4| PZz>A)f-ͳ{ϭ.’\,.bq333L?wA&A ) 6: Z<X Z̤ IDATpk_bQ]Hd3E|@l7,Rw&~?C1`Lę3xoL,Yt=`fj"V.Rj,Jʕ2zRIՍAD ZBw?O$bg~7>Q/}b[GFC?KZOw>#Gy޿iO_;vеoEm62kCc[@~>^QAE0==O=l׿ Ob3"G/Ŷ4U|f%žK8.=o%jddn]S؎XH/}d2JsD\s"%q! :bJJ%"s[qT a8bU5zN r9RTe֤j'7XV',s;h,6[j%u(a(2"Xcڠ%4ȘʃVjΪjAM&i 06s7ARjY?:r@,H,c!j>~EXlË4睈#T&K(uehR_m+{^;s.RJz{{[A ǎgff>!$ e;"IuF kCb-:vsGgtt-Ct0E5M#G>3v~-ۯgR%^WI)(& CPhti"`FX0`sHk.֢͋y SI6>Ջi ;wᮻ_+n;m;(h8ZXMu J? CCCD:&jEqupT*󭱡bwFTu.LL--Fk1JRv7# ,M[9`V4M:cpƳz6Ʈ)VfHd#kuR)sQ*)a-X" Je.@a磜F:.R: <24?\wRJ%fffjk1bB.c{658. iMAlZ6aJ"mL꣭E9ƺ S0 ;[2Ie#+|7Iu>m(5sE;4\k-$u @'lPo3ykg 0/8 pz8R+ցE[ul b"$iyڏR222BPg^SyR,s3S -# \pX#,G bi Q۷o#s9طo۷oen.inz)y/Сh7m`/b 4t2=6Fullm›IdP( oFb1TN~ww;}5{$~xg|F8X8_̚Ƌ0dvv)8z(۷o{:闋Ri#@nk'ӾYܥv[\nOHR/?^`yǏYpJ:JƥaN8kR!0㈚6}GEq,e0"a#h/ 鍎Hk(J1iRs~D8%c)IoE*cL+·`G2O#MF'%&Mg;Ubb@$J)2a'Rfrdh#)WE]ShOlE//'xΟqٖ+t橔q=E{ǙcFn',jUCuT"3 n{<#0D)6 J%QJeTkz Zaě0j"Hu,86OQ(Ib= QM!߅\|zz8""Ȟ={兣)W $122Vc\3Ns뭷SO|z[ۻERQJɫ_c:t(қ+ND07S#dFG:Ͷ;~pdb/_K.=&=?zM\ g9p\eˡQQT8{,Ǐ穧^s=g̕/'zz>cssy3K]6yɼߚzaH, t<|>O__JZJR#dQmplx*8ҨB`$8_JF$$12a8UbYZkHUt\:|)R]ºp%d)Hk D[t a(mv>$$j*%rG6!pX2f]U]`4(ad0kbe(E ǹ ;;wQcjrz5fV|1t&r =U&6S;wa]򹶲U|y]xQ~.G*8JHґXc5>y/}Tg 6UJD "n)lj(qCdRrB3lq;?X HG ֬޴>|r޽{ jiCizSNP!k5D6@$lbmjD4DDD!& !V;@%a` @4H)F)MK  0`4=v222P???zm۶d363<<̝wy衇8x lDMZ&#wtv<[BR@#&x|C3uLx]K";v ׻ hru! CJ;w9soロb2^. q#ǭ[+Z J~=ieK A.poI v:KEZZJ ML.C % a[&Jt2&qd#kF\̪1wF 9Z<78z! "2$‰Z,dlhmE`澳gku B  V֑X)y縟w!J>uԬ%[Ay!(EvJb XH׸5-irl[ڪ]ɽi#V:"8G߾ #đǫx\:WZb"^tFCO@VЕH&cLyPx8==\w\Z#J4ֲ4¶; dk!¢ DQ3y[: wl*E&C9>21K:#Mt\BBxY.TLLΞ ~Hlκgs^3>>N?[nq) dZ17y0hEr6"%G0 J99RaDb101X(kAG33=9HE J#CڠQܸ6P,q=vd}tup]nR\wuz?<۷oJ.qxij 0rL>#ƥ ޺F@Z399&ZWWmۆVݏh\jGQϟرc>|^>FFFJ^z`v<yrZN}ٌ~:]N]'@vlå<_ȸIJd=KdGGQ)IN]fhxYJKZ ¢Q#`HLKIH4h48xFIΫ{ɲwĖ{V]Kw&,6)jő1# G${ 5? 엙`1 ؘHEdKbSܛ(zZs{?QYUUyD5###nܸ"B ȍTjvX__ja)8$RBkҡz8Fw Eԙp hi ŠXK簅AX%"Ree`B8Z+q8!Zބ3M8Sԥ4Ɓ k/5v DJH,wۯ6%^8-6y/-)% NWng{O[L E٩UBg3w'ugI:?QMq?CޱA(.|O(Z\ܫ/QjԻb~aZt•;8| ou|b8u$iB5a}ؓƆYM[htZ8'ȋ.R( X"")Xг7ڜGϽc~].,O>$in2wWtŖqk=ljve}ukgv\\t?lȻ6]tw;Aw.! px:ssLNMS&BI_& q ߈.<^Yc1xL2O\[_{Ou2Zu8FGj VΙ!Wn.яM–.Qר h^gnnfs [k?; G./~=/v_ 4޸q'|lG-돃 r5^}U`0i4wX}Fl\Q@mޜnѱkq/s/L۝(|?A֮8Q%;uu|fva%/ .SSSz=dJ/#x6 2NM$ҷA#@eyR4M9˽^wUs`ë-Q٠: !ܔw>ascM4:g Tل zB׋9q`]NE GZ4g _u0g:P XcPBBEd!e0"H<,͗gtÊBAUpo ?>p?_dY;]qW^9o#Ox#XcHuԧ>qP{WSjBwBMMLpgXCh g#0r XYy]}dq# 1gΜҥKog~O"Al?G|kR/yfw<ģY!sկ>"^eAI^Aн|PPw{Q9f n8םh[Fn}Qq'q;m帷;/# Q 9f3-YKRUv!QIԉ:p1Z"×IbT5e(R*d:fi jJQtZ-z.En!_Zr;#RR(Peh֏am&Iec0 bm2LdQaJ#Hhdk}i ̀wyX˫LLL3;Q'A$Vໝn̝gEystMz6!UD\iP VБ–fQ5[H Z Q?1j?Mk'pm7os}F__\tk8r4MW.+qy|o'%hLq Ecb' /RḰOrGk-G+\֡6{=ky=ĥ_ ݀7Ly8MS:V+ "0߸Ewu&‡K"t+2o-{qۺ9SJ7ޠh⅋!D̛_/}no&Q; )Nm榏ΧÁT8;I>A}`C>FTއ,ЇXZZ^೟,jSN \V(7E#Gtj/798Fvnz|cv폷}aΞAV&Oю*dXpqL"6okQ}{ZgϞʕ+9sg}C n7Խm@5Fq8d J98F*,]Z'n菁#kauq}J"]qKzB2 Kը凜(-;BMl IDAT:e=RW )Lώ` Xyج@G1Q Π4L5N bH+uljAH^޽qwIw\ePI"5? :Dai-.:=(k,]㧟)?Ic3s(z9wmn-^[MBI9VNc|i59=e&`l\r#8{٤i9|0.]>STu|ĆR4%$1ae0JqqPꞃn7)zZ6EaUkT5t=yɷOSj&&Sݸ+s^ 7d R$3SGM+I>_`rbHt7ܰFd`ִDžkx_>vGy&ַPJ؛߱u%#5{w _#)Ͷ[-8uyg,~4Ss~|Sܹs]~8vؠzP@b"aMv;n=[ah'}vE^(㡭,s[iնԫ o=?{G$3ţ:py J8X[Y9qSO*(q8 J-.\wt]bIĺeX;0FB>s5gfʌCs~`'>;'s!r8(֖qo:ÀtGgNa #”^`+}$Eh2^' LaQ rꡇ8p0ӳMor rK ޡ&7]֖i.- 7QW:HoyJNcz !2kk4ױY =38H\Bh1a# 0e㾫мӘb5Z& >s ?8o^x8 ff'}^jO~Wg;|P131,ȝ7l0w4'O/uׯt$ tVG &Ͱp?4_y"IfVQ~o)A 4:}a-f K"h,G< ܴ&gB.U[`mux'1d]c zqTRYP){{8LaUcz,80ƒ1*gq2?[++IDD,+P"Y$iLLGq)/a9\wCb\ml4蔮w1O~㿾6ڹ~'VXS3h'NsX'rF' co]|>|rJc:o\#u6Nan8@NDZSWq޻vPnGFs qv.v:qV} Ï$bzrX[]SBHqGn1DJKh#r J_7(Ub+[{}BexFI4g)Ndy7v$ǾnSVp=wbAVe|zd` B79c!/8ਪJڥS8T"T1p4E;.W?00k^k#ĹR)Jm[jI%mvHU qu{ܺEkcp8 ڮDr}sl v7.[e`cҫWHsz"Q#t ;A!BW<+QDG +~z7|],,VZeqi +'4Tz}p*%y.G):&I5HSs <3?ǭE*SuMyBD ^یՋ/~T ~m]'N:X\`!`iiEoSoh)l7T4]1vx{LO/!=lͦNŭkW053-1֜<9G[Mb)8<=o]e} 8ҽPj[MCn5Rޤfz%2j k KKd^XZ_ezf)&PBblرJs7#urBs]>Uu*3 ՟]@Jz/&3\|*-ȗ->""W?חN0[wTh|_WطKtsңd̩G`fvh@<-m-EQjqʛ-dzv~fk$MIҔyVx\uk%am1n5d~'4Koخwލƺ(-gq/a9woe1y)4^NY %;,u蒞jhA9g>ӗ'I R9^E:AhL>J)PJ$&b~鼈;h}4%^hdetQkޒ^Enf=Z͍ zN-N$T)k+ɰ $QMN=ⵆ;WHhiSJX#$THtnΑ1I#l>Hw;--15sJcQS_Cʻ >]O#fᑸ~ qz#q̛`^gȮ Wνʍׯ:xm: ˷VX<8}5IQfk[}4J)_<7yþrUa*U#@$=HBR8o ^BG8qgrjWܸNnZFkv{<8{Ͽ[W.nwX8$O=Rp.i%Ҷuot_fNFcjEa:G􈦦yGSYf4{b3E17۴FJVTۥn1ZJrdžeT&tD<--p5n-ޠZKsc_K/fH*[+Wl kwТG>!/ ǎ™@%RcNQ*FI]"~ivG8N>CC9#kx%.ȩWҠU'lzt6[ UW!*l,RŤTD5x/dCƒ,֣PH\]y,zs>p @/lRIA{_1f`)7߼ڥ[' zD+o(IdL,x1f+Eůx?H:`= / ^}%x2J=tW^g}}ZN|_E@t:,..rʕAڵk|&s&''VLNNh4{;w??瞣nM_O?4ǎ_ ffRApaB뷨) \pVE!8y$'?Ifggz>ƾRС9juPTԥ-kxE^z HՋEDX}D"Dη%/PO4vNc07V6щ9 ?Иcme͛?ߣ@v)ލVq^ʝJG;u7.nzIBz` n:;LaX"0ޑ1^NtO;ne^a,[Q N2P|þSLpqBQ$ΚDE)ևB T8߭ 66B \K!X qXog u ubbezMfk`]^92Ҵ̦ )hv;,m $Y$IyT7e(!qCb%˺8W$;t[,-#0Z0%J#\I,]}U2:k 4n۾DB@βxGjsY$5;0CsjB[,odEԊ٩Y&fWjojT1K;Ó!*jC}1c8 ;Ztn[wMsqq˗/3557Y]Z19۟xW/EMU@!qL"6&7Kd_gzE^[q+/gYX1,t ;ŕoZm2X38p @JHpc5iYT*Q;텊1 ÇsСm5`~MJGJS2܈춣ip(Yfqi :Yc ٠["/b!dp8'<9qV"m`x) 8ڿq184~ gvC;꨿MK8Q)rc;ĭk޷5qr+wLU؎N:"Kil#UIX(-I҈XkOBDR[_A$* Q,}%1P ֹYOdqeյu<08!8F#:gK*dW[x;. myXFSbh_TVPcMh:*58TAZqt(gʪdRx[&2o]QD"OX^`pYʁ9~<6;qZ;*c T$tX;4]=qZ,-ۀ$1y`;|p;dQњw~=\>}{P]&utLFF\zVCLLHYg;Bt F 1CR)DoYN4~Kf8͓?'EJ,'NҕWiDa)L z!8ʣ"{j+ʵ IDATJ9҇J1YRQ x41vCpM# d'Нgힷr'pg ;m'vw2. Pn>ov.Q&i.R)tS8oQRd֊zJ^VII%X ׻+V·c ySXG^Sc^xTQc(Qo*,ݖ!4JJIb`[r7qr^<視Hr|N4\=qRZ孋i.ݤ^ƈc.y†βđbQA*k727=ń*)qH k{WnI4zؠaevv8~: U Wf$EN4EdɅ!$|tJcZZ!IH26RDLuEK{3CdJ&-'?H歛l i%ZKV+)wE1fkjx}meSw5?\Jot )8thgvH@T8zA*A 8c x5a" b~?nAA<.(Z+HxmcPb2?K7.p܍b0N8Fڀ0΁tB1A /6cѝV{cBT$"4'$n//;(F*.}bhA J(BDw;vFsKsKhׄdmT2dtCғ8NVS! *qL)z{w}icX&MSΣ84bgo+<]yPlˌ[&Ǫ! =\;gȝtWwW8p'5&&X[Z#()9b;=Y56+Cn,R|!#Pi5H!^C BElltiw2,tByV(%q.Z#%(!N@K 2PW|: B V8 - tUy"(rX<.{dep -aEgpx-" e7NIkuzj}R GFf_ny1[>/ O]Q^>tt7HFAxq{.(;}7"D#T 5=QTeQ in^ 6An!MkJ!e֚l8I)wE). /;}öB}}*{~A׿?]G_'߆uϞ?^'G0 hp!Z3338j<üy2$Ǹn-2yB cMmŠO0&뤍zTau4yCkp}}u r^K+δ/ .q"pu+!|%{_41BB Qao" i/ٛu*dR+NRW%o59t`?tDʐ-# * <Gs"#,1ĵCc'ؒ \-ң8:|OGP_/},@U2ZvqemY#1<6y[&;tEQ5 t >&fnf7SjIf_ב&ATXb;ìWϹ /y2SMۤ8D0,5$Å#chkbsV4p<KWyl{#mdƍչsxH!pۜKٷGFrwRp8Xn֘`]]lr6x@rm9j/\f_ \}\<0]j\-x\zNhhb B<3m5Y,7 S++hx`B`CE ANOER_o;#Trkh95zC _Bj8yNP,$R|HLR Do q`*⢿?psZ) BKId5zt83+()cNEաvM^P؝pb3GEjTblT™(} ׯ 4vX1-UʜY:RnDRBEiU\+O$12FM6366CYuL@i^=1Q(H&3=L3l|pBkϽ_!IKٷ>)'K-eC cǁKF Ɂ=9v/@_c:"0&g(3}beGI*JX*a4 "qYMR#hvfidWjp s&v4$*KErP/LȔvއb/Dh[: R $###lذcM7iĉ@E}# U iZbgA%'0qZO3dաL؞{ 8g7>jqzf|{ĉ>|D[r_ >J5[nV1GejvQ~F%5۹UFG15Ds /K꺊O Ҁ\pC_J3Мо}y-SLO2a[Ph͵0`ڨh4 fXh(ޅ\V , I:ZYsSE{,6XJ>u2mPs|;7qs%$,wݽO)%ys9pps=ؿ?OsG$q>Cpwri&Jǵ6rr#V%_\wY(g9SA؅TyBb9y绲A8.8^wvPdp9@{yN~Z O^UR T#E%:Su=ˑ2iv#V$ sxh2R %ැ9Y澛a E Q(("I" nE8v:k hq8UK%kM-CsG V1Yn&5>&єbjf*Dh)IAi-B$Ԓ ZPDHM7248٠cBy^$tEVXc@p* ;Wb Lv,Z=U[th"@0dgC5NI9IC%F.':6ĽT+ 1L׏spNsv Q)J&'\tjLH"C/s\KI$<)~Ӳ`W^ z`Ǎ|DO~In{፿6/;?R۹c|\쫞0$:eh(}}}yBx c[Dg94Mstn919;ɱ=rJFTTL ##Ddhh YJ}OMM199IESVO:1?yw^9f;_hrZcb c֐YM%ywaԨWiԪ 6o$7·(_b*(btl ic*cnIG V[}ܠ)zI^J|@G7+"̱McDZ~x-H)ȇ=+}ޒZR?s;y?=Fcgfg]DŽ\Pf9ޮ IDATRJxObmh;6ÝfNN`g,z\jA-)98fqFGV S7/Lcְjs%џko_yϼ 1 o~ys+MSqZV,V \$>Ȏ+7IeFd=N|Hqk|tW"B8zr IZ_FlfJV!q;)QBj4)Zij*J$huARWj-Nb*<v}BH|ȋ%l 1Zsއ&'3&d!3 !yf&A Cq8 RHaಜzA8\kH*uJ0h) (&!CPRS+S\p) QmљɱyNtZH|֫LhEVghzJ{.avvVCYDIۤذՅo؄H,( cJW1CtϤhQ|ᓸ}Mo^v+WkszKǛ67/?>A>p']pc9X+"äTW<>ˮ۟ID x:&ưda813X6 c6HUՈ&t$eGFYyNL8$56H[Ƚ%Jj\Q}m<וG]w'> v֭[ 9_~#hcSk\uU_Gr]v׿-[X1_[Y(X(! ,HIE)P z$TtAfHS*`4q=uspļ ŚTX W3o,.Beu%q9ݬSoF'MBUoꞺ}_}8fm'E^.e4_`ABS4y3q8'0&<,yeY&|Ы^^Zk06z 0 =\ ?B\2Y^eڼ |TYn8g*ٚAN:bnű K,4Q&$ё&J8+A-`J"ϵMI0y8qgw{wj/s7o{8=]]psqOozJJvglB` C}lBMI'g 36ETS YW4>)LLso掛nGiѧ+d($Z$^1=1GC'8~(a%(!PxpvTxa!>by^>яr17c:J xڄF]J300Ӟ4,+[u{###'-ֽRְړXRE)j)( 6uKczu| u5X(@O|_kHimZ1Rs`Jbผ[ǭ뺅Cn!x\f>^T,J [E'yX-.p1veErY . ^SAϬLrƼ~"uC熬9ɝiSڝ&Nx:y`\EJIf,R hY9Ji eH^wL CPH|蹏:9\P" B$1}$VXk:"Ij:Np6:-[1(iJE$@q-9Kl7Сv;8bux!EHOkT(Xdɜ##ZyJ9zA\ Rh.@wTkU-&NpQ\2FƉ~[ .u֞ Ȳ(;sDGPDE2TZE04Pa~c'mOw81BrDtv͌6$: EWh#!봉 x G`m fLș,jKXΠh6(U? ^x+%eyR&Z*/| y[ʆ  )p5K>*ƒ;w~ÇwG٤A'󖷼+RiEoqK= :n[0?3_t:m~7mi}_25=G>wYٟ=m9??_~;ngp`x[iZkRյqkJLWӳbF*1;WL,?uNnyB7Wv.8M}1eMx ѽqo-fS<<[&. .ϐ.C:$f9GqWQ,'7$Iǚ(!6QQC~T P :Q4#3!2ûh~@%ZAkΒiȑFN^I JH |Zy xRrsN օk 7JP2BGJ%^T=!2f):J;;142غ lظQ܅ Mџ豮KT+l'e=nE14}oKqO:rdJÇ`4BH{dxcӤl -!2ș(vIwBnxx^#DRFIE<[,`E&\#X  hWB|5s&&&pqq:n&6nȦM޳w^>O0::+_8ME_Xf|_όsرcp җNЪ»Dzz=x~Ƌ_q^6KW>Y4 =W33|G>7??]8yn#}_p,?MhkaM+@j{&m,D)x-g6L,E 嵝g}\fyFΤibLN,=npD+Z;!p4ˈTAF0=Dǁu.GhdNtыWl&"] KPDa}XBE"VDHSQVoԒ83:OZ%[[8 }{AXFk<A#tyTYt8RRk"4|\@`x]'&82=Udhx6uV6n(V@$%A>R*g{j!Cde (P-eiy$\|D`-!Qk,T T U`lA3Gn3Lb)n. }]V)[nForճy~LOO|O\wu<\ve\~TUNȕrr/HIȱY΁s<ǚXœV"@Dqvлq #%]%R3HBTu`G=!FKDxj+5"}'p8.o׀`bby30: f&k34sԨ1|_ɦ0m=Jxt[9{wKg@c7n syfڦRWDz[9j\Y{7I{6<wC-oy /~.;vy'?IvLv^,¡*X[y眽icx{7 ( . ˲^8{qd/h!=w$d9/Ak'MS,Z$ɂ_MF_33'=jZSV s_{绸On}}|gp``UdzgkxXٜ \IT4Cweϻ6*ZB Vhա t^0^uݗW2=4)Ssׇ2ArQo-p =ӪXBRnl0!|qQ b!J:K8r#Hڌ!ӐDR) W)$&6RC#hR(oj9DΑqF8kHPޡAAµEaο/@,vk<^* o l${a s|:,(h%Cߟ'v=JMx= R "-~P]w# Y 6dڻK4Hi{lk=yfH%ؙyS-kO(^&҃B\}+G }$ En JEz۶ L&Fq_\z3Xe#QJgŝ߼Dv!/G8'-ƞ4u#nڀux@r8mJ)˰299^{-w}\wus饗}s߿uC\ 㢊uqcct2>STznʫ_j9N~n%8IyOTgpV ֘r={n]t[lEGr{|בec[o۷wՌK.K._*^7qq6l@R[./}Nd6nZ tt)6kcm<̏DQ|x}[m/~Y@|)-R`wq]:+asٰm G8@G8* VN6[ĉ|p?դJɛcHN8IlWp"CӶm޺\p.S+Tby`hTVz+j59|dtt 6e[nR099ɋ^"^4Geر۷seQaV++4MQJAZl pa233Ν;V1<< Tg:^?{~o`dx[n}C;߱6ϼ2} n6 Q^jd8^|Ggjj ?+?b} IDATw{[KV*q×̉ jڲέkc`D>?9T~ h|r(o6fǵ!Z33LO077jPݼA+C /cȎ% yYF u2p,_8[0MYH94cbrC12KiI;Y B+ Hh5Cp{%u(خ+Y @c4@(Rk\Ib%$VH\=ցIT\ȴ@ 3c <]5E*zj%|Zƅ)}NOV$@R+ɳLNN2;;Ygmc&eg3}{%8 qj_Y ŎkA HU8<yG9:=:|i\#l8g#P喺LAkrɇb:$>Rh3&9-f3Ex?\ 7GD '`Ax{0MS۶m# jr-t:^uVv4I=q$<>A^1==KfΝ߿newy먵&˲"C-ʆ߼'Ns=??ҋ/Z{կi6[lۺ?2oST=za~^?Wٻ?z;Nw/oxc w.{.J}-ysMxkcE0‡|́~g|Lۣ{Mg]x4evvi9±ǘmv[Jic]@XBP..0EşUh8B~]%I053߸!82( skȲR,'K;$=-R,ú;-9D!l``pAFZZ!*xZx!R+w!#܃(r5e,cpu63(ƧDZ \"A-J yYLDQcu/8G'0aE+VJa5yn{9x`?*}ĵ%)¿mbvY*6oT Az%aQ^T*H0G&Y'`& 1RWDxZ)!MY D|hF>T*:|%@W4I-V2:0F5T$: FAY08~ADA2(@GzzTz,(R ϼJv}nɧS5Ft.#E$IL5>洧fZR!SJt6G;љ Lx3.)|:2VdƢt= 3Y"kLPAБc|k={xEO4c,!d|^C8x ~sοuցwܿwܵ{/+;oźu&'&ٻ zjJ;|?K/F9 >,ZG n J LfϞ=e?l=+%l{MY&R?7->Ll޼7 \s5kuuȢ7#d?Wg+j~_%~WpW ˵Inm/@Q=<'US)ם`? z`{AgSSSQOӂ";w8NRѶ`vZ91"n!:o踓Eo*_:߭$XpyɡuBFȢaq"Q愂q]7taFG$Ɍ)<EUցu65w!yW0uKyV49ci#MsZ6yaX'<ȞZd"}+YwDXV< \-5,$u`Q$ P暙БC,ִiG$ƻЗI3On$ih8m 6qٛh6g8txinހU1H )q5zEFA&n":q$!kVJkp|Ŧ8`kq CH3H_d` /11wx;<&A3ל B!})' v2'rZIs暗>-#0`#!CyRgqRtV%5MnL8^Ht4y W^'7Aǘf9vN]8gp"D](MNRCzCn Dʨ(&`$8TltEk c ϱf$"V9:YȖ$ɜ^[HsO'd#=8 zB1sOKےڮX˳}WJfٿg/{8~8/s޽~+\= Ik՝yg "z;70d>G!4|X}P VI}A+#.t{O5FqfPܾ},"J-p(BAΏmOlHT(Nt le '7ۻ>|h(1؆ vruMM kCDa ETȳYfM /X%AU#$$  ېI!$0p9+sm賌l Hzw6IT*M1tր Ξŕn!9q>GW>+VU'4DM⼠,=%Eh'$F)|nɬLV]#EP;IJ9=9`fdDdU O5NXp Af ~ɭf 9E/({jOҥq2jΣT4+J5BzyH!R'!DF>\0X˄Zs0?(3U|.lΕt/- '{p??ki7Vrs`$<"Z!FyrM69s//|ɅY XaoK&dʫ?3 /EwXY^O|_xfiRHzqBzŏӚ'?}KWr8*>>^,9Ϟ}?J*|{2O>?<(\x۷os)>Ae;v~ꫯ/~Oduu$I0ưġC>5gmAZdTK{S'Noo/|cO?wnޠQ|wՕwgǜy0֕8~sQ=oE\[[B ꍍ VWWr7n`cccQXɇy.3Ryp}5v0 Y~CoYsk7oҬUiHI k_7DJKnZ ,w0Eq68dSSZ06 xȍ#C#7 `"16Hqc]T9*IӔ4M& S?2u(14 =*|if>i Q%SH,C\T9kP8*uR-K]1{iti4+Z)X[]3'y1,'$EzuV0:2+H(p:dzm"{J*P’őÇXC0YZcrNu)= aF¦PkI!+$y>ua2mnKy(+8YoYW T3ͯo|^N󬭮q^v{tѽ'9pI<ɏ?$iH$,ciiz`0 IVVV8ukkkz#KG?V"ns5n{|n2NȺmΝ;k|'M,grrf&;CuM&p](i҉A_ܿ-x.@'6^pcnp7odum^[t cMJ5~wj᭡鰺΋/ .p :ę3gv |+_ŋT*rl6Y^^V_*}Y>l+osss8﨧\<wۤIQsqxqx0{n >^Fmf C.1 \p/NF.yoUźl?[==>4a`/GPjC}z7='4rcVgTFU H:eChYkR00N>Z΅ $ %؟(TrTEУX!T41ĕ.^^@B *;9BGwN/ž\\kBO`S!1E!!UnvY1(s)ctkudz!8SP "kA4Uj A`AqrXoƶ+ -0hVH12xQú) ȹcJyC&՚D>wn|&Ν! Q L3CR<&*)c  ceTW`rK &#27dŴspgŵ- DT=IU3Y_Y& Sx>":_N~GY__gcCQl1בqxq\85ރbeq.-^'Е at{߼ԱUy?lgm6lZ y|*㳍[}֛֕̓$ \x%z^3&8n+@n=oJBrL)tikQb;Fro˯ňR r}`ZgZdgeíeL IDATu2'X'0yV_PJ#&,1yB4d4RSs-"8ǘ nr+  :_I(S%skB(e΁ rVcl6k-PAYp`>*i*w ('#CDa>DOouM iSIk$*EU!byˢFP`s&`\]^ƒ"@+ERRkbD'9 &N )$I"脉*SU`HN2ޣUB"St-݊"УLmk4_ضɣ+uZœHm{=NQƺ?qTyGe}z.Y67?1ች{ٻg?y퇯qy.]-zsgR93T+ fz@<%(=wz,axq{\9_ZZ̙3A"spR~o\Kgq#춲dܯ2hQc!$]mڦ֨! a0votG ;,wҗ`B*#(~P2ؕ4 A'es#oeeFdd!ը%0#˲֚4M|p'!5ٌq y &BZ*{0?r-Voݦޠd0dYF02U v.Af x$e njds6X79ØK2;贇C>îC Cݹ`jRMS&M&Ntzސ*BP۴m.ySX!*.ZkTUػ~ =ϧ^dS渻tk*f|,Ov Y\7M>'_4n'B7u&LҸk׮R vi &ZT%I$ o烫<[5H)p`Ziܼy$amd|}UٯfqqYXXVRho>|MZ-^4$I봕(ž'ﲼwjsla!* Ywx?8o Vy?V~~*[R(^>*Hyh/"2EHQ8)KcU,$R1“RAULNO"vdCc z=NKߧt Y5grRRk1xdyNF!d2YP9s9GN lY$J%BJhhMrYpo2/B8;d]5 Y80rgBxr\ZΥG53jzIZ` JcCVRfhNLbg/*PqRbZu.)E6BmlJp-!3ZhCo!Tzeb] +]IHA[^[yz0v#S6 sb*Os{:[**zjBR o,RJz^)9]ugx/BbDk֘ʉr\~z'?lYNӴ4i(v%昜 *Xoـf+qjk$T+n`?XAgyg,tHTJCt*r3JѼQĠс`$TOHL{Z<4P,u8EFQ9KIZVL&j:MC)VׄhT5 Zs垲\$pAq1ُ^w۷ٛTcBr }4(h5L4묮ayK7iz=I)T*4$E' ;VW8w++L&^KE` m}Ï~3N>{~ꫯrq=Z~O\r,ؿ?f,l5xFC )6m ~7HiZEIC{I;`1QRo6?9^\\ڹw/سg-"A %ti8!DbK{D:/kC,u< {.7Ysq5baߞ`rF 2Ms,]܎z?km*6S|% [cJU9}4+++a*e0Is#'%y7pGruH=@q;и+x$/]MZ;1W:h 9w*|FFs6NH"#Tæ{rrY>,>U8%YJ|~cmp .!K6ʂ}jo[ԏ#-/ 2OVj5I4Lg6$11'7]rcBJO 3.!:b>PF&9(& Jk&CpR~pmekk㎫2}łTa :JPfd;(5^ 7uJV F og9sGBi윣 ({ %U\أyT҄F;n^K> }YX $8Y][cPɉ >yl>w/fՕe V.ch5_|%OO_ɑ#G6U+ ׮]ŋ8pdY2խCP'zwy8vc<0T1Ͼ{w|/^_c i%ow( %[E j3S*&柙B@adÌ<ȲAOf4&dm`Gqb1T!daH/;G\y3MSorYJq<\_+ox?5bZ1cf1"/UBؚΡd$&Zc~~LLMRTh6XdN@L\0QJ2Ubkr*@+=2҉8@}q4O&x`g)JUtF|`gc"&g"Tx+wd&XҺ,{ ,WU ieY2Α[R{ط WhBo8%$.$ `<rya?LI 83dR'joDkMN3$krh-H p͎..Zki 69= ۜ$J'LMMњD'id=J`HΎH[,*I`]،$IDh^bBc[Em|N˛oG29=`0M׺PɔqʒJ`3ΰx67,ϰw&Z- L-76H+-vϳo^{mvMMӨ1Y$$k+pμ6gΜ'XXXĉ\z56g\]]eii .0;;˱cHӴ }èoHH ~~CPVyfggQ$q|S77,Ko8(eϐQbGga8:ɍa80Mp) =V)XbQb+JMQ~?o*^w}+W9J};#N9*> (% 7~<t%)CGi,昝e׮]L395I`0QYsk7n0lPOS7#S:$p;[K$1&1:?jc1e { ?!ep~Bh ,ukk=6`;_d!KlHh(zhXgˌbJ$iA>*L4[MH Cz>N;ÅF{dq lR x4`p 0/H%yL̰"Lq6E<$KR=EuRbdTbcY@*BhT15=CZIJAsG}~k>X[[cuu}h5Y]];33;7W#G6޹+ϩ2<磽g-_t(Uxշ{K68 wo-S|/s욙 Q!KKw_;˷9x0'{m7gyatt^*{^nK^GkƧ><3-ϩS~ RJ^J$T*8qDҪ"kAARʸi><8*((Inb&gaCHǯ}kWi6L;70Ξ>cm0ȍ)Ya6Q>lQA|lEsan,`|4r n@jUfj1ܹsK.oZZވw$|h3\[KGW5#$˳FAkrC~&hZh0d+7ě=sb1 ֹZWʬrD$ޕm,A$IR4^RVJTa~16zZ"Em* 2F&gӦkj4lc'D=y}}hET܆DZ6QjMRuD)aNeGZkozC Zs(} -Q"AEIM[KN xp)B-CtM\npREjÜ&CJZ⽂ C A(r )RcF,J)ɈLH~*u 2pxbn>)K;oc_~|sJ^PtMfy!>Ogg䍟r@>OEf9g~k0aW>3*UFeY Z\dfEH)я~Dc޽e?cJyV8X q>籴אC{(R3&C hM;(ˍS&aW<ƒtyf +W83 ,H#ň*ȰƝA#+5qIĪ=p=ŵ0k\xv{DEQ7ͥ0 |?8Lҽ@/G _i#U\d%V3==177={Bw M!VU ހTu젏ɆH;EliTJ`EѯFnAY"f y' 0" FuVVfJH rCo fܹP'6SeZtzRji%YB8$ Yvr W}*i:Sţ QFЂ4+ZSZ^ð;$(T 8*W[Of Z{ J2hxۆ63X!fDZc\,8WAJb͢Ǜ- `!%B*SSac-Bx}yv8vGLNNV+<8$Νٳ5DZDZ.Gx7 *KΑhZ+P7HU2PDW,瞯EKv2_PK5d{M\j5{d6 {4M>μٓϲV57GM,-QQ׸y˵k78z Zj5^z%> y&m"W]JJɇܹ{g-ըUR][ka3͹3vƣLgkYbBQF/ "PH Y$ۋmvU4eo6!ú!X\q9v_4wիezO>cǠoo0'xu~\*%B &{m3R$`jNSWX^]Ri5hYGAjP1Qu."oj4mietFyt>d(ڢ.XC:C:FɩI&'Q:8Z^FanȌ!wY~cEd@E4qPq, Llll0j k[\:E,s->(22A`5F%jzDEZMjNF6yH+ U GC <oH@)I NܮIywt R{JD8!QW\j`{l(j -EZJ='`7Fh8]Z%J苛b51b eed)E !|lܹs˗.#B$X.;?@e"&hم9wW>I~)S:8CI|c~뷹{g?tk)<$ʝ&ff/G)Zbҥ|r5Ο?Ç9tV؎e|ӸMJIg0=T{\hwHX[˟ӟTzf&iZj5n߾K-j =t;70(`zYx/ڦ"#7ٓFwL(SN Q̻5lbLz0v~:w-7[ح o9D4q%&# 32Mkef6ƈ_h"E.HUIҊ Z't::nHnIdx : CL)Yn⾄Xq&FA(t`>{adyN9-ޢ.Cuɔ=ք^[x}TkuI%8|p0Fhu }~̑B$Ct}txpHELq6*֢1eCٚbanf&x*oCnݼNZAߠP7fH"1yH+;9;cg<ЉYUnoLJbVx(wY &lC[HqI<9lll{Cm_A=F8[=V/_fnA·G V'w>v/,077G@+FVɌNltm֐]vQVy*nݢ?$jzI֗,pZ[n"Hd a 0 ,P\"G,7"B& #2JBan %I`Ђ ŞJ1Qb7 QXAnxXwܡ91$FvG $Źpf,|jr,45ji79{j N!|o~ٻo_?qE_5FrZ ԍ/׏ ܾ}5&v-0I) *$ǷVxB≯tۿGbϏT R +ܻu> IH*Lf}L%m50i,s]c,:\q9_9~xX$q~Wd4/Rr"ϞCNɲ!nyj@%Aʉ&rh, 9sHQWB߷nQ*Ma% 辜ǝ ;1"$d:>bه=LZ̏Ȑ l[r]?"9~oj3B`?${=4z <:]!~/jzT033CZc-]:&7 D5MҴ ςrݽ\g\QR@$ :U{ByqpGHD"T{t{t$ %GgA:6 TJ.\FW+N͛7iML115 KoPF'd=C,jbΫwAwAqe%j0iԢ[ R[ !њ$'$3-zy7t;xg ɭE&4J*> | ;K>hPZ{~`[)w2ilHDI20It-|4v??]^=VxI>vϫI!(4T{ڃ˷Y*iZjnqcpevj +n^cumSϝs*r7qN0ZXC*%fW*O#JE,hL TDO@o Bୣަ"$'UkDGAA^GCaG}>t'.>,i2C(fZ`I-qXg*z_z%>h463KUBJ/_&2N<1ZơOo;'iիuȡA!!m U7~nw;cg<} !xm} 7݄~1ܨnV6]ؐ'diἌgr\X32pmF laq/Ton9p. nE\"t:P2%u>&VcljbKarcGGs1`}^ТZqV]ٻ13;K^+[/z~/+I5WiQ*>Gu(n8 b7 _?7%2s??mʵk|s1n\䇯sd/s ow[6F)t0Um[K~=_ytoq?ϿeN:~:whLL`Ѩ1?=ǎbR~afk bY7){}78".8ZBa O؇hCvhcH4oePF-d4SxiN$q@8ކ,z@QXMWB+6Y&ܬE0L 'ԞGy|"xbHC(7![Ճ{j+{(Ys*k__uԭ%aFHƌ1 A X 8ͱxx{6lFHm@޻_žFddUkI>ェ̬Ȉ}Uq!,D?7I7b"D5Gk, 8o'I\k,G]ϧVc(޻Q1?K/ #N" MPk5qkh-@{Wow)$Ԋ S=IpHs„`,/L$L(|$BP 2( w!8=PY`Z8*%xTDq\;>6Gm~5f4Z4kh0:tD,f c,MˈA+ 8$^4+ff-N1Qs$FIXxi/]_vW.YA3") raߐW! Thc<<(Eel5BYNj8lɨb0֩v{Y>x2/XHpΐL{i/4Mi68p\~~_z3О=5իP`NP8sE1E2[& Yqf5^]}!9/*:Ac DړB#תJ1B}ɍC&1"!\Eڰݢ'}2Ԩދcߋz^Dz=< rUAcIFyQFsqSSZwm+UPZ|I;Qֻ)*.8f6ȣ(fbrqT+Ju ?U<?? /{]wkٟEo-~cfg>)q훿ɇ[CEЖq6ӌ<Ә[$bZk+W⅋;{ヌ׾l?'y1Pb!LFh7j[|U>o_o#g}YKF>ZZX )(^Oa1{֎r+(|EdE:*vh=vbcAHQXeh]~FGKς_HRTEo\F8Igjj;ܜ&qEa73YeB#]C+?Z-^<R8DPk3p2JYό|R'V{.G:B3V$ (gAԮW3xG4'2P]6 \KUe$-9cqqׯN= }=4Mn;q+%Ie*™0X8zxvQo5\0~=Pa.?َ*p|O7yqvb{A pt}Hչw\gq />I"Ѫ׸Yq.\ȅKprts)~aZI#n"ػ^BLmߺLkV^yN堼jU A1%*NfD&][5ʵkYJPb H|EȥYz~@שj?~$IX__gbbVĄu~Hj4Q`X|g2hĊϟs绾{ovW4r! e[k9"Đqu" u4 |D7@2׹Gv/yOVz4 ~el3,.-tpZK:Rzs mt7>里7ۑ$IJֲh,27;<6p*G`$R msyDYM-REٍ6?%[J_.̡lZmK"zƻcY,'54@0)rub| c4~_g!Sc ? Ȼx"UQmq[Zo IDATA&p$JuO9effx'Y[;N063J!u=,/-͸FgysofqrΟec=⥋zrUT_KZgFҜG/vW,$E-R"r}++78|Ź-˗q)1Qq dak08B%34jn_%-ǏNByG<͈#JnHqQ LO256Fn򱹹&SU,,[pﯳUZ\_2:|J+y̨mBѾt1 Yx,/X0حadpo8Z\j$Mbll:24Mrg99E]s,ue[ s< ^+~s΃0]MS0F2n235ρC\p͎?*B  ,`)rdA '4Mɳ %7)Z{-bl3'/W-Ln`KA)(^"%TaGc S3L/,Z Aj% xe:/_fvvi,ϙàͪ{jıoi},r]FmY?E`\k*U6O?$3SSS[m" DR,pؼe=66F^ŋ~_ h8"\`(hcŗ `GHnVcĈ3b(Zɻ+À}1h(v9^۪爊M%l`x5zXfK͓Ԓ(΍!2/ ~uI 3~fΆ)fʂM^R1WW} u;;=fLO]] 9 Fr"~[*,@YOi~Li1"Z I=NʹKk-׷&3)Վ!V$D,~(V7D O(YDrGlmmҥKѡ: jP(< V; ] J fb;%Y!G5(%}D!R 5 I;QƒVs)ji;\(]ZQղrhB3 ox`@18Gu8t6iiBR"ÓLsΓ޸ g~RH'iDoHSY;oƸ瘚lp2D\g\]9'&,//ȃ /Dp_yklo155EՠOɲD "Wx#g%#&'*?0_5oЁE"Jp"B$.,#|qs<)!$Z tp_ nnZtH1IhXXeqY[}c|YswpqIhMQf-N=8oryVޣGYxǟCS۟6${e i`W /YMvvx96{e?mq֎q&ng K͡4 B#S`U9Çxtw'zV42)°4\+X!)}lOx'NpGhu/_GqȲ\ _gzGSXY XgygU\c\=.CsBGQ)tXb~~k/pcs% R"_NsT(!H?VԀUH*Ja`#K=h@HED#/(BԄj q1?r$ |֞]]]eii#Gp9.\P#Tgx x/X2D{{9L p -AsYM)Fjϣ RHIHcrsyB{T5d`쵐ˎKCp 9O;HkmmMHʽCmm}Ǜ|>Ӹ[ْm+FZhgiﲹ "!"/=t:I∶ΩIGŤr O=I׉"ulX[`,:y=Y$F˘ .:j+RS+_(B:1Y3ZPL$IơGO>ދVkT?Ql6p4V|(VI>j@cpVb .YGSҞϢԹСCԨũl޼r:7tbHyGx?a6A1N@% f:k NE;/?a'qzg1_mfE R{ɢY:Xv*ܮMɼu r#`Cz3&QQxP EgT RWQxkUߧf`)~_|p_s强O(\vW&P64:]WTCJ0ȴg) (dYN 1 }3Fr(Uy;}ֺ93 TI/Mluѐi(q8*Yʹ+rQ;*nwh(< i,f X9gNz"-4̻h2ȆF>(R:(Yq{%qJ& CjK{ .J ^[Dq (7yX%(IL% N*KwlѬ?؏b6F -2~'n)3._fl9bescm 3Sqs k'$ZqBq$5t/]*ɬd~CKbAo~^<Zsu:z险TUUs4My~:i233433Dݼ e"_x*Y)/<ѭfƕKo6s|ތc]**ŖDcm[_rnT\ZWF_lޅjI*YW&A/2 *WDQ>z2n1-pxWRk7nSSmgg8x0O~,٨6}Mtm"B9I1Eg3J]XAS_7#H*6xKckg@DN*NSTh0W⨜o?E=Y[]/,ĥKɶQզN4Vcu@ o-H)5,p#Kyg{ XM/6֡%w `dX9DQ1(r' D$IJ]}egX\Z׾vO}SIY׎$(A;ὼ޻ggfşgC\_}}EQ@f$C1pPD+7=9Wm[<`ZDM*{vvYSۛn(&MWآUgRXNJJi}F UlY[?I,wHRi0Ε@XS~ß:6Lh9EAUZ8derb%j?C^Ajn++LOns;8W.] ӚfRC DŽPx#=g% ߓw DqhWH5k@ YGelnvP)QJqcmRH z\g7Y84 BEe.3}d<3\[͍MV`|b\]]q W5W58laŎ4R%Qb X=w>B&|BAv?`ynX9}Mm$i;{Lg:xkD3AXJEX{Y^|oz#[3g6G.W.]8• ]'m7Bv|0):cB>ׯ_grr'NvIZm:M <3hmx˛ވCq IOMFDI2V,ſst]InNs<ǟF3`%,04% ΟV(.D196o'd8 Bė$y(B T@AgmviꍖgBx}yHdB1ygnb7Gޢ֪T5,Z hib`%Kk]+"Le0|Z¬Wjm0VI ](:"vJ[ºR4Yjy3w3@4\ܟ^[?O~~+-_ɧͯ0yܸy/Oi׼cq3z^FNwk vq+.3=!Vn\Y="4Vn vc2R\r6o"ZM.yњbuz^.V~`4峟,gΜo;J)Ν;G`ii GeA6;Fg묮cq^015-nN`ҝ(>Z.zw~d㾤!Bl3qE"#/qBojڠd#,B`üW}T+F B0(s(XaFM<(ߓ;ߍ3gv,eِ"gTֲ+>@"훮aZXYJEiOpq=2>\2QJYs|Z{g+Lkh2]Wldj5:x$?ETBqQss}uX8qIN;/գ!#Bakj=K,GC֑HVEFw^'B{r%3BJX.)́&9\aEcr%DdyŊPQD=|DW2FkyqA6lngw;Ԃ}.zT(%K/MU~@*Bй5S}&y0eQ, #d䥬h V#QX ᜵ 3ť3ѹl [7 w[2G74S IDAT l$I/3j&Xg oh,-,q^́C\S>쳬|}\YzE(!M)Wɷxkk4 S7m^!eŦe"sN⡇II9}4{/sssgLYXɓ?v9O}KWVc\VUy4: ӓuq۹•˗X_c@6w:SSS88s"k-YFBm`R.n9I!D5|1l{'ǎ8Üx.֭*`#℉&v<)?7"+b8u$ A 5Ke]{v> T!z0 Ͻ`ogv;;kbJ,Ds;@v`'iH aS{% "#04Z-~KtnkVKft tXg"y0Za =`bp_LUMW.^WQ^Z)ie)b4+Z ,x '<ƦwOj2DXoa udF٤#dTR $"VE\[!BbE!D PR)IDI(4XqT6:[mlj"s hoIp dZ?%,6/$M2ò*-.~{"EyzEHHGes=m*[7u#`= 5y'w}gO,w Ze楶*ٳ8qk-,//ӟ4<o{۸,6H/pxp7^z`tH m ,#3piC`O5ƹ 2KG>B[e{(YϪr*UxP\v ByNg[wdow8}76ru9v;VVxrc^5ıT|H q{n@ Я󎢒/SP٠J)90”B{G4MKvf4n7 0s(BT Ӂy{]38٩CIITT102h!1NLsKZ3U.o[g0x"ƫȌ%JjTbl#GtBIVNo5&[>l6ɤ?vt\^AFLj-2.Gb{玲/>WOeajz$YX\dcB@GۺYbERF > h9}4|=O<ys׸P"2IXrw~~{6VBg}\@ ?@E`걾fs#c/zRQDbw5gdi5BJV^fanooþs\Wm8:'Rq:X_g?#N>Λfj:qx<<ϡB#8)Lv &&ܴvfg7 G$fҚY$5枻BNuJyJI\\xWth8p);s]yd6~^h,gmc+/m{X*n͹ᛝPeif<kAFc8DXB:\1jp66U =x76"HZ8"i4< snk++f115s)(:>R0&1* ۻ{P#%b2 qR:]V7:33XZf5FCԃX4y")% 40Q 5>(""Ҽ_:<u>P ~։-zC~1wpmF0wPp`F9r$Qxg\FjB)«TJF8"4(d>.Mmw*"|`9+rq%.>%5\cB(w"wݮ5ն7:;hȥwt&@ . FK5c>^3yflH9>^,vpKk !q_* =P=.yx0 ?=K:9rptk?K {uvg׫s~hX]]ة8u#ǎy٦T%Ɋ4%`fpHN*-K a=qU_ďJ}뀲@"E~\#(S@kMCx#̰5IyC)U0k١0=;Μ>6-ɰ̦,Mm*PYg񬵕9NNZv( Z~Vף2(.]beeNÅ BJ gϞ[oƊ c<'"y%~W.]dye rUqBĀouns"tR݈]d]¼rU80Z$>7kgcow>gNKD_[<|2g}/b >6 $ߠ ^^Ms>Z(&fhڤEAa-v.y+cM2^ք*Pi0^r}޵Icz>fٕbA_U4h)ֳV8phgMVJqLa r9fmktKvV`d}Ps$Ib%{ +n.^d}G29Mcr 34Q8Wˇnl6^ K"#,#NwO=K++\k2$(!QXt'}wv ~׻8TUud#tj`qylc}Q*; 7t>(;;;<bnnoof94R|I'S_gshq"Os Ͳ7w&-cxg E~RK9MQ>_x] .HFbRz!Aرc|w}wrD4[-.\|n9 NT6pJь%&r%v馘+WiLMњfb{Y-291 VhVJw R%t ǜt $.+k"N/Ӑn4'e2(Σd_w-r$I;@kM8瘟giiF;VG)If&[U*ihߗRJ0@%uMgyX$iϕK357v5>K v=`kuRc#%sMo;H8pjQlo=Nj׍Ge(֡x;Z[r^6(\_x;,Y:(,{b)2`륚,AϻβlTRܚ sx9N9MlЖ =2[~z忩ۗ3H%UeiׯRy)ρql4(E_Y:vv:LM3l76^_#e(2/Um 8!Ƣ AVZ-K,F@ KgbEBw{h'eIsë-._l21;7>CJEP!{[zk_Zx jbG]1=ހ Qpސ&ՖBE-lbqls7Ca7s9R𵛐ʡ)E']z;,..V޳zq Dz_/<4ۻ=◈ۓ2rFF( 8/p`gsaǎ'AMi// Vnԥbrrk- mtn$y6!'g8Ϝ#HNJ"KLySErv]Xk| ^z"?C?rqTnЖ?iRII5sY1: E&TjsǃZ=f}-6V@3+vf=2>6 @9b?nk(/[%^׻f{N,J?..pYV%n5)4N'dKQb]lqUK]:1,5>GYFQuR3*UD}`y(R S١.vXߠ9~6<'#G@*ZhXRPh?hk)BqDD( T""3ֆpV ӖB=*{.\0>3"$ !O]HFM|r3mҏk\+e܌h< ׽31ڳFYP:!T IQ9 IDAT1d֑A |CUyNj0Nй|,B \ Kc tf( M4HFӻ _5|8Zq#$Q7@QbRm9 5ځ4B՚ EAIfT1 F30n줖'n^\raA6I Jq}_= Sm(FFq.O5uN w¥ٕaN0 ҟgs}(|wuw2n%V"$G+^nB88}:ATUxqif!u5XHqn<{Y5 Q87~kjvօ ;X-ܡehL3<%/uyc  AX1SXڀ\0"{ eeGΊ҈`\R3ZKask /%VVuvlFRI"g+L|4sEZr="á-QpaJhkKLc\]۠fLҚ@*W-E ($4M~_EXiZ5GݬF>=44x!)juXg&r##ۈ*_?G҂+ّSVgGD l M>x5eX9.X5CPJ BnuI;V+lllH)X!*[%WE0܁5zTh!YtSq6]mH~1Pzg27dU[~E2{ J*h~Tq uC``wo;'&#ρzh! yp.qc .(Ғgiyx۹Ma~ 7k04ʎn/hqL :1p22z%x͉g>Y<looz0-oNfPç4xA-ЄRfDeT񖲽en:w+T0 Jpc/wƆђqsuyii89z^嬙W= F ۡaYo>bZB\V@FxpƆ.Tez9#َ1yN/ʝ`ckg ?Ngln{;ש0Qp y,gb!_'dfީUAl(r,7=w3e}cc- u7ӔH)ď$Q\EQLs.Ku5BB1bIS֝@st{sܹQuVi FhPH D|O X@ @;C[Aυe5HU*<ؗ"AS*"(@kF,h$Jd.m3Pt\|HRȍ>m0: ׅJWx4Vk1K0b3?֡A9gAYMK[ɐ mT4NF# I%*(7MgN__*$fsL'Natrxs֠!"Meoof~~({~_{`m\)k.$-h?<_?G{l88^- i,Kָ|V}RP(5JA2A/[~a1:JB2(1bl_̿dyWBp sĸЍX iKĘBvD3d6[f gCov{ [af,^Qq8PB`MʏH_jm1ZWYhc%Mk9?4C;!^zi>0) R\E+&Ba1A , ]DlA9GC*vYA׹"dgRJgzIrecVqO?4.^p)I$r(["a(PIW@x6+=Q[ E?YRq #3],:D3I{=~~/0Apy'kA2Uzo|/pBS'O, ǫ8Be@-dHJhsA ϝ1u-5:/H؊w5xxȼmf"Qː:*LG^ʹ!uc$a{Ul09)Y{uXcgE%1RbazfUw5 }Pd`o9u(YVMI`v(aOa'gԢA~฼M\T.^iJ`$iQd9R8 &FSQ&ȋ~O٤=frz4˸Fbvzn8)4E' ? _o'cxklTu!=ӈg#(@wRXGf3r(q#a7M S4 )4y)E#⸚SS)X_իtvvI"wFcO1u^M}X⫒wuԲ6 J[Jߧoٲ$ !R i-s%)e0cRUrhIdN 8epE kP#I∨l6V0 \[[h"e\ +NUj*u8qtc29tvW@ YF"'" ҡ5%&ט`v[[7$Xܺ@g(Qn~CBҷĘ ײ``j͝w-nW O?4=i%i<+tW8yo|喛8y8gΜaffꎎ.cg=Z\u30H_K2$w\WZJo~}Cq/ʿ7lmmqknG_cey̷|w~'z'=r&(Tگه?8XxgVѻAeUUa[*K#ZԠw{tU="/n5ͼ(W&*ʹ9Xs28kCEWU`S}b߽Vu]iE#ǎq1DBU8 T棯/QљKv>x];ؗF:寳~ZD{21yShM$%Q},p>]*ψ7MʃʼZ ssloNLN;_˥KYzG8iD|8obLǕp9ף8o22 nҜɓ,,eMTDݦ:d2#~n#$MS:N6c8IH HA7r0L.QwFZ=:ْ ܐ>}3[zY%du24@c4hbIL"]бQBJ0^$ޖW#F#iI!Bj\rSjCel67m3}uWx,;xMPz=⤅-4 ,=;$Jrtb6.cbg]m>MtE 灤t1Nctwwyw;d}}0R6>,y׻G{IJ^pY[uJK}/l1F[ 3"اO>c|h?ʯ/To=^Y߽kGy߯w?߆烟,8Αb:弪̏5v{u w>̽oywn=/Og>O>mh_ʣ2"G, 578b:nps1$tG-ܵ 3#("q'' N[~cR#+)e$Y_dliHu[t žqz%?HaUB?7>7`Bm٨ޏzo\8 j_{lnn$ ^2WZl-Fr1YqLGX97ӌdbb%%ݬO$"-r"Ms嬳tQ84l*dӥ\ ȊLkl)7)A"45vwwY__aʲlZz5Ixp\[4)%XX(BXGB֧),iE}i֖lk,.. q;~98p9.hNX/.P* Fi|đ$cz=$Ig/jlñ!IK l!6(uu?Q ^Qe?8gt:ezzVY},˪_*>(w}77=sF6똜lr8s}_wEpϜns}kng/RIf}l֚U`ksCXXX@)Ʌ/O47UY`k]qtmR$>O2r3qmqhᬵ޳._%hқ %]ɓOÌ#B #P4\`Q 90Ek~׬lpzqqN鉔j$C(l6n~_"̸㜫Xբ(hZH%)BVIݢ0=="t]ړmVnOWfwc,/g5Z)mFRʟ3w"&3~^P8Mp RX m02534M<sG0jzX$Q)ET,{dģqƭ,{{ia~)짉&&B-$+hD1n$V>fBE =u-SBBVخ3uQѣGYZZ6RGBp/}K|effoYR?q1rEqf8r5?+!#'OS o X1/q\e^.Jhx -o{+??_K?> ,B˼,8EK艣p)x fgXY]( &)twS'OF'xAhM9z(&HO:E# 070G}〛*#w,teQ9^՛_unEAdiy=Z")|q\i cf.0FW/03{":{@o/@e}ueH`EAggg3XczIlj127?~GFik*ֺ2ɉm W7׉/HK$33;y6-rkbuF$5(Gi,X[Sp͵ Cf rZ9zq$+rRaj135J Y $Qk.'MtڤWsFEH +!{TJ_xtp !r4Δ֛>E8N}` hRcfk-~|;7mlnn_CN?JjD+tֈdkYYar0L~.RJh6/=\O12cGK\vwwy>66011'O;_kn Ν#n}-s5:rgg<'>}Q.]D4gϞmo{|usrf\t/}KdY7;vQQēO>>1.\1ӧOswKWvQ^~'!zr9v9>Q<^vݗ(^'~yxywڌ8ak{~=fv~$N-._g8hsUͳqL'}sH1=5$;=D Ai!|νPn 0_qTH uX>r- "~,G,sQ&&&ȊKZmz\glŀ1zn1d>q2cځc%q*Kl=ϱsS?ޢkˬ f9vi?C(>tzbbǣq\nmiJgFw[ckj3*˾Ke幎 T<iC[ 8iȲ>NXUbg1b%QHJ#ơqhkglՖBDaQXΙEo[e/.MZ޼0 ˍP5M星s_y^-gg{x}nO!R81Ƒ,-x?+t;LOLp|Kӟ4.\`qqwQv㵺?lguRt̬u<ʯ v;@H>qy7~OOvuN3TDQ?ΥK8z(sCr1wOyw}>>!fх+_yn4-*,em_q?Ypchcogjr>~S~1_%O^?#G[~o{[;{3vہLxcL5&JzP ig{{ÇWQ矣=fii j mr._D?~[7b&&PQD܈I(677кkE Jz@8j˺{{q7ZR\%c 8Ab~~xRBѫ(kq Dksv~3aOٻ%}e;G?wuX#.?f1ΜͅH>xLEzg)l4V]u$!'18O^QR(4@-Y%`iv%p_ i//"L`,Had;j m-YnXe~Pe&EE)E%$QLfY~Pyt]^PcuߌٌQ 8r^zsC7;k{;|st]>|O}S<317|3F8]LArg.:q\F#3 (^ve~8V#FfkWUϡaiqv7K/cOq>Szя~gnDɇ>a7M?_r}o//ke~y$iD\Vr⃿!>kc8~~V=̿]1gݯ=?~unV~_Sxܽmoo88m˩"%BChv{]67XXg\>k,DM&i##|1k5(K.M7e{{K/qSLOM!2((rl!*3^`07bC D:07nv]^JY9 b#65"w Q@ZMVVV Z1"ΰpjtl_>~L._}d gM:0vGTfʋ8]{HapU%`f%TcV{Uff;O$IB54M&*%Gg4M&PDIu_It0 ~E!$q# .O^Hy8X`?׍2u`/j3܍4Y^Mg|Jջi7&g:b,H Vz0n юB\aB*I$ 1X!R0ft`@Ga@K*,V[B9E?/9(;)jV䅵EEݭU/]_\Z$j$G;'xA <σȱ½˱c'?Ƀ>ȿW?A`gknvy$x?gpTq=pN>-B#YeF;Cʡam8qK9RNCebb￿nuzwEbsc6*нon[xm8ĉF)E;tYGeC>5PADqB 9y7;xX͉cmrduy8y$ ssJ 36X<|1՜9{O=Jk;|=7x׽vN84j\<H|?qkd+r?Jekk !Y\,ՙLV# #͕<ϣ:^8ӯ ~fv?{fo*RR^69W|PU%zR$SSSQk׮A8@%đ?9u9y0::4r8s}/UIm%cIph3Zb$5ٞrr:N?l2 k6k"k({ _1Rq[BHK?gavvZѣwXOB!)Ft$_!(:TGS*<7gd#u8= 2]$݈fKUŽ jRM6„!(#QS vñcw;Vxn?MGd5(`X̰Z8ws}25ԃU vd4+bvdF{mV_fy8bVf#,Hj HAE6R[q2Z#Z !W\V1>>y~YR,~Wyǿ|$M qQ V]ŋ۷cǎ1::ʾ}X^^=bISX_z3sdih!vJ.g,UP-sÞa#Xֶ/RCF\BQVGk/ḳEB?)Vu=U D"YyFٱ+Y\jqF!+k\el|qǡjW#Xe"`1cڝld0!-q)]QDA2q;eTd@ T$;‘h%C ]k -"'ƫ5|- EXBѸ$ul˫E"R-m0wj[*Ć;y8 |:ά%5US"akDaLZ{i@VdJQ5H\Eғ%~U#%Jhqά:$r0r;vC|Ӿl0Y\\d>CCK%ʺPķ~ Wy9~spϩ|v:q_C?W%Z䶿|5Mk!뮻z z.\0 T5>Vw #(VFXW%z8i;AA G.!:5!L9n2ݨr45+5M* ֙<8B'K NqC!ġjx>ZsUy}Vx521p'8uꞴ frr}\x88z(SSSz= Jad`yn^*fbb"n7MiLOOs%:ZB ZG6Ak AɱzVի4MSPuLA ؤUcccTkhlRXJ!B%:_>Yr8)ezj PI)@uݎ&]GkjA: +`um^|nˁGپPv-3GQEa^e@c1H  ~ĆfO$w3WIsd@dabR "0G +B:DtG#%^)/R%a+L`e טdBbh_Lw?s?+hf#Ft]Zku:*|>y=D߰ IDATceW/>_|)~g*J%s@`Vŧ>)fgg6fAI$9so6N:͹y38R0u#F4n3ctBNN580-QR0s Dx{;i6ܸqnRl&G.7yxRI)p*"{HabnnveH&=YM)E+fffxɧHq] *8x6fk1Om7nך^mܗwC$0EX)'kvLU E&Z.\.oTnjJ)ef`0s[hudyuhPߗ?9 –c2i9p!W]eV|2C!0:V}8T+(bvi= gc'8 C qx-8~#}alGyIflf>{,W^LLLބCCCɻcbrVrs~_Va}}7晚ʔ*eTbS킷/7XUbou=t8XŸykn56HR@S~ )tsK/"q&khKGq](UZwCnTe0dyqrJ^‘#GV{`o]pkDaǏ399I⋏?ƥ`7nWvf߼yujz*VNnr8lm0\LfQj@8XF4JcP6}1V6k5:B 8JAW"pVU*։A-p@p_, ۭ; R @{I텅.^i*jR`;p,-XnPZH\VPzY~ htlpq ,/,3{e dld)$kKKsDJ1BBSr\<$^ޓ|痩q$J-Cs=TB^Y,&3##6TwToY%,$. wmMlnZݏZRGy?6|&UA(mPhcr5iet*Vg^b4 BImEwIg% CY^^fj>d38~~ka Io~WCݏ-_ۿQ"4-&=3_5_FFC$ɱ=>dΫJu]0߫90˽C*{*/HRctlNhiMH#  P9!%N : . hGU"Y$rWz4Wj RN<8.\C(9PJ)*2+,-.26:NŅE #\߳6;RMyq}}8ɥ88ox<255yzy?7&9eLq[OmWy|P/䂇Iהj>  :.IYI$,Vӿq{;EN"ke}Y$ӟ`lc֋hY -5Z.2=u^S9y]LMM6d`#S`u^m4jYmR.WJ>RX]Z 讴)h..\it"\\E(nIrhA,VG{!JnCv~Č 8gxc+쿯@g;L"R:VpI,&4qlQ(F!Vh$m R9HKyw=y XH{m8 ZvϜx!6 T X\\j yH(-|۷|1}ǴmNuj"|ջyۛ~৞>oGx[gЏ(ozw7X*'!F'V187R$rwbO<]bdl﹏s GڍEfښ&' i3zsuc 6H;no+w+vT'[%_x8{9ЌabBCC gͫCTeU^[gMk|!qxA*=噳s\;1t<J:|aRg^؃7:ĊQzB{OV86$F 6wKEF"E(CTftt)8vccc\|r*Iꝗlvbs.hg!-b`f%[0[Cc8JV1_AX:ouf/6Z=miE8y((nlō͉EYP4 Iۼ1)P%Y0"$X)4FZ-e**"m{dy%Hi ە6Te$_ Q RT@.ҸORR*YV8^=j*%gz+8 8a^Auc$VYw.$!e؀x h]7F7\֗@i\t$+Ղeki"btTFkb iaL͍k濫.ٱ8rC_n Rg_H شu\\Ao]LLے\RPZpXTM')@1r`tz qlҸ{kZ:dZ&SO"dq~_L[! D'I\.QJfW.pTJvq]ҕ_??I?/%~g~_*p+xWmSuq"E5^FQ.A?=C}7>F𭌌M_Ylwrcԇ2Jaգc<}*>o>}Xdm7v{4TMA=/h}]x;/:-//S)WG09gf@QG*wD]=W> LhZYj6iwX^^^AO;_\֨PYSSSZJoo썽iEHm a ?(a~.X 9Z*XQ$}(sXؿ(wєWeii+Wt<ۣ7zw "a[ѤM0}6Fצ -"2+IѠ1<:'7˲mDZ7PV *ŞT+_o'V(\PއfJJ)UA 2KڨHVݮe\H؝lZ]誔(,Hv$ֶrU D\"B2>>Αw0wc3W!1T&FcBP YeNi,7юڼx"8.Q*!11Q#A&v7p6zEc STߩiR<ѓVQ܎a#1J1}m[ bZHź\A iwc6 Y%?;_yE\`FΡ2adRzӃ٨gb- ?-Jabqaj|VO?0~M9?/ү?#~o>/>ԎSVdMfK.TcGhƺpsiPGCUk~Ӄ8_N+1(D(ǔ kB bg_M}IHy ͕58@85vvԃ@N;kn&Ν͛KVJJJkz&I28 qDY^Y`axlVK,!E]| I%cFGG8r웜VoPVdymNabU*iE'=THM`#˭DU3%A>ynkS\qQx)*mb25֢뀵,bNte MEPld)^o^[{EnÇ_?[og Ljqq^ъzt$''tiqW81Ie0CkKk]EW+0psqnsmP;z=Tb&J)lQdZZFQ:##C,8>hR1&.t{ats;)Jm!s뜻@mx;NT΋WU{;4`hB y ;dƍ,P9tN&{Ñ4QbRp}05}kt+X\Ym(O%;8cG\z%j"䷸W8,ԫ 1[[>_|-&1u{4 F^pkOU67~grb5?$?Ŀٟ{w>u7Ƈ~_uW Df  \ran<H"vÏ=ͧyٹi0y$I݈Dz9]/'1 T!Fp7G,/-s0rChYZZ\azz?|ɠq4[vns1([˕zFzN$XRC0?jrt0(|"f| QIav{ 썽˱neds,m9c"Lυ֚R%aA :<72ڪ7YC--c{z=W\>KP)'8CdltwX~M{MΟ? Ca~ii=B>S%tJS@DH(bdxE*z#" 1aG ^)ijs! {,3::JRվ'$"&.\͛߿/7tWv;w~N8=CCZرc˥/Smŋre#3Z{tVHVihxP J;wCq $(W| =vdeyzNýߏy:a&ٗcG~_I|&'&|om}{wO{9x9c=i5aeI\zyH3q>cIH8VHBkC[z#wyR:9Pi#%Hvt0ymlf+%q*A&JaU" m.#Cy(713VT lMn׶ӛ~P ON믬fZ7O:CFܼyR>FFF$pp[GIbBHnG4^s]# ={NpwGUjLcr|CCCo5 IDAT(x_'_X`)X Z(UTQ!csRgo` (ɾeKm&w}lo+5cr ΚW?R\Uɪћ3(g5 74ݍ=JY98e0 Y_-ZVݿg?M9wm[~~ǁ !qJT7>,VZzju}չJC#AV":qL8^jD 9:RVȕ6JG  AT8Z3o4ZS+ܸ1IS.X|)9hB i8fvv~5w *[|arbnj$1F,ħЋH2t['\.D>V\~itpBL']tr">ԩ*? ǎTld+`>ٟ ޸g?}]/R.?{(go /JQ N'7IId)=oC00"I+gԽm&)?MDjN+Y,Alvz5p,_#"^6)IS1nNWTw!@u;(Ev4J#Vdh./DqEeiI<:Qit\8sЫ!N*%qkޘҕHaG<ʽoP<ß,vGsh!!0!l$QLw|/-"4(d<\bG&=?is#Aqmp-Uo{ּGp$tq{E˜݀M Lq}&,5\iMGi80iOL+¹aUDVjLO'(8NM٢Z#/e_l(f5W׸\Ҷ뺬 z^ؒ8)&KU[VtL@̳OrTr cд12;Pw/76@Y`xIwpx,7X$$(ba:q0oiVz.O>ʹ+7w K,\T5xNGJ I'! *%jWR._^A G*~•M\]cu<"n{r-TQ Gi{;\z/o|73cV9S[YY~?ReUt!"cBfMfH {$a\~Q/<]*2\'mB$+-~72u^fB"\ Q˿kO}(x{?\* Nɟ} ?mcoFqlM1NZze3)ԠlA" P2}ڤ` y+3RZ=A‰A`fvkff~|ͪf[uߞvTUQ<,fԆԇGфטI&몬9aCUQ^6)LQ h QvS m'EN] ʨIGJEާ^e:#i1"Q IXcN\^Ŋ AQGN(SGO3<<›| ܕ9:k]Ll0#Ikt Q ƶ6)D٭cLe:i"ziT&;Y12Jfk 6AJJ0d?pI!p+SBM:'?Z+ҹ0LYqʘRy*tkRcEYN1cPR.ƠUtTtrBBAݥZ055'0wu˳s<(Wk~vs.cIN{oa|Iy.rz5@Jp]ZKˋuz.AJ* =ʩ_ 7` qW.G瓟\ࡃZ|ѣ|ջ߅#+?g>O{Nŧ?0sMS߇qԢMN2L$wTFqR2!*aU Z G灷 Z[Ӎ@x=f4&FK B\G8DHs$W?4WW(˿k':comcCHe<$cKxQ1BI iV4h#RL>}3l}0:oK'0nXNU\d lTCSZtwy&!m_&KOgC(W+KAQ9RP#8q0:njժBJAble٤gj8WEM1O=z6/~5ٺUgJhp]'tDY!vE[!(%IƐb,}eum8B@5Qس [qKp^̅1X_\BO+g6۸x+THT`5+#$nPq}#\2%|D&u"4yh $7pbp6כ_!Z!6Y{AU)FXh ɪFZ:aա 4^ұ{71,P>^de'ڂAOՆ;hOx8~M驍{Dk0$,/r =dPeq$kGHJAGǟ gtq=jNIGr-k8}iV8xcckuJ@?VU"IjGڵ=7].?|J.p]'ov'x׻/+W88Rmd>~G-::bs|yt'Х^w|zebarjv!GRB$!qL!`YH6Wasӏ|;OAK}>JYPB mm* y/1?J֭\ZXd+h>Z LEcxsUK^9.ajIZ|[4s5Ҿ>*Q eEcQ 0[Iۓ+S ⨓,.-RU̡!|UrUZEkXGK.Ke:u?o!B w ^auIIH) ;m8"1(ttkw02~8CĨvL~66zm]`]O_t'O~1AUgG%4b뺹N$$Ic{m(BD/n+|zF}A<[ j{+4fFJS5)=bdtNOs OLpeWen7zhR=w?ʷ|7;PQ DZY)sG!up?'\z35Y!ZGK`fIyǻox;鰎0aobd- i )AZᅧ&t_d$r̫39| WgG?[/={col?h#}BO27 @K{8ϼk.hG=zb9T*Q*7v 3= *XX\T.355U UZp IUse^{]rL_r@]%I(Oř3gXj.ԪLeVØ`3=cvLZ|Hϣ{t7%peI7y wl?Sn 3TQ.8j`Mj[2;+%+Lr;W|cNcίO~8Wh_wɹ7o2]qs<3y !07!)mnܸ0SSSy6>&IBxs\xqʆQ?&Y[\ Hz̵-_] Zg}q(~L4t9!R%T}m<0O? vBul.mf>9^  /={col0̏<`L%8S@#[mr,i W"JgdWOTT+F*{S 7ZZRo4ʥ3Ydq9(d:>80: f(h0 |Y%u!3p[SWWP=I" )&iA [V=O~av3D&)Eb&@5tx3^~ؙy{[AQ½ɓcp 7z)!F ^<`O^L~:;<%^{Uʲ$P:n\>}Cy+UQPGE2豲Beg0OLO&**|U@0^a3ʢ碢L qWQuzmct$:0B<ϡsUM dD& V[Zj喹,ƄsɎ[L,S=LQN~dac8wD[} cvvxK {#n^2 )^'u5!!JIf{9 T"M_[W $u~]+q}n??5I-XŊbP=_~L~5$LzDTl:$cvwLl7j{WmNtrMwa!0"eyޣ :6iBYRUofcc R)(%֤Vz5nݸo~w=ƻc;c\#E ~hSN"SEYX"EvQNG#yR,h3|!5I&t[4eyaDa󸛀i|OĪpUU:4BU.h]sVXmt+I_ǭ"wFfMɦVbo"/l "6RhQ!@/Px\i2&p57o[l™ͨ50A!o[}.% ] Z\wx+_3)'{U>_W79;9. `/ 䯽N5w;S8l'/ ._E+WP%.\`mm#6mqC٭M6kLbC5)l Y1)֍&##5Z@PMLj`"WDUg=>~v?{4ϑ|곟ɯH~_9{ 3OΕc̙knݾ`0='dW7\Q͹YY"M6"A@KEQUU#![Gz@~EpLtcy =n"RvM$:ɻ4bRS5cB62'ֱb1%Sߧ? \;1.EvEn)ӦTXRMi @bюaty6Ϻ@~N(&5> &̈́Efg:$I[m@hkɆ^hĕ+W9w4+>oqWn"`JwUBthP})v)F%jP$k,*&U` WyBQE,A)`j)ZSU]GeGQM[Cn .i{ j"U -9P7@]]7,]"*%[9|Y p< e@hDիT)n!AC(cGUNe5IIoR)bztI2*@ @Cf|_٧Ǟ#Kn䎕<+aE&SƷw-xK_ڛ\e^y!pg}ZTܹq)+nr?@iZ@f&aw6i7L&E=G%%04Whe1Fe&~ @ RhgkpBhhXBP|KC'Zs})ϽGׯK؂_?-/ w}O#?q2\Xn'Cd U?Z9 cpε {nŀ2 &4IBem_a{ d#Fu`ߘ$I"yk T;`i6W[ s3oI46ο_Ӌw IDATͬbD}4%9uj?7AEʓd õ!w=q3[t ^{ q *WXGbm I`Ϟfe'MRVyx2auxw}{ʼ@+4I씙z1N{ FXqJs tIBfq{f3 ]+6:LMCw:]j_h <V;F*ƹ[=լxGmW?}4o_{:o^{LD cW!1ʠCǨ>ntU>iϵ7Λ7o#n2. TW wK_}DK6ɁA*笙u锝W^XkkB2[zw^<璌 n%2rUvƬoryau9R=Μ9`03!:*`TT(0Op63/* cK$rm&RuZS :|cfٟ='~_><֚_ş>a~>}Oq2N=켈D m/XQ u\%A ¡45HϷ*.v+}G8s9Mc ^M0Om:nYLi 1J5Y'< -J_maY-I`dٹ-RUJ46մ~i 3Tg*f7U@ C΍=.v$Q8M%BJ*2a:[7A (QZX]wAGFlf,~+=K9LjP%Vf=eA~x 1FHN4o^F`y:$IBYY[[6υH(UTZk X#x_KP h!%eާ`ēCݶUkC&#y2N8uI/P*ԁr !2F%n(*ɠ?ASW0xOQ1B!~RC&뽺[q>wsv]JJV T1Y__'RLChUˀݪ]"5u,95y^/`Lf{ZXssU)N?0 lk  (-EOB={%p-vGTytu|wϥ6kQ(6D eE8wpWlLa/:}sfAE$ (#bjsҿӏ_ Qe, tQ7'%05RyP=}P`Ѡmdlj){pnMX٤?Xam`sj<= Õ.\h b)48L^x'^gRϰɵkpqeܸq'x⮛m#&A>#+5b2zPxpޣC^^+* hEX:ڪJ< JT.!7=&&P1cjC$iq2NFPj ]2J+ɐ$u&Hӄ4MJK'$I ko#9̫4 4Yѥ{B-ĎRvZ:EXYOe2Y Ϫyn5ymU)&B{U%I=!O{WP+ ;v-llQ5tkR $us iwۥ#fm{ Y2*E1/4m ^EktPvGW'sUEm qQ:5D̼P*&C]kڮҎ2y.ߒx2lbxcY_Y#5 Ũ 4A(5Z9x|… ~,`TkxG?K7 Lă%AkٟNCN+>΂d+DJA hgVi'KHJ(ZYaoiJ1 խ3>7c0裏rqu9uY 6 m3O#ˋA"D)UT%(J_%'%W-oZVjڀr{xk2fWrƠLBؽ% ęt2NƱF0H4%2,k,mUqʴ,Hkonߊ<=(wT g&Ҫʲޠ buNn 86ZkTݿyd2aBmms~$x\fյX|F͝V]e"%s׫QnYKKI]yJM,HlT4\0(61`Q(* ܔ e;: & cgg(b{Lj)3{Yχ,9aq=MtkU1ڛ4*iJ&-['hjj rct$MW=5(7} %6tz/\Jbf~%Ij,i6=@x~8L{%\`m8DnAkhE f\Ġ)9ɥ5Pa 1 k#+$8 dV\(K\htGA?<V-qγ[TO8u}mr( N0tI]eA1\ԥ'k&;{#?vյ5wnsMyΝ;pHQـ|x?G}t5M -JlJ(`ʭ^֍X'>OhdFqd+HOХwM(]cϥN8xϱ+5 lT:[鎮B̾[)Zy._|̓**w5둥ιÌ՗QJbzet:E)FG82˦zp1WpF/ Lذ=FXrpYJ>ȍeɓOpPIW?)wwƔ{T/s~.}H`mw ܹsURyNe<3Q6>(|9s7P {IRIbAhF|~7W u6*;~G6\aucJ4o%8G.2I d)MX!,wLH Tj:n>ًe)nܸ͟ GkTUӧ[j;N XPClI\,q+J^UJ AfTΰz,>FhM͹4OB;'8ZcpdG0bk=( uh\ =}Ǎ:6iqKMgC9;:\irh[q1&k*(w7iB 8H^yyzizKy-Xqmm5goUĒe1!n+RcPFҔխUrbr*)qR*WPkkkloot:eggPXJ-$aucmNv}8Ot+ ?;E_Q)v_3 Z f,˲]]=Ȍv~AW|,B@pO>vn=VL xc~g">0gbS G3omwnI¬rhxahnN&Nw<$R'}aJx>.xP8ȔeT>ySX4iW^|?9qI A DoB1qiΝ$~V`B0A0f(rRVoo}En0J0,뱱)qы 6֢Jbʀ7g=۬xKl`"Q1Uj[#7EcS7R;7wƐPI>:IX8Th ,*x4'(*FSK֟q2DXwzPſu:Yq~mQl]p5ףC dGj,8.YYf,;ݿ[%C^re"6Ɂ|Et U+N>XUFV3V׸qN*tEEh>kkkr)x ܹÝ;wNsD Z}N=ôCjkQauqg# 0xVYT]in$g`UUay.Zg4}EQ'sʲK7]ߩAPAE0|Xb y@a*Z`'|IDҌikoOſ'$Vʫg_SӧB SطFG%uvXn{N3R{W>ﵬorY54lҶ xUhj2ɣexǓ"، ?tVPGhK&/~JPaTU:4XCpJ B KOp6DQ/fGceY|I^dg@yFHlJ@I^('d=ktrD`e) R媲.^tYDCg2 ԇK[mntV , ʢX,cuc{J[?Gyg,xʰa-`ƇC0hmEY9Q{^}e0)?wS'Hłh}ƣ=>a1(7dqO7(U+Y Жo ~b ʃHR螟Zx0(^̝Q:D:&_..߉C\x{'ܞi!tm|UnaTQר]C9$7(ђ, %޹ct8`ѐZF9* ҄Ա&Iy㽣 fSskByV Hmr\r4N Ҥ6(>y& [>}5t=,NJ׻y_X^ OR/[6m󲻀l&]+ S.$N\} P& VB r&%B@)os/O_VVXOi=1kZaawg+W7[[={'{ yU?c,:A~zM1w]cg't666xGz3ax2Nq\v>6PU Qd!AQHP 0JP;E!A?W-eziDoa}$T-vXM=ӚHA<>j]Fv-"PTӮ ZЊul?Zd`H$Ծt u/*`T6xI4y3%w⪨V "1%аSts[X|V :)oiѳ=bKo >֔.GEuZn8Z*2EБڢ#*Vt6MP(6vJZ(Rzn]EJM+!z()޼ƹ-{;T,i{fm ib1Xcc tPK@TY$>VDDagR>%4JGkYέB><(hre1 +A hTr x Uڴk}) j.$yTv<UGqSBb ?I 1HV)`lS50++PBQA 4vӑkDնЁs ~"@W:&tG0|F oe'ѢjEڦ(5lf!;?;*>#ȡM}zl( Z6GZt㜌o_8JaH5}!O͋^*2;DA Q,IlTfU %b%˹+%c]#0M4tDeNVURE׿ ^roXު=/xL:U[:zZ1D(R FU{;|) |~![g/g?YoPYq g00i\N+C@o>_{ TUŵWNFO.y{^=ɉ=jJo7 l״Ei{Lxɪ/Q\Zh]WzY|HՔ:pI SbbR e4Bl @ٽ 22! ] [y+JugKi$Õ؋H|McɤCՉnun2Sn-c+@*H9)uZP6R]wB#VKVC !.QB>JC$%M')9soh2bx.~ɟ+yMzuBZ\* iPP}#OIq?s z.JYi4?6ͧ|8=篼ս]V,7RUb:agoGVM/h*6\pE֐p{|_๿yGmr4ٳOǙNix\ / Hő.\]Q>V]~}28KS{nS JmOnP'B=>~LbXˆxIaWP UHAjI6nZ!a*?7<>oK2uhCk,R/腊'>~cCxkø`MV!QnN9eww7z[=|?SU ҄U6bӔ.W^}|s?KMQTTU2%1 R\~ܸ|3O?iOLcSOOvwMr@_Y_3I6X%Hk զ%N89w<)K/J:ۮSjDjTJAZZiC{ұztw7kS@|Hk~GG%SD9fx#}XZXm}]EnROե4MgP&`S AB+EbQslڋZ PW[]@DnUK([T_"}xHE efǔyٞN[H콌 (+|JZtCkU3 Ԛ_i$!8GAtcum m y>(]AM\Zc$XMе]H@޳x4fck,~UUeY]&tW%Sd) <+ nL0KyaFI[*.KbuEˋ߱B gZZm}KJY}$ƔH+H믂c-QUU/pͷpl1 >Qs?Ç{HAՙJZFX i)k׮qh& ?:ȶ6_e1pb_p<>>|7~dB-h=۷cg}ѥ*lZ# >NOַzk\3e"1;$xIp!RQAfտzW>Rl)Sv^Ȓ v]O-Kr`S꠺L=4V u J+Ը_C/\ \Z5cmI0/;G$ܲ:&FU$(JpedoAT"kyEekm@{dBBILUѵeZWr D8 b]`^p?4v5;DU4" 2 1^ӯu2\ JTmoO\Efe3FEQeL+nR'޳4P%7od0hd2!I$ f{E~\/VIpZ:Q*:x5P GGBgxM}gϩ`C@*+I _'ҚcIG)Z$ P$PUhZJt-LbSRCTODTh:k8~~Ow>k=CjȻKJ%]C[)UUÝ;wXYYXkzSDz6²%9{K4QҗPy<ʦ(mBYC!5{V6UIf=}6-d!Ye=4pkmt &:G%sV2qaovo޼? ~}"5=ʂ>e^*ƀS֐G=!J~ ZQK[@Oٽ -n>s%GtSUAͺ_zem[nqUʲ̙3?s>EIZo†R\@T6"qwO9vIBJKIhU[Qq<A5u@>\fF/Qp7GY؊_§_zU\ޙcw6Wx|:ԙs+'V>gs2ʧ5.h`eieE`d Bh/0$m>|4hjDYCov%u1 ]eU"|q=`GMϲU? Jֳ{yֆX'-%CL@JQ B!Z Pd}/mQϊ.hw~uYVbHM JπeC*U=.Uid1J׶+MR>9 T(WS1'2C\-7p,4H.yEi&X ne?==LRqK<3Q*m|w~[8˴U\Q@|9:/^bzz r9DKt%";per '( xտxicXiM8Hȼ_:׮_{Z~^^z孉%U%? ax 3Xu_clݱc/@TVo|swo b W&L[s5銌_nz]EƆ GMɠLyOgeff R5oΧt~\ƌXp_pNJ7]ۏd,1> y-][gf1G [ԫbqNKPr ep{K/qnr=Qw-' :hp_ȁ¤DhMwmᖽIS>t4IIs}wqf9yO={v嗜C|QT:[lp)_u7=p|w'VKgi7P (RR9Ex)o\b1Į{@.ۏynL:g>>ƹs瘘`jj4M{}ǚ5k@Et#Br(f[)l0Yh7DMpy.\fݦuC׫(BEpEF)Aܧk&/“H3s8%b )â)t8–^C 2.cvFW a3\GHD. ?ȾV/EZBqR9$qA lz6 ·'AM6N}[/Ak$87(Rx#*B2* QpHu)NþsH!1KttBvq -c.0yojnZNLq((WJ8q"B E00&D(8hc ݬH _^֥\R T'ͺԇW/891=mM7)&f{eBSRz >x)CWu1(|{o.GXK5ܹoX =߰cfvW"KEHM4Aj\d TD$$!-t UB^d YRcD" %<3x_5cڍ LŒ,/"Y  k9 RKACZiK "QZ`=nѨ(W*A)#˃4h5ܲoOl79"ZZL8s`O IDATg}w>}9^ݷaun3ՁRRE )2&'.r)=4_8DE9Hq‘caB^J(10:O&_]b-_7px^JMKxc֜+*iׯut&롕dimNnq#g.ࡃη#F*x]AD2Ib Ck^.2xY/`!\N)Et]ڃ"{ C'ΆEaQdQp(Tl'Ȳ&.TVaM !R~Hޅcr7PJy(W1xcItpdmt.jC,T0Q d s9)I-=R g1F$*Q&Q){"mhܒg%:hi;s]13^&+ *BV! 1X:b_:}zcr')(LΖM|w~G;4Il.RM-ʨI-!rdx H]Xt\r Q H/P2Tt(RSqD( ## Sf f/|A[FWldpd.)0F!R\p>ʼn t Z%Yq)J%ڑ gXtЄW`Cy Bz:33\Ug!:ya .$^`ւZ,fsޡug,j*Q@rJ E :-8JYc](tH R9mpQUԪX[HoJ] rJQQ̩3"!%xCo\q}GlR3RِG+MD5@:x;*42ccϿۿ>ȉ  (׊XJ;L9GE q}o߾eY!bC$GjH)ݹs'w}wȩ"$yMRjuǮv ``b\Isy&.]b9e-%J*lEl)Oq᠂ Q Mdk~˗NOiOs"<[ﻬII*yfJVE$e_9īezp#o,^8gYn^Eet2{}7ͷ'Ǟ$*׈KubY !eEa>Tpqt]$yE]yBR8 5 ZI$]H[ l0 o=XWR"^{S)'73砘'Cx'm.̥!8[J(P~BpTLax% DRHE#jUVt%8}FZZT.#R@ 8"9J8"C:h-h/ITD/"rY0:g>FKIQ(Ⱥ]&/Mpf4y"XCnrbko ҇Pw`#4>  "iriU[c%)>P4xkQ@  _*8RLCE{=g=p4ԉ8W&P0=9@UrxgT-\pĔ Z%7cBP"C-L8RG@#rŸ", IRFkp.`70<$nTWYXHQZaM'I5? `m[ H. n P*&''^1{#MaE{O)H,K(%⸄:Npdݙ I@NwgeV)f&ED:Vڥh!4Ng0ISTEN5Pl9oYRDR=lĚTf~iqN"tEK{, ))YQ—"KɌ:K$I(FR459Gju@ b"mpO)\9K/KYFXYΥD`&DQC"$R"5i:G\*hL^%VZp)^Y"-1.FzY,С 5)a bE *) \# =By"Q"]N6> 6%R0h鈤Zh?Eޫ07hMonfNVKq,dyN$610EJ{8ТL)EuVxW[ $/1H\TF%RLQ/6 5Vmh&+(z&N<$)'}l^༛ j"3Lr^U"Q9 RIhHi"eD]0=2Ȅ$ĉR+-^W;nܺw{''o/¼-|m7j0Zk@SJ-W@/J8-_[5"X\f#)IJds†0ENdbyхV :m.8X#@~)g2LKraQqIyO+Vqw2r*u9[ }:olololsV2{DEO}Өk7Loq8H=R,L\>K)(bET\b&JapGtX$&.iS ]$tZt[=".M\AGP0;uK穖"$ 9Z'\DUYݙǛqRF˥s]tXg0\ .2qѐk6l B%6>94&urgIK-ڭ&X>PEx65* Ψ&+Yb%ij &f]x,GA0r._:-LVЙ>O\fevD'IJ6@BEʥ:Z K[|ftd_+S3{ZWd!S{"qR rc-TEof:`5btd!":id"8ӚF3bL֣I4#=( v8֠$)>tf*@9u,,̒TC rgC~/(mMMjISF(a JhJ$ZP5yh-vt[J9Gat(0SX]% St{=LE΢dA^fg-͹9|Ѩ֘RUlZ@(Ica\sIJ}h8!ӂ'1YFn6h5D6 V4 Ӥ*ިanszDn[)&(ɄN@zʩU+ Ձ Eh.L`Xu1Ɔ 395ˆ2N`aK^!r˞X?4He 9t&zt\G Xkx7@]jRX1:F2@МǟʕK$'OA)E}L5Zq֭Y٧>Nګ2?;pux襞6gɻMn{Ϊ:wq+o)NH LAkQIvlZ9*V!W&xg8ufH#w2:2r)z)xikyf(kX[|/?Ja,RN:8| APbJF ,8ze-6_Zcp,9z,<4.+ynۻ;o>V4 <#;w$J=yv>Ose;$B bcm۱R2Ha<:H ̃8~on"l QCpY+]<0KE"O B@s-:2Xw~6m^u Ͻp^|*u")rz:Ӭh$ھ[6@_B% y׷<ٟ|vrunT3A `$lӞdpĭ؆q|TV=ęgeϮػoqI#BʘN74Mmϳv|_u 7/"z]x䑧9v$밮˭{6}*2Yh ҜrxTD61n-ss oV+yG87GHFJdj^򹇏qes< y;t&79vnF,v$'N3?l!DQVO=̉3k (.aq^J$slY[ᅴQQLK|^&> vck ?GW#w(odh{wfFhDXh)>StNʍ7SW&.zzT r <K(:>Fdž0>LL>N=HBa7[RWܺo/NWشavf/sW?Zof}fryr..z#~:fIVRS(LCy@(}vc 3'%Z1Xmݰ+xux.K~o+xΟCOM7o_nyyvɶn%[k,={vOݢ 5?q4͈Bi"*A% L9s[_+ǏqK {n;n>If36!mP 389p6:&g^/Yj%r |ӏ1\_ ]AJWNsνl^7ʋ/Kq[ƽӟ,b߾ܼk3祣Hݎ#ђrs9&.^U9uWNpy}=٬Ǻ-B!/V)Y5q1^~)cqǭtxTHr`Z⮻n-əsg^)q= |3fa!\d~jH(&U)Gqq>'x3'Oҡ)F{ش>N9)^xBy}/ܽ9Hڛ=ݴ{Kk?t9ߡI֮^cQ8cNiMq]|wɋTJÚX[E@I{$+Z,{o<zkK)( L[K.eh·-۵gx`Պq:.B J17wcǎ3aڕ{]DJpYfYz oD/]^ks)Ξ]NJ NȬ$C5[̋/ ).^F)M6qݝL\D /4+GϪAzq&&/3<:́{=3?=˭7a‘9zRZ\FWF6p]mla ?¿7ͷ$}1@@ݸkiRK?!bt`ZjRb)Sp\hZΡp!ޫ@`ica?IL\(RykYz?޷ eKa^ ]k}W~\oC? s{Gu|y'ٱ}''yAݴu%?c?U+߰pz'%ί KhbL P3EO;@%-8{'%/RiwȺ5c;cH@Xߦ0-N>C{ )KHq)W1fJGW }4[6C͕y݌ Y=) N:̑#'^M1::ss).]N)6PYE8\ =w|N1#/Z޻ٺeO=uJK|>3):l;hN IDAT &/M082̊>{~+W,H( "x'HBIwqN;E,#4ذfwೇy2+Ȳw|F NLMQzvݼR>s QyLڶ?ZXC [(eZ]ܐEjGvYQ/s׭;u[|c8CCkKI@Ay|:D LEip"d 7](H[ttv̱8^V]˺9|d\q/r7( |f1e^:Ÿ},4[H6j.,ic\atU/qy֏_avS@VOf30Q e1vmsgNWF, QpX1R1{(¹ +l߻ukVqERJe&.df{ڹG~YfkyG}bgvzuC[rY9'^>dxɓr(ZF% ""Udu[Vs۸pˏrM[y6y|'9|9 Qk-K v9Q>e>-JxJG<{K*ܰy#C$:BbR<53ٺu+/t8InA*tZ4塇p|L$ã% 6*<zEOI{ܾ6g?> Z*1F85rA6/<,/yifDT}9Ηnں?}_x?{g78^ՀkkFEQj%c|·ʨ4 0;9T @` \p hݷ.WBHR,i(oM;M2q>sW㻾Z>rG?syɧPZoK?Sc.7>k wܶj킰4֢ùh dIv kl0W)}z0rL|ktc![,H W09l޼%9&K !/ V^f|}rQVٲzt!u`cXWlDgv6TsOT\01RV`pix΂AXb2xaaqМپc7ǟ'*C "-&^9Ztmwry7~9]\J@J R Bdv+M(fj&/^: [=Kg5S*B,ˤ ٴi3'…IVoZAsÇM{Yv$瑢@ZL%HBy7HIJr߰xNDnKyi r(D3]ȉtD)V!:'%9!]hDMBL`O5:k,#i6S)q2@,|a1#nhb%p9"0D`Ƌ*YCC  ' b^9q|ٙ]`\gT+ ݈4ɩU$#\t;[Xy&L MZaPNuQd6 ~?*~{?J-,m㋚kcտ/,,c^B?ò ^yo;O> +nTT"ѿ#t @*zV-[ ?]jH3y}*|5dQ\y3G__ss=L{;J{M1ɏOi|| 5fjp#;BS;nqb{yΑr䥣|9|WX87w_^~8rرPq+=a˖=ՏIWnא$ZurrMV0P]AFGٵs^iZg/s j,c0X xgB"0`ï9QvGVJUc 8'9}zWNLX6O<7[ͻNΞs0yyRR ^$A7VX[&}_C7K p-#c,'4uh4*6֯[!ި.#)4[o>nNzy>GxDX75V$FK#& `08QD*ZA^BE1JE\2f"3 6^ ;JpH I^eR"4u .$Ҵ;P@5 &֒炣U%ƒ59ޥ(e… M!b=R`rnPEo0Ǡ#N;͋"Qg!NXVntRҊ4MJ&CVXo`УB)P$R KQ!H{đH=r+ EPZ@b**۶mc|!8v4O"dLa&''ص_yxn[61{8Zj9zslۢjQU_xvl'8q$7SW:e 'pz~'~|O}w9|(W?.7x=o&_?˟~ϿǟOO&}DP 0Kɳlڰz_5M څ!K˃ .aS~Zp +VnAE&"kS81D5Pڶ(H(MX u`|"L#_ԉ)AJ\ Gukg8qd3lr7x#޳}:1<^Pa2-UXiRa]h" AcPAJbqUFh.4Y7vپ',4ܾztuv=EnZ۹;X2qno8xMi:(F OkN` )crgб An8e ;VX1P!×Xg)yK{ܢ+T( !$(C+`3 3,1.A,$QBaHDim0 E8osnE!;:D*9R CIȋ6 3|9q,JiPQcmU):>9{-xvHU6F E@|*,Hc'6LjmfrqqZ?*0gD):gXK)bhiPvN;!-)ѳ GAP N;5m׆),-*Q'pf⳼Νv˵^G/ "/I)!S̒V$R k%"9(%Sk(bq`:'-:de]ǻՕ R)˔9@jqƹ-\{v7/0qF$s1P籦D%I*<ڻ& d^:,.qD*,A §xt჊SBAݗ2DN9O9r:DB]X$E"+%r(333W ##xp*$&3V+cʫű3G\w^ASH!Ӿq|!zuq~HkH\wyG\Ry,[ֱ);Ef'>[ٴic7OEQpW(KZPy"&KUKUK,/m?Lz)wnݯEaزi4/=^$'=fG?F'䙥gN+)= ffgɟ9N>͖W;mb_q ֯[RI\rn~G9p+ľgƋ۹(SHkt%#zj|íhë@4gY&̲8?Թ:E^!^'k2 tV֘n aR&xg!D' m|"(l#TD!&M,4 R,kd*u:fn!Q#J"ihr)J_`)Qns#󆨺Л~:5_G+OVl5ٱ} FǏ2,_=-C>_*V\-q@fe8{r7]|== ^8k8)zH`KCTp,b d/4"Pqc 0rVXE) *(3֬[G֘! J+訂1Bp0SZP:ŊU+ lHЁMm@t)(MN7)mAZѠ,:ud 2Q:+Cԟ?p>'X2&`IPZefDV2"+KHa09ٶWS(Dz8{2 5JW( Au4N1+SJI3$ItH]CSd5Y6#xYF/p>c,s-!j}5108L5Wǿ8wmvԹsdC":V/1~jJq J =OCA' yQ (Z]8F# q!6#*ƫƇ@n@1wN]) ty BHJ^jT%ReޔRbJ '$Bh8\-  JᄢbÉCEQzazv6 F'fPE)X^VIk<9~}{{Aa^Sӷ׀x@?6^\|I>*^Lqϗ<]J9=9ٹYZJR_U;w|ln~;wq[z3Wr|wLtr71*"&Ss8y1!<ψ߸g\)gկȽ \Xgxp_}^Χ>I%IOIoIw12:?meC1|ώ'vsrM;S8})ysSΚ9;J3kyNC} NZY<[B &BiratD< JWNI2[^+Pҙƚ zمs5))fjfYZ'2462 /]4&#:(w*B8š|fnY֬[7MR\hLͷ[\ 2 1^%@i93;z@Œ6HБ@X>FyxYE 3'"XBw{^h փNdTt҇t'tT1W82ϑ#'ɍoe%8J204UiϒVH%1+̲jSk"ڊqDz^IJX/|R/u 8^Ø{p.&x><aϞSO=d۷ogu/,`O_MCpƆ zQ]GڵÇ0s;w~l r_nGs{9Q:\ϕBK?c>x.u6#v^X{ϻ7-o!;|>'Om%OE3}O__nOsCxᡥ{G&{<; 177O6̲u:vٯ>|Rt"]fl0F%6n)[/k;9g׳rF&M2c>9tLDcZd1XY 2Ȝfm}NPSgپ}[1ŞUZM3z59;}_}~۹]ftd!4CC+>x9zzkn]og)Ej*kmбL4/T)j,%:N8v _ַ}/wE7G(ՂvKSVh傹G18.<ൢ093O']a f*#JSXfǓ&Uq"G+,{kK`ooeU4HE+Mgh ϳ >5BHB)޽{?ʕK/ӋIp_ҒՋť%;O#}{rkR&'{y}1\塞W|^%eaq/}~z[kw3(.`n?ycQD=?x<}c݅{8!+*Fd"_zǾyaQ2)8s(N6j ?ʱ_ꍛV:#c:P"{GS#c`4Jq ;cgYXވr *j7'<ɹ)V.]B>^32:ʼnSYleT8{nY9;S01>Gcp=JSgrϽpƍ$>&f(rK}0J GVdt-QR !y|FN0vzz bjnqu7Ш 2^C:Cδ)]/cVI4sAUr6Eo?EGԆV0Yd}riJڿYsçʔJpfb{陳dbp`d{{Sc\9LV8kփzXgQfgKF&21Ͻ_~C=^)GU"&3J19ȗY`l):tstA:gkPL,`@h|=%3-J=8?fOSƂN8x: $Dӌyc'ΒTJ8lv̳o-P~Tp^~~?/'糆/? eᒓj_ױ%2ӻ_%ws6~Sdvvsɓx-W6nɧ};^A|q[o%tرm9߹c_,ox!E,Dj)J3}nɳH9p"h?AtY*ezq%3Zc[QI8: K>D=9=:O .81t &,?z ^h¡dLjpN02zB!Pf톭DffOGk( !}T+`A?rq( eq8IC~]sq(J:_݃ *=Zc%Ij9F"f4^E, woPo Q\:\z c$N2>6O$+xJL q`TXO:W*8LpD*Xк0ZӇ[ڙ!7(N8qd(@?8DBFuelb,i%NFT)pX#2aIsN|D$a} ;SGEqVgɲZy 8jad|S#xaqnHر&vxdrr5Lq,fi ΐVƉ~|g& A1j(CDZCTt1quٹIzlB$eH~B8""4͐GTT85bdQ"%pS%,[N]P{i(Ah*!P-J;N)ˌp4KYn+fÖ\ec, +Y/huJEZ?q$U8sf2yd֠4 Ɔ|O!up~uxh/!Uf2cĉCkGX+TTELi^[TG{衇W/G}*ߦ_ROdfvƫ7n% w'qݵ;k48x0_=Wl,Lwa?oK#tWzw4FjR}Pu-PUUclP8K$iҠGLZҐ}X],sDZ/Z0yG y(>F_?6/0C MPy%UK$AirH|4ס |%C i QeX#S.bѤ!JSIkD% V5B!RJ&HCE(b9O2=aj躄_B70xS\F\aLk_ j}CB@%q:ҤFUDI\Q $U8هJxբIdGUd7$4(JIH(QR",J¡d8% L"iAaIUu:6AUI`#*zuJYuIRKST:SiND8Ao4 xC/RDBIP!'M1ƒ1exSPUR8 :$uu!zF &>i}(bqHS8[ @ IU( Laut2VL:TaxVZuT TR"wJ_ Vxx^s4VDHEZ]-"$A CRC1X)Aȱe BXkHU, ۩Hα%(=B{l>&SǺM۹j*I24:-8|'NgSSS#MY49}}3R SZFe^84&BIJ98$(dUq38)0vItB#H S;8Q )P#8q졇^ ˒O~?ef Crn|*U-j]$JȏsV~>?H~Z9ws#Oܵq~Qvl h'}Z˦ 1? ׭d |N#Tq>, BD86k PX0aX)5J(5xJV8$JRXLȷH)isH2 cQHT M#0>OK9!б#NQW Z)Tܒa ysRWxS#R   B""}0QL#FW85JYH8/29qN]ޡyq7ORd# s8 JFH=V$EYU)VD!^@u JĻ7^b"PXy$1iJ!iƒӴyJmkqEXam4]x"]CDː!DȈs =ޗ$N@ k8ŻD)UJ'^ $\Pǝ od57DL#7XBƐ$)dy)=Zk"!Np)yY{>;y:\s@QnPl8uKJ@imR$)hBKTA*ԇYh4EeUgYF6皋\5k6p9kTp$IHbJ2XKi`mԲ:VxQtSM0Fv-2֙`o4IBYxBGD:T X/2ƣB]GS"/AրtD0(\zOJNvj_;k(P8dT0e fӶ͜<1“{ (%Jٔ1-^kL@72d iA*$ h1QZ*X#( *9Ci!ԂDE8QW(2Jqm] *=C=23ljIU-[S(!ƃw|7 )]ߎm4&ex~T*˱4?E-M.ey噣>r1~W3ٶu sܳw/#u^ß|xj!f>}Uyŏ{e לCA '%Rh cJ(J#֡GzPmVn uBH8!ɔ "x1A: /4>j ml(wO(edsƠ9)%+@*BU𪊷 KQ. Ma DX#J㝥tB`ar%HBS: ?0xx"/BP W ]nŃ0NQ"HϜX뱶@Z kCOxȌP|0V=Ґ6'7[ZWܖ U R)EP>싔ah)0.z s-|ti0^ 1o" d% #@ "'%zKJN NXD$(l< '+stE AYZ|}#xΆ M '^XgQ(P  p 5JE)J#,HT*)JCdرdꍴ3I+_ls8[m^wiiZK֊J$Kc8.J/wɸ B p !/|H0h2exnEWwX=B]0 >C9Gbw^$qW6he(R(/SE 2rWchh5+8|HQJD&?T,]hpʊuT9Rdy8"" q#+M/F*e)pDJ !ym9+!eX롇m|A>.~~~#|Gu7~"6֭]{G/9*7q? 4%I+s)~|W6Ԫ|{cObƍ|;}w7]8Ѩ׹/Z"(J~>N~Ez8_/J<8r V!!/Q^a ʝwH Z纪@Iq(6,[)\ ]P aY!RxP Pa\{9>F)kS*bC)N Ja$LMMÏP _n4DJ@ Ȳ  'BBJ#GPbzT=!ri8v:0X]!^,*dIs)$p6G#7B :C-$ֆsL@"8'l0\"` ҁB:$Ȯl@J(q^RDrw ΢TXMrha/VJS<-q{KQeFsq9 -X'O`|l[6HhrYfSFp#+  "Εz+=.ABčt$Bjp]"Ul(xrS"C"pE! B +,(dXl)˰usκn4;qP Gj)CuU+H1448('rx__AOGCYhqR{Ʌ]#m7@e0bl"5((LPQB|QkP{ıOz7㘢(?_Uo-,ټi#CwW97=>ؔb1"VX~\kVc 4T+i!OiΠ/a,;<}7]ɔ%eQbcu J12|e~WM ^Bpõ\胹4}EJc{衇޺Ax wzızNeO9t(JQ3s044SVkRlw['y|cysaa]E~M_/n,Z)E4C=^c=GV1ScR(-ISq]}rسyO:xn*GG+"St4.NfYFTUmkyأӵ{>۷_UffԥsGըV @i r:Ծj֤5iLo@ Th' YD8o_} .o]s')رbo-wT.ݔqY{j١~ݵN(۳بp ()8 L/\oY#)9%E<{kvlPmxA Ԕ0 JWp4L]G8gl7PS7k_R&3v}VT֭ժŵZzUkeXѧK(<( k_W>XwC˕l6ч{j=[j 4X7t嫾S5WT+%IvCs潥U?nW#+8(CZϿÇa>rk*##CO>Yf͚By*/NA\bѸQ#Qܱ*Usى5gb$pnтsTF|jצNjլ1#kΟ_*.5i'H9N1o֮۠c TQos^e+V*33Kڷն;5ɊRu\+;rOz^pֹc1Ub }_~>zw׭#G+5-M4ՙ:|S濩Ԝyoys-;r|թ'&<'Maazjڸ ІMw6nު_EߔdC }L8'aXBʖ<2QQ{AX H-_NH՗|Wdd*U҃ךZ wѕW\e#u_^JLJ 5y-[J[lVPP6nuj|BNZhpծYӳ3? vɳmGph~nizsRRR<۱iuhצu:]qe*WzSn[{TʕUjnvQ%wUkTL^U]{H4ڪ )b 7٬W:u|.*ࡃA1O>yt*++댯_9:ZAA<1ákja<&i;n+ @5WWƍԫiRtQ4mr ѨC5mkjEgێ@lq6n٢u֖~#k}ڼ'Uզ-[5a*w/e=뾼}e+Wi/*%%EI=;|+/ߕL>@pTVUw;XBbũfg&IZ8o"#" K ߸Izn$=7qclU֭d65iڶc;{z6n_8vhF_~Wh.vthV.L{ԱժYC[\7lT픘zg82335puj^ݧJ>fܿ!a2 Cfw@0_}G[ EkTfM}^޽WjPʕo(v-_R]\Wy׫U?ZIF0~>Kk~\c zÇi_幯 Ѧe ~\^͚lբmߡ7M>C[aؽwRRNhÃTf Ȕ'XV"I^UuG@ԼYS=ȣn k޽zaT߸I&-u땜-VzF:kMh\y]*(33S?nu\]:uup8=;lm߱SAA(S@UIwW Qƍ4oB$B򊉩}mYʗ+t- %''+?ֽ[WMvޣǓ`}p*K/?,鯪Jt62e½mެf9W _lUPPxM*_sjϚ),4T͛5=Nk7u6UZU߯^SzzWI/<V;зVry+vtlN6-[ꃏ?Q||UVUC iռi]{M3eF _רqOb:Kʹoa =z$N~m6)LuRdy}2%''a=|$I wޮNޣ/< 6닯$}3 w&é7ut,!AQ*j}}u]\.2ߤ,VlV[+VTS,ek <~=b*GG|#GkQxX澽@/>@|}1ZPVk[+!5l#QfMqCUm6bcb4e ҊUIST窫TZUj̓4GԥSG'$(;N@-w:m\Jж;Ա^ xl6ƍQƫZX}r-e]ԫ+I6dmب+Wn?ޘ5kJ}rnmبmH?+=n_{_]{zOHT-p 7l\ӬfM7jP_]:uO< ǪBg\l6A:x>,ݺM.Wx4MMʁֻGCyXfԴ4ӽ߽{jլ1r/\.ݧڵjuNwݫ ժYC!!!>/ҤQ#M?V^5?ӱ p>rOsM9+ o{toϻuUWjoz=Evz%''E)<,L7v^={)qMm*UxCG+U[*1)/W^iZJNNw+Vjx?q"U_~%$(++[wTpP"ʔ$M}uf~]̋/iE1O>>gU7|'2"B~T233$IS~tuլIcIRf4͹JHLTu5We=>|f9OxR.K-F3N>kة;:vГcqks4iv-ֹZu\oA=)IЮ-U?V{OWghڤƼ.][&O*99*@i ,Yu74 ]:w'K> PZu^kZ~UsD5(jÇh:rK&UT_*bcbضu+}ben iՊ*@i wCV?8]+Awރ*@i 7jF{25zS7j"""1kaCF>.;kΪU$?e+Vj4~oۆ @i qK:xLbccզeK}B4@iO/@ f G@pG@p 8# 8# 8@pG@pGZ/z**4$J1GBBFCKvK=8isuQ5iP_ǟi޽JLJz^).8"}W-?mLa(ժUSokVbR^s@~TJCp<[n=2AիSGժӖ߾s''fTXUu@>do{ԸaQ*V(DSRW;nАyY/_vx&6oQT[nkzPvQ(ٳMKyOIIOi=P$)..*Պm>UF ljXX=J'}NOSu\1--Uۭe+Wi┗U-6V/<<8>}b^4UO,%8*CUW]TjӪ1+4JjUn]UV }5k֠ mw+Vz]ZqctgB*Vop jk$IQp>Q*T(AP(-;nS*u,!A]:wgx-[Уp1# 8# 8G@pG@p 8# 8ZX+Jiu,!AJTQъTI8xa-_ԫq㔞!I*(EGUR uwd2Q( ڵm=4p<韸8tߚiJUccBlǪjl|9\.caaavmiJwq:u0+W @i dZs'Oa>ޭBC#(I>%ݷ_Κs_ۥ Psӧj `i=J*PZ$UPA3M~+zpp>(Yxq>p8yzVھs98~d222կOkݲ^YYYTJcpL9qB yɍ[*88X1.:uhqͦЂjTJSpԒOm[?++K3?| .>%c>w^1 `"{틳?3?\ /,'{>wAvv+-5E)+3329XfCTB%w8C[JJΥ5 ]Pp-rBQ$rꊈ,'J|0 CaԤER.S)I:r23TR/̟m))+h;@F/(89DRuErl);*\.$)3=!&S NIDATN1^FWk`2~~ӖRߜ< NNP CWrc0O(28Tܱt!rӭȐ$h֝/a~USoi;@F֮mկW/Ŝ_pp,f_-fY,B.IbbiM?N+AIǓp/NHMM00 8yR~ޭߨ M7ޠ_~}2O >Jqq<"Kgqt\bm\mi.["X3-[\Irx#mZn<5kǴ_(X6jF(2"]:kǟFjأ+r&nC}lAأy]7˖k=mڲU_|$.ՀտO Y(>s9+sNչ*g[+<,\o[6nԱDUXQ{߫]:{iV_X8˩cvz5y>ph jvuhV>ЀsgK>kO㶍c5 C/OMI֒'/շ=ERzuꫯз-M[Ԣ5{ht"5UC<=nc)碻Q?_2}  a[.95M;}ŗGy^?Ү={ҳ4dHnBwC] p腧i˥mhGstwhTz[6?4l6kێ8UXQfG=wݡצ,k 5vpsnƍU*׈1(,,L,5}$镙izZ2͚F ԺeKe ѨCpc X٬VUVMwCAn M|yJU49]EJ?yC_4}xv&<澽PÆ >Xqr9knhݧ뺚5m,ө{s?ءUrJ>$6ulN.u^}Gμ<U=e]%ÕVrrcTL縜.N$iwAz:t>"ɭUzi5UNc ZoJ9qBIIIg;$Tzu5kDݯV-7tSƍθ݇a= "NKYYYc}%awS뿀݆]G]_g.;|Oca%w~vP\jɱ濾gǚ%u^6nR:un&kJVUr`g[lQ-sUiv=>bvޣ?Plm'=>byivzK49ޡߧE^6_%]y2ېL2<ɤ 9\\.fgblYXbƚ6nWN՚NCl$233cչC{ x*GGkǽW}N}WzոQCMz^Fq&$ea1U~+Uj)>!A+?m+GWRppVZv)?Dڶn_ZXٷWc / i/~q kWjK?P;^S_!ӮnHҶ 뼾OK;op,fw^c7=-ߚ\BeW(sۯIɚEU& {EJyOJJ<,G^sÝ *4}%%=DvWJr6nܤ`E)s-fKo@?m!e(..^{ 9~-(S6)1)IIIGզ##"㦛~SԾ7럣q2zj}ms5SWxUa1 }"Ki'n:T.䘞iszj*WK2=Ӝ XaN4cjӲU} P&M`9gw9ccbއ]Vv ''@^y*]jqMsykU^]͝=K&r4~sr\jqms͜6U.#6m߹S Tm=gq=UchؐGw5"]ӴZ6oiGzz֬[o/TzFW/(*sWAA?ʪO.; 1fYRe6h;ˡ_]{v[oЇl6k_蚦t挻+jٳ=w<Kz&vqYUS~p%^{cA} ]unulV^& HrvMVÏԸaBgٳj&I$H8#=m9t:Ǟ_U:XH?99 ˹DG(#=,V=='jq+;3Kt;ۭ #J!$:δ .CyYo(éfhӥiڵ:?*UԾm[VX-r:EZƎыSꋯVO{rRrɧ2ͧK?ܿZz9*wmc]Nỷӯnʖ=+X1Z/%Oxt:d1瞻ԿϽ2M0<1=\(ٯNbTVV>5 קKi'~y~VU~~(<+%v6FS,K9'@{N?Y&%ߚsog%+R<. 8£z.+b~}m7U-qZWRc0Oe& 0*q|]Z'9f̯Or8Tn{1 #1T̟cWv=g^/ee+(85gb\|J|j>%M}Q'&qy E-Sgz_pqFx#<ϝ!8znfIa ]?+%9I.G\.$'i0&A8~x#<͗D+%N$5HO5O~0 \.HNұvb1ɻe.U䤄RE!aeT1Dbl[O̟m))+H;G(\!a%md0I"OpIjيveNQ_ͤdo8{[JJ NP<ǼL釪P" 8Kx 3dHt F(+8 _-yq(qbx:9Q>RiԂM 70 3},ZyPՊIENDB`drawing-0.4.11/help/C/index.page000066400000000000000000000021031362211111700162760ustar00rootroot00000000000000 Drawing Romain F. T. 2018-2019 <media type="image" mime="image/png" src="figures/icon.png" height="48" its:translate="no"/> Drawing

"Drawing" is a basic drawing application for the GNOME desktop.

You can edit or create pictures (PNG, JPEG or BMP) using tools, which can be chosen in the side panel. More options are available in the bottom bar, such as the tool size and color.

The window's subtitle should provide useful informations about how to use the active tool.

General
Tools
drawing-0.4.11/help/C/legal.xml000066400000000000000000000004511362211111700161430ustar00rootroot00000000000000

This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.

drawing-0.4.11/help/C/main_features.page000066400000000000000000000064061362211111700200230ustar00rootroot00000000000000 Romain F. T. rrroschan@gmail.com Opening and saving files. Basic features

"Drawing" is a basic drawing application for the GNOME desktop, which can edit or create pictures (PNG, JPEG or BMP).

Basic features are located in the header of the window, such as the Open button, the Save button, and the main menu.

The "Open" button

Open a picture file from your documents.

If the window size is too small to display its button, the Open menu is available in the main menu.

The "New" menu

This menu allows you to create a new image. Several options are available:

Create a new blank image, in a new tab. Such an new image can use the default size and background color, or you can set custom values.

Create a new image from the current selection.

Create a new image from the clipboard content.

Open a new window with a new blank image.

If the window size is too small to display its button, the New menu is merged in the main menu.

Edition

You can edit the opened picture with the tools in the side bar. The Undo and Redo buttons are located in the header of the window.

Preview

In the bottom bar, the Preview button (not available with some tools) displays a thumbnail of the full picture you're editing.

drawing-0.4.11/help/C/preferences.page000066400000000000000000000031361362211111700174770ustar00rootroot00000000000000 Romain F. T. rrroschan@gmail.com Change the app preferences Preferences
Image

The preferences dialog allows you to set the size and color of the default canvas displayed when creating a new file.

<link xref="drawing_tools">Tools</link>

You can set whether you prefer normal icons (16 pixels) or large icons (24 pixels).

Choosing whether or not you want to display the names of the tools next to their icons is possible here, but it's also available from the primary menu of the window.

Advanced

It's possible to choose the layout of the user interface: the "Compact" layout, designed for the GNOME desktop, is well tested. Other options include the "elementary OS" layout, designed for the elementary OS desktop, and the traditional layout, for MATE or Cinnamon desktop.

You can also set the size of the thumbnail preview.

drawing-0.4.11/help/C/selection_tools.page000066400000000000000000000044651362211111700204110ustar00rootroot00000000000000 Romain F. T. rrroschan@gmail.com Select a part of the image Selection
Selecting an area

The Selection tool, which is available from the side bar (along with the other tools), allows you to define a part of the image for further manipulations.

Depending on the option you choose in the bottom bar, you can select a rectangle area or a freehand shape.

Aside of defining the contour of an area with the mouse, the selection can also be created in various ways:

Import an existing file as your selection.

Paste an image from your clipboard.

Right-click, Select all.

Using the selection

Once the selection is defined, you can then perform various actions with this area:

Move it on the canvas.

Cut or copy it to the clipboard.

Edit it with tools. You can access the compatible tools with a right-click on the selection.

Delete it.

Open it as a new image.

Export it as a new file.

Click outside of the selected area to unselect, or use the Unselect menu item.

drawing-0.4.11/help/meson.build000066400000000000000000000006521362211111700163200ustar00rootroot00000000000000gnome = import('gnome') gnome.yelp(meson.project_name(), sources: [ 'index.page', 'main_features.page', 'preferences.page', 'drawing_tools.page', 'selection_tools.page', 'canvas_tools.page', 'legal.xml' ], media: [ 'figures/icon.png', 'figures/screenshot_menu.png', 'figures/screenshot_arc.png', 'figures/screenshot_selection.png', 'figures/screenshot_saturate.png' ] ) drawing-0.4.11/meson.build000066400000000000000000000003251362211111700153650ustar00rootroot00000000000000project( 'drawing', version: '0.4.10', meson_version: '>= 0.45.0', ) i18n = import('i18n') subdir('data') subdir('help') subdir('src') subdir('po') meson.add_install_script('build-aux/meson/postinstall.py') drawing-0.4.11/po/000077500000000000000000000000001362211111700136415ustar00rootroot00000000000000drawing-0.4.11/po/LINGUAS000066400000000000000000000001441362211111700146650ustar00rootroot00000000000000# please keep this list sorted alphabetically # da de_DE es fi fr he hr hu it nl pl pt_BR ru sv tr drawing-0.4.11/po/POTFILES000066400000000000000000000030541362211111700150130ustar00rootroot00000000000000data/com.github.maoschanz.drawing.desktop.in data/com.github.maoschanz.drawing.appdata.xml.in src/ui/app-menus.ui src/ui/color-popover.ui src/ui/custom-image.ui src/ui/headerbar.ui src/ui/headerbar-eos.ui src/ui/preferences.ui src/ui/properties.ui src/ui/selection.ui src/ui/shortcuts.ui src/ui/toolbar.ui src/ui/window.ui src/ui/win-menus.ui src/custom_image.py src/main.py src/window.py src/headerbar.py src/minimap.py src/image.py src/preferences.py src/properties.py src/selection_manager.py src/utilities.py src/tools/ui/tool_arc.ui src/tools/ui/tool_circle.ui src/tools/ui/tool_crop.ui src/tools/ui/tool_flip.ui src/tools/ui/tool_freeshape.ui src/tools/ui/tool_line.ui src/tools/ui/tool_paint.ui src/tools/ui/tool_pencil.ui src/tools/ui/tool_polygon.ui src/tools/ui/tool_rectangle.ui src/tools/ui/tool_rotate.ui src/tools/ui/tool_saturate.ui src/tools/ui/tool_scale.ui src/tools/ui/tool_select.ui src/tools/ui/tool_text.ui src/tools/abstract_tool.py src/tools/classic_tools/tool_arc.py src/tools/classic_tools/tool_circle.py src/tools/classic_tools/tool_freeshape.py src/tools/classic_tools/tool_line.py src/tools/classic_tools/tool_paint.py src/tools/classic_tools/tool_polygon.py src/tools/classic_tools/tool_pencil.py src/tools/classic_tools/tool_picker.py src/tools/classic_tools/tool_rectangle.py src/tools/classic_tools/tool_text.py src/tools/selection_tools/tool_select.py src/tools/canvas_tools/tool_crop.py src/tools/canvas_tools/tool_flip.py src/tools/canvas_tools/tool_rotate.py src/tools/canvas_tools/tool_saturate.py src/tools/canvas_tools/tool_scale.py drawing-0.4.11/po/da.po000066400000000000000000000447611362211111700146010ustar00rootroot00000000000000# Danish translation for Drawing # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # scootergrisen, 2019. msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-12-08 00:00+0200\n" "Last-Translator: scootergrisen\n" "Language-Team: Danish\n" "Language: da\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" msgid "Drawing" msgstr "Drawing" msgid "Simple drawing utility" msgstr "Simpelt tegneredskab" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Tegn;Blyant;" msgid "New Window" msgstr "Nyt vindue" msgid "New Image" msgstr "Nyt billede" msgid "Edit Image in Clipboard" msgstr "Rediger billede i udklipsholder" msgid "A drawing application for the GNOME desktop" msgstr "Et tegneprogram til GNOME-skrivebordet" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing\" er en simpel billededitor som understøtter filtyperne PNG, JPEG " "og BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Det giver dig mulighed for at tegne og redigere billeder med værktøjer såsom " "blyant, linje eller bue (med diverse valgmuligheder), markering (klip/kopiér/" "indsæt/træk/ …), former (rektangel, cirkel, polygon …), indsættelse af " "tekst, tilpasning af størrelse, beskæring, drejning …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Version 0.4.11 har adskillige mindre fejlrettelser og diverse nye " "oversættelser." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Version 0.4.10 har adskillige mindre fejlrettelser og diverse nye " "oversættelser." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.5 har adskillige mindre fejlrettelser og diverse nye " "oversættelser." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.4 har adskillige mindre fejlrettelser og diverse nye " "oversættelser." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.2 har adskillige mindre fejlrettelser og diverse nye " "oversættelser." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Præferencer" msgid "Report a bug" msgstr "Rapportér en fejl" msgid "Shortcuts" msgstr "Genveje" msgid "Help" msgstr "Hjælp" msgid "About" msgstr "Om" msgid "Quit" msgstr "Afslut" msgid "_File" msgstr "_Fil" msgid "New Blank Image" msgstr "Nyt tomt billede" msgid "New Image With Custom Size" msgstr "Nyt billede med tilpasset størrelse" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nyt billede fra markering" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nyt billede fra udklipsholder" msgid "Open an image" msgstr "Åbn et billede" msgid "Reload file" msgstr "Genindlæs fil" msgid "Image properties" msgstr "Billedegenskaber" msgid "Save" msgstr "Gem" msgid "Save as…" msgstr "Gem som …" msgid "Export as…" msgstr "Eksportér som …" msgid "Print" msgstr "Udskriv" #, fuzzy msgid "Close" msgstr "Luk billede" msgid "_Edit" msgstr "_Rediger" msgid "Undo" msgstr "Fortryd" msgid "Redo" msgstr "Omgør" msgid "Select all" msgstr "Markér alt" msgid "Cut" msgstr "Klip" msgid "Copy" msgstr "Kopiér" msgid "Delete" msgstr "Slet" msgid "Paste" msgstr "Indsæt" msgid "Import" msgstr "Importér" msgid "_View" msgstr "_Vis" msgid "Optimal Zoom" msgstr "Optimal zoom" msgid "Zoom Out" msgstr "Zoom ud" msgid "Original Zoom" msgstr "Oprindelig zoom" msgid "Zoom In" msgstr "Zoom ind" msgid "Show the preview" msgstr "Vis forhåndsvisningen" msgid "Refresh" msgstr "Opdater" msgid "Rebuild from history" msgstr "Genbyg fra historik" msgid "Position" msgstr "Position" msgid "Go Left" msgstr "Gå til venstre" msgid "Go Up" msgstr "Gå op" msgid "Go Down" msgstr "Gå ned" msgid "Go Right" msgstr "Gå til højre" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Vis værktøjernes navne" msgid "_Colors" msgstr "Farv_er" msgid "Main color" msgstr "Primær farve" msgid "Secondary color" msgstr "Sekundær farve" msgid "Exchange colors" msgstr "Byt om på farverne" msgid "Color editor by default" msgstr "Farveeditor som standard" msgid "_Tools" msgstr "Værk_tøjer" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "Forrige værktøj" msgid "_Options" msgstr "Valg_muligheder" #, fuzzy msgid "_Windows" msgstr "Nyt vindue" msgid "Quit all windows" msgstr "Afslut alle vinduer" msgid "_Help" msgstr "_Hjælp" msgid "Index" msgstr "Indeks" msgid "Basic help" msgstr "Grundlæggende hjælp" msgid "Help about tools" msgstr "Hjælp til værktøjer" msgid "Canvas and selection" msgstr "Lærred og markering" msgid "Help about selection" msgstr "Hjælp til markering" msgid "About Drawing" msgstr "Om Drawing" msgid "Back to the palette" msgstr "Tilbage til paletten" msgid "Use this editor by default" msgstr "Brug editoren som standard" msgid "Width" msgstr "Bredde" msgid "Height" msgstr "Højde" msgid "Background color" msgstr "Baggrundsfarve" msgid "Use these settings by default" msgstr "Brug indstillingerne som standard" msgid "Open" msgstr "Åbn" msgid "Images" msgstr "Billeder" msgid "Tools" msgstr "Værktøjer" msgid "Advanced options" msgstr "Avancerede valgmuligheder" msgid "Path" msgstr "Sti" msgid "Format" msgstr "Format" msgid "Colorspace" msgstr "Farverum" msgid "Unsaved file" msgstr "Ikke gemt" msgid "Invalid format" msgstr "Ugyldigt format" msgid "pixels" msgstr "pixels" msgid "centimeters" msgstr "centimeter" msgid "inches" msgstr "inch" msgid "Unselect" msgstr "Fjern markering" msgid "Flip" msgstr "Vend" msgid "Crop" msgstr "Beskær" msgid "Scale" msgstr "Skaler" msgid "Rotate" msgstr "Drej" #, fuzzy msgid "Saturate" msgstr "Farvemætning" msgid "Open As New Image" msgstr "Åbn som nyt billede" msgid "General" msgstr "Generelt" msgid "Main menu" msgstr "Hovedmenu" msgid "Image" msgstr "Billede" msgid "Open a file" msgstr "Åbn en fil" msgid "Close the active image" msgstr "Luk det aktive billede" msgid "Save as" msgstr "Gem som" #, fuzzy msgid "Edition" msgstr "Redigering" msgid "Options menu" msgstr "Valgmulighedsmenu" msgid "Back to previous tool" msgstr "Tilbage til forrige værktøj" msgid "Selection" msgstr "Markering" msgid "Delete the selection" msgstr "Slet markeringen" msgid "Colors" msgstr "Farver" msgid "Edit the main color (left click)" msgstr "Rediger den primære farve (venstreklik)" msgid "Edit the secondary color (right click)" msgstr "Rediger den sekundære farve (højreklik)" msgid "Navigation" msgstr "Navigation" msgid "Toggle the preview" msgstr "Forhåndsvisning til/fra" msgid "Error starting the application, please report this bug." msgstr "Fejl ved start af programmet. Rapportér venligst fejlen." msgid "Tool size" msgstr "Værktøjsstørrelse" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Ingen valgmuligheder" #. none msgid "Preview" msgstr "Forhåndsvisning" msgid "Troubleshoot selection" msgstr "Fejlsøg markering" msgid "Cancel" msgstr "Annuller" msgid "Create" msgstr "Opret" msgid "Print the version and display the 'about' dialog" msgstr "Vis versionen og \"om\"-dialogen" msgid "Open a new window" msgstr "Åbn et nyt vindue" msgid "Open a new tab" msgstr "Åbn et nyt faneblad" msgid "Edit the clipboard content" msgstr "Rediger udklipsholderens indhold" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "scootergrisen" msgid "A drawing application for the GNOME desktop." msgstr "Et tegneprogram til GNOME-skrivebordet." msgid "Official webpage" msgstr "Officiel webside" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Fejl ved åbning af filen. Mente du %s?" #, python-format msgid "Failed to load tool: %s" msgstr "Kunne ikke indlæse værktøj: %s" #, python-format msgid "Loading %s" msgstr "Indlæser %s" msgid "New Tab" msgstr "Nyt faneblad" msgid "Discard changes" msgstr "Forkast ændringerne" #, python-format msgid "There are unsaved modifications to %s." msgstr "Der er ændringer i %s som ikke er blevet gemt." #, python-format msgid "Where do you want to open %s?" msgstr "Hvor vil du åbne %s?" msgid "Open a picture" msgstr "Åbn et billede" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "disse filer" #, python-format msgid "What do you want to do with %s?" msgstr "Hvad vil du gøre med %s?" msgid "Untitled" msgstr "Unavngivet" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "dette billede" msgid "Discard" msgstr "Forkast" msgid "Save picture as…" msgstr "Gem billede som …" msgid "Import a picture" msgstr "Importér et billede" #, python-format msgid "Undo %s" msgstr "Fortryd %s" #, python-format msgid "Redo %s" msgstr "Omgør %s" msgid "New images" msgstr "Nye billeder" msgid "Default width" msgstr "Standardbredde" msgid "Default height" msgstr "Standardhøjde" msgid "Default background" msgstr "Standardbaggrund" msgid "Images saving" msgstr "Når billeder gemmes" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG- og BMP-billeder kan ikke håndtere gennemsigtighed." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Hvis du gemmer dine billeder i disse formater, hvad skal så erstatte de " "gennemsigtige pixels?" msgid "White" msgstr "Hvid" msgid "Black" msgstr "Sort" msgid "Checkboard" msgstr "Skakbræt" msgid "Nothing" msgstr "Intet" msgid "Ask before saving" msgstr "Spørg inden der gemmes" msgid "Use big icons" msgstr "Brug store ikoner" msgid "Preview size" msgstr "Størrelse på forhåndsvisning" msgid "Development features" msgstr "Udviklingsfunktionaliteter" msgid "Layout" msgstr "Layout" msgid "The recommended value is \"Automatic\"." msgstr "Den anbefalede værdi er \"Automatisk\"." msgid "Automatic" msgstr "Automatisk" msgid "Compact" msgstr "Kompakt" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Udgået" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Udgået (symbolske ikoner)" msgid "Menubar only" msgstr "Kun menulinje" msgid "Toolbar only" msgstr "Kun værktøjslinje" msgid "Toolbar only (symbolic icons)" msgstr "Kun værktøjslinje (symbolske ikoner)" msgid "This file format doesn't support transparent colors." msgstr "Filformatet understøtter ikke gennemsigtige farver." msgid "Replace transparency with:" msgstr "Erstat gennemsigtighed med:" msgid "All pictures" msgstr "Alle billeder" msgid "PNG images" msgstr "PNG-billeder" msgid "JPEG images" msgstr "JPEG-billeder" msgid "BMP images" msgstr "BMP-billeder" msgid "Transparent" msgstr "Gennemsigtig" #, python-format msgid "%s%% transparent" msgstr "%s %% gennemsigtig" msgid "Grey" msgstr "Grå" msgid "Orange" msgstr "Orange" msgid "Brown" msgstr "Brun" msgid "Probably brown" msgstr "Formodentlig brun" msgid "Red" msgstr "Rød" msgid "Green" msgstr "Grøn" msgid "Blue" msgstr "Blå" msgid "Yellow" msgstr "Gul" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Lilla" msgid "Cyan" msgstr "Cyan" msgid "Probably turquoise" msgstr "Formodentlig turkis" msgid "Unknown color name" msgstr "Ukendt farvenavn" msgid "Continue" msgstr "Fortsæt" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "procent" msgid "Lead shape" msgstr "Linjens form" #. Default values msgid "Round" msgstr "Rund" msgid "Square" msgstr "Firkantet" msgid "Use dashes" msgstr "Stiplet" msgid "Arrow" msgstr "Pil" msgid "Mode" msgstr "Tilstand" msgid "Classic" msgstr "Klassisk" msgid "Source color" msgstr "Kildefarve" msgid "Eraser" msgstr "Viskelæder" msgid "Difference" msgstr "Forskelle" msgid "Shape" msgstr "Form" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Cirkel" msgid "Filling" msgstr "" msgid "Empty" msgstr "Tom" #, fuzzy msgid "Filled (main color)" msgstr "Primær farve" #, fuzzy msgid "Filled (secondary color)" msgstr "Sekundær farve" msgid "Apply" msgstr "Anvend" msgid "Flip horizontally" msgstr "Vend vandret" msgid "Flip vertically" msgstr "Vend lodret" msgid "Color gradient" msgstr "Farvegradient" msgid "Behavior" msgstr "Opførsel" msgid "Encircle and fill" msgstr "Omring og udfyld" msgid "Erase and replace" msgstr "Slet og erstat" msgid "Clipping" msgstr "Klipning" msgid "Thin" msgstr "Tynd" msgid "Artificial smoothness" msgstr "Kunstig jævnhed" msgid "Rectangle" msgstr "Rektangel" #, fuzzy msgid "Rounded rectangle" msgstr "Rektangel" msgid "Rotate left" msgstr "Drej til venstre" msgid "Angle (degrees)" msgstr "Vinkel (grader)" msgid "Rotate right" msgstr "Drej til højre" msgid "Saturation" msgstr "Farvemætning" msgid "Keep proportions" msgstr "Bevar størrelsesforhold" msgid "Edit" msgstr "Rediger" #, fuzzy msgid "Selection type" msgstr "Markering" #, fuzzy msgid "Freehand" msgstr "Fri form" #, fuzzy msgid "Similar color" msgstr "Sekundær farve" #, fuzzy msgid "Selection options" msgstr "Valgmuligheder for blyant" msgid "Insert here" msgstr "Indsæt her" msgid "Font" msgstr "Skrifttype" msgid "Italic" msgstr "Kursiv" msgid "Bold" msgstr "Fed" msgid "Background" msgstr "Baggrund" msgid "No background" msgstr "Ingen baggrund" msgid "Shadow" msgstr "Skygge" msgid "Outline" msgstr "Omrids" msgid "Rectangle background" msgstr "Rektangelbaggrund" msgid "Arc" msgstr "" #, fuzzy msgid "Arc options" msgstr "Flere valgmuligheder" #, fuzzy msgid "With dashes" msgstr "Stiplet" #, fuzzy msgid "Circle options" msgstr "Valgmuligheder for kurve" msgid "Free shape" msgstr "Fri form" msgid "Shape options" msgstr "Valgmuligheder for form" msgid "Click on the shape's first point to close it." msgstr "Klik på formens første punkt for at lukke den." msgid "Line" msgstr "Linje" msgid "Line options" msgstr "Valgmuligheder for linje" msgid "Paint" msgstr "Malerbøtte" msgid "Painting options" msgstr "Valgmuligheder for malerbøtte" msgid "Click on an area to replace its color by transparency" msgstr "Klik på et område for at erstatte dets farve med gennemsigtighed" msgid "Polygon" msgstr "Polygon" #, fuzzy msgid "Polygon options" msgstr "Valgmuligheder for skrifttype" msgid "Pencil" msgstr "Blyant" msgid "Pencil options" msgstr "Valgmuligheder for blyant" msgid "Color Picker" msgstr "Farvevælger" #, fuzzy msgid "Rectangle options" msgstr "Rektangelmarkering" msgid "Text" msgstr "Tekst" msgid "Font options" msgstr "Valgmuligheder for skrifttype" msgid "Rectangle selection" msgstr "Rektangelmarkering" msgid "Free selection" msgstr "Fri markering" msgid "Color selection" msgstr "Farvemarkering" msgid "Drag the selection or right-click on the canvas" msgstr "Træk markeringen eller højreklik på lærredet" msgid "Select an area or right-click on the canvas" msgstr "Vælg et område eller højreklik på lærredet" msgid "Cropping the selection" msgstr "Beskær markeringen" msgid "Cropping the canvas" msgstr "Beskær lærredet" msgid "Rotating the selection" msgstr "Drej markeringen" msgid "Rotating the canvas" msgstr "Drej lærredet" msgid "Scaling the selection" msgstr "Skaler markeringen" msgid "Scaling the canvas" msgstr "Skaler lærredet" drawing-0.4.11/po/de_DE.po000066400000000000000000000471701362211111700151520ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # Onno Giesmann , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-08-03 13:53+0200\n" "Last-Translator: Onno Giesmann \n" "Language-Team: German <--->\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 2.2.3\n" msgid "Drawing" msgstr "Zeichnung" msgid "Simple drawing utility" msgstr "Einfaches Zeichenprogramm" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Skizze;Bleistift;" msgid "New Window" msgstr "Neues Fenster" msgid "New Image" msgstr "Neues Bild" msgid "Edit Image in Clipboard" msgstr "Bild in Zwischenablage bearbeiten" msgid "A drawing application for the GNOME desktop" msgstr "Ein Zeichenprogramm für den GNOME-Desktop" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Zeichnung\" ist eine einfache Bildbearbeitung mit Unterstützung der " "Dateitypen PNG, JPEG und BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Sie können Bilder erstellen oder bearbeiten mit Werkzeugen, wie Bleistift, " "Linien oder Kurven (mit verschiedenen Optionen), Auswahl (Ausschneiden/" "Kopieren/Einfügen/Ziehen/…), Formen (Rechteck, Kreis, Vieleck, …) " "Texteingabe, Größenänderung, Zuschneiden, Drehen, usw.…" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Die Version 0.4.11 enthält mehrere kleine Fehlerbehebungen und verschiedene " "neue Übersetzungen." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Die Version 0.4.10 enthält mehrere kleine Fehlerbehebungen und verschiedene " "neue Übersetzungen." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Die Version 0.4.5 enthält mehrere kleine Fehlerbehebungen und verschiedene " "neue Übersetzungen." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Die Version 0.4.4 enthält mehrere kleine Fehlerbehebungen und verschiedene " "neue Übersetzungen." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "Die Version 0.4.3 beinhaltet neue Übersetzungen und ist kompatibel mit " "älteren Distributionen, wie zum Beispiel Ubuntu 18.04 LTS." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Die Version 0.4.2 enthält mehrere kleine Fehlerbehebungen und verschiedene " "neue Übersetzungen." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "Version 0.4 bringt ein neues Symbol mit, enthält eine Vielzahl an " "Fehlerbehebungen und eine verbesserte Werkzeugleiste für die Ansichten " "\"Altmodisch\" und \"Nur Werkzeugleiste\". Weiterhin neu ist die " "Möglichkeit, ein Bild aus der Zwischenablage zu erstellen, es gibt einen " "weicheren Bleistift und verschiedene neue Übersetzungen sind ebenfalls " "dazugekommen." msgid "First stable release, including a few basic tools." msgstr "Erste stabile Version; mit ein paar grundlegenden Werkzeugen." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Einstellungen" msgid "Report a bug" msgstr "Einen Fehler melden" msgid "Shortcuts" msgstr "Tastenkürzel" msgid "Help" msgstr "Hilfe" msgid "About" msgstr "Info zu" msgid "Quit" msgstr "Beenden" msgid "_File" msgstr "_Datei" msgid "New Blank Image" msgstr "Neues leeres Bild" msgid "New Image With Custom Size" msgstr "Neues Bild mit eigener Größe" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Neues Bild aus der Auswahl" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Neues Bild aus der Zwischenablage" msgid "Open an image" msgstr "Ein Bild öffnen" msgid "Reload file" msgstr "Datei neu laden" msgid "Image properties" msgstr "Bildeigenschaften" msgid "Save" msgstr "Speichern" msgid "Save as…" msgstr "Speichern als…" msgid "Export as…" msgstr "Exportieren als…" msgid "Print" msgstr "Drucken" msgid "Close" msgstr "Schließen" msgid "_Edit" msgstr "_Bearbeiten" msgid "Undo" msgstr "Rückgängig" msgid "Redo" msgstr "Wiederherstellen" msgid "Select all" msgstr "Alles auswählen" msgid "Cut" msgstr "Ausschneiden" msgid "Copy" msgstr "Kopieren" msgid "Delete" msgstr "Löschen" msgid "Paste" msgstr "Einfügen" msgid "Import" msgstr "Importieren" msgid "_View" msgstr "_Ansicht" msgid "Optimal Zoom" msgstr "Optimaler Zoom" msgid "Zoom Out" msgstr "Herauszoomen" msgid "Original Zoom" msgstr "Original-Zoom" msgid "Zoom In" msgstr "Hineinzoomen" msgid "Show the preview" msgstr "Vorschau anzeigen" msgid "Refresh" msgstr "Aktualisieren" msgid "Rebuild from history" msgstr "Wiederherstellen aus Verlauf" msgid "Position" msgstr "Position" msgid "Go Left" msgstr "Nach links" msgid "Go Up" msgstr "Nach oben" msgid "Go Down" msgstr "Nach unten" msgid "Go Right" msgstr "Nach rechts" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Werkzeugnamen anzeigen" msgid "_Colors" msgstr "_Farben" msgid "Main color" msgstr "Hauptfarbe" msgid "Secondary color" msgstr "Zweitfarbe" msgid "Exchange colors" msgstr "Farben tauschen" msgid "Color editor by default" msgstr "Farbwähler standardmäßig öffnen" msgid "_Tools" msgstr "_Werkzeuge" msgid "_Canvas" msgstr "Leinwand" msgid "Previous tool" msgstr "Vorheriges Werkzeug" msgid "_Options" msgstr "_Optionen" msgid "_Windows" msgstr "_Fenster" msgid "Quit all windows" msgstr "Alle Fenster schließen" msgid "_Help" msgstr "_Hilfe" msgid "Index" msgstr "Index" msgid "Basic help" msgstr "Grundlegende Hilfe" msgid "Help about tools" msgstr "Hilfe zu Werkzeugen" msgid "Canvas and selection" msgstr "Leinwand und Auswahl" msgid "Help about selection" msgstr "Hilfe zur Auswahl" msgid "About Drawing" msgstr "Info zu Zeichnung" msgid "Back to the palette" msgstr "Zurück zur Palette" msgid "Use this editor by default" msgstr "Diesen Farbwähler standardmäßig nutzen" msgid "Width" msgstr "Breite" msgid "Height" msgstr "Höhe" msgid "Background color" msgstr "Hintergrundfarbe" msgid "Use these settings by default" msgstr "Diese Einstellungen standardmäßig verwenden" msgid "Open" msgstr "Öffnen" msgid "Images" msgstr "Bilder" msgid "Tools" msgstr "Werkzeuge" msgid "Advanced options" msgstr "Erweiterte Einstellungen" msgid "Path" msgstr "Pfad" msgid "Format" msgstr "Format" msgid "Colorspace" msgstr "Farbraum" msgid "Unsaved file" msgstr "Nicht gespeicherte Datei" msgid "Invalid format" msgstr "Ungültiges Format" msgid "pixels" msgstr "Pixel" msgid "centimeters" msgstr "Zentimeter" msgid "inches" msgstr "Zoll" msgid "Unselect" msgstr "Abwählen" msgid "Flip" msgstr "Spiegeln" msgid "Crop" msgstr "Zuschneiden" msgid "Scale" msgstr "Skalieren" msgid "Rotate" msgstr "Drehen" msgid "Saturate" msgstr "Sättigen" msgid "Open As New Image" msgstr "Als neues Bild öffnen" msgid "General" msgstr "Allgemein" msgid "Main menu" msgstr "Hauptmenü" msgid "Image" msgstr "Bild" msgid "Open a file" msgstr "Eine Datei öffnen" msgid "Close the active image" msgstr "Aktives Bild schließen" msgid "Save as" msgstr "Speichern als" msgid "Edition" msgstr "Bearbeitung" msgid "Options menu" msgstr "Optionen-Menü" msgid "Back to previous tool" msgstr "Zurück zum vorherigen Werkzeug" msgid "Selection" msgstr "Auswahl" msgid "Delete the selection" msgstr "Auswahl löschen" msgid "Colors" msgstr "Farben" msgid "Edit the main color (left click)" msgstr "Bearbeiten der Hauptfarbe (Linksklick)" msgid "Edit the secondary color (right click)" msgstr "Bearbeiten der Zweitfarbe (Rechtsklick)" msgid "Navigation" msgstr "Steuerung" msgid "Toggle the preview" msgstr "Vorschau umschalten" msgid "Error starting the application, please report this bug." msgstr "Fehler beim Starten der Anwendung. Bitte diesen Fehler melden." msgid "Tool size" msgstr "Werkzeuggröße" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Keine Optionen" #. none msgid "Preview" msgstr "Vorschau" msgid "Troubleshoot selection" msgstr "Problembehandlung bei der Auswahl" msgid "Cancel" msgstr "Abbrechen" msgid "Create" msgstr "Erstellen" msgid "Print the version and display the 'about' dialog" msgstr "Version anzeigen sowie den \"Info\"-Dialog" msgid "Open a new window" msgstr "Neues Fenster öffnen" msgid "Open a new tab" msgstr "Neuen Tab öffnen" msgid "Edit the clipboard content" msgstr "Inhalt der Zwischenablage bearbeiten" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Onno Giesmann" msgid "A drawing application for the GNOME desktop." msgstr "Ein Zeichenprogramm für den GNOME-Desktop." msgid "Official webpage" msgstr "Offizielle Internetseite" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Fehler beim Öffnen dieser Datei. Meinten Sie %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Fehler beim Laden des Werkzeugs: %s" #, python-format msgid "Loading %s" msgstr "Wird geladen %s" msgid "New Tab" msgstr "Neuer Tab" msgid "Discard changes" msgstr "Änderungen verwerfen" #, python-format msgid "There are unsaved modifications to %s." msgstr "Es gibt Änderungen an %s, die noch nicht gespeichert wurden." #, python-format msgid "Where do you want to open %s?" msgstr "Wo möchten Sie %s öffnen?" msgid "Open a picture" msgstr "Ein Bild öffnen" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "diese Dateien" #, python-format msgid "What do you want to do with %s?" msgstr "Was möchten Sie mit %s machen?" msgid "Untitled" msgstr "Unbenannt" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "diesem Bild" msgid "Discard" msgstr "Verwerfen" msgid "Save picture as…" msgstr "Bild speichern als…" msgid "Import a picture" msgstr "Ein Bild importieren" #, python-format msgid "Undo %s" msgstr "Rückgängig %s" #, python-format msgid "Redo %s" msgstr "Wiederherstellen %s" msgid "New images" msgstr "Neue Bilder" msgid "Default width" msgstr "Standardbreite" msgid "Default height" msgstr "Standardhöhe" msgid "Default background" msgstr "Standardhintergrund" msgid "Images saving" msgstr "Speichern von Bildern" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG- und BMP-Bilder unterstützen keine Transparenz." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Wenn Sie Ihre Bilder in diesem Format speichern möchten, werden die " "transparenten Pixel ersetzt. Was möchten Sie dafür nutzen?" msgid "White" msgstr "Weiß" msgid "Black" msgstr "Schwarz" msgid "Checkboard" msgstr "Schachbrett" msgid "Nothing" msgstr "Nichts" msgid "Ask before saving" msgstr "Vor dem Speichern fragen" msgid "Use big icons" msgstr "Große Symbole verwenden" msgid "Preview size" msgstr "Vorschaugröße" msgid "Development features" msgstr "Entwicklungsfunktionen" msgid "Layout" msgstr "Layout" msgid "The recommended value is \"Automatic\"." msgstr "Der empfohlene Wert ist \"Automatisch\"." msgid "Automatic" msgstr "Automatisch" msgid "Compact" msgstr "Kompakt" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Altmodisch" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Traditionell (einfarbig)" msgid "Menubar only" msgstr "Nur Menüleiste" msgid "Toolbar only" msgstr "Nur Werkzeugleiste" msgid "Toolbar only (symbolic icons)" msgstr "Nur Werkzeugleiste (einfarbig)" msgid "This file format doesn't support transparent colors." msgstr "Dieses Dateiformat unterstützt keine transparenten Farben." msgid "Replace transparency with:" msgstr "Transparenz ersetzen mit:" msgid "All pictures" msgstr "Alle Bilder" msgid "PNG images" msgstr "PNG-Bilder" msgid "JPEG images" msgstr "JPEG-Bilder" msgid "BMP images" msgstr "BMP-Bilder" msgid "Transparent" msgstr "Transparenz" #, python-format msgid "%s%% transparent" msgstr "%s%% Transparenz" msgid "Grey" msgstr "Grau" msgid "Orange" msgstr "Orange" msgid "Brown" msgstr "Braun" msgid "Probably brown" msgstr "Eher braun" msgid "Red" msgstr "Rot" msgid "Green" msgstr "Grün" msgid "Blue" msgstr "Blau" msgid "Yellow" msgstr "Gelb" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Violett" msgid "Cyan" msgstr "Cyan" msgid "Probably turquoise" msgstr "Eher türkis" msgid "Unknown color name" msgstr "Unbekannter Farbname" msgid "Continue" msgstr "Weiter" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "Der Bereich scheint schlecht abgegrenzt zu sein oder ist sehr komplex.\n" "Dieser Algorithmus ist möglicherweise nicht in der Lage, den gewünschten " "Bereich zu erkennen.\n" "\n" "Möchten Sie den Vorgang abbrechen oder soll das Werkzeug es trotzdem " "versuchen?" msgid "percents" msgstr "Prozent" msgid "Lead shape" msgstr "Enden-Form" #. Default values msgid "Round" msgstr "Rund" msgid "Square" msgstr "Eckig" msgid "Use dashes" msgstr "Gestrichelt" msgid "Arrow" msgstr "Pfeil" msgid "Mode" msgstr "Modus" msgid "Classic" msgstr "Klassisch" msgid "Source color" msgstr "Quellfarbe" msgid "Eraser" msgstr "Radiergummi" msgid "Difference" msgstr "Gegensätzlich" msgid "Shape" msgstr "Form" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Kreis" msgid "Filling" msgstr "Füllung" msgid "Empty" msgstr "Leer" msgid "Filled (main color)" msgstr "Gefüllt (Hauptfarbe)" msgid "Filled (secondary color)" msgstr "Gefüllt (Zweitfarbe)" msgid "Apply" msgstr "Anwenden" msgid "Flip horizontally" msgstr "Horizontal spiegeln" msgid "Flip vertically" msgstr "Vertikal spiegeln" msgid "Color gradient" msgstr "Farbverlauf" msgid "Behavior" msgstr "Verhalten" msgid "Encircle and fill" msgstr "Einkreisen und füllen" msgid "Erase and replace" msgstr "Löschen und ersetzen" msgid "Clipping" msgstr "Ausschnitt" msgid "Thin" msgstr "Dünn" msgid "Artificial smoothness" msgstr "Künstliche Glätte" msgid "Rectangle" msgstr "Rechteck" msgid "Rounded rectangle" msgstr "Abgerundetes Rechteck" msgid "Rotate left" msgstr "Nach links drehen" msgid "Angle (degrees)" msgstr "Winkel (Grad)" msgid "Rotate right" msgstr "Nach rechts drehen" msgid "Saturation" msgstr "Sättigung" msgid "Keep proportions" msgstr "Verhältnisse beibehalten" msgid "Edit" msgstr "Bearbeiten" msgid "Selection type" msgstr "Auswahltyp" msgid "Freehand" msgstr "Freihand" msgid "Similar color" msgstr "Ähnliche Farbe" msgid "Selection options" msgstr "Auswahl-Optionen" msgid "Insert here" msgstr "Hier einfügen" msgid "Font" msgstr "Schriftart" msgid "Italic" msgstr "Kursiv" msgid "Bold" msgstr "Fett" msgid "Background" msgstr "Hintergrund" msgid "No background" msgstr "Ohne Hintergrund" msgid "Shadow" msgstr "Schatten" msgid "Outline" msgstr "Außenlinie" msgid "Rectangle background" msgstr "Rechteckiger Hintergrund" msgid "Arc" msgstr "Bogen" msgid "Arc options" msgstr "Bogen-Optionen" msgid "With dashes" msgstr "Mit Strichen" msgid "Circle options" msgstr "Kreis-Optionen" msgid "Free shape" msgstr "Freie Form" msgid "Shape options" msgstr "Form-Optionen" msgid "Click on the shape's first point to close it." msgstr "Klicken Sie auf den ersten Punkt der Form, um es zu schließen." msgid "Line" msgstr "Linie" msgid "Line options" msgstr "Linien-Optionen" msgid "Paint" msgstr "Füllen" msgid "Painting options" msgstr "Füll-Optionen" msgid "Click on an area to replace its color by transparency" msgstr "" "Klicken Sie auf einen Bereich, um dessen Farbe durch Transparenz zu ersetzen" msgid "Polygon" msgstr "Vieleck" msgid "Polygon options" msgstr "Vieleck-Optionen" msgid "Pencil" msgstr "Bleistift" msgid "Pencil options" msgstr "Bleistift-Optionen" msgid "Color Picker" msgstr "Farbwähler" msgid "Rectangle options" msgstr "Rechteck-Optionen" msgid "Text" msgstr "Text" msgid "Font options" msgstr "Schriftart-Optionen" msgid "Rectangle selection" msgstr "Rechteckauswahl" msgid "Free selection" msgstr "Freie Auswahl" msgid "Color selection" msgstr "Farbauswahl" msgid "Drag the selection or right-click on the canvas" msgstr "Auswahl ziehen oder Rechtsklick auf die Leinwand" msgid "Select an area or right-click on the canvas" msgstr "Bereich auswählen oder Rechtsklick auf die Leinwand" msgid "Cropping the selection" msgstr "Auswahl zuschneiden" msgid "Cropping the canvas" msgstr "Leinwand zuschneiden" msgid "Rotating the selection" msgstr "Auswahl drehen" msgid "Rotating the canvas" msgstr "Leinwand drehen" msgid "Scaling the selection" msgstr "Auswahl skalieren" msgid "Scaling the canvas" msgstr "Leinwand skalieren" drawing-0.4.11/po/drawing.pot000066400000000000000000000331501362211111700160220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+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" msgid "Drawing" msgstr "" msgid "Simple drawing utility" msgstr "" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "" msgid "New Window" msgstr "" msgid "New Image" msgstr "" msgid "Edit Image in Clipboard" msgstr "" msgid "A drawing application for the GNOME desktop" msgstr "" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "" msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "" msgid "Report a bug" msgstr "" msgid "Shortcuts" msgstr "" msgid "Help" msgstr "" msgid "About" msgstr "" msgid "Quit" msgstr "" msgid "_File" msgstr "" msgid "New Blank Image" msgstr "" msgid "New Image With Custom Size" msgstr "" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "" msgid "Open an image" msgstr "" msgid "Reload file" msgstr "" msgid "Image properties" msgstr "" msgid "Save" msgstr "" msgid "Save as…" msgstr "" msgid "Export as…" msgstr "" msgid "Print" msgstr "" msgid "Close" msgstr "" msgid "_Edit" msgstr "" msgid "Undo" msgstr "" msgid "Redo" msgstr "" msgid "Select all" msgstr "" msgid "Cut" msgstr "" msgid "Copy" msgstr "" msgid "Delete" msgstr "" msgid "Paste" msgstr "" msgid "Import" msgstr "" msgid "_View" msgstr "" msgid "Optimal Zoom" msgstr "" msgid "Zoom Out" msgstr "" msgid "Original Zoom" msgstr "" msgid "Zoom In" msgstr "" msgid "Show the preview" msgstr "" msgid "Refresh" msgstr "" msgid "Rebuild from history" msgstr "" msgid "Position" msgstr "" msgid "Go Left" msgstr "" msgid "Go Up" msgstr "" msgid "Go Down" msgstr "" msgid "Go Right" msgstr "" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "" msgid "_Colors" msgstr "" msgid "Main color" msgstr "" msgid "Secondary color" msgstr "" msgid "Exchange colors" msgstr "" msgid "Color editor by default" msgstr "" msgid "_Tools" msgstr "" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "" msgid "_Options" msgstr "" msgid "_Windows" msgstr "" msgid "Quit all windows" msgstr "" msgid "_Help" msgstr "" msgid "Index" msgstr "" msgid "Basic help" msgstr "" msgid "Help about tools" msgstr "" msgid "Canvas and selection" msgstr "" msgid "Help about selection" msgstr "" msgid "About Drawing" msgstr "" msgid "Back to the palette" msgstr "" msgid "Use this editor by default" msgstr "" msgid "Width" msgstr "" msgid "Height" msgstr "" msgid "Background color" msgstr "" msgid "Use these settings by default" msgstr "" msgid "Open" msgstr "" msgid "Images" msgstr "" msgid "Tools" msgstr "" msgid "Advanced options" msgstr "" msgid "Path" msgstr "" msgid "Format" msgstr "" msgid "Colorspace" msgstr "" msgid "Unsaved file" msgstr "" msgid "Invalid format" msgstr "" msgid "pixels" msgstr "" msgid "centimeters" msgstr "" msgid "inches" msgstr "" msgid "Unselect" msgstr "" msgid "Flip" msgstr "" msgid "Crop" msgstr "" msgid "Scale" msgstr "" msgid "Rotate" msgstr "" msgid "Saturate" msgstr "" msgid "Open As New Image" msgstr "" msgid "General" msgstr "" msgid "Main menu" msgstr "" msgid "Image" msgstr "" msgid "Open a file" msgstr "" msgid "Close the active image" msgstr "" msgid "Save as" msgstr "" msgid "Edition" msgstr "" msgid "Options menu" msgstr "" msgid "Back to previous tool" msgstr "" msgid "Selection" msgstr "" msgid "Delete the selection" msgstr "" msgid "Colors" msgstr "" msgid "Edit the main color (left click)" msgstr "" msgid "Edit the secondary color (right click)" msgstr "" msgid "Navigation" msgstr "" msgid "Toggle the preview" msgstr "" msgid "Error starting the application, please report this bug." msgstr "" msgid "Tool size" msgstr "" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "" #. none msgid "Preview" msgstr "" msgid "Troubleshoot selection" msgstr "" msgid "Cancel" msgstr "" msgid "Create" msgstr "" msgid "Print the version and display the 'about' dialog" msgstr "" msgid "Open a new window" msgstr "" msgid "Open a new tab" msgstr "" msgid "Edit the clipboard content" msgstr "" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "" msgid "A drawing application for the GNOME desktop." msgstr "" msgid "Official webpage" msgstr "" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "" #, python-format msgid "Failed to load tool: %s" msgstr "" #, python-format msgid "Loading %s" msgstr "" msgid "New Tab" msgstr "" msgid "Discard changes" msgstr "" #, python-format msgid "There are unsaved modifications to %s." msgstr "" #, python-format msgid "Where do you want to open %s?" msgstr "" msgid "Open a picture" msgstr "" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "" #, python-format msgid "What do you want to do with %s?" msgstr "" msgid "Untitled" msgstr "" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "" msgid "Discard" msgstr "" msgid "Save picture as…" msgstr "" msgid "Import a picture" msgstr "" #, python-format msgid "Undo %s" msgstr "" #, python-format msgid "Redo %s" msgstr "" msgid "New images" msgstr "" msgid "Default width" msgstr "" msgid "Default height" msgstr "" msgid "Default background" msgstr "" msgid "Images saving" msgstr "" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" msgid "White" msgstr "" msgid "Black" msgstr "" msgid "Checkboard" msgstr "" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "" msgid "Use big icons" msgstr "" msgid "Preview size" msgstr "" msgid "Development features" msgstr "" msgid "Layout" msgstr "" msgid "The recommended value is \"Automatic\"." msgstr "" msgid "Automatic" msgstr "" msgid "Compact" msgstr "" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "" msgid "Menubar only" msgstr "" msgid "Toolbar only" msgstr "" msgid "Toolbar only (symbolic icons)" msgstr "" msgid "This file format doesn't support transparent colors." msgstr "" msgid "Replace transparency with:" msgstr "" msgid "All pictures" msgstr "" msgid "PNG images" msgstr "" msgid "JPEG images" msgstr "" msgid "BMP images" msgstr "" msgid "Transparent" msgstr "" #, python-format msgid "%s%% transparent" msgstr "" msgid "Grey" msgstr "" msgid "Orange" msgstr "" msgid "Brown" msgstr "" msgid "Probably brown" msgstr "" msgid "Red" msgstr "" msgid "Green" msgstr "" msgid "Blue" msgstr "" msgid "Yellow" msgstr "" msgid "Magenta" msgstr "" msgid "Purple" msgstr "" msgid "Cyan" msgstr "" msgid "Probably turquoise" msgstr "" msgid "Unknown color name" msgstr "" msgid "Continue" msgstr "" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "" msgid "Lead shape" msgstr "" #. Default values msgid "Round" msgstr "" msgid "Square" msgstr "" msgid "Use dashes" msgstr "" msgid "Arrow" msgstr "" msgid "Mode" msgstr "" msgid "Classic" msgstr "" msgid "Source color" msgstr "" msgid "Eraser" msgstr "" msgid "Difference" msgstr "" msgid "Shape" msgstr "" msgid "Oval" msgstr "" msgid "Circle" msgstr "" msgid "Filling" msgstr "" msgid "Empty" msgstr "" msgid "Filled (main color)" msgstr "" msgid "Filled (secondary color)" msgstr "" msgid "Apply" msgstr "" msgid "Flip horizontally" msgstr "" msgid "Flip vertically" msgstr "" msgid "Color gradient" msgstr "" msgid "Behavior" msgstr "" msgid "Encircle and fill" msgstr "" msgid "Erase and replace" msgstr "" msgid "Clipping" msgstr "" msgid "Thin" msgstr "" msgid "Artificial smoothness" msgstr "" msgid "Rectangle" msgstr "" msgid "Rounded rectangle" msgstr "" msgid "Rotate left" msgstr "" msgid "Angle (degrees)" msgstr "" msgid "Rotate right" msgstr "" msgid "Saturation" msgstr "" msgid "Keep proportions" msgstr "" msgid "Edit" msgstr "" msgid "Selection type" msgstr "" msgid "Freehand" msgstr "" msgid "Similar color" msgstr "" msgid "Selection options" msgstr "" msgid "Insert here" msgstr "" msgid "Font" msgstr "" msgid "Italic" msgstr "" msgid "Bold" msgstr "" msgid "Background" msgstr "" msgid "No background" msgstr "" msgid "Shadow" msgstr "" msgid "Outline" msgstr "" msgid "Rectangle background" msgstr "" msgid "Arc" msgstr "" msgid "Arc options" msgstr "" msgid "With dashes" msgstr "" msgid "Circle options" msgstr "" msgid "Free shape" msgstr "" msgid "Shape options" msgstr "" msgid "Click on the shape's first point to close it." msgstr "" msgid "Line" msgstr "" msgid "Line options" msgstr "" msgid "Paint" msgstr "" msgid "Painting options" msgstr "" msgid "Click on an area to replace its color by transparency" msgstr "" msgid "Polygon" msgstr "" msgid "Polygon options" msgstr "" msgid "Pencil" msgstr "" msgid "Pencil options" msgstr "" msgid "Color Picker" msgstr "" msgid "Rectangle options" msgstr "" msgid "Text" msgstr "" msgid "Font options" msgstr "" msgid "Rectangle selection" msgstr "" msgid "Free selection" msgstr "" msgid "Color selection" msgstr "" msgid "Drag the selection or right-click on the canvas" msgstr "" msgid "Select an area or right-click on the canvas" msgstr "" msgid "Cropping the selection" msgstr "" msgid "Cropping the canvas" msgstr "" msgid "Rotating the selection" msgstr "" msgid "Rotating the canvas" msgstr "" msgid "Scaling the selection" msgstr "" msgid "Scaling the canvas" msgstr "" drawing-0.4.11/po/es.po000066400000000000000000000620541362211111700146170ustar00rootroot00000000000000# Spanish translation of drawing. # Copyright (C) 2019 Romain F. T. # This file is distributed under the same license as the drawing package. # Adolfo Jayme Barrientos # Xoán Sampaíño , 2019 # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-06-26 15:11+0100\n" "Last-Translator: Xoán Sampaíño \n" "Language-Team: \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Drawing" msgstr "Drawing" msgid "Simple drawing utility" msgstr "Utilidad de dibujo sencilla" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Boceto;Lápiz;" msgid "New Window" msgstr "Ventana nueva" msgid "New Image" msgstr "Imagen nueva" msgid "Edit Image in Clipboard" msgstr "Editar imagen del portapapeles" msgid "A drawing application for the GNOME desktop" msgstr "Una aplicación de dibujo para el escritorio GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "«Drawing» es un editor de imagen básico con soporte para tipos de archivo " "PNG, JPEG y BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Le permite dibujar o editar imágenes con herramientas como lápiz, línea o " "arco (con varias opciones), selección (cortar/copiar/pegar/arrastrar/…), " "formas (rectángulo, círculo, polígono, …), inserción de texto, cambio de " "tamaño, recorte, rotación, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "La versión 0.4.11 presenta varias correcciones de errores menores y varias " "traducciones nuevas." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "La versión 0.4.10 presenta varias correcciones de errores menores y varias " "traducciones nuevas." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "La versión 0.4.5 presenta varias correcciones de errores menores y varias " "traducciones nuevas." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "La versión 0.4.4 presenta varias correcciones de errores menores y varias " "traducciones nuevas." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "La versión 0.4.3 incluye traducciones nuevas y es compatible con " "distribuciones antiguas como Ubuntu 18.04 LTS." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "La versión 0.4.2 presenta varias correcciones de errores menores y varias " "traducciones nuevas." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "La versión 0.4 presenta un nuevo icono, numerosas correcciones de errores " "menores, una barra de herramientas mejorada para las disposiciones " "«tradicional» y «sólo barra de herramientas», una acción para crear una " "imagen desde el contenido del portapapeles, un lápiz más suave y varias " "traducciones nuevas." msgid "First stable release, including a few basic tools." msgstr "Primera versión estable, que incluye algunas herramientas básicas." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Preferencias" msgid "Report a bug" msgstr "Informar de un fallo" msgid "Shortcuts" msgstr "Atajos" msgid "Help" msgstr "Ayuda" msgid "About" msgstr "Acerca de" msgid "Quit" msgstr "Salir" msgid "_File" msgstr "_Archivo" msgid "New Blank Image" msgstr "Nueva imagen en blanco" msgid "New Image With Custom Size" msgstr "Nueva imagen de tamaño personalizado" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nueva imagen desde la selección" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nueva imagen desde el portapapeles" msgid "Open an image" msgstr "Abrir una imagen" msgid "Reload file" msgstr "Recargar archivo" msgid "Image properties" msgstr "Propiedades de imagen" msgid "Save" msgstr "Guardar" msgid "Save as…" msgstr "Guardar como…" msgid "Export as…" msgstr "Exportar como…" msgid "Print" msgstr "Imprimir" msgid "Close" msgstr "Cerrar" msgid "_Edit" msgstr "_Editar" msgid "Undo" msgstr "Deshacer" msgid "Redo" msgstr "Rehacer" msgid "Select all" msgstr "Seleccionar todo" msgid "Cut" msgstr "Cortar" msgid "Copy" msgstr "Copiar" msgid "Delete" msgstr "Eliminar" msgid "Paste" msgstr "Pegar" msgid "Import" msgstr "Importar" msgid "_View" msgstr "_Ver" msgid "Optimal Zoom" msgstr "Ampliación óptima" msgid "Zoom Out" msgstr "Alejar" msgid "Original Zoom" msgstr "Ampliación original" msgid "Zoom In" msgstr "Acercar" msgid "Show the preview" msgstr "Mostrar la previsualización" msgid "Refresh" msgstr "Actualizar" msgid "Rebuild from history" msgstr "Reconstruir desde el historial" msgid "Position" msgstr "Posición" msgid "Go Left" msgstr "Ir a la izquierda" msgid "Go Up" msgstr "Ir arriba" msgid "Go Down" msgstr "Ir abajo" msgid "Go Right" msgstr "Ir a la derecha" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Mostrar nombres de herramientas" msgid "_Colors" msgstr "_Colores" msgid "Main color" msgstr "Color principal" msgid "Secondary color" msgstr "Color secundario" msgid "Exchange colors" msgstr "Intercambiar colores" msgid "Color editor by default" msgstr "Editor de colores predeterminado" msgid "_Tools" msgstr "_Herramientas" msgid "_Canvas" msgstr "_Lienzo" msgid "Previous tool" msgstr "Herramienta anterior" msgid "_Options" msgstr "_Opciones" msgid "_Windows" msgstr "_Ventanas" msgid "Quit all windows" msgstr "Cerrar todas las ventanas" msgid "_Help" msgstr "Ay_uda" msgid "Index" msgstr "Índice" msgid "Basic help" msgstr "Ayuda básica" msgid "Help about tools" msgstr "Ayuda acerca de las herramientas" msgid "Canvas and selection" msgstr "Lienzo y selección" msgid "Help about selection" msgstr "Ayuda acerca de la selección" msgid "About Drawing" msgstr "Acerca de Drawing" msgid "Back to the palette" msgstr "Volver a la paleta" msgid "Use this editor by default" msgstr "Utilizar este editor de manera predeterminada" msgid "Width" msgstr "Anchura" msgid "Height" msgstr "Altura" msgid "Background color" msgstr "Color de fondo" msgid "Use these settings by default" msgstr "Utilizar estos ajustes de manera predeterminada" msgid "Open" msgstr "Abrir" msgid "Images" msgstr "Imágenes" msgid "Tools" msgstr "Herramientas" msgid "Advanced options" msgstr "Opciones avanzadas" msgid "Path" msgstr "Ruta" msgid "Format" msgstr "Formato" msgid "Colorspace" msgstr "Espacio de color" msgid "Unsaved file" msgstr "Archivo no guardado" msgid "Invalid format" msgstr "Formato no válido" msgid "pixels" msgstr "píxeles" msgid "centimeters" msgstr "centímetros" msgid "inches" msgstr "pulgadas" msgid "Unselect" msgstr "Deseleccionar" msgid "Flip" msgstr "Voltear" msgid "Crop" msgstr "Recortar" msgid "Scale" msgstr "Escalar" msgid "Rotate" msgstr "Girar" msgid "Saturate" msgstr "Saturar" msgid "Open As New Image" msgstr "Abrir como imagen nueva" msgid "General" msgstr "General" msgid "Main menu" msgstr "Menú principal" msgid "Image" msgstr "Imagen" msgid "Open a file" msgstr "Abrir un archivo" msgid "Close the active image" msgstr "Cerrar la imagen activa" msgid "Save as" msgstr "Guardar como" msgid "Edition" msgstr "Edición" msgid "Options menu" msgstr "Menú de opciones" msgid "Back to previous tool" msgstr "Volver a la herramienta anterior" msgid "Selection" msgstr "Selección" msgid "Delete the selection" msgstr "Borrar la selección" msgid "Colors" msgstr "Colores" msgid "Edit the main color (left click)" msgstr "Editar el color principal (botón principal del ratón)" msgid "Edit the secondary color (right click)" msgstr "Editar el color secundario (botón secundario del ratón)" msgid "Navigation" msgstr "Navegación" msgid "Toggle the preview" msgstr "Conmutar previsualización" msgid "Error starting the application, please report this bug." msgstr "Error al iniciar la aplicación; por favor, informe acerca del fallo." msgid "Tool size" msgstr "Tamaño de herramienta" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Sin opciones" #. none msgid "Preview" msgstr "Previsualización" msgid "Troubleshoot selection" msgstr "Solución de problemas de la selección" msgid "Cancel" msgstr "Cancelar" msgid "Create" msgstr "Crear" msgid "Print the version and display the 'about' dialog" msgstr "Muestra la versión y el diálogo «Acerca de»" msgid "Open a new window" msgstr "Abre una ventana nueva" msgid "Open a new tab" msgstr "Abre una pestaña nueva" msgid "Edit the clipboard content" msgstr "Edita el contenido del portapapeles" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "" "Xoán Sampaíño \n" "Adolfo Jayme Barrientos" msgid "A drawing application for the GNOME desktop." msgstr "Una aplicación de dibujo para el escritorio GNOME." msgid "Official webpage" msgstr "Sitio web oficial" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Error al abrir el archivo. ¿Quizá quería decir %s?" #, python-format msgid "Failed to load tool: %s" msgstr "Error al cargar la herramienta: %s" #, python-format msgid "Loading %s" msgstr "Cargando %s" msgid "New Tab" msgstr "Pestaña nueva" msgid "Discard changes" msgstr "Descartar cambios" #, python-format msgid "There are unsaved modifications to %s." msgstr "Hay cambios no guardados en «%s»." #, python-format msgid "Where do you want to open %s?" msgstr "¿Dónde quiere abrir «%s»?" msgid "Open a picture" msgstr "Abrir una imagen" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "estos archivos" #, python-format msgid "What do you want to do with %s?" msgstr "¿Qué quiere hacer con «%s»?" msgid "Untitled" msgstr "Sin título" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "esta imagen" msgid "Discard" msgstr "Descartar" msgid "Save picture as…" msgstr "Guardar imagen como…" msgid "Import a picture" msgstr "Importar una imagen" #, python-format msgid "Undo %s" msgstr "Deshacer %s" #, python-format msgid "Redo %s" msgstr "Rehacer %s" msgid "New images" msgstr "Imágenes nuevas" msgid "Default width" msgstr "Anchura predeterminada" msgid "Default height" msgstr "Altura predeterminada" msgid "Default background" msgstr "Fondo predeterminado" msgid "Images saving" msgstr "Guardado de imágenes" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Las imágenes en formato JPEG y BMP no soportan transparencia. Si guarda la " "imagen en alguno de estos formatos, ¿qué quiere utilizar para reemplazar los " "píxeles transparentes?" msgid "White" msgstr "Blanco" msgid "Black" msgstr "Negro" msgid "Checkboard" msgstr "Patrón de cuadrícula" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "Preguntar antes de guardar" msgid "Use big icons" msgstr "Usar iconos grandes" msgid "Preview size" msgstr "Tamaño de previsualización" msgid "Development features" msgstr "Funcionalidades experimentales" msgid "Layout" msgstr "Disposición" msgid "The recommended value is \"Automatic\"." msgstr "El valor recomendado es «Automático»." msgid "Automatic" msgstr "Automático" msgid "Compact" msgstr "Compacto" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Tradicional" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Tradicional (símbolos)" msgid "Menubar only" msgstr "Solo barra de menús" msgid "Toolbar only" msgstr "Solo barra de herramientas" msgid "Toolbar only (symbolic icons)" msgstr "Barra de herramientas (símbolos)" msgid "This file format doesn't support transparent colors." msgstr "Este formato de archivo no soporta colores transparentes." msgid "Replace transparency with:" msgstr "Reemplazar la transparencia con:" msgid "All pictures" msgstr "Todas las imágenes" msgid "PNG images" msgstr "Imágenes PNG" msgid "JPEG images" msgstr "Imágenes JPEG" msgid "BMP images" msgstr "Imágenes BMP" msgid "Transparent" msgstr "Transparente" #, python-format msgid "%s%% transparent" msgstr "%s%% transparente" msgid "Grey" msgstr "Gris" msgid "Orange" msgstr "Naranja" msgid "Brown" msgstr "Marrón" msgid "Probably brown" msgstr "Probablemente marrón" msgid "Red" msgstr "Rojo" msgid "Green" msgstr "Verde" msgid "Blue" msgstr "Azul" msgid "Yellow" msgstr "Amarillo" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Morado" msgid "Cyan" msgstr "Cian" msgid "Probably turquoise" msgstr "Probablemente turquesa" msgid "Unknown color name" msgstr "Nombre de color desconocido" msgid "Continue" msgstr "Continuar" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "El área parece estar delineada deficientemente o es altamente compleja.\n" "Es posible que este algoritmo no sea capaz de rellenar el área deseada.\n" "\n" "¿Quiere cancelar la operación o permitir que la herramienta lo intente?" msgid "percents" msgstr "porcentaje" msgid "Lead shape" msgstr "Forma" #. Default values msgid "Round" msgstr "Extremos redondeados" msgid "Square" msgstr "Extremos cuadrados" msgid "Use dashes" msgstr "Utilizar trazos" msgid "Arrow" msgstr "Flecha" msgid "Mode" msgstr "Modo" msgid "Classic" msgstr "Clásico" msgid "Source color" msgstr "Color de origen" msgid "Eraser" msgstr "Borrador" msgid "Difference" msgstr "Diferencia" msgid "Shape" msgstr "Forma" msgid "Oval" msgstr "Óvalo" msgid "Circle" msgstr "Círculo" msgid "Filling" msgstr "Relleno" msgid "Empty" msgstr "Vacío" msgid "Filled (main color)" msgstr "Relleno (color principal)" msgid "Filled (secondary color)" msgstr "Relleno (color secundario)" msgid "Apply" msgstr "Aplicar" msgid "Flip horizontally" msgstr "Voltear horizontalmente" msgid "Flip vertically" msgstr "Voltear verticalmente" msgid "Color gradient" msgstr "Degradado" msgid "Behavior" msgstr "Comportamiento" msgid "Encircle and fill" msgstr "Rodear y rellenar" msgid "Erase and replace" msgstr "Borrar y reemplazar" msgid "Clipping" msgstr "Recorte" msgid "Thin" msgstr "Extremos apuntados" msgid "Artificial smoothness" msgstr "Suavizado artificial" msgid "Rectangle" msgstr "Rectángulo" #, fuzzy msgid "Rounded rectangle" msgstr "Rectángulo" msgid "Rotate left" msgstr "Girar a la izquierda" msgid "Angle (degrees)" msgstr "Ángulo (grados)" msgid "Rotate right" msgstr "Girar a la derecha" msgid "Saturation" msgstr "Saturación" msgid "Keep proportions" msgstr "Mantener proporciones" msgid "Edit" msgstr "Editar" msgid "Selection type" msgstr "Tipo de selección" msgid "Freehand" msgstr "Mano alzada" msgid "Similar color" msgstr "Color similar" msgid "Selection options" msgstr "Opciones de selección" msgid "Insert here" msgstr "Insertar aquí" msgid "Font" msgstr "Tipo de letra" msgid "Italic" msgstr "Cursiva" msgid "Bold" msgstr "Negrita" msgid "Background" msgstr "Fondo" msgid "No background" msgstr "Sin fondo" msgid "Shadow" msgstr "Sombra" msgid "Outline" msgstr "" #, fuzzy msgid "Rectangle background" msgstr "Fondo predeterminado" msgid "Arc" msgstr "Arco" msgid "Arc options" msgstr "Opciones de arco" msgid "With dashes" msgstr "Con trazos" msgid "Circle options" msgstr "Opciones de círculo" msgid "Free shape" msgstr "Forma libre" msgid "Shape options" msgstr "Opciones de forma" msgid "Click on the shape's first point to close it." msgstr "Haga clic en el primer punto de la forma para cerrarla." msgid "Line" msgstr "Línea" msgid "Line options" msgstr "Opciones de línea" msgid "Paint" msgstr "Relleno" msgid "Painting options" msgstr "Opciones de relleno" msgid "Click on an area to replace its color by transparency" msgstr "Haga clic en un área para reemplazar su color por transparencia" msgid "Polygon" msgstr "Polígono" msgid "Polygon options" msgstr "Opciones de polígono" msgid "Pencil" msgstr "Lápiz" msgid "Pencil options" msgstr "Opciones de lápiz" msgid "Color Picker" msgstr "Selector de color" msgid "Rectangle options" msgstr "Opciones de rectángulo" msgid "Text" msgstr "Texto" msgid "Font options" msgstr "Opciones de tipo de letra" msgid "Rectangle selection" msgstr "Selección rectangular" msgid "Free selection" msgstr "Selección libre" msgid "Color selection" msgstr "Selección por color" msgid "Drag the selection or right-click on the canvas" msgstr "" "Arrastre la selección o haga clic con el botón secundario del ratón en el " "lienzo" msgid "Select an area or right-click on the canvas" msgstr "" "Seleccione un área o haga clic con el botón secundario del ratón en el lienzo" msgid "Cropping the selection" msgstr "Recortando la selección" msgid "Cropping the canvas" msgstr "Recortando el lienzo" msgid "Rotating the selection" msgstr "Girando la selección" msgid "Rotating the canvas" msgstr "Girando el lienzo" msgid "Scaling the selection" msgstr "Escalando la selección" msgid "Scaling the canvas" msgstr "Escalando el lienzo" #~ msgid "" #~ "The 'saturate' tool has been replaced by 'filters', a more powerful tool " #~ "with several types of blur, color inversion, pixelisation, saturation and " #~ "transparency." #~ msgstr "" #~ "La herramienta «saturación» ha sido reemplazada por «filtros», una " #~ "herramienta más potente con diferentes tipos de desenfoque, inversión de " #~ "color, pixelación, saturación y transparencia." #~ msgid "A fullscreen mode is now available." #~ msgstr "Ahora está disponible un modo de pantalla completa." #~ msgid "" #~ "The most prominent new feature is the ability to zoom in (or out) on the " #~ "image, using the minimap, the touchpad or the mouse wheel." #~ msgstr "" #~ "La característica nueva más destacada es la posibilidad de acercar (o " #~ "alejar) la imagen usando el minimapa, el panel táctil o la rueda del " #~ "ratón." #~ msgid "" #~ "Version 0.4.8 features several minor bug fixes, and various new " #~ "translations." #~ msgstr "" #~ "La versión 0.4.8 presenta varias correcciones de errores menores y varias " #~ "traducciones nuevas." #~ msgid "Close Image" #~ msgstr "Cerrar imagen" #~ msgid "Close Window" #~ msgstr "Cerrar ventana" #~ msgid "Zoom" #~ msgstr "Ampliación" #~ msgid "Fullscreen" #~ msgstr "Pantalla completa" #~ msgid "Exit fullscreen" #~ msgstr "Salir de pantalla completa" #, fuzzy #~ msgid "Edit Main Color…" #~ msgstr "Color principal" #, fuzzy #~ msgid "Edit Secondary Color…" #~ msgstr "Color secundario" #, fuzzy #~ msgid "Use color editor by default" #~ msgstr "Editor de colores predeterminado" #, fuzzy #~ msgid "Color application mode" #~ msgstr "Selección por color" #~ msgid "Blur" #~ msgstr "Desenfoque" #, fuzzy #~ msgid "Erase" #~ msgstr "Borrador" #~ msgid "100%" #~ msgstr "100%" #~ msgid "Close selection" #~ msgstr "Cerrar selección" #~ msgid "Filters" #~ msgstr "Filtros" #~ msgid "Keyboard" #~ msgstr "Teclado" #~ msgid "Editing" #~ msgstr "Edición" #~ msgid "Import a file as the selection" #~ msgstr "Importar un archivo como selección" #~ msgid "Enter fullscreen mode" #~ msgstr "Ingresar al modo de pantalla completa" #~ msgid "Exit fullscreen mode" #~ msgstr "Salir del modo de pantalla completa" #~ msgid "Show the app version" #~ msgstr "Muestra la versión" #~ msgid "Report bugs or ideas" #~ msgstr "Informar de fallos o proponer ideas" #~ msgid "%s%%" #~ msgstr "%s%%" #~ msgid "Appearance" #~ msgstr "Apariencia" #~ msgid "Additional tools" #~ msgstr "Herramientas adicionales" #~ msgid "" #~ "These tools are not as reliable and useful as they should be, so they are " #~ "not all enabled by default." #~ msgstr "" #~ "Estas herramientas no son tan confiables y útiles como deberían ser, por " #~ "lo que no todas están habilitadas de forma predeterminada." #~ msgid "Modifications will take effect in the next new window." #~ msgstr "Los cambios tendrán efecto en la próxima ventana nueva." #~ msgid "Opened images" #~ msgstr "Imágenes abiertas" #~ msgid "Failed to save %s" #~ msgstr "Error al guardar %s" #, fuzzy #~ msgid "Required tool is not available" #~ msgstr "Ahora está disponible un modo de pantalla completa." #~ msgid "The area seems poorly delimited, or is very complex." #~ msgstr "" #~ "El área parece estar delineada deficientemente o es altamente compleja." #~ msgid "This algorithm may not be able to manage the wanted area." #~ msgstr "" #~ "Es posible que este algoritmo no sea capaz de rellenar el área deseada." #~ msgid "Do you want to abort the operation, or to let the tool struggle ?" #~ msgstr "" #~ "¿Quiere cancelar la operación o permitir que la herramienta lo intente?" #~ msgid "More actions" #~ msgstr "Más acciones" #, fuzzy #~ msgid "Line shape" #~ msgstr "Forma" #~ msgid "Empty outline" #~ msgstr "Sin relleno" #~ msgid "Horizontal gradient" #~ msgstr "Degradado horizontal" #~ msgid "Vertical gradient" #~ msgstr "Degradado vertical" #~ msgid "Radial gradient" #~ msgstr "Degradado radial" #~ msgid "Close shape" #~ msgstr "Cerrar forma" #~ msgid "More options" #~ msgstr "Más opciones" #~ msgid "Select a filter…" #~ msgstr "Seleccionar un filtro…" #~ msgid "Blur radius" #~ msgstr "Radio de desenfoque" #~ msgid "Transparency" #~ msgstr "Transparencia" #, fuzzy #~ msgid "Change saturation" #~ msgstr "Saturación" #~ msgid "Pixelisation" #~ msgstr "Pixelización" #, fuzzy #~ msgid "Add transparency" #~ msgstr "Transparencia" #~ msgid "Invert colors" #~ msgstr "Invertir colores" #~ msgid "Horizontal blur" #~ msgstr "Desenfoque horizontal" #~ msgid "Vertical blur" #~ msgstr "Desenfoque vertical" #~ msgid "Angle" #~ msgstr "Ángulo" #, fuzzy #~ msgid "Horizontal deformation" #~ msgstr "Degradado horizontal" #, fuzzy #~ msgid "Vertical deformation" #~ msgstr "Degradado vertical" #~ msgid "Curve" #~ msgstr "Curva" #~ msgid "Curve options" #~ msgstr "Opciones de curva" #~ msgid "Dashed arrow" #~ msgstr "Flecha discontinua" #~ msgid "Dashed" #~ msgstr "Discontinua" #~ msgid "Click on the image to preview the selected filter" #~ msgstr "" #~ "Haga clic en la imagen para obtener una vista previa del filtro " #~ "seleccionado" drawing-0.4.11/po/fi.po000066400000000000000000000455531362211111700146130ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # FIRST AUTHOR , YEAR. # Kimmo Kujansuu , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-12-10 22:40+0200\n" "Last-Translator: Kimmo Kujansuu \n" "Language-Team: suomi <>\n" "Language: \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 2.91.7\n" msgid "Drawing" msgstr "Piirtäminen" msgid "Simple drawing utility" msgstr "Helppo piirustus apuohjelma" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Maali;Luonnos;Lyijykynä;" msgid "New Window" msgstr "Uusi ikkuna" msgid "New Image" msgstr "Uusi kuva" msgid "Edit Image in Clipboard" msgstr "Muokkaa kuvaa leikepöydällä" msgid "A drawing application for the GNOME desktop" msgstr "Piirustus apuohjelma GNOME-työpöydälle" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Piirtäminen\" on peruskuvaeditori, joka tukee PNG-, JPEG- ja BMP-" "tiedostotyyppejä." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Sen avulla voit piirtää tai muokata kuvia työkaluilla kuten lyijykynä, viiva " "tai kaari (eri vaihtoehdoilla), valinta (leikkaa/kopioi/liitä/vedä/…), " "muodot (suorakulmio, ympyrä, monikulmio…), tekstin lisäys, koon muuttaminen, " "rajaaminen, kiertäminen, …" #, fuzzy msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" #, fuzzy msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" #, fuzzy msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" #, fuzzy msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" #, fuzzy msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Versio 0.4.8 sisältää useita pieniä virhekorjauksia ja uusia käännöksiä." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Asetukset" msgid "Report a bug" msgstr "Ilmoita virheestä" msgid "Shortcuts" msgstr "Pikakuvakkeet" msgid "Help" msgstr "Apua" msgid "About" msgstr "Tietoja" msgid "Quit" msgstr "Sulje" msgid "_File" msgstr "_Tiedosto" msgid "New Blank Image" msgstr "Uusi tyhjä kuva" msgid "New Image With Custom Size" msgstr "Uusi kuva, jossa mukautettu koko" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Uusi kuva valinnasta" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Uusi kuva leikepöydältä" msgid "Open an image" msgstr "Avaa kuva" msgid "Reload file" msgstr "Lataa uudelleen" msgid "Image properties" msgstr "Kuvan ominaisuudet" msgid "Save" msgstr "Tallenna" msgid "Save as…" msgstr "Tallenna nimellä…" msgid "Export as…" msgstr "Vie nimellä…" msgid "Print" msgstr "Tulosta" msgid "Close" msgstr "" msgid "_Edit" msgstr "_Muokkaa" msgid "Undo" msgstr "Kumoa" msgid "Redo" msgstr "Toista" msgid "Select all" msgstr "Valitse kaikki" msgid "Cut" msgstr "Leikkaa" msgid "Copy" msgstr "Kopioi" msgid "Delete" msgstr "Poista" msgid "Paste" msgstr "Liitä" msgid "Import" msgstr "Tuonti" msgid "_View" msgstr "_Näytä" msgid "Optimal Zoom" msgstr "Optimaalinen näkymä" msgid "Zoom Out" msgstr "Loitontaa" msgid "Original Zoom" msgstr "Alkuperäinen koko" msgid "Zoom In" msgstr "Lähennä" msgid "Show the preview" msgstr "Näytä esikatselu" msgid "Refresh" msgstr "Virkistä" msgid "Rebuild from history" msgstr "Rakenna uudelleen historiasta" msgid "Position" msgstr "Paikka" msgid "Go Left" msgstr "Mene vasemmalle" msgid "Go Up" msgstr "Mene ylös" msgid "Go Down" msgstr "Mene alas" msgid "Go Right" msgstr "Mene oikealle" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Näytä työkalujen nimet" msgid "_Colors" msgstr "_Värit" msgid "Main color" msgstr "Pääväri" msgid "Secondary color" msgstr "Seuraava väri" msgid "Exchange colors" msgstr "Vaihda värejä" msgid "Color editor by default" msgstr "Värieditori oletuksena" msgid "_Tools" msgstr "_Työkalut" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "Edellinen työkalu" msgid "_Options" msgstr "_Valinnat" #, fuzzy msgid "_Windows" msgstr "Uusi ikkuna" msgid "Quit all windows" msgstr "Sulje kaikki ikkunat" msgid "_Help" msgstr "_Apua" msgid "Index" msgstr "Sisällysluettelo" msgid "Basic help" msgstr "Perusohjeet" msgid "Help about tools" msgstr "Ohje työkaluista" msgid "Canvas and selection" msgstr "Tausta ja valinta" msgid "Help about selection" msgstr "Ohje valinnasta" msgid "About Drawing" msgstr "Tietoja ohjelmasta" msgid "Back to the palette" msgstr "Takaisin palettiin" msgid "Use this editor by default" msgstr "Käytä tätä editoria oletuksena" msgid "Width" msgstr "Leveys" msgid "Height" msgstr "Korkeus" msgid "Background color" msgstr "Taustaväri" msgid "Use these settings by default" msgstr "Käytä näitä asetuksia oletuksena" msgid "Open" msgstr "Avaa" msgid "Images" msgstr "Kuvat" msgid "Tools" msgstr "Työkalut" msgid "Advanced options" msgstr "Edistyneet asetukset" msgid "Path" msgstr "Polku" msgid "Format" msgstr "Muoto" msgid "Colorspace" msgstr "Värialue" msgid "Unsaved file" msgstr "Tallentamaton tiedosto" msgid "Invalid format" msgstr "Väärä muoto" msgid "pixels" msgstr "Pikseliä" msgid "centimeters" msgstr "Senttimetriä" msgid "inches" msgstr "Tuumaa" msgid "Unselect" msgstr "Valitsematta" msgid "Flip" msgstr "Peilaa" msgid "Crop" msgstr "Rajaa" msgid "Scale" msgstr "Skaalaa" msgid "Rotate" msgstr "Kieritä" #, fuzzy msgid "Saturate" msgstr "Kylläisyys" msgid "Open As New Image" msgstr "Avaa uutena kuvana" msgid "General" msgstr "Yleinen" msgid "Main menu" msgstr "Päävalikko" msgid "Image" msgstr "Kuva" msgid "Open a file" msgstr "Avaa tiedosto" msgid "Close the active image" msgstr "Sulje aktiivinen kuva" msgid "Save as" msgstr "Tallenna nimellä" #, fuzzy msgid "Edition" msgstr "Muokata" msgid "Options menu" msgstr "Asetukset valikko" msgid "Back to previous tool" msgstr "Takaisin edelliseen työkaluun" msgid "Selection" msgstr "Valinta" msgid "Delete the selection" msgstr "Poista valinta" msgid "Colors" msgstr "Värit" msgid "Edit the main color (left click)" msgstr "Muokkaa pääväriä (vasen napsautus)" msgid "Edit the secondary color (right click)" msgstr "Muokkaa seuraavaa väriä (napsauta hiiren oikealla painikkeella)" msgid "Navigation" msgstr "Navigaatio" msgid "Toggle the preview" msgstr "Vaihda esikatseluun" msgid "Error starting the application, please report this bug." msgstr "Virhe sovelluksen käynnistämisessä, ilmoita tästä virheestä." msgid "Tool size" msgstr "Työkalun koko" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Ei vaihtoehtoja" #. none msgid "Preview" msgstr "Esikatselu" msgid "Troubleshoot selection" msgstr "Vianmääritys" msgid "Cancel" msgstr "Peru" msgid "Create" msgstr "Luo" msgid "Print the version and display the 'about' dialog" msgstr "Tulosta versio ja näytä 'tietoja' -valintaikkuna" msgid "Open a new window" msgstr "Avaa uusi ikkuna" msgid "Open a new tab" msgstr "Avaa uusi välilehti" msgid "Edit the clipboard content" msgstr "Muokkaa leikepöydän sisältöä" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Kääntäjä Kimmo Kujansuu" msgid "A drawing application for the GNOME desktop." msgstr "Piirustus apuohjelma GNOME-työpöydälle." msgid "Official webpage" msgstr "Virallinen verkkosivu" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Virhe avatessa tiedostoa. Tarkoititko %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Työkalun lataus epäonnistui: %s" #, python-format msgid "Loading %s" msgstr "Ladataan %s" msgid "New Tab" msgstr "Uusi välilehti" msgid "Discard changes" msgstr "Hylkää muutokset" #, python-format msgid "There are unsaved modifications to %s." msgstr "Täällä on %s tallentamattomia muutoksia." #, python-format msgid "Where do you want to open %s?" msgstr "Missä haluat avata %s?" msgid "Open a picture" msgstr "Avaa kuva" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "nämä tiedostot" #, python-format msgid "What do you want to do with %s?" msgstr "Mitä haluat tehdä kohteen %s kanssa?" msgid "Untitled" msgstr "Nimetön" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "Tämä kuva" msgid "Discard" msgstr "Hylkää" msgid "Save picture as…" msgstr "Tallenna kuva nimellä…" msgid "Import a picture" msgstr "Tuo kuva" #, python-format msgid "Undo %s" msgstr "Kumoa %s" #, python-format msgid "Redo %s" msgstr "Uudelleen %s" msgid "New images" msgstr "Uusia kuvia" msgid "Default width" msgstr "Oletusleveys" msgid "Default height" msgstr "Oletuskorkeus" msgid "Default background" msgstr "Oletustausta" msgid "Images saving" msgstr "Kuvien tallennus" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "JPEG- ja BMP-kuvat eivät pysty käsittelemään läpinäkyvyyttä, jos tallennat " "kuvat näihin muotoihin. Mitä haluat käyttää korvaamaan läpinäkyvät pikselit?" msgid "White" msgstr "Valkoinen" msgid "Black" msgstr "Musta" msgid "Checkboard" msgstr "Tarkistusalusta" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "Kysy ennen tallentamista" msgid "Use big icons" msgstr "Käytä suuria kuvakkeita" msgid "Preview size" msgstr "Esikatselun koko" msgid "Development features" msgstr "Kehitysvaiheen ominaisuudet" msgid "Layout" msgstr "Asettelu" msgid "The recommended value is \"Automatic\"." msgstr "Suositeltu arvo on \"Automaattinen\"." msgid "Automatic" msgstr "Automaattinen" msgid "Compact" msgstr "Tiivis" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Perinteinen" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Perinteinen (symboliset kuvakkeet)" msgid "Menubar only" msgstr "Vain valikkopalkki" msgid "Toolbar only" msgstr "Vain työkalurivi" msgid "Toolbar only (symbolic icons)" msgstr "Vain työkalurivi (symboliset kuvakkeet)" msgid "This file format doesn't support transparent colors." msgstr "Tämä tiedostomuoto ei tue läpinäkyviä värejä." msgid "Replace transparency with:" msgstr "Korvaa läpinäkyvyys seuraavilla:" msgid "All pictures" msgstr "Kaikki kuvat" msgid "PNG images" msgstr "PNG-kuvat" msgid "JPEG images" msgstr "JPEG-kuvat" msgid "BMP images" msgstr "BMP-kuvat" msgid "Transparent" msgstr "Läpinäkyvä" #, python-format msgid "%s%% transparent" msgstr "%s%% läpinäkyvä" msgid "Grey" msgstr "Harmaa" msgid "Orange" msgstr "Oranssi" msgid "Brown" msgstr "Ruskea" msgid "Probably brown" msgstr "Todennäköisesti ruskea" msgid "Red" msgstr "Punainen" msgid "Green" msgstr "Vihreä" msgid "Blue" msgstr "Sininen" msgid "Yellow" msgstr "Keltainen" msgid "Magenta" msgstr "Purppura" msgid "Purple" msgstr "Violetti" msgid "Cyan" msgstr "Syaani" msgid "Probably turquoise" msgstr "Todennäköisesti turkoosi" msgid "Unknown color name" msgstr "Tuntematon värin nimi" msgid "Continue" msgstr "Jatka" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "prosentit" msgid "Lead shape" msgstr "Lyijykynän muoto" #. Default values msgid "Round" msgstr "Pyöreä" msgid "Square" msgstr "Neliö" msgid "Use dashes" msgstr "Käytä viivoja" msgid "Arrow" msgstr "Nuoli" msgid "Mode" msgstr "Tyyli" msgid "Classic" msgstr "Klassikko" msgid "Source color" msgstr "Lähdeväri" msgid "Eraser" msgstr "Pyyhekumi" msgid "Difference" msgstr "Eroavuus" msgid "Shape" msgstr "Muoto" msgid "Oval" msgstr "Soikea" msgid "Circle" msgstr "Ympyrä" msgid "Filling" msgstr "" msgid "Empty" msgstr "Tyhjä" #, fuzzy msgid "Filled (main color)" msgstr "Pääväri" #, fuzzy msgid "Filled (secondary color)" msgstr "Seuraava väri" msgid "Apply" msgstr "Käytä" msgid "Flip horizontally" msgstr "Peilaa vaaka suunnassa" msgid "Flip vertically" msgstr "Peilaa pystysuunnassa" msgid "Color gradient" msgstr "värikaltevuus" msgid "Behavior" msgstr "Käyttäytyminen" msgid "Encircle and fill" msgstr "Ympäröi ja täytä" msgid "Erase and replace" msgstr "Pyyhi ja korvaa" msgid "Clipping" msgstr "Lehtileike" msgid "Thin" msgstr "Ohut" msgid "Artificial smoothness" msgstr "Keinotekoinen sileys" msgid "Rectangle" msgstr "Suorakulmio" #, fuzzy msgid "Rounded rectangle" msgstr "Suorakulmio" msgid "Rotate left" msgstr "Kierrä vasemmalle" msgid "Angle (degrees)" msgstr "Kulma (astetta)" msgid "Rotate right" msgstr "Kierrä oikealle" msgid "Saturation" msgstr "Kylläisyys" #, fuzzy msgid "Keep proportions" msgstr "Säilytä aina mittasuhteet" msgid "Edit" msgstr "Muokkaa" #, fuzzy msgid "Selection type" msgstr "Valinta" #, fuzzy msgid "Freehand" msgstr "Vapaalla muodolla" #, fuzzy msgid "Similar color" msgstr "Seuraava väri" #, fuzzy msgid "Selection options" msgstr "Lyijykynän asetukset" msgid "Insert here" msgstr "Lisää tähän" msgid "Font" msgstr "Fontti" msgid "Italic" msgstr "Kursivoitu" msgid "Bold" msgstr "Vahvennettu" msgid "Background" msgstr "Tausta" msgid "No background" msgstr "Ei taustaa" msgid "Shadow" msgstr "" #, fuzzy msgid "Outline" msgstr "Tyhjä ääriviiva" #, fuzzy msgid "Rectangle background" msgstr "Oletustausta" msgid "Arc" msgstr "" #, fuzzy msgid "Arc options" msgstr "Lisää vaihtoehtoja" #, fuzzy msgid "With dashes" msgstr "Käytä viivoja" #, fuzzy msgid "Circle options" msgstr "Käyrän asetukset" msgid "Free shape" msgstr "Vapaalla muodolla" msgid "Shape options" msgstr "Muodon asetukset" msgid "Click on the shape's first point to close it." msgstr "Napsauta muodon ensimmäistä kohtaa sulkeaksesi sen." msgid "Line" msgstr "Viiva" msgid "Line options" msgstr "Viivan asetukset" msgid "Paint" msgstr "Maalaa" msgid "Painting options" msgstr "Maalauksen vaihtoehdot" msgid "Click on an area to replace its color by transparency" msgstr "Napsauta aluetta korvataksesi sen väri läpinäkyvyydellä" msgid "Polygon" msgstr "Monikulmio" #, fuzzy msgid "Polygon options" msgstr "Fontin asetukset" msgid "Pencil" msgstr "Lyijykynä" msgid "Pencil options" msgstr "Lyijykynän asetukset" msgid "Color Picker" msgstr "Värin poiminta" #, fuzzy msgid "Rectangle options" msgstr "Suorakulmion valinta" msgid "Text" msgstr "Teksti" msgid "Font options" msgstr "Fontin asetukset" msgid "Rectangle selection" msgstr "Suorakulmion valinta" msgid "Free selection" msgstr "Vapaa valinta" msgid "Color selection" msgstr "Värin valinta" msgid "Drag the selection or right-click on the canvas" msgstr "Vedä valintaa tai napsauta hiiren kakkospainikkeella alustaa" msgid "Select an area or right-click on the canvas" msgstr "Valitse alue tai napsauta hiiren kakkospainikkeella alustaa" msgid "Cropping the selection" msgstr "Rajaa valintaan" msgid "Cropping the canvas" msgstr "Alustan rajaaminen" msgid "Rotating the selection" msgstr "Valinnan kääntäminen" msgid "Rotating the canvas" msgstr "Alustan kääntäminen" msgid "Scaling the selection" msgstr "Valinnan skaalaaminen" msgid "Scaling the canvas" msgstr "Alustan skaalaaminen" drawing-0.4.11/po/fr.po000066400000000000000000000532451362211111700146210ustar00rootroot00000000000000# French translation of com.github.maoschanz.drawing # This file is under the same GPLv3. # Romain F. T. , 2018-2019. # msgid "" msgstr "" "Project-Id-Version: com.github.maoschanz.drawing 0.4\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-01-06 02:10+0100\n" "Last-Translator: Romain F. T. \n" "Language-Team: French \n" "Language: 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: Gtranslator 3.30.1\n" msgid "Drawing" msgstr "Dessin" msgid "Simple drawing utility" msgstr "Utilitaire simple pour le dessin" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Croquis;Crayon;" msgid "New Window" msgstr "Nouvelle fenêtre" msgid "New Image" msgstr "Nouvelle image" msgid "Edit Image in Clipboard" msgstr "Éditer l'image dans le presse-papier" msgid "A drawing application for the GNOME desktop" msgstr "Une application de dessin pour le bureau GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Dessin\" est un éditeur d'images basique, qui supporte les fichiers de " "type PNG, JPEG ou BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Il vous permet de dessiner ou d'éditer des images avec des outils tels que " "crayon, trait ou arc (avec diverses options), sélection (couper/copier/" "coller/déplacer…), formes (rectangle, cercle, polygone, …), insertion de " "texte, redimensionnement, recadrage, rotation, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "La version 0.4.11 comporte plusieurs correctifs de bugs mineurs, et diverses " "nouvelles traductions." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" "Plusieurs fonctionnalités ont été ajoutées aux outils : le sélecteur de " "couleurs peut aussi prélever le canal alpha, les ellipses sont " "géométriquement correctes, le texte avoir un contour de couleur secondaire, " "et les coins des rectangles peuvent être arrondis." msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" "Il est maintenant impossible de supprimer accidentellement la sélection " "pendant qu'on l'édite avec les outils 'rogner' ou de 'redimensionner'." msgid "Tabs can be closed with a middle-click." msgstr "Les onglets peuvent être fermés avec un clic du milieu." msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" "Ce qui remplace le canal transparent quand on enregistre en JPEG ou en BMP " "est maintenant une option que l'utilisateur peut changer dans la fenêtre des " "préférences." msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "La version 0.4.10 comporte plusieurs correctifs de bugs mineurs, et diverses " "nouvelles traductions." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" "L'outil \"rotation\" dont les boutons étaient inversés a été corrigé, et les " "icônes des outils ont une meilleure apparence avec le thème Adapta." msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" "Remplace la transparence par du blanc (au lieu du noir) quand on enregistre " "un fichier en JPG ou en BMP." msgid "Also, fix the color picker tool." msgstr "Aussi, corection de l'outil de prélèvement de couleur." msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" "Ajouter une action \"Nouvelle image avec taille personnalisée\", la " "possibilité d'ouvrir ou d'importer des images par glisser-déposer, et ne pas " "fermer les images enregistrées mais pas vierges lorqu'on ouvre une nouvelle " "image." msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" "L'interface de la fenêtre des préférences, la barre d'outil, les champs " "d'entrée pour les chiffres, et la barre de menus ont été améliorés." msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "La version 0.4.5 comporte plusieurs correctifs de bugs mineurs, et diverses " "nouvelles traductions." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" "Cliquer sur les 2 boutons de la souris en même temps ne plantera plus les " "outils, et l'interface confuse pour changer l'encodage des couleurs a été " "retirée puisqu'elle causait des bugs avec l'historique." msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "La version 0.4.4 comporte plusieurs correctifs de bugs mineurs, et diverses " "nouvelles traductions." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "La version 0.4.3 inclut de nouvelles traductions, et est compatible avec des " "distributions plus anciennes telles que Ubuntu 18.04 LTS." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "La version 0.4.2 comporte plusieurs correctifs de bugs mineurs, et diverses " "nouvelles traductions." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "La version 0.4 inclut une nouvelle icône, de nombreux correctifs de bugs, " "une barre d'outil améliorée pour certains agencements de l'interface, une " "action pour créer une image à partir d'une image contenue dans le presse-" "papier, et quelques nouvelles traductions." msgid "First stable release, including a few basic tools." msgstr "Première version basique, incluant quelques outils basiques." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "La fenêtre par défaut et son menu primaire" msgid "The selection and the actions associated with it" msgstr "La sélection et les actions qui y sont associées" msgid "The \"arc\" tool and its options" msgstr "L'outil \"arc\" et ses options" msgid "An example of use of the \"saturate\" tool" msgstr "Exemple d'utilisation de l'outil \"saturation\"" msgid "Preferences" msgstr "Préférences" msgid "Report a bug" msgstr "Reporter un bug" msgid "Shortcuts" msgstr "Raccourcis clavier" msgid "Help" msgstr "Aide" msgid "About" msgstr "À propos" msgid "Quit" msgstr "Quitter" msgid "_File" msgstr "_Fichier" msgid "New Blank Image" msgstr "Nouvelle image vierge" msgid "New Image With Custom Size" msgstr "Nouvelle image avec taille personnalisée" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "À partir de la sélection" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "À partir du presse-papier" msgid "Open an image" msgstr "Ouvrir une image" msgid "Reload file" msgstr "Recharger un fichier" msgid "Image properties" msgstr "Propriétés de l'image" msgid "Save" msgstr "Enregistrer" msgid "Save as…" msgstr "Enregistrer sous…" msgid "Export as…" msgstr "Exporter sous…" msgid "Print" msgstr "Imprimer" msgid "Close" msgstr "Fermer" msgid "_Edit" msgstr "É_dition" msgid "Undo" msgstr "Annuler" msgid "Redo" msgstr "Rétablir" msgid "Select all" msgstr "Sélectionner tout" msgid "Cut" msgstr "Couper" msgid "Copy" msgstr "Copier" msgid "Delete" msgstr "Supprimer" msgid "Paste" msgstr "Coller" msgid "Import" msgstr "Importer" msgid "_View" msgstr "_Affichage" msgid "Optimal Zoom" msgstr "Zoom optimal" msgid "Zoom Out" msgstr "Diminuer le zoom" msgid "Original Zoom" msgstr "Zoom original" msgid "Zoom In" msgstr "Augmenter le zoom" msgid "Show the preview" msgstr "Montrer l'aperçu" msgid "Refresh" msgstr "Actualiser" msgid "Rebuild from history" msgstr "Reconstruire depuis l'historique" msgid "Position" msgstr "Position" msgid "Go Left" msgstr "Aller à gauche" msgid "Go Up" msgstr "Aller vers le haut" msgid "Go Down" msgstr "Aller vers le bas" msgid "Go Right" msgstr "Aller à droite" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Afficher le nom des outils" msgid "_Colors" msgstr "_Couleurs" msgid "Main color" msgstr "Couleur principale" msgid "Secondary color" msgstr "Couleur secondaire" msgid "Exchange colors" msgstr "Échanger les couleurs" msgid "Color editor by default" msgstr "Éditeur de couleurs par défaut" msgid "_Tools" msgstr "Ou_tils" msgid "_Canvas" msgstr "_Canevas" msgid "Previous tool" msgstr "Outil précédent" msgid "_Options" msgstr "_Options" msgid "_Windows" msgstr "_Fenêtres" msgid "Quit all windows" msgstr "Quitter toutes les fenêtres" msgid "_Help" msgstr "_Aide" msgid "Index" msgstr "Sommaire" msgid "Basic help" msgstr "Aide basique" msgid "Help about tools" msgstr "Aide sur les outils" msgid "Canvas and selection" msgstr "Canevas et sélection" msgid "Help about selection" msgstr "Aide sur la sélection" msgid "About Drawing" msgstr "À propos de Dessin" msgid "Back to the palette" msgstr "Retour à la palette" msgid "Use this editor by default" msgstr "Utiliser cet éditeur par défaut" msgid "Width" msgstr "Largeur" msgid "Height" msgstr "Hauteur" msgid "Background color" msgstr "Couleur d'arrière-plan" msgid "Use these settings by default" msgstr "Utiliser ces réglages par défaut" msgid "Open" msgstr "Ouvrir" msgid "Images" msgstr "Images" msgid "Tools" msgstr "Outils" msgid "Advanced options" msgstr "Options avancées" msgid "Path" msgstr "Chemin" msgid "Format" msgstr "Format" msgid "Colorspace" msgstr "Encodage des couleurs" msgid "Unsaved file" msgstr "Fichier non enregistré" msgid "Invalid format" msgstr "Format invalide" msgid "pixels" msgstr "pixels" msgid "centimeters" msgstr "centimètres" msgid "inches" msgstr "pouces" msgid "Unselect" msgstr "Déselectionner" msgid "Flip" msgstr "Retourner" msgid "Crop" msgstr "Recadrer" msgid "Scale" msgstr "Redimensionner" msgid "Rotate" msgstr "Pivoter" msgid "Saturate" msgstr "Saturer" msgid "Open As New Image" msgstr "Ouvrir comme nouvelle image" msgid "General" msgstr "Général" msgid "Main menu" msgstr "Menu principal" msgid "Image" msgstr "Image" msgid "Open a file" msgstr "Ouvrir un fichier" msgid "Close the active image" msgstr "Fermer l'image active" msgid "Save as" msgstr "Enregistrer sous" msgid "Edition" msgstr "Édition" msgid "Options menu" msgstr "Menu des options" msgid "Back to previous tool" msgstr "Revenir à l'outil précédent" msgid "Selection" msgstr "Sélection" msgid "Delete the selection" msgstr "Effacer la sélection" msgid "Colors" msgstr "Couleurs" msgid "Edit the main color (left click)" msgstr "Modifier la couleur principale (clic gauche)" msgid "Edit the secondary color (right click)" msgstr "Modifier la couleur secondaire (clic droit)" msgid "Navigation" msgstr "Navigation" msgid "Toggle the preview" msgstr "Afficher l'aperçu" msgid "Error starting the application, please report this bug." msgstr "Erreur au démarrage de l'application, veuillez reporter ce problème." msgid "Tool size" msgstr "Taille de l'outil" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Pas d'options" #. none msgid "Preview" msgstr "Aperçu" msgid "Troubleshoot selection" msgstr "Débuggage de la sélection" msgid "Cancel" msgstr "Annuler" msgid "Create" msgstr "Créer" msgid "Print the version and display the 'about' dialog" msgstr "Afficher la version et le dialogue 'à propos'" msgid "Open a new window" msgstr "Ouvrir une nouvelle fenêtre" msgid "Open a new tab" msgstr "Ouvrir un nouvel onglet" msgid "Edit the clipboard content" msgstr "Éditer le contenu du presse-papier" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Romain F. T." msgid "A drawing application for the GNOME desktop." msgstr "Une application de dessin pour le bureau GNOME." msgid "Official webpage" msgstr "Site officiel" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Erreur à l'ouverture de ce fichier. Vouliez-vous faire %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Erreur en chargeant l'outil : %s" #, python-format msgid "Loading %s" msgstr "Chargement de %s" msgid "New Tab" msgstr "Nouvel onglet" msgid "Discard changes" msgstr "Abandonner les modifications" #, python-format msgid "There are unsaved modifications to %s." msgstr "Il y a des modifications non-enregistrées à %s." #, python-format msgid "Where do you want to open %s?" msgstr "Où souhaitez-vous ouvrir %s ?" msgid "Open a picture" msgstr "Ouvrir une image" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "ces fichiers" #, python-format msgid "What do you want to do with %s?" msgstr "Que souhaitez-vous faire avec %s ?" msgid "Untitled" msgstr "Sans titre" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "cette image" msgid "Discard" msgstr "Abandonner" msgid "Save picture as…" msgstr "Enregistrer l'image sous…" msgid "Import a picture" msgstr "Importer une image" #, python-format msgid "Undo %s" msgstr "Annuler %s" #, python-format msgid "Redo %s" msgstr "Rétablir %s" msgid "New images" msgstr "Nouvelles images" msgid "Default width" msgstr "Largeur par défaut" msgid "Default height" msgstr "Hauteur par défaut" msgid "Default background" msgstr "Arrière-plan par défaut" msgid "Images saving" msgstr "Enregistrement des images" msgid "JPEG and BMP images can't handle transparency." msgstr "Les images JPEG ou BMP ne peuvent prendre en charge la transparence." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Si vous enregistrez vos images dans ces formats, que voulez-vous utiliser " "pour remplacer les pixels transparents ?" msgid "White" msgstr "Blanc" msgid "Black" msgstr "Noir" msgid "Checkboard" msgstr "Damier" msgid "Nothing" msgstr "Rien" msgid "Ask before saving" msgstr "Demander avant d'enregistrer" msgid "Use big icons" msgstr "Utiliser de grosses icônes" msgid "Preview size" msgstr "Taille de l'aperçu" msgid "Development features" msgstr "Fonctionnalités de test" msgid "Layout" msgstr "Organisation" msgid "The recommended value is \"Automatic\"." msgstr "La valeur recommandée est \"Automatique\"." msgid "Automatic" msgstr "Automatique" msgid "Compact" msgstr "Compacte" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Traditionnelle" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Traditionnelle (icônes symb.)" msgid "Menubar only" msgstr "Barre de menus" msgid "Toolbar only" msgstr "Barre de boutons" msgid "Toolbar only (symbolic icons)" msgstr "Boutons (icônes symb.)" msgid "This file format doesn't support transparent colors." msgstr "Ce format de fichiers ne supporte pas les couleurs transparentes." msgid "Replace transparency with:" msgstr "Remplacer la transparence par :" msgid "All pictures" msgstr "Toutes les images" msgid "PNG images" msgstr "Images PNG" msgid "JPEG images" msgstr "Images JPEG" msgid "BMP images" msgstr "Images BMP" msgid "Transparent" msgstr "Transparent" #, python-format msgid "%s%% transparent" msgstr "%s%% transparent" msgid "Grey" msgstr "Gris" msgid "Orange" msgstr "Orange" msgid "Brown" msgstr "Marron" msgid "Probably brown" msgstr "Peut-être marron" msgid "Red" msgstr "Rouge" msgid "Green" msgstr "Vert" msgid "Blue" msgstr "Bleu" msgid "Yellow" msgstr "Jaune" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Violet" msgid "Cyan" msgstr "Cyan" msgid "Probably turquoise" msgstr "Peut-être turquoise" msgid "Unknown color name" msgstr "Nom de couleur inconnu" msgid "Continue" msgstr "Continuer" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "Cette zone semble mal délimitée, ou est très complexe.\n" "Cet algorithme peut ne pas être capable de gérer la zone voulue.\n" "\n" "Souhaitez-vous abandonner cette opération, ou laisser l'outil galérer ?" msgid "percents" msgstr "pourcents" msgid "Lead shape" msgstr "Forme de mine" #. Default values msgid "Round" msgstr "Ronde" msgid "Square" msgstr "Carrée" msgid "Use dashes" msgstr "Utiliser des pointillés" msgid "Arrow" msgstr "Flèche" msgid "Mode" msgstr "Mode" msgid "Classic" msgstr "Classique" msgid "Source color" msgstr "Couleur source" msgid "Eraser" msgstr "Effaceur" msgid "Difference" msgstr "Différence" msgid "Shape" msgstr "Forme" msgid "Oval" msgstr "Ovale" msgid "Circle" msgstr "Cercle" msgid "Filling" msgstr "Remplissage" msgid "Empty" msgstr "Vide" msgid "Filled (main color)" msgstr "Plein (couleur principale)" msgid "Filled (secondary color)" msgstr "Plein (couleur secondaire)" msgid "Apply" msgstr "Appliquer" msgid "Flip horizontally" msgstr "Retourner horizontalement" msgid "Flip vertically" msgstr "Retourner verticalement" msgid "Color gradient" msgstr "Dégradé" msgid "Behavior" msgstr "Comportement" msgid "Encircle and fill" msgstr "Entourer et remplir" msgid "Erase and replace" msgstr "Effacer et remplacer" msgid "Clipping" msgstr "Détourage" msgid "Thin" msgstr "Fine" msgid "Artificial smoothness" msgstr "Lissage artificiel" msgid "Rectangle" msgstr "Rectangle" msgid "Rounded rectangle" msgstr "Rectangle arrondi" msgid "Rotate left" msgstr "Pivoter à gauche" msgid "Angle (degrees)" msgstr "Angle (degrés)" msgid "Rotate right" msgstr "Pivoter à droite" msgid "Saturation" msgstr "Saturation" msgid "Keep proportions" msgstr "Conserver les proportions" msgid "Edit" msgstr "Éditer" msgid "Selection type" msgstr "Type de sélection" msgid "Freehand" msgstr "À main levée" msgid "Similar color" msgstr "Couleur similaire" msgid "Selection options" msgstr "Options de la sélection" msgid "Insert here" msgstr "Insérer ici" msgid "Font" msgstr "Police" msgid "Italic" msgstr "Italique" msgid "Bold" msgstr "Gras" msgid "Background" msgstr "Arrière-plan" msgid "No background" msgstr "Aucun arrière-plan" msgid "Shadow" msgstr "Ombre" msgid "Outline" msgstr "Contour" msgid "Rectangle background" msgstr "Arrière-plan rectangulaire" msgid "Arc" msgstr "Arc" msgid "Arc options" msgstr "Options de l'arc" msgid "With dashes" msgstr "En pointillés" msgid "Circle options" msgstr "Options du cercle" msgid "Free shape" msgstr "Forme libre" msgid "Shape options" msgstr "Options de la forme" msgid "Click on the shape's first point to close it." msgstr "Cliquez sur le 1er point de la forme pour la refermer." msgid "Line" msgstr "Trait" msgid "Line options" msgstr "Options de la ligne" msgid "Paint" msgstr "Peinture" msgid "Painting options" msgstr "Options de peinture" msgid "Click on an area to replace its color by transparency" msgstr "Cliquez sur une zone pour remplacer sa couleur par de la transparence" msgid "Polygon" msgstr "Polygone" msgid "Polygon options" msgstr "Options du polygone" msgid "Pencil" msgstr "Crayon" msgid "Pencil options" msgstr "Options du crayon" msgid "Color Picker" msgstr "Couleur" msgid "Rectangle options" msgstr "Options du rectangle" msgid "Text" msgstr "Texte" msgid "Font options" msgstr "Options du texte" msgid "Rectangle selection" msgstr "Selection rectangulaire" msgid "Free selection" msgstr "Sélection libre" msgid "Color selection" msgstr "Sélection par couleur" msgid "Drag the selection or right-click on the canvas" msgstr "Faites glisser la sélection ou faites un clic-droit sur le canevas" msgid "Select an area or right-click on the canvas" msgstr "Sélectionner une zone ou faites un clic-droit sur le canevas" msgid "Cropping the selection" msgstr "Recadrer la sélection" msgid "Cropping the canvas" msgstr "Recadrer le canevas" msgid "Rotating the selection" msgstr "Pivoter la sélection" msgid "Rotating the canvas" msgstr "Pivoter le canevas" msgid "Scaling the selection" msgstr "Redimensionner la sélection" msgid "Scaling the canvas" msgstr "Redimensionner le canevas" #~ msgid "Secondary color rectangle" #~ msgstr "Rectangle de couleur secondaire" #~ msgid "Secondary color shadow" #~ msgstr "Ombre de couleur secondaire" drawing-0.4.11/po/he.po000066400000000000000000000466061362211111700146110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # FIRST AUTHOR , YEAR. # Shaked Ashkenazi , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-06-03 23:22+0300\n" "Last-Translator: Shaked Ashkenazi \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 3.32.1\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" msgid "Drawing" msgstr "ציור" msgid "Simple drawing utility" msgstr "כלי ציור פשוט" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;שרטט;עיפרון;" msgid "New Window" msgstr "חלון חדש" msgid "New Image" msgstr "תמונה חדשה" #, fuzzy msgid "Edit Image in Clipboard" msgstr "תמונה חדשה מהלוח" msgid "A drawing application for the GNOME desktop" msgstr "יישום ציור לשולחן עבודה GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "" msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "מאפיינים" msgid "Report a bug" msgstr "דווח על באג" msgid "Shortcuts" msgstr "קיצורי דרך" msgid "Help" msgstr "עזרה" msgid "About" msgstr "אודות" msgid "Quit" msgstr "יציאה" msgid "_File" msgstr "_קובץ" #, fuzzy msgid "New Blank Image" msgstr "תמונה חדשה" msgid "New Image With Custom Size" msgstr "" #. you can omit the "New image" in the translation #, fuzzy msgid "New Image From Selection" msgstr "תמונה חדשה מהלוח" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "תמונה חדשה מהלוח" msgid "Open an image" msgstr "פתיחת תמונה" #, fuzzy msgid "Reload file" msgstr "פתיחת קובץ" msgid "Image properties" msgstr "מאפייני תמונה" msgid "Save" msgstr "שמירהייצוא כ..." msgid "Save as…" msgstr "" msgid "Export as…" msgstr "" msgid "Print" msgstr "הדפסה" msgid "Close" msgstr "סגירה" msgid "_Edit" msgstr "_עריכה" msgid "Undo" msgstr "ביטול פעולה" msgid "Redo" msgstr "חידוש פעולה" msgid "Select all" msgstr "בחירה בהכל" msgid "Cut" msgstr "גזירה" msgid "Copy" msgstr "העתקה" msgid "Delete" msgstr "מחיקה" msgid "Paste" msgstr "הדבקה" msgid "Import" msgstr "ייבוא" msgid "_View" msgstr "_הצגה" msgid "Optimal Zoom" msgstr "" msgid "Zoom Out" msgstr "" msgid "Original Zoom" msgstr "" msgid "Zoom In" msgstr "" msgid "Show the preview" msgstr "הצג תצוגה מקדימה" msgid "Refresh" msgstr "רענון" msgid "Rebuild from history" msgstr "בנה מחדש מההסטוריה" # Perhaps this should be renamed to "Editing"? # I had a hard time understanding what this term was supposed to mean. #, fuzzy msgid "Position" msgstr "עריכה" msgid "Go Left" msgstr "לך שמאלה" msgid "Go Up" msgstr "לך למעלה" msgid "Go Down" msgstr "לך למטה" msgid "Go Right" msgstr "לך ימינה" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "הצג שמות כלים" msgid "_Colors" msgstr "_צבעים" msgid "Main color" msgstr "צבע ראשי" msgid "Secondary color" msgstr "צבע משנה" msgid "Exchange colors" msgstr "החלף צבעים" msgid "Color editor by default" msgstr "עורך צבעים בברירת המחדל" msgid "_Tools" msgstr "_כלים" msgid "_Canvas" msgstr "_לוח ציור" msgid "Previous tool" msgstr "כלי קודם" msgid "_Options" msgstr "_אפשרויות" msgid "_Windows" msgstr "_חלונות" msgid "Quit all windows" msgstr "יציאה מכל החלונות" msgid "_Help" msgstr "_עזרה" msgid "Index" msgstr "" msgid "Basic help" msgstr "" msgid "Help about tools" msgstr "" #, fuzzy msgid "Canvas and selection" msgstr "שינוי קנה מידה של הבחירה" #, fuzzy msgid "Help about selection" msgstr "אפשרויות צבע" msgid "About Drawing" msgstr "אודות ציור" msgid "Back to the palette" msgstr "חזרה ללוח הצבעים" msgid "Use this editor by default" msgstr "עשה שימוש בעורך זה בברירת המחדל" msgid "Width" msgstr "רוחב" msgid "Height" msgstr "גובה" #, fuzzy msgid "Background color" msgstr "צבע משנה" #, fuzzy msgid "Use these settings by default" msgstr "עשה שימוש בעורך זה בברירת המחדל" msgid "Open" msgstr "פתיחה" #, fuzzy msgid "Images" msgstr "תמונה" #, fuzzy msgid "Tools" msgstr "_כלים" #, fuzzy msgid "Advanced options" msgstr "אפשרויות קשת" msgid "Path" msgstr "נתיב" msgid "Format" msgstr "תבנית" #, fuzzy msgid "Colorspace" msgstr "צבעים" msgid "Unsaved file" msgstr "קובץ לא שמור" msgid "Invalid format" msgstr "תבנית לא תקפה" msgid "pixels" msgstr "פיקסלים" msgid "centimeters" msgstr "סנטימטרים" msgid "inches" msgstr "אינצ'ים" msgid "Unselect" msgstr "בטל בחירה" msgid "Flip" msgstr "הפיכה" msgid "Crop" msgstr "חיתוך" msgid "Scale" msgstr "שינוי קנה מידה" msgid "Rotate" msgstr "סיבוב" msgid "Saturate" msgstr "רוויה" msgid "Open As New Image" msgstr "פתח כתמונה חדשה" msgid "General" msgstr "כללי" msgid "Main menu" msgstr "תפריט ראשי" msgid "Image" msgstr "תמונה" msgid "Open a file" msgstr "פתיחת קובץ" msgid "Close the active image" msgstr "סגור תמונה נוכחיתשמירה כ..." #, fuzzy msgid "Save as" msgstr "שמירהייצוא כ..." # Perhaps this should be renamed to "Editing"? # I had a hard time understanding what this term was supposed to mean. msgid "Edition" msgstr "עריכה" msgid "Options menu" msgstr "תפריט אפשרויות" msgid "Back to previous tool" msgstr "חזרה לכלי הקודם" msgid "Selection" msgstr "בחירה" #, fuzzy msgid "Delete the selection" msgstr "שינוי קנה מידה של הבחירה" msgid "Colors" msgstr "צבעים" msgid "Edit the main color (left click)" msgstr "ערוך את הצבע הראשי (לחיצה שמאלית)" msgid "Edit the secondary color (right click)" msgstr "ערוך את צבע המשנה (לחיצה שמאלית)" msgid "Navigation" msgstr "ניווט" # There is no word for "toggle" in hebrew, so I opted to use the translation for "show/hide". msgid "Toggle the preview" msgstr "הצג/הסתר תצוגה מקדימה" msgid "Error starting the application, please report this bug." msgstr "שגיאה בפתיחת היישום, נא לדווח באג זה." msgid "Tool size" msgstr "גודל כלי" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "אין אפשרויות" #. none msgid "Preview" msgstr "תצוגה מקדימה" #, fuzzy msgid "Troubleshoot selection" msgstr "אפשרויות צבע" msgid "Cancel" msgstr "ביטול" msgid "Create" msgstr "" # I had to translate this to "Display the version and "about" dialog". # I hope this is in line with the original intent? msgid "Print the version and display the 'about' dialog" msgstr "הצג את הגרסה ואת מסך \"אודות\"" msgid "Open a new window" msgstr "פתח חלון חדשה" msgid "Open a new tab" msgstr "פתח לשונית חדשה" msgid "Edit the clipboard content" msgstr "" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "moriel5" msgid "A drawing application for the GNOME desktop." msgstr "יישום ציור לשולחן עבודה GNOME." msgid "Official webpage" msgstr "" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "" #, python-format msgid "Failed to load tool: %s" msgstr "" #, python-format msgid "Loading %s" msgstr "טוען %s" msgid "New Tab" msgstr "לשונית חדשה" msgid "Discard changes" msgstr "בטל שינויים" #, python-format msgid "There are unsaved modifications to %s." msgstr "ישנם שינויים אשר לא שמורים ל%s." #, python-format msgid "Where do you want to open %s?" msgstr "היכן ברצונך לפתוח את %s?" msgid "Open a picture" msgstr "פתיחת תמונה" #. Context for translation: #. "What do you want to do with *these files*?" #, fuzzy msgid "these files" msgstr "קובץ לא שמור" #, fuzzy, python-format msgid "What do you want to do with %s?" msgstr "היכן ברצונך לפתוח את %s?" msgid "Untitled" msgstr "חסר שם" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "תמונה זו" msgid "Discard" msgstr "מחיקת שינויים" #, fuzzy msgid "Save picture as…" msgstr "כל התמונות" msgid "Import a picture" msgstr "יבא תמונה" #, python-format msgid "Undo %s" msgstr "ביטול פעולה %s" #, python-format msgid "Redo %s" msgstr "חידוש פעולה %s" msgid "New images" msgstr "תמונות חדשות" msgid "Default width" msgstr "רוחב ברירת מחדל" msgid "Default height" msgstr "גובה ברירת מחדל" msgid "Default background" msgstr "רקע ברירת מחדל" #, fuzzy msgid "Images saving" msgstr "תמונה" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" msgid "White" msgstr "" msgid "Black" msgstr "" msgid "Checkboard" msgstr "" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "" msgid "Use big icons" msgstr "" msgid "Preview size" msgstr "גודל תצוגה מקדימה" msgid "Development features" msgstr "תכונות פיתוח" msgid "Layout" msgstr "פריסה" msgid "The recommended value is \"Automatic\"." msgstr "" msgid "Automatic" msgstr "אוטומטי" msgid "Compact" msgstr "דחוס" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "מסורתיבש" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "" msgid "Menubar only" msgstr "סרגל תפריט בלבד" msgid "Toolbar only" msgstr "סרגל כלים בלבד" msgid "Toolbar only (symbolic icons)" msgstr "" msgid "This file format doesn't support transparent colors." msgstr "" msgid "Replace transparency with:" msgstr "" msgid "All pictures" msgstr "כל התמונות" msgid "PNG images" msgstr "תמונות PNG" msgid "JPEG images" msgstr "תמונות JPEG" msgid "BMP images" msgstr "תמונות BMPהוסף שקיפות" msgid "Transparent" msgstr "" #, python-format msgid "%s%% transparent" msgstr "" msgid "Grey" msgstr "" msgid "Orange" msgstr "" msgid "Brown" msgstr "" msgid "Probably brown" msgstr "" #, fuzzy msgid "Red" msgstr "חידוש פעולה" msgid "Green" msgstr "" msgid "Blue" msgstr "" msgid "Yellow" msgstr "" msgid "Magenta" msgstr "" msgid "Purple" msgstr "" msgid "Cyan" msgstr "" msgid "Probably turquoise" msgstr "" msgid "Unknown color name" msgstr "" msgid "Continue" msgstr "המשך" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "האזור לא נראה תחום בראוי, או שמאוד מסובך.\n" "לא בטוח שסדרה זו תוכל לנהל את האזור הרצוי.\n" "האם ברצונך לבטל את הפעולה, או לתת לכלי להיאבק?" msgid "percents" msgstr "" msgid "Lead shape" msgstr "צורת פס" #. Default values msgid "Round" msgstr "עגול" msgid "Square" msgstr "מרובע" msgid "Use dashes" msgstr "השתמש בקווים מפרידים" msgid "Arrow" msgstr "חץ" msgid "Mode" msgstr "סגנון" msgid "Classic" msgstr "רגיל" msgid "Source color" msgstr "צבע מקור" msgid "Eraser" msgstr "מחק" msgid "Difference" msgstr "שוני" msgid "Shape" msgstr "צורה" msgid "Oval" msgstr "סגלגל" msgid "Circle" msgstr "עיגול" msgid "Filling" msgstr "מילוי" msgid "Empty" msgstr "ריק" msgid "Filled (main color)" msgstr "ממולא (צבע ראשי)" msgid "Filled (secondary color)" msgstr "ממולא (צבע משנה)" msgid "Apply" msgstr "יישום" msgid "Flip horizontally" msgstr "הפוך אופקית" msgid "Flip vertically" msgstr "הפוך אנכית" #, fuzzy msgid "Color gradient" msgstr "בוחר צבעים" msgid "Behavior" msgstr "" msgid "Encircle and fill" msgstr "הקף ומלא" msgid "Erase and replace" msgstr "מחק והחלף" msgid "Clipping" msgstr "" msgid "Thin" msgstr "דק" msgid "Artificial smoothness" msgstr "" msgid "Rectangle" msgstr "מלבן" #, fuzzy msgid "Rounded rectangle" msgstr "מלבן" msgid "Rotate left" msgstr "סובב שמאלה" msgid "Angle (degrees)" msgstr "זווית (מעלות)" msgid "Rotate right" msgstr "סובב ימינה" msgid "Saturation" msgstr "רוויה" msgid "Keep proportions" msgstr "שמור יחסי קנה מידה" msgid "Edit" msgstr "עריכה" msgid "Selection type" msgstr "סוג בחירה" msgid "Freehand" msgstr "חופשי" msgid "Similar color" msgstr "צבע דומה" msgid "Selection options" msgstr "אפשרויות בחירה" msgid "Insert here" msgstr "הכנס כאן" msgid "Font" msgstr "גופן" msgid "Italic" msgstr "" msgid "Bold" msgstr "" #, fuzzy msgid "Background" msgstr "רקע ברירת מחדל" #, fuzzy msgid "No background" msgstr "רקע ברירת מחדל" msgid "Shadow" msgstr "" msgid "Outline" msgstr "" #, fuzzy msgid "Rectangle background" msgstr "רקע ברירת מחדל" msgid "Arc" msgstr "קשת" msgid "Arc options" msgstr "אפשרויות קשת" msgid "With dashes" msgstr "עם קווים מפרידים" msgid "Circle options" msgstr "אפשרויות עיגול" msgid "Free shape" msgstr "צורה חופשית" msgid "Shape options" msgstr "אפשרויות" msgid "Click on the shape's first point to close it." msgstr "" msgid "Line" msgstr "קו" msgid "Line options" msgstr "אפשרויות קו" msgid "Paint" msgstr "צבע" msgid "Painting options" msgstr "אפשרויות צביעה" msgid "Click on an area to replace its color by transparency" msgstr "לחץ על אזור כדי להחליף את צבעו לפי שקיפות" msgid "Polygon" msgstr "מצולע" msgid "Polygon options" msgstr "אפשרויות מצולע" msgid "Pencil" msgstr "עיפרון" msgid "Pencil options" msgstr "אפשרויות עיפרון" msgid "Color Picker" msgstr "בוחר צבעים" msgid "Rectangle options" msgstr "אפשרויות מלבן" msgid "Text" msgstr "טקסט" #, fuzzy msgid "Font options" msgstr "אין אפשרויות" msgid "Rectangle selection" msgstr "בחירה מלבנית" msgid "Free selection" msgstr "בחירה חופשית" msgid "Color selection" msgstr "אפשרויות צבע" # I had to translate "right-click" to "click a right-click", since it would not make any sense otherwise. msgid "Drag the selection or right-click on the canvas" msgstr "גרור את הבחירה או לחץ לחיצה ימנית על לוח הציור" # I had to translate "left-click" to "click a left-click", because otherwise it would not make any sense. msgid "Select an area or right-click on the canvas" msgstr "גרור את הבחירה או לחץ לחיצה שמאלית על לוח הציור" msgid "Cropping the selection" msgstr "חיתוך הבחירה" msgid "Cropping the canvas" msgstr "חיתוך לוח הציור" msgid "Rotating the selection" msgstr "סיבוב הבחירה" msgid "Rotating the canvas" msgstr "סיבוב לוח הציור" msgid "Scaling the selection" msgstr "שינוי קנה מידה של הבחירה" msgid "Scaling the canvas" msgstr "שינוי קנה מידה של לוח הציור" #, fuzzy #~ msgid "Secondary color rectangle" #~ msgstr "צבע משנה" #, fuzzy #~ msgid "Secondary color shadow" #~ msgstr "צבע משנה" drawing-0.4.11/po/hr.po000066400000000000000000000606541362211111700146250ustar00rootroot00000000000000# Croatian translation of Drawing. # Copyright (C) 2018-2020 Romain F. T. # This file is distributed under the same license as the drawing package. # Milo Ivir , 2020. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2020-01-24 21:28+0100\n" "Last-Translator: Milo Ivir \n" "Language-Team: \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.8.12\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" msgid "Drawing" msgstr "Crtanje" msgid "Simple drawing utility" msgstr "Jednostavan program za crtanje" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Skiciranje;Olovka;" msgid "New Window" msgstr "Novi prozor" msgid "New Image" msgstr "Nova slika" msgid "Edit Image in Clipboard" msgstr "Uredi sliku u međuspremniku" msgid "A drawing application for the GNOME desktop" msgstr "Program za crtanje za GNOME desktop" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "„Crtanje” je osnovni uređivač slika, podržava PNG, JPEG i BMP datoteke." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Omogućuje crtanje ili uređivanje slika pomoću alata kao što su olovka, " "linija ili luk (s različitim opcijama), odabir (izrezivanje/kopiranje/" "umetanje/povlačenje/…), oblici (pravokutnik, krug, poligon, …), umetanje " "teksta, mijenjanje veličine, rezanje, rotiranje, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Verzija 0.4.11 sadrži nekoliko ispravki manjih programskih grešaka i razne " "nove prijevode." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Verzija 0.4.10 sadrži nekoliko ispravki manjih programskih grešaka i razne " "nove prijevode." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Verzija 0.4.5 sadrži nekoliko ispravki manjih programskih grešaka i razne " "nove prijevode." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Verzija 0.4.4 sadrži nekoliko ispravki manjih programskih grešaka i razne " "nove prijevode." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" #, fuzzy msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Verzija 0.4.8 sadrži nekoliko ispravki manjih programskih grešaka i razne " "nove prijevode." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Postavke" msgid "Report a bug" msgstr "Prijavi grešku" msgid "Shortcuts" msgstr "Prečaci" msgid "Help" msgstr "Pomoć" msgid "About" msgstr "Informacije" msgid "Quit" msgstr "Izlaz" msgid "_File" msgstr "_Datoteka" msgid "New Blank Image" msgstr "Nova prazna slika" msgid "New Image With Custom Size" msgstr "Nova slika prilagođene veličine" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "iz odabira" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "iz međuspremnika" msgid "Open an image" msgstr "Otvori sliku" msgid "Reload file" msgstr "Ponovo učitaj datoteku" msgid "Image properties" msgstr "Svojstva slike" msgid "Save" msgstr "Spremi" msgid "Save as…" msgstr "Spremi kao …" msgid "Export as…" msgstr "Izvezi kao …" msgid "Print" msgstr "Ispis" #, fuzzy msgid "Close" msgstr "Zatvori sliku" msgid "_Edit" msgstr "_Uredi" msgid "Undo" msgstr "Poništi" msgid "Redo" msgstr "Ponovi" msgid "Select all" msgstr "Otvori sve" msgid "Cut" msgstr "Izreži" msgid "Copy" msgstr "Kopiraj" msgid "Delete" msgstr "Izbriši" msgid "Paste" msgstr "Umetni" msgid "Import" msgstr "Uvoz" msgid "_View" msgstr "_Prikaz" msgid "Optimal Zoom" msgstr "Optimalno zumiranje" msgid "Zoom Out" msgstr "Smanji prikaz" msgid "Original Zoom" msgstr "Izvorno zumiranje" msgid "Zoom In" msgstr "Povećaj prikaz" msgid "Show the preview" msgstr "Prikaži pretpregled" msgid "Refresh" msgstr "Aktualiziraj" msgid "Rebuild from history" msgstr "Izgradi ponovo iz kronologije" msgid "Position" msgstr "Pozicija" msgid "Go Left" msgstr "Idi lijevo" msgid "Go Up" msgstr "Idi gore" msgid "Go Down" msgstr "Idi dolje" msgid "Go Right" msgstr "Idi desno" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Prikaži imena alata" msgid "_Colors" msgstr "_Boje" msgid "Main color" msgstr "Glavna boja" msgid "Secondary color" msgstr "Sporedna boja" msgid "Exchange colors" msgstr "Zamijeni boje" #, fuzzy msgid "Color editor by default" msgstr "Uređivač boja standardno" msgid "_Tools" msgstr "_Alati" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "Prethodni alat" msgid "_Options" msgstr "_Opcije" #, fuzzy msgid "_Windows" msgstr "Novi prozor" msgid "Quit all windows" msgstr "Zatvori sve prozore" msgid "_Help" msgstr "_Pomoć" msgid "Index" msgstr "Indeks" msgid "Basic help" msgstr "Osnovna pomoć" msgid "Help about tools" msgstr "Pomoć za alate" msgid "Canvas and selection" msgstr "Platno i odabir" msgid "Help about selection" msgstr "Pomoć za odabir" msgid "About Drawing" msgstr "O programu Crtanje" msgid "Back to the palette" msgstr "Natrag na paletu" msgid "Use this editor by default" msgstr "Standardno koristi ovaj uređivač" msgid "Width" msgstr "Širina" msgid "Height" msgstr "Visina" msgid "Background color" msgstr "Boja pozadine" msgid "Use these settings by default" msgstr "Standardno koristi ove postavke" msgid "Open" msgstr "Otvori" msgid "Images" msgstr "Slike" msgid "Tools" msgstr "Alati" msgid "Advanced options" msgstr "Napredne opcije" msgid "Path" msgstr "Staza" msgid "Format" msgstr "Format" msgid "Colorspace" msgstr "Prostor boje" msgid "Unsaved file" msgstr "Nespremljena datoteka" msgid "Invalid format" msgstr "Neispravan format" msgid "pixels" msgstr "pikslova" msgid "centimeters" msgstr "centimetara" msgid "inches" msgstr "inča" msgid "Unselect" msgstr "Odznači odabir" msgid "Flip" msgstr "Preokreni" msgid "Crop" msgstr "Odreži" msgid "Scale" msgstr "Skaliraj" msgid "Rotate" msgstr "Okreni" #, fuzzy msgid "Saturate" msgstr "Zasićenost" msgid "Open As New Image" msgstr "Otvori kao novu sliku" msgid "General" msgstr "Opće" msgid "Main menu" msgstr "Glavni izbornik" msgid "Image" msgstr "Slika" msgid "Open a file" msgstr "Otvori datoteku" msgid "Close the active image" msgstr "Zatvori aktivnu sliku" msgid "Save as" msgstr "Spremi kao" #, fuzzy msgid "Edition" msgstr "Uređivanje" msgid "Options menu" msgstr "Izbornik opcija" msgid "Back to previous tool" msgstr "Natrag na prethodni alat" msgid "Selection" msgstr "Odabir" msgid "Delete the selection" msgstr "Izbriši odabir" msgid "Colors" msgstr "Boje" msgid "Edit the main color (left click)" msgstr "Uredi glavnu boju (lijevi klik)" msgid "Edit the secondary color (right click)" msgstr "Uredi sporednu boju (desni klik)" msgid "Navigation" msgstr "Navigacija" msgid "Toggle the preview" msgstr "Uključi/isključi pretpregled" msgid "Error starting the application, please report this bug." msgstr "Greška pri pokretanju programa. Prijavi grešku." msgid "Tool size" msgstr "Veličina alata" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Bez opcija" #. none msgid "Preview" msgstr "Pretpregled" msgid "Troubleshoot selection" msgstr "Ispravi problem s odabirom" msgid "Cancel" msgstr "Odustani" msgid "Create" msgstr "Stvori" msgid "Print the version and display the 'about' dialog" msgstr "" msgid "Open a new window" msgstr "Otvori novi prozor" msgid "Open a new tab" msgstr "Otvori novu karticu" msgid "Edit the clipboard content" msgstr "Uredi sadržaj međuspremnika" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Milo Ivir , 2020." msgid "A drawing application for the GNOME desktop." msgstr "Program za crtanje za GNOME desktop." msgid "Official webpage" msgstr "Službena web-stranica" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Greška pri otvaranju datoteke. Jesi li mislio/la na %s?" #, python-format msgid "Failed to load tool: %s" msgstr "Neuspjelo učitavanje alata: %s" #, python-format msgid "Loading %s" msgstr "Učitava se %s" msgid "New Tab" msgstr "Nova kartica" msgid "Discard changes" msgstr "Odbaci promjene" #, python-format msgid "There are unsaved modifications to %s." msgstr "%s sadrži nespremljene promjene." #, python-format msgid "Where do you want to open %s?" msgstr "Gdje želiš otvoriti %s?" msgid "Open a picture" msgstr "Otvori jednu sliku" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "ovim datotekama" #, python-format msgid "What do you want to do with %s?" msgstr "Što želiš uraditi s %s?" msgid "Untitled" msgstr "Bezimeno" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "Ova slika" msgid "Discard" msgstr "Odbaci" msgid "Save picture as…" msgstr "Spremi sliku kao …" msgid "Import a picture" msgstr "Uvezi jednu sliku" #, python-format msgid "Undo %s" msgstr "Poništi %s" #, python-format msgid "Redo %s" msgstr "Ponovi %s" msgid "New images" msgstr "Nove slike" msgid "Default width" msgstr "Standardna širina" msgid "Default height" msgstr "Standardna visina" msgid "Default background" msgstr "Standardna pozadina" msgid "Images saving" msgstr "Spremanje slika" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG i BMP slike ne podržavaju prozirnost." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Ako spremiš slike u ovim formatima, što želiš koristiti kao zamjenu za " "prozirne pikslove?" msgid "White" msgstr "Bijelu boju" msgid "Black" msgstr "Crnu boju" msgid "Checkboard" msgstr "Šahovnicu" msgid "Nothing" msgstr "Ništa" msgid "Ask before saving" msgstr "Pitaj prije spremanja" msgid "Use big icons" msgstr "Koristi velike ikone" msgid "Preview size" msgstr "Veličina pretpregleda" msgid "Development features" msgstr "Funkcije u razvoju" msgid "Layout" msgstr "Raspored" msgid "The recommended value is \"Automatic\"." msgstr "Preporučena vrijednost je „Automatski”." msgid "Automatic" msgstr "Automatski" msgid "Compact" msgstr "Kompaktni" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Stari" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Stari (ikone sa simbolima)" msgid "Menubar only" msgstr "Samo traka izbornika" msgid "Toolbar only" msgstr "Samo traka alata" msgid "Toolbar only (symbolic icons)" msgstr "Samo traka alata (ikone sa simbolima)" msgid "This file format doesn't support transparent colors." msgstr "Ovaj datotečni format ne podržava prozirne boje." msgid "Replace transparency with:" msgstr "Zamijeni prozirnost s:" msgid "All pictures" msgstr "Sve slike" msgid "PNG images" msgstr "PNG slike" msgid "JPEG images" msgstr "JPEG slike" msgid "BMP images" msgstr "BMP slike" msgid "Transparent" msgstr "Prozirno" #, python-format msgid "%s%% transparent" msgstr "%s %% prozirno" msgid "Grey" msgstr "Siva" msgid "Orange" msgstr "Narančasta" msgid "Brown" msgstr "Smeđa" msgid "Probably brown" msgstr "Vjerojatno smeđa" msgid "Red" msgstr "Crvena" msgid "Green" msgstr "Zelena" msgid "Blue" msgstr "Plava" msgid "Yellow" msgstr "Žuta" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Ljubičasta" msgid "Cyan" msgstr "Cijan" msgid "Probably turquoise" msgstr "Vjerojatno tirkizna" msgid "Unknown color name" msgstr "Nepoznato ime boje" msgid "Continue" msgstr "Nastavi" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "postoci" #, fuzzy msgid "Lead shape" msgstr "Oblik crte" #. Default values msgid "Round" msgstr "Oblo" msgid "Square" msgstr "Kvardatično" msgid "Use dashes" msgstr "Koristi crtice" msgid "Arrow" msgstr "Strelica" msgid "Mode" msgstr "" msgid "Classic" msgstr "Klasično" msgid "Source color" msgstr "Boja izvora" msgid "Eraser" msgstr "Gumica" msgid "Difference" msgstr "Razlika" msgid "Shape" msgstr "Oblik" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Krug" msgid "Filling" msgstr "" msgid "Empty" msgstr "Prazno" #, fuzzy msgid "Filled (main color)" msgstr "Glavna boja" #, fuzzy msgid "Filled (secondary color)" msgstr "Sporedna boja" msgid "Apply" msgstr "Primijeni" msgid "Flip horizontally" msgstr "Preokreni vodoravno" msgid "Flip vertically" msgstr "Preokreni okomito" msgid "Color gradient" msgstr "Prijelaz boje" msgid "Behavior" msgstr "Način" msgid "Encircle and fill" msgstr "Okruži i ispuni" msgid "Erase and replace" msgstr "Izbriši i zamijeni" msgid "Clipping" msgstr "Rezanje" msgid "Thin" msgstr "Tanko" msgid "Artificial smoothness" msgstr "" msgid "Rectangle" msgstr "Pravokutnik" msgid "Rounded rectangle" msgstr "Obli pravokutnik" msgid "Rotate left" msgstr "Okreni lijevo" msgid "Angle (degrees)" msgstr "Kut (u stupnjevima)" msgid "Rotate right" msgstr "Okreni desno" msgid "Saturation" msgstr "Zasićenost" msgid "Keep proportions" msgstr "Zadrži omjere" msgid "Edit" msgstr "Uredi" #, fuzzy msgid "Selection type" msgstr "Odabir" #, fuzzy msgid "Freehand" msgstr "Prostoručni oblik" #, fuzzy msgid "Similar color" msgstr "Sporedna boja" #, fuzzy msgid "Selection options" msgstr "Opcije za olovku" msgid "Insert here" msgstr "Umetni ovdje" msgid "Font" msgstr "Font" msgid "Italic" msgstr "Kurziv" msgid "Bold" msgstr "Podebljano" msgid "Background" msgstr "Pozadina" msgid "No background" msgstr "Bez pozadine" msgid "Shadow" msgstr "Sjena" msgid "Outline" msgstr "Kontura" msgid "Rectangle background" msgstr "Pravokutna pozadina" msgid "Arc" msgstr "" #, fuzzy msgid "Arc options" msgstr "Daljnje opcije" #, fuzzy msgid "With dashes" msgstr "Koristi crtice" #, fuzzy msgid "Circle options" msgstr "Opcije za krivulje" msgid "Free shape" msgstr "Prostoručni oblik" msgid "Shape options" msgstr "Opcije za oblik" msgid "Click on the shape's first point to close it." msgstr "Za zatvaranje oblika, klikni na njegovu prvu točku." msgid "Line" msgstr "Crta" msgid "Line options" msgstr "Opcije za crtu" msgid "Paint" msgstr "Boja" msgid "Painting options" msgstr "Opcije za crtanje" msgid "Click on an area to replace its color by transparency" msgstr "Klikni na područje, čiju boju želiš zamijeniti s prozirnošću" msgid "Polygon" msgstr "Mnogokut" #, fuzzy msgid "Polygon options" msgstr "Opcije za fontove" msgid "Pencil" msgstr "Olovka" msgid "Pencil options" msgstr "Opcije za olovku" msgid "Color Picker" msgstr "Biranje boje" #, fuzzy msgid "Rectangle options" msgstr "Pravokutan odabir" msgid "Text" msgstr "Tekst" msgid "Font options" msgstr "Opcije za fontove" msgid "Rectangle selection" msgstr "Pravokutan odabir" msgid "Free selection" msgstr "Prostoručni odabir" msgid "Color selection" msgstr "Odabir bojom" msgid "Drag the selection or right-click on the canvas" msgstr "Povuci odabir ili klikni desnom tipkom na platno" msgid "Select an area or right-click on the canvas" msgstr "Odaberi područje ili klikni desnom tipkom na platno" msgid "Cropping the selection" msgstr "Rezanje odabira" msgid "Cropping the canvas" msgstr "Rezanje platna" msgid "Rotating the selection" msgstr "Okretanje odabira" msgid "Rotating the canvas" msgstr "Okretanje platna" msgid "Scaling the selection" msgstr "Skaliranje odabira" msgid "Scaling the canvas" msgstr "Skaliranje platna" #~ msgid "" #~ "The 'saturate' tool has been replaced by 'filters', a more powerful tool " #~ "with several types of blur, color inversion, pixelisation, saturation and " #~ "transparency." #~ msgstr "" #~ "Alat „zasićenost” zamijenjen je „filterima”, moćnijim alatom s nekoliko " #~ "vrsta zamućenja, inverzija boja, pikselizacije, zasićenja i prozirnosti." #~ msgid "A fullscreen mode is now available." #~ msgstr "Sada postoji cjeloekranski prikaz." #~ msgid "" #~ "The most prominent new feature is the ability to zoom in (or out) on the " #~ "image, using the minimap, the touchpad or the mouse wheel." #~ msgstr "" #~ "Najistaknutija nova funkcija je mogućnost zumiranja slike pomoću mini-" #~ "karte, touchpada ili kotača miša." #~ msgid "Close Window" #~ msgstr "Zatvori prozor" #~ msgid "Zoom" #~ msgstr "Zumiranje" #~ msgid "Fullscreen" #~ msgstr "Cjeloekranski prikaz" #~ msgid "Exit fullscreen" #~ msgstr "Zatvori cjeloekranski prikaz" #~ msgid "Edit Main Color…" #~ msgstr "Uredi glavnu boju …" #~ msgid "Edit Secondary Color…" #~ msgstr "Uredi sporednu boju …" #~ msgid "Color application mode" #~ msgstr "Modus programa boja" #~ msgid "Don't use the colors but…" #~ msgstr "Ne koristi boje, već …" #~ msgid "Blur" #~ msgstr "Zamuti" #, fuzzy #~ msgid "Erase" #~ msgstr "Gumica" #~ msgid "100%" #~ msgstr "100 %" #~ msgid "Close selection" #~ msgstr "Zatvori odabir" #~ msgid "Filters" #~ msgstr "Filtri" #~ msgid "Keyboard" #~ msgstr "Tipkovnica" #~ msgid "Import a file as the selection" #~ msgstr "Uvezi datoteku kao odabir" #~ msgid "Enter fullscreen mode" #~ msgstr "Otvori cjeloekranski prikaz" #~ msgid "Exit fullscreen mode" #~ msgstr "Zatvori cjeloekranski prikaz" #~ msgid "Show the app version" #~ msgstr "Prikaži verziju programa" #, fuzzy #~ msgid "Report bugs or ideas" #~ msgstr "Prijavi grešku" #~ msgid "%s%%" #~ msgstr "%s %%" #~ msgid "You can zoom with Ctrl+scrolling, or only scrolling." #~ msgstr "Možeš zumirati pomoću Ctrl+klizanje ili samo klizanje." #~ msgid "Using keyboard shortcuts or touch gestures is possible too." #~ msgstr "" #~ "Također je moguće kosristiti prečace na tipkovnici ili dodirne geste." #~ msgid "Use 'Ctrl' to zoom" #~ msgstr "Koristi „Ctrl” za zumiranje" #~ msgid "Appearance" #~ msgstr "Izgled" #~ msgid "Additional tools" #~ msgstr "Dodatni alati" #~ msgid "" #~ "These tools are not as reliable and useful as they should be, so they are " #~ "not all enabled by default." #~ msgstr "" #~ "Ovi alati nisu toliko pouzdani i korisni kao što bi trebali biti, stoga " #~ "se standardno ne aktiviraju svi." #~ msgid "Highlighter" #~ msgstr "Isticanje" #~ msgid "Modifications will take effect in the next new window." #~ msgstr "Promjene će stupiti na snagu u sljedećem novom prozoru." #~ msgid "Opened images" #~ msgstr "Otvorene slike" #~ msgid "Failed to save %s" #~ msgstr "Neuspjelo spremanje %s" #~ msgid "Required tool is not available" #~ msgstr "Potrebni alat nije dostupan" #~ msgid "The area seems poorly delimited, or is very complex." #~ msgstr "Čini se da je područje loše ograničeno ili je vrlo složeno." #~ msgid "This algorithm may not be able to manage the wanted area." #~ msgstr "Ovaj algoritam možda neće moći upravljati željenim područjem." #~ msgid "Do you want to abort the operation, or to let the tool struggle ?" #~ msgstr "" #~ "Želiš li prekinuti operaciju ili pustiti da se alat nastavi boriti sa " #~ "zadatkom?" #~ msgid "How the color will be applied to the existing pixels" #~ msgstr "Način primjene boje na postojeće pikslove" #~ msgid "More actions" #~ msgstr "Daljnje radnje" #~ msgid "Empty outline" #~ msgstr "Prazna kontura" #~ msgid "Horizontal gradient" #~ msgstr "Vodoravan prijelaz" #~ msgid "Vertical gradient" #~ msgstr "Okomit prijelaz" #~ msgid "Radial gradient" #~ msgstr "Kružni prijelaz" #~ msgid "Close shape" #~ msgstr "Zatvori oblik" #~ msgid "Select a filter…" #~ msgstr "Odaberi filtar …" #~ msgid "Blur radius" #~ msgstr "Područje zamućivanja" #~ msgid "Transparency" #~ msgstr "Prozirnost" #, fuzzy #~ msgid "Change saturation" #~ msgstr "Zasićenost" #~ msgid "Pixelisation" #~ msgstr "Pikselizacija" #, fuzzy #~ msgid "Add transparency" #~ msgstr "Prozirnost" #~ msgid "Invert colors" #~ msgstr "Invertiraj boje" #~ msgid "Horizontal blur" #~ msgstr "Vodoravno zamućivanje" #~ msgid "Vertical blur" #~ msgstr "Okomito zamućivanje" #~ msgid "Angle" #~ msgstr "Kut" #~ msgid "Always" #~ msgstr "Uvijek" #~ msgid "When scaling from corners" #~ msgstr "Pri skaliranju iz kutova" #~ msgid "Never" #~ msgstr "Nikada" #, fuzzy #~ msgid "Horizontal deformation" #~ msgstr "Vodoravan prijelaz" #, fuzzy #~ msgid "Vertical deformation" #~ msgstr "Okomit prijelaz" #~ msgid "Curve" #~ msgstr "Krivulja" #~ msgid "Dashed arrow" #~ msgstr "Iscrtkana strelica" #~ msgid "Dashed" #~ msgstr "Iscrtkano" #~ msgid "Click on the image to preview the selected filter" #~ msgstr "Klikni na sliku za pretprikaz odabranog filtra" #~ msgid "" #~ "Version 0.6 is a major update, with various important changes: rectangle " #~ "selection and freehand selection are now distinct tools, images can be " #~ "imported or opened using drag-and-drop, the 'rotate' tool now supports " #~ "any angle and handles horizontal or vertical flipping, and various tools " #~ "producing shapes (circle, rectangle, polygon, …) have been merged into a " #~ "single coherent 'shape' tool." #~ msgstr "" #~ "Verzija 0.6 je značajna nadogradnja, s različitim važnim promjenama: " #~ "pravokutni odabir i prostoručni odabir su sada različiti alati, slike se " #~ "mogu uvesti ili otvoriti pomoću funkcije povuci-i-ispusti, alat " #~ "„okretanje” sada podržava bilo koji kut i podržava vodoravno ili okomito " #~ "preokretanje, a razni alati koji proizvode oblike (krug, pravokutnik, " #~ "mnogokut, …) spojeni su u jedan koherentan alat „Oblik”." #~ msgid "Apply a filter" #~ msgstr "Primijeni filtar" drawing-0.4.11/po/hu.po000066400000000000000000000516231362211111700146240ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-12-12 11:00+0100\n" "Last-Translator: Kálmán „KAMI” Szalai \n" "Language-Team: \n" "Language: hu_HU\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Drawing" msgstr "Rajzolás" msgid "Simple drawing utility" msgstr "Egyszerű rajzoló alkalmazás" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Sketch;Pencil;Festés;Rajzolás;Skicc;Ceruza;Ecset;Festő" msgid "New Window" msgstr "Új ablak" msgid "New Image" msgstr "Új kép" msgid "Edit Image in Clipboard" msgstr "Kép szerkesztése a vágólapról" msgid "A drawing application for the GNOME desktop" msgstr "Rajzoló alkalmazás a GNOME asztali környezethez" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "A „Drawing” (Rajzolás) alkalmazás egy egyszerű, PNG, JPEG és BMP fájltípusok " "támogatásával rendelkező képszerkesztő program." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Segítségével képeket rajzolhat és szerkeszthet a következő eszközökkel: " "ceruza, vonal, körív (számos beállítási lehetőséggel), kiválasztás (kivágás, " "másolás, beillesztés, áthúzás), alakzatok (négyszög, kör, poligon), szöveg, " "átméretezés, vágás, forgatás, …" #, fuzzy msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "A 0.4.5 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi " "fordításokat hozott." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" #, fuzzy msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "A 0.4.5 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi " "fordításokat hozott." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" "Az „Új kép egyedi mérettel” művelet elérhetővé tétele. Képek importja vagy " "megnyitása húzd és ejtsd megoldással. Új kép megnyitásakor nem zárja be a " "mentett nem üres képeket." msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" "Továbbfejlesztett felhasználói felületet kapott a beállítások ablak, az " "eszköztár, a gombok és amenüsor." msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "A 0.4.5 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi " "fordításokat hozott." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" "Mindkét egérgombbal történő kattintás esetén már nem omlik össze a program. " "A zavaró színtér választáshoz tartozó felölet törölve lett, mert hibákat " "okozott az előzményekkel kapcsolatban." msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "A 0.4.4 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi " "fordításokat hozott." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "A 0.4.3 verzió kompatibilis a régebbi terjesztésekkel, mint az Ubuntu 18.04 " "LTS kiadása. Ez a verzió számos kisebb hibajavítást hozott." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "A 0.4.2 verzió számos kisebb hibajavítást, és új felhasználói felület nyelvi " "fordításokat hozott." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "A 0.4 verzió új ikonokat, számos hibajavítást, továbbfejlesztett „Örökölt” " "és „Csak eszköztár ”eszköztárakat, vágólapról történő kép létrehozást, " "finomabb ceruza eszközt, és új felhasználói felület nyelvi fordításokat " "hozott." msgid "First stable release, including a few basic tools." msgstr "Az első stabil kiadás, ami néhány alap eszközt tartalmazott." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Beállítások" msgid "Report a bug" msgstr "Hibajelentés küldése" msgid "Shortcuts" msgstr "Gyorsbillentyűk" msgid "Help" msgstr "Súgó" msgid "About" msgstr "Névjegy" msgid "Quit" msgstr "Kilépés" msgid "_File" msgstr "_Fájl" msgid "New Blank Image" msgstr "Új üres kép" msgid "New Image With Custom Size" msgstr "Új kép egyedi mérettel" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Új kép készítése a kijelölés alapján" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Új kép készítése a vágólapról" msgid "Open an image" msgstr "Képfájl megnyitása" msgid "Reload file" msgstr "Fájl újratöltése" msgid "Image properties" msgstr "Képtulajdonságok" msgid "Save" msgstr "Mentés" msgid "Save as…" msgstr "Mentés másként…" msgid "Export as…" msgstr "Exportálás…" msgid "Print" msgstr "Nyomtatás" msgid "Close" msgstr "Bezár" msgid "_Edit" msgstr "S_zerkesztés" msgid "Undo" msgstr "Visszavonás" msgid "Redo" msgstr "Mégis" msgid "Select all" msgstr "Összes kijelölése" msgid "Cut" msgstr "Kivágás" msgid "Copy" msgstr "Másolás" msgid "Delete" msgstr "Törlés" msgid "Paste" msgstr "Beillesztés" msgid "Import" msgstr "Importálás" msgid "_View" msgstr "_Nézet" msgid "Optimal Zoom" msgstr "Automatikus nagyítás" msgid "Zoom Out" msgstr "Kicsinyítés" msgid "Original Zoom" msgstr "Eredeti nagyítás" msgid "Zoom In" msgstr "Nagyítás" msgid "Show the preview" msgstr "Előnézet megjelenítése" msgid "Refresh" msgstr "Frissítés" msgid "Rebuild from history" msgstr "Újra-összeállítás az előzményekből" msgid "Position" msgstr "Pozíció" msgid "Go Left" msgstr "Ugrás balra" msgid "Go Up" msgstr "Ugrás fel" msgid "Go Down" msgstr "Ugrás le" msgid "Go Right" msgstr "Ugrás jobbra" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Eszközök neveinek megjelenítése" msgid "_Colors" msgstr "_Színek" msgid "Main color" msgstr "Elsődleges szín" msgid "Secondary color" msgstr "Másodlagos szín" msgid "Exchange colors" msgstr "Színek megcserélése" msgid "Color editor by default" msgstr "Alapértelmezett szín szerkesztő" msgid "_Tools" msgstr "_Eszközök" msgid "_Canvas" msgstr "_Rajzvászon" msgid "Previous tool" msgstr "Előző szeköz" msgid "_Options" msgstr "_Beállítások" msgid "_Windows" msgstr "_Ablakok" msgid "Quit all windows" msgstr "Minden ablak bezárása" msgid "_Help" msgstr "_Súgó" msgid "Index" msgstr "Index" msgid "Basic help" msgstr "Súgó" msgid "Help about tools" msgstr "Súgó az eszközökről" msgid "Canvas and selection" msgstr "Rajzvászon és kijelölés" msgid "Help about selection" msgstr "Súgó a kiválasztásról" msgid "About Drawing" msgstr "Rajzolás alkalmazás névjegye" msgid "Back to the palette" msgstr "Vissza a palettához" msgid "Use this editor by default" msgstr "Legyen ez az lapértelmezett szerkesztő" msgid "Width" msgstr "Szélesség" msgid "Height" msgstr "Magasság" msgid "Background color" msgstr "Háttérszín" msgid "Use these settings by default" msgstr "Ezek legyenek az alapértelmezett beállítások" msgid "Open" msgstr "Megnyitás" msgid "Images" msgstr "Képek" msgid "Tools" msgstr "Eszközök" msgid "Advanced options" msgstr "Haladó beállítások" msgid "Path" msgstr "Útvonal" msgid "Format" msgstr "Formátum" msgid "Colorspace" msgstr "Színtér" msgid "Unsaved file" msgstr "Mentetlen fájl" msgid "Invalid format" msgstr "Érvénytelen formátuma" msgid "pixels" msgstr "képpont" msgid "centimeters" msgstr "centiméter" msgid "inches" msgstr "hüvelyk" msgid "Unselect" msgstr "Kijelölések megszüntetése" msgid "Flip" msgstr "Megfordítás" msgid "Crop" msgstr "Levágás" msgid "Scale" msgstr "Méretezés" msgid "Rotate" msgstr "Forgatás" msgid "Saturate" msgstr "Telítettség" msgid "Open As New Image" msgstr "Megnyitás új képként" msgid "General" msgstr "Általános" msgid "Main menu" msgstr "Főmenü" msgid "Image" msgstr "Kép" msgid "Open a file" msgstr "Fájl megnyitása" msgid "Close the active image" msgstr "Aktív képnézet bezárása" msgid "Save as" msgstr "Mentés másként" msgid "Edition" msgstr "Kiadás" msgid "Options menu" msgstr "Beállítások menü" msgid "Back to previous tool" msgstr "Vissza az előző eszközhöz" msgid "Selection" msgstr "Kijelölés" msgid "Delete the selection" msgstr "A kijelölés törlése" msgid "Colors" msgstr "Színek" msgid "Edit the main color (left click)" msgstr "Elsődleges szín szerkesztése (bal kattintás)" msgid "Edit the secondary color (right click)" msgstr "Másodlagos szín szerkesztése (jobb kattintás)" msgid "Navigation" msgstr "Navigáció" msgid "Toggle the preview" msgstr "Előnézet megjelenítése" msgid "Error starting the application, please report this bug." msgstr "" "Hiba lépett fel az alkalmazás elindítása során. Kérem jelentse be ezt a " "hibát a fejlesztőknek!" msgid "Tool size" msgstr "Eszközméret" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Nincs beállítás" #. none msgid "Preview" msgstr "Előnézet" msgid "Troubleshoot selection" msgstr "Hibakeresés" msgid "Cancel" msgstr "Mégse" msgid "Create" msgstr "Létrehozás" msgid "Print the version and display the 'about' dialog" msgstr "Kiírja a verziószámot és megjeleníti a „névjegy” párbeszédablakot" msgid "Open a new window" msgstr "Megnyitás új ablakban" msgid "Open a new tab" msgstr "Új lap megnyitása" msgid "Edit the clipboard content" msgstr "Kép szerkesztése a vágólapról" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Kálmán „KAMI” Szalai , 2019" msgid "A drawing application for the GNOME desktop." msgstr "Rajzoló alkalmazás a GNOME asztali környezethez." msgid "Official webpage" msgstr "Hivatalos weboldal" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "" "Hiba történt a fájl megnyitása során. Próbálja meg a(z) %s fájlt megnyitni?" #, python-format msgid "Failed to load tool: %s" msgstr "Nem sikerült betölteni az eszközt: %s" #, python-format msgid "Loading %s" msgstr "%s fájl betöltése" msgid "New Tab" msgstr "Új lap" msgid "Discard changes" msgstr "Módosítások elvetése" #, python-format msgid "There are unsaved modifications to %s." msgstr "Mentetlen változtatások vannak a következőhöz: %s." #, python-format msgid "Where do you want to open %s?" msgstr "Hova kívánja megnyitni a(z) %s képfájlt?" msgid "Open a picture" msgstr "Kép megnyitása" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "ezek a fájlok" #, python-format msgid "What do you want to do with %s?" msgstr "Mit szeretne tenni a(z) %s képpel?" msgid "Untitled" msgstr "Névtelen" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "ez a kép" msgid "Discard" msgstr "Eldobás" msgid "Save picture as…" msgstr "Kép mentése másként…" msgid "Import a picture" msgstr "Kép importálása" #, python-format msgid "Undo %s" msgstr "„%s” _visszavonása" #, python-format msgid "Redo %s" msgstr "„%s” újra" msgid "New images" msgstr "Új képek" msgid "Default width" msgstr "Alapértelmezett szélesség" msgid "Default height" msgstr "Alapértelmezett magasság" msgid "Default background" msgstr "Alapértelmezett háttér" msgid "Images saving" msgstr "Képek mentése" msgid "JPEG and BMP images can't handle transparency." msgstr "A JPEG és BMP fájlformátumok nem támogatják az átlátszóságot." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Amennyiben ilyen formátumban menti a képeket, milyen színre legyenek " "lecserélve az átlátszó képpontok?" msgid "White" msgstr "Fehér" msgid "Black" msgstr "Fekete" msgid "Checkboard" msgstr "Kockás" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "Kérdés mentés előtt" msgid "Use big icons" msgstr "Nagy ikonok" msgid "Preview size" msgstr "Előnézet mérete" msgid "Development features" msgstr "Fejlesztés" msgid "Layout" msgstr "Elrendezés" msgid "The recommended value is \"Automatic\"." msgstr "Az ajánlott érték: „Automatikus”." msgid "Automatic" msgstr "Automatikus" msgid "Compact" msgstr "Tömör" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Örökölt" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Örökölt (szimbolikus ikonok)" msgid "Menubar only" msgstr "Csak menüsor" msgid "Toolbar only" msgstr "Csak eszköztár" msgid "Toolbar only (symbolic icons)" msgstr "Csak eszköztár (szimbolikus ikonok)" msgid "This file format doesn't support transparent colors." msgstr "Ez a fájlformátum nem támogatja az átlátszó „színt”." msgid "Replace transparency with:" msgstr "Átlátszóság helyettesítése ezzel:" msgid "All pictures" msgstr "Minden kép" msgid "PNG images" msgstr "PNG-képek" msgid "JPEG images" msgstr "JPEG-képek" msgid "BMP images" msgstr "BMP-képek" msgid "Transparent" msgstr "Átlátszó" #, python-format msgid "%s%% transparent" msgstr "%s%% átlátszó" msgid "Grey" msgstr "Szürke" msgid "Orange" msgstr "Narancs" msgid "Brown" msgstr "Barna" msgid "Probably brown" msgstr "Talán barna" msgid "Red" msgstr "Vörös" msgid "Green" msgstr "Zöld" msgid "Blue" msgstr "Kék" msgid "Yellow" msgstr "Sárga" msgid "Magenta" msgstr "Bíborvörös" msgid "Purple" msgstr "Bíbor" msgid "Cyan" msgstr "Ciánkék" msgid "Probably turquoise" msgstr "Talán türkizkék" msgid "Unknown color name" msgstr "Ismeretlen szín név" msgid "Continue" msgstr "Tovább" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "A terület rosszul elhatárolható, vagy nagyon komplex.\n" "Ez az algoritmus lehet, hogy nem lesz képes kezelni a kívánt területet.\n" "\n" "Meg kívánja szakítani a műveletet, vagy az eszköz próbálja meg legjobb " "tudása szerint elvégezni a feladatot?" msgid "percents" msgstr "százalék" msgid "Lead shape" msgstr "Alakzat" #. Default values msgid "Round" msgstr "Kerekítés" msgid "Square" msgstr "Négyzet" msgid "Use dashes" msgstr "Vonalkázás" msgid "Arrow" msgstr "Nyíl" msgid "Mode" msgstr "Üzemmód" msgid "Classic" msgstr "Klasszikus" msgid "Source color" msgstr "Forrás szín" msgid "Eraser" msgstr "Radír" msgid "Difference" msgstr "Különbség" msgid "Shape" msgstr "Alakzat" msgid "Oval" msgstr "Ovális" msgid "Circle" msgstr "Kör" msgid "Filling" msgstr "Kitöltés" msgid "Empty" msgstr "Kiürítés" msgid "Filled (main color)" msgstr "Kitöltés (elsődleges szín)" msgid "Filled (secondary color)" msgstr "Kitöltés (másodlagos szín)" msgid "Apply" msgstr "Alkalmaz" msgid "Flip horizontally" msgstr "Vízszintes tükrözés" msgid "Flip vertically" msgstr "Függőleges tükrözés" msgid "Color gradient" msgstr "Színátmenet" msgid "Behavior" msgstr "Viselkedés" msgid "Encircle and fill" msgstr "Kitöltés" msgid "Erase and replace" msgstr "Törlés és csere" msgid "Clipping" msgstr "Vágás" msgid "Thin" msgstr "Vékony" msgid "Artificial smoothness" msgstr "Mesterséges finomítás" msgid "Rectangle" msgstr "Téglalap" #, fuzzy msgid "Rounded rectangle" msgstr "Téglalap" msgid "Rotate left" msgstr "Forgatás balra" msgid "Angle (degrees)" msgstr "Szög (fok)" msgid "Rotate right" msgstr "Forgatás jobbra" msgid "Saturation" msgstr "Telítettség" msgid "Keep proportions" msgstr "Arányok megtartása" msgid "Edit" msgstr "Szerkesztés" msgid "Selection type" msgstr "Kijelölés típusa" msgid "Freehand" msgstr "Szabadkézi" msgid "Similar color" msgstr "Hasonló szín" msgid "Selection options" msgstr "Kijelölés beállításai" msgid "Insert here" msgstr "Beszúrás ide" msgid "Font" msgstr "Betűkészlet" msgid "Italic" msgstr "Dőlt" msgid "Bold" msgstr "Félkövér" msgid "Background" msgstr "Háttér" msgid "No background" msgstr "Nincs háttér" msgid "Shadow" msgstr "" msgid "Outline" msgstr "Körvonal" #, fuzzy msgid "Rectangle background" msgstr "Alapértelmezett háttér" msgid "Arc" msgstr "Körív" msgid "Arc options" msgstr "Körív beállítások" msgid "With dashes" msgstr "Vonalkázás" msgid "Circle options" msgstr "Kör beállítások" msgid "Free shape" msgstr "Szabad alakzat" msgid "Shape options" msgstr "Alakzat beállítások" msgid "Click on the shape's first point to close it." msgstr "Az alakzat bezárásához kattintson az első pontjára." msgid "Line" msgstr "Vonal" msgid "Line options" msgstr "Vonal beállítások" msgid "Paint" msgstr "Festés" msgid "Painting options" msgstr "Festés beállítások" msgid "Click on an area to replace its color by transparency" msgstr "Kattintson egy területre, hogy a színét átlátszóra cserélje" msgid "Polygon" msgstr "Sokszög" msgid "Polygon options" msgstr "Poligon beállítások" msgid "Pencil" msgstr "Ceruza" msgid "Pencil options" msgstr "Ceruza beállítások" msgid "Color Picker" msgstr "Színpipetta" msgid "Rectangle options" msgstr "Téglalap beállítások" msgid "Text" msgstr "Szöveg" msgid "Font options" msgstr "Betűbeállítások" msgid "Rectangle selection" msgstr "Téglalap kijelölés" msgid "Free selection" msgstr "Szabad kijelölés" msgid "Color selection" msgstr "Színválasztó" msgid "Drag the selection or right-click on the canvas" msgstr "" "Húzza át a kiválasztást, vagy kattintson a jobb egérgombbal a rajzvászonra" msgid "Select an area or right-click on the canvas" msgstr "" "Válasszon ki egy területet, vagy kattintson a jobb egérgombbal a rajzvászonra" msgid "Cropping the selection" msgstr "Kijelölés vágása" msgid "Cropping the canvas" msgstr "Rajzvászon vágása" msgid "Rotating the selection" msgstr "Kijelölés forgatása" msgid "Rotating the canvas" msgstr "Rajzvászon forgatása" msgid "Scaling the selection" msgstr "Kijelölés átméretezése" msgid "Scaling the canvas" msgstr "Rajzvászon átméretezése" drawing-0.4.11/po/it.po000066400000000000000000000466071362211111700146320ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-08-06 21:15+0200\n" "Last-Translator: Albano Battistella\n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Drawing" msgstr "Drawing" msgid "Simple drawing utility" msgstr "Semplice applicazione per il disegno" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Colore;Bozze;Matita;" msgid "New Window" msgstr "Nuova finestra" msgid "New Image" msgstr "Nuova Immagine" msgid "Edit Image in Clipboard" msgstr "Modifica l'Immagine negli Appunti" msgid "A drawing application for the GNOME desktop" msgstr "Un'applicazione per il disegno per l'interfaccia GNOME." msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing\" è un editor di immagini di base, che supporta i tipi di file " "PNG, JPEG e BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Ti permette di disegnare o modificare immagini con strumenti come matita, " "linea oarco (con varie opzioni), selezione (taglia/copia/incolla/trascina/" "…), forme, rotazione, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "La versione 0.4.11 presenta diverse correzioni di bug minori e varie nuove " "traduzioni. " msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "La versione 0.4.10 presenta diverse correzioni di bug minori e varie nuove " "traduzioni. " msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "La versione 0.4.5 presenta diverse correzioni di bug minori e varie nuove " "traduzioni. " msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "La versione 0.4.4 presenta diverse correzioni di bug minori e varie nuove " "traduzioni. " msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "La versione 0.4.3 include nuove traduzioni ed è compatibile con le versioni " "precedentidistribuzioni come Ubuntu 18.04 LTS." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "La versione 0.4.2 presenta diverse correzioni di bug minori e varie nuove " "traduzioni. " msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "La versione 0.4 introduce una nuova icona, numerose correzioni di errori, " "una barra degli strumenti migliorataper i layout\"legacy\"e\" solo barra " "degli strumenti\", un'azione per la creazione di unimmagine dal contenuto " "degli appunti, una matita più liscia e varie nuovetraduzioni" msgid "First stable release, including a few basic tools." msgstr "Prima versione stabile, inclusi alcuni strumenti di base." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Preferenze" msgid "Report a bug" msgstr "Invia una bug" msgid "Shortcuts" msgstr "Scorciatoie" msgid "Help" msgstr "Aiuto" msgid "About" msgstr "Informazioni" msgid "Quit" msgstr "Esci" msgid "_File" msgstr "_File" msgid "New Blank Image" msgstr "Nuova Immagine Vuota" #, fuzzy msgid "New Image With Custom Size" msgstr "Nuova Immagine dalla Selezione" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nuova Immagine dalla Selezione" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nuova Immagine dagli Appunti" msgid "Open an image" msgstr "Apri un' immagine" msgid "Reload file" msgstr "Ricarica file" msgid "Image properties" msgstr "Proprietà immagine" msgid "Save" msgstr "Salva" msgid "Save as…" msgstr "Salva come…" msgid "Export as…" msgstr "Esporta come…" msgid "Print" msgstr "Stampa" msgid "Close" msgstr "Chiudi" msgid "_Edit" msgstr "_Modifica" msgid "Undo" msgstr "Annulla" msgid "Redo" msgstr "Ripeti" msgid "Select all" msgstr "Seleziona tutto" msgid "Cut" msgstr "Taglia" msgid "Copy" msgstr "Copia" msgid "Delete" msgstr "Elimina" msgid "Paste" msgstr "Incolla" msgid "Import" msgstr "Importa" msgid "_View" msgstr "_Vista" msgid "Optimal Zoom" msgstr "Zoom Ottimale" msgid "Zoom Out" msgstr "Rimpicciolisci" msgid "Original Zoom" msgstr "Zoom Originale" msgid "Zoom In" msgstr "Ingrandisci" msgid "Show the preview" msgstr "Mostra anteprima" msgid "Refresh" msgstr "Aggiorna" msgid "Rebuild from history" msgstr "Ricrea dalla cronologia" msgid "Position" msgstr "Posizione" msgid "Go Left" msgstr "Sposta a sinistra" msgid "Go Up" msgstr "Sposta in su" msgid "Go Down" msgstr "Sposta in basso" msgid "Go Right" msgstr "Sposta a destra" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Mostra i nomi degli strumenti" msgid "_Colors" msgstr "_Colori" msgid "Main color" msgstr "Colore primario" msgid "Secondary color" msgstr "Colore secondario" msgid "Exchange colors" msgstr "Scambia i colori" msgid "Color editor by default" msgstr "Selettore colore standard" msgid "_Tools" msgstr "_Strumenti" msgid "_Canvas" msgstr "_Tela" msgid "Previous tool" msgstr "Strumento precedente" msgid "_Options" msgstr "_Opzioni" msgid "_Windows" msgstr "_Finestra" msgid "Quit all windows" msgstr "Chiudi tutte le finestre" msgid "_Help" msgstr "_Aiuto" msgid "Index" msgstr "Indice" msgid "Basic help" msgstr "Aiuto generico" msgid "Help about tools" msgstr "Aiuto sugli strumenti" msgid "Canvas and selection" msgstr "Tela e selezione" msgid "Help about selection" msgstr "Aiuto sugli selezione" msgid "About Drawing" msgstr "Informazioni su Drawing" msgid "Back to the palette" msgstr "Ritorna alla tavolozza" msgid "Use this editor by default" msgstr "Usa questo editor come predefinito" msgid "Width" msgstr "Larghezza" msgid "Height" msgstr "Altezza" msgid "Background color" msgstr "Colore sfondo" msgid "Use these settings by default" msgstr "Utilizzare queste impostazioni come predefinita" msgid "Open" msgstr "Apri" msgid "Images" msgstr "Immagini" msgid "Tools" msgstr "Strumenti" msgid "Advanced options" msgstr "Opzioni avanzate" msgid "Path" msgstr "Percorso" msgid "Format" msgstr "Formato" msgid "Colorspace" msgstr "Spazio colore" msgid "Unsaved file" msgstr "File non salvato" msgid "Invalid format" msgstr "Formato non valido" msgid "pixels" msgstr "pixel" msgid "centimeters" msgstr "centimetri" msgid "inches" msgstr "pollici" msgid "Unselect" msgstr "Deseleziona" msgid "Flip" msgstr "Ribalta" msgid "Crop" msgstr "Ritaglia" msgid "Scale" msgstr "Scala" msgid "Rotate" msgstr "Ruota" msgid "Saturate" msgstr "Satura" msgid "Open As New Image" msgstr "Apri Come Nuova immagine" msgid "General" msgstr "Generale" msgid "Main menu" msgstr "Menu principale" msgid "Image" msgstr "Immagine" msgid "Open a file" msgstr "Apri un file" msgid "Close the active image" msgstr "Chiudi l'immagine attiva" msgid "Save as" msgstr "Salve come" msgid "Edition" msgstr "Modifica" msgid "Options menu" msgstr "Menu opzioni" msgid "Back to previous tool" msgstr "Ritorna allo strumento precedente" msgid "Selection" msgstr "Selezione" msgid "Delete the selection" msgstr "Elimina la selezione" msgid "Colors" msgstr "Colori" msgid "Edit the main color (left click)" msgstr "Modifica il colore primario (click sinistro)" msgid "Edit the secondary color (right click)" msgstr "Modifica il colore secondario (click destro)" msgid "Navigation" msgstr "Navigazione" msgid "Toggle the preview" msgstr "Mostra/nascondi anteprima" msgid "Error starting the application, please report this bug." msgstr "Errore nell'avvio dell'applicazione, invia una segnalazione." msgid "Tool size" msgstr "Dimensione strumento" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Nessuna opzione" #. none msgid "Preview" msgstr "Anteprima" msgid "Troubleshoot selection" msgstr "Risolvere i problemi di selezione" msgid "Cancel" msgstr "Annulla" msgid "Create" msgstr "Crea" msgid "Print the version and display the 'about' dialog" msgstr "Stampa la versione e mostra la finestra 'informazioni'" msgid "Open a new window" msgstr "Apri una nuova finestra" msgid "Open a new tab" msgstr "Apri una nuova scheda" msgid "Edit the clipboard content" msgstr "Modifica il contenuto degli appunti" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "" "Jimmy S.\n" "Albano Battistella" msgid "A drawing application for the GNOME desktop." msgstr "Un'applicazione per il disegno per l'interfaccia GNOME." msgid "Official webpage" msgstr "Pagina Web Ufficiale" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Errore nell'apertura del file. Intendevi %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Strumento di caricamento non riuscito: %s" #, python-format msgid "Loading %s" msgstr "Caricamento %s" msgid "New Tab" msgstr "Nuova Scheda" msgid "Discard changes" msgstr "Scarta le modifiche" #, python-format msgid "There are unsaved modifications to %s." msgstr "Ci sono modifiche non salvate in %s." #, python-format msgid "Where do you want to open %s?" msgstr "Dove vuoi aprire %s?" msgid "Open a picture" msgstr "Apri un'immagine" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "questi file" #, python-format msgid "What do you want to do with %s?" msgstr "Cosa vuoi fare con %s?" msgid "Untitled" msgstr "Senza titolo" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "questa immagine" msgid "Discard" msgstr "Scarta" msgid "Save picture as…" msgstr "Salva l'immagine come…" msgid "Import a picture" msgstr "Importa un'immagine" #, python-format msgid "Undo %s" msgstr "Annulla %s" #, python-format msgid "Redo %s" msgstr "Ripeti %s" msgid "New images" msgstr "Nuova immagini" msgid "Default width" msgstr "Larghezza standard" msgid "Default height" msgstr "Altezza standard" msgid "Default background" msgstr "Sfondo preimpostato" msgid "Images saving" msgstr "Salvataggio immagini" msgid "JPEG and BMP images can't handle transparency." msgstr "" #, fuzzy msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Le immagini JPEG e BMP non possono gestire la trasparenza. Se salvi le " "immagini in questi formati, che cosa vuoi utilizzare per sostituire i pixel " "trasparenti?" msgid "White" msgstr "Bianco" msgid "Black" msgstr "Nero" msgid "Checkboard" msgstr "" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "Chiedi prima di salvare" msgid "Use big icons" msgstr "Usa icone grandi" msgid "Preview size" msgstr "Dimensione anteprima" msgid "Development features" msgstr "Funzionalità in sviluppo" msgid "Layout" msgstr "Livello" msgid "The recommended value is \"Automatic\"." msgstr "Il valore consigliato è \"Automatico\"." msgid "Automatic" msgstr "Automatico" msgid "Compact" msgstr "Compatto" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Classico" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Classico (icone simboliche)" msgid "Menubar only" msgstr "Solo la barra menu" msgid "Toolbar only" msgstr "Solo la barra strumenti" msgid "Toolbar only (symbolic icons)" msgstr "Solo barra degli strumenti (icone simboliche)" msgid "This file format doesn't support transparent colors." msgstr "Questo formato di file non supporta i colori trasparenti." msgid "Replace transparency with:" msgstr "Sostituisci la trasparenza con:" msgid "All pictures" msgstr "Tutte le immagini" msgid "PNG images" msgstr "Immagini PNG" msgid "JPEG images" msgstr "Immagini JPEG" msgid "BMP images" msgstr "Immagini BMP" msgid "Transparent" msgstr "Trasparente" #, python-format msgid "%s%% transparent" msgstr "%s%% trasparente" msgid "Grey" msgstr "Grigio" msgid "Orange" msgstr "Arancio" msgid "Brown" msgstr "Marrone" msgid "Probably brown" msgstr "Probabilmente marrone" msgid "Red" msgstr "Rosso" msgid "Green" msgstr "Verde" msgid "Blue" msgstr "Blu" msgid "Yellow" msgstr "Giallo" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Viola" msgid "Cyan" msgstr "Ciano" msgid "Probably turquoise" msgstr "Probabilmente turchese" msgid "Unknown color name" msgstr "Nome colore sconosciuto" msgid "Continue" msgstr "Continua" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "L'area sembra essere insufficientemente limitata, o molto complessa.\n" "Questo algoritmo potrebbe non essere in grado di gestire l'area desiderata.\n" "\n" "Vuoi interrompere l'operazione o vuoi forzare lo strumento?" msgid "percents" msgstr "percentuali" msgid "Lead shape" msgstr "Forma primaria" #. Default values msgid "Round" msgstr "Tondo" msgid "Square" msgstr "Quadrato" msgid "Use dashes" msgstr "Usa tratti" msgid "Arrow" msgstr "Freccia" msgid "Mode" msgstr "Modalità" msgid "Classic" msgstr "Classico" msgid "Source color" msgstr "Colore sorgente" msgid "Eraser" msgstr "Gomma" msgid "Difference" msgstr "Differenza" msgid "Shape" msgstr "Forma" msgid "Oval" msgstr "Ovale" msgid "Circle" msgstr "Cerchio" msgid "Filling" msgstr "Riempimento" msgid "Empty" msgstr "Vuoto" msgid "Filled (main color)" msgstr "Riempito (colore primario)" msgid "Filled (secondary color)" msgstr "Riempito (colore secondario)" msgid "Apply" msgstr "Applica" msgid "Flip horizontally" msgstr "Ribalta orizzontalmente" msgid "Flip vertically" msgstr "Ribalta verticalmente" msgid "Color gradient" msgstr "Gradiente di colore" msgid "Behavior" msgstr "Comportamento" msgid "Encircle and fill" msgstr "Accerchia e riempi" msgid "Erase and replace" msgstr "Cancella e sostituisci" msgid "Clipping" msgstr "Ritaglio" msgid "Thin" msgstr "Sottile" msgid "Artificial smoothness" msgstr "Levigatezza artificiale" msgid "Rectangle" msgstr "Rettangolo" #, fuzzy msgid "Rounded rectangle" msgstr "Rettangolo" msgid "Rotate left" msgstr "Ruota a sinistra" msgid "Angle (degrees)" msgstr "Angolo (gradi)" msgid "Rotate right" msgstr "Ruota a destra" msgid "Saturation" msgstr "Saturazione" msgid "Keep proportions" msgstr "Mantieni le proporzioni" msgid "Edit" msgstr "Modifica" msgid "Selection type" msgstr "Tipo selezione" msgid "Freehand" msgstr "Mano libera" msgid "Similar color" msgstr "Color simile" msgid "Selection options" msgstr "Opzioni selezione" msgid "Insert here" msgstr "Inserisci qui" msgid "Font" msgstr "Carattere" msgid "Italic" msgstr "Italic" msgid "Bold" msgstr "Grassetto" msgid "Background" msgstr "Sfondo" msgid "No background" msgstr "Nessuno sfondo" msgid "Shadow" msgstr "Ombra" msgid "Outline" msgstr "Contorno" #, fuzzy msgid "Rectangle background" msgstr "Sfondo preimpostato" msgid "Arc" msgstr "Arco" msgid "Arc options" msgstr "Opzioni arco" msgid "With dashes" msgstr "Con tratti" msgid "Circle options" msgstr "Opzioni cerchio" msgid "Free shape" msgstr "Forma libera" msgid "Shape options" msgstr "Opzioni forma" msgid "Click on the shape's first point to close it." msgstr "Fai clic sul primo punto della forma per chiuderla." msgid "Line" msgstr "Linea" msgid "Line options" msgstr "Opzioni linea" msgid "Paint" msgstr "Dipingi" msgid "Painting options" msgstr "Opzioni pittura" msgid "Click on an area to replace its color by transparency" msgstr "Clicca su un'area per sostituire il suo colore con la trasparenza" msgid "Polygon" msgstr "Poligono" msgid "Polygon options" msgstr "Opzioni poligono" msgid "Pencil" msgstr "Matita" msgid "Pencil options" msgstr "Opzioni matita" msgid "Color Picker" msgstr "Selettore colore" msgid "Rectangle options" msgstr "Opzioni rettangolo" msgid "Text" msgstr "Testo" msgid "Font options" msgstr "Opzioni di testo" msgid "Rectangle selection" msgstr "Selezione rettangolare" msgid "Free selection" msgstr "Selezione libera" msgid "Color selection" msgstr "Selezione colore" msgid "Drag the selection or right-click on the canvas" msgstr "Trascina la selezione o click destro sulla tela" msgid "Select an area or right-click on the canvas" msgstr "Seleziona un'area o click destro sulla tela" msgid "Cropping the selection" msgstr "Ritaglia la selezione" msgid "Cropping the canvas" msgstr "Ritaglia la tela" msgid "Rotating the selection" msgstr "Rotazione della selezione" msgid "Rotating the canvas" msgstr "Rotazione della tela" msgid "Scaling the selection" msgstr "Ridimensionamento della selezione" msgid "Scaling the canvas" msgstr "Ridimensionamento della tela" drawing-0.4.11/po/meson.build000066400000000000000000000000771362211111700160070ustar00rootroot00000000000000i18n.gettext('drawing', args: '--no-location', preset: 'glib') drawing-0.4.11/po/nl.po000066400000000000000000000466121362211111700146230ustar00rootroot00000000000000# Dutch translation of "Drawing" # Copyright (C) 2019 # This file is distributed under the same license as the drawing package. # Heimen Stoffels , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-07-26 12:30+0200\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" "Language: nl_NL\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.3\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Drawing" msgstr "Tekenen" msgid "Simple drawing utility" msgstr "Eenvoudig tekenprogramma" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Verven;Schetsen;Potlood;" msgid "New Window" msgstr "Nieuw venster" msgid "New Image" msgstr "Nieuwe afbeelding" msgid "Edit Image in Clipboard" msgstr "Klembordafbeelding bewerken" msgid "A drawing application for the GNOME desktop" msgstr "Een tekenprogramma voor de GNOME-werkomgeving" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "'Tekenen' is een eenvoudige afbeeldingsbewerker, met ondersteuning voor PNG, " "JPEG en BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Het stelt je in staat om afbeeldingen te tekenen of bewerken met " "gereedschappen, zoals een potlood, lijn, boog (met verschillende " "mogelijkheden), selectie (knippen/kopiëren/plakken/verslepen/…), vormen " "(rechthoek, cirkel, polygoon, …), tekst, herschaling, bijsnijden, draaien, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Versie 0.4.11 bevat verschillende kleine foutoplossingen en nieuwe " "vertalingen." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Versie 0.4.10 bevat verschillende kleine foutoplossingen en nieuwe " "vertalingen." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Versie 0.4.5 bevat verschillende kleine foutoplossingen en nieuwe " "vertalingen." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Versie 0.4.4 bevat verschillende kleine foutoplossingen en nieuwe " "vertalingen." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "Versie 0.4.3 bevat nieuwe vertalingen en is compatibel met oudere distro's " "als Ubuntu 18.04." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Versie 0.4.2 bevat verschillende kleine foutoplossingen en nieuwe " "vertalingen." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "Versie 0.4 heeft een nieuw pictogram, verschillende foutoplossingen, een " "verbeterde werkbalk in alle indelingen, een actie voor het creëren van een " "afbeelding uit de klembordinhoud. een vloeiender potlood en verschillende " "nieuwe vertalingen." msgid "First stable release, including a few basic tools." msgstr "Eerste stabiele uitgave met een paar basisgereedschappen." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Voorkeuren" msgid "Report a bug" msgstr "Meld een fout (bug)" msgid "Shortcuts" msgstr "Sneltoetsen" msgid "Help" msgstr "Hulp" msgid "About" msgstr "Over" msgid "Quit" msgstr "Afsluiten" msgid "_File" msgstr "_Bestand" msgid "New Blank Image" msgstr "Nieuwe lege afbeelding" msgid "New Image With Custom Size" msgstr "Nieuwe afbeelding met aangepaste grootte" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nieuwe afbeelding uit selectie" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nieuwe afbeelding van klembord" msgid "Open an image" msgstr "Afbeelding openen" msgid "Reload file" msgstr "Bestand herladen" msgid "Image properties" msgstr "Eigenschappen" msgid "Save" msgstr "Opslaan" msgid "Save as…" msgstr "Opslaan als…" msgid "Export as…" msgstr "Exporteren als…" msgid "Print" msgstr "Afdrukken" msgid "Close" msgstr "Sluiten" msgid "_Edit" msgstr "B_ewerken" msgid "Undo" msgstr "Ongedaan maken" msgid "Redo" msgstr "Opnieuw" msgid "Select all" msgstr "Alles selecteren" msgid "Cut" msgstr "Knippen" msgid "Copy" msgstr "Kopiëren" msgid "Delete" msgstr "Verwijderen" msgid "Paste" msgstr "Plakken" msgid "Import" msgstr "Importeren" msgid "_View" msgstr "_Beeld" msgid "Optimal Zoom" msgstr "Optimaal zoomen" msgid "Zoom Out" msgstr "Uitzoomen" msgid "Original Zoom" msgstr "Oorspronkelijk zoomniveau" msgid "Zoom In" msgstr "Inzoomen" msgid "Show the preview" msgstr "Voorbeeld tonen" msgid "Refresh" msgstr "Verversen" msgid "Rebuild from history" msgstr "Opnieuw laden uit geschiedenis" msgid "Position" msgstr "Positie" msgid "Go Left" msgstr "Ga naar links" msgid "Go Up" msgstr "Ga omhoog" msgid "Go Down" msgstr "Ga omlaag" msgid "Go Right" msgstr "Ga naar rechts" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Gereedschapsnamen tonen" msgid "_Colors" msgstr "_Kleuren" msgid "Main color" msgstr "Hoofdkleur" msgid "Secondary color" msgstr "Alternatieve kleur" msgid "Exchange colors" msgstr "Kleuren omwisselen" msgid "Color editor by default" msgstr "Standaard kleuren bewerken" msgid "_Tools" msgstr "_Gereedschap" msgid "_Canvas" msgstr "_Canvas" msgid "Previous tool" msgstr "Vorig gereedschap" msgid "_Options" msgstr "_Opties" msgid "_Windows" msgstr "_Vensters" msgid "Quit all windows" msgstr "Alle vensters sluiten" msgid "_Help" msgstr "_Hulp" msgid "Index" msgstr "Index" msgid "Basic help" msgstr "Basale hulp" msgid "Help about tools" msgstr "Hulp over gereedschappen" msgid "Canvas and selection" msgstr "Canvas en selectie" msgid "Help about selection" msgstr "Hulp omtrent selecties" msgid "About Drawing" msgstr "Over Drawing" msgid "Back to the palette" msgstr "Terug naar het palet" msgid "Use this editor by default" msgstr "Gebruik standaard deze bewerker" msgid "Width" msgstr "Breedte" msgid "Height" msgstr "Hoogte" msgid "Background color" msgstr "Achtergrondkleur" msgid "Use these settings by default" msgstr "Deze instellingen standaard gebruiken" msgid "Open" msgstr "Openen" msgid "Images" msgstr "Afbeeldingen" msgid "Tools" msgstr "Gereedschappen" msgid "Advanced options" msgstr "Geavanceerde opties" msgid "Path" msgstr "Pad" msgid "Format" msgstr "Formaat" msgid "Colorspace" msgstr "Kleurruimte" msgid "Unsaved file" msgstr "Niet-opgeslagen bestand" msgid "Invalid format" msgstr "Ongeldig formaat" msgid "pixels" msgstr "pixels" msgid "centimeters" msgstr "centimeter" msgid "inches" msgstr "inch" msgid "Unselect" msgstr "Selectie ongedaan maken" msgid "Flip" msgstr "Omdraaien" msgid "Crop" msgstr "Bijsnijden" msgid "Scale" msgstr "Grootte aanpassen" msgid "Rotate" msgstr "Draaien" msgid "Saturate" msgstr "Verzadigen" msgid "Open As New Image" msgstr "Openen als nieuwe afbeelding" msgid "General" msgstr "Algemeen" msgid "Main menu" msgstr "Hoofdmenu" msgid "Image" msgstr "Afbeelding" msgid "Open a file" msgstr "Bestand openen" msgid "Close the active image" msgstr "Huidige afbeelding sluiten" msgid "Save as" msgstr "Opslaan als" msgid "Edition" msgstr "Bewerking" msgid "Options menu" msgstr "Optiemenu" msgid "Back to previous tool" msgstr "Terug naar vorig gereedschap" msgid "Selection" msgstr "Selectie" msgid "Delete the selection" msgstr "Selectie verwijderen" msgid "Colors" msgstr "Kleuren" msgid "Edit the main color (left click)" msgstr "Hoofdkleur bewerken (linkermuisknop)" msgid "Edit the secondary color (right click)" msgstr "Alternatieve kleur bewerken (rechtermuisknop)" msgid "Navigation" msgstr "Navigatie" msgid "Toggle the preview" msgstr "Voorbeeld tonen/verbergen" msgid "Error starting the application, please report this bug." msgstr "Kan de toepassing niet starten. Meld deze bug." msgid "Tool size" msgstr "Gereedschapsgrootte" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Geen opties" #. none msgid "Preview" msgstr "Voorbeeld" msgid "Troubleshoot selection" msgstr "Problemen oplossen met selecties" msgid "Cancel" msgstr "Annuleren" msgid "Create" msgstr "Maken" msgid "Print the version and display the 'about' dialog" msgstr "Print de versie en toon het venster 'Over'" msgid "Open a new window" msgstr "Nieuw venster openen" msgid "Open a new tab" msgstr "Nieuw tabblad openen" msgid "Edit the clipboard content" msgstr "Klembordinhoud bewerken" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Heimen Stoffels" msgid "A drawing application for the GNOME desktop." msgstr "Een tekenprogramma voor de GNOME-werkomgeving." msgid "Official webpage" msgstr "Officiële website" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Kan dit bestand niet openen. Bedoelde je %s?" #, python-format msgid "Failed to load tool: %s" msgstr "Kan gereedschap niet laden: %s" #, python-format msgid "Loading %s" msgstr "Bezig met laden van %s" msgid "New Tab" msgstr "Nieuw tabblad" msgid "Discard changes" msgstr "Wijzigingen verwerpen" #, python-format msgid "There are unsaved modifications to %s." msgstr "%s bevat niet-opgeslagen wijzigingen." #, python-format msgid "Where do you want to open %s?" msgstr "Waar wil je %s openen?" msgid "Open a picture" msgstr "Afbeeldingen openen" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "deze bestanden" #, python-format msgid "What do you want to do with %s?" msgstr "Wat wil je doen met %s?" msgid "Untitled" msgstr "Naamloos" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "deze afbeelding" msgid "Discard" msgstr "Verwerpen" msgid "Save picture as…" msgstr "Afbeelding opslaan als…" msgid "Import a picture" msgstr "Afbeelding importeren" #, python-format msgid "Undo %s" msgstr "%s ongedaan maken" #, python-format msgid "Redo %s" msgstr "%s opnieuw toepassen" msgid "New images" msgstr "Nieuwe afbeeldingen" msgid "Default width" msgstr "Standaardbreedte" msgid "Default height" msgstr "Standaardhoogte" msgid "Default background" msgstr "Standaardachtergrond" msgid "Images saving" msgstr "Afbeeldingen opslaan" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG- BMP-afbeeldingen kunnen niet omgaan met doorzichtigheid." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Als je afbeeldingen opslaat in deze formaten, wat wil je dan gebruiken om " "doorzichtige pixels te vervangen?" msgid "White" msgstr "Wit" msgid "Black" msgstr "Zwart" msgid "Checkboard" msgstr "Schaakbord" msgid "Nothing" msgstr "Niets" msgid "Ask before saving" msgstr "Vragen alvorens op te slaan" msgid "Use big icons" msgstr "Grote pictogrammen gebruiken" msgid "Preview size" msgstr "Voorbeeldgrootte" msgid "Development features" msgstr "Experimentele functies" msgid "Layout" msgstr "Indeling" msgid "The recommended value is \"Automatic\"." msgstr "De aanbevolen instelling is 'Automatisch'." msgid "Automatic" msgstr "Automatisch" msgid "Compact" msgstr "Compact" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Klassiek" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Klassiek (symbolische pictogrammen)" msgid "Menubar only" msgstr "Alleen menubalk" msgid "Toolbar only" msgstr "Alleen werkbalk" msgid "Toolbar only (symbolic icons)" msgstr "Werkbalk (symbolische pictogrammen)" msgid "This file format doesn't support transparent colors." msgstr "Dit bestandsformaat ondersteunt geen doorzichtige kleuren." msgid "Replace transparency with:" msgstr "Doorzichtigheid vervangen door:" msgid "All pictures" msgstr "Alle afbeeldingen" msgid "PNG images" msgstr "PNG-afbeeldingen" msgid "JPEG images" msgstr "JPEG-afbeeldingen" msgid "BMP images" msgstr "BMP-afbeeldingen" msgid "Transparent" msgstr "Doorzichtig" #, python-format msgid "%s%% transparent" msgstr "%s%% doorzichtig" msgid "Grey" msgstr "Grijs" msgid "Orange" msgstr "Oranje" msgid "Brown" msgstr "Bruin" msgid "Probably brown" msgstr "Waarschijnlijk bruin" msgid "Red" msgstr "Rood" msgid "Green" msgstr "Groen" msgid "Blue" msgstr "Blauw" msgid "Yellow" msgstr "Geel" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Paars" msgid "Cyan" msgstr "Groenblauw" msgid "Probably turquoise" msgstr "Waarschijnlijk turkoois" msgid "Unknown color name" msgstr "Onbekende kleurnaam" msgid "Continue" msgstr "Doorgaan" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "Het gebied lijkt slecht afgemeten of is té complex.\n" "Dit algoritme kan het gekozen gebied mogelijk niet beheren.\n" "\n" "Wil je de handeling afbreken of het gereedschap tevergeefs laten doorgaan?" msgid "percents" msgstr "procent" msgid "Lead shape" msgstr "Hoofdvorm" #. Default values msgid "Round" msgstr "Rond" msgid "Square" msgstr "Vierkant" msgid "Use dashes" msgstr "Streepjes gebruiken" msgid "Arrow" msgstr "Pijl" msgid "Mode" msgstr "Modus" msgid "Classic" msgstr "Klassiek" msgid "Source color" msgstr "Bronkleur" msgid "Eraser" msgstr "Gum" msgid "Difference" msgstr "Verschil" msgid "Shape" msgstr "Vorm" msgid "Oval" msgstr "Ovaal" msgid "Circle" msgstr "Cirkel" msgid "Filling" msgstr "Opvullen" msgid "Empty" msgstr "Leeg" msgid "Filled (main color)" msgstr "Opvullen (hoofdkleur)" msgid "Filled (secondary color)" msgstr "Opvullen (alternatieve kleur)" msgid "Apply" msgstr "Toepassen" msgid "Flip horizontally" msgstr "Horizontaal spiegelen" msgid "Flip vertically" msgstr "Verticaal spiegelen" msgid "Color gradient" msgstr "Kleurverloop" msgid "Behavior" msgstr "Gedrag" msgid "Encircle and fill" msgstr "Omcirkelen en opvullen" msgid "Erase and replace" msgstr "Wissen en vervangen" msgid "Clipping" msgstr "Vasthouden" msgid "Thin" msgstr "Dun" msgid "Artificial smoothness" msgstr "Kunstmatig gladstrijken" msgid "Rectangle" msgstr "Rechthoek" #, fuzzy msgid "Rounded rectangle" msgstr "Rechthoek" msgid "Rotate left" msgstr "Naar links draaien" msgid "Angle (degrees)" msgstr "Hoek (graden)" msgid "Rotate right" msgstr "Naar rechts draaien" msgid "Saturation" msgstr "Verzadiging" msgid "Keep proportions" msgstr "Afmetingen behouden" msgid "Edit" msgstr "Bewerken" msgid "Selection type" msgstr "Selectietype" msgid "Freehand" msgstr "Vrije vorm" msgid "Similar color" msgstr "Vergelijkbare kleur" msgid "Selection options" msgstr "Selectie-opties" msgid "Insert here" msgstr "Hier invoegen" msgid "Font" msgstr "Lettertype" msgid "Italic" msgstr "Cursief" msgid "Bold" msgstr "Vetgedrukt" msgid "Background" msgstr "Achtergrond" msgid "No background" msgstr "Geen achtergrond" msgid "Shadow" msgstr "Kleurschaduw" msgid "Outline" msgstr "Contour" msgid "Rectangle background" msgstr "Rechthoekige achtergrond" msgid "Arc" msgstr "Boog" msgid "Arc options" msgstr "Boogopties" msgid "With dashes" msgstr "Met streepjes" msgid "Circle options" msgstr "Cirkelopties" msgid "Free shape" msgstr "Vrije vorm" msgid "Shape options" msgstr "Vormopties" msgid "Click on the shape's first point to close it." msgstr "Klik op het eerste punt om te sluiten." msgid "Line" msgstr "Lijn" msgid "Line options" msgstr "Lijnopties" msgid "Paint" msgstr "Kwast" msgid "Painting options" msgstr "Kwastopties" msgid "Click on an area to replace its color by transparency" msgstr "" "Klik een gebied aan om de kleur ervan te vervangen door doorzichtigheid" msgid "Polygon" msgstr "Polygoon" msgid "Polygon options" msgstr "Polygoonopties" msgid "Pencil" msgstr "Potlood" msgid "Pencil options" msgstr "Potloodopties" msgid "Color Picker" msgstr "Kleurkiezer" msgid "Rectangle options" msgstr "Rechthoekopties" msgid "Text" msgstr "Tekst" msgid "Font options" msgstr "Lettertype-opties" msgid "Rectangle selection" msgstr "Rechthoekselectie" msgid "Free selection" msgstr "Vrije selectie" msgid "Color selection" msgstr "Kleurselectie" msgid "Drag the selection or right-click on the canvas" msgstr "Versleep de selectie of rechtsklik op het canvas" msgid "Select an area or right-click on the canvas" msgstr "Selecteer een gebied of rechtsklik op het canvas" msgid "Cropping the selection" msgstr "Bezig met bijsnijden van selectie" msgid "Cropping the canvas" msgstr "Bezig met bijsnijden van canvas" msgid "Rotating the selection" msgstr "Bezig met draaien van selectie" msgid "Rotating the canvas" msgstr "Bezig met draaien van canvas" msgid "Scaling the selection" msgstr "Bezig met wijzigen van selectiegrootte" msgid "Scaling the canvas" msgstr "Bezig met wijzigen van canvasgrootte" drawing-0.4.11/po/pl.po000066400000000000000000000426641362211111700146300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # Piotr Komur , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-12-20 12:01+0100\n" "Last-Translator: Piotr Komur \n" "Language-Team: Piotr Komur\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.4\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 " "|| n%100>14) ? 1 : 2);\n" msgid "Drawing" msgstr "" msgid "Simple drawing utility" msgstr "Prosty edytor graficzny" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "" msgid "New Window" msgstr "Nowe okno" msgid "New Image" msgstr "Nowy obraz" msgid "Edit Image in Clipboard" msgstr "Edytuj obraz ze schowka" msgid "A drawing application for the GNOME desktop" msgstr "Program graficzny dla środowiska GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing\" to prosty edytor graficzny wspierający pliki w formacie PNG, " "JPEG i BMP." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Umożliwia rysowanie i edycję obrazów za pomocą takich narzędzi, jak ołówek, " "linie, łuki (z różnymi opcjami), zaznaczanie (wycinanie/kopiowanie/" "wstawianie/przeciąganie/…), kształty (prostokąty, koła, wielokąty, …), " "tekst, wstawianie, zmiana rozmiaru, przycinanie, obrót, …." msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "" msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Preferencje" msgid "Report a bug" msgstr "Zgłoś błąd" msgid "Shortcuts" msgstr "Skróty klawiszowe" msgid "Help" msgstr "Pomoc" msgid "About" msgstr "O programie" msgid "Quit" msgstr "Wyjście" msgid "_File" msgstr "_Plik" msgid "New Blank Image" msgstr "Nowy pusty obraz" msgid "New Image With Custom Size" msgstr "Nowy obraz z własnym rozmiarem" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nowy obraz z zaznaczenia" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nowy obraz ze schowka" msgid "Open an image" msgstr "Otwórz obraz" msgid "Reload file" msgstr "Przeładuj plik" msgid "Image properties" msgstr "Właściwości obrazu" msgid "Save" msgstr "Zapisz" msgid "Save as…" msgstr "Zapisz jako…" msgid "Export as…" msgstr "Eksportuj jako…" msgid "Print" msgstr "Drukuj" #, fuzzy msgid "Close" msgstr "Zamknij obraz" msgid "_Edit" msgstr "_Edytuj" msgid "Undo" msgstr "Cofnij" msgid "Redo" msgstr "Ponów" msgid "Select all" msgstr "Zaznacz wszystko" msgid "Cut" msgstr "Wytnij" msgid "Copy" msgstr "Skopiuj" msgid "Delete" msgstr "Skasuj" msgid "Paste" msgstr "Wstaw" msgid "Import" msgstr "Importuj" msgid "_View" msgstr "_Podgląd" msgid "Optimal Zoom" msgstr "Dopasuj do rozmiaru okna" msgid "Zoom Out" msgstr "Oddal" msgid "Original Zoom" msgstr "Oryginalne powiększenie" msgid "Zoom In" msgstr "Zbliż" msgid "Show the preview" msgstr "Pokaż podgląd" msgid "Refresh" msgstr "Odśwież" msgid "Rebuild from history" msgstr "Przebuduj z historii" msgid "Position" msgstr "Położenie" msgid "Go Left" msgstr "Do lewej" msgid "Go Up" msgstr "Do góry" msgid "Go Down" msgstr "Na dół" msgid "Go Right" msgstr "Do prawej" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Pokaż nazwy narzędzi" msgid "_Colors" msgstr "_Kolory" msgid "Main color" msgstr "Wypełnienie" msgid "Secondary color" msgstr "Kontur z wypełnieniem" msgid "Exchange colors" msgstr "Zamień kolory" msgid "Color editor by default" msgstr "" msgid "_Tools" msgstr "_Narzędzia" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "Poprzednie narzędzie" msgid "_Options" msgstr "_Opcje" msgid "_Windows" msgstr "Ok_na" msgid "Quit all windows" msgstr "Zamknij wszystkie okna" msgid "_Help" msgstr "_Pomoc" msgid "Index" msgstr "Indeks" msgid "Basic help" msgstr "Podstawowa pomoc" msgid "Help about tools" msgstr "Pomoc dla narzędzi" msgid "Canvas and selection" msgstr "Płótno i zaznaczenie" msgid "Help about selection" msgstr "Pomoc dla zaznaczania" msgid "About Drawing" msgstr "O programie" msgid "Back to the palette" msgstr "Wróć do palety" msgid "Use this editor by default" msgstr "" msgid "Width" msgstr "Szerokość" msgid "Height" msgstr "Wysokość" msgid "Background color" msgstr "Kolor tła" msgid "Use these settings by default" msgstr "Użyj tych ustawień domyślnie" msgid "Open" msgstr "Otwórz" msgid "Images" msgstr "Obrazy" msgid "Tools" msgstr "Narzędzia" msgid "Advanced options" msgstr "Opcje zaawansowane" msgid "Path" msgstr "Ścieżka" msgid "Format" msgstr "" msgid "Colorspace" msgstr "Przestrzeń kolorów" msgid "Unsaved file" msgstr "Niezapisany plik" msgid "Invalid format" msgstr "Niewłaściwy format" msgid "pixels" msgstr "punktów" msgid "centimeters" msgstr "centymetrów" msgid "inches" msgstr "cali" msgid "Unselect" msgstr "Odznacz" msgid "Flip" msgstr "" msgid "Crop" msgstr "Przycinanie" msgid "Scale" msgstr "Zmiana rozmiaru" msgid "Rotate" msgstr "Obracanie" #, fuzzy msgid "Saturate" msgstr "Nasycenie" msgid "Open As New Image" msgstr "Otwórz jako nowy obraz" msgid "General" msgstr "Ogólne" msgid "Main menu" msgstr "Menu główne" msgid "Image" msgstr "Obraz" msgid "Open a file" msgstr "Otwórz plik" msgid "Close the active image" msgstr "Zamknij bieżący obraz" msgid "Save as" msgstr "Zapisz jako" #, fuzzy msgid "Edition" msgstr "Edycja" msgid "Options menu" msgstr "" msgid "Back to previous tool" msgstr "Powrót do poprzedniego narzędzia" msgid "Selection" msgstr "Zaznaczanie" msgid "Delete the selection" msgstr "Usuń zaznaczenie" msgid "Colors" msgstr "Kolory" msgid "Edit the main color (left click)" msgstr "Edytuj kolor podstawowy (lewy przycisk myszy)" msgid "Edit the secondary color (right click)" msgstr "Edytuj kolor dodatkowy (prawy przycisk myszy)" msgid "Navigation" msgstr "" msgid "Toggle the preview" msgstr "" msgid "Error starting the application, please report this bug." msgstr "" msgid "Tool size" msgstr "Rozmiar narządzia" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Brak opcji" #. none msgid "Preview" msgstr "Podgląd" msgid "Troubleshoot selection" msgstr "" msgid "Cancel" msgstr "Anuluj" msgid "Create" msgstr "Utwórz" msgid "Print the version and display the 'about' dialog" msgstr "" msgid "Open a new window" msgstr "Otwórz w nowym oknie" msgid "Open a new tab" msgstr "Otwórz w nowej zakładce" msgid "Edit the clipboard content" msgstr "Edytuj zawartość schowka" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Piotr Komur" msgid "A drawing application for the GNOME desktop." msgstr "Program graficzny dla środowiska GNOME." msgid "Official webpage" msgstr "Oficjalna witryna" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "" #, python-format msgid "Failed to load tool: %s" msgstr "" #, python-format msgid "Loading %s" msgstr "" msgid "New Tab" msgstr "Nowa zakładka" msgid "Discard changes" msgstr "Porzuć zmiany" #, python-format msgid "There are unsaved modifications to %s." msgstr "Zmiany nie zostały zapisane dla %s." #, python-format msgid "Where do you want to open %s?" msgstr "" msgid "Open a picture" msgstr "" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "" #, python-format msgid "What do you want to do with %s?" msgstr "" msgid "Untitled" msgstr "Be tytułu" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "" msgid "Discard" msgstr "Porzuć" msgid "Save picture as…" msgstr "Zapisz obraz jako…" msgid "Import a picture" msgstr "Importuj obraz" #, python-format msgid "Undo %s" msgstr "Cofnij %s" #, python-format msgid "Redo %s" msgstr "Ponów %s" msgid "New images" msgstr "Nowe obrazy" msgid "Default width" msgstr "Domyślna szerokość" msgid "Default height" msgstr "Domyślna wysokość" msgid "Default background" msgstr "Domyślne tło" msgid "Images saving" msgstr "Zapisywanie obrazów" msgid "JPEG and BMP images can't handle transparency." msgstr "Format JPEG/JPG i BMP nie wpiera przeźroczystości tła." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Wybierz, co zrobić z przeźroczystymi punktami obrazu, dla wymienionych " "formatów." msgid "White" msgstr "Biały" msgid "Black" msgstr "Czarny" msgid "Checkboard" msgstr "Szachownica" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "Zapytaj przed zapisaniem" msgid "Use big icons" msgstr "Użyj dużych ikon" msgid "Preview size" msgstr "Rozmiar podglądu" msgid "Development features" msgstr "Funkcje rozwojowe" msgid "Layout" msgstr "Układ" msgid "The recommended value is \"Automatic\"." msgstr "Zalecany układ to 'Automatyczny'." msgid "Automatic" msgstr "Automatyczny" msgid "Compact" msgstr "Kompaktowy" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "" msgid "Menubar only" msgstr "Tylko pasek menu" msgid "Toolbar only" msgstr "Tylko pasek narzędzi" msgid "Toolbar only (symbolic icons)" msgstr "Tylko pasek narzędzi (ikony symboliczne)" msgid "This file format doesn't support transparent colors." msgstr "Ten format nie wspiera przeźroczystego koloru." msgid "Replace transparency with:" msgstr "" msgid "All pictures" msgstr "Wszystkie obrazy" msgid "PNG images" msgstr "Obrazy PNG" msgid "JPEG images" msgstr "Obrazy JPG" msgid "BMP images" msgstr "Obrazy BMP" msgid "Transparent" msgstr "Przeźroczysty" #, python-format msgid "%s%% transparent" msgstr "" msgid "Grey" msgstr "Szary" msgid "Orange" msgstr "Pomarańczowy" msgid "Brown" msgstr "Brązowy" msgid "Probably brown" msgstr "" msgid "Red" msgstr "Czerwony" msgid "Green" msgstr "Zielony" msgid "Blue" msgstr "Niebieski" msgid "Yellow" msgstr "Żółty" msgid "Magenta" msgstr "" msgid "Purple" msgstr "Purpurowy" msgid "Cyan" msgstr "Cyjan" msgid "Probably turquoise" msgstr "" msgid "Unknown color name" msgstr "Nieznana nazwa koloru" msgid "Continue" msgstr "" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "procent" msgid "Lead shape" msgstr "Kształt" #. Default values msgid "Round" msgstr "Okrągły" msgid "Square" msgstr "Kwadratowy" msgid "Use dashes" msgstr "Kreskowanie" msgid "Arrow" msgstr "Strzałka" msgid "Mode" msgstr "Tryb" msgid "Classic" msgstr "Zwykły" msgid "Source color" msgstr "Aktywny kolor" msgid "Eraser" msgstr "Gumka" msgid "Difference" msgstr "Różnica" msgid "Shape" msgstr "Kształt" msgid "Oval" msgstr "Owal" msgid "Circle" msgstr "Koło" msgid "Filling" msgstr "" msgid "Empty" msgstr "Pusty" #, fuzzy msgid "Filled (main color)" msgstr "Wypełnienie" #, fuzzy msgid "Filled (secondary color)" msgstr "Kontur z wypełnieniem" msgid "Apply" msgstr "Zastosuj" msgid "Flip horizontally" msgstr "Odbij poziomo" msgid "Flip vertically" msgstr "Odbij pionowo" msgid "Color gradient" msgstr "Gradient koloru" msgid "Behavior" msgstr "" msgid "Encircle and fill" msgstr "" msgid "Erase and replace" msgstr "" msgid "Clipping" msgstr "" msgid "Thin" msgstr "Cienki" msgid "Artificial smoothness" msgstr "Sztuczne wygładzenie" msgid "Rectangle" msgstr "Prostokąt" #, fuzzy msgid "Rounded rectangle" msgstr "Prostokąt" msgid "Rotate left" msgstr "Obróć w lewo" msgid "Angle (degrees)" msgstr "Kąt (stopnie)" msgid "Rotate right" msgstr "Obróć w prawo" msgid "Saturation" msgstr "Nasycenie" #, fuzzy msgid "Keep proportions" msgstr "Zachowaj proporcje" msgid "Edit" msgstr "" #, fuzzy msgid "Selection type" msgstr "Zaznaczanie" #, fuzzy msgid "Freehand" msgstr "Dowolny kształt" #, fuzzy msgid "Similar color" msgstr "Kontur z wypełnieniem" #, fuzzy msgid "Selection options" msgstr "Opcje ołówka" msgid "Insert here" msgstr "Wstaw tutaj" msgid "Font" msgstr "Czcionka" msgid "Italic" msgstr "Pochylenie" msgid "Bold" msgstr "Pogrubienie" msgid "Background" msgstr "Tło" msgid "No background" msgstr "Brak" msgid "Shadow" msgstr "Cień" msgid "Outline" msgstr "" #, fuzzy msgid "Rectangle background" msgstr "Domyślne tło" msgid "Arc" msgstr "" #, fuzzy msgid "Arc options" msgstr "Więcej opcji" #, fuzzy msgid "With dashes" msgstr "Kreskowanie" #, fuzzy msgid "Circle options" msgstr "Opcje krzywej" msgid "Free shape" msgstr "Dowolny kształt" msgid "Shape options" msgstr "Opcje kształtu" msgid "Click on the shape's first point to close it." msgstr "Kliknij pierwszy punkt kształtu, aby zakończyć." msgid "Line" msgstr "Linia" msgid "Line options" msgstr "Opcje linii" msgid "Paint" msgstr "Malowanie" msgid "Painting options" msgstr "Opcje malowania" msgid "Click on an area to replace its color by transparency" msgstr "" msgid "Polygon" msgstr "Wielokąt" #, fuzzy msgid "Polygon options" msgstr "Opcje tekstu" msgid "Pencil" msgstr "Ołówek" msgid "Pencil options" msgstr "Opcje ołówka" msgid "Color Picker" msgstr "Wybór koloru" #, fuzzy msgid "Rectangle options" msgstr "Zaznaczanie (prostokątem)" msgid "Text" msgstr "Tekst" msgid "Font options" msgstr "Opcje tekstu" msgid "Rectangle selection" msgstr "Zaznaczanie (prostokątem)" msgid "Free selection" msgstr "Zaznaczanie (dowolne)" msgid "Color selection" msgstr "Zaznaczanie koloru" msgid "Drag the selection or right-click on the canvas" msgstr "" msgid "Select an area or right-click on the canvas" msgstr "" msgid "Cropping the selection" msgstr "Przycinanie zaznaczenia" msgid "Cropping the canvas" msgstr "Przycinanie płótna" msgid "Rotating the selection" msgstr "Obracanie zaznaczenia" msgid "Rotating the canvas" msgstr "Obracanie płótna" msgid "Scaling the selection" msgstr "Skalowanie zaznaczenia" msgid "Scaling the canvas" msgstr "Skalowanie płótna" drawing-0.4.11/po/pt_BR.po000066400000000000000000000454571362211111700152260ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # Antonio Hauren , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-07-31 11:08-0300\n" "Last-Translator: Antonio Hauren \n" "Language-Team: Portuguese - Brazil \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: Gtranslator 3.32.1\n" msgid "Drawing" msgstr "Drawing" msgid "Simple drawing utility" msgstr "Ferramenta de desenho simples" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Pintura;Esboço;Lápis;" msgid "New Window" msgstr "Nova janela" msgid "New Image" msgstr "Nova Imagem" msgid "Edit Image in Clipboard" msgstr "Editar imagem do clipboard" msgid "A drawing application for the GNOME desktop" msgstr "Uma aplicação de desenho para o ambiente GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing\" é um simples editor de imagens, que suporta arquivos PNG,JPEG e " "BMP" msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Deixa você desenhar ou editar imagens com ferramentas como lápis, linha ou " "arco (com diversas opções), seleção (corta/copia/cola/arrasta/…), formas " "(retângulo, circulo, polígono, …), inserir texto, redimensionar, aparar, " "rotacionar, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "A versão 0.4.11 apresenta diversas correções de erros e várias traduções." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "A versão 0.4.10 apresenta diversas correções de erros e várias traduções." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "A versão 0.4.5 apresenta diversas correções de erros e várias traduções." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "A versão 0.4.4 apresenta diversas correções de erros e várias traduções." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "A versão 0.4.3 inclúi novas traduções, e é compatível com distribuições " "antigas como o Ubuntu 18.04 LTS." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "A versão 0.4.2 apresenta diversas correções de erros e várias traduções." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "A versão 0.4 chega com um novo ícone, inúmeras correções, uma barra de " "ferramentas melhorada para os leiautes \"tradicional\" e \"somente barra" "\" , a possibilidade de criar imagens do conteúdo da área de transferência, " "um lápis melhorado e diversas novas traduções." msgid "First stable release, including a few basic tools." msgstr "Primeira versão estável, incluindo ferramentas básicas" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Preferências" msgid "Report a bug" msgstr "Reportar um bug" msgid "Shortcuts" msgstr "Atalhos" msgid "Help" msgstr "Ajuda" msgid "About" msgstr "Sobre" msgid "Quit" msgstr "Sair" msgid "_File" msgstr "_Arquivo" msgid "New Blank Image" msgstr "Nova imagem em branco" #, fuzzy msgid "New Image With Custom Size" msgstr "Nova imagem da seleção" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Nova imagem da seleção" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Nova imagem do clipboard" msgid "Open an image" msgstr "Abrir uma imagem" msgid "Reload file" msgstr "Recarregar Arquivo" msgid "Image properties" msgstr "Propiedades da imagem" msgid "Save" msgstr "Salvar" msgid "Save as…" msgstr "Salvar como…" msgid "Export as…" msgstr "Exportar como…" msgid "Print" msgstr "Imprimir" msgid "Close" msgstr "Fechar" msgid "_Edit" msgstr "_Editar" msgid "Undo" msgstr "Desfazer" msgid "Redo" msgstr "Refazer" msgid "Select all" msgstr "Selecionar tudo" msgid "Cut" msgstr "Cortar" msgid "Copy" msgstr "Copiar" msgid "Delete" msgstr "Deletar" msgid "Paste" msgstr "Colar" msgid "Import" msgstr "Importar" msgid "_View" msgstr "_Vista" msgid "Optimal Zoom" msgstr "Zoom ótico" msgid "Zoom Out" msgstr "Reduzir zoom" msgid "Original Zoom" msgstr "Zoom original" msgid "Zoom In" msgstr "Aumentar zoom" msgid "Show the preview" msgstr "Mostrar preview" msgid "Refresh" msgstr "Atualizar" msgid "Rebuild from history" msgstr "Refazer do histórico" msgid "Position" msgstr "Posição" msgid "Go Left" msgstr "Ir para esquerda" msgid "Go Up" msgstr "Ir para cima" msgid "Go Down" msgstr "Ir para baixo" msgid "Go Right" msgstr "Ir para direita" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Mostrar nome das ferramentas" msgid "_Colors" msgstr "_Cores" msgid "Main color" msgstr "Cor primária" msgid "Secondary color" msgstr "Cor secundária" msgid "Exchange colors" msgstr "Trocar cores" msgid "Color editor by default" msgstr "Cores padrão" msgid "_Tools" msgstr "_Ferramentas" msgid "_Canvas" msgstr "_Tela" msgid "Previous tool" msgstr "Ferramenta anterior" msgid "_Options" msgstr "_Opções" msgid "_Windows" msgstr "_Janelas" msgid "Quit all windows" msgstr "Fechar todas as janelas" msgid "_Help" msgstr "_Ajuda" msgid "Index" msgstr "Índice" msgid "Basic help" msgstr "Ajuda básica" msgid "Help about tools" msgstr "Ajuda sobre as ferramentas" msgid "Canvas and selection" msgstr "Tela e seleção" msgid "Help about selection" msgstr "Ajuda sobre seleção" msgid "About Drawing" msgstr "Sobre o drawing" msgid "Back to the palette" msgstr "Voltar para a paleta" msgid "Use this editor by default" msgstr "Usar esse editor por padrão" msgid "Width" msgstr "Largura" msgid "Height" msgstr "Altura" #, fuzzy msgid "Background color" msgstr "Fundo" #, fuzzy msgid "Use these settings by default" msgstr "Usar esse editor por padrão" msgid "Open" msgstr "Abrir" msgid "Images" msgstr "Imagens" msgid "Tools" msgstr "Ferramentas" msgid "Advanced options" msgstr "Opções avançadas" msgid "Path" msgstr "Caminho" msgid "Format" msgstr "Formatar" #, fuzzy msgid "Colorspace" msgstr "Cores" msgid "Unsaved file" msgstr "Arquivo não salvo" msgid "Invalid format" msgstr "Formato inválido" msgid "pixels" msgstr "Pixeis" msgid "centimeters" msgstr "Centímetros" msgid "inches" msgstr "Polegadas" msgid "Unselect" msgstr "Desselecionar" msgid "Flip" msgstr "Virar" msgid "Crop" msgstr "Cortar" msgid "Scale" msgstr "Escala" msgid "Rotate" msgstr "Rotacionar" msgid "Saturate" msgstr "Saturção" msgid "Open As New Image" msgstr "Abrir como uma nova imagem" msgid "General" msgstr "Geral" msgid "Main menu" msgstr "Menu principal" msgid "Image" msgstr "Imagem" msgid "Open a file" msgstr "Abrir um arquivo" msgid "Close the active image" msgstr "Fechar a imagem ativa" msgid "Save as" msgstr "Salvar como" msgid "Edition" msgstr "Edição" msgid "Options menu" msgstr "Menu de opções" msgid "Back to previous tool" msgstr "Voltar para última ferramenta" msgid "Selection" msgstr "Seleção" msgid "Delete the selection" msgstr "Deletar seleção" msgid "Colors" msgstr "Cores" msgid "Edit the main color (left click)" msgstr "Mudar cor principal (clique esquerdo)" msgid "Edit the secondary color (right click)" msgstr "Mudar cor secundária (clique direito)" msgid "Navigation" msgstr "Navegação" msgid "Toggle the preview" msgstr "Alternar a pre visualização" msgid "Error starting the application, please report this bug." msgstr "Erro ao iniciar o aplicativo, por favor reportar o bug." msgid "Tool size" msgstr "Ferramenta de tamanho" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Sem opções" #. none msgid "Preview" msgstr "Previsualizar" msgid "Troubleshoot selection" msgstr "Resolver problemas de seleção" msgid "Cancel" msgstr "Cancelar" msgid "Create" msgstr "" msgid "Print the version and display the 'about' dialog" msgstr "Mostrar versão e a janela 'sobre'" msgid "Open a new window" msgstr "Abrir uma nova janela" msgid "Open a new tab" msgstr "Abrir uma nova aba" msgid "Edit the clipboard content" msgstr "Editar conteúdo do clipboard" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "" "Antonio Hauren\n" "Luís Fernando Stürmer da Rosa" msgid "A drawing application for the GNOME desktop." msgstr "Uma aplicação de desenho para o ambiente GNOME" msgid "Official webpage" msgstr "Página oficial" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Erro ao abrir este arquivo. Você quis dizer %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Falha ao carregar a ferramenta: %s" #, python-format msgid "Loading %s" msgstr "Carregando %s" msgid "New Tab" msgstr "Nova aba" msgid "Discard changes" msgstr "Descartar alterações" #, python-format msgid "There are unsaved modifications to %s." msgstr "Há mudancas não salvas em %s." #, python-format msgid "Where do you want to open %s?" msgstr "Onde você quer abrir %s?" msgid "Open a picture" msgstr "Abrir uma imagem" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "estes arquivos" #, python-format msgid "What do you want to do with %s?" msgstr "O quê você quer fazer com %s?" msgid "Untitled" msgstr "Sem título" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "essa imagem" msgid "Discard" msgstr "Descartar" msgid "Save picture as…" msgstr "Salvar imagem como…" msgid "Import a picture" msgstr "Importar uma imagem" #, python-format msgid "Undo %s" msgstr "Desfazer %s" #, python-format msgid "Redo %s" msgstr "Refazer %s" msgid "New images" msgstr "Novas imagens" msgid "Default width" msgstr "Largura padrão" msgid "Default height" msgstr "Altura padrão" msgid "Default background" msgstr "Fundo padrão" #, fuzzy msgid "Images saving" msgstr "Imagens" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" msgid "White" msgstr "" msgid "Black" msgstr "" msgid "Checkboard" msgstr "" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "" msgid "Use big icons" msgstr "Usar ícones grandes" msgid "Preview size" msgstr "Previsualizar tamanho" msgid "Development features" msgstr "Características de desenvolvimento" msgid "Layout" msgstr "Disposição" msgid "The recommended value is \"Automatic\"." msgstr "" msgid "Automatic" msgstr "Automático" msgid "Compact" msgstr "Compacto" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Tradicional" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Tradicional (simples)" msgid "Menubar only" msgstr "Apenas barra de menu" msgid "Toolbar only" msgstr "Apenas barra de ferramentas" msgid "Toolbar only (symbolic icons)" msgstr "Barra de ferramentas (simples)" msgid "This file format doesn't support transparent colors." msgstr "" msgid "Replace transparency with:" msgstr "" msgid "All pictures" msgstr "Todas as imagens" msgid "PNG images" msgstr "Imagens PNG" msgid "JPEG images" msgstr "Imagens JPEG" msgid "BMP images" msgstr "Imagens BMP" msgid "Transparent" msgstr "" #, python-format msgid "%s%% transparent" msgstr "" msgid "Grey" msgstr "" msgid "Orange" msgstr "" msgid "Brown" msgstr "" msgid "Probably brown" msgstr "" msgid "Red" msgstr "" msgid "Green" msgstr "" msgid "Blue" msgstr "" msgid "Yellow" msgstr "" msgid "Magenta" msgstr "" msgid "Purple" msgstr "" msgid "Cyan" msgstr "" msgid "Probably turquoise" msgstr "" msgid "Unknown color name" msgstr "" msgid "Continue" msgstr "Continuar" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "Essa area parece mal delimitada, ou e muito complexa.\n" "Esse algoritmo pode não ser capaz de gerir a area desejada.\n" "\n" "Voce deseja cancelar essa operacao, ou deixar a ferramenta tentar ?" msgid "percents" msgstr "" msgid "Lead shape" msgstr "Forma" #. Default values msgid "Round" msgstr "Arredondada" msgid "Square" msgstr "Quadrada" msgid "Use dashes" msgstr "Usar traços" msgid "Arrow" msgstr "Flecha" msgid "Mode" msgstr "Modo" msgid "Classic" msgstr "Clássico" msgid "Source color" msgstr "Cor de origem" msgid "Eraser" msgstr "Borracha" msgid "Difference" msgstr "Diferença" msgid "Shape" msgstr "Forma" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Circulo" msgid "Filling" msgstr "Preenchimento" msgid "Empty" msgstr "Vazio" msgid "Filled (main color)" msgstr "Preenchimento (Cor primaria)" msgid "Filled (secondary color)" msgstr "Preenchimento (Cor secundaria)" msgid "Apply" msgstr "Aplicar" msgid "Flip horizontally" msgstr "Inverter horizontalmente" msgid "Flip vertically" msgstr "Inverter verticalmente" msgid "Color gradient" msgstr "Gradiente de cor" msgid "Behavior" msgstr "Comportamento" msgid "Encircle and fill" msgstr "Cercar e preencher" msgid "Erase and replace" msgstr "Apagar e substituir" msgid "Clipping" msgstr "Recorte" msgid "Thin" msgstr "Fino" #, fuzzy msgid "Artificial smoothness" msgstr "Suavizante artificial" msgid "Rectangle" msgstr "Retângulo" #, fuzzy msgid "Rounded rectangle" msgstr "Retângulo" msgid "Rotate left" msgstr "Girar para esquerda" msgid "Angle (degrees)" msgstr "Ângulo (graus)" msgid "Rotate right" msgstr "Girar para direita" msgid "Saturation" msgstr "Saturação" msgid "Keep proportions" msgstr "Manter proporções" msgid "Edit" msgstr "Editar" msgid "Selection type" msgstr "Tipo de seleção" msgid "Freehand" msgstr "Mão livre" msgid "Similar color" msgstr "Cor semelhante" msgid "Selection options" msgstr "Opções da seleção" msgid "Insert here" msgstr "Inserir aqui" msgid "Font" msgstr "Fonte" msgid "Italic" msgstr "Itálico" msgid "Bold" msgstr "Negrito" msgid "Background" msgstr "Fundo" msgid "No background" msgstr "Sem fundo" msgid "Shadow" msgstr "Sombra" msgid "Outline" msgstr "" #, fuzzy msgid "Rectangle background" msgstr "Fundo padrão" msgid "Arc" msgstr "Arco" msgid "Arc options" msgstr "Opções de arco" msgid "With dashes" msgstr "Com traços" msgid "Circle options" msgstr "Opções do circulo" msgid "Free shape" msgstr "Forma livre" msgid "Shape options" msgstr "Opções da forma" msgid "Click on the shape's first point to close it." msgstr "Clique no primeiro ponto da forma para fechá-la" msgid "Line" msgstr "Linha" msgid "Line options" msgstr "Opções da linha" msgid "Paint" msgstr "Pintura" msgid "Painting options" msgstr "Opções da pintura" msgid "Click on an area to replace its color by transparency" msgstr "Clique em uma área para substituir a cor por transparência" msgid "Polygon" msgstr "Polígono" msgid "Polygon options" msgstr "Opções do polígono" msgid "Pencil" msgstr "Lápis" msgid "Pencil options" msgstr "Opções do lápis" msgid "Color Picker" msgstr "Conta gotas" msgid "Rectangle options" msgstr "Opções de retângulo" msgid "Text" msgstr "Texto" msgid "Font options" msgstr "Opções de fonte" msgid "Rectangle selection" msgstr "Seleção em retângulo" msgid "Free selection" msgstr "Seleção livre" msgid "Color selection" msgstr "Seleção de cor" msgid "Drag the selection or right-click on the canvas" msgstr "Arraste a seleção ou o botão direito na tela" msgid "Select an area or right-click on the canvas" msgstr "Selecione uma área ou botão direito na tela" msgid "Cropping the selection" msgstr "Recortar a seleção" msgid "Cropping the canvas" msgstr "Recortar a tela" msgid "Rotating the selection" msgstr "Girar a seleção" msgid "Rotating the canvas" msgstr "Girando a tela" msgid "Scaling the selection" msgstr "Redimensionar a seleção" msgid "Scaling the canvas" msgstr "Redimensionar a tela" drawing-0.4.11/po/ru.po000066400000000000000000000473641362211111700146450ustar00rootroot00000000000000# Russian translation of drawing. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # Artem Polishchuk , 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-05-06 22:22+0300\n" "Last-Translator: Artem Polishchuk \n" "Language-Team: \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.1\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" msgid "Drawing" msgstr "" msgid "Simple drawing utility" msgstr "Простой инструмент для рисования" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "" msgid "New Window" msgstr "Новое окно" msgid "New Image" msgstr "Новое изображение" msgid "Edit Image in Clipboard" msgstr "" msgid "A drawing application for the GNOME desktop" msgstr "Гафический редактор для рабочего стола GNOME" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "" msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Параметры" msgid "Report a bug" msgstr "Сообщить об ошибке" msgid "Shortcuts" msgstr "Комбинации клавиш" msgid "Help" msgstr "Справка" msgid "About" msgstr "О приложении" msgid "Quit" msgstr "Завершить" msgid "_File" msgstr "_Файл\t" #, fuzzy msgid "New Blank Image" msgstr "Новое изображение" msgid "New Image With Custom Size" msgstr "" #. you can omit the "New image" in the translation #, fuzzy msgid "New Image From Selection" msgstr "Прямоугольное выделение" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "" msgid "Open an image" msgstr "Открыть изображение" msgid "Reload file" msgstr "" msgid "Image properties" msgstr "Свойства изображения" msgid "Save" msgstr "Сохранить" msgid "Save as…" msgstr "Сохранить как…" msgid "Export as…" msgstr "Экспортировать как…" msgid "Print" msgstr "Печать" msgid "Close" msgstr "Закрыть" msgid "_Edit" msgstr "_Правка" msgid "Undo" msgstr "Отменить" msgid "Redo" msgstr "Вернуть" msgid "Select all" msgstr "Выбрать все" msgid "Cut" msgstr "Вырезать" msgid "Copy" msgstr "Копировать" msgid "Delete" msgstr "Удалить" msgid "Paste" msgstr "Вставить" msgid "Import" msgstr "Импортировать" msgid "_View" msgstr "_Вид" msgid "Optimal Zoom" msgstr "" msgid "Zoom Out" msgstr "" msgid "Original Zoom" msgstr "" msgid "Zoom In" msgstr "" msgid "Show the preview" msgstr "Предварительный просмотр" msgid "Refresh" msgstr "Обновить" msgid "Rebuild from history" msgstr "" #, fuzzy msgid "Position" msgstr "Издание" msgid "Go Left" msgstr "" msgid "Go Up" msgstr "" msgid "Go Down" msgstr "" msgid "Go Right" msgstr "" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Показать названия инструментов" msgid "_Colors" msgstr "_Цвета\t" msgid "Main color" msgstr "Основной цвет" msgid "Secondary color" msgstr "Вторичный цвет" msgid "Exchange colors" msgstr "Поменять цвета" msgid "Color editor by default" msgstr "" msgid "_Tools" msgstr "_Инструменты" msgid "_Canvas" msgstr "_Холст" msgid "Previous tool" msgstr "Предыдущий инструмент" msgid "_Options" msgstr "_Опции" msgid "_Windows" msgstr "О_кна" msgid "Quit all windows" msgstr "Закрыть все окна" msgid "_Help" msgstr "_Справка" msgid "Index" msgstr "" msgid "Basic help" msgstr "" msgid "Help about tools" msgstr "" msgid "Canvas and selection" msgstr "" msgid "Help about selection" msgstr "" msgid "About Drawing" msgstr "О Drawing" msgid "Back to the palette" msgstr "Назад к палитре" msgid "Use this editor by default" msgstr "Использовать этот редактор по умолчанию" msgid "Width" msgstr "Ширина" msgid "Height" msgstr "Высота" msgid "Background color" msgstr "" #, fuzzy msgid "Use these settings by default" msgstr "Использовать этот редактор по умолчанию" msgid "Open" msgstr "Открыть" #, fuzzy msgid "Images" msgstr "Изображение" #, fuzzy msgid "Tools" msgstr "_Инструменты" #, fuzzy msgid "Advanced options" msgstr "Варианты дуги" msgid "Path" msgstr "Путь" msgid "Format" msgstr "Формат" #, fuzzy msgid "Colorspace" msgstr "Цвета" msgid "Unsaved file" msgstr "Несохраненный файл" msgid "Invalid format" msgstr "Неверный формат" msgid "pixels" msgstr "пиксели" msgid "centimeters" msgstr "сантиметры" msgid "inches" msgstr "дюймы" msgid "Unselect" msgstr "Снять выделение" msgid "Flip" msgstr "Перевернуть" msgid "Crop" msgstr "Обрезать" msgid "Scale" msgstr "Масштаб" msgid "Rotate" msgstr "Повернуть" msgid "Saturate" msgstr "Насыщенность" #, fuzzy msgid "Open As New Image" msgstr "Новое изображение" msgid "General" msgstr "Общие" msgid "Main menu" msgstr "Главное меню" msgid "Image" msgstr "Изображение" msgid "Open a file" msgstr "Открыть файл" msgid "Close the active image" msgstr "Закрыть активное изображение" msgid "Save as" msgstr "Сохранить как" msgid "Edition" msgstr "Издание" msgid "Options menu" msgstr "Меню параметров" msgid "Back to previous tool" msgstr "Вернуться к предыдущему инструменту" msgid "Selection" msgstr "Выделение" #, fuzzy msgid "Delete the selection" msgstr "Масштабировать выделенное" msgid "Colors" msgstr "Цвета" msgid "Edit the main color (left click)" msgstr "Редактирование основного цвета (щелчок левой кнопкой мыши)" msgid "Edit the secondary color (right click)" msgstr "Редактирование вторичного цвета (щелчок правой кнопкой мыши)" msgid "Navigation" msgstr "Навигация" msgid "Toggle the preview" msgstr "Переключить предварительный просмотр" msgid "Error starting the application, please report this bug." msgstr "Ошибка при запуске приложения, пожалуйста, сообщите об этой ошибке." msgid "Tool size" msgstr "Размер инструмента" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "" #. none msgid "Preview" msgstr "Предпросмотр" #, fuzzy msgid "Troubleshoot selection" msgstr "Выбор цвета" msgid "Cancel" msgstr "Отмена" msgid "Create" msgstr "" msgid "Print the version and display the 'about' dialog" msgstr "" msgid "Open a new window" msgstr "Открыть новое окно" msgid "Open a new tab" msgstr "Открыть новую вкладку" msgid "Edit the clipboard content" msgstr "" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Artem Polishchuk , 2019." msgid "A drawing application for the GNOME desktop." msgstr "Гафический редактор для рабочего стола GNOME." msgid "Official webpage" msgstr "" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Ошибка при открытии файла. Вы имели в виду %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "" #, python-format msgid "Loading %s" msgstr "Загрузка %s" msgid "New Tab" msgstr "Новая вкладка" msgid "Discard changes" msgstr "Отменить изменения" #, python-format msgid "There are unsaved modifications to %s." msgstr "Несохраненные изменения в %s." #, python-format msgid "Where do you want to open %s?" msgstr "Где вы хотите открыть %s?" msgid "Open a picture" msgstr "Открыть изображение" #. Context for translation: #. "What do you want to do with *these files*?" #, fuzzy msgid "these files" msgstr "Несохраненный файл" #, fuzzy, python-format msgid "What do you want to do with %s?" msgstr "Где вы хотите открыть %s?" msgid "Untitled" msgstr "Без названия" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "это изображение" msgid "Discard" msgstr "Сбросить" msgid "Save picture as…" msgstr "Сохранить изображение как…" msgid "Import a picture" msgstr "Импорт изображения" #, fuzzy, python-format msgid "Undo %s" msgstr "Отменить" #, fuzzy, python-format msgid "Redo %s" msgstr "Вернуть" msgid "New images" msgstr "Новые изображения" msgid "Default width" msgstr "Ширина по умолчанию" msgid "Default height" msgstr "Высота по умолчанию" msgid "Default background" msgstr "Фон по умолчанию" #, fuzzy msgid "Images saving" msgstr "Изображение" msgid "JPEG and BMP images can't handle transparency." msgstr "" msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" msgid "White" msgstr "" msgid "Black" msgstr "" msgid "Checkboard" msgstr "" msgid "Nothing" msgstr "" msgid "Ask before saving" msgstr "" msgid "Use big icons" msgstr "" msgid "Preview size" msgstr "Размер предварительного просмотра" msgid "Development features" msgstr "" msgid "Layout" msgstr "Раскладка" msgid "The recommended value is \"Automatic\"." msgstr "" msgid "Automatic" msgstr "Автоматический" msgid "Compact" msgstr "Компактный" msgid "elementary OS" msgstr "" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Старый" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "" msgid "Menubar only" msgstr "Только панель меню" msgid "Toolbar only" msgstr "Только панель инструментов" msgid "Toolbar only (symbolic icons)" msgstr "" msgid "This file format doesn't support transparent colors." msgstr "" msgid "Replace transparency with:" msgstr "" msgid "All pictures" msgstr "Все изображения" msgid "PNG images" msgstr "Изображения PNG" msgid "JPEG images" msgstr "Изображения JPEG" msgid "BMP images" msgstr "Изображения BMP" msgid "Transparent" msgstr "" #, python-format msgid "%s%% transparent" msgstr "" msgid "Grey" msgstr "" msgid "Orange" msgstr "" msgid "Brown" msgstr "" msgid "Probably brown" msgstr "" msgid "Red" msgstr "" msgid "Green" msgstr "" msgid "Blue" msgstr "" msgid "Yellow" msgstr "" msgid "Magenta" msgstr "" msgid "Purple" msgstr "" msgid "Cyan" msgstr "" msgid "Probably turquoise" msgstr "" msgid "Unknown color name" msgstr "" msgid "Continue" msgstr "Продолжить" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "" msgid "Lead shape" msgstr "" #. Default values msgid "Round" msgstr "Круглый" msgid "Square" msgstr "Квадратный" msgid "Use dashes" msgstr "Использовать тире" msgid "Arrow" msgstr "Указатель" msgid "Mode" msgstr "Режим" msgid "Classic" msgstr "Классический" msgid "Source color" msgstr "Цвет источника" msgid "Eraser" msgstr "Ластик" msgid "Difference" msgstr "Различия" msgid "Shape" msgstr "Фигура" msgid "Oval" msgstr "Овальный" msgid "Circle" msgstr "Круг" msgid "Filling" msgstr "Заполнение" msgid "Empty" msgstr "Пустой" msgid "Filled (main color)" msgstr "Заполнение (основной цвет)" msgid "Filled (secondary color)" msgstr "Заполнение (вторичный цвет)" msgid "Apply" msgstr "Применить" msgid "Flip horizontally" msgstr "Перевернуть по горизонтали" msgid "Flip vertically" msgstr "Перевернуть по вертикали" #, fuzzy msgid "Color gradient" msgstr "Выбор цвета" msgid "Behavior" msgstr "" msgid "Encircle and fill" msgstr "Окружить и заполнить" msgid "Erase and replace" msgstr "Стереть и заменить" msgid "Clipping" msgstr "" msgid "Thin" msgstr "Тонкий" msgid "Artificial smoothness" msgstr "" msgid "Rectangle" msgstr "Прямоугольник" #, fuzzy msgid "Rounded rectangle" msgstr "Прямоугольник" msgid "Rotate left" msgstr "Повернуть влево" msgid "Angle (degrees)" msgstr "Угол (градусы)" msgid "Rotate right" msgstr "Повернуть вправо" msgid "Saturation" msgstr "Насыщенность" msgid "Keep proportions" msgstr "Сохранять пропорции" msgid "Edit" msgstr "Правка" msgid "Selection type" msgstr "Тип выбора" msgid "Freehand" msgstr "Свободно" msgid "Similar color" msgstr "Подобный цвет" msgid "Selection options" msgstr "Варианты выделения" msgid "Insert here" msgstr "Вставить сюда" msgid "Font" msgstr "Шрифт" msgid "Italic" msgstr "" msgid "Bold" msgstr "" #, fuzzy msgid "Background" msgstr "Фон по умолчанию" #, fuzzy msgid "No background" msgstr "Фон по умолчанию" msgid "Shadow" msgstr "" msgid "Outline" msgstr "" #, fuzzy msgid "Rectangle background" msgstr "Фон по умолчанию" msgid "Arc" msgstr "Дуга" msgid "Arc options" msgstr "Варианты дуги" msgid "With dashes" msgstr "С тире" msgid "Circle options" msgstr "Варианты окружности" msgid "Free shape" msgstr "Свободная форма" msgid "Shape options" msgstr "Фарианты формы" msgid "Click on the shape's first point to close it." msgstr "" msgid "Line" msgstr "Линия" msgid "Line options" msgstr "Варианты линии" msgid "Paint" msgstr "Заливка" msgid "Painting options" msgstr "Варианты рисования" msgid "Click on an area to replace its color by transparency" msgstr "Щелкните на область, чтобы заменить ее цвет прозрачностью" msgid "Polygon" msgstr "Полигон" msgid "Polygon options" msgstr "Варианты полигонов" msgid "Pencil" msgstr "Карандаш" msgid "Pencil options" msgstr "Варианты карандаша" msgid "Color Picker" msgstr "Выбор цвета" msgid "Rectangle options" msgstr "Варианты прямоугольника" msgid "Text" msgstr "Текст" #, fuzzy msgid "Font options" msgstr "Варианты линии" msgid "Rectangle selection" msgstr "Прямоугольное выделение" msgid "Free selection" msgstr "Свободное выделение" msgid "Color selection" msgstr "Выбор цвета" msgid "Drag the selection or right-click on the canvas" msgstr "Перетащите выделение или щелкните правой кнопкой мыши по холсту" msgid "Select an area or right-click on the canvas" msgstr "Выберите область или щелкните правой кнопкой мыши на холсте" msgid "Cropping the selection" msgstr "Обрезать выделенное" msgid "Cropping the canvas" msgstr "Обрезать холст" msgid "Rotating the selection" msgstr "Повернуть выделенное" msgid "Rotating the canvas" msgstr "Повернуть холст" msgid "Scaling the selection" msgstr "Масштабировать выделенное" msgid "Scaling the canvas" msgstr "Масштабировать холст" drawing-0.4.11/po/sv.po000066400000000000000000000450311362211111700146340ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the drawing package. # Åke Engelbrektson , 2019, 2020. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2020-02-03 21:16+0100\n" "Last-Translator: Åke Engelbrektson \n" "Language-Team: Svenska Språkfiler \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Drawing" msgstr "Drawing" msgid "Simple drawing utility" msgstr "Enkelt ritverktyg" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Måla;Rita;Penna;" msgid "New Window" msgstr "Nytt fönster" msgid "New Image" msgstr "Ny bild" msgid "Edit Image in Clipboard" msgstr "Redigera bilden i urklipp" msgid "A drawing application for the GNOME desktop" msgstr "Ett ritprogram för GNOME skrivbordsmiljö" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing \" är en grundläggande bildredigerare som stödjer PNG-, JPEG- och " "BMP-filer." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Det låter dig rita eller redigera bilder med verktyg såsom penna, linje " "eller båge (med olika alternativ), markering (klipp ut/kopiera/klistra in/" "dra/…), textinfogning, storleksändring, beskärning, rotation, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Version 0.4.11 innehåller ett flertal mindre felkorrigeringar, och diverse " "nya översättningar." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Version 0.4.10 innehåller ett flertal mindre felkorrigeringar, och diverse " "nya översättningar." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.5 innehåller ett flertal mindre felkorrigeringar, och diverse " "nya översättningar." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.4 innehåller ett flertal mindre felkorrigeringar, och diverse " "nya översättningar." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" #, fuzzy msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Version 0.4.8 innehåller ett flertal mindre felkorrigeringar, och diverse " "nya översättningar." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" msgid "First stable release, including a few basic tools." msgstr "" #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Inställningar" msgid "Report a bug" msgstr "Rapportera ett fel" msgid "Shortcuts" msgstr "Genvägar" msgid "Help" msgstr "Hjälp" msgid "About" msgstr "Om" msgid "Quit" msgstr "Avsluta" msgid "_File" msgstr "_Arkiv" msgid "New Blank Image" msgstr "Ny tom bild" msgid "New Image With Custom Size" msgstr "Ny bild med anpassad storlek" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Ny bild från markering" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Ny bild från urklipp" msgid "Open an image" msgstr "Öppna en bild" msgid "Reload file" msgstr "Uppdatera fil" msgid "Image properties" msgstr "Bildegenskaper" msgid "Save" msgstr "Spara" msgid "Save as…" msgstr "Spara som…" msgid "Export as…" msgstr "Exportera som…" msgid "Print" msgstr "Skriv ut" msgid "Close" msgstr "Stäng" msgid "_Edit" msgstr "_Redigera" msgid "Undo" msgstr "Ångra" msgid "Redo" msgstr "Upprepa" msgid "Select all" msgstr "Markera alla" msgid "Cut" msgstr "Klipp ut" msgid "Copy" msgstr "Kopiera" msgid "Delete" msgstr "Ta bort" msgid "Paste" msgstr "Klistra in" msgid "Import" msgstr "Importera" msgid "_View" msgstr "Vi_sa" msgid "Optimal Zoom" msgstr "Optimal zoom" msgid "Zoom Out" msgstr "Zooma ut" msgid "Original Zoom" msgstr "Ursprunglig zoom" msgid "Zoom In" msgstr "Zooma in" msgid "Show the preview" msgstr "Visa förhandsgranskningen" msgid "Refresh" msgstr "Uppdatera" msgid "Rebuild from history" msgstr "Bygg om från historiken" msgid "Position" msgstr "Position" msgid "Go Left" msgstr "Gå åt vänster" msgid "Go Up" msgstr "Gå upp" msgid "Go Down" msgstr "Gå ner" msgid "Go Right" msgstr "Gå åt höger" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Visa verktygsnamn" msgid "_Colors" msgstr "_Färger" msgid "Main color" msgstr "Primär färg" msgid "Secondary color" msgstr "Sekundär färg" msgid "Exchange colors" msgstr "Växla färger" #, fuzzy msgid "Color editor by default" msgstr "Använd färgredigerare som standard" msgid "_Tools" msgstr "_Verktyg" msgid "_Canvas" msgstr "" msgid "Previous tool" msgstr "Föregående verktyg" msgid "_Options" msgstr "A_lternativ" #, fuzzy msgid "_Windows" msgstr "Nytt fönster" msgid "Quit all windows" msgstr "Stäng alla fönster" msgid "_Help" msgstr "_Hjälp" msgid "Index" msgstr "Index" msgid "Basic help" msgstr "Grundläggande hjälp" msgid "Help about tools" msgstr "Hjälp om verktyg" msgid "Canvas and selection" msgstr "Arbetsyta och markering" msgid "Help about selection" msgstr "Hjälp om markering" msgid "About Drawing" msgstr "Om Drawing" msgid "Back to the palette" msgstr "Tillbaka till paletten" msgid "Use this editor by default" msgstr "Använd denna redigerare som standard" msgid "Width" msgstr "Bredd" msgid "Height" msgstr "Höjd" msgid "Background color" msgstr "Bakgrundsfärg" msgid "Use these settings by default" msgstr "Använd dessa inställningar som standard" msgid "Open" msgstr "Öppna" msgid "Images" msgstr "Bilder" msgid "Tools" msgstr "Verktyg" msgid "Advanced options" msgstr "Avancerade alternativ" msgid "Path" msgstr "Sökväg" msgid "Format" msgstr "Format" msgid "Colorspace" msgstr "Färgrymd" msgid "Unsaved file" msgstr "Osparad fil" msgid "Invalid format" msgstr "Ogiltigt format" msgid "pixels" msgstr "pixlar" msgid "centimeters" msgstr "centimeter" msgid "inches" msgstr "tum" msgid "Unselect" msgstr "Avmarkera" msgid "Flip" msgstr "Vänd" msgid "Crop" msgstr "Beskär" msgid "Scale" msgstr "Skala" msgid "Rotate" msgstr "Rotera" #, fuzzy msgid "Saturate" msgstr "Mättnad" msgid "Open As New Image" msgstr "Öppna som ny bild" msgid "General" msgstr "Allmänt" msgid "Main menu" msgstr "Huvudmeny" msgid "Image" msgstr "Bild" msgid "Open a file" msgstr "Öppna en fil" msgid "Close the active image" msgstr "Stäng den aktiva bilden" msgid "Save as" msgstr "Spara som" #, fuzzy msgid "Edition" msgstr "Redigering" msgid "Options menu" msgstr "Alternativmeny" msgid "Back to previous tool" msgstr "Tillbaka till föregående verktyg" msgid "Selection" msgstr "Markering" msgid "Delete the selection" msgstr "Ta bort markerat" msgid "Colors" msgstr "Färger" msgid "Edit the main color (left click)" msgstr "Redigera den primära färgen (vänsterklick)" msgid "Edit the secondary color (right click)" msgstr "Redigera den sekundära färgen (högerklick)" msgid "Navigation" msgstr "Navigation" msgid "Toggle the preview" msgstr "Visa/Dölj förhandsgranskningen" msgid "Error starting the application, please report this bug." msgstr "Kunde inte starta programmet. Vänligen, rapportera felet." msgid "Tool size" msgstr "Verktygsstorlek" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Inga alternativ" #. none msgid "Preview" msgstr "Förhandsgranska" msgid "Troubleshoot selection" msgstr "Felsök markering" msgid "Cancel" msgstr "Avbryt" msgid "Create" msgstr "Skapa" msgid "Print the version and display the 'about' dialog" msgstr "" msgid "Open a new window" msgstr "Öppna ett nytt fönster" msgid "Open a new tab" msgstr "Öppna en ny flik" msgid "Edit the clipboard content" msgstr "Redigera urklippsinnehållet" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Åke Engelbrektson" msgid "A drawing application for the GNOME desktop." msgstr "Ett ritprogram för GNOME skrivbordsmiljö." msgid "Official webpage" msgstr "Officiell webbplats" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Kunde inte öppna den här filen. Menade du %s ?" #, python-format msgid "Failed to load tool: %s" msgstr "Kunde inte läsa in verktyg: %s" #, python-format msgid "Loading %s" msgstr "Läser in %s" msgid "New Tab" msgstr "Ny flik" msgid "Discard changes" msgstr "Kassera ändringar" #, python-format msgid "There are unsaved modifications to %s." msgstr "Det finns osparade ändringar i %s." #, python-format msgid "Where do you want to open %s?" msgstr "Var vill du öppna %s?" msgid "Open a picture" msgstr "Öppna en bild" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "dessa filer" #, python-format msgid "What do you want to do with %s?" msgstr "Vad vill du göra med %s?" msgid "Untitled" msgstr "Namnlös" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "denna bild" msgid "Discard" msgstr "Kassera" msgid "Save picture as…" msgstr "Spara bild som…" msgid "Import a picture" msgstr "Importera en bild" #, python-format msgid "Undo %s" msgstr "Ångra %s" #, python-format msgid "Redo %s" msgstr "Upprepa %s" msgid "New images" msgstr "Nya bilder" msgid "Default width" msgstr "Standardbredd" msgid "Default height" msgstr "Standardhöjd" msgid "Default background" msgstr "Standardbakgrund" msgid "Images saving" msgstr "Spara bilder" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG- och BMP-bilder kan inte hantera transparens." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Vad vill du använda för att ersätta transparenta bildpunkter med, om du " "sparar dina bilder i dessa format?" msgid "White" msgstr "Vit" msgid "Black" msgstr "Svart" msgid "Checkboard" msgstr "Schackrutigt" msgid "Nothing" msgstr "Inget" msgid "Ask before saving" msgstr "Fråga innan något sparas" msgid "Use big icons" msgstr "Använd stora ikoner" msgid "Preview size" msgstr "Storlek på förhandsgranskning" msgid "Development features" msgstr "Utvecklingsfunktioner" msgid "Layout" msgstr "Layout" msgid "The recommended value is \"Automatic\"." msgstr "Det rekommenderade värdet är \"Automatisk\"." msgid "Automatic" msgstr "Automatisk" msgid "Compact" msgstr "Kompakt" msgid "elementary OS" msgstr "elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Standard" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Standard (symboliska ikoner)" msgid "Menubar only" msgstr "Endast menyfält" msgid "Toolbar only" msgstr "Endast verktygsfält" msgid "Toolbar only (symbolic icons)" msgstr "Endast verktygsfält (symboliska ikoner)" msgid "This file format doesn't support transparent colors." msgstr "Detta filformat stödjer inte transparenta färger." msgid "Replace transparency with:" msgstr "Ersätt transparens med:" msgid "All pictures" msgstr "Alla bilder" msgid "PNG images" msgstr "PNG-bilder" msgid "JPEG images" msgstr "JPEG-bilder" msgid "BMP images" msgstr "BMP-bilder" msgid "Transparent" msgstr "Transparent" #, python-format msgid "%s%% transparent" msgstr "%s%% transparent" msgid "Grey" msgstr "Grå" msgid "Orange" msgstr "Orange" msgid "Brown" msgstr "Brun" msgid "Probably brown" msgstr "Troligen brun" msgid "Red" msgstr "Röd" msgid "Green" msgstr "Grön" msgid "Blue" msgstr "Blå" msgid "Yellow" msgstr "Gul" msgid "Magenta" msgstr "Magenta" msgid "Purple" msgstr "Lila" msgid "Cyan" msgstr "Cyan" msgid "Probably turquoise" msgstr "Troligen turkos" msgid "Unknown color name" msgstr "Okänt färgnamn" msgid "Continue" msgstr "Fortsätt" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" msgid "percents" msgstr "procent" #, fuzzy msgid "Lead shape" msgstr "Linjeform" #. Default values msgid "Round" msgstr "Rund" msgid "Square" msgstr "Kvadrat" msgid "Use dashes" msgstr "Streckad" msgid "Arrow" msgstr "Pil" msgid "Mode" msgstr "" msgid "Classic" msgstr "Klassisk" msgid "Source color" msgstr "Källfärg" msgid "Eraser" msgstr "Suddgummi" msgid "Difference" msgstr "Skillnad" msgid "Shape" msgstr "Figur" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Cirkel" msgid "Filling" msgstr "" msgid "Empty" msgstr "Tom" #, fuzzy msgid "Filled (main color)" msgstr "Primär färg" #, fuzzy msgid "Filled (secondary color)" msgstr "Sekundär färg" msgid "Apply" msgstr "Tillämpa" msgid "Flip horizontally" msgstr "Vänd horisontellt" msgid "Flip vertically" msgstr "Vänd vertikalt" msgid "Color gradient" msgstr "Färgtoning" msgid "Behavior" msgstr "Beteende" msgid "Encircle and fill" msgstr "Ringa in och fyll" msgid "Erase and replace" msgstr "Sudda och ersätt" msgid "Clipping" msgstr "Klippning" msgid "Thin" msgstr "Tunn" msgid "Artificial smoothness" msgstr "" msgid "Rectangle" msgstr "Rektangel" msgid "Rounded rectangle" msgstr "Rundad rektangel" msgid "Rotate left" msgstr "Rotera vänster" msgid "Angle (degrees)" msgstr "Vinkel (grader)" msgid "Rotate right" msgstr "Rotera höger" msgid "Saturation" msgstr "Mättnad" msgid "Keep proportions" msgstr "Bevara proportioner" msgid "Edit" msgstr "Redigera" #, fuzzy msgid "Selection type" msgstr "Markering" #, fuzzy msgid "Freehand" msgstr "Fri figur" #, fuzzy msgid "Similar color" msgstr "Sekundär färg" #, fuzzy msgid "Selection options" msgstr "Pennalternativ" msgid "Insert here" msgstr "Infoga här" msgid "Font" msgstr "Teckensnitt" msgid "Italic" msgstr "Kursiv" msgid "Bold" msgstr "Fet" msgid "Background" msgstr "Bakgrund" msgid "No background" msgstr "Ingen bakgrund" msgid "Shadow" msgstr "Skugga" msgid "Outline" msgstr "Kontur" msgid "Rectangle background" msgstr "Rektangelbakgrund" msgid "Arc" msgstr "" #, fuzzy msgid "Arc options" msgstr "Fler alternativ" #, fuzzy msgid "With dashes" msgstr "Streckad" #, fuzzy msgid "Circle options" msgstr "Kurvalternativ" msgid "Free shape" msgstr "Fri figur" msgid "Shape options" msgstr "Figuralternativ" msgid "Click on the shape's first point to close it." msgstr "Klicka på figurens första punkt för att stänga den." msgid "Line" msgstr "Linje" msgid "Line options" msgstr "Linjealternativ" msgid "Paint" msgstr "Måla" msgid "Painting options" msgstr "Målningsalternativ" msgid "Click on an area to replace its color by transparency" msgstr "Klicka på ett område för att byta ut färgen mot transparens" msgid "Polygon" msgstr "Polygon" #, fuzzy msgid "Polygon options" msgstr "Teckensnittsalternativ" msgid "Pencil" msgstr "Penna" msgid "Pencil options" msgstr "Pennalternativ" msgid "Color Picker" msgstr "Färgväljare" #, fuzzy msgid "Rectangle options" msgstr "Rektangelmarkering" msgid "Text" msgstr "Text" msgid "Font options" msgstr "Teckensnittsalternativ" msgid "Rectangle selection" msgstr "Rektangelmarkering" msgid "Free selection" msgstr "Fri markering" msgid "Color selection" msgstr "Färgval" msgid "Drag the selection or right-click on the canvas" msgstr "Dra markeringen eller högerklicka på på arbetsytan" msgid "Select an area or right-click on the canvas" msgstr "Markera ett område eller högerklicka på arbetsytan" msgid "Cropping the selection" msgstr "Beskär markeringen" msgid "Cropping the canvas" msgstr "Beskär arbetsytan" msgid "Rotating the selection" msgstr "Roterar markering" msgid "Rotating the canvas" msgstr "Roterar arbetsytan" msgid "Scaling the selection" msgstr "Skalar markering" msgid "Scaling the canvas" msgstr "Skalar arbetsytan" drawing-0.4.11/po/tr.po000066400000000000000000000464211362211111700146350ustar00rootroot00000000000000# Drawing Türkçe çeviri. # Copyright (C) 2019 # This file is distributed under the same license as the drawing package. # Serdar Sağlam , 2018, 2019. # msgid "" msgstr "" "Project-Id-Version: drawing\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-02-16 01:20+0100\n" "PO-Revision-Date: 2019-08-19 10:03+0300\n" "Last-Translator: Serdar Sağlam \n" "Language-Team: Serdar Sağlam \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 2.2.1\n" "Plural-Forms: nplurals=1; plural=0;\n" msgid "Drawing" msgstr "Çizim" msgid "Simple drawing utility" msgstr "Basit çizim aracı" #. Icon name, do not translate msgid "com.github.maoschanz.drawing" msgstr "com.github.maoschanz.drawing" #. This is a list of keywords. "Paint" should not be translated, the others should. Don't forget the semicolons. msgid "Paint;Sketch;Pencil;" msgstr "Paint;Çizim;Boyama;Karakalem;" msgid "New Window" msgstr "Yeni Pencere" msgid "New Image" msgstr "Yeni Görüntü" msgid "Edit Image in Clipboard" msgstr "Panodaki Resmi Düzenle" msgid "A drawing application for the GNOME desktop" msgstr "GNOME masaüstü için çizim uygulaması" msgid "" "\"Drawing\" is a basic image editor, supporting PNG, JPEG and BMP file types." msgstr "" "\"Drawing\", PNG, JPEG ve BMP dosya türlerini destekleyen temel bir resim " "düzenleyicidir." msgid "" "It allows you to draw or edit pictures with tools such as pencil, line or " "arc (with various options), selection (cut/copy/paste/drag/…), shapes " "(rectangle, circle, polygon, …), text insertion, resizing, cropping, " "rotating, …" msgstr "" "Fırça, çizgi veya yay (çeşitli seçeneklerle), seçim (kes/kopyala/yapıştır/" "sürükle/…), şekiller (dikdörtgen, daire, çokgen,…), metin ekleme gibi " "araçlarla resim çizmenize veya düzenlemenize olanak sağlar. yeniden " "boyutlandırma, kırpma, döndürme, …" msgid "" "Version 0.4.11 features several minor bug fixes, and various new " "translations." msgstr "" "Sürüm 0.4.11, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler " "içermektedir." msgid "" "A few features have been added to the tools: the color picker picks the " "alpha channel too, the ellipses are now geometrically correct, the text can " "be outlined with the secondary color, and the corners of the rectangles can " "be rounded." msgstr "" msgid "" "It's now impossible to accidentally delete the selection while editing it " "with the 'scale' or the 'crop' tool." msgstr "" msgid "Tabs can be closed with a middle-click." msgstr "" msgid "" "What replaces the transparent channel when saving as JPEG or BMP is now an " "option the user can change in the preferences window." msgstr "" msgid "" "Version 0.4.10 features several minor bug fixes, and various new " "translations." msgstr "" "Sürüm 0.4.10, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler " "içermektedir." msgid "" "The \"rotate\" tool where buttons were inverted has been fixed, and tools " "icons look better with the Adapta theme." msgstr "" msgid "" "Replace transparency with white (instead of black) when saving a JPG or a " "BMP file." msgstr "" msgid "Also, fix the color picker tool." msgstr "" msgid "" "Add a \"New image with custom size\" action, the ability to open or import " "images with drag-and-drop, and don't close saved but non-blank images when " "opening a new image." msgstr "" msgid "" "The UI of the preferences window, the toolbar, the spinbuttons and the " "menubar have been improved." msgstr "" msgid "" "Version 0.4.5 features several minor bug fixes, and various new translations." msgstr "" "Sürüm 0.4.5, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler " "içermektedir." msgid "" "Clicking on both mouse buttons will no longer crash the tools, and the " "confusing UI for changing the colorspace has been deleted since it was " "causing bugs with the history." msgstr "" msgid "" "Version 0.4.4 features several minor bug fixes, and various new translations." msgstr "" "Sürüm 0.4.4, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler " "içermektedir." msgid "" "Version 0.4.3 includes new translations, and is compatible with older " "distributions such as Ubuntu 18.04 LTS." msgstr "" "Sürüm 0.4.3 yeni çeviriler içermektedir ve Ubuntu 18.04 LTS gibi daha eski " "dağıtımlarla uyumludur." msgid "" "Version 0.4.2 features several minor bug fixes, and various new translations." msgstr "" "Sürüm 0.4.2, birkaç küçük hata düzeltmesi ve çeşitli yeni çeviriler " "içermektedir." msgid "" "Version 0.4 introduces a new icon, numerous bug fixes, an improved toolbar " "for the \"legacy\" and \"toolbar only\" layouts, an action for creating an " "image from the clipboard content, a smoother pencil, and various new " "translations." msgstr "" "Sürüm 0.4 yeni bir simge, sayısız hata düzeltmesi, \"eski\" ve \"yalnızca " "araç çubuğu\" düzenleri için geliştirilmiş bir araç çubuğu, pano içeriğinden " "görüntü oluşturmak için bir eylem, daha yumuşak bir fırça ve çeşitli yeni " "çeviriler sunar." msgid "First stable release, including a few basic tools." msgstr "Birkaç temel araç içeren ilk kararlı sürüm." #. This is just my name, do not translate it. msgid "Romain F. T." msgstr "Romain F. T." msgid "The default window and its primary menu" msgstr "" msgid "The selection and the actions associated with it" msgstr "" msgid "The \"arc\" tool and its options" msgstr "" msgid "An example of use of the \"saturate\" tool" msgstr "" msgid "Preferences" msgstr "Tercihler" msgid "Report a bug" msgstr "Hata bildir" msgid "Shortcuts" msgstr "Kısayollar" msgid "Help" msgstr "Yardım" msgid "About" msgstr "Hakkında" msgid "Quit" msgstr "Çıkış" msgid "_File" msgstr "_Dosya" msgid "New Blank Image" msgstr "Yeni Boş Görüntü" msgid "New Image With Custom Size" msgstr "Özel Boyutlu Yeni Görüntü" #. you can omit the "New image" in the translation msgid "New Image From Selection" msgstr "Seçimden Yeni Görüntü" #. you can omit the "New image" in the translation msgid "New Image From Clipboard" msgstr "Panodan Yeni Görüntü" msgid "Open an image" msgstr "Bir görüntü aç" msgid "Reload file" msgstr "Yeniden yükle" msgid "Image properties" msgstr "Görüntü özellikleri" msgid "Save" msgstr "Kaydet" msgid "Save as…" msgstr "Farklı kaydet…" msgid "Export as…" msgstr "Farklı aktar…" msgid "Print" msgstr "Yazdır" msgid "Close" msgstr "Kapat" msgid "_Edit" msgstr "_Düzenle" msgid "Undo" msgstr "Geri al" msgid "Redo" msgstr "Yinele" msgid "Select all" msgstr "Tümünü seç" msgid "Cut" msgstr "Kes" msgid "Copy" msgstr "Kopyala" msgid "Delete" msgstr "Sil" msgid "Paste" msgstr "Yapıştır" msgid "Import" msgstr "İçeri aktar" msgid "_View" msgstr "_Görünüm" msgid "Optimal Zoom" msgstr "İdeal Yakınlık" msgid "Zoom Out" msgstr "Uzaklaştır" msgid "Original Zoom" msgstr "Orijinal Yakınlık" msgid "Zoom In" msgstr "Yakınlaştır" msgid "Show the preview" msgstr "Önizlemeyi göster" msgid "Refresh" msgstr "Yenile" msgid "Rebuild from history" msgstr "Geçmişten yeniden oluştur" msgid "Position" msgstr "Konum" msgid "Go Left" msgstr "Sola Git" msgid "Go Up" msgstr "Yukarı Git" msgid "Go Down" msgstr "Aşağı Git" msgid "Go Right" msgstr "Sağa Git" #. self.add_section_title(_("Appearance")) msgid "Show tools names" msgstr "Araç adlarını göster" msgid "_Colors" msgstr "_Renkler" msgid "Main color" msgstr "Ana renk" msgid "Secondary color" msgstr "İkincil renk" msgid "Exchange colors" msgstr "Renkleri değiş" msgid "Color editor by default" msgstr "Öntanımlı renk düzenleyici" msgid "_Tools" msgstr "_Araçlar" msgid "_Canvas" msgstr "_Tuval" msgid "Previous tool" msgstr "Önceki araç" msgid "_Options" msgstr "_Seçenekler" msgid "_Windows" msgstr "_Pencereler" msgid "Quit all windows" msgstr "Tüm pencerelerden çık" msgid "_Help" msgstr "_Yardım" msgid "Index" msgstr "İndeks" msgid "Basic help" msgstr "Basit yardım" msgid "Help about tools" msgstr "Araçlar hakkında yardım" msgid "Canvas and selection" msgstr "Tuval ve seçim" msgid "Help about selection" msgstr "Seçim hakkında yardım" msgid "About Drawing" msgstr "Çizim Hakkında" msgid "Back to the palette" msgstr "Palete geri dön" msgid "Use this editor by default" msgstr "Bu düzenleyiciyi varsayılan olarak kullan" msgid "Width" msgstr "Genişlik" msgid "Height" msgstr "Yükseklik" msgid "Background color" msgstr "Arkaplan rengi" msgid "Use these settings by default" msgstr "Bu ayarları varsayılan olarak kullan" msgid "Open" msgstr "Aç" msgid "Images" msgstr "Görüntüler" msgid "Tools" msgstr "Araçlar" msgid "Advanced options" msgstr "Gelişmiş seçenekler" msgid "Path" msgstr "Yol" msgid "Format" msgstr "Biçim" msgid "Colorspace" msgstr "Renk boşluğu" msgid "Unsaved file" msgstr "Kaydedilmemiş dosya" msgid "Invalid format" msgstr "Geçersiz biçim" msgid "pixels" msgstr "piksel" msgid "centimeters" msgstr "santimetre" msgid "inches" msgstr "inç" msgid "Unselect" msgstr "Seçimi kaldır" msgid "Flip" msgstr "Çevir" msgid "Crop" msgstr "Kırp" msgid "Scale" msgstr "Ölçek" msgid "Rotate" msgstr "Döndür" msgid "Saturate" msgstr "Doygunluk" msgid "Open As New Image" msgstr "Yeni Görüntü Olarak Aç" msgid "General" msgstr "Genel" msgid "Main menu" msgstr "Ana menü" msgid "Image" msgstr "Görüntü" msgid "Open a file" msgstr "Bir dosya aç" msgid "Close the active image" msgstr "Aktif resmi kapat" msgid "Save as" msgstr "Farklı kaydet" msgid "Edition" msgstr "Baskı" msgid "Options menu" msgstr "Seçenekler menüsü" msgid "Back to previous tool" msgstr "Önceki araca dön" msgid "Selection" msgstr "Seçim" msgid "Delete the selection" msgstr "Seçimi sil" msgid "Colors" msgstr "Renkler" msgid "Edit the main color (left click)" msgstr "Ana rengi düzenle (sol tıkla)" msgid "Edit the secondary color (right click)" msgstr "İkincil rengi düzenle (sağ tıkla)" msgid "Navigation" msgstr "Gezinti" msgid "Toggle the preview" msgstr "Önizlemeyi değiştir" msgid "Error starting the application, please report this bug." msgstr "Uygulama açılırken hata oldu, lütfen hatayı rapor edin." msgid "Tool size" msgstr "Araç boyutu" #. Loading a whole file in a GtkBuilder just for this looked ridiculous, #. so it's built from a string. msgid "No options" msgstr "Seçenek yok" #. none msgid "Preview" msgstr "Önizlenim" msgid "Troubleshoot selection" msgstr "Seçimle ilgili sorunları giderme" msgid "Cancel" msgstr "İptal" msgid "Create" msgstr "Oluştur" msgid "Print the version and display the 'about' dialog" msgstr "Sürümü yazdır ve 'hakkında' iletişim kutusunu görüntüle" msgid "Open a new window" msgstr "Yeni bir pencere aç" msgid "Open a new tab" msgstr "Yeni bir sekmede aç" msgid "Edit the clipboard content" msgstr "Pano içeriğini düzenle" #. To tranlators: "translate" this by your name, it will be displayed #. in the "about" dialog msgid "translator-credits" msgstr "Serdar Sağlam " msgid "A drawing application for the GNOME desktop." msgstr "GNOME masaüstü ortamı için çizim uygulaması." msgid "Official webpage" msgstr "Resmi sayfa" #, python-format msgid "Error opening this file. Did you mean %s ?" msgstr "Bu dosyayı açarken hata. %s demek mi istediniz?" #, python-format msgid "Failed to load tool: %s" msgstr "Araç yüklenemedi: %s" #, python-format msgid "Loading %s" msgstr "Yükleniyor %s" msgid "New Tab" msgstr "Yeni Sekme" msgid "Discard changes" msgstr "Değişiklikleri yoksay" #, python-format msgid "There are unsaved modifications to %s." msgstr "%s üstünde kaydedilmemiş değişiklikler." #, python-format msgid "Where do you want to open %s?" msgstr "Nerede açmak istiyorsunuz %s?" msgid "Open a picture" msgstr "Bir resim aç" #. Context for translation: #. "What do you want to do with *these files*?" msgid "these files" msgstr "bu dosyalar" #, python-format msgid "What do you want to do with %s?" msgstr "%s ile ne yapmak istersin?" msgid "Untitled" msgstr "Başlıksız" #. Context: the sentence "There are unsaved modifications to %s." msgid "this picture" msgstr "bu resim" msgid "Discard" msgstr "Yoksay" msgid "Save picture as…" msgstr "Resmi farklı kaydet…" msgid "Import a picture" msgstr "Bir resmi içe aktar" #, python-format msgid "Undo %s" msgstr "Geri al %s" #, python-format msgid "Redo %s" msgstr "Yinele %s" msgid "New images" msgstr "Yeni görüntüler" msgid "Default width" msgstr "Öntanımlı genişlik" msgid "Default height" msgstr "Öntanımlı yükseklik" msgid "Default background" msgstr "Öntanımlı arka plan" msgid "Images saving" msgstr "Görüntüler kayediliyor" msgid "JPEG and BMP images can't handle transparency." msgstr "JPEG ve BMP görüntüleri saydamlığı desteklemez." msgid "" "If you save your images in these formats, what do want to use to replace " "transparent pixels?" msgstr "" "Resimlerinizi bu biçimlerde kaydederseniz, şeffaf pikselleri değiştirmek " "için ne kullanmak istersiniz?" msgid "White" msgstr "Beyaz" msgid "Black" msgstr "Siyah" msgid "Checkboard" msgstr "Panoya yaz" msgid "Nothing" msgstr "Hiç" msgid "Ask before saving" msgstr "Kaydetmeden önce sor" msgid "Use big icons" msgstr "Büyük simgeler kullan" msgid "Preview size" msgstr "Önizleme boyutu" msgid "Development features" msgstr "Geliştirilmiş özellikler" msgid "Layout" msgstr "Düzen" msgid "The recommended value is \"Automatic\"." msgstr "Önerilen değer \"Otomatik\" tir." msgid "Automatic" msgstr "Otomatik" msgid "Compact" msgstr "Yoğun" msgid "elementary OS" msgstr "Elementary OS" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy" msgstr "Eski" #. "Legacy" is about the window layout, it means menubar+toolbar, you #. can translate it like if it was "Traditional" msgid "Legacy (symbolic icons)" msgstr "Eski (sembolik simgeler)" msgid "Menubar only" msgstr "Sadece menü çubuğu" msgid "Toolbar only" msgstr "Sadece araç çubuğu" msgid "Toolbar only (symbolic icons)" msgstr "Sadece araç çubuğu (sembolik simgeler)" msgid "This file format doesn't support transparent colors." msgstr "Bu dosya biçimi saydam renkleri desteklemiyor." msgid "Replace transparency with:" msgstr "Şeffaflığı şununla değiştir:" msgid "All pictures" msgstr "Tüm resimler" msgid "PNG images" msgstr "PNG görüntüler" msgid "JPEG images" msgstr "JPEG görüntüler" msgid "BMP images" msgstr "BMP görüntüler" msgid "Transparent" msgstr "Şeffaf" #, python-format msgid "%s%% transparent" msgstr "%s%% şeffaf" msgid "Grey" msgstr "Gri" msgid "Orange" msgstr "Turuncu" msgid "Brown" msgstr "Kahverengi" msgid "Probably brown" msgstr "Açık kahvarengi" msgid "Red" msgstr "Kırmızı" msgid "Green" msgstr "Yeşil" msgid "Blue" msgstr "Mavi" msgid "Yellow" msgstr "Sarı" msgid "Magenta" msgstr "Eflatun" msgid "Purple" msgstr "Mor" msgid "Cyan" msgstr "Camgöbeği" msgid "Probably turquoise" msgstr "Açık turkuaz" msgid "Unknown color name" msgstr "Bilinmeyen renk adı" msgid "Continue" msgstr "Devam" msgid "" "The area seems poorly delimited, or is very complex.\n" "This algorithm may not be able to manage the wanted area.\n" "\n" "Do you want to abort the operation, or to let the tool struggle ?" msgstr "" "Alan çok sınırlı görünüyor veya çok karmaşık.\n" "Bu algoritma istenen alanı yönetemeyebilir.\n" "\n" "İşlemi iptal etmek mi yoksa aracın denemesine izin vermek mi istiyorsunuz?" msgid "percents" msgstr "yüzdeler" msgid "Lead shape" msgstr "Fırça formu" #. Default values msgid "Round" msgstr "Yuvarlak" msgid "Square" msgstr "Kare" msgid "Use dashes" msgstr "Kısa çizgiler" msgid "Arrow" msgstr "Oklar" msgid "Mode" msgstr "Kip" msgid "Classic" msgstr "Klasik" msgid "Source color" msgstr "Kaynak renk" msgid "Eraser" msgstr "Silgi" msgid "Difference" msgstr "Farklılık" msgid "Shape" msgstr "Şekil" msgid "Oval" msgstr "Oval" msgid "Circle" msgstr "Daire" msgid "Filling" msgstr "Dolgu" msgid "Empty" msgstr "Boş" msgid "Filled (main color)" msgstr "Dolgulu (ana renk)" msgid "Filled (secondary color)" msgstr "Dolgulu (ikincil renk)" msgid "Apply" msgstr "Onayla" msgid "Flip horizontally" msgstr "Yatay çevir" msgid "Flip vertically" msgstr "Dikey çevir" msgid "Color gradient" msgstr "Geçiş rengi" msgid "Behavior" msgstr "Davranış" msgid "Encircle and fill" msgstr "Çevrele ve doldur" msgid "Erase and replace" msgstr "Temizle ve değiştir" msgid "Clipping" msgstr "Kırpma" msgid "Thin" msgstr "İnce" msgid "Artificial smoothness" msgstr "Yapay pürüzsüzlük" msgid "Rectangle" msgstr "Dikdörtgen" msgid "Rounded rectangle" msgstr "Yuvarlanmış dikdörtgen" msgid "Rotate left" msgstr "Sola döndür" msgid "Angle (degrees)" msgstr "Açı (derece)" msgid "Rotate right" msgstr "Sağa döndür" msgid "Saturation" msgstr "Doygunluk" msgid "Keep proportions" msgstr "Oranları koru" msgid "Edit" msgstr "Düzenle" msgid "Selection type" msgstr "Seçim tipi" msgid "Freehand" msgstr "Düzensiz" msgid "Similar color" msgstr "Benzer renk" msgid "Selection options" msgstr "Seçici seçenekleri" msgid "Insert here" msgstr "Buraya ekle" msgid "Font" msgstr "Yazı tipi" msgid "Italic" msgstr "Italic" msgid "Bold" msgstr "Kalın" msgid "Background" msgstr "Arkaplan" msgid "No background" msgstr "Arkaplan yok" msgid "Shadow" msgstr "Gölge" msgid "Outline" msgstr "Dış çizgi" msgid "Rectangle background" msgstr "Dikdörtgen arka plan" msgid "Arc" msgstr "Yay" msgid "Arc options" msgstr "Yay seçenekleri" msgid "With dashes" msgstr "Tire ile" msgid "Circle options" msgstr "Daire seçenekleri" msgid "Free shape" msgstr "Serbest biçim" msgid "Shape options" msgstr "Biçim seçenekleri" msgid "Click on the shape's first point to close it." msgstr "Kapatmak için şeklin ilk noktasına tıklayın." msgid "Line" msgstr "Çizgi" msgid "Line options" msgstr "Çizgi seçenekleri" msgid "Paint" msgstr "Boya" msgid "Painting options" msgstr "Boyama seçenekleri" msgid "Click on an area to replace its color by transparency" msgstr "Rengi saydamlıkla değiştirmek için bir alana tıkla" msgid "Polygon" msgstr "Çokgen" msgid "Polygon options" msgstr "Çokgen seçenekleri" msgid "Pencil" msgstr "Fırça" msgid "Pencil options" msgstr "Fırça seçenekleri" msgid "Color Picker" msgstr "Renk Seçici" msgid "Rectangle options" msgstr "Dikdörtgen seçenekleri" msgid "Text" msgstr "Metin" msgid "Font options" msgstr "Yazıtipi seçenekleri" msgid "Rectangle selection" msgstr "Dikdörtgen seçim" msgid "Free selection" msgstr "Serbest seçim" msgid "Color selection" msgstr "Renk seçimi" msgid "Drag the selection or right-click on the canvas" msgstr "Seçimi sürükle veya tuval üzerine sağ tıkla" msgid "Select an area or right-click on the canvas" msgstr "Bir alan seç veya tuval üzerine sağ tıkla" msgid "Cropping the selection" msgstr "Seçimi kırp" msgid "Cropping the canvas" msgstr "Tuvali kırp" msgid "Rotating the selection" msgstr "Seçimi döndür" msgid "Rotating the canvas" msgstr "Tuvali döndür" msgid "Scaling the selection" msgstr "Seçimi ölçeklendir" msgid "Scaling the canvas" msgstr "Tuvali ölçeklendir" drawing-0.4.11/src/000077500000000000000000000000001362211111700140125ustar00rootroot00000000000000drawing-0.4.11/src/__init__.py000066400000000000000000000000771362211111700161270ustar00rootroot00000000000000# not useful, only here so the code is considered as a package drawing-0.4.11/src/color_popover.py000066400000000000000000000056041362211111700172610ustar00rootroot00000000000000# color_popover.py # # Copyright 2018-2020 Romain F. T. # # 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 . import cairo from gi.repository import Gtk, Gdk from .utilities import utilities_get_rgba_name class DrawingColorPopover(Gtk.Popover): __gtype_name__ = 'DrawingColorPopover' def __init__(self, btn, image, initial_rgba, **kwargs): super().__init__(**kwargs) builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/ui/color-popover.ui') main_box = builder.get_object('main-box') self.add(main_box) self.btn = btn self.btn.set_popover(self) self.btn_image = image r = float(initial_rgba[0]) g = float(initial_rgba[1]) b = float(initial_rgba[2]) a = float(initial_rgba[3]) initial_rgba = Gdk.RGBA(red=r, green=g, blue=b, alpha=a) self.color_widget = builder.get_object('color-widget') self.color_widget.set_rgba(initial_rgba) back_btn = builder.get_object('back-btn') self.editor_box = builder.get_object('editor-box') self.color_widget.connect('notify::rgba', self.set_color_btn) self.color_widget.connect('notify::show-editor', self.update_box) back_btn.connect('clicked', self.close_color_editor) self.update_box() self.set_color_btn() def setting_changed(self, show_editor): self.color_widget.props.show_editor = show_editor self.update_box() def close_color_editor(self, *args): self.color_widget.props.show_editor = False def update_box(self, *args): """Update the visibility of navigation controls ('back to the palette' and 'always use this editor').""" self.editor_box.set_visible(self.color_widget.props.show_editor) def set_color_btn(self, *args): """Update the 'rgba' property of the GtkColorWidget and its preview.""" surface = cairo.ImageSurface(cairo.Format.ARGB32, 16, 16) cairo_context = cairo.Context(surface) rgba = self.color_widget.get_rgba() red = rgba.red green = rgba.green blue = rgba.blue alpha = rgba.alpha cairo_context.set_source_rgba(red, green, blue, alpha) cairo_context.paint() self.btn_image.set_from_surface(surface) tooltip_string = utilities_get_rgba_name(red, green, blue, alpha) self.btn.set_tooltip_text(tooltip_string) ############################################################################ ################################################################################ drawing-0.4.11/src/custom_image.py000066400000000000000000000061771362211111700170530ustar00rootroot00000000000000# custom_image.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk from .utilities import utilities_add_unit_to_spinbtn class DrawingCustomImageDialog(Gtk.Dialog): __gtype_name__ = 'DrawingCustomImageDialog' def __init__(self, appwindow): wants_csd = not ('ssd' in appwindow.decorations) super().__init__(use_header_bar=wants_csd, destroy_with_parent=True, \ transient_for=appwindow, title=_("New Image With Custom Size")) self.appwindow = appwindow self.build_ui() self.set_default_size(450, 200) def build_ui(self): self.add_button(_("Cancel"), Gtk.ResponseType.CANCEL) btn = self.add_button(_("Create"), Gtk.ResponseType.OK) btn.get_style_context().add_class('suggested-action') ui_path = '/com/github/maoschanz/drawing/ui/' builder = Gtk.Builder.new_from_resource(ui_path + 'custom-image.ui') props_content_area = builder.get_object('props_content_area') self.get_content_area().add(props_content_area) self.width_btn = builder.get_object('spin_width') utilities_add_unit_to_spinbtn(self.width_btn, 4, 'px') default_w = self.appwindow._settings.get_int('default-width') self.width_btn.set_value(default_w) self.height_btn = builder.get_object('spin_height') utilities_add_unit_to_spinbtn(self.height_btn, 4, 'px') default_h = self.appwindow._settings.get_int('default-height') self.height_btn.set_value(default_h) self.color_btn = builder.get_object('color_btn') background_rgba = self.appwindow._settings.get_strv('background-rgba') r = float(background_rgba[0]) g = float(background_rgba[1]) b = float(background_rgba[2]) a = float(background_rgba[3]) color = Gdk.RGBA(red=r, green=g, blue=b, alpha=a) self.color_btn.set_rgba(color) self.default_checkbtn = builder.get_object('default_checkbtn') def get_values(self): """Will be called from `self.appwindow` if the user clicks on "Create", and returns the values set by the user.""" width = self.width_btn.get_value_as_int() height = self.height_btn.get_value_as_int() rgba = self.color_btn.get_rgba() rgba = [str(rgba.red), str(rgba.green), str(rgba.blue), str(rgba.alpha)] if self.default_checkbtn.get_active(): self.appwindow._settings.set_int('default-width', width) self.appwindow._settings.set_int('default-height', height) self.appwindow._settings.set_strv('background-rgba', rgba) return width, height, rgba ############################################################################ ################################################################################ drawing-0.4.11/src/drawing.gresource.xml000066400000000000000000000044041362211111700201660ustar00rootroot00000000000000 ui/app-menus.ui ui/custom-image.ui ui/color-popover.ui ui/headerbar.ui ui/headerbar-eos.ui ui/image.ui ui/minimap.ui ui/properties.ui ui/preferences.ui ui/selection.ui ui/shortcuts.ui ui/toolbar.ui ui/toolbar-symbolic.ui ui/win-menus.ui ui/window.ui icons/exchange-colors-symbolic.svg icons/unit-pixels-symbolic.svg icons/unit-percents-symbolic.svg tools/ui/tool_arc.ui tools/ui/tool_circle.ui tools/ui/tool_experiment.ui tools/ui/tool_freeshape.ui tools/ui/tool_line.ui tools/ui/tool_paint.ui tools/ui/tool_pencil.ui tools/ui/tool_polygon.ui tools/ui/tool_rectangle.ui tools/ui/tool_select.ui tools/ui/tool_text.ui tools/ui/tool_crop.ui tools/ui/tool_flip.ui tools/ui/tool_rotate.ui tools/ui/tool_saturate.ui tools/ui/tool_scale.ui tools/icons/tool-arc-symbolic.svg tools/icons/tool-circle-symbolic.svg tools/icons/tool-crop-symbolic.svg tools/icons/tool-flip-symbolic.svg tools/icons/tool-freeshape-symbolic.svg tools/icons/tool-line-symbolic.svg tools/icons/tool-magic-symbolic.svg tools/icons/tool-pencil-symbolic.svg tools/icons/tool-paint-symbolic.svg tools/icons/tool-polygon-symbolic.svg tools/icons/tool-rectangle-symbolic.svg tools/icons/tool-rotate-symbolic.svg tools/icons/tool-saturate-symbolic.svg tools/icons/tool-scale-symbolic.svg tools/icons/tool-select-symbolic.svg tools/icons/tool-text-symbolic.svg drawing-0.4.11/src/drawing.in000077500000000000000000000023131362211111700157770ustar00rootroot00000000000000#!@PYTHON@ # drawing.in # # Copyright 2018-2020 Romain F. T. # # 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 . import os import sys import signal import gettext import locale VERSION = '@VERSION@' pkgdatadir = '@pkgdatadir@' localedir = '@localedir@' locale.bindtextdomain('drawing', localedir) sys.path.insert(1, pkgdatadir) signal.signal(signal.SIGINT, signal.SIG_DFL) gettext.install('drawing', localedir) if __name__ == '__main__': import gi from gi.repository import Gio resource = Gio.Resource.load(os.path.join(pkgdatadir, 'drawing.gresource')) resource._register() from drawing import main sys.exit(main.main(VERSION)) drawing-0.4.11/src/gi_composites.py000066400000000000000000000211601362211111700172300ustar00rootroot00000000000000# # Copyright 2015 Dustin Spicuzza # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public # License as published by the Free Software Foundation; either # version 2.1 of the License, or (at your option) any later version. # # This library 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 # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this library; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 # USA from os.path import abspath, join import inspect import warnings from gi.repository import Gio from gi.repository import GLib from gi.repository import GObject from gi.repository import Gtk __all__ = ['GtkTemplate'] class GtkTemplateWarning(UserWarning): pass def _connect_func(builder, obj, signal_name, handler_name, connect_object, flags, cls): '''Handles GtkBuilder signal connect events''' if connect_object is None: extra = () else: extra = (connect_object,) # The handler name refers to an attribute on the template instance, # so ask GtkBuilder for the template instance template_inst = builder.get_object(cls.__gtype_name__) if template_inst is None: # This should never happen errmsg = "Internal error: cannot find template instance! obj: %s; " \ "signal: %s; handler: %s; connect_obj: %s; class: %s" % \ (obj, signal_name, handler_name, connect_object, cls) warnings.warn(errmsg, GtkTemplateWarning) return handler = getattr(template_inst, handler_name) if flags == GObject.ConnectFlags.AFTER: obj.connect_after(signal_name, handler, *extra) else: obj.connect(signal_name, handler, *extra) template_inst.__connected_template_signals__.add(handler_name) def _register_template(cls, template_bytes): '''Registers the template for the widget and hooks init_template''' # This implementation won't work if there are nested templates, but # we can't do that anyways due to PyGObject limitations so it's ok if not hasattr(cls, 'set_template'): raise TypeError("Requires PyGObject 3.13.2 or greater") cls.set_template(template_bytes) bound_methods = set() bound_widgets = set() # Walk the class, find marked callbacks and child attributes for name in dir(cls): o = getattr(cls, name, None) if inspect.ismethod(o): if hasattr(o, '_gtk_callback'): bound_methods.add(name) # Don't need to call this, as connect_func always gets called #cls.bind_template_callback_full(name, o) elif isinstance(o, _Child): cls.bind_template_child_full(name, True, 0) bound_widgets.add(name) # Have to setup a special connect function to connect at template init # because the methods are not bound yet cls.set_connect_func(_connect_func, cls) cls.__gtemplate_methods__ = bound_methods cls.__gtemplate_widgets__ = bound_widgets base_init_template = cls.init_template cls.init_template = lambda s: _init_template(s, cls, base_init_template) def _init_template(self, cls, base_init_template): '''This would be better as an override for Gtk.Widget''' if self.__class__ is not cls: raise TypeError("Inheritance from classes with @GtkTemplate decorators " "is not allowed at this time") connected_signals = set() self.__connected_template_signals__ = connected_signals base_init_template(self) for name in self.__gtemplate_widgets__: widget = self.get_template_child(cls, name) self.__dict__[name] = widget if widget is None: # Bug: if you bind a template child, and one of them was # not present, then the whole template is broken (and # it's not currently possible for us to know which # one is broken either -- but the stderr should show # something useful with a Gtk-CRITICAL message) raise AttributeError("A missing child widget was set using " "GtkTemplate.Child and the entire " "template is now broken (widgets: %s)" % ', '.join(self.__gtemplate_widgets__)) for name in self.__gtemplate_methods__.difference(connected_signals): errmsg = ("Signal '%s' was declared with @GtkTemplate.Callback " + "but was not present in template") % name warnings.warn(errmsg, GtkTemplateWarning) class _Child(object): ''' Assign this to an attribute in your class definition and it will be replaced with a widget defined in the UI file when init_template is called ''' __slots__ = [] @staticmethod def widgets(count): ''' Allows declaring multiple widgets with less typing:: button \ label1 \ label2 = GtkTemplate.Child.widgets(3) ''' return [_Child() for _ in range(count)] class _GtkTemplate(object): ''' Use this class decorator to signify that a class is a composite widget which will receive widgets and connect to signals as defined in a UI template. You must call init_template to cause the widgets/signals to be initialized from the template:: @GtkTemplate(ui='foo.ui') class Foo(Gtk.Box): def __init__(self): super(Foo, self).__init__() self.init_template() The 'ui' parameter can either be a file path or a GResource resource path:: @GtkTemplate(ui='/org/example/foo.ui') class Foo(Gtk.Box): pass To connect a signal to a method on your instance, do:: @GtkTemplate.Callback def on_thing_happened(self, widget): pass To create a child attribute that is retrieved from your template, add this to your class definition:: @GtkTemplate(ui='foo.ui') class Foo(Gtk.Box): widget = GtkTemplate.Child() Note: This is implemented as a class decorator, but if it were included with PyGI I suspect it might be better to do this in the GObject metaclass (or similar) so that init_template can be called automatically instead of forcing the user to do it. .. note:: Due to limitations in PyGObject, you may not inherit from python objects that use the GtkTemplate decorator. ''' __ui_path__ = None @staticmethod def Callback(f): ''' Decorator that designates a method to be attached to a signal from the template ''' f._gtk_callback = True return f Child = _Child @staticmethod def set_ui_path(*path): ''' If using file paths instead of resources, call this *before* loading anything that uses GtkTemplate, or it will fail to load your template file :param path: one or more path elements, will be joined together to create the final path ''' _GtkTemplate.__ui_path__ = abspath(join(*path)) def __init__(self, ui): self.ui = ui def __call__(self, cls): if not issubclass(cls, Gtk.Widget): raise TypeError("Can only use @GtkTemplate on Widgets") # Nested templates don't work if hasattr(cls, '__gtemplate_methods__'): raise TypeError("Cannot nest template classes") # Load the template either from a resource path or a file # - Prefer the resource path first try: template_bytes = Gio.resources_lookup_data(self.ui, Gio.ResourceLookupFlags.NONE) except GLib.GError: ui = self.ui if isinstance(ui, (list, tuple)): ui = join(ui) if _GtkTemplate.__ui_path__ is not None: ui = join(_GtkTemplate.__ui_path__, ui) with open(ui, 'rb') as fp: template_bytes = GLib.Bytes.new(fp.read()) _register_template(cls, template_bytes) return cls # Future shim support if this makes it into PyGI? #if hasattr(Gtk, 'GtkTemplate'): # GtkTemplate = lambda c: c #else: GtkTemplate = _GtkTemplate drawing-0.4.11/src/headerbar.py000066400000000000000000000103741362211111700163060ustar00rootroot00000000000000# headerbar.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk UI_PATH = '/com/github/maoschanz/drawing/ui/' class DrawingAdaptativeHeaderBar(): __gtype_name__ = 'DrawingAdaptativeHeaderBar' def __init__(self, is_eos): self.is_narrow = True # This is reducing the complexity of resizing, # but its main goal is to avoid a GTK minor bug where the initial # bunch of configure-event signals was sent to soon. if is_eos: builder = Gtk.Builder.new_from_resource(UI_PATH + 'headerbar-eos.ui') else: builder = Gtk.Builder.new_from_resource(UI_PATH + 'headerbar.ui') # Composition over inheritance self.header_bar = builder.get_object('header_bar') # Code differences are kept minimal between the 2 cases: widgets will # share similar names in order to both work with the same method # updating widgets' visibility when resizing. self.save_label = builder.get_object('save_label') self.save_icon = builder.get_object('save_icon') # If is_eos, hidable_widget is a box with paste/import, else it's the # "Open" button. self.hidable_widget = builder.get_object('hidable_widget') self.new_btn = builder.get_object('new_btn') self.main_menu_btn = builder.get_object('main_menu_btn') # Very high as a precaution, will be more precise later self.limit_size = 700 builder.add_from_resource(UI_PATH + 'win-menus.ui') self.short_main_menu = builder.get_object('short-window-menu') self.long_main_menu = builder.get_object('long-window-menu') # This one is the default to be coherent with the default value of # self.is_narrow self.main_menu_btn.set_menu_model(self.long_main_menu) new_menu = builder.get_object('new-image-menu') self.new_btn.set_menu_model(new_menu) self.undo_btn = builder.get_object('undo_btn') self.redo_btn = builder.get_object('redo_btn') def init_adaptability(self): # Header bar width limit self.header_bar.show_all() widgets_width = self.save_label.get_preferred_width()[0] \ - self.save_icon.get_preferred_width()[0] \ + self.new_btn.get_preferred_width()[0] \ + self.undo_btn.get_preferred_width()[0] \ + self.redo_btn.get_preferred_width()[0] \ + self.hidable_widget.get_preferred_width()[0] self.limit_size = 2.5 * widgets_width # 100% arbitrary def adapt_to_window_size(self): can_expand = (self.header_bar.get_allocated_width() > self.limit_size) incoherent = (can_expand == self.is_narrow) if incoherent: self.set_compact(not self.is_narrow) def set_compact(self, state): """Set the compactness of the headerbar: if the parameter is True, wide widgets will be hidden in favor of narrow ones. Else, the opposite.""" # XXX Instead of a boolean, `state` could be an integer, which would be # far more complex to handle, but would allow thinner granularity. if state: self.main_menu_btn.set_menu_model(self.long_main_menu) else: self.main_menu_btn.set_menu_model(self.short_main_menu) self.save_label.set_visible(not state) self.save_icon.set_visible(state) self.hidable_widget.set_visible(not state) self.new_btn.set_visible(not state) self.is_narrow = state def toggle_menu(self): self.main_menu_btn.set_active(not self.main_menu_btn.get_active()) def set_undo_label(self, label): if label is None: self.undo_btn.set_tooltip_text(_("Undo")) else: self.undo_btn.set_tooltip_text(_("Undo %s") % label) def set_redo_label(self, label): if label is None: self.redo_btn.set_tooltip_text(_("Redo")) else: self.redo_btn.set_tooltip_text(_("Redo %s") % label) ################################################################################ drawing-0.4.11/src/icons/000077500000000000000000000000001362211111700151255ustar00rootroot00000000000000drawing-0.4.11/src/icons/exchange-colors-symbolic.svg000066400000000000000000000007411362211111700225500ustar00rootroot00000000000000 drawing-0.4.11/src/icons/unit-percents-symbolic.svg000066400000000000000000000014361362211111700222710ustar00rootroot00000000000000 drawing-0.4.11/src/icons/unit-pixels-symbolic.svg000066400000000000000000000012631362211111700217500ustar00rootroot00000000000000 drawing-0.4.11/src/image.py000066400000000000000000000463551362211111700154630ustar00rootroot00000000000000# image.py # # Copyright 2018-2020 Romain F. T. # # 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 . import cairo from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, GLib, Pango from .gi_composites import GtkTemplate from .selection_manager import DrawingSelectionManager class DrawingMotionBehavior(): HOVER = 0 DRAW = 1 SLIP = 2 ################################################################################ @GtkTemplate(ui='/com/github/maoschanz/drawing/ui/image.ui') class DrawingImage(Gtk.Box): __gtype_name__ = 'DrawingImage' drawing_area = GtkTemplate.Child() h_scrollbar = GtkTemplate.Child() v_scrollbar = GtkTemplate.Child() CLOSING_PRECISION = 10 def __init__(self, window, **kwargs): super().__init__(**kwargs) self.init_template() self.window = window self.gfile = None self.filename = None self.drawing_area.add_events( \ Gdk.EventMask.BUTTON_PRESS_MASK | \ Gdk.EventMask.BUTTON_RELEASE_MASK | \ Gdk.EventMask.POINTER_MOTION_MASK | \ Gdk.EventMask.SMOOTH_SCROLL_MASK | \ Gdk.EventMask.ENTER_NOTIFY_MASK | \ Gdk.EventMask.LEAVE_NOTIFY_MASK) # Utiliser BUTTON_MOTION_MASK au lieu de POINTER_MOTION_MASK serait # moins complexe mais moins puissant # For displaying things on the widget self.drawing_area.connect('draw', self.on_draw) # For drawing with tools self.drawing_area.connect('motion-notify-event', self.on_motion_on_area) self.drawing_area.connect('button-press-event', self.on_press_on_area) self.drawing_area.connect('button-release-event', self.on_release_on_area) # For scrolling self.drawing_area.connect('scroll-event', self.on_scroll_on_area) self.h_scrollbar.connect('value-changed', self.on_scrollbar_value_change) self.v_scrollbar.connect('value-changed', self.on_scrollbar_value_change) # For the cursor self.drawing_area.connect('enter-notify-event', self.on_enter_image) self.drawing_area.connect('leave-notify-event', self.on_leave_image) ############################################################################ # Image initialization ##################################################### def init_image(self): """Part of the initialization common to both a new blank image and an opened image.""" self._is_pressed = False # Zoom and scroll initialization self.zoom_level = 1.0 self.scroll_x = 0 self.scroll_y = 0 self.motion_behavior = DrawingMotionBehavior.HOVER self.press2_x = 0.0 self.press2_y = 0.0 self.drag_scroll_x = 0.0 self.drag_scroll_y = 0.0 # Selection initialization self.selection = DrawingSelectionManager(self) # History initialization self.undo_history = [] self.redo_history = [] self._is_saved = True self.window.lookup_action('undo').set_enabled(False) self.window.lookup_action('redo').set_enabled(False) def init_background(self, width, height, background_rgba): r = float(background_rgba[0]) g = float(background_rgba[1]) b = float(background_rgba[2]) a = float(background_rgba[3]) self.initial_operation = { 'tool_id': None, 'pixbuf': None, 'red': r, 'green': g, 'blue': b, 'alpha': a, 'width': width, 'height': height } self.init_image() self.restore_first_pixbuf() def try_load_pixbuf(self, pixbuf): if not pixbuf.get_has_alpha(): pixbuf = pixbuf.add_alpha(False, 0, 0, 0) self.initial_operation = { 'tool_id': None, 'pixbuf': pixbuf, 'red': 0.0, 'green': 0.0, 'blue': 0.0, 'alpha': 0.0, 'width': pixbuf.get_width(), 'height': pixbuf.get_height() } self.main_pixbuf = pixbuf self.init_image() self.restore_first_pixbuf() self.update_title() def restore_first_pixbuf(self): """Set the first saved pixbuf as the main_pixbuf. This is used to rebuild the picture from its history.""" pixbuf = self.initial_operation['pixbuf'] width = self.initial_operation['width'] height = self.initial_operation['height'] self.temp_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1) self.selection.init_pixbuf() self.surface = cairo.ImageSurface(cairo.Format.ARGB32, width, height) if pixbuf is None: r = self.initial_operation['red'] g = self.initial_operation['green'] b = self.initial_operation['blue'] a = self.initial_operation['alpha'] self.main_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, \ True, 8, width, height) cairo_context = cairo.Context(self.surface) cairo_context.set_source_rgba(r, g, b, a) cairo_context.paint() self.update() self.set_surface_as_stable_pixbuf() else: self.main_pixbuf = self.initial_operation['pixbuf'].copy() self.use_stable_pixbuf() def try_load_file(self, gfile): self.gfile = gfile pixbuf = GdkPixbuf.Pixbuf.new_from_file(self.get_file_path()) self.try_load_pixbuf(pixbuf) ############################################################################ # Image title and tab management ########################################### def build_tab_widget(self): """Build the GTK widget displayed as the tab title.""" # The tab can be closed with a button. btn = Gtk.Button.new_from_icon_name('window-close-symbolic', Gtk.IconSize.BUTTON) btn.set_relief(Gtk.ReliefStyle.NONE) btn.connect('clicked', self.try_close_tab) # The title is a label. Middle-clicking on it closes the tab too. self.tab_label = Gtk.Label(label=self.get_filename_for_display()) self.tab_label.set_ellipsize(Pango.EllipsizeMode.END) event_box = Gtk.EventBox() event_box.add(self.tab_label) event_box.connect('button-press-event', self.on_tab_title_clicked) # These widgets are packed in a regular box, which is returned. tab_title = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, expand=True) if self.window.decorations == 'csd-eos': tab_title.pack_start(btn, expand=False, fill=False, padding=0) tab_title.pack_end(event_box, expand=True, fill=True, padding=0) else: tab_title.pack_start(event_box, expand=True, fill=True, padding=0) tab_title.pack_end(btn, expand=False, fill=False, padding=0) tab_title.show_all() return tab_title def on_tab_title_clicked(self, widget, event_button): if event_button.type == Gdk.EventType.BUTTON_PRESS \ and event_button.button == Gdk.BUTTON_MIDDLE: self.try_close_tab() return True return False # This callback HAS TO return a boolean def update_title(self): main_title = self.get_filename_for_display() if not self._is_saved: main_title = '*' + main_title self.set_tab_label(main_title) return main_title def get_filename_for_display(self): if self.get_file_path() is None: unsaved_file_name = _("Unsaved file") else: unsaved_file_name = self.get_file_path().split('/')[-1] return unsaved_file_name def try_close_tab(self, *args): """Ask the window to close the image/tab. Then unallocate widgets and pixbufs.""" if self.window.close_tab(self): self.destroy() self.selection.reset() self.main_pixbuf = None self.temp_pixbuf = None return True else: return False def set_tab_label(self, title_text): self.tab_label.set_label(title_text) def get_file_path(self): if self.gfile is None: return None else: return self.gfile.get_path() ############################################################################ # Wrappers for window methods related to tools ############################# def active_tool(self): return self.window.active_tool() def get_right_rgba(self): return self.window.color_popover_r.color_widget.get_rgba() def get_left_rgba(self): return self.window.color_popover_l.color_widget.get_rgba() ############################################################################ # History management ####################################################### def try_undo(self, *args): self.active_tool().cancel_ongoing_operation() if len(self.undo_history) != 0: self.redo_history.append(self.undo_history.pop()) # TODO implement operation_is_ongoing # if self.window.operation_is_ongoing(): # self.active_tool().cancel_ongoing_operation() # elif len(self.undo_history) != 0: # self.redo_history.append(self.undo_history.pop()) def try_redo(self, *args): self.undo_history.append(self.redo_history.pop()) def update_history_sensitivity(self): can_undo = ( len(self.undo_history) != 0 ) or self.window.operation_is_ongoing() self.window.lookup_action('undo').set_enabled(can_undo) self.window.lookup_action('redo').set_enabled(len(self.redo_history) != 0) def add_operation_to_history(self, operation): self._is_saved = False self.undo_history.append(operation) self.update_history_sensitivity() def on_tool_finished(self): # XXX malgré son nom, cette méthode est appelée # (uniquement) par [Tool].apply_to_pixbuf #self.redo_history = [] self.update_history_sensitivity() self.update() self.set_surface_as_stable_pixbuf() # XXX ici ou dans [Tool].apply_operation ? self.update_actions_state() def set_action_sensitivity(self, action_name, state): self.window.lookup_action(action_name).set_enabled(state) def update_actions_state(self): state = self.selection.is_active self.set_action_sensitivity('unselect', state) self.set_action_sensitivity('select_all', not state) self.set_action_sensitivity('selection_cut', state) self.set_action_sensitivity('selection_copy', state) self.set_action_sensitivity('selection_delete', state) self.set_action_sensitivity('selection_export', state) self.set_action_sensitivity('new_tab_selection', state) self.active_tool().update_actions_state() def should_replace(self): if len(self.undo_history) > 0: return False return self.initial_operation['pixbuf'] is None ############################################################################ # Drawing area, main pixbuf, and surface management ######################## def on_draw(self, area, cairo_context): """Signal callback. Executed when self.drawing_area is redrawn.""" cairo_context.scale(self.zoom_level, self.zoom_level) cairo_context.set_source_surface(self.get_surface(), \ -1 * self.scroll_x, -1 * self.scroll_y) cairo_context.paint() self.active_tool().on_draw(area, cairo_context) def on_press_on_area(self, area, event): """Signal callback. Executed when a mouse button is pressed on self.drawing_area, if the button is the mouse wheel the colors are exchanged, otherwise the signal is transmitted to the selected tool.""" if self._is_pressed: return event_x, event_y = self.get_event_coords(event) if event.button == 2: self.motion_behavior = DrawingMotionBehavior.SLIP self.press2_x = event_x self.press2_y = event_y self.drag_scroll_x = event_x self.drag_scroll_y = event_y return self.motion_behavior = DrawingMotionBehavior.DRAW self.active_tool().on_press_on_area(event, self.surface, \ self.window.thickness_spinbtn.get_value(), \ self.get_left_rgba(), self.get_right_rgba(), event_x, event_y) self._is_pressed = True def on_motion_on_area(self, area, event): """Signal callback. Executed when the mouse pointer moves upon self.drawing_area, the signal is transmitted to the selected tool. If a button (not the mouse wheel) is pressed, the tool's method should have an effect on the image, otherwise it shouldn't change anything except the mouse cursor icon for example.""" event_x, event_y = self.get_event_coords(event) if self.motion_behavior == DrawingMotionBehavior.HOVER: # XXX ça apprécierait sans doute d'avoir direct les bonnes coordonnées ? self.active_tool().on_unclicked_motion_on_area(event, self.surface) elif self.motion_behavior == DrawingMotionBehavior.DRAW: # implicitely impossible if not self._is_pressed self.active_tool().on_motion_on_area(event, self.surface, event_x, event_y) self.update() else: # self.motion_behavior == DrawingMotionBehavior.SLIP: delta_x = int(self.drag_scroll_x - event_x) delta_y = int(self.drag_scroll_y - event_y) self.add_deltas(delta_x, delta_y, 0.8) self.drag_scroll_x = event_x self.drag_scroll_y = event_y def on_release_on_area(self, area, event): """Signal callback. Executed when a mouse button is released on self.drawing_area, if the button is not the signal is transmitted to the selected tool.""" if self.motion_behavior == DrawingMotionBehavior.SLIP: if abs(self.press2_x - self.drag_scroll_x) < self.CLOSING_PRECISION \ and abs(self.press2_y - self.drag_scroll_y) < self.CLOSING_PRECISION: self.window.exchange_colors() self.motion_behavior = DrawingMotionBehavior.HOVER return self.motion_behavior = DrawingMotionBehavior.HOVER event_x, event_y = self.get_event_coords(event) self.active_tool().on_release_on_area(event, self.surface, event_x, event_y) self.window.set_picture_title() self._is_pressed = False def update(self): self.drawing_area.queue_draw() def get_surface(self): return self.surface def on_enter_image(self, *args): self.window.set_cursor(True) def on_leave_image(self, *args): self.window.set_cursor(False) def post_save(self): self._is_saved = True self.use_stable_pixbuf() self.update() def set_surface_as_stable_pixbuf(self): # print('image/379: set_surface_as_stable_pixbuf') self.main_pixbuf = Gdk.pixbuf_get_from_surface(self.surface, 0, 0, \ self.surface.get_width(), self.surface.get_height()) def use_stable_pixbuf(self): # print('image/384: use_stable_pixbuf') self.surface = Gdk.cairo_surface_create_from_pixbuf(self.main_pixbuf, 0, None) def get_main_pixbuf(self): return self.main_pixbuf def get_pixbuf_width(self): return self.main_pixbuf.get_width() def get_pixbuf_height(self): return self.main_pixbuf.get_height() def set_main_pixbuf(self, new_pixbuf): if new_pixbuf is None: return False else: self.main_pixbuf = new_pixbuf return True def get_widget_width(self): return self.drawing_area.get_allocated_width() def get_widget_height(self): return self.drawing_area.get_allocated_height() ############################################################################ # Temporary pixbuf management ############################################## def set_temp_pixbuf(self, new_pixbuf): if new_pixbuf is None: # XXX maybe throw something instead print("new_pixbuf is None, no change to temp_pixbuf will be applied") else: self.temp_pixbuf = new_pixbuf def reset_temp(self): self.temp_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1) self.use_stable_pixbuf() self.update() ############################################################################ # Scroll and zoom levels ################################################### def fake_scrollbar_update(self): self.add_deltas(0, 0, 0) def get_event_coords(self, event): event_x = self.scroll_x + (event.x / self.zoom_level) event_y = self.scroll_y + (event.y / self.zoom_level) return event_x, event_y def on_scroll_on_area(self, area, event): self.add_deltas(event.delta_x, event.delta_y, 10) def get_dragged_selection_path(self): return self.selection.get_path_with_scroll(self.scroll_x, self.scroll_y) def on_scrollbar_value_change(self, scrollbar): self.correct_coords(self.h_scrollbar.get_value(), self.v_scrollbar.get_value()) self.update() def add_deltas(self, delta_x, delta_y, factor): wanted_x = self.scroll_x + int(delta_x * factor) wanted_y = self.scroll_y + int(delta_y * factor) self.correct_coords(wanted_x, wanted_y) self.window.minimap.update_minimap() def correct_coords(self, wanted_x, wanted_y): available_w = self.get_widget_width() available_h = self.get_widget_height() if available_w < 2: return # could be better handled # Update the horizontal scrollbar mpb_width = self.get_pixbuf_width() wanted_x = min(wanted_x, self.get_max_coord(mpb_width, available_w)) wanted_x = max(wanted_x, 0) self.update_scrollbar(False, available_w, int(mpb_width), int(wanted_x)) # Update the vertical scrollbar mpb_height = self.get_pixbuf_height() wanted_y = min(wanted_y, self.get_max_coord(mpb_height, available_h)) wanted_y = max(wanted_y, 0) self.update_scrollbar(True, available_h, int(mpb_height), int(wanted_y)) def get_max_coord(self, mpb_size, available_size): max_coord = mpb_size - (available_size / self.zoom_level) return max_coord def update_scrollbar(self, is_vertical, allocated_size, pixbuf_size, coord): if is_vertical: scrollbar = self.v_scrollbar else: scrollbar = self.h_scrollbar scrollbar.set_visible(allocated_size / self.zoom_level < pixbuf_size) scrollbar.set_range(0, pixbuf_size) scrollbar.get_adjustment().set_page_size(allocated_size / self.zoom_level) scrollbar.set_value(coord) if is_vertical: self.scroll_y = int(scrollbar.get_value()) else: self.scroll_x = int(scrollbar.get_value()) def inc_zoom_level(self, delta): self.set_zoom_level((self.zoom_level * 100) + delta) def set_zoom_level(self, level): self.zoom_level = (int(level)/100) self.window.minimap.update_zoom_scale(self.zoom_level) self.fake_scrollbar_update() self.update() def on_opti_zoom_level(self, *args): if self.zoom_is_auto: self.set_opti_zoom_level() def set_opti_zoom_level(self, *args): allocated_width = self.get_widget_width() allocated_height = self.get_widget_height() if allocated_width == 1: # XXX because self.drawing_area might be not allocated yet return # allocated_width = 800 # allocated_height = 400 # FIXME but that hack can't update the minimap label h_ratio = allocated_width / self.get_pixbuf_width() v_ratio = allocated_height / self.get_pixbuf_height() opti = min(h_ratio, v_ratio) * 99 # Not 100 because some margin is cool self.set_zoom_level(opti) self.scroll_x = 0 self.scroll_y = 0 ############################################################################ # Printing ################################################################# def print_image(self): op = Gtk.PrintOperation() # FIXME the preview doesn't work, i guess it's because of flatpak ? # I could connect to the 'preview' signal but that would be weird op.connect('draw-page', self.do_draw_page) op.connect('begin-print', self.do_begin_print) op.connect('end-print', self.do_end_print) res = op.run(Gtk.PrintOperationAction.PRINT_DIALOG, self.window) def do_end_print(self, *args): pass def do_draw_page(self, op, print_ctx, page_num): # TODO if it's too big for one page ? cairo_context = print_ctx.get_cairo_context() Gdk.cairo_set_source_pixbuf(cairo_context, self.main_pixbuf, 0, 0) cairo_context.paint() def do_begin_print(self, op, print_ctx): op.set_n_pages(1) cairo_context = print_ctx.get_cairo_context() Gdk.cairo_set_source_pixbuf(cairo_context, self.main_pixbuf, 0, 0) cairo_context.paint() ############################################################################ ################################################################################ drawing-0.4.11/src/main.py000066400000000000000000000277671362211111700153330ustar00rootroot00000000000000# main.py # # Copyright 2018-2020 Romain F. T. # # 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 . import sys, gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk, Gio, GLib, Gdk from .window import DrawingWindow from .preferences import DrawingPrefsWindow APP_ID = 'com.github.maoschanz.drawing' APP_PATH = '/com/github/maoschanz/drawing/' def main(version): app = Application(version) return app.run(sys.argv) ################################################################################ class Application(Gtk.Application): shortcuts_window = None prefs_window = None # INITIALIZATION ########################################################### def __init__(self, version): super().__init__(application_id=APP_ID, flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE) GLib.set_application_name('Drawing') # XXX drawing ? GLib.set_prgname(APP_ID) self.version = version self.has_tools_in_menubar = False self.connect('startup', self.on_startup) self.register(None) self.connect('activate', self.on_activate) self.connect('command-line', self.on_cli) self.add_main_option('version', b'v', GLib.OptionFlags.NONE, GLib.OptionArg.NONE, _("Print the version and display the 'about' dialog"), None) self.add_main_option('new-window', b'n', GLib.OptionFlags.NONE, GLib.OptionArg.NONE, _("Open a new window"), None) self.add_main_option('new-tab', b't', GLib.OptionFlags.NONE, GLib.OptionArg.NONE, _("Open a new tab"), None) self.add_main_option('edit-clipboard', b'c', GLib.OptionFlags.NONE, GLib.OptionArg.NONE, _("Edit the clipboard content"), None) # TODO options pour le screenshot ? icon_theme = Gtk.IconTheme.get_default() icon_theme.add_resource_path(APP_PATH + 'icons') icon_theme.add_resource_path(APP_PATH + 'tools/icons') self.connect('window-removed', self.update_windows_menu_section) def on_startup(self, *args): """Called only once, add app-wide menus and actions, and all accels.""" self.build_actions() builder = Gtk.Builder.new_from_resource(APP_PATH + 'ui/app-menus.ui') menubar_model = builder.get_object('menu-bar') self.set_menubar(menubar_model) if self.prefers_app_menu(): appmenu_model = builder.get_object('app-menu') self.set_app_menu(appmenu_model) def build_actions(self): """Add app-wide actions.""" self.add_action_simple('new_window', self.on_new_window, ['n']) self.add_action_simple('settings', self.on_prefs, None) if self.is_beta(): self.add_action_simple('report_bug', self.on_report, None) self.add_action_simple('shortcuts', self.on_shortcuts, \ ['question', 'F1']) self.add_action_simple('help', self.on_help_index, ['F1']) self.add_action_simple('help_main', self.on_help_main, None) self.add_action_simple('help_tools', self.on_help_tools, None) self.add_action_simple('help_canvas', self.on_help_canvas, None) self.add_action_simple('help_selection', self.on_help_selection, None) self.add_action_simple('about', self.on_about, ['F1']) self.add_action_simple('quit', self.on_quit, ['q']) self.add_action_enum('active-window', 0, self.change_active_win) # WINDOWS AND CLI MANAGEMENT ############################################### def change_active_win(self, *args): win_id = args[1].get_uint32() for window in self.get_windows(): if not isinstance(window, Gtk.ApplicationWindow): continue elif window.get_id() is args[1].get_uint32(): window.present() args[0].set_state( GLib.Variant('u', win_id) ) def update_windows_menu_section(self, *args): # XXX trop appelée à mon goût section = self.get_menubar().get_item_link(6, \ Gio.MENU_LINK_SUBMENU).get_item_link(1, Gio.MENU_LINK_SECTION) section.remove_all() for window in self.get_windows(): title = window.get_title() if not isinstance(window, Gtk.ApplicationWindow): continue elif title is None: continue else: detailed_name = 'app.active-window(uint32 ' + \ str(window.get_id()) + ')' try: title2 = title.split(' - ') title2 = title2[1] + ' - ' + title2[2] except Exception: title2 = title section.append(title2, detailed_name) def open_window_with_content(self, gfile, get_cb): """Open a new window with an optional Gio.File as an argument. If get_cb is true, the Gio.File is ignored and the picture is built from the clipboard content.""" win = DrawingWindow(application=self) win.present() win.init_window_content(gfile, get_cb) # this optimization has no effect # because of GLib unknown magic, but should be kept anyway because the # window is presented to the user regarless of loading errors, making # any issue in `init_window_content` very explicit, and more likely to # be reported. action = self.lookup_action('active-window') action.set_state( GLib.Variant('u', win.get_id()) ) return win def on_activate(self, *args): """I don't know if this is ever called from the 'activate' signal, but it's called by on_cli anyway.""" win = self.props.active_window if not win: self.on_new_window() else: win.present() def on_cli(self, *args): """Main handler, managing options and CLI arguments.""" # This is the list of files given by the command line. If there is none, # this will be ['/app/bin/drawing'] which has a length of 1. arguments = args[1].get_arguments() # Possible options are 'version', 'new-window', and 'new-tab', in this # order: only one option can be applied, '-ntv' will be the same as '-v'. options = args[1].get_options_dict() if options.contains('version'): print(_("Drawing") + ' ' + self.version) self.on_about() elif options.contains('edit-clipboard'): self.open_window_with_content(None, True) # If no file given as argument elif options.contains('new-window') and len(arguments) == 1: self.on_new_window() elif options.contains('new-tab') and len(arguments) == 1: win = self.props.active_window if not win: self.on_new_window() else: win.present() self.props.active_window.build_new_image() elif len(arguments) == 1: self.on_activate() elif options.contains('new-window'): self.on_new_window() for fpath in arguments: f = self.get_valid_file(args[1], fpath) if f is not None: self.open_window_with_content(f, False) else: # giving files without '-n' is equivalent to giving files with '-t' for fpath in arguments: f = self.get_valid_file(args[1], fpath) if f is not None: win = self.props.active_window if not win: self.open_window_with_content(f, False) else: win.present() self.props.active_window.build_new_tab(gfile=f) # I don't even know if i should return something return 0 # ACTIONS CALLBACKS ######################################################## def on_new_window(self, *args): """Action callback, opening a new window with an empty canvas.""" return self.open_window_with_content(None, False) def on_report(self, *args): """Action callback, opening a new issue on the github repo.""" win = self.props.active_window url = 'https://github.com/maoschanz/drawing/issues/new' Gtk.show_uri_on_window(win, url, Gdk.CURRENT_TIME) def on_shortcuts(self, *args): """Action callback, showing the 'shortcuts' dialog.""" if self.shortcuts_window is not None: self.shortcuts_window.destroy() builder = Gtk.Builder().new_from_resource(APP_PATH + 'ui/shortcuts.ui') self.shortcuts_window = builder.get_object('shortcuts') self.shortcuts_window.present() def on_prefs(self, *args): """Action callback, showing the preferences window.""" if self.prefs_window is not None: self.prefs_window.destroy() wants_csd = not 'ssd' in self.props.active_window.decorations self.prefs_window = DrawingPrefsWindow(self.is_beta(), wants_csd) self.prefs_window.present() def on_help_index(self, *args): """Action callback, showing the index of user help manual.""" self.show_help_page('') def on_help_main(self, *args): """Action callback, showing the 'basic features' page of the user help manual.""" self.show_help_page('/main_features') def on_help_tools(self, *args): """Action callback, showing the 'tools' page of the user help manual.""" self.show_help_page('/drawing_tools') def on_help_canvas(self, *args): """Action callback, showing the 'canvas and selection tools' page of the user help manual.""" self.show_help_page('/canvas_tools') def on_help_selection(self, *args): """Action callback, showing the 'selection' page of the user help manual.""" self.show_help_page('/selection_tools') def show_help_page(self, suffix): win = self.props.active_window Gtk.show_uri_on_window(win, 'help:drawing' + suffix, Gdk.CURRENT_TIME) def on_about(self, *args): """Action callback, showing the "about" dialog.""" about_dialog = Gtk.AboutDialog(transient_for=self.props.active_window, copyright='© 2018-2020 Romain F. T.', authors=['Romain F. T.'], # To tranlators: "translate" this by your name, it will be displayed # in the "about" dialog translator_credits=_("translator-credits"), artists=['Tobias Bernard', 'Romain F. T.'], comments=_("A drawing application for the GNOME desktop."), license_type=Gtk.License.GPL_3_0, logo_icon_name=APP_ID, version=str(self.version), website='https://maoschanz.github.io/drawing/', website_label=_("Official webpage")) about_dialog.run() about_dialog.destroy() def on_quit(self, *args): """Action callback, quitting the app.""" self.quit() # UTILITIES ################################################################ def is_beta(self): """Tells is the app version is even or odd, odd versions being considered as unstable versions. This affects available options and the style of the headerbar.""" version_array = self.version.split('.') if (int(version_array[1]) * 5) % 10 == 5: return True else: return False def add_action_simple(self, action_name, callback, shortcuts): action = Gio.SimpleAction.new(action_name, None) action.connect('activate', callback) self.add_action(action) if shortcuts is not None: self.set_accels_for_action('app.' + action_name, shortcuts) def add_action_boolean(self, action_name, default, callback): action = Gio.SimpleAction().new_stateful(action_name, None, \ GLib.Variant.new_boolean(default)) action.connect('change-state', callback) self.add_action(action) def add_action_enum(self, action_name, default, callback): # XXX attention, celle-ci fonctionne avec un int, pas une string action = Gio.SimpleAction().new_stateful(action_name, \ GLib.VariantType.new('u'), GLib.Variant('u', default)) action.connect('change-state', callback) self.add_action(action) def get_valid_file(self, app, path): try: f = app.create_file_for_arg(path) if 'image/' in f.query_info('standard::*', \ Gio.FileQueryInfoFlags.NONE, None).get_content_type(): return f else: return None # mainly when it's /app/bin/drawing except: err = _("Error opening this file. Did you mean %s ?") command = "\n\tflatpak run --file-forwarding {0} @@ {1} @@\n" command = command.format(APP_ID, path) print(err % command) return None ############################################################################ ################################################################################ drawing-0.4.11/src/meson.build000066400000000000000000000034721362211111700161620ustar00rootroot00000000000000pkgdatadir = join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()) moduledir = join_paths(pkgdatadir, meson.project_name()) gnome = import('gnome') gnome.compile_resources(meson.project_name(), meson.project_name() + '.gresource.xml', gresource_bundle: true, install: true, install_dir: pkgdatadir, ) python3 = import('python3') conf = configuration_data() conf.set('PYTHON', python3.find_python().path()) conf.set('VERSION', meson.project_version()) conf.set('localedir', join_paths(get_option('prefix'), get_option('localedir'))) conf.set('pkgdatadir', pkgdatadir) configure_file( input: meson.project_name() + '.in', output: meson.project_name(), configuration: conf, install: true, install_dir: get_option('bindir') ) drawing_sources = [ '__init__.py', 'gi_composites.py', 'main.py', 'window.py', 'image.py', 'message_dialog.py', 'color_popover.py', 'options_manager.py', 'headerbar.py', 'minimap.py', 'selection_manager.py', 'utilities.py', 'custom_image.py', 'properties.py', 'preferences.py', 'tools/abstract_tool.py', 'tools/classic_tools/tool_arc.py', 'tools/classic_tools/tool_circle.py', 'tools/classic_tools/tool_experiment.py', 'tools/classic_tools/tool_freeshape.py', 'tools/classic_tools/tool_line.py', 'tools/classic_tools/tool_paint.py', 'tools/classic_tools/tool_pencil.py', 'tools/classic_tools/tool_polygon.py', 'tools/classic_tools/tool_picker.py', 'tools/classic_tools/tool_rectangle.py', 'tools/classic_tools/tool_text.py', 'tools/selection_tools/tool_select.py', 'tools/canvas_tools/abstract_canvas_tool.py', 'tools/canvas_tools/tool_crop.py', 'tools/canvas_tools/tool_flip.py', 'tools/canvas_tools/tool_rotate.py', 'tools/canvas_tools/tool_saturate.py', 'tools/canvas_tools/tool_scale.py' ] install_data(drawing_sources, install_dir: moduledir) drawing-0.4.11/src/message_dialog.py000066400000000000000000000044001362211111700173250ustar00rootroot00000000000000# message_dialog.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk class DrawingMessageDialog(Gtk.MessageDialog): __gtype_name__ = 'DrawingMessageDialog' def __init__(self, window, **kwargs): super().__init__(modal=True, transient_for=window, **kwargs) self.set_resizable(True) self.set_default_size(350, -1) self.min_action_index = 0 # The dialog has already a default empty label, with methods around it, # but i don't care i'll add my widgets myself later. self.get_message_area().get_children()[0].destroy() if window.get_allocated_width() < 500: self.get_action_area().set_orientation(Gtk.Orientation.VERTICAL) self.should_wrap = True else: # Wrappable labels bother the height allocation, so they shouldn't # be used if it's not required self.should_wrap = False def set_action(self, label, style, is_default): """Add a button (with the specified style) to the message dialog and returns the corresponding response id.""" self.min_action_index = self.min_action_index + 1 btn = self.add_button(label, self.min_action_index) if style is not None: btn.get_style_context().add_class(style) if is_default: btn.grab_default() return self.min_action_index def add_string(self, string): label = Gtk.Label(label=string, wrap=self.should_wrap) self.get_message_area().add(label) self.get_message_area().show_all() def add_widget(self, widget): self.get_content_area().add(widget) self.get_content_area().show_all() ############################################################################ ################################################################################ drawing-0.4.11/src/minimap.py000066400000000000000000000113741362211111700160240ustar00rootroot00000000000000# minimap.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .utilities import utilities_show_overlay_on_context class DrawingMinimap(Gtk.Popover): __gtype_name__ = 'DrawingMinimap' # TODO custom "move" cursor def __init__(self, window, minimap_btn, **kwargs): super().__init__(**kwargs) self.window = window self.minimap_btn = minimap_btn self.preview_size = self.window._settings.get_int('preview-size') self.mini_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 300, 300) self.mini_surface = cairo.ImageSurface(cairo.Format.ARGB32, 5, 5) builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/ui/minimap.ui') box = builder.get_object('minimap_box') self.minimap_area = builder.get_object('minimap_area') self.minimap_area.set_size(200, 200) self.minimap_area.add_events(Gdk.EventMask.BUTTON_PRESS_MASK | \ Gdk.EventMask.BUTTON_RELEASE_MASK) self.minimap_area.connect('draw', self.on_minimap_draw) self.minimap_area.connect('button-press-event', self.on_minimap_press) self.minimap_area.connect('button-release-event', self.on_minimap_release) self.add(box) self.set_relative_to(self.minimap_btn) self.connect('closed', self.on_popover_dismissed) def on_popover_dismissed(self, *args): """Callback of the 'closed' signal, updating the state of the action.""" self.minimap_btn.set_active(False) def on_minimap_draw(self, area, cairo_context): """Callback of the 'draw' signal, painting the area with the surface.""" cairo_context.set_source_surface(self.mini_surface, 0, 0) cairo_context.paint() def on_minimap_press(self, area, event): """Callback of the 'button-press-event' signal.""" self.old_x = event.x self.old_y = event.y def on_minimap_release(self, area, event): """Callback of the 'button-release-event' signal.""" ratio = self.get_main_pixbuf().get_width()/self.mini_pixbuf.get_width() delta_x = int((event.x - self.old_x) * ratio) delta_y = int((event.y - self.old_y) * ratio) self.window.get_active_image().add_deltas(delta_x, delta_y, 1) def get_main_pixbuf(self): return self.window.get_active_image().main_pixbuf def update_minimap(self, *args): """Update the overlay on the minimap, based on the scroll coordinates.""" image = self.window.get_active_image() x = image.scroll_x y = image.scroll_y w = self.preview_size h = self.preview_size mpb_width = self.get_main_pixbuf().get_width() mpb_height = self.get_main_pixbuf().get_height() if mpb_height > mpb_width: w = self.preview_size * (mpb_width/mpb_height) else: h = self.preview_size * (mpb_height/mpb_width) self.mini_pixbuf = self.get_main_pixbuf().scale_simple(w, h, \ GdkPixbuf.InterpType.TILES) self.mini_surface = Gdk.cairo_surface_create_from_pixbuf(self.mini_pixbuf, 0, None) self.minimap_area.set_size_request(self.mini_surface.get_width(), \ self.mini_surface.get_height()) visible_width = min(image.get_widget_width(), mpb_width - x) visible_height = min(image.get_widget_height(), mpb_height - y) if image.get_widget_width() < mpb_width or image.get_widget_height() < mpb_height: mini_x = x * self.mini_pixbuf.get_width()/mpb_width mini_y = y * self.mini_pixbuf.get_height()/mpb_height mini_width = visible_width * self.mini_pixbuf.get_width()/mpb_width mini_height = visible_height * self.mini_pixbuf.get_height()/mpb_height mini_context = cairo.Context(self.mini_surface) mini_context.move_to(mini_x, mini_y) mini_context.line_to(mini_x, mini_height + mini_y) mini_context.line_to(mini_width + mini_x, mini_height + mini_y) mini_context.line_to(mini_width + mini_x, mini_y) mini_context.close_path() mini_path = mini_context.copy_path() utilities_show_overlay_on_context(mini_context, mini_path, False) # else: # ??? self.minimap_area.queue_draw() image.update() ############################################################################ ################################################################################ drawing-0.4.11/src/options_manager.py000066400000000000000000000047431362211111700175610ustar00rootroot00000000000000# options_manager.py # # Copyright 2018-2020 Romain F. T. # # 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 . import cairo from gi.repository import GLib class DrawingOptionsManager(): __gtype_name__ = 'DrawingOptionsManager' def __init__(self, window): self.window = window self.cached_value1 = None self.cached_value2 = None def add_tool_option_boolean(self, name, default): if self.window.lookup_action(name) is not None: return self.window.add_action_boolean(name, default, self.boolean_callback) def add_tool_option_enum(self, name, default): if self.window.lookup_action(name) is not None: return self.window.add_action_enum(name, default, self.enum_callback) def get_value(self, name): if self.window.lookup_action(name) is None: return action = self.window.lookup_action(name) if action.get_state_type().dup_string() is 's': return action.get_state().get_string() else: return action.get_state() ############################################################################ def boolean_callback(self, *args): new_value = args[1].get_boolean() # current_value = args[0].get_state() args[0].set_state(GLib.Variant.new_boolean(new_value)) self.window.set_picture_title() def enum_callback(self, *args): """This callback is simple but can't handle both menuitems and radiobuttons. It is only good for menuitems and modelbuttons.""" new_value = args[1].get_string() current_value = args[0].get_state().get_string() # No need to change the state if it's already as the user want. # Cases "m1 m1" or "b1 b1" or "b1 m1" or "m1 b1" if new_value == current_value: return # Actually change the state to the new value. args[0].set_state(GLib.Variant.new_string(new_value)) self.window.set_picture_title() ############################################################################ ################################################################################ drawing-0.4.11/src/preferences.py000066400000000000000000000235111362211111700166670ustar00rootroot00000000000000# preferences.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gio, Gdk from .gi_composites import GtkTemplate from .utilities import utilities_add_unit_to_spinbtn @GtkTemplate(ui='/com/github/maoschanz/drawing/ui/preferences.ui') class DrawingPrefsWindow(Gtk.Window): __gtype_name__ = 'DrawingPrefsWindow' content_area = GtkTemplate.Child() stack_switcher = GtkTemplate.Child() page_images = GtkTemplate.Child() page_tools = GtkTemplate.Child() page_advanced = GtkTemplate.Child() adj_width = GtkTemplate.Child() adj_height = GtkTemplate.Child() adj_preview = GtkTemplate.Child() _current_grid = None _grid_attach_cpt = 0 _settings = Gio.Settings.new('com.github.maoschanz.drawing') def __init__(self, is_beta, wants_csd, **kwargs): super().__init__(**kwargs) self.init_template() if wants_csd: header_bar = Gtk.HeaderBar(visible=True, title=_("Preferences"), \ show_close_button=True) self.set_titlebar(header_bar) self.content_area.remove(self.stack_switcher) header_bar.set_custom_title(self.stack_switcher) else: self.stack_switcher.set_margin_top(10) self.page_builder_images() self.page_builder_tools() self.page_builder_advanced(is_beta) # Each page_* attribute is a GtkGrid. The page_builder_* methods declare # their grid to be the currently filled one, and reset the counter. # Then, the page_builder_* methods will call the add_* methods, who will # build accurate widgets to be packed on the grid by the attach_* methods. ############################################################################ def set_current_grid(self, grid): self._current_grid = grid self._grid_attach_cpt = 0 def update_grid_cpt(self): self._grid_attach_cpt = self._grid_attach_cpt + 1 ############################################################################ def page_builder_images(self): """Adds the widget to the grid of the 'images' page.""" self.set_current_grid(self.page_images) self.add_section_title(_("New images")) self.add_adj(_("Default width"), 'default-width', self.adj_width) self.add_adj(_("Default height"), 'default-height', self.adj_height) bg_color_btn = Gtk.ColorButton(use_alpha=True) background_rgba = self._settings.get_strv('background-rgba') r = float(background_rgba[0]) g = float(background_rgba[1]) b = float(background_rgba[2]) a = float(background_rgba[3]) color = Gdk.RGBA(red=r, green=g, blue=b, alpha=a) bg_color_btn.set_rgba(color) bg_color_btn.connect('color-set', self.on_background_changed) self.add_row(_("Default background"), bg_color_btn) self.add_section_separator() self.add_section_title(_("Images saving")) self.add_help(_("JPEG and BMP images can't handle transparency.") + \ " " + _("If you save your images in these formats, what " + \ "do want to use to replace transparent pixels?")) alpha_dict = { 'white': _("White"), 'black': _("Black"), 'checkboard': _("Checkboard"), 'nothing': _("Nothing"), 'ask': _("Ask before saving") } self.add_radio_flowbox('replace-alpha', alpha_dict) def page_builder_tools(self): """Adds the widget to the grid of the 'tools' page.""" self.set_current_grid(self.page_tools) # self.add_section_title(_("Appearance")) self.add_switch(_("Show tools names"), 'show-labels') self.add_switch(_("Use big icons"), 'big-icons') def page_builder_advanced(self, is_beta): """Adds the widget to the grid of the 'advanced' page.""" self.set_current_grid(self.page_advanced) self.add_section_title(_("Advanced options")) self.add_adj(_("Preview size"), 'preview-size', self.adj_preview) if is_beta: self.add_switch(_("Development features"), 'devel-only') else: self._settings.set_boolean('devel-only', False) self.add_section_separator() self.add_section_title(_("Layout")) self.add_help(_("The recommended value is \"Automatic\".")) layouts_dict = { 'auto': _("Automatic"), 'csd': _("Compact"), 'csd-eos': _("elementary OS"), # "Legacy" is about the window layout, it means menubar+toolbar, you # can translate it like if it was "Traditional" 'ssd': _("Legacy"), # "Legacy" is about the window layout, it means menubar+toolbar, you # can translate it like if it was "Traditional" 'ssd-symbolic': _("Legacy (symbolic icons)"), 'ssd-menubar': _("Menubar only"), 'ssd-toolbar': _("Toolbar only"), 'ssd-toolbar-symbolic': _("Toolbar only (symbolic icons)") } self.add_radio_flowbox('decorations', layouts_dict) ############################################################################ # Generic methods to build and pack widgets ################################ def add_section_separator(self): self.attach_large(Gtk.Separator()) def add_section_title(self, label_text): label = Gtk.Label(halign=Gtk.Align.START, use_markup=True, \ label=('' + label_text + '')) self.attach_large(label) def add_help(self, label_text): help_btn = Gtk.Button.new_from_icon_name('help-faq-symbolic', \ Gtk.IconSize.BUTTON) help_btn.set_valign(Gtk.Align.CENTER) help_btn.set_relief(Gtk.ReliefStyle.NONE) help_btn.set_action_name('app.help_prefs') # could be a parameter label = Gtk.Label(label=label_text) label.set_line_wrap(True) label.get_style_context().add_class('dim-label') box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=10) box.pack_start(label, expand=False, fill=False, padding=0) box.pack_end(help_btn, expand=False, fill=False, padding=0) box.show_all() self.attach_large(box) def add_row(self, label_text, widget): label = Gtk.Label(label=label_text) self.attach_two(label, widget) def add_switch(self, label_text, key): switch = Gtk.Switch() switch.set_active(self._settings.get_boolean(key)) switch.connect('notify::active', self.on_bool_changed, key) self.add_row(label_text, switch) def add_adj(self, label_text, key, adj): spinbtn = Gtk.SpinButton(adjustment=adj) spinbtn.set_value(self._settings.get_int(key)) utilities_add_unit_to_spinbtn(spinbtn, 4, 'px') spinbtn.connect('value-changed', self.on_adj_changed, key) self.add_row(label_text, spinbtn) def add_radio_flowbox(self, setting_key, labels_dict): flowbox = Gtk.FlowBox(selection_mode=Gtk.SelectionMode.NONE, expand=True) self._radio_are_active = False w0 = None for id0 in labels_dict: w0 = self.build_radio_btn(labels_dict[id0], id0, setting_key, w0) flowbox.add(w0) self._radio_are_active = True self.attach_large(flowbox) def build_radio_btn(self, label, btn_id, key, group): btn = Gtk.RadioButton(label=label, visible=True, group=group) active_id = self._settings.get_string(key) btn.set_active(btn_id == active_id) btn.connect('toggled', self.on_radio_btn_changed, key, btn_id) return btn # def add_check_flowbox(self, setting_key, labels_dict): # flowbox = Gtk.FlowBox(selection_mode=Gtk.SelectionMode.NONE, expand=True) # for id0 in labels_dict: # w0 = self.build_check_btn(labels_dict[id0], id0, setting_key) # flowbox.add(w0) # self.attach_large(flowbox) def build_check_btn(self, label, row_id, key): btn = Gtk.CheckButton(label=label, visible=True) array_of_strings = self._settings.get_strv(key) btn.set_active(row_id not in array_of_strings) btn.connect('toggled', self.on_check_btn_changed, key, row_id) return btn ############################################################################ # Generic callbacks ######################################################## def on_bool_changed(self, switch, state, key): self._settings.set_boolean(key, switch.get_active()) def on_adj_changed(self, spinbtn, key): self._settings.set_int(key, spinbtn.get_value_as_int()) def on_check_btn_changed(self, checkbtn, key, btn_id): array_of_strings = self._settings.get_strv(key) if checkbtn.get_active(): array_of_strings.remove(btn_id) else: array_of_strings.append(btn_id) self._settings.set_strv(key, array_of_strings) def on_radio_btn_changed(self, radiobtn, key, btn_id): if self._radio_are_active: self._settings.set_string(key, btn_id) ############################################################################ # Custom callbacks ######################################################### def on_background_changed(self, color_btn): c = color_btn.get_rgba() color_array = [str(c.red), str(c.green), str(c.blue), str(c.alpha)] self._settings.set_strv('background-rgba', color_array) ############################################################################ # Low-level packing ######################################################## def attach_two(self, widget1, widget2): widget1.set_halign(Gtk.Align.END) widget2.set_halign(Gtk.Align.START) widget1.set_visible(True) widget2.set_visible(True) self._current_grid.attach(widget1, 0, self._grid_attach_cpt, 1, 1) self._current_grid.attach(widget2, 1, self._grid_attach_cpt, 1, 1) self.update_grid_cpt() def attach_large(self, widget): widget.set_visible(True) self._current_grid.attach(widget, 0, self._grid_attach_cpt, 2, 1) self.update_grid_cpt() ############################################################################ ################################################################################ drawing-0.4.11/src/properties.py000066400000000000000000000075451362211111700165730ustar00rootroot00000000000000# properties.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, GdkPixbuf class DrawingPropertiesDialog(Gtk.Dialog): __gtype_name__ = 'DrawingPropertiesDialog' def __init__(self, window, image): wants_csd = not ('ssd' in window.decorations) super().__init__(use_header_bar=wants_csd, destroy_with_parent=True, \ transient_for=window, title=_("Image properties")) self._image = image self.build_ui() if wants_csd: subtitle = self._image.get_filename_for_display() self.get_titlebar().set_subtitle(subtitle) self.set_default_size(350, 200) self.show() def build_ui(self): """Fill the dialog with labels displaying correct informations.""" ui_path = '/com/github/maoschanz/drawing/ui/' builder = Gtk.Builder.new_from_resource(ui_path + 'properties.ui') props_content_area = builder.get_object('props_content_area') self.get_content_area().add(props_content_area) # Path and format ###################################################### label_path = builder.get_object('label_path') label_format_file = builder.get_object('label_file_format') if self._image.gfile is not None: file_path = self._image.get_file_path() label_path.set_label(file_path) (pb_format, w, h) = GdkPixbuf.Pixbuf.get_file_info(file_path) label_format_file.set_label(pb_format.get_name()) # Colorspace ########################################################### self.label_colorspace = builder.get_object('label_surface_colorspace') self.set_colorspace_label() # Size (and size unit) ################################################# self.label_width = builder.get_object('label_width') self.label_height = builder.get_object('label_height') self.unit = ' px' btn_px = builder.get_object('units_pixels') btn_in = builder.get_object('units_inches') btn_cm = builder.get_object('units_cm') btn_in.join_group(btn_px) btn_cm.join_group(btn_px) # TODO translatable units btn_px.connect('toggled', self.set_unit, ' px') btn_cm.connect('toggled', self.set_unit, ' cm') btn_in.connect('toggled', self.set_unit, ' in') self.set_size_labels() def set_colorspace_label(self): enum = { 0: 'ARGB32', 1: 'RGB24', 2: 'A8', 3: 'A1', 4: 'RGB16_565', 5: 'RGB30', } cairo_format = self._image.get_surface().get_format() colorspace_text = enum.get(cairo_format, _("Invalid format")) self.label_colorspace.set_label(colorspace_text) return colorspace_text def set_size_labels(self): """Set the labels for picture width and height according to the selected unit (px, cm or in).""" px_width = self._image.get_pixbuf_width() px_height = self._image.get_pixbuf_height() if self.unit == ' in': width = round(px_width/96.0, 2) height = round(px_height/96.0, 2) elif self.unit == ' cm': width = round(px_width/37.795275591, 2) height = round(px_height/37.795275591, 2) else: width = px_width height = px_height self.label_width.set_label(str(width) + self.unit) self.label_height.set_label(str(height) + self.unit) def set_unit(self, *args): self.unit = args[1] self.set_size_labels() ############################################################################ ################################################################################ drawing-0.4.11/src/selection_manager.py000066400000000000000000000237171362211111700200550ustar00rootroot00000000000000# selection_manager.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, GLib, Pango import cairo class DrawingSelectionManager(): __gtype_name__ = 'DrawingSelectionManager' def __init__(self, image): self.image = image self.init_pixbuf() builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/ui/selection.ui') menu_r = builder.get_object('right-click-menu') self.r_popover = Gtk.Popover.new_from_model(self.image.window.notebook, menu_r) menu_l = builder.get_object('left-click-menu') self.l_popover = Gtk.Popover.new_from_model(self.image.window.notebook, menu_l) def init_pixbuf(self): self.selection_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, 1, 1) self.set_coords(True, 0, 0) self.selection_path = None self.temp_path = None self.is_active = False self.has_been_used = False self.is_imported_data = False # this default value means nothing def load_from_path(self, new_path): """Create a selection_pixbuf from a minimal part of the main surface by erasing everything outside of the provided path.""" if new_path is None: return else: self.selection_path = new_path # Erase everything outside of the path surface = Gdk.cairo_surface_create_from_pixbuf(self.image.get_main_pixbuf(), 0, None) cairo_context = cairo.Context(surface) cairo_context.set_operator(cairo.Operator.DEST_IN) cairo_context.new_path() cairo_context.append_path(self.selection_path) if self.temp_path is None: # XXX condition utile?? self._set_temp_path(cairo_context.copy_path()) cairo_context.fill() cairo_context.set_operator(cairo.Operator.OVER) # Find the coords to reduce the size of what will be stored main_width = self.image.get_main_pixbuf().get_width() main_height = self.image.get_main_pixbuf().get_height() xmin, ymin = main_width, main_height xmax, ymax = 0.0, 0.0 for pts in self.selection_path: # XXX cairo has a method for this if pts[1] is not (): xmin = min(pts[1][0], xmin) xmax = max(pts[1][0], xmax) ymin = min(pts[1][1], ymin) ymax = max(pts[1][1], ymax) xmax = min(xmax, main_width) ymax = min(ymax, main_height) xmin = int( max(xmin, 0.0) ) # If everything is right, this is selection_x ymin = int( max(ymin, 0.0) ) # If everything is right, this is selection_y if self.selection_x < 0: xmin = self.selection_x if self.selection_y < 0: ymin = self.selection_y # Actually store the pixbuf selection_width = int(xmax - xmin) selection_height = int(ymax - ymin) if selection_width > 0 and selection_height > 0: # print('⇒ load pixbuf') self.selection_pixbuf = Gdk.pixbuf_get_from_surface(surface, \ int(xmin), int(ymin), selection_width, selection_height) # XXX PAS_SOUHAITABLE ?? passer par set_pixbuf est-il plus sain ? # avec un try except déjà ce serait pas mal else: self.reset() self.image.update_actions_state() def set_coords(self, temp_too, x, y): self.selection_x = x self.selection_y = y if temp_too: self.temp_x = x self.temp_y = y def set_pixbuf(self, pixbuf, use_import_param, is_imported_data): if use_import_param: self.is_imported_data = is_imported_data self.temp_path = None self.selection_pixbuf = pixbuf self._create_path_from_pixbuf(not self.is_imported_data) def get_pixbuf(self): return self.selection_pixbuf def reset(self): self.selection_pixbuf = None self.selection_path = None self.set_coords(True, 0, 0) self.temp_path = None self.is_active = False # self.image.use_stable_pixbuf() # XXX empêchait la suppression de la # sélection, mais peut-être que ça avait du sens que ce soit là ? self.image.update_actions_state() self.image.update() def delete_temp(self): if self.temp_path is None: return if not self.is_active: # self.image.window.prompt_message(True, "delete_temp called while `is_active` is False") return cairo_context = cairo.Context(self.image.get_surface()) cairo_context.new_path() cairo_context.append_path(self.temp_path) cairo_context.clip() cairo_context.set_operator(cairo.Operator.CLEAR) cairo_context.paint() cairo_context.set_operator(cairo.Operator.OVER) def get_path_with_scroll(self, scroll_x, scroll_y): if self.selection_path is None: return None cairo_context = cairo.Context(self._get_surface()) delta_x = 0 - scroll_x + self.selection_x - self.temp_x delta_y = 0 - scroll_y + self.selection_y - self.temp_y for pts in self.selection_path: if pts[1] is not (): x = pts[1][0] + delta_x y = pts[1][1] + delta_y cairo_context.line_to(int(x), int(y)) cairo_context.close_path() return cairo_context.copy_path() def show_selection_on_surface(self, cairo_context, with_scroll): if self.selection_pixbuf is None: return if with_scroll: x = self.selection_x - self.image.scroll_x y = self.selection_y - self.image.scroll_y else: x = self.selection_x y = self.selection_y Gdk.cairo_set_source_pixbuf(cairo_context, self.selection_pixbuf, x, y) cairo_context.paint() ############################################################################ def _create_path_from_pixbuf(self, delete_path_content): """This method creates a rectangle selection from the currently set selection pixbuf. It can be the result of an editing operation (crop, scale, etc.), or it can be an imported picture (from a file or from the clipboard). In the first case, the "delete_path_content" boolean parameter should be true, so the temp_path will be cleared.""" if self.selection_pixbuf is None: return self.has_been_used = True self.is_active = True cairo_context = cairo.Context(self._get_surface()) cairo_context.move_to(self.selection_x, self.selection_y) cairo_context.rel_line_to(self.selection_pixbuf.get_width(), 0) cairo_context.rel_line_to(0, self.selection_pixbuf.get_height()) cairo_context.rel_line_to(-1 * self.selection_pixbuf.get_width(), 0) cairo_context.close_path() self.selection_path = cairo_context.copy_path() if delete_path_content: self._set_temp_path(cairo_context.copy_path()) else: self.temp_x = self.selection_x self.temp_y = self.selection_y self.show_popover(False) self.image.update_actions_state() def _set_temp_path(self, new_path): self.temp_x = self.selection_x self.temp_y = self.selection_y self.temp_path = new_path self.is_active = True def point_is_in_selection(self, tested_x, tested_y): """Returns a boolean if the point whose coordinates are "(tested_x, tested_y)" is in the path defining the selection. If such path doesn't exist, it returns None.""" if not self.is_active: return True if self.selection_path is None: return None cairo_context = cairo.Context(self._get_surface()) for pts in self.selection_path: if pts[1] is not (): x = pts[1][0] + self.selection_x - self.temp_x y = pts[1][1] + self.selection_y - self.temp_y cairo_context.line_to(int(x), int(y)) return cairo_context.in_fill(tested_x, tested_y) def _get_surface(self): return self.image.surface ############################################################################ # Popover menus management methods ######################################### def set_r_popover_position(self, x, y): rectangle = Gdk.Rectangle() rectangle.x = int(x) rectangle.y = int(y) rectangle.height = 1 rectangle.width = 1 self.r_popover.set_relative_to(self.image) self.r_popover.set_pointing_to(rectangle) def show_popover(self, state): self.l_popover.popdown() self.r_popover.popdown() if self.is_active and state: self._set_popover_position() self.l_popover.popup() elif state: self.set_coords(True, self.r_popover.get_pointing_to()[1].x, \ self.r_popover.get_pointing_to()[1].y) self.r_popover.popup() def _set_popover_position(self): rectangle = Gdk.Rectangle() main_x = self.image.scroll_x main_y = self.image.scroll_y x = self.selection_x + self.selection_pixbuf.get_width()/2 - main_x y = self.selection_y + self.selection_pixbuf.get_height()/2 - main_y rectangle.x = max(0, min(x, self.image.get_widget_width())) rectangle.y = max(0, min(y, self.image.get_widget_height())) rectangle.height = 1 rectangle.width = 1 self.l_popover.set_pointing_to(rectangle) ############################################################################ # Debug #################################################################### def print_values(self, *args): """Debug only. Is linked to the "troubleshoot selection" item in the short hamburger menu.""" print("selection_x", self.selection_x) print("selection_y", self.selection_y) print("temp_x", self.temp_x) print("temp_y", self.temp_y) print("image.scroll_x", self.image.scroll_x) print("image.scroll_y", self.image.scroll_y) print("selection_path with scroll & temp deltas") delta_x = 0 - self.image.scroll_x + self.selection_x - self.temp_x delta_y = 0 - self.image.scroll_y + self.selection_y - self.temp_y for pts in self.selection_path: if pts[1] is not (): x = pts[1][0] + delta_x y = pts[1][1] + delta_y print('\t', x, y) print("has_been_used", self.has_been_used) print("---------------------------------------------------------------") ############################################################################ ################################################################################ drawing-0.4.11/src/tools/000077500000000000000000000000001362211111700151525ustar00rootroot00000000000000drawing-0.4.11/src/tools/abstract_tool.py000066400000000000000000000152711362211111700203720ustar00rootroot00000000000000# abstract_tool.py # # GPL 3 # # Super-class implemented and extended by all tools. import cairo from gi.repository import Gtk, Gdk from .utilities import utilities_show_overlay_on_context class AbstractAbstractTool(): __gtype_name__ = 'AbstractAbstractTool' def __init__(self, tool_id, label, icon_name, window, **kwargs): self.id = tool_id self.implements_panel = False self.accept_selection = False self.use_color = True self.menu_id = 0 self.label = label self.icon_name = icon_name self.tool_width = 10 self.cursor_name = 'cell' self.use_size = False self.has_ongoing_operation = False # TODO self.window = window self.build_row() ############################################################################ # Actions ################################################################## def add_tool_action_simple(self, action_name, callback): """Convenient wrapper method adding a stateless action to the window. It will be named 'action_name' (string) and activating the action will trigger the method 'callback'.""" # XXX shortcut ? self.window.add_action_simple(action_name, callback, None) def add_tool_action_boolean(self, action_name, default): self.window.options_manager.add_tool_option_boolean(action_name, default) def add_tool_action_enum(self, action_name, default): self.window.options_manager.add_tool_option_enum(action_name, default) def get_option_value(self, action_name): return self.window.options_manager.get_value(action_name) def set_action_sensitivity(self, action_name, state): self.get_image().set_action_sensitivity(action_name, state) def update_actions_state(self): pass ############################################################################ # UI ####################################################################### def show_error(self, error_text): self.window.prompt_message(True, error_text) def show_panel(self, visibility): if self.implements_panel: self.window.bottom_panel.set_visible(not visibility) self.bottom_panel.set_visible(visibility) else: self.window.bottom_panel.set_visible(True) def add_item_to_menu(self, tools_menu): tools_menu.append(self.label, 'win.active_tool::' + self.id) def get_options_model(self): fpath = '/com/github/maoschanz/drawing/tools/ui/tool_' + self.id + '.ui' builder = Gtk.Builder.new_from_resource(fpath) return builder.get_object('options-menu') def get_options_widget(self): return None def get_edition_status(self): return self.label def get_options_label(self): return _("No options") def build_row(self): """Build the GtkRadioButton for the sidebar. This method stores it as 'self.row', but does not pack it in the bar, and does not return it.""" self.row = Gtk.RadioButton(relief=Gtk.ReliefStyle.NONE, \ draw_indicator=False, valign=Gtk.Align.CENTER, \ tooltip_text=self.label) self.row.set_detailed_action_name('win.active_tool::' + self.id) self.label_widget = Gtk.Label(label=self.label) if self.window._settings.get_boolean('big-icons'): size = Gtk.IconSize.LARGE_TOOLBAR else: size = Gtk.IconSize.SMALL_TOOLBAR image = Gtk.Image().new_from_icon_name(self.icon_name, size) box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=8) box.add(image) box.add(self.label_widget) self.row.add(box) self.row.show_all() def set_show_label(self, label_visible): self.label_widget.set_visible(label_visible) if label_visible: self.row.get_children()[0].set_halign(Gtk.Align.START) else: self.row.get_children()[0].set_halign(Gtk.Align.CENTER) def update_icon_size(self): image = self.row.get_children()[0].get_children()[0] if self.window._settings.get_boolean('big-icons'): size = Gtk.IconSize.LARGE_TOOLBAR else: size = Gtk.IconSize.SMALL_TOOLBAR image.set_from_icon_name(self.icon_name, size) def adapt_to_window_size(self, available_width): pass ############################################################################ # Activation or not ######################################################## def on_tool_selected(self): pass def on_tool_unselected(self): pass def cancel_ongoing_operation(self): pass def give_back_control(self, preserve_selection): self.restore_pixbuf() self.non_destructive_show_modif() ############################################################################ # History ################################################################## def do_tool_operation(self, operation): pass def apply_operation(self, operation): self.do_tool_operation(operation) self.non_destructive_show_modif() self.apply_to_pixbuf() self.get_image().add_operation_to_history(operation) ############################################################################ # Selection ################################################################ def get_selection(self): return self.get_image().selection def selection_is_active(self): return self.get_selection().is_active def get_selection_pixbuf(self): return self.get_selection().get_pixbuf() def set_selection_has_been_used(self, state): self.get_selection().has_been_used = state def selection_has_been_used(self): return self.get_selection().has_been_used ############################################################################ # Image management ######################################################### def get_image(self): return self.window.get_active_image() def get_surface(self): return self.get_image().get_surface() def get_main_pixbuf(self): return self.get_image().get_main_pixbuf() def non_destructive_show_modif(self): self.get_image().update() def restore_pixbuf(self): self.get_image().use_stable_pixbuf() def apply_to_pixbuf(self): self.get_image().on_tool_finished() ############################################################################ # Signals handling ######################################################### def on_press_on_area(self, event, surface, tool_width, lc, rc, e_x, e_y): pass def on_motion_on_area(self, event, surface, event_x, event_y): pass def on_unclicked_motion_on_area(self, event, surface): pass def on_release_on_area(self, event, surface, event_x, event_y): pass def on_draw(self, area, cairo_context): if not self.accept_selection: return # Very basic implementation if self.selection_is_active(): self.get_selection().show_selection_on_surface(cairo_context, True) utilities_show_overlay_on_context(cairo_context, \ self.get_image().get_dragged_selection_path(), True) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/canvas_tools/000077500000000000000000000000001362211111700176455ustar00rootroot00000000000000drawing-0.4.11/src/tools/canvas_tools/abstract_canvas_tool.py000066400000000000000000000113021362211111700244070ustar00rootroot00000000000000# abstract_canvas_tool.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .abstract_tool import AbstractAbstractTool class AbstractCanvasTool(AbstractAbstractTool): __gtype_name__ = 'AbstractCanvasTool' def __init__(self, tool_id, label, icon_name, window, **kwargs): super().__init__(tool_id, label, icon_name, window) self.implements_panel = True self.menu_id = 1 self.centered_box = None self.needed_width_for_long = 0 self.accept_selection = True ############################################################################ def give_back_control(self, preserve_selection): if not preserve_selection and self.selection_is_active(): self.on_apply_temp_pixbuf_tool_operation() self.window.get_selection_tool().unselect_and_apply() super().give_back_control(preserve_selection) def update_actions_state(self, *args): # Changing that in on_tool_selected would be overridden by image.py self.set_action_sensitivity('selection_delete', False) self.set_action_sensitivity('selection_cut', False) self.set_action_sensitivity('unselect', False) self.set_action_sensitivity('select_all', False) ############################################################################ def adapt_to_window_size(self, available_width): if self.centered_box is None: return if self.centered_box.get_orientation() == Gtk.Orientation.HORIZONTAL: self.needed_width_for_long = self.apply_btn.get_allocated_width() + \ self.centered_box.get_preferred_width()[0] + \ self.cancel_btn.get_allocated_width() if self.needed_width_for_long > 0.8 * available_width: self.centered_box.set_orientation(Gtk.Orientation.VERTICAL) else: self.centered_box.set_orientation(Gtk.Orientation.HORIZONTAL) ############################################################################ def update_temp_pixbuf(self): operation = self.build_operation() self.do_tool_operation(operation) def on_apply_temp_pixbuf_tool_operation(self, *args): self.restore_pixbuf() operation = self.build_operation() self.apply_operation(operation) if self.apply_to_selection: self.window.force_selection() else: self.window.back_to_previous() def apply_operation(self, operation): operation['is_preview'] = False super().apply_operation(operation) self.get_image().reset_temp() def common_end_operation(self, is_preview, is_selection): if is_preview: self.temp_preview(is_selection) else: self.apply_temp(is_selection) def apply_temp(self, operation_is_selection): if operation_is_selection: self.get_selection().delete_temp() pixbuf = self.get_image().temp_pixbuf.copy() # XXX copy ?? self.get_selection().set_pixbuf(pixbuf, False, False) # XXX n'a pas l'air particulièrement efficace sur les scales successifs else: self.get_image().main_pixbuf = self.get_image().temp_pixbuf.copy() self.get_image().use_stable_pixbuf() def temp_preview(self, is_selection): """Part of the previewing methods shared by all canvas tools.""" cairo_context = cairo.Context(self.get_surface()) if is_selection: cairo_context.set_source_surface(self.get_surface(), 0, 0) cairo_context.paint() self.get_selection().delete_temp() Gdk.cairo_set_source_pixbuf(cairo_context, \ self.get_image().temp_pixbuf, \ self.get_selection().selection_x, \ self.get_selection().selection_y) cairo_context.paint() else: cairo_context.set_operator(cairo.Operator.CLEAR) cairo_context.paint() cairo_context.set_operator(cairo.Operator.OVER) Gdk.cairo_set_source_pixbuf(cairo_context, \ self.get_image().temp_pixbuf, 0, 0) cairo_context.paint() self.get_image().update() ############################################################################ def on_draw(self, area, cairo_context): pass ############################################################################ ################################################################################ drawing-0.4.11/src/tools/canvas_tools/tool_crop.py000066400000000000000000000173051362211111700222250ustar00rootroot00000000000000# tool_crop.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .abstract_canvas_tool import AbstractCanvasTool from .utilities import utilities_add_unit_to_spinbtn class ToolCrop(AbstractCanvasTool): __gtype_name__ = 'ToolCrop' def __init__(self, window): super().__init__('crop', _("Crop"), 'tool-crop-symbolic', window) self.cursor_name = 'not-allowed' self.apply_to_selection = False self.x_press = 0 self.y_press = 0 self.move_instead_of_crop = False builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_crop.ui') self.bottom_panel = builder.get_object('bottom-panel') self.centered_box = builder.get_object('centered_box') self.cancel_btn = builder.get_object('cancel_btn') self.apply_btn = builder.get_object('apply_btn') self.height_btn = builder.get_object('height_btn') self.width_btn = builder.get_object('width_btn') utilities_add_unit_to_spinbtn(self.height_btn, 4, 'px') utilities_add_unit_to_spinbtn(self.width_btn, 4, 'px') self.width_btn.connect('value-changed', self.on_width_changed) self.height_btn.connect('value-changed', self.on_height_changed) # TODO X et Y ? top/bottom/left/right ? self.window.bottom_panel_box.add(self.bottom_panel) def get_edition_status(self): if self.apply_to_selection: return _("Cropping the selection") else: return _("Cropping the canvas") ############################################################################ def on_tool_selected(self, *args): self.apply_to_selection = self.selection_is_active() self._x = 0 self._y = 0 if self.apply_to_selection: self.init_if_selection() else: self.init_if_main() self.width_btn.set_value(self.original_width) self.height_btn.set_value(self.original_height) def init_if_selection(self): self.original_width = self.get_selection().selection_pixbuf.get_width() self.original_height = self.get_selection().selection_pixbuf.get_height() self.width_btn.set_range(1, self.original_width) self.height_btn.set_range(1, self.original_height) def init_if_main(self): self.original_width = self.get_image().get_pixbuf_width() self.original_height = self.get_image().get_pixbuf_height() self.width_btn.set_range(1, 10 * self.original_width) self.height_btn.set_range(1, 10 * self.original_height) ############################################################################ def get_width(self): return self.width_btn.get_value_as_int() def get_height(self): return self.height_btn.get_value_as_int() def on_width_changed(self, *args): self.update_temp_pixbuf() def on_height_changed(self, *args): self.update_temp_pixbuf() def on_unclicked_motion_on_area(self, event, surface): cursor_name = '' if event.y < 0.3 * surface.get_height(): cursor_name = cursor_name + 'n' elif event.y > 0.6 * surface.get_height(): cursor_name = cursor_name + 's' if event.x < 0.3 * surface.get_width(): cursor_name = cursor_name + 'w' elif event.x > 0.6 * surface.get_width(): cursor_name = cursor_name + 'e' if cursor_name == '': cursor_name = 'not-allowed' else: cursor_name = cursor_name + '-resize' self.cursor_name = cursor_name self.window.set_cursor(True) def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event.x self.y_press = event.y def on_motion_on_area(self, event, surface, event_x, event_y): delta_x = event.x - self.x_press delta_y = event.y - self.y_press if self.cursor_name == 'not-allowed': return elif self.cursor_name == 'n-resize': self.move_north(delta_y) elif self.cursor_name == 'ne-resize': self.move_north(delta_y) self.move_east(delta_x) elif self.cursor_name == 'e-resize': self.move_east(delta_x) elif self.cursor_name == 'se-resize': self.move_south(delta_y) self.move_east(delta_x) elif self.cursor_name == 's-resize': self.move_south(delta_y) elif self.cursor_name == 'sw-resize': self.move_south(delta_y) self.move_west(delta_x) elif self.cursor_name == 'w-resize': self.move_west(delta_x) elif self.cursor_name == 'nw-resize': self.move_north(delta_y) self.move_west(delta_x) self.x_press = event.x self.y_press = event.y self.update_temp_pixbuf() def move_north(self, delta): self.height_btn.set_value(self.height_btn.get_value() - delta) self._y = self._y + delta def move_south(self, delta): self.height_btn.set_value(self.height_btn.get_value() + delta) def move_east(self, delta): self.width_btn.set_value(self.width_btn.get_value() + delta) def move_west(self, delta): self.width_btn.set_value(self.width_btn.get_value() - delta) self._x = self._x + delta def on_release_on_area(self, event, surface, event_x, event_y): self.window.set_cursor(False) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'is_selection': self.apply_to_selection, 'is_preview': True, 'x': int(self._x), 'y': int(self._y), 'width': self.get_width(), 'height': self.get_height() } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() x = operation['x'] y = operation['y'] width = operation['width'] height = operation['height'] if operation['is_selection']: source_pixbuf = self.get_selection_pixbuf() else: source_pixbuf = self.get_main_pixbuf() self.get_image().set_temp_pixbuf(source_pixbuf.copy()) self.crop_temp_pixbuf(x, y, width, height, operation['is_selection']) if not operation['is_selection'] and operation['is_preview']: self.scale_temp_pixbuf_to_area(width, height) self.common_end_operation(operation['is_preview'], operation['is_selection']) def crop_temp_pixbuf(self, x, y, width, height, is_selection): new_pixbuf = GdkPixbuf.Pixbuf.new(GdkPixbuf.Colorspace.RGB, True, 8, width, height) new_pixbuf.fill(0) src_x = max(x, 0) src_y = max(y, 0) if is_selection: dest_x = 0 dest_y = 0 else: dest_x = max(-1 * x, 0) dest_y = max(-1 * y, 0) temp_p = self.get_image().temp_pixbuf min_w = min(width, temp_p.get_width() - src_x) min_h = min(height, temp_p.get_height() - src_y) temp_p.copy_area(src_x, src_y, min_w, min_h, new_pixbuf, dest_x, dest_y) self.get_image().set_temp_pixbuf(new_pixbuf) def scale_temp_pixbuf_to_area(self, width, height): visible_w = self.get_image().get_widget_width() visible_h = self.get_image().get_widget_height() w_ratio = visible_w/width h_ratio = visible_h/height if w_ratio > 1.0 and h_ratio > 1.0: nice_w = width nice_h = height elif visible_h/visible_w > height/width: nice_w = visible_w nice_h = int(height * w_ratio) else: nice_w = int(width * h_ratio) nice_h = visible_h pb = self.get_image().temp_pixbuf self.get_image().set_temp_pixbuf( \ pb.scale_simple(nice_w, nice_h, GdkPixbuf.InterpType.TILES)) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/canvas_tools/tool_flip.py000066400000000000000000000057651362211111700222230ustar00rootroot00000000000000# tool_flip.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .abstract_canvas_tool import AbstractCanvasTool class ToolFlip(AbstractCanvasTool): __gtype_name__ = 'ToolFlip' def __init__(self, window): super().__init__('flip', _("Flip"), 'tool-flip-symbolic', window) self.cursor_name = 'not-allowed' self.apply_to_selection = False self.flip_h = False self.flip_v = False builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_flip.ui') self.bottom_panel = builder.get_object('bottom-panel') self.horizontal_btn = builder.get_object('horizontal_btn') self.vertical_btn = builder.get_object('vertical_btn') self.horizontal_btn.connect('clicked', self.on_horizontal_clicked) self.vertical_btn.connect('clicked', self.on_vertical_clicked) self.window.bottom_panel_box.add(self.bottom_panel) def on_vertical_clicked(self, *args): self.flip_v = not self.flip_v self.update_temp_pixbuf() def on_horizontal_clicked(self, *args): self.flip_h = not self.flip_h self.update_temp_pixbuf() def on_tool_selected(self, *args): self.apply_to_selection = self.selection_is_active() self.flip_h = False self.flip_v = False self.update_temp_pixbuf() def build_operation(self): operation = { 'tool_id': self.id, 'is_selection': self.apply_to_selection, 'is_preview': True, 'flip_h': self.flip_h, 'flip_v': self.flip_v } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() flip_h = operation['flip_h'] flip_v = operation['flip_v'] if operation['is_selection']: source_pixbuf = self.get_selection_pixbuf() else: source_pixbuf = self.get_main_pixbuf() self.get_image().set_temp_pixbuf(source_pixbuf.copy()) preview = self.get_image().temp_pixbuf if flip_h and flip_v: preview = preview.flip(True) preview = preview.flip(False) self.get_image().set_temp_pixbuf(preview) elif flip_h: self.get_image().set_temp_pixbuf(preview.flip(True)) elif flip_v: self.get_image().set_temp_pixbuf(preview.flip(False)) self.common_end_operation(operation['is_preview'], operation['is_selection']) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/canvas_tools/tool_rotate.py000066400000000000000000000065541362211111700225640ustar00rootroot00000000000000# tool_rotate.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk import cairo from .abstract_canvas_tool import AbstractCanvasTool class ToolRotate(AbstractCanvasTool): __gtype_name__ = 'ToolRotate' def __init__(self, window): super().__init__('rotate', _("Rotate"), 'tool-rotate-symbolic', window) self.cursor_name = 'not-allowed' self.apply_to_selection = False builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_rotate.ui') self.bottom_panel = builder.get_object('bottom-panel') self.angle_btn = builder.get_object('angle_btn') self.angle_label = builder.get_object('angle_label') self.right_btn = builder.get_object('right_btn') self.left_btn = builder.get_object('left_btn') self.angle_btn.connect('value-changed', self.on_angle_changed) self.right_btn.connect('clicked', self.on_right_clicked) self.left_btn.connect('clicked', self.on_left_clicked) self.window.bottom_panel_box.add(self.bottom_panel) def get_edition_status(self): if self.apply_to_selection: return _("Rotating the selection") else: return _("Rotating the canvas") def on_tool_selected(self, *args): self.apply_to_selection = self.selection_is_active() self.angle_btn.set_value(0.0) if False: # if self.apply_to_selection: self.angle_btn.set_visible(True) self.angle_label.set_visible(True) self.right_btn.set_visible(False) self.left_btn.set_visible(False) else: self.angle_btn.set_visible(False) self.angle_label.set_visible(False) self.right_btn.set_visible(True) self.left_btn.set_visible(True) self.on_angle_changed() def get_angle(self): return self.angle_btn.get_value_as_int() def on_right_clicked(self, *args): self.angle_btn.set_value(self.get_angle() - 90) def on_left_clicked(self, *args): self.angle_btn.set_value(self.get_angle() + 90) def on_angle_changed(self, *args): angle = self.get_angle() angle = angle % 360 if angle < 0: angle += 180 if True: # if not self.apply_to_selection: angle = int(angle/90) * 90 if angle != self.get_angle(): self.angle_btn.set_value(angle) self.update_temp_pixbuf() def build_operation(self): operation = { 'tool_id': self.id, 'is_selection': self.apply_to_selection, 'is_preview': True, 'angle': self.get_angle() } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() angle = operation['angle'] if operation['is_selection']: source_pixbuf = self.get_selection_pixbuf() else: source_pixbuf = self.get_main_pixbuf() self.get_image().set_temp_pixbuf(source_pixbuf.rotate_simple(angle)) self.common_end_operation(operation['is_preview'], operation['is_selection']) drawing-0.4.11/src/tools/canvas_tools/tool_saturate.py000066400000000000000000000051721362211111700231110ustar00rootroot00000000000000# tool_saturate.py # # Copyright 2018-2020 Romain F. T. # # 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 . import cairo from gi.repository import Gtk from .abstract_canvas_tool import AbstractCanvasTool from .utilities import utilities_add_unit_to_spinbtn class ToolSaturate(AbstractCanvasTool): __gtype_name__ = 'ToolSaturate' def __init__(self, window): super().__init__('saturate', _("Saturate"), 'tool-saturate-symbolic', window) self.cursor_name = 'not-allowed' self.apply_to_selection = False builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_saturate.ui') self.bottom_panel = builder.get_object('bottom-panel') self.saturation_btn = builder.get_object('sat_btn') utilities_add_unit_to_spinbtn(self.saturation_btn, 3, '%') self.saturation_btn.connect('value-changed', self.on_sat_changed) self.window.bottom_panel_box.add(self.bottom_panel) def on_tool_selected(self, *args): self.apply_to_selection = self.selection_is_active() self.saturation_btn.set_value(100.0) self.on_sat_changed() def get_saturation(self): return self.saturation_btn.get_value()/100 def on_sat_changed(self, *args): self.update_temp_pixbuf() def build_operation(self): operation = { 'tool_id': self.id, 'is_selection': self.apply_to_selection, 'is_preview': True, 'saturation': self.get_saturation() } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() saturation = operation['saturation'] if operation['is_selection']: source_pixbuf = self.get_selection_pixbuf() else: source_pixbuf = self.get_main_pixbuf() self.get_image().set_temp_pixbuf(source_pixbuf.copy()) temp = self.get_image().temp_pixbuf source_pixbuf.saturate_and_pixelate(temp, saturation, False) self.common_end_operation(operation['is_preview'], operation['is_selection']) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/canvas_tools/tool_scale.py000066400000000000000000000117661362211111700223560ustar00rootroot00000000000000# tool_scale.py # # Copyright 2018-2020 Romain F. T. # # 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 . from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .abstract_canvas_tool import AbstractCanvasTool from .utilities import utilities_add_unit_to_spinbtn class ToolScale(AbstractCanvasTool): __gtype_name__ = 'ToolScale' def __init__(self, window): super().__init__('scale', _("Scale"), 'tool-scale-symbolic', window) self.cursor_name = 'se-resize' self.keep_proportions = False self.x_press = 0 self.y_press = 0 builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_scale.ui') self.bottom_panel = builder.get_object('bottom-panel') self.centered_box = builder.get_object('centered_box') self.cancel_btn = builder.get_object('cancel_btn') self.apply_btn = builder.get_object('apply_btn') self.width_btn = builder.get_object('width_btn') self.height_btn = builder.get_object('height_btn') self.width_btn.connect('value-changed', self.on_width_changed) self.height_btn.connect('value-changed', self.on_height_changed) utilities_add_unit_to_spinbtn(self.height_btn, 4, 'px') utilities_add_unit_to_spinbtn(self.width_btn, 4, 'px') self.proportions_btn = builder.get_object('proportions_btn') self.proportions_btn.connect('toggled', self.set_keep_proportions) self.window.bottom_panel_box.add(self.bottom_panel) def get_edition_status(self): if self.apply_to_selection: return _("Scaling the selection") else: return _("Scaling the canvas") ############################################################################ def set_keep_proportions(self, *args): self.keep_proportions = self.proportions_btn.get_active() if self.keep_proportions: self.proportion = self.get_width()/self.get_height() def on_tool_selected(self, *args): self.apply_to_selection = self.selection_is_active() self.keep_proportions = False if self.apply_to_selection: w = self.get_selection_pixbuf().get_width() h = self.get_selection_pixbuf().get_height() else: w = self.get_image().get_pixbuf_width() h = self.get_image().get_pixbuf_height() self.width_btn.set_value(w) self.height_btn.set_value(h) self.keep_proportions = self.proportions_btn.get_active() self.proportion = w/h def on_width_changed(self, *args): if self.keep_proportions: if self.proportion != self.get_width()/self.get_height(): self.height_btn.set_value(self.get_width()/self.proportion) self.update_temp_pixbuf() def on_height_changed(self, *args): if self.keep_proportions: if self.proportion != self.get_width()/self.get_height(): self.width_btn.set_value(self.get_height()*self.proportion) else: self.update_temp_pixbuf() def get_width(self): return self.width_btn.get_value_as_int() def get_height(self): return self.height_btn.get_value_as_int() ############################################################################ def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event.x self.y_press = event.y def on_motion_on_area(self, event, surface, event_x, event_y): delta_x = event.x - self.x_press self.width_btn.set_value(self.width_btn.get_value() + delta_x) if not self.keep_proportions: delta_y = event.y - self.y_press self.height_btn.set_value(self.height_btn.get_value() + delta_y) self.x_press = event.x self.y_press = event.y def on_release_on_area(self, event, surface, event_x, event_y): self.on_motion_on_area(event, surface, event_x, event_y) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'is_selection': self.apply_to_selection, 'is_preview': True, 'width': self.get_width(), 'height': self.get_height() } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() if operation['is_selection']: source_pixbuf = self.get_selection_pixbuf() else: source_pixbuf = self.get_main_pixbuf() self.get_image().set_temp_pixbuf(source_pixbuf.scale_simple( \ operation['width'], operation['height'], GdkPixbuf.InterpType.TILES)) self.common_end_operation(operation['is_preview'], operation['is_selection']) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/000077500000000000000000000000001362211111700200135ustar00rootroot00000000000000drawing-0.4.11/src/tools/classic_tools/tool_arc.py000066400000000000000000000131401362211111700221660ustar00rootroot00000000000000# tool_arc.py import cairo from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool from .utilities import utilities_add_arrow_triangle class ToolArc(AbstractAbstractTool): __gtype_name__ = 'ToolArc' def __init__(self, window, **kwargs): super().__init__('arc', _("Arc"), 'tool-arc-symbolic', window) self.use_size = True self.add_tool_action_enum('line_shape', 'round') self.add_tool_action_boolean('use_dashes', False) self.add_tool_action_boolean('is_arrow', False) self.add_tool_action_enum('cairo_operator', 'over') # Default values self.selected_shape_label = _("Round") self.selected_operator = cairo.Operator.OVER self.selected_end_id = cairo.LineCap.ROUND self._1st_segment = None self.use_dashes = False self.use_arrow = False def set_active_shape(self): if self.get_option_value('line_shape') == 'square': self.selected_end_id = cairo.LineCap.BUTT self.selected_shape_label = _("Square") else: self.selected_end_id = cairo.LineCap.ROUND self.selected_shape_label = _("Round") def set_active_operator(self): state_as_string = self.get_option_value('cairo_operator') if state_as_string == 'difference': self.selected_operator = cairo.Operator.DIFFERENCE self.selected_operator_label = _("Difference") elif state_as_string == 'source': self.selected_operator = cairo.Operator.SOURCE self.selected_operator_label = _("Source color") elif state_as_string == 'clear': self.selected_operator = cairo.Operator.CLEAR self.selected_operator_label = _("Eraser") else: self.selected_operator = cairo.Operator.OVER self.selected_operator_label = _("Classic") def get_options_label(self): return _("Arc options") def get_edition_status(self): # TODO l'opérateur est important self.use_dashes = self.get_option_value('use_dashes') self.use_arrow = self.get_option_value('is_arrow') self.set_active_shape() self.set_active_operator() label = self.label + ' (' + self.selected_shape_label + ') ' if self.use_arrow and self.use_dashes: label = label + ' - ' + _("Arrow") + ' - ' + _("With dashes") elif self.use_arrow: label = label + ' - ' + _("Arrow") elif self.use_dashes: label = label + ' - ' + _("With dashes") return label def give_back_control(self, preserve_selection): self._1st_segment = None self.x_press = 0.0 self.y_press = 0.0 ############################################################################ def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 1: self.main_color = left_color if event.button == 3: self.main_color = right_color def on_motion_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) if self._1st_segment is None: cairo_context.move_to(self.x_press, self.y_press) cairo_context.line_to(event_x, event_y) else: cairo_context.move_to(self._1st_segment[0], self._1st_segment[1]) cairo_context.curve_to(self._1st_segment[2], self._1st_segment[3], \ self.x_press, self.y_press, event_x, event_y) self._path = cairo_context.copy_path() operation = self.build_operation(event_x, event_y) self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): if self._1st_segment is None: self._1st_segment = (self.x_press, self.y_press, event_x, event_y) return else: self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(self._1st_segment[0], self._1st_segment[1]) cairo_context.curve_to(self._1st_segment[2], self._1st_segment[3], \ self.x_press, self.y_press, event_x, event_y) self._1st_segment = None self._path = cairo_context.copy_path() operation = self.build_operation(event_x, event_y) self.apply_operation(operation) self.x_press = 0.0 self.y_press = 0.0 ############################################################################ def build_operation(self, event_x, event_y): operation = { 'tool_id': self.id, 'rgba': self.main_color, 'operator': self.selected_operator, 'line_width': self.tool_width, 'line_cap': self.selected_end_id, 'use_dashes': self.use_dashes, 'use_arrow': self.use_arrow, 'path': self._path, 'x_release': event_x, 'y_release': event_y, 'x_press': self.x_press, 'y_press': self.y_press } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(operation['operator']) cairo_context.set_line_cap(operation['line_cap']) #cairo_context.set_line_join(operation['line_join']) line_width = operation['line_width'] cairo_context.set_line_width(line_width) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) if operation['use_dashes']: cairo_context.set_dash([2*line_width, 2*line_width]) cairo_context.append_path(operation['path']) cairo_context.stroke() if operation['use_arrow']: x_press = operation['x_press'] y_press = operation['y_press'] x_release = operation['x_release'] y_release = operation['y_release'] utilities_add_arrow_triangle(cairo_context, x_release, y_release, \ x_press, y_press, line_width) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_circle.py000066400000000000000000000104701362211111700226650ustar00rootroot00000000000000# tool_circle.py from gi.repository import Gtk, Gdk import cairo, math from .abstract_tool import AbstractAbstractTool from .utilities import utilities_generic_shape_tool_operation class ToolCircle(AbstractAbstractTool): __gtype_name__ = 'ToolCircle' def __init__(self, window, **kwargs): super().__init__('circle', _("Circle"), 'tool-circle-symbolic', window) self.use_size = True (self.x_press, self.y_press) = (-1.0, -1.0) self.selected_style_label = _("Filled (secondary color)") self.selected_shape_label = _("Circle") self.selected_style_id = 'secondary' self.selected_shape_id = 'circle' self.add_tool_action_enum('filling_style', self.selected_style_id) self.add_tool_action_enum('circle_shape', self.selected_shape_id) def set_active_style(self, *args): state_as_string = self.get_option_value('filling_style') self.selected_style_id = state_as_string if state_as_string == 'empty': self.selected_style_label = _("Empty") elif state_as_string == 'filled': self.selected_style_label = _("Filled (main color)") else: self.selected_style_label = _("Filled (secondary color)") def set_active_shape(self, *args): self.selected_shape_id = self.get_option_value('circle_shape') def get_options_label(self): return _("Circle options") def get_edition_status(self): self.set_active_shape() self.set_active_style() if self.selected_shape_id == 'oval': label = _("Oval") + ' - ' + self.selected_style_label else: label = self.label + ' - ' + self.selected_style_label return label ############################################################################ def give_back_control(self, preserve_selection): (self.x_press, self.y_press) = (-1.0, -1.0) self.restore_pixbuf() def draw_oval(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) saved_matrix = cairo_context.get_matrix() halfw = (self.x_press - event_x) / 2 halfh = (self.y_press - event_y) / 2 cairo_context.translate(event_x + halfw, event_y + halfh) cairo_context.scale(halfw, halfh) cairo_context.arc(0, 0, 1, 0, 2 * math.pi) cairo_context.set_matrix(saved_matrix) cairo_context.close_path() self._path = cairo_context.copy_path() def draw_circle(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) delta_x2 = (self.x_press - event_x) * (self.x_press - event_x) delta_y2 = (self.y_press - event_y) * (self.y_press - event_y) rayon = math.sqrt(delta_x2 + delta_y2) cairo_context.arc(self.x_press, self.y_press, rayon, 0.0, 2 * math.pi) self._path = cairo_context.copy_path() def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color self.secondary_color = left_color else: self.main_color = left_color self.secondary_color = right_color def on_motion_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() if self.selected_shape_id == 'oval': self.draw_oval(event_x, event_y) elif self.selected_shape_id == 'circle': self.draw_circle(event_x, event_y) operation = self.build_operation() self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): if self.selected_shape_id == 'oval': self.draw_oval(event_x, event_y) elif self.selected_shape_id == 'circle': self.draw_circle(event_x, event_y) self.x_press = 0.0 self.y_press = 0.0 operation = self.build_operation() self.apply_operation(operation) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'rgba_main': self.main_color, 'rgba_secd': self.secondary_color, 'operator': cairo.Operator.OVER, 'line_join': cairo.LineJoin.ROUND, 'line_width': self.tool_width, 'filling': self.selected_style_id, 'path': self._path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) utilities_generic_shape_tool_operation(cairo_context, operation) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_experiment.py000066400000000000000000000336211362211111700236070ustar00rootroot00000000000000# tool_experiment.py from gi.repository import Gtk, Gdk import cairo, math from .abstract_tool import AbstractAbstractTool class ToolExperiment(AbstractAbstractTool): __gtype_name__ = 'ToolExperiment' def __init__(self, window, **kwargs): super().__init__('experiment', _("Experiment"), 'applications-science-symbolic', window) self.past_x = -1.0 self.past_y = -1.0 self._path = None self.main_color = None self.use_size = True self.selected_mode = 'smooth2' self.selected_operator_label = "DIFFERENCE" self.selected_operator = cairo.Operator.DIFFERENCE self.add_tool_action_enum('experiment_operator', 'DIFFERENCE') self.add_tool_action_enum('experiment_mode', 'smooth2') self.add_tool_action_simple('experiment_macro_z', self.action_macro_z) self.add_tool_action_simple('experiment_macro_scie', self.action_macro_scie) self.add_tool_action_simple('experiment_macro_hexa1', self.action_macro_hexa1) self.add_tool_action_simple('experiment_macro_hexa2', self.action_macro_hexa2) def set_active_mode(self, *args): state_as_string = self.get_option_value('experiment_mode') self.selected_mode = state_as_string def set_active_operator(self, *args): state_as_string = self.get_option_value('experiment_operator') if state_as_string == 'CLEAR': self.selected_operator = cairo.Operator.CLEAR self.selected_operator_label = "CLEAR" elif state_as_string == 'SOURCE': self.selected_operator = cairo.Operator.SOURCE self.selected_operator_label = "SOURCE" elif state_as_string == 'OVER': self.selected_operator = cairo.Operator.OVER self.selected_operator_label = "OVER" elif state_as_string == 'IN': self.selected_operator = cairo.Operator.IN self.selected_operator_label = "IN" elif state_as_string == 'OUT': self.selected_operator = cairo.Operator.OUT self.selected_operator_label = "OUT" elif state_as_string == 'ATOP': self.selected_operator = cairo.Operator.ATOP self.selected_operator_label = "ATOP" elif state_as_string == 'DEST': self.selected_operator = cairo.Operator.DEST self.selected_operator_label = "DEST" elif state_as_string == 'DEST_OVER': self.selected_operator = cairo.Operator.DEST_OVER self.selected_operator_label = "DEST_OVER" elif state_as_string == 'DEST_IN': self.selected_operator = cairo.Operator.DEST_IN self.selected_operator_label = "DEST_IN" elif state_as_string == 'DEST_OUT': self.selected_operator = cairo.Operator.DEST_OUT self.selected_operator_label = "DEST_OUT" elif state_as_string == 'DEST_ATOP': self.selected_operator = cairo.Operator.DEST_ATOP self.selected_operator_label = "DEST_ATOP" elif state_as_string == 'XOR': self.selected_operator = cairo.Operator.XOR self.selected_operator_label = "XOR" elif state_as_string == 'ADD': self.selected_operator = cairo.Operator.ADD self.selected_operator_label = "ADD" elif state_as_string == 'SATURATE': self.selected_operator = cairo.Operator.SATURATE self.selected_operator_label = "SATURATE" elif state_as_string == 'MULTIPLY': self.selected_operator = cairo.Operator.MULTIPLY self.selected_operator_label = "MULTIPLY" elif state_as_string == 'SCREEN': self.selected_operator = cairo.Operator.SCREEN self.selected_operator_label = "SCREEN" elif state_as_string == 'OVERLAY': self.selected_operator = cairo.Operator.OVERLAY self.selected_operator_label = "OVERLAY" elif state_as_string == 'DARKEN': self.selected_operator = cairo.Operator.DARKEN self.selected_operator_label = "DARKEN" elif state_as_string == 'LIGHTEN': self.selected_operator = cairo.Operator.LIGHTEN self.selected_operator_label = "LIGHTEN" elif state_as_string == 'COLOR_DODGE': self.selected_operator = cairo.Operator.COLOR_DODGE self.selected_operator_label = "COLOR_DODGE" elif state_as_string == 'COLOR_BURN': self.selected_operator = cairo.Operator.COLOR_BURN self.selected_operator_label = "COLOR_BURN" elif state_as_string == 'HARD_LIGHT': self.selected_operator = cairo.Operator.HARD_LIGHT self.selected_operator_label = "HARD_LIGHT" elif state_as_string == 'SOFT_LIGHT': self.selected_operator = cairo.Operator.SOFT_LIGHT self.selected_operator_label = "SOFT_LIGHT" elif state_as_string == 'DIFFERENCE': self.selected_operator = cairo.Operator.DIFFERENCE self.selected_operator_label = "DIFFERENCE" elif state_as_string == 'EXCLUSION': self.selected_operator = cairo.Operator.EXCLUSION self.selected_operator_label = "EXCLUSION" elif state_as_string == 'HSL_HUE': self.selected_operator = cairo.Operator.HSL_HUE self.selected_operator_label = "HSL_HUE" elif state_as_string == 'HSL_SATURATION': self.selected_operator = cairo.Operator.HSL_SATURATION self.selected_operator_label = "HSL_SATURATION" elif state_as_string == 'HSL_COLOR': self.selected_operator = cairo.Operator.HSL_COLOR self.selected_operator_label = "HSL_COLOR" elif state_as_string == 'HSL_LUMINOSITY': self.selected_operator = cairo.Operator.HSL_LUMINOSITY self.selected_operator_label = "HSL_LUMINOSITY" def action_macro_z(self, *args): cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(200, 200) cairo_context.line_to(400, 200) cairo_context.line_to(200, 400) cairo_context.line_to(400, 400) self._path = cairo_context.copy_path() self.macros_common() def action_macro_scie(self, *args): cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(50, 50) cairo_context.line_to(100, 150) cairo_context.line_to(150, 50) cairo_context.line_to(200, 150) cairo_context.line_to(250, 50) cairo_context.line_to(300, 150) cairo_context.line_to(350, 50) cairo_context.line_to(400, 150) cairo_context.line_to(450, 50) cairo_context.line_to(500, 150) cairo_context.line_to(550, 50) self._path = cairo_context.copy_path() self.macros_common() def action_macro_hexa1(self, *args): cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(100, 300) cairo_context.line_to(200, 300) cairo_context.line_to(250, 400) cairo_context.line_to(200, 500) cairo_context.line_to(100, 500) cairo_context.line_to(50, 400) cairo_context.line_to(100, 300) self._path = cairo_context.copy_path() self.macros_common() def action_macro_hexa2(self, *args): cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(500, 300) cairo_context.line_to(450, 400) cairo_context.line_to(500, 500) cairo_context.line_to(600, 500) cairo_context.line_to(650, 400) cairo_context.line_to(600, 300) cairo_context.line_to(500, 300) self._path = cairo_context.copy_path() self.macros_common() def macros_common(self): self.tool_width = self.window.thickness_spinbtn.get_value() self.main_color = self.get_image().get_left_rgba() operation = self.build_operation() self.apply_operation(operation) def get_options_label(self): self.set_active_operator() self.set_active_mode() if self.selected_mode == 'simple': return self.selected_operator_label else: return self.selected_mode def get_edition_status(self): return "You're not supposed to use this tool (development only)." def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.set_active_operator() self.set_active_mode() self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color else: self.main_color = left_color def on_motion_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) if self.past_x == -1.0: (self.past_x, self.past_y) = (self.x_press, self.y_press) cairo_context.move_to(self.x_press, self.y_press) self._path = cairo_context.copy_path() else: cairo_context.append_path(self._path) cairo_context.line_to(event_x, event_y) self._path = cairo_context.copy_path() self.past_x = event_x self.past_y = event_y operation = self.build_operation() self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): self.past_x = -1.0 self.past_y = -1.0 operation = self.build_operation() self.apply_operation(operation) def build_operation(self): operation = { 'tool_id': self.id, 'rgba': self.main_color, 'operator': self.selected_operator, 'mode': self.selected_mode, 'line_width': self.tool_width, 'line_cap': cairo.LineCap.ROUND, 'line_join': cairo.LineJoin.ROUND, 'path': self._path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return self.restore_pixbuf() if operation['mode'] == 'dynamic': self.op_dynamic(operation) elif operation['mode'] == 'smooth1': self.op_simple(operation) self.op_smooth1(operation) elif operation['mode'] == 'smooth2': self.op_simple(operation) self.op_smooth2(operation) else: self.op_simple(operation) def op_simple(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(operation['operator']) cairo_context.set_line_cap(operation['line_cap']) cairo_context.set_line_join(operation['line_join']) cairo_context.set_line_width(operation['line_width']) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) cairo_context.append_path(operation['path']) cairo_context.stroke() def op_dynamic(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(cairo.Operator.SOURCE) cairo_context.set_line_cap(operation['line_cap']) cairo_context.set_line_join(operation['line_join']) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) line_width = 0 for pts in operation['path']: if pts[1] is (): continue current_x, current_y = cairo_context.get_current_point() future_x = pts[1][0] future_y = pts[1][1] dist = math.sqrt( (current_x - future_x) * (current_x - future_x) \ + (current_y - future_y) * (current_y - future_y) ) new_width = 1 + int( operation['line_width']/max(1, 0.05 * dist) ) if line_width == 0: line_width = new_width else: line_width = (new_width + line_width) / 2 # print(int(dist), line_width) cairo_context.set_line_width(line_width) cairo_context.line_to(int(future_x), int(future_y)) cairo_context.stroke() cairo_context.move_to(int(future_x), int(future_y)) def op_smooth1(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return # self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(cairo.Operator.OVER) cairo_context.set_line_width(operation['line_width']) cairo_context.set_line_cap(operation['line_cap']) cairo_context.set_line_join(operation['line_join']) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) past_x = None past_y = None current_x = None current_y = None future_x = None future_y = None for pts in operation['path']: # FIXME c'est de la merde mais osef if pts[1] is (): continue if past_x is None: past_x = int(pts[1][0]) past_y = int(pts[1][1]) elif current_x is None: current_x = int(pts[1][0]) current_y = int(pts[1][1]) else: # if future_x is None: future_x = int(pts[1][0]) future_y = int(pts[1][1]) cairo_context.curve_to(past_x, past_y, current_x, current_y, future_x, future_y) past_x = None past_y = None current_x = None current_y = None future_x = None future_y = None if past_x is not None: if current_x is None: cairo_context.line_to(past_x, past_y) else: cairo_context.curve_to(past_x, past_y, current_x, current_y, current_x, current_y) cairo_context.stroke() def op_smooth2(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return # self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(cairo.Operator.OVER) cairo_context.set_line_width(operation['line_width']) cairo_context.set_line_cap(operation['line_cap']) cairo_context.set_line_join(operation['line_join']) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) x1 = None y1 = None x2 = None y2 = None x3 = None y3 = None x4 = None y4 = None for pts in operation['path']: if pts[1] is (): continue x1, y1, x2, y2, x3, y3, x4, y4 = self.next_arc(cairo_context, \ x2, y2, x3, y3, x4, y4, pts[1][0], pts[1][1]) self.next_arc(cairo_context, x2, y2, x3, y3, x4, y4, None, None) cairo_context.stroke() def next_point(self, x1, y1, x2, y2, dist): coef = 0.1 dx = x2 - x1 dy = y2 - y1 angle = math.atan2(dy, dx) nx = x2 + math.cos(angle) * dist * coef ny = y2 + math.sin(angle) * dist * coef return nx, ny def next_arc(self, cairo_context, x1, y1, x2, y2, x3, y3, x4, y4): if x2 is None or x3 is None: # No drawing possible yet, just continue to the next point return x1, y1, x2, y2, x3, y3, x4, y4 dist = math.sqrt( (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3) ) if x1 is None and x4 is None: cairo_context.move_to(x2, y2) cairo_context.line_to(x3, y3) return x1, y1, x2, y2, x3, y3, x4, y4 elif x1 is None: nx1, ny1 = x2, y2 nx2, ny2 = self.next_point(x4, y4, x3, y3, dist) elif x4 is None: nx1, ny1 = self.next_point(x1, y1, x2, y2, dist) nx2, ny2 = x3, y3 else: nx1, ny1 = self.next_point(x1, y1, x2, y2, dist) nx2, ny2 = self.next_point(x4, y4, x3, y3, dist) cairo_context.move_to(x2, y2) cairo_context.curve_to(nx1, ny1, nx2, ny2, x3, y3) return x1, y1, x2, y2, x3, y3, x4, y4 drawing-0.4.11/src/tools/classic_tools/tool_freeshape.py000066400000000000000000000076371362211111700234010ustar00rootroot00000000000000# tool_freeshape.py import cairo from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool from .utilities import utilities_generic_shape_tool_operation class ToolFreeshape(AbstractAbstractTool): __gtype_name__ = 'ToolFreeshape' def __init__(self, window, **kwargs): super().__init__('freeshape', _("Free shape"), 'tool-freeshape-symbolic', window) self.use_size = True (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) self.selected_style_id = 'secondary' self.selected_join_id = cairo.LineJoin.ROUND self.add_tool_action_enum('filling_style', 'secondary') def set_filling_style(self): state_as_string = self.get_option_value('filling_style') self.selected_style_id = state_as_string def get_options_label(self): return _("Shape options") def get_edition_status(self): self.set_filling_style() label = self.label + ' - ' + _("Click on the shape's first point to close it.") return label def give_back_control(self, preserve_selection): self.restore_pixbuf() (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) def draw_polygon(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) cairo_context.set_line_width(self.tool_width) cairo_context.set_line_join(self.selected_join_id) if self.past_x == -1.0: (self.past_x, self.past_y) = (self.x_press, self.y_press) cairo_context.move_to(self.x_press, self.y_press) self._path = cairo_context.copy_path() else: cairo_context.append_path(self._path) if self.past_x != -1.0 and self.past_y != -1.0 \ and (max(event_x, self.past_x) - min(event_x, self.past_x) < self.tool_width) \ and (max(event_y, self.past_y) - min(event_y, self.past_y) < self.tool_width): cairo_context.close_path() self._path = cairo_context.copy_path() return True else: self.continue_polygon(cairo_context, event_x, event_y) return False def continue_polygon(self, cairo_context, x, y): cairo_context.set_line_width(self.tool_width) cairo_context.set_source_rgba(self.main_color.red, self.main_color.green, \ self.main_color.blue, self.main_color.alpha) cairo_context.line_to(x, y) cairo_context.stroke_preserve() # draw the line without closing the path self._path = cairo_context.copy_path() self.non_destructive_show_modif() def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color self.secondary_color = left_color else: self.main_color = left_color self.secondary_color = right_color def on_motion_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() self.draw_polygon(event_x, event_y) def on_release_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() finished = self.draw_polygon(event_x, event_y) if finished: operation = self.build_operation(self._path) self.apply_operation(operation) (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) ############################################################################ def build_operation(self, cairo_path): operation = { 'tool_id': self.id, 'rgba_main': self.main_color, 'rgba_secd': self.secondary_color, 'operator': cairo.Operator.OVER, 'line_join': self.selected_join_id, 'line_width': self.tool_width, 'filling': self.selected_style_id, 'path': cairo_path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) utilities_generic_shape_tool_operation(cairo_context, operation) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_line.py000066400000000000000000000117221362211111700223540ustar00rootroot00000000000000# tool_line.py import cairo from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool from .utilities import utilities_add_arrow_triangle class ToolLine(AbstractAbstractTool): __gtype_name__ = 'ToolLine' def __init__(self, window, **kwargs): super().__init__('line', _("Line"), 'tool-line-symbolic', window) self.use_size = True self.add_tool_action_enum('line_shape', 'round') self.add_tool_action_boolean('use_dashes', False) self.add_tool_action_boolean('is_arrow', False) self.add_tool_action_boolean('use_gradient', False) self.add_tool_action_enum('cairo_operator', 'over') # Default values self.selected_shape_label = _("Round") self.selected_operator = cairo.Operator.OVER self.selected_end_id = cairo.LineCap.ROUND self.use_dashes = False self.use_arrow = False def set_active_shape(self): if self.get_option_value('line_shape') == 'square': self.selected_end_id = cairo.LineCap.BUTT self.selected_shape_label = _("Square") else: self.selected_end_id = cairo.LineCap.ROUND self.selected_shape_label = _("Round") def set_active_operator(self): state_as_string = self.get_option_value('cairo_operator') if state_as_string == 'difference': self.selected_operator = cairo.Operator.DIFFERENCE self.selected_operator_label = _("Difference") elif state_as_string == 'source': self.selected_operator = cairo.Operator.SOURCE self.selected_operator_label = _("Source color") elif state_as_string == 'clear': self.selected_operator = cairo.Operator.CLEAR self.selected_operator_label = _("Eraser") else: self.selected_operator = cairo.Operator.OVER self.selected_operator_label = _("Classic") def get_options_label(self): return _("Line options") def get_edition_status(self): # TODO l'opérateur est important self.use_dashes = self.get_option_value('use_dashes') self.use_arrow = self.get_option_value('is_arrow') self.use_gradient = self.get_option_value('use_gradient') self.set_active_shape() self.set_active_operator() label = self.label + ' (' + self.selected_shape_label + ') ' if self.use_arrow and self.use_dashes: label = label + ' - ' + _("Arrow") + ' - ' + _("With dashes") elif self.use_arrow: label = label + ' - ' + _("Arrow") elif self.use_dashes: label = label + ' - ' + _("With dashes") return label def give_back_control(self, preserve_selection): self.x_press = 0.0 self.y_press = 0.0 ############################################################################ def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 1: self.main_color = left_color self.sec_color = right_color elif event.button == 3: self.main_color = right_color self.sec_color = left_color def on_motion_on_area(self, event, surface, event_x, event_y): operation = self.build_operation(event_x, event_y) self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): operation = self.build_operation(event_x, event_y) self.apply_operation(operation) ############################################################################ def build_operation(self, event_x, event_y): operation = { 'tool_id': self.id, 'rgba': self.main_color, 'rgba2': self.sec_color, 'operator': self.selected_operator, 'line_width': self.tool_width, 'line_cap': self.selected_end_id, 'use_dashes': self.use_dashes, 'use_arrow': self.use_arrow, 'use_gradient': self.use_gradient, 'x_release': event_x, 'y_release': event_y, 'x_press': self.x_press, 'y_press': self.y_press } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(operation['operator']) cairo_context.set_line_cap(operation['line_cap']) line_width = operation['line_width'] cairo_context.set_line_width(line_width) c1 = operation['rgba'] c2 = operation['rgba2'] x1 = operation['x_press'] y1 = operation['y_press'] x2 = operation['x_release'] y2 = operation['y_release'] if operation['use_gradient']: pattern = cairo.LinearGradient(x1, y1, x2, y2) pattern.add_color_stop_rgba(0.1, c1.red, c1.green, c1.blue, c1.alpha) pattern.add_color_stop_rgba(0.9, c2.red, c2.green, c2.blue, c2.alpha) cairo_context.set_source(pattern) else: cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha) if operation['use_dashes']: cairo_context.set_dash([2 * line_width, 2 * line_width]) cairo_context.move_to(x1, y1) cairo_context.line_to(x2, y2) cairo_context.stroke() if operation['use_arrow']: utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_paint.py000066400000000000000000000130701362211111700225360ustar00rootroot00000000000000# tool_paint.py import cairo from gi.repository import Gtk, Gdk, GdkPixbuf from .abstract_tool import AbstractAbstractTool from .utilities import utilities_get_magic_path from .utilities import utilities_get_rgb_for_xy class ToolPaint(AbstractAbstractTool): __gtype_name__ = 'ToolPaint' def __init__(self, window, **kwargs): super().__init__('paint', _("Paint"), 'tool-paint-symbolic', window) self.new_color = None self.magic_path = None self.use_size = False self.add_tool_action_enum('paint_algo', 'fill') def get_options_label(self): return _("Painting options") def get_edition_status(self): if self.get_option_value('paint_algo') == 'clipping': return _("Click on an area to replace its color by transparency") else: return self.label def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): if event.button == 1: self.new_color = left_color if event.button == 3: self.new_color = right_color def on_release_on_area(self, event, surface, event_x, event_y): # Guard clause: we can't paint outside of the surface if event_x < 0 or event_x > surface.get_width() \ or event_y < 0 or event_y > surface.get_height(): return (x, y) = (int(event_x), int(event_y)) self.old_color = utilities_get_rgb_for_xy(surface, x, y) if self.get_option_value('paint_algo') == 'fill': self.magic_path = utilities_get_magic_path(surface, x, y, self.window, 1) elif self.get_option_value('paint_algo') == 'replace': self.magic_path = utilities_get_magic_path(surface, x, y, self.window, 2) else: pass # == 'clipping' operation = self.build_operation() self.apply_operation(operation) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'algo': self.get_option_value('paint_algo'), 'rgba': self.new_color, 'old_rgb': self.old_color, 'path': self.magic_path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() if operation['algo'] == 'replace': self.op_replace(operation) elif operation['algo'] == 'fill': self.op_fill(operation) else: # == 'clipping' self.op_clipping(operation) ############################################################################ def op_replace(self, operation): """Algorithmically less ugly than `op_fill`, but doesn't handle (semi-) transparent colors correctly, even outside of the targeted area.""" # FIXME if operation['path'] is None: return surf = self.get_surface() cairo_context = cairo.Context(surf) rgba = operation['rgba'] old_rgb = operation['old_rgb'] cairo_context.set_source_rgba(255, 255, 255, 1.0) cairo_context.append_path(operation['path']) cairo_context.set_operator(cairo.Operator.DEST_IN) cairo_context.fill_preserve() pixbuf1 = Gdk.pixbuf_get_from_surface(surf, 0, 0, \ surf.get_width(), surf.get_height()) self.get_image().set_temp_pixbuf(pixbuf1) tolerance = 10 # XXX i = -1 * tolerance while i < tolerance: red = max(0, old_rgb[0]+i) green = max(0, old_rgb[1]+i) blue = max(0, old_rgb[2]+i) red = int( min(255, red) ) green = int( min(255, green) ) blue = int( min(255, blue) ) self.replace_temp_with_alpha(red, green, blue) i = i+1 self.restore_pixbuf() cairo_context2 = cairo.Context(self.get_surface()) cairo_context2.append_path(operation['path']) cairo_context2.set_operator(cairo.Operator.CLEAR) cairo_context2.set_source_rgba(255, 255, 255, 1.0) cairo_context2.fill() cairo_context2.set_operator(cairo.Operator.OVER) Gdk.cairo_set_source_pixbuf(cairo_context2, \ self.get_image().temp_pixbuf, 0, 0) cairo_context2.append_path(operation['path']) cairo_context2.paint() self.non_destructive_show_modif() cairo_context2.set_operator(cairo.Operator.DEST_OVER) cairo_context2.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) cairo_context2.paint() def op_fill(self, operation): """Simple but ugly, and it's relying on the precision of the provided path whose creation is based on shitty heurisctics.""" if operation['path'] is None: return cairo_context = cairo.Context(self.get_surface()) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) cairo_context.append_path(operation['path']) cairo_context.fill() def op_clipping(self, operation): """Replace the color with transparency by adding an alpha channel.""" old_rgb = operation['old_rgb'] r0 = old_rgb[0] g0 = old_rgb[1] b0 = old_rgb[2] margin = 0 # TODO as an option ? is not elegant but is powerful for i in range(-1 * margin, margin+1): r = r0 + i if r <= 255 and r >= 0: for j in range(-1 * margin, margin+1): g = g0 + j if g <= 255 and g >= 0: for k in range(-1 * margin, margin+1): b = b0 + k if b <= 255 and b >= 0: self.replace_with_alpha(r, g, b) self.restore_pixbuf() self.non_destructive_show_modif() def replace_main_with_alpha(self, red, green, blue): self.get_image().main_pixbuf = self.get_main_pixbuf().add_alpha(True, \ red, green, blue) def replace_temp_with_alpha(self, red, green, blue): pixbuf1 = self.get_image().temp_pixbuf.add_alpha(True, red, green, blue) self.get_image().set_temp_pixbuf(pixbuf1) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_pencil.py000066400000000000000000000114531362211111700227000ustar00rootroot00000000000000# tool_pencil.py from gi.repository import Gtk, Gdk import cairo, math from .abstract_tool import AbstractAbstractTool from .utilities import utilities_smooth_path class ToolPencil(AbstractAbstractTool): __gtype_name__ = 'ToolPencil' def __init__(self, window, **kwargs): super().__init__('pencil', _("Pencil"), 'tool-pencil-symbolic', window) self._path = None self.main_color = None self.use_size = True self.selected_shape_label = _("Round") self.selected_cap_id = cairo.LineCap.ROUND self.selected_join_id = cairo.LineCap.ROUND self.selected_operator = cairo.Operator.OVER self.use_dashes = False self.is_smooth = True self.add_tool_action_enum('pencil_shape', 'round') self.add_tool_action_enum('cairo_operator', 'over') self.add_tool_action_boolean('use_dashes', self.use_dashes) self.add_tool_action_boolean('pencil_smooth', self.is_smooth) def set_active_shape(self, *args): state_as_string = self.get_option_value('pencil_shape') if state_as_string == 'thin': self.selected_cap_id = cairo.LineCap.BUTT self.selected_join_id = cairo.LineJoin.BEVEL self.selected_shape_label = _("Thin") elif state_as_string == 'square': self.selected_cap_id = cairo.LineCap.SQUARE self.selected_join_id = cairo.LineJoin.MITER self.selected_shape_label = _("Square") else: self.selected_cap_id = cairo.LineCap.ROUND self.selected_join_id = cairo.LineJoin.ROUND self.selected_shape_label = _("Round") def set_active_operator(self, *args): state_as_string = self.get_option_value('cairo_operator') if state_as_string == 'difference': self.selected_operator = cairo.Operator.DIFFERENCE self.selected_operator_label = _("Difference") elif state_as_string == 'source': self.selected_operator = cairo.Operator.SOURCE self.selected_operator_label = _("Source color") elif state_as_string == 'clear': self.selected_operator = cairo.Operator.CLEAR self.selected_operator_label = _("Eraser") else: self.selected_operator = cairo.Operator.OVER self.selected_operator_label = _("Classic") def get_options_label(self): return _("Pencil options") def get_edition_status(self): self.is_smooth = self.get_option_value('pencil_smooth') self.use_dashes = self.get_option_value('use_dashes') self.set_active_shape() self.set_active_operator() label = self.label + ' - ' + self.selected_shape_label if self.use_dashes: label = label + ' - ' + _("With dashes") return label ############################################################################ def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color else: self.main_color = left_color self._path = None def _add_point(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) if self._path is None: cairo_context.move_to(self.x_press, self.y_press) else: cairo_context.append_path(self._path) cairo_context.line_to(event_x, event_y) self._path = cairo_context.copy_path() def on_motion_on_area(self, event, surface, event_x, event_y): self._add_point(event_x, event_y) operation = self.build_operation() self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): self._add_point(event_x, event_y) operation = self.build_operation() self.apply_operation(operation) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'rgba': self.main_color, 'operator': self.selected_operator, 'line_width': self.tool_width, 'line_cap': self.selected_cap_id, 'line_join': self.selected_join_id, 'use_dashes': self.use_dashes, 'is_smooth': self.is_smooth, 'path': self._path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return if operation['path'] is None: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) cairo_context.set_operator(operation['operator']) cairo_context.set_line_cap(operation['line_cap']) cairo_context.set_line_join(operation['line_join']) line_width = operation['line_width'] cairo_context.set_line_width(line_width) rgba = operation['rgba'] cairo_context.set_source_rgba(rgba.red, rgba.green, rgba.blue, rgba.alpha) if operation['use_dashes']: cairo_context.set_dash([2*line_width, 2*line_width]) if operation['is_smooth']: utilities_smooth_path(cairo_context, operation['path']) else: cairo_context.append_path(operation['path']) cairo_context.stroke() ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_picker.py000066400000000000000000000021151362211111700226760ustar00rootroot00000000000000# tool_picker.py from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool from .utilities import utilities_get_rgb_for_xy class ToolPicker(AbstractAbstractTool): __gtype_name__ = 'ToolPicker' def __init__(self, window, **kwargs): super().__init__('picker', _("Color Picker"), 'color-select-symbolic', window) def get_options_model(self): return None def on_release_on_area(self, event, surface, event_x, event_y): rgba_vals = utilities_get_rgb_for_xy(surface, event_x, event_y) if rgba_vals is None: return # click outside of the surface r = rgba_vals[0] / 255 g = rgba_vals[1] / 255 b = rgba_vals[2] / 255 a = rgba_vals[3] / 255 color = Gdk.RGBA(red=r, green=g, blue=b, alpha=a) if event.button == 3: self.window.color_popover_r.color_widget.set_rgba(color) elif event.button == 1: self.window.color_popover_l.color_widget.set_rgba(color) self.window.back_to_previous() ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_polygon.py000066400000000000000000000101201362211111700231030ustar00rootroot00000000000000# tool_polygon.py from gi.repository import Gtk, Gdk import cairo from .abstract_tool import AbstractAbstractTool from .utilities import utilities_generic_shape_tool_operation class ToolPolygon(AbstractAbstractTool): __gtype_name__ = 'ToolPolygon' def __init__(self, window, **kwargs): super().__init__('polygon', _("Polygon"), 'tool-polygon-symbolic', window) self.use_size = True (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) self.selected_style_id = 'secondary' self.selected_join_id = cairo.LineJoin.MITER self.add_tool_action_enum('filling_style', 'secondary') def set_filling_style(self): state_as_string = self.get_option_value('filling_style') self.selected_style_id = state_as_string def get_options_label(self): return _("Polygon options") def get_edition_status(self): self.set_filling_style() label = self.label + ' - ' + _("Click on the shape's first point to close it.") return label def give_back_control(self, preserve_selection): self.restore_pixbuf() (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) def draw_polygon(self, event_x, event_y, is_preview): cairo_context = cairo.Context(self.get_surface()) cairo_context.set_line_width(self.tool_width) if self.past_x == -1.0: self.init_polygon(cairo_context) else: cairo_context.append_path(self._path) if is_preview: self.preview_polygon(cairo_context, event_x, event_y) return False if self.past_x != -1.0 and self.past_y != -1.0 \ and (max(event_x, self.past_x) - min(event_x, self.past_x) < self.tool_width) \ and (max(event_y, self.past_y) - min(event_y, self.past_y) < self.tool_width): cairo_context.close_path() self._path = cairo_context.copy_path() return True else: self.continue_polygon(cairo_context, event_x, event_y) return False def init_polygon(self, cairo_context): # TODO simplfiable depuis que c'est split en 2 outils (self.past_x, self.past_y) = (self.x_press, self.y_press) cairo_context.move_to(self.x_press, self.y_press) self._path = cairo_context.copy_path() def continue_polygon(self, cairo_context, x, y): cairo_context.set_line_width(self.tool_width) cairo_context.set_source_rgba(self.main_color.red, self.main_color.green, \ self.main_color.blue, self.main_color.alpha) cairo_context.line_to(x, y) cairo_context.stroke_preserve() # draw the line without closing the path self._path = cairo_context.copy_path() self.non_destructive_show_modif() def preview_polygon(self, cairo_context, x, y): cairo_context.line_to(x, y) cairo_context.close_path() operation = self.build_operation(cairo_context.copy_path()) self.do_tool_operation(operation) def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color self.secondary_color = left_color else: self.main_color = left_color self.secondary_color = right_color def on_motion_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() self.draw_polygon(event_x, event_y, True) def on_release_on_area(self, event, surface, event_x, event_y): self.restore_pixbuf() finished = self.draw_polygon(event_x, event_y, False) if finished: operation = self.build_operation(self._path) self.apply_operation(operation) (self.x_press, self.y_press) = (-1.0, -1.0) (self.past_x, self.past_y) = (-1.0, -1.0) def build_operation(self, cairo_path): operation = { 'tool_id': self.id, 'rgba_main': self.main_color, 'rgba_secd': self.secondary_color, 'operator': cairo.Operator.OVER, 'line_join': self.selected_join_id, 'line_width': self.tool_width, 'filling': self.selected_style_id, 'path': cairo_path } return operation def do_tool_operation(self, operation): # TODO choix du line join ? if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) utilities_generic_shape_tool_operation(cairo_context, operation) drawing-0.4.11/src/tools/classic_tools/tool_rectangle.py000066400000000000000000000107651362211111700233770ustar00rootroot00000000000000# tool_rectangle.py import cairo, math from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool from .utilities import utilities_generic_shape_tool_operation class ToolRectangle(AbstractAbstractTool): __gtype_name__ = 'ToolRectangle' def __init__(self, window, **kwargs): super().__init__('rectangle', _("Rectangle"), 'tool-rectangle-symbolic', window) self.use_size = True (self.x_press, self.y_press) = (-1.0, -1.0) self.selected_style_label = _("Filled (secondary color)") self.selected_style_id = 'secondary' self.selected_shape_id = 'rectangle' self.add_tool_action_enum('filling_style', self.selected_style_id) self.add_tool_action_enum('rectangle_shape', self.selected_shape_id) def set_active_style(self, *args): state_as_string = self.get_option_value('filling_style') self.selected_style_id = state_as_string if state_as_string == 'empty': self.selected_style_label = _("Empty") elif state_as_string == 'filled': self.selected_style_label = _("Filled (main color)") else: self.selected_style_label = _("Filled (secondary color)") def set_active_shape(self, *args): self.selected_shape_id = self.get_option_value('rectangle_shape') def get_options_label(self): return _("Rectangle options") def get_edition_status(self): self.set_active_shape() self.set_active_style() if self.selected_shape_id == 'rounded': label = _("Rounded rectangle") + ' - ' + self.selected_style_label else: label = self.label + ' - ' + self.selected_style_label return label def give_back_control(self, preserve_selection): (self.x_press, self.y_press) = (-1.0, -1.0) self.restore_pixbuf() ############################################################################ def build_rectangle(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) cairo_context.move_to(self.x_press, self.y_press) cairo_context.line_to(self.x_press, event_y) cairo_context.line_to(event_x, event_y) cairo_context.line_to(event_x, self.y_press) cairo_context.close_path() self._path = cairo_context.copy_path() def build_roundedrect(self, event_x, event_y): cairo_context = cairo.Context(self.get_surface()) a = min(self.x_press, event_x) b = max(self.x_press, event_x) c = min(self.y_press, event_y) d = max(self.y_press, event_y) radius = min(d - c, b - a) / 6 # c'est arbitraire pi2 = math.pi / 2 cairo_context.arc(a + radius, c + radius, radius, 2 * pi2, 3 * pi2) cairo_context.arc(b - radius, c + radius, radius, 3 * pi2, 4 * pi2) cairo_context.arc(b - radius, d - radius, radius, 0 * pi2, 1 * pi2) cairo_context.arc(a + radius, d - radius, radius, 1 * pi2, 2 * pi2) cairo_context.close_path() self._path = cairo_context.copy_path() ############################################################################ def on_press_on_area(self, event, surface, tool_width, left_color, right_color, event_x, event_y): self.x_press = event_x self.y_press = event_y self.tool_width = tool_width if event.button == 3: self.main_color = right_color self.secondary_color = left_color else: self.main_color = left_color self.secondary_color = right_color def on_motion_on_area(self, event, surface, event_x, event_y): if self.selected_shape_id == 'rectangle': self.build_rectangle(event_x, event_y) else: self.build_roundedrect(event_x, event_y) operation = self.build_operation() self.do_tool_operation(operation) def on_release_on_area(self, event, surface, event_x, event_y): if self.selected_shape_id == 'rectangle': self.build_rectangle(event_x, event_y) else: self.build_roundedrect(event_x, event_y) self.x_press = 0.0 self.y_press = 0.0 operation = self.build_operation() self.apply_operation(operation) ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'rgba_main': self.main_color, 'rgba_secd': self.secondary_color, 'operator': cairo.Operator.OVER, 'line_join': cairo.LineJoin.MITER, 'line_width': self.tool_width, 'filling': self.selected_style_id, 'path': self._path } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) utilities_generic_shape_tool_operation(cairo_context, operation) ############################################################################ ################################################################################ drawing-0.4.11/src/tools/classic_tools/tool_text.py000066400000000000000000000215661362211111700224200ustar00rootroot00000000000000# tool_text.py import cairo from gi.repository import Gtk, Gdk from .abstract_tool import AbstractAbstractTool class ToolText(AbstractAbstractTool): __gtype_name__ = 'ToolText' def __init__(self, window, **kwargs): super().__init__('text', _("Text"), 'tool-text-symbolic', window) self.x_begin = 0.0 self.y_begin = 0.0 self.should_cancel = False self.use_size = True self._font_fam = "Sans" self._bg_id = 'outline' self._bg_label = _("Outline") self.add_tool_action_enum('text-font', self._font_fam) self.add_tool_action_boolean('text-bold', False) self.add_tool_action_boolean('text-italic', False) self.add_tool_action_enum('text-background', self._bg_id) builder = Gtk.Builder().new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_text.ui') # Popover for text insertion self.popover = builder.get_object('insertion-popover') self.entry = builder.get_object('entry') self.entry.set_size_request(100, 50) insert_btn = builder.get_object('insert_btn') insert_btn.connect('clicked', self.on_insert_text) cancel_btn = builder.get_object('cancel_btn') cancel_btn.connect('clicked', self.on_cancel) self.entry.get_buffer().connect('changed', self.preview_text) ############################################################################ # Options ################################################################## def _set_font_options(self, *args): # TODO ? use the widget again, and cairo.ToyFontFace self._font_fam = self.get_option_value('text-font') if self.get_option_value('text-italic'): self._font_slant = cairo.FontSlant.ITALIC else: self._font_slant = cairo.FontSlant.NORMAL if self.get_option_value('text-bold'): self._font_weight = cairo.FontWeight.BOLD else: self._font_weight = cairo.FontWeight.NORMAL def _set_background_style(self, *args): state_as_string = self.get_option_value('text-background') self._bg_id = state_as_string if state_as_string == 'none': self._bg_label = _("No background") elif state_as_string == 'shadow': self._bg_label = _("Shadow") elif state_as_string == 'outline': self._bg_label = _("Outline") else: self._bg_label = _("Rectangle background") def get_options_label(self): return _("Font options") def get_edition_status(self): self._set_background_style() self._set_font_options() label = self.label + ' - ' + self._font_fam + ' - ' + self._bg_label return label ############################################################################ def on_tool_selected(self): super().on_tool_selected() def on_tool_unselected(self): self.set_action_sensitivity('paste', True) self.set_action_sensitivity('select_all', True) self.set_action_sensitivity('selection_cut', True) self.set_action_sensitivity('selection_copy', True) def give_back_control(self, preserve_selection): if self.should_cancel: self.on_cancel() def force_text_tool(self, string): self.row.set_active(True) # XXX ugly, but better in future versions self.main_color = self.window.color_popover_l.color_widget.get_rgba() self.secondary_color = self.window.color_popover_r.color_widget.get_rgba() self.tool_width = self.window.thickness_spinbtn.get_value_as_int() self.x_begin = 100 self.y_begin = 100 self._open_popover_at(100, 100) self.set_string(string) def set_string(self, string): self.entry.get_buffer().set_text(string, -1) ############################################################################ def on_press_on_area(self, event, surface, tool_width, \ left_color, right_color, event_x, event_y): if event.button == 1: self.main_color = left_color self.secondary_color = right_color else: self.main_color = right_color self.secondary_color = left_color self.tool_width = tool_width def on_release_on_area(self, event, surface, event_x, event_y): self.x_begin = event_x self.y_begin = event_y self.should_cancel = True # self._set_font_options() self._open_popover_at(int(event.x), int(event.y)) # Usual text entry shortcuts don't work otherwise self.set_action_sensitivity('paste', False) self.set_action_sensitivity('select_all', False) self.set_action_sensitivity('selection_cut', False) self.set_action_sensitivity('selection_copy', False) def _open_popover_at(self, x, y): rectangle = Gdk.Rectangle() rectangle.x = x rectangle.y = y rectangle.height = 1 rectangle.width = 1 self.popover.set_pointing_to(rectangle) self.popover.set_relative_to(self.get_image()) self.popover.popup() self.entry.grab_focus() self.preview_text() def on_insert_text(self, *args): self.popover.popdown() if self.has_current_text(): operation = self.build_operation() self.apply_operation(operation) self.set_string('') self.set_action_sensitivity('paste', True) self.set_action_sensitivity('select_all', True) self.set_action_sensitivity('selection_cut', True) self.set_action_sensitivity('selection_copy', True) def has_current_text(self): b = self.entry.get_buffer() self.text_string = b.get_text(b.get_start_iter(), b.get_end_iter(), False) if self.text_string == '': self.restore_pixbuf() self.non_destructive_show_modif() return False else: return True def preview_text(self, *args): if self.has_current_text(): operation = self.build_operation() self.do_tool_operation(operation) def on_cancel(self, *args): self.restore_pixbuf() self.popover.popdown() self.set_string('') self.should_cancel = False ############################################################################ def build_operation(self): operation = { 'tool_id': self.id, 'rgba1': self.main_color, 'rgba2': self.secondary_color, 'font_fam': self._font_fam, 'font_slant': self._font_slant, 'font_weight': self._font_weight, 'font_size': self.tool_width, 'x': self.x_begin, 'y': self.y_begin, 'background': self._bg_id, 'text': self.text_string } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() cairo_context = cairo.Context(self.get_surface()) font_fam = operation['font_fam'] font_slant = operation['font_slant'] font_weight = operation['font_weight'] font_size = operation['font_size'] * 3 # XXX totalement arbitraire cairo_context.select_font_face(font_fam, font_slant, font_weight) cairo_context.set_font_size(font_size) lines = operation['text'].split('\n') i = 0 c1 = operation['rgba1'] c2 = operation['rgba2'] text_x = int(operation['x']) text_y = int(operation['y']) for line_text in lines: #################################################################### # Draw background for the line, if any ############################# line_y = text_y + i * font_size if operation['background'] == 'rectangle': self._op_bg_rectangle(cairo_context, c2, font_size, i, text_x, \ text_y, line_text) elif operation['background'] == 'shadow': self._op_bg_shadow(cairo_context, c2, font_size, text_x, \ line_y, line_text) elif operation['background'] == 'outline': self._op_bg_outline(cairo_context, c2, font_size, text_x, \ line_y, line_text) #################################################################### # Draw text for the line ########################################### cairo_context.set_source_rgba(c1.red, c1.green, c1.blue, c1.alpha) cairo_context.move_to(text_x, line_y) cairo_context.show_text( line_text ) i = i + 1 self.non_destructive_show_modif() def _op_bg_shadow(self, context, color, font_size, text_x, text_y, line): context.set_source_rgba(color.red, color.green, color.blue, color.alpha) dist = max(min(int(font_size/18), 4), 1) context.move_to(text_x + dist, text_y + dist) context.show_text(line) def _op_bg_outline(self, context, color, font_size, text_x, text_y, line): context.set_source_rgba(color.red, color.green, color.blue, color.alpha) dist = max(min(int(font_size/18), 8), 1) for dx in range(-dist, dist): for dy in range(-dist, dist): context.move_to(text_x + dx, text_y + dy) context.show_text(line) def _op_bg_rectangle(self, context, color, font_size, i, text_x, text_y, line): # XXX i think cairo.Context.font_extents is supposed to help me context.set_source_rgba(0.0, 0.0, 0.0, 0.0) first_y = int(text_y + (i + 0.2) * font_size) context.move_to(text_x, first_y) context.show_text(line) context.rel_line_to(0, (-1) * font_size) context.line_to(text_x, int(text_y + (i - 0.8) * font_size)) context.line_to(text_x, first_y) context.set_source_rgba(color.red, color.green, color.blue, color.alpha) context.fill() context.stroke() ############################################################################ ################################################################################ drawing-0.4.11/src/tools/icons/000077500000000000000000000000001362211111700162655ustar00rootroot00000000000000drawing-0.4.11/src/tools/icons/tool-arc-symbolic.svg000066400000000000000000000004321362211111700223440ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-circle-symbolic.svg000066400000000000000000000003061362211111700230400ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-crop-symbolic.svg000066400000000000000000000020121362211111700225360ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-flip-symbolic.svg000066400000000000000000000030201362211111700225250ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-freeshape-symbolic.svg000066400000000000000000000014261362211111700235450ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-line-symbolic.svg000066400000000000000000000002331362211111700225250ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-magic-symbolic.svg000066400000000000000000000012111362211111700226530ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-paint-symbolic.svg000066400000000000000000000013251362211111700227140ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-pencil-symbolic.svg000066400000000000000000000004371362211111700230560ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-polygon-symbolic.svg000066400000000000000000000021511362211111700232660ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-rectangle-symbolic.svg000066400000000000000000000002171362211111700235440ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-rotate-symbolic.svg000066400000000000000000000007241362211111700231010ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-saturate-symbolic.svg000066400000000000000000000011761362211111700234350ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-scale-symbolic.svg000066400000000000000000000011321362211111700226640ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-select-symbolic.svg000066400000000000000000000012251362211111700230570ustar00rootroot00000000000000 drawing-0.4.11/src/tools/icons/tool-text-symbolic.svg000066400000000000000000000020521362211111700225630ustar00rootroot00000000000000 drawing-0.4.11/src/tools/selection_tools/000077500000000000000000000000001362211111700203575ustar00rootroot00000000000000drawing-0.4.11/src/tools/selection_tools/tool_select.py000066400000000000000000000344301362211111700232510ustar00rootroot00000000000000# tool_select.py from gi.repository import Gtk, Gdk, GdkPixbuf import cairo from .abstract_tool import AbstractAbstractTool from .utilities import utilities_get_magic_path class ToolSelect(AbstractAbstractTool): __gtype_name__ = 'ToolSelect' closing_precision = 10 def __init__(self, window, **kwargs): super().__init__('select', _("Selection"), 'tool-select-symbolic', window) self.use_color = False self.accept_selection = True self.selected_type_id = 'rectangle' self.selected_type_label = _("Rectangle selection") self.closing_x = 0 self.closing_y = 0 self.x_press = 0 self.y_press = 0 self.future_x = 0 self.future_y = 0 self.future_path = None self.future_pixbuf = None self.operation_type = None # 'op-define' self.behavior = 'rectangle' self.add_tool_action_enum('selection_type', self.selected_type_id) # Special bottom panel TODO common to the 3 types builder = Gtk.Builder.new_from_resource( \ '/com/github/maoschanz/drawing/tools/ui/tool_select.ui') self.bottom_panel = builder.get_object('bottom-panel') actions_menu = builder.get_object('actions-menu') builder.get_object('actions_btn').set_menu_model(actions_menu) self.import_box_narrow = builder.get_object('import_box_narrow') self.import_box_long = builder.get_object('import_box_long') self.minimap_label = builder.get_object('minimap_label') self.minimap_arrow = builder.get_object('minimap_arrow') self.minimap_icon = builder.get_object('minimap_icon') self.window.bottom_panel_box.add(self.bottom_panel) self.implements_panel = True # self.needed_width_for_long = XXX TODO currently harcoded self.needed_width_for_long = 450 ############################################################################ # UI implementations ####################################################### def set_active_type(self, *args): selection_type = self.get_option_value('selection_type') if selection_type == 'rectangle': self.selected_type_id = 'rectangle' self.selected_type_label = _("Rectangle selection") elif selection_type == 'freehand': self.selected_type_id = 'freehand' self.selected_type_label = _("Free selection") else: self.selected_type_id = 'color' self.selected_type_label = _("Color selection") def get_options_label(self): return _("Selection options") def get_edition_status(self): self.set_active_type() label = self.selected_type_label if self.selection_is_active(): label = label + ' - ' + _("Drag the selection or right-click on the canvas") else: label = label + ' - ' + _("Select an area or right-click on the canvas") return label def adapt_to_window_size(self, available_width): # TODO calculer proprement needed_width_for_long à partir des tailles de # chaque widget # self.needed_width_for_long = if self.needed_width_for_long > 0.8 * available_width: self.compact_bottombar(True) else: self.compact_bottombar(False) def compact_bottombar(self, state): self.import_box_long.set_visible(not state) self.minimap_label.set_visible(not state) self.minimap_arrow.set_visible(not state) self.import_box_narrow.set_visible(state) self.minimap_icon.set_visible(state) ############################################################################ # Lifecycle implementations ################################################ def give_back_control(self, preserve_selection): # TODO tout le bazar sur has_been_used if not preserve_selection: self.unselect_and_apply() # def on_tool_selected(self, *args): # XXX rien, vraiment ? # def on_tool_unselected(self, *args): # XXX rien, vraiment ? # def cancel_ongoing_operation(self): # self.get_image().selection.reset() # return True ############################################################################ ############################################################################ def get_press_behavior(self): if self.selection_is_active(): if self.get_selection().point_is_in_selection(self.x_press, self.y_press): return 'drag' #else: # superflu # return 'cancel' else: if self.selected_type_id == 'color': return 'color' elif self.selected_type_id == 'freehand': return 'freehand' else: return 'rectangle' return 'cancel' ############################################################################ # Signal callbacks implementations ######################################### def on_press_on_area(self, event, surface, tool_width, lc, rc, event_x, event_y): self.x_press = event_x self.y_press = event_y self.behavior = self.get_press_behavior() if self.behavior == 'drag': self.cursor_name = 'grabbing' self.window.set_cursor(True) # elif self.behavior == 'color': # self.future_path = utilities_get_magic_path(surface, event_x, event_y, self.window, 1) elif self.behavior == 'freehand': self.draw_polygon(event_x, event_y) elif self.behavior == 'cancel': self.unselect_and_apply() self.restore_pixbuf() self.non_destructive_show_modif() def on_motion_on_area(self, event, surface, event_x, event_y): if self.behavior == 'rectangle': self.build_rectangle_path(self.x_press, self.y_press, event_x, event_y) operation = self.build_operation() self.do_tool_operation(operation) # FIXME ça pousse à load race de # trucs inutiles vers le selection manager alors qu'on veut juste # dessiner un path elif self.behavior == 'freehand': self.draw_polygon(event_x, event_y) elif self.behavior == 'drag': # self.drag_to(event_x, event_y) pass # on modifie réellement les coordonnées, c'est pas une "vraie" preview def on_unclicked_motion_on_area(self, event, surface): x = event.x + self.get_image().scroll_x y = event.y + self.get_image().scroll_y if not self.selection_is_active(): self.cursor_name = 'cross' elif self.get_selection().point_is_in_selection(x, y): self.cursor_name = 'grab' else: self.cursor_name = 'cross' self.window.set_cursor(True) def on_release_on_area(self, event, surface, event_x, event_y): if event.button == 3: self.get_selection().set_r_popover_position(event.x, event.y) self.get_selection().show_popover(True) return self.restore_pixbuf() if self.behavior == 'rectangle': self.build_rectangle_path(self.x_press, self.y_press, event_x, event_y) self.operation_type = 'op-define' operation = self.build_operation() self.apply_operation(operation) # self.get_selection().show_popover(True) elif self.behavior == 'freehand': if self.draw_polygon(event_x, event_y): self.restore_pixbuf() self.operation_type = 'op-define' self.set_future_coords_for_free_path() operation = self.build_operation() self.apply_operation(operation) # self.get_selection().show_popover(True) # self.set_selection_has_been_used(False) # TODO else: return # without updating the surface so the path is visible elif self.behavior == 'color': self.future_path = utilities_get_magic_path(surface, event_x, event_y, self.window, 1) self.operation_type = 'op-define' self.set_future_coords_for_free_path() operation = self.build_operation() self.apply_operation(operation) elif self.behavior == 'drag': self.drag_to(event_x, event_y) def drag_to(self, event_x, event_y): x = self.get_selection().selection_x y = self.get_selection().selection_y self.future_x = x + event_x - self.x_press self.future_y = y + event_y - self.y_press self.operation_type = 'op-drag' operation = self.build_operation() self.do_tool_operation(operation) self.operation_type = 'op-define' ############################################################################ # Path management ########################################################## def draw_polygon(self, event_x, event_y): """This method is specific to the 'free selection' mode.""" cairo_context = cairo.Context(self.get_surface()) cairo_context.set_source_rgba(0.5, 0.5, 0.5, 0.5) cairo_context.set_dash([3, 3]) if self.future_path is None: self.closing_x = event_x self.closing_y = event_y cairo_context.move_to(event_x, event_y) self.future_path = cairo_context.copy_path() return False if (max(event_x, self.closing_x) - min(event_x, self.closing_x) < self.closing_precision) \ and (max(event_y, self.closing_y) - min(event_y, self.closing_y) < self.closing_precision): cairo_context.append_path(self.future_path) cairo_context.close_path() cairo_context.stroke_preserve() self.future_path = cairo_context.copy_path() return True else: cairo_context.append_path(self.future_path) cairo_context.line_to(int(event_x), int(event_y)) cairo_context.stroke_preserve() # draw the line without closing the path self.future_path = cairo_context.copy_path() self.non_destructive_show_modif() # XXX return False def tool_select_all(self): self.build_rectangle_path(0, 0, self.get_main_pixbuf().get_width(), \ self.get_main_pixbuf().get_height()) self.operation_type = 'op-define' operation = self.build_operation() self.do_tool_operation(operation) self.get_selection().show_popover(True) def build_rectangle_path(self, press_x, press_y, release_x, release_y): cairo_context = cairo.Context(self.get_surface()) x0 = int( min(press_x, release_x) ) y0 = int( min(press_y, release_y) ) x1 = int( max(press_x, release_x) ) y1 = int( max(press_y, release_y) ) w = x1 - x0 h = y1 - y0 if w <= 0 or h <= 0: self.future_path = None return self.future_x = x0 self.future_y = y0 cairo_context.new_path() cairo_context.move_to(x0, y0) cairo_context.line_to(x1, y0) cairo_context.line_to(x1, y1) cairo_context.line_to(x0, y1) cairo_context.close_path() self.future_path = cairo_context.copy_path() def set_future_coords_for_free_path(self): main_width = self.get_main_pixbuf().get_width() main_height = self.get_main_pixbuf().get_height() xmin, ymin = main_width, main_height for pts in self.future_path: if pts[1] is not (): xmin = min(pts[1][0], xmin) ymin = min(pts[1][1], ymin) self.future_x = max(xmin, 0.0) self.future_y = max(ymin, 0.0) ############################################################################ # Operations management methods ############################################ def update_surface(self): operation = self.build_operation() self.do_tool_operation(operation) self.non_destructive_show_modif() def delete_selection(self): self.operation_type = 'op-delete' operation = self.build_operation() self.apply_operation(operation) self.operation_type = 'op-define' def import_selection(self, pixbuf): self.future_pixbuf = pixbuf self.operation_type = 'op-import' operation = self.build_operation() self.apply_operation(operation) self.operation_type = 'op-define' def unselect_and_apply(self): if self.operation_type is None: return self.operation_type = 'op-apply' operation = self.build_operation() self.apply_operation(operation) self.operation_type = 'op-define' self.cursor_name = 'cross' self.window.set_cursor(True) ##### def op_import(self, operation): if operation['pixbuf'] is None: return self.get_selection().set_pixbuf(operation['pixbuf'].copy(), True, True) def op_delete(self, operation): if operation['initial_path'] is None: return self.get_selection().temp_path = operation['initial_path'] self.get_selection().delete_temp() def op_drag(self, operation): self.get_selection().set_coords(False, \ operation['pixb_x'], operation['pixb_y']) self.non_destructive_show_modif() def op_define(self, operation): if operation['initial_path'] is None: return self.get_selection().set_coords(True, \ operation['pixb_x'], operation['pixb_y']) self.get_selection().load_from_path(operation['initial_path']) def op_apply(self): cairo_context = cairo.Context(self.get_surface()) self.get_selection().show_selection_on_surface(cairo_context, False) self.get_selection().reset() self.future_path = None ############################################################################ # Operations management implementations #################################### def build_operation(self): if self.future_pixbuf is None: # Cas normal pixbuf = None else: # Cas des importations uniquement pixbuf = self.future_pixbuf.copy() operation = { 'tool_id': self.id, 'operation_type': self.operation_type, 'initial_path': self.future_path, 'pixbuf': pixbuf, 'pixb_x': int(self.future_x), 'pixb_y': int(self.future_y) } return operation def do_tool_operation(self, operation): if operation['tool_id'] != self.id: return self.restore_pixbuf() if operation['operation_type'] == 'op-delete': # Opération instantanée (sans preview), correspondant à une action # de type "clic-droit > couper" ou "clic-droit > supprimer". # On réinitialise le selection_manager. self.op_delete(operation) self.get_selection().reset() # the selection is reset here because # op_delete is also used for the 'op-drag' elif operation['operation_type'] == 'op-import': # Opération instantanée (sans preview), correspondant à une action # de type "clic-droit > importer" ou "clic-droit > coller". # On charge un pixbuf dans le selection_manager. self.op_import(operation) elif operation['operation_type'] == 'op-define': # Opération instantanée (sans preview), correspondant à une sélection # (rectangulaire ou non) par définition d'un path. # On charge un pixbuf dans le selection_manager. self.op_define(operation) elif operation['operation_type'] == 'op-drag': # Prévisualisation d'opération, correspondant à la définition d'une # sélection (rectangulaire ou non) par construction d'un path. # On modifie les coordonnées connues du selection_manager. self.op_delete(operation) self.op_drag(operation) elif operation['operation_type'] == 'op-apply': # Opération instantanée correspondant à l'aperçu de l'op-drag, donc # la définition d'une sélection (rectangulaire ou non) par # construction d'un path qui sera "fusionné" au main_pixbuf. # On modifie les coordonnées connues du selection_manager. if self.get_selection_pixbuf() is None: return self.op_delete(operation) self.op_drag(operation) self.op_apply() ################################################################################ drawing-0.4.11/src/tools/ui/000077500000000000000000000000001362211111700155675ustar00rootroot00000000000000drawing-0.4.11/src/tools/ui/tool_arc.ui000066400000000000000000000042141362211111700177310ustar00rootroot00000000000000
Lead shape Round win.line_shape round Square win.line_shape square
Use dashes win.use_dashes Arrow win.is_arrow
Mode Classic win.cairo_operator over Source color win.cairo_operator source Eraser win.cairo_operator clear Difference win.cairo_operator difference
drawing-0.4.11/src/tools/ui/tool_circle.ui000066400000000000000000000025671362211111700204360ustar00rootroot00000000000000
Shape Oval win.circle_shape oval Circle win.circle_shape circle
Filling Empty win.filling_style empty Filled (main color) win.filling_style filled Filled (secondary color) win.filling_style secondary
drawing-0.4.11/src/tools/ui/tool_crop.ui000066400000000000000000000106731362211111700201350ustar00rootroot00000000000000 1 8127 1 20 10 1 8127 1 20 10 False True Cancel True center win.force_selection go-previous-symbolic True True 10 True 10 horizontal Width True True adj_width Width True True 10 horizontal Height True True adj_height Height win.apply_canvas_tool Apply True center emblem-ok-symbolic True end
Cancel win.force_selection Apply win.apply_canvas_tool
drawing-0.4.11/src/tools/ui/tool_experiment.ui000066400000000000000000000211641362211111700213470ustar00rootroot00000000000000
Pinceaux Pinceau simple win.experiment_mode simple Pinceau lisse (perte de points) win.experiment_mode smooth1 Pinceau lisse (ajout de points) win.experiment_mode smooth2 Pinceau dynamique win.experiment_mode dynamic
Actions Tracé en Z win.experiment_macro_z Tracé en dents de scies win.experiment_macro_scie Hexagone (sens horaire) win.experiment_macro_hexa1 Hexagone (sens antihoraire) win.experiment_macro_hexa2
Opérateurs Cairo Opérateurs basiques
CLEAR win.experiment_operator CLEAR SOURCE win.experiment_operator SOURCE OVER win.experiment_operator OVER ATOP win.experiment_operator ATOP DEST win.experiment_operator DEST DEST_OVER win.experiment_operator DEST_OVER DEST_OUT win.experiment_operator DEST_OUT XOR win.experiment_operator XOR ADD win.experiment_operator ADD SATURATE win.experiment_operator SATURATE MULTIPLY win.experiment_operator MULTIPLY
Opérateurs avancés
SCREEN win.experiment_operator SCREEN OVERLAY win.experiment_operator OVERLAY
DARKEN win.experiment_operator DARKEN LIGHTEN win.experiment_operator LIGHTEN COLOR_DODGE win.experiment_operator COLOR_DODGE COLOR_BURN win.experiment_operator COLOR_BURN HARD_LIGHT win.experiment_operator HARD_LIGHT SOFT_LIGHT win.experiment_operator SOFT_LIGHT
DIFFERENCE win.experiment_operator DIFFERENCE EXCLUSION win.experiment_operator EXCLUSION
HSL_HUE win.experiment_operator HSL_HUE HSL_SATURATION win.experiment_operator HSL_SATURATION HSL_COLOR win.experiment_operator HSL_COLOR HSL_LUMINOSITY win.experiment_operator HSL_LUMINOSITY
Opérateurs non-liés
IN win.experiment_operator IN OUT win.experiment_operator OUT DEST_IN win.experiment_operator DEST_IN DEST_ATOP win.experiment_operator DEST_ATOP
drawing-0.4.11/src/tools/ui/tool_flip.ui000066400000000000000000000064311362211111700201210ustar00rootroot00000000000000 False True Cancel True center win.force_selection go-previous-symbolic True True 10 Flip horizontally True center object-flip-horizontal-symbolic True Flip vertically True center object-flip-vertical-symbolic True win.apply_canvas_tool Apply True center emblem-ok-symbolic True end
Cancel win.force_selection Apply win.apply_canvas_tool
drawing-0.4.11/src/tools/ui/tool_freeshape.ui000066400000000000000000000033471362211111700211340ustar00rootroot00000000000000
Filling Empty win.filling_style empty Filled (main color) win.filling_style filled Filled (secondary color) win.filling_style secondary
drawing-0.4.11/src/tools/ui/tool_line.ui000066400000000000000000000044631362211111700201210ustar00rootroot00000000000000
Lead shape Round win.line_shape round Square win.line_shape square
Use dashes win.use_dashes Arrow win.is_arrow Color gradient win.use_gradient
Mode Classic win.cairo_operator over Source color win.cairo_operator source Eraser win.cairo_operator clear Difference win.cairo_operator difference
drawing-0.4.11/src/tools/ui/tool_paint.ui000066400000000000000000000016021362211111700202750ustar00rootroot00000000000000
Behavior Encircle and fill win.paint_algo fill Erase and replace win.paint_algo replace
Clipping win.paint_algo clipping
drawing-0.4.11/src/tools/ui/tool_pencil.ui000066400000000000000000000042271362211111700204420ustar00rootroot00000000000000
Lead shape Round win.pencil_shape round Thin win.pencil_shape thin Square win.pencil_shape square
Use dashes win.use_dashes
Mode Classic win.cairo_operator over Source color win.cairo_operator source Eraser win.cairo_operator clear Difference win.cairo_operator difference
Artificial smoothness win.pencil_smooth
drawing-0.4.11/src/tools/ui/tool_polygon.ui000066400000000000000000000033471362211111700206610ustar00rootroot00000000000000
Filling Empty win.filling_style empty Filled (main color) win.filling_style filled Filled (secondary color) win.filling_style secondary
drawing-0.4.11/src/tools/ui/tool_rectangle.ui000066400000000000000000000026231362211111700211320ustar00rootroot00000000000000
Shape Rectangle win.rectangle_shape rectangle Rounded rectangle win.rectangle_shape rounded
Filling Empty win.filling_style empty Filled (main color) win.filling_style filled Filled (secondary color) win.filling_style secondary
drawing-0.4.11/src/tools/ui/tool_rotate.ui000066400000000000000000000100321362211111700204550ustar00rootroot00000000000000 -90 360 10 90 0 False True Cancel True win.force_selection go-previous-symbolic True True 10 Rotate left True center object-rotate-left-symbolic True Angle (degrees) True True adj_angle Angle (degrees) Rotate right True center object-rotate-right-symbolic True win.apply_canvas_tool Apply True center emblem-ok-symbolic True end
Cancel win.force_selection Apply win.apply_canvas_tool
drawing-0.4.11/src/tools/ui/tool_saturate.ui000066400000000000000000000056011362211111700210150ustar00rootroot00000000000000 0 10000 10 30 100 False True Cancel True win.force_selection go-previous-symbolic True True 10 Saturation True True adj_saturation Saturation win.apply_canvas_tool Apply True center emblem-ok-symbolic True end
Cancel win.force_selection Apply win.apply_canvas_tool
drawing-0.4.11/src/tools/ui/tool_scale.ui000066400000000000000000000116011362211111700202510ustar00rootroot00000000000000 1 8127 1 20 10 1 8127 1 20 10 False True Cancel True center win.force_selection go-previous-symbolic True True 10 horizontal True 10 horizontal Width True True adj_width Width True True 10 horizontal Height True True adj_height Height Keep proportions True True win.apply_canvas_tool Apply True center emblem-ok-symbolic True end
Cancel win.force_selection Apply win.apply_canvas_tool
drawing-0.4.11/src/tools/ui/tool_select.ui000066400000000000000000000324271362211111700204520ustar00rootroot00000000000000
Select all win.select_all Unselect win.unselect
horizontal-buttons Delete win.selection_delete edit-delete-symbolic Cut win.selection_cut edit-cut-symbolic Copy win.selection_copy edit-copy-symbolic
Edit Flip win.active_tool flip tool-flip-symbolic Crop win.active_tool crop tool-crop-symbolic Scale win.active_tool scale tool-scale-symbolic Rotate win.active_tool rotate tool-rotate-symbolic Saturate win.active_tool saturate tool-saturate-symbolic
Open As New Image win.new_tab_selection Export as… win.selection_export
Selection type Rectangle win.selection_type rectangle tool-rectangle-symbolic Freehand win.selection_type freehand tool-freeshape-symbolic Similar color win.selection_type color tool-magic-symbolic
False True True win.import Import True insert-image-symbolic True win.paste Paste True edit-paste-symbolic True True win.import Import True win.paste Paste True True win.selection_delete Delete True edit-delete-symbolic True win.selection_cut Cut True edit-cut-symbolic True win.selection_copy Copy True edit-copy-symbolic True Selection options True view-more-symbolic True center Preview True win.toggle_preview True 10 zoom-fit-best-symbolic False start Preview False pan-down-symbolic False end end
Selection type Rectangle win.selection_type rectangle tool-rectangle-symbolic Freehand win.selection_type freehand tool-freeshape-symbolic Similar color win.selection_type color tool-magic-symbolic
Select all win.select_all Unselect win.unselect
Open As New Image win.new_tab_selection Export as… win.selection_export
drawing-0.4.11/src/tools/ui/tool_text.ui000066400000000000000000000102531362211111700201500ustar00rootroot00000000000000 True True 2 2 vertical True True False True horizontal True Cancel window-close-symbolic True True True Insert here Insert here end
Font Sans win.text-font Sans Serif win.text-font Serif Mono win.text-font Mono
Italic win.text-italic Bold win.text-bold
Background No background win.text-background none Shadow win.text-background shadow Outline win.text-background outline Rectangle background win.text-background rectangle
drawing-0.4.11/src/ui/000077500000000000000000000000001362211111700144275ustar00rootroot00000000000000drawing-0.4.11/src/ui/app-menus.ui000066400000000000000000000365661362211111700167130ustar00rootroot00000000000000
app.new_window New Window
app.settings Preferences
Report a bug app.report_bug action-missing app.shortcuts Shortcuts app.help Help app.about About
app.quit Quit
_File New Image
win.new_tab New Blank Image document-new-symbolic New Image With Custom Size win.new_tab_custom document-new-symbolic New Image From Selection edit-select-symbolic win.new_tab_selection New Image From Clipboard win.new_tab_clipboard edit-paste-symbolic
Open an image win.open document-open-symbolic Reload file win.reload_file action-missing view-refresh-symbolic
Image properties win.properties document-properties-symbolic
Save win.save document-save-symbolic Save as… win.save_as document-save-as-symbolic Export as… win.export_as document-save-as-symbolic
Print win.print document-print-symbolic
Close win.close_tab window-close-symbolic
_Edit
Undo win.undo edit-undo-symbolic Redo win.redo edit-redo-symbolic
Select all win.select_all edit-select-all-symbolic
Cut win.selection_cut edit-cut-symbolic Copy win.selection_copy edit-copy-symbolic Delete win.selection_delete edit-delete-symbolic
Paste win.paste edit-paste-symbolic Import win.import insert-image-symbolic
Preferences app.settings preferences-system-symbolic
_View
Optimal Zoom action-missing win.zoom_opti zoom-fit-best-symbolic
Zoom Out action-missing win.zoom_out zoom-out-symbolic Original Zoom action-missing win.zoom_100 zoom-original-symbolic Zoom In action-missing win.zoom_in zoom-in-symbolic
Show the preview win.toggle_preview zoom-fit-best-symbolic
Refresh win.restore_pixbuf action-missing view-refresh-symbolic Rebuild from history win.rebuild_from_histo action-missing view-refresh-symbolic
Position
Go Left win.go_left Go Up win.go_up Go Down win.go_down Go Right win.go_right
Show tools names win.show_labels
_Colors
Main color win.main_color Secondary color win.secondary_color
Exchange colors win.exchange_color network-transmit-receive-symbolic
Color editor by default app.use_editor
_Tools
_Canvas
Previous tool win.back_to_previous
_Options _Windows
New Window app.new_window document-new-symbolic
Close win.close application-exit-symbolic Quit all windows app.quit application-exit-symbolic
_Help
Shortcuts app.shortcuts input-keyboard-symbolic
Report a bug app.report_bug action-missing
Index app.help help-faq-symbolic Basic help app.help_main help-faq-symbolic Help about tools app.help_tools help-faq-symbolic Canvas and selection app.help_canvas help-faq-symbolic Help about selection app.help_selection help-faq-symbolic
About Drawing app.about help-about-symbolic
drawing-0.4.11/src/ui/color-popover.ui000066400000000000000000000045101362211111700175740ustar00rootroot00000000000000 True 10 10 vertical True 10 horizontal True Back to the palette True 10 True go-previous-symbolic True Back to the palette start Use this editor by default True app.use_editor end True True drawing-0.4.11/src/ui/custom-image.ui000066400000000000000000000116021362211111700173600ustar00rootroot00000000000000 1 4096 1 10 10 1 4096 1 10 10 True vertical 10 10 True True 25 15 center False True end Width 0 0 1 1 True end Height 0 1 1 1 True end Background color 0 2 1 1 True adj_width 1 0 2 1 True adj_height 1 1 2 1 True True 1 2 2 1 True 0 4 3 1 center True Use these settings by default end drawing-0.4.11/src/ui/headerbar-eos.ui000066400000000000000000000151631362211111700174750ustar00rootroot00000000000000 True True True none center New Image document-new 24 True True win.open none center Open document-open 24 True False True win.import none center Import insert-image 24 True True win.paste none center Paste edit-paste 24 True True center True none win.undo Undo edit-undo 24 True True none win.redo Redo edit-redo 24 True True center none open-menu 24 True end False center none win.save Save True document-save 24 True Save True end False center none win.save Save document-save 24 True end drawing-0.4.11/src/ui/headerbar.ui000066400000000000000000000103001362211111700166750ustar00rootroot00000000000000 True True False center win.open Open False center New Image True 6 document-new-symbolic True pan-down-symbolic True True center True win.undo Undo edit-undo-symbolic True True win.redo Redo edit-redo-symbolic True True center open-menu-symbolic True end False center win.save Save end True center win.save Save document-save-symbolic True end drawing-0.4.11/src/ui/image.ui000066400000000000000000000017611362211111700160550ustar00rootroot00000000000000 drawing-0.4.11/src/ui/minimap.ui000066400000000000000000000113741362211111700164260ustar00rootroot00000000000000 20 400 20 100 100 True vertical 5 5 True 1 1 True True True 1 1 True none Go Up center win.go_up 64 True go-up-symbolic 1 0 True none Go Left center win.go_left 64 True go-previous-symbolic 0 1 True none Go Down center win.go_down 64 True go-down-symbolic 1 2 True none Go Right center win.go_right 64 True go-next-symbolic 2 1 False True 0 drawing-0.4.11/src/ui/preferences.ui000066400000000000000000000120201362211111700172620ustar00rootroot00000000000000 1 4096 1 10 10 1 4096 1 10 10 1 1024 10 100 drawing-0.4.11/src/ui/properties.ui000066400000000000000000000164451362211111700171740ustar00rootroot00000000000000 True vertical 10 10 True True 25 15 center False True Path 0 0 1 1 True Format 0 1 1 1 True Colorspace 0 2 1 1 True True Unsaved file 1 0 2 1 True Unsaved file 1 1 2 1 True Invalid format 1 2 2 1 True 0 4 3 1 True Width 0 5 1 1 True 0 1 5 1 1 True Height 0 6 1 1 True 0 1 6 1 1 True vertical True pixels True centimeters True inches 2 5 1 2 drawing-0.4.11/src/ui/selection.ui000066400000000000000000000065601362211111700167620ustar00rootroot00000000000000
Select all win.select_all
Import win.import Paste win.paste
Unselect win.unselect
Cut win.selection_cut edit-cut-symbolic Copy win.selection_copy edit-copy-symbolic Delete win.selection_delete edit-delete-symbolic
horizontal-buttons Flip win.active_tool flip tool-flip-symbolic Crop win.active_tool crop tool-crop-symbolic Scale win.active_tool scale tool-scale-symbolic Rotate win.active_tool rotate tool-rotate-symbolic Saturate win.active_tool saturate tool-saturate-symbolic
Open As New Image win.new_tab_selection Export as… win.selection_export
drawing-0.4.11/src/ui/shortcuts.ui000066400000000000000000000300101362211111700170160ustar00rootroot00000000000000 True shortcuts 8 True General True New Window <Primary>n True Show tools names F9 True Main menu F10 True Shortcuts <Primary>question True Help F1 True Quit all windows <Primary>q True Image True New Blank Image <Primary>t True New Image From Selection <Primary><Shift>t True New Image From Clipboard <Primary><Shift>o True Open a file <Primary>o True Close the active image <Primary>w True Save <Primary>s True Save as <Primary><Shift>s True Edition True Undo <Primary>z True Redo <Primary><Shift>z True Options menu <Primary>F10 True Paste <Primary>v True Import <Primary>i True Back to previous tool <Primary>b True Selection True Select all <Primary>a True Unselect <Primary>u True Cut <Primary>x True Copy <Primary>c True Delete the selection Delete True Colors True Edit the main color (left click) <Primary>l True Edit the secondary color (right click) <Primary>r True Exchange colors <Primary>e True Navigation True Toggle the preview <Primary>m True Go Left <Primary>Left True Go Up <Primary>Up True Go Down <Primary>Down True Go Right <Primary>Right drawing-0.4.11/src/ui/toolbar-symbolic.ui000066400000000000000000000153071362211111700202550ustar00rootroot00000000000000 vertical True small-toolbar win.new_tab tab-new-symbolic New Image New Image False True win.open document-open-symbolic Open an image Open False win.import insert-image-symbolic Import Import False win.paste edit-paste-symbolic Paste Paste False True win.undo edit-undo-symbolic Undo Undo False win.redo edit-redo-symbolic Redo Redo False win.properties document-properties-symbolic Image properties Image properties False True win.save document-save-symbolic Save Save False win.print document-print-symbolic Print Print False win.show_labels view-list-symbolic Show tools names Show tools names False app.settings preferences-other-symbolic Preferences Preferences False app.help help-faq-symbolic Help Help False drawing-0.4.11/src/ui/toolbar.ui000066400000000000000000000151331362211111700164330ustar00rootroot00000000000000 vertical True large-toolbar win.new_tab tab-new New Image New Image False True win.open document-open Open an image Open False win.import insert-image Import Import False win.paste edit-paste Paste Paste False True win.undo edit-undo Undo Undo False win.redo edit-redo Redo Redo False win.properties document-properties Image properties Image properties False True win.save document-save Save Save False win.print document-print Print Print False win.show_labels view-list Show tools names Show tools names False app.settings preferences-other Preferences Preferences False app.help help-faq Help Help False drawing-0.4.11/src/ui/win-menus.ui000066400000000000000000000224641362211111700167200ustar00rootroot00000000000000
win.open Open an image
New Image
New Blank Image win.new_tab New Image With Custom Size win.new_tab_custom New Image From Selection win.new_tab_selection New Image From Clipboard win.new_tab_clipboard
app.new_window New Window
horizontal-buttons Print win.print document-print-symbolic Image properties win.properties document-properties-symbolic
win.save_as Save as… Export as… win.export_as
Show tools names win.show_labels Preferences app.settings
Report a bug app.report_bug action-missing Shortcuts app.shortcuts app.help Help About Drawing app.about
horizontal-buttons Print win.print document-print-symbolic Image properties win.properties document-properties-symbolic
win.save_as Save as… Export as… win.export_as
Reload file win.reload_file action-missing Refresh win.restore_pixbuf action-missing Rebuild from history win.rebuild_from_histo action-missing Troubleshoot selection win.get_values action-missing
Show tools names win.show_labels Preferences app.settings
Report a bug app.report_bug action-missing Shortcuts app.shortcuts app.help Help About Drawing app.about
Basic help app.help_main help-faq-symbolic Help about tools app.help_tools help-faq-symbolic Canvas and selection app.help_canvas help-faq-symbolic Help about selection app.help_selection help-faq-symbolic
Shortcuts app.shortcuts input-keyboard-symbolic
Report a bug app.report_bug action-missing About Drawing app.about help-about-symbolic
drawing-0.4.11/src/ui/window.ui000066400000000000000000000300001362211111700162660ustar00rootroot00000000000000 1 200 1 10 10 drawing-0.4.11/src/utilities.py000066400000000000000000000353511362211111700164060ustar00rootroot00000000000000# utilities.py # # Copyright 2018-2020 Romain F. T. # # 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 . import cairo, math from gi.repository import Gtk, Gdk, GdkPixbuf from .message_dialog import DrawingMessageDialog ################################################################################ def utilities_save_pixbuf_to(pixbuf, fpath, window): """Save pixbuf to a given path, with the file format corresponding to the end of the file name. Format with no support for alpha channel will be modified so transparent pixels get replaced by white.""" # Build a short string which will be recognized as a file format by the # GdkPixbuf.Pixbuf.savev method file_format = fpath.split('.')[-1] if file_format in ['jpeg', 'jpg', 'jpe']: file_format = 'jpeg' elif file_format not in ['jpeg', 'jpg', 'jpe', 'png', 'tiff', 'ico', 'bmp']: file_format = 'png' # Ask the user what to do concerning formats with no alpha channel if file_format not in ['png']: replacement = window._settings.get_string('replace-alpha') if replacement == 'ask': replacement = _ask_overwrite_alpha(window) pixbuf = _replace_alpha(pixbuf, replacement) # Actually save the pixbuf to the given file path pixbuf.savev(fpath, file_format, [None], []) def _replace_alpha(pixbuf, replacement): if replacement == 'nothing': return width = pixbuf.get_width() height = pixbuf.get_height() if replacement == 'white': pcolor1 = _rgb_as_hexadecimal_int(255, 255, 255) pcolor2 = _rgb_as_hexadecimal_int(255, 255, 255) elif replacement == 'checkboard': pcolor1 = _rgb_as_hexadecimal_int(85, 85, 85) pcolor2 = _rgb_as_hexadecimal_int(170, 170, 170) else: # if replacement == 'black': pcolor1 = _rgb_as_hexadecimal_int(0, 0, 0) pcolor2 = _rgb_as_hexadecimal_int(0, 0, 0) return pixbuf.composite_color_simple(width, height, GdkPixbuf.InterpType.TILES, 255, 8, pcolor1, pcolor2) def _rgb_as_hexadecimal_int(r, g, b): """The method GdkPixbuf.Pixbuf.composite_color_simple wants an hexadecimal integer whose format is 0xaarrggbb so here are ugly binary operators.""" return (r << 16) + (g << 8) + b def _ask_overwrite_alpha(window): """This method is not used for now. The point is to warn the user about the replacement of the alpha channel for JPG or BMP files, but it might annoy users very quickly to see a dialog.""" dialog = DrawingMessageDialog(window) cancel_id = dialog.set_action(_("Cancel"), None, False) continue_id = dialog.set_action(_("Save"), None, True) dialog.add_string(_("This file format doesn't support transparent colors.")) dialog.add_string(_("Replace transparency with:") ) alpha_combobox = Gtk.ComboBoxText(halign=Gtk.Align.CENTER) dialog.add_widget(alpha_combobox) alpha_combobox.append('white', _("White")) alpha_combobox.append('black', _("Black")) alpha_combobox.append('checkboard', _("Checkboard")) alpha_combobox.append('nothing', _("Nothing")) alpha_combobox.set_active_id('white') result = dialog.run() repl = alpha_combobox.get_active_id() dialog.destroy() if result != continue_id: raise Exception("User refused to save as %s" % file_format) return repl ################################################################################ def utilities_add_filechooser_filters(dialog): """Add file filters for images to file chooser dialogs.""" allPictures = Gtk.FileFilter() allPictures.set_name(_("All pictures")) allPictures.add_mime_type('image/png') allPictures.add_mime_type('image/jpeg') allPictures.add_mime_type('image/bmp') pngPictures = Gtk.FileFilter() pngPictures.set_name(_("PNG images")) pngPictures.add_mime_type('image/png') jpegPictures = Gtk.FileFilter() jpegPictures.set_name(_("JPEG images")) jpegPictures.add_mime_type('image/jpeg') bmpPictures = Gtk.FileFilter() bmpPictures.set_name(_("BMP images")) bmpPictures.add_mime_type('image/bmp') dialog.add_filter(allPictures) dialog.add_filter(pngPictures) dialog.add_filter(jpegPictures) dialog.add_filter(bmpPictures) ################################################################################ def utilities_get_rgb_for_xy(surface, x, y): # Guard clause: we can't perform color picking outside of the surface if x < 0 or x > surface.get_width() or y < 0 or y > surface.get_height(): return None screenshot = Gdk.pixbuf_get_from_surface(surface, float(x), float(y), 1, 1) rgb_vals = screenshot.get_pixels() return rgb_vals # array de 3 valeurs, de 0 à 255 def utilities_get_rgba_name(red, green, blue, alpha): """To improve accessibility, it is useful to display the name of the colors. Sadly, it's a mess to implement, and it's quite approximative.""" color_string = "" alpha_string = "" if alpha == 0.0: return _("Transparent") elif alpha < 1.0: alpha_string = ' - ' + _("%s%% transparent") % int(100 - alpha * 100) total = red + green + blue orange_coef = 0.0 lumin = total/3.0 # print(lumin) if green != 0: orange_coef = (red/green) * lumin if total != 0: rgb_percents = [red/total, green/total, blue/total] else: rgb_percents = [0.333, 0.333, 0.333] # print(rgb_percents) grey_coef_r = rgb_percents[0] * lumin / 3 grey_coef_g = rgb_percents[1] * lumin / 3 grey_coef_b = rgb_percents[2] * lumin / 3 is_grey = abs(grey_coef_r - grey_coef_g) < 0.01 is_grey = is_grey and abs(grey_coef_g - grey_coef_b) < 0.01 is_grey = is_grey and abs(grey_coef_b - grey_coef_r) < 0.01 if is_grey: if lumin > 0.9: color_string = _("White") elif lumin < 0.1: color_string = _("Black") else: color_string = _("Grey") # print('gris correct') elif rgb_percents[0] > 0.5 and rgb_percents[1] > 0.2 and rgb_percents[1] < 0.4: if orange_coef > 0.87: color_string = _("Orange") else: color_string = _("Brown") elif rgb_percents[0] > 0.4 and rgb_percents[1] < 0.3 and rgb_percents[2] < 0.3: if lumin < 0.7 and rgb_percents[0] < 0.7: color_string = _("Probably brown") else: color_string = _("Red") elif rgb_percents[1] > 0.4 and rgb_percents[0] < 0.4 and rgb_percents[2] < 0.4: color_string = _("Green") elif rgb_percents[2] > 0.4 and rgb_percents[0] < 0.3 and rgb_percents[1] < 0.4: color_string = _("Blue") elif rgb_percents[0] > 0.3 and rgb_percents[1] > 0.3 and rgb_percents[2] < 0.3: if rgb_percents[1] < 0.4: color_string = _("Probably brown") else: color_string = _("Yellow") elif rgb_percents[0] > 0.3 and rgb_percents[2] > 0.3 and rgb_percents[1] < 0.3: if lumin > 0.6 and rgb_percents[1] < 0.1: color_string = _("Magenta") else: color_string = _("Purple") elif rgb_percents[1] > 0.3 and rgb_percents[2] > 0.3 and rgb_percents[0] < 0.2: if lumin > 0.7: color_string = _("Cyan") else: color_string = _("Probably turquoise") else: color_string = _("Unknown color name") # print(color_string) return (color_string + alpha_string) ################################################################################ def utilities_show_overlay_on_context(cairo_context, cairo_path, has_dashes): """Draw a blueish area on `cairo_context`, with or without dashes. This is mainly used for the selection.""" if cairo_path is None: return cairo_context.new_path() cairo_context.set_line_width(1) if has_dashes: cairo_context.set_dash([3, 3]) cairo_context.append_path(cairo_path) cairo_context.set_source_rgba(0.1, 0.1, 0.3, 0.2) cairo_context.fill_preserve() cairo_context.set_source_rgba(0.5, 0.5, 0.5, 0.5) cairo_context.stroke() def utilities_get_magic_path(surface, x, y, window, coef): """This method tries to build a path defining an area of the same color. It will mainly be used to paint this area, or to select it.""" cairo_context = cairo.Context(surface) old_color = utilities_get_rgb_for_xy(surface, x, y) # Cairo doesn't provide methods for what we want to do. I will have to # define myself how to decide what should be filled. # The heuristic here is that we create a hull containing the area of # color we want to paint. We don't care about "enclaves" of other colors. while (utilities_get_rgb_for_xy(surface, x, y) == old_color) and y > 0: y = y - 1 y = y + 1 # sinon ça crashe ? cairo_context.move_to(x, y) (first_x, first_y) = (x, y) # 0 1 2 # 7 3 # 6 5 4 direction = 5 should_stop = False i = 0 x_shift = [-1 * coef, 0, coef, coef, coef, 0, -1 * coef, -1 * coef] y_shift = [-1 * coef, -1 * coef, -1 * coef, 0, coef, coef, coef, 0] while (not should_stop and i < 50000): new_x = -10 new_y = -10 end_circle = False j = 0 while (not end_circle) or (j < 8): future_x = x+x_shift[direction] future_y = y+y_shift[direction] if (utilities_get_rgb_for_xy(surface, future_x, future_y) == old_color) \ and (future_x > 0) and (future_y > 0) \ and (future_x < surface.get_width()) \ and (future_y < surface.get_height()-2): # ??? new_x = future_x new_y = future_y direction = (direction+1) % 8 elif (x != new_x or y != new_y): x = new_x+x_shift[direction] y = new_y+y_shift[direction] end_circle = True j = j+1 direction = (direction+4) % 8 if (new_x != -10): cairo_context.line_to(x, y) if (i > 10) and (first_x-5 < x < first_x+5) and (first_y-5 < y < first_y+5): should_stop = True i = i + 1 if i == 2000: dialog, continue_id = launch_infinite_loop_dialog(window) result = dialog.run() if result == continue_id: # Continue dialog.destroy() else: # Cancel dialog.destroy() return cairo_context.close_path() return cairo_context.copy_path() def launch_infinite_loop_dialog(window): dialog = DrawingMessageDialog(window) cancel_id = dialog.set_action(_("Cancel"), None, False) continue_id = dialog.set_action(_("Continue"), None, True) dialog.add_string( _("""The area seems poorly delimited, or is very complex. This algorithm may not be able to manage the wanted area. Do you want to abort the operation, or to let the tool struggle ?""") ) return dialog, continue_id ################################################################################ def utilities_add_arrow_triangle(cairo_context, x2, y2, x1, y1, line_width): cairo_context.new_path() cairo_context.set_line_width(line_width) cairo_context.set_dash([1, 0]) cairo_context.move_to(x2, y2) x_length = max(x1, x2) - min(x1, x2) y_length = max(y1, y2) - min(y1, y2) line_length = math.sqrt( (x_length)**2 + (y_length)**2 ) arrow_width = math.log(line_length) if (x1 - x2) != 0: delta = (y1 - y2) / (x1 - x2) else: delta = 1.0 x_backpoint = (x1 + x2)/2 y_backpoint = (y1 + y2)/2 i = 0 while i < arrow_width: i = i + 2 x_backpoint = (x_backpoint + x2)/2 y_backpoint = (y_backpoint + y2)/2 if delta < -1.5 or delta > 1.0: cairo_context.line_to(x_backpoint-arrow_width, y_backpoint) cairo_context.line_to(x_backpoint+arrow_width, y_backpoint) elif delta > -0.5 and delta <= 1.0: cairo_context.line_to(x_backpoint, y_backpoint-arrow_width) cairo_context.line_to(x_backpoint, y_backpoint+arrow_width) else: cairo_context.line_to(x_backpoint-arrow_width, y_backpoint-arrow_width) cairo_context.line_to(x_backpoint+arrow_width, y_backpoint+arrow_width) cairo_context.close_path() cairo_context.fill_preserve() cairo_context.stroke() def utilities_generic_shape_tool_operation(cairo_context, operation): cairo_context.set_operator(operation['operator']) cairo_context.set_line_width(operation['line_width']) cairo_context.set_line_join(operation['line_join']) rgba_main = operation['rgba_main'] rgba_secd = operation['rgba_secd'] cairo_context.append_path(operation['path']) filling = operation['filling'] if filling == 'secondary': cairo_context.set_source_rgba(rgba_secd.red, rgba_secd.green, rgba_secd.blue, rgba_secd.alpha) cairo_context.fill_preserve() cairo_context.set_source_rgba(rgba_main.red, rgba_main.green, rgba_main.blue, rgba_main.alpha) cairo_context.stroke() elif filling == 'filled': cairo_context.set_source_rgba(rgba_main.red, rgba_main.green, rgba_main.blue, rgba_main.alpha) cairo_context.fill() else: cairo_context.set_source_rgba(rgba_main.red, rgba_main.green, rgba_main.blue, rgba_main.alpha) cairo_context.stroke() ################################################################################ def utilities_add_unit_to_spinbtn(spinbutton, width_chars, unit): spinbutton.set_width_chars(width_chars + 3) if unit == 'px': _add_spinbutton_icon(spinbutton, 'unit-pixels-symbolic', _("pixels")) elif unit == '%': _add_spinbutton_icon(spinbutton, 'unit-percents-symbolic', _("percents")) def _add_spinbutton_icon(spinbutton, icon, tooltip): p = Gtk.EntryIconPosition.SECONDARY spinbutton.set_icon_from_icon_name(p, icon) spinbutton.set_icon_tooltip_text(p, tooltip) spinbutton.set_icon_sensitive(p, False) ################################################################################ def utilities_smooth_path(cairo_context, cairo_path): """Extrapolate a path made of straight lines into a path made of curves. New points are added according to the length of the line it replaces, the length of the previous one, and the length of the next one.""" x1 = None y1 = None x2 = None y2 = None x3 = None y3 = None x4 = None y4 = None for pts in cairo_path: if pts[1] is (): continue x1, y1, x2, y2, x3, y3, x4, y4 = _next_arc(cairo_context, \ x2, y2, x3, y3, x4, y4, pts[1][0], pts[1][1]) _next_arc(cairo_context, x2, y2, x3, y3, x4, y4, None, None) # cairo_context.stroke() def _next_point(x1, y1, x2, y2, dist): coef = 0.1 dx = x2 - x1 dy = y2 - y1 angle = math.atan2(dy, dx) nx = x2 + math.cos(angle) * dist * coef ny = y2 + math.sin(angle) * dist * coef return nx, ny def _next_arc(cairo_context, x1, y1, x2, y2, x3, y3, x4, y4): if x2 is None or x3 is None: # No drawing possible yet, just continue to the next point return x1, y1, x2, y2, x3, y3, x4, y4 dist = math.sqrt( (x2 - x3) * (x2 - x3) + (y2 - y3) * (y2 - y3) ) if x1 is None and x4 is None: cairo_context.move_to(x2, y2) cairo_context.line_to(x3, y3) return x1, y1, x2, y2, x3, y3, x4, y4 elif x1 is None: nx1, ny1 = x2, y2 nx2, ny2 = _next_point(x4, y4, x3, y3, dist) elif x4 is None: nx1, ny1 = _next_point(x1, y1, x2, y2, dist) nx2, ny2 = x3, y3 else: nx1, ny1 = _next_point(x1, y1, x2, y2, dist) nx2, ny2 = _next_point(x4, y4, x3, y3, dist) cairo_context.curve_to(nx1, ny1, nx2, ny2, x3, y3) return x1, y1, x2, y2, x3, y3, x4, y4 ################################################################################ drawing-0.4.11/src/window.py000066400000000000000000001307731362211111700157060ustar00rootroot00000000000000# window.py # # Copyright 2018-2020 Romain F. T. # # 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 . # Import libs import os from gi.repository import Gtk, Gdk, Gio, GdkPixbuf, GLib from .gi_composites import GtkTemplate # Import tools from .tool_arc import ToolArc from .tool_circle import ToolCircle from .tool_crop import ToolCrop from .tool_experiment import ToolExperiment from .tool_flip import ToolFlip from .tool_freeshape import ToolFreeshape from .tool_line import ToolLine from .tool_paint import ToolPaint from .tool_pencil import ToolPencil from .tool_picker import ToolPicker from .tool_polygon import ToolPolygon from .tool_rectangle import ToolRectangle from .tool_rotate import ToolRotate from .tool_saturate import ToolSaturate from .tool_scale import ToolScale from .tool_select import ToolSelect from .tool_text import ToolText from .image import DrawingImage from .properties import DrawingPropertiesDialog from .custom_image import DrawingCustomImageDialog from .minimap import DrawingMinimap from .options_manager import DrawingOptionsManager from .color_popover import DrawingColorPopover from .message_dialog import DrawingMessageDialog from .headerbar import DrawingAdaptativeHeaderBar from .utilities import utilities_save_pixbuf_to from .utilities import utilities_add_unit_to_spinbtn from .utilities import utilities_add_filechooser_filters UI_PATH = '/com/github/maoschanz/drawing/ui/' @GtkTemplate(ui=UI_PATH+'window.ui') class DrawingWindow(Gtk.ApplicationWindow): __gtype_name__ = 'DrawingWindow' _settings = Gio.Settings.new('com.github.maoschanz.drawing') # Window empty widgets tools_flowbox = GtkTemplate.Child() toolbar_box = GtkTemplate.Child() info_bar = GtkTemplate.Child() info_label = GtkTemplate.Child() notebook = GtkTemplate.Child() bottom_panel_box = GtkTemplate.Child() tools_scrollable_box = GtkTemplate.Child() tools_nonscrollable_box = GtkTemplate.Child() # Default bottom panel bottom_panel = GtkTemplate.Child() color_box = GtkTemplate.Child() color_menu_btn_l = GtkTemplate.Child() color_menu_btn_r = GtkTemplate.Child() l_btn_image = GtkTemplate.Child() r_btn_image = GtkTemplate.Child() thickness_spinbtn = GtkTemplate.Child() options_btn = GtkTemplate.Child() options_label = GtkTemplate.Child() options_long_box = GtkTemplate.Child() options_short_box = GtkTemplate.Child() minimap_btn = GtkTemplate.Child() minimap_icon = GtkTemplate.Child() minimap_label = GtkTemplate.Child() minimap_arrow = GtkTemplate.Child() def __init__(self, **kwargs): super().__init__(**kwargs) self.init_template() self.app = kwargs['application'] self.header_bar = None self.pointer_to_current_page = None # XXX this ridiculous hack allow to # manage several tabs in a single window despite the # notebook widget being pure shit self.active_tool_id = None if self._settings.get_boolean('maximized'): self.maximize() # self.resize(360, 648) self.set_ui_bars() def init_window_content(self, gfile, get_cb): """Initialize the window's content, such as the minimap, the color popovers, the tools, their options, and a new image. Depending on the parameters, the new image can be imported from the clipboard, loaded from a GioFile, or (else) it can be a blank image.""" self.tools = None self.minimap = DrawingMinimap(self, self.minimap_btn) self.options_manager = DrawingOptionsManager(self) self.thickness_spinbtn.set_value(self._settings.get_int('last-size')) utilities_add_unit_to_spinbtn(self.thickness_spinbtn, 3, 'px') self.build_color_buttons() self.add_all_win_actions() if get_cb: self.build_image_from_clipboard() elif gfile is not None: self.build_new_tab(gfile=gfile) else: self.build_new_image() self.init_tools() self.connect_signals() self.set_picture_title() self.prompt_message(False, 'window successfully started') def init_tools(self): """Initialize all tools, building the UI for them including the menubar, and enable the default tool.""" disabled_tools_ids = self._settings.get_strv('disabled-tools') dev = self._settings.get_boolean('devel-only') self.tools = {} self.load_tool('pencil', ToolPencil, disabled_tools_ids, dev) self.load_tool('select', ToolSelect, disabled_tools_ids, dev) self.load_tool('text', ToolText, disabled_tools_ids, dev) self.load_tool('picker', ToolPicker, disabled_tools_ids, dev) self.load_tool('paint', ToolPaint, disabled_tools_ids, dev) self.load_tool('line', ToolLine, disabled_tools_ids, dev) self.load_tool('arc', ToolArc, disabled_tools_ids, dev) self.load_tool('rectangle', ToolRectangle, disabled_tools_ids, dev) self.load_tool('circle', ToolCircle, disabled_tools_ids, dev) self.load_tool('polygon', ToolPolygon, disabled_tools_ids, dev) self.load_tool('freeshape', ToolFreeshape, disabled_tools_ids, dev) if dev: self.load_tool('experiment', ToolExperiment, disabled_tools_ids, dev) self.load_tool('crop', ToolCrop, disabled_tools_ids, dev) self.load_tool('scale', ToolScale, disabled_tools_ids, dev) self.load_tool('rotate', ToolRotate, disabled_tools_ids, dev) self.load_tool('flip', ToolFlip, disabled_tools_ids, dev) self.load_tool('saturate', ToolSaturate, disabled_tools_ids, dev) # Side panel buttons for tools, and their menu-items if they don't exist self.build_tool_rows() if not self.app.has_tools_in_menubar: self.build_menubar_tools_menu() # Initialisation of options and menus tool_id = self._settings.get_string('last-active-tool') if tool_id not in self.tools: tool_id = 'pencil' self.active_tool_id = tool_id self.former_tool_id = tool_id if tool_id == 'pencil': # The "pencil" button is already active self.enable_tool(tool_id) else: self.active_tool().row.set_active(True) def load_tool(self, tool_id, tool_class, disabled_tools_ids, dev): """Given its id and its python class, this method tries to load a tool, and show an error message if the tool initialization failed.""" if dev: # Simplest way to get an error stack self.tools[tool_id] = tool_class(self) elif tool_id not in disabled_tools_ids: try: self.tools[tool_id] = tool_class(self) except: self.prompt_message(True, _("Failed to load tool: %s") % tool_id) def build_tool_rows(self): """Adds each tool's button to the side panel.""" group = None for tool_id in self.tools: row = self.tools[tool_id].row if group is None: group = row else: row.join_group(group) self.tools_flowbox.add(row) row.get_parent().set_can_focus(False) self.on_show_labels_setting_changed() def build_menubar_tools_menu(self): drawing_tools_section = self.app.get_menubar().get_item_link(4, \ Gio.MENU_LINK_SUBMENU).get_item_link(0, Gio.MENU_LINK_SECTION) canvas_tools_section = self.app.get_menubar().get_item_link(4, \ Gio.MENU_LINK_SUBMENU).get_item_link(1, Gio.MENU_LINK_SECTION).get_item_link(0, \ Gio.MENU_LINK_SUBMENU).get_item_link(0, Gio.MENU_LINK_SECTION) for tool_id in self.tools: if self.tools[tool_id].menu_id > 0: self.tools[tool_id].add_item_to_menu(canvas_tools_section) else: self.tools[tool_id].add_item_to_menu(drawing_tools_section) self.app.has_tools_in_menubar = True ############################################################################ # TABS AND WINDOWS MANAGEMENT ############################################## def build_new_image(self, *args): """Open a new tab with a drawable blank image using the default values defined by user's settings.""" width = self._settings.get_int('default-width') height = self._settings.get_int('default-height') rgba = self._settings.get_strv('background-rgba') self.build_new_tab(width=width, height=height, background_rgba=rgba) if self.active_tool_id is not None: # Tools might not be initialized yet self.set_picture_title() def build_new_custom(self, *args): """Open a new tab with a drawable blank image using the custom values defined by user's input.""" dialog = DrawingCustomImageDialog(self) result = dialog.run() if result == Gtk.ResponseType.OK: width, height, rgba = dialog.get_values() self.build_new_tab(width=width, height=height, background_rgba=rgba) self.set_picture_title() dialog.destroy() def build_image_from_clipboard(self, *args): """Open a new tab with the image in the clipboard. If the clipboard is empty, the new image will be blank.""" cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) pixbuf = cb.wait_for_image() self.build_new_tab(pixbuf=pixbuf) def build_image_from_selection(self, *args): """Open a new tab with the image in the selection.""" pixbuf = self.get_active_image().selection.get_pixbuf() self.build_new_tab(pixbuf=pixbuf) def build_new_tab(self, gfile=None, pixbuf=None, \ width=200, height=200, background_rgba=[1.0, 0.0, 0.0, 1.0]): """Open a new tab with an optional file to open in it.""" new_image = DrawingImage(self) self.notebook.append_page(new_image, new_image.build_tab_widget()) self.notebook.child_set_property(new_image, 'reorderable', True) if gfile is not None: new_image.try_load_file(gfile) elif pixbuf is not None: new_image.try_load_pixbuf(pixbuf) else: new_image.init_background(width, height, background_rgba) self.update_tabs_visibility() self.notebook.set_current_page(self.notebook.get_n_pages()-1) def on_active_tab_changed(self, *args): self.switch_to(self.active_tool_id, args[1]) # On devrait être moins bourrin et conserver la sélection #FIXME self.set_picture_title(args[1].update_title()) def update_tabs_menu_section(self, *args): action = self.lookup_action('active_tab') section = self.app.get_menubar().get_item_link(2, \ Gio.MENU_LINK_SUBMENU).get_item_link(6, Gio.MENU_LINK_SECTION) section.remove_all() for page in self.notebook.get_children(): tab_title = page.update_title() tab_index = self.notebook.page_num(page) section.append(tab_title, 'win.active_tab(' + str(tab_index) + ')') def close_tab(self, tab): """Close a tab (after asking to save if needed).""" index = self.notebook.page_num(tab) if not self.notebook.get_nth_page(index)._is_saved: self.notebook.set_current_page(index) is_saved = self.confirm_save_modifs() if not is_saved: return False self.notebook.remove_page(index) self.update_tabs_visibility() return True def action_close_tab(self, *args): if self.notebook.get_n_pages() > 1: self.get_active_image().try_close_tab() else: self.close() def action_close_window(self, *args): self.close() def on_close(self, *args): """Event callback when trying to close a window. It saves/closes each tab and saves the current window settings in order to restore them.""" while self.notebook.get_n_pages() != 0: if not self.get_active_image().try_close_tab(): return True self._settings.set_int('last-size', int(self.thickness_spinbtn.get_value())) self._settings.set_string('last-active-tool', self.active_tool_id) rgba = self.color_popover_l.color_widget.get_rgba() rgba = [str(rgba.red), str(rgba.green), str(rgba.blue), str(rgba.alpha)] self._settings.set_strv('last-left-rgba', rgba) rgba = self.color_popover_r.color_widget.get_rgba() rgba = [str(rgba.red), str(rgba.green), str(rgba.blue), str(rgba.alpha)] self._settings.set_strv('last-right-rgba', rgba) self._settings.set_boolean('maximized', self.is_maximized()) return False ############################################################################ # GENERAL PURPOSE METHODS ################################################## def connect_signals(self): self.info_bar.connect('close', self.hide_message) self.info_bar.connect('response', self.hide_message) self.connect('delete-event', self.on_close) self.connect('configure-event', self.adapt_to_window_size) self.options_btn.connect('toggled', self.update_option_label) self._settings.connect('changed::show-labels', self.on_show_labels_setting_changed) self._settings.connect('changed::decorations', self.on_layout_changed) self._settings.connect('changed::big-icons', self.on_icon_size_changed) self.notebook.connect('switch-page', self.on_active_tab_changed) self.notebook.drag_dest_set(Gtk.DestDefaults.ALL, [], Gdk.DragAction.MOVE) self.notebook.connect('drag-data-received', self.on_data_dropped) self.notebook.drag_dest_add_uri_targets() # because drag_dest_add_image_targets doesn't work for files def add_action_simple(self, action_name, callback, shortcuts): """Convenient wrapper method adding a stateless action to the window. It will be named 'action_name' (string) and activating the action will trigger the method 'callback'.""" action = Gio.SimpleAction.new(action_name, None) action.connect('activate', callback) self.add_action(action) if shortcuts is not None: self.app.set_accels_for_action('win.' + action_name, shortcuts) def add_action_boolean(self, action_name, default, callback): """Convenient wrapper method adding a stateful action to the window. It will be named 'action_name' (string), be created with the state 'default' (boolean), and activating the action will trigger the method 'callback'.""" action = Gio.SimpleAction().new_stateful(action_name, None, \ GLib.Variant.new_boolean(default)) action.connect('change-state', callback) self.add_action(action) def add_action_enum(self, action_name, default, callback): """Convenient wrapper method adding a stateful action to the window. It will be named 'action_name' (string), be created with the state 'default' (string), and changing the active target of the action will trigger the method 'callback'.""" action = Gio.SimpleAction().new_stateful(action_name, \ GLib.VariantType.new('s'), GLib.Variant.new_string(default)) action.connect('change-state', callback) self.add_action(action) def add_all_win_actions(self): """This doesn't add all window-wide GioActions, but only the GioActions which are here "by default", independently of any tool.""" self.add_action_simple('main_menu', self.action_main_menu, ['F10']) self.add_action_simple('options_menu', self.action_options_menu, ['F10']) self.add_action_simple('properties', self.action_properties, None) self.add_action_boolean('toggle_preview', False, self.action_toggle_preview) self.app.set_accels_for_action('win.toggle_preview', ['m']) self.add_action_boolean('show_labels', self._settings.get_boolean( \ 'show-labels'), self.on_show_labels_action_changed) self.app.set_accels_for_action('win.show_labels', ['F9']) self.add_action_simple('go_up', self.action_go_up, ['Up']) self.add_action_simple('go_down', self.action_go_down, ['Down']) self.add_action_simple('go_left', self.action_go_left, ['Left']) self.add_action_simple('go_right', self.action_go_right, ['Right']) self.add_action_simple('new_tab', self.build_new_image, ['t']) self.add_action_simple('new_tab_custom', self.build_new_custom, None) self.add_action_simple('new_tab_selection', \ self.build_image_from_selection, ['t']) self.add_action_simple('new_tab_clipboard', \ self.build_image_from_clipboard, ['o']) self.add_action_simple('open', self.action_open, ['o']) self.add_action_simple('close_tab', self.action_close_tab, ['w']) self.add_action_simple('close', self.action_close_window, None) self.add_action_simple('save', self.action_save, ['s']) self.add_action_simple('save_as', self.action_save_as, ['s']) self.add_action_simple('undo', self.action_undo, ['z']) self.add_action_simple('redo', self.action_redo, ['z']) self.add_action_simple('export_as', self.action_export_as, None) self.add_action_simple('print', self.action_print, ['p']) self.add_action_simple('import', self.action_import, ['i']) self.add_action_simple('paste', self.action_paste, ['v']) self.add_action_simple('select_all', self.action_select_all, ['a']) self.add_action_simple('unselect', self.action_unselect, ['u']) self.add_action_simple('selection_cut', self.action_cut, ['x']) self.add_action_simple('selection_copy', self.action_copy, ['c']) self.add_action_simple('selection_delete', self.action_delete, ['Delete']) self.add_action_simple('selection_export', self.action_selection_export, None) self.add_action_simple('back_to_previous', self.back_to_previous, ['b']) self.add_action_simple('force_selection', self.force_selection, None) self.add_action_simple('apply_canvas_tool', self.action_apply_canvas_tool, None) self.add_action_enum('active_tool', 'pencil', self.on_change_active_tool) self.add_action_simple('main_color', self.action_color1, ['l']) self.add_action_simple('secondary_color', self.action_color2, ['r']) self.add_action_simple('exchange_color', self.exchange_colors, ['e']) editor = self._settings.get_boolean('direct-color-edit') self.app.add_action_boolean('use_editor', editor, self.action_use_editor) if self._settings.get_boolean('devel-only'): self.add_action_simple('reload_file', self.action_reload, None) self.add_action_simple('restore_pixbuf', self.action_restore, None) self.add_action_simple('rebuild_from_histo', self.action_rebuild, None) self.add_action_simple('get_values', self.action_getvalues, None) action = Gio.PropertyAction.new('active_tab', self.notebook, 'page') self.add_action(action) def set_cursor(self, is_custom): """Called by the tools at various occasions, this method updates the mouse cursor according to `is_custom` (if False, use the default cursor) and the active tool `cursor_name` attribute.""" if is_custom: name = self.active_tool().cursor_name else: name = 'default' cursor = Gdk.Cursor.new_from_name(Gdk.Display.get_default(), name) self.get_window().set_cursor(cursor) ############################################################################ # WINDOW DECORATIONS AND LAYOUTS ########################################### def on_layout_changed(self, *args): if self.header_bar is not None: is_narrow = self.header_bar.is_narrow self.header_bar = None else: is_narrow = False toolbar = self.toolbar_box.get_children() if len(toolbar) > 0: toolbar[0].destroy() self.header_bar = None # self.prompt_message(False, _("Modifications will take effect in the next new window.")) self.set_ui_bars() if self.header_bar is not None: self.header_bar.set_compact(is_narrow) else: self.set_titlebar(None) self.set_picture_title() def set_picture_title(self, *args): """Set the window's title and subtitle (regardless of the preferred UI bars), and the active tab title. Tools have to be initialized before calling this method, because they provide the subtitle.""" if len(args) == 1: main_title = args[0] else: main_title = self.get_active_image().update_title() subtitle = self.active_tool().get_edition_status() self.update_tabs_menu_section() # Uselessly idiot i guess self.app.update_windows_menu_section() self.set_title(_("Drawing") + ' - ' + main_title + ' - ' + subtitle) if self.header_bar is not None: self.header_bar.header_bar.set_title(main_title) self.header_bar.header_bar.set_subtitle(subtitle) def get_auto_decorations(self): """Return the decorations setting based on the XDG_CURRENT_DESKTOP environment variable.""" desktop_env = os.getenv('XDG_CURRENT_DESKTOP', 'GNOME') if 'GNOME' in desktop_env: return 'csd' elif 'Pantheon' in desktop_env: return 'csd-eos' elif 'Unity' in desktop_env: return 'ssd-toolbar' elif 'KDE' in desktop_env: return 'ssd-toolbar-symbolic' elif 'Cinnamon' in desktop_env: return 'ssd-symbolic' elif 'MATE' in desktop_env or 'XFCE' in desktop_env: return 'ssd' else: return 'csd' # Use the GNOME layout if the desktop is unknown, # because i don't know how the env variable is on mobile. # Since hipsterwm users love "ricing", they'll be happy to edit # preferences themselves if they hate CSD. def set_ui_bars(self): """Set the UI "bars" (headerbar, menubar, title, toolbar, whatever) according to the user's preference, which by default is 'auto'.""" self.has_good_limits = False self.limit_size_bottom = 600 # Loading a whole file in a GtkBuilder just for this looked ridiculous, # so it's built from a string. builder = Gtk.Builder.new_from_string('''
none ''' + _("No options") + '''
''', -1) self.placeholder_model = builder.get_object('tool-placeholder') # Remember the setting, so no need to restart this at each dialog. self.decorations = self._settings.get_string('decorations') if self.decorations == 'auto': self.decorations = self.get_auto_decorations() if self.decorations == 'csd': self.build_headerbar(False) self.set_titlebar(self.header_bar.header_bar) self.set_show_menubar(False) elif self.decorations == 'csd-eos': self.build_headerbar(True) self.set_titlebar(self.header_bar.header_bar) self.set_show_menubar(False) elif self.decorations == 'everything': # devel-only self.build_headerbar(False) self.set_titlebar(self.header_bar.header_bar) self.set_show_menubar(True) self.build_toolbar(True) elif self.decorations == 'ssd-menubar': self.set_show_menubar(True) elif self.decorations == 'ssd-toolbar': self.build_toolbar(False) self.set_show_menubar(False) elif self.decorations == 'ssd-toolbar-symbolic': self.build_toolbar(True) self.set_show_menubar(False) elif self.decorations == 'ssd-symbolic': self.build_toolbar(True) self.set_show_menubar(True) else: # self.decorations == 'ssd' self.build_toolbar(False) self.set_show_menubar(True) if self.app.is_beta(): self.get_style_context().add_class('devel') def build_toolbar(self, symbolic): if symbolic: builder = Gtk.Builder.new_from_resource(UI_PATH + 'toolbar-symbolic.ui') else: builder = Gtk.Builder.new_from_resource(UI_PATH + 'toolbar.ui') toolbar = builder.get_object('toolbar') # The toolbar has menus which need to be set manually builder.add_from_resource(UI_PATH + 'win-menus.ui') new_btn = builder.get_object('new_menu_btn') new_menu = Gtk.Menu.new_from_model(builder.get_object('new-image-menu')) new_btn.set_menu(new_menu) save_btn = builder.get_object('save_menu_btn') save_menu = Gtk.Menu.new_from_model(builder.get_object('save-section')) save_btn.set_menu(save_menu) help_btn = builder.get_object('help_menu_btn') help_menu = Gtk.Menu.new_from_model(builder.get_object('help-section')) help_btn.set_menu(help_menu) self.toolbar_box.add(toolbar) self.toolbar_box.show_all() def build_headerbar(self, is_eos): """Build the window's headerbar. If "is_eos" is true, the headerbar will follow elementaryOS guidelines, else it will follow GNOME guidelines.""" self.header_bar = DrawingAdaptativeHeaderBar(is_eos) def action_main_menu(self, *args): if self.header_bar is not None: self.header_bar.toggle_menu() def action_options_menu(self, *args): """This displays/hides the tool's options menu, and is implemented as an action to ease the accelerator (shift+f10). This action could be disable when the current panel doesn't contain the corresponding button, but will not be.""" if not self.active_tool().implements_panel: self.options_btn.set_active(not self.options_btn.get_active()) def set_bottom_width_limit(self): # XXX devrait se transmettre aux panneaux custom if self.has_good_limits: # heureusement ils marchent assez bien tous seuls return self.bottom_panel.show_all() # XXX vraiment ? self.limit_size_bottom = self.color_box.get_preferred_width()[0] + \ self.thickness_spinbtn.get_preferred_width()[0] + \ self.options_long_box.get_preferred_width()[0] + \ self.minimap_label.get_preferred_width()[0] self.bottom_panel.set_visible(not self.active_tool().implements_panel) def init_adaptability(self): """Initialize limit_size_header and limit_size_bottom, which are 700 by default, but are likely to actually be less wide.""" self.set_bottom_width_limit() if self.header_bar is not None: self.header_bar.init_adaptability() self.has_good_limits = True def adapt_to_window_size(self, *args): """Adapts the headerbar (if any) and the default bottom panel to the new window size. If the current bottom panel isn't the default one, this will call the tool method applying the new size to the tool panel.""" if not self.has_good_limits and self.get_allocated_width() > 700: self.init_adaptability() if self.header_bar is not None: self.header_bar.adapt_to_window_size() available_width = self.bottom_panel_box.get_allocated_width() for tool_id in self.tools: self.tools[tool_id].adapt_to_window_size(available_width) should_shrink = self.limit_size_bottom > 0.7 * available_width self.compact_bottombar(should_shrink) self.get_active_image().fake_scrollbar_update() def compact_bottombar(self, state): self.options_long_box.set_visible(not state) self.minimap_label.set_visible(not state) self.minimap_arrow.set_visible(not state) self.options_short_box.set_visible(state) self.minimap_icon.set_visible(state) def hide_message(self, *args): self.prompt_message(False, '') def prompt_message(self, show, label): """Update the content and the visibility of the info bar.""" self.info_bar.set_visible(show) if show: self.info_label.set_label(label) if self._settings.get_boolean('devel-only'): print('Drawing: ' + label) def update_tabs_visibility(self): self.notebook.set_show_tabs(self.notebook.get_n_pages() > 1) ############################################################################ # TOOLS PANEL ############################################################## def on_icon_size_changed(self, *args): for tool_id in self.tools: self.tools[tool_id].update_icon_size() def set_tools_labels_visibility(self, visible): """Change the way tools are displayed in the side panel. Visible labels mean the tools will be arranged in a scrollable list of buttons, else they will be in an adaptative flowbox.""" for tool_id in self.tools: self.tools[tool_id].set_show_label(visible) nb_tools = len(self.tools) parent_box = self.tools_flowbox.get_parent() if visible: self.tools_flowbox.set_min_children_per_line(nb_tools) if parent_box == self.tools_nonscrollable_box: self.tools_nonscrollable_box.remove(self.tools_flowbox) self.tools_scrollable_box.add(self.tools_flowbox) else: if parent_box == self.tools_scrollable_box: self.tools_scrollable_box.remove(self.tools_flowbox) self.tools_nonscrollable_box.add(self.tools_flowbox) nb_min = int( (nb_tools+(nb_tools % 3))/3 ) - 1 self.tools_flowbox.set_min_children_per_line(nb_min) self.tools_flowbox.set_max_children_per_line(nb_tools) def on_show_labels_setting_changed(self, *args): # TODO https://lazka.github.io/pgi-docs/Gio-2.0/classes/Settings.html#Gio.Settings.create_action self.set_tools_labels_visibility(self._settings.get_boolean('show-labels')) def on_show_labels_action_changed(self, *args): show_labels = not args[0].get_state() self._settings.set_boolean('show-labels', show_labels) args[0].set_state(GLib.Variant.new_boolean(show_labels)) ############################################################################ # TOOLS #################################################################### def on_change_active_tool(self, *args): """Action callback, doing nothing in some situations, thus avoiding infinite loops. It sets the correct `tool_id` using adequate methods otherwise.""" state_as_string = args[1].get_string() if state_as_string == args[0].get_state().get_string(): return if self.tools[state_as_string].row.get_active(): self.switch_to(state_as_string, None) else: self.tools[state_as_string].row.set_active(True) def switch_to(self, tool_id, image_pointer): """Switch from the current tool to `tool_id` and to the current image to `image_pointer`, which can be `None` if the image is not changing.""" self.pointer_to_current_page = None action = self.lookup_action('active_tool') action.set_state(GLib.Variant.new_string(tool_id)) self.disable_former_tool(tool_id) self.pointer_to_current_page = image_pointer self.enable_tool(tool_id) self.pointer_to_current_page = None def enable_tool(self, new_tool_id): """Activate the tool whose id is `new_tool_id`.""" self.get_active_image().update() self.active_tool_id = new_tool_id self.update_bottom_panel() # XXX après on_tool_selected sur master self.active_tool().on_tool_selected() self.get_active_image().update_actions_state() self.set_picture_title() def disable_former_tool(self, future_tool_id): """Unactivate the active tool.""" self.former_tool_id = self.active_tool_id should_preserve_selection = self.tools[future_tool_id].accept_selection self.former_tool().give_back_control(should_preserve_selection) self.former_tool().on_tool_unselected() self.get_active_image().selection.show_popover(False) def update_bottom_panel(self): """Show the correct bottom panel, with the correct tool options menu.""" self.build_options_menu() if self.former_tool_id is not self.active_tool_id: self.former_tool().show_panel(False) self.active_tool().show_panel(True) self.set_bottom_width_limit() self.update_thickness_spinbtn_state() self.color_box.set_sensitive(self.active_tool().use_color) self.adapt_to_window_size() def active_tool(self): return self.tools[self.active_tool_id] def former_tool(self): return self.tools[self.former_tool_id] def back_to_previous(self, *args): self.tools[self.former_tool_id].row.set_active(True) ############################################################################ # IMAGE FILES MANAGEMENT ################################################### def action_properties(self, *args): DrawingPropertiesDialog(self, self.get_active_image()) def get_active_image(self): if self.pointer_to_current_page is None: return self.notebook.get_nth_page(self.notebook.get_current_page()) else: return self.pointer_to_current_page def get_file_path(self): return self.get_active_image().get_file_path() def action_reload(self, *args): gfile = self.get_active_image().gfile if gfile is not None: self.try_load_file(gfile) def action_open(self, *args): """Handle the result of an "open" file chooser dialog, and open it in the current tab, or in a new one, or in a new window. The decision is made depending on what's in the current tab, and (if any doubt) according to the user explicit decision.""" gfile = self.file_chooser_open() if gfile is None: return else: file_name = gfile.get_path().split('/')[-1] self.prompt_message(True, _("Loading %s") % file_name) if self.get_active_image().should_replace(): # If the current image is just a blank, unmodified canvas. self.try_load_file(gfile) else: dialog = DrawingMessageDialog(self) new_tab_id = dialog.set_action(_("New Tab"), None, True) new_window_id = dialog.set_action(_("New Window"), None, False) discard_id = dialog.set_action(_("Discard changes"), \ 'destructive-action', False) if not self.get_active_image()._is_saved: dialog.add_string(_("There are unsaved modifications to %s.") % \ self.get_active_image().get_filename_for_display()) dialog.add_string(_("Where do you want to open %s?") % file_name) result = dialog.run() dialog.destroy() if result == new_tab_id: self.build_new_tab(gfile=gfile) elif result == discard_id: self.try_load_file(gfile) elif result == new_window_id: self.app.open_window_with_content(gfile, False) self.hide_message() def file_chooser_open(self, *args): """Opens an "open" file chooser dialog, and return a GioFile or None.""" gfile = None file_chooser = Gtk.FileChooserNative.new(_("Open a picture"), self, Gtk.FileChooserAction.OPEN, _("Open"), _("Cancel")) utilities_add_filechooser_filters(file_chooser) response = file_chooser.run() if response == Gtk.ResponseType.ACCEPT: gfile = file_chooser.get_file() file_chooser.destroy() return gfile def on_data_dropped(self, widget, drag_context, x, y, data, info, time): """Signal callback: when files are dropped on `self.notebook`, a message dialog is shown, asking if the user prefers to open them (one new tab per image), or to import them (it will only import the first), or to cancel (if the user dropped mistakenly).""" dialog = DrawingMessageDialog(self) cancel_id = dialog.set_action(_("Cancel"), None, False) open_id = dialog.set_action(_("Open"), None, False) import_id = dialog.set_action(_("Import"), None, True) uris = data.get_uris() if len(uris) == 1: label = uris[0].split('/')[-1] else: # Context for translation: # "What do you want to do with *these files*?" label = _("these files") dialog.add_string(_("What do you want to do with %s?") % label) result = dialog.run() dialog.destroy() for uri in uris: # print(uri) # valider l'URI TODO if result == import_id: f = Gio.File.new_for_uri(uri) self.import_from_path(f.get_path()) return elif result == open_id: f = Gio.File.new_for_uri(uri) self.build_new_tab(gfile=f) def try_load_file(self, gfile): if gfile is not None: self.get_active_image().try_load_file(gfile) self.set_picture_title() # often redundant but not useless self.prompt_message(False, 'file successfully loaded') def action_save(self, *args): """Try to save the active image, and return True if the image has been successfully saved.""" fn = self.get_file_path() if fn is None: # Newly created and never saved image gfile = self.file_chooser_save() if gfile is None: # The user pressed "cancel" or closed the file chooser dialog return False else: self.get_active_image().gfile = gfile fn = self.get_file_path() utilities_save_pixbuf_to(self.get_active_image().main_pixbuf, fn, self) self.get_active_image().post_save() self.set_picture_title() return True def action_save_as(self, *args): gfile = self.file_chooser_save() if gfile is not None: self.get_active_image().gfile = gfile self.action_save() def confirm_save_modifs(self): """Return True if the image can be closed/overwritten (whether it's saved or not), or False if the image can't be closed/overwritten.""" if self.get_active_image()._is_saved: return True fn = self.get_file_path() if fn is None: unsaved_file_name = _("Untitled") + '.png' # Context: the sentence "There are unsaved modifications to %s." display_name = _("this picture") else: unsaved_file_name = fn.split('/')[-1] display_name = self.get_active_image().get_filename_for_display() dialog = DrawingMessageDialog(self) discard_id = dialog.set_action(_("Discard"), 'destructive-action', False) cancel_id = dialog.set_action(_("Cancel"), None, False) save_id = dialog.set_action(_("Save"), None, True) dialog.add_string( _("There are unsaved modifications to %s.") % display_name) self.minimap.update_minimap() image = Gtk.Image().new_from_pixbuf(self.minimap.mini_pixbuf) frame = Gtk.Frame(valign=Gtk.Align.CENTER, halign=Gtk.Align.CENTER) frame.add(image) dialog.add_widget(frame) result = dialog.run() dialog.destroy() if result == save_id: return self.action_save() elif result == discard_id: return True else: # cancel_id return False def file_chooser_save(self): """Opens an "save" file chooser dialog, and return a GioFile or None.""" gfile = None file_chooser = Gtk.FileChooserNative.new(_("Save picture as…"), self, Gtk.FileChooserAction.SAVE, _("Save"), _("Cancel")) utilities_add_filechooser_filters(file_chooser) default_file_name = str(_("Untitled") + '.png') file_chooser.set_current_name(default_file_name) response = file_chooser.run() if response == Gtk.ResponseType.ACCEPT: gfile = file_chooser.get_file() file_chooser.destroy() return gfile def action_print(self, *args): self.get_active_image().print_image() def action_export_as(self, *args): gfile = self.file_chooser_save() if gfile is not None: pb = self.get_active_image().main_pixbuf utilities_save_pixbuf_to(pb, gfile.get_path(), self) ############################################################################ # SELECTION MANAGEMENT ##################################################### def action_getvalues(self, *args): """Development only""" self.get_active_image().selection.print_values() def action_select_all(self, *args): self.force_selection() self.get_selection_tool().tool_select_all() def action_unselect(self, *args): self.get_selection_tool().give_back_control(False) def action_cut(self, *args): self.copy_operation() self.action_delete() def action_copy(self, *args): self.copy_operation() def copy_operation(self): cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) cb.set_image(self.get_active_image().selection.get_pixbuf()) def action_delete(self, *args): self.get_selection_tool().delete_selection() def action_paste(self, *args): """By default, this action pastes an image, but if there is no image in the clipboard, it will paste text using the text tool. Once the text tool is active, this action is disabled to not interfer with the default behavior of ctrl+v provided by the GTK text entry.""" cb = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD) pixbuf = cb.wait_for_image() if pixbuf is not None: self.force_selection() self.get_selection_tool().import_selection(pixbuf) else: string = cb.wait_for_text() self.tools['text'].force_text_tool(string) def action_import(self, *args): """Handle the result of an "open" file chooser dialog. It will then try to import it as the selection.""" file_chooser = Gtk.FileChooserNative.new(_("Import a picture"), self, Gtk.FileChooserAction.OPEN, _("Import"), _("Cancel")) utilities_add_filechooser_filters(file_chooser) response = file_chooser.run() if response == Gtk.ResponseType.ACCEPT: self.import_from_path(file_chooser.get_filename()) file_chooser.destroy() def import_from_path(self, file_path): """Import a file as the selection pixbuf. Called by the 'win.import' action and when an image is imported by drag-and-drop.""" self.force_selection() pixbuf = GdkPixbuf.Pixbuf.new_from_file(file_path) self.get_selection_tool().import_selection(pixbuf) def action_selection_export(self, *args): gfile = self.file_chooser_save() if gfile is not None: pixbuf = self.get_active_image().selection.get_pixbuf() utilities_save_pixbuf_to(pixbuf, gfile.get_path(), self) def get_selection_tool(self): # XXX réellement utile ? if 'select' in self.tools: return self.tools['select'] else: self.prompt_message(True, 'Required tool is not available') return self.active_tool() def force_selection(self, *args): self.get_selection_tool().row.set_active(True) # XXX appeler enable tool ? def action_apply_canvas_tool(self, *args): self.active_tool().on_apply_temp_pixbuf_tool_operation() ############################################################################ # HISTORY MANAGEMENT ####################################################### def action_undo(self, *args): self.get_active_image().try_undo() self.action_rebuild() # self.get_active_image().reset_temp() # XXX ne devrait pas exister def action_redo(self, *args): self.get_active_image().try_redo() self.action_rebuild() # self.get_active_image().reset_temp() # XXX ne devrait pas exister def operation_is_ongoing(self): # TODO # if self.active_tool() is self.get_selection_tool(): # is_ongoing = self.active_tool().selection.selection_has_been_used # else: # is_ongoing = self.active_tool().has_ongoing_operation # return is_ongoing return False def action_restore(self, *args): self.get_active_image().use_stable_pixbuf() self.get_active_image().update() def action_rebuild(self, *args): # XXX image method ? """Rebuild the image according to the history content.""" self.get_active_image().restore_first_pixbuf() h = self.get_active_image().undo_history.copy() self.get_active_image().undo_history = [] for op in h: self.tools[op['tool_id']].apply_operation(op) self.get_active_image().update() self.get_active_image().update_history_sensitivity() ############################################################################ # COLORS ################################################################### def build_color_buttons(self): """Initialize the 2 color buttons and popovers with the 2 previously memorized RGBA values.""" right_rgba = self._settings.get_strv('last-right-rgba') left_rgba = self._settings.get_strv('last-left-rgba') self.color_popover_r = DrawingColorPopover(self.color_menu_btn_r, \ self.r_btn_image, right_rgba) self.color_popover_l = DrawingColorPopover(self.color_menu_btn_l, \ self.l_btn_image, left_rgba) def action_use_editor(self, *args): use_editor = not args[0].get_state() self._settings.set_boolean('direct-color-edit', use_editor) args[0].set_state(GLib.Variant.new_boolean(use_editor)) self.set_palette_setting() def set_palette_setting(self, *args): show_editor = self._settings.get_boolean('direct-color-edit') self.color_popover_r.setting_changed(show_editor) self.color_popover_l.setting_changed(show_editor) def action_color1(self, *args): self.color_menu_btn_l.activate() def action_color2(self, *args): self.color_menu_btn_r.activate() def exchange_colors(self, *args): left_c = self.color_popover_l.color_widget.get_rgba() self.color_popover_l.color_widget.set_rgba(self.color_popover_r.color_widget.get_rgba()) self.color_popover_r.color_widget.set_rgba(left_c) ############################################################################ # TOOLS OPTIONS ############################################################ def update_thickness_spinbtn_state(self): self.thickness_spinbtn.set_sensitive(self.active_tool().use_size) def build_options_menu(self): """Build the active tool's option menus. The first menu is the popover from the bottom bar. It can contain any widget, or it can be build from a Gio.MenuModel The second menu is build from a Gio.MenuModel and is in the menubar (not available with all layouts).""" widget = self.active_tool().get_options_widget() model = self.active_tool().get_options_model() if model is None: self.app.get_menubar().remove(5) self.app.get_menubar().insert_submenu(5, _("_Options"), self.placeholder_model) else: self.app.get_menubar().remove(5) self.app.get_menubar().insert_submenu(5, _("_Options"), model) if widget is not None: self.options_btn.set_popover(widget) elif model is not None: self.options_btn.set_menu_model(model) else: self.options_btn.set_popover(None) self.update_option_label() def update_option_label(self, *args): self.options_label.set_label(self.active_tool().get_options_label()) ############################################################################ # PREVIEW, NAVIGATION AND ZOOM ACTIONS ##################################### def action_toggle_preview(self, *args): """Action callback, showing or hiding the "minimap" preview popover.""" preview_visible = not args[0].get_state() if preview_visible: self.minimap.popup() self.minimap.update_minimap() else: self.minimap.popdown() args[0].set_state(GLib.Variant.new_boolean(preview_visible)) def action_go_up(self, *args): self.get_active_image().add_deltas(0, -1, 100) def action_go_down(self, *args): self.get_active_image().add_deltas(0, 1, 100) def action_go_left(self, *args): self.get_active_image().add_deltas(-1, 0, 100) def action_go_right(self, *args): self.get_active_image().add_deltas(1, 0, 100) ############################################################################ ################################################################################