pax_global_header00006660000000000000000000000064146023101220014501gustar00rootroot0000000000000052 comment=ec2cdbaa618d0eb6c9e0aaea1f24ea286afc696e alphabetical-grid-extension-40.0/000077500000000000000000000000001460231012200167725ustar00rootroot00000000000000alphabetical-grid-extension-40.0/.github/000077500000000000000000000000001460231012200203325ustar00rootroot00000000000000alphabetical-grid-extension-40.0/.github/FUNDING.yml000066400000000000000000000001031460231012200221410ustar00rootroot00000000000000github: stuarthayhurst custom: "https://paypal.me/stuartahayhurst" alphabetical-grid-extension-40.0/.github/ISSUE_TEMPLATE/000077500000000000000000000000001460231012200225155ustar00rootroot00000000000000alphabetical-grid-extension-40.0/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000021151460231012200252060ustar00rootroot00000000000000--- name: Bug report about: Create a bug report to help improve the extension title: "[Bug] ..." labels: bug assignees: '' --- ## Before reporting any bug, make sure you read [this](https://github.com/stuarthayhurst/alphabetical-grid-extension#bug-reporting--debugging) **Describe the issue** A clear and concise description of what the bug is **To Reproduce** Steps to reproduce the behavior: 1. Go to '...' 2. Click on '....' 3. Scroll down to '....' 4. See the error **Expected behavior** A clear and concise description of what you expected to happen **Screenshots and logs** If applicable, add screenshots and logs to help explain your problem Help on obtaining a log can be found [here](https://github.com/stuarthayhurst/alphabetical-grid-extension#bug-reporting--debugging) **System information (please complete the following information):** - Distro: [e.g. Debian 11] - GNOME version: (Run `gnome-shell --version`) - Extension version (Run `gnome-extensions info AlphabeticalAppGrid@stuarthayhurst |grep Version`) **Additional context** Add any other context about the problem here alphabetical-grid-extension-40.0/.github/ISSUE_TEMPLATE/feature_request.md000066400000000000000000000016241460231012200262450ustar00rootroot00000000000000--- name: Feature request about: Suggest an idea to help improve the extension title: "[Feature request] ..." labels: enhancement assignees: '' --- **Is your feature request related to a problem?** Yes or no, and a clear and concise description of what the problem is, if yes **Describe the solution you'd like** A clear and concise description of what you want to happen **Describe alternatives you've considered** A clear and concise description of any alternative solutions or features you've considered **Can you work on it?** Are you able to solve the problem / create the solution yourself? If you are, that's great! Fork the repository and create a pull request, I'll get around to reviewing it shortly If you don't know how to do it yourself, any information on how it could be implemented would be appreciated **Additional context** Add any other context or screenshots about the feature request here alphabetical-grid-extension-40.0/.github/PULL_REQUEST_TEMPLATE.md000066400000000000000000000014021460231012200241300ustar00rootroot00000000000000## Pull request summary: - What does the pull request do? Why is it necessary? ## UI related changes: - Add any screenshots of UI related changes here ## Build system related changes: - Does the pull request cause any new dependencies to be required? - Have any new dependencies, quirks, options or makefile targets been documented? ## Todo: - Is there anything left to do? - If so, mark the pull request as a draft to avoid any confusion ## Related issues / pull requests: - If the pull request requires another pull request to be merged first, please make note of this in the summary and mark the pull request as WIP - If the pull request is designed to fix an issue, tag it at the end of the pull request - For example, add `Fixes #1` as the last line alphabetical-grid-extension-40.0/.github/workflows/000077500000000000000000000000001460231012200223675ustar00rootroot00000000000000alphabetical-grid-extension-40.0/.github/workflows/build-extension.yml000066400000000000000000000013501460231012200262220ustar00rootroot00000000000000# This workflow will build the extension and upload an artifact name: Build and upload extension on: push: branches: '**' pull_request: branches: '**' jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update sudo apt-get install --no-install-recommends make gettext gnome-shell - name: Build the extension bundle run: | make build - name: Run checks on extension run: | make check - uses: actions/upload-artifact@v3 with: name: AlphabeticalAppGrid@stuarthayhurst.shell-extension.zip path: build/AlphabeticalAppGrid@stuarthayhurst.shell-extension.zip alphabetical-grid-extension-40.0/.github/workflows/shellcheck.yml000066400000000000000000000004641460231012200252230ustar00rootroot00000000000000name: Run shellcheck on: push: branches: '**' pull_request: branches: '**' jobs: shellcheck: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Run shellcheck run: | find $GITHUB_WORKSPACE -type f -and \( -name "*.sh" \) | xargs shellcheck alphabetical-grid-extension-40.0/.github/workflows/test-build-system.yml000066400000000000000000000025201460231012200265070ustar00rootroot00000000000000# This workflow will thoroughly test the build system name: Complete build system test on: push: branches: '**' pull_request: branches: '**' jobs: build: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update sudo apt-get install --no-install-recommends git make optipng gettext gnome-shell - name: Check asset optimisation targets work run: | # Check all assets are space optimised make compress COMPRESSLEVEL="-o0" "-j$(nproc)" - name: Check translation generation works run: | make translations git restore extension/po/ - name: Test extension builds from current state run: | make build - name: Test extension is valid and able to be uploaded run: | make check - name: Check no extra files have been committed or missed run: | # Clean up files (shouldn't have to do anything) make clean # Fail if any files generated by last step that haven't been committed if [ ! -z "$(git status --porcelain)" ]; then exit 1; fi - name: Check release workflow is functional run: | make release COMPRESSLEVEL="-o0" "-j$(nproc)" - name: Test extension installs run: | make install alphabetical-grid-extension-40.0/.gitignore000066400000000000000000000002771460231012200207700ustar00rootroot00000000000000#Build files build/ AlphabeticalAppGrid@stuarthayhurst.shell-extension.zip extension/locale/ extension/schemas/gschemas.compiled locale/ schemas/gschemas.compiled #Backups *.po~ *.ui~ *.ui# alphabetical-grid-extension-40.0/LICENSE.txt000066400000000000000000000773311460231012200206300ustar00rootroot00000000000000 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 alphabetical-grid-extension-40.0/Makefile000066400000000000000000000037661460231012200204460ustar00rootroot00000000000000SHELL = bash UUID = AlphabeticalAppGrid@stuarthayhurst COMPRESSLEVEL ?= -o7 BUILD_DIR ?= build PNG_FILES = $(wildcard ./docs/*.png) BUNDLE_PATH = "$(BUILD_DIR)/$(UUID).shell-extension.zip" .PHONY: build package check release translations compress install uninstall clean $(PNG_FILES) build: clean @mkdir -p $(BUILD_DIR) $(MAKE) package package: @mkdir -p $(BUILD_DIR) @echo "Packing files..." @cd "extension"; \ gnome-extensions pack --force \ --podir=po \ --extra-source=../LICENSE.txt \ --extra-source=../docs/CHANGELOG.md \ --extra-source=lib/ \ -o ../$(BUILD_DIR)/ check: @if [[ ! -f $(BUNDLE_PATH) ]]; then \ echo -e "\nWARNING! Extension zip couldn't be found"; exit 1; \ elif [[ "$$(stat -c %s $(BUNDLE_PATH))" -gt 4096000 ]]; then \ echo -e "\nWARNING! The extension is too big to be uploaded to the extensions website, keep it smaller than 4096 KB"; exit 1; \ elif grep '"debug": true' extension/metadata.json > /dev/null; then \ echo -e "\nWARNING! Debug mode is enabled, a release shouldn't be published"; exit 1; \ fi release: @if [[ "$(VERSION)" != "" ]]; then \ sed -i "s| \"version\":.*| \"version\": $(VERSION),|g" extension/metadata.json; \ fi #Call other targets required to make a release $(MAKE) translations compress $(MAKE) build $(MAKE) check translations: @BUILD_DIR=$(BUILD_DIR) ./scripts/update-po.sh -a compress: $(MAKE) $(PNG_FILES) $(PNG_FILES): @echo "Compressing $@..." @optipng $(COMPRESSLEVEL) -quiet -strip all "$@" install: @if [[ ! -f $(BUNDLE_PATH) ]]; then \ $(MAKE) build; \ fi gnome-extensions install $(BUNDLE_PATH) --force uninstall: gnome-extensions uninstall "$(UUID)" clean: @rm -rfv $(BUILD_DIR) @rm -rfv extension/po/*.po~ @rm -rfv extension/ui/*/*.ui~ extension/ui/*/*.ui# @rm -rfv extension/locale extension/schemas/gschemas.compiled "$(UUID).shell-extension.zip" @rm -rfv locale schemas/gschemas.compiled @rm -rfv extension/*.ui~ extension/*.ui# extension/ui/*.ui~ extension/ui/*.ui# @rm -rfv po/*.po~ *.ui~ *.ui# ui/*.ui~ ui/*.ui# alphabetical-grid-extension-40.0/README.md000066400000000000000000000110511460231012200202470ustar00rootroot00000000000000

alphabetical-grid-extension

## Alphabetical App Grid GNOME Extension [![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/stuartahayhurst) - Alphabetically order GNOME's app grid and folders - Supports GNOME 45+ - Get the extension from [here](https://extensions.gnome.org/extension/4269/alphabetical-app-grid/) - This project is licensed under GPL 3.0 - Any donations are greatly appreciated :) ## Older versions: - Support for older versions of GNOME can be found in branches - Find the name of the branch thgat supports the target version, and install from there - Alternatively, you can just use an older release or tag to install from ## Install the extension from releases: - Extract the zip to `~/.local/share/gnome-shell/extensions/AlphabeticalAppGrid@stuarthayhurst/` - Alternatively: `gnome-extensions install "AlphabeticalAppGrid@stuarthayhurst.shell-extension.zip" --force` - Reload GNOME: ALT+F2, r, ENTER - Enable the extension: `gnome-extensions enable AlphabeticalAppGrid@stuarthayhurst` ## Install the extension from source: - Make sure the install dependencies are installed - `make build` - `make install` - Reload GNOME: ALT+F2, r, ENTER - Enable the extension: `gnome-extensions enable AlphabeticalAppGrid@stuarthayhurst` ## Build system usage: - ### Common targets: Regular build system targets to build, install and uninstall - `make build`: Creates extension zip - `make check`: Runs checks on built extension zip - `make install`: Installs the extension - `make uninstall`: Uninstalls the extension - ### Development targets: These targets are aimed at developers and translators - `make clean`: Cleans the extension repository, including built files and translations - `make translations`: Updates translations - `make compress`: Losslessly compresses any `.png`s in `docs/` - Allows passing `COMPRESSLEVEL="-o[X]"`, where `[X]` is an integer between 0-7 - Supports `-j[X]`, where `[X]` is the number of threads to use - `make release`: Updates translations and icons, then creates and checks an extension zip - Calls `make translations compress build check` - Supports any variables / arguments supported by these targets - Also allows passing `VERSION="[XX]"`, where `[XX]` is the version to update `metadata.json` to - Supports `-j[X]`, where `[X]` is the number of threads to use - `make package`: Creates the extension zip from the project's current state (only useful for debugging) ## Install dependencies: - gettext - gnome-shell (`gnome-extensions` command) ## Build dependencies: (Only required if running `make release`) - `All install dependencies` - sed (`make translations`) - optipng (`make compress`) ## What happened to the show favourites option? - Maintaining this feature was going to end up complicated and messy - It was also out of scope, and [this](https://extensions.gnome.org/extension/4485/favourites-in-appgrid/) extension did the job better - With this in mind, the feature was removed in release `v16` ## Want to help? - Help with the project is always appreciated, refer to `docs/CONTRIBUTING.md` to get started - [Documentation](docs/CONTRIBUTING.md#documentation-changes), [code](docs/CONTRIBUTING.md#code-changes), [translations](docs/CONTRIBUTING.md#translations) and UI improvements are all welcome! ## Bug reporting / debugging: - If you were simply told "Error" while installing, reboot and see if there's still an issue - When installing an extension from GNOME's extension site, this is normal - A log of what the extension is doing is very helpful for fixing issues - The extension logs to the system logs when enabled, which can be accessed with `journalctl /usr/bin/gnome-shell` - A live feed of GNOME's logs can be accessed with `journalctl /usr/bin/gnome-shell -f -o cat` - To enable logging, the setting can be found under the `Developer settings` section of the extension's settings: ![Enable logging](docs/enable-logging.png) ### Credits: - `scripts/update-po.sh` and `scripts/update-pot.sh` were derived from [Fly-Pie](https://github.com/Schneegans/Fly-Pie), originally licensed under the [MIT license](https://github.com/Schneegans/Fly-Pie/blob/develop/LICENSE) ### Screenshots: ![Extension](docs/screenshot.png) ![Settings](docs/settings.png) alphabetical-grid-extension-40.0/docs/000077500000000000000000000000001460231012200177225ustar00rootroot00000000000000alphabetical-grid-extension-40.0/docs/CHANGELOG.md000066400000000000000000000213141460231012200215340ustar00rootroot00000000000000## Changelog: ### v40: - `2024-03-31` - Fixed folder previews and contents getting stuck - Fixed compatibility issues with "Favourites in AppGrid" extension (#87) - Updated description - General code cleanup ### v39: - `2024-02-25` - Added support for GNOME 46 ### v38: - `2024-01-25` - Move AppSystem inside the constructor, to meet review guidelines ### v37: - `2024-01-24` - Updated extension to use newer GJS features - Added Turkish translation - [Hakan](https://github.com/hkayrad) (#88) - Added Japanese translation - [Ryo](https://github.com/ryonakano) (#89) ### v36: - `2023-11-18` - Updated Spanish translation (#85) - Updated Russian translation (#86) - Updated GitHub runners ### v35: - `2023-09-17` - Updated Italian translation (#84) ### v34: - `2023-08-22` - Added a new interface, using `libadwaita` - Disabled fuzzy translations - Stopped exporting generic class names - Updated README and documentation - Updated Spanish translation (#83) ### v33: - `2023-08-19` - Support GNOME 45 - **Support for earlier versions has been removed** - General code improvements - Build system improvements ### v32: - `2023-08-16` **This release will be the final release to support pre-45 versions of GNOME** - Updated Taiwanese translations (#81) - Added GitHub sponsor link to metadata ### v31: - `2023-06-27` - Use correct property to make GtkSeparator unselectable - Use GtkBox as parent element, instead of GtkGrid - General code cleanup - Build system optimisation ### v30: - `2023-06-10` - Added Czech translation - [Amereyeu](https://github.com/Amereyeu) (#79) - Added donation information to metadata - Updated build system output ### v29: - `2023-03-16` - Fixed warnings about accessing `St.Button` after disposal - Fix app grid not being correctly ordered when opened in some cases (#63, #65) - Added Portuguese translation - [Vinicius](https://github.com/vinaooo) (#78) - Fixed some characters being loaded incorrectly on the credits page ### v28: - `2023-03-02` - Build system, runner and README improvements - Simplify UI file definitions - Fixed warning about unsupported use of array.toString() - Added GNOME 44 support ### v27: - `2023-01-20` - README improvements (styling, dependencies) - Updated copyright year - Fixed some issues with missing app entries - Updated French translation (#74) - Added Occitan translation - [Mejans](https://github.com/Mejans) (#74) ### v26: - `2022-09-11` - Added GNOME 43 metadata support ### v25: - `2022-07-22` - Added Arabic translation - [Omar](https://github.com/ots25) (#69) - README fixes (#70) ### v24: - `2022-05-27` - Updated Russian translation (#61) - Added Italian translation - [Albano](https://github.com/albanobattistella) (#64) - Added Taiwanese Mandarin translation - [Oliver](https://github.com/olivertzeng) (#68) - Updated pull request template - Updated GitHub runner to Ubuntu 22.04 - Build system fixes ### v23: - `2022-04-16` - Fixed large amounts of apps missing from the app grid (#59) - Improved troubleshooting section in README ### v22: - `2022-04-07` - Fixed folders not being updated when contents change ### v21: - `2022-04-06` - Reimplement UI using pages - Added a new 'About' page, with support for GNOME 42 - Added a new 'Credits' page, for extension developers and translators - Replaced preferences title with page switcher - Replaced extension icon with an svg - Miscellaneous settings menu design improvements - Updated README and showcase screenshots - General code fixes (Primarily target GNOME 40+, styling, code quality improvements) - Build system improvements (Output, structure) ### v20: - `2022-03-12` - Russian translation fixes (#53, #54) - GNOME 42 support (no changes required) ### v19: - `2022-02-18` - Added Russian translation - [Nikolay](https://github.com/sngvy) (#52) - Stop translating log messages, as they're for debugging ### v18: - `2022-01-29` - Added Spanish translation - [Óscar](https://github.com/oscfdezdz) (#49) ### v17: - `2022-01-18` - Updated donation link - Updated copyright year - Silenced build system icon output ### v16: - `2021-11-22` - README and changelog fixes - Minor Makefile improvement (Fixed -o7 quotes ending before content starts) - Removed "Show favourite apps on the app grid" option, as it's out of the project's scope - Use [this](https://extensions.gnome.org/extension/4485/favourites-in-appgrid/) extension instead ### v15: - `2021-10-09` - Hotfix: Actually disconnect from GLib timeouts ### v14: - `2021-10-09` - Fixed app grid not being reordered if the same pair of apps were swapped twice - Fixed favourite apps not starting in the correct place - Fixed initial reorder sometimes being incorrect #43 - Updated pull request template - Build system improvements #39, #40 - README improvements ### v13: - `2021-09-21` - Added icon compressor (`make compress`) and optimised svg icon (`make prune`) - Added French translation (#33, #34) - [Philipp Kiemle](https://github.com/daPhipz) + A couple others - Added build system checks to GitHub CI Pipeline - Added comments for translators and tweaked translation strings (#36) - Added bug report, feature request and pull request templates - Added more documentation on build system targets and debugging (#38) - Added code of conduct and contributing guidelines - Fixed extension icon not showing up on some distros - Use `Gio.Settings` to create GSettings objects - Removed unused imports ### v12: - `2021-08-28` - General code, build system and README improvements - Added setting to toggle logging (Previously the metadata had to be modified) - Added debugging section to README - Added GNOME 41 support - Fixed some unnecessary features not being disabled on GNOME 3.38 - Fixed greyed out UI elements only being partially greyed out - Fixed shell crashing if apps were moved out of a folder and into the same folder as the source (#29) - Fixed shell crashing randomly when apps are installed / reduce frequency (I couldn't reliably reproduce it to troubleshoot properly) - Restructured Glade .ui files ### v11: - `2021-08-04` - Hotfix: Correct code for upload to GNOME Extensions website ### v10: - `2021-08-04` - Added automatic grid reordering when the installed apps change - Added setting to enable displaying favourite apps on the grid (#20) - Added timestamp to debug information / logging - Added more verbose logging - Added Dutch translation - [Heimen Stoffels](https://github.com/Vistaus) - Fixed some characters being sent to the end of the grid (#24) - Fixed floating icons after making new folders - Fixed some folders not being reordered when renamed - Improved settings menu - Improved code quality - Moved `gettext` to install dependencies ### v9: - `2021-07-29` - Added setting to toggle automatic refresh of the app grid - Added check that that the folder settings GSettings key used is writable before attempting to write to it - Updated build system targets and added new tweaks - Updated documentation on build system and dependencies - Internal code improvements ### v8: - `2021-06-17` - Added donation button to README and preferences - Added changelog - Fixed folders not automatically reordering when their names are changed (GNOME 40) - Fixed error when disconnecting from connected signals - Fixed incorrect position in grid for some folders (GNOME 40) - Improved repository structure - Only send log messages when debugging is enabled (In `metadata.json`) - Miscellaneous code fixes and improvements ### v7: - `2021-06-11` - Added settings to choose position of folders (Alphabetical, start or end) - Suport instant redisplaying of the grid order on GNOME 3.38 - General code improvements ### v6: - `2021-06-03` - Added settings menu - Added setting to toggle folder contents reordering - Added more files to make clean target - Added shellcheck GitHub CI runner - Fixed apps not reordering when favourite apps change - Replaced script to compile locales - Updated documentation - Increased consistency of code styling ### v5: - `2021-05-29` - Added translation support - Added new build system - Added German translation - [Philipp Kiemle](https://github.com/daPhipz) - Fixed folder contents not being reordered - Fixed a typo in a log message - Updated documentation - General code improvements ### v4: - `2021-05-20` - Updated `README.md` - Reorder the grid when folders are created or destroyed ### v3: - `2021-05-16` - Increased code consistency - Updated `README.md` - Updated the showcase screenshot - Added GNOME 40 support - Check gsettings key is writable before writing to it - Added support for instant redisplaying of the grid order ### v2: - `2021-05-10` - App grid is now initially reordered when the extension is enabled ### v1: - `2021-05-10` - Initial release alphabetical-grid-extension-40.0/docs/CODE_OF_CONDUCT.md000066400000000000000000000125621460231012200225270ustar00rootroot00000000000000# Contributor Covenant Code of Conduct ## Our Pledge We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, caste, color, religion, or sexual identity and orientation. We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. ## Our Standards Examples of behavior that contributes to a positive environment for our community include: * Demonstrating empathy and kindness toward other people * Being respectful of differing opinions, viewpoints, and experiences * Giving and gracefully accepting constructive feedback * Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience * Focusing on what is best not just for us as individuals, but for the overall community Examples of unacceptable behavior include: * The use of sexualized language or imagery, and sexual attention or advances of any kind * Trolling, insulting or derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or email address, without their explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Enforcement Responsibilities Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. ## Scope This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at [INSERT CONTACT METHOD]. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the reporter of any incident. ## Enforcement Guidelines Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction **Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. **Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. ### 2. Warning **Community Impact**: A violation through a single incident or series of actions. **Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. ### 3. Temporary Ban **Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. **Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. ### 4. Permanent Ban **Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. **Consequence**: A permanent ban from any sort of public interaction within the community. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.1, available at [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations]. [homepage]: https://www.contributor-covenant.org [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html [Mozilla CoC]: https://github.com/mozilla/diversity [FAQ]: https://www.contributor-covenant.org/faq [translations]: https://www.contributor-covenant.org/translations alphabetical-grid-extension-40.0/docs/CONTRIBUTING.md000066400000000000000000000075201460231012200221570ustar00rootroot00000000000000# Contributing to alphabetical-grid-extension ## Overview: - Your contributions and pull requests are welcome, this project can always use extra help! - In short, to contribute: - Make an issue describing what you're working on - Thoroughly test the contribution - Create a merge request, and make any requested changes ## Suggestions for contributing: - New or improved translations - Fixes and additions to documentation - Bug fixes and feature additions - UI improvements ## Working with issues: - If someone else is already working on a reported issue, feel free help them out. Please don't try and commandeer the issue, if you want to work on something on your own, find another issue - Please report large issues before submitting a pull request to fix them - If you are working on your own issue, use that report as a space to track information and progress relating to the issue - If any help is required, please make it known, instead of silently dropping the issue - There's a label to use when help is wanted, to make searching for the issues easier ## General changes: - To work on the project, for the repository first, so you can make changes to your copy - Each commit should be a meaningful change, and be functional - When the changes are ready, submit a pull request, as described in a later section - If the changes aren't complete, submit the pull request as a draft instead - Changes may be requested, please don't take them personally, they're just to ensure quality and consistency within the extension ## Translations: - To add a new language, use `./scripts/update-po.sh -l [LANGUAGE CODE]` - `.po` files can be found in `extension/po/` - All translations can be refreshed with `make translations` - Strings marked with `fuzzy` may need a better translation - Blank strings need a translation added ## UI changes: - The UI is built programmatically with `libadwaita`, in `extension/prefs.js` - Changes to this must be compatible with the oldest version of GNOME supported - If this won't work, it can be conditionally enabled - If there's a good enough reason to drop the old version, this is also an option ## Documentation changes: - British English should be used in documentation, as well as consistent styling - Any new dependencies should be documented under the relevant dependency section - Documented information should be updated if the behaviour has changed ## Build system changes: - If the behaviour of a target is modified, it should be documented in `README.md`, under "Build system usage" - New build system targets should be documented there, and removed targets removed from there as well - New scripts should be placed in `scripts/`, and existing scripts are all located there ## Code changes: - The extension bundle can be created with `make build` - `make install` will install the bundle from `make build` - After changes have been made, run `make build; make check` to check the built bundle is alright - The extension can be removed with `make uninstall`, if it's non-functional - Debugging information can be found in `README.md`, under "Bug reporting / debugging" ## Submitting a pull request: - When you believe your contribution to be complete, submit a pull request - Follow the template provided when creating a pull request, and fill out relevant information - If the code isn't ready to be merged yet, submit the changes as a draft - Your changes will be reviewed and either given suggestions for changes, or it'll be approved and merged - If possible, please write a summary of changes you made. This makes it easier to make a new release and document the changes ## Other informaton: - ALL changes must be allowed under the license (See `LICENSE.md`) - ALL changes and discussions must abide by the Code of Conduct (`docs/CODE_OF_CONDUCT.md`) alphabetical-grid-extension-40.0/docs/enable-logging.png000066400000000000000000000132621460231012200233060ustar00rootroot00000000000000PNG  IHDR)gJLEQy{s7ߙ9Üs@bw_yy .oB!mK.!j!j!B!B!B=B=BB !ث=Νkl˗7n(--oq<~=T߾}{aѱ<!o-++{9>a0NJɓ'8h'B+xE9Bu 6pgڴi.\@w[nΆD=v$DB($ BY!P{L&&&Z3fCCC$L4#{nfyի333a Equ1T=C"jwyr73f N8quuMKKCرcu 9@ D_xUkjjq޽1 qa(@#NX^xq̙~ly<~xXڵ HpcQIj!cbʔ)UH( UU@Urr2bcc?޽ԞӧæP)//Wk._? Kz%عsٳGQ߬gMB ==222t` 0aNzXC!ibB{4syoA?3iyf ڶm۾}dձc^x@}k׮< Ǘ.]n?}ɇ b U=Bْݺuk֭Wy&FDDoO?B6%F:u /\U3ciHIGI\YYY\\l-U̼x"t|UgqYiӦ"X;99}W7n@QZZL,PXRR"+_ْ;wmarraHt>|q )UԞ:tډ~E򔗗3$BtӮP>y=OŔD!jO#ޮU:BP{Z1)+++**_ << !jO{…̥ё'"!C!P{!P{!j!j!B!B!B!B=B=BBBBy]MB!7B{u놞wާOggg777wB!]:qttB@i^ĄB4F.ِXqe !0օ!6~4tޝI! PfS.ӵkW.%!@5ӌ_#! b@!kv@AlE$bm.:%r!kv@At^xӞ7x+H! m=lN:e۠ϝ;f~<==[geee^^NZc-20Bi/ڳsN_ (ڳae}nܸ166jO BڋlݺEzhO.!S/r̃/'$uy_d6&ڃ)Sp[l~իW,X?zhUUǏO8h^TTtͻwٳǬSMk^x8Fɭ[.\ϟرCǹD@\\]VPPb>,)) w=`:>F%}uʕ>- R[BȿL`Irl֛$mզ+S B: pR Bp|k׮:w#x",,L#7nԨQ}x sq89r$IhM I1\3\s"~~~O>]l0Hl_3d9ruVFS{,9ټyǏ5FʹGsBM6\ym;%n?z.Q*(j}w  Ucǎ5kA>J{OOTeUfɰQz1_޽#FGD7 ` H&AL$$$YfxyyA>C\B',G=OߖHwrUߨ `fʁ{nʇ&M2X/_СC'O|ҥK5aPXX,GXx͕=޽j"KڣVs"ȍ`SNUzϞ=Bf1R,:a\G{tBZFxY]S~i`cSy=aǧfӦMt8>s%)..^n<$$K{YANNj?Mi9qo>dTǎ330aNvȑUV;4$"" 0 K#Ӗ1ڪ^_#w،c4AC|kڃ`#Yxi,^Xʕ+~"H5:H qӧ[=3TnD{tBښx\S+o>>XS{ͩ=e;^M$SkCMLIχyW{’y[I{f͚zҿm/<<\%om<Σ=תOa۫%jJ}uw*dyY'2'0F瘝 O[kORRRhhhBBɓ[I{222SeЖc|ZiGj6g?O}ΛvtUhf0vUOzZ{ }ȏrM=W^bQ%jsssccc1IWhpB|,**c~~>:6!!!k֬YxƗYz_IQFWB&D9sPa/BՙKl.Ȁ4++ UX^<%%7NHj֋z$-Y?_n]|| ?0KKKmX+{Np﹘2e 1r"/ќz uVt7wǹ$7)?L_rBTLXbCӦ3~xm73/1c !#FW,q GӼDlKg-pVSNE U'=zٳwtJСC= LTӉ-558`pȥC Ï?kًz$,!ooo 26=z/o&p9H'"Gskbu 0wf7ygN;=qY7G=6am6՞EJXDaa74\ 8mq96P\skr:f0ܮ_^_j͑DFF^ 56zÇtp$pM'RڣsXZC#D@R*;h#\GY.q'BCC!-~JpƍJx \2 [lD7ؤKoU111"r!ծ=Ɛ|E7͙krͥ_#YiNϗߒQ alphabetical-grid-extension-40.0/docs/screenshot.png000066400000000000000000004247051460231012200226210ustar00rootroot00000000000000PNG  IHDR8gV)IDATxSqBJ- QPkZTXK-uEV:FHiԢ"\rQB|əqb~[y~`v$'9 cbbƽ-Zy+o9 cbb f7`0DDDzy[Fq |'.wwxI@ >kq0`pB}}z{%~9Vý!ww/*J}} VBCCGY@{0Faa_Vٯyʔ)IIIjuԩO=ɠlxIj-[O<<}ٳo6 tUڳ:::~7QEEEnzĤI쏽zTӵgddHCo vիW+=z?M]&ɔ"7UU6l+Vt|@;](%ti&:\paoo۷l7oJczz72 qӧOl-//ο'դk׮/-Sޓ{cFRuwwUVV&;LSRRTlWUUIbxIbbpu*vr{H9ZۣG}I%%%]]]uVN6n(`i1cFg:!9бw޵GsΕ;lyѢERʱRgХ 57:<<|655UjÇKY, X =c*֞l6ݬ @>ɓ'/^e&LsΩյku=hYy9 $5G .*W-gee] dϯ*pՀ'Ƕ=ȦLg{A-##7*0s玮Y2eʙ3gd/tÈ>9JHUk;dY w}׳~@{0Ʈ]f]tiuu,Xv*%+WVZcErl}I-˖-S*Gi;8?\MQRR.v٪}͚5jvWWׅ O,og}&ۥKtOאu߾}V깰Pgp¸I&ŋKժl~ٽ{tZº:bܿ_p?>rH~~gϞ;I%%%_MRvK/>sss=//O=\&կl3aݲF=fȑrr-oTI՘q)Y8p. wm69̙3ڨۓFeU*aNenԤ>a&&A̜iMRN TQ򃡧Gzvp~R?~\~ȋs̑宮CI_SS=QFI&%Tw;w0aj ikk;yTh ;H+׮]SegRI'aȺ*VX̘1#:۲w;k-}Jyu; M&R&&&fYέ~6J޲eJq+7ܹs=KnOGoذAټy3R7˱σRΜ9SZZZƌ# nr[$ۉ򤰴mÕ+W<;tBB[ܹsfiӦw*,oߖZ, H}lۈ(TfU5VR v>ޘ5k6{eeeݓY/]VgfY===*|Ncϟ?r1:st{{8;Ǐ?{L^WayL2Ν;ړmx~~ÇI煅RKY.{ Gݽ{W.'""(RӧO׻向#GCXX}S?ݻw/R(L-[e9zPG{{{]]#裏dP rujcc&ɶ%K߿\{e ;wX,CLlh97UNNze?տ=\ۣVR{K#޽+n޼Y\\.G 7ONJݍ,r4.]'8jÛ8bcc(Ǐ˗addԺrԖ-[n۶MC^R̪SSSm8V,WÙ|iSSʕ+qɕrW.UU!OJJ***jmmWlnnW;.U{zz]bZ[]v566>zH6)-ZRTTTh9opp&:S7E[[[u :::8t찊 m\ ;Imq2{aqqqGwTR;v\~]FWWשSfΜm cJ+֩,nݺ ׯ_& 7nu)e+9s¬dA}XxǷbǁ7xt5Ƚy󦮱Szo<033~iV@L&rgY`0{Qb?.RK,Hg5LA,<U~ ``"X<0̾h4 Za0ah!WgaNL3Y7ʰ$r-rEr]rurq @ h_@ 4/~A h_@ 4XJ111!|`cw@RHHHdd$_!aW@FpppTT_'dwO@x`0o0Bx+̹-pA @8ȠA !g`(f.@xy34x!d"`<@ ~dLhC|p4nffkwf̮Eo"`PAQD)">@T|MG5Ѩўc/h"6mWNkuQD@ll,!!@&\3a*>/*n#%@?z?7o[neee%''յ$&&_x,YҥKCQ222RSSϝ;w;vm{RYY黫}uvvXoɓrUj?33SzϞ=g >~㌌ qK.||޽{MVVVM4#%%+==<5 $hЄԪπ>pjkk[np°㒛V^u˗/|ŋK.;$77ܹS{㄄Nf˿+!JNNdggG׫W-Z$jh'@㍰m@BzH*..ɓ=Ctww?~X|_נhK.]xqpmii)((x<555=z+arr_EEAJJܿPģ=qℸ9رwe]]]f!>}t-?͛$$$!$@#5 $h̜93nG=x𠣣CS|vZs_^d]XX?jϞ=_|))) w->z=⫾-?z̙3-|Tq3񥶶[n.?y?/@NJJjjj7ʕ+O!?!!@>س<s)wlٲa.L6@Bf۶}+WH{~'%eY mdCs3bƌ )S( diiiiHK^,|^BEIr!<{a @I40+@xa2eD!64@Nà,9ua#@82uTAu3!4SSLQUu")n37#@1}t۶)´iLb9 0Pct$4 C@LρK -Rdc7&qp"( @@}3=S$A#C˪`# D dOg} *-a7C爂q76 @g"&&s5C;`R&1iA@QW)@0=zt F4our-TQfrfF\J:|}WY>sog:^[mm&Ww /WίW9_MҠOrg;&习U9rK+l5<FVkE]=1YRtoW'1@w5@`AȜ#}ׂZ$V+ZzTrMmYƶ2~PTf70.zO#;.IۄU/Vu{W+}䗁WbH'  =j}l},%hjgxQj?!C* #́喴+jt :ZZnd q5*RehxPFCwtO|֋dd{DP@ (@gqP~kjg8ިLF[3/>Szu)vIGlAOR_fQN5x@8|r&I:Dtpk8cG%ank/F z`tAlVw@v4h !@7+s]R6P\Ge5yec0RJ^>8VbVH [7u~I S F?;TG䘎qweO~bΟ҅!t-r^%e8{W\E/3$ 7 4-@yo[RrYQ1LtURnT|mǠA~IY?fZY LƸӠ_]9.5`JGIn0>6>H[/ӴIޠc\9hVeDM7'/ɻZIKhww/>sz&{ph:~AZJ K)z~}t` MоskZ.K%69.Z!i2S͞_K,7AQgHn}N;QQ?4d-v+.:@v4hr\#g^*|[gl_bsݧ ,ihT=|vU?1+kn+ҎArW>h* Aё3۠7NQ)@W8WApZMMO:}8a]/VoK~9$PӠ @p о6+jLeQr4Pʓ9W{hqOKju晏Wd租<2*[2Y٫+.elY۠W+WZǯ`k_w^'>=zXxa7?OZޔ  yp4{Mo7"M "]npj-1@ѷ%U'ema7}h>5\:c`/]O%K8c%ho[,} -p6 jXzK#@C؍fg6d5r+cSp;aff7Р @q} ZQ&JyZ\ ]ǥS%V}l`ẼAz`n5 +g +K_~u14 o\arBݧkd,fZ Klvqw&dyߋYA {/z>ؠo|^.i\`TeK]_e7Km6_>sInоa7uϖ_*[,`tǸ\Md:(cHN~ܪ]fLj=sWwOQC2?_賽KK 44 [ct3IfSw$1dX_g=i~- ~,>2>ǬV7QBKMifl8Pm5]ƴ_DGBK{@zm^.q{O; 2Mip)+"ڛZ] E+7m6轵7+H)' @@'Vqֲlѩ:~hNtF{^t*rGjL?=~EiH1KG0[mƣZ/Jsq_}?Dtp3^Pl"zO.NzaA_|2RfAz-UGmjۮt9{ 7~G԰R:OF\!f– !]]oէ'׿<] dax̳gs%$QBdj7[(zјI]LZRTpON|㙯eYo=@[<[Oq}j9BcT!da9R<2LcD3ք~.V 'Â3п-Fp8}~O}>;|Nֆ\LҔv3#??CjпDUUrM RCV\ji{cO?O͌HShEd[%-#,.lp+_ Q%9WkN9?D@/C*F1/ <2kgihdd,I߂":&*'EqXg?Q+_Ky@{>7p@@ t\&sȠsc)$JPSU:c;-5֝Քv%}Z3{`'[m9菵U!:vXz־xQZ]sM@)_+Yz# s%'6:cԩJEpXAcL[LP=s ]-X=>6"8| dG  hWr% Q=9ޝ'{tr:C t.*gSu8F{YtDB/jEf_ӯy/Kʶ+s.@sN@^uYfZtM&>݊ܚ.Nj +b:^'*fN3:BbD%,Q n;s!h_m|,5hnvJ[B 6W꿝W0TGx4bs*߁vFo4/kmH> jeKt| V3HΑf~~fd3d#6*A[k XlZgohXB8"P@'E9vZ{>utTpF4{g'?fTVw2Y.:qpЫ2s3;gus{ v7T,+ڮ ! p5_˗ѓ᠙%Mn%qX' V٫wZM},6)AIښ]JDpGX& K49&r_lkl}ZhB5`'æ6g̮35t9 hxЇ>Hɨ[Βp Д?B6xN:xE'XLZe~˓-ӆF_'{ R_?g uU{UT.4ASSP?Okll}Ĵ)g@K_g۟dTm h C6+P@יydTxl2+՝4O$7:S!%t[pAw qKdcl{ڠs >lzVP]@@[~6K_9K'ՁS{TTQ3 妃:͢46','X?ѝ&hASCB^ˁ"2f%\uAO01 VIDg6EqE{~ݲttהv ˆ^iѐ8&&$3M$,-Il"SXڒYl6m{OKZ&'O'#lLQ!y+$Ƴo{ڰtЛ%eGuЇhK{%]@[e[LS7?(3s2I6eYikÂrVIOZ"ZZ^r*'euWs4\AgrPf7A+];f*AqCtZl9fgW p|--UGE~6/JΙ; yRs%6/5gє62s հyU7xdS8P IG+eYQ#q9 @@ 5LڟMЊҚV=8YZ)qIxVL4_낀6/Vy]O?B1KvJr i9O##th=dqh̾smHr2: fjwwS@[&rЅd资|mƒlLtA9uFfͩ#-] I(t pТf}P)4srVfqˡqY23,Gz^:J44 %>h\F'SA{^Ynrj0\R@QZ턃ΧJydQ[: h2pA뉯׼/ˊ}(ֽQ5')y]>)D@  ZB-}+ڼ-=Nk/KnW ! h+XN撡7 WwNft: dW7E'i<1õh.!“6(Si{۶],‹*rߪSK@[ X8ONMiwI(6-G":VDզGtiG@%yOqr4>8m8hxMMٲ;4^#3վ3dJngQmmA+BImf- U]ƛꃮd!sjڝ!\% J;:JUfGlgNW" >>;seYV4 B@[; +i2SSZQZӓ -7hJ;w`-a>ba!M|mh}+?j#Iڰ`F 󢊗eE*NoWe9tЫz榚Cݽ%+JSN*djZB& uu nʤ頻\Ǚ 4 H@[>"_'ZʵUR#5&K@[q℃. 6o uZ"Q%w_BuS~wDivʭs)*SfHJl/U;ܝW&WlZN6xM  xB dcC]^m~ӆ~=])ǧZ~ͻUV]edCphO_ʗtNHhsa˫:h_%<%o&llĴumy}NXGoMi6Vz43s2XKx]f6Ѐ^Q!B?(Sɀke7} ^ g p^EPN X6͕2lm WF HF)QF'dI4!gn rCFxlZd6Wm]letU7D)3ڣmaYZ,mN\K9/o]53uAm /l4ֆb4/Ƌy;kXL HH,#^deDB+"}s/y'4J*k;]u9 @@AV,>b<# tܬfs$S8htdH -*^A:S%R=e V;kuhF''l͞S%d ._+&gy:?kqnM-,TS %d6$$?*$V5@WФObaOM<{2q_xH  |Xzэqtj9z.%-D@9S,+U+%d&! 󵴸O)A46blE;X svaywv_0ϼم+|YNQ3zfΛ=)J䠨[BlcYV1~L[||044 (3o6DX<ȣ~9δ;j+[?K 22Cx].Ƴ]5$ pÔ&$IhoM3H*~u> 2e6{yL^5\Z_(·;/gr7mBls8h п7Z`$RZQ6+5)Ւp>}$_ ,##H]zO! D1ϭ 7LO}dPQJv76JBHCߦSzOET>C_71AOPWSut^ &z[iQl s<IV+RJ%z/n;Bf1tz|fsvG=va4.escɐNzw49 gq\UTF$tK_Cu>Y/|&r4>D/UkFUA tl  `OO衚}NG  \;%fs"/i{NʌU&N9E頕KD$-4_ ʨ^5[7VuCm>ADh9Fp8>}Tph_ږ"M JV:q[P Z%j_#F=K6 h` hAgY-#tcl~tFs*[堛6ˏXrCf|k[t&ZwJt4,hr 6a4D^$ TP0 lNknJ1c*, !4 [xyЧy^ݬ%J@;OS|B+g2!-lWZeC)ދ3CF䠓#_A(n-t)&h=B@I̻At/K: h`G hdڐ0[A_cl~^ݔ fMΙ=γb[ܒо.RۤMWCO&o1*C_LR"-huʔ\sfl))4n64 k6ϭ44>tZQ;pl|ev;Exg/S! hAi[5b*(ſG+?+ɴXEfgxct tj} ޕre#E0ЭĸKPeg2x#@ h,Acl^fk?!Ͷtp-]p+x 1 7 bu?^Y?ǽQ7U@Ӣ $۝Pծh/^Iږn]*҆Rz'm>^4 ЮfYn5zJ~-݉FRڨ\ Ʉ n_!ګz.?ѧBIN8+wNCP 4٥\dPF@QtYmK7kS ?R~'_v {0ޡ3yLPԎ$@[wt^ $ˀ=Em[wC9Ġ܏S}Љо^p+7ݣ t!#ICֳ+]] uw= ݉c2\!h4MִbSQ/ q'+spW꒪vN`i]9n' "Hщ_Y:Xmݝ/'VPBE|1~-#8~}TݐHq'l(p*44 оvh<|wлIF'M PԎ y07s^K0e푺~ hr{D5ߕZMIh9_~e&#y%Yѝ uu> A@qy+n5ȫwE(ZfӔ9x>X@fyL^juC|hWVi?gtW:h4+n-G%A1Ё^}_ ?J:1>wCu1y@@Auд6nv%{(+>vMl ݿ gzW3܎M@oih7V܍Lx_?j$ѱ? h;dwNCt2sL rp>veD5b*ɒw2Rz/ᡚI{Os !ho7=nt +I8?]T:D~5"6 euڠv7ZW@E'e=pswЕh_g i"}=u:頝=#!yei6S1c@mr))?ԅdB4= =(=z呷?2wy[Tz'A^7G9=8?-$;vAX(y\Ԕ]uuОN#9 .wZq;hu뚻_A2jXyJǟt%KoEE7v&Q?=7r t{˭Véְb=.q %:~N>|wFE @@Md%7ڞT{qnNqW^b+G~Ǐ0W]րyKgVv.Q@:}e>VQ"AS:16Яԕ/s:+KK@=~J(#?:?+~n p#5v[NQO1k[8?# }a!,RCt* a]mRKBl5{&>Ts*q! @@оZm{ʲ:L;lfoHIЛUIii wy99rq{!Dk7JsЯO(kd"g=Ŭ svmk:r~gr ґПG|I>bsQ4>L/>1tsRo'?!S<  @@С,'9/lڕ3&V 董lkV/MeYη.y_k:-@Ykhs ^Qm^;HCZpJUp>49Eur 1Dyt,A@{tm]sD]6LvEfukGJi ~(p09:MA%A;zvJ"|͇1Ix砃e@g_2x R&3!hD( RYխ2#Uɥ1[:ji=jОr YܶvOvn])nI\C/, :CkAQ3@k_F]44 hSߨśj:1jiV^cin T:,_?Jg(6+mq `_lA^bւ^yj[ji'J)ޯHsbVpjܔ}* |dtI)[@qps[)uM3긚 @@nwG-]%xeVV)qr.7Bf/)jG`}N! NrƢ ov{H†RojWKzr{HY~@AS/嶋٥\ZK3Jdxu&/ݾN!h$E@K7Rj R-P;z]5²dl1$-Ȁ#[KT@E'ir0i9y69{G-~U,'~Wܾ.1}A>`BtJi4@NkQf NqkEr4?uq4"75;PYdqxV!;B/Gı%HtSES+[6tqsYfX@m[7o]F$75R=-s !y?B]sj{tuT@'jt**p s Y*n]*$4 d h}ZOYVkD$_9OD6ѵf-&h݁=d!jmȈe7#chVHe帣>דǐ%k_yNA";Rڃ h篦OEQE)7 vפDqW)ރ4?Jy]T<j&'|[S2zN+EN%*{n~I[]BK{H7rrh;(4 tt 0 0&J(ZIgwV8cΘx` _ ,۸ʾY.$TB(vu= 6HHRR'e&ݯ,7'GS2k̺It$4 @@ šY<謨J&79٩R ]uB.W8;軤ƬBAj $<$f Ѡ/^V'c"}F\*ʢ'4^7t<[ uM5]IYmtoԬ U{i*% d 5sr rh:-iQ $Z?:#jҢ ?UV9i߷B[LKT!DAW"˱Ƭ[xOUf_Gc S]irܛ>hA{F[=,!6 }W.^{:-J2eC_]*!hl R?%5EnsjSzYk>*ڳ8`tꊗi0zY%od_-1}Z.G< Y&cecKG@+S@o ZJɬs`EkeV*fy[>骎xJUڴ]PbMsLhC@whfm>}JfΩ4t* J&t^iE/Rcj!h~iYyʹrE窪R3!> )~J )ޠNL=i N[Eu\=.m:͑IuH$).}g-Oɥ*NRf~k,U{cQaY@#wnSWY+ݤE7:y3w*v< #zTcz+$6Eè=f-B`B4zLV/Lߗ1c 4^KK" xmRM;_JS+웴4,n}LJ6/Y!ZtC[[-CbX<+W#{֫9a/]V\Yʬkh|u$vFTL p4ԩNhZTiJF}99Pu1hxn(m%D]m A4w^&`hov1A=`a>{B,"in{/dMh?`랉5`ngQ]JKS\5h ^v;^# ld9~T̟s/5<aPܬ5fݠG4/TVW6AE*c[T՘7#m ޔ\{zDVcu[WKNK"v;h|f?d`e;)]!Scb~9TYc^1T>>~X̞.<i/Z3s:~vЮNަŲY 1'fq3ZsgKO d3W6DB ZU)%+"fn[]g>OQ3v+ܝǚ !YϪC|Z˼S4Z퍬B+\ BGPsD9t>7r4 M*Um?g|J[4 n6ݖ ?~>;rFee(kf+ݦm" 5Z^ V/9hJɥ>rO:zZfhQ>ASmx]c4 s*fu%zHK{PV郾 '>s\WA"dMw <*φpsf=BCFQ7[vXh.kо'K|\l 'vvAYY^8/]J/V.p~S}j⓻5A9|^!ќ ^F_ԑp+STC4^m=7i 7Tθ ?O4jPB0ZDAmmCdZ Ayya/ձ@@?! c>>'ei#zJfOK GqѩSzcFs <-Qf  @@;!?6K:2wIfK6+^w_mRwb~ Chm3j9g4$+u#?wl! m:snUnѽ_b1ԂbwW&;&aL*Ռ4 xϢ%|fN|Eu䠍uZk2+,*O4j4i&+&r셰"KҚئgb+:{+5V.qNFzu/{ͱ튫Bwb6 Te ;  h`{ hW]$z_|ԉlA+; ULMń;}|\b$t)*Ϣ|idcHW 6tƸ7IWY&h,ՆD0%닥T!>ݤrkŋksmh@@Z@/J+C=(;sja!vIbNAln42ZtC5-:ZA,Ǹ*+619]EȺTwVJ$g:h1RfBh hs ]}]V1'aYꠛUck zt7AoWvF$KC7qڋ.vrOT@;G> oRYѭ)[]}|O|=+6hm8J vϜWpڻTy3 h@@X@'4{g$fZztV=*Q愖J:[-?s[&ks/IYXsl\VԅyAk_ G.3P{^av9xpa7yG̝jy|=\@hc"Vs!ij*%i-)^ީo+Iibk]lx9vJ.5űSn९l7}Gb_$VZ"ZUWGv"T/R5˂*6Y1n (i>iꜰ  lO;CO:_ՕdD]nfĩ>.{u"TfC4&Vl b Ȇd9L>;Bזbq _tL wHa_9i*+Y6RRM6Z(u9vB,69rx YdX@} hOėAO^gYͳ(j}jO-$v&\{iA>̆j',ʌ~7AߤŒ$hzVsUHNh T7)j/2s!+"SyΜ~H0s q^s:=Rjm'1s-~\<޼Sn hԧ^σ~˦C>0㜇F<& OH wWGdQ=#- H l6;#Wi-M ^7!wYisU.2ɵ_Z2-0gD@IN!/^w>ލR_F6`mR 0YO 2f!/D0ڼnPVfosj5t::*(e h.7"ot:M>5'Ο>?|G><"-wHi°6%] N. Ȇ4A ַ#ވnSz T hfl*ʔÉ'߹o>E˴Wt7A_v9j-1)b,-Վs11}>Lz FsT=AM44 z}f=& ZvݦE; QKɪorF.ZlKq>pNI m$IiRQ֨I{I4о9y1Y JtA;ūs!%+E-!:MDFxSŌj6K+ݻ+Ȃ %9,w8YiN]st4A{ioH\A{-vy!fqK1:h?7Ѫ2'\ M,?P7cUv Zg>'vGN-oFs*׬ qUf{RM瘓^ 7?yEF6)Vj&!Yi HU}L5jrМ$:+$r$ iwHc_5X{ &w˽[-e2\%E!L&ʄ!i9\}}^Y,~zIֳ~UȦZkZ zOEpxd-o&n($.*#>nu%<])VT?#O2v+C9<|IN?YGtDY E?rZ)0G4Vl"@C-4^hL:l@@xG=>|_h;KnT`I=ԝ؋:樚WuA@ܖ՝9hC+b5bNcyY/͉c# 7%:vFA>4ثmI;vx kyHx 6tпly'ZQhY@7 CsYIɢ"ҟ؋k4V ١;dWI&MM\Ycѳ"£:~G6s4ݠN< <2H*5uTa Z:JmRAwnu!h^@g BuűJytXvQ ARS:hu=8b'Sdə g'Rmom.so?D/Cf2^-:Ў3۪OnS>;ԙ$&F} ?\ph\@M|k{a4ey7v8^k_nV#֋,-$6]LJ&:{??bMիహ0<#F@GSJ\o'paF{)2[/:steԪnoOEܩ)]Zb6[%,y@@8GV] A^QvP A7 MJ]^[A;dKºt1^l:ZAcDm6 \E{pY h2 EunUeC3.k'X2 sO,_64=tMP4Y=!MB@Al NmBaIpeZjn LSgSe|O9/*}?7EClvP6A!>T ^mȴϫYKFОҝV bP2j<%lB6۶} @@EUjA!9$ZEت։6M{2$I.9hquՈ&sz:៊Rwمo5KtzG2{޺4V=tCesqĐiGW-@LMݐ釠7%<1[8hGk9D>먃:,=<k>˗΋A@@?{\\f]._%C|k!_«EB,asN ̔lqQ$t%!5>iˠOVki/-Aw윝.MQ?}T|fvq\T!6}Vl)2hv뢨'!u]r6 QaɾT"ƿUJM+~& BTMk;|F9ZRFo lE6Q~H;6MjDtCЭnXϡ42B(}6ɩf%9KD=gbزC{;4 GEY)l<7ՕsЗ佈J\@o輈:Q'6OlmA+J&+aT?:_:*QtYyWTt?U]5_U5C9UbIX]lPݞhW8h#9i6_+6ҫ!hK@?J6FYR"Пm\Ct͜\+b3NA,d8l3NMS|m-m4t*Q'{yzqQ†o&n($vWߧsо2MpHke'̐&Vs'MJ(! kZzZvQ~kj$vВG±"G'wJצhWV+~rfXFo9<6y-ԊF}!9gUO+Ee;ϪٳmF2#B򿯆v&Ί0ۅfg|sSݞڐZi9T'6zhh@@ʢymf4c>0π0kAB }yQVw~*ZdzE'PQlgUro6iq4e!#-bPVpsb= =kO|An'S[ śxr?V{:zelĶU!OmCb`*a7D)動|j~h@@6&ߥ Zd8{8{f>.lz\|qIݣƇ9 ]6~S]*Bءɬa=EwJ:Npi+-.SbEl/چtFTQ$Ff6:wVydLb[+6,Uyʠd!CjwH. L>ϙ(4iV::yL=}О9+=&1YY!=A'F}]^VU3$qzKv u8#x6QM bieуlUƾUMH ]փD5<ƷM;Ɋ83.[sCYpЇ t)_ziؚB@CYMO:;sSYئpоdmZ N9Z-aIWHrPӥOM|Nl4 _ᜟJH1xJ2΋yuDV^WI".E934;xN*5bj2M(a~+Nl⚴عXj#S"ܫ^f 81eJ*ȐW'ӧ@icKt[ͺ/3Ѷъ>؈!^|9#,|e| +nIONOHLLo;ijZlh342.S5h?dc&}-#бVY-nwP&-Sm4Yw[sw[yi6_Wc[tL}|E}pUGCПITWG,:+„e筇 dQU֙*Yr?ڄW o4. zsٙymڜc7/6‹J NRAb&HˠGv-YM˙h>W!vLChZO1ғetwHuy- '蒻Σ"EW]+6r$YgWNVNa[9h:zre|Nljx44:ܟhq_6_H l;MN_vjㄾFSl>hW6[l/[~w2ڈpmü}(Թ_0\q.*{TEVN#BTͺBֆCЇk Jh{BMiEl/VF~W@  @@.ڜ,-#\E;w熼J2}IٍP4;tЋ"2wq;ʠuuD{&bssݙ]fn?& 6w/Ո&}-/1tQA]&}.?R}t]a=A}:JU2b7}D{"m ;\1bwh t2ӊMV]R"X Asty$ fOlVԥ)-ݖS& i6/WqoF$_q^*5u`_Ԟ|RZAo*$Lw蒈WGV5m:(6il-,psz̞:L2\ͽfx5o.Ug4 :q{6hWku!O%Ɗ: >}U=Ǘrʠ26[ɔ:Ϫ<)6Wf:siv)=7 裙MRaN'B[Fx%^q|&tD7ytF{@^o`Pݞ95,H(:lg})C,R%֊X;4 U@YU&Ye7%mnX :h/LP7n3ˠK(V\li ö$nV;~r4O=˗FP@_]W$}P8{l*B°ڡs`7t5Mrc$LӶ9oeʐ6DhGG6S*jXs6.YeY#K/%uE],MWxQlT o6M`dŖ9 mVdMbB6Qfy}Y6}.__ؾd hA;-{Jb"÷‘M5AֵFZ_{GiG#+ ǾWS0@QU^ y+>RTO}4߷p&% Ge+*f C5oi]hh+@3/,^x~@8{PdD=/ħNd{AA 5ᆠwe:m]SL`6R='\gϼd-o]n$C=zp6%WX׵ԶhC?gWKh7 t zANvmB5 ON\SV/r`3#lۊISfѣ&@WM4p8K睟.&{#Lrxor&%} Aߕ?0;򋢵e6$;f6vf 4PAWS,s3 2^_dn33a/$hrymؙLm=̆lloU]Oq\UE.Ч |=إ~~篳ZJ[ _0<ۛ?!ę]R847m9̃MxN~(1 ɽIu 4#7Х56nvϣG)OB.>Z\hw-?(*$ۛ4lWn,mhϪ GU.o\7W>O?73>N=jSAN|O}/my'qW/2t{)Cgܢc4@*z5i5DNvW2'{6 g A-_^8j dh}Ӷu6hլ>@xlgW/ܿ2ßn[d=Pe`8bS]3֕g_=pHK^rD̦\hWG? @u5tt}?]AAvr0ԇC p{@C+ 2F뚼j/j|_!@_Rx6}W?YܬAq 673G4Fχ\,m-/s8LgiN}Wcj 4c+++}6 o_&O=AwN@*;*>wgYAt@՚Ū|):/g+!NqW) 1ux.ę_8Q{'*_G? @=5Зqӥticv9 FeйGJptPCgO Ы݋O I57CH޳kصU7\waK瞟P.C: ;{(pvGz  @ijnʦ]*Psŏ_hv y!O3=ONw Ї*;]‘#A![E[sja3tkgGJU֯^U {qN{#^_ć Au?=S!!\?4'h/Z;@+ѥ8Y @o/t|3?]^ 5El/'O>W8c [.@Lde{* C Х| thn5Njs?K6=䟚]e KsI83@Z zWlP ۠4a{ `#==U>d{Vҳ$' \޳*URez oKo2uo}f}3`2'Apy=Z$zw E qܙ+C13@zW6ťuSW&+CmC]oŇB]HjӔCwO1/;bOi= O@t]#ˤANes?^]!^ UrQω?\8۝²‘۲{hum3xs![M}@jе/Ji_h3/,^x~ޚ [6e9Zf?3'B]ETi zMܾGCmD1mXe5a3կU<|U?' @c A_g|~iͿZ}q YT^#l܎? /ge Ї r*sB8%umt,Wh24'=4ut#ԠWg,ⸯF?! 'Q How@܁[a!K%:S,)_Lvgw[RS1C+Ѵpw*=T? rKPˠ/.nC ЯD/'}E!9@ExctҞTD:z9<̘Mu1g @6n0+?]syݷBR֏rYd__ʜx6D~:׷?*@/?,@g/-xEq3_Z+]9]SLAreҳ 4VgpRΎ*5:K44g7@ޠGAPWMgG}t]ei\9=Zhjt BR!ѝ_;[k}8WnУhm&̣vgh`"t5ŪK2Zk<[O^DCú/> ޠ|_,IxVgl.3Mjso-hv{oñ`6V٠GՔhhR+ghK̠AhZ;_g unu}>>=>W_73*M1gh`"tc!<;hhהglУF*L{j]>[OAWz4-V+gh`\`c\ey<=>MZZS @ieh7A{6-F3ygmcLd2~6QM-5R3i\Գ 40Nձ֏BE<9 $S͹hЕ"%HD:Ϧ}htgh!t4JZ57gSjW2I 44ږXr#턄) 4 H ѹ1>SAwh]Gz%ח3hU44 ba|v61h"44A5ahX441]LDh *d \bYY) $@@s3d34,Z34 Z34Z3L,& g4H @*hR!@ TB 4H @*hR!@ TB 4H @*hR!@ TB 4H @*hR!@ TB 4H @*hR!@ TB 4H @*hR!@ TB 4H @*hR!@ TyTTW{^&IO';TA ʢHMQT0+A(Ȏ*,I0Eq`dW((^|{u*>#@@`huvv?~T^?'!?NNsIc\1 >/ ?_JCȁprr*\O{=v^e%s6Zfk1I4``Ŋ [Z# ?a B%Vkn7,: bb쭥o  A(II~Ԩ(ojՕ$W yn'(/•F4j&?L?X/xQx|3ꀡC4n44q<ٶ-婨Nn/~@@LՍ̘n!隚Z>cCwIUԋM&Ldɒw3g]b@pȠPY066w yTS;|~g>=Sq&gaC" H}U*)3ŧ7q*MxjS\Y%-u{4C4+5uLp񹆑я׮r; 6<*@@D9c¯Bw/}=C\1Jg:hذ~:&ʡW$?ruO֮]2@ TSޢVpDHJvqv\ S̍̍-L ,M ĒK4A / Ԑ'Ju璕[zKW^:Jߟ{0`Ӳy5D%|}T>Sو@Pvf-MTqߠ5@u3ECCcOpH|Vp;k>lfgnb`ijh=m\!2ڌ14$#3钺:\T]@hA]GsF{;O=+D@SY|QO϶mkl: D ײ#,Z.u;>Q$AۃKS3Z0FYliЅg P5**^Κ5 fUeKPG%bjjZ]U9ekWzOb3#} SC+y2ڊ2ўKK˗fFJd hEiOY{us'TGs'7u@. #{jO'2'=xIED@A%37 >C  斲BC'%D"_-hÔIZ(7$y6o PbGrШv+K@cj@^&N:Hmmn^PwcKҍu|e)--F|5gFx;؞ c `xogS@?zh5$gβ,܌2g[So8cC>930W@t7S3ӞYM?N\@@3*X- C;fn 4aY@Dڛee1ư7=;sC23-svʀȴ{hu>ݽuq=jbI%i&i hV274#}<]̒Rd}l!j  -l2Yxi+ݷ:&]S@ :,' z_v44[^ϒ\(> SseM hnff)☋,q,EH3I{sQn+hzI;+#â uL 9j"Ͻ 5M2eL{@ b*v$t?x7448U#E.N>L~^5Ctlq`4`uD4{佖G !:FϾ!iB;|QZi}l~~pT}}Zwu>ި,h˳T52 G]W7ОɍzVn(.44zB{[gw%Cφ͎sͶs)3z l3*S{--9\}6>LR,v֩؈j&uu89Ͼ!VZ꣥2:4tǜyQ:h#=l(ZmQ_ hAcbiya;MM@KJ   4cD@ '5h7&QdC\ h6O|L> Ss.!y8fh&0N2kئG^|8IMSҒRlqd]*4hiiݼYK//66P!,u&%ťܺY/$K@ R3eE5:Lx؏$ f@@"- :p52a[0ы' K!!IznhIdl;еn-/_KQY" AYb#H2DRMI -)1g>toq0`hFI:t~'>i}߲Ŝ:Qeh0w`>/I@@04IyZHQׯ{etqfL=-VΨ傀N<  -5Nϸ^ȸ{?dtdhe֗/:i|4ҹO:S ƙR,6Q'$D$Y#G܀E0`t,h/3&!C@b֬Y]/eM ,U>S!_xի.ڠPk B4uy< 3Qnhh  JooݟDGE}'IaE!+むλT}=7?EkѹCtJMOYF:Sggu2'vXĉ=\5#GQK4]IWh#2!فUWUoȰh#= յT"㪬PSSC!G)IPYW/c>+E@8ҙ&),˜'̎C ܁$+cBW҃d4me4X0 6mDӴ!<4r[ݹ}>:_TMLvd>+K@-AUT@IbY.~у󧫫ʯ_=4IEW;~[qrjll1x|)3tG˗45yg-58~˜87<$wjIErӔhlLt,zIڱ4=yLyf_t͛7]G/frsF3ODBjIk+=|HC@C@3Hɞq(]C*P}'Sr@wY1}@HYQZt57z< ]Ǟ,| ao!|ﵟe\BbeQUpt4qe1gRIܩQY0\"b30>O)9D7'O.:_|$ɋvΌ۠Cret{P0׭}'OXrsszZH$JM665OAft5 hFK[&5ϊhV#=e+IL*,=r@tىң.G]TuJ͵OK3OpaHm_H]-=U|V}5{y Eǃs%Z SR,YM|îSpִgIƐP$}6OVv:5xSz\ h(HafS[tcNS`hS]U%^uw]d8ع?kRD"QVf$32@`++Q} hȦ=g;~_evvz˯Տ(zahmX8f;k~{Q?e˃V@?{gD̙yfgwQ|esmV7DQPT@PAeQ[@A5CEY"K&,Y$anBQ6{nSu{+.G W hhw-mڨyyYTZ`@a4/pN< Uw }nep?@#wKmMo6BfXz@u<㌎ Αϟ>yrݾfDM}x8_mW;.owt$.hcϣNdD̎ŌGώ>.q43XQ0zaĉ yPC2442OO$ϭ{E<_Ǘ~VNPg a L/?qL"f@aop% 쒥t@Yu&ۉVܔL$#,R#F=0Kk>6VšAw%5D"eN&D 4gЄY#+LcZtGG%>$do:3 ge/rU^V6;/$!> ^Nԫ9\v\ RИX-U_}\/x\\͎9ˆ:v4%xZINY^Y~9-4-tAr!Δq~~)@?3rMW,]FhS8F!ΛЊlgG3cL@/oF>"ãV[yg`uƚⰷM$:lߩaۧ `td7o +ahV+KLdޘ;8Pf&chjHWaf&OJX+at^/o\Jh_!~S24Ҵʣ4Wyp58Ї/5 tk@?OMRF8njWRL/T\R\P2}Ɲ<#gxN03( {`P.l>*| :u1aS(#3\/#q&'${li^)VЙ̝  +zU1f,J0zK뜉i F jQbAD1tn8Ί3%j@Q7o$wmR`No.\Ŀ5BCYY,ef'GFF{{غw*'meq|ׯ_&m6k|_n##j YFZƮy%pLRY2~ɜ>>v&n;@@UEt_̬JbRT ]`5 dT" AoQii)쨅z_v~F\k @˹35,?|;d:@g9q̹6eg7cr#Eey4q==ID*ty<ͅ hNt<.wnuA^}:9;] y800qߵc͸{>U=ě}kaa 9!īm| -ȌC`f_2?B-HS*T2  Y]YL/+(/m~ILХ%EpdDrHˢ*h򳈰EBJ@^19I3f4_@."ۖV(lGL#Y'xt,&c3X6(6L*t4<`lդ/1^HWK ޾aMנ>p#cw:plf5 O.).%a?~} Ew3"`8b>0h} mX.>@o8hꛟ6i>] k8W6YSOdP hh蔐'XoZ2B@m yB/*\@ДЦ  *г"Yf8U*i+ 0W!^ou@PgJpU9EB0@*4366J%gys%D 9wV@g8^*T]d|wįt{E$M"XN\ mU& C.H)juƧ%S򀑡dmmM>Y^\ԻiV}-o߿w;.疟S/mXgCB>~NkKKXZЛD2)|*|AEz'77>֢}êЌ*Kh{JMe&-D* zfvܹ>=Д8ʣ-W吚{>> RP@%4hЫQ\.{.楟-Rd=YL;Er܌+5%W^ ^E~쒫/'g2+i>_kSmS; ]aWؘ2)v| yL>hLwΖ-)+H*G)q}a)j||DKBtJ=pW hhhN_?4lfUէ^eG1}}*yqG!yOe+5Օ@^q±QC}-F!~۽rG@4} = h$.Z:PI`Ł>2,}f=$!,~l +.W hh̄ԸԸxf{v zmhd_|^veiaSQ^@xj/8mqGk57<-A Ъ}]NNO@0ݖ Zr^b:6>guBdgedAF/232?RQVu]tt "a֖[%ŅtcC->腆w s\ Cyʨ}&g =W:U]ù7T{Q{s݌_Q;z ]X[袿awj::^M/ Hs& j@K~zauuրFGaJlfƝ?܀CgJb\||Q`fLJЦOD7P ƦOV[lafKZs4hqG4`=icZ"Qy #*ʝr3 v]_]]Wۀl{r54Ԣ؃7{A3̢t[Q\/IXgmKЦJϺR}V$>4̢g;cVk;rCf϶+fu2{3e" FG = ̣Z4&%ޝ5y2ܩν]mo[WV[7DYVqkpv_P  @vd#78$@C6S]prNyC~B&>c|Q=9A 4ނHh{@wsoQܢh[]W?1mQ:! ޒ-8Vi!ГhQWō>2V;W}G规USd+ \]J!+444x:R Q m-d}x4LB>p|Y$3D"4 |>@0*t pЯB&\bx9kޜefa[;{mf@[ʇit ; 6>9QB\g}FWvYBm7a m4tXsMumyY4^7۩zVFZګ0TQ ?/9xRW=zTwV>@k46Th&@06@ nQVZ-6g@iin2LƘ0H!5.KK/BFK]fO sp߯o_y#$.E8KPȨ76@[6ߗ]4>QFz޷x4B hDRT"fNj~LPI}Oc{9rjfCGN9~t^.!-5K~?ox \/n]) sx R=n˗w4B hZtdES+j )?z۳{?:u§UCzHaA~׃p=T ͯ<\݀AUf&Lå?.lˇgC\kE( Ҿ64\[S588h߿gGYKw_44 Z*Zg\Ahc8FN՜ًn-m;wEsg.As`lH"a\}p jZ$AR  H&J{[+knj6'*Om7k\Tg̛co鷶4x,@;> sn|eGʹ$VJز+UFyJq-?yz6bfxAEƒHkgxM 5N]. LuzyAOFdMWcaVΘ =T$쬼hz /m6Aõ6@ r/R &4 I7C@bDlF-8fe]xm23m.73=Zd=q ʊ2hT z~Da%h22CUӶ2ԓRfALH0 ޔ'TF(qqKlCedThc}U4%?qCسg7khT+pڴZ U!yUw8X_[nrRJ4fОą U*Uu+j_Fh9lWRľFNQ2|I՛ l϶ tc}~b+hT# {$1FRM޴G3:@p\ى#5jۍ:m7Z>+__  )˅@!뇋"tQ`-~w-е5̵+7;nq5+6>Cnޛ;{&=z\&- bπJIկFZE`ȠemU$p>-Kbq[-> !I9H). -ƒo}T*j 'q;}#Sj'5܅F|è矷?w4\hc;s9+,4gڌ~0ΒK2p?X=ua\ #3Ru$m7<5Yg[./h˅@!#׏ԻGMyx2'ba 3t#Z$^8`'gh4aaV;yÎ~U[EzHjoزy.ەKe0?Vp%G:Bk3٬g 4.@E:Z۠EC.>Orڪv0'#+ΆNZ.,kϧ^Fu-8$j"sw-Sow;mWZ`.J<넸X VX9>ן%Hνa#hӏpe'O8uMMW'ޝi?Փ;hJRe_a<@].  {#FVtp`Th(/Ih 4fЫWl"9}xeECY{8:m"8WZĒp%r >lE( nf2nU6dFϪ~ToyؖZߠ=҈c9Dz{y=Io1Rs ˅1!HBnydrfrm[F$CbrHC'rNRj+Ch#6 M*Kl̲n' V xͽұ^g\Pܕ9F\ىd?G*Z bR e:6bo%oD@C GЅunk-A-°h%'ri&$>y菊P23h^ !LqrFRJi qNtj"=cʌ>@к^PRoiiP\-8,>O|M0Wnq`C0,+hZ C}=Ԛ8(H7{S#FՈ>;&rtYpH( jMN_eB{יvmv](C),hceׯH:rm"m7jtn,x4zNz4({' gs6}m7>.zSY^4{tϻYi[F{'t\R!S.@LTY@[ @@t|Noo( yͽU,a'Ϫ葍4 C*jpM|$ nDw:C[%m 4n_ v5qJ]ӣ\#un$ڙr5d>m qJ$aTڸ)//%~=3f~js |g<I3o<>{bkZ~;w.hhS/ ;uoh . Vۍo<=k_O #StށgKutPkwAMk3ޱm;Z bPd Eź][q &]EAKE@¾&!$`ygdE>y䜓s|&|ڽ>v}=|irn\?Q)%Wwwu4 ==Z~S6qNOt}OO <-Rlx~}AS*᭹;O% 6fĻe` --O5F'{t'Tߑķ ǿY󼐒L߼9 P耤;0f=9pF̍0ώ_YwcM"Q QOzz},rU%kѕ_F?ΝX?/ Y9@4FK(ں]$tzVݎ!;"4}&# TwQQ$LEE} ~+1 æc#vMgG؍8Fˢi$-ɕ9tw\Lzܐgrev1lWV@:EL7`SCe3MZ57Я.=$@篰~Jm}tvUa[L..Qu~;(>F 蔶@C 4h_LC#*"hңItLrX:Ss6-yf,CbmclK/VCmjѿ#BF 6g0hXttD 4/O;3@2}CEn8yj Dln?8 wv'xdMx\F&>@!hq yy(թª,tVp}rtײ; ţ~%|\jtQ˻-]B "59\܍JE8a:F`1єGc$M"fj3؈g|3΃K1zvLg|sMťQKb' ]qԣSH}Nf y,*))<@ %VS&M~@O FAA;֜5nN| &f^.ĹϲjU,B9^hƏ/4 @@+R[53W. о35~Ʀ?BrI&"aЧ22.r;@گq0 :|5]6%|mjSj*Y\%x$̓ wzgҝiK%9&V^Xlim/t}9c~sf>ؖ-_} tzH.q3u ӣ`LӲ5[?Vb\gnV3Q[ؼ ?fqX-W$-.̣s?lvTH6K43(z<h}7?,K,#V.(^tˉz(?g-av'ύ' Ez{zQz߃{Nޚ@s9+X ۫YqdJ%H( $kl 8L٠w-y^BznHys' Fp(:::iiBa;1>6}"Ѿ礄d )I`M+jsc:X?>b(F5嬋؍֭@;[bzsf/]D49Z |&]h˰7r)>s|m6t>3O}@!hqGWBɫ]ewIK\pT|l^];tq-5aV7!Zz>H@AxHl :Uxkp8l: 8›B{14NYY)k&fk,2띗DžKi`Kum@U3EuRǎa0hcGH]@ s5>": A`ޛoݩOtMn9fUʾ@F4 =:$ 4n.9+bsvV^uH?Ahޞ-pVU>wt@5 2gã)}^%t/4OZu+n$Ic2^LM#Yb}9g_LsRl oo{~Ҝ={ncyn12mdhtgn?e6;+Ki24deR=;ɻ@gnNO^&cTCk8aDlx5&ɨ YU,V]z=68)>k8A Vꅔ@@?}ee\.%rtٹcܛZt^Qvܛg-+VMx,Z _0 & 7y``@$ Zbis"$Z#pN#<=q2N /L)2'R[;Lҙ@g%⒨뻁4蠪]VV&/1ڲqu2^9˼hX~yUdA&:AT1vk>jU~>@kQQƆz%XB{=/. BDJА@!hШv[-sZ#ךγ|!+Y*5=xY. )bՄ 1-y@@ șy8l@@k@s9xrE!v_FT+8Aq\LsM4;s>)奝":[*LgVW9ϿS$(/+551@@a&2O?`}=ҩ?~_45̀~'AssS0:a O?˅@!hh-ׯ^8ڸ`R֖ϵu]X]0f* aUV(ګΉwk<ܷ@g> GFvA֑y%+{ƅ>w&|jo跥o GE]^@EKkכ̳6ߵc􊊈ڼa *݈!wx_*L*0{P=tM ; bnW+@ k4GtqIťQDaE2 ӊ fInY#qt8agNv gؼ hl4hvk1GWKPt M u硧пUCU-N[ 3h:hx~kZo4E} @]SP @s-kH\"5܌g::[z,Ԣ;NR@&wnln^ֶwa{JuwPt9S)ÃjȮ? s~5r<󮃞|,v5T= saH$>B 4U]NX* *g@&wk4o4YB%Ɋ$*y% a7c5$9ΧIt ['bsZ2l 3uԤu跑Q5-u#L<'&ġ n'3|eBՓSs~ry3ǍϾ%;i vn㲡Ȱ 4dRVF5xqݣMt<-{F- e*,@n1ag-ɲ ?'QE>~V ͤ5SlJ3m3}17@5<ӦMKP'5UIqu+]^:Nacc=:yڢh+craw@X-]p;+/z ŪvfU’dx@ҿ@Mсv4L3hf^tMyQRȪ,kmm 4h ?)[/ ?XS(hmid+{^VQ8N?-n'aħd|(sT(4S 5΄8<:3LД16v3w5%cE&ϝ Ɍ Cjwd[Jg2!O=sxdaW^ZIusW]՝BN~@ 4"? }yIl'qWpSaDBT8VeY]- *+*+˫XfUUEڌUCT5QUDU:jkaE_'(5"dOL|ɣ A^zW VQl@s:LnR|Pcqa|jf5c,^kL7Rj`&O|*]eޞ{ԯ?o[QN0yCKC%B_hKb~IfQQP>9ߵ<3,2,aoL}jXӖIMU.ީ?蝤ՊBN]V!Y/kɝԔ4KiYg6(<YԦRZCb*maG hxٸph'f-6:n\~YQ^jʩgӧY3OjFؤ$' Xz6n:%)#,m*Z9>6aa _}+\^{1>~ܶGs-|[+.|rɒŰ`ْ?^6$\.h~րlm,Osm-nxUkW蒅NY7%[6%}Ր-_ H<^<$[ ic$u:,@^m]3TNn+q=>%9!5%159155)#=Ť6ҧ$R'aXmpss?Ti)aeѣ}6;ƍwMGdRkV+6ܼ~{L&mUU&%>0~2iqMD"EC/\3!񗣶FNBO>G[Z3wM|zU(kJswkwCWm֤3 ?0(< fprrjʽ{w:}ı_z6ڡTgϮU+jTW  (  (  (  (  (  (  (  (  (  (  (  (  -{ 8`֭}ݻwKKK---g͚E?> g^:##^Rn߾39988"f'aCTmHc N4ÇgΜFnkk[p!\%//ϼ} SF葙y h0숏'D'N,^Z|r m\vM,oܸqڴi~~~?V2Fˁǎ#OQOxS!1:_et钣kppp\\\wwutژK/> bx)u ˶ذ%*jΜ92pA /H]ZZZJ+L' 9J999Booo*#m_^"=z| !'H@sw*ρ ېZǩ%dNNN}M$y1cx upvv~7˼|rX C` Ëpi'!!͛bƍ?VT۷R.{zz2nݺ`޽{W^eNJJbZ?cȑZ~̙搐0>>>&&I@S#o޼sOR@}++'ORQ&O,O ]͛7k Lɍq5gϞ٩v _޿%*1b աm6?sk;ޥ!K.BH$65;07_V*v='>+**>Ac@8iMu d0iD;;;lڴI~z, hq΢Oyк{^ 0)0%G"3ӱfv Nٳg$jOXTTGO?~s|Լ>WBQ^s5L:Z@j=zpƌT311Q, s9f;ZKCth"?"0;3r>*v=U>@+++vM C7 ѩSpM#O>=~8~Ț54_5gqާ׼ h=G/udggɻh3]r0UeӦM O1K777Sg4Mtk׮JLEUWW3/-[VYY5\+znoo'mcǒ0k.&iG``Tbӧ[Ӗ *N:z>J6w\9M-?r䈓JHhOP h."pcZۓ0vvvL0'Otb/...jJ>'%87𲵵ہQrիann^m.> ljN84_37_V"v`x|NQQQ4caŠ1|C8*ahSp5x֭8.}E 2gqާop.:2'7y~&+58::vuu}7ZSS)||c߽{_[|XMWۛyI`~ $0b9;;;PRR5 $0Vq˩SNζmۘ'(l"H$Z~9y$SOh-7gϞ?ya|cZRiSsDecƌsk5.bɇ@씓f0h %=`%L- dNsZ/}ͅ3_6`Y \szˤԁytҺ:TKjj*ŋM .++kΝS^^NLHHػw/,.. .H@aI"-TI&U'H?4o1fddΔ)S\Z$ܨ[n_/b#G9}4EcF믿#c|Y[[s@T*e`jbJ>'$`cz@k֬Yj'&&0f}|}ׯfT|/5"v`x|N4P|Wzpμ\d =L:߾}|Y)޽;!!a„ L Tff1cJ%.pA 3_a>wU.z-ȆԔ"uL*!QTQQQZ$ .H$)V#%cyp>U߿ Su~B tI46 E":@xQ3n>w@~[[[KQm:~ﭭuƨ&wq=İחZY˩̭~Fץ2'±U{ C7t'i VkSpFd~Y Ws/}UvtѣG9>}+xNj,кZGq֔&M?9sƢgQ:cdddbb4C$p3)IIIEEESN%AZ|9{$-z bbbH( L0]ˌlD3ΐرuÆ $f hUUUT㬮isdggܹl2i=zDaNxƍbu&Nxe6Vchb#LF2t9sw pkջ=J)S0h 11`GEH}L#$.#… 4Qb>"k߿)=!J5ĵ6؏s}W/(((77}N(<<ŋQQQYYY#sRI. hT#Rd6%r%%%!!!LD끘pa`@s #Fh ͛7I(zi hH)?Hz\Lf԰ W58@]R(kOdG,sv=-۷oԩSQ×Gj5~Snj0_|{ӦM;M&kw|jQ{UۻwΝ;͛{ uR:ꫯ~{EN?رcQir9gc0@eyׯ_tC]v=Rǹˍ;6zcذaqkt{chYw4] 1 BQaaa>};"[:>Ph8umӦMQ1 !!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@ @4A!@Vaԡ}Õ {Ny4Adgs7e%稳{G? 8U Գ9sUs||zs:+-l N=4$TFz[s.dz|ᕁf44VEEEJK`NEod]yUDgUdm޻o'DodRrsf[;!qZ^is|/ NNN %st>+-ζDK7!ds|X׋۩Yd#r,^0oB!A2SSS}KlFjjŋc}͢Wx#)ZN9M߻!96;G_>cJojKOOo9ޠ  2XlЋ5F YVZ {9{Td\QWdi:'^$%WG8wֵ={ݹSs"k} ~"|&o}寭Xa9Ut|˟4Gmڴy-Fw>rlٜg%SW?U_96~=mg|5[zw_sZ0uJбKKM:lݚڶf8+E({yIqE};E5J h׮ca5b<-X@Nk΃/YYY[l>U zsyffnp.H56bsNٜ3c:6K{~mϓж{~  ($aZAOРLj6[9dp|rdCz_%s<) `Ҹsl7:r:hZ׋;qj،1Z7̔_J߽6@zY/::tK~$ͅKcϱA А ݣ޻?^Q}A~^vmdZfԱ 7_yKM63:4Y/| &@sI/kהzMjkPG4;XzήؔU1v? ہ!@pB4$ȇk=wVg#tA/kxGkds=b˗`4q)l'wUk{|VϾćoOoj]:~ZrVf)̃2O˃dM߹"@h8Z7ȸaeWy8O6~Gvn^ZN.|[jHϚR/[%q&::ֺ~O⳵UVת)~o꽥5[_u孯ƍ}7_;`m^ɚAeyWmfʶ#VwmG{߿$nv]~_l?SJ;LSv9*(} (\8E.Z\9։id(ws'>WM;V_|kcӰ7_fcyl#皛z]':q;gnhFDZlqdw>ݾs;ty Юő`.1l../}mk`$@s$=g[m_?Ctmj}ܛ6[;`]eXwIɇ9.xvfe~3.ZX<)9gr_s*=\~`]ځiD|qtl>7_|ffl+PYzO畽k8IQH~4|CFFFxhsѮz%@{ODJC=rPl.i7Y>M/ʷ| h$@SǓٲ(>[ ]ՠ΃>t7n$xr*@/ Џ\*@0:>lYs .xP^0Nt^<˒I] {ŁzΩL߸Fk""W~>Oc_兡Wc]ꫣF}U55Of_^@Hf4|w Kٵc'> bOܠ'joS t{##.2"=scu5@"5T0c >{fZO[QNru _߱tL~wO?Nuds 0l7sL3c铅/ IxZ^7[^y(Ct8U8kc:Z]S Cz=—+'Q󓝗Ldbץ ЉV6ũ[iK诡q0+s)V|dMtlV]gYu]kݝ;G (ld?)N?+tA/Aܦe,+L>sn1姭Ҟ)gѠ:贋[X Fulp++6#@'ZKGyμI.qUKG'*&i7vx\θ3iCͼ#MogL,xQnǓ򗇦[S838޼J՛ɼI&3čMfG[}}hEYD%j"** *7 t [I41ʻٻiu{/>ߺh v뮞JUgc<i+陟Z;M^|r&ݓBt%98!FvW,bwי'C 54=y'HxپxL TtP@ v5^\vM'Y0Ґ?|6v \H{q<{ƮΞΗ}}}^Tr%nY! KS.ݻWO;R# ' _We Z^ R8bU( Y* +@:U4ցHXF IpwsŻ 9@a4o_p[q sI$ \ݲV127dOEs^1 +l{25R^T8e1}pf'[jqƆM[Rcw?+sGٸP#'[~' U7$04$ℴFn fCAA {Јxʠ 4Ys"\FZ egr*ؙ% ~t"Ƈ . :zW#vѝl'6VC?9⛧V4IZܰDuЀA)A+ځkBu lc‘ ЁDae/Z\> PE3/Ν]Jda)PPepˆWm&*sCU g?z&O@K$7ž+IC\ /6_opV>C7\_'ZfUVyEn;PP' eɜ1{>c h~j0gTC=M#:ctFzJzZ2b c;y >JBŃ$\TVH{ZW)h/fnٸߴibhA"hZ a-߈_džv F;l0enƏsĺ c<=@O"}&pաwE @C-AĞ?aJEP]ga鵊o߾ĠUAmau[Q (; @)@RIH|ƚ ϜcςXw!wA0Sɒ|}1hS^ 'đ#h5#sYِ̍'=?}1ޤj_]'cptnSß*2̷$"qL2 | bk>k6E /F$,I&vWӑ*e+@kE!m;qUfm,#v)>ia h((!Z;k‚qM[V=Fq M5['nh[o;2=@@Ke;GȾBm̢5wOR!b掍mFGQ,۪|#r)tNఇHϒ2 .6He'>f|PfnD{z xUUI҂=c/T&8_{/0C27>c'9?fܛ81qpcP%?mc |}CHn6d6l h5FyVKZWdЇ!֊J]*zV6r4@O|5aA Ig3#5(0`C4Rva+L%pߊ@w:#@K @>h3pXgϪ^UE{E{A=)ҳ0I'@/ZPy-gŵK<4sCds ۦ%-PېM m" W{[+}kmmN$l4l39i !1>9{cl3 h 9Zr!;|!UX׬h"$GQ3b<*",J 4!\U rA@&hy,Z18:B~l4Y,+|D,D ,^&z2d]做ڸd3d|>gn<ܐ>]zt='&\M0x3>JG۠g⒥ fR XE_cn9߭ZoK15W\<ƀm@k냡,6!MA:E8" ,6l3r><.%ãf hYjvRQ*VӒEjZR5-P8QK?.33$81=VB"EwmT؉FIUG /)$>b̤b~U 8AAA 4ZYmPBW,o<=Y@݅ hV[ήQA ,UL-9x*5tW Wݿv]{v@R)KR8hgW>Z,PdnڻLۧ:ҧfo'C8~$hMFkb}370uG!:Cu~2aO=NMNSfn.zet}#ueqy ȥ Pli@k@>D@4+ M|d+u- YB6CF149Ch@i4A.U3RIՌFB D-ㄘq gA$Cu:F]Gґmhd+Auԃu냳eo h h((!220LA ;I»מm {OXK}oZ_ܷ߳fW\[^q@m5{c2@c97*3lYs,9>en|S˷foͷ~5 xٙ</6* _ѫdez` U|βƽ*X_Cu^o-LS dЗ/jrFz6mk mz;4vކjg-K0[|bk6t\t6;ې~fz3.˼SK.b RȡLy<-ON YZqY1EjF*Fr 3XL3Ox1㨄/a0R@cm=0h` V 4rm' Fv 4|h(( zhA香p z(S;}}}o^i=u#ϳ@'P^S_@Oy{MؤE7ouҘk6]lPoG(ߠ@A}bG\e=g>=޲ }kݶ\ Jg6D̍?1 \a?ny5a}*Se$G'ϱXdEs#wؿb7!~jA"aG: i @Po XJ",E)bS BK+RrQ-LUL@W3Sk)L@3/aC[ό2Er]OGwjhy)4ǁSh p@CAA 4EFYkg5343@v"2޾y0tƪ2jdgvvDCF ;b&ú=H;gv**BcX~YsZj[VH %Fhü 9f9_G1Β~.?٤пjȱw8S o|]+YWM[/&xlC]~EСA@k@n}&,RQ%,|M>ǢeSϲ)8"M- h!=[@V@3OL@Q0SPXLD4c(>*a(23̈uX),&ZCסabԒtѽМvrh(( z<ůI!N@OEgSʺ6 ޒ<z{T@~5EI-XvigΠs2YtO!\Ob{nO wVvCwHFn>%?w`F2N y 7ޕ>GcϞ}"y3(|27j. [!]! 艗Ih# .G|<ۨ&(hY6 J96<4,V. x|>-OsBfv@33;kN>ݫkj+GU,YDIBI-CQg^ @BB8 9 H@v73IԶ}'$f3>ߟb Z&a@'cc6lh,ÊQA1X 砵xct 4,XO=aCgK@;lp|F74M+w#NڜN+CW44k+hee]9E6)YzSkO׽W{wܹuՎK;_snxr~nK e'O( / MB@)RSil}6>/:5x1\K >on7.ׅ!@? -h:fX9L5S#s>|Cjg+җCZuHQh`'7B2$-:w#.9n+n{?^ѮSF#x~{7s2xx͢X'9~NJ*AhЖgmî! 5TXUwd<3޺CyLx]@-MVئGd{ݓzzN?S#8x4>wҥ6;_]ufC}]LINgHKNdsi) $a@UVx[W|mI";Ȏ3ڒoodoE>\sE̼JB->@3K|D~TK >oY >}_ ѱc\RƌZ37g_}3pg5^ F߂}:rn,\w{7[={g䙿⛯zx_ܡݽ6dgIY`> z 9}`-L-Wzc]4UeJM@Wa skPZԢ)Fe$hx-#^`q X#6bmF-sf2bF8kFY$<#Ɵ4,Xa z:0艙 :kn5$gs읕\͵VV&X]tcYnjl*bKc7.Bzm[>vb[Bs<6X;6!H 30W,L^VzZv&_]]㶤 %]ZR`}X~߰.?Ho h%عy%,Cͱ;?ᫍX >o^g5ՁFO/'^;zi&G9\u39/]ص[#f^X9 >6n4ЦV'b5 ^}u1kNaQI@S_ xkJ btT| zZ0+t И>Je8@S\-GE .eU3AW5tyjf28E5$L3^8 Zψ1b6=?ϖ zl}(bG 0[sy|N@Â,@9nf A=tV0Zڗ4͎.~xaC\s-ROՏ?zd>z/Ѫ*W&'Ƴb8 Y|I0W+eRhy^AP!+R`r$G!kmmQ1/?.7Dd{+x>y6|j^Jnhϛtu0z0 4A~5~hO틞m{$oYkwv>urs%8Ca/N;pN6oLpE{{Kyyn4o ڢy `nDچm:H2à1Ɠ7#Ж 0,а`A=Tj狇@h`h6qp3ׯ*Y}J<'fw5]xY)OOs_Z"Isi)(+X# 4QM6oJS.+ΗK@ RDX67k`Y~Pd^~PΧKms{g>=>jφՁU Ch1xE3x!SɞOB϶=m\]k#e&:Ca+[c ݵ&r& z@e_k(I){m?u4//w{|RE~:Oe:`_4K,ORXPzZdVj$J$~g \˼eԼr o`jh6fpA24T ehZfuxs GF{6q9, M,E[=3D= 4,X!@r #tj!@qΠdll2q էw"*W7䘠!KU{L=n?є,;'sU=U8~VSch3;{&G, 39\HQf"9"ɴ=Ŵ#5}o䟏7GeUKҢ| y\*>w˾ vA|[~P@UJPYU>|}f#|3L >Wqz6 =\zJj FOlN=iw[y# _`zbe~9#߅`u;H(eq@ ש}[۩vA1ttN!y0P…|}. )ɝ6AWEU4j (WYVNҲtD3^6Nt C2ZbM砩X$;ʒŁoAZ8 hXot^{ O!@1YvqfLtuw\n:^\ORLFY/ҕ˫O~4k 疗*} l=q狀YB?ޝlI 0}9J,?g+@hy*TtUtaUfbHW3X3 n-a&Ɵ1ֲЬ8+:aM4XhOoK!hb`>M9'A04,Xa *'|xrz.'MX'Ggɪ$PNN\}2CSekJ^h=O܊ l~c5M9e[iGi'ϴ;u_io]8@ q$aMZz^eDYP)^V?Lqi)Dz賯Un|nu+0z (hj:y~==>ۗAێB2t??}X i\[mn)CK^{&A\f}8eL*ٓE^/f ݕ r0oc_'"NmI=h-TzHbиA41M-9.+R=a24Sfq}N`ϩZVsx+c:&F1 : h"CO=W#$V s!hа`A 4ߤrpf0݇&wt.X; k 6lsy!@C=U,oTWdSq-[VE9ނ4eSB˶Tӧ<Ӯtwf4G7n"8chnÚSR52ere!hL<>-?^(e3UcbQ -2>v_ ~p?99%>B}C6,=ڣbkQw<6?]N?r9Caa7"C1fLH ^z_1Ok xSgN#y̤<9,`</޷v;A_ljOCe^J2DIy1z4?TF+X*3hɫer54-+Uc%q&Yk4qucFGmg Gx !fbɇ0,а` 2@k5Ąe5y~0ۺߊKWN]x+6!@BQٳ+UJA_=Բh˚u'Z6[6&lMnٞڲoٙo7E7n?u@׭J39 Uk:ESi$$URU_5B|yq `/>g !gl9~iHE W=zFu8#/b:ţV$r|c&F z  h}h]kBdԛcϜv]x ^o|=[ܽ?;xsޙvo޴v..U;U[됄,} [asATR +X YIHȾŪ[7v:w&! Zk9{ &s]Ћ;Z@h!:{@?`ϤN1N@J-sQJuhZ5Hijxȷ '24%jq @#Q=M*@04H l5Bа`A 4/鶨?]1u|# yD{4hӺZȥEׇ؃G)EJ3T>r0}yo0zpg}W |#β4:Ϩ櫙2H?nk v֒~=@EA!T}O 9F'g}h>8YO1@R\#@嵻dLf̤?&]~Տpעqf>= =D/(>CH>ξ+w{/! <.Zpʥo^a͊F@EDv}IzCɅ!@O@7oG.$!;@&wHBr|hP jԯQwZW/@4`V:M2sVWӊG$"5h0 td@C4 4,X!@wy냒)zz*4o,,hVd̞9cYCtH;C?" A[3Bξk+۸?ׂob¿`^^ƲEkF@Es@PSa{QrK9B?^ǻz@ zY* C@!vIHwbr{/E4YBmROK\'m@@ǟK4qh Q&)E*+p$蘀 hX?\!@Oj4(Σ{27@_hW,tc6dzir?ek`ĺƟ5*2{{~{4h{BYdO)g6ooe۲l-oͮl1g՘7`jSω|e-S.IZw$@\(. H 퍐wbюg7}%jbIhS >X?2!@O>@#=ß!HxF%`9譯{\]"qW1݈yT" ElAГCW^kb}]÷CQp93y6*/o{E#g?彝!9C?CN9+' >V!]Hl!CH<+:`A,)}4Q @i;_}՝{)f@.7E*!D4y.B hX@-UZjSFAnKJ"1EsmMHo*ƞAho34(첅EE%ژŶ[2kfmSu ۺkCڼoRm7dVӫui|,yd9'J#}a\iU!WBk=l5.B_w `P}pO޸_uI:H1(,#)HH5 @O&@Չs<͔ɐIzyIAb"Oߤ0`8rn(+jwuzI'۵%ᡱ˺bj77ö=ԯz/< Ͽ||<=sn={S׭A1"4u{}8(ir AZ6!h`߳Bh35LFǟ)M :Lma+n50||o̧ng:E(@:ӟk:gU3JJ< <hX @Â5Ҋ/Wu5)[K 7)5j>DcD^z4矲~Vg m9dcX%VRkz%²ʲm5}yT$TL#9?q$!޸H7BTP`kssSL Ӝ {ӗͱ졸0pܕ^3A'y{Ų\nYÇߘpϧqhgtWݴ#;_錜^~4W z,ķBbhd+=#=+" IgD3?S}HdXi'YYr˸z]@Հ*iubʡCs4A36\1AFx!,XaGd@C W W{c\ݲ\hпr|@=ew }mVZ5p585=Ka _dI*0K,)V%9Ҕ^eJg9t!KXG}΍ߎF?o`xXuA} bTtӆ4ӛfГ/:5?K=ojזЛZ:B"ō3@{{Xq-v%r|&ru~!@O<@K$K?vYyD~4qH?擏!;v,O9ȥRГ "FIDhZDDۜ6vXxͩg`;%Н*iu`:BX(S3| @FZKsˀ9@-@Ero[Kgd'a hQN@ѫm_[g5>e:M<~ѕoV_[5ȗxoZ?ALeYvXwZ,!{,􃖨CfF999,5X' #gqt) :;*9>s3gв3=5s\ʇUKeGƒ;YͱX}S%%44A}`tt'U{.-ئq23 z8O@g.m ępB=um͋_ z쬝.',5>i8AFGv99>TunnV`Фvoْ\Kiu?7#hڗrU@٪:}yk 嚀2uP6404Agh3U @ hX @C_ytτIiAS9s.l#=97Pzn8X~['5b/kȳ130cMEbSB)1,30 }rYeIlM"=`pT9r:G 78 8+I)]Uԋ~='%EA!nϑ΅c }fũ #Q3}v>NkQ}^z"Z{Y⽪E; nף2ЎD~,z!a3V4z0wesC3=f̽:#SOֻ lbWk|"_^1.c#CoHy !@O6@|EF!Y0Vо"(=gr܌>7Q>G)NN{~~z2M`D'85hgƃj4[~;2} p,а`MluK=ku~'g~Ͱ{xk@4Hdׇ_iۯ;ͻ{7=ή9:.yZreOFп%h'gf.S;}wMMƨc1Cl!PO(%+ Ju|:JWdT)bH,- cKBخgQ0_LuCoG7B ϻXh% +NŌW'щ@Ø:tAsq|6az=ò:Ӳr%;-s͋s̋rL3v6lڍ72sV8CcYgεx66 .yסϴ&Z1p1h!1!∁*4D3Jt:F6LWfT3*TJeL"?^%U{\Ϣ`$I^a=HheH]xPH$d]p޹ 6lx=Ӳ*Ӳ" zZSmyKwٖ:c%r8zU/i8chi˜YWL3,3<@U!EuN(/'7ڮmO_IؙjS=gݏ[ï}y8]/7"B$"6#-Ft4gdKiC ~8ti($!!:HVlT6 8:IH*QN&P`{gJr[\'+qgj _@@3IhgĴӒ+LSdA5Y hT3.A~Pt 04PP@CAA xIudϼv;Hrgy~6 0]WcO{07'w^zY+G7wgljz411]F4J"VVя*y|ep2XV/SD#*djid$Fq (NV'깁tg>˞S_UإtvAXFtFfoDKglA%3^AKP&|Hhf< sڐC.]mzy0ϡTlpck`=D%9k%yOJ}OAK#BAQuFN])@lga!yo{ ?IE}t~L=cFڮ15nEtG04Дl%M"OД~v@}[F4(ԫkSbztV%o%@bДb1 (P\("xϰ h((!^6owŠ{hJ2fRղ#p:&U5- 9ZMM]hV@S{eߞBس}e+= i╖7^x.E^zWŃ'OZñ~ cW 53JrG<#_<*CJe!eriX$RV-E\# ̺~F^F ;(ğ c!!xQ#iە~*D7}fd҆#@/#u,9rȽm;ipb (>^ j.^r/=K,F@"F}.FJЎ^TJGس?aF6!׻l,iw7n囄jevdB4""|C`S:8}ڹ m]1#] 8-Kv:3ˣjJQyr4,-s10Xh(Bs(}&К3 hM17w8r$DlYah򭫊íR >wTf\aReRcZgv>4l{~}c~7M O w@ouTZ|,?V}Y;Yȩh;WL*v"ѣ?rU~GyrzQ e2Ip$B\) W AZ8Ogǟ{9l)dp <.̎elF$c$bdq*2:gঔAu(}aˌL^>}Zt;v Zj䘷ڞ hۏD,FzZ hU3px:-ځ4vvu܌u후?&._I " ;Z8ksN3⚪żC8+ZY>b A{kL3nğ-Z Ogez NӤe=ź0ӫj.i]h>5X(DBB=C 4@/LMM,S:wȱcЍIq6r^Lux mv9>j ?@CdzsS-~J¥Ig?? U\V?3缯Ҋ'?80YTL\/ 8!JEzY*f"fY)`VUz=Cb `9l>6ܕed5hCc]updxwZ9{"(^އ1.FDqO%m2b#^:ٓlV'x;)r&}ޓs`b|w@-lB+M9hw1(n林q|ZQ-<&&נ]|B;-IiZuQ-Foc@ пhYB.x&$6\  h((!^NYeՍIf&N6-1sqiN+Xu"hU~q $4ivvvmN%158C"/@tKM 6;oy^ 5 /h|d#k[(7os}BkN-pv"(.yҀq@V,hBZVΧ#ѫt @/\{kϠ|#/{$o3:`4>`t<-W0 **(P nLӇm@<`hɱSkv>}(F1<(ȑExm.lj֑暉:D_h5h574 Pff+ǠN:G+sW5=\B66wA6Bb<#m׀JȷqW&HȒ,ImR܎MnC4~J+Ybgj3FxAw~;C\~Jt^#oM8{cR^],gtA@ňIEb\(&hwƫ=  ZvGǟ9zM3I݋7~ܾ=q=3?g0`ğ?csRU A,3t͚r_e Jh, ," EmFΠ=@CAA Zwm-^ZCmX:mXڲ=8x#Vp@}D.NIgq{btyeRo^l_\[[:/C߁zi"q(<9Ə+ߐ>vR+5ڹgNKQuggM3QXy"(^<N1`:ƙ#@/TVg4rLȑ31?ٵ(e]q꺒une Vfj3^gꦑ_! @zdGV,FLuql&yU.a3+G!3f6 `hd)}\O@7 9aeß[яϒ tܯXFt\Ɵ E"1@Xf$j=d@CAA i ]h54<]K۰q#8 -kWn-[= ~F8@[qR@+׉?k۟?ؤKIBڴ?3۟sCB4XyT<|"d]A߮KP$x' 7'`g!п6l>hsę` vԼh#3`Ch#Ǧdn꺒un'3ʲwW"uM\4FDV%{to|ZDd)@#R;?cihNv?D#l;;ᡁ7}WpW@{5rlB!5snxZ)<>7|>J~DgDggz)LOrfQ#gV++*%B,W IE@$ CB.D @X $@$g0hO; Zװ1_lߙ-!6xQp o)b,埯<䞞q(GD/[xq)Owm;Gx8kA峗…-zhP{{W(|B my܃g5zM⊯P$[9EPpav8?gnm$EKHȢdqxypƟ*J1i+y@ӿ1:4VajG[A ;gРcb~ =p^۽*ۣ&ǣv{%|V55voLݻh}M 4s榖9 2∰X&-܇ nDELC"/"+.& 9[%8+9F@ h2)-f. fOקGmSAOմ?,JOH}d>#3j>WisY`)(*F7@t7N3@D> D344PPK5Cm`:ӰUm$5!6t=s`zm+I~6p[Uuγۯ~mn4Q@l͔,pN'<T=X;܃x959?u KBf~```0ppюHQ:ڿϲXit,"nzAm1i3y )CM@; IWfmP m>ze[/CoNgg =֟ڿipk^\jׁ2#llu]mڪE@@+;lY"Kee $' (jZjmmm{$DI>% .ےO;Wwc~ wh&Z}#327&e 3 4?E/ ?_RGƍݩZ`AK9Ȱ!Nqp{7&31q#0uK̗\IWC3bh @3ڟ*g󴉹 9xlCc34Qhˆt贾T>u@KFp@A@CA@?Knބ՟?z@/W6<(֫<@#TysU 6 ?qo=Rq]OdSe-;$zKu{<;JlB >@;S[M~]41QE7 ߘdo`w0cQ'k?tyfi_;:fG̍kY̍iH+2*OTe)^_7?A:y l4!Z³4_:h|g hB EZΒG!F7-7ThF*@e$k@h-Lt"h#1i  I<~ 444G;k՟~z#"&^ty.@K_q?Wm~<ן=n n(tD'F>:7[vH{{i_hgh'+F3 RnBC3jfKboOϑi0;zl2z.*d~ꇉn1,։?9::ilNrArƗgS֑\Pq*tܠڒO6YYo'vhcJ֫\a0' IzH} !}JH}dl9%4/X]$g@c Dh97d7AM4@ MS5A)i\}T  c6!E4UDxb9"YvTDggU@[@L3hY&hm,!ڇpUh+B{CiVwN#B 0@CA@CA@;mw23}0,?It,ٳL~[.szpOV?xpP\4K[L@ܸYfb|c^EMT9:4,W:#Ύޞ.df.'z<> +F /y|Eۺl6sq:3TT_P|8EibSK4nS,myqwF 3<]MAXhpD}p;D\+qE}J#h4#?#LyTq_M <]b1GoƝXp""TF8 7}`h((h((c*,@kcBX*ߣ1Nrсe=d͂];|rzl]e-9kоb`<Ϸ6՞afSC>t <{3}|sSޞFtǯ^K.7_h!zh@V Wբ73]'m=v 6o| h|.>Ǥ4(J ʣ/Y[E9NRT)2O>qv耾Jep!1~ i@K8舦?li$?hV)7Vm~0~t~4g,S8NkNih+BA#1"IVh&E*PPPP.hw{Fy[ԑyfKKtƂ)MW6zY6oxZx}49 ނ\9|=ğ\Uדas5Օ-M۷n~W.o\ÿ߅?Y*ikml;D4ftE֮)v7m%7L4>[ll| '(̥ %!m!xʨmg_?Jst[\:}MC8PQ&Y[Hә2:(Bh<|u Ж&h LnB:@#8bNkOMЪ kt-]D4mHH%!WO;w ij\[W~f/ʧ٪o/xSzvy.@/T\r e.b̦Ƴ"a^6cccWFGFCBt\]kS{rE.#Aˏ 9oo>yA̍ &Ad3z^S[/Zy/"`HNiԞ?,tc*,12h6PYƖH#PddP4SN/&o]HL(Tc- :u@'hr@H @ 0bMc5hM!:Fp@CA@CA@@E-5m~M7 8~ }gl^@& 43韀Ay=a{\jv%NY)\PUQR]UV[]Q_[Puŝ&C+ /xa6o=:sl~A[m ZoCrW˰3[ǓN'3~?lt*XLeCX#PQa,"lBHN@QF>\ Ce}c)&hz2" D4-t"!G.2 y0CF4  ׺NY|;u>^YԺ1^y(@# vI*#:`g̷_ jw߸"Xkז54;`vѣ 37l37l r(-<|ADz5y膹^_YsEg @vltwOr`@0~@@ 5 .Qb>S? j @RE 'qd(iCZ j: U 444͉͛~W伜ǼTz`^Ԫio6'ڇ k=MfwX+ucF;w=@lyynK2_['>ei|~f|IʗQz6B*lt}]ms,f!m~'6t.r]KhL ,YSΔF#}DrzQHA/D7PtdȠ񹺄l-R-Gj&Lr :4hdH:胦>hn^Z:kh((h(i\&u?-/K<)Ztﻸbu| еQ]_ 6VZ@a0iZp͙0.[|E:?fAl6:eiquf❚yA#s|HtjWwKٻu ]LXgE@ UP' (QU{* ((Nh@8ɶdHNx~[] 24h.N.wRUgZ-- }'7Wyt2NBL/(ۘ1o(3,Yӟ]Q]=~ kA׃2oԂM+q[f|= ZA-Cu!U]9hºeVX`mAy_B `II\h>p =~g7`I/*,|@#6gŨhkjI Üf2h:Vf?3'>w+zy"[v@s6WEjT;Gն(rߜ+J+r*Mus65e<6rlVU2}VUy37_SlSFa z|56VЪk]P5 UW\w}׫p\Z^ qx hDWpsukϤ[t''BI<ϧA""1Es#Ԥ&|@#6Ov[&^.Z#F5A%MP?Yu͍57~57k eP/Nm&pFV`o}] <==9A߸gMK-FЖB.Y _ۭHqct7ġgZ#A-8c*P}vfO9\{Rj4+} J-757FOsoo'#F-+@6!>7 )|@ PPQ^$|VYrϤ[9QkN#_^wÌ@;gS,޲hYB= S am׮ܨhkikxx™Qk;a:ע!s(O|57~A=}%drTg!N

XXhB `L;O~9(q8[Wt(Rǭ?r)uIiUhܧeO<ӶO߿ޑ,\8ziϟ?CO4I!`n6xH75$w Рc~*{Y^-'HC4!0&wV(3hss:]$^fplk\8g@_JQCsjyD*)7<͟W.FIZpk)h"!~xqPkTQr\N/\g~ܸ}IlZֈ~7@C'[{'}7gqT@hc銨H#xۧϕ۝$Zk:W,~,9m>u?(=ib"֔Nb7:H:T:`kqSݻ+O9ƑԺ'%{40-nfO^3Xp hBៗwKoިN ۤ7#o? 41i9\WԣFّQݳgFKK:/1(_]&ku$h-e۬o](h3}rW/.u4Uc'-,\ PkDqA7y|ԟo>8p;~<)dO;˩Ç w˽;AzfWZQ}My\ 2[{\?ަ3r#r" fJ:΋Wwc$ֹڏg'I7-fD1< :q蓦ǭ--in睨u0v: ڱuYTr =W;Ph# AT;+hɬ6mݸsН%9sּy -=:L&۞{hzN2g:$%\Ŋ%F64opۍ&=.+>xYהt+99_w`lz`u"/ Ne?:Wxsfج]˜>Iz(7\VfϞ/~M۶wܖMk:দǵ'&yA;% ̞8>P(LLL(/{)/Ho >sr⋽$ܠgZcEϹ^E?Dp:!)-=S&"ENݘ>۽[-7;##&YT@Ɲ`p3}QܚyxDfc赡6M27~wI6 !9(%/Qkjz/xGɄMMegлKRDVu3z]2c["[H HMML05Fw`MDpf{ 7oM@of?_;XёEƒ gwDDFn/=fMM̈́(KH$-1޻wXy]NSe O҂d[XbMM hۋK{&u8x.[IC]*Iswb&V6NG-@RyIm{*ۺ" ٻwϕܭUU^ڛ'$$ULyױюӳD`i[6oڽk'h:͙q@ `vvR!x\$̳L1>sȣKV 4/piXy)0h0CSg,J-}Q|`Zk0vh7ubVر1OOOwޛ7oΝ;7dݻw_~~ٳg'Ofuر4S]FF۷̯ܹvلBannǏ_|~t w׮]EӧOS#1>Be{$ ̼}6 655iˠZk+J[G5eu6ޅ~b"Ϣz޿O_x1hRA "߿?l0C~cz0''G!ѣ^$?1JC/\@oY3ui.:p4mTG+i48_nK}@[sD8}4m489RGtqʚHhh( ̴Is9k {!ʦl֭͛o޼9zh4662JMZcǎ0`… t@+ cǎ4FH8<ٳ=M}jggSد^C?< <<̧4op-\!GEEQ`rʕ*Ӈax7^ojv/^\uvt]HV]]M]ѣ3Ӯmq kkk"֭\:>kcힺ3vn [^3hND޽cg,_~M*wi#f7f4;fӓtժU̾K&}٧2aF>h lݦhwSHHHkkisZXZ[qk먆~C@k](z'Y,bϢ2'AK$ZޛM Zrrrq㰰H綷{{{T xzz:#F03crr2@:ZQӱ\1,"&M6i h2$ww3q 9HMaԣhXdLqڵ/]P0H#軧.]M Աh3j(/6ܹse)MVftԩMMMѣG*O2e >|8}CwDh*Ռ aaajmm=s *kvZ&sewjiqk먆~Ciw轰tap골ppphhhqttdhBA]޾u ?9M!(%%ԩSd}ϻ?39{]~~}+:E0p|IHHhnnfh1̞=3i>ȑ#@ ܻwTUc~CD@DYa܀9M:B"KXv3gyyya&iA<F? ]`qqqҮWm /3gN#ܹG O>ݻkС7nlS9n]~%SuawqCfqg WTT:u*?5q_6 uo?C_~9qֺNUMߜBmɮiر*f.~^'mj,YQTIx~ 5kVGt:pI.,, FbTS0 WHtf4ٳgG}TZZ=|>7@gZI$}'+. G4ߦM^0Nt ?ЎUWW۷/;R Ήl[n6l؈#,Y*7 ns[T}AϞΣ@ChӧO޽{Æ JЉ;v駟NԷoߧz*tH'O Rx2X۷o=\~ďZ9 ܢE,bG/bxRW^y+믿[oUs$ܹKGCډ~hִZש*7if/6Vn/BK_I=KVo+? 'Nlٲe֭&̢7n^:rHuuu|ذai:$3g ;6Usf?˗/ǓXZ3r[.il4 jm .066mZk:v8dȐ4]^9q9rd%ͫ_s[T}AϞΣ@Ɋ;3:ȑ#\ @n-i5g{w<\TF=mڴ޽{5jeee бv5w\"~0~wyԩS{]`tÇ9sfNEE @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,B @,p!mݲDW7Qdx 7[9EղP*+K''yh7FMKx }ق]feRYpex& f̘1稄78Kdf~ M ̙3 !u6~ym/K?Ʉ2jyp.ەGYK'h 狋'8KБ 2o^ܹs [|+OVVUA‡vf 4o%v8x5*+ˣAs%?,e%q)a~% 4t.l'NDÇ;6&=L׳lJტ7C]Mu-KDwYmE(hѣG{=_|>݋~:|/'hiMRy`+SG<пPg +??w|遤'{?ׯ_ |6tښtt>}A&uUT̷@ڵ]w޺=w}(ዄsY᫩X͟_sT+S) ;Lu#ZiI lf3wW$OFϦ.mxŒ\VZfIc97~?tĢ]8c.#TmoK}߷7նaa6 L䌁/-7rsKj[t-X%[J?4eʭ GIqmKpL:ٻe2MiCM5˲Po?y~nG ~hT6OmxCmnoL䆮]pȠ:>ǏeOWP>D^zō7lTzcUU6| }IdеTXyS͊4^6~Ә@.hhÇ_t!^{]s5IKjݦ0 w9;Ji?`ܻ+ ^}r 7o7{:&Y;%=;ߕ*2wLx[o>AnIu AVd^j-n9e2A^zꉵnYXЏ6Wf]O CC@CoiP7`A[|~H[@Gmݲ|^QQQUaS;a碈܈oe:&~cLZ;vՍi ]u6^R 􇅡{\'vyu˭>|?lH(pKJ80~7hsMKaޓ]uݻxlѺ03DQޠ;k1=z͊W@GgPɁ%},s<4ꉵQЫiW儗t{~^ L 2lN$[!S;!PrQI|AuHI Rf͍L_W}{ǘ\ e6XJuci6>wE1럺 -d,4Wߙ6Z LsEib fʉc3yDR_A=^ɩӧ|̷]t?dxIN|IK'\0~۵ES, C խ[nΜX8pH gɡʩw/AwsWUκ:;{GֲdӞԝ󷩮ӧkjk,?[Z'5 L l飧2f"tb5KZ@} , .`,LhkOO\iOѝ-ϯO[ui3g|)tzk7L0i ۳1tޟpqc6i K u7o뀦G?3[>L X!JE4JREnPt@E;4E CC x뿲9'kc킖ƺj~M=A/A#t:mw8|A3tQSQQ㧭EjV.h[90O!iժU+>4^MXY@@B TƓuB J=/JT{0|' Wn,/찠hh\@AŔfWgwKyxh+,_4O>N#Q(Xȸt"uL}RHГK=O5!m?Kx"Ⱦtћ/\!b#q B3D*3 ITZcbyݙ?;K!Zqztzc>COHrȈ W@rwZϞ)?~ Zy~~,žTCkY֯M- ) hh!X]9\]+*|~kגcbc."'%:~TeMtwT, .6>o<ոD6NM :x}#! O2ƭ3ƙǙ37Y ;6vx-x'+V6#犮ZiǓ'E.`j,=s iTDz3`hI'L/5>. F;iRS׃@APTyY*wV{%FMe)B/v|/{T+ `+hЋSb߼~ +@V']РE@7vVةȱ>#O)6\ TNZy̕-4tۗƠS' uBuB;tNw ClsW4@A ŊFu0 Jܵ5Ϟ>Su.<,A!G葠t0,, 0ؘϞ=-uuHf, u[UvfGV @5Ҙj7]@/-d%)1n*'Ef~GO m>/w}iYB\\ ^Wrdխ= @ShgT.c'i tڅ$ti`h:#3ORLMSSSzwqoOC]ׯp̥計c~t=qNk zb? /o=>>sm33$@J]]XR#D+;Nq2htt&WTc6 =mM'ϴjG 1t@H z7{5  )D8ɠݸ~n[ 576L381!V#Ϝ wttWS55ٚ3:atr`@gcc.NNcjOD0Q(d"hH!NMj4;Nh5D\/ A3: ЩuL4:0=ch'n9 @k+.%Vq0lfq;Ы*kηߖYY=^ ⵞ;%Wxrx@.(0MO葑OVʣ,Wv&Ad8 N&= tS` CO۟ޤ}YlF ZD& u k hH! lkO;&|Jf9eqD O?lZƠ)S'OFG6vy;v5HQ(( hЖT7aGS\uzn9jd{?=>;1V09$c:m}{t 0=5^zZ+@Oi{w8D3e>-Π%PzE'Ճrvv^#+;΢qBd2n\;2/}t}o>פ,C(hA4)uh@@ڵFgτ?I{8wi a񍾞iEk/^ QtuTWOONs:nsrB%#mm/ \uƐehcya;dx@ǎd ܱ#:3&rxiAJt%]wMCF fw;ғtߝ"/SoRwavĵ)LJCzKzK͏Tp$j?@/ J;9q"=>}Y_OJZX3e >(-Π>Vp(Kvy[L ͷo  54 }Dfѐ9,>,&7ˍtGL1S Cchm Cc$Z M M>4$yjL%E[[릺]%ρ{ثȴ.!(XbBĸo +oZUsu mGļ\̏`GJ{'1#3#S5t)NqV4vm@H]#,9f?w=VWrka:+uVYt^ SmA+y۰-Sglg+Q(`Ns +\Jp(#&Vx="#z|l@G4rsc-iU zh Wȣ2hl4+3wQ3h%OzP8F$+H[kSSSCUhRK 389L!qf# l/˛gyc++ =C/'1D$ݪ6{fC &eyKsKrgeef.<ĩ.4$WѤ]\?<^hOMo{ll_vդW++84G!JWu_g^uDudU$C*$c @[r=ZNր/Vs[Я['8 'ϹE^E=awo1LelMu -1Y܂h @+>@@/@+xr:Wv}QE__lat̜rtm\+Ni<:'cpr\7.r=y::>槹&Vcjj&Ht\DDlkm#$o2u 3YY6M4$7x7璡 Ӝrϑg8?(\bcn^riۀ6[ss!JՃl|5o}zet49Q/'55ot0J78Woo{h/L9<v| ot!o _NE0 zhEGx22hðΒFџ֖ޞw## '%:~SitNΛyn\wn2/S/^72?g>gT gz/041Jh CȾ (q fn%7z?navaUP4$96!kr dPAQq@!޶<zjU8" f<I `Gq=UXwy1& g}WVԽo>nz@?ZA3JrRf9vviGo]*f zu Fzi+,s^gUmVع88zuYĉ[ۗhH WQ<6.U,KSm_UK?07n9; w_>m@T->;Ew[_N8gMa^4=5GxY7|9VJ6J bGX1X5un$` (xcހLTGKj]i$P&zn =TwjnamZwID ТJj/aLZ;w⺤qWCTVܥ̙3>>~kf[7o465 "'hۍm=e@/OSeQ{zُV~"O.ڤG{m?B>jVFYY #[BJIsb}1/@&m}iz 'o^({w~`.tj{mr6_q) 'BɉTTh;F͎%Bq+^1kL)DC2朅ѲpJ .\*6%Ϸc@K'YT$d:6T:8ðBA@CAͩW/ww>OWAtbBYCyZjnۮ S-?1%ж[l}zE|#'v͝m 4ж?~4{:/ _bK!s* ·8,Pؒ=M@/>4 d擧/^3[%g l:;ӄ?4BȱN1ū|;V͋TqHF͉QsbɰԜxM%c%$M J%S zYGPqgAg گNDw_+Gnaonfmjj(׭M{vT؟  5ڶmۡCߟ8~<7' OzM^1^5AMYeq} mPm&fv ШS Y] A[7[oqhsezJ}_}izi'VkRpXŏ Exj^4iм57V͍#É8 $bDI!ة;-{oWQ{e,vϸ1hCj"!ׯչKk z † #  5M*ZLXmil?N\^r˗ o yFA3 Гw 譀\|ptx nbz땳~@\!zYl `d "qhOJV "Th5?F͋ƪyqd7&b$9ڤI#B* F=kSDo)Ã5suMC"vU9 +k嫒NBA@CAMS5զ<MөҒB cc,;꫍34g^Bo|/? \6aPX,.m`qXFv-]b 'Ӄ2@vES/Py>-CAtuvN@ ~[ 73 ]?褈-82h?J5hOKE*!R Ԃh@ςXFcPpn6)74"RZlg0Ù;&UlD [z!@oUC\#X_ #  5M|2!S/ tF5 ,,+),.SYQfoqЫl,DaYtM鳧/ z8B)P"U(*jaZb(8LOn0I8/T 7WU* Q^I1t޲v/d:eоik)P]#  5 )S߂Pzs5+h/͖iwyYqiIAYiQcPLQ2@ys% z[m73ngnwYw7 F(}w%"L,hK<4bgF?gclls>ދz$R%RQ"H 8LM". Pp~2.H42j<&(Up+1;v媴 =͂ }V) z!@R-h{F  jR_4Go2)vppLi4ҢƠ͢Sp5G9r?l, ?^@9 [u4w p tE" hbhS'~t3ѫ0@CI"H%Q*I4ZĪű(axLq!J &LƅZd ~:RjqF NF^6Zf0;| 9JM/B4ҽ$SfCvԸJ׊'y왤RO߽{;>66cc!z9,^h$F-UKH}&o1q.N$ Z Q !Jƅ)0 NtH^uXx^K!ZhzEd C9*>> @{Kkݥډ8K  jRSV147߫vvicnfEQc82@[L@Ņ Si[uOf@tpY=ziт3L#Vl{Sk??b?Y>4}_%jZI$dpI"iВ$\hq !J& iPTa *Fр1 MIG jh9 @?=@OC԰Q^![/hq{vX<48`(^]c Y^ZW[i@G~2&tY @^f@/U0}i 㽞>@ɛwd4{r]ʜ]ܹhizku-VZ1YiDL ВdBBFJH4t(!ְFAM.(h` '9:7h&ByzYkadu1@~J)2-?prfE2jNu<y~ؐyjkϾOC[}2oc =ݝ-ΒmeG^m% ӈu=}=?dlg>gPAE(J%BT4^uFwchQގ  L вdҠɄT В4%يPvkR!%=C^Mgj<(rN9. i8P zK3ys]΢*'!Qt΁23.NnMdx_?v%/Qi'j**+ZeFbIGoz+ =2O\`_oڅa.MV*P7@[8ģGaZؠ-?}SǴZ?b_g\h@[an6g='$\L, JiFQMi (dZlJ_ͨxZHUsuiJɣ0PPPPTPYE 5b@j}xW/_([[M]|lxh@?BMOgOؘ()*ƠjyB:::ބ K6@Ԓ[*Ǐ5 %zFkޙ|2NViw4| @/^zU3L# g:usO?f3 EӬ E&ݼ;u0hQi@NMɤASViV#KȎhD5rø WkC_ͨx:hvk 3]jОVTET5:|sF  j=ux_73uQW#Ãam|j+k+mz?Vm8yа)I։#kS@[ vF o  [%on߮K?X?6Itf dĎ+IW82|=^|q0 0@/ @ۯXGEhk#kgFuu5 V>}ɓ4\&.*5y?0,̧qx|L*AF t #QM_N7(2:vS~>@MiЛ U Y7ؾ= v)KFG ꧮrbs菫,o6E9wu uuuF|)4)ztIOu/U.a k'wy<ľ2=;w~.@|*[{ݧ2@/ 0B}iza ڊB7GJD E9)Ҭo?h@܌FtS6G5!B] &2: -yX& H \<j~!@o6hwIz Kp]'V((h(! {YxȐ~ܿG]֮5_<= jlF;Z]UY^ s2Ѳ~mu”Ks%F;R;ϵZbXch-K_jZ91F]GW喺na@!bŊ֖fsR><4`P9YA;5,2RQI1AA0{FsS{Z28N$}Qmq;u'1>]veOH@{ݡ#cѡlS2vLB_»8'ntefhnhhQ{Fo6Os~6NNldۺAr|Å"OΜЧ[xgl \K b1&'jZi\6Dkz>3>A<2Ё5e5~,o;?B kai2:2424_] `&;vTRPRDJ @M0nhU~u*бmиhgˣ[0N}7v%-1pWӑQv>enijhT.yYlFxgF=G~(~;9_ݱqc'Z=ͲεưlfI`,6D۶!:ěz­ĩJC 7~w`L!h'TJ#ÃUYQ|;m%RRaI5~u$ 7NqSX^jjMI@/z޳ G` /Dt 4IܹWsu9 wL9aNyf+и#3L# ЃШ6sp|?5#V6n|t9w s4@c98aجi$چ ѱZn܇PС%Pi\g S-{y{ÀB cg>D96:<:2_Ci1r_< ?77KꪊA?tոmaa0jdUcZhh+wQ 1HԢX哻-C9<k7+njv4m2{#`}iCמ:"4ZZew=Bt9_k @s\z\ P 0 ,6D(v-@谹Q(I?.󋎄@!%66F-"W[X(aꑈ m{QZ\F*R!ʊr)Y7ѱyn=2(6!G'XN%`FQ?waMR+xv,7;qF0x(@On 69B>98hugsC;6D>o@*Fҧh7DQM z¥WWYUPME!~# 8&^^^+t*uxhE>6_P(f7o\k׿=q!1T\P\_RL"jF.0h4+kpXzJg svѺi1̏idi:3%ҞY hnS)Sys@/Jo]Ea|\1n!4SO詩ߺh-6*CZ"9GݹM-ܢnaiˡjμ;۠h;j[Wǣhq8D۲!:3F&[S"kݯg[ #@C ڵkJIGoVM@ў=62nT]Bn4SN17_))"H񸩗PYZEUWWuuZ(~-{]5 ihx2ƿ;[#xсgF<1}޴q;*44nW*I% VLR_u@`@ ]][zsZJnGgrb&]_>0imkaG761_CX[eB W' c@C Lhhh` B"[|7>j\hɕ;ݽ́n@F c9UB мa"&,Zdy-OH\@[g:3Y:Q!Yӓ"(@/_⋕n|q~Ex#Gg6< oN]x gTsg[V]B\>nm>i˧œjڮk+H+­ ={.CCMWKOz+-C۶!:t4@; zI p#1u= @C 6a]I4je Za)njkld\q7;o$'ݻ~Wǿ_rZ20pS̾'MyMA}R㎏| BamTjT"6: J~1oGF}BaUk4wom[gyp@ˏ_C@yw=Vzk˕e~X|eet'=s}i09_};er3*@oJouՓzrb/`@vwE! \@s9&?;;lmZVM[C.,F)\w׊0d49s*hҦB!7Y8?7ݽx?!9^ʃGʤEE澋 JF**qxo -+dҕv-@*k&@?a@{@/^լtEgb@4|TeRƈ Ѓ"![$TYwZQw oT  /UwŦZ{.V ra e=%pj5X.;W|6>-qZnܸnn'+ ͻXQ)J\Iݕ)'Ӟ>JO{,=5̴̌l+Zx b&s}uJ& ,z(;+ǩO33 rE=#B<*弍i籙 \ zƪvFY? :zluG_~ c@C N:||n0h{ zqlRT"v~#ڍm;Gh!4eXp >ؠg8=hTJŸΠ.!æ۩/pAs\={5MO'Lӣc0=DV?@WOKg/8x g^@C .˗FG͒D&  =ᄚ&hfFDmonh.ۙ|+lGaxXYׯ50 n, g㰠ϵ\=b%.s hlFehi8&Ѧ6Dc b\U :JXmZ/jƤ&@C ֭[(U"2$//gϿTJEQa̮NsA  ;@BX}>~A Z+3;uWtlUlE И>Uêށ֋gF 4wAhhHow Ap9Fi!o`н4Yum!ce^@Gr1c>g%#@C nˉH./rg%%ү.\J*^b.԰򲒋Σf,PQ7aJv@NXGl7hh7Mk[s+EJ%%|H4ڣ`ߗ>G<4- Y)cDL3Dn1ts9jeie3+q(GKg)  3֮}4:2+a3O$OA^^^K,)2 5RE>sGHT`lx)5AMky>OL@uVhk-@[ڃhۖI)<,}9]ܬ>|}VONXgLd=0hhhO~?N' =Ϲ X%^ R|Vv^zek@@ .x?!).?n]' vA,RQ^Npe Huu ZK]VŮ%Nq=}cv@ }dHɽ۝J}izꏟh#t..\yk5$ErJb*tía h_]~_tԎ}||L>`ŊΝ.*ȷꞄ/h!1V4`)5_gttks [tО /ڸ.]*[,n*jȓU9 +hhhEcW%ژ-˱Gw.+Qez攇dDgGEfn8H C Gg鵫3ʤ.=gO_b!.W_h_qv esCv@x`D{ЧO[Áv#@}> j3:؏EθshhhEiÚCZghs9dCGw=sɻKsBrKSgqk!Z ]+zރt5F51 ʖ6/*V*gkZ*)6@>N!+vEuuGu`Шn^hϭ&B}_M^wbee?jh?2=7jΆi2qs%%3e[fsn:ҵp3@C &<<[:?z@+u\~~m$dOh7&X@Tw,h}Ȣپ}UJ}{waMkݳݳ}UQ@ ^VV,*BEmQG)DQ@- VZ(7PE 7!AL;ON.C$NdyIb2y{I&o 6n#(n1wCP6.r8u5nH%VeV ^CFbϞOOHp丩.iSp LuD*;Riij<{&PܫAWhsgϜjinbOM=K9< ХK0pLz׎~Mނbq 3 &b UQ6'Ckkp붶4!)/W˗(C0h]SN6[zwxC~7聉#|4{TP0V%9yk C"E<֍#IGa;5 ᛻ƆY.,ZNt9hj?1?ZY^b{OIɿW&_U)ugڝyk(@G(h3 t6Whđ'ea+ЅGٙdPۖXJfrdUn]PIiGb Q>10b-2`4IvܩwQX4C/dUUwL JhUBZ-SU,*QuuBz#`ܿP ]~PRbm{$'̾pTz$bcPihGhw.Ϥ]VĚ':Wuxsy k G\v}fh/]X'xⶎƖ5jr_+њehryd͊`bW߸ {P0*tv)JINv]) `F/^C+U )s]WHeBimAw(ڪ+bp>+ߍ%;k+gEME`p(@n":dg=o8 &Ѽ&؋>]byTd8ͺc3ϝijjRv675TWh =ZJD%ZX^,_ץER!KY%T0*fd TREK򰺜ziEե]ЅovҪN4%T дk,^L}Vޞx>]T@.^˥e&KJ[k8B4I<=i"}6ydI|(k_.{`赴ڸ-͍Z/iW]vD CtWv zb'<l)I|0e9uNPMwn=u_DՒ%c~<24 д#]C|y55*ɓU[5X M _WRFmÀAfm߄~rlשm 9yȤ|0MwsAyEosQOMp˛79V~ڕ۱G޲@lcYㆺ/׊^"w7r르%}k_phS͜9c?/*^]vdlsk/&hC%z j 5 q;۳oT*UZM#zY-[sLVPj5q.*{gvќ>-ąl;Øގ=uOZ|{~ѣݻw?Ӥ$Z#'vnHHPҲh<ћKƧ17 kd.IdUSSc;maGTTTYY'4zaӦMomCݓ&C' #hlCԆ y97=N:֖B];;ɓ'=G888P]|YǡuG/;g1tbA h(Y,755ѠK.4ebOO@k󽼼h%f[H4>{'8ˎ;g֭tc̷(ݻݝFYYYRGZoLixS34 Vnn.Q2&">~k2߉6`jX{{M<<}'ӧK$Tݩ~TTTxx+WG(=hN[,@s?ƿa%c:)gJf8M>}^hA2$$nS_[[B/~P?31Chy}y97=ZZZ~~~555%KY e^>#A۰a _.ѼFwDs'  `1c޽&4a4u~g>>S\ަzYf5zǹs粥.8qDDlQf(4%V(#8 к1 ꍩ M[tpdh(j԰۷4$ZF7aKǟ ?~L;W}ٌ01wCCCV"EEE9::Rz0?#͝' QN2>倏Kḁ~;)&ֲOCZ(T*-[F}6 8 Z-я1|r#[NOOONN6 ppp9s戾քQM%(^믿NJJ*..f&QB闞^Z-@'Ls_17o'5z躺g^81&|MJ$"ڒ*țPX(!"]H]Uu @Ba YOx^W33s|gιvر۷ }ʕGE⯭g.6еi1jRcvh)=22ǩnySN_MΝ;zh:ڨνL4)SSSGmQuEUw's(;gܰ(H%q޽{!F1*{>FZǃ>8oLPرcGxw{vm~?7{U/@wO[ghׯ}[iV/[_m+VJ [:`؀{/2<<#er/*'N!x(6,ny_E~Ql蘼MOO7_裏Е+m۶MMM8p ;cʼgޮMQC;Oqkn>Nu#s=??7{G|ɷ~C`/EcueQ4jϞ=K(;gaQ*D Ȯ]N8122q-[K1r*nqT=Cѱ_yif1*t}-xvÇUb=e|3<333S\Խkžعsu^yeō2^ح6l8ydlv=sSSSݜ*w޹tRgFGG7ܹ}*-N:M?|eGn[f_lnu%N ּ#cz۫:J=>OY'_38{l4&Ep˖G5VCpJׯ_oǩty?ի<@ܹs|M`4͛͏D7QpAb,6,JhGFcTt|Aѓ8pӵkךcӧODHڞv@GxX\_~e7nܸiӦ~&''y{_14?}|ǀ̙3߼ 35ܧU1rꫯ:ЃSSS*;|7;c1seT8@7m0mk ۴]ɼtۚw_rdL?`{@^!*~뭷N:\_SryrJs 6n-,k;[[6R֏h1Sce;tnܼy3:W_}= ~JGo h޳䩧jnYV4`4)/_޾}Q=Qw_٠esySi뮿h*>$ vvI,Vϟ={v&P=۶m޺um>l߾}5!ٵkק~:33_<6T͛uԄhRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hRH! hjgllŋ5111::j@4rر8r-='F.n:>>~hVhoh4ZoBe@P/G>>|ؖ@P;.\u @B @ 4)@B @ 4)@B @ 4)@B @ 4)@B @ 4)@B @ 4)KͲen[RQQQQQ_%F D,_|ʕ2MIGG1;4@Xi,$: ;1Pih [b-ܑP]hJZ|!(4@JR7P9h*ERSe"e˖ I!ysTua $ٻ;[$$(I@^pAd\q\GE@@YdqA#[ lY; B4tl`%I|[SXU}~xth! πB!Р: 4@'0`f.N u}nȐ!FZO4mtFܔݞ9Jc1)oRy6 ϸ)v=##cTam+oE ]&SE75|1 LWh@ @WEG1/7Xch@F[DDD##GT>M} 1 Q:ߜ}|AcMh-8p uo6o\+--A+?DТ￟X,lndoh@ؿ\:##8 " 4Xqcv}mf;Q~8= 9y#U92:| ?gddZm=h ZCМ!Ctj4,7+Uo[oi*&&fmd2kQ~8= 9CLRo-gSW$+ٿ^ƯEp4u&gSz'@ۍ`;LZZSSSBZC]'Vfβ9<\Τ䜥q 6D^zϏ6b^՛R~IOO}a @s:SMFJj}v?1Z1IWt}pGͣAgff>Zmf{h @s:˃]VKC-gSYVtuĖ92L 8礼}Q4@EМα|cINXUlgi$!ˠMoWi3@+oMoh~vXIU7KM,8h9i+Kp?ЗY=Moh͹ee6).(g}7;AΦFxgœV9aYd2h4BМ[dgսu7}q"5C^ mRmRhNYha&@ɓ/\ܼsI&z4#@h-F®.Y#H6EL _:=⺓:]Iaؚ|ҪF:/sMT =M6eʔfr&N 9d ]哮|=(s㇇̏w n/V^\2cC?gXNZSkm=guGGU3?ڠߝ`8W@ 9y#9P&t9].[.DSdAda\Z?س8XIA ʬDwrgGͮ„qD5 |0 Dxtf-УGtҵrz4#@hN>u0:5̸KM>"w]Ƨ sFi4qïA:|?Tvdij},g5@ˑĒqAݹ6WY{Z 9>M?qy{y覦&\O{h<{]޹S*3;f?qo2(|hyqɿ ` υS5/UV͙z:g̿'^w>)1.J =1ZWY*²}K !Ao}aznazE}n>[c߾}۷z4#@hN>2C.)"!wٽe^_h #㌱:5 # F|>jCjYu|]TUnbOe.X)n},3==:N?"Nǣ[%KUҶ 4nϞ=y_=$'hFМ`s~2K޸[޾KM"wȿgww˪^|@duZylC5k43tUN5aiy'VNp?0Z] ]jTOIc"^*[ǟ*e=Y [0sH}#=ghO#޳gOss&L ~ 912yLWW㍻[A 2ЫAg#"*5TOl2n6n5- ݠ#s:ՙ?7a Rl)g?KMJ컲-Gr̶{CN?:/4w]Oʳɔ{䥾Ai];dA{Ag=SM5ٱ'olj<͠-/ 'rE \9yOϒr0REaHQKY,RfRۥRik9bccu:|vC&@74 [<(('/G]J/yG n]Kew^[ϬNh67Kh߸1aSl--ƺM5룎gG]B_dߓ}R% r$bp"%V)ⴵTZ%gI |g44tAO  ˠ=$Evݠ{ʚ>g>n}xgLNNyJ؆1ߍ89n*z$?JdI be0ˡD9lB9pRKr$Uht}]YZP_=P,Qw}n+wjNύ e%scc}yy:p> ~ 9_aA2a<3H&T=|C>~eA/"eEOY[rrNjj5ىg<%z]|㺸sޒr$N*, M'Vdo$~!JR(thgiQqa8KK'e%Eqx>+*{Y#Βrg) p @hN."t7 OW}d^/ϮgY{/ueE_M!vE-}/ :;Yi5+Mg,gOgOeկ6լ:Z)QӤF3ʎ'dw[e] ?Y r[i>@{wn\/@Kם"}Y=h4#@hN.^b 1=ݠr7菻һԇ %kHN?Yl d[|3D6'+zn|vוQ.icH:ZikZi9ܸ"vjYxyRjCe1]%*!RjoijiΧ+8UeβƆ:pzϧˊڸz?R7>+^yѓ h@swP=LQ*O ~{˳gFv_Y~ ]z٭`ck_\ڼd?~tniuKMǗDV,3_c¨71U|coeUKCv$KU]Qbk)o27 6tÇ ǻ>_h>O&@74oI0y^+5ܣkɆ>2PrA7T~Щz_QR]O ǜ䁋 F{aE/Nr-^l_[0_E&#s{xlfmlOT[ -)qn>2=Wz.\hnn޹sI|{=4@)FH zϽ-9}- AʷCg&Wd}ZdM6;dKlKQWEŷwvHQRPpȭ M>|zn}2eJssxq\'NhFМv QC$%ZFDp E~|L=i_{^=xc˧yo:Co?|݇/㡟᨟>ʸ<{9#.~n0@5|u=4@8v`82 L A2}M'[fkrK#_Ψ6+c\=#{qƘK?G] ?J=7+lK츪YΏB_sp *N/E}G]{.%]=]1dzMBg2$C@Q\eZYAH5Ad$=$3:ywf2Iq>Ǔ">?Nkcr@j;;byB3ty`C:Jl[t=e5iˣMMܶx/Z_!nCT;6'v?{&ل_V 5ZX ~ozZ _(^ch::-?_蚣u|@-h>РhV;##@zVgtaI- :\IRy¡tJ資>qSqKWB+jb5ILy&^l(ݎ0+Aݻ|5V5r5Y.Av72I!՗;i7,RGc_QQPjԔpOU#T8lW\34ՙ VDA:$45h%(KimG,=D5݋}/e_͎,VԬIhMlOl-HlkJѱ5c{hm;wv:W\ɻcӉet|9}@GtDD{_還Q\_>v4H"΄p) W̼ima\{KJ:];NqtoZcHҖC|աic1=肂. j3>4 `u&3@sKSݝm+}l :RL1"R &q]G3d']ϥy3=zzl |eӆMO4>W5/^pWA?Fϸ>Ы׃ G*з2 ;9v(XE!@OMt(U]೪FEuotwb>Nwr9@T7*˘VY>3++ʘӠwVl<d``8++kfGW>za۠WA;Q¤ql}>^*:""DDoOiʊ eUVlMN̍ǣnToV˶K>+y~7t/2p}@":1xlG}w:%3:/"g~j? v!@W_7ʊ2˵Gc,3o|t ]Ξ]UQn U;7\UUnUÊrs} `u&rOп"\VxuC6^KȮ0Bp)G\+N+V|C|\KY6+>.C":,/tL?wCփxн:m[kr3{`VҮi5DtKn>G [Ύ]Ϧ]mXe̷vhh h3b8'wBAnk +-GcDOO75hc]*I{#oO;)ܩϷ艝w;3q`Ïpe}ϖΖ|Ohh Lff!\޵>[{{{!hhYLj}sK ڇԛ^iZ F^Nd+_}OL4hvpX_ƹKt>*?!>?9ݱ-2|i6PBrH; h耄ޕAۮ/1z[mпxd > 44 `u&7rNN}6q~%,eIi6H9>gwqnӟ%_JoˇqQ)NSmyxhxf7h36h) sv!N/':QhO -9 z}(9*:'W‘"PVKh6i i^N1cFw n5L mrB8ڞnhh Lrf@<eFE$} m6j"W}{vݦQfQ:N@BvfmKE).`~`^pa&œl w 7|{͜&wH.((tŋf}hY LzQ/8r[6rXfhnh@ttKaa>F+  !e)[DD/fAo{'v>CY1bw t={{uwMotaaYt3>4 `u9\~k\ũ#1aޘ9^.^m&eM=ZlІ#X%)UȖ:; 79wUD$(RëVtt"@ѹ]SS]YSU٩LʚjyezhWG}]ZZJw(..f7h39p{D7]x07lT<& 4lK6.Xj6"3$Vi)EI)VNQih.$/I"gAt٩40#󼶺Ұjcb3yX[]3yxh}g}W\34ՙk\ġ|tUva"R[ -K)F{qaJːO}l7'A'L;m{/OO 2@7߭>H.((@V9S#@nVgJk,woѠSoڰ =fP{Kv=ژUp\=v!mK;N^f>б!{灟Y-OF\RR200_\\5#@bVg{,;p4kV5?MZ$Jm/bvjDsXhcv^&iSfO7udz(5|Yl0ϖmwjHAB:Sd ˠ\a죫}ssTgڤT-HT=^=CGl6DsVEOhC{I{탛k\Ҳ8mqf쎅9 ۳ZU?tLѴd}foD,CF44YSVp*Z8'W=^kR zQ\REײANE6nfWE=9B>`%6.Lo^ٺ`&}~ޅ2Bm] ςiόδ6iZ[rii=M8ΎNWW{OwWWggf7h3]awsE//hxuyk :Mj͂ n.VDptQݏEGVkm5D?ٴ4FvAR݂TՂtFk[k6w(d2MGZ[Z[ʮ_+S[]١lM44 `u; |{cӱE)MskV5/~jCNIII^G'yR˞T5Ll6]<7eN~\;s̛q-M ;4^h;"@z{Wp|m-XDwwfd¦4%I2`}?ЍppBw]@,M9<3N*9w,ts'4@tg[jhvOg='g?y4߹ٽÙG7n?w՛ YsdO^׿ore? f~s@lh4g^h[yWxe_M??{߿q4sԭ;;nzڹ7z_.ښ)@ ,Fh|%\7WKy»^[ӽ1{᣻շVӕ#VU#<p>0qSG7ޡ'rZPkRoκDz:ѹu; jvww'> 7;cI :R)ًMҧ\S8F~FP.b;ÂZ^^t:] .-- $tFQXyk׮w^[[i)c J"ē777ǵ>[?. )pDWM[9b Z&D/^ngyyL!MS+@hH%I29yL{Ah _zuww鬭g۟'@+If2Sr  QT**gjVVVNӉpspyR?͆ b ;q S9 v˲?4h8-Rde P R)sg >hS@}(H4h&gXhjZ$^#@R\9RE$@U$B34 PP4@%IiJ%cYz4T*FC9rٌ4XI\.WzeY#kmn‹^4Mëk3      /|s%IENDB`alphabetical-grid-extension-40.0/docs/settings.png000066400000000000000000001154451460231012200223020ustar00rootroot00000000000000PNG  IHDRIDATx{SeqEY[@A@]})"Ⱦ*Ȧ2.Ȉ**8%MI\'|>'M$;Բrrrr"p[`/Y %Kev`, d-EekP$9 K 35RK&pRay-Y)ҷ| *b>pk KAC}[˖tE}־{W"b ֺ lMG[6T;A#(_N#]F"||T}\&Ľc|d,b;g)Kf">T{4:$2RJb> qf6ғ| !V!ZY@\&|Ɲ+q+f.\>ID>2fN0N&vWrfSמ|@8CȟKP"lTcw*^C<">->Η3Z KZ i`&?H.,YH!FZOX"S<\ pyJs]s: Ęe%2jum\|uQ`ɻ݂wE^`%4 C_˿K w印PVX`4ħ 8+Sn s#6)]1j,}ќY ڷEX}6 >q߬}bΗt4[B#}f=U+]rGt[nVU{Y?USe (_C_ WREQbE\ET |D:b  }\oshF0XL#6 >5Η\>IG;L9a%D(|4;ڎ".5!?E2FnFu!=D?_0=KE * ' V|?||+ek!^,9fE raN7}k\(R~m-Z Gc`bO9PNљT EU{ k`3s%K Evͳn OIһd1Fclq5Q"Гs. Oӛb-Kh< L4K |b7[4#J8S[N"Y)}??^:q-p$YF#3<u@>0ͼ)V?+\UZ8ER ݞr9(C 4..m}ObB9m HeD+:8O;hGz/~ŕ@N*-y@T@\89/Cc'Pb>{`>159HE,%X y?E=Bz-=KD/!RQ/ |îYVЍ$j~? I? DNXF"a&+ԀDvO{?D'2ǦTt[)#U2׷HEVegQ]/7z2$ / o5 R$rW&}ÑRX'ӲjVcV$J#wm3GRecyz%g+|?%#9 }}8-50PDV"\<iX18 n.~Fv}r¾=*ZXyoPB]82S% *.#w(A_d \&D}.V%Eȟ)XM,)X䮒G ihav'DvzgM;1q}&}l"uUZVT^,nsTac)RwH  }.k0%wMV0doT1U\v~+]~}B?#I$jd"qHbWtL kΕ@LU6Р-*# dȱ_ZȏcTk> 1#;pDVY$3@tK Cyn*{#>UB?ڊ~M;֍XJT]3>; cM@jmZ7oUS+wE} nhձM*>}q?Nܻyn#ҴiSk/ 266\o;Y& zՉ]a"?x&?yL_oIqW[w;q]n7aRrtS=ck?OD~QIMr>ќ׃gM&n[:~06XLor0nN?ר]w@˱>Y6dmf\G#ױa_#?Ձ~Wk_{=K+Wjβ5$CY1&qWk2j~v攚뻊giUX/{J̫sf?Y>@n.* {ך=ufw U&Y?inz:%6m>ZW6~z_7[zjǼ3Mn^ VlK_D?x3Wj9s@8yw>Vw~pN"OtH- oN?jݗ͜M|=N1Wcuz1~AӞ>@$溍5/hc:)3C?V3qI6~ڡ!o~xusmV^=V4o86s'/"$6Fys; t'za^Oٳ߿_>3_O?}I=AH}2VӉ4_ϴ9 ΁=caÆp d}oc |t~l?,[Ln&i֬m|eƍ`iVYYYB{Сu>?6p8|Wnw\.駟d5>NR9r䈜;w|~ݻWڷoQFiŊ,Ix[mt ?C9c}׮]ަ[n5ϸ^'O4!;wT^:vXke_^{-){Skݻwxy >{[n% bDٱz*>a_5q_ei | VWnvO<?@_n:o믿klW'8fΜiW_3fN}@Ջ[kf~n~聶Cߎ|;>?8Erݮ]vvz-?@z,Y_ŵ^5`kʮ]L={Vf̘Qk4fu=[^t>7onnH7|fEya z'|yp{J_Ȉ΃euG:$xذa59~ٶƼmz-omf͵6m2h?uy睎gwh 9+}n?;vlWÇ>\Pn~ڑ z㏥K.Q6|}qH=˞={D v׏6mj>7nΉ'+ݺzz(.oF'Nh3ϘuF/8u~V،|3=O>?@UWW9]ֳ({XW~lFF_4hmj޽ORo7~łޏ}vC 1Qpc'4ml=H־nf >64W]_VVfNGt6;t`V/:u|?yM`׳gѳ儻>|>Y*?@itF |ԟ]]5#&}?GCz?:F0f_^wJx:}?}dƺMAz9]멎 %A/ׯ'g+s{~)/W&Vvr Gg`>NHuv^oFs|P+:7z~tq&M2AArc>A@j٧-//9{e^x^>N*OIQgY?s =L?1WD>ZAu]/VXW554"8 |A3JΧFԾ#GY<2/l߾V]mkpPjú}NgId;ݧnJ]x s=>^xAMVͫ^_&=NɓotE sN3ղeK~؁ 7B4]Ɏx[oW+>LXOgYۑw7R ٧wwNV+O FAHNs`m61hl+>0ρzxg | :roXz~aOA>ow @ |>O' |>O |>O' |'@>|O |>'@>|O' |>'@>O |>O' |>|O |>O'@>|O |' |>'@>|Gl7p' UZZ*GsO?$~ݻWڷo~?<-((-^{m].w?< |?ٽ{ŋrIyg3r-:gCǎc^u믿.Z u}|?̜9ӄꫯZg$kL|[?/er>=to1+[v4裏oGJ6mjE]dÆ & {چ~g}&/yjƇk׮]+yyyLx 3:||S3:%8#M7dQC?p3j(y}m޼Y-[f&?>zy7/b} p0ώkrСZzEؾu ެY3qUUFi<ڵkݮ];͊v8p'jwD'\G'z^>#iڴnٵ?RVh6ъ>ٺtbQ =z)ҽ{qۻwoy^۰5u%^ױX/;]w$##FwQs ApG@UHX\:+b:0`@j:k޼yؘѣGMd*?l¶o߾_=nIhHܹ=d~>3fx?/`ODi˖-5sgXUVf\ʍtpgMdjҤIf;z`$4 pŋͶ*++=={ 'ٳgk^T߯Ѿ~t+V~7k:u F=C+"/9[K|F/gΜjٺu߿q& ճgO5}|}|#::cGwîYF>s>}8z< .4ot}tE}'jV=y3䑂V~у;uUXOI / ӦMMꨌzzG]avnæf\u78uEF_q5_~ѐs;}< ?}qԩS -ZSO=%.\0U}aptN@d͘1@C3egOW?ZgkgY_.;;>{=ƍ_{a=.\Ο-[]_BI=Az\Sm {95]Fd_Kw ?(Tc;*x= |!eC+h?L_6WvMDv xF #yU.#>(6>W)m=Ӭi9'>Mek/r /33/ ƮYlf9w?lV@&fV{R~6[\ =YV܏Ό/(HGmE|UCG_]/c6~ӟ@7P۫|.]~l~->O~?hD_;@{@@@;Oovg~jOIc^].@-v|hM~T_t~YfQi/4(+?K 8ݐ#;ޙr40&9|{J>_3Z$ۋʓ)VJ]nOK $B;"WW%m;ɑzD s ,?RXX/(\l |^=w\AgA GpW j[B.nP?m8VϜm/Z }G B ? s+C{"tr!ϕþ?Ϝ?C-/ \;N.m{ߕX@[?RI]Ag~_Ͽr n`\w9z޽[>cxHvVZ 7Ųm6oܹsңG|7eܹQS/߳h})~~p?)Gc'߿_WׯTWW/uÇ#~~o-]GMOgnׄ 9;~~iiY/))I{nܸQ6 |2F>\wYsgW'yҺC}.3Mϸ0v s43u%w}''NΝ;׊ry饗~ѣGʕ+7~7ٱcGmHPO>__<#fo5EO˖- O>D+ٳgn:c/gϞ5<^ɓ'4СC"#'9m;|O?$~_'fHTQ̠+΅|Fc<#fޱ~;˽+v[۬]VN:%z;C;&} Q;85n̙cnc'侂_[oI޽MXڵV/6۶mkJh"={ (]?'T}(K})'Iw7/z~No5_' b(?GaXK.8`_opjꁱSL Ϊz8/;;ӦMh۟(^kkjF>O0_cVg~a۷ \{æ(+VHj{_Ͼz3$zЮ·{L<^vO1GۦmĈlI|,NJ9Vܯ>_k'ދ~nC']J77zW*hꊰ:f̘Qǁ}ٷ/++ K8of!CmJd߄x>J1Gf(ыO7886+ɩ/J}/ ݖY8'~{QuVsoݬ ?&ufngqj,Sid`sJumz_qsNsꋔZFecǎfc:~9WF jjȾ p(me& J3ң/x135sh&ڦoAw=U&)ߵkWz H> {ցz쳎?} =K=bhkpہ|p¸_$:-'Nm}$ |g_M43{S:sN3}->'y.| åZxSRum3^};~2e |I]>qDJO{#e#:mW |Y'ͮ|FvmH8C ry'='4Iѩ|ӤnSSIhO8$BiI|ݦ9>4>$4ES-7m6=' |GOaÆF&G曥ZVZ%ݺus9D֭[+'=fDs&_z_?[Ne){+kKr{݆nKPp0 's%ϟ/Cu݌3uz9s9fRZZ*@@'-[n->iӆGJ%ߌ\^:~nì_e:' ޱ~}EEErk֬1O-[~ĉ2x&L ۷Od:#Jn?GgW'&?={bGGu*tYV6_pw4Kc |}'q}ӏt"ӦMsJ=jnrJi׮]OnҩS>A>jtCqϮOM.~2^|[ݔȿ:QI/Kdpygbٙ]$$Aa(H KZ2*A'c3+O=( s~.a: μy^tWWWUμSՑ^iUěS=_‚ߤb _d1w"/ 4L>.-k&ܹӆhכ={&lܸ,Xn[UUemfӻ0Lpm*ڇA1vi:wl?++V޶5kݟwT(y'rԩS_N4l߾cI=+<]vJx$Izl-(MбB8nᆤzdZG/*.N֭[s0~a砷-39Ki-ZdjӦMfĉiHy;Dez =>Aygږ-_us̙ctGԻ ڋBufS_2e5~T{{ۤ2S=Wx<{D1_t?e3b^?͛7Oīg_ vׯ R6mvG?zҲc׮] swzهCIwӪU+Vms7K..ݻKnڵ;i *C<$L˗/OEfNjF qwLm;A*AuL'.DDW9Wc$ʹ^We˖mua*;^yh"M[Z7^m !oXۺ'Bu:`Y{LO'eVkӔmbTRh_?RJ?q`KoN?z륁B۫w1,|&jaso~Ieuuu2IAgj3(LIlԳYn]7GM F[P6 GTcXXӹ_&`&^&ر;v6m`Ƣ=wԶNδn*.z 4ɷÒzN= QLު7__>e~#Lxܔz7֗'}/Qoໞ;͘zȑ#fMU(T(QAI]q 5>>S˗I=pj# T°FV:m$fzlƯ Z ~Pt_`s/j4ZeQ=ݡp(t5mM֨0;lq.GwŒp]\=__y:4R=Q{EnG7xxfGbmwI\Ul{i_ASszZC"**kf2NP>ӣO)(De LV4AmT[Yy oG:zQw wѰs0~{Q%y={Pw{;(Bvw6m;jݼNyts~ ~El$_OAsC: +~ ~G|f]7>2t3C|#> >##'1/&##>C|@|z|||_ #=>##>#>#> ~)/#> ~1 H/W!> ~~ GG|/#+?q_~żfŊI&9x̺u7onZlTz~ĉ+~To.SZfSz̟? >7BPcZnm:udΝk;aÆ|QlݺՌ;6y˖-vAiN% .44\rСi֬Y~6uG|b4_뭷&-1_~e^8 dΝ;}M|/:0Jڅ^X~9r;}L׮]Ǐo~0G5۶mK+k֬1_5wqGZi ۟koa{;Çu]w%Gd+_o^x{݉hڴW_}e|$ `G/0w}w .lGX嫞A ~ _5ט>,yf+4ݻw7?iOfɒ%}>}}0]~j/ꪫL͝wi>z/aybG)DXMJ(}ZAVO?-^j]]~z{Qϰs |?ߴb_Ă۸l鸐 zUVv`iӬ|oK.B:?lX:H4J^A,˖-;i;  ]袋lŭ2dO$5߰&}vNT#E<5;f͢ӫW/;N: ظq]+ѣ$aWE+H-K޽O+.Ja-I0(=l ~W=)@ ~3+~΢#9K]}(tcՉUUU7~y'(K'TWg[wVþ5 f .lai}Uϰs |?_1^4 REUM7 KSn c=+yQU$ٖm7jԨ+!Vy,Xm0ϴg9>#? D_h>f7VG5nشm̛7ʗH.]Ԇ˸h";ߝ.M2(y ͦ,{ 40\^Vȋ"3fΝ;'Ų]~نgyg9?E|]z|?C ~~ vm%=:ʹm-׀KM)Zha-$`ҤIv,G<(|rk=0)sA[]>OKO,0u! ݵPfΜS|G\=__#Iz5V;vh{'L(|o76' GM%O7K̙{aB$ݘlʗ+ϕ#%(0Za0}w}*Ba= m[}z#_|?ln߾=_ED?]dSLXvm^/I#z*mo'E^;SM,iL\;v=ꫯ . 6m{a M"{"6Gl?q(]/t_SS݀0ӭ]+$އiÇӧGz^5m^Cmb}>/EW!>T ^U }7|ٳǾO}8Ww"IU| Vkɒ%v["*z0f׮]6_raߋ0Fs[_s5od"]!>@-?|"n>=N3HS'YVzտ[tPAF5-J|41Gx{a{C+/raKm/#YST %&c|_\.3u%}IY48MqVR(Sڬ9VoR1/2_pa iR̝;u]g foMEO)FV ?u?r!> M+!E&{=y 6B`^{}ȩ \@$`˖-KD Guѥ'L]x-TkݽG;悠r!> ͬ#$֏ͯ9g̘a|O Ԡm۞rYtҥKV~i[EBt|?7rZ z읐N8 sknw.Ν;m[~ٳgb.4!0E:ڷ "c=k,>u/A|EyPYwnT]"7ݜשh6m:'({tӛWرLQհv|@ZDTLbFa뇴yXVS?^wOׯtMCT\7xK޽{<=.\et-> ʢz߲eK[Uhmy3)?̮,Jv$5NF2iWȸy7SbIP;9ڦ]v'm%]R땫I@\_Xv6m KwNQw{sQ?hAhm;'(绷l~xGعvo&Xl8_ĂAtށ UO~ZJ $=֋$C$*M_*%5Gw%[P Ҩse_ɮB(d!jSg *+£} EyFmWm5QoF[&_VXv kD_K<6/`KwBPPR9 8; "^ńCe҅h|$#bG>W"+gq9bB! :+LM3ʤ/P'~~h@_y|1@O8@KA+ G2 +.?{"_O$b{߇P|ӓ[=@A~=wR@k=CY`k['{}xO(=/8ws=@yl_O%+^/G}ņ!\G:/(G}8_EOpnP*.P@iSjPB/o_,8>XIXb|@EY G/cG?mߠ| ~~Y bPbXl8~~<6X"V_,__<(> Xqhb&c|@EVC/oV1x~~|@EB//+_4_,_#C/ņ#c#|,iٲ@ F+b#z[oe7Ǐ7?ĉOi9;駟]6hb1׿5tyÆ ?`{/W@ ϼ_~aMܹso^3I6D7-ѣmL"G"bv擄۷cǎ}wi 4(pt+Wu6lI7o6wy/͡C̙3O ۯ_vŐ/xR5O3JĻ-w/N*ߎ;l|綬)]4ׯo:("r\=~z]w_~8pŋmzT~]m:[l~7{M y/ ^y͏?h?WUUE*Cy+~кuk^Ri&+Wnjc~m[[om ^GR{ t,V?':ogmCIк=]־}{ӢE ;HW=Z׮];Naۦ fq­}kٌ3lzljK3af߾}sJ{왶}t!:_Ysl2D~a̙$Au?F@?|+5߫w6 /`\m5|+W;ז-[)++ˎ9$ q=\[fn2 u* х{ꫯ.o߾v;Vuw$W~7A@45"VYf4cǎ5O?:+Ҷ^7nMPW&MXyWȎ+\ie|m${I 2$R|]0yߵնm|?| _wo۶m'͛7O8;8S˕{7tSm%$:ueR ygi6m+QWL& |]x}Q]]mtHz?L߅ x VN8*M*"P^+=}ؒu…IiweӪ\3޽Ii|IW.]"oANJR;zi]0h~@U؎h̀z5g ~׮]T ݰa裏l~|IL_Kv8vqV@"|7]{gzn~vkb% !vi&MLUXBt$)Gvmɺ! 2nQgTa ݻ}k6 ]`^ E@믿s=~˳f͚Gy^|u"| |Ic!R >#7=㩧J: ~SSc?{p 9q> MK9#>)s"Ϲ>wYqdz|_U+Οa&7ewYs4fA 5?z3\f}#>sR+S3ו/4K R_"?鵂?|[l7\h66[܂j_̊UKƲ> K- cK͆u">__fT,7 ͚%f[O#Pڂ?beA-cjEQFQ> ̭e^J3rVW!{RYcY^~S6-_++WY+VfWrj? _< ՖE]P_93?Yge;<LeeiԨy{ T2[j󸭼?{7lؐ/6HB~Dϟ;rC||Xl_Os /nw,E;;bէOcCzo|i@ S(eE6;LAz cI-kU~A~=W,_R b/d_Zb_^+yz"gq)++ B!(FɯVjXQcvW^_?_r  Cի˼W?PUG ]m3r1V^{Y^z]TEAx^D1{ s[@O79G PWbQ߱5f[l]WƫK reysc|^@F E.?Iz饗re[og>_4oܴl3֭Kާ Y@ps?ٳǴn:VZoٲTo֭fرE! ~</4[eՆ%K~Uյ#4̬7jv5v>i~}|oa{;Çu\p[|`~GssןO{V~7s'm/+Mn޽{g}OEO}]z x*AiU>]TϺ;-ڴic~'d^m2p@_ ߼yٿm?n>D{k.sӷo_+[/'a ~PY ےg?l-;jo~M{-:QZ+6#~4s#a3|QW\6O\{{SO?̙3]t@(C S%z[3qD_N: ~BBtˮ6P/@Vݞ6mZI-Z" H:&N _YP4o^?{2[9aV{(#G>!:'w+ czl/_ny/0ŋn۷o?i$PǏ'`+rEM{]wY={v` ~Ba1Wz;zhvի_64ðqHmޒ^[Ee@AW?lzo8fm͗#~TDM+yS|c̎;󫯾*<ٴiI{a:tZioԩS?J~Am>WUU9x'nۿ{ёnPիWGW6yϮo֬YZ[U]YPza9r?VK mj4t3GOKf曤uI`ƍÇӧ$Py{%z+j*x?c嗉t+dG/VB^o/z5uܸquQF ~ v@m{+g<\#_V>/A(zi`BufΜ6DGFr05R3g}Ϋ.g(^~̘1VL;w%(>fڵs=m-ZdgQ?lAmѶm[3o<+@tR2u[7buoi\;d"mA d wL?J~cc缟Q}<+'>#^~?6L#Qt>O| lH5C[&i" Uf +ț*rd >gl5sW[hPԴAwmC=d.aX޺ӌFKEYP/4琹x&/婼#aiәtB|ѱcGLLzr.Sy7G2> G𡈙0a v}P9 9|婼+'<# G|("4xɦuv‰4&!\fbi朠uwWLee%ʁ>ƿXG1+Wh}PpipBh32z)o;q~-ͬ#>uuoM#& {-bΟ?(i/#~4m|٦w q"~4o#L|sWʻR&W>PAW)l[=炯< ۋ ~4]>XN4^1[î򌏹=Gxl_bcǎͩԍM-[.،׾`r<4,kGKTBP4ibn&xb?\xᅶm/"_#ö>߆ыcśuQG*{?`HEӊq~ ,:k,+!\si߾ilVƦO>"ˊqu~!Pҡ:G/?z{4uYhUQ{,~ ~E|$_d?sLӳgO3m43dȐ"K.5]t9mBZꂟ8:|4oS_,?Buhʮħ^iUěS=__7k̬[0KStsfٲefÆ fŊϙ3 6,nڵfرʿk׮I2۶my͝;.۹sв۲=z0555fƍfi_ҥQ9OR֭[CitCeK7yd^u:ujFwX[ +_u:+WitL_gϞmY\yI"~[m-Zdni&3qDݻwkg\\~en/} QwJP[(u\/ ՙOɔMz\8ES}1oBw^˴Ni_mxNz?t#E"}?X|oN:o޼%\b? YISN0k;(+l%PӡC_~v;Ӯ}i3zh+EqҨ~*O^̤ĮQ?h*WvN*\|ynpʤ݂j<~˦ڧO{h*]۶mFaGP9\/[liˬ-ZXOWLsޯڿ]}-c'Amtko~"TI8z ]4tZfž6M&qHN/q[_H?oѶ>N#mNE}-DFz\*߱x~.@*"]"wi۶mz~Ɏ{dZAx~U-[\z{c{y5%_|\ce˖_ޑ~kFcŎ7=DS:}#Gj}Zb#vys)^CE1^x߿Mm_}ֹqi;mwKKK*V͉;?w>Ҷj^p{ݿ> xGb~۶|׈}`o>O_7ova_wk8A^E]*t}_Oh>1{sCiKc$5Z.ܢn~F[1/}ңeɌ3X(o툴ݑWyzjYu$dֶjZwlB"HW? ]B?n~ށ&77ׅeSy p;XM<}{Fmڴ #f:&D7cm4L>'| nZlرc(vMPWM<;v<_nFޘ@' xi;N8-##7'P/ozo )3 |F~F n֬oR !o'M"Ռ|XqO7Pfܣ՚H>}ͽ'$:{x PN}IѶo$#:-Zpy-M~^{O{?:m k}S{?IZ)N. MO.h qO'Qw$#>hz6h*-D'Yf+@O6e>t |>t V%}>t|wn:Su|)Ҷ8~d@Oo|;u&?-v,?]eHkΏOOoFݎ'@C,V !%3 WB>~:o_FOo1ҝ#&/m2|.ی!@K(e>t "4?]EMO+AOO%W~<?_Z^-m9?y"w}w !"kN~:Gg!@I7o5Z_6>tfWl=g#@C7kUxrCOoj5k92Z"#q|?eCnѣ׹-33.^h.\֭[ǽ۩Sxs>_}V%n;r>|nf~j--\1Z*||W惭YlQ_~̙˻wm۶?}\2b7o܎;QQQᮻ{sSk{7@uvS|kb:q K.wyg߸q}ǎrnn{~Æ uV jvAv |~rMM{b=4KJJne˖ѣGX_StvjΝs}nɝ~ӻouu}ѢE'}L7 |}?k,w.5sSwvik֬'Oۋy3>O'+CF:w^wgo~?F|O |' |>'@>|>O' |>'|O |>O' |'SG'Sٍ7!tMֲeKk۶o:tWuO)6b / |Oo޼9o` *BS|O)97-uCO! |F#>O_{ͥM ԇ:"]G |?%n ޠ@#>?ys '#ms`-H '1PO4O3"C-h("ΨC)xSI |?^0_3VZś;' |?׮]k{q|`ouٴi۾k͛7[EEo' ;w]w]w=z4>OmدrΝmvI;sٳǺwѣGmv;VZZ=;;V^m}={OI ,wsA{n{ܼ߮մcZ;wzn߸q;v̊8`_~] 9sxcWWW2)2dHv;.z po_ۭ(Zx?k O~֯_]t U1cةS"~k^#UUUSt#[n۴iiGCK諰0j+ T~n>O78xk [n]t}}W RMsϹ)4C_~EvMYvmԠ^zz-Mک]SVV5t!n>O'u… t(۷oe {3ӌ9ҍZN4˗;5o];#۶ms#|ᘁrfW_6 ~<%>OI |kTy͚5rN\ϟ??j]̙3]x+CGu3v l_&5r bݦiBF' |?gQh*w}FtMq؞O' |>O> |>O> |'O>O> |'O~Sm۶57Ц>O  czj۴iڈ#mݻw[=>G={]WTTdsIZ' 6}^^egg;nݞeÇwo} Zs&>O2k֬I(^-Zd >g@>(owhyy=n X5w>Xti -SrwDL2ʕ6uԨZz׮]kϯ3 (s&MrӆFpB 6ĉ֧UVYMMM`ڵ۞¨N~ |'Nϩ \.))q! 7n_ѩ?=7nL(O ܲt1j/vvtSNQ~6qǏ3g߱clTqwiSΝ]k[nZѶ't>Oꎂ2o~Tj7){喧!Cb7֯Ԉ =%K pkg6m4jzkFT_HÔO~\s׭[FfkT>m6gcǎnn:wm룭_3FcBOf͚C4(ҔqXD@?[gwn2| EGR-*))4 |-s˖-Z7eny)p޼tOִHG[^\\8[OA94KKKT'֓N;ڷovO7z=6{ ˜bΜj3g}~z???RsuAQjEgȑnFãdk+VpAѮ~Os m{Cshl+gϞhYs ,Gj4FD|񺿶+ၟ%fa#Ͷ{ε# |'[@~iComnvsmb*I> S?c#ϳU6j'_~ ;̷ /٬>O?XqV١&>O?DU٨jСƦwXJ> S=}%'f-Yj |~̮ve-C>O?T"Kjm^OOw:8%ۄ6-k9OO+ɮb' |@P=gb'h(~Pg/Wb2kO3Ovg%6){=' |:߸Km} S>^jS, S>Cc8b'|Obc#+|OO> |'O>|' /믿nkҥKɹ*裏lժU Zƴi7ް.\`|=cֽ{|Zܹ3UVV=z͛/#O~ߵkZ>}lܸq{nmƌ eӦMn[Ʋ7olzlVVK駟cСvw؄ lÆ v |&.:׬YcgΜ={|7?F5"C|'[+h;t5RzjٳvA N),ǏwΝ;,?ex˕+V˗K.SO=xɓngcϞ=)1~/ݻ7:MyWpm )9HpGz>ӧmˣF~)h}z~8:t  |oz7nhǎss=V;?dȐ#Zk7`^,M2xe޳ӧ펵-}z/MItD=[nu'3矷o |O߷ol_xJKK)Jvhjt__a}ĉ ѣ owݘ1cԩSu}0vXw_~nTۋXYBţx֗v0֯_ogy&hק^z_P' #_~%h\4Mgڵ#ZSuhU$/^[o%%%.zn[}Yۺu~nD;R K;s%ɜzx>Oa0#Gtt,_߄;SNFm?;`8p?Fg<|?.2_K3g֙pBwk[tSd+Dz.ڦ#G9ٖW_}Gz4/_ۨct'| |LDzA駟ϵw~>1' |'[>'|z]gʎ_:h:R/Gu׮]!F-[h>D qѺ}ibmK|':cK]GHk'JSDɃ֧?ylC:>O7 |>O> |'O>O> |'O>|' |@>@>|'S&ygݺu~z2eegg&O~~Ϟ={kѣy' |?_x{x' |?{V[[k >x`wFϟo=zp-ZdVt׬YcK,qeٳg?WXaEEEA s]^p 6ĉ<7M5Ҕ#-ʕ6uԠm>}^-s5k^)((X˛4i5j(~|' UbZ^{;YYY6~x9su9~ݺuswÆ sر}veeei&ի{]w"8zC]S}NN 弼(/^얡˝:u ܦm_Ӷt5P\\m]cz>c |OŦa kZ^uuuuu^oz۶mjF7t}¦MB[߮=2$("@+(.GZW"' |?遯hݲeБey,d)ǬFQx/#o.5M |o=;CPhX+Dlݺ5]>OI |ޔ}(ͻN8۷^SvthݛKei>zRrt6jExZN"֕ |opkzF5h\tR7ċbkF^.[EէOb~;@W;wnhD^۠qAszL"֕ | k|' ||' |' |>O>O>O' |>O' |' |>O_ן E>#|' |@>O' |' |@>O' |>O' |' |>O' |>O /믿nkҥKɹ*裏lժU ~}~mɒ%mK=j' |ܵkZ>}lܸq{nmƌ eӦMn[Ʋ7ol ~}os̱ۚ5k ]> | ̝;wֹ^yٳg~_Z |O~הEfee)#W>Ξ=k]p?> m;w{M2ʊ+ΥK쩧 Oo-~ƍv177???/]z;بQTM9}tj>|{v4Ȑ!QG^{-ovС@M2筿{6}k[b>}7q-oԩuȑ#6k֬,>Os/ZiiinݺoӦM Waaae8q"h$:4{BV; ucƌSNYv"رc~yA8t[">;v#Gڇ~ij]O4eh$^/'>O +4zfMYvm ŋ)+o 𪪪MSꫯz\m4[,X`?|-r)D_|exh;$u>' |?9:F5Mh#FBT m۶}]>|p3urQ?~|v0{7f۹sn{w;u?Gs3Ųٖx?wy=aÆDd.>O\՜zѣwy3L.Q'x…vb?즛̜94 Q5w_ۢ4G"ht^?p@7u's63-mI$] d/, |}?'޽{יO)JJk |'Ӏ0@>O8Sg!>O>O>O' |>O' |' |?ȶmzmK.UVِ!Cxj&L'  Gy֭[g;vp˼y]Ϙ1Nʲlބnݺن K.@> # -[40`oIv[>}b2^3 |'<}п|lѢE6hР+..vk>O)۷o3gښ5klVPPѣ-\Mԍ'Κ5w{aan3e+WԩSlɓm֭ny˗/w8p,Y.aҤI~z5jTвz衠q?2whhY_2O#m.裏̙kv>O} *hA>'']xmV1^wٍ{!8]x[˝:u9U|~a\,w]Z[G mb<"=X=_6mr;Fni_сrnnn@>St| 6m Q.XƏW^.B5rW4&+hSMZٳ厵X1m}_ˬG>KSt4V' 4i2^)*5zjJN?ƻMSb4F0񕕕nΒ|MYbEXsu`hkqMkOGz~.S}J.' t R7E)'x_jNFx[uh;i!_q^绹ގAmh$?2Euwb7b-SiT۫~ozOh#~ҡ oZ>>OFs55Gq?w܄_TMȳb[#:VQYtte\S=sM7 =42GF郶[;/LMgh^c4X%hz;llmƛ |ʁ߾}{ޔo1Ӑӗ3=GӋ{M=A~# 6mƔM;wv?:M-@zSO>n-[ƔcǺ7mlLh 'sˍ7h>O_'?D}u7=G}A>{'n֬oR !o' Fp 96'S~.>##6'fߋ|#[Zu?u'j$_BE?uz {|hzuAS{OЏڠO}5OOoݦ.uk,!;Yn88=`,-y$k(k"Eɱ#;^\NR%W>: 0Ӎ?~U Ӈ&ޑ(;>|S_ )?=y{oB+w>p |C >:ߔWB7!Ozn&>|SǷ M| M |u|R|wՙ>T~2Wg"|~܏bu&?U?qu&?U=)8ߔ>voB<6G!J_Ou6 |]0? #Q |~w:>~V>R~?JVuP'p& 'q?@[6@ ;7?~ΡS,Gq R|O\(z{ \Tc~"Qy1997=Tb^\ܰe;*&{Upz$>h{'F5E.?',pܻuM|qlG!+AUazO~"M\ \p Z3_~Ёlb+G's#sYE.P>a}=Jy7~2{S)~~uMUc''&&?aT֫NӰ_ޟ~mzswm7=tNnYYpu 9G5އ=õss)ٿZW_mcܦsre``^[X=eŅ܎X(<ݞg=G5gZލ~5tjnj |wUӹk2=P2cVDsCqycP=o?Y⟫M'ުOZԝ{G5j7pE ;"?yӏd/qքg!M1S 9~m]Ě7$ύ_o YROU @8maM,q*~4RaKŽx9_ŭwMj=gt?ۇC74LOBjbw}8w R흱+"7~Fğ}*:N0k9qOO>_{+*=q=ޟ~n{ Uȿ_c{!#c/8?ٹo@4_qO_(~)n xO}"~=S6uvi~DW[~?Uaˡ_}0g' ~](~%nSf_6s35NSӷj~ d!ìOM j}87}w|B-O?*;o.r1a߼s_89}8{Ϫ!_[]ަgï#v(k;=}Qvz)pIV5*ioˉ՜NFOO"K/eLj Y0ŷEF~z7ǾGfNAI}"zJNZNC1}#q\,OZr6oM2kYM"->on]sYx8ïzxlTb?*@OɯEU Vqaz%O"ޓB\}cHk: G~h-46)ltSqiWbZ;? |%}N~dǎ}]#$"]O;qXhN6O* ~b,A4ڎ-¾d/w+?J^IdU'r]'2~̔EyFQ>~q~p#f_=O.Cd 2-:~؁x#s1_R*"~>gZNa4k݄Fq!3 qÿ_t/~3;>\c@cC}+>oQM]w?x $h"++KNā Ia4o~P*t9ŏЏm ^akp0$󱢾޼Omןno'0:%^~t'F$J.">: aWkI(n²s6c>^"𕂽"n'<>0EA:$u #'J%24Y? |"?ЊJu8x`PFqU7>\*+b_!*ޜ.g[n!2 kBܸ*WfnjBh0$73 E'?*C8ː2;vh/'sHQ}-ic;b; 2~Пeá bُD%87mg-'`>nG#B{w~j3'`8p |~WZ_SG>ħ|hGr^M_n8ݰlu>37/uW}E0l2T&>4pjC_lq|@TFx 0Tʜ?k㰦F ׿ii>tp |K/s9`$EhV&?_ k:0Rl|s5~ ʳ#%Ow9n.%/zަÚM.;K&%eN~</ 0T2^'+nO8L?뷦>ŕFϙ/ߒXv9\ `TV+K=VN_`4~+5G5TW-; >% v3-C:Z;9vVX}k91nIɆk:vwnf=~VYt\q-nC:sPI7㩶n?sa%Kx-@ﵝY{Ukk+WƝ Z]z32㰶`u_z*.??$=IENDB`alphabetical-grid-extension-40.0/extension/000077500000000000000000000000001460231012200210065ustar00rootroot00000000000000alphabetical-grid-extension-40.0/extension/extension.js000066400000000000000000000140221460231012200233570ustar00rootroot00000000000000/* exported AppGridManager */ //Local imports import * as AppGridHelper from './lib/AppGridHelper.js'; //Main imports import GLib from 'gi://GLib'; import Gio from 'gi://Gio'; import Shell from 'gi://Shell'; import * as AppDisplay from 'resource:///org/gnome/shell/ui/appDisplay.js'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; import * as OverviewControls from 'resource:///org/gnome/shell/ui/overviewControls.js'; //Extension system imports import {Extension, InjectionManager} from 'resource:///org/gnome/shell/extensions/extension.js'; //Access required objects and systems const Controls = Main.overview._overview._controls; export default class AppGridManager extends Extension { enable() { let extensionSettings = this.getSettings(); //Patch shell, setup listeners and reorder this._gridReorder = new AppGridExtension(extensionSettings); this._gridReorder.reorderGrid('Reordering app grid'); } disable() { //Disconnect from events, unpatch shell and clean up this._gridReorder.destroy(); this._gridReorder = null; } } class AppGridExtension { constructor(extensionSettings) { this._injectionManager = new InjectionManager(); this._appSystem = Shell.AppSystem.get_default(); this._appDisplay = Controls._appDisplay; this._extensionSettings = extensionSettings; this._shellSettings = new Gio.Settings({schema: 'org.gnome.shell'}); this._folderSettings = new Gio.Settings({schema: 'org.gnome.desktop.app-folders'}); this._loggingEnabled = this._extensionSettings.get_boolean('logging-enabled'); this._currentlyUpdating = false; this._patchShell(); this._connectListeners(); } reorderGrid(logText) { //Detect lock to avoid multiple changes at once if (!this._currentlyUpdating && !this._appDisplay._pageManager._updatingPages) { this._currentlyUpdating = true; this._debugMessage(logText); //Alphabetically order the contents of each folder, if enabled if (this._extensionSettings.get_boolean('sort-folder-contents')) { this._debugMessage('Reordering folder contents'); AppGridHelper.reorderFolderContents.call(this); } //Wait a small amount of time to avoid clashing with animations this._reorderGridTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 100, () => { //Redisplay the app grid this._appDisplay._redisplay(); //Release the lock and clean up this._currentlyUpdating = false; this._reorderGridTimeoutId = null; return GLib.SOURCE_REMOVE; }); } } destroy() { Main.overview.disconnectObject(this); Controls._stateAdjustment.disconnectObject(this); this._appSystem.disconnectObject(this); this._shellSettings.disconnectObject(this); this._extensionSettings.disconnectObject(this); this._folderSettings.disconnectObject(this); //Clean up timeout sources if (this._reorderGridTimeoutId != null) { GLib.Source.remove(this._reorderGridTimeoutId); } this._debugMessage('Disconnected from listeners / timeouts'); //Unpatch the internal functions for extension shutdown this._injectionManager.clear(); this._debugMessage('Unpatched item comparison'); this._debugMessage('Unpatched redisplay'); } _debugMessage(message) { if (this._loggingEnabled) { let date = new Date(); let timestamp = date.toTimeString().split(' ')[0]; log('alphabetical-app-grid [' + timestamp + ']: ' + message); } } _patchShell() { //Patch the app comparison this._injectionManager.overrideMethod(AppDisplay.AppDisplay.prototype, '_compareItems', () => { this._debugMessage('Patching _compareItems'); //Patched version of _compareItems(), to apply custom order let extensionSettings = this._extensionSettings; let folderSettings = this._folderSettings; return function _compareItemsWrapper(a, b) { let folderPosition = extensionSettings.get_string('folder-order-position'); let folderArray = folderSettings.get_value('folder-children').get_strv(); return AppGridHelper.compareItems.call(this, a, b, folderPosition, folderArray); }; }); //Patch the app grid redisplay this._injectionManager.overrideMethod(AppDisplay.AppDisplay.prototype, '_redisplay', () => { this._debugMessage('Patching _redisplay'); return AppGridHelper.reloadAppGrid; }); } _connectListeners() { //Connect to gsettings and wait for the order or favourites to change this._shellSettings.connectObject( 'changed::app-picker-layout', () => this.reorderGrid('App grid layout changed, triggering reorder'), 'changed::favorite-apps', () => this.reorderGrid('Favourite apps changed, triggering reorder'), this); //Connect to the main overview and wait for an item to be dragged this._dragReorderSignal = Main.overview.connectObject('item-drag-end', () => this.reorderGrid('App movement detected, triggering reorder'), this); //Reorder when a folder is made or destroyed this._folderSettings.connectObject('changed::folder-children', () => this.reorderGrid('Folders changed, triggering reorder'), this); //Reorder when installed apps change this._appSystem.connectObject('installed-changed', () => this.reorderGrid('Installed apps changed, triggering reorder'), this); //Connect to gsettings and wait for the extension's settings to change this._extensionSettings.connectObject('changed', () => { this._loggingEnabled = this._extensionSettings.get_boolean('logging-enabled'); this.reorderGrid('Extension gsettings values changed, triggering reorder'); }, this); //Reorder when the app grid is opened Controls._stateAdjustment.connectObject('notify::value', () => { if (Controls._stateAdjustment.value == OverviewControls.ControlsState.APP_GRID) { this.reorderGrid('App grid opened, triggering reorder'); } }, this); this._debugMessage('Connected to listeners'); } } alphabetical-grid-extension-40.0/extension/lib/000077500000000000000000000000001460231012200215545ustar00rootroot00000000000000alphabetical-grid-extension-40.0/extension/lib/AppGridHelper.js000066400000000000000000000103171460231012200246020ustar00rootroot00000000000000/* exported reorderFolderContents compareItems reloadAppGrid */ //Main imports import GLib from 'gi://GLib'; import Gio from 'gi://Gio'; //Helpers to provide alphabetical ordering function alphabeticalSort(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); return a.localeCompare(b); } //Reorders folder contents, called with this as the extension's instance export function reorderFolderContents() { //Get array of folders from 'folder-children' key let folderArray = this._folderSettings.get_value('folder-children').get_strv(); //Loop through all folders, and reorder their contents folderArray.forEach((targetFolder) => { //Get the contents of the folder, from gsettings value let folderContentsSettings = Gio.Settings.new_with_path('org.gnome.desktop.app-folders.folder', '/org/gnome/desktop/app-folders/folders/' + targetFolder + '/'); let folderContents = folderContentsSettings.get_value('apps').get_strv(); //Reorder the contents of the folder folderContents = orderByDisplayName(this._appSystem, folderContents); //Set the gsettings value for 'apps' to the ordered list let currentOrder = folderContentsSettings.get_value('apps').get_strv(); if (String(currentOrder) != String(folderContents)) { if (folderContentsSettings.is_writable('apps')) { folderContentsSettings.set_value('apps', new GLib.Variant('as', folderContents)); } } }); //Refresh the folders this._appDisplay._folderIcons.forEach((folder) => { folder.view._redisplay(); }); } //Returns an ordered version of 'inputArray', ordered by display name //inputArray should be an array of app ids function orderByDisplayName(appSystem, inputArray) { let outputArray = []; //Loop through array contents and get their display names inputArray.forEach((currentTarget) => { let displayName; let appInfo = appSystem.lookup_app(currentTarget); if (appInfo != null) { displayName = appInfo.get_name(); } //Add item to outputArray, saving the id as a property outputArray.push(new String(displayName)); outputArray[outputArray.length - 1].desktopFile = currentTarget; }); //Alphabetically sort the folder's contents, by the display name outputArray.sort(alphabeticalSort); //Replace each element with the app's .desktop filename outputArray.forEach((currentTarget, i) => {outputArray[i] = currentTarget.desktopFile;}); return outputArray; } //Replaces shell's _compareItems() to provide custom order export function compareItems(a, b, folderPosition, folderArray) { //Skip extra steps if a regular alphabetical order is required if (folderPosition === 'alphabetical') { return alphabeticalSort(a.name, b.name); } let isAFolder = folderArray.includes(a._id); let isBFolder = folderArray.includes(b._id); //If they're both folders or both apps, order alphabetically if (isAFolder == isBFolder) { return alphabeticalSort(a.name, b.name); } //If one is a folder, move it to the configured position return (folderPosition === 'start') ^ isAFolder ? 1 : -1; } //Called during custom _redisplay() export function reloadAppGrid() { //Refresh folders this._folderIcons.forEach((icon) => { icon.view._redisplay(); }); //Existing apps let currentApps = this._orderedItems.slice(); let currentAppIds = currentApps.map(icon => icon.id); //Array of apps, sorted according to extension preferences let newApps = this._loadApps().sort(this._compareItems.bind(this)); let newAppIds = newApps.map(icon => icon.id); //Compare the 2 sets of apps let addedApps = newApps.filter(icon => !currentAppIds.includes(icon.id)); let removedApps = currentApps.filter(icon => !newAppIds.includes(icon.id)); //Clear removed apps removedApps.forEach((icon) => { this._removeItem(icon); icon.destroy(); }); //Move each app to the correct grid postion const {itemsPerPage} = this._grid; newApps.forEach((icon, i) => { const page = Math.floor(i / itemsPerPage); const position = i % itemsPerPage; if (addedApps.includes(icon)) { this._addItem(icon, page, position); } else { this._moveItem(icon, page, position); } }); this._orderedItems = newApps; //Emit 'view-loaded' signal this.emit('view-loaded'); } alphabetical-grid-extension-40.0/extension/metadata.json000066400000000000000000000007651460231012200234710ustar00rootroot00000000000000{ "name": "Alphabetical App Grid", "description": "Alphabetically order the app grid and folders", "uuid": "AlphabeticalAppGrid@stuarthayhurst", "gettext-domain": "AlphabeticalAppGrid@stuarthayhurst", "settings-schema": "org.gnome.shell.extensions.alphabetical-app-grid", "url": "https://github.com/stuarthayhurst/alphabetical-grid-extension", "donations": { "github": "stuarthayhurst", "paypal": "stuartahayhurst" }, "shell-version": [ "45", "46" ], "version": 40 } alphabetical-grid-extension-40.0/extension/po/000077500000000000000000000000001460231012200214245ustar00rootroot00000000000000alphabetical-grid-extension-40.0/extension/po/ar.po000066400000000000000000000050521460231012200223700ustar00rootroot00000000000000# Arabic translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Omar TS , 2022 # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2022-06-17 13:00+0100\n" "Last-Translator: Omar TS >\n" "Language-Team: \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" #: extension/prefs.js:119 msgid "Settings" msgstr "إعدادات" #: extension/prefs.js:123 msgid "General settings" msgstr "الإعدادات العامة" #: extension/prefs.js:124 msgid "Developer settings" msgstr "إعدادات المطور" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "ترتيب أبجدي" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "فرز محتويات المجلد" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "لتحديد ما إذا كان يجب فرز محتويات المجلدات أبجديًا أم لا" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "موضع المجلدات المرتبة" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "مكان وضع المجلدات عند طلب شبكة التطبيقات" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "تفعيل سجلات الامتداد" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "السماح للامتداد بإرسال رسائل إلى سجلات النظام" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/cs.po000066400000000000000000000047731460231012200224040ustar00rootroot00000000000000# translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2023 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # FIRST AUTHOR Amerey.eu , 2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2023-04-03 23:36+0200\n" "Last-Translator: Amerey.eu \n" "Language-Team: \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n>=2 && n<=4 ? 1 : 2);\n" "X-Generator: Poedit 3.1.1\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Nastavení" #: extension/prefs.js:123 msgid "General settings" msgstr "Obecné nastavení" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Vývojářské nastavení" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Abecedně" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Seřadit obsah složky" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Zda má být obsah složek řazen abecedně" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Umístění seřazených složek" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Kam umístit složky při řazení v mřížce aplikací" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Povolit protokolování rozšíření" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Povolit rozšíření odesílat zprávy do systémových protokolů" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/de.po000066400000000000000000000050401460231012200223530ustar00rootroot00000000000000# German translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Philipp Kiemle , 2021-2022. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2022-03-25 08:30+0100\n" "Last-Translator: Philipp Kiemle \n" "Language-Team: \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Einstellungen" #: extension/prefs.js:123 msgid "General settings" msgstr "Allgemeine Einstellungen" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Entwickleroptionen" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alphabetisch" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Ordnerinhalt sortieren" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "" "Legt fest, ob Ordnerinhalte ebenfalls alphabetisch geordnet werden sollen" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Ordnerposition" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "" "Legt fest, an welcher Stelle Ordner im Anwendungsraster angezeigt werden " "sollen" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Protokollierung aktivieren" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "" "Legt fest, ob die Erweiterung Nachrichten an die Systemprotokolle sendet" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/es.po000066400000000000000000000053411460231012200223760ustar00rootroot00000000000000# Spanish translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Óscar Fernández Díaz , 2022-2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-10-12 13:01+0200\n" "PO-Revision-Date: 2023-10-12 13:06+0200\n" "Last-Translator: Óscar Fernández Díaz \n" "Language-Team: Spanish\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Gtranslator 45.2\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Configuración" #: extension/prefs.js:123 msgid "General settings" msgstr "Configuración general" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Configuración del desarrollador" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabético" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "Inicio" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "Final" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Ordenar el contenido de las carpetas" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Si el contenido de las carpetas debe ordenarse alfabéticamente" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Posición de las carpetas ordenadas" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Dónde colocar las carpetas al ordenar el tablero de aplicaciones" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Activar el registro de extensiones" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Permitir que la extensión envíe mensajes a los registros del sistema" #: extension/prefs.js:150 msgid "Report an issue" msgstr "Informar de un problema" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "Registro de incidencias en GitHub" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "Donar vía GitHub" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "Conviértase en patrocinador" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "Donar vía PayPal" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "Gracias por su apoyo :)" #: extension/prefs.js:154 msgid "Links" msgstr "Enlaces" alphabetical-grid-extension-40.0/extension/po/fr.po000066400000000000000000000050231460231012200223730ustar00rootroot00000000000000# French translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Philipp Kiemle , 2021-2022. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2021-11-21 23:51+0100\n" "Last-Translator: Philipp Kiemle \n" "Language-Team: \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.0\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Réglages" #: extension/prefs.js:123 msgid "General settings" msgstr "Paramètres généraux" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Paramètres de développement" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alphabétique" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Trier le contenu du dossier" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "" "Indique si le contenu des dossiers doit être trié par ordre alphabétique" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Position des dossiers ordonnés" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "" "Où placer les dossiers lors de l’organisation de la grille d’applications" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Activer la journalisation des extensions" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Autoriser l’extension à envoyer des messages aux journaux système" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/it.po000066400000000000000000000052561460231012200224100ustar00rootroot00000000000000# Italian translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Albano Battistella , 2022,2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2023-08-22 20:55+0100\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" #: extension/prefs.js:119 msgid "Settings" msgstr "Impostazioni" #: extension/prefs.js:123 msgid "General settings" msgstr "Impostazioni generali" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Impostazioni sviluppatore" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabetico" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "Inizio" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "Fine" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Ordina il contenuto della cartella" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "" "Indica se il contenuto delle cartelle deve essere ordinato alfabeticamente" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Posizione delle cartelle ordinate" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "" "Dove posizionare le cartelle quando si ordina la griglia delle applicazioni" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Abilita la registrazione dell'estensione" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Consenti all'interno di inviare messaggi ai registri di sistema" #: extension/prefs.js:150 msgid "Report an issue" msgstr "Segnala un problema" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "Tracker dei problemi di GitHub" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "Dona tramite GitHub" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "Diventa uno sponsor" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "Dona tramite PayPal" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "Grazie per il vostro sostegno :)" #: extension/prefs.js:154 msgid "Links" msgstr "Link" alphabetical-grid-extension-40.0/extension/po/ja.po000066400000000000000000000053321460231012200223610ustar00rootroot00000000000000# Japanese translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2024 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Ryo Nakano , 2024. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2024-01-13 13:12+0900\n" "PO-Revision-Date: 2024-01-13 13:51+0900\n" "Last-Translator: Ryo Nakano \n" "Language-Team: \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: extension/prefs.js:119 msgid "Settings" msgstr "設定" #: extension/prefs.js:123 msgid "General settings" msgstr "一般設定" #: extension/prefs.js:124 msgid "Developer settings" msgstr "開発者用設定" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "アルファベット順" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "先頭" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "末尾" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "フォルダーの内容を並べ替える" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "フォルダーの内容をアルファベット順に並べ替えるかどうか" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "フォルダーの位置" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "アプリケーショングリッドを順番に並べる際、フォルダーをどこに配置するか" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "拡張機能のログを有効にする" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "システムログへのメッセージの送信を拡張機能に許可します" #: extension/prefs.js:150 msgid "Report an issue" msgstr "不具合を報告" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "GitHub イシュートラッカー" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "GitHub で寄付する" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "スポンサーになりましょう" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "PayPal で寄付する" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "ご支援いただきありがとうございます :)" #: extension/prefs.js:154 msgid "Links" msgstr "リンク" alphabetical-grid-extension-40.0/extension/po/nl.po000066400000000000000000000047121460231012200224010ustar00rootroot00000000000000# Dutch translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Heimen Stoffels , 2021. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2022-03-24 14:40+0100\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.0.1\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Voorkeuren" #: extension/prefs.js:123 msgid "General settings" msgstr "Algemene voorkeuren" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Ontwikkelaarsvoorkeuren" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabetisch" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Mapinhoud sorteren" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Of mapinhoud alfabetisch gesorteerd moet worden" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Positie van geordende mappen" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Waar mappen geplaatst moeten worden op het rooster" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Logboek aanleggen" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Laat de extensie een logboek aanleggen met daarin alle uitvoer" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/oc.po000066400000000000000000000047441460231012200223760ustar00rootroot00000000000000# Occitan translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Quentin PAGÈS , 2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2023-01-19 10:16+0100\n" "Last-Translator: Quentin PAGÈS\n" "Language-Team: \n" "Language: oc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 3.2.2\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Paramètres" #: extension/prefs.js:123 msgid "General settings" msgstr "Paramètres generals" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Paramètres de desvolopaires" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabetic" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Triar lo contengut dels dossièrs" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Indica se lo contengut dels dossièrs deu èsser triat alfabeticament" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Posicion dels dossièrs triats" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "" "Ont plaçar los dossièr quand la grasilha tria las aplicacions alfabeticament" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Activar la jornalizacion de l’extension" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Permetre a l’aplicacion d’enviar de messatges als jornals sistèma" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/pt_BR.po000066400000000000000000000046751460231012200230060ustar00rootroot00000000000000# Portuguese translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2023 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Vinícius , 2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2023-03-07 19:55-0300\n" "Last-Translator: Vinícius \n" "Language-Team: Language [pt\n" "Language: [pt_BR]\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Configurações" #: extension/prefs.js:123 msgid "General settings" msgstr "Configurações gerais" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Configurações de desenvolvedor" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabético" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Organizar conteúdos das pastas" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Se o conteúdo das pastas deve ser organizado alfabeticamente" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Posição das pastas ordenadas" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Onde posicionar as pastas quando ordenar as aplicações" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Habilitar log da extensão" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Permitir que a extensão envie mensagens ao sistema de logs" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/po/ru.po000066400000000000000000000057571460231012200224300ustar00rootroot00000000000000# Russian translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # sngvy, 2022. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2022-04-18 21:17+0300\n" "Last-Translator: \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" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" "X-Generator: Poedit 3.0.1\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Настройки" #: extension/prefs.js:123 msgid "General settings" msgstr "Общие настройки" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Для разработчиков" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "По алфавиту" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "Начало" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "Конец" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Сортировать содержимое папок" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Должно ли содержимое папок сортироваться по алфавиту" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Положение упорядоченных папок" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Где размещать папки при упорядочивании сетки приложений" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Включить отладку" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Разрешить расширению отправлять сообщения в системные журналы" #: extension/prefs.js:150 msgid "Report an issue" msgstr "Сообщить о неполадках" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "Трекер проблем GitHub" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "Пожертвовать через GitHub" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "Стать спонсором" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "Пожертвовать через PayPal" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "Спасибо за вашу поддержку :)" #: extension/prefs.js:154 msgid "Links" msgstr "Ссылки" alphabetical-grid-extension-40.0/extension/po/tr.po000066400000000000000000000052411460231012200224130ustar00rootroot00000000000000# translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2023 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Hakan Kayra Dogan , 2023. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-15 01:44+0300\n" "PO-Revision-Date: 2023-12-15 01:56+0300\n" "Last-Translator: Hakan Kayra Dogan \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.4.1\n" #: extension/prefs.js:119 msgid "Settings" msgstr "Ayarlar" #: extension/prefs.js:123 msgid "General settings" msgstr "Genel ayarlar" #: extension/prefs.js:124 msgid "Developer settings" msgstr "Geliştirici seçenekleri" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "Alfabetik" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "Baş" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "Son" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "Klasör içeriklerini sırala" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "Klasör içerikleri alfabetik olarak düzenlenmeli mi" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "Sıralı klasörlerin konumu" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "Klasörlerin uygulama ızgarasında nerede konumlandırılacağı" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "Eklenti için günlük tutmayı aktifleştir" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "Eklentinin sistem günlüklerine mesaj iletmesine izin ver" #: extension/prefs.js:150 msgid "Report an issue" msgstr "Hata bildir" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "GitHub hata takipçisi" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "GitHub ile Bağış Yap" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "Sponsor ol" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "PayPal ile Bağış Yap" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "Desteğin içi teşekkürler :)" #: extension/prefs.js:154 msgid "Links" msgstr "Bağlantılar" alphabetical-grid-extension-40.0/extension/po/zh_TW.po000066400000000000000000000045421460231012200230240ustar00rootroot00000000000000# translation for the Alphabetical App Grid GNOME Shell Extension. # Copyright (C) 2022 Stuart Hayhurst # This file is distributed under the same license as the alphabetical-grid-extension package. # Oliver Tzeng (曾嘉禾), 2022. # msgid "" msgstr "" "Project-Id-Version: alphabetical-grid-extension\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-08-22 13:36+0100\n" "PO-Revision-Date: 2022-5-26 HO:MI+ZONE\n" "Last-Translator: Oliver Tzeng (曾嘉禾)\n" "Language-Team: \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: extension/prefs.js:119 msgid "Settings" msgstr "設定" #: extension/prefs.js:123 msgid "General settings" msgstr "設定" #: extension/prefs.js:124 msgid "Developer settings" msgstr "開發者設定" #. Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' #: extension/prefs.js:130 msgid "Alphabetical" msgstr "按照字母順序" #. Translators: 'Start' means 'Place folders at the start' #: extension/prefs.js:132 msgid "Start" msgstr "" #. Translators: 'End' means 'Place folders at the end' #: extension/prefs.js:134 msgid "End" msgstr "" #: extension/prefs.js:139 msgid "Sort folder contents" msgstr "歸納資料夾內容" #: extension/prefs.js:139 msgid "Whether the contents of folders should be sorted alphabetically" msgstr "讓資料夾內應用程式也按照字母順序" #: extension/prefs.js:140 msgid "Position of ordered folders" msgstr "排序後的資料夾位置" #: extension/prefs.js:140 msgid "Where to place folders when ordering the applications grid" msgstr "在定位應用程式時要在哪裡放資料夾" #: extension/prefs.js:141 msgid "Enable extension logging" msgstr "紀錄使用情況" #: extension/prefs.js:141 msgid "Allow the extension to send messages to the system logs" msgstr "允許傳送資料給開發者" #: extension/prefs.js:150 msgid "Report an issue" msgstr "" #: extension/prefs.js:150 msgid "GitHub issue tracker" msgstr "" #: extension/prefs.js:151 msgid "Donate via GitHub" msgstr "" #: extension/prefs.js:151 msgid "Become a sponsor" msgstr "" #: extension/prefs.js:152 msgid "Donate via PayPal" msgstr "" #: extension/prefs.js:152 msgid "Thanks for your support :)" msgstr "" #: extension/prefs.js:154 msgid "Links" msgstr "" alphabetical-grid-extension-40.0/extension/prefs.js000066400000000000000000000124421460231012200224660ustar00rootroot00000000000000/* exported AppGridPrefs */ //Main imports import Gio from 'gi://Gio'; import Gtk from 'gi://Gtk'; import Adw from 'gi://Adw'; import GObject from 'gi://GObject'; //Extension system imports import {ExtensionPreferences, gettext as _} from 'resource:///org/gnome/Shell/Extensions/js/extensions/prefs.js'; var PrefsPage = GObject.registerClass( class PrefsPage extends Adw.PreferencesPage { _init(pageInfo, groupsInfo, settingsInfo, settings) { super._init({ title: pageInfo[0], icon_name: pageInfo[1] }); this._extensionSettings = settings; this._settingGroups = {}; //Setup settings this._createGroups(groupsInfo); this._createSettings(settingsInfo); } _createGroups(groupsInfo) { //Store groups, set title and add to window groupsInfo.forEach((groupInfo) => { this._settingGroups[groupInfo[0]] = new Adw.PreferencesGroup(); this._settingGroups[groupInfo[0]].set_title(groupInfo[1]); this.add(this._settingGroups[groupInfo[0]]); }); } _createSettings(settingsInfo) { settingsInfo.forEach(settingInfo => { //Check the target group exists if (!(settingInfo[0] in this._settingGroups)) { return; } //Handle type-specific setup let settingRow = null; if (settingInfo[4] === null) { //Create a row with a switch, title and subtitle settingRow = new Adw.SwitchRow({ title: settingInfo[2], subtitle: settingInfo[3] }); //Connect the row's element to the setting this._extensionSettings.bind( settingInfo[1], //GSettings key to bind to settingRow, //Object to bind to 'active', //The property to share Gio.SettingsBindFlags.DEFAULT ); } else { //Store the options for the setting let stringList = new Gtk.StringList(); settingInfo[4].forEach((entry) => { stringList.append(entry[1]); }); //Create a row with a combo box, title and subtitle settingRow = new Adw.ComboRow({ title: settingInfo[2], subtitle: settingInfo[3], model: stringList }); settingRow._dropdownData = [...settingInfo[4]]; settingRow._settingKey = settingInfo[1]; settingRow.connect('notify::selected-item', (row) => { let index = row.get_selected(); let value = row._dropdownData[index][0]; this._extensionSettings.set_string(row._settingKey, value); }); } //Add the row to the group this._settingGroups[settingInfo[0]].add(settingRow); }); } addLinks(window, linksInfo, groupName) { //Setup and add links group to window let linksGroup = new Adw.PreferencesGroup(); linksGroup.set_title(groupName); this.add(linksGroup); linksInfo.forEach((linkInfo) => { //Create a row for the link widget let linkEntryRow = new Adw.ActionRow({ title: linkInfo[0], subtitle: linkInfo[1], activatable: true }); //Open the link when clicked linkEntryRow.connect('activated', () => { let uriLauncher = new Gtk.UriLauncher(); uriLauncher.set_uri(linkInfo[2]); uriLauncher.launch(window, null, null); }); linksGroup.add(linkEntryRow); }); } }); export default class AppGridPrefs extends ExtensionPreferences { //Create preferences window with libadwaita fillPreferencesWindow(window) { //Translated title, icon name let pageInfo = [_('Settings'), 'preferences-system-symbolic']; let groupsInfo = [ //Group ID, translated title ['general', _('General settings')], ['developer', _('Developer settings')] ]; let dropdownOptions = [ //Setting value, translated label //Translators: 'Alphabetical' means 'Place folders alphabetically, among other items' ['alphabetical', _('Alphabetical')], //Translators: 'Start' means 'Place folders at the start' ['start', _('Start')], //Translators: 'End' means 'Place folders at the end' ['end', _('End')] ]; let settingsInfo = [ //Group ID, setting key, title, subtitle, extra data ['general', 'sort-folder-contents', _('Sort folder contents'), _('Whether the contents of folders should be sorted alphabetically'), null], ['general', 'folder-order-position', _('Position of ordered folders'), _('Where to place folders when ordering the applications grid'), dropdownOptions], ['developer', 'logging-enabled', _('Enable extension logging'), _('Allow the extension to send messages to the system logs'), null] ]; //Create settings page from info let settingsPage = new PrefsPage(pageInfo, groupsInfo, settingsInfo, this.getSettings()); //Define and add links let linksInfo = [ //Translated title, link [_('Report an issue'), _('GitHub issue tracker'), 'https://github.com/stuarthayhurst/alphabetical-grid-extension/issues'], [_('Donate via GitHub'), _('Become a sponsor'), 'https://github.com/sponsors/stuarthayhurst'], [_('Donate via PayPal'), _('Thanks for your support :)'), 'https://www.paypal.me/stuartahayhurst'] ]; settingsPage.addLinks(window, linksInfo, _("Links")); //Add the pages to the window, enable searching window.add(settingsPage); window.set_search_enabled(true); } } alphabetical-grid-extension-40.0/extension/schemas/000077500000000000000000000000001460231012200224315ustar00rootroot00000000000000org.gnome.shell.extensions.AlphabeticalAppGrid.gschema.xml000066400000000000000000000021711460231012200355210ustar00rootroot00000000000000alphabetical-grid-extension-40.0/extension/schemas true

Sort folder contents Whether the contents of folders should be sorted alphabetically "alphabetical" Position of ordered folders Where to place folders when ordering the application grid false Show favourite apps on the app grid Allows displaying the favourite apps on the app grid (GNOME 40+) false Enable extension logging Allow the extension to send messages to the system logs alphabetical-grid-extension-40.0/scripts/000077500000000000000000000000001460231012200204615ustar00rootroot00000000000000alphabetical-grid-extension-40.0/scripts/update-po.sh000077500000000000000000000032221460231012200227150ustar00rootroot00000000000000#!/bin/bash #This script generates the latest '.po' file(s) from the source #Usage: 'update-po.sh -l ', use '-a' to update all '.po' files #Create a new translation from 'build/messages.pot' promptNewTranslation() { if [[ -n "$1" ]]; then echo -n "The translation for '$1' does not exist, do you want to create it? [Y/n] " read -r reply if [[ "$reply" = "Y" ]] || [[ "$reply" = "y" ]]; then msginit --input="../$BUILD_DIR/messages.pot" --locale="$1" --output-file="po/$1.po" #Add copyright info sed -i "2s/.*/# Copyright (C) $(date +%Y) Stuart Hayhurst/" "po/$1.po" fi fi } #Update translation file $1 updateTranslation() { echo -n "Updating '$1': " msgmerge --no-fuzzy-matching --previous -U --quiet "$1" "../$BUILD_DIR/messages.pot" msgfmt --check --verbose --output-file=/dev/null "$1" } #Change to repository root and exit on failure set -e cd "$( cd "$( dirname "$0" )" && pwd )/.." || exit 1 #Set build directory if missing, and create it if [[ "$BUILD_DIR" == "" ]]; then BUILD_DIR="build" fi mkdir -p "$BUILD_DIR" #Generate pot file and swap to extension source dir ./scripts/update-pot.sh cd "extension" || exit 1 if [[ "$1" == "-l" ]]; then #Update / create one specific '.po' file #Check if a valid language code was given if [[ -f "po/$2.po" ]]; then updateTranslation "po/$2.po" else promptNewTranslation "$2" fi elif [[ "$1" == "-a" ]]; then #Update all '.po' files for file in po/*.po; do #Handle no .po files [[ -e "$file" ]] || { echo -e "\nERROR: No .po files found"; exit 1; } updateTranslation "$file" done else echo "ERROR: You need to specify a flag"; exit 1 fi alphabetical-grid-extension-40.0/scripts/update-pot.sh000077500000000000000000000017461460231012200231120ustar00rootroot00000000000000#!/bin/bash #This script scans the source code for any translatable strings and create the build/messages.pot #Change to repository root and exit on failure set -e cd "$( cd "$( dirname "$0" )" && pwd )/.." || exit 1 #Set build directory if missing, and create it if [[ "$BUILD_DIR" == "" ]]; then BUILD_DIR="build" fi mkdir -p "$BUILD_DIR" #Update the template file with the strings from the source files xgettext --from-code=UTF-8 \ --add-comments=Translators \ --copyright-holder="Stuart Hayhurst" \ --package-name="alphabetical-grid-extension" \ --output="$BUILD_DIR/messages.pot" \ -- extension/*.js #Replace some lines of the header with our own sed -i '1s/.*/# translation for the Alphabetical App Grid GNOME Shell Extension./' "$BUILD_DIR/messages.pot" sed -i "2s/.*/# Copyright (C) $(date +%Y) Stuart Hayhurst/" "$BUILD_DIR/messages.pot" sed -i '17s/CHARSET/UTF-8/' "$BUILD_DIR/messages.pot" echo "Generated translation list"