pax_global_header00006660000000000000000000000064122616350710014515gustar00rootroot0000000000000052 comment=c7135f1e3b2c5e80c40690a7c208a6352a2fd41f nifti2dicom-0.4.7/000077500000000000000000000000001226163507100137345ustar00rootroot00000000000000nifti2dicom-0.4.7/.gitignore000066400000000000000000000000131226163507100157160ustar00rootroot00000000000000/build/ *~ nifti2dicom-0.4.7/.travis.yml000066400000000000000000000005501226163507100160450ustar00rootroot00000000000000language: cpp compiler: - gcc - clang install: - sudo apt-get update - sudo apt-get install -y libqt4-dev libinsighttoolkit3-dev libtclap-dev libvtk5-dev libvtk5-qt4-dev libgdcm2-dev libfftw3-dev before_script: - cmake --version - mkdir build - cd build - cmake .. -DCMAKE_INSTALL_PREFIX=$(pwd)/../install script: - make - make install nifti2dicom-0.4.7/AUTHORS000066400000000000000000000002401226163507100150000ustar00rootroot00000000000000Daniele E. Domenichelli (core) Gabriele Arnulfo (gui) Contributors: Daniele Marinucci (icon) nifti2dicom-0.4.7/CMakeLists.txt000066400000000000000000000042141226163507100164750ustar00rootroot00000000000000# This file is part of Nifti2Dicom, is an open source converter from # 3D NIfTI images to 2D DICOM series. # # Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli # # Nifti2Dicom is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nifti2Dicom is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Nifti2Dicom. If not, see . cmake_minimum_required(VERSION 2.6.4) project(Nifti2Dicom) set(Nifti2Dicom_MAJOR_VERSION "0") set(Nifti2Dicom_MINOR_VERSION "4") set(Nifti2Dicom_PATCH_VERSION "7") set(Nifti2Dicom_VERSION "0.4.7") set(Nifti2Dicom_INTERNAL_VERSION "${Nifti2Dicom_MAJOR_VERSION}.${Nifti2Dicom_MINOR_VERSION}.${Nifti2Dicom_PATCH_VERSION}") #Check pkg-config find_package(PkgConfig) #TODO error if not found #Check TCLAP Library [Templatized C++ Command Line Parser] (1.2.0) pkg_check_modules(TCLAP REQUIRED tclap>=1.2.0) if(TCLAP_FOUND) include_directories(${TCLAP_INCLUDE_DIRS}) else(TCLAP_FOUND) message(FATAL_ERROR "TCLAP not found") endif(TCLAP_FOUND) # Check ITK Library [Insight ToolKit] (3.17.0) find_package(ITK REQUIRED) include(${ITK_USE_FILE}) #Check Qt4 Library [Qt4] (4.4.0) find_package(Qt4 4.4.0 REQUIRED) #Check VTK Library [Visualization ToolKit] find_package(VTK REQUIRED) include(${VTK_USE_FILE}) #TODO Check QVTK configure_file(${CMAKE_SOURCE_DIR}/Nifti2DicomConfig.h.cmake ${CMAKE_BINARY_DIR}/Nifti2DicomConfig.h) include_directories(${CMAKE_BINARY_DIR}) #TODO add DebugFull if(CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebugInfo") message(STATUS "DEBUG ENABLED") add_definitions("-DDEBUG") endif() #TODO this endif? add_subdirectory(src) add_subdirectory(doc) add_subdirectory(data) nifti2dicom-0.4.7/COPYING000066400000000000000000001045131226163507100147730ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . nifti2dicom-0.4.7/COPYING.ITK000066400000000000000000000035401226163507100154170ustar00rootroot00000000000000Portions of Nifti2Dicom code base are derived from the Insight Toolkit (ITK), and hence are covered under the ITK copyright. The ITK copyright is as follows: Copyright (c) Insight Software Consortium All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name of the Insight Consortium, or the names of any consortium members, or of any contributors, may not be used to endorse or promote products derived from this software without specific prior written permission. * Modified source versions must be plainly marked as such, and must not be misrepresented as being the original software. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. See also the ITK web site: http://www.itk.org for more information. nifti2dicom-0.4.7/COPYING.VTK000066400000000000000000000035641226163507100154420ustar00rootroot00000000000000Portions of Nifti2Dicom code base are derived from the Visualization Toolkit (VTK), and hence are covered under the VTK copyright. The VTK copyright is as follows: Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. * Modified source versions must be plainly marked as such, and must not be misrepresented as being the original software. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. See also the VTK web site: http://www.vtk.org for more information. nifti2dicom-0.4.7/NEWS000066400000000000000000000042141226163507100144340ustar00rootroot00000000000000Nifti2Dicom (2014-01-03) 0.4.7 ============================== - Depend on CMake 2.6.4 - Ensure that images imported are 3D and SCALAR (Issue #29) - Remove old patches - Cleanup CMake stuff - Continuous integration using Travis - Add Keywords to qnifti2dicom.desktop Nifti2Dicom (2013-06-06) 0.4.6 ============================== - Use QHBoxLayout and reduce file size space in infoOpenImageLayout - Cleanup CMake stuff - Fix build with ITK 4 Nifti2Dicom (2012-07-31) 0.4.5 ============================== - Add option ENABLE_REGENERATE_MAN (disabled by default) - Fix filter string "DICOM" -> "DICOM Files" - Handle tag "(0018,1020) Software Version(s)" - Change default for "(0018,1030) Protocol Name" to "nifti2dicom" (Issue #9) - Initialize members that require initialization (Issue #11) - Nifti Labels are cleaned everytime user pushes the Load Button (Issue #23) - DICOM Header column order now replicates user requirements (Issue #18) Nifti2Dicom (2012-07-29) 0.4.4 ============================== - Added 64x64 icon - Added MetaImage, Nrrd and VTK to filter - Fix QNifti2Dicom not executing --help and --version when DISPLAY is not set Nifti2Dicom (2012-06-28) 0.4.3 ============================== - Filtering files when opening NIfTi/DICOM (Issue #14) - Fix warnings on .desktop file reported by lintian - Fix build on Mac OS - Fix "Crash if nifti image opened is not a nifti image" (Issue #12) - Fix "Crash if DICOM opened is not a DICOM" (Issue #13) - Improve information about the opened volume (Issue #7) - Create and install manpages - Cleanup (translate comments into English and remove old GDCM 1 stuff - Added progress bar in the finalizing page (Issue #17) - Improved information about opened volume (Issue #7) Nifti2Dicom (2012-06-26) 0.4.2 ============================== - Install icons and .desktop file (Issue #4) - Fix "Finish Button Label" (Issue #10) - Fix "Scrollbar shows only half volume" (Issue #6) - Fix "Crash if you hit next without opening an image" (Issue #3) - Fix "Disable the slider when the nifti image is not loaded" (Issue #2) - Cleanup - Always build gui Nifti2Dicom (2012-01-12) 0.4 ============================ - First public release! nifti2dicom-0.4.7/Nifti2DicomConfig.h.cmake000066400000000000000000000025251226163507100204250ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef NIFTI2DICOMCONFIG_H #define NIFTI2DICOMCONFIG_H #define Nifti2Dicom_MAJOR_VERSION ${Nifti2Dicom_MAJOR_VERSION} #define Nifti2Dicom_MINOR_VERSION ${Nifti2Dicom_MINOR_VERSION} #define Nifti2Dicom_PATCH_VERSION ${Nifti2Dicom_PATCH_VERSION} #define Nifti2Dicom_INTERNAL_VERSION "${Nifti2Dicom_INTERNAL_VERSION}" #define Nifti2Dicom_VERSION "${Nifti2Dicom_VERSION}" #define TCLAP_VERSION "${TCLAP_VERSION}" #include #include #endif // #ifndef NIFTI2DICOMCONFIG_H nifti2dicom-0.4.7/README.md000066400000000000000000000020121226163507100152060ustar00rootroot00000000000000Nifti2Dicom =========== Convert 3D medical images to DICOM 2D series Nifti2Dicom is a convertion tool that converts 3D NIfTI files (and other formats supported by ITK, including Analyze, MetaImage Nrrd and VTK) to DICOM. Unlike other conversion tools, it can import a DICOM file that is used to import the patient and study DICOM tags, and allows you to edit the accession number and other DICOM tags, in order to create a valid DICOM that can be imported in a PACS. Source code is in directory is split into 2 parts: - src/core (command line tool) - src/gui (GUI) To build Nifti2Dicom you need: * Command line tools: - Insight Toolkit (ITK) 3.17 or later using GDCM 2.xx - Templatized command-line argument parser for C++ (TCLAP) 1.2 or later * GUI - Qt4 (4.4 or later) - Visualization toolkit (VTK) 5.xx with Qt4 support enabled * Documentation - Doxygen - Graphwiz [![Build Status](https://travis-ci.org/biolab-unige/nifti2dicom.png?branch=master)](https://travis-ci.org/biolab-unige/nifti2dicom) nifti2dicom-0.4.7/TODO000066400000000000000000000000001226163507100144120ustar00rootroot00000000000000nifti2dicom-0.4.7/data/000077500000000000000000000000001226163507100146455ustar00rootroot00000000000000nifti2dicom-0.4.7/data/CMakeLists.txt000066400000000000000000000001331226163507100174020ustar00rootroot00000000000000install(FILES qnifti2dicom.desktop DESTINATION share/applications) add_subdirectory(icons) nifti2dicom-0.4.7/data/icons/000077500000000000000000000000001226163507100157605ustar00rootroot00000000000000nifti2dicom-0.4.7/data/icons/CMakeLists.txt000066400000000000000000000022541226163507100205230ustar00rootroot00000000000000if(UNIX AND NOT APPLE) install(FILES hi512-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/512x512/apps/ RENAME qnifti2dicom.png) install(FILES hi256-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/256x256/apps/ RENAME qnifti2dicom.png) install(FILES hi128-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/128x128/apps/ RENAME qnifti2dicom.png) install(FILES hi64-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/64x64/apps/ RENAME qnifti2dicom.png) install(FILES hi32-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/32x32/apps/ RENAME qnifti2dicom.png) install(FILES hi16-apps-qnifti2dicom.png DESTINATION share/icons/hicolor/16x16/apps/ RENAME qnifti2dicom.png) install(FILES lo32-apps-qnifti2dicom.png DESTINATION share/icons/locolor/32x32/apps/ RENAME qnifti2dicom.png) install(FILES lo16-apps-qnifti2dicom.png DESTINATION share/icons/locolor/16x16/apps/ RENAME qnifti2dicom.png) install(FILES mono32-apps-qnifti2dicom.png DESTINATION share/icons/mono/32x32/apps/ RENAME qnifti2dicom.png) install(FILES mono16-apps-qnifti2dicom.png DESTINATION share/icons/mono/16x16/apps/ RENAME qnifti2dicom.png) endif(UNIX AND NOT APPLE) nifti2dicom-0.4.7/data/icons/hi128-apps-qnifti2dicom.png000066400000000000000000000756731226163507100226720ustar00rootroot00000000000000PNG  IHDR>a IDATx$y%XLmuw{fL1?`` $豢h@ZI]yR'HQKy%{_mܝ..BEQm{]Lo=om[zϻM~P5n tKIb|1~7\l{~ oEaFKLde\o\V<;dFyvٝnT۫T?y^J ګ{RsVturwa[)0Ksz brY3w':뭥˶ǯ:J>GWuGS>jӿ7_u b>ȼUno}^gW~Wy_VӒQ~/jn-?;RODy.-fxMq)+?e-7=uӑ|Ցokч^/zn rƫW];wX/t6o}VsRas/OG͙䫞5C 'p?C7|Uc5# ?mW? ꩫS k)7o=xH2kتRU>jsvGn[8|n^(SHF. ?ty:h~Xgs Y/o;KzWf;r !&w1E{^Aij ܾSp.U5s|mU2u>u N=AtG@kiܫyxгl[zO ZCkADsIfz̽*<Q?tڂN3.\#) gfi%_KZgES$F|2E՚O|LMǎȻ>('`vΠ3fv>v]^t>b f0r6 l7z!ދ"}[BډZ/lmA}Y(G[Ews` 4j -Y8Ο:?Oj/-F&>^}Uy߿FCfSP-DjoqG [dZ{?lgFVևX"#y/s J~R15cDkÐ֎~j3ڇ6<]?zhc ~Dy %B _byǏZv;Lozhǻߣ%?? ! ;[пԿdP|40X-pv3" r)2IIܥv3F0iap7w#-P_fV"۽ɟsΌR`Յ7Fk~} g%&!W^ ,G'[PoDik(V{d呝"c?J>GJӓ9ݯw ^}kO?tQ-zȣw3{QXFi\}dOٴ^ͬɳLyߚ`6:0g 8_;`{=2nu_!  HhW&\tj"۩ t">&fK8C! "jL<-:)D{ v <3вX-}嫶kMn+?\7Zq`I̯a8B @ep*Rz/6CwuE\%#41J`4 j=H+, xfos A3@ 3P5 ,`1X`.uaYiymL~v4b4߫ԣG; )y^אlM۩u M(p"Sz)BKܓmswdJF2@{ʟ%kڬI=̻kVx3/ rC.F`72\ |t>B5?J[k"/ VU?U{7bVì̠6QE~X)Ya8G  ݅Mb-w`^d|^ojO G/ ˿|Z*<"8[Lka0k- %.I07od~ 8An@"f֔Jl:*b@f)2(\vT0JJ5>/YOڟf&K Jf4D!9Rj'"R y{<7ߛYtTcry4HSs/b;I}0?| HK3 ? SA]O'z١c( 7Q( z1Ⓔ߃Q(FfڢP33zׇ#H&w:jTa^2#ӧd*QCW増ӆasR:7hbp [ fxA%)!(-:@#&QXli$8R YjICtr5H+Y Ϳi(x}z+4`V3B,{#3Os"'Q܏JZ6}q;J 3vC2Ծz?&9lGj GR+cF3z&Ikj &7"2M 0}JWUXyX:Y hgp[,lI#A= 0i~@' 4K _:=#[ cb$-P,XzViN=l+}ƶSRI>OMJg/ESZ^t}d meO"@SQ@&݃hg9%u= SfEA| zɯM X.SnqRg/C #3x0&؍e@r&u5@VXgܝ~$) X V#-gs&z4ĕfT0{, )5S,Y Pf)G=2"PJj/"J0l+Lj)^[6{1lU)tt"(#|^CY%s {Zɿg8 {Owk 8-G7/3fn"yYz;A S nu{__f2zxjl  [bݭe0jNa)3('gbfy*I :[`6R2@ VIL1؃JIe;v_l$Hk`u8۴`V,Iu, ] Ai!#< wΓPZ*6 g&=( A$|mR w{IIcnY1c^y5u|ffSu1HCySqmDv~)RJǘ ܪP?zB ;KXB&QU!&?:fZFWA:O ՠG;)##3K/\|RL,E>g {\*22Cjf~%{ٛ::̶ 'NW)! zme`_sER^%l[ta(,52`A:ck˨)e:I!cx2KGKGטPᜤ}&35blf$TJkiqR^x}z?Ҫ?_eӃ)eo˚Qcde@J~mWGɤ/b)hhz0`90H$I)k$53tW%m}~/ ]bïw Vf) a_cH`SOlTiC/ROU,dr2Ta2-TS4h`:]tB7Z > vcԱv1{ /qhZGw֚ĎacM3Ezjy5Fo4AN_gU3TGj Z Tf.k44HV.&q0@X[1ؔ9Cly,7|n ?Ϸm3k଴V!N& :X: YX2z AeMYyQ{A,z P?#xӉ]DeVky?@4 QS؛Y>awX>r{&yQJ(&Lg7A{!ZX!3Y)Dۑ#3>R~h!ʍz AfV4ђ6),dN#uZ߰odUԛa7\P ?F#:2 ]} :B=F'N?otP,=:utb- 0s+ YT%d9 1z-xhU&vǭ$xI,ۚF] %i@{ >[ *`A5T 籃, 1R~1 mVlYlh k7$sK9#e=Ff`EYlÑpT?i~C6SfQ{|/>Tb3CAKf߶ֵ`?&s1J# o (_҄^gdYٽ!(2z zRpaDEbeM1~i RH_s }G`5NV!+q ވC cI)>?K/&_O7L8K3M;D *ɖWyZȽ oQŒ]%#]jg ǹaM307c ?d ߪCź~Zft ޼ 82Aq'MWZJ Rbۯ Pdېɖb3[?϶IHcI*MRfI{bj8' xQmbZ1y~ e{e Nkd0EBC-` SdLt1,|A0* z}hpdO#y?uW/ݞMD1u_R _k_~1ƽshrO}{ a>6ˢ2AF/SXn >uګrG+P OYxVP{1UR% |.N i)k|[Y,h g&ʴj É Pd2aeUd{{ Y924ST 6C(u/ÿ1g #=dFX@@5P?Tb/ٴaђaU2mC0 2R 5d]\uT*H6hB*Bgse_,_@nx js}胦h&DWZW? @?i/`:|K5l>dXQed9)ƺmg>Log`˘q2Dc`6 ;Xj0d %l@%{4SL>N2*T 2AkʑQGDYt~JRrf ?iuVUGKt@ExUWݛD?5{sZdg/Mh)TU϶țhFu!joǯ"U0o1kF[mh 2HaІ4qf2@9 O`?]g5H"zBh(͗DK%wB1mj E`3'2敊@}#ʿ QVI[ 2^/WM*`[ 5ec8 k >ky̪%i2݋CuD#/C 5 Kw²"0N`(nu mȘiͧ&0siꎓWvV.Fr7#{>piWށ{C ݻc Z'?ECYR5"t*}*37bH,rE5Rn2sEu D6މb{!vPhyA/^HQ'4fSTq!]aF$ŚFF (k!SqfR9^2I@K-p@'c4g:ǍdY8DqHkXdᲽ*-m1Tg@ ܆;4>8סctt%V/u_m5?uf]F(2"zv q9ITƮJg ]njeGxHM1,O5pؤnKv .u\&4YxLF>==9{ Q5El@Ҁ6`Esm3g3Pd8\~2bW|^cEG6Ϋyƴ4qK,Ӽn.zNHF> ܁-6A &GK_(-O^WpìG ow> _~xCҸ|ǐ\C6L">&HS@1dJJF%qse1 2+,",J,&`]gEd5f1j #f2 e!K=Z*mȣB( Cw-Ac{oj]?k> zLo@;h5ώ5e5?O"De ?pt!v"źWF[hA3 ^U_1iU@+:xJkZxl *}R[ 2FZKP!Ps*NNj%{sQ HM?2߷վUy@w8gCϚB '+ԺWw ˇwi&[8gI=}"𛦽%WeU GxNǵbhr _YnAY-}ԖO3`$#t5ݶ\鬑]9l٬"dZ0g &PK']$KQf5NdzTT |ZGe@HnZT#L00YpZ x TMҨPMe){ MU}܇QK4EGzQ,AhHgwLoɢsr_¯;O4ϿŠϢ]F r\D0tTUxcXF$rĘFenm~>-` ޣv1LZl2qy2YaZ*w`BX3iK6X8o d05M} L#.72P(}^.*y2)μE |*S(@e1*`yA:c3ʤ ~:*-4 ށy8MZۻגNvO*CAv=وQ~n2@PaoA.-+ƺX=B*MAkG:}nksyGY=ۋbغI+ܓ.1WH a2GXYqMz!%Vn\nuՅ2``&6XJK1s6.[dfOs RN'omEYc8Epmw:aŲAO 62xd kb #Ϊ,g) tPԕ8t>MdE :_7*;wWdQ>whW~ҧ-Bв+_ѓgQD}{QG?AwfcZ}ZK*3꿅W#:-TH\ĒPOFhw=Q/2Xx%Etμ}kgJ4UJM2ڜk?AY:Aovԣ"j>V7؜x7n86 ulP`n072B 5@3:KA½`L h!+YJzeJ ?s%Pal2a8fS>5m$l%e9K@w"|ٛJߙm|Sz:z)L~W|QkZFԻVP@; 1M簎||A+} o['f2l[NV\iՏlgT`3,N3, `DZ6ju4Bם1Q̱L3ynVЖ[im-t7QZ@Udke7 v5_^FY(1ѴܘBs`:LLvXELw^Qxcn]@9/kmDd3\IR6IJlDy1,!Xo/r+i|mSX@!~-}4{ӳ5IgoHpX&:d y9_OcVkn*z3;J2eG/yu+vskCܷRϢ2@NPˌCG{e~XY{<(67 IR|3!ohc:A(qT $de>Gyӽ>/Bj`m!3CbmIcJI'#d}$F`\kv^j<}z'cEp)#lT}eƺS,\w|3d̃ XeTYXk"L;Q _mtv ߀;|Ugo8[n iC_yBP?teqo+F{Z%5 (o!-I1{X,[3ܶ!8lshۢa)} Fm1 )8DZ~%AUϬe&, z'? 2AkG A =ݭlTRcK̕(`yɴH1JBQDA!x]qL(v֑8۫`U)ŔRe Qd>wtBUB}nׇ0mx/=("< Ng-G- OQ !92(*. 0(+2ڧbAk4&.kR8&p7y,RMuyuAg5ez`Q1m M]$~6+1TieTڠ3EYY2Ve>WS˼fR*cKE$AA@#h<`˴mmDTKLy:V \r2,M+aH;:ǔ҅B}ѭ1[QvҿB-pzw | 5͵ѯ}Y}'èRq  F [![a°KF3^f(̔Ӽi'e(lҧ"j?JF qYccT?;򰹋J=#l}j5ji`+2H'as+i1#ڌTgt7+%4WT!.u 2eXb<ΒrZ:P+|\s2.Yiɦj/G]B*e[G'3CWdy-o"/ =#?r 2*^3ܽM=Wc~~Rvmfj7l`5ɣ:rmF^eƜqN\M;(0v嚦i[SBm^H`}8;LSI콉Z6SN Knauty5)gK1 s>Kvoe,<`ga,pdWv0 Y';,YX瓴;} J.rpK@sgv{MߕMfa.d'v29s3iySk,q [ JXe E8.)OdH1rۂ/r .vU5+? d>Loz9@ܷ<>ZIӬ6[J%FOێc6 lPJᅦo-Qި<1> bLzC*ͦʡq1w8i% ѓw2Ïn\qaøjE );ɺY[ΠRO;O p֜i ,e/ ?Ql`VJImVE4t*3Rͧn31#FSmFg'I҇Yb x:@&RP3֌GI8xŻ^[U3 I2*=eN6Kma,kyXW,I?ObOq 2C`y*W0|qIi>G=cmgWgF"F>V>Uٷ7AjGBJ!&7$silXx|̱FXd$&'v0eBǺࠍH݇guqGMU4"4l0O}{L❁ {t#W|ynCdasbm^iuJ6N3M7VYR1z#{О`Y?f܋.8ecEP 9)sdQ?ɲQ6\y! Wn}\;_424u62 E64Gj/29H@ ;yބ%Y tY id>g/sBڌ wRfѐQE&)Ő9%s: 5x~vd('lz ߒ}ݙx&;C!ǣחI)K`ⱕ^knDN6TXemX13E t| \<0b-2ʀ]wtS  Pc-Q+el^kD w/@*RnS($hF'_9O?A>hNbt~XV8ydM-{,ci$, jEQC!dξ,j)$oSyZ ?0βs7:ne"9:5:N22iFRCX,>盫Pl"i,G"c T 3f#8}n ds,yD(a E?"6Œ-{ɷJi"+%OeH &m!u!f  _V.uxwxO>XuŔ`?SiY_BW6߈$,#!dHwz{mk=  B5@ IJ6{|Z5L'huK}Co1H؄=1C75{<#>,CTyh&P:e(i6=d,fk1:(=AűQ|cX~nt𐧐bQG=(pN]'cd8e2B8hŠ&jW Ͽ G^k]{;q]@e4Aʺ?fl-ǪVI!ӎZuY^ Y d IUz98눑pڞol&>S ,H%$ ,Gs?X4/Ҷ=dՃ1{-2+LRzAl신 y;t/|PƘ9L4TzZxmmh!HlT9Ʀf88.;"I)"U5!YɒFxφ6 hЮ%nxXy ծ w=U-NYA5R]y"[{moYzQn"kl|̒a\"\cFRpƑkݴ=hw5٤[0:/CڈxB/9GI~%}fңMfa Fz)y`]x'wQ>vQE<.d܍m m#( v2w β\;)#dyLM2oK2s1 G=J`wj=hcՐ| <_k t?wzҿ-=@sZfcۼzr Bwa!豏 x5 8ڞwl$Ih4Ps+8C:@Q2t!R |Wp:_X 5z +bK6z@qadG3Rڠ  :;q)`OC4W}Aa}HwCiNq7#k0\FF-Kt*#tu?VQa$0@=-!eZHfCf -u* ]34z~DSkGzkJ4iOxN9< KG,tB/Ӊbޅ^ *e`>.$DU0J_Q(i*R&-tDZbӪ} qz)bhE䁷`nd\u AlaZiy#(WEɀ!Ju}{"0 Å<MR O]ITeRr=i_㵀ZǷխВyP1^HGVZ7O؊l`ymMHyfI1 jh$PϽ|UC7%-;J BR Qwy{6\Fz^+wRNZ)"wÛ~@H\P QԋM(,ȫY~X tbv:Z(z4 ^:eFYOSxogQ#Y!@+y|{ )i R%Z1cUeaa t;xO?ͱ(EXr\SAɉ35E^Jo&-WGv('fGo?mi9%qSԶ@-ڈ(z8"Ѵ9#@-FsB5e TZ&y̦dMA2C@ɠPg#ek"'bj[2g{xp'3L%N/984 +P3/BAW)W CyCtAacA.Ы%AXxp %HTD`zi-[$-{axNB^U\ >x 1zFhR PVż40f1REGBKDIal!$Pnhax83f L6u`۳Ԯ}Ϙ;vݖ$( LɊȇF卤g19cHvIt3W2\Er^& P†a(jD>]-.Ơ Y[2$6ё3 Mfd^%p b^m2_'.&ψ\b N'G}VNSBr>LV]Ͻ,YJ|𶰶V-y&*uu^ p[4lER!P5hDmW.5Hq(X Q4p]q(\%u]R2ch;OJQ FO:i Nf̓H6ш>AmW  }?zcӵ _o^0K x9(tU2c4V*U&ۑnHdC8 !jGD > }A0&C,ul#_^4=uޒ{C1oIb}|fLHP!J</r& 5P!u~KeLNT(j4qrh x'wE*#$Qf *aKlPm]1dɅt&BwCC4+E1yGLTouzSIz$*Aid b ~BW(t?" sExex0>mBgۮ4j5gJ}`I|O\(2 'CE`7(i>?\Q,nԧ6LkO=%yC^ ۷PmQT{ f:` E!Z 0)2 O :^}.1A @A8'AA$DAZ DNxJCgQjT:AÍ\@3$!>i縹 MTpa 8!lsDWAǴ :ǣ IV5WNi!8LfnA/#o͵,c`!?uO:.^tP\- >I 8VČUJ>xyŀY4ͼ-`F TQT¥]w ofzŽq Ub!̛)8R R0 alw jRS\AP$B@hX'1Z Ж# #WsCOA:e !QSsJy1E0hROJyz!Fys舲 ƙFDycF0s,[su'0EH>K{?Tc_?n"k)n<{RiSnYL 5$@ЎHdE R0Ƹk׈O."  0M?t L4H/;AX6s93\:] ^0 R8-׳`Bbm2aM.I?O$ex4G <9@weA*ƨ܆l'psg: 5FZJ ԁ㴚 uч}Mhw/hϼ> *Dm(+ais(D1@#$̽`q}AR71y^P* ߋAGĉUSj:׬ea0cYoN1šSGn$ ?.dWJ#Ĕ ]$ߡ3OZZHYB,P:$RÀ `o"VIj3B ;9GN#U0 7pUaJM+$w  B,r!X% B,px ?&jF , ʬ~*7wQEqUeQ  EV0.>eK;I]C^ z'EFډ~;޿y̻4e}0>7qDUu-d%,i'Y~|q#p8"_>S},]Dmx,n DL%/d #i=#[Ơloh*8˭W)> b̂!Όks+00p iyC,pw>0f7Z\֔o'⯾ 3d-NR=>O'@0f.Rя]P\ޏ|~=*5}FMM;qnXPA][ͮg%GGDOMP0 ,(r@(8)sQxb09>Oȅu\[[wz9<2nRU X Hi6fO>^-zje{8\b%;6P1%EKZV, Gf|8c\ .H\ ShhGy2 XŚwIY&FaŒ"_ǘ/S7sDԸ媡j8ca8aZ Ȭs`95uAXe)dn` “Yè[`7ƠA]wi1+?Ŗx-C1o p3eܹy"؏s t&) p({@;uj1-F%Rqk n{= rW݈{ b0&~6 տ<^r9)[{_K%̕ﲴ?ˡsqe!yyLx@w;4.).:q"f ?xA YB)aGdm;J-76*u:E-$Wn(6D&Py1n ]9H>:)i6uRqExAosf`+ЅG\I{^ #r=(A{PV[.,ԛ6q}~]TILz<"TH:|as~^Wtk׈NfbTKGp7ծ =n:W- 1}` sd6fi*(X'unRR|בZffi?!w@j:^a K ?R9rJS2*6 x^/ 4z2&PēE jDiTbkp#0 9o= o]9}i|5 !1Œ %eewƝ̖M\!"tHpOQ5vBs\"RŘ`/R*_-kK{ t-xN*YZ&e~>G16THe'{ϓ/{]!=WQAU}2z',\duJ% th0>ҼAک_4@Xh"7!o:&&MQ;a@5X^';0x!s(Iw %\ 4߂+=>rɎws7o) (|˷K\7^_'|hFij{lwyZAvZ! `(KgcjtC+Zb~eHkp,Rȹl'5~uu KZK)lYzZ74""5ZƨCAy%%#0(Qh29Kr!&s7X ;!D #gc{ސ /`ZQ˗+WA{!8@ x(Q% znfiJ {@ZuP&ɯ滠ބ3P񬠂-` LQ}B v#E$_\ީR7^R'f}{;x =r1`KKYxZtME8x޽AɣVn^KŜ62V1 oQF ,4NF8Wt`=4ƝBx>olMCTɽ`.jz^)@W ͛B A (G /kq~>؊Tt}CVM 6rwKy|1K/ i}emjTN>axgHk/{ju߿2)_~P?kC(Hub= pl6H1=Bn Q )l2b|PixC,\\ iAMj[d(ըUm%[=NAAs :`vVJ.fatq|jJm{ 9|!Q!+|j; ~'?c8rnR*ShOxZW-n8wpgqCJcjacx/ sfu#: 24-Ͱ>ŠHT{1*UwkdnAgP~F~- K["}e2; QHm+^04424 ?i:T_f*ssUKNƷDJwߺ+_b 9 rc5`hm<[C[pbGͲ0l?)f0E<[e(,SPDUP* l@u="h+5(k袼 ĚuZ? {a9umktӴ%G. Sʥ\6Sc;AT/!g YgIԮGҧ0>[m}[J}B+n**;! 7Q#aAf?A5gQ9PE`Aj043/1Jis2UkېzFzh2_̑lYO 7S!OH i4 oa6y7E={t_G(א/t"\{+jן0ܧ4^svqg^UNkcTǮ-"7ӶYY+xnuZC980FGqEX]ĆTq2sҎAK?+no$ɶ6;)Nen TLPְqahҲ oFgT6/oM.Aa& fA/ғTR~9B7|Lmr[@y _[+?J@ .~S.v;2 ĦSxa/ ]GH8KcFU62[A#G9H)b BG3#p1Q uZi4Dw3 ͽLM EWٍs\דj>ml=}XO< ?SkڑI 0~ZN7.Ro9M+^hg1XjjM-wܢ]T=4mEKH!&:B=ӨcF4昤qh>M)OP?MP'. ˠ3|Kd}*Ղ]Ҷ%js@]Nݮ%s/Ҡ{= :g9M}i#k$yKuN->Ţ_=^F]ym”*93z(8JcT]}l4 F-"UXC΢QkF춎 qʹ|CȈvJ*Ѝ<>K9$ tӬc#(ef:8RZ^Vr 9|OO~B߰4Tϡ SKs w?Ns]#eFNa[@9 ކXAY1g Ixrs4edw쒒}pCXIBĥ to#` 4 p, ,QYK̽G+[~-E{Ɯz.[)V\RX77}TP׿G)e\7R3W<4;f@3O--19J:D}$sNzuSG!t7R1}5O#YRzZzx44I|׾&S5ߥsUT.c\oR+g{T*%s']Lu\kP`e,\#RJI2kR+?o$@&Yh"ի\ )?fJ|f8w"s?USU>8fLs瞔gi~#MP9#Z9xzmqb24 w]GΛgEӆX/?nIy7AfZΠuyr*b߄Lb1yǍ Nmuk^W]o})cOwUS⓷oߤs8y+ѤSu]}+ug.74\{ژXabu5=:k/>M&EHIENDB`nifti2dicom-0.4.7/data/icons/hi16-apps-qnifti2dicom.png000066400000000000000000000013321226163507100225630ustar00rootroot00000000000000PNG  IHDRaIDAT8}R;LSaĶY@޾ZRJi-H-TTPy%D`\⎉D";Ӵpsw|8q;yZ\Rmlp_7ӥ56|ҘWFVd٭D] }ll/d A~\쫯<ԭD "Nw`9ہ&wTkHMo$l#t+U~B(Z <m]V{׉ WeHa6DVS!"G $Sw:qX&Bҟbà҅J 2Ly$ olT./%Ȕ4!+<*#p"ueLԡfiu^ao,cAYaƤʂӴh3% -sT Ѳ^b(R:S8p01Iѭ v | + lk|d@FLvøLd!eZ@}L޿Yj׏XJ*'Bt#= Ț<۴IcH)h]$ID>öbT声o~|$mR#E3YH@&_n 5{P䬆۽""9$uE~9V V$ٸQk7ZܿFIENDB`nifti2dicom-0.4.7/data/icons/hi256-apps-qnifti2dicom.png000066400000000000000000003554411226163507100226660ustar00rootroot00000000000000PNG  IHDR\rf IDATx|/3cKz/ݲe˖,ɶlx~ѡSy:wYuV~SjcHv͖m uW_-~3J/O<=R7䒯mו~җN-wԊ^W+^T_xLmԍWdǷm 5:idjP竨˪'1xLizK+/U~W)~j{[rྷ/#|M9kR gٟ*eWK{jk _pmٱ(Ha玍U#TSҩvCd[wϤ}cojkʫ<i*9M ojWz o*_?5?/ MRSo%nG§PK_?-9{>O_rYv֬a?ܪs&uPjcqӀ>]>z~^-KZ[?soC {,.4y9n{9s a\jv_/;zPʽ=7MwՎoTw{W >/~"Oj%Bȑ/#7|Cj[t&NYȺ''#a3o^W֧)_~Tk)|wWwU9\{];V=kAߞ|ߙT9L uZZ|\ <#k.Q/'%pݚj4L_G^Tb_zN>x5So`OWߒ9Yy.#vKnA߾m䳯Ǿ\o'mY{8@&5~4Eku%ȁߕZ)xgJE|5!z u驓ELAG|]|BC7\sZw/_!z\|`u?u^\+^+ AGPQ*;Q.7<pqA>YqK.EP+佑dk Zw1UݯoVZ7RR5j?N.rA߶r-+oDEE*, | \"eܖn'u7mAg8.|:.{n@_X-}u%cL9~btBq\|&]&Z'G>Z9>+]t*Y]<{I-y~.{K^sqjwZwPS(U~.^ 8Q}y}'}P\s=) y*~B)|RJSǕ˹ʁ{-&+q ZH%Y*LQeTSyLT(ƨ4Ai, )@ v \H.BǙpVe~kkM)}u%C֛ώoݕU'rw#N qg3f4m<$'qRkG_~EE+?sw;&ϥ\Y+pV>DT9S)8/&m/yRu \"ⱌ[@ X7;"8/" $ {? 7p/ɹU_YS_I MrӤ%;RuWu*34"@ )y $S:JjCTPP B(0IA,|q춝kp Fe5\?)u/~e-:{^I"(IBu2XoY1%wiP;6'srgS,(T<*_3ȟ}%e TtfXnjy*M$ka"ʕb+dվ4QRג @L9@R!p3Mp(m #"YamⶅL)aCL(l#3 POaD "Q:@0%\@ZA׺x?\/LoF\EYg IlcBa@[k To_z7jF-wncd0NV>^k]W:(q2N4LH!Jq ޯǶ}M~99(O=-u|+/GXxz69s W2f: ?ZV;U{JlC R6_(?{GԆJixGZͷЊ_~G{C}ê8f7 e.X yyXb'n&{a ZTj'uSRfS(M-R<Π8{~'3$yn }D\ iD%Z;i8iTi9,!$!= jlS-$umF59'(eVK]4҄sh D@b!K( @Z^nיkF%CeS~bizj/)͏?$7}鲋gw.G 2ED;Yں6DV?$S{Ye/w_O>U5YgqqO(T#b:Eȍ9O. B/CjENԢ t:L=iA iS=H$dGʰ\=d$q1]א$VV,S)lY\,8AI+dPwSssV2;⾜ ^Kd^J6Ed\x.AuR(EDFJ{+UWlYKktFC>h+A3SdRg[6Q5r*U#﯅Z67ZM=T-l$m'.z vSsAgٲ$LuJaBNQnCJ@?_IQ҂7SLxB| 3M!C a*c9~6FIj0O;ƹN&( +AxqLRݗ꽂,3psDpުJ#V﫱0$=fbJ/ 2ӏםz8?[3ƮRixJ3U巚Vk.> 8Ss{vRϣ\Ɇ_s'm ?+Q(E~ 6OSRR dFm&ԅ Pej8!9V+T G>ͰiD'݉{J^ϓټd7 sFjp&R9ce<%(=cc8!<RS4dwK|bW(~M+ǟ1$9S3;-O;^'Q~Ω}viQj5J +%6cETBTGsse=%*-P5H #?Ǖvjh:&pWmv@|bT`N֭a=H+"jSrAݰ G {[`em58o>J wf}L]PA0bD5c­#}f@<654S௓Rтh@,18(ι^mAb Lh88 ȃsZIm "3ow$sy?.BHCEH AJ>@~יbB{xM_~\ʿ-O>ilⲍՓ:sANtj]Vm7DZnxY)we]qg96Q}B ;a͗ҺLe\cϓ B(GMSHt!W>O f9f)s;a8Q3TCx&{"jVbP@M"f)(ϛ!8\Yy n.RerXK Xoj⧐bYKBF%MͶQjSԁsa$H} A)A8Q)C^&8vӎ6Jb Jf.ϊ@, $p ݲo@FZU(4 S2SrAn&kRNh@M<C%*ҽ:k^.: Ks&^&'45!ŮZrţMͿm!gS%xhm*OP}+wM}B O[_rvҸ(M+QZ84͘hK}PVj]/~KNXyb(jT@44,ATf3i1Cð82KDzy3pHBe3iɴ03'Ы4@RKHIڲ@| GA = pcM4#h/qZ iCb_%A< n(jf*a">N # >R)G0$O?'3S>,GکN?Yg_Ͽe^~_e("Չ[g(jE_ aS/UEG]ݭN$'g%hє;hCCV+BJAr+!w.DT@$0p,5gj¶Z&ZfM4 <rHc  y~ X$`7YY\eGJ'@2hn&DJ?@^1W!߼@Ta&F/ZlCeATE$q.f# xo.(5uߍ.#`NvuG7C7 D*o'?8N0iWk>0 uL["L &*&LYhCE <~O[A@%sG_hc;y؊fD Vک ]&^`;YSȺniE-Lq>8¹ 8PS4W*m2ᮆ@Ժl ç=7 R!H 8ϑU)pJWY}o{ʎܭkHtVQȓ]y(ݾCyzu_7`vYsp'sAJ:8 ;(۠8P6w"ri?(TU= {Fcv]^v7|:IIa @@%eHFQwGì5F`yuA 4D<`$le$i`UrkSÏ(&V80Qu+jۨ` \ex`:5 iC<Epb7 @bJA)L/Xm¶͔SeL.L] ~#$V8۴f x\G4' ߓ ZWԧo_ Cc`^Y14|Z+J?Worp2U;'PoLa_ϵC> iueF AA]|W %/w( @Z!&17g}:cydȀIppif+PMIV f1*SxX4(9wu:s s%kRMew%3%G*Nު۩{Yt@uvՆ^W_q )8< ,p_LM‚!qe&h2s^یj08.˔n*Jp$1|zS&U(Rhb @$ tN?B 0m2в&).:WEB#, KLAdHTe=愑ɤ ?*RI &@c2? $HiG1N냃C}Hkg)-Hx?ORP0(=dFo^/SmRHL7,iNs~HxȶIFJ`s8. z]f.T7&}t]"Xb=nld^=6{v1SK/he{{UAa~a8>pCDB(? .g}hLTM) =4_YQ"UcsDP ≈>Lj{sH}޼@m ~s/ ki1Я6 NkԆU%ǚ!|›?gSR⟹uCxbVg/eR kxl\: l>Ci}˦@-5:֭P XlڹÏb,?knik MY)Yњ&Ey/ԭڡdux+4] V ^kPDam4 /"xd7R?lr'Mj܃ Ls %6#8"(Z٦7+HM$1$(;MnK䅴Ktq 8/3|Tl;S4 N 8Ý}Er;>򪣔MSii! jmIK6 Rq-Ky K ½pag@lR)3 шIcjlGxDd^1WX~ش;#Fo]UJxW =#5JxT@֭I߾:=S߼Kk.!^.J8,ZTi. oOYS4aKӸx.1\c8sQg ^='U9jOx2όCXCi+lfC z(/^Ry@B s%2Wxf kq\4NIA H`py9!W|jߓܙ]m# xiujy#,QCꆫ/%/U )KA<[(f47k25æ4ZA.B>eXO锅E[/:f=ohCT P$*ow;j$k< AcsY7OBg΋Pe5d\86C9eViAWԵ cd!s*q8 $ IftbrJJe0JP!s7MhL~` >iwR⑂Ld++U "\D52Nݖac>9{O'hSydZ?b}1O9 "lέdq^LVJSkx}Ku%&D OeΜyG/И{ےvky3)Ϲ˰bm0.>1uP@K~Ry@Ԝ9}sg̒bbzn/Ԟ/*\yPBIPZ?-r:_M!ڍ%WNX- &W;-?/*'7)r%%J: 9gCn-(Q6^Y$~YT:;бH)aJAݶl /qDž7@z(Kw)|/Ep w W2b6a*UGPgyrOӳ2HߣVvpPzc:Ēb pQXvVuνIAUPJ?"1#lt#NH2"7NFh6P4pDŽ  Z/1@>-L&>)F"1D(ȅ~ K‘ ꀖB!9&E@."uiDxEJH k Me:ͽIp %i*m*|anqVry6tPܱ=VO_Ч.ߙT=JKf( ) O[{6Li/=)rͰwS=.,# md6C)nE޽`4 RJi# !OYBXIy-NcP.!Fj:U7J"PIUl1V!BGrԦPNsHP~6H3HfзQ5T5a_&bؐ!NEJzkՔa +@EHVQQ3K@lݻEu` 1Q:*/t;z88p.Sc+#' [D=y 9c+.^3O;݊@qP|w.P*9՚hJ6j.JWeՂ26fx܍\Z-mנ**r#pZ0Σ%!ZY&^ v}ڜAnN?Oc-EץT( .` Pl ppp M̷/RP*WpEۋ+Հ[Db%Δ,chv16VPҲA9  W+; ͝"w_Fj wXԢ1=@sLCxeg `7# 4f(CPIQ@v|gQ|gԍd`Q 2 ݂G]*LBʿ{'vZx6f],ep}Ex߶Mܥy:\!2/ )pêj7_'6mҙe:c]Mip4~.9j+ߗr?;ܵ?F~鹿u-`NO)iFS5wBl1J\L۝yتfS$ ;YiY7Zayo.P*lV4FǶzpA,;CV6W#IҝP) d QKRHg igNMS"o$rݤ7$@V 5T| H)2EsJAe4m zs H*qH?hv3; LpxA0QsqJMri_:3D.@\1(!e,x&9>w.jb!6]jK7@ D#;|OEZEZE5 >$uMNυd \&~rU)z]hM?cl:veVYGNu֗jy9Z`cEߐ1~j'&{ޚBͽޫ<6 wye@)x6]T LTə&Qf-:ڨHJ!rlzj L?ҀS3_2@$I(X'?l:!f{-;CVMgk!:Av#i1BfA!lLQS b IDAT,Uf`Xc |N7I+ A|mC2fW@ A$Ŋ m DE KDuԃh6DZn7!(@e`[$7w N@b-pEu8bD1N% H]asXx   NfNFIJHQ q{ |^A.R . :Evf87=5UwMUo?nh<51]Cp}qgUYY"'E>\p w>|:D6emjrmIJgZ'JJ8A/k(@q |ŨhaP0ؤ: _>= ^Κo`rK^7}b1vsm -l< 0XmJb+rab(@"U! rMdR)ST6Yy`?+.*BލA n2E盀ކebG Mh<1 aVJ&"?%C j:E(.{(@Gh-H`Eij#W1yj D>jiK#νi3 Q#ha ۪lA\|6"\}!{'OKVnp@k?P!WV~K!qj/OT*kU忖lM^&4vbШm[E ɩc'Cx?Oa]-#g?fV OܙÅۊXlU'R2/ XtBDU%ԹR-N#q1ۭ ^ϐ [U/VXP[? 7M~ee"e,8Nr_ .@?; B@?*0fV3v ixu S^3ALK mC_N%pGY9- 6q{+aw9*GR)AV( J@ iYhK0tQDGjbCpRp5p<FxtBJQ)zEJTMQi\ՠ5{@JfE&Q9,f|d[e S[f*;<$R岻ޱq>JN'ߵʝ;Pj[JXib^Soz"fxz jKW-q?AӦ104o":zx5^a Kq#NW*,VC;Zi"wH\c\[^\ T~E_"m(EQB{Cʸeѫ^kuvWC9UwuWWu9tt<7HIX $$aX "gKKOϲ-ےh@"y{"e zkjoUǪ>;gLx_âs]9kdU'&iruJk@I yƤӯ0Xq.yV]ccMFUШ-kK`5khf20hluEՏhQU v}@ZRp _pj K +=O3QI  iAt`D'@5=)ù ܒ%TE;oZó;~y5 }SχK;=kاOW{]مP䖔D.I]CmHOQMͥrf*͙{?rVG t6a+<MquÛ :klPPvx*lPjx&h`Z1wM/aak~ ~~ !DH1II_);9 {ƥ; -7d!p}S pek _6,v yx}&> :(A6QhXE/Y9l~Ie +(} ,mH/(> &32éJ!v@V.H2&-9;_:-}KUƭd NJ=H#Hܜ_0F_O|/B}1\{WH.>$ x.K ԟ_ P@Ɛ%5 R{^Lz ʒH  p>#~ofҡN+Nm,6Sr!< z4/@+AqAuY@I?e8^ F |/`mл%0uslr%dNI% ӳ x NHn4hdDzPj2k] 6P 6A0pfm֝6᱖(KxK+W[ (5T @1F_lÙDmrb@/  ЫY44SLTFٿ.=pkE MCB}pY #dͽ.EWK{fɏ~_ o`i]@/ƌaD] }ρ/'_ЖBt8~LqR2쓕`,t<Df'IlPI֐sb 6eѥ~,Jt7k|6<ՂvReu_=54{_3̪KX0}>Mx}./>3x~z3<1F0JI~3wY "&o'`hx'S\OO\#7YF,< }iwpz@XSblY;YwJ_j~7R,##_ٸfߴ]_rxPM)ϻ"mhoP~('@g3܇dUI8k޻On[a)a Qpwy۴™=;[ESRltKh%߄1V\ a7bs7ccwXk8=T`s kN*\[81뵗{JiEpD8lD<08 ư z ,0Gi]+:1 a6bŵo/DD7jdd*Ez-fl#)iIO,h9t^o Ftfv}[$4{V';[f|i>`X `Z^X0K j왂ޔ+i) Qob_}㓿pҕxkƃ0G~#ON}O~W?Jm_GnODsoHqΑ6$i@$`SQOPhk&98hrHu@9櫍ufe-< xZH`3#q bly d-k,=RwMEGf'd6S@xg8-ޣ:e D5$Eִ*`G\Z)B\cTjTv]@h~IpM5JLHn㵬a5-7kj\v0ܹȣIt I؃R z^fZD }Z{!mOV[ąkGGQi~ 80 _Pw‚,AADJu CJ/JE&J9€g޼ggW>816ۛC&?u=׿dG?Vћ_?O+RSx.5<W9c?,WMr E);(Wct`a:a4dr^gƹN=rUۡ:)P=!#  9@,jpsN1\7.0.Q6 u,aVU,i5j TxΘx܆:\7{5 Ul["F{`rldUk 83)SBr7xztO1|_V^g)y EIЅ׹G{jҥ ңukXOr+<ǐSáSKtX7{&Uk{ܑ³{^4뾺/;olX̰+2yoº3ԟX^$P37A$qz)4 E;2+fIt}~kbrSNwRvl!\2~5TRkHyyfm9\źraeV _iR idӐ;!XԶZ>{/;N>%$ Y^gEr< rwS}<_ݿu @'sZÕD QeQ Ϥa\qU BNC"xr)Wַ煟̓l=Grxl8=  z0bQV[FAyjΠ6{sW>~nI'?KC<Hq _%%Jin5 7Vj<٥$ J IDAT33c/f|+T佢[k hm) Ie F?{3)E}彽2᝚@ <~頍fmal} 8R0 3<^~ ڰ!9swbSs/Nݸ_a@OҎB nXI%TA3HtiV)h+a=NÒң,=Džx%ףIWr@5`>< !uGcx-qC|[xmjp w1"A"FIIx&lH(11*LښLAm~OQЦ8hk0te`2 ƷpN*OA9HdTz )8TW p.D%ZzEr"|*ğMUOg.Jd8:4ȷ?r3jzܽ>ķ슏]rW] .KM1)˽&%MQ)s$ R _ ۝ V RDu v2u+}B;&FC2dGᐬ%{!U@"&s.K4$RXp"ܗh>'h|G= !xC}fO׾j7|^~䶔_xʽXKwbi _Tk2."f߼Nѱ(+fJx9S9^G-}*Ly5iHj aH&Plp6 c*<8 L oPW' *R#`_cZl`0!u=+{?퀀gFLϠ乻ǕY+ TůmU2nGԂǑޔj{jN$̘\1 b^`r%*sJ &' s8yqJEW6$xG(e<%irزLd.4%!@ Xs}{@ρ=.J)RrI( #e'Ƚ=+w'3aF(xpC9Ÿm3~wwM05' J]qȹ&E Rq_X3Z;?W>U)E3'EdDsrXؘv ي8%F+v:Qgۤ}im, ~8wIx !{5%a<,KvR@o>hrKGlXz2֬X`I 0mPCO؄cz5`5rF[ &ݵ(N^b/^ӡYZ+ y"pS\6kk L*6d伶.* hWo8YNBpWEVy Bvq%A1֗ui mJ_x]K2ze9=1M -%p,RY|YBywțmG?}K7_ȯlp~7 ۲Z][>1+? GN$ nImcR}"šUiqgw1aMˈKfYI,^5*6>a0Cщ=? ިj6xnmA#VAE}<{0 Auz8@0nUoU.~v  zژL!ouJKgNKrϋ:F {MԿJޘŬ*@Ⰰ!O #N4DqtT0934 `C#(0bHKiiATuY[T ŇI@tDPU$C-:aV;@UlA|R⛗X`~ pAƲe6gVsd)8( ~t(+^P$yȓRWԔܐK̼h|}/zݫ`s=%_-_EZxgKa ,dn) @̷yI|X>gبi%ZnIu@C5/I-a2p:X};(X*92;;>3O\Ngv 8 7_pc6NEp 0E0t5I+%aP~5(n=Rfw%Vq4p W@0Lͪ$ᖋ9j\@@BZ:ч9A1%nUj1 ֗x)%+Fl{OI $w~ψ;V'lܩۏeUd|?8pK9]'u|Svg,xwCJ .#)دu|\aiπH'L=w?H-Or 0hd'4~sU2"LRMtXcc4P}80 w aࢋʴk_UKoG.U 㛠z3Rt ^"@e㚭?1]rUЉFS;v7J5k,B ZN,[¥  *O>Ϟ zT@ȔQ[j"0+LO y/[ӂ9CW8L4n H VS߬Ăޕ]ޒY 2$ wyu)]SR[203ɋ3y,_㵯}? x9@CUf盟>e_7"?BNT_gϣZ6ޟ /)x9Ub/A|j}vb~6tj["6ΒىEvلΞOL[rsNGa4ʢv R/_cR@vII H.0&Yz)XZ^Z| .$,-~[0廧*iC^`00z8<ۀ1SPTbfVNµ h@Rـ+ T$ cI']:KU~P>ՊiK<#R&w 9$e[ ԟBKҠ]q[1h6g!)'L/'c^ @7c<0,/Ku+$Q$@埈{{f|1g,fl<o|TɌϭ|i7ͼ9}#%g к$f`ϦJGu:DbTeV豩Anp'C"2M@ [g Ӧ|q-ܡ fUҫ3͚h2IE$h;컏#W?-O b',HLZa@> Rij"YwIgL}Y.TpkNf]Nj lV:z\i:AԳ_IF'=Ą N=ۃT4:@QB\&)w H Pp}Ԣ ZLhbOFsg:&#&@S fu _X?_ve$S{B KO~Hb9OJ=X@P fޛeU~[M@a]ƃz1i|%#U}ۗb}FN.F @5 A=@j SdLhxCEUlOٿ^MJ=^O6uxi*QmIՂXծ`ΦկCB*`u ,JKpS:B$*9+_'L=) h/5_Z_CcK&q_PMo>Fyżٽ܋,:GO_U 'NyV%?B}m93ou[t$fm8|2c8Ķ_`'W廴<|fPjsJYmt4/,_L97#0WBnFٌ!+UgUzv~uzSZ`$5ƟZ3kLcɻ܎ƀz yIdu'kXvz76< w7o( 1{ڨQ\sT .2Iס#X`!@Q.ͮ&@ħ''g1y?0[8tJQ.#, 17g:ACàc=L1}`MB$# ɽ*WKSkL{Rޕ`]#߰+?FTfj/< ڜ3R|UvSY 6~PF7;OA/ \*+Z!݈a[∯)| p5\ZyӍ7[X˞q-/.X}0i&~CLN1U> uŴoL# c-60IcAtJP =<_D2.7^kN³ t ,h~W Ze4WiAͩDX$V"Z%^3kT:օ,v+)Х Фd  {ׂգ m@7P`Zj ) @h$@_'- ,a'xv!JO P5.UmV p-@Q›H8˂.N5ǥ̚gL>֥f7o! 0àɝ msQGwTT xeJy= I=cWom8M;'$250w< ]U`&}"Jw>F| f4)٠Zv ?YL@5z] ST @v0,?hyXe(d**ZBo: XgwU'9  E&,s6}z`o؜b<(:)zTgG&EY 6%z$\*I9=_35JgV/'2[SN"AAxIC1>f}~ ]⼷1/ߑWK][=ؕjxVts4>9?^_V~RM>FhpbiԠ2hK@N=6n Tq*!F kI5 ;"ڭԫpת^1Z@\t!-9WF_j0Kǡڗ"sJ=Cxz3*YS,"9=N&پ;5kUi*F^gl9zsxzt]8):oL%5 [=RS%'Rwg_0߭'`>C23ts\ Ŷ͎|#z"kSbD,ߐWJ}!<#}Nq``ԃ>οi| G9{٧UUfXYiVtYS5* O}D_eHIS=Mz̸6Ĕ36ld[ *^㨄ahM Ge0a/p{ (7&@) {'NUMs?T54 fuJ0ˁ!O)u/zJQ7ꀇm{hTݤ: qhW\L'.o_Cb0RIUU  M/g}˙ ×ة oX[ Fc>N{5,YW)To-IɹYG{trB<ޜ P,n~ޟſfgtws m-VRpwGkk* ƈᗙl ϤREC7bv]v-xK0ۇ^ܶ?AZ]- I8j-Yã;zoGgx'3"Pe9\W Ƶ3NОjUTAZ @jU a{0C%`gsQfX%vJmK" ..Uy((ȱ( Tg(@ Fl9m*)ʸىϽ!_֐ cObOd?0#0²XP;$Φ<#׋,}];o[ԯe*,+_l8:!⋿oW/ I" mV!OH0t.i 9 `.`ȯIi9g~X-w(D ƾ(1 =α?TrIT6์YIfW{SR@$<{S˟EP a-+G89-B|fC&U;b@G{-1s[#bGN b_.V ]O}7[7˟E11kx0ږrtO_V{ͽs)ߓ^xMRYȾm]ޜ3㚁ǟTu$}sRcOJ<@P￉EzF予u@NP =6Ȉ9!]I-Tņq;<"xV3s.x=L5wHVu#HcH?4) `ql'̾&n<MMyq3h4T0ʁO5abx<&,o)`BD^Jcy+4>0 0v'%xF`N*F,9qX36:>5+p*=39 -86 13yЃ+er8LJ'EiG_ܒB+fK l Cb/x gگY+_K.-z00$32"1Oz?/}'VG^~Sb'9))WB7HA"fk/K^ߢ@[[{Rv԰Eԙ{ f;6 G|7am&9tVE^~xb:7ݮ!ج!lNsEaQcG"o)TzxNޠ2_*Hn1)x{%tJ(`VB2e=R2='AL"pk\)8)$"M.vO&*TVYq-iQf804,5P&S}G0c'Y@ʊOy{$ךJkEZ> fA`  ID^nȣuf;ty0ERVդz0 UŠVh)x( zOZ#{Q ա{QC ޑ짥,#4Xb) Gbowҏ3` |Yn>\ԑᰀ7Vrl[#o}_;k_7K?='%I(QrMo4- 4]}KRG-8z9VAĚBsHشLO{^83< NWt o\m 6 ÌZ.H!IsyG樄WTJ{^:=z+Bc|EMAVo}R헨WG`@K;0uU*gY*ljq+\#${F.R U\J gFejYz Fi3jScc 0SE hCXFʖuNPBx<ݜ1_i) XˍRyeʣi0cVa+3T619oNZtqҒ%uk>Rm/`K¿#@J/!"3ɏܒǤ.\rw14/Tao)daݹgvܟ4|Vbj6] 9O~Fi;ē_ܷ̒w3~L'aOs=$b;1"K~2}_>Pp@9@ "E+aUƺ ҌQ9T#b >-fʙ Xmvxu O^ >M}zˮ*gղub ^7;adR Q&eJkr*b.k2p*@b4 !Usϰx<i@ @hH1]NeMx˪+rUUx@`õE~*ިVپx"?5I 0j!}SLsd&PL31Lz[mx})76ůxZ$I9xtd9;G9pZCjWtK.e£ކgut {^r`䥔w\Yi2Y#pbJȹTxIx^یc~ GU 4{@ip[ph XRfD55-6PT+2PJ稴$Nx Ǩu9.7$"1- #R8HL7%Bj>ge08%݁ii .H<&e9̹_Sۯ5Eؖ@$z#:3J[=wX@,oo*9J%hWEΙGnJ>XAv޳!r!x\{9%jGGOlK4 }<ФjΙθ.wl``s_#~yx1sZ6/k;(F4 |'=.'!@֬3'$#%0G縿P\۩q{yg5V\O{B*XX: 퀁 "t^tB&= G&@>cXx/``Gl!V'0O]5rF@hl[f(%f搄{ڵ{ B"2*Pu< vTu",#hc:r#52IxtZuKM5(VO,FS*=CR杒 cFƤ4#҃xh :U"O!a'ulm f2d@rf$U[GLQ-7jUevT\NES)d@-P 6iwLu =t Jy jҍo?9cϕAcrL~]uh)G[eܳWb@$PaeR\X9XA Xn ^v@w;e1 pK+],GkEvz^g ^J) ݒC!h7'e!*"^ 2kU'9  ֞vI" q|: &-f5$ IDATb5y\X%2qgOKoQr+R\R(V<)Ma8u8܋hS/JQޙ"O5m?i=뾌ys@a]f%~w}obauwV;,@0=ozK2t7]x%|hR Z1~J6|C[TE 2,7)ԞOwOu 'p補؀LNKЋ߻,G*Y^iKu=`՜ι FzUbݔjxbxz+b7܎^Jn zGQB6`k , k@RC5-O9a  `. (H,uU瀀VlQ , f2a*SN=陃d*UI-buLd֞{9-#'BD2€<<GTVC:ANur}}F;MzctbuKهp O8 0rTʿ 5E`؇-A8!b @ZjS =y*|w}5_C_ϧ>|䑌}C֍՝Yw~{R&A:}Eҵ7Av>/$?#Ni@A@fkZ*[fJkޤXdP' <Ylx=n!nĝbarX{uh<.dD)x^2[*Z.ԓxTfR*VBf)Ϭ,NM g9A s{JnȡT!s9 ` I3sZɲdiyeY=G϶<쑭Ԓ,ٲ=eYyfShyЯך6Ϻp߷O&~,-\H ŖI4dנs _P&ж_I:T-IBF*+Pw:ee>PmEz7`yU`Vrq HD[(T~c|4 wbdlG؈Qf}R"(7ե @<J% H(uF'o=3;c=Ͼ?~gOz?'fFS]|I=.%\~'o z ޷Wa?%m6d…SP>2,;`ps;`#lEտ nF1( C,2Vjbŀ|ʴ~4Gu# y#0^@1lrrнzom:xJg鳑35x r`N u#)bBzbB(t#%!()j70"@Tx^iG+G@ \!&\{& $9|E{LΤq)эLcdZgAQZn7HQς|/e% ۂ.].z6J>n qQj@֠*q⸫EɀZ1pm@(+aiH'y!S%A\!IO3kGoV\m|R60f?I@oywywWœq O=&eUu8{\z}z%AoQʼ i1w׏lN=l1 }r^w:Х\H¥" $:H`$ppq[$䀧QqivKYpNk ;i* #WM3HKn;4-ɶn@AGeyXE3KI``e7 P7`KQ,trL_LAR)x_ ];/-\kgo2ދYɲ% HVzϐsRgm$. U0ۍ@\ :%e\FPGuQʖ3"rKˠdrrmh8p@&\:BRZ$# ^zFq[ ZIwH蝔FӢԣ$-Jfںxo|fj/$.v, Ok/Ț8phyJ+F͗q̴RzTʕJ$0M ).TK@mp]s=N7Ab7$]~٠1lO(, dtT웬lY/"3o9$~(ٌ"z, `E'8@PlЃt+ U+_#GBa jɔc,HgӒ`A Gd uȞ4==Za X% Pq3 ]cRcL@!mmtHAh KH $Bi4*{%XH{e7Zwbu'bx+y?ԯ4}͒O;?|zVb!IPkuzǤ0LJG5rϔ_D]~u+i+I=4p6@.v7AU-Ҁ5$@2:̚U xS/=2npдsA5Qwc.9(۹\j rR' yNZG}0 #NZe%7]NYt#K..A \wd1o AB^NUXm(Q*%(FeeG-\?W6 E[\yK[@rqw x+㠕 Vg nJ t>|^ohdqN_iH9!sf8g# \S"v[wp^fZJؼ v%>Ep&{F.QhUK>!nЮj`BZA^d%үEɏ9lJ-s{쿭ˀ72 招YsP !FHnߘ#$ID4p9.5fyڕy }ẜ-ڴ &!uI ʝR YdZiTX@2gO;Kd`F,M2F5ۃAb'CAoLpomN:隃<3jC]"3!"g!g@!#&=Mlr`7SPPE +)(M,Τ'UqP- m]yrd͒-k\]8 W֐%Va(#xO4:=~I@81t%v lt0e%+fUr5 d oṯ9.$mCS U3vf8<tH-ҁ0@`y-YȘ2ɥO{LmjXT x@362udI(㺸sS䷾muvܻ#+Ѷ?܂]yqvWw5iӎ@ `]R# \&NjF*dCVګ}K1* C:ك1aa`V|-yY F@  <œָ.Uo9Ajۮ!  ۋ)lѝ#kȸWAnKt!e@.g,q)A fGRZ٠~BP=eքn0b?[C\/#_ڸi -_|rkx|q$pҚFg9bKFTND'@zꃸ !Ȗrt ;'9`V(ND.EhrJTs$saFR I߬ސlҪ}!-Y,ʹ %Щ^P @+g#iE`Kfn$2r^~Ոy>W Ozǿ[lhhˀߍO}ߝWC% υ>iLd+} 3&Mvl`yNlOVOX_,_8%" 8ao0Wꡩ'd-&PIZׂ;ըKSnS5+l k}G]\* )?l5pDR`ŒB @f%HsP(zY + esLP=Bo7N[|Ζʔm{P{͔vG7&^߄ByI%=$7&I@Y?~|LK}d1.~*DNwHĘ{Cc6(rZ 6Y= Jv'-b tj4|K+9 ׎)uPЧp]uvp F|O%Ъ=^ zA>Ԩ^J{%1vNYO'Wn~=}۰ֈo3w}͢OׂY$#m'Q #Gc~]ߤnF4t~AMjRI'";--pdgl͎e(5omVu5FujkԤ .F')H*6X ?r]!6]o_"lQj}57}oADZ"2*2" ?ek%@.ɶJ$ ]Ô5<l!6m~FH7'AGy*>q%BQ'# F(+ړTgB=s[ɴMہֶb½rnqg}]ׁXj5 j[TٹlJʸbF'V-j U&AZﮖ =ghwd~`y{saϺ཯c7o/4={mz"0itX=ӿ_+_p}GIjڦJ= @"=fFwA.^8A{ ?o@WP%:)s{^>"ȳ7B eT"ZzvEhQw ƔԻ祌@νZ{跏l>H`wAq [du&+_oq~?7ux:d&ؗҮHV520Id6w[fC`#FࢱFkh1S'F6FniMb T -jYmoһ]}.q H{B*u@®tNXV\Wq.(r0t똶ݎi:pүoz;.2uFJZBrACܲ 1 Nd|{cSRbNOˀ-%v =G$_x 5 z!IWb_ZBz{%9 yʻꊿCPK066-Lvٞ_I@Fs,sR"H DgDy{*NZk׹lW!a-8vvvjJi59[\V/KF-_-+?1R2y#(O'PLK j^+x3q;kz=?{ٝ-#;v x[HD#Zop70owا_sc39$U9{".>\#:ӋW"b$0xYWLQ->'zîB4lzYeO։1 ]*G48{PJ IkB\O}P \%yPiغ$ YJ;ִlܭv*HW8_:gʇd!3Uhh}d b l% J Z=G(0na R#6KX N*ȲZ*\Σ?Ky~</oe FJJS~&K\Q[z1Ah\{,<,BO"ר؀Cd! }KR坑&O}Nւdn 7@jMμ!.r \1Tlp&W΂T|]$R-G5@ P & !tK9Mhk=RBn`e\#r̿ڿeo~ڰP'T#i,-_fo{ēvIB`<NK+Nv/A9&f6Y?&8Y%G!ᖍ*m$dU-lɍ!}:7009HQlMA Qdfq[3$yr;G$B,jvB>)uIskU nI 1{Uq%wAvbTgT2D %iF2bTr<7^VV-9-@ Hf;v(@Rtl "8exs@~ywq`?d ф^"AÖ".#.ָ8BͰ% 2q; [s؀,ކ E5,^ׂ! JdyvOIՇҪF) uVV{4) 3 <^u*_8\\Ư G &FPq}$m2Ϥ 5f$c[z@+(h^SS l | gl:䂡|ǐ<9uMwt@* N۱$mB,]6J7qJ}Fq1:ANM`U)uJF`VyJ*#j!o`3@޼mbMX~J'ڵx5> d]PW#@9z%kpyP>0g%lhi֣ojSdk3r`}Q 9g%]aOkb@ɶI5y$2L4#] W" r\r[ >kKNH# rn+c)eTWNF!%n kqF{!znǠw%B]'ڒn@ruZ1ӃNkHvͿDD5?>tqo@`5xz`>ػ[pԭjJWq0 aV$=cwƽ׌0>}(oy?^0g+)re@DžiGY+uyJߢ*y%7G@28 ټ 8 پ)w?g& ;pO bscqE, YsȚB*l1$4 4.Ad(cLL".q8G$h&H'#J'mMjL@-42ʢdQY 0aIuuH*WJ{)DF-A֮= |0_8SS7YcP#uĢ㴸lXҦo*هZtd̒ ulv^D7+SJ6b’R"m:PMNF7@% Oy /(vܬ>6VI5 SPIWZQӖ" e'#. ^W1Fq2Nvcrzs6${Ph B޳92`Z3MTcퟔԢ$(EMzlDㇾ|3_Nid'݁}Qxwr@_1?FƝ3פ, 7eEYHor/1M @ >]=yYBΩm7 <*ԸJ*%ì#5G˯u SNGDYNrnc@Ln8K xrl ^T`b9qj[|W+D> eE%@[ 2ӷ ,V{Xi&,+jl j(ӕSLtU9R&M:vTJE II>wJB!㚽szF JJ|l82d4t,J bj{-e((=]qɖ+&W]z*Rtv"\t4ighW#T% B#`ɍd\%/uƄTx&PKI1zyg7+U| 2LK]pJ m;y'l}7wGw$W-(uYǟܧ5_jQNJ'!W?;}޿u:8.$Xx\*ƍF 2GA NuzCнwL9KONrE~,$  :vV%2|t(G뮽E2i,e'Y 8&$Ga d(6#+&/tPvTCqTuz@V&]DTR"CBWWq y[;i@>ŹGwZiYa{kUs5ՎϥH m%ΕtK1kc̜ⳏ'%{JIdq{ 1*!Ā;zԖ]}) ɉ>Pb]x!mQ&:1D\5 : ;.E8YE[K1A6Wަ[ĹsݢP( RsVH@q ; K1mG2ߐ ѯ aE 퓂v^_??wFjw:t`Ҝ/,Yz' TZm/}l F,\(<2:q|pIJyHNC7jt&${:[pQA @ $f`/ O.cv$'h,Y[hklڱ7/5pdlrg9F$ ̱uh[n8UՐu)ҔR#mȬݐtD^3$x yD@ %t%18R}M^ ~U8!Ӵ S3zǕr.h"Vnosy}9 @dAvh$E-ŃA T(4d}38GPg+tH.*~sԇߕR3#/cG(,9/RjÏ߬e;,`Q/n|ߊJ `DJq]]Z[;kd 6,#gr~,-2ovȄA<f} av,?!7@gU'1;cwVPjmZ+%čځ7 j l.' DptHR9-T!uyj%_)exg,锸̤D3A12| J2!ch)  @.4G#KDsXqܯ-xNd4m> :(j+@ᔆC;0GNaDgRol: O_2 pbcHJ]ۤ D%l)^|YܜDRGr9i/UsnFCq2br Wٸ@n6Ylޙ,B~dYeoW@x!CM6"+w4Zq4 3.Onľ]Q g| +_ߔԓR8(9iΨN8u+3^5{dۏz& RgBwujWZnq@@0 nrJ-jd*[pb8sKD\r"YgrWQ;IDe:n$U $,ˆ T5JmNwAhϮ{"*ȓyrqlgǰ , 뢛YKLbBHc6׌CI9  ",o9@ ǂ. aRmҚ,uF-#=xP#wEцhy"";R>R("&;K$R& K`Pp.Ӄsoe/1;Ix= 6vR*{sɆ8,PvȗW}QM̘\u۰'wrUfEc$lc@Q(ʏdž@V-m&iϻ7ߎԮ@HV]P-/(p1!)K=,i'% ȸؕ[mЕ[ 7덽)#|O`Sve@ږǤĿ_:|`ґm H`#SZk fU@DnF0v i6Ƥ΀r0]Ȑ\3^% xT(.$R\D&*WH 5iKpoNqAg31s|k#{WqylLvhKrrWLYGە-G!Dß~S${W+dF=dZ@zŪ;*% TkRmEX,|AB'reG!Fvf}y7~DXwJCJY YF4q~#W q\f1i>ڇ<-Ce(⤭@]eϗ8~9Wl˗kM( P 1&d`=X]*vffR (M(9 Mf [Qx&Կ+iO;!EkqVW;s>S_׿_xӏHt}{= kSݟ?~,ҟzAG,O ?%= ˈ'&Q_1O!dip!(>"RW7j;k:v*i(9HCU9ehcPn \LrT'nmOrr:3Yhδ{qZxo7Ǩ//!|šnh>$~nWS2%CNYuiIOY23 8m %S aGqN@8bV  ak1U*8Lw7ώ~ƑW#ѝrtC A*χ4 d|W:toC\PRh,JX B:JR!ͫ&2UuwTnBR#;&ˮdwdS:jDZKcKm۬t)T$Y0d1luoϒS*dj mr,`uwr~4 g;iDA)RAI ց$!Vv\:kxu 8 R:+M. Js) !BH! vfw"2K.(bi)Io/oKf#6J@MoKvK>7Ir?Bv @[ -\Kd [eA4F0v`f XvTjUWB֌Od"h%Mv%.WJQiN?+yW$u]B9O+C*_ap_4/zN }sGACsɈznJ6wJ!|R˝iN"-A:wy{b}ڬfYRefrlP ]f/vJ@5"Ƭd%HG LZK߀ 6 t# x_ 9ZڒF{г@}۟_qd2~!d £ޫ|⻢aYE]:(O""R@r"q1@a9]Ȗ'~9 :0y.Z/nަ݁nmT ~:6neغ]/A3閕;GZ,WyrFυ˓n#"!/+_5N!z 6[m@c<?]2D9d{nZ7t%Y!= VɆ/!g HVfF4Za=@BLI.pF`Y@ત̌뒓}_Byψ;W~5}:o}=cg_gw^g^Lڐ$Hrs gusE=1W!:Qw@&欓^-HzkEi#y1xI 800@2o9rZ|}Uy'=MY4_cDOǴNt[< !GRyDNA6LCgdڮ<(\%%r )~wyWGA u쨜lOc IDAT.%xR]{ټ5gPg` Y$3#jԑ,_2.;跟 r=GnC}0n@\E\AYr[-PA9_V. G~%>[Ta (>|d< ?Γ;G͈<TgMO2?PD ^rs@(?b;! RB z*圿R΀ֽr[a.i`l=3-9PY@hU{g>%bx_{YO٧}f~%[HJns?08Fއ_eސp%)T*X`q^p^ؿWsRN'ƶ;N3NʸjmjQ{ قRGr݃ fzm`~Gq̤ܿ|D7"p|Z,2Ӛ-=uk< Wg׎;9-h )7,!h8}Iם (.<%KB \k^o7@v $zlY, ]X#^~qa3 |YG >5tUkW\ٕ|x[lb e /I287@mm(%^^:;w F.'\p Z9bn-Fiv!J!i4 ,i/uCŗ b>.گKj_ @.zg'50/{#3ȹ-$vVr%[nhWav#󏱃I}պ85v_T~7r)B2=Q2@H A/PިMAfI;/%E) ,Ja`YēKxZ`˷a,|tEfV8ϬK?18w_2HFyU ,Hah !IGm7E}A\3p1r9MAIZƝ g%% YT0Om$X*`Ƃ\TD zz5We'emD9Ym %{RFG"T@tOX^d_ܶa]WHn2p L{qRn~ ur:p \W!Ҋ{"^b {6e[6 p ݵ ~|Z_t`ˊs=K.1O eg2pn@^d{oN2spsy?W^K~?G93<& orw~(aܬ%+ #HY&iwO/yIz Im_ܧP?(i`G:q§P{@?殓SFОÅ:DV )W!r)zTİ$04$Ԫ[` 37UHO#?G#XU=O&"Y"SAm$3w.2 aIHNr].+ d5 \ ]oсs3(O:C#CT@:˃ `%R]S'JpuqYdEV\n;x'@Iڌ}Y$}&,&<{%9wA`O:H!m*B;: ssuI^}f{)38>Ȗ9##j  g ޵A)wY'ipʤ^{ 9WdQdP  Xc\%4Xw'0֖\l֬-]]Ret}3f&7bҳAeP%M]wK-=}08կt;E{{ꏂWo?6s#H%ݏfYV?!!^ K%̲nUȱu/"#M\^." H`$Ё:фA˯*]FQs  Pgvy C10X1h!S1h.~w 55w28#{y_q !\svp9޻ нCw@!C*lcCp.ʇq_J\-mJ ){6>5$jg=mO[A),OҵgG6vSsxirߕ ;[LAN]gSOWU5-{PV`pgq|"+Lˑwr]iˡmuyfnΉX\~ge'Y*QB\۞8݃*k?"7O;⬑?'@,%^?f J[qgT[=cRV;hSOx#/<G37'jY_oKۙS{o40kk?#b>2zjC4TyBso Q/<:;HBd^ o\_odj'm! u.Fr醃;brIG*~ 13!W S/-M\'oP>r@9!}CXc H+J.Zu i5b|ߋ~?7bdS/Ij`?&O#RϠ 8 yXyyd A>X-rғӐoMr[ [$QW8u@%LXe^8..M PVjDxl" Q߮[@X%- nC \G˸%@la^jt? Grn ^@}UWB<&(Q)O&O.];r  `$%*MbRhIvkk>] t6"k4<ĵǩ|%)r5CHywAy/?o>-?o3$A+MQAI&U 8yu>jJJ G п<(F+ρ885|-y[ѨFd7`(?n^ʹ FTu`L\@3ZuTզ+#(E?& :GZ.+0Uϵ*!iF)o-1@7?{y`,1>?W;KN`jiH{@ȷGr=[~d `+;P>y Y3  Gv}ҎYF>z@bE $`mNfYgvEugwex'$|y S^4< }΁tQs""TyHB<ΗM;LM- wP q< /mI!F?WQ.IV2. X!#x `..e}@vQ#mڥMnn"ꑈ9jA\cspQx;X ˸.fޯ>/oWr {"1dN?'L/ ,@*HR@P -J؜J5w9)sړG_/=ul$ `+8ɑQ@ \p}=2_LM$Ei`:Mu/JEC #3ߗ /a=vn>s<, '!˾`HgPn<#3׶F\(iY.Pr-e$fD*BR; D=qk?Hw>y7 佁B+rʆw@R:)g\ָ[x5 l/{PDr%S*pφH CQyeϵ .?eք\D(xA/ x!~8%j#Jm0R 8;$M7AqCH``7zo%0˒v% $Ro5P߬Ҕ7*_ĕ%)K-eݾ)U( WBvdRkL^dٓtIW\pB~Aa ;TA\NٔL,8   ?@ iȆC9_=~Yq h%䠮xItFkV¾db+<W.nG=_ApspvP#̕[!S88\qј_ aR0?/4~ 7K۲OrQHI#{p w+ _m갓@c^BrtgdVZJ+r.s*U;GRYpm'7 Ra(x_QN@!ӠE(@vNbFj rNļ]FPϡژC5M#8%~^֨8tZ%?LG؃_#|vO{҆~̧hQ{w#go(EQF#tB53*jyT>Eh&kadtc1/Q~ժ&$p ,[xIܱHiRUfMϮD'hd/*9xuzuovN N4^Nx.ܗ#OTc]JʭsTb:6~l ;$^!* A9'=O!}`*㐐kz Y^,ƿN\KCpBedNkzDo!ȪyT`,ʮK/p;`5.+9EXT[ۆmrt]J4tN jI%%TG(,57?znO-Ҁ6wW+ T} fPOhj@֬*&oM_M,RAd3'boy\F8=£?'y.i\'ߦ'?/7<_I-9H~98IE"x3:N:420INLE2 ~ƿcJ$9IuVcUIʎ G&̫t^;?c$kJB1َ;OV '}!V@EJ#߳%7/κ$3FN "wA4N^gJuFaPk z~oD قB| /F6>:Ez[z>?P9d^Ͻ>W嚹f:0Ĩ3w'GO/vouC#O@:c⠧I:1%na%ԪUgVw)(՚{ Kl Yoݧtxp\9:&Mᅨ>baHiLl `ރy:%@Q"XU:9I >6`{ӋOP׏X;{lp_ؙJ}*/ `+Z<1 ?8*mj1T]E4R_D)m`g^*_g}i\65D* <)+8Iw9+CNҤh'[uH`Jczca%48Վ=Gf葤ވ#W cO*8ЛDZ |5"׀a(_-Cs'\1X"F253F&Db@4q1rߖn O}C IDAT>w? |^)ֆ,A`{ Jm_"~H`y-?D ೅|>υx Cl|O!θK[ BXqJ2N#G y?z}&uz\}Ȑ {G0nļOBF]VMG˰R\$;iuR݁JI'txU]gxkqTHe  [" }wC1} 8u֤4PM8@NH[%GN_Vo ]  E=so^`ϭԗa=T*B{Ej"U}kVEY$֤@7.i ǻ @jT'H*Hd-&ZuF& {[7LI@ ,i}5>tHw_3` HI8H(P#*f\}& )*ExF?R~L ]'=ъtsw"^)\--|x+Y,e O8ZPIÏ;;wu!Ij\ſ-C4k88|to nIĝY~ʔ{YN:1taPC %nz MN euLH+4BU2A2 e^A^RM ˡ16г˧{(@GPSzPȠ=L=j&u2jk" x}pt=ZQ*2wxn~R% K^q:lq*vDڌI^(%-7E?C'4v:!zie $i;%]LePGZn-ގcG^*@ӧpa[w L?J|IuYY01Mj5(@"t`PMPN(8s`*-X$%@5o2 L d5xL ڑ8}jIIaG#ѧH%†qmw Noh' ܆z2HM5gU)UY ZF5ry%(B)*1Us)R;Y­p5WS $baԂA23x7ѵ\\EO*S}*W㔫D;Ix-^By#*RH4BBT't%mHIC;H{RQH8(x4KGrL]B[P>w]}ɼ$Z(n54a748m=N~Yx}^,O ыq[D)3JtnA0BMhАhg' 5e6$xNI1h9ϭ޼\*NDA[jjT!>6r4p4rk6d3+W(x(!؂["d53uN?QG@yR'}hƑ!EeXLYZJDG5 PjsNQ? <aGvۧ 6Mz_{޷~G'@mcTu^´։q~_Z)7QG CEtap7Y#EjR @N0$< x!Rt !6R_Ao! hrhOe˰\#K Y>U:Av2X [XX"{k8%VeS=퐸*#w$7d9"[FA4[bm1Jm424y'8sηL2ڥjQZ!z bQ)ylT'i7țPDRQl&04#|M=_#ME;89*]&`ǚ!/VVyWxERUьKEʕ>KvBQ#x%SaxC"ո,ilcۀC?r(e(}9َz36f@;6k}ja:k Ymi`+ BQpF#P]͏rI(T5R`o'oZI7]@@zE_-]N"z@ E- ߿S_D>J ׊IiU'q;_S+AAb+T($iqzT󏫤irt3kK9/Yۧ:Xv8skR>7S r0k08o&Bx%nU-{̒/,5"c&>Q [_ uVL5g|t4n呌=}0 ?DHp7WtQVo~-AzX]*5Ne',IT-J3( 0A0p^PIwiyeTzJJ5*Ɲ]* ry>cJa*i~Q/Sd/?Wb :i|z0Wz|Xe4͗"a^޶b <:&w ݃l:"Z^R'um VuOjxOI/?_ @賾b9E]pK\ "YMYW* ftK*tmfqKrF/YAD5D8?MR]85&qShw‰\IRB_'$JJy][%Gչz{4DiQCE'=Z;gڛNzRs֙T]|$ ,*_dNA@8GF^+ya8#:Og8h e$ِHށy-'s]q'E?I@ w bx-iAcHN")%xK11s͐QN}^N/$Yf*;."H]RUh# eMdiC}\?93d۞) z3 H`RQ:IդU Yp!hY˼as|e뛛W(PmCSAkhu%-صPU* 0yv]wp\ )֟䭋9Irēk!y *Hj/ӈz*WWAO+Cڃ^K{h (-y]*Z,$qEqƙ3 N3"PIdhhza InҜ"MKGݣBje^Im(gd wFۄ#ZGɘU삆ࣄ C4Âk3H };,Q{:I+V9iGhG' 3.K@.(=)CWeM,*WnPF="|"(Ka] `#vas$ z=-AcL@pj _u%_@~ ͗iS0$hHHyZăvYrV ZY$4/PDۅ$Y /9GڳZ-5Qj<"'ϥ\ Qw/?*q[HKzUaWڧoJvJ]4vD\MٖS_—;wBDzePzJ~t&g%S34qDXTstAQa>uݭ䤏.aUzwz6PSSbJ k蓘wJRjnZT(ɓaUX#SmJ \:捩VuF%pO&pH = i%( #qT!lېm˧ >$cuiD(JfL$$;,9z fB猤穙/|1OVU x*U宸*wTEաM%:#i\-((s 3hD_+m'"j ]Qq[XQT._=ԻՈC?,PEBmux ʑJnNUoJ>~9#ԨJawHty6l^[$?r^G.eP}Rm;s4=fX]$nU"' =<tMqU^jJU{>EmV^hXJ*7@N,EggբRV'Iշ`eu[5O 7IVpeg6D/.V&D#X{ TjzIm:zje>B/1VܻoܝL PRZ8 wF!IyQwmuf‹5W|A^(ܷQ,<U8[=DVoB/`bGIKuDFZIt#ycƶK&5'Iۯju)0 i- BkY9BrII]Fg )QT.hT 0wjmݝ'}F /@+DFNN@ȑSzJ7fpg4n.vLC.={e]@@[kB'R[ʅqr@~T!k`5'8pNA&2 ܊~Ipj)JBJs*Yw?y#_‡჈T[W"i4JZFALJ @69ŋчѪOʘC1|J@]Ձ[ ?qWibtm!0+[hRRƒ8Y QHK{qNLjbn3KCa e &U`H8%*KN*{@cfPO#hvMi-Q4i4~ 4/h~( 8ZoUTϝB"`TEUr$c GQ$茐&hd4פJ'ٟ_/`1^x%kFp] Gy;1KH A㋹$P왤t!k<Fh#!({d!}{]r46xG8 CZIr ?S$Aؚ IrPxQJMڬ*ì!f1$8&ՆܲnkJ?ᣃ<5E8Ű*6k=k&jn IDAT( W6?Omm ޽Kz`GcAoBң?ji`]-Ĕj+I7_HlJu}{k:1`МB7&J-4F>ʼnr^㼬P &UQIyYRP',Oie*&hCOA'D$H{ fB- W*Ts&zvATxsҧ\ݔ $P~44-M/׃핒a1Rr e/[[dKɕz@^ Dxq͘Ů$A y/WM X`*񙐔:}*)IBH8E߫+ 16G?"Zф0 ?ٌgm Ez(ON;zO?AEvFт.g ȸ#Q.:Z"<8%UtQDa *yL㔖8hqNOXjU8YԿGD ?c b@R,J>.{QIY. 퇭*kuoμvO>5z;鷾no߃-eK~p ,13"fΪ uݤY#fd=`֢ u fƘZܩNU-0D-xjTg$#&|p\UA#e=FNVuomk" r.vrεhY[;謺{dAֱbhC; n,4|#{?VRTA's꭯Fj%T\C0|QN(`cW)CK } ͨ#0VP`$dE^)WOXdEl" d kv+r  WOj%ye)|d ѣҁFjI~*,AD&E'R;\lF=506GǝA\Zk-#Hx>u7)[oJ%؍zePyI<(J3uӃEyQ|oQ{?]~9/E @^x >=wnjmyZb%Fw GjڡQ$"mywA톩_NA2oLa3[ 3% ݤ]4Rȃ a{{ ,<$|f6(F +,O~b$Ix*`DpnטCj0'@++j\Ccp *C9nއUh@ ?ؙ- k VX޼ 2}h _‹sPOKv ߎ)^:C ao7M5i5JuoJ" %2P_ A&}ză4Sdj5 J? m^J~RY'8!aTJ)3K:(XP>\0Wkl w.Ct6 5uJzZ4QOXvvppM0$^  Q]HR9Ru <?S"ix6gٺY%0xፈ_dQ|d rHi  FYʀ3i O)֜1X2nJ!WOkי=o h^uX9z hhnAf 䰼,i~YAC&,4}(E@A)'idTfMu|KYmT B|*P( a#IYEZ#Ղ-)f{ Mu<qmZ~~- .|0^jO}'`E/!iPcoEcu8zemIF/>k:2Lim*YUE6?_C /Dێjʀa!B􊧨/p?gV$8tP~iYQrUnh̥8˭H<3 Zd:Z(R*A 2H_MzBi{g1 />$  122RvTZ{I zjzgS}?bcdg|#/*е`nBx|>o]dd#A$eг43R [J ˫FL5,Gxn!lwҠӈ'Ҩay24@>w3B j;Phh+[ w!emA9iO-,I~@wt8T11h^4QWk} c@0K We[Po.]u*g`E{K8 qHM@h{9䛿_y;uؑPI&uSS`P[ yn|'=[,m{hMR]' UN9~jʱϓ+tZRӫ !CHlɴ̴$_Ć;WIX6}dOK/'ȃS4d Gi*TRaHF~izjTy#%ߏTn%:&qOkK&U$~,A]ZRK\BJU8sJUҋ5Y #m[ ?W* 3ê[+f/Mna\:HRU| ԦJPM@?nC]_E[LO_&k#d*eNU'j h 槷Hw12IUB Fg16öFXB%^_-= 2A༻Do\eoѺ֠S ژ$[!,ZD5XZw"_ > 9/_%Aeݟ?< q<* tw_8oM~?o? C]ůCQ蠊hj/˞GiUj؏ lM{Hwآ`nL]AZE9?S i nzf@R2jR7M[E^:&U4{ݹ0`i%{RPHaprwzW@ Ji2<$% JzRNA#KCuYg6A :);AH߱ZO)FL ;%(bU ?EӾdi\3!s~ʙMF_6ǧe׽7&7ЧM}RE*yjYQU\hPHCn'iS(Qݭhm!\E )"RH2"O&`ӃuR PGTFjYH4nc9.{-K۲8(QK#Z;|h!4DjITs1S)% 'A/Qynw5M#s)y1anF j5I5 ) $!*[d󔛓:ONifP' ܎x>!=.͗`w7#OPϣ@y)N~RK( F(F(-"w+`i>ZZ@vMX7yszT .zF$JEҒwzZC5rqqbyd ӜX\Ęp QVI-ը# A"ӊ K[*wU.BqKzp-_Goh&mBT Hjo^ʰ۠?*1Ui']qlwqi+H*Pd?ZSpDH+QAI~I'hJ~rIj i1G'~q1ϋno;NJ9o)2J2UAIՔD6(,B]7[IϿFmkӪ6^_༬.TR<5{!s6(QcM6&m#Ѝy+eN4,GQb#"%׆YM\dC0GLWy-)EG/yVſ]&]}|SWW8ȧp,ktZXEZ(|+0K^`?W]OPO;wO/{NK^AI*B{QXCYd<1J5U^md{xR%أ7bIt`'&}A4xGfQ, 坆FcY`Q?j!Ҽ|'`x `PKHu44ҧ<^2َ2ݣ4Qxu5NqtSX1 鍎; ш"XgTCJV|zi~$N-DߡIs(Pg8V5*9}ϔb6Qm N \pIzn4F)pJ RZ?YM0{#P,n%c1U: $#9:'UC*W vZ-IG=px?G< 8y!@XFhO`Dz8>KJÿ a8)JRFQϋz;6KMIRE@(%Dvy5j[Q,U߂-%?􍿱]o}҆~$#)ڔצxɞwC?o>|)PՁU?,/)A$BwQc Z G#vh;U}ҹ6"t;AYwW&P#aL_GTp ÷>4< _+MP||盀&A$^ ^ty>J6P=|z"()mL'yg\3 @!"/ugD]_mD!]&(~)'8ߢ6qI)2)XV&k4)ҀvzbGp]=EK-݂.~CBɊxU3-͜$8 "/uN7 qLVR>V\APz@? F(Ŷq?j-.NK !1>U:"[5Yk꺛ySE0A]C;?QCdVE8B?@ɱW͔+s<z'87j>R Ε0Vm uR(v!akpo ^7K} 1lwH wqzbQ~e?_S6a!x4cSF2sR3e+}(yNU*rpaZ--ڌj ]w/}:0퓾X#X&J1& !i'\S@ "[0g `]-ކQa~l}S7Ooߵ'mGyvE;s{߷~SY`EA4ÇPچz^ӌ9`VE^K_dM`N@h!z7b([ po!, L0ymvč(6 l$دO5m+^ _WPi<CU՟VNfsRTr${-@'/MCa8MkJCPziҝ4Q jef9R¶V@Ym8rVK*~ yCΟ7ޥ IDATy}Pߓ6#;SXq{K?]_YH#H6PKΛgMbu2`4kZ^VL NUUeh]*n"Z"H4:فORasЁr)E_햶Thh"h'krI"J;=g78+C(/-"J߷,``.J1yg%lpC"dk|Eϸ ^PL!? ɞTeIIH,' NJ<i.A/F`4>g̦ЙF,^_ ls ^.S7Ÿ/έ[/vRB mbkfTNl%MK?~K*T3@R4~) rp/^N C]2; 5YPaoCM;GWl,-E^קL8U@0N ?kMϞGw`3 mGIa"+`_MWW[>ΟG;uc7??3??*FFϢZ)ک1dMFR#P:L h&3Za$`*FGL@@AemZm],UTShd!}/` mAy&E?-E?iRFG˒r90L;dniAG܏*J J(- |j{,{n! v6VUP!g=edb1ܒ.< ˈ/LC 3Kb0RNaDrfH4J J!zEnJY=s.i,SkkajjBmm'RS:⁻<ҀTXne()2'E8J+@iG%<jVkU˿{x]DMJ>'N13Næ)#gTUNiR}Wb;jL4 Ld5̝T.Mxhn4ICֆ0n1c99vn@]p . :~|g︻\|*Wq:)YhXZ~W{[0J@ yݨ n"j 0$%xm'qNڌF:F@FANoA.P1IFvzB<4t SH!)~GZDDy%m a_]=]Zi (ST`m)nqHk aVza#m#4Y<=9N ৔<+C[Xfn_[Gr%LSHSJ`K9%!qCQH_⡷ /j1z*!w(6HF#5Pnd؅hGb{P@7Λ&5U DqWc'Mz*K{5idl3_;6Qo6$mj<fP]Aз2療^QCS֤WD_F4F=-ہ1!X1f9:!-alg<]w n2Y R£"D91ɉ~|qUp'?KZ?$Y8敖(A@’suzjp1vI`)%Q#vh2hנ}KFwe |4|. RϏ|MO{sOk`/ܛy޳iF/?ed5 : :Χq3wHFJ݄>y7GGUGA7(Q;y6z&mpYEJp]pFUo{;m~;Я|֑Y}Ez(YuHEoԖޘ!pLnho Y={ 0C H#`NX(PԸ;T ch9?E@SߕZ4~ ts qYw@)xJW"\B]')xLҮsuSɊT_^: U1TH{oMcce=$=3>9wWwuUussь@&0ؤߘ``c! lŰDf<}=Ku{ }sj&fTjq/4a^. f9sTɍę7IO  S 6$SœHh]!/$f٫Ī~[>T?lhX#~7t߫wL`?Y,N_k;n,Pu.<q؋su 0Hb'I" ØiwKhS/79@'OzL# DU™uČy^)2Pk;6d,|S0^BVL@ĕ8NO1Ք.j7(0I IlQ@}໥~QJ@*M"O\W%0m#ımzYq,&ef028msִDA0M? E1ymսSOK 7_ؓ'8 Wqs=<nXM,K*@F jHisBzcj4b1K/)1oM> ͪs.gag1! rO&AhAJ R3 $ [ C+DX`EF&5DNV`0'sT.2_R,7&`DK= -ř=zOגu|=0?S~3h rBF5pZe]|~XUo}b?#VW)4Wwg:׷sE\ qWj_̗z·>~Ӫ~eԤߒx޺tV\.6m# \jcZz%0^.ʱ~!9b1&\Ѣ.`(5`yR0z^T1f\g-5Z r֨SF$>u{eF.fѵqWW)gE<fQrO= P-W`/ WK%)yy`{]=]1>xGԃѰ6;j:n0=qFεėJI/oe &Y)l٢(/3e+H^v[^d>@cQ_-̚] Rm7Õ Pi0s0+T1jT px:u0밎a`m7tCtKwD`+`+%ge}F;yWHhq1dF)` qH`O2Bs hRपu) 헒RTtQK^&{ŮMOoڽ_z68oWxJs?VF`W+|'~Y+VUq6 6oK4oCAaq} @ _Q ԃ6cݹ]%wLW\B<2 zvwI P X6a 0J0i؅83jaX.)uF ]:kP. @z`ķ *i=ۉ @@?@`P` \ dhmdv9[)<r'cc1?^J J^X 9 n-(;K5`uML 4>x~A0h4yT<#׊]vZ>(v7c? >M{9w>k?PJ>mOBO>J? 7hTP|;.iUjF+Q@sp 0 ,-Ƥ%cWv١V:&ÖjG nb6waXJm|PN, b?< g .hK:tJ;t PL_+ uQ]hsY\.Εrq9Am@e/wފsc>J% E؁PCk%7gWJ8r06\!"wQ`>8bE1.lRЀr_qWi2a#XnT!+gM^,WO/l?N@L'<\tmV} {?71-< vbr ΋o 3RXrNQ4r@ize|Co3F$ؿLސZuPQ|E `/{bED#׾dNi_^1Z؄/qD9_NqOʆ5{o M?ߵc܃➜\?e=r99]Ͽ*8OF;YMiԼ]wKQ%Gv$\L`GCۊu[Mq cYX`;6Je7nM8gʘvLERZCRBL 76zרB)Tt08@4 ,>5)Itq%r_ו[ڢ vvۄNq,g (jaݏAMðw:cm&K|n\  ɴ&JcS צ-sd7<.=6'.HAY-*rq)@b869 f@|HeҨPXVqͮF0G1R,/y?5~z~mYjP=~xn[Q,x(a4?Wg:Mߔ֤&pBܾ&EcD^9juieMSəGH?H/OfLU1f1%?-pXᢣSR06TJM즏o|Ú\ɃrK3ǩyA<r!MT{lNٕ{\*J6Pc8 farU9d6Q^7xqX̊IJ?&kmx#Vg xx g| @" 2A7?{s pg_%^onSؑzs$c. @~F0@NjҘ7t+LL2y@mG߆aHAFj+Uc!*:%`v}AV#L/-036/փ 5LʦoWBOy7INgR@׼5[Sg"iVeր׶xw8pr>H@kƹ@~xބO IoX >߇݈ǹkqu5 kr4;_b&hF.)<^Ĵs*I֎ -`l5]#w3 ^ #Yzali]?AӠ}S{GeߘI^`޳G+^G uK@]ҟuz| Pid]Qw4bqYm06.0G%Z؃dשky/egrlUc>v肑V{5=j^ߘK lIP iː1/a?Hpqs~Bե poDzpM ;'?-/8w }J0ЍPgB {OwK"&ƽV@H)3<~9CO}ʳfӧnUEE,>mj[ 6` 6q"+;l IDATj`q98pC64Y7 'q4T 1 $0HWŕ&6#ZIM5ٳ aMOl4hk:kC5)X @. T1]05jIQVӓl hEF׹E_w9F]&K1jQFZʼ Em= ٣ GT,JH%eӛdL`}l0uoJTq@3Yoˆ3oQM,g6mZқF؍A."{YEI9^Kn)q?/7HؖSFy=[cN0πf1էgd88?%i[ڑ/Y1k~KOJ0烃_5{۝ܟ*nrÑ wR'NxOhO}_ Īb Y1iD|1ЭP^k\LVd j2:P}o /ZBh\Ä%NvL!/ze8&΄3빭X. c On N0I~tG4Ĩ JܟȎ1; $2_ CkA삱faLZ10#߸6$moHWpBZ4 S|=1rP%׃ۓC0(nκ lFHCK `hcDZU㸪\:.;FѮDa4LMC>zM;2Wa-y79Zpի;{vE&8R JWxXY2ߐF57ay@'a8c'1Ι8ǽ0U4g!՘LL'q'dN/`I0ʢWz\رߴ{&8d`Wp?'8D=_a/&M>xG?(fI(ZTtT:WqS%s@֌>mw@  ?A PG6^#[wu/-M *BK1_D 2˭67NS0QRUZ`@x6:u qAd۬Yl#n2C6P阎Nxϔu F6/Zܐค͔|,*Xr) e.@XjcЃ6UeG~^Ӆk5k51׭M:®-񏹙(F\k~?X}TɧFa2@B ??b/&|F $"L˴bTJ*iM]10W('PXtUOp43`p:x Ry+`RCVbTU#7C74I9W۞//w݃w^ NB#OAnu'vkRVt^j B`k;ν]JcY?`o$#G;0Xr}%GO' 0A[ 5u jຄ]TjX+?H0`+φggީ׿6Yw@hӽuК~[ƿ #ߤ,1UU iE#") % zȺ x-?;T}7+0}q qd`xmƥ&00/t2 م2KGe@4TSg 1Axvi06/!0b\_PocQQn1M2Գ07Ή58$?+ix&}yCI)Eha;1]߭ WA 6@oc  ,oIP(4&*M|z/jrOw#$ o{`;0|V$yl\5w׀y4#o H`G*P.+}cCЊD@#=}섏YLx9 `[;p"*9%̭E0Y 0 #֤)ex`_z{ɧn}}̹Kjg100vzo/>k|UbU\ 8+`yo`CY`S5c%Л Lm8~Ms>fM75B8ƔXiW1v<8(ZiA3x=kfc*z5"uZSiZK2?OAk*ojA¸0r]%O=(rdFX}zV3{z} LIe`Ax[X@0~+S~H>\ 5*Pé,!Ĝ 52u9)uGt~KjmL򏂣_5Rnlz1ȯye$ǞxN?}Nq-).$5`* b om3svKhCl B!^$|]Ǡ`XX(MI&O䙆18KXaMUwV nqYLݵrveu-}uj|3ߔ+@Xf8r XPJ!,T1QGQ5…Ob̊3#~߄؈A9k@"^th4` KW}$, KNEbp FA ܩm'WdC齘/{1w1VDIz1sD٨֚Z ?$UU'Ps*lc~Zn054Gޓ;p֞n 44vEƧmvd|Yn1+^+yפ4P/0oK%Ri<6b+=4ra>2xYLuq E'1q2/c(c3  r=J WVOy;-d`stm@urы`ϷqS`TtZ{RV +XFX7I[5,τ+!FxGAPߒ}bg$7 J6dDPä6{lblw8@:ZU7=?\pN9L5N6sdݔ:4MTF\(# l53)fd6t`0 ,7pnsTFp_5CY8<=?άյe ?1IT;e i,QTT|Aҗ Y΢Gß32?Y{Xf`K"wykCbT0[v X[*9.E1iۖX޺$Br ZШ  1ML~9cr0P]. t0@ޢ73'! (`<a b́lc8,tWT ѩ0šAxJ+r I\.Y yx WsX΢-LL&'1yx` Nx\?^))K5bn-gt̓:Q-9q5vdgyt[/\w; w橔@kq[pq.U! $MW=!G6Kf'ō`D×Z4a$ q߶_w5Q!_҅,Es ,L ʮYZb_/8?{6?矽X@؂gBpo=֎}&S7UR)j'ѼU-lXb;qIÒr@}#Z%E9w&q1i, *L&F&A~óؠB 3#wLRO8ee4 V ^4*"G܍sy]/*aw?涛a큷h >mw&?)ff L1 u\!1u|@ecw D[Q&BEb9Sr1}q~8gvYny(kd 0$kaFJa;f2;.'̸3oy4ˈ{U6Y2_fnjO שMwׇk 30~*OOa1z`cqտ\sb+!}7>曹wEfrr^`i;[[yKݞ3g셏?8SA$>](%פTԇ![XpIBlLInX@+ݸiLQ" \c<Ў&GMK"dH1Ac ,%u0[NqQ cyVUTIš1H8r@lWa VY[;+l3R9Uz z Nhlڈ2O#Jpy J@Z P ޔ%ՈYc;"e\5Z@_Ϯg_ I=2gՃs">)`-8aA 18hэp&!F8 ]{;I&G78i;[%[(01#@Y;ez{/XEIOȔ.ϤA?lrH2c<3dµX."MU[4!]!As u Jor]ANf/p>`058FEƒI>= / ~19wVF" 㸋bB1)7e5Z bMBL30ݓz2g|(h5$ yiJ]0SW$T 1-fS~h/ ;4$3Ǒz'^ ]ؙ;x9w~J>]S7Gj|5oWtK~Oj֤d/K %@l|nr_hB9ڝf+^~fR&B09a oF\ P䛐 h3C2.k>LPe68-O`OyPI curM2,i> jLz /n-"]w;e#|Vš8bž?-q\x=)ٽa@nJ w` TZQV8R`(ø쩑sn6~4iqY si8c+f#SKV-x|= p:9匏FEc:EHyg=R\cJ"04p_Gt` Ϧ2>vʨ:}3I?[Յ6"_Rş׉V 3oZ{䳁׿^??#To}8,̍/'>{}O~~Y+VŬ} XWv7#+/3x&{#~&AaBi1Mb A`E30o?'# LbMipe`@Me؍wlQ h"8= `}D%D#6dG=Bf#hf`))r wR P5RcI|)0 pٗݺzA5)V8/%p|.0nV!&W ߱;尕IqO΀8?gw̃c8*b֋qs;x ,5%:MˌѧG54~̧*b;jVT/7gK{wtNY< q_[.Wƞ|,wbVV*ۥ,n 4(#8' {Fzp#ffdVvS)vvڀmV neWdva[1ެ(DB*|CRKkQJsңMA0c̽i;{ 0Qg80U^`s]%-",jpQXM\m*t 7Y8ʉ9Ư7QnuiU;){mmf}q+ON2fߘ0 .lJ9<y%(CJW!Q=l{N]///'eV N&^{s ~ӬXկP˥v?"mi͚XS2ʢ 0q0βd ^`_vSKK* kiV 6g2W ǩT#g hFӑ-'uFeify8㘨 | $F#a5pݡ.)U#{*ӰTjU`ySՒ.ɅkQ iHpϗ!$jnA`v#{yџs=` +(b1ѥ #0!}(.C1-\DUwD.MD.3- Iw;a@xc;Pl| IDATe$e 727 F#fRoA*C{1ǎJME.*ewHQ]bW+Fo?L^߷kxۯLZ?"7<%/*=|ܘ}[C=L}3>pӨU+^ mKHnIAk\6&ؼmH 8cC.tu̍A8yӍFͿ" }Ҕ\…gT]bTF?a~|*0WMު{q 0r k[tlso5k_Nğ? xR)jt j !c1l'1yNLBi$G[~:e5ihڮq$wf'`\`9;c=AEA"ِ)=xH_JԦioO9 C9 #9ayXܡa~Ƕf{1VpLT*8!q߀DA}[x<:Ǫ`AɭhT h5k)"-kQʛNI#]0[伅a ~YNYM8f9s:[ ξ2*?iL(vo+ ?zwܣ.y )t$}OatˌK*g3`Li;6pf\S-e39(-T0Um>l^o!;߾'C921x9Rsa(4 00 v֠]O iD3Vupvȗ:΋`6#bcxw5BWXZr1Vx_Rot5 Fہoc>B˶,:f3F`NJC`;E DT|y@p%xU q-NZQ'٠/V`l0m>ϼ U AWn߆{ߋO 0H4"Q*P7cٜv}M#7ǿ77aSw,}(Ÿ;E~`ŸrUN&^?xpI_tT]1˹0$ZЂCSj0~c@:n| ^7S0pc2-h6u˩5+v@}L?玁LK%k R GX+1Fcø c4i-E!Ei?Uu=e٣.Ҟy$;`HN.`5|ft= 6Ɨ`DC̊=XK3Xr)X/Mr% aa|8KUe<_em`3~ww쳣2sp]}}HfEw{TAٰ3rE#@Y; {K{ 3U>ephi?FyƄ?y/8(JY KKub}y_~;oozfNn:TyR9%=]ozh?o[/?cԽf,.(-/y{U5 Cxn9*I]I<^zCP7 +/v`8Ddۏʮi#% L6vٳ3K:(=WxO#[({5#fGoZ [/|ʿj }X +22e?7v|wKAq)8,y .x*MaR .y+#:ULtR-!qj2dq@`L` 1|cu7bq[gj)&0?(M)OHo\LL<Cʎ%kNè+^$&k^"Mqln2xO#>#6P 2 >is=_&{J1 dO9]#0Nsg8i&ZZ,uO\ӨOhS 1σI\3 W=d),)裲ȪͰ׮׎ *ROasa1&l~w px,Tb=?C9uM?12KM64J'bG# ߑJ0f]o?炽Cp_ ,w<)?ne9-{g #Ȩ}MW,"E |P4tVU-V@ՠiZz PĽ&<&9c & s`hKhn3XD%eL>M3B|t^7⢁8wIË,`\\ĸ 8*Ɯd NYiOd( GR᪑bW sKpOﮑ`n#~$LA(sK`}4)J9= 8ۣmZ{5hmS[s;Ft, 0Ϳ~j|ߍ`[.9 ]cR*WTtb^Vb)!š&& iiѧ& #pJ7펨&ƤmƤ.I=+ B)mN/8YTWRVȇT.̬Biڶl@#w`Fj:r͌.0)b\W@Rِ15K C6ǹL.ݲd "@p L{UtS(u:49vwI?F,*L ]32&\BsMU50nnU{y_\*աXQ~)XzSfP몗WIZ!|4}J[˲M:~JlaSV+PFO7Sן D͠u sYZL6kRQ43iIai?SYoyego0k<ӡI @ץ-ƿq ))$ewUyk"nZGxtol+m~B'A(SS={Zs_яh_B+ (~NT6EC+kV2#&F7d]o&=00&^ 8C+3]6Z1 W³5EF7?cxO>3 ٱ䡢M HcQ̛ >wF6)TXal!P[Qv\ |yu7{`700Mj=BY4eW9ϮY]nUaU0GSeK5QU)-6Ϗ!ؕAh7 #&{zf1vAEIa.tJ\.u;R({,.y? +b7V~/8կs+b9/^?ǭ]+WJ9j[=j@; ͂__⢳#iDB #8-4aiFزn oa# ckIQj:Y;Le'`2)2/8z{N*9˜#.6[wZLπX.j.%A<f*;"kZ>MN܊И›Жڃ?iSGnMܧq &#8ZFTљ ~NRpݘ֝u`C6nB{M ׁt-K4M s贔^|ص]s⣁z+hN.S|8 Qb;j>}Ϊ5I *7Eؘ%͡5&^Y1/C1T(ۆ P t+H49ԃ O]!w =L5#`#NB;Jq|N3>їTZU~9X-bʨtX7Ϝ~kFzr -) U6^!aqΊ'xI|E '$߿&Ea)inwRoO5yl׌;w˄)[19^5)X=*8Yc a(@wXWĺLfbJ ~ sfVs%p^\8B {JFp 2PeIG7nImc#Yo׼]b f5?v^{ɮh'XO {<%9};'?Ǿi]oصoWHqRQzTzڇYdQ[j beTH1렠۠MgfLNh_[@l;,i|( |%^ ܾd"Mׇ ݍv TKKbg$UL` 0*kPRtٓ8Y BւxA].9.޲b^") R*ߴ4$nc?<2iY:ϴJpVPtڂ,N1\GR ڲ3d捰3$ i0dݞ5,8>+c9s0y:8!cAxМ5oo.ؔƒp TSvɯZPwfh%=ox.6 4(SpA :{;~̺߼% IDATԗKqK祮Hkax>XhCw b1K 5"i# ?&gb'k[ڥƑbcYPzLFx2P|߅䵠q+דx/6jy0-S` U9E`lV1@`0n| i# hW" qc˶$PA;,Iqt< bq0Ž~E8IN`wڈy84AZ [z8̳[igpQO }dFd 3{cH210>EIn zФ >S2ąyyU&XSxRaW. V+vݛmm]ؙ{QoD~Ne[ҕ9yʜw_~h?M~ή{PT7X|pP wnwu]YvH979I`s-J`*P(*ʙ,ޱ==8[m3#[9s_jfvkgֲnFs޻"AŦQׄ9y "^=(pރ\7lY^[D|B5d[.E\^+DAHT2PyzdQS+l/ dEMiG(5,A@J/}d`¥xӑ)ʹZn "ſ ̳)`=BƝզ(CtR1ó:ؤj7(¹P@R4lmxV3f:}s tH (%!:.CW@X]2AOebӎj؜&dvS3uY 4S=Pd<eoLPJ.&}c^zZ;ƊWr[}Z~5uwiiO{-zTAUg.3_yZWd)ykfA&Q6,@u\dbK?$bXzOP~x^qdRA@=7 d^`TH܏~?S[\ު $" $2i  CІ# RC]uSYI [@9kv^@jU'bZC&|V7Mkɠ̀P j`b5~$8If$Yds&g][m-d=忘j^I3ۖQꃭ@bpmK_Ԫ~P-/匯?iIi:[)H h 4nd!!+Avj2wP шR$PoD8ܭG+ r "[׆E7-bdJebܠgH!<ܨ?fu(;fq(7¨o&YM2!k[!u6d;$du]Mg@`A)mR ^9;ҜsMQ5C(T׾ j`#ٵUdW@r E~JW{EA2l@p540LӦrVrOP.N1sd}\iTGl A\x@Ee 3>(H۵ =Dn$cJ}JKokeRk}ᤆ/\^ ~O6}/&9V;Wb٢, fBLVn( K` !'t @l2D4yDIMܤYF;0,25BF䝌6ނm)%wt*U_.: :ÔAܷ.^B ٭IISWżXP?lKanx_|nO!{H {)żz:Q)Қf mT|Jʁ=pCF@z W㳍S:Li lT@4 q|7 uZM#Ok *d w*4{6-bDl2aw "-+$cTtɄJslk3;YςYD[dԾ^d`I7Ʋj>KMO7A!ߚqc-k.>^AȽ7q@aGDk,H)7v {(4WvdZC3o7%ƕ>$`6ckȴF~:J6ddy-,@<@vSe'dFܷ˾4؃PFvdPoB9z׏vS  *#d](m8$WyvhJ[ ר 2d~1 $2~VքhFB$w~~#cu%bvdlJ 97˽KFno#-9%aKJ-O<_\9:X%L˖ء6>pޫJb|^=o _Kv? n:F`#H[͵BXb[ssQ%oN5"h[mԆ5ax` S7 Vיx.ͲzQ$H^ n<<#Ab& 6V↕( p@-dU.VҍYۭL&1F>3OBWQ1>_ !&Ja%KO%-~- dpܐ-s"]Ѓh0Tހ4d bDu2@pkT w]9/yJb|H uo#) 'R#CQm3@ccYEH$,v_AL5+ = y'P/.Zs@dg#FSPHi${'/d߫ӫ\א^!Ѷz27Sޫc7xiZBm( tDm-b2lu)h_$ͤf܌GjK*~#{Wر$RUō=>{6.leJE?RYS* >yWL 0nA&IیzTJAMLrvܤZ^uTåZ=VD´Xς X &^VC;wETDe*6qtF(C`Ud@ԅHRՍ{)ϲ6FN $\o!5|ͫŀW7r i ǃ:M4hj~{]}`U iؚQraso6#,wNDo cl~2-p59~[Me^7/g~uVy--O?76=#sRgv~>ǧ{ ъ+9wYS50BP~A pM-+R&p"NZqö4\[(fdfWOip1QpG؀:.ZA7HqzX ?ed4 ; ]`]+)?͈׶#$FDsԼ< a*wsl+)Ŷ*Axtyaj"jԢCٻ9ks4u4dBV9 FZgy0'FLM @ EwXTkQhXBYגǶB!V6Rع_o*r]KdO*YϾjO]pznWN2w9N u|nXKj޷'?q9 %p%2ėAýuΈ,d\ddB2 2*ىT{T ]T餀M^W,ĉ 'Q:dM^º5D9: a#_GUQ}rӔeo OaHl5t'#gpdtV e J`TK?ss3q[+g,T{@`ü <b~ 2|*$~T o%sdG}WrG)Zo9)e>RהKn҂q{B{P,n7u,ަD WFKj_yO2kN9 %p ^Cg^<4M5g_L%OyJO4Tidډ, ͭ!!5Cō͍)xo|5! aC"X6uȶ< #ȒU( ieŎ*4ِPQ6D*WG)A" m LR2PF(S\弍FHF!  #8ƀѸQp>{|}Nq$NdyjoRqM)P#a:JY >toLF< "F!. 7|<+ɑvi+-rhE+ G.[Z4B0.7z$&%9O /OoAJ+WRo>i^GPG@͵N. \ J؁QP *(E##b"y!]<y,; "dQȦPÐC d>c,yn\sN@/Zy)@&/B/qR P䰎ldbIfdX@ (m0}PAu_+@ h55p ^||~ʅKYXkfオjh,B;3bQ\OeR7ȳr) -># I ~)#z)Wr|7ZKIuǮZV04w~Z=NKtY R^R [%wOS\OV{!gJ I)1Oy1$w# ?d3I6S+ P0yk1}B + s@ȾU AqmdQK ;6P!~OJ#?jYEy 7o&2C&n e/mDTTF!~AԊ}Zӈgjh $8w#:x{vpGJGZrfޏ/ 6$2F P&!}$~>?XCEPdk(HP^frz }."O"rE.&s>6+7o3_qzujqo8E&"I[)/}5)w[gM cd"K@  KpV` nR@.ie7Fg+Ɂj6%@d\x.EA1$Z6E;9K x<2h7~+>H $P}튐b@C-đK4vl|D2 NŶTN?gd;,= Cf&nuehC (Qt"wP  #L-1sᔑ˦݉zKܖWq?~i#[rm)1 7Rsʔ9'AP7 \27k{w 5rѓRw՜oV R5Pn >tyb;8xtW[%PnP{Zr)e>g%؍s da|-N.屁ubY)oHrQ![&촬ބ3Š I녯B@G2j<PLn)Rdd Ht% Hr!x nHJPnk{Q WEsI8!k oGlL +) QOeJ(1Š;<\׈xq6ePXR( *U RjMD8OR}hp+TjBX7zI8A齀<_"2-|ɼ]%״o\ KOꮺ\jwY~M9[猑5d΅<Rs?mBmȔ<+ Ș= A5ع`^Ⱥ~ϴJk&]/;nE  D>Idȭ9QRf@o(ЗH8#Q:;wq#Bv${+I-d$w9<%*'l$? hZh C Do5H^X.j[x>@j< &9L޽ ͔ m@X<[I~HγL6`T1G(*aU,<}Y5F0 JH"#8?Ne6&&y, >^:C^D /̙Jo+i&0Cf Q U!* "To&k/>LmA m jE8V⼒Z8@ZZpnBvl,7:Cvo0"Du,y xM;`]C^ LvFJ#=rB^ vSȿ3)dGvJ3WQ!lKWk(GYx0/qQ-X+p%,A|namlCԸ SF(1 EafQ6+ݷ"]NϾ9M&=c'/Y?6q%u_<\+O`h4 e<(𿪩o 9i _2 pBpvK>CSLBC.r9 7uP]BtQ' .[/u{CևxG~aVDkK-fs5"JH8^ө:^$3E~~@R[)6Cz3l&Kl@r;űҬ(<-THH$P Z&Q@bo (bmfd؂hP#~qVYx}?O ,Z e `U3.l ]fS3;}Jc7/Κ i;HsS( YS>FNaPNDD)B?77Peln ["z܆׵ڨҺmni&S7)< `JiJϵ e/NY*;W^CvwS T@ ^u4EJLq{׃,bB0CԉQc4R/ȮڍP+ȭBZj*{[l\S{pX_59oʿrmNԷrXݧ =0. r椢m _U%9o-okC[}]CA9ٮ}LunTAe#E# 4d,ޖ 44-Z~ S(ᩴN-QXӃsM E6 N7hNE'NNj4@:2B YIx;zڌ*`-OٻL^Nq ".e@EXW}'V⌉P&uP# NP6STLU7 U |dR[4m5h3uR ! 4zwQ9+@] .G݂jL<00"<{A5IȨ\g6z{6d\I^CmuoOd!3=D"1Ӎk1z@L >S:ۄMF~/X ?!:f:!7!Pto!ku`V_ %җ\|}oAn}qѨ$˖毘Ha%?I({.y?rogp|4Jܽ*|s3ŝ6_d#TvO)9>wao7ժ]B)0)""v(Dth]_M<ȋ(΋2m+(  !s._8 dgM6 P i xi֓A>Xr1Єhh7wCtBt@trP u~ C%/{u~/B揺nfޓ$чRtߝɥyz#53>'ǧ 34w( %m:m)os>8vy%#)k(:)IpJZ< JKq|Amx?יxKjv$hV#wP' ?w; Z( .8v2\ \ !c/)C$."2JI:Mvm(B=aQ[3-M<;Ɵ2 e\S OO sAU*۵u7 M)_9O"=f*-ul7\[jR/QMMw{I'eۆy"qx_uӀyӕ=>1ف4%O@n9@B } ('VeMmsVΓzϱU2^\CRɵW&@_U?3(T^Ԕ[ҳZmJF)|Q%īR ^ܼ ?499lW]m=eظnxޑL2`l>Aҧ`jnZz#d\'R( .坏 T^ ߹dϹzѓR/>#W}ON}7ɮco'df),K= @t6D;qA ]8wpѓO(&F=HB d~l}ù⇒ʷSOP)x)CǗ߷4Xʌ.1[-J%t%,K.=L[gOȱ?!y8}lqsw[S(ݱYD3#SefV j=>\4DUܟP4_!$^֕Bp ñ9sKޖc/ğfrٕ'7yY|ͅo ~V=dѷ [sQ+JAtw xԿӜubf(FaeF\O̺f> 5my%ߑw {DOX Cݷ.+9xβ%jINeEɿx;[t'}IJI-:K*RwyO(> )xǟdi/}dsΧQk'8wCSe5fU;so5M 4>_ N"x%2+A2k 7ͫ&ϑ=o&xA*;zMR-KRj :O'\tXz%;$<5fZ1_l M`0%-"`C`8LELٖjAQx[欶=p=oK;7 ew)|~%ʻZ~ޞmJ`"B&*cU 7ח^tP|RΓ/Rw4Ͻs.սs>ӽg>"`22SUӅ4%ڪL*YyQM+D32[FuBlZwX7>{-EG*9|5:_Y\ z[B>~酆 q]eꓙ"[!(^|zBdWG̫}sN9m8#uMoʸ96U_vek긠Gwq>W-PurYOh>SʷTs|̹ 7ïoL4dL34X Rla!Ne%ȀjL%9=hY3gn/yoyr# O.ڱ+)O%yaM\@cY,v~niprRw|Szc3ogM1Ōciil> !hW9aͳ&X~~{?Kސ\NԼK9䂃O i9Rv9Y"0EK[ړ6mҗ>d(9ٯˑ_uؿ|`uu:w;U6Czge:DzrA BK&yb>`Ysn?0!p'^W?ܥb-Q6>PH,ӖlI* )c UѼ=Ͳ#ljb/|8}M7Ѓ#O?H9'a({,-Z .H}kzNeE/㳥z`I ŗD:$_|!+7>&!?_}]Ȟ#o58gn?ݾwa ueZ|<5L]uUJKޔ|7.<}COJG.߳h{ΑFR:v4|%-ٻ39K _]ے+?{kzߍo}WRk?SxUJ;RߐszĐɅǮN*:tN t Qm~2E/Zd=b ۥycˋwL_eCȹ=,ex^~RK~#n_eQW-.}8ld{;Пe7f%E7]^x̥YC`LL{YԔ'ҌԦ٫V-߿')7dq~rƽ__ɽn+苏M*bC9g'o¥ԧu:~2Q}?c<-7ruAAfHRI5;b{!'3ߑRygR_. {ސwas;^7xwO#ߗO g IENDB`nifti2dicom-0.4.7/data/icons/hi32-apps-qnifti2dicom.png000066400000000000000000000044431226163507100225670ustar00rootroot00000000000000PNG  IHDR szzIDATXWkLu7l66_6`1 $ BH~YP{mfYZ)fUv~Uݏm)Tim?iTIΎQ7O$+!s]5Gǭ ҘP0B̊^'{I .)I%b/!2ɌLx 7-zwYGߋ"/Ra0$F[D?* a  }2n ] ?sn2>~o"Sg4 bHEZj},4!+bXj&ꡇG- 6s+ES (lƋ1m3j=B FfL$dBJߏyfٻ{)fW8V0s=G-,u|\ۄa%~juN4F]l†r(Y,{a{Uf^z(;g* v+aDa p;S݀NMQ佒эnm a8ͻ>O葉/G4LJ%# ۬qc=ߪǠ:]j&5.օcGtX NBb槠s]=JV>֗0!'YT DHKEDئuuKm$#jqLS 4lD܃Ar+(yo;۱i[,+ & ")+fP7! ìcHA‡&M mnv]Wc= OsJ ɿ2wH@rc )eJLYك%72BEvcm(%)~WX(Yʼn]li%np|?bWC1㟹;wD_&\081/YUX0nDv\ X8%;qҁo0E0D<\A8r+?|?iXʶGƼQ VxpYxH?# `Ԃ%O^P_W?T\6pn ׮iK]q y?n+:&g:ƨPE;S3O!ɼob*)kw/kBͣJ Q{"]lM'lКb K̀ ך}Pox(eC"i.I07\B1;awJ͘&p JqfO[#cq.q'X.)ri(yFllj/oˬ ]憜F׸.nƵug!^H': HRJ_"Gݴ^9"6%fF߉iqB5 tw3Wn8a{b U4KvTw\߳D-=ߩ\5J ~VwҕeE7UVNd;J=z,SZZ|"xp7?ى1/߷َSmG?6.S_Op"7?cvO~mc/IT$]yLnIENDB`nifti2dicom-0.4.7/data/icons/hi512-apps-qnifti2dicom.png000066400000000000000000015611111226163507100226530ustar00rootroot00000000000000PNG  IHDRx IDATxxW]eQwa3bY%33333cJbNbǜ33$$dBwj)qf?̙;s{RCA. F0\#F0o!^[(F0V#?@AX5QcF0`ׄ]oe@ TUVVQMd֘e F0&6yc f'P?7?j [Ck?Zϩa<쿃-}^ro@ 4Wc՟Ys^g F)F0oFk7u?.΄jTCk2ej2GEfcB Bib""L`8M41%쩌ƖctFK+etvx+hNaDg223ju,/ d$D 001-S׌R#F0~7'5_Sѯ dT+x0?oϓ_~/!PV~x4_=es8W~E 3E3-CL&ceƞ]Xcِq4f9MgaSJLQm,ݒU3zX/dL 9.1ƦF€L1L8f"$[1TVfy1`#ƿ`G& Afi1V賃 w3Z,6Lð8FO銎Y"M~5A~m=Ȉ]s\-l Ff;xohFX!B&*k$4j߾Shjn]zP'üF5pT]ou3;=$YHtIC+[,^kp h--(Ai9e4F0HQc"}#G 5dXxViFPAwݨ܂/MdauMˀP}5⏫>%QG2TƞS\Ԧ"KȬ#'rQ,_}Zso6.{||}ج'̗NOqG]:e(Xl2/ȟ5]7yBDёYz{ֱCHb! ;'&0+0.j=N E5~T r7!*\؋"Rw?H3n ?c`)2ks]/ޗN' Ǯ)'^RN^SN''ɧQMH? q*q yyuฐc7ioZEyFfVdO=>&3[ڄ-(gE#91&3$P,Vg~kx<6A`#*k*оt<$M\r5;kV'd´pKqEyBO?(,k~.{L6Ew wJl؜m[hF漸s}Cx|A>8;{‐wl_pdNpvގʒ%ϮTcM˔k"Wz܍s] T0]%LZuzt:7c*[r)WqWYᗤ KKߔb/+Ğw#)'g|ԩ//3}!\=)w)b)ߑRϿ!!enu: S[*S$ĞQ.]b2:L5p@T%`#hv&ѣo4sM\g Oj64S~C#DzD]z~~~=7 B}B#B|ճb썋B̍BkĨ^߸n1o&ļ:oRĘob[bk l{M)7w_Iݐ}Y%UgվW e/mo[ϖ]̜?xhDv.aiM[19%51`h"Gq嬘rؓ|!aIs,7-_-۷Y*>{e!ץq>!bԉxo99׾[ ǮYǮ9' l/tQ8#:>u[.7B/˟>AJr5!u!{,;}L8(ng}[7(}Ϭ]TxEySg3nCtI)`g}K} }s.§bܕė?S+:˪˧Tr; ZY:}FDY%qxZ+ScOQ:xF-/5x$7o'29sϬ;{*M)wń|F{g-ֹgֹ\}uWO><~W>Mux}}=޾orwlwL߳_ gc~ǞtC!»|7S7#جCr9y۷)۠[Y͝:-,{vܤ5C-YJ}RVf|Kopoν]q_pM_)m=-NJ3?gnqX[c͏}͏m포WBīK0믩}׮g ȕ?-_4pCB3t Mn>$&\5o(f iz Cj-:adlE#s(?MY`[焲CĢ'+WoI>ǜQq[ss]ֶ>k[-}YeA`_%Wf7.⌋xJ޼! CW}Z6y9:v9voqx}$ŝK:|>;|׹S/sYGOq/vrnU֮Y4ҷ`~DƤ&v۶#)oڨ@MůZ-F0x\Q#}L ᚸ4ƚOiX$u>jLDƔʌy󹴧ViR';'|9:91gsֺKd_+UZWRZQiYv[iyge/J_wwwYaο, `X|-Znw%ĜFLtOWݸ)]9˖:xqSk%SE =24]: ͻ։mСNtY;&mvuwMj#2`Eވ lɬʲk؊ ]R^}MJgB̹pQG<{n+igYR[V yUyNhhLf`L3ll DDgX!oYg--8G;p]9[| A_|Ǟp>[||Ʃ|39sWE.X(SԵoWƌT(&2 h7 6x`#G4rAΖD嗅W4ضKxf#EfLg/YJm[{ģĘSϙyϩDZ>f{ /|0!7AaZ´gi/i]<kp5E;5R)XƁuB2Re\2MUefTI@ s|5/yW>`<`qw#? nI |+&|7׮MN6\AYĚzӖpDf1hJws" .(-_Apn1E)7>B }Gι{}u5z9~)~_2k,s2347ND5M j86!j}E80L q2Q01 *A/gZ3yڞ}7-[avl{~G'~=/"^x !|ꥋE=o&.g:>wl)tExVtsBńkׅs'of.wlE'եsvԢ9[1fF h ̹ ^B5-B`#G3 :YwUXz!Iڄ̞5-_em|FNeClB\7XX?+VW~4-37L#&EzO4|2 V,A~eawFݖ`c⏂{ :%4fMӈڏR!kZ~T7T|S,<{?zsF<-v}#3żkoJo}xS1?q׿l "_m^O}Èc0ɢ??!Vb C`<@lZJ#]_30jtv0hn8 AH~I7Li~I?/T yUaQo\VśhS9u]־gusw u3!s^O_ҏf/lQz];o2{hZZ'c ƒ + L$w5bt̵`#kU V ̆FJkNCܶk݌~ClZz.s66e!el}o([>UڟRiYe-2}qϜa]05 {h0 }h4T9LN@:FXgH `5"1ƙ$0L'Ѧ$8xa&@qk^wnmuu s>\©| B|=oóoo欺#B:tjШ%H7A&MwhL% F0xt8cHGx@Ư.f&js`X O>)l2w_cɹuunҾ;ֺGβ'4otO0z6x7 4TY!v ZhE $ThN Y$O? eN-!ƏBwwyCֱ>gͫa< >`C 04پQ?F~+ę ?ԽKՓ=I;V 1n D`ݍu;qHب1P#[sW305ÈJ;`m 0`7~,}Z6fmnrß QgϿʧ;geئY3cf OM3H294$\d S !c!;a!CP`43\~ 2Do0RQJb)ugЉ$j$i:b~#^ Ĩ:(ԙ8T]CF0vY݋U}@_DH)H`h`s0/53xy=ּ܏}w}׼|s' IDATܝ['̚?jThf,Q96Q9*pwB {[{2f h`?#ߣ HL,q6ҩn;Ŗ5Mm1<_8mh\e3=Y\BkBܱs_ _~~-sJ  1&JyD2ﱌ іa$2F"EƑT$,b9XgdK@ǙfT ߃hbpn qa @0fLXbҏN$:|FCcZ4`0̈́sl'c>ZɻOWs3S}sw :V9WqΝU}kS񇹀ɰlXyi`2b?Uߨ$7۵}Sl_Y|wJdCUI:@*DHU["!Rk<5Iz؆ĉmIԞDx0 SaWu#VUwboT& Œ]@=-0TrK_OS*9ôa}鉻J?+kn+9~ι~Gz[?2vgu>(0>ۣWHj!E ꚓ|򬊼-o_xk@4F0_3]VӞ ֑rhSdv?tW4kPzPoF}|\ƕW˯ '{}ι6|tAI3~l{ӄV*yiGc!fIV*! dfAҬsHeI1σ#9$J?8!4s}17qhq7Q]_h}_R`~arƭ׏#:T5̂ ' &4a6޺9K~u{QC{Urwd/}~c_i WO_̓٘N45N~1W3D6;&hL5O➮nK2 d65[LU+!$ UjAR$$D%1)ڒh A{ĥHj;LUՕXFDM&` r@? ~0em%UvD]'=TgSލ4/ٷsB:>Mw_tx?[m+_b9[Ĩ:-RӅDAifDAԑ$c",2$ h,Ӂ})ܔ S tص=&@#*dGb&`l%`3|zIk8VYY3-^sh- ٿ0 9?HoYaJbOj?1 *YD ϮƧ <]7\}LBuA'm jZlUKiN2f0$]4'iB3 R8ۓDlO)hMv$NjOb$F$wYxp nMw 'Vڂ5J  c)Ew`vyN~)&]*yW/KΞ}+_-7ajdNA;%6iW.߃NImTk"F0/5?Vlif~)g,Y!␘fuZֵWݜcs!+W%7JΟo^}o)G1/98Y֟Y{9պ)݄*vߦE2n{@hp7MM~u% d_ܯ$oⅰgk)]!@Y~w{>x_FЁہj#nIr4-O&)Ɇg Whd I&߀db[J#7AhsВ$ $mH9X[f f I bh }ľxD#OkaMOֵּVsgbXrtiQV<o O8:}!=嬟fV\dh: o/gR=KM[db3L,]l}0 }a3!0t%z*Ơ-)д"$Oݔ IЀ 2B}g@._Nr !,zMpR$5YSӮr]F' 3~KU HE0'NxsH7^_?%|ľ9)T Ex}HՒZc6@BמTa:Yv\08!t\ -G0p3-/'i:,[7籾)"@ױ|?o  LK2RD0r>/@SaұOjNѿU秪MoIIا}Sa4I Wv(Lp03 HAr H.5v0HPӄ<6Ȕ1(+H @> @M|]L\ yAks n.rQ&Gd $VZ3T) S'~ܗnI |zS)? ^K*Tz$_v[_ӧE֭':$114F6W`ҫ_w+ F0OGz ?A**ꕄ7kѩS8`e\'KߙsM1'BƵ/߉q~OcՕ~aY%-!t~y,= D3f Rw|kUNq'FLRWb3K!T;Ȣ f%;MMH~ YNs 6B#Yt BP$5!*JSМ#/QVXo%5ma8{[/s?@Kj0pBȑ[$,- <`y6]e%a"qQxD'0&.|f_|vOdt Squ',; QHtkɯK~'hDDDd0 `IӍ&Q$C7dFa6$>ccM`hA-)ַ$źfDݘL0e0Bz]ph+L6a<5IڒD &+]yplU)*a㜇ѯܖNJ{*; |_]kbի|ṳbщ\٢+6a/R̞3zXx)څ$W0\Ƙh荇譈Yh݁0"`5m5]ou?z\&ahRN}Y4o|MbBΉb+b慛!Ĵ/'\Q>ys{ȺvT*+YR?GW )7:dͱڎ$N]' 6wG$O,ǒw"6EjG@ b+!4#.A& qO'AӐaf ~z<.Q5&%0RS,p5-I)ĿP` TH&,Ih:^/b0`cHX@7z<<y!q!`6|Ѳʂ3rFѹ;ר9㡵^Fega4[jO34F0Wk&11N5嗆$5nF?<аi#>])d>!d^(^'_{OJK!7R[BŨwwyҶί0/J0ZHo(CD "I>Nq<'>'H&Vәp15Z@ԛ4#n;#4F߈DAA@D~2_AR  PN RB@t(TƠ PsCtT! @"dد| նTۓ, &@Jn$VՃ8!f U jh"h'L'J4,θ.i=] <ǀV?KLxOz YE$JG14t4I`Sah8VsnCWpEE\J~OR\ SzA(ZFQdIXɡ6kWa]{V21 7@G D2H0F0D>5 Za2jGL]KjPh֦Nvʼŋ){-zq#sꀔ91+BkoW>,'Lo]w9˶yRpl\k_po s}Z٘Ql9OF:\@^\OBڊd`MIbHR ^y6DCC )@sDA!lD}BB|[At(m!mI}U[RsR JXBA M]wowɃPCJ=Jv:QhgX,_(5Ojt0SE` "-jzt@pFyG UY<#a=kJljBSx9@srCh#Кqtb;;HXdaL%)r@~,э P?kR2}wR_ AR'000q}JqA9UіI3 v NugpF LuCΎhD$t›XB8;[<+Sɹ<{p]Ys/smu{s+>Bܵo3_r V۴^Yļ}G&n+f )T[^ր`#c"?qЬ_/"kVfH IDATla::_`x|eɦul,̼zAJ}=}Oܟ9۬ayCδ!oZ[)U ~ѽ U0afUj]_bt#.M' 4gk_  dڑ|lD&Wh !bJǑ7 'C[o'2|\E^8PuY{@D*dFZ5DM@eا^+𷪦%) y\,iZD[.A:ws{3H35#`A'C [-O%0@_s H$YzMJ=H AgRDS`ʵm~5e椞@C6'>dY'Z] ߹QDHTƩDw, ̥XKM ?\97W+9څ?ult8xsB}cU7+Wx|=|u¥3&* 1Q-=-Ps^. F0K5&D31 Ih٥'[0~p|ު\BE)Bxyǡ=??wS>PjVUqVk ZFDDpU:m96 w ?JQOy8kAXVȬ ^ RC5_+dJ ^*'eRůeRP"ӈԣ}I*@ &0dᗛ-I~K(>;@h:_M Rs[>B$(hZ`$)ZǩC1i5I% DMö|ln&9Ȫq`Ok%Zɳ4"^@.WA{ J('9ϧӅ) @4p`p a ؇ؤr׀G=ĨGD}OH $y0}I))Fu]H)LC Y,[RPmF À1]՜$Z.`pࡡۇ6j\0 o`_o?[`7~U y^A/׍*,Kj<4c簜a# ̍,ܰs䰔u*[RXK߲?*VW܍~MTT)#J?gI8(1?!]mOI?~bT\eᗫ[zȘi_:mN/B m_ ѯT2im!D_icP LMAn%I}**؇2})i<=OՖ[<h)?l_N>/6$PLy:P+v<Q'za#!c`Qf:P$خD&BhҌ :dfYdiagψi/?=O E\ GŤXQD)WCL1;+K_'ty2$ $0aK>5 z1kk!]48AĥJb4H4?(C0g䈤V8uhrp.Q>E1M!܇ؗs7m-ֲִ8R?R;DC?"e Qنc$D*)#ND|َ|ty[J?sh_[F3_? =;l}] p*m44YRYEp^@P܊[q]gdjM%ﲔ\ֲ0_~]ve&%f$<&?m+U+G?a_ 3ew竪sh;@7|%yW9Ko#{} ˜P潉nҲ_Rȸ|[,[9<ށnAiqjao?c"iSg`@1Gogq 2d XR~/%`qr8 NW~%~A,ݰ0ɂ`C.\/bX5k?-5+n^:?N*,yZ[@gounB "As^p-9' TgT/K2@YsޯfA){`# d,^yzh$?}bz.ZCm8=Qm y @'@ 1A. Dqwݸ@ b2 dp?ep-,(9DRYBأo?"| w6rl9m!m^EKwk['>d˽%;o6:dD)KPJҢAŘV܊v?UпRR*Ky2ai]>y-z-Oh?ko?|{z?Jk/`"{~ekWT- 5[qᭀ0E48Le#XuB]o&_O,鰶<}' ,4+o ,&p!c>#i8f|㉂6F$o'R?3S(ӛic˝6)Kݞ9HطA< i7cl-Ysᜒl.K %Mۇ16؇)n`\:q][0#&}d pg{|́1ຎt5dw8.^u\jH~X s ^zѓ8wIMiI Eӂ4ghRфq8~ χE8{x&Vc^!6F QPHY*g!bf V :]_tW b > I\_N!:yjB qݛ%)F2'#~D%_ ;(8Gm88ߴe^Pw{}˶#PJZ?[?z1%w8wE5OM_^ɚ,kvX^V܊viv~Yθi|ngǡc7ݬV5鏩O>~z3Qj[G~b=-aM>P1~ ~z=, 7yw;YvS;6jqPs:jߊtzO~[LDr@ Ҡ>㇅Ij3T\{>H()@גq$~ ]'un>(a mԆ`S@:,~ŸkzYfqE!zplޓ/ GS I5K0z J%GJ2OH맠6 R$C Q -*8\C5Z6A5fe0'!N׌H89t"u9wel tC4}dp2O $#t9Bw3t;9a7f 7R{p=E8sM7/p 9n3[z5|J]TJVɟj_w|H=}mvƯu-+Y/Rg1\(VR%|m&+x7I.XUKaF$o<jΓds^GV*qXR7B0\Kjڕpa!"U8~^B9'W34_ǹs ?o潠 nt#/B`Ӳ4i禔,uCJW<>*w+Tp !^94b߈kۄsل 8-8OS>K..iɼH@c`qڽB^'u}'<p'9 NCD]C^wW8 {NB: n"?D'n2B{E%O[-='kKSv5L/^~rL^C([q+nm -T U7^VvbjgC%[Fh-_3i5ZJ =_7ju=}95EG+|%5SCf F8˂wS0py` a `-rS{:&Xh\'֚}N tAtsq.?H~?gHI -s"@/H? 5Ԁ11׺*<.((snP9V "r ~Nkq0>Fqͬ-e u̸}o셴6k CDYHƒdw@8 ϙ; p8@8$gAq>c + !X?}يgKNe3@sLLHh=w0"8q',V|G g!`*|_G5>j(6Z[pL >BC[1NC)`4E.5'b4efAoXTG]mY'ä׽7J#%^ 0 ; NwJ򻏐WA@xOB @(p7˖=t/D~"kw?U[|-}ǝֶ}/ u[q+nۥ暿 KB{?,X:\yEZ<9~J #pܖ{fg{Q U5G 3T8Ge(s'%E1VzPЍpkڜRK҂;lYKzqG0F„ɮg5:$0[=a9G(d0 F*@ˀ렴1QIJK={Ʃivepn  v;f30 &pm&{;^5  4?-L&h.Ŗ6u`tCt;񙝸/:q7S5c+@Kν .C:ܛT]GI^G 9 \忚\ ~Do.N짠pDǁk^ f/–::FL}gZsd4g>-̝}g5V]-EO@q+nor.W4ϭx}wR_?7?XwdUO-zAܯ]KUj:>jTễb(9CA7&n څ xQH7>ȺH#YSzA59Lò5k٧%XmF9D'A`#,[I{*_=@@v}P& `bAOSU Ri~D48*9`0II{)q}sz^/p=}}v A'ĸvosS 0ldsH$icdCD * j4<򀌹Wb$x|؁i+vml v"b}D,9͒%s^3, Giw @ t38n[4elz8^Ad44^OQNOHYJI\$~[L@$~Yw+P'Mܱ( \52Ie+47/p-)p(1rY}QQ5$ B^Bz-5|y%Ww~K?қWzWdBI{o=į<_HZvVIknlߣ7y]=RV\8+~z%(|jRZ*gz{^eGͯ:\pyozOSЃ_ M^6hB@ xЯ|BZ k@'bu9?G1{xk\Fk$I?klRI ned ~$><! Fp =0{OI@$:7evf4 0!M #%k]W  (|)Dq/y6DR)qBP 5WU%WG^U_h_/?g?a%Zgoպa)ZM-\n(.k[ߋ7 rqYmdw5-<\?wݟ{Bx⏵FԏL-};@o<ݱru>˿νFUjhlP+,Vv i@S $®%Ŋ]@$2 [lQ9ȶ$UR:@mlrO)eN h XjiX% rҸk+M5vXr@ w_鯐p:?(Ř[8NְRL{K?#<Ʉ^uYswA7=Y@VEq2AWRzv;!J JVxRd{ b(aUaR>E f) k8o8& Mv3o(8~-x8YbH᳓pV"s].ēsUs 0E9e\9~so@B (&@L@Mi=?bi8cR(MCx{dfqZ c& pga_ ù !rBz='!OOR8x{EH۝Sf4Ij8>>{zuC쥰(Ed9z)* do@ ȅn#=rvK~E3|- =ܳFOieGk_׺n Z8=ЬȞ (_t4ן4c_CeZUW)ߠ&sj6~{ +yA/}K_q?ݺeV߳Vٕ߂ X|U,w,R3,ɋZA5&*LUQXףT " V:7 6A ׽jopd85%y\Ee-OS qmzuX eX 1O:&i܎wo_%( /2)f}a<- 8,O1E: 2=AxDdgho{*_$cz- rnƘ,ydSU% uȦ&9 14fFE"q88sg sфU8`1A$k0SؚF\&&fC}RK*oPܻ@ ό)p".8# >+LL-2:[I~A e)\q=-Y92s[drIM6Daӱ@.a ]Ǩ}!7!j)㚧sJI:Rr>]9j°sѡ s ^Liϐѻ^Uoxߋzg6|֯[y=ɏzߖ>q{y}gyWG,f x(nඝ.?wrП%b)O_״$NCS;?e卑G?1J|}+^ujR" rX/5չ *uebms>[@,7 ]ø3062kP]w 3rZ`{A&)ϑWeAVu(/@/)Ҵ7(/ BTĥHѐ8kfv^>L0KȿhfdǁuٰѹOH}ZM$uKpOMP"> ^ .)<%1Z/+q!u!lxUflLA2 gxDpe qnJA~8rp@ܣ#G!o9L]"-{$n7%!2_uC[Ň~> G/wnrzor菱wS Uj`r^mڻFS_8&.Tv4n1)e "vos`q N^ K F>]RT,^!$a5E1 ?ݎy@quOQ$ bl9LIN7Ȕa2WI(*Ղ@m6NIR?ea-Z85=K,ƔÒ{%6aK>G 9)WG)NQ6M)~C'@)=,p\n iT/Q6G|~N!u& ,}H 0~akKxν $s0ڰF_G}3Tfp>v]I]W@OP Ar߅Uyf׍kȂCőEc' >8L8{6K.뱄*JYbr8 ~,ͱ ~Ụ1pkGi>A'7v8GCrnC,ŇvS(=aNS ">{UlZGm}];-u}ÖXSx-RvzfV܊o6o3s%TpYe_;NToyGǿ5=P^2|zywޣ%SލmA혌l3/?ks^INǤOv\?_ wY)U 05:V`Q .w~}`u׀۴ T&D n#Wp.As1rӨk\V1>^Zoz|O~ 5XSlKQ+HdA,=xp!r=#}دBI",{p**ڕVA+xm` `k h\,4+c,E5j^#_1vm<8>PD=>KF.vM>3`߀1P  1BnU{;W 刂B nR֣( {"(9E.>KnݲFνj%[ه_P+Q?vd~LJr"ƱIK=eQ]s)=`綸kuAF @+~cAZ,|/X± 4ل3pJ(ԂQNP)ۯΑC]X& o__إmB @8փ eFZBhqF(Vi}17ȿPp.\سHVgoTK^ (^(.nw|־VOԾ}GKܩv=^''BW}z??-AM7ǽbe= ~nˑUJ^$J`R|9V `T7MH O-ٺ)o^? &9<D")>+}9Q2H `vƿs8N\GVe1*U`uu "`7VMY#J^'S2 A1  IAUb!q6>Sl,VMA7rԸӀGKy :!@ =\G E+Ș\5\U-#0S.q0](^a ccZ9aB;Ag(jL^wnRk/Ղ[ ,X=ȃ9dw10A  vSb1*yrn^BAwR)O՚g5>WzMoTkP;? O6(ۄؠgҡo xPAf#fkZx< ⛂0>XPNJjoslPs7CLS lhHcLm]9BT䗜4iq0WXԴɿu@ RUA ~ AxmǍSXWe"ñLhgS{ z 0~!Pm)rfIW! @z@J"vf[X& e`7 a 6c=kcJv(5؃xS$O/t(}Ԍ}. " s!G~"jjr^b<&" ̓psv,1{L8Sa^D3Y ,-Z-n(8y3@>Ii4;2B@ uڹޘ,~]kTMU=:@]}{ ĐB g2I9 Ӆ[28-sn4n9B/hs_|Vժ/oƟ#ߕeSs΄QYk cخX (nwp|]:y/v/vNM>듟ڿ(ՏV7"x\R|?P-@#Ⱦ=8ɿR.u@U߆=Ä<0InC⒟vMҤkF> e1qvckWؤJc]# 0>ۼPAY'I&IBham!H[xO4Ӱf~!pTM$S )&q7G3(͌LwrAOAL:F&1 ǐ4ƙAf iK &J*mӸ 0 rj3dhs`Dt%)tԖɫ-R'뿛J\H,b^1N*gQ:fvc8p)4wrMV%Ox^ l}"A}<:>8Jb IDAT~冈MݰhXCX댽qXs @οvM8&aXr=N"ܤNjuDI27 ~jB~6nh&Y<.?¾q%:;G[ !tF j !BY<P̴¥BaE#8-BQ)ɕu!YFCfЗcCA#vi)'4^uwnA(Q&aO K]h@蛴SlR[t?/xU_.8\bȮzXy7ȑj@jNIü`(y,Cx}H3!۲Ye-E]%K8&*pjֹҲA Th06aR:{nLJbMq=ƤHQ^R1rQhfe'EliR(_(̕BWc@1/ ,M~V){9\Jn=a;d+\/? rx("휧8 4Z*:y6)=LQUT껎JP4t3ңF-Οemo0O=|jv>nlRir;-ŠV~gKŢ(nr ˪'^ײן%~HSzS4^cEo?o߼_ \I! &j|{Q;oRo|Kð ]F@b\EnKLu>"ixcYv-Z䷎ o&L΁;w ')sU>&e p:6zFAC:F mk L)$&xc}B߬ _Vx p8мKzo!0ɿ1"(8J#9C87 9YqOW zШt3u߾!,TK]%*k VJzQĝc-@eYrwR-S9QҘG1)Y$B]\0qrC$dJuA5xܤ/~µE=8/L܃h1 ~a 7掌:/qc\ %"+)v!'g4Qkjwr` +ԍcR%ssy wq݃yJht-R|&BG}(bfop6 orF^P#g^QboZ^w/}MO=Y5wZnWUOCDpx:u$8/ewuNI7};z?b}Wz s'|c ah vtqρVXjS<&)jƅl% N\v^zls@MfhؽHnXX<ձTk*fǤ 6C;>kPʥ% $͞(w zQg t;'4^KL\2TSXLց }EΑ㼞 A~yib\csշQY #Mq$ˠ`ayjL,TbEΝ{`RASG+S3+k%zA,A̓ *w3[$B[i*縇8~Ǧ%(rL3[\ߚΗN[ j A|B"&ɫRB /^UܼH3.rR- ೸ߘnV㬑 Y LrbzdH\5:\WnTΕ"u,Sصn wp EXeuOb ]@ȿٽD *E=UO@pb)FZ+Jj^kzzs_V2-y=;:i~R֜*̀@ݰP (nt&ע-VTVMSߠezV?75Kz-Й-G-OjREՄSK8U?&EY݇}ܛlV9'Ka vsn39Op,ih5A uOq@ uJjqa\jNJGnpa)0[a뼟!m WcrLgEIHuB=8n/Hkȍ.849ea rҟsAJIX))cZlA0 ap%IԔ6.zQߠ R2J7ʇP 5zTQG-J-41 .jɋ f3V2& ͘LTVTT3Uĕk%2=\\k\D@ ̩B!b6u h!jS{Z5+d Y㜎 )q_wheG)$U=Hԩs+fb9h_Ytj`JAre.4ǭD,X̋whtC(tsZsAl?uR{`<(9NuChn=s;{^+/e "u>E%muơIòS/Ⳙ[q-޶ͨ^+.ut,a%k~?ou_QOGaD=tg-O蚭p** 5២5?I͹^gLn1M n3QDea;Ƥ@@0p$t{^91qc&Lr5*yiKDCAJ5Nm@0m[ N q[-EVnf: 鷰(/) Pf>H`8`i,0mSMJ&E <{y4>eЋ}!VX\ ;`<3 ]3 SDK X=/k sS8b¡^JasAv'%{'Ā?:ow/PgT\ . '');C G~Q~R~wVQk{{7L#ٱeՙ!KUX"AV~K5KI!X{M`j ,jI+Q=}0qL*VSA)ʸ2xZi dA0.,+ޙ~ 8׼ ¯p/Gq쳰 k{/ cB`q `'s:/KZ0]>~rn;KQ=T~=bwozVƗl}A?'USwGԍW4-ZJ2we 7vYŭm'h}@Ms5j'}ύ~}z/wln`o򆯡 ȿӖQ!z pD1a&u`@;K eNC{( 5KR ^zxqpGn.yޏ_ q_;'A,tVN ((>g/DLa JQ4vKrR_(77?FϨɏ|gwv=tYxʢ,yŭlN1k{J.ʎl^kfXg2:ʧ~>K-Z[ _OTnjJUTŵ7e2p1 ֺcZ#ԍPA\uD<>)3!0q!{^ |"v@ZUT׀@0L*Apz^/$iTW&LM XnzzA=%y^nKI} }0- u=Q j)q˳x\ֳ+^-g(pTKMJ[ |A>+R-2 ĉ`L+"= Ť5jk/E䷎:IuvY@VE 9 :Agd@Ij0*څs) L3Prf*w:I7Y)]QL_`Ieqэ@qx B5zqn9M0sUHjo-_^e{e-Z-{&GoHV* 8 ҿ*| Dӌ{ _?CuұoJ#ܥo|DMOHaI}}x܃9 -U`l<KR%վέpGIOp1^)AY. s`eAf=%B~n[ x<Bt!=#I'K\BA=I)!ks!VAvڰv ĥmlDYW`ARNa@Rc~ @8dM.4,m!0/J Fȉ}xo A=rBҎ1a Mn AnK:S HgF޳'@_eR(ZBP`ƿ-KM8bU7@qo.\S@FSqݦ`]*~*^|߲\c3tNLnn0.ܬ;hMv@A o_)qyi)K%!Xc! YYx̯1ZbsxXUvu?{)φ@ܪ3sj͏jZۿzվ9u_lsP ~x P]}]*L U}LcwBz=S4) wyֳR:D]⽒usƟ14 4 {Cx-{Yxaq|A7 :Y0Yr.^.йd р6Qjs;uCP3˾+Uvؤ󟖵wtSuFcRNs)\x//ClwDZǘO|ϳ؉sceù޶H<'Aay8׼D$R R\_zcZݻ٣>.MJi7KMY=1Dk}Tr,+JlAi' &) fA ^ yq$`mrOV*+{7Qu*xmz%P[;g>%6g{_ֻndlpaaU 8ڎ0oek[qm9rM{~]GW{ҝ'ܑwYiOoyU_ yj{MTUv;UKNQwK<60>)jl!Gg=%ָ]] ٸ;xR}ySgnÃd+auG]I`` K׶ZY % 0eD˸>.2׬g_$#a13 o0lq¨$ b|%eMFhܸ .N~{  qմl7u ^P8yaq5~<M#:I)Ts{OCĩ]HԂ0zc׿g$`.9{4 SL 99һò)seCK3"7 V):}Lm +o,Qeᅏ$Yr*s}=sO'1֓:[/5ȀdDс>3"NT*) 9& hxzW-fV_&:{EԽCi {Ec#fGLKqP.Y頙ZFVZ{ 3E)X(q h-Iu@oϐ*)ʫʚGq*{h|sJoD{O>]X1yklpGLzmGۿ\e|q?OSGq`Z ΡGs7m}ՆD{/\oxUPV}/TGewSU U{VѻH(z=){0dR 0$ y*&A@QZHUhsBL"CIL[mpXP_$L9x3\W$$?E29+DwRj)¥G5@ ޠgAK4f<9\k7qm7bt) $!g6|[`.ᰌqKf% |RԄe"Zn9nADWi<+4Y(HJnE޻&AZ9Lp,h;ͷ/% ,Y9d_Ϳ1#y[oWKS?SWwxkϿn.Kos$vJ, ,˭U ?ƭmխUˢjyc/Ȁ/  }OV0qO$up &SS>&[lӖ^4Opb6 44KݿLLݢ-ͬNsLpUm8%kVx+ H@&ac # a8be"怬/haYރI)ۉC~:\X V-=g{*P# Pir[ eo]R:.լh``vz \r\(aCCr8 kYՏK7"gI`>Gc QЄnŕFejTǩBJ$0 E@Rx.o$`{ôѮ'Ilώ\c(nG& 6|L*G$D ވccuOQؽHq2pqͺ4LV{bXINrS"m s|8v?HP:{QB%kTK@=d^OSi0-h'-?FUo}Sq-[`Zr<*Xl;jtm&ۯ9Mp~(}W-oRzJmT>#]?Wj^V}R%wp4mI;z{SҖkO'5mXELK!Z&Gi_98y1{m`g1qr˜h+c1fi\75yݛkܢu⬝Oۘ~)85kfY VNeIXp*c"pzAZ̓L('̌bc\cn&~L6 %cWirŦd%" %brǨ(ׂyY9<lxn\$/+KmDҥ$ɬDl(}bkAvAZs`n=/~UmU/.nʛpՕ_sT[Cuj.Q7+aBI@3B0!8y"o &h;1x !'cu~$M1Eָ$Ső L%RFɨN{ܳY@ֻH ŸU69. 4@ 'yx G zq {W( /? (\C M,ݤX5퐷y%_J|yeD |Ч׵G?d~giIb~e8ڎn+xvQ[[$F __+SWp<^uAI u e ՕSkF  O=yY j;fl Q>@?N MR_[pQP1xK>@eJ㉕ĸ̴M9/2 T,@>-T1wpA)1xM)bl}.˛~u^:Y6LsJ jNf.H2> -hjED>t\(Q,?dBAxAڳlWr]Ҷ΅ejokO7C?r>Rﲻփۨj,QC ضt)ar/g/HXq{Ƹu1"?M٣»? 4YÄ;cB2^.9uKnG}1!Uv]V<&bn$Ns'>LYR/^ agwPv$NsLN]ZgoC 8tq/R?ε LNVe aPdy;\m: ]i;~/\J܆tsd`W7+D=q&C.ä́&2c[`` Їoȩn@]p΁Pq Q:,I1X  vD*Sq11282sfv'K7d@3 KS:McVYQ3FΨšaxk385qi(g@:MNRs{Ƙ-0pghHʅp(!~Lh@r37cqU+\S A)G h!i ᮀ'[2%?0}5-h˘[*nr |^J>!0fC`?\QK IDATK.% Uz>~Zw݃~ÓxFum궻muQc{1 $Hh;0l~gڲ]G^dNcϸzۧVi+o5ׂ4B_ijd\I%+ %8O"d3 /(@?FI4 _@7/kY&RE0^* "c6ᒲ=N$ ;1k9 ](-r9<x@YL/֨Q:pXʱ1w0,{m/B&1Nt`|Z29$>Hi1u8IcI9I?MK CXw !7[j ` d{tfI|4"a*cԪLRkJ\s +uTbSv& ^7OʬI\ yX]D%Ra& aVͲ}0|:\![9^%4^c. E iRSd\LRB\kŜq, ~^EpVikrҭQ>d#Y\;c   q9n&>.p.hEE>seŭc4@6獗3o@Q8 `.Mp{9dJQX9$"<g$sѠkb1xϩ0\M8' t@ 0 K$h+cg<xJ)ە5*R@mkIu-QLûY$gL'18K "طExyeA4pru@XZ IP)N)g΄>9HbIAԅԇ}uHdه@}!a^$ :\Q&bX x,[gN(KT#W34?c W8c`@G4|;-O:Ld>a!߂ N pӨlW01i}})+ۀP@ WzB @o)?E͕' $$ρ?)xضӬ?49gp{c"g10 "iF$h%!1 Џ{ 'ߘ8s6*=#X3^:z 1H` =ؖĻ Zp 8qґ3Mmjp1I}\xn[X"*VصBN"Y;1A1tр3C Gr\R, c1sYʋ:<% Ӻf9~%A!^ R9`Tȱ^3ҰlӏN Ĩ$ՙ%M0oЫSH!H@^g"P1xܠg[U M-yXΙ5ˌx0KS$Y&8)Kf+f('փ k=P ^|$`7K#Rnp!+Ιp,a|&/o𙝞jsS >ٷN m] @({~{ij V&&2m߹7szoZK_ +W:/gmn(| pDҬ/wẶ6cd8|츚xCŸ췴:kU].頲惺[vjhpKS[.urкx Q2k,,zoa#exrRUx+Rg^^&L\. \7geoaB5}x', 18GFi޿E@hAscfP2J5 @!p`/֤ l45wn{^.p .c?6R²qf}A< *YJrb,4tw1cn:v8Yv;b\aҒ=DShrמ2{`\)WnEY*9XsNYJ'HӑWk1I`#G;Xyrg>ȀY1;K4`7x [1ء2,H8miڸ/R 2i{xoϼܢ0sq& hdY +#9+ YIӒ4kYΙK=gq:Mqii U:Agh;;73 F f$ٻ(8==+B2YLR3nJ , >{-pugDǣ3OM:ߣ KσnΊ,5T*wdTGZ#jowIo@{Rؕo:s{XV!$f0Hh;Rϵtߪ-F?͢=wM SZs۞/j{jÿЫ|W}Ae-T £jU@ @G.0ؠ~yĽD8>S7Od@4(͎pn$"0Dm8uhS AX$4)D`D '^(+\?(3Lp\ΐIDdfҁ/]D9+@ڤup$`q{ 0O"u> Z=wnbcL #ԏciY9j=bݠF.5N멫F, Fjj@ Z-VԪGHyec_C>c }j-o.Jg|VpO,e63j 8ڎvua'=1Gܒ#|#W~Z5~'ԼZ+7TZsAMT_{54WE _zZJY`Bu yVh^<< &i3 /S~P{}L\=(J|L/&: Q+`Ŀݴ$hdwa["-fiI4 4I.( ^L:&R|o-K\[%I, d<>ZCd}#b/bQ EAtV4$"/$0Oc ?aijȴQKksA!\SW8qigH@stNqu\q7M dAQj*SEq 0A@aN,@"qI;"s0Dl[ҸW/)E2!0/ PiZ\+s>mPHGJ/-|N bĨJlTFp5}:K)0=$xR0%Լ qs+A I鷖5L%Hwqj V\MjN:\3 h*n[xqTLH5͐לL("=6 X8E\i{s{&SVz:n pA+nHU^T|FϿN?|3w/m[EOfss\#qhWnW+5]}wk'ߦgɿU?}g͛~׼yw=}ʺ;vjEM /Hu&hR8)Ɇk8:)Jrƻ" sq'2 MP:Oh2 E+Q!{Ld?"qwhӓCg=Ӕf3o&>@+İ%qWlcvx @q tb8IjLq0I}צIh3Ԍq༴T E J:1kscsܗcǸΪ=+v^sN:S+n͢6Zw4U,H $^!**+9nϐϑHR=^! Ôprȝ=m&P\ku۳˾46HyA׃hZn֭ `^BRD@`&5L@zAsjbUG7HA-:|V ~|~ "JH+K505 j "tQHWyI$/fGpib-YdARH]ƙ| P I@/dpEhSԌ1tk,S/p?Ή//M Ga#V KiD\^3BpϲWoǨZK. L \q 5Nj}T@KZǞZ|zck_&07w OYsmGۿz{iֿnWTۼ-mdٹu37яX{kJǿ?+oU^.?jCM5Q#|]TWrۦve9,ESןzdE@ϜT$(wfo7xܶ 3g ޤw1]cwd'ɪ`Y'-"-,2eqLNkRo45 6J!USǝѧ0ald͟8쯛5(z^62g$e08. t1xx`aOO֜w9ԋs0 QAc;VS,<Ĺ J7:gw- 3-[B׵um4VI R[qB)$89K(CE9!!NV&==D !$5'᷽3E] k9*m6IKh{7?{aN u=˫|:=_ɿV~UNy9wKko?.~_A / }/UD%gƿ߿J>>cV&L0g`4&iIxYp_ -MMՔ[.xۺ ۜϟ{Lq/<Ib=u}Z(I5ԭZ\ ,9Ӭ7ΠU&3W1x&lٝY#M##5qT6DAX`ĵߍa"};(%o># `p9+xQ-vM 7+t VW pNڛhUVJuR:,-~2~p2@ ;|H`k!T$.:Ai&1 +ag&+v* I4`"{8֞>w$A^(w8E-x:BRFIyXƵe ҹLpXz~B IDAT\Na kn⳷q\[ L88yy|,}đ#@,nvqy|>iJH| -ӬCcX?>L/MqNA=憆Vaw.2@.)u_h3Wz_Pz+n.0,2_pxm/~Hm!(r;$^:gToZOGj^q_wAUӝTx~}5>DկڊSeTBn&~; ibg ˞%$Q%pvrD-0 nL8O4K +eE{J.آO1@ӰIk"3.&s l"xI 0s^$ӌll{θDB hA{J;cTNJy^@B}yQu7c :mnФ9qdns$+U0&e X0T <KS(q͌MO̶(uJ 1}yy}xy*¥t*f<{VAoj"|Qy7WK>!R^w?vYiz Z~jt}7'nd#k׾ځl4 Klt yO8ڎò?ُ:soQga5{}zZ=J{Խ9\.no^Au*xQYE*joڼ«඿i)3fi7'2grn%p6u4>/b$-mq\'f;W[ڿi,c;@z4:7 ޕ;K3mQ@xKA;koи?H͖\fX+_xJ\af?g=$Z d2~3$-IYdI7HOXia $-,$t 8Hܘ3iO vo\0,:s^B@at]F'mѝZ+ݮMeVڱ<v` 6D%Jʑ90IvlQ, T42qؘd@8D:)?)[FL»+nOZ$aǥQCLIJvc !=~X"@1) @N&9,x&&Ҷ=% ^ !҃sn6t;N肳.@K=8zWWr 9i O5Nků"!>j0 eq~E;$u&X8Lr0׬] &p28g!V4,>,ta l0Q7T5Je z5(5S g%j˸s&A R6S}Bĸ+::ͥ- {VV41 ~'@8eqp/F o$ Rw4LOP3tWpρLфw$`L:yXZ"n<,jKT]*߮D +Kos}\y zƷ\RZO_짔{iuzW֯i *ڃ*mf[vYժ(h۪zEKEns$y}_M'z݃ʚW 8 cYbTk \JSr[z=kG5oЙy^_3pmu,iS}65y[QYv׬gkZOZg>_-YzC /?j}%6=ֽj@+"_&;M ?Ț?彜ǍQI$cu4ei8i,V1inbmKx[dL]}Wr=6* q=)a%LQgǭ{w0p``b_7] |Nx+ n,n @(m-@ב(A:.n267 [^,R@ԅߤc/ 3BvmxNU'a=$3~,iN9ꜻruU\sӓg,r4 D $ &ؘ``w  B]_{u`0~g]|ϩ:u~"ԦGf@"rnp䳙{T_oaELڟhsnk 'lj[س?5&cR" {~ @k HRu+H - 8_*[I6c;OI{@@,^sGwF24@T߼$Ϟ1z9>'4]5܎qޟCG\jP ˲c1)vl FHJYNJcY?y+g~5xZ۰h pAY4^;QpD)U3vzYPZlǬ #q0kyǖNa;c3":bQ ~ K |!Zo*i=ؾhtHS$7I`O4 X> I @+pU<22Ʃ 0Ah9Nx?B[ {v$.)6=j 猶i3>[6~nHq_y6GD:{sDG@Fxd#܅à =X }`F1* 4mƉgD B(U*oPA`yLoҷSA(QU_a׼Yجҿb'_xzynΝTN.TGNHv_KD38WV-w o4o?fSWج~ 7(} ԼʪkTR02Y.XoYx .Q@5Y,s 4bp1PLZ ]2 To;ΝFܯ*/:67I@5Gc,MDk $EGg؝:ёhρ*]["GV= y\#3(M0mFKz`y5J zYEJtL[e쳾kt4!5* lQ^!@k)*x/Hc~}7/ٿEhwEN5 MY m$vrIɵ*s;9ucc}gϙzgn~/̺/V*xyӍT^ P5 oRypBy?0Ğ?ad肴%9Z;0# CY!IZ>&reiS.vLU5#-QQyCGfr+!iOקڳN~g\ϵfF] kX\~i K5q~K: Fnghͭ} ثV)vaڶ9rMx=d3Z `Xc)btdf&d D#aP1u,e2u-if  hedF$ >I3ƙ]hs p6WNZ(_q8}B4x.B?~^ڎ܋Ј9ñɊ:8nf3>[p-¾,$=mϱp]-7ؖ%;L̰9; ߶JՇY 0 0 Nђo6OD4܆)gp Baum_VIZ`5HK$;d`m.Qgnb?{4:I`°^XoBpny(%; ^ kώFyw=o>#39Ng'1y]sk9U]_yNQtϱBKsbsU͹5WVO%_J==_5C_;?jSm/صo^P*z7?BEeSA(XjGpw .SKpa,EѾ xړx$!2Ɗw!O٪"~fԴT/bؚW߇ϣ~eܯw_ fDLFpGn dR޶G-ܻNEː֪EYϝ<*@l 9b- ~hVG6#C],꣩a=,Õ(N61VrDa5n"?KRd?^m'(6g87ґH*$`-&SQ@/O Ä16$MOS!kts<~&p*ֳTeLR6BW;0 ")U xP9c@e@n8!s idLFpNY2.-j:Q|CTGcM\g@ AEu oH@ӣ/MOk`w؇O^M tS' '@'Ksc?"[O׷]w߫?r͎}SoQi ~bԽo/<| _(Wz Lyg04Uq5a1~  X %p?X0܃/ JgǢ6ge_q16af"l<]ضxXc Ϧ:DKSݭ<ol׹N&pC,4Z!x#3GD Vbg5AV_T+OUx ?faV)[7[cY϶Q. 5Ys؞0,ѿ gA<&C-Rl,%4z $ aa|&x5yM. eK"C_6>I-HѬ'r\Y"Q1zx~vM!w^-_VH-\s~a=8\n59tqQVP{$OX'm{(B \X\BλZ6DŽ%x]}w4NOsr=詜4v3_ s(zѓ׽zhxy/^\{+Q1>& W)<䟡]hh"%2/C?}X,"Ɋi9w1RR87UEwoPxtmq}<" B85VD;a~Cܺn#EzQdTTw XpsKUTt xrOJK-EN#-cfNScgӻ@< j|/p}4rS2aHļE-&]BxGYY e\v&q!iIl3L@uY Z*yң>8C&HDi{F,MLi7D+ *k neߪ; Yqu5(gfq?+ZQIHgŪ8Nq.3ebkR'@G䃙ż7=0#$ OxU@@pj<6Av7~ a){?VT~[u?1?owWl}t]]wTG9>Gt^c/1%=2__]kk/Zd6@ݻnԼFiTZ~J#_V/8G TBy;ԒEyXh` >{Kȗ) v@,&Ţwֽ @ )-E{afL 8/l tWm,f<\ 0W=$f.zO;fPeO3]c`mۍŲOF b6oc4 K2@Tæ3`IjI3#ԦwS-C2xߕ Ρij1q -S T{(o;]27s?)3` ku(XyrGVڲJX5Xis o6RM#^@pv2c 'CA(,cl\; Av .,Sg$@X?[ 쑝$Wn*(y*>BuO7GG_>Xgԧ?ksghY$GR7Kv!/++7s{0~oe>}O솇>B%;)(z9@GTQpHU y{ԔMMlPwp+A*~{3;S"X R an2B?ffyҲ'a,~] o~H@Mxd[byn@Lpf]zs*7`뚚%H岀΁ӯ 2c/";i}X;dx-p#~JD jx,x^[[QgNyVcY23tQkCԂs)Ұ D y/@ޥs:F[}^7'x`$NcϕT PS>Ifj95Zv@ksj 6."u)i'6X!&iUm$`_C H ꐱE] U^*@ NyjA"@`2\[i,@y<h_L-91l'EgOpm 09&z,עV}9Z{Axv,- 'm5_=V،4K&8~qJ @$$`,<gFPA_${ }_?5bOH?>Oկ+}gIK2'7X̸(%};&*=ڶ%=Ȼ'?nwlz9{nWJ*GP,v :j@bmw qXՇۅ(Os?Ag S`+ِD_߷i`rCވ]1= 爄7Y m ͞?,{+{:v7@G^6Wysї R+S%?J ca!]k Q"bzw5{1m"M;{3 {ϛ]!Q;iLe C_U7os֛ li[BnMFi$7N$ua|1),iryA8E930J%jx$T\aq' Rk"s!j J{+x"lYo6-=ÓZTWjaTP2gښRdP9MuZhӣjVp1JDTp|S Kn(L*i6#Tn&Vu:o4ļ0j \C;w 7 UpT@j4L)sk9u ,TpՉTpJ8 DF.,̀@q~k28 ha#i@2RMCgYxfZ3y6EFR[Vs3X~3؏4^+\&Y~<&Y8Ra+ԘFUXGJǵ.|y DwS~)1 o#7[zڻNP*ȱ+sr`έ!A'$VPݛm[Ѣoyoڽ_yjƟYMFa6</T~FQcTXzQ9 >;M-jE9σD$<p%. @vMU 0T6p`S,ծY EZ qCTs֘FsZa/k~l{~ =cj^\$<6`*(<Ң3TU|D 穱Bg(~r1-dA8?&),DX@XnؑeCrkc\e7?I%sT*9Ŀg)߱H]K:if_rlxQ $i,<mx} aу蒔Ձw{@u5뀵+'5|dg܁s#FUb\ V p!#+z _V$~4g_\ žjV H«΍PsnrA50 0 wQ;C5|1ϯ箆*<8@ C8R6BnW'uZT `gb5Zqt^0[(cf1zhB=4 }Ԉt;D[%z m(iIE?-R +֣T')_{1F5r#;=> oo>EMgne qgY#0<#-\̗O3 2 p c']r$_2"C)sP@(0b*%A.lQTܦ}_$_W:/{Iw!nU=Y_򭿵{S_>+|;Bc;˺b U-69^bcp_c7{s{o_SS=#_~'oT\~E%_Ux\G` gY N'jH(Pr 1' iC?K2 Kox0_ !^+"'?hŰ axxXTx**Veh{m6]tC0>?! lָaa ,ʣW}!|LS}HYx Kn׻`3lmklKUU_=/  tg "qy첮圫^mGQKn]I*ue@tO- s`]CM0vL  15OSNʄ(r'6ak8-0VcӰ? lw+"$)ٶ`)N[SoQ{_Mt$2V7?1_{3s'ݯϭ󜼺V9* p<%^27>M9<>ތA_3g5vGT~`ˮe`}j(:#9j.H!>[o`3"1?#_M[acpX$DLluśc[`, Q,.\2gfs,i,XT'xT,exoKڎ羻6見U<~oK6Qswb{oX/?cw>vn̿k>]= {/)8KUE,.pj 䝥6oR*Y1m< ۏ % 9W~{3b v)(p h;&\̹>xF+\|>]:ENk]ү}FYtބY.:gocHF`yifớᅳ=2,,ri4A"t\VC8 |༏N3löDgׇv!Epf@J\B cgc?ۧ@r[iU17(@ uO!kޱ9`w?q [!2K m=sND g:il%Ҥ gܜRh(stfA6gyc$ֺ$@[ ΁pLqw@S(q*(RTR[m%=A!s-F0uxt$ b< @3uwlkqTL PNS#f{ZYj׻J1d`Y&h40G,_34.AtnLXl;gbV,Iy{wpJ@ePW]f }ިGf~~]n #wŜ(̹U xBNnZ99+qGhdrmfSmF㩿[/vg ǯ/{;(PxE˹߿ Yj?@`j|T_CUE;0n jd+"I{>1[8?p ${Q|L{ֈ+uԭɞPD RF1C𝇭h ~CjN:Y=tdiߎҮ?I[~ | ؜R9A UXd˹_2Wc1%LR 2њi ? 0 \XE|.ȀeIQ|,cBuR;cH*= QqdB>F7ʀd@@@Če <:I7bq\3JF:\B36"0k "H a8H@$`I@p& 4t@p}p}w G)_ Oq` `TY&*~ U*+_EU77zo?33SF{|]{9mx8 p" |r{In7qrDӶ}A3yc_}o3X V'+]=DWxW.:C5o1lS `s2N5 7> /G3~ ?ˇ-Uxl3XQ^>~1~A0  Qc  o1ӎpKDG@& hR,_Eqџ*`=c&{* <?2A鍪Oo-C Y8+zgl;R,{(9f|+1 &nUgVp $+o$wDUxt͂, Dc }l-KژU4{  r;i`ȓ73s+puy2N[".psQ &lM&ܳNxEǞ>yE280[\۴vD 8$`*3  b6M33 J=pAӢbWU^H@D|:E'‰r qk">XFp~GpߊѐX^Ҧ H(1̤ {fh0H85=O2 Xd@h`ƃ 4D yR;1C,5yʷJ%-*Rq˨ר-TSfx TUZ/x*>Z٬_qO⡷^zGMr*'5UPcp OOncw6/H|77ڞk+3k?f_n3E/+`gj_Ƚ(j: OXl BT ÖI/`VF~VyQU4w\Ǩv[@I`AJQ M;n`aL7(G40q *OйwG&QN&&cOsgQg`֗{)?xt2 @z87{{Z#m6p50G`ϑ[f|ܗ8y0u4G8>w 2x?t1! Իz  \ -8fxr} <|p\G2oQ}P6P?A<>rǰ!P$hS'k3y#&\6n ^2ł˔ P&oVJ 4Ě1.xkIo:|LhPtpN7J먼_dwC/} Zc?2*?=?b#kk^+K9=9fIIJ/v_-2뎦9WWhyBOy#cofgl?Y‹T^xHTW` .R=@uՀ(6Gaþq<7D2x4poaö8O<ٽ͸ IDAT5F(uYo9'lHi1uI1T% eIش3ϕr2X唀f48-h=b2.iN+Ϟ?={]4Xn$lg? GW6D;o4YC?@[WnTm6>>)<8Oe8߼9;5X@&)cqNSi&62cs@nq>PW?)=) Cr{VeXCŗ_SEގ݄7GQ{G'd,̀̀g}ʲ, pQ$ %lUWs]=Z\I Zy1c sa,1, )xEӎv{"e6<%#B 2 %aca+Yca5S`Q%HGFv:`j(5H=^"WyʠҼJ A a;V mmdZd-w8-:Z:muv:muGN*]͐ \LsME)J$  @E`m b5BR!Lc;c3x~6BW8nB+/85}(}!͎M0г[I- q >ԉǸHVM៥ w-⺟ A4)FoJ Tw T[@(ys:G>oކ?F0_~;2c9,nONnPci5s\Ҝ`m{Ne|0g﬙zaoK_o䕔W2*, /?jxPEx_TDmE\_zOS<@w.cP:6go>g(IDpT}8>oBĄ>=\2no6Z`Πv,ZX(~jW\`6v'4EY<6@x\0"2ynAx?s:mM.j ϿDnERL2]4"6V>]di2G^p EÂI:dg#2Q=ck9TTZKkJRJVՒZVwK}s;ı3$0aL$!J0ܹ [8^~0x}dN栖>Mg,$?Z ^N(UCNJ`0ȼ sQTkq 8u.wy}F߈\h?8f%qvtWPgH 5 4*Nno6q`Iiz0j wh:Zq25[%eyYqi CRjMKJ/rxlI)Uk |RV@ x%ၗ׬Mzo{j䂷Waoqoڴ rMZwwk|nQ#՚5r7p>\&r& UhSY4z'7 q q1Ūz<ց*8Ԇ v <0 (*hl>#w&-sKط~.}+)ߒR%:r(uŇ0 )&U/J]&W={ 2K@ s'bK@`ܮfHj$ca걇Gm^{􌍷axVi!̕bb:%CAn2kEΜ-wW,:۝z,3+ݛ[؛:uU E&gaXmÎ/߭F絨k@&1W3ECE*',>q3)pvooW3S(2` H/W3C-P='a{Qg`wN`㶽)E y)O@ xAN8\N2?_!h 7] | p`of$OkrY'; 7/@>C-wfړcnj)6V9qc m$? tJgG# iXOgSNu7A1mxY*l5Q-i 9sq. `@rRpe|i_~YQN0H@umx.`]"ǥkPFQP_&%7 ;+N/. }K=w>{֙t.ú̺8"GKrEaV^E5scNJ?ȯ|$ k?~.z%yNQu)\\Ei,"M[RಔKiioi 8gd $| L0x>,{SӒ e?5ң)(@>?`ƅ21f`WBIxuXuMG\cߊp6yEF4=0(6II:2gZZ^JgBJR>iw Bߥ1lˣ=Co9[oq.jޟ9}vfў!##[vCs6e:0r$?qD- $ E^o9|cϺN&? *=Z#~OLLK$"s\IS$Ak^r)XcF~տr$hc-5-V_!CXXu85OuDJ'}Ndlƨ ߥ " ɋEWX&UqieUlxzoԫ48oP68ofgKu,#bIg+̃5FSMS'@v|oPSn$H6-|6IF$mjq3O~$ hns$1lw6$tp`p\ktLi f3z"#9˒ȘK @@:@rW:i ?-RZXVi,RRV~U‘[:ozWY~#P>J}[ֵF]ڈQ>= pt9|_\2C:袼%zebNBO~"?4|O_g^ (?jn#RVx?Ԕ\?4ݖڂRwߓSRޘ"8yAlO?5س?.3~f8W?'uTdxZR,{G`qN LLHhȎwNyhca짆9<8d U1apVB`Tn1sͅuO7nw 4S3A ;c&tXVmH9`;V}!?Co- c&?pM 0p^7[ᕷɎb!> ,Ug>9zPC˃x8gCt Jwތ(kA Q(]$ ꚙS@V}Ph8ӟzgYP`]l{K|c%]Ie%a"j%lgsxృ5W'@Ur߹3v_a${5>]as! {>W"tB]F+8c}Ƀ* zZdC.I/*-5ΨTUZz\7~GU$7}9i4Ǩ%n?b;قخvI?CX?c_ $D`׃ d *kW`in@5b X' vQ@0k%8wGщbM9>P!apDApQu;% T11-)W$^qy.}ﷃ5`l SQ=gQ8+540Gi%S?P՗|k};tao߿?{3?/]o?RWs"oSPyRUi,! E`pKI.lK /J{΂Fya~F(PTx҈~(* P!Gr( G4H 1?Fey>`OoiPV&Ϛy4a;!1$n3jguX+kJ#Iř/;Z pdo>=o Ӧw?h=.v4H$oLg6ЯAs22d 35U[jbxO.}ڌ>|N/ʴ?2,1+)֤sRϷW%]9f;9֢ʟVkXz@0cvvs2sjJIZv⎦ sC.Ԃ3cAN@<2iaovu W / L*ckXZ[K;:7t89VcRAզ#@,^i]:}Ɯ~c 117!1YM[$"0a خ@J| Ati,8GpMhds ᜏj/#\ X#0 \zxURR $Rx P4=- eo[RU~Y/ Gn,|%ǿT>?[O/?rꍇږ7&5G}qoJZdمMԍLyvG{Ÿ>PW(X_?-/xNI /J /Ice-/-W iގaS}9xS*45 a1U.vMqfbXX\l)%LSY߀">VorV0qf߿!UjѺGEA8lxb6MI <0?Hʰ0aaf;JcװHgnGZ5@¢-wl@RoMœ1eac`R @QbBd^cxG.H$ Z)%u {I @@,9C3Rk 0b@9Fa4S^ ۦ2; ;3NR٠ִE;:V^Zrz-0$V_ j,O2@1K~ O@)"&Uc+ i |񞔄)tl\3$Kp,Qjw8o^C /9qF` ν1xc8_'pp{q3 "RgM <ՙH㼘T $tdsw/.)DyZ gVK%t .KӮ1?O@a 'prfoBTcLC Y=8_q-eWLbA谈u@1-\U%&%; /RyE6i*{4c*$eʝ[o}.t?W{w~NؽJf9,6򺾐0jWeżm;~[g'D`'ʩ/#oyq?}]:Ko*.MPx[o?'Ź[R~6zdJ4zӒv=zOf(j}3JKth8(%q?Ü!d!шZ ) 4.Jkz,O-|糋ƂJijqHKOj[ W2tJĀYҌS'E?<e257,s._Fۖ>[fU,gW.RõNFwc!i|b߳ceI+IܖLp+Q_LuF[oMm>a Ǭm5q LHoLZ9=!Uɂ;` ^3ge*in`ͽAp%vl7o9.HI't$q @TakXR 9s~RN"˺  x l j%ύ+ `7#>$'8-C!C`PFArV5gUror֥$;.JYp^ތ5p\GĠ \e=߶*?VݧjW?䍽G߸qit!#,(pty]^|HֱpCV7={ygO6?k>wVeK9'E|E*NCg˟k\rK#8 M4«Sc gV'w%?dOlp^ô;QHN_,B2^=~m% g1ǸJfQ#cb7m;w,jsϝ(U-m]Z(m eM[R %EA%XK)HVxU3` 9U{6k~FgkW# =zC8s]gf>[=2vea;g.$HCBg@gtX-jZTxk3v2-˱?A>vz';#y u-cc eq<_ʛI/0O'@:M1^x/3j9(-x.$l @ѽ;8ڗc~4*ҡj\e}8txO?`6'25͐1:. .l۾ jT2}=%'-X[Ăi Ȥ3.i TL5 xy=P f絅]%o$GQ2K9H_꭛};?wqcp@H~sШX9 n/)( Ht0徇UsAb D)^vcv})-y3֭<%KS5 %WxNvh< 깿5k}?卾Z׳U=Y2@GddY,%<6},v/wCy/v/]o;o{9yӝ@ia%5ei,.ŏD |e) J9<0F]d fsg Cư($lBI0 teE36I8~V#1<_х_6ճ9=}!@%I` CVN̡^@]ѧZx7?'&~X_\u2{ myi ߷ :kO$_Kw @Lsʝά7 mIV7vqj IQo@ ;0Ͽrm`Ql.7)Eq$3 `8?{1jc܉&~hոSwdw~%6<4QUYo{*}KJI eehtVAV s :Z9z H%oRJڱݯ%[ 87\H]lK?{`;#1YN*l=а9^s 0S )~甒mĕ9O`E@~\ޖH坓RyۤiixBZ*nH)(<*S/f*TϾ7ޖY(2GÁ.K^=4.?g_@o]o:e?PɓNߔ+:?W4JiIT$-8)Y?o,ge!g`NqII'5RqTԛ10Q.&Y(DU1Qz?Jb<> ȊS509 I-rXbq?qCΫk~t-nӶ ni`v3ı0Rsu eX$+0RgF2L K+l ۥof{ o}'`~~s/+#!k<8z/&ަhC&Jndx|:m_O6ԋnivI$JwL}AakҰ9Ar))&@o=QP]FmPp^~k41F;kVv `^ĶϹxQ jpl@@"e~'q*MN>>:2ÆjUw$>#7qotb? 8~r \nX`Ix32] LcZ:5 ЦE8gt[Nl f^qΊzQ1h?E{QmM,t[1i1S ƹ~9gBֳ  2 Sc ULX`L9 ka`?a5i%ؔܓ gqi,z4UZ˞R_~I*K8r W^ <='oۥw_#>>wclVqhU_x(]^VE좆j ?C?lտv{픾{'_-*zTʊnI}#Kp\6N7HmM=#eR(-i -(E/ϻi~q,)x9ƲaqJ&BI(9Ǡ)RcM@Sc["AxBZ |(+Oa1g3c>sfw*8bݷZX,Ew'Pk-& ~7 xnUVLj-u_-=% :A k_p Z@ό=aHsA L౔Ms.:?ӝ1@Vs8)Ozs(psAEmkg>̥kOCb>N:oL*Ò@C I`΃Kd! Py{@rضx:lg}T՞~j|_'gAurX==^pc;kVO<=_iԔπGeʡ"ŗe=&'@NX@m}iK~'zNeP#mJn8풀(VJ}ۜ.(β i3 +Rˉ@TNcbӇv%Vr{tdR:Ob1س&A!hd'-8#PZz5T /xn?b~=4 0"I`L 8d =Y@?$#$`J~;X \N-0Q<i/{L+JM)+9p`^v] v~_3׿5z`*+;2GŀG݅%N WeUu%j:o'BN?>v{^tJr;,rU*"?s8yܐ W_\0)o9𓙪ܞ VVs2Fa }@?JI*g $Ψ؈e, X$Xz gk)x#QFV O7_pEssc;+N8. %eKvgՁ{z,7p F0!h67> &A@pH]1]*ceZL8"g?eQ_cH9'0f&ǥB)$Xza5[I,e1<# Y'x$D 4$ 1eM ? Hj$` $ 4)z]$f0P$w[ <% %HG)ץTH>@ї?o~`ϯ"{y.ir"uYr]^w ``(SPЕU14`%{~"_iuz߰K@[;E7A.Ke)Ӯ< /xX*s/KYx_Jrv*gEZg ? O-~s 9cRZ0U01HS20 b8@ E /=$lmb],bT;p sDHh:pY,]p6 KV o`!؏H&k]xs讻ww]ULs{Ϫ]'Nuwc>w>m žui8>KttHEq"g3t< 4xa*Rpya&L?+wñ5+NZz@A=9iFTOS^<z<kWRb4TӁ. Q)ҎF<(wcPO1,xm9kuop2$3iYȝ𔬅d#7)٦&`=dKH`_Sd(%cAF '4eȚ(S &4@ @aޮ\7K}XÞ7k@}e*ߗ;م_q y?~/͟@o}҉}'h]˪)o2L>.<{cƉc}Wn[@ߧ~=:5Sy)T+)\W↑PJD5rKZͅoY.?|Zʳ'_[pVzg/?p skބ]O5Xut)[6dv(, kL ?E pgxZMYFC : oT`P&b k"]a~Lq`K6ҽf0J(/H-UMڎwxt& ЪE| }F b:@:e<? wN$x]'&%~Ke?pXE -AlhRM|:lM{H]҇ށ2g+QZZ%)M)v{r x r 9| $U]2}7aUqLUcH 'td;^ngdf0 ګy}2pN ,MTߥ:Կ`%0LN)!uF/N{T@<(O\R Pu:{Er6@KgΦ 7eD c~eD & qd rutQ d%EL<)工ĠW|_cq>7-_33Y;Y5Y* N2z xty]]2ٮRUOz;ֶ<7ʼn/?P/cԷx)W SVt !i^--Ƃ7HU5)= #5 fLllxAigeT܎d@, x Yp x{ApY Xәgy v.tb.//a`$ .-gp!==}l l){=(Q _L`#k/'u!6U v՚wӃ߱u X/a[aNCa,"0A@xzO$2QLUK1@gP[1xK6x ^lOKϸ^HՁhY)S8Pٚ IDATE>z؍J`Xa= e <cXĢVp;1i^x Om? cqZЙ 2m `a &dv MN.8'Ǖ!?+vKrՌ )1==kG@Wv Nmy4IVc.Q.o'tCN117*AAFC:8H%.|񴔁T+ K}43-̇`M ]Y̛1l{Xi--q'BP6}9KҎ5$"|\'TPP􌴕<4ߐR^/مW^ {WJ>Q;ShHe*23uG/pCe]4NP.z˹OZXp]ʊ.?ZS%i/&E/%y@v'my MI<{JFUwVfag>`?Y\/u> cɴ:xXT1xj1Wg@a.q8ϼG;nkә@z@zEQoF"Ȁ,xF-Ji:._%Fzb-،bfW(D2CmbXHS^G W*Or 233$wԮ?kԡ4OKEr-O8I^ P@~k 7^3mN`:Z܄]H@`A=-Y@@/ Iؗ7x-LHQyhgL cIs?5!s.P} 6P#@#xl Ϩw`5_T@o~>i4u0ha P#:M֩ 29۴'^Дnr7pf%r  ((@{pa2)M8ҍ!gAӁ Irt$9J5l{⌊OAS(G`Lc Z:OspڌLPkL" )3s V$$+)}[ xH@޲,՜Q؈FBXjfL`Tk8atU Ѡ&+ ǥ pdA֒ GKS+·~ώ<`g3[iOc˺cYlk,uuH%+hO?ػwhzs_4[U@O|7Wr *ˊ.PZJ/K{75VMi?xi$9P D`?eD>8љm:{ Қ 4*dsے*Qg1` \mZⴇE,?hhoz]p_#tu< 0b@~n_KXX]U>bHSןr^ӂIAu2l4tlHάo\/D8g7pOyM=}`mx^`91?{}x5_HH;bͪ(8ώ{)o0>.ޤKL$$@9CFz%K5! VNA(p"0)3NJpf IdS[vp{ZlOxݶ @(@`H$BE!F5P\qǥ+$ -1xM[%Y[IYYX +X"GXb@W.xNG'֤vܓRZpM x<pK X/yw@o>@ϧ~NJ=^o浍Kn'Տuwa)r+j^x{?`~?Pɯ[?M/e=jnw"EW_|-ۋGT_c!{Y[b|~ZË%fa O0| '5_zPp?̈e$ 8B`,1 N?fO}M~]d$ :%p͙. ol #xtna@=* )UG?SQQ,>£| T;c;}ߨy /Ā='8k>5ԛ܂vSꘓI k*f ^I!l;QfoN l h& -.$$v#Z/OK? K~lۈmҪ* >2p^t!_ ̳kbAf[ A@.~X$7%\;㬟L-*'Ido^5rѩˎ+Us[]q ,;)g ;Ղ (RR,j6DpZ87z~0"i +Evq,H?CZTwh1BIR-ejaJddˎK#jS Gð  ցFeE ,K}4 pR9'%#2"Ob,O j8)+f5#L3VA%i. r%;R̹/+z4QnKCU*=|*|_Kȿ@'"hs?{1ojcuo2\꒑e*/i|>1Piopb@6@'*(s 5֝ʈJ.Hcei-.G1w')؆JP? CGc9 Kjً2"kHhBsdTi2k'}B?m"0r5aKNTl8fB tlсNze-wz N F;F@9GӂA^ PQ~*&KU8B<}W]M/pF=Xx`O"Υ繡$IYHIN@y c_Ь35+7K(P7#73 8Po=}]2 7-~}%\Ϩ{I lU[ طNs(f3FBc=B@%n"mzMQұ: IY  >׷4 %75ШJ,FTA (p5 05.`~9 C'z**" kNj4j`Q YI'Q1 qI,8\jLZtTC8w.xi|/V8p* E-rTLZap9SR`Z@'~֕TIېId,SX j\ fkh<8ט84V.&"KRMTi-RZ:C),:]tU豗w'Pѿ5N?z5Oee6ÿ]^7( UZ'|GB_S9տׁ~׉H0Cn'_OIz X[eFud,vt:~-kй5P7V7q}o=IfH@6= RIgD=)y=_Qi`?-߬y^&oTZogB+C|wpX(ht@\=MrEM[4-?8f칚'<`vik uUI^I/;@z1v{K#H\lĭЪw̴B?Sf`N1eAbsBŎ hQ4?waI!H[aw9iwf%+sf<%|m#],:™]&+q~µET4ԁS @Vi šhkW Q|vIo3$M8a5)u A1'd&88!e+Fԅֵ8#gGzûHXޖLo|e1wZÓb I@R8J`Xo(--%J@]ĺRY4KǤԕ^8gSk53` .f^ixTG(Qk~5^WawWPM@ x as0tCz<=1)HwBi{/$~w?Q[`%9QǾK8S2 _p}o]?VOPӸ> Vz%s I5 lm >kgXڕpQU\'׬Zj: U$Nh-% X-֬T۔f* - GoܜIq,wm3eu&8༎6`O @qsB\`ǤˎK{`H؞aJ\+p(vU>!-$'?ve$ wB ˜f%7% YfƱ>^;i ^lC)).1tbAnI]]xU__? 7,O8wwWJB@8N.2+,:[ws@ݧ̮7ȏ(|ռQR 7A`@ *$%ygTeYyk ,I^$NDh?B#c 'd<'O@ZJm `OO92|?>@`,Qcsyh$X40mU;E v\]}%fHN HibdH  E:hA^K8]' `ǡJ-FJϩױ.w.w1v_+( a@A8%}3 R0c $>3#?P,zic\ok5%pGlnf|M r{(HM$μ8v5$S֠[~q̱w<8i]v2ڵcmY'c6I@ |9, ,6 jc .] K%I'$_. NKUpɍlKg 8%;2U. s u%2D`6HPx^5)\RT&Qn\2ywAUoؕ@ h{;oO<Գ}&j 2v8"G BdYEwxo|o} ߂5@Ňi`woHRW|IT5ކEwz4OVa,ʙ޼Q9tR*^:{RudgsN0W狃8ă#!|?<l"0(?lm1 +$VY5O1 NIs,K6- k6_cu{zGGKFg"ZX79|C9_p?SdG@P/oJsmio-K;;%פ֋q\'_)]qa %e,gL&S `8AOg g`(8@L=DЄ?9X ÎrHb[M៎GK  ^`˚GtB6$knhG5vR*D) [:Z~Xmm Sv_ c_|i-P 6L]9X74w Zf\T/~(2"AQ#jcȹc5w )L8~*zɰM?CJ]@f%kJ"Nө LtM@\Ajw-܁ۍ[c]?(y.YRfiᜀ3Y IDATq8LZqnTV.jmXneĨNl6𝫪uЫdBIi *bƔ'8@\zdY 4~@`BʱTf$A-'#gWzAye4GR[2!J$;- \;^L&(H@'>8#5)ݓH%)Ϳ)5o4<.J.J1@^ۯE??Sܟ>Uk.o,-"uvL!Q$rY^oYVvI5{Fz^wX H`!yCӏڑ"ɒ-;n%ۑNd\X.3){2{3N8s )oXk/ x2L߼_zO}ƛm[۪W?J/`M*-* +yfԿBIܧk},y pOR~?D\Sqƅ>㛄c51pDq9z!ԉ  n-NT?l6iB6U1OӲ ϟClD?^1H)=7]&lH0h>)wT (1JBzZ1'TX;Թ~vS6*!l4CA'1Y|&G𹛱`o{gpa/Xeka =it`Ď pxO{ ,5V?{0UFT+5dK"u.P6IC4XE*LlM¹p| aZT]`6 װ&(5k_O_"k,oz.~rU@ ή{}볟k~*>}C/zx%聻m$4 Pt?l? {?Oh\5oTn IHd+qcx~1izҕH\tgn%9+l7jsi=\:xAch^+q xTб=`TK^MwXZ^tF"^wB=n>y92iy؆)hLR1L`c8o)p[psu w-jraTH_WBb\!ڃ]tUӅs5y֝<[8ިDK8B2xzܭt4EG*TfkwR0$ QVL2-U/ UΉ&[ Qx0+* `' .;MHc97p8R@|w4Le6N5iC8>@ ٝ>5릌ː)n'Bw煡 pEZ;ܐsM:@ @;>8Ї뺇=o V TzLp Z/`٦.@?``4 cg 'i` P {)]KT#T_yRԕq+TR|kwjf׿gy_;s=Ge,p9`n0Y.~;=rke`uyY3v+Oyھ7f=?K;~B%W-?6.Ty - SS:ש'|-8N'~Cy2x? sJZz] gAu_mHI`T܄r={;Wqw&hO9MNBIky4yyxo0*UAĢzLLSaް>~{ny/<'jYqXanoߦ~~p&+4 f`S2DmyCwyTǦq88ST~.KGw_6@~_z_O`tWn8ƹNJvr@ nBq+%u{mٺbvCi Hެ4xxG'~Sڣ?.Ox gş߄xXKF/2v$N;~Xţi IGXخX fIp. OP(,jh0ap&4<n R9Lqk](jZOgaIyOLܻ/w}0 nvj*I'9w\D~\HO֬x1o :@^߰^x5t D0jLG )z N c !9ovJ 0+n̠`bsΣ:\xQ.\A_/3 35t ǽ]6oYG< ;q9yVB n6GZkMBfx\Yj}?%`Qv=3L5j8 a,5-R,o)] vl8/- &`: 6 S#Ry[T"(V&?o6x_K?0JG}_P5-* Rq@Wme `5jR{`F i7)o23c ҝ,u; P~x ~Weo2/~I2EzoYj=EAoQ9-@,q61:cAk'!Qk q PmܖHKvf?9n׌vq 4v|ȏsҟNr)t謡+Nxo{C A?Wp/.FAWi7,4 C'(O k+6 wIw׽ov R OB=Y7N+s6qN\ӿ<%V?q su|.,53NNleO. f@@`88ʑ :,! ~ lfleDd"# 5f7d!:VQxUG1X +Mv|e[f'NJgUFgOL``)k9) LIRӌiCl ~Lh@7 }:qm{r5Hp us]5%o:!45ikh`F4P0v@,ߕRu 7Q1JbpJ(7/p+Kf{~b~ou_cO`~?z.(v:"Xs-0o~;L [r֏/_gd> I_u_+?K^+\Z A#Wd h@B- ()ț^Y rѤz`dVA7J)\)qȿ -ѯwbꄰw`1RW!+.K -l@3. $% P@OLE1J$Fq!o%pn!@8l @ fxMFkB\0?! I[anFwb%b)~V]< *%h0{M@ǜC.U : Iy9R z%ݧWF%W=g us(A@ q,ڂ; DO@-!M gTBO@/Jg?l96<8L8# \ @{xpVx yA2 aF")MttEs$PS=IMyU5XDt.rCy< ]s,? tĹ8P/ sVB]TqL0N -g 4u=I~<vP9+feS_֤'A&N#TSUp6{UEvzx~~ ̀.k)ب| e`q[H@Tx(޿(@5fOKن@ أ,5qsQ] ~-,"v WxX<#wTNǚ0jG€bvzCWRy+c,M(apI * J7:#_Qm6dTr'AEW ^APSx!Q?'B,@;f7Ey2"7ؼcAPVꄳJ9[W,8X|20b -z8!Pys9+E e,Pkf;]%x.hGgje!vlRu,+zRB<eM 1^9J1x .3&%3? ߦtnDӚjo`9Jd޿*x4H:פs AH yx'ElC9< _&{F~xr_%=\xp 8SET2rcMeJ;`S ᬅfTv +8y a= ^7[ W&Eb IDAT% q⟥F^v &Njs!q2$6h8ojxn\q?s_ dڒP9HJƫ O(9*W8\Ijh+fR `h1i uMj 6e+kq ZV{.13`U( @0]9A6@@3?FA} >߂ )\Uj/\Q ?*h < x fWOE)ئ`yww%I*k{W ޿%CpLxa,dYSΥV1$STh X`ā p<|7ޟ "^v@<\1iJ7u#`Bixl6 񖀓WCkU  )b7䯊4k+Roz@ p\SvZ@3K>(i\s!˽@{F6D, O!^u } jo0~^G`aܯ6s6{Mp\K#zCwn`PMz'5K4uj4vOv1Tx;\g\⊨7'lHRC@,tTjW\)@$)rߏsNjU|Gr]6(Sy/ a%UE?b=K@<n=g!@*$I@v=: $ů;Mfd_2I*y[ɻآMJZ _U(DA|_? VJ*@S%j,ڡ*qݻ~;^#/遧l_{j~k75.*f~u_xMleÙ!#&~ކSQ֗<׿ny*Ux>%*(m_ x=TH@9.s&"utIsN5@[逃<(\TCԒ3vs Mh yDdx.Ap, uVpqy3o ?gN}$8D* jpQ / gz7NiRԃj-RrɗjwqU@O#(|ҙ#B;x8 %|fg9o>|[u;p I@ j+%U _@O|^M۶$@}ٸJ~UM6!jW,UcO\-IsC{uKn'As$u!+c0 R3@Aj (MP뎬Ak h/\@¿I:UV(NE)Dۨ)j|ZK-٦-*-ع[Xpx[pzmh}y/g+vvr :Catrh{fg~X7c~/{ o),y7?.EJv)^GCJݦX)R*7@A.((.< #1}vg?~mC<9_g` v6Zr 6-&D~b[B }4#IR7ЩMNeT`eHY%8.dX,s΍={CyRlu['\yt?mzY֏"+d08I(MXs%|oyk )ߦ:xpXmoVV8:oQ*.Ss%j*lQ"ּ>;f~߬w7_۟yڕ<,[phe|6 >{ Zf[/~Zu_s3g<, D"wYiYo\,M ר޿B@`07p?~/sG b#<4Ӄ^-|iڀoca 85~C >MF<Ǣ2$32,;>'h[  0$YOy?MY&c$U)FYGlTc0On9WM%,*2>GC`Sx1,,~]Y ~#Z-ĴP+YDww_׫1Ua"9csq6X`Gp!9Rm;0sk6pQR^-pn`N샩-Mܱ`tQG,uI]P+s 7<7v g˭kP rgpvr;\29YSo[gZ'?j?_Y)(uM-6%*.R u/y.'Q PK% e\h˲WmoR Q?# yi/?fs? 6K_BiڴR|xlwB{h 7 % {id8(@Jp:O; #C:IpcqgJi !+3Km9rs/` J-8ڥfY@S_9)~\gѱm/adxV2`3cqf1 y l]&:Gk[X}~kf. Y*Gonz!w+z {\Q|{i0)rGz|R6$O"n`ӭl R_%X-<'adꏐՓҝ1V FVI>e= .W;ઙFmE.2L ܤk5^'<#PF2o^g6inji?B`ĹS tKÊ=`'?28B q ~ ɀ'}dGq ˖G'yGA)Mx4kAGy(B" aL`y[T` anj*y; {:ºXRpnA_2Uɿ||Ͽ`5#۷_qzz@Cp9~\.pZuTz~q3яzM+?Bfهh|)w+ |@#j){[( c(ÅpQ*[iP3pAPAyF7Dz^\eaZ5xv,.mV; f^'r~-gi07@> phq#ns(b[d kf kps{ptx x)ZyFւoR ,|sA@lJK/XVY .! 8'A3VV.9.e\\' ~8:<7ĺ_*y_?&!C5܋E&Ã2# qnA hekP`/:WGvD#2T@^V-5O"^Rfcwrk0O|!` Ezڴ`1Zvr1by*z12(ۀh@@p{{MO^sUuWCKV*;khY+;DU 5 8`)l6H|0xҰGx ЋϿ:tg vF px^WÁvOϦ2#}?W-[$ ExXḙi6X\TdQE-.@M:qצK)\X(`#W#%o lީMDQu v>H`9;,7#{A-n3 QsdYΒ[? Kg[MK)pu1{v'>x.{TTKG(`3hXkUsCA@RZ4m&=~0$q[Ґ:LxŎ0Gu*pqʜdfI+4ui=Ѐz%Ӈ|X!`?J0-^}gAgU :luZ"od iWzؽ<15 Qn*v V,Qx/ `۫ z4֎Ixa S?;B8z"`վ)*[U ( o(T 5?GP=\5W_D%WBPcKWRp|^ozQ/}V ?o~h};mqzK:%r8 8Nu;fUX(n'>d F3>EO;d|*z_ .-^*.Jg(ULU]s2ORK;)^N[ 6s}훆?!\aE;HS0 `QX|| D?/ei)Cp`/W+l!%h\$y`` e* f͜%,Ko @ PD^ Ά 8xN2N;! X794p!^͑w\y9i"(^5wsҴ}.' V@SecOn8`ZDO`03HR';%"2pN#;bCS ]ylTO0h@DhhQu:\Q`|.) _0 AAWa睕m6GЮFU`.  2cCwܰnّ@Tx2t(c x@ :"`"N6}*xj|T Ǧ(oM\‡(|KS}(zK͵PD m Oy$GHBIhY0.p-.}MG֟߯C@[*/5vԀKDXD"6S D7Ty~l<uT@Ae IQ;0@k\k& gɥJZd]z6mw:x`8?a)WT}xr҆9ؒ9͒#` `Ӯriܫ f<\` +$k3{8֘~-EpBXj± ` _>D* RX!er Ε_P9W޲E+%7} 9IDErL5zwenXY 1I9Jϡ~nW!t睼͕Xmp-IC8;tswD+ Ƀpn;q0d$͔N ]ZѣZ|+LP5F~(qTxaQ\h85qw5 pX-{TK) ip={@l ^mK 5ojj`q!`ŲARen7"=k>XflCbS`@xTf|?@Q [#o_g)T1PCG(~oX TQC>(8U* Gъ^O~W?"_7=n\rwJ#P3Y9{ n? ]69*" fx?ng~?RR<n1@!duSfJd/SY\Sa:wd̩; *1kXB3Xż6\0~^JW5Cw8/MF;p1؄)= MCRtU-S ܁$k |d*Z< PуP6sas *a"Ӱq* o5mRj6sӘ&Uf7* b0 !B 4 W9 !@>Ok6 dɲ7<·QWQRhku%Z׸|عP=9h1ĩBZ;u*p`AM,K WBw@\ ?f%Ѯb(/N8X/cZ+*͘T %i{"I4oܼ}9kQUK+:ϑ]ؾ[45U#Ia͕ng75-V :cx~m]ys({(bx<0&#CmF+8๦#i{>q3vQp T[^; Qlj6 \oٖs9rSGӦsi]"< k” gV0lDlNǨ$R kM @19(UW~?J ucP{?nP]U.LTZr%ѻFS/SgFW~lnjԓo;t~Qqx&?07 nB Gyֶ{LYOg˗xF'~` `2T @* Soz+@O?x 9?Y\t>0%n{4Y ?:i?=i'0hțp?~_:y IB0P-cf&dHJrme.$Ɉ{8TvIy/1$?߱`ךщXҘЇS1I s1 ˔Q>E>nCՀs1wɞ]']1xpX!WaMj)܅6!>}inu쵲 $\vɬOw hjb$F%9* 8~=NDVH={(aS~,FTkZxEɭO9C%*["6C:uSs%޿;1l=/Ml Vx=.K-.< ޶PMnxφth N ylrF\j*`@fRj8[8׳%g%.+Jy z%Jޫ+7 (e]\F=hsRD;<k9*Е{guӊkKa$Ľ4qYG8n*۪UN s 4T`T|\`<sZmx^OO?2/ûT{j{_ ዔm|2uRkGW,4A*(8b@ h97,{r|Q^'z>GT^'dmqxA Ԭe0ȡ~O[X x8g`KU؊&Se2Vğ`AГ̄ޙ1xcv 7&yAeȼ 6Kuic') 5*I1/y>P[YgoI#RՎPn|s^LtԸU=!siw+DکEBԾv{']I\& ^:I]ds"uO_M$<i@@!|.t}B@J߲{:kKEN Rs5E?뻸^'tWd.K؁m:xͩ.[3Ψ\j[#|ϙ@,\U4sTҺV.x eG*ĮU@Q#2WA<D*s5]TsN+*)py.@>sH3O%yx juͰigs}\fxSCt  8Y @M*: xU@. &7p-7qx_/hfu̓&d"hᩀbXrTYlBVZW6륔 vƻ/{og^ꡭޭ*%RI*.[-˲-ɲv{^ 5@ H2%a ,wsɄI0 [/>{y&O>m=ju7( Np`rǩ32G _o 060S4 LI1[G-qx h_6?`0HO{ޏFh_&K_Vdu.[URD%~Rj) s@>y&,[0j ЧV-Z$%*T.Q,:g^g;@xDE !B9 1Z&Kwv^z\Q͞|wojGU9]Թ6Y t 0vZӶsܲx/m +SnnF$+?ེzw@ + k_esBV&+1ݐm> H !f-np29P@lCtwéu@R o@ČЧc.rj.lB%~Lv kURMQבGRȘ\c0G550^F0.f9K sEBGTZ<_8ıPɥ% )5͵*͞Œr8บ-Fƥ`&L:V0ܽVc>-2AƲ0e瞤nӒ+xg),B. ijҷ23r2bfp2z[Fg/ߩ9zOއ^{<)3CR8Ԕ;Ay,٤( J.d yS3 ƃqD>ʔ\kX<~U;Hn./p`h04a4Z }xTZ+brY,[@@,A24[5˥pb.eWÓ95Äw^ i=&g:Ju%!d1x+V as)Z ܕ(|pגtaeHY.gm[8%}MU R^qmJDŽ ؎%͜- \ .ey+` lfGtcHV:y壉Y@d?9# 1Ҝ&,eX q܉&YfiϾ4Ez] IDAT`Ǹ)mJ O[d8q|St!/hawPU @8q^(" \t"[)%RqS%Ӹx:2sxg,ٹB=2tr]mGS)Q6OEJ}!jts(Ƽ3% ?;8E":ı^Uͣ#-ȕ15*@t@5iB@y@R-8gwTN:}l獸Zh_Znԥb.XYa~6 [<^ugDPW?g`c ػȟ DJ_=N=$/V}[-G7b#w4<?itv|231QPە(´́zƝ88\p"(uqlp#Zhݩ/Q9OH yK^a-JLoqɝ*5PcCT%JJ?HYo%_a(٠B@wjQrPӄe;&>N Rgu0BxN>Hz?b7`s3N IYML:r@L(g0cr企 eC*eҶ3ҾqYZn7] X7{H@pG3 .FA@eK  e+Kx x#b@F,te+;ػkRW|vKNF%zB!sIcJo|4Ú\۞ 4C: \ o"8v9[9oz[N3^Q*[r3p @*Gk+,QwZb |)E{dp0 pZֱ[\WJk6nS"{1,Ny1U Py8w\ @VU8IxXLs(PbSނ`b8Jvd^kZل-,xw:? !9( chІepl 9p`ıqſ הs.$\"=p4}I{)OF?1Wo7l\oTNMtc8)&LwIiL+-?}?n|H~z艗k3;FE)@3T]EuT]%bo)Ax{Hn!< A} ?B}L=.oRg7x^J SĿVkfL ,|0a4IQn <uL$Mx[x~l.ymYNUԯI*@{zzY g0,`UTi7+ԭP2*xqk"*Yx01`,Jm^LУN D= `Y** R?.9Nqm+SrkVȘm˴ 7x^`x` Ah2i^y/1 RTwr[)AstB{ r{1LER7ɗl(Rd,Пl6e|m3a@O  W*@t A iw<5mf/i]ŒWcmV@zE`m1,y;:O3JC+z@3y\]Y,` c \zqi]^wrF]]uu -#pp8wEd%@*sJ%fo i,!;_rd2ײT,z3.ƘfØu`i\ݳ@`h|ҎFG&:Dgٻ@ E,Rr2\= o&YeWmkڿ{ [3 .Q8tg0kJPy,%.P*vROQE;,4,]',{H*`t(\1'e KvA Ŀ $ r r@ hO 0_ 0oJ^շ2)_zw *ٖ_!%y3p`KO6)i</k@nm5%*NN tn@9Gcb@n2D7I DIU|6/P)\-ᅨ(%+XVed9o4kd߻ϖ2{H,gÅn[~_4.9 |^`ɗ6_Qlug![\e[ܮwggKTs#"gV* :xn`ťp}bVa]`xFf-s*].']9 4GvY\}Pr S3ktJ s]iOetPp%`T6x4$ LqM-C\ ݰ6/GT5r_>L/ 7bSbm\̘FwRe*+U<<'E? NY>&%Kj_p݉o?~KZ}vӛT g՘s3l5_%]OeW7S׿{'_/~_|'Zޯe%#aeQ0sQAETR|De[T=*>CyN>?ƻBeyJg;0 iO`I@g?!+)I*dŹjŴ.*W) Akv^TMfZs_¾WӶЖnMݬbA߾8yeOR7? ۳z ^tVid4uc5B=uӀy@ P:C.LBʌxj xnAsPX֋;MCֶ\gv;.!\wZ nN4Wqd-{-x6)0Wix\ɥ s;,v3b)itiQڴGMG%]휣XV)[p-ٟYk^%;朤L1n4"}k`&0I#N؄h81q=^Jf۳lu`[9$O WjeٿYOI?W㎀J@6Aa2Xtg^ p֙. Tx \ĉWvx%3.pA%8MP.'fP"\-5qf!R`ckQiPh f.} / qvojlb)/& J6.x.8;:NIM.GՆcXwi co3P9\ L1C-nӚaM: T=Cx7N)=2B޾'$CORHa)^``|92 WHn8"5!r~Kj3/OT}?{-w'79.:R mU6o//8䞂WLj߻W{ǻ]}o/FW~F>Z̋j[n$ܠ`UʊQnu*(E`S_>}o5~ =Q΃ge0,|` uP ᯂ%0xHBLVmG%0+%(Bc,[b5bFe, UЗ.Y2/2l5B71[hIfF8nSp| ognRq.W(k5r~Uj <\io.$URc\vOJ _7ak+Db*׋oRg;9Menާg@ch:RZ9ULS{ fgc+6s{kB@岕1m瀽Pgm4SD>Bv 0h\MQ/)\Ob4?t s`v.kV4JLpY( NV-0T (J̘ ,97lsP7sXR pg\狋4A*"Ӹxj{p 8u[Nf.K̅J%pvd??7ZƵ9zNJ+%}uWD<`t?`^@vGhO/-'. `[Yaqc \ YqX-qstDWa^zYJt5F1T)=~_DWL`NcZwbx!=LY#T"0{ Pgra!ݫlΓB c7ywǿ77/:tfϣjxV9(p824: pr7}3܅IWaq10:YH}%_'5o<x/raE좧('ʍr Mp/ d_)e*U!  O_ / bf(8`b@1)ԯµ9hQ+h*iw Y9XOBSbÁ~2X%̌HMtǵ{h^ɨ:L}$u0jTʕ33<)W] ΃0i֖7ʥZ۪UFaY8W=ۦ% b8n}U2`qwBG4iq`nm;YJ%-6mΌlVhW*+ `3V#=T y`0btL@?rmTM٫ 0Ϲ {C{ڃ]pM}Y\2/ ync+S1Zf`c fR/!apQn,<-HKbxQb+#j[\*X~``E3¬!BdT@LY-kyx+fn55C)p3^pprW,zgbbNi=u}Xo{9H|/H|X^ x_*x@7PV/S8}'sN^I[_`;J)  Z}lsԟd`*w_",Ep5BY@PV끷5]/5 }}- UXOgX%,)Z@:@-rKc&~QFo6G-H]r^L.FPLDX%Bcx:](f7/4anƤ^wYOͼ?.WX.c6'C@;p`ozxͥ!S!_ /f!./ZVD\lq ih ~{AR%}t;|l?\{࢝WK,P${¼ȴLѷK׿:onڨ%D +o8 rEn BW^M_`)füo wkH?&Fߦ o*<2%%JHQ*~)9<%#LòqA bl `RuCP>ZtBj%hem*ɶo$8_:qB,i_@ x]iiryocy=Tl8od+U³NmT!Xv[7Dv?^XwX־]peڎX1Hi|J0r_>7&P@qjԣP;hcAc]8 rxPg(I{l)~kUivWt&̽k@,,hh @:48_=o*QppF^*UAm 1anX3sm}|; pL.Q x p@>xC PAֽTNR6EuUjP=Ŀ7FUQc&3Oen/xp\^re駮G5)4?TF۵LFN1WP 6Iaۿgьpe=S\y:kt|?Kw({zǞ"OV ~Ԃב8Qd<qE> B=Aޜ'aO~v$A.eS{@Ϋ3p@% bcOE IDATP6<,6Pv>BD1*}ĸϔLM),˞ ZVA s_E% o>sgT6fZ?3 и: 0.0)5jP(`@@B | #nnR0A >HSaν$0 Ko:˿HiQ73BoRPwb%*<@F7dU{3*+wu~zϻq(ld&#҅NVNn˛ppINm=eζKZ/v| ޚ?OA+?jE+/*yoW"=y`f\!<S]s#?D#=0-||<ؼ^oS@5q?Iy `v$%u&畐aneVWZqu) (* L5Ea}Ulw) .R^oy9P,Kq ȺF)k}joP'ۿD}iS/!CꖌSSܷH%Hp sErV}QyOo(5GF>ٺʅ{ :2*U/Ŀbj bˆ#0,;0%jڒbs]p^y=]xaW,8Vi4Ѧjs h߀ *mPLg)0̒W%PHQ9{tH{1qux9^eGL. XiR &%c +? ޷U^v,w;9P4q?wċWfiU  ӽ+䎟I*` f儏^bkK%4H `Ag6N|*Ĥ/Kd,"BXx@d 4(98i/a5P`p2A׬e+)GWsz5J8DzF4nī7f*aJUghk%!Qv#A4&q<Ԣsp=4ҚZO]@5\70nP+"?Ο 8.,O+rZ0_hq{C\:fYXk:p)jR"W I;eBJ7Jd6pЬPW(/b^9MYM8g)إ,E /Q H~u)?xBٯX$a*ͽIYש sZ@`_2}qꂃZ7O%~E5ռh~G+_t}C>8Oe6@6Iaۿnhd8<eM'v7}˞?s^ՂT{ۋJ{ , B0t9{y,?R~rsIx(yC#{@>cR^=zt< j[)p `R\Y*Ĥ+iDմ ~a;}m?=mҿfUOO@e[+gi i3iN嘠Jm*!e$y!@;]*+$p.xTU:ƹU2g`Ÿq؂Zja7HJe7s^{REp䲛l:a]fA@)<]ݫ}*lQVswq}0#m4<7 3)y*ISe4_H~/L^ ?=^ҶNNYx=&`3{vE["Y JW * 8ʬ2ոp]~a޲Rji2X87Mg%=(L6o,y1〺`zXw_^?r~_-o{^}K]˂_ܢXplR< ;KeT@(E }#Osy1ai4y1B؃sn 1*JR!YvxRsN(_ LX/̆>,w /_?.v/ HZPi 09J]Z޿kx_ݔ%K ޿[#DK1D& O=,eaV^>г]v#2601g^Cu:x"\Rj7g f_V';U,ks|?ouUաÄ#ñ.ʊALع$p^R 1cLPm /LЩ.z $TOh<}r2,rlr*[)v3%L$ XiC'f L:N* Iujµ O;I*d\SLەɁ*s: mnT~ƈY4&LP.@0t _űl`,J >-A˫;֊Ns_:? `J0~Ť4pϫ0dux" _iPp޼ 7pc|ir님WVȧl0ߜ] }s2!"1 ')/I+"|/W.t@MA.}=AߴC@{}8~s%̗\i8;|Kj/ZS1_?s<~=]0SpprgoovFNit^:0Uws]hE'5]ϫ9{I~/X/Q$p lpQUgl 2<PLH~Ôz1\'{Hg,$1bkKunxJTctS Р P=@ZTPũU߄ɭ r0+U j%Ht&+* @K2P࿋%;PAGzIou3TA1A%.x`p^ 0TQ <#l錝{֛}+C6!WqSJ,n9-}xܽ2G596F eEQ/ ~=\I^F2UVwiJ@8̥1GLq`ȯ7cT:Mmo#`#}032{FάSU/x4!{EB52~J،y [@=cZva@aɫ/Vȃ66зIϑރx<~8*'(;f T+T h6 L&7I]v;+IT')c0xp~[zEW=?Ԋ?]=Ǩyz'~KiyS#[bdR8gm84޿'#QQX(Zv5]S;z~[ʯ;徭c5/hُκv8 ^}I`GjXǀ| pp#* =@(ŀ'"ս{;?hQ)IIgEMzuSG-l4[00q6`-"m\$ƀRKØD'4II&&4p^?̟0[r'V)/ -'HсnVZb،k]RkZ9_[ `S eZ\3dIwuᾁBɝ* 7=n^!Z*8>m943N7> Dݖ~ }m.7BZn u&* e|<,CY0lg^ qt^ȲI8 ^ ${f7m>UC(k;U (9BxEt..=Wp,W_`lsQ*+.: "xE.xܮq*XUN)^j5ߡCs˥YkGj;8V"gmfӥUNSRT+=z! @AvmX'Uhx&<2rM+3 9yǟH88骐bn$hb7HB\-*0K 6˜ ^rxn1H2%23ijw0`\GnòJz%=H}F?MjfV,foKY@8NײK3b-*m{1w)_;c_TrS5n 8HxJpǃ[`i~j}TcآJ\Q4pr-A ~ D C$OP%zrtNzuaw+]{,Ad:0!pe.LV.璡4&54+X Xj>!$b?]Մ E縮8[}"Kc n0Q=6h9h}Mk_wW~ZB|ma\ڕ=$ b_VX&@@o9 lR2t|{{ 7)}7(;$Y=I>>*qkZn剁ͽvJ ؚ`z):8lw&{ҝBJ*cK@ r}<R sp`@ Lm> )yl]S>RZʃ('4ZI=W0KAY~_Ԍf~l: Y+HM O!TYs6P@Ex+q K5)IdI}Gzh@>xf% fjDU(fkB;@'q(ua0@/q `Js cw\]U%<8~.ӻm.<uTk.|Jnb!bRCXp_ 0N{2vqlHW{FF{v& )o [ pl ̵lf$4P hŁ Bg`*@@ ظ `Nx>&??5v1)8' R0Vm1՜~6KZsik6Ƙ9*@g@@Lj v\9![ϓ IT  ̧(0M LX #Mg 8'> R(x@}*Q}0`oV#DE/P0KݰNnthUse,\re=D?=}Z>w gx*a'́Nn?vw?^. ʅ[Q#J{ޡ4}Ыբk9d(|Ё\9xTXZ) ?.p`$ *c2UJ%wt67Y? 1Zw1 6 )1q{[g;?8#R–ep}gDsd"9^Zf6gle8.[@Lt[/9T˸' ~)DrjIU14#e{DxЄ`@%"i\?=j]瞳(|YpH X'Upൖ«~ 2~  VV+n;clM9 ) 2=.X` r@\Wexuf^)V/?˰j )X 0Ʊ-8[6@))Yp@ {+8F^^ 8?[KYBJZsId^Ug dX wr3 _JB?ԏd6h>7DTA } 0M; '4 @þla>۠rY܀W.sak+.R'?CnX`xn@"_Ҩ nֲzQ+EF]}Hi;-W'18)U+r1N ~- LZΰKN6;jO]OFm3j>'sU J/~EB߈ٷ{Z}xM Fp (MR>?{@~ (p/ap5( Ծ*Zm"lxl4 z";0Lj ɊL;9.dct Z\IJi~1]]|^<46wJJF @aeITQY*xDMLRu-'{ J &v&HN[J%}?.i1IP,"V8 TKqW[[ Ifw;^oAww10*+e@3-!;ip"|\f9`>]Y.z%Bh詡@^8S!YOC'! GT`@#^ ȥsq||;[/k[\"+ Ҹ'&e`6@@UCȓzcJR-3x\l -pq#!clrߵ.Y\\i\)rJ=I5xM'U 0xʒ 8mP9`i/Q'VZq6YUqqJ`\tTXPfs+QSwfe YXup) ?,7y+ ` Q+FwPx D*/¸F )6#?6Oja}<C!]#][SFn:y!~XXs\̷FpvRi:C6e8 58jnx+ֳn?U#Q?#S:y[Ng3|{>[/%:.^VVw?l~+gJ-pG>?R8!ڡ T~xyϿbhֆЂ4&CKAn"l<eH2{NEmV+“K&V6Ӵ@!iMgNB~g>L20^;K { lt P6V:c01M*4Ol=Vp-xt&kG+igq@YvMCnvK]1Au-%=Em_K:EWF{܈{#{ッ,+vShL@H F0#@AZ4NBBndFf{2O`]?Еk&3{g~;H;J/>[of7h =5Wȩ~Hh-RYl 3ĵd` Qπ=H23h X薀qIIXM4VUnrv;u[Q6?x m>5'|X.XeP Ȩj nOb+Qv'ktR-g*;wH7nIA9?q -T3 缎.6ꋘTʩtw9,uNZ]==@Zr!`]'r,hz>3ln9pߦWκPQF8_;uetiD5hqt< kE'>83kJ}`ׇ6Ȳ!3*&BӒǚ$)*֩5Icl[R]ǙHS*C7%V4ߟ"})NJ58Q@DmL\w? ehQ4"=?@ϓoJnӶH?09!<;8NҒҊ+Z ߸OF>ho~ͭz wC9Ͼk})< Po?x=8{q` 4K?)JaS=*i%ؼdIX7pe 1];e !5*@`W4EZ4Yw0@l8VQ5}Oڣ:c+Z] /& 7.G]@`@(^],J{R9*9.`S\gAΈ8<,a% 0Gzj3g׽3*4^ş@5/v>~.L>kp`\~5jY;`ۇX?x!\6@3{l\bBIˡc ˏ.IatM8V]ʔunH5כ&aadd/}Mt]`Z+eX#3OIAyVJ(^ Osk_Ov3CYm:$> o )×RVs( M˛v܁6~+C?P;~iwf^1':cBaN>ſ?/} `. $ഔEN9!ycVA Yv(<&U~6iw ɠ%JBq@l@7kAnRA Ȏ%%"PrbQJD.5*Wa0 Zxm~&eppAzmm\ړR@s;f?d“ ˅p}zg?ڜUjRʲ(⽔ G^W%^)!z ?^ 6W8౫dzV!H;i_ƣ+l'D"O322^=s(g`( 9(ĊCx,x!_ >75a$Z2<GZ^1|F> ` Ϸr@N_!Wi^4Ëees̓xOaGw V,;g}w Ш5Lp mNVl|ߌ"LCq.{Y>n[U pƃH+NT ygڍmT 9m@ANެ#଴z2҆@-VZL xr3Xo/g>pE{AsVX9cU{UL?PsxGg8F!#0N0`)p n.z% ?J/Fx-&@ 9Q7MJ9֧ STyV ,HmtY"@A3ŃXʚn(aTp= )8'$%n[{BHou_|W򵤪Ť$,Ih"`bI41Up(*HyԡHOGZ=T 绑0Jv )܇Rn:ǐV"ԸFXzY 1@Ǥ0P'ɍlIF%#<98ʸ?NIR 7PaX @gMfԨe&m9vcj,PÓ&D- Z`Aա(p5TV 8vx@VCci?\G#u:V؇%=yYΔ^q!|i?[k>gگ@Xu}Zzwp{&DOڥ&UK`p M`gs8~=XmyX/R ˇx`~ds}@M%*6 : } H~4 3{IIP|NmxLx2d@n[9zKZP"Wh "D+lO<l16Ak,>)fT` 7]9ӫwgv~>[_w ~.f[C7!ێ7sU܃_K IDATr**q(s1[IfnB>.'ia]7úq~9#2pW6!G+ǫݭR p[hm V3Ktr-'Fa+BK',:H;*uqU `XMEi.H %DU8Kma]\V\Oe)a)M?&%3nw~8]/>p.G>7)&SL"Cx~x0DΒkK^u\?)|nPO3g_I˺s?7༔;H+3uE@\#~)DS=t[ݐȚd?<łSj@#q=9'p̄dm2om@ ȡ* j-9#3@<9mתwuNhUx,C ૭p `68 Xj @-JgGG%`aqם au;Kf3S~;J3D$zyWȦ /_aBJz9 # 1 Яmqb`9iz:"^)Wp*c m1^c>/\W#MR,4&_q+0!ɇ>.CMǩ53؏s*lɇW)xhkB'j43;Oa ᨟QU೬ nC Ľ!sL~{1AFb/![]F;sxl <S0g@Wo: " qO=~K[xDZ£I ѝ$nOJ;+9K;`MVb\ )vskd8TU6g\z7vG[?[@ϳomg4ЌvnnE$:k CLאc S׶~Ng!栞ݚ`;V9dM!l_W<n$( <^#? L׮yr~.@||}q[E;_!!xT 4w}U8:SAd NZuZ 7Diڸ}s6vOz%gu JGXa1[+5˜@]&8!ftPQ,bj<8ί3l5x7CB.[~3hf\w*D3^ [1n {y,kkV6U>8ǗV9YC@bmbCi r<A?-;h v@̝XdF:"A&TnbjSAiZ8Giǵ#`fc{o~0 ~#_H~yӾڑLzI88,NYM{vcіH,Rw¹ϿsswY8!^?f?j\ F9Gq6)Pk6a XȒffsX^ۘ4hcBI^LÉx5 pP8Z Ѥ ȊCh7ՠ4#Whq+ Ju Hgu. G z.tEyd3 h Hu  2uIq%LDNYW]>Rߴ=o &] 88B]VbaתFx3`IL [3n_3拴>vʓ+ ؇*JFxx>, `y[dK ,W(8D^ M}u%|}yrUM{U*]U B]|',Ld3`D6z6zju0 1cƤeؚ]Mhm|ǝr8q/қ@nT{!A|̭ǜ!S93R:X;0ATqn8.q~ &[)]L  U  p9H 8LptV:`¹ʡHZӪ=k{j*@Pڱ^ X7fa͘-^"DQ{-F3xP:!=XXc}]t:ph w`MHY,l*4eH]Tq)̼(Y%%qw/\׿p_̚$+ ̎^?\Pb^Rvi#KZv~>n _?/y+i9Oι!ٗP~)3)2}=F`D`&} unIKʖ43]|kAnj:w0o⏓+X+c, t pBNŠU^ɾPct  X`x9:bU0Yg&?Q(Yy> eLW-kbr -}kx̀.DV9a&` Ǵ&.I %M*#ήdV%̉E7dJ,]YW7xeR-3ro( -P(yN0p14 0x4kSVTJx]Ev)@,oc'yp1Q@YUZ5Dl ϙ͋߁n *oFr1<0: T*;xer"L@*8 ̭ 0S>/FNpg m7mEzs 5KSv^[VigA׭r͋Q9{`2cv)P\9/:CEĒ //a jz@@Ws-5T%4cuJF8vc8u17g]$fRy"a882|f\Z)P/@iiM?o'`Foڍczq6a 00F /8m0@ǁφwAd1~"^OnEQo`4~nS.wDc҃۝nOS+:-ELYHWt2%i;R`UE1rɺ"iYGz%X#/K~_5n|W^_kɭk{&>?z?=8ܢC9U˗h?i>7k8ǿ6hbFVXئZ4@ )r!h5RD%4EMLLtlUr =U9i fΟqxC>93n\ 7c +Q{"T,J |iI1m1QrYCė/{[L#!)ؠk??oJrqxNBXOvT @ xV!JErR#<\.ı_b.@_ y:/.pn u0"\0k_DP0=?eeن088VvÁiE^6lnɉsv2l 2#CILI@@ށ s5u5U{ 8w,9H%f|w1ج?0 |l D>z}^5N &1>꽿Gzٟ-|ٲˑS\&txO; %}{8 :NqV3@UAHm^v: VZ\CF耠BعkWy ^cx,?ar՗)~ \ Ԋrka`wAF(uzRK8M4Fz>oL0#L<ѫZQ-9Ȏ6@" P$a?Q@|d\-6^n UeX 05N%m]L [# SU:ÃpL զ㰱` Gw“7=a!9XalrUnQ a]闱 Z6@((eZ Ȃ&p^JWڶ2v>0-@)dݐ%?`sS}kO筮}C InNs)t5?Q 0uC`Vh4)N '._{H'~6_ԾF OκuYR1MTi˒PO&6ʎX,R # IDATZ g,Lkp)&oOmxbL17iJ 7߭nR9Xz~=uwm6B+6]wf[lirlc9MEd1?ml?Qκo2 Mi_lKq`C bY [c.XYO3fV>Lg68$;RV}UZ]0g3SB0 ?ƺy)l)9OV!=)]^R  `Ɂ=S~*Z[VIW#z)7i_/d{J Dn%4 4H6z8hhP  [f{W@_ MmmW-]n&߻?CHΔKY,9S.'RyxG؍PJt@ [ ߜ3b_Y~g s_ BDϋ90F4G;6hkV@hLqe8xо". ?x'GܘqN_v(AKEn"OZr cR Tkenm8haEED^w8{8Ι1af!H "L<ցzb&xɂ0̺=21F£qL8<:#cQ@>B@Śٍ'Lے4F6k@@^%ʾ%OHJΛ_ wC?pͧ.}CC`wV,xkCx$x ME^[l7.:Wov3Hi WwkusJFS}}&@˸hM?! ,E;+QMktFWџ x$={lyZ޽i H f}xo8 vL끱K5,:5 j,kD6ȹP Cwr ;(KЄ-ul5H9@Y\gE2y,EUi_NՎ{Jx\+ /«r _{ YiIhY]g ?a? -_ʮ_Dm. ஓ ˓;\,z@~Zr*5b]*\$;s 6<["C6Z8$q47%<:#*͆D/^NA!w98`q];>-c}s eGHb:A縿X?xg DShmh_~g&OѷL#.p<*01DwYJɏk2`,y+z%;0") ]*DmIf!v}M]@ 5zm[DZ ֘)x_8|lT5n{ ճ;IU$O k"^??il@~by+t_dJ~*迅Hdr~8peȌ`0]R=Xy, 3q}X w؛0͐uO~ qf6zAX?3hu$( -5}_ Z@NP#Ģ{& H( Eb F9j945LCS+xmjo#ݖ2z*<%x~qzծmu:ōaXU۪?@yc1>X(oweQ)3/ծyIkM^2 pOO)w={܁`:N|w{CD@^Fr)B @bg>Va1`ٝ: +pNݬ lc3S2(ܦ{F V*n`T o&~ß9E!CZ9܃x 'XJȹ|NN;0P[%xf#`BT*9kH֮F?jenKPϦd4muEtnj{\v%bcv 5(8 :>ЭJɽ#N:^Jq\V#MNvutq=jq# ;΅z'rȄ?d#`l= e.u;ML0 nzk)Ȅ8+M ,|1G}yC D@VJz۟4%ewX[vFwsr[Pf6m*3OU60`FRҟ @;'-IO{5?2'ԼsL.=ڲs.!6W:q=b 쭸l78uZX D P+whRǩcW:q; h`Y&/`JKeծYA>; 8ŌcQ.GOl.#X8e*<%CUp6[xM[L!j$ŚݣDIr^?&nZ^3@n=) 4{mm ͈g4< ?Iج&zrl'ʑd¡l%BnC^T`(HB\}Hng~߄SszMXlXkBlճe@ l@ltljwRj.Dc /\bR9kגŻV6랕!tqچ9X ޫv* 'U79<qpƟ+S)}}zvF|S^iR9{rBK `_?l"mZ3QaO_pL.@L+H==OvE&qn4cY9kxv0[Wv!&ZP=F'<`S2w2(IK90saٞ"61:qGAs2׌i؜`kq1Ea8^Pl#h$*>v'd6Nt}MarFn1@* +uG2h P[Ki?v%u#XKI 9!nsb `RvIմx|ܯFOB՟PG.zLi;-d\R+)VSV`؅@``* Hs8NNcw-?xvbKNqbzzYb z\dץaN1~D~=C؇V,0$e!) J1pKJ E}`a9o7ȚŤ@Vcjݨ8xU`!9׷/cT9K+F@@M`ϻ*dڳQ co,@:JŬcUCL}n<0^ D1"s)KزcbYj_rߔ_<P&y_,*n`s!M?ϰ8=72 @Lܱ51 3@`DRBj lZ$͊I/~8 `翢I4@@jx3gkPY{g|_+hc`?#LyJ~ȳ(,"aNG)ؓ7wq;"4\]|ls.;`{p1 ub~ɑil`s`&'6`)7!G8H mMBu6D3#8&UvD7{-S[#`NBe''^kf1ʼ}}~|SſAjd?ir,PWkCx B'6%sc }xZqipnuK#֚&nߠVuM1s&J8C7ti-fOmVBZ=9xiΙ=&]V%,qgs{t%WKgr-}3V9Pn@ۥh:kA=ւF8;x\%kᘎdkNubA//*2" cQqF8/uQzqJNw{@N5)*qyWVA= !La}/[e#!fz}q֓ W v6``LfqȲ@qajv ⤯7_ bVEVB/?`gr&iP=ޓ Ow<;|Ξ]v}<_ :O>K~g¢:aHՃSlv̷?xpo1/tyIUOM+o,W"zf.g`O]O+w)xxtjgB3}eCs <-Ade*{8WVqL8]S&zZ;b8n;p7m~ [fx-61Q\w$d*F:!x69kZs +pNnȚ܁>Y̹(`0)Q$is` u@R[R(Iݓ&@7%-)I{D ~c UꛑC6_IYc7zC$0P('GߔOtj~#u݋V~ e?6mT[2\E~8GU2s$PqR*Z-sZʐFRAӺ?@ÉF!ę uЍ5ض0.O0 upwcW2d; x`O\a v'NNkפr|cJ]`(,_N b1fb @vx2EgͱHdj0,-C5:gqcSr%If$uY TbkbafZF-*!, IDAT]d/xcT =O؅@'a~GmIo_-xi LHfk`@|Lö 0%P`$s)x7GyIX2p@S|A1+M .9 U'-Vl0){c{f?NL?~!wf[r5zJͬ{<:h0ubځcH)3?0&9XȚ4:!^#<磣2W&$hjCLemⳎd Ҳ&[Ӏ g֋Ѓ֎-ڨV5b %-f۔v6(jo= z[}x~¼!C$df42c< @%Lh4QJϪۣQ0@_!UL`:8  m)K=,iG%?df\;,୒R#x%XїBHW92/F_9gmoOn_;Ha@r4>_y x:yXRSڙ<u/e?R'#-~;T3/?[I{^O2n),KۓjNH< znDM"l׵prd;P?&esh(A@l 9S5bbF\֪aBScŤ_4x%D҉)T$%ǥ'y"0 ,X5Z"sŰH@x>EXTd:<.cls /_R c"gKreI$(bwuJoHE€e`gxݶ+Вe<)OUtp6{cFAEj'ٝO ;ck+lN*tLEh )?][q]8?BwYʢRoxÛLR{ڟ;NqZ72[d6ypFچhsBѳo&Vx3"oZFMky hJ1]Zp.wjbp:Dt1q&-r<1Ya wlKs`#Fm&~^=%g9uCjSJN)I|D (Cn+H믧ɗS7xJREdRVI[R4鵓n~d%EIMssO) MY ѱQ1Tg_ W"E?.ig$#de^B<@So0I8`-49 f9͎ =b~ p<W# `Ǎ)25 𤌄d'!D8 plK>L,eX,xІbAsߖ!jn o,烦/) 1YU:~o,3v~]{'_miiHāDsx,6Gy_on q=_ k@ " 4۞{Q BػjuHuH+l6ۙ K {Gɖ½J;U]+w9s>0!:^?OT"| xO^ (" I@1! *Ùgkxjڕz׮}~}oЖA%a%UZ7+= o g!O/xbzc&7ބoxz9x%Wr8? 08ȄϿmM-c'@,49s*J4XQ5@DW3/@9ŕ=hx W#i7(D0:,8QV2D@•XEpd?f q_8(gM@:bH"C`_"A1mԶhUM紮;@Q 0=?Es! 5?2>1n @śZ?zZg?΋ E;q,W $7?P,dk'7V_g?W WQS-}+| QB C$p}㦋\Rq޺KC$0q,"six@F?%hlq%"eOw:C@#K8.nD`s`sێ-BBY#π9`E3 .yu@}A8p8#j?"5BҿCŁ N!x^--Z/?;̗ڟ>nSOXjnP@R/{3]v@<TTە陶_/O?_5R_;ﻩWEx!X7Dh],wNRg 1f"C0 P^LDsq5LE&ձ wc\H jiZqM[`y@@w+ F4`@:~G7rdJK_VD5[B5vX )A G<+-s KzA.FujN$qE JߦZu]*׶(.@ O9 cq60\|(j l\T|;Ue}6!9ܟb#9v|f3,U0-OQeC,EkG1| wحU7~wt {ꅷW=n+*{Id<^ L^E +`Um)Ҹ" 0Dv @/ilUv o@ Uҝ*E^hAҿ4 _b 6^_q/= P{O%Ne Jidث]]>:B8r}j\;P'D0[Cx]}z2KV[6ޟz |0@7(T @1@@%@wUjҧc>ݏ9J\,ҕt;NkpinDHagޒH wz\ o0N#it3 8ݓmF Fq 129?9nڤCvTxa XXB)b#~c }R3OQD,P?OE C|۰T\pDgG#E^NFk!Lj۞WCﺩ~_ܩ|/y'ޅuc-ow+.osT_kܽo!/ˌ~̳K[O?)7ғ|;Fi5Z[FϐQrC-,82 *(@#).,X1?+aOcz̘uGDڅG ~8ɟf!ffyDϭ}apwyI] # #~6l,p4FJl\8ʿ g샆\! a’V-F, iRzCNe.u:Yjj+ԢoPDPw(S=PSH٣RuE8' Ie AY xT5iFZ 3)aacH/u\lBnp2jFďk1qջn;)(H6& M9~d$u\a'"u=YtB Ho_A`@~=elaX4R@n [t;IEȿD|xQ \Eث ߃+O!^txK^>zGoZ3k}BO'ǹD0UoALt??$;Vj%w@VeDX;z-P1~gm je,4&/0EgB9AR}<{ƿE1Dbtawqc/.ۊӌ X<}7}9O?tԨY=9̀^aA9!:{yCܱvSr] f!f1/f1>FYSJp&Y9ɟlXˈcr׎c %VN͚#3F1)[yJ} [z8U\d??/z|ŏq2J_AzkI--z3GO׾}sؘ]?.o˓y/`_Xv{?\(]ϫmmOy6O}?sמ٨kտl ~A 4Ju Ҟ[ 87kW.i R)W[}}xO ޿%Nl'8GrqS,4Ǔt@x9v7#{}`,axc֤`;:M_h C#J^~J+} o\ $Yfmx{)GT:e|%rpE,x߁p" 6 >r%Y '?|]p8>cH}vV;Q(5 UèU=@/^:@FM/B`J{ ίJ*y#+퀧8YB/E؋uH w*7Q-K|^X P!{x@LA,8wp e\~^gx?^?<ઈ<+9s7{ m[[Q#L@lZlAlBlqcG`av޶o9´,8MXXs0q'T@,RgJ T)٢F% {6bptX C$=Bqq&<1oSLvܠ+OX8\Xr؍;ť`7mU9s{qE3 lp%"~=+l `A6K@@uF6{A2(%xT_ʀ)J !ר x?Dò.yI-{-z^'ozۿE?^_TǞ|վs`mp6n' =yjx9)!Q@-\s"^`M`d8Ha$x`w`d8a*}H0SV#g 4kc0~#R[* !K + RGOQ 0q(3Uf) ?-_OIiST?'}L51c*(Rvȧ,FDAL\mũT x|4EKwCo*C=*3{F𙽶uSd,:8(84rTR xjM U3mXM2uدrzpB*ąJ2zi6y1k e;i[=#o z[F"Ȼ Y` {!5 JKgW-8WASA?p {wqW= <(﷙\5½쿗_%^6$Z)Nqxkjsu@`iwk~Kc? u+BN3JyhVGӎ(CTS6O2kl.ADwpsï1JƀT |q9)G qWToFr0I} q8780"`-+:o 1ë]k+ %yҴl=K#t0W$#@l+)=70@/A>JmR}|}@EA??NC{.SqR_0K'շR*~Sv7|=/};?,7s#:|7,6{{9ԟgk*9{vjwA/,~o|D97BH+#E&w.|. ?ߢ2"5yqLɾ?׾fp[h76 e{e&8ӛ"&ڙw$8)0uLV_Ә,C0я8٫O$w02 sd2 2~(^]O?`{] jwQFꊛĸP~1Da5SWYJ돃A5ToRqBE*.PG^*y!* ;#yc0d aۅ~>9KWI`"` 0^ IDATUx}Kx I\QcpP;PtȒc`+ ڊaă(w-Q;B%A*QA&{-0=5E%Nmt=0"zGlV! !?q+R Ȍ(P^l@v{4k , %+h^5Xڬ"FRzm*>z3@`rѿJPHy+AxAz x;"{\.S&|}Tъ3+j*ZXƹ.BxfpXZ1r+V0 \qr goENћXXpPpݸyV=x¶H[B~ww@@wjp!1&(jLSTd BKs;1 QݝRċ;fx-a?,"?M HzN1"dOfn%9jbDx={lw6}74}<}= 'Å( R!@Q6]lS+\x&%u s` 4s_rf_+NkH9#9 F!&( oPe*I 6E=x juq*+T P_9  cIt.22ZDw9x wT$+o  JNx/jA P(1 RTN݊S;)6U 3s${\]/"|$K\pHW+VܽR @꺽\.xLdopG~gZցXtTp^ =YÀ{y<B 1glh= ^E3?$Sw|x)\Ѹϻ\`R:7p5[E%u gά00y -Hz<_O63k_icnʥ6ҩcRH#|!>c3X4쨸&1[;-mnPM$J4-;ۏ9 =W@D >gW`|F  rNs+2ƨV:e`$Wa6)mQm'0gT_w}ʁb2jȧ[S킗 ;؛Iж0'k4{7:,q¦߫>A=WV*kTwQHrxm%a*4p.u>1 PG%F7|55J`tqUk^ `ppxDy W.{(m0 `S$ yr;G!F@@ljAvN'ŏp"TvmV&ܲa54@fo%5p (G`~Dsp=9ɟ&sWB&9V: sT38+sx}x~N& {N\=rpg=ܟuui^8Hxק osuaL8((hѷ'?@!Ȫ  `QB0Eʰd^A#y-foǫP\xhmIi}{&~.P2鱃8;.Wȟa NڙH .c8}ܱqՁ}   qE˶%\0@@ lS{jT{~M6HMɊ(R{Qx׎(TxJeA؉k^[J[o*_gi?IkL͎+ g򌂪J{{k2yʦmOiK?? ok?OQkϻ*-[F G(AVXtUp'To}YNRr_ Kpq =Gs\"`4^vStǜkE6ghI \-Y!l^\rLkB0%Թ}Xh}`MWJ~=m~Ng=ѬN0@ ej`쪕YV›V(|uCT]2TՎpm#}|x`S$y} ~K4Ȓ{ J) ^ ?XIXAg?g=Sx^0xGue0M0Igz`5M pJf8a#`=p}&+B\ ¦As IH"&fGr#HKra ᚄ觀Jp-@8q[Zl\TӴ=sjq:z8mql< "^dB 8+|#+=mU[H͒Z02i*?,-la8q ;=#B'&<צmQ| 7 0$ 2Y0<>fq\*4U1 Az |GT=wcf"`*%1&!d,ꦔM43tz1 q+q} vIFkC}b+=gx" 3̙́cj.?[7qJ9<_{~ka TkSM`@axm6(_Mq.4@ CTZ][j'n*e?=4~o=/|3O׼ѴJwyʢyN-|Wo?\ߛg7=q17z/zܩgɨԲwJ^EF)y 8?xJ/uk oAhU(" QswC*,vOðRw?Ir{`{#7A Yug7pu 2嶭 ($^ p=>D1^!`==[2tJjPo~B,N 23/<ONxL53SUC9*SD 5ٸ17<نv>Wҩ.: "YaQc`Wk7Iu{w 7Wbp @05PDQ289i4BbI8YKs }[a圝R]VW BL QΓ[_&C#7sDy6Խ 9; ҃SBՄvsr.HB>Y*[&殹Rǁ d9s~?S"@5&8]_qb>`F[95J`6 ܶҙ9)4Q.kHdZDQȽM5 z|\! JV)[1XoRMJr=+҃O>j/'oy>}=h?&{=uL3[68JʓUu⥏+zw|W }Գ4ѿhﻩT\O* O0x ^kPZT B~^^g10E ~Y!p\9yyM}&Lc(iN x θb$MtabnC$lbn 5{'%gZ;ұ$Ν38QMb``!H۞xL9xK\&QWDltMSkʕExkTmQ1@1@zLEGo(e&m+ N6x-\G$m .QFVI6IWw1!w!w n{``oD7q}Sx3 8S9jpc#GlWggjX9+Q_&]lco?!pgY}~\@J!WNbۦA 0Wj!*u˷ܿ# Q ZwZ= k{lpЮ;[J+o*oyw/5|{2# V; സEt;J:噼Pv csOk۳? _{C~V[TVxDy@R&# JYC4(OCpK=+Z'ɒI<?&UUw 9^y~t:2 G2QoL׿#n V> ^,8(  0J0N;M!xt 3+ņ$5sK:xU1I*(U`4W@6A; # T_%߃[LrF``I*acКҲ4 !V9ka..2,x43wg3pξ nE^x"T__GBU2<~U:ɧS!<\r\*xo\/Q R^ 8@ɗAKhV"b`MVx = /7Wsj!*b!ƪ@EGIOAgw@}~ WՃ@4=1 5u.́L\l\[WK%]U`SC U {ӶT:xLGܹb'ݎ1q ; HlY3x= a,}ہ:wbv`\t8wKm>y5i~U 0al(* eumu;7!dר@_]>I5bKtc`\N9Ng?pl֗åRᒫ]5o/yT?&$*y !" S lO# 'AȀq4 y3fY Ҥ.^U83Ҽ և {Qz} m =Tݢ Ai|Ⱦͷ@yS'_Q_@ؤlpj yҊ9=v>>hOO~` dz7?o]u$%➽ ^:e/ F onkRs5b"Hs \[01xg (y  @W)kKTb[/nbф0c 33!xBxFZf uˆ픅ןrPG0ƨ60)__ SB^{ ~pA)s)*q@Q,@ Q:Lwǜd퇯J@7WBnZ56*[#} Vq\&syhkd};`;)^WC+3ۭ;of~F [,Y^&x>-Bݶm "7[5ě@M\ $D鲜Ɖq8~ 'G7 Z$SpzS6޾~J;(:CAP2B8!ܮYK*Ʃ![^}x>PP6Nu!@]JdӌBLKKL:؏%+z LWU%4Ah%%.EgZZ|M^|~Ai){:Y2vd?+MvEyTR)4ئM=4?g R{HVGuUƸjZ*aC3 <7Gݾgxn"` l)+< 8j[zբWB#ѿu<9ا߻<߾yxO^w"8?}os<W7 ;ԱG3~罋]oc'ϩ?{S▿~QM bP)AܿI1 u %Y9Jyh1M\%^LAnO`jyF #xj@U5LP׌D@#]6LEʞ'2OCrTs_1Ek IDAT#yuˁAt@_!rY=3JPb|dVIkqGxR* rS,W tvPƙJ`@5]T&ks=>x^AHv) i% s 8KK8d £ۨ8qq>; kHmN( FKIa|cOSM`BEݛTަ Ppq Uz]:Q.锂*W; 7P=pTh B%0R @ Rrhw̫)6p,A7HM9$~p-Yo cB#`ι cD88s!N YG-8jKν18nA ך_+XHp#eiR+bkVYcrҹ}]6M@aKoFG'ŝKnI -_79.Pm}AAdF!^#<1*Ʊ2 `t(xeXx@I.&eAM o@HqԽJߊp`S;9A]} Q`Jet`؇zQ, '1yeǺdEZ?Neo|q"2*vQ;B }af aĸl0CxݜᭁtCEaqx\S[NM?oB}ŵC.U*tN䆩 " ɊTor000H ߇tC ֬QRgaT $_aRI%)EM*4֩P_q < ]߆kHihhJʞ%-N FMyIbsׂkx='+ ܈Ϯ5g?Hc9x>. Ї9:[(-e ap;0+^:IY5`>/GAQke@- 6+q*{~ ЫX`P FlTbBGD[ꀐҜC]U-Tix ;%.`G@ r_8 7FIxun!k1meuV< ~ |n>읢! ,u=D$ȅ  x-o}Sw?_?꯽9ʧ:<'W8(*{{Xy65 ڻ\>b?>m}F'9U7=ŏ<_T|B c/إtD{R 6Hjm K Ec1 dy9 i33 fg1#e;dBm+- VS@\F7F)Ekm'A1xu {`%/Սkx*oS-U@ViFH+6Q^VRg.VzހE'<߉mJN;LP&?Ii # qlz:Sd$ TJ()k&2_ewq%xMϏQ~O'>׭/\ƂDb -B_c,!UWq]Avy+@VH?Ys(A]_O0x_+xAԣy{]3W.9Pos-N W&& _ѳ-ZԘ[igYܟhy`\Q S'~6m?7Eqj KFM=@P^m(ͥSx4ꝠqtUmC0)E Rpa[÷W+~_;O{>>k–t<˓z(cݽ,˩>J=77ڽG/œ5R֛zP*)B-]j7 4fpl;mxf4t|^5L܏1 apԞY(8MPzvs`%p^Sz Y =+q 6(J\^AGJLvuHeY!.{dQfK 'vx9^xNC Q 9xKt] }&~䥁XxzD@[!D@ qH9r71Li<]fsFx|\3f4ujmHW&!@! O)îz@=||*xU |Js%ȿ WTaxQ2tm䏹{y VOJj,5ßfA3 <7 RAjM4a@c.F;:i߻WzKVmJl) G7Aa?~OEݘIcZIiRIY@4 Ƙ_A/S/) 8*aҊ|^+{G׽_{~S[]$yv+/hOp=?}nw *$Hl(/}˟uW?~/ VQK^ "@YS}?oz=n8#} p3s8I 8g`'qpkPxF  /rCi-=%+.`r^ } d| d|o%&Agpю}I~;7̀s@xWq3X\WM!Qat΀c5lvփ(؀X,`㻴R0)J@~ag HM|)< ɺROw,\:Yu͒=+bCUoq` `sXʷSZYN ECUd[AWog S8z`عkTqK'AI%#@=G]΂"ߛQ Pc=&@I /ql‘ M8QF*qmF v!#/Ar:AӖdS D(F*ē^,G9>˿M#[ y7sGr|Flo41;:}L"%]- 6#XAs7 O{0-Ph Q9 8oF򂊉"&u! :c}DR7EGW0 LT%A5ufnuxualbp%{LJ7m̧̧K5^K81US<%a2X<=-n;,iik{ M(f옠 ށy)µRJ`W8ze-GJ/ATg % aþI;Ocuh[oXR@ #4c8AD áR6)S[-اj.Z #-~_r'֯<̽g͓{ Kl< ;tiLmeO{-0 ~s=s" Q[5R}ӲO5eii)jb07(xE %`Z@I1@TM$&"TdR!煮L+˞8(>_d»Z3ȾIxyOMv ,2 kC@JE l#T#9 IA0B"9- , d_'/Cw9IsF\0/89#ƽڧT8pk$?na$< .Lnv?utRm^χ <騽 · _xq8&$Џ#MRЎkHY` O&[61E B v9YPG߂ .yL !fD$;FA v IIZdde$[_s(uxMP edo  Y)U$ws?41-_݃#A"rg/0c>Re@1*qnU3w#D]RRSX\'\`׉ege ]8THSY^R̻1g`]?mca1qOi `> (B&n}jN)n!AN?Gm.0HIuyjp o">>jkӇe@ 4b)?c 0nҀy625)[NMQu!WjNE|Qտ]#mWSw鿿S|kKj${?vw8*<ѼPǠұuX{㝁/7/z{C|VA*^3YNJod0/0x`'.kA@R @H?k$$30&!) ЦPN(&Hh `|taFs}S. RyP~Lv+%cc >rF m Vմ`MMI]5!˄DzA)p4!!RX'0\xfV\ 3Qe!`V=E49;h)ALB0C0ԣuNjZn[y!0:^LY{Q'"U^vɾR@IVjm-fk[AzB~ʙ_06Bq<A=+D19w#gtD9Id f Hs G3^y+[eɲAe{I-󓽲mɲ`FaeYs/8UYcUMW}uhM9Qf4@Aҫ`N)u*@蕌-1H STP@&Im]f߈Xmא?<kM,U3P r!( 2ĵS(@{؟o3 @-U1:_^ m$E-(*9(t4HI6)$׌y A?ġ 9kZ|tOA L"pg*l,?8T[]:2 o-Vk+mpR>jy2؂W1$C*pk w݅܂-((7+(K: qؕ~Gg$J]}0~ .# v K`8Z R{I7oz dYpXpzPg@z܃2QI̩Leq( W IDAT1A wj=EiL7@-@9flIA3AeOo~S7WCUԻ쾰W3)IFg7^?~=wI\;xŽ+ɻǿ_[>EOﺳ%_ֽW3v+2봿&khQ:8{C324:ʔM:׆?P}=@7!((Í_LXQQvAgHAU0URDq} *9ܬ}"Gr&+Y2&dU' n#&", | cɩFL2p1E@\3TI@4G ѻ-WK堭TIᨙH6h3:﵂ 9Sof4C;8j\`a)3(_6Cȶvg<&xIFD- dA& <|}^:Rj+R%ͳ<}61dD35 =~ "DF>(uax% Cz ]5\9Es篐l 6n?[0?+cĚ <kdPhoT\vETHOįj Yu6S` (:_H!P jpm$[ - C!A+ݸ}} :,n(! `ģ)yo q?:%>(|Al9AB./@k 1ӈkҠ"O¨a ~>/b̆T7>1}X.{a,BsS 6[x>/Fy#xY;u2{{Y/=Fz 6iq59 2o3QyNiR# ا:;6 cugN(3)zB*Au~|b-L{@D`"`@40uP K'2i!VUTh))8;~QBWś|W?o?q39x(ɛ_L}OfTqyJ~]zv9~ÿ\\%_;m/H@o"`8qe>ǪdTQ`9"`T[C(w0/>U}Nfu4"UQ+h]džwkz%%Vx ,h6OX(84p\t˜wıŨߟ\%2R.e2vL&Kd&5igA,xT-b 5"PBR- ~S!A KImS_e/ jTf i o)hDsEͅgd8~W=ЂFe#V = >UU@e@Wcc/*TJ!<-M4kmh7 zqO' 4G NcgId*Vi!g1QxK4} ~xM6J޾^Vp?D@8abr~@Dv@ @TkD2d>r $(~kn}sJSjTQsgրk8]+nPtJSJYC "ay f$;$R埆?.M~i`K!&<J3D"`"`XFG$<f6ȿNY+kf'glC\t>|Uc⯿ʧCso=ԃ+I$G(7^?k?NRvAMRڸx3M?§ |k؇.|?[^I˺)9P紮t eNAa(S}J>cj7#xoHLI (<**\R @ey]۬ :R,;A6rS!JdQOld, eo,! j*pNÈ H_n; 9[&N;2/њV9kBD,۰H۠£6K4sm] 8>A%y#$`x@A(o!`qI"R rI-.}U m-^cg{va Vh2<~B$d˃2T"" a,2:FcK V?>o \GB' a ڈ JIרnQa)e}Z4~]#X֍9@{7F` *FiקBzOZtB9NBjqSY@P Xdu(fIa{Ph\ LtKY% P X!,ⱶ{A^x~=!a:k4I8WM-dX pAT5#sc6+muRH ^b*,8?!rY}n={8{^̇Cgq f:~x*NSObo_Udq ǻ9„Cؒ%&ms]jϾ~9lPNSbbTIrw &-`&|G=* $0- 4^uISa_CLzd  # 팆iCKҢR&5R /=O{͝+סw(cK JT%y? 0`7&!n\ x<`?7S!=c!9̤Nͮm!Vjxf4ɰAƙ 2YӆA_iL >S.2p@D,w=m9`P p3#E0(5kpJ=,EH=;ށ% 3DJ LAy 0w)PűzVnfsoG:Z)S)2 &AQ9,$d˕d %bM?L[ ec4 5*1iJCK5P]QrJ\ W? U sh|L;g;MosA(9ƹ9c&|kԨc_+ Y AY9m([9URC DD$(3QkEYbߛ1R%٩Ւ AR#:ui\[ #&x!:l A}Ԅդ3 : bS1tgs@PightVبS"FcNI73ckJT#`'qLs8s6ςӎlbr"`؅a~?p>#ɀ³uϚ sY:q5I3P J\$mVA;{ aIAC b9H9ȿ D"SmgJy "3Sk9+?)->FB{/%u(Sت~Ct8 D&7]/ }.RI +{W|9O.x׿#cuwG~1η6MO u'eg罾'}9 앣K+}Bm\?;WӳJ~&&Bt^)+tOX1cljgYU2CC } 8%Mir:औz&T%^ j'  ~U&8 h3cIl 8Ü{BI!u^ᤅcllb*Q.=x6 {ĀdaHn^mo7'(gt<7 #7[eyq 1?Z*)@j%`@X':qX`y4E9Z()BMe]"{@Fb 4b8^VPA D1ǿV&*^g ZO5P4ج!$t+plyTf99m,R*5 A/0ȼ <1  - f" YP4i>D\p8:5@5PT\cҔ$C$H,T"eN.ɕ(H5"9_2-@dBdCs$(j8Ds+jY &sf ; rʞ70?nLuGzQpN&pxĿ_QCr#vq/"r(Ƴ3m r ,a7x53J8mHSj󐆝z>1 M1CsXa 3CZM<jgTberVKLˠY uݡSpal@ABh)-G=2?acM@Hw4KbӞna=F`Vs @h3,) Ӟ{IDUV,{,k.0;vz37X#҄uv%= !"m)D7P1DrNOcH #Xw0Ikv1kw]@~o;{ ~KL9[dߌkԬj1DךZ6&6~?SS0!f\7k4X 'YIvGe&5} ==\Y˜m{RbҕΔt8Oځ6lܶ@L5 aOJ]rLjĥ5 JHb R. cv/{ɝQ,̧$O#!Ny] xjqZLBNLJ3>y@#x-`j%`sr*lc(k +ި\Op+P,wQ3#o3~y2AӍ Eؖ|Oz$!(d+u9 k- Kڤr؍j&44hu5IYMёb3 cߐ[iE.) b?FYlk'l'&,UU nHE 'gH>?/o/ep/3RrYDR.R  'N.Lm[tN?|_Я|oM_Ͼ\9?/de^BxR`_N58d F 3z!)|shS[F5r뛔VߌATqI@}A 1V u^BAx`;d~aaa!  z H/nψtz@#Agt]pPvIz-@lU.y8/S>x ʌS^CL@L1fN6_W>N2Yq @ g֫ܟz3Ư%m˟.Y/8.\KN! c$0@)fC:l>ygf,360#6ǰlP8ok! A 6=݄NecC6z-'Wh_$d DbpBj1E#Xv/ AЅeڀ|4&H}JԦI-Y-y D@5; ,$+ g)/niෳW '=i1XGgJk{veq?oր<Hǁ&m#r3>nayb( IDATwppD:p \rEzn \N F(q|'5Oֳv# vFXԩ$%ٰ+ dv̄q%b.Tm2HS;@nw G\F280L:,209ꗃ z&?%:u9xtjqtFjsRZJiaID))@%Yg*"d)^v|7PBS_d`S^_rOMmYL*L'xS )N v6mX.]/ ~_oybws3oJ^y)N;5X M$`Ĝ(@ ǣ| f'[';ž~Q 28S7:sŠ[n4ƌԱۖ{bbR* Je`g2(6ČB`ڍ+hHE$n,]h2NQja'y͊eLPa `iN9<9knt@;{ xfxmmjȫtL(8b;[ zέ/A1W<%&.VAh04߄'3ɹr6%5XrdH% ,}ƒ-S WEdS ²q YQ!BB-0&L8dC;8BZAb,XZ`_mV, [VI-[ {8baT$ߘ%tZ͘I&#py e2H}ǽsg "?'srp@>#X8Q8-JgrB:RJ"@a!*4Ёc`n1рL#-Z8cog<'+a } Ľt 8Iw^,g

pdsVr}|}6C\vF&>;Ha2d]!P Ml,9D9``@X{"CV _"0'2HP001 ֛R*-Ή΄F˜+6HfD,ʧZ5Xx (rK4?T H Ycضy` W5N7p|~Ix(}9ۃx?o n"345 {h7lFq,T L3,=I agA5A nC0 b_ 欗 ؎Ne`Y TwzYw7r؃%2Hө3f_g 6Ϟ*RxpI¡5) mRϟ,? ˹"= Iaޞg[^q%w# ViswOowlNmYy9׏zg$9+"s?}W/Pˋ/J_~ɕW_K?!hQ>FF8`,dh! k[S(i~,{wm :lWb`^= 2ς$ Cڥk !v&DQim6&цDV0dd. w .:hZ[bHΣ63Kjolh AOzV &kL3۰z`þS A.<\Z =0<4f+9 km%r[>r<`[9l[Er.% Qө9 7t!dp+.>ıiG9@n2i਑,{ C~G!%o}W\V i&1t^kXdMhRn2 m[XvG<CU,%YEN'@HIcXnH0H S0V"fb@|"W!,&!aᔸ -P# ~#Ga txDzPܬQXF5 cN&VDaXqDp1"޿fex_,Er"*g HB1Dj95Q%)7A@?/Xb)slrL-tH`@B3ˎik>MkwJIHz9AlcBl iW cu3X?NhF~$&9n(hò]6_ti,z 0l&/@`Â+Rۜ:*y㒗~ZAY_ ?}U9 Aܔ۫|_Bp}Yg߹) +^^ +ɛUh_s7WL_Ǐ}㋡{zӫ;fe_8 ІO}ڶ"`}}F5@8VV؏^wmx^nr< O<S}}}wvctR g1)((u_a?$IvJ@>@@ M{Q`XtpW%}$#uM(>OˆQա!0ApN.cF`n)`8ݪphbve:k P?Xc L246S/1bo^55R A*-Jg (vj1#,gRc Ӹ$r185G0Bm!&a!2Kq LvgAB9߆u۠Xm]4J|ld:c Ӹ.8OqMxolsk>p9s?;)?)Yr~Q 1q>%CA[rb 9MȐ*  |OA)\qqT&!&7N+TCLw%L*Ek}q{昆qxsJu^d‡d \_pWrEC4]rwC೧)(>M1dH{ `Tn*S>CtXu0,']n 4d{'${Tyc.=f7~vaQɒ9)'ɾNιkAla1MW+mfG^^N?{LI X`^ kRۜ ? 'f|A)̹$!nHqM;Vp7_v跾ҧC{1{9Ddo~Qx{/~78 t~_?}; ~o̹%YJbD9:,Mi='R ǁ 8#:MaXT1Ų V  H8@^%|1ȝ㡍 $萘2]:w]wHQ+o?,IwY K] d8YY{7a5*5.MێvrX)=A#<폚F)Ϙ">.ƞXC86<ꠑwnxm0f0l|bof3Zf.KƼ>%NQ?i6$h6?kIY lóWOdZw6`;.peY(W[!HRl INF6AbG-ͨrY1TujBz`1 wkE< yD[lÒA=xM:Ȣ;,ce%!r#sJeq({f_o1wrj\I͔ v#2*%CEl9 IcX8@Ck4 6p]SX93fra5oBbQ11Izk{ Ja'Y6=᝖ pĿ!YiqJߒ,+y{w KQ}) WO*W<Wg#\^W&{cΤ$WZR()Z;a|)/g?8?p+{%7뒄ӷA'4T1.uEi/@K3#Y2BP 50+nLba@$sI w@&PT$R~)HVbMV*sVv+wcE_l}m`bׄiA?Ͻ  Ax0= D@+ρ\.ӻ`17Jҋ c x<${0CXٓ= w\ugL)fP[ @x,(/PQ&fi;I7б1%XrjMj?ascȎALGr9 o\J6 ?SO- -ց"B|`y.p:ApyR2ǙcfT&G`o2w\'& aQ.mL8ߠ|.qjOe*bY|̲U@'D#0b6C^!eKf]#J{6-$#7pnBw!ݶfm5SUS, ]v (!8 p8 !p43w SV!brDS2j3FRqL5ͯ?#=F2_Dڟ\,s8m(#b d}7}$v @< [/bygŊܗ NeF;A0&O"sp: # !-RE2=\(Qj b71Gs|VقR{*eo\VˮF.]%>(j!j<>;H;z  Nx[d!WZ|_ vz 웕Bx%x:"c:!ig$#ddHfʼ*9w]A3ROZ bp kWpbRGHNǓBr l<9kk ᶊ븬|9TüLT$[>`T0ďc!)_rq“O+M>=w] By ]/Xb`Z|A 8$d x (/L }.*Bʳ g߳*Š55@ ,{;vl@6zd9 7*^SVt<>s:3 _u5X2U KTOϟ=6` Iyml BF Φ\]l_R!!M@!PPr \Bǹ;g6fC37`]q&AÚWZ^qXAĀ!6k+ޯj R|iH5I= \s;@nroB9F IDATזwMlS\dYr" p`@" kS' qV9k̸~븎kzG~L3~x'O!Β ]pU'Q߄~slq? !<߇Oc^C&!x?m!@(3yGx&.C\ǵЂΔi/2،B<<^dq 䠫 1j9o^)|\UbY%W  %`7X%UԘ"NqhhhUp0f[^ 7C^3A?' Qlq3[g\;>/9oPOҏ N }woξu7^?kh$93Xַu;K?_VB/|_oy΢_ɛWrp@f]hFiǥ4V"_TksR?$!s?+g jvT:<#ZB>ŃУ7mңMZL4Kȿ x#Z>C݃(AT9;Ŝ)K{Jr _ lR`:j,[+ pQƘw sA A2@LU0='ޤ(ga3`LCwwuЋ,p F88fXaӠ!߀g`U:kyF #H)Q984"7,hBdsu!&?wx?e=Hb2 \MpB:Txw\ kxh Q OɑnVY X[m@ NmRlMh}g$8k7ixL\wcv[ ; AI{3=O[.Do=&rT\f5+se^."p8!'Zq3٨ !i-8Œ1_?zL 8`F7\)6H.? _  HOsx!,ȟs,Toų3 O{gM7H܃G .O":),ĒfmjF;@V,tv1蕄{@wjvx-jM z%ծf~Xf]@q8ƽB#1}q7=7S p纍Ie؏ [!3L 1Kس {X NrMc>B Xj%Z!Q+b+-[c)2.ws^&D=,gkGh&ؙ߷?]?m[&n&<@aMkaAssy%%(F4lrl%sZakp; ¹<빥5~ Y`[CF¥swdj|IqS,8Uo3>֟A|<JJJ,#/7cX+ȟB- x.#H0 0(X [l=cNR̈kC4IUM}AJrd +P"7e&~gR }|VN5(4oɒC xq&ȿ;mcq)p aBdJZ2J 󊄲4wHU%~W|ej3/~%?Q/2c3wIP@}]׿W-mK6կ>SW|o{sK !"Y|${IOI .H%\rR7`E+RMJ9&nm ~ntWCqOd{[\2ub0}A8ٮZ[nЯWE9[cNvk.gUzt 廙?MB&m%[m1"6 J-H yl~א?I=*c"wHU<4YɌny Cz$fZX p׶ 'qxLĺ(Թ5Y04vQl+8`=8a 3g)4T`q$k)ѓ35)mU;`ex:$'R tZ<R 9fͰ%_7@h!Ȓ[zooo5 4HlOE@DxZ *ϬHLFTIR#l X `LkĬDN0ĿR s C0:x\857x=M$?{O/^/sOk`_|Kgo}0=&F̭:'z]p?:4|G@_U󟔬ܻw$p3(41 $Bb.C,A,K) 5DBnbܜYcP% ҩ, ` $ ob^ _'k:9 [X??nIZr8u7Y8e;4KՋS !BrLst0@޸~ !7Yө{,`?1 ϫr, \W]Z> *ᛸR_ľ1?ϟݓsjآfDzVp &e3 ޺AX p95  Kv/S%I[Ǻg B4գ}k: 8K6.OI [vfC @XH@X+ͱ ;m_,h)7=FV0 ϑ]Xe]M4j7\}\+Y%oo:Vf%p.I\6㿑u gJ5p )  h&yz ?ܽ[Kgo3ɑJ$U[Wz޿? gB/~#Pw+z@ݕ{RuM 2w%H~Ae$~ؐx mN~9)H;. &>wwʔa6Yt*1xJiџWTp"`W+eY|8X%5@[,,kMf (V?$n ܅o+ 4?(9#! ƌOahhoF 1  7t$ |]1%s~oBVsYf}`VK8?ڳ6xvd\PNeB 9@R ~?H? nc-(w@`w;6" 0bfcl/qt&To0HZKגF#+YJR&z>S) }v,+`'/{W~v}cd4B##I A <9`H9OjAweim4fDd^G̜=w$׫\5]uvno~w 0;iZLI\-yåS4Σp.rp*-6 1dxlî !7,@A7cBYl<螝M m\ 0x/ kyW?>顏X>}ۓ%ӓj6?G_=O6~a(/9|a ̔'>J,k-D-e`eٻ) XH5)K笠8#[E 0omCw^x{}ܗ+Nhtv/ @+ÁRMl,Z_=dHAS*: es}j 1K`/}I+O^+ᷕ˦!@8O`A`Ơ-FM.TǁdbY4W&dIJCC7^T9tyrĤIGn=\D3mJ9qxdl ?A 9U--<~OQ[x j}l'=]Mَ>ރ!/y8h.&6͔ityy\R%^Ő7UA 'gRމli;!0񩮐} Nq T@ '|q}w.B/C4iƥllʥl<{$5; 3|\`..]pc$q`&y39峜Nd*x=~|& p9) s8Bt: ,Y3: mgm> ]@=ې{l9x>m_C@@<p&It#,Mv|ԅ߶ík7PaZK1> `hRxE !0b*?k9<{p}[_COqNcp1&.¶PwaZ$J! ncJ-UJ;j 2<#pL@$Q)W>%V;?КwZuot-y-{C?7~?6Ek_YկY@y@5f^:I)'(9z{(JY lk@gdS6,+6RXY![-QlDoo 4.^@-! #pJ}EŹ'!cv Oq~n"܇ z'.-jZ믧exw .>m\C6 db0O_`88 2D n7:Tsv,!\6iE`Q=:+~ 0 Oq5C N:WSЧY\UʵfKT)SƂ \M*A‹< #y.@/Sh\ $s!F, !LIRqk%_A|) r}UqaþZX WʌzY&Ai=dEH"=y2? e_'۽o,򭿋 к7\>b=!oO62-V/mv< Kdoޗ͑mﭪWn@?%;v"Y)-qDqDûXG$˷;@^v' Ыqk;hEDž_Ŀ@/k*:mT r9\4QK`Ųez?@Ņ{@}FB6*C|PhUR/ `-`'ğ}OT!y(ҾpRpxr,p%d\,8 y$a`Z"czLR.HV9Qۜ=Vv%~g r秫^;{Rp*&@Lo?dY*:9a.K?3Y6<`_HlAac/7Ki IDATf `l)xO`$+(SRDAUH p̗MɕY11Y^ۇO@/oe68>Wtֱ_=86 Kǟf .zbB|T?YM7x 3U6Irܜ6]cgO ˒+! p=}L q<`?f302֮ &qY;ɵ4<ŴY:GQZT߸[/Pö {hHj)pQ=T} ,$h DZxt6wVZoAwQsjWڲyȗ2CTϿJq!j4V 9j`|dDw8Bt=sR@` VW7^?Gl#ֳo@c۝09 :e_/nɻYύ,4eb(uoP4eRU*E&9t-`[(P}2=b XOKq.vQEKNZ݀ $&\$q%kqRjOZtZURqݰ*X~S\{,3*q9WHJV\#~N-l%f_ Up3Sorq7p ` f~g$@gp_=۹r_ ?ߗ B)T]aՔȫT*eZ&qzUL8 h[`JW͉E1h)\OSp6ivh Y3v֮YO~,~dBH2$0' Ls)'Ev-YuYx]@}itqlvJzc44Zrs. 4 : .SVs]G}ZZ室uriBC5qs@jIŕ'$ku39!k_̣cNsy8F b0 RxOb S1FIHP3IWXR f8D@@K@LbS.䥪Y.xtBf?>݅ gcD3D!ji?ƞQwkʹJR[`i鹿Cfg*:Y  ?+[? 5#_Ƿy{2Z 4?Uؽʳh9ߴ7 ^?Ѭ{F7 -g?Cf=ݤN;zl;W: ?kJ "hRD HuQsYIt"U]t쌀C.A&8ql T?^=̗-plaû?Mq1x~eU[E$Dn~~ BnՀMslZ0WQ@/yY_ IZto?] ]H.nSAy.lo iy{+NAO+Y&iT௣JMn DH: ` 8 Kt;ΗvF& C'5Ŀ=m 4sӠ,uOaiS#{,Z/WV\FE *58z@ĿYʪlf6@oY.f8M{3 g igH2]n|CCoudCk_[>b=!oO `KsYhoEWwh|zշӊ>I|d]#3 DUV7PUd3G {;Xf˥v5AR纍KF=z#3JӌcS蟶tN>]m9i29PU$$:Ji? `V JRTrxjjT2O9n xYK-Ure`vȳIaeR F&g]e؇S\[} 1I=[@@Y\1Տ}§% qW/qܗOD,y i7] D/(m4nkBB] B,LS9U HeĮB.s]WK@u,m|tUFJvUS2~I^#yktHFjtie<'Nn R\:S@t>I?Aon܃ϯ}| QpE 0*\p8fb ~K0WXRf0ާ|1y=-+hsߔ)Ltx͟>a2}2 %YKؾ~Is}"_EM>ia|?@o)[-ZD{!'p]ahƵĩ37 s߁)@r? /C?euFZ g "{Xg%z< 쥸++T[Fr7+鱢g\CU4>zIoI2 Y_!__ih|-k;__y#ֳo$j;.LWp y \=*qm#ukR1hqCu0 .䏖sz<ի6O_G?X5Ϋ$O3YE2r2!)GvP"?G`z@}hjAT5l XG}b819F&Boa6jʹ5? ̮a,'EkWZjraI)Sz1|UMq.s؎exrGm4a@P I0QT;͗Ls·.D>@q=WDү@L _kN+ pa%)'@䪬N/doN`A*h0[xY*xy @@b<<漤eITt+PxV\=zX BLoT(2 LW$ . \. _EƤb**Utoy [B> Cd_ZBU&j,rLP i⿙a)uǥ<<Чp @@KBSȔ<3\xpuI՜ԾY1?pRE @b @¼w#h=g0Ss@<-ks`\NIڬS34ϑ?O{LuG| 25mEik߫εͅpMs0 /x꿌b\Ørpp 054Jay҆V( vZIanO@Ucmۼ7?{j = }߳_}, 9xԻ^`h?EBOS#qTd 4CЈkTjo#͋VC{Q|~eHXEnxn_ `)y㪐iw+Uu8*iL ';8Nʕ{\8Lğs]a7D|! C|Gg=4͠O@sǾ;A^Kf c#qfJ3ynJfK0$삖D0yZOq ˚79x?έ8& eZ 'l9$TϊT<DYx}q#n :ًϒ+?7Zq}?w mbA~@=nNԱή s.UP\XL$NGCqP%Jϒ:6ro#uck8X/o}@"-sj][v޵ }{e~gV_gUUu2b /P rSch3A eN݁3V (r TR/yo=5SC*jbF/a! /X,i PwI\(.ˮ8U[U2[eqc2+VWm)AWJә0:[ KLR 9`1, tޫ2z!T:B!b)4 txJ:.{,a01;fqt!0*6LY^ ͒Kx_ANlt /j E,@tx>oğ[/]Bo7Nʀnbwպk]FK%4 *{p=!3IA (#|g 0=g0 z^4 `:^o 0@Qx)4vjCLꏧAkj,p \?e r9y &tYyp\eIf6쎓{ؼҌ9 R 7Ru7t\[Zs/(}ۓ2Zq8AC=~kfx7Co[{ߪzkߣ@3O 8ANJmwHĿbm6{R9J)HyzWsT vSWV @+m 6`UIqQPki7^E{ :?( "k .պ8H8.փx.WH:je^b M Z-U2Z+Kh z!]2 iۗB)W2p9`14%Vw0 ]UY. 8pK&]$]5ʠ3egoɥe!8U -y<3&{:b`:`@gH+0Yjp R IDATC@6-Ie4W.r{(ɽև "Nfv7Rj`$هcOɅ9btR8PLe',^tzK <A91p^?O_.;0Ts`[8st{Mc_s8ΰ#vp`cȣqq.Oʑŕ.cP0UͦMV(1Uj O-饁KAĘ' {0w7kk?akxV5},u[[8o3}o*8 c`<9Cr'K ^fuB*Q&?}L~<8@R6}9B"p$l= ck/v^Jj1 23DvQft/$3LJ1 =,SԾFv7_X?mc>ZIan @ \TɊ^|.k%<#^ߙ}z@9 ecC{K&0EC)+$F,F  tF\G*{#[*RЖS1'z+^JMV :x 3+e?wʮG0\O{;]uB|bc("=,}i[L 8eH@UJUS/vOzJ- (2x F .o <:<gN_d^S"0+=*{N9RR7h%^\}ӟNῨǜR93C?) *I Xј'Ns;Ny :ix3qƧzAQiRsAX4vv3nQ x\F4i0|]﬋!w45@OR.&ũ* ( nO+N@71%l/ x"LW=|VwT`6p/I9dvED{,cߦGZdDa BmX5z)M  @RW0R=,C"+?~dNCDOO҈J<֕¹syI82>G JX^@Gp?YۑL-K r˩0O22j4Hk%>I+p@[zes?EmEY{) iϒ) >GWZ 0{?JǷs{2,H/j7\퇎kkK7?g~5s+vw~aվU/[HNq Kl)&1BajWC e d[C*S> d髄jUNj Ӳ`( @e@lw^?? Ph'i\V+L@D[ 90𜡄]#x\ F˩k`:v+KV@"5`y.L V\lyF⢭r'S 0g~0]:>OrD2%ى4?=̯שZb9RMoi; ?ջ>KC*btʫOy l!1imSkDp: pvg-x· 2x?dKB@mp3,SSwl@ktAl?v zJwPU(EbZTDk%0ߙϣcI!iU|o#Cz>Omz)bB5zR(m^V07L'nK 44qDLasY$1}ʎ`k<>a Y] @nq<\8Ap&Y«fߍd&gnˬ@` }m1Ǥ]gq18?ʧxoW{_>.[Eq q\}o? e;q<xDQ\bJ7pҡzzr]>JpgL5ek D_/GAz `; X`1GK*BOS^dŢ ,@0!iٟ$#O(Z:+S+cw}|07/"@ Uw'U:1a{iC? o}~TO@4=R^~-UCAWQ7Nn&C@MZS ͵5lm*]l^@L[u!J8ڿ0 `@Fe6V5E@ .@/fL  f!B-ZF=*~ - _ )մ[KX{+dv_jAT+>t^[)fM=Y><4Y͑5^.n fNy`j$?K4@?&_1)+ĕAGG<͇t⩤퀄CRD$I<G=?dI(S0Nc'5 )cP!]L71tjWGP}XA~v T-˩yjՔJh p |) m"n, ]O aku1 x`)ʵNjӒ l-iҳAny `HhH;Di@5 Ox D8{3 0 !c" %2]N1w`ssװJTnWP/z(.M/tǂq:Ğͳ\cLcXOCOCOaAe-" ?);yZ7[l,ӵ5+ŽӸwל Or_KYblqÑ9XNˢC :q?J4:I ,JsIVwg0xW@di*2`Ýs.` a@UAJ(TJFR9ݕ} -Y@<$ T*)CZR Ŀ^/`bo#{\x{]{rVŒ'|a'}Âb!zs( '"HPWYà_7x37|pU il']br}Xua3й&7Q0LzUl, ٪btLV%"0 -U~q1-+d?]抋¿6 [-o<,m [v }xq\r88Fr|(&Op$~J~ 5^YvPRRL\WR9úy}L<.x/Rh}RAZ'I%#2e'-*: K?7 n  +\Mjؼͷxrּ߲[oȲ7"}%-z᝔@⾚Zy豆ԅlI]J{JW1  8a9p2;$eA  yJ>&Yܹdc1V-pg"8~}G辑 Enkeʬ5G!c.nȓB@j0W%SnRe X,6@rA*Z?i7@38;r_K^.[;|˒i~|4 Amz9oDbcGH2f8> S\ʗ[rf\x\~?nYtlqro{.|0c-0PHp9|ppXiez{,sqTjmplZŵ+ ;528[ f_yVT̘9I˗uy.5;q,Ҹ*N.](A+q w PfхvDyL:{Mp= 4G$xFv%R@"PSK08qhƋ\IDt@Yd@J`))wuGKhAEhwʾE8 `pp{@a1d$%; U?|]o~|oNiX۲ӿ1 yw 7{f7>0m T")5ÛP A<[l`6sp# ukX_Cp]`7: mfŰBh5P!j=Fd($Dk4[䵼2: ; `5m_ab<>}ǩzSHKW]Lbx5"n፴[/<8 k6öbE\ʣpA@! l BA' Cx_#bW[V㏎|d`I m˽;gg̵*w~bSүg8!~dDS(B;B륽$@N(es:qF. ϿR}5% pԵ.T:J=fZo`- [ulA`OfZ5l&>#~eC  @8D;z4N#*ߜUCŀGҪ$5ûh@SuoV_ WC+}"X.m6،Av+!L* ay0 1@wcn'߉;W6S; ;p'hEX<<3a۹-laI[Nnx{ xv;OqNťH^%UPTd<4(l2ẁhHG m?08;q kJS"x%rBW3=.'֊@6^_k,K*Հ?Qg/z`*]F%g0= g?J/^Du! RXS0Sa]Ot{s'Gń~Gyt oX7@y:Oż4ʘۍ87 pP ?9ĝ; յnF\4ar+$e Eݩg%SI#Kj/vmj;Y> ,W\uf WO#9֭Seݿ_I倇:?ko?Ƃ[!!rqDB@XNjf36xJi`5)cG}]e(m5~XiUx{Kh0 crgnK,@h;`/eFPZ8`g<_YFg!;V~$p `2~o}˳5Co^@˷޷JJfs̐BDQ P(w=dON~@\MܫV9(4v3hb_ Z=5iF; ?lNf֚hHkĉ_Lfz IDATǠ%5Y%9yp-ązi\ oϥ]q'9wuCP06xq7zԅS+Wb 4[X4 l3 ` l+_Y!>;i> ۞0 |;8v ۱o;U&>A?6ekJXmw܌w m[yϹk'svxV`G 䙤 *쯸t$HRfJt;< 5GBL\q?倰8/sw ] L*HR)H$ t SYqWU:8NqlU9ί`pC^3=az!9J O7-Otz*J0a24.5 aG}JU,49VϹұj[Mk!T#Z'V)6 Aeۀ#ط \{jeI=7 $ Kj!*:Ǔ/ƃRkrƌAp}2\fv7ބx-GzΧ, %WB?sOj|ݏ_W P7ٯ^ߵ־wC+{?Qe Htb(zԊ~'ľ+aJĉ5҈'`Ŀ MQka7xқ۸3D;چ~3l=[h@S >N;+Ss (K\@qqpfJqO;.,^h.r[`C =l*n$UEBЃ㶊mp?I4b=|G=Lϥ$ ))%Ӌ)Qz)  m1iߤ/UΉ;+P?-x)ep@ Ws!׬|:j|Z}=< @M3xS=^Ne-/l5al`^{-C 7q tX!FF=\ᕯws8<(.kʆy+s%Kh?<܁%O@Y(OⳞqqMisHAxZXr䟅x>cTz`grNÙDcv98+u^ (pqRA ,PAEYPW^SC9j*4*U"ǖgIxy=&Mc W!l5Jwܷ=ۢ1q .=JRo_-x#1)q>|q^\{;RGZiŒ1%簇k_9'#YmYЫU&f>!LJj{>HΝE{#LC|r3/+rȽhc Ƙp޿+rCA\<9g:L&Q ٣qJwF* qZ8F6/M<7_1`&0$蕍7[KK/k˨oB|nEiXi6V:*|DʋNHIy `7s;~;0k wσ?}~bOs8}ȦƯ|:_GF@ǧf>./je`5 ,>$'D6KsdE#ڠ>sM #!+lM soIYdkVbVOtc1%\ 0$񺵞1IOL5|fkB۵FuYn@{S #\tYE$MkT0gQ;A؏NV~!|֍a `02jX^-2wXiui2aX_-oBu%l6cY4 8 M26]B@ uE„--k ؗMmxnq55 ji/{]~0 }u,(J 4FZWq pe.,_]<$WfL3qq* 8^+Wm  7g"b (XID~#Ea(0~;b)r|hG\2- }\ + "yS[!6:e%#{esz.:-=O9 CVOt@`'}ӛ]vj[QQ- pvӟ֙֌^v.4H7K+A @%}\Ҋ`0޶*. lŬv|1,0Կ^oNl5%9τd \u&@@B8"kAKqgw ?ՠuجi6 Zpռ.{rrg@Ao{UN8#z}5r]iFڋv;f1&sZ EՂ00hq9`Nr2Lf-`<AHj2 fֶj-jF>likB|.lJv17 6+llV$M28 0}fXSFHNҀwb`!Bxs+Z)J*by.o4>,JUk*m,X UGp~nf|a?"}/9B~VcPn)stH<.@ ` g`8EGBo$g~caQCBAR@MAy#`]T?jdӈ&7ٸSsYy!C~a0?`>?@P?9ڠ֋Gm 8V]p3(m@!Nuѓ+^7жجi+` {3Vu3V9l?ϬS\zn(igZ-9li~ý9ǥ |w=`%oƣPLS_&Y4ϊc:Fp1s!0!p< 0F rr`w`,AZH,})bTx/I-?[pQsGi?/~^:?coPV 4B˨xc ˄N LKK`I+ oa׋KH ?/⶷$2wB?W?Z%˶g}?ztRd7 5>9 )IZAuep bϊ 3+IGf 9\tbBd]k,^? {3ѨUuw&n4^#n@nzhVSwgt)nJu*l fxO 9}?x)Qؐ7JXAUhl-2P@k5 0 #HL@l&m48+n  s[v@}J1왷D^i5yZ =•J@%<7 @@ o8e.=m,@LSLa^ $ƞ!s@n*>M6:BMbrS-UzXJވ%er8hIfPQD~0 ETYTrY 'Cb{}t-3~l6 O9 ݒؐչt;{r-o3δ__Q5!ѸΪVQ"mSr)- v<ƕ:18=ϺXNN+nue!W9XrI#!@R=!%Yb,PZ$XF1&e?&+Wpl7dӠak=ZIu1߸ OJ탗$_\-R%ѣOI*$%_W>j# K pKPGafХPtJt7>^ }oBCv0[W('NE8 S~rvغY͊8uH΍=iDžܣ.d4%0jw lJ[ Ay j#Q"@ahʏXW\xv?l܍f>Wy y~ ,c0a#LAf`yp?G|k]b'dZڊPT8XOh.{U !`a^ы갷H;bR&-/ڥ/C ݋s> mVmDll&;Ol7š|/p@k|+Ŀ9 Xn2{dȍݝ/zg& (a_a e\*l\g`_pb[Wr&5_.GVgk$`?eeBv+?׋iqxx" vA:x\b^_߆% :*Pd5!EY)s3޿gIrEioNbܛPg s#ƾ k|=^_1iOH o}`QR gCVR6v+:# /xMS$'Kx;:`_~?/W u\/V~߇CK_ܗ&4#33P!1G6Kb7  `Q5QN"c9J)҃i׬rr.~o͠6@`]ƴƤtx3w{ى/.p8kZZ!@xY{.81Ncpa l9Q{N.2xvi~ >A<᳷avbRVakvҙؤBHpk"1y|/[F<Qi=A6*fvdcӜN2*?B#c:rw~_*̣A|A| ZDJILu a  0=rpǓԀ N#d¤LtfyCT0 &6\W4]ܸjq}Zrt:p倝i)rB+V>*qчUj7+.C?\B((DP, k3}_ Lnx9a>0ﻬ:ZupiQFcpb e36vLI-,BvNqlGa#da3a<9#M.{Rq?{p϶Hbxn+ݸq}t4Hw!C(űtr IDAT}:7so~I}5W m\hNiY4x sp6ݦ&j> 'c3+ǵ{?6䦿^.|N'^`CR왑2<IBs҆qcgT=?}68??`_V}>AF |tߌ9XFnv) @J.o$eo~诛_pWn/?Khiig+ޅCh$տ ϲ|(9!UŇ%= .EX7H[pt&5u dNzҏ q;<X8\2lGЀlAoViK N2O,[l_F[^E0xUU$XeK3Φ#g\+]]jBl,35NoNXL3T29iϧխQe :5 ߃^<Ϛck!^SfI`<R,hSOA M Z$rd `اm]R K{2 OCaMV@3IokCzM$K f37*z=e[a/QQ|x@R<7폃 x n1se?ۦLz-k) 7tc , d ٬ǘd2g ݸ>|,Ld?Y7!o*EP iuW.w=rSm/pKPX?zk vDre@փiwoGu.>,ÃĻ9. _ W%`! Oi8vxgU*wL܃ uz9@ J=?d`4^g9l蘖ewzd. V٪,AY-JqrAc JXi:^#?vY wppvSSrZBh9k=_3/+sxqާ_BרuMCdU~SPPlAJ6 6th kfIRX~ Z Po9OeW[൵{Y잷e]P_c[_@-@m@=o7^ ay ^þ_f#-ϜMfdo7g5IFaLuъwU!A@̐Ò'aqt5&*R< x/X<*V W;` H 8PY|F.W= $/>+F|FF#D}4>Ŀ`_zi[1  d@jt9d3c9])˥=D8QYkf n[urϖG q~&f)@]qIe_oA6t{Lu&y X5Ԧ`cx͠oD:}k12Kq/Imފ?o$5/~/F@|)P2Pر=~F`OhdXtk_ Oo#_NExxYJNJ"rH] ~Lk) P@#ڭjOE=y uj7B3jڤgL$ H%[Ty K ^* \isx,@FH y@5ö]>3&4ng=}qL"n9$aiׂ4oA1vxXgcf?DagMmεM<(靔fߴyzwHQD'%W Tk~UºJ|'8B_f*X}^y)\>Tк{Oxd}< ݉v֠ 0?JPyzV,ZlhT¯} XmuVcfqdi5beDzqϹSs9xK9ğ"^m1 8G% awT )B_6㞣w;m|0PH㳳x5>ǻ ր]VϪ_kХ llvv'l To=)wSc*ϊj]`&nQ Ÿ f0UF/tcNlgỶXjMկuK{FbyP=61}rztJ-vlil}%+nc'`ъ.?#yIcWI脄KK7wb/o?Y﫟l/Ɯm;{=/ZOgo]xs}|R0 i,ojS/\)-"I 6 0$퀀&ݣK5.>(Ł ow\R 7Jx¿ ۃS w^P ~/zIm`sTkN/CTe؇v3L4V.M0{6QRaAXoaJ: Ѝ6B@^u/`lJ!rBluڶMR* vu`fZ$AZ'6ksuYL6pӂ;7!w |L41: _sT9 X9:9͟2؄5~x x=ˢz"qɧϠBZnQT+䴻\:+:NMAv҆To{r% HsyPӊ`xQx溵1WwyNsAvIlk )&WΘ0Vgk4xboXS/O+alaٗ1!oG>0KU(b~w `u>`zILFu7٩_/₞uu4v6ϠtZ׻0ЌH 8*0+%)gE+nkI2πAÃ!;5" jV<  * Vkj3.u 4l:c`jB/Z9ê̢gLe gi L c9Z>a[zmֆ}lU{$&oT˛׊yZp;R8zH䜳Aea~\m;ď.g=dis!Ϙk=Au~ KdߴH ptFO ~J/ ioVQwpY|K 3H5}ANx]9ĺ?E(K䤳oqk=Ͽ /gSϊAWTDa3"~+@0-+g:.W`E,_λd 70 kv5;1E)]+ϸR^73:d ܀,tɛW 7B\j5fbךY,ȗJ <ѩA{bgTqR#Y960JE'3@ghAF5msY%habr)ߓ*1+wTbޜM`,A#ŀKߍA3 4^hcvlsY,'u 7?y9%/H)~Zm{s ZX?7% [}csKmoLSYJKJX<=Ë9y\c@pq,? IDAT%K2ʱϴ %S58,KkGf254!l Zˡ cf?Vh2iZVBf Au8F߳ ,W0eiI0ɞ e5Rm>nK|R 5drsKkCcʟ"I[F߰/gw9e 19 s5KFwI⏱3!qx5 wKcL? tA wN_be@A`ǧS6׹W`D`k@q ǭ:Sʣ8 K/H iD?Nxo;_Vk>Y6Ptv8|g"M׃ `,ҦM%w`51AZA850.ZHSXjU~s_tncYafwyaIƤ* RwHQ)wwthIvY 8E9.xuf5}L n4iyTdRbpxB(1O]{ APB>BD[TfV+HCrrs11p> uXNܥT ^{4=!znonwvAw$4qjЯ/B^N\ )xl3t} zap 8﮹Ьvm_ ؁0]Z8\͔KZ ɠ̀YGe+ޤ3Wr bz05i0`k2@!aCC p = >| OQ0 UB+q-V5?D>AOwG YLFw}888u XY@FvZZI675r$ø @!B |z*^5T³jȱ<>4>nw jv,̚v =[gŽ=NsЙCج0A[\k[0ǑմǝV)\"xn;Y-.teۈ@ F}k_/%| Dpq AIQy g(Vfb)H/s=L㒄!MebLc_._4+03=". XwJ-`NRMR' s(#ު/K"}'4o|+3@ܔkI@`g~2OF "-EZrժV,`*p&<r1KܽjpaǂsR* n `ZB 瘧[Z!569=rkYwѴdӏ bbV$# <a e I435rU%7E]aP65a ЃKO;ˆ-`#ayWIM\kua ;e/EQA[`;>x6 qY_hl M&_hbu߯ w˵R,ej|9itIx Vc!X !Iq+[b Hu%x ;k 2Zh֠ f+\mY1 l쵷p}9Yػ{+gz 1xVȝp9a_ ?O8_sT. k3jXC,;qq\meMḤp~jq=d 152 @1:S1ESA^aKB ~x /+x-8/[㞂Dލً9: cI \'\:SeRVcr.Hi܋ʰ|!A<6ci5Z-|\gqN.C_QD <븟_/p+{{/unŰCB=Cz05& o6Q%loUvk=at@mJY䰔DI, D>k`N|;Vx_~Jή}|Sz5s?]4_f@3M/Ӻ'h!R$M;n7S3^-_i֮a}7S&\,.VB$C J@0lT vɂM6; Mz Yhe ܎@>Ƿ%x^\,Xc <$,R@)@$ȩbL</aIǵBfZʥ5өZia656:ktAlAóAvEd4p@BCܙrx0n L}}5 bZv \bcaL@Rr\ZxMCaBjtV`q"xDzē8|q@@\a{×F@w\ZI x :i4szI;% +gVA\-XOYY9#٠krc\?*7A*=9lX%*`Ml`8_=~8 wu0cV A"/@k :}NKkLԾ qCwvBwf*l;0'\&VILW\.crQQ)Z9L9t"un Xohο>A8a=)tMR'*(i߱- (_|}ZNxطƒ_`?)OC??zds̷ DxRqq s;-{yA8z\+|x }Ӄ SY׾hyxXSz]ҁ4$dxT`K% _{JJp3e!ZA 5qܤg!q^ $0Һr7R+܍gN+ BK , ֚#Ic(L3*=B*>@ A1GҦnIT'EzMi :['[UJx`'ēZ}L[ŒM5`?ĚLUca ,<!=?ƨzx!VYۇx9&`^JTJ邵Z`f|:z}VlbhḱNWNOe^_BsR^&s8#{ЬgKd[473[* d_9RRm# @+ ǦYN;T3>*g~7p-܀5_\W9ovW^wlnwVʂ_)c};K+ht lA8WӸv%si u#b-a P]zUm#1ft#8GNV? :k \j U 0% VP̎|pήz򊛖8WY==c[\}Hj&.]ߘKyxs (56Կ1l_%&>;Ɩܶ*€b?Me=l3!Ea3pTf1VJ B̀:4A;U;e6X1V뀵dםEvs >X`  ߠcxM?.H(RDC_~y*u:.>ԟ>7~@o?puqW@ 7 T SB\oLm-}7!`,sfaA[:|Ljh*%0 %׷[e7"n1+A:aV'7 PffBw}C$`l6?$tPk0~0ObJ+gs")҄qZ"8]f@^]N m!@CgE?McuVGSr;Ă?A1;/0Xr? Uhy\p|BD,Hd(:n1Adn Je+lg x9 @}!vvv.X70wм3'kA ;g|y%7`@Sgx+)DZ $Yzm*zZŀ(E:)yY:k@Ll(@4' ^e~wp v rS-`\U$lǸ֋ƶZWب ~bEх23:v\Q$.|tLIrVCqԚSJ_ e^^k#9bw|oz\BL G7!7*,IBn~1gx[Ÿx5&Y7x>6ks>?g{oMMSB@5?OO??}}/}d\ es.N@X?1q>Cty)] ( ?nwjS).LZ \@0md[kfvӣ֢Z)L.ѭ&mC%)>8wU>V™?hg%໡Vd+7? ^ |?  c/kXS<1Իa½7:K[M1w yT|hQorz% q6}zps0] 7([rqi.}8 c\-MXp{9^) ` }}`y{n[-ioZp b$Os J 4! bn/ϋPg-P թ^Etz btJwXUs#ځ0b8eUOBO9oAf%&[K,1xG/(=]z[1_ `߫ ߋQI-ğ֏}d YSL6\ q&`?( ӰNX_w`!_= pgAFAq_ N  ~l!|` H' LDZG Vx 10lǁǢ_ {B& SZ8¿Y\p)KJq|ffacLjY[7^}vS=࡟XoNg[\r!(˵`܀ `eܭɌl=o x|Sj,UpM~pCG I{@K3pxBqG"y3;\4]65Yrʭ!%,jrbC*pz898MͷAԻe+}ƽ~=.%sia6tcfӶ:@TEHiQekd>* vd+%<`Ͼ ͼKϼL\_nJqYm {a ^/5ҏ}7 LȼV .u^ k*VZw̛7^,wFOx:e-]xJʷI}ķV9P&jQډ%W\6hX0` O6EFFhpܵ\5 @x4.a?kEpfIe*յy3Rf5?>;":Mk+MfM媃712QBA+{rIqYYChٓfq) b.Sü‹)BT +ȩb9YP$'_qؑ(<" b+ TBa@&CAl `f/4C^WѴs%sW.pzFٛxfq1W%Ε* ,*GM ~Y9et{ŸC4=x0p'e;kl7¿JȬ+)8c80lAl b=mKh<l ui`{m!1L*\:c{ p!pܜkiDZ%O}, 6K.G}z=jdgq r pZS 7uz=CﱷF(&wUw@pcw3@a{x|Ǒe|1O-AH"?fp?!YI `/2G#9v ɵ\:\fݿ D-rD`FjҀL'n7,k1.mXnvxeo8ߪ @+v@CYp k 2>߬BkhdC= P^tDV-oՏ~I~FBݟ~'8O|;2`}ssC_[Pg d?./D/@ԆwK.I{ygwp!r8o M/nzMR-!}vtd_#ue{V»VJ=s A܀^fA{7e:ϲ2^ugN r[B@(=7bfɨ`dO mӋI+@/caS^8eiTzWAvVOc<|`Wx;i*NSz!I;iӑsk4% L#0kQM/d˜f}J@্Z Ӟ#) Gp^)e9dyi [9` +D "V 2w;R je; 8̜`-lƱoth?0I ާrs:_5@XYI*笇9)y(tT8$p} `g)kMA8 rNq6ΗexpIYp@ԱN:`G 񟁀/&Xl,&v΂*x岯 ]/j'iӅ IDAT YVz*v-K!H8HsdSꜵd4>VۥP^tzP 8G`Ga'pq<8e77ѷ ̷"1@Ǵ҃P i帇* 0MgZBR{@*š}q5wX%Q#5ӣ NASrE\7YTȎcਓ-y܃]m^?䞁#ĻA%؈gLZ^8:\}<] < a2b bj`n-|څkOk(e q|.b:e?A lS=RJ.?'8__?Ok#O@n4?YN/j%@@+䯊$X~p ӠF^m@!Y`9`^s hT\`_k@Uu .~cM B 3Nmwѿ^eyIgQݣR*d)8[d¿e:ݍrw]`y5BW1i@x7|I3mɵLb'.x!~uZ9sDMﳪm'Y-~f~bϾ^?ĆߋUNvtI ػ_S2V)c4x1OgM~%hf` <`-Y6G 80rϙ貴V 6!=R'9G@Xk_x$Ȼ SO|t?G<-< t%@"@)&4qfM]- <(V(4@v";5[([~`s:L~k?DeI"ա-R$ei n6 ؈wk-(LZ`MCe-]KvE{8U3s*_W8^ew7Ll% Exr bD.RIM/E8,aZF+M08'ML"C*} q\۸%.Y6ISVӱO -֪@V}*@LY/"@3MEwx6mv(]ht;E|r/gu~_Bn7e]'ǰ~Y#`2TP++eu&"F'cqӎ=O![;ju*L\-x.5_ (hnNҍaٍ;u*U2mh-Rm  )ݏA[Ao|hl9gO\Ab2r9q&e]`?@)|2P(Oa'#Dɡߓ KE[glniH VۂǻmN `7tϵҕJۯ*`@>jhNNEr>V+c;f+( n=5 nGJL~]<; 7>'Rcp_ qӞ'@SuKQ^{a [xSkC/Ms]UʴQ*f S ?VFl_HL7 D;?HIWι/q tf>&Uzlm <#C pLJ@hTfaSRe.(]Xun EA%.9i!*ֲ[kK*0(Yq^Cvhzb^50M Ǔ/碥`5f@t`@3@+MuMnXiu)]ָ v7z-jL?P&uH}';5" ]ΖcAo/· [ dȊFg#!3 _Lybre$lkd T ;ȗ#S-r֔@g1'*+bL,9 ã19|k[t ۃ \Zi  C $`t2R'g#r!" +2b+3Ԝ|LS*Kroh1[h{x<(7KSsd鹦/Ó(^x+微t/nif} V 2yԛj&8a"%ނoȺTh!ʨd2VTjmlhN; 9Zx{E.ה^8fI0G48YcG+ i8ſ)/Jiw"2 O{dLx:=o~=?NL_o~.xKg;9%I$OKvLrю-&@络y8v&e7xӚE+ eӾ6`gbQS؉׾ u="jlZFkI9楀0[mC "ׄ Gw7 >$}/lF΅E?|S B޾dĿ/2eo m \& V.6Iw\S_;ui_E+}RbVvyN,]69n-nhǭZӱ#jdr.OV]܎(:ǵtmߵ%n-{>p.r vӗ !\r *"v;=g{L JMEm*W+G D QStz`{ a7g+ *vV+(Yy(ecն-xd8㸀#~*8τO~xBb6_D_EnO$ =m /ѥo|>+`-JB9/nQi,״C1*]@ 9{PԘ v^|Zo6[YLƜ@uq;{Mbz~_.m@0kfʻ1pe5=qurةcIhG3>Oc4WkVCF|z>g9+q 2XSZ{e+B;/U̫`3u_8`OgOGcjKu3tKtE˝=`υd'i#,b@WdY:c@q \YOS% h ~￟ Oǭsů xKe~tK$uNO8OJDdQ:8J@[!Hy48d^L n0c'N; Le<4)o% "OܜżG#7K1h5۸7Mv)urR;{q Va\fҘ4 ?c+@.XZDsΙ̘HUbw@#it p>o[SoO/:c"4,~5*%{ S¤Uu;U0Wzܴ@7v}C 4PB:Yh#,0+}9S/Sf[m솩"Y3"^u6)[|/%Iyڋb2brA6%xFY\lmCȶxKߧ0G%P=^>l/Osn=(I,P)ٜ|1`e@ƨ,sfඑcc~.yKL[_ ȓ#&j?G."W=))?ȋ0`D>!{{юʳVT`׃)@Fjo6`Sh=O2-^El3!mNs-]^Ma>_ t3F`d,Ul^IW _)Y{yJڵrƞd(itPNaBS8 ދg2V fJEzߍ?&/Rlh5m ni2,skr>OqϚQϠs ih]y+J>+蔘f%ۚЪTפ%dD*ʚj6*_GM^hZ*81eKvY&jV/6`p? 2Lq$ ?m9+"K+~q2Y:ow}Ah~-'gtzZ.|oD,I_T8 ʼn}R 2e#+RYF)@VBie(8,vgrP]cPoYh] 1i cHKhNyӒF1$HFާv Z1Y{Ǝ8q`= gB<c@i& ]!8WNZlX Sa:`W1mS&ͯ?nsEXy[uTD5.`i\hF#u2RjdrodkZ}uxu[AW 7`TatAAg|*L#2@ bw@Skʹ1PS/^ukܵRXR>'v#q5'Wk޻$7sVn p-W:Nk7+ɢۼUCqq>&8i9`NT-zKc@xs/K)5Kߔgɑ7'eoB^s~7|$1;.q8Qy{{1 U*<fOxS.Mզn5x\ڌn17pJK`HZCxÃNo x z*(`4}7ХnĭٿFB 5{j4\E#`11$ri'x'vIz5@m0h #$@.mm;J1fا[sү4 n jjͪa>:s ?d!߿` |ȵ&0<"S0L3z.u$7d_^p/SW%uG0:򙿏 瑾w_/'_nj}48=/Y|e|O3~GoIXJ(uCY<& ^)NjFMhigEƈFOK[hZ:aDGLmnRtVR G.Ge5g.M7 7d t3yw7),M=Lq~4]Ti76:`>JYhTU/3\-E"p6x:]4Hx*}er! hu'5Hk l*dxlZ˾Ӫ] IDATЃ}*SGmq;A@ksn }%7Snx40K"b'#s%௒%ΓBN:ƶ3Y ^ikӽ*8F]HqrRc@4obLM1tc@G`&'\\U[ֈ{=@Fx|IPB>}¯iƺsƵYxd 5BC+2IgXn[PSOh'DvQ}̇Zm%b,,#Ӗ뾿Dߵi`*<*x0Eژ qPᯊ]$QuIt}M_Qls?p ?<'#g[3ϢGww2650֏Mߒx$R)uʺ7OJ^򠁀؆GLim7YaVTxFm z!퀅g0]VԪ Ko6a2blq `Ŭ4XsR7cx^ 1S@@"8,~) jn0[\ة]'Z(Tggj@M@ gfLџS ujZ(2sIa@@FE𗘔:]2ܣ u[)hr@S)s.ƍU@ bF͹VO`Ҟ@`7LN뜑#2 <h^ ?h?b'qH|"+GD|ky)-/m&pV`x<ȹ(@"~3Ri<`ذdIoR SR曑+LK?j}f=0,XC2("ZQq^}NW+*cx/zXs}`k~ߪ4Aǎ'0Ez ^wZ5Vk 0b[x@u=)f33c@N,8"dgcQ*F qNfLV'OzR/SgLfIf ]Zqq!??b޴A@?adxgc2X 2[Nfi̓@`S?=D?w{v _? eOG;yښ_+~!MdkߔD%RYq 5u eߗpĒOIVx,HItFץ0,΢TsRc# iapv"P @[&nfp]˵tPzd)7ae 5Ԇ,$EECDɍc Ox^n豀U #ܠp6i}sF咃k$P)Wr.9gn߰^tt+5δ+6@[B<"^Xhv]`80v@Ӆ6kMrڛ/Uy?.f_ 'j?gf4ˑ7䣉|?_>/yogZ K.j787ŕyq] sUK??fi μ*j1n(OIݔpއ.%R$Qk2$6EG_z=x28/w4>ݿNm :4|9 5 9 e]hdfc8vcE@@ P,I)^yEXzR B< f)o+ߦy:%p)|&C@H^^akXB,f(H"1nĕD7i1\] ʌ3moh_c_{Ø2nW L/$Z,@7Ў5;7"xyLj~}cOy׭t~<x|rٟ iAHmyV ɫ_ rؑ1yL3fˍ|)JvAs,]pWHfdұy86U&I*)orLwGs~؉,$'D?=udKڷ>'"y@gsSrJ@J.7] F6~# D=v" i3-RkF%񘶦duGvۍrȩJDލ9|`|I7-$lOj4imK8o}:|6s0?؏ύh8^ItdYȒt#6@.<%0/$Z%6 }o}9_?| oviaн}:6?t~lN7ё0џMߐh)]ƛ}-v3G%ȏ.)b@AlDОb%zmhT @UW}-Z*WX7%K@ˍ/#@D5 3RMY,yft"_j.:Vn&X@| *56-_LAx"k@IVyړ\Sn"ҠWB\t p4":K? I 3O^_p +\yΕ<ʒ,6Oj\ٍzec9w%R)E.%9/ C8ؔD3~ԿmXpıd`fi AO:u6 w3dJpc@OL LO3gj*TuҢ4rgYoA6q}m$b1ִDLlUrRRs-֪tXx sӸv:S/4p1Tfҁ/V5Ք`Qajm5V#j#҃ͼ|֍أR'h ? A`F#*tEHglǷHP$Kvs9}S"Ib _hW~cF>|46ܹkO꧝/|֙yed~ "Uk.k&ʾh$.h] ,Pd2 nI A#b<0 y9)~ h6 `,ɺd&ōs@chA)5{Gn'4dJx`trk mp/&x :`jJke2 0br+UʴyY:-4$ Z<qWLzp 0в y|QO>砫A|KLq3TN.}Ŧ)mM},A2n W98+64u"ݛ@3[ژ;'A)KHr|Rm:O)7܇L"6v7ŤgB`TWG_RX@8wb)X6/wWd-ou+L<%_6ךdk=uQLK7Uc@"@mS_g[-up`𷛲s"ns,P) <_Z ,y=³!|<A,@ˇ+%re\y{4=mgU+9/]ȑ%Ox4@z3H9YIA|S65 \7/v`YˆؿU5߆mK.1k>XGP5sCH  ,p0)E1lD#R**T`=R*UnHp.͌RYc h3y=B_' X-s׹̫x8Z +fq?คY GBvwI^މ3CjfN~ךFq6eGW;͈hR Mk-O|)6OxϤ]]vk6aIGxD.Dמ~{0{{u?ZV+ ICbT%6 ~9I'OZ.Tj :'??8_ѡ9_?CL 'w۴Pp]{W?1G&1"_HfߙLP% IXd9 :vUHċ9yR* tяZ .0s[ {b ;*iU)+I67h^2ƙ:hBp8 + 7p3VnGcuR䶩9Jv@=ฦc 򹦁Dg}65`#Y+W鍁 A 5Ф#2LHf֧Lfb. HgȈŸ£“B]R¤\'ٌ!0Iao&bc" oE߳W!y%jG^y>3|ńZW@'9)6-mw5n!L W!_'C Vd]u? 8L*5vl΁fi6O܊Lsps L&t#Jԣo2L @/#ytn0h?MwoxNF.O ׼+yjPhz9C˿`up`{lHpİeI2W%+"% ab=XV-b>sɆFq2:CJ?'~"V V`"s#lH$[]KZqٍ%csic*%.s\_?`\b^) Y]1x\|<>FZw#x%[{&Q P7 IDAT{$ I9{$ً#GJR 4q:4AƬcN|꒽69m~{qUAזf_ 2-M*9kR̓x&~14, 3I~3ߊ:g^blt#ݑUnAץh^fToj\+]iы3ov6MfY j5C~ȸ{٧ ocYZE${ځn Iд&)`؉N` `)TW Fos /5"J-}k-ۏUh\A/kf0PƛG[ŏ :SbebX6$ nW%B(nPQ t4G`@KץIL 8SfReLV$]޼ݔ%6%M}^@DX^q=A#C^} wO~g{L z_7e22P+Úw MXo`}+J$ tk#`k+Z_h`9U o8ehR䥨->$1 SYtv&lD*W>wrDe/<ˑ"&$p۟e-^ȕ3Ԧep㕌"X=E2Q \zOT@%*%oS׸k.6io? ؅mpA7f+Z% DĂ xalynWb! 06aA(HzK[w!m.??xA;B 2_;$/ɏ2[jeX¹au~GB$(KA|`7׬R)Jiq9|fO9;z<:zF)2#-i``Vڜ%` *m҂7ŷIm.S-?gɺ N΋bs{VF-oIOc/U|EWY6=@+~{e>/g"x7>_Ć'k$G &v8 #؏@M- ˣ;*erK[+Ïp5ʀ ͦKຂnZo7{$wƤ)4'%4QkgKrP! R$ @ 5xq؊k#<>0V@ 7B@iJrCq|e-sn @W$ eEM,u @eKgT5_a~*U,S2?+Sw tR@7.r kZ.=JMËr n+tN`ZAJ^Fd&(x[%kfnlkԛԺv b(P2m$zr:xayxhWzXD^(^tTS>Pwt>Bb1zfPH'S|2+h|H ZB@'/!"H 0DLy:)uW."xs ;klEGVyS}L>P%$$ƎK, wZE)n`/vHn@av 7c"yqjb' 60`xx`a׼Ì? IPc^#b<bNY,ϢBvqFtJ9d%8-24hir-N EDOhcpj!\`7Gn[>%xo[6RʓZox}j HR-SJ#3H= ̛ 楑9 oqHkᏮIwHcb-b*vHH+]~_w߉{+k_? E ԴyMgSoFg?7Ѿ(76YJ8uG"@R TDKEd 6b J52=:e)KZP=~qnumA4eP:ЌXZV ܬк8-=ZT/&:y&%n\xOb4 `)"P)M2\Sxenp (3%J^i1.3ᡟ@Z(@"vp* …f+]{$%fuႭ9W*gySf _;!!v`bbºI6 hKna"n[k㪓<2-- tjyhYv&"ˏY^^y ^q4'ա%)C 5IY۸ɷIPl xn`Va_iⴕY(w{_b|!]N 6% #~iznjaEFi:7_bj붅.h׵t`[x*60v6YGW#$Hb-+<iwx>ϓjOUK+ L[apr?@H^c+ 9g\y%lX yM&^& Zu`*3U0X ϪJ}Ңx%P7I@=Ioz9i3zd#R6NG5[AS{\Rߟgʳ񨼔iˈ `G E3哙)y3m*9:Z WJ^r^1y1yx&“#|yrٗ/1ȨSByR'pp5ZfMEi F3j8<) Vf G,k1Ǭ % #o2<\wm Bn7!NZSx{FqIx N37KZ$sE"n'"@wό0[y|_cSc#FdG/CݲsɠMrHn 6EEIZë Qh}@ZNRB@YhDJy2{֢Tu>KCt427ƀ.4*ξ%1@"REbD!KZu@EGIi %!ّ _fMm*[f#d:bvV֬j5*%2'n OxH7vehEB[%7 %hM@ J ?ںVj`M <6D.i]xx|/Ͽ^vػYؤ"x6M^{[6 ڰYЕSp0d4p,MSr^rxk[lK$Qe"QGJ'1 ܁nV7<-cfbǴv r#/h*Ti l/5鳦6J Y86}nK5( ` IfEh sWtuU%eӓG"ڮ}# &a<*{.mT/w|Eo0:?DёYt_~ɟ~= evRN_ˡO~(2)2oGgw@~kos7KES8sC*T 5(I& &GљVgJ;!8 ͎d X@uܙ;؀W^ eʎPl ᩇMPLq M6kBC3RktJ>c`P`mLZY> [di"rlPKWWU/TCuJ]a*JӍ)aʍkv[oͫ-oL]gX,G5!h@Ѝg-W|0-UC>SG h*䐶'MVܖ{MJڵGk9Sdg4J2AT TIs!R63fHF,cpқ h2A yG! Y1w,S}$h( Y@q  tۯEw8^@UiVj0S6Pi|;|, bgcuۏ]@%*GTr*:TWWWuU윘)JlGo=8XIydEQ$A~c9+jR| ~zkkuQ*sgoh_l\zdoXN!]\IUմl@3NCl􁠻ߦOKN*ɂ@Ox)؇!~',47Pfu\l&<ѳ  b(G5ΥbxS"r@]K 'mon?)}ڔ@o-J_*~M)R6D:(Ǘ4ksgZm ZmX'XS"b>|F轔 g#O`q~ 룔g!ϘsBy0.! ˀr\xpjqw4No\%F5LjT|H+ܺS8Ha6mU%x)&_qz.8Es4N ky' B"8DmRĿ _?꟣r;eѠWPEQi^OG!y?L(-w'_[Y{>6@`9[@;}ϛ|*0cv{;_isAȟȺ?FNe8X"Pe9: "5?Q#(NZaC%u <i y 6ZտUbV2CQO fKcv$Q$Ӕo,RBc,c sSF#gLu38xaQ!c\JTw >9£7}ο;mp2 )+ 1^VˤgMzbWdpNAOI} $4KhQBt XgwKWs9n) (=*QXl0,S ʶ|O έOx i6 ɗ p@h2Ӥ @csxv2`߹x WC }HOiI+~ qӰr$r'q|ӣf-k-0r D!=W"YNAYHp jѶ"@@1:Q+ڐ &EyZJ6Zdo\GA3g&=~7{l 3gA.C̋!b@d@Lٰ,2f*-N-uS` ^~&@ %(^+T'Yq*z PP1Np!9eZ3yS(EEx™LhL:@E}ϧ ah{DI88K8No 0y90}7XĿa`*Pgg?/efY f] K/P2$/oUw=_u 4{&whΚ}O48Ǿy? vfe V>Kfv t 5?S3%&&$Ygt3\ԧ[fv/kZ<{AxJ*l2hDI-01Z!5Ɯ@@.ğmnzM.20 K̪nq؀y+ IDATRW\NQ딊П2ae]D?R#tgf?"{f5>1ŭ%n ;[g(퇸-8lۇt@wk X{,R0"`t3` .%)&@ur 1Xz*) t% x .o @`  Ox2'nt0mA z0(1<Y0ğQ؝'I˼,<%t,"A#>@@Bc `!@aᅡ;hL\R@ Tb6Zɕ<?ar.CK|L1.{͙m Ӡ> {ڲL>;I' ~ =}8o @pʊw >pٰ\j$d?~/ʇ7I,Y-ԣiǸ49J{6JQk.'PαY# *Y}q22OPj*ٹ*eNگp@{^{}hcގ3?GpIt]8!3)@NI#60G u8ըdDg9w[k!SF!MJb QZhUJ%fBu6`kL,Ej6=3'2 eEE[o-!aᯔBX>y PHTsyY/ ~؃6DǼtʗJ OW|@M݄jm 0!Yˢ;N3?n9!<]@82j1>D2¶y(L 0(-Jx: {woplAoN@c/dT|n߬b?` tp.=(Ƴt}ɦ bMÆ4zR@1AOmVa @3)H7 &=v{L1wUai I |r@aWv\zŹsLn\)n4噠2ղdR#ے\(m G΅FNkrOPEZp5B؛a- [jE咼hkU>ZPDR\(P$GD38P1ƒRE9UXV{PPO5jm*q*1e8fȁ 8 2USJ@xmYB7"x"D~ׇlz՗Ml:͡h}h5[8gf0&';k>o C]@[3zqu༫ZSs `;E;) c4iBy™G)# /S0s?LN|_@+ =/}llq.u?`>5?tfK|ς?FB');ԑ.J]f [p:0.kb1^^{ZL ;@˸״zZiUAjvp,DW4ø1aG@ 3` ێ4fx +CeIe  DqV*tۍ˒IivqbDf"{9 ץH{)\R!mV֎i^.  ;e3>w^YR(=d^[&O |V'm:OWC%**Lxe )Hxp$,_*nb;A'< pA# D*D/i #v By v  ߁@tC&0EПZ"O7TF Ą9 @hRs %ju+1];ٙ u({QL" "A^+tH*_š;Q4zAN8BUxq @o±cL+ƚ9-WQCT@T 1ndc a/1f @='!Kz-{-_DwЖM?P˦a0%*aӞ:>܋k[hςZh?2Zd)N$T5Ϊa[w#%2q8Ns(@rJW_Y qN7ꟛf﮽}la-VO+=?{nXE$  et @3 է` Qnjjh1txz+m38vkMu`hŠV'` X2hn dlؤǨҘ2 A0?S_4cVT~ sR˹q[uOc°SV\!Q%.*J`xm a %i!\FbwA[ZNa.u .Yb݊ "Z /!i;e_RB=T[0rW쑇%^<K@)xJ-O^.X@G τؤI5% P ]]U :/\@^X^6x: osa|wbIxJtU*%+ڙki``'?*3 ql'Jz<6VhaJ]BlSLgEtq4W{4$l@(K^zmǠ[Stz?"i{TוMpa3H[ ޿I7-8 ᙀl2KpDᙚBZlL{xgir; YzJWk`q B%>HSmVn%B9H&N.;*+`BT_qOZ7]~n2 H9zP hߴz_FF3ڴ u.@@IS>QԈSK9 1fY-{N2I@P#,vB8y ]U j?Q_>eÞ]7N^=82gp޳zMF 4۩GO }jc4blqƨPgJ@!ߠ@)  _`# {Ϝן3_\}oe/x'dn[+&RTm^{}(gxpgIbȺ#L? *sMjs R:NaxiſE]WFxՍ P#_hȻpখ@ ,5ș(*8(p^ XLdo8㘎uB &x/UpZ%ZA*J*J8\D2ϱK qB^ օ1 5* c/$Hd[RJ%`y$=~ˏksTi tx٣Jl^Vy.,ϳx?ΏEx^ꩧX́phFxM)l :(Ѻ!f Yװx6ڐ";10 /SUGi֯THf.{iQN|t8}փ}݋s \˘ZOPj8efr~JGmrgۨ?';6ڭ׹䪔?kQA?ðndcC,*Ud1 ) h~NnƤjK08 o8u{m1Ʃ˜c g)lf) ?)kdC{%.g5IR ,UFX+nܴ\RݯE!%QΌo ~ OcyħWo[cl ObOM#`qō w)zW*"k09O76)SZx\5^JCriLywzJlOdozRJh0Q0D$ ^X~.Me9I_,ˠT: Y9k}; ;tL:d`]Iq.&@L{|FI ،A`YC >3W,aeЧxxxz;B*~x}n)Ae_ PiV"q1*舉s7axMeɗzrq aO`)H'DgtE%ux7a`wwO YC"RI݁$N.N2%}[ Ri6ɻA#&%@&4j@iGuSB) +j'ڷ'zhZ!ə}岜$^pL-knQMug8=u$FY>p8gή50lDuaR! \.@rFҌAXQ:ʜy VlQޏs> }xO`C'x׽9kC8Gk6ILpn1˟ӐqS1z$:~j{$lj ""D q6'p;B3?B`P*_`owƿz3 ĞcX&[$7Ӵ>t_'^}.0"@K_'w$Qx t3Rn* 2Wk%g ?:N~{GCV Nt6x7&^h]f3 ?]Gvy>c 080HR>@՘#TnNHoG Ȃe󔆣m>%] 9A,! 0Q^W^@UR ^k6ja5J_9o(4QTRՒ\dHr*+nP^ Fqgl۴ޤ망rջz_P+^oDXv Axu:<G&J,@.BbBȑK2 ?/ BgMerzrvVͥSx7uT]NxbRCG G G<L:iDOОָpR1]0K$vXDg€0*QMя5G0vC b .RoRB=F?y>Ru<=P:BA.x*ceusy,ǬTJd>67k78h=d̈́)h)?*&@&F7 J@.݆ V]6\Ȗ\^/8Osu?Nx݀O\J"*'.݁&PXkdVl}'l7A_:s,͚#s9 s\6 RxfKtq98uxdbbӸRTEH=VQ$ &8m\NoRq{in- dчȤٚIp<5N{yƜr8H?[e6ep<@icwNich/ctڸ @3αHF;"W3?Qs?HN/][2Niw)o`u_?=ִf䭀%[r{N8FƗf_).er\ ~/DW>:i p[Ce;N,^ QXj}YBmet v܀,T`j:ݰ2醙E- 6 0t@ϓJ(4 IDATld+5- ΫwxTk 7Swt (BDC6X)ExK*+yJ)@-"v":}ˤp'vډKh9slhc޾;'^Nʍa|#\ZӐpZ cQƎ4#'Kle/Q1`1v*7rqpzǛMHɢ!nut}||" x "k $ЌFS&e ZF1v115 ✆ch96%1[U0 i+?WJ3Kc][BxKFGϳľm{o%ǻy dWu{􎣧OjpO/R{Oݟ;_|=7e _\@>@eU`{fR`0t 4:wp  `8znMfVl?d{6/摀6~' i-F1!%7vTR^0883mn,ȯOKrKɔ-dÃf ޟ-9ZX.n}C0i,R̆0:IB\ D ك_c K`X9|ADߝ2NdRaA:?[n no:0I˞l ƻHr ΃`of=*܏jiYsKr5qa( -JG?NI\ U/C[жhcT Fe8W\K?vB]rGfa3XO.s Jq@6=(q]t~ _@_3C04!v.,,nɖ,g㚸$dTXL M_⭖t`]tpX?"y+iEee~Ws*bq=iZf/:]ީU]Άg"B|l;Z+x2P9X1qP=JvJ 9@#N\[sp6 ;lK> 8> 2Aq ى1c&Ϝ&=GGb貇 l.DS(Hpcw(<s ;_#;{f|`;} O%PˋOVޯaQqa*J'{L / w@/ qʚb4mйo&Z j_?ok Gǁ< l_0AZŵnzZ/5h׭0I%,olk'eY;(MIlbi# ,޾6[àz]p01BGchhuAd!DVqp﫨[D j’Rb+z u1(7@\o?EZͽrYUOG7DW)dxےP#Q)R'_ ž~CLx^'骑'@ySc o<4ڝF; h¸"^,$4Kq74Ջ1c+S Lb ^3 Y(fo ?Mv)P pW{_z;+nu|N7?cwv潕汙sp@ؓZG]~(8 }%o[_z3P9HV'KݠD'(/(鱗*E Y; l:b(`Zܡs VFl\M[oč a3][jP. l6 `Cn)``C;1Ax1AЫ Tdm|{%1(K_L{ ,J S["S'Cg$@@Wɦ9g']OU44tuX~&*KC[HZt5D?_a5|ݙ^ȅHwP΅TJ`d2Ϟw"+\G7ROj=N)1 `eAW;/A <<~^Htݏ~rS^\yI}Un7 ^h.1F^nW yZ; kk<λF$04!fG kv`FԠjKQ=5F!co`|9,qHA<媓T2nV){ؓG*1(6%Zi |~x^Q*]rPeŅA: E/{R ^)Z h?~gI*Z)Is+1qeo!)܃]'峊rn9TpaSK9OF{hNfxݟ;|$)R aּs,;kydӒeN,S\ՓI~!(mIg]USh@8hj9 ]}>I6*E6lȲm$:O-Y?'w)vv?@W?wﭤx7M@@^ܒZ]XV~?}7ÿM;_y#~|ZYY74mm0O t:B}(: C-tlS:\zy_v4 b3; ޮJ4-{0LĸMfc1WiNKRsA],cB2eT.of>% htQ "Itx:lk0(u5_x )ͤq5   #{^~K ama@΄8@R!hAxAeHv;8|njt|]sMx9-es+H=)4Ro3 KzxW!@M+ y,xx=*{ F[UBܮVR%<"o%B(Σ!x ܆;HC1|g(7bUj|MԀЊ͆ϋ;I8Xo,QMS+ޜDoyEo WC"W_Z7ifCLe\s oˣ{?*=T)Bye)PX,WCvTULǂs_TAЏn5S&*r\9[%RAߜߞ"2@[N`0DfUs®J3}7`e`=Uq|Lca jP~`.'/mbZ߿P  [\<Ν)8>sϻ:i߂4)39`&h*nOR7ğsr A9yd~_9PuJm^j7!?~"{[NǗ`&~Zdž[I{n8flgDao92Aj,.s93Gfjx5Դ9WmىﰄqϪ6#u}^C Ph(o@ s]yWzpx;d̀g'zpCϕzs蜇Sf!~yO^mnF KsK?,6:{^iR>)hO1{u&ȋ>wVgj!] T$eJngZSιpMSk$}V XyTԩFhB2+9X ?DSpE=!ę|~5[sް#Z\ 5kYI@.I)@3{+\,Kğ͟uQ|6I%YUvK ¥t8yM i޺iC! o1gJi? DK 7a6kICߙ5MV- j?e 4vRNٸe* n{-LF @A@@؀01P0{ra j}^XxO oU`ͻ/uqѓzx Twل U-{``.T !@Cֵi,e»|Sqc P g罓|4x|~@S-γEN^`r 9{Wiuߴ\mSEATT$ѫs"QX? T P4_\45!*)@.$[Ep]+aѷr:HĠ RϿv!Gag`]_E\S\xWІW\wۜCx׸%l/s;ah(qp @V]Qz |8_ ߥUJIE]"#w&TkZ1ޚ8[COX2:72ss6 8G) 3.2Kt7^\R.ޥ;aESlL30/_<* HMPƯvzJQQ m͆)5L[3%\,Zm: ]ƼiEF0.q9S]pcx F(xpbi rA68b|PJn ̳ K/W|Rj7 $^z?՟8}_G? Ŀz7į|l?uFmhyǻ|l[o-:n/a`׃#3?5{NIo@ < Ani/8\ YI$C<&Ozrnf@lq ''9Ct1sbb6G@R0DZ3hS-͞bxy~x)+ ~ leXf$޺/Ô "MK`y7IaD6xĿ)g+Q$PL!Cy}^rWcTcb+`D|\R`#ѧ)P%vR4}}?:$|xʗKCM)A-z|BopYKrq [8~OKg9x\'`ݛ0oDB)T}e@43p.!I V oT݄mu=P{q@_7NM B1J )hgWX3g~0aG+7@ 2l EikqX*K-d_9 DJ I@3?o ?1OކX-[|9[ 64G?~7uo00 ^qȗ ";|!T"ieN_48`AI6݄@c9]r֫i `I086`Vsί)f8knz Ġ dz8i16BXjtuk[KMfH#^kNᲧ-TEᙕk= qp\mXy7dR^ t4) +H bH)"?x-J-%hy47!JtG"AY  `ĩsa1#T @VTRkڹVP3VXзj1X,@H *`J؃vz!&`T9k AWIvs@t8ڔv:!ʩ5xeTH\C7Ŵ]-TG `a7 ʷ wTG\:@H&;V 42B68pzݼ܂R YxjAMY7x(0|ՠ5_p AIw^D$Z}s `do$C#twH *UɎiUAp}Q(q]Kc vR1匧85yiX?u}p^W'!hzO1` {.[5k\ M]1QS#㘕pG'L7n㧆@8:pu2jJmn ͅi{)'NϼHv>MRJm~ݯ?ҷ>k~﷭;)ַDkc={. qmKhK |KN}ҸsU{ {}K|7s|Nor~hw. \8|Bg):IyN~'p@}8;#`w,<q؄%@gj=sz+8< P#Tn4^F QP7P=u!pcReWk2][{-쁷+)Ӓ43 fB1hY/¹gdgy&\+sNΩcU眻sӹgz'hrN I#-]」6`1 IH( wy,`y~N?p]kTUt:} T\gNh^{>W7%Wۼp>N?),}LgM)! 3񰄂G8$~>ALL' ஐ V+SxNr2kDkDŠ4;Oɠ@ ́rI-3GŽs:,j LPN%P+"a}rRXipB*Rj*JR|,f2ZMo$rvK  o?tH @ >%~ຘ]aYgaXBwAXf%6e2g&p:.}w|rW/ZðH  \)(( "9N)9 :aօ(}),o??,YOx]C ޴bm(C9ji&+7 7["C__5J.oO0R: +23sP-p>g9a zw4o|e._l<C[Rb)`n; ߊ9X'*1nkɬʙ,c0&V(~n(>#"aQ Yk~of ;01^#(@pm/*tG%&ueU}˾Ys@]Hr3!JYvt547CO~#g.v$xo'ueU;ScƳ ] WA}Gfږ15s? ϼrx^vڭϿn Eb@[$( گ{MȦ4Fִ@gh  (S0U0" *0ϙ2q,}.(N2eZ x4.lmd&~NaՔAZ E+<;jbLIo`~AZ LY$,`#p%3,h?sA(nĬ;ߢΦ)ǜ߉= x 0(8w"j 2A>2Sa^nO@@5@V1cEM)ioKv ! $`o9-^kR ``Qa#1.U i hq|;An9㙹ZwF,@=p$j9$ 1 V&T{` J{ {Vrs fsoJ!tqp6 b0"p9 z6wsk!j߻  [ù`Z b[b$lVqYa1c|rl(y*Ỵ0 ױ+)1+aǔʣV>,WaCBp6!xO-w1_$>Q ;uR1R#X\8Z\W?Ɠ? RØYRbYru+uc,r̎a|̃-s=ˠZ!q9cN6<l(z'yMcJX-5Z4ը"W _Q'KTZdiŴ,i󇁺brRm ւuoڥ`c:2ײ\<Ԫ-kuxۥ) T]P?}3# xhXWbJ};k;ʟUX# ) uMep DZ^)aobDZh WÃπ|;_ =z)kO?]'.\/}8̊"K>/~:2W!z[$v/2Uq]οU@ UȺqTN*lw8l e* *I ( C{4aKUn鶯;(\}'YK`]VX. &ALr8&8TN$\qNs-2}RL@)4s;R46@L J,&b7:(zNg ^cuo DC|= = Gքo aO̧!9$j_7 pMl ' `#s8@4@HU1y0ӣF,L4\\\\\|ٛQ,1,SCy.{ii] P %+}1%ך$@M[$ 7B? G{Wkjur`xun[[  KPJK!)K7YO ߥ7A9⃞y@`GIc ] 9p33{b ͓`ϖ؍ (Ӹl|bs~'pe9/ׂv֬z:+aĿOzM# -~1V@f 6S#wYgBYS˰/8#{,vλ$o;~w_h}jxȗ%<~/ԧ+q+1<*n/ۏL˲bX+9+ȚFf^z.4߆_f/i=yժ? a ]P-E%JsNJUAbD`K /0M-&2[FO&W[85% 0;l!} $ 8xv_Kۡ@0d?@Qk  dqIʙ,&&~ @]]X`q)( e>g).u@ARR=r?&HP ^>͟NgxgђđF2F+ &.]B%& 0 2Z{v @ 56Ū[gA&$יeqQ5ׁ8"@wqf01(< ?@q8>KRy"q3I+$aC\] x0\-$p=d@˗,"Q"3Je+͜b2j|oOezjJao@*An<]PZ_`;d-?4x~G}}?/STAL`1>?ǣ'ϧ`‰\ gu@#)ӭxjd f `l $`ss^g7IT[qw3P#֪4 3C21h!^A. RjP웁z,ԁk reiJ?տ9$C&: 14*ZYFM@'gNLK9e׻B\Y TG \#]pD#ZϪk Ѻ%U ! ]?L `&elw`"Rx@~<`:yv[t5`>A0ޯWXf8ڢ4nvɪV(>o{Z:Ҥu6$ܒjrM}M j_1&xdymVL~8@~ >IU_Cfn(=p{mw|tdI8-Y%Cj*)a:u]8>iMR韓8@:{Kh!g9-oDMV+ LA\2r ϥi#N#iw"%w0`]24I ʹ"*EܽP#pړ>8b4  0%8Bha&M |u_uI2 (x7hp]r@3Z`or{׋uZ]nFٗ Y5.]A}~ 1y{`[(T!p  $q8Z1) IDATwB_,* SCpOh bBTAoJ}J fkw*0GNIL\ Z 9Fׁtc U346 2B@ e+G`Nϝ%k!ܛNH4`.4j{ Ø Rhj sSPM0  ^9dV0)1 Sc_|A/A/>??1U?̈~ c? `>II!k\zC0;M%Zt?fl`+cR_\ugܜʃ/zH̒'(ixV"]{3*2&u=v%Tb>^ p   _Yt- Ȭ mUڨ=aZB=2@T@B}lwd<~?fLGhPxm`Ckѡ]Lf&` &0uכ뒀[R :lK _=;Tz7 G1]:U 2MMjP$倗Kj~gn ߿NNaqo$ IC:@H}8/g%?%eeV\~*P% Zh9,.4]-2XT*PWHj;w$ 1|z5Xc2ҒhRBϐ%?Ɗm0(4%Ak@ kDΏ& 4My&Hkvo]2}+% g78KB(!|Fz ' j.&qv +j}=i{ &{Xi`f ʟ1yrjJ8#`@>oz둑׿hP@Uq1cxPBwJ6{`UiD8 G[r_ʞŚPcql|DR&SA# KGW=8vJn?5IW@l `=D 8 69l& [Ami|X`DʮU - Cr@$+0:ǑJ|Ni.Y!-c$2? jJhX|yĤ暱6=]%F,ÔMLZsS~)kl@/%uQqOKBAPdCn Ïf6Ja UU41u"63X{JFu.U Nf9ML63TF\@Z2Aڤ eZ l(0t o[ph!o8U_AAAA@۹A?G1#Uj UP5wq3߾T['q C|މ׏c OJA?&.Q{Ž@_ ={8\[=# WHt%>݅rMEr ipaM sE6s1^Y:,Y1j} !Q_5p5@\ONg/s+r~Mcu XFsodTZWV;Jǜ?; X1;F&Auh _H{D0Oٲ;9b\{[\*sMjAe? N@ ˄ o|O5X&AAF=;s~GWAF tx05`6NUri5&= 6X[6#kRWbe9'$7nOHi{!O?z[ x"#_5[b =WI+S Ǐ! 4\W\y_}̇~:ks~!: P3o+b gt.W"5 s$F1:AE+&5ue$4@SYj:`F  X+&J рqO6*[dqZesjړPepp;*@v# :UCPi05(n' 98{:u RLnA!9_`q8%d"նM>sDK];4 8hy [5@ @R6{x-*[2[86 v@Jj#RWo,JN`I~V[oVIyĠ"th78-pfL*@LWXilwL xJ!q{>1$Q/m&obo􀄴gK@›RcBI8Ig7 0sbWl͑vCу|$.Ö4#k雁?)ɲּ@)(OAZA:p_YVw ?e6qi-S*gW`L?k],?.Cncv 9JaP\i?#H.Ğ r1tRfp?s1_uG@d<+WёGz8=Mxߖ1>*g,3Ʒ$4M*-ks4c?m\g;`'3H^ε]~'H@@m&+0gC$+: {E%f0Ԫ{aT7eztV R =֤s % e(/ +Rݖ"ӒsABwYtb*>!KH+o^$7ƒ/mxCO}&0K?K=p_f7]hd~=v Wrx;t큉DxO7N~U)0_zk6Dqs@$ 0@P @w?) .m[$16 R3`LdLZdG'zZӑ4#j5˕J?}R'c;^##Hh=@m!M)Xb%fU(Ѽ*OlGĮ= 7|^-O^ wH@@+/hpUuϹO7Ư<o^x:k}C}o|VZvժ4ч$JG$\p枓cǠ:m(#t@- <0+j h~'l`5Á7: kT#RHI1 U B BpypkhiUq_ &%#Q!σp0L`Zd֚܌m4g$  (H?+f DŽ⼘jtJ! %Fه־I*|eF-_pҘp|;Φ&& O9Q-`}*D`QL#MIN]zTtoTb>'S$5b&%aS ntke,#Y5^%#OɞLG8QwC "uKH+tR;;|o]I`jeom֞2Y٘ͨ&wS@ H{Pa"8 % <8dqNp%¼}cUW]g!eC/3o 񷹝8ik9kJ}}r+N;X$wcBy7cX<p4\ DP(_6 AҥKjɀsyD/iG{TLس*a٧)\^?|b=- y -J" n)ڒBsN <ҿN|Z" /_ u|jKo+yOFf>Qc=G#s.;繜o?~B;,.e$]e-Sç_ ?{@eu<}ouvm#_`/b?*{$'4EVu%]:$օ:`di:kFx]P[[-$7ڥI[`Dr%.f~Є:O7V\/k&*H 0ڠ*AD\w(6%# 7a"'$ڌ.y 8Sh,HAK( dti;eQU!VqR91]Cx P&P$>'pѓ J&qTѧ@FZhRxnzG%H4i,@@#@;TYnAwx{ ?Z>D =bd8,)_[ʾ̸gT"4H e8$Nd y,/j׺"f$"`l]/p [HFŏcs"<#%@SoHp>6m:x}o:u8~~  ry ĕ< p%P*XY pR g |'V}V2u K>G:AZ1k@}ڣ!9 ˢk@ [CCӖfs1$uKc?6k 0sgt t`x1FdS vt\OAE1 G6f. ВTTĢ{ RuHrsNKVE-+toJJ[/?L,N*e܏w{'FPx,4IJ< ,'f]:wy /s\ǻiw6]lh.Y[=\j챐';Ep.W?Ȝ}4+}w.74AW1PBPk(F>OIN`w>fW\Ӧ`] h+ ǿfAC_RvW&:؈iU̙E9V5%Z'8~͘7$8}l:dIΡ~>>2,"R'ye%{ H{P{`?/_P%TnOew==wé%z#/>~${;V0[| //ʬ[pw8{sikCU4ƿ_N7 V3`3`?YywjJ*@jHZ%* w $l {NBZ: (*{Q*-.I]J 2@X; WZ5},])vkޤiY 8#՚^H5F IDAT¹MBǼnicoxԚ# Z˂z9'pnJ:ޓlcˎMPZQ +? ?m%U K*5sϚ5,-Z9~BehKtD,Z QY6aB- ]r.':}횵Bgא{G$Mo>< @&=5Z2+d9̀n  dvvY{s Lp+e_f.nz.{ڡKEP԰#n8`4>Rp$]Ah P 80>w?-I %l#+ Pk$ A'+ Y=5]RGq~\ƽ5P#C y=w$~|y]ô\-êߩNv%_;_LW_&1 c,3:pM584i\0f&K9Ozߟ?50e .m{L8HEi{  ~ƲwFN_#Ph#]@; }[Û:ͬYimYf So{{ 82b 1?B6@ e& @? \.^ D2:מ`H^W1H8ݞFgA؊)k"gf?S$6*.vkqhbdZ'!l?HqxdWDp*y.0o];b7C=~/<̿F^k'=rӾfdʕ[ (t1?;`.+tS|fgc矌LJڿm|n|Mϯ-v9E-g/uDʳKu֖榲/ukd$4f1uFZgl_ #%K]0sN,8^ p5.I4so# 0Zd Y [f(- :fw2MYhDzϮY21`IYW/X^s /JȌ t3˜0Ή1I [|]pBpJڨ X JX59k=k5 Ѫങ3UvZTgLaF>R&Y}7L#}NǶQ-G,ݾV連owJ imA8L($VGu:%䁊4A\3@2|v6Mng@:E@([qeJʕ8LR=ms vj1[v`\u#^im~H%?&Yl럐 Ly{GaC ؍gٰX +ycPʋکҟU<@RnxfV˝ ;q+ 1W[+ߗ>av+"7Ю2=ǡP <5[!nl7[{yAz׃n=*ƨ>aqtj9.p!q8w#f=7>Mz?5gؚ ֐]mAu:O >ge0HA߿G?`TddjA?X)a!sXZQi9ZmB/H^qdFD rNH??'ʿGPnՖWs7A>/_ ?ffhLh`/zSܙټp.n;?Fz|Hx3]Fʞ̦-_{Jx/D_Zvs߳ūv%P/U~@>*Rڐ446Z.4c7c03ўz$u Jv 8@ TCu%ҌiK3`pSJ<$5 p&Zy/ 1e473(AG8\,+on܄P0ԚE? acp?;40 8Ҩ6׃hp$'TO0Uꘒ2&P(0Fkj*sqq]ˢA=HuTǟh$x@ ,OS.` GW⮑jw4 dܛ|_&'FgF=N/;U Н x `|r\:oH|&:*@~Y8S$Eu8! K'E;H@I=ϭ#ea ،?@n3@x5Џˁ$Xald?[\?wذ`-Nn7rwrWxL4q]rW0W2s`r7 yr/?P$XQY `Q *|.6p_x*qJB^VB)1*?54=&XX~F;1&;`?iƵ9e*>;53 WE G3sQZOu:_aSf-~̧52l%~ >oq[o K6`1#%FNJ. ߰o4?nmCYM8n+ϙ>f"4,m22[&Z40Џ} lefH5* nCVC0UB(+KBkR-EmCRU9 _|Qr!ʲ(Z1 !U ?x-='27#oud/wooJfZ:yK;+7Ý#.wU6]Xuz1?zO#S/>{D_f}3Tv.eJ?n ާ 1KrIYA%MZ𺒀Ȋ6iO?$UJ.CeWWA'`4Ի $ ?Ъw$^U%[ 5/]yoZU4w~.mpMZAƵ 9.6A~ŊX3Gs u}$QTK4% |;MXtc s UjlrμU|Ϙ ;i^I1(#p7Dq9ՀJ|J|JJY5Nwd+b:1 4}J@X{yG sonLCs@e/s,M(-dzeRpUFVl;+Hw%! 8 W ]N `c Zu`@`wX= R~^.10B9vvgzz(&8.dK,tp9~.ʭrmlkkW@1`,ی<# 2됁@@ wT}Gk!\;OVS\rw’P{!;czqqXA>`̀SZ?|/\p,U e%S ;Ng({,355/)>'e`ݘF.S@"~i\cJ j1, vc35V9ؤT 5v@M$ɶ%Y_Xx5Ćf2I.k'm5cROؓ RsP}R= P9KA%{$>?"ػ%R_P ]g`_yzvKߎ^_7O>YkSyqO羣ҎQW嵙1O?~?v:fQ =1iض/w/Y͂#`oxU.zwNp7l]eqENXBW䡄<{N8$18<8lsNB&oNh^skL4X!`Z8& `$jTOs镀BpjX *cpǠ1 a{@֡\q=f\' Z$ױ!I87JnV "u,hSNwpa/LgƴL-Kjr0` 18T` @P gZ5Uoc3kl-$]2 D)}SȦ۾^㾲ڝ= nC2 Jh<8ReޗٲkUvE]~8N~?q r \`yTf#3Syk{ۑixϮ)Ve*xV=z goKe֖6HFwK=J֥6.5 6T?yh9?[50-u `2-o?+]tIwBw0&l70hl R|C4gw(V hCVqTOJnpZ"Vb(H ط У?VB[f(XI7nT;]W|~!pv!mNw4>UV=F+icSR8R8*Q6l ۆ c Ƶ`׷` I@.P1HөfU J3+6Z̈fF)$@u:H$CG0`CA 𽲵} )!gUA]p;q-B^*feW@2F Yo 6(`jqoIDjohfʩ?kp@bⅴ2`5l?I҃_V Xk6)Kߡu=2uȫM# A(1Nz^A8V: @S._9o,O+(ԉK;1ڳIn:_J+Y8~XUi\cx[1Vm0&zAJ4XeZ 2nx|ꖃV:ȧa!\ 'qGq~1wڜLտ ..XLavz:Uk k#U03#2W+!*sK<(y ;,JP׋߳S/34?'s3~C+sw¹59M OcfE]JWQmvt=K #3/|G^F 5PA>AQ-.a=*9J.jJQ1)> )Ց-#Jv+! mTAx)S[AkJZ0]`=f _R  Sd6Oc^Z#yÀ*S#\ 2+;֦5Y%#Jpcbca"Du~ |WXGYgdC_#P$JߣZX?SmM+AuBU8$7*ᴪr )c(Fp@)K ף ?M 따UW 3fVo*]wޛJA"kP;^^X u @zZ@d 'ۡ'58)A2NOzt;c.p;DRt&|?F&cW4!W{ (X { ܓz PTzd*#c %"8N`\92_ƀJaw^mS&iOeob2׃0sY/ۼ\,)L#'nsjN0 __2m 4  0+7g1N{p8M+crjsq;l=Mj*|R }njo;54iw"[Ɓob ~_Ձkҧ/Ϭ[eAS- sMr TNj' [v!+P0V=4BgkU܌+!Pu *˒`Jqa~aR{TKYI3R!sɺj IDAT\xUvgn~-k߱R/yCSog~l[vi8C0z{7fG(ySyϨcx`6~>|W97J~-Ī-.S$;9x>ڒ콒fmD*)`.*˭ /E/&;LaDI4}f?`u-G,*~=0#׍VdTPh%.@M ;h k~À1qm8|_5}fpuU1mZo ;t! zP [ҸA2ncJk,j8Ja%r>XK!˙@\ض}XĄE]vCa& nDS"[Al;|J@>]l_"$Z)Y 2k$3)UNk\U2X-W52;F5 pAn2@m)F@@0Kv3g9{d6`uf(T@#I%y@ܞ X։mQ;\%iҬrzgwͬWO;?$,(Κji Ap+`,X ^>\_?FJ `\//y*88Ošq_à~ WX*JwѮU]{,6 :.̵sRtI<2_8wj3 M׈y٠2Ű< {`,4.<Y R#U[\?iMȂ9"k֠z;fMO(ʝZDqfaW@,Zd΀90.U`z:?Oz=%mI\T TVT%}ԀTp,ݪt[UVΩJ9UrV9qffl1^cX/k6q^l&f&Yc5^ 3nt=ynT*ݺ=;=5eXwK&EqYX[ [?yˍ+ё}|=2"`hm?<{~kfW^AE lBww Ƴ.oG)4Y_Ef}:6?2~;㯺4-wĩI J(E'f[9 Vl\V٩)͂$c6ղѲ+ Ą_R Ǭ۵QJ:5!g?&'h\ka2>X-Ow솃 hUTP:4<%LLdWK%:t^głˬS=EDAM9^U@$S5@5b G6{;x咪dLf`a |&@ʴf봧FTTX%J Nm$ԍJ\ŕJ! L: .;@ط"0"p}i+ `JR ۹^5jՅVv{1~ _ ?fTi-qȀ I/a6j9܎fkkox-G`%j\6})R8*m{-ZUnl~U2*n3nT7v&Up?5m75fx~S nii:[=f翆q2B?'5_1~#^M^]?;쌿Q{rJq7`{|h*ێq*cAS7k K8fX?$~g.[ðghARfߐAisH$YA{EEgeѡ gH:r푓nJκ f>Ga%wi?vCX[)B[ @UFA$Mj8<'"TE]SpnIYJ8@@Gai+>p\AJJE9)/,E X> Ѧ-W"_A,#_מs>){ n>syVذ =vgj ֘>yÚ}/:'M*'(+ 79[OܫnDh_M}ˑO|4͢%Pcl{,_A2tDJklPR$$J(lцE)@vbqbX8VM6JtKY;@>H7@}ҵG@s>'_4n +b6Z^\u~?˖8 8`Vye9Fj ŰLy$$ E~6Ҿ% o&+Gffc-2FbZɭ 2gL&|qXJ&]jt2T(+죮Q#ܟ\xLsmu>&6nxe[IZ>ӏOR @7!+%@ZTpJ=gvpTB6 ?Ic( e >o*i,IF`0*FWAT+p+qxoMq?iMO%HzgTΟ{LQ?OϿQ=n\7@e LSp ce~u&zB>q)P ~҉qSяu5')"1cY ̹_ ΊZ#%_X!ix} A1N{%A΄?Y]yI%qS7RSg4I4-pzC!HIH:YIao*<.-{ҋu'"ݪJEUD~(p @Y^r^JKJ -n寁GnG_qA4"c/KtE^x4Zo?ud.o{uW^^dp3z1l0OQ^~Wѝֿq,o7 f{`+߈e_vi$H_H}xD߬QbQ՞`* \|X* @s>jU w`Rqd1!'l`g5دJp߃IO~=X -1Xhc=IWy?l#P%h? 0 H^(GFFe=.E.Γy8JM~\L*FxC S7%I\ q]I6(bqo#֑U%xsHb( ǚX'_cPY8=,?( Fd ?J_lEzIb& jn6TRVrYn6[NS]O߿h ={ ̿N|_y<2F~|ݖUm.wy?</5Es/FF_ׂg#zeW솏rj/N;-9^KKzQXci6@3{BAMlk=/pwLƜQt"uØdף0?c2=|G,ZU!g5:-c {F+^{6-}X0!ނ*-=QH}ZGJ/HI5)7ZuM|Ղ'_*ZpKjҽi{~uO<p* 8 kqp`NL`p^-o``k^ lXΝR$C1FvJO.IJkg+KmI)^XDĩ SQVWb_z)y;S#,'~/q$w$>#?1 P)nUOփ7 ſxtˏL|=K^q>vd?2L,bPpa`5[A:piЗ;?.c X-((`_5x`w@@2n` O{#xMg5,0+*#ML.@D~nd9ZJ(WI 8$ze6D(Ss{WƏUb޴omR 3RQLe^ఆ[=R%,ЋArRL& N fSFv`LjXX{ @!Ö `N-Kdf + =avnp;im91$3O$, ƥqE$̞BF[o{d&Љ7ʃJ㜑@6fZ6kZ6ʏMy aFK{@$w5?g@@n:;Bn+~}jp5F FN-ܧ}T9z wL /Uzx  :UfT+ يA: A&{[;_~m3m/k=)N j]ØZqNґqIYit 4Sd??'ۂsT^:إ,qnK -+~^ d H; rm;}Z]Ѧ?j@,ڗsX\P0O)\RjGmƹ<}bSTD1^?n[v] ڽ& ?G#4MD ?Ѕhev ~)oDZ s/S#e AM/2ikT % BnjikEEɆgp/dAY}r8cTЀ\3ԡFn= ui2*l)- !lWaM2fs{sRƝitg`S256qn`m-K7H@*K6ZMq.9+;.#]kZ>&7S/EsO3rJt˟rv}w@g5/w= Ad^ygv[F>Wxp=H/^q[~q߫'?+eIqU)e& X-X s3(y i0IL w,9 /n-<^XLDh1u,D^, 80 0ŃV.y$cJPH҆R;NK!q%!x1,JkJ w~nmd.bBs@XpW^b%6c?{3@2m>"ݮT@2pé46r qؑX>6`hyHwל1×N͠oc)ݳfDXuw6d 8JqN;s*{Qa׎N]~YݷS2C1pLCa„I{T@:fL9S2N-:))qYwVF" 2]媴QQժZ_RvC_//%[nEzJ$ĸ?>G~Υy5yyNM^^;& 6@j@w.oI@p³1*&rPor3{'dAnXhJi2gɱk [kc"0g wQIJ;q; ץ_COǽ{MG*Q w6|(: zGAgߍ^g /?Y? Vƴ?w?6 o85yNQM^a}bKl`ykWL?s_fVdv~G^u\ߓp{A~ l-m|,Th[w@]\&6pr2-'+˰g6XۇE <*^g& b yG@96V@*bJyQfkBpU Μ)Z OI#/!UL˴v*1khl  +8[,jg;^- hRJl,}?@ z=\n 1n T󪴷yx}g`r`׫SzK zQ ej~X33^6m{ KN5ީv4Բ6IȦ@.EȾ IdlBbV gY%>}3MK3ҁIv@2̳8 ,qwq}x= +-qG;94 M!9q֨Niuj@d  nnF̍Fx0]*Enh)_<!A^? AEG5eE0fkDWB~+c+[4cSЧ TIsYVomƱ-4"m觬?[8u6X?<ipyUG~ ́V_';e+M`)!M[AS͈[)|}>^N#`m>YcVx-+J0֚?qNV|v~gJ?gu*race7x Ľ;zu~\߇7V- L{ rY?Bo$W@O > mnRqP@_yU_9Sgo|ﰲ%@SUD}qAVb l(s /K9[*auv{uxB֠^G7sJ <**FQ;{ [E'L .1'e^# cJXy_p2)>+K/Jquq:ŭ{H;^ |Sߋ=/F|Y3?{꾭ۓ^P޽??u[3SWԦt|54Ko-~SLJ!Ȇ (VV%)3`&h qI'@h - .q`<|ӚJ<& {Jy&hpd!+6`G0F}ju^kq|-k7 s"<#5~7sА?q;aTk=SC*( K=< iYIN2nt/kt h{`422cvX2{U*auִ c21o5o8 IU;Vvx#Oi@8 [6u5I+vI`X}(Q?Ge`1{Lz٩cR_|Fv+-P[qM?#1f>rlGǞɯcl'|Y&&_CM#synU<4/^㟟Ǧ4pDE+Z!wDpE7bOmlg Fyۑ^Ho!no[+|LҒ+4 PW|&&bQrj_iL0Afلr:X[â=1zkFg󇤂Yu#`+'a,Coy9A1䴕g#@uxA*yY* (Ѕ[;$?} ,rАv+0A @3VF3ofKN 6l"2VoFjz@ 1"P)7 cv@` py$`/HW` KcYEj@&q @F pV6B'AZaAy 0"1,@'* Ed("鉍I cVP 8m ?Ln?a>XmVpW}-6s2皀 ;a>H;u5i֥6ѡ@O`q(D f67 So(s%~JUȇ5yB:kC5 Wr "x|&o߈kĸn_5жRZz̥&x~6)33!-̆u. &  GLU5.kF 1+RS:{L saxNPR{L4Vp& 3Y#} ֪!Qen{2csNψ C*((wktS~ujDq-JA q(V/S?%m[n|)6wc}+:cs__3w3/ǗV4-{?- oJoZ=tYw?󑂉{k{?#:m6}Ą%gp뤤l/=/U%g4ւÒ(@}kj]/6 @`B fʲ`!c5P4@0UIu˓JO?jdw]([{*hfna] R61A@a`XFaUUШ{gq ?]Z(F04M|;[ښuU0eUxu $5 &p32kTJ.x.$LP< C&&[h׷E 3uA!D`/!6"T,}p l]x0l$*#2بt*A~tj~^_ZΒ>^ 0d߫$ŋ{D/4D s Ѕ{ih]jМBUlydž9m*wo~fX#M%"UIE"uZDŽx0XPg%~?H)Ic5?l9 t~+HoTy`+A?3 ]x}mnD4آaPNFv`ۘDBSJU e$>;Kl}(hz3 kn)>} HMcjxXVl&/d0lFNGesΤi$tQz%Ӫ*X?#*N%WmD =O?bg_doFgtd,S ' Nm-9Uyn{m7/_WR4s[ ۈO IDAT;Z?NSDr;wݮϽ?[n[*FVUb(`e4c F뒊얮 oԄ`JdF F8l f) XHzҜ=0[`Үx`ٷ:޺`1Z(yLЋ$H,cq^`$łPo-H ^bǚp0 S!J,MXh1;$ .pT,11O,~V.#p*<.EFx~mQr@p2ā^?]lkA=+ A@ cc v Z@}ӌ( taL:yFZNP iܛI\ 3cYA bg` Yg"+ 2Jb>%%1<d,m}^iC`ذ@VTT3| ЈoyIIw) dJ%F` GTVln)}\Ão2OQ~o6{Bl6ak==0BRxÇ'p<_/Ę%`# -}m֐T-  p=ns{NrLn2hqf"Ԍ9VqQdH Ĝp<"4+q,>kr6 ?.*܁ܡ* / !q `v ةe0nN+g;/}D-i_$ )v@+jT>)).7]v6|HhI}Vdq6NtL> k7^h[rqmkiHMVҼ;#ʀVamRv32#:鿉M> _W#-ĩ~(A xEKKl=rcQi-6>0=Ƣ<ŀfdԝ1g yF+& %( ɶbJ_3zWC*ȱuWKBSI`oYc& H^> +9om` nx\X Qn$Qۚ  3M OVKXx` "GP&O{7h@=p @:I3q(40(F6'u `¹wӻS[6J`vbu^'!cFzZP >ȮzC|ؼ$eL> D5p߀pO U˃$ WkR> 8[-'ذפ!֌m=_or4ar>E9 ,^YX[-0vRh{ZY~4e y!Hy:%d- ɮ?G]c.2&M?ar.ًi92m m?F*1V5)%b:91V> )/H7nbxRe3]NEu 濖HǧnER?Jt=oщ)23Z_L|GOŇ&;We{(zkySo~sn:0x+p>']2Kdߋ|nDZ; )*!%edGY->%ǤcǙ ].xm$ÎX$`ŔN9aald,c-i "LݐX͇z/m6/d1hZ/EPd,%$GǭXĖ)g}΅ L@5l,ڋ MI@V>)RЉSaJp8X;dQ#lg($@Qc&®ؼ%ҨQMl`!gc! .)Zo{5r-c'QPCAv}8^`8C&p?>3nrF&3f9`\}셗ok7U\FlvaKXtA{`gU}ަX$lJf1Vf@yؙ2z+@$Vxg5wT+P?(38zO[9ܻ2Rb^'imD5 {fHG d@"0Hnl(S T[TõER(FMlMxmMg V(OoNPou%Qaz98k^~߂qŘҐ\C'uoIo=[Ò&c.Q4ldmݫu]ה?Cc~|f: &\X3FҞ+'9g>~GI?8L8JV 쵺ǸZQlV,3w ]v?9-M.g_C!+-k=/϶ey=nW0%۷%g}={~-ndY4c߉~n^aq/u* f),PJʯ`/%4S`${0vI_vPD`a>GElc$fK`Pz1(`64ExiOwL^p YF6T \v'1R֤ca&me)u! $$QSN&X18l. j>gY&^scی-֗KAhrs7WH ZG??(y T TO%NMvp}`DVnIxHLi9$o#$%[tl,`tAFb2Ψ8E2&4!04gh9L9,.󘈳>0~6"vq+Od Jwh=# `h{ `1.CM=' 92 PjE50Gi".>Tԉŧ//ו*x rQUHno0@[cw뵾4x!¦ M8hV;o֭gGB~\7b/0\qi%V0$ h G߇# i-e4[ǃQO D2I$X3#CL 2D xYZ92hd^0AI`le; 19=p S spI) ((CUYZ|N;!R#Lӄ?.d8`dlg,Mn<߃߭s+jGZ^=zAMw6"p6^??])^*U/@}yp,==%=?{ o0N%k^YU2/"h!6! npx6l-~#=<ߎ?}7WVF>zmSS"Ktk쒔S*6x^- .K$`QaȼL~8e3Y;eNbR̈́~&>2bÄͱ3v3{& ];}z TNji+ I|~F# @aԀ`Eϣ%qP&y(ا$\, ޠ5VnpE{ >]Ҿk *z5v-ҬO~$XOa?`D`涀Om.{ĀvIylF1Nx-jfn@QE [%ئD> ؋{^2!U$)Xy0. aLtw Ґi%@iUK|N@,Cb)x1ՠrSVvKR |ݞѣ8A{~=) Bt$D2jD3r/{{:w]߿I=~|S`0*@:ﯕӰ q7CӸ$??3k~JJb,0cץ-ޅُ5l$ ܷ9x %^p倓CvS8ʭHx(lI070 0&fš:ܿkD}LFIg^൝8?IK_tQ$ofƿQlKX^Axt$̴ngI?<Jo(>$upKΨa%߄F;ĩuqHXy?7ȫn^v~$· &SGDnxMouoo]VДoO'oSCw QXKEJZϮsWYo>yhůGGn⳯meNġHEŭx_NI5x}Ai*؏W&v@lYF9-alN21lË`ưasb?ɘwɄԇ\NMܭn0v$h, LkHr%l fZ2Щ@ҀE_A`/<ĵ p3@ytjb n s7>,Ho/t+ n+8g(8u<4('y93~o^E`h?b|=߼~ij8qvܳc# 7T |p#kA=H'?;&`P ..z)l$A$nYvVa@ ^}5X-e 9;iM9~_{[kT-v<-.HU ~Mhr'8}vJ lz1y(AN {}~=秔年]Ʀ=lׯA__`)xGpApgpz|-F7Ц>uA)ZHkĶ{ O[dYl^C½Cð׿pšxg&qs-G)ƅz*sޚI~Fay9 P'`6[%i-[e$*lLs kArfA7I㺆 b=cȢwWZKSb_%R*c}YOk/7Lߊ|/#O76M⣟p yW w-MSyzk?ϽǏ<6CA0;4"-#s&Fg[x_f%{%7 H g[(;ũxX˚BaڂR x VT 0@X36 sιcC5 a91iXI}˄c$4-8l]N q,(}8 Q֭EScdF$<-,F6#:Y"  QRXhi2Գ.wQR  qpB ۴Fmz³^TଟV}m}#o5,ei:`#Тʈ#ϼҾ~P;AvkK;l^f&.@g@`xm i%eoU1Qx9i"#AJK4BOC pO\YUw L: xsfUtj~3#l;\>]VX-ٲ۽qM~ln n',(GI'[VJLҁ뛀uq9/a矶0秈;=q:r1}ᑥյfZRs*(KK*ŪRV) -u:ljl0d1`؆al0 Ƀ03 ``0S wysJTus޵6*5㺨!ԁs` c<+-I[iB vlrLdNo+~\gϊ!𿖁%/m5G3/ڛżCLykHK&۞Ӫ'ڠsߟ>My -?K1O^ De/p?EaUb~쁇f7y ]ۿL3hVxVIc41yOc 㯾?+wYg/xg^'Sȿz?@SOZ?vՎ~Zb^/>^ϗ`]/IqY)χ oIm7&}1+( fϚҮ&(?,#2k80piO">g%`CХ]]iaJMR#6]$ˊ&nq=1!#D8- "n\ %ewTEW}5=tW͉zI <]N>p#KZ Ls>pi3{7`H|WPKG@@ĖN> IDATqDv"8¸joBݯC[\o\ӣ~.H?'32r9]f ;?ҵ z?j’$,VӾ^-)KcBfRyJ%&FD@6-=lL)q'\|BoB^"W! RZ$q?uViM &3D- (-"!(Ajgg{N^bIؼb8cWc~6}~9ZuYh>c5>/3Ѱ!٦8*d1AdHtՉ{Ð}g8Wds eQ!ڴ2ArӚp+f$b` a)MP1?^mn(8qMi"rCOY2j2tK UKc>1迬\@j{o'] ?|-`No<W~̷t<zoЕ;o_*iKy^L)+g7Nv ?7}oSh  N<…@~ӁGZ[U)V9D@K*(C K)I%. i JKx{38/]tƲgqӰ\f`LRքG!IKtOB)<} cr$dcVVYڴiPGVc2LKôEt¬佬K0 p J4%M zJIgVi A,~ߨiG'%"]JeY\:A =3=L n6+ir#. z7._k"ީ(0p|e7lDٍ󹆬@}RQN_o= bCl@.j&~o﮳[]N#|}+QYg\8ӿzٛ%1el.j` [!҈2\#=$^P߱fßr.Oxs@ !ʼlM;Qvt=l^]Z8 _8nkf%m9ODθ D~Mo~o\kGoD7]Du&UJ*cw cz^;]qx`L"Tĸ06K=ƥbcR c]ēµ#1o~ > ď= O,AhաĿu] ̔VP\,"n6=pݭem}ٍ ?G?U?KglDpU| UrCQCR/ UW$+qf},ݱBǞr{Zڭ)`\:Q鰆< In:u:0s #w?{cĨu"TXfy>tۇ p:wʈ)thCaiHoLUV8E8{$aОNy`zZ\+ 1 b}\8q7\S-K>c%ƽ B'S $']fG6@ 5=6(Y.sNYb Ds(A5$_^-A0fP'rZdGBr| $^mxbxU5ixBftF}=#C|am_Bcǿ[bv0.)agukv^ j Ŷ 6<&q(.5o嚶FDg1YjAzWt (c2<_҃'Ac +!,SҷH p)Gq2ɀPAZuKCXNQK_b/ >W}见O>e'?`?JbտC_+_"+RPpNJ vԆ֥>lXf.KKdKq3)pccҊ"@"7!ai=e^z]Q<D@LٟD$*l#`iRfc62&D]`'[ :/D"ny ;#aﴊv&G@4:=Ňr2=KDG1A5.gͳ2DO\b &@ڹЮ7 g&`|. 1l'ǐ 5~fHde/Hf7Nw ֶ 9| $<΃P 0qn3XXqDiKjD=iuЀqߍ1/8l[] 07!^DSfV$$Hk8ǘtbLڀFxO =<5߂s rDq.-C6~D y%D{IiC~O b }0 y؞yL0a65WA` vx%${n֬D,DaJM5uPz2NI13F13~ZD?4Cң+7#RnK)PXtVJH9@o#pi-b5"5WC |o>?K_y(ܑ;- cYpv\v} u$nN{-o})S+/`%XTBJn/ "S Ukėf% 6Iz8(1OZZ< qǔT{fBTԭ,ݺ P:jLMnR}]̍is%EФ~8!U4:7 LoqS/pżւYe0:ɩ7OL2T4ȅ`  10Ά7.}?=J-˴ _0iqW'jvc&ȿc]Jj3e rs<8s:Y]@Bnsvel][P;d~CްzӳmyE8r3]f+c@/y"22yHfn⯗g5['wz뵌2Tb~n3o9^ljilf7"o%(}6FAl[%$86H2gĿҨ~ g9 9(I[ԏ#.=-j_drtIؚ1&a] #㎩1y&qM`Jx!@T2v?!Ni*7?"eǥyŌ`ًWJusQo]Z>t5Ӂ#O䷟-}o[<`W&o-w:{G,@ Dpc5Y8HKwCXJ@`2&#mr`܎kBtęhPړc F 3$tiw$v_Z^7}&:~{Nv{U0l%OwZM{UI d ms`$٤}O>99X( ΂D,;}~Z:}="uCpS68 Eh!YiC$OT{E-B=12/PUH?+ .DDen`:.\T&zWk `=NӶX1Ř1 8?#v"$aqrN ` B+R ojSY -(<-yZwJ_(ߕ{%Pߌo w͊}`OwV?{n-糸_ rvv} P[3˹×rOj»:8O`VcZ?|Վ"}h׽M?=uJ`s$̕sRX-Ǥ$mHyxM+{> %i,C,B@ ICҊ 7j7fw2&U$@1)1 s[>1KR4Y@wL2$sPӟF5bYpmyF"D z C4Dzt瘬$҄EWgY&ߍcGQ論a`??|<Bk VL;ėt!eh8b| ˜}qqewH}RvJ-v-zV;ł@wQtH=+! }ZjvǞXU|u'z>-.き.0}m!̴@LV| *1 `Ew( Gcq7WU1A QzX<ԏKo_G%iH@sWcpQ9@y <$msE J/y/#׼f53?L}' 0}տ?{=<}i=WGVu/o_~ d@E_hdvsywo 9oݟSv@@b7Gw@XBTߒ`oH.u}FoR>d]* *+P{N#t[ٞfQkQuLl(mä/`*" hDWLk7@GhtK8m]w*9 t!bG43&qO/Ҋ-q],.wA$A)8s[9*Tt)XjC?iڕY\W766爺U.=#owDI?=Urj9 نp'Ǭ,r!6tse}?}D`؊ىk9ڃs6HxO %D mdaF5FO+zOpNLYA`í% b}M# p_}RnȿC0}Fo̫U#/ ZI9bYI`ӫوX 5i yDA5&],A&]u%~idw!:4+ WR Z'kkw][>t㱟zȓ ,?%{K|o[F:BE YM8e2w;GF `UfUzr[6W>cҏ-蓁?N<4E@ kv?,ֺeW];({J/;#8L% 0T+RZ.{Qbl%6qtm;p&X"OcTi5:=ڻ;@?gQx8a:Lǀx(dm*3-MqQb"`}?&gXc&$⛒:y;.>6 CdR")cUmqIkÞqp\/Lgc2ͷx p?1008!4!wi =i2ve6cM7A[0LBAȀ=,8h$l& jRmTRR`ȿc+y< IDATR%Wr UF5_ގW2̓_׾)߿=ww_=yݻ:Ϫ.?Wpww PĞҷ4to}s=so{cp <`׿awGv׃O<U}솿Ī*~xwBp+7D](@4Qps j;T= > 7*wN<&ef$H=!@@֭83-u6R0mv0DܦDi4}Cb>I-Ҽ*u_3G&"k7D@7& m$$)5꒳D<2X)4*eRa; g^I#qevٿgTޭ rvHQ[I #G^qli:&l[r>|~/ ĀV ]u-̞0MyZ?q֕(M{}RJM+ M#9^v-pZv+w@_s $ P Q YF r r*'3\pQ슫E-U ?1Uܞ9iLs'EOu\vnp霋_''N&q0=r?cyOC'[2S\ .@~C?g;e| M 06 |:mf5|mv>I6bco\8M]f%f^tTc% ct (j386` c?vtvY: 0',8;-)Za^S[ #V23$<oqʒHeh] Hǵ.%BD/@kĪ}vvc v~yCKޯ!ﱖpwʝn÷DƲQuoevN?u_`?ֲƾޓgǃC_},ؓC? t|vؑ\ po (VkT!|*;:䟐aRڐ*fA ĵ,ZP3Xn3.p#)Zۯf07*&5_7<)FlyxLة[ 4Q0.CgࡉHۀM߇hH R'y?&oX}UžI)bRDt/(v;k5)]/ ZAm"0iv|3'"K %7IDuxN9`!0 }0k!*zC&I.wL Q=\T֔Ǥ.;$oǤ&T:Uwj:'#FQьEGy#\IiD #ghR EVP.IXn{ z.~&Y@#8L=2=cW "lZawܩAmfM<ᢃK 'rn鲈=c7s[ f]h&T3M >DLi=4/!{@ tp_A'oæ'j,]-\!Ҧ0iE]F&R8m]a`})^)ny#z A:%un?&j զYwg.xBʖ8q {B_#>F1K@ IMhI*{ewxMJocn;#% OIo/J~K$Tr 5oo[̝2CQh{O>/<`/ϲRVe ٯg<ÏD5ɭU+\ݖS7ce3Ϸ!4?P|gv F <efW [b#JKaŅ/fٖyG BlJUpUh o kLe=YCٛ~Mʦ2`լ911obM niVT8j#gXw I%E,IAI!⛐F I$U.aӌ9AyM[ xG12Qp w2'LRpEnBT\"qc@" zBI&pg65"7`rYcNAD+M*T3TJ?GJ(h0s#+ԩM0 F)c_ RK#O7HGvz@p{ 5fB(huV`mW̕8~K "#h|BSr EO2nˆtlՃlLKeF @7q!8FC)x);"wK񙦬.d|3)Br8p8@\΃/@s1Ϙŵx${8~mvA¸6ViK?ďk?l_(=Z}ƇĘVB a%8cL&+ UuGcS![[ɏz|hFʖ_eFtc/ DA ȟɵ*C{1JRNv\݅]K{ W+$ V[>Tk? |{=z4K>׾:;}-jv$W֍f?;`~ U`a㭻c=ٍ /y C ~+/~? jG bսUBJ@7!#E!J H)nNC *P3$~`^Ag7 bQ4|F,;Kj͛pYlF޶W:Lllu 8h1:6>=2tqI-E2c]qӫ[@nI& D4*0!V "f6DumDarжLi9!&H\'F T0qp$*# B82#؇YoOЪo e1ࢇA;ޟ*gYDDY݀&BSh~(e*Tj9ZM`:Jv%@%@ Ra m%HdPI\]qLv( 'O /K%[1l=L'<\GHgP=@>`IXW˦N0\Р\F gp0B 7s9"C=1pCs c7)c,שI}7v9l6iLr)K!E_wӸvN hDGG\Jmxmժ%y ߪ?͵!܋}ڼl6ԃHG^*5j0Kgҍ{= Y}3?E>{{lBm1H"R@Üs59Nv: H`DN4سRXݡCRs[ۥ.( )+{U<_ *~Sv ^'ڿj7~أ? w}y?fh+|;Yx=J6>rkaivn5~w(jܦD jw;"vntHu?=~ ?<=(b pyVa2{&ǁ1`_Cx> % zA)mm@:@usRӅ?#ڥ (geRdWDѣ+% P֤Q[%#DEssrr:%;'Ayi{`%ߢit g%`P?{!LBqiFNʁ5Q1p6@&i >pmµmƵU:-;[@4RO DIHoo袍8e"~M3 . "bȐmWB-V\kݦ!m|fW@nmJ%֤s1#8ǃ4R#xIx+u8lL:Hx}K=Ǖ ϕ>|^`n@ 8{q,a|l! ۬p10K) kOIԢ7ɂ`ЦTKȿTo;Aw?W ˟@+^WkV }$tm+꜡goi WӪ=˴9wG7p)*+\zKdl5xge/ν?} vvۧc|nU],[Uݫ|`oIXWnbdc6FDl AmOKw @>.#cP*t.M Amҡm:uG nX`⏏iש0-?"F0sQhCFt-;M1ja|u}3nV"xB`H:,VDu~$B5'dTTvZ6p`[a6;PK@&D R+C.#&#P[^*E|E_h!%'pv(&]Fpi!qR2 hvs/?) WClU:5<nHJ P)Hp~J} UA]I)Gd^U|0@N+] {qJppA͸N6+L3-Osq{Zb %O9F@'r?YGlC/E@rMZ۾iƵ,A'q-;dُkfCZV9ٓOrďH"4GEnra¿>N&>#&AG}/mpLȨ?%# a 'Ot"Ȟ M~\h'l!z/P}Xw2φD[8`)p~z}8Wmt^c+r3i7IC!m E[Cq.8#5 .Keeۥ)l|͇暯MW}]?@7~wZpOٛמ?ܙֹլݑlɿ$$hg vv7$\`-Չ>t_hҏ~5]i /G{ժ~*_ Ub()"eŗT址8,5j$ cg$IF3P5:#s~ a-%u`A&Bb72d> CԲ_S@1p6V­VߪB-š& vLJ k2E@9,mah mh@dBO ȌBcޗi͚A#.q7hT!=\pۀ F1p}q|^cG5vL[X@*3 z"{iRBLjn<@ e/ PPjj|]TX˟HApY00&*jC|ٹ͉)P.m5V(@`-z7303gVV́iUR^le뎀3o9ҙ1DhuWA 2_q|moG6,p d 8n/M{Dʝ]<Qj֎49/uP1C҈܎pK ~ Gxnާ_~x=tmޔnD1QߏGSMsz؈ i]*Fg~#`XAVl?ڒ۳W:oS䟔RWPl@E%)CSM6y_W#?~}"Á~E9#'<4eW0+G6D@FXVfg0~g,B#@+L7IL,SZ6I4rk)!=HrƖNyqm?"Ɂ^k|AE@#HrOZ<(}^#Yj@ȟ{RVZ6إu嚸֎0ר[t\".VrEvI-cq}fOULoӨr &E_6],0U.$ewH[&;c;w!MJs.WIj*W|V A)H S x9T|Vb{Nå>- %__dfD JZFODoډ! &X,+9 ZЩ?鮻.enϳ8 p8NMrJ~_3Ʀc[ptg;ӊ bJ'I!8E.2wn]f¿st`^`sKK!}A.=4vQ Cv%bm'Իm V@~=!/[_s[/eolz\gI9Nm{¼K] ?% y礮Ԕ\R@@w?Oݿ-׬>c7~ꗁo${З $@g~aG?׬i.ɀ_(gKQ)$sN* NAA>"y VpXXTpZzt {)1+~+ X1zWʐnD11Hɰ/((F10[ou-ej#lakA&C8~:!1PKՇ)&aB`T@'"Q&u */#~1MRw!ȧbT~du{iMjYmaBNy֖z!q5E:L8^LС , } byXۇvI8>7cyY o{=w{3W%</$SVGw_%,{%E%Iyy'!CHx]Z« \n|=M"b˾{v@!|=@-6HaJ!k.S{ޥCV< >z6@ ݌ PmT <:mj.A&Q1r!L aL|#vDdcw4" ̅ Q0bW!e2Ad-@' f'2{s5[E>*A$'!cQuk(hU<@qp#O|o>Xfp;)v:|*hIL8sE=\ F6Q@5anD# Dݭy\!SA cwNf]/9 5f@VR@rCڂтzP *t6 82Ve8eM#rjU >Gx oCp@1p Bਟ*[D:2k s\6%?׏# ?{7}VKnW+i\!`yhreCVO$ R])AsQ3Yv珝4JIBW:!:1 ` 㼏q/3ש{A$ _ Ƚn}a4K 4{1tSEy`Zm{ ցMi mIsDOKSii(<NJ.HA% _)>K~>p~7߿υPhYzw%֏eGFgo-&d<=n*@qE}Vyk* gyk_m۬=# ? ߴxMhXc`$^oؤr9do{AkZZك'l|hf%/w j+l W0I.;^3j+ۣ;FtdV 6~Kq ^J! =iAɃbWW.jW ҏ9[4rʯY6[GkVqBTy@Dy$p28 8eA$6[(L%ਕY9hC-A`cgӂ bmqر+ : n.`'Ȩߠcyb7b=oϾ eEL-'V܀+"N  N5i=hDx]ߡ#.ГMrd~|68#<"s8F9hPpe`ۦ Z@A 'Tke%+A#w'.|ݖoY  ̱3~c}+p=7EOvlS ~ޏ3 yDKxU٘qZn3^#~OZt@%'q Ng` kBo~? J˒L KS4PpJAERUrY), y%W.}X_ZT+# O??\ǹ}Tʯlr b\Ojax\"^vs90K8LGҡ{_#yeq)i p+ '#jA9uF J(-pB"V?;h'Cځt'u{m3j ӽUW#B]s]_ AVNxsēC@!PC4\pe7? &vFhpZҶG? I]79Ӆ{֣#f*Vrc}6W m!}MQ!p9?`kVr'HHIxXg.mNi\gw f?4=*:p=5,[%?<41T+.ׯ=>/ :w$ȜD Wt@bƘw}!ݍ=9'?`>#:j}e`{p[.k4 DN༴%'-Mi3+8,']`]b<+ķϮ+yծ@__qp#mwʝY{JjYPx8D7w;/@[i对uw;uϪkyoط24B?{@? >s_?o*HA@%wHQE]tN* OK-tSD(ZW%0Ф '4!pОV@!"f n+ `nu%dm ^)ZB=)DrM P :)K`8jiCSlk-S,wKC" n΂ TXRꝕb CPխl;GwEd;|mjO1{3dq (tD"hDmaՃ&]M8 FpB|xc ۣ8T[o&mR 8$ l$VG ՈRww(F*Ax!{u[ğh1*~0T;3o7yhfA1HAPRHx/#@Z;[NEGGnly!q>U\Alթd5d5/Ꙩw ʀ\n 3q t\+M}mdZz91ff GG(pVc*٫!jqE4 = 蓃vl0K;dn"ay r4/.D 0 0*|I=f/;{NŐ!~!v1γ834-9@ZC?+MǤTwmK!@/Gۡ+_/V;ٵzn|G~z_[Bo~=l*?3 {g_Ȉ*/v ̎NJMvo_~*8c/?zv7}io? ,:g ÔmI-k{7tK>  $D쪮gi⽷:眻bwWP䨙QEr `26c L d"#dL'Fio}n 3wn8{m66  Q| @Cz{d?adP PZJϊ]\ VUlx`=P;(?,}o}>p;K/3y{ *0ReĿ#(R\:)ʭ]>q:pNjZ=P223;_[r16c!hϓ?cڑOsR8܇d FSНp %[L'AAbhcc&"/0%h<՛X37X`ەo\>:5$kT;5q~.i_́,ha/"]@z<  -R ீ_ZX@uu*jƖ+b`ؗR.]>JIY8$Z|d3f%^V&\F:PPA2Ш$ =ܡ=ֿoІ<ܰIw9_ބx# >.% l1Lʍ~֖Ԕ$;%Ƶ̲DT{Y\tqAB?<㡔r s,@JR8k0 p [t wޢ?"SDAvNێBKZثH?Ke?=!u姤 $z7I3so)+ux{^k~-%=_``ne.f?ǥQLHCW*zskţX~+t6?_hU6.M}gG~mu|`ݚ ԾlY0S^~Fj#WI{cuEj;($ޑDh[`вL↝z\q؄n'`j+Yא=SKwkG=)۔pZ} `As WχO,g}LkLVQRz6 g LZǚT*90AT}vÚh |/[zz zsG95w 7A@HnV"*Z&ӮDFF  bzn#Va(S%"1ҏ1N:T`LUx3R'iܔa{At ΔO:)9Nȕ+Hc켉;&.HK#q&`{}D} x>Kg7OJ<4I;4 y2 ےAaGdI1i-? B*ʯ<_b5[{_zo(?W`h+9;w˳|RO^3TeEu&/0#k8N *.og>+W>pgh /|ϭ'\ ׈U})%7IEi^pB#4 __%;,XXɢdK@pNO&X 77mgqUh*L,&kѬf$ @TRP~JsA]OZXxH_; 29PIHNL e&_C@I*)hQTTKAʊb(c1 IDAT0Q0T"64a)נAX˜YЎt^315d 䡑3'C!GF ].9d]>YAx0Yաѝgqף \9c >%.9ʈ Mg3䔃NEZ翀{pNpOGI9;q =(WY'èр oi 8GZR>jt`T`z*U&hb&s aޏV:M2!Dq%o8Y&枲#<4ĿQ9Jm<*o_R*V{$ryOڃ_:[I{߶7= l5WxYjA`ڴ-+}{\-ЯUMmmS9_k| wX{hx3^(رew OY 8}@͟hS4EFOJIn.|}p3͸#qX:&%E;`R}v ksLҸsT ܞ4} f ,wGЍan@=&\)~C0țPAڀsK}FR (/-e$&c )FjWAR0/kJz`waͶ&hKS>~E?`@޺\oޘ Nd1uakg]gIjn,_䅈 @'@;E;  .98n x X 44J PQX BPj* kKj)" T)&øi\ @2J$0B9ͨ#ZRLjּM;i.yeB䕬@&M^0@yiNп^M5٭Vn%wWzO4XLQ>7a٥o<31'B5P}c R ?\tnr{"s(HG126-[dV0>@(l7#q]8RQF?N9׹34z^=G>9ҿsD|n@b7z=O湎^c&dY5@gcM|Z2?rȕ(Q To\1/K*ù}7k +%@o`jvX!͡T =OfQUp/K?[#7488 zC!? .! 1# oT_=-aY\ƴng:-V'|$4Vbxv^J(п6_cqiY (Q0qWyYsbfN_dKr{t?cVT&ت{k^!Uy*rR`B!&FJ7i7k}fzS)p;1gak6C0al9& L*vVV ЫD1b02FHLY]Hio\JAÚ _nDj& -9 a@xYnuevKc=hs?__זY:9w_, "^Ւaކ"p>"'rP檫ĮEշiO?$#B3?FxzW_g=(sdQMT]}䉀+LP\S6xY̞[7>J{[zzSֽE5@mbU\/%#2Tq aܤЪd7,&9LH s1QbD5L#$bv$`MȊès&A*&M0h]4 O]0dƄ6kT;„> jQ`/ހ6:R;"qJb"OH3CrLeA)H>Tnv~xImjxǍJ5a v5&3\72 *fveDB gZU~BHot˱9 >{ep_/o$liU?@y(? 0 ЏHD ry]^' @%Z&uv{/(3zOztlACnI)dyv F5Tv^@eSna\7׺׸5Wȯ)UVRn| ӓ?igǽ~ZlLuxkxJ&I~#kzMSŸvH&1Bi) 0tE5i$Op>mOa\?+&FYGYAK] \!j>06F~H޸F6qWCv[?sH–pYU Nir<6%#^7r@a>i)MWI3+nVƷKbw }7Nꁟ;qxWk],GO_}YzA!ȯ)0~yd ?yYbQWwxo(?X׸$Iqʯ`ڧ1r\^ %F^ф,.F0IOwdKF~TFBVhL6C !3@@fm*q#'.$Ld7}ܾ$ \w1YTqXp L 7a{%Pb^X7@TF'8+O%bտ& 5KB>o3B344o;Y=__<~=/.p"ߥe`{T&ش vHcgA`fO~쳟[}[yOx©o{h_Z}{j)b׽luf-Vs ^!McRvD:IngKH /=v 2(& ~˔ ><`aD$`D@˲|VeMݲ1mG:&eLdT򛶸9 [61 P?<}kQ-O؉0)ʲ>fELLi/VH@fŋyAQ)D^CV|O/'}$ ;d=Kl DYc 21А3J^KLN_bs]c ?X뒃'MHx/ tJvI34I9,R$% %{\+ӏiutu7DSA$]),4H/me mp%x4_cv:/!X 8 kQ~]RR֧10#cT:g@Vܱ">s/=mui(! JSRˀPIc^b` K)-֪2 9qyNb WԽƸK]11U2-J+gԸOEO.Mj^'[ p+Uo fLYk ,!Nc&c>+ihhT9I%7I阧b7C­O=aP+}³}Y'ͻvG=_} 3ZT={\JPRPUAơ9Oվo K6>qg; |ÉG=lyo;C3R=)e'4]0@ohKC2H^43/Y؄.U0<5( jC.a!20O`L%L-3-mi4$ў拘WܖJ0j.88~X 5C\HFC^? 9 J,X}io>LVQc`QLZ5(+~5IjGVO,vnuR<3gF7zjsn}MpC^(5.`q粑6}&K{z3,KO N-Q 6cl*e-aM] {$Z+}RQ8hQ7S@H<] 2c jq\w\`BI=  B$K$1Caox%.AV!u10}mD~mBrL{SҗծHa\N:, 4WU mbK·z}cv eģ /|s} Ǯ˛FUCeo{ݤ .4_3qةn;K_|Y.M~a~`OZxʩ ս^ꗊ]u;H\+'ԕYWzJve7tI69xlg 8)cop0$ᒀ&c\ض4YG#X+Y !P\ķ /z~A7` Y'fvk!&b\S ݾx'4 0J@`$A6oN)p Uл@:%\%%LYpP=q-N($3K _ rрoge~jc1uP./cZ$mj^ާZz$zcTkDP%5Ӥ<_?)I81%}C&dMWpTP[~i`Mʂ[ nK֚Z@½u5HAcRޚ.,=W9.+yiä%lcq][Q[`Xap 8{5 ;68B-=4tx^R᜖q0 !xlKO鶴Z04RSvZ"WKIiz8,vk7Kyy'mч)<Ѓ~^;G.c &>~@0jgU37xW}`(:jkǭ P퟊Su8 NJ"46u%uвËf H?58&-'8B)~8$f5?;+@dט\h~\ޠVmrL % $!. @{3Yk'LւwIsO-a9T0*~^h0mQlxkxA}HG%fZL1-NR]of..i|b4|У3ת@6xSq{%/$ukBBW3շ==ڹp߷ QqP `Q\: ;|*ϐT"DRSRUZoZ)i&A?}G+nF P5}I3qgOk9kV0ړl`zړ{יCyI}_qOZ-s>6)k_%SL +\'QR.qIkVe(̎A`0j]H @[' `ѺKVeU`"H^Xox$v fg8jȯQk WEeUUUǟ&wV)&ZP`Ko. qˮvM؎&q٢Oԍ> (0 Խnw`qfw_f?FC<&s}aYx>Mi؏a 0#!)y3ˀ'%R6Bj<碍%ofnSFE[AZK+ :e } b2 "0p0&9 D]c=z !9 IYZeO\e[ }Q 913 /hs<5XT\VOoKMvH=0# գTc ojAeٯIqmqOVI͟F LIMp&95/i1ywBr*6+3'N@V@ 'mIcĔ"GIFmI.΀Mz:_S_'%-wJ.v쓿ix'~(p[hH9 vv@|BP]Д+myny7K=P{? =vV_?ny4II@I%Ty e2œRꀒږЦW%eZ2(:iMÔ '8HLNI>-#k)!1I_Dr˾L2ӓ܀.F"78”@ĤPX|%yLG/^<ƥ?+82kIBmk$`M 2 @V,0IWhָzTyS鎙1xe6p,c[5^7=n!(}@{4fw>]j*Ӧ!\ѯz btb^.@()sBenĘR5DrJ_J4u mtb?[f5 y2W& jy.Հ-1kpl.I R0s@z@8s $:jɜHC[xkniO|e퉩-(pLJGi7z\JUhPA_n?v+o}Cp#qyWj~?],槬84|Yk~ rEND޸  ]pTcYV &1x`fNxD1ך>].ر xn]W?̃B ðCJ,ХMi k;Yj 58÷z9 .I9o6լX Yll-J070>cC؟a$I g=,;#IlK^\*el=+*=۫6Yu^/_ ]ϗ7}&)QqL8~,t^쒴Aj87Vִ'w-v׀@XĥV^` %)&TKA;od}ڲfHAifz{UP z7s>qaz~7xLm -u8J,9*im*0͂ a\0V= & uX s`V`-q^& }Cg[YY>0QvQ53FTklJXYUdno͸kA}CSHܪ&k&ڋ?Z!0l@dl[:vlrzEX~|Ԕ 0_ վPGv#.;yv쓿<<'5{_x;n(vXaBAuW _[`SYw?ǥ()e-=#9_zypo,}أCw&OZ- M$XwV=_HI ]h*=p@JIOx[zqĜUZlHeJF=0〉mb{. %Kܮc{g !^/)}oxo yJHO8 0̸!q%N)lq3S] ^'r0ƾ96(Z5mc2 <KB'ƨO \qQvtפ d fZ%J8f AGERZ&e(<&SOAkW+`< MN,s@"qgY!3ݏӪw @7IWZw?24G,"m 󯲖`L 9m0Mؼ'iJ$úDA¼%. R/1(lR'5!)))Yq&]0 T)gBvt|ɄCmc>ʇW_ݔw]Hsai\RϿ.ʦdgAnʪgI _,Nëi~86Cx̯B/{x[ >{ 7ZطuYcj\C 襙+Hp>_(xyuGw`m/+B@h⑯[]OX-oz5Rr n—JyRQ)(3P ( M\rP# ]!۫;Od &&e\dIXm] DAWQ Ls(1>O1"p(0M6QC9/S2}ė().8 $ւ?#u ir`n5.=~.1ʿOGAO} >ÛO^ 6i 7DfoI,e@zsfH#8c;NӏXkoH7^f{Mq̅`Y SRX HQQ]| @*9\&  ϔ͹zn2F0n51}TɠC! pLni_Z?I \ЧXo0#!.X'~1O@kt}jlnig@hc cи1B6Fn^K( qǼZ}s;VA@`~LE-i[ %R쟗B"H2l MJgTA bHG]R ot@< 0`6W5@Ls;>am 3.8lɏc!a&77"NLaCd0vlΑ13gL1fغx?}p?́(=whgA6Mh` rc41?c 6 T7mgcxck$+I2~3UUG7`[.X~[ZJ tA&c%P+ I˂%nߖtHxM;/ǜRq[%؍'gNK?qFk 6^\}kb }xbW4ƥ3S~}{X]2onzP˥%iC/<4Fj"Wb{7q/;*M%AJ[xt0.= }  fD$7ºfxjv{sVzpM%GA \B p"h pV#&1ɕ<&(&1xjc$9o d%z]{Q_ &zL-I} wĹP6ld׏ o7ӗ'aqj Z'ˊ|v"48D &;['8L$~N` V@e%I`Ķ׷^XA)cH֥(W`GԊ}A Ƿ)^/>7 JWx)D^i¶ g)0(*3pX a :61Foky1鑂L $ᳳ?g3FFM HQoD9^^ן LIc6q$jy1ND[=6(+e#W?sIm9?C`y`qXWrq;->t|)']["ʿGW_tK֡F5,0P^w7"b̞¾n/篃3_5#h|灶<hIMɺK_*e& PQPl3V7iKSłXpHJ5 I/@afD` `hRQD rK.( 0G UT`(%GpG&)R`܌fF2*R ` $Ť dä܍ %%~ckR  &ls̐ xMJI5`_4h@;&fx-%5S3%6KgU 07!4Iڡ!,O)>ak Y$n-ɨ^"C?]@^7.b ⱶ:;!S^Rp>N/pD,> q>}sR "Uī=Wރ(D4m8Sd8x,[`o -LMK@1Y->DŽ9%B$G ='>s@JFF?kar/b:\WuH[.`,p]T6`{` $m/4;|2 >#k ЧK(~/ a+KJKi)֝)ـVa˚'0 0?,,8A6&a&?aj;JJs4pо#0,U+j.euϓ0=qnD:?'졏B{>mdsar&?E |TGղ=>yq ҂py[Ac:{os^c!{k %NWju|W 4`χ $OER^|]~TW=]j+n򳚸ii?v4CY%]2PSsËH`2Ic̤5Z_Lʵ!_ը&}S>xۃC#<8F&ܼʙ@`T `?UxMK 0p=)C{3Xzj~f+&.O`h8.LpƲ\ v IDAT`#4&YzqK"giiƱ6(U/X^5A 'U6]3"&Ifo\o9%#fv /I61 kńE q- :;HsT`v[$,}VJ8Կ%@t)8{ѬY7-v4c< c6~2Q>%}n^~֠?@إ ق*#c2y!8ɶx$#MvVC&3? #/;̨Ӳ{%mљygAB9 3oEF@ x1}%; ]KsQi,;iLRSAcn){i|Mopy'{FVh/:sx| mI_PZ#_З{ 1̊ӷq7sVgw~ <ȏ/W>h~SVki|Կ ~TTT>S*oR_~=kWK X}K䄴#zw9{AC&nx ΒY 2h0&T9SA3iȒi$oZE6d R Xb?" vf !k5:Z7=)i0 !ثoe~id߁cwJV+ 11pJ(J[*mH'KWH2$ *FI= mu@{F6OxR Y@L@v&\>dAHF#I9 5^&#8 ̃^TzXyʮ&ƍx+n_ib+e3%b݌zTT6`KR雑k=<X;pw1!cp&.Ṗj~8em[.N""7M&i WlD,ɑk#o2 Fq+جge\7cn?.s[YmrȁSaf>z} mؙŵv6`iT#yAM^?6b̲߬M M ?4 HCk?\i%?xxKb? b 3R?Hi 6 սj:iNq?bOCoǙO[x 'nx n_֒((m-0Ϛ|߮TDJ*Z /k_^{𚗇ܗ>}x_ZIם7HRV\U*|T1 ziVWIkae'p.L V l֥Y^>$`^0tMtҔؔYP &C^ fCA H#P8>%PD P#NaU#L!&]7x>4 Ӌ$\xÔheWT8'1Oi!a9gJ`ւLW[ļ,8U}JeTF̝l¥Dvc HyFH Z rC8&L<7*q$-c1ei[#aqI^DVXi*eZVZM)Hqt dWOՕ⭾V7JI@8ϑJUR8&R[Xq73 W<¦plt310ceW_RA`䣁y`8O9l;>ddo8//o9?Yih Css.rAĹewm5d06Q>gFu2دqLs k״1ψ[yU KgșO~Ě_yf_=}W\V?6m XX`ZKnG0U 2.@W8/z=[ ;4oY]*'|nNk$𿤤`ϑh3VRrB:"WHnnn0Lއؒng]zE 9%8Sְ8uʧ>L kG4&<L@>@0qi }Zd@/*P4@$nMY23d/v(Ժ0 K/o:jԸMMKL„fclvY3Xp`< .M\+b,7d8H4r@09YcƹKxS {cnm+G̀KW`CxD7ls &K O5"$,XwM2h)d`M8Kٝ5nK*ZfabmgKn̫H&H;.)Pju2gzy+/ZoZ:I#9~ jWRvGDه߲FU Ĥ׍kyV0s  јYH<`l5[i!Q0⇨k9Wc$mrq8=#xc\q}ΤxfX%NKR0Ü//qMj=V+ &ʞ&"3ez=>ǎ$۰6؞#5iEoUcq0eᦏ(xBU#f" F!F!=K} ~녰˜vg,w/^_.S,2 +.%̿|0,ȻH/~,9jOVj7Ͽ~Wzs?:_[ӆ+]y7ߘۼsҞ×o7qq\Ǜ][msH:ϱ}[iwyK+Ntfo>5:_3__sU~ ^2?HF{I/%f( >X`7vQw`;e 25 h́'$|Ȋ4%⠩T3cbʂ\b'= p ^fΈܰ;v /vgAKXKݲ SvVrq%KʈIPR)I ;ЊWc-EXFK,qS>Z!4Qټا+=ⓒM rV 9_'bD/DHHXT;ܭ Qj0ȦY9$Q չȟ B1ˁp;_o@$Gı &!fșD:idFNP *@oB;BXJ T=J^UD$&Dp2R'/AyX68.=8= @'Ơv)/jRb+IX h.ł6~'5.EOXO؍6U?)AqMM[^328Cf\Jm RiA:^80QՆiB`}8 17?8HxCu`7{CWAW@=pT"0"(TW D)~(%_}5嫿۾3}/@OIxǷէf]qlEom[ۛn\E@#Xڰ&9"`Gʫчד_Z{z̿(~TU7Բ7̒;n\ܡOQ8p!AQ.S[&߲M;Cg: j΀'eRj6`a!AK/L `1JbUfxvX.*V}x!p_ygY k\,pv E*WF )iA*G'06A=Ҫ7%Zvn0ބаY ҂Y@ X6ʁNPxMS ±ǥGgȮ" yaO@5P21|/{xyF`?F5 uЧHvOS?e;y۝t>,]i 1 LS^D StQ2_y"TlR0UhUKl!"))Naev[ ڜiC !7 ub @L=@B`\ݲ$҂݌dX;4>7%7pXi `jcN*]%->ɸ͟䱕B   X\cS{ªߊ녽6uPүaR'E? r7Aop_J2%q?{Q*ݫTEe:.ˆp_N~<_uYԋn%@j>kZӯB|/h$ e?~{rz2Ž^.nf-ڶ6Ǜ|xr֍Mn9v9|ˇ}Zxz4?RPYzwANżz]N p`~* n ` 1Q,C,.PL]6:"@f.`!m5ل M̸*[t![KqR3to}oQ[D` | c6! ܿ@nlK PmT,.+0-751N=pZ"0wq+ڼ~  |/szae^]tJ t *ed$Yv@&e&eٟ)%.k %)O-ȻppO=Epnۃq4S$`jlȘ{@ (+e)S2 A2+# sO|zlt/݉5_2+m_]ͩ=/8_-tXfVֶ۹R=QXV9ia1+̣h?ǟj~|wjD o@(w3:2lp}}uV=^g:.< 1X &vXmZErNMC͓p'2qи%FnFjl$dy/.@VkŜls ,WD%1~YP=gx!D\/$B`'C`8Ve\=H3b6bKV#מ,8`ߒK07)DV58V; +;%%}T P PHbl PJN dSA0烄wM`? ⟲ 8@8y9rX"5a/A% < ..|?{"TO%M/TQX*M Y`IX R=>)SŀP9VAT1@8N+͓kR,z-ݴ<`uzR".n1^WŲ'T v1,̸zñ0TEITpTTe7*iNz>aAx,!?73Gj@ =k$w_5B'D/Mz H+ 5J_U[;7^в_:G]ݔ۹{߶TiplVֶl^;-e:gkoRa0Q$#v tZņ xcH kR))=[ pc|F,|[ٳ!恝)SN^NrS1^*ȉ1r5`v#s _  9<ͻB:; (7r|':%KN)9Has`gBTȽ 0>%Z 4alQ/KK\|.5)uJ4))X[?@:kiWj61?q|GFV|9 f ;[C-ɿ qƁ!Q!юߠf!r a1ֈB\W 6;GA> PJ5!u1X&ϢƼkT@Kjp)SBAIczaGW>}Z{u^-/:{07o>x|{,=׵:H7[M.|oKlm[[ʹ@Q\VVisdNŸ*-u IDAT埫OV=}"WyK!wmdFp#pLe`"bR^A:a#Ⱦ3MG J')鞡AL. %8}znLR] %2خZ;4'!W:jo&_0j Dʄ$uD:%U"8XDP#+ q*Vo$J>[f {'01s>=9`e59sYC{" F\Kp7-:s"fEk?U?  iS 8q,cš`~~#gpLOI`< o X{4;P UrzvÒp\1ri'@')O=Eǁ!{ "vf]"aĿq8v3w#>H>yB b|vbIiTEY C"t,cἌ9`!pq$=7B3rEG.Tm&}~www9`tӪ#-M!0wNf,[w&ce/g&Y"@ddΙ JK5m@"{zaov0 %~gB !x5,%MmX##ݽt>`1T@+ ]}$pہ+HѯF)"`M_> 6l#+TdlӪ`3njfWݫrүq[mB6ڴ, pGi/)MjgU={5ފ6|el!pDFr/%c2.0Axa)x(f.KP9KMX= |3z@8&ݰu*NGT+ppY0) Sw"Q޹/{ĸ\s#K>nUjĵY0 q=GM0N=qo>Z78ꯆȏ+(P;A (@U9Sz/y! =Ći^7Fӳ0^??6/Fs=||{]vb[ISiT:U/qvkڶ[iᭈ9 ::5xjnjo~Um{JWܿ>R{Zf6NBsܬ"8u/QUeP(VH5' @?LiGQ c 1 ^ hHbB ߶8 \%7gkN&X%MY5+= Z16S1O,BNxF:FMÒ3 LGNR 00@H>6T8 rfe0B4ApG*<.~g"7DJ I5AwBދ)콌ž+({ z @>ȿ1B@ؿtdkwPv-U A8BQ׋ Vw};A8  z‡Ww $Gy{#T^7lwlmm[h;w) p:ܒ੮kYߛ]nSwg}Jg~~U "]vN?|9yCQLE‹ڳ*TfHD@ 1,` dž mQi {Nƕ\JH˚hJ&6j/z-Dc| &M.p 5MEE 0M%UbeKoJn)_v&v/ 's%ϧ \VSqgq#nhc! $^׭z]>)_M`8o" TWA!@>?\y(s = w{| OEޓ\ \N^vpz I wQ Dj]@zZī jW꿂JAVr=D5^L15,|~\;TZ`>T婃Ga2b/,S7QN E,!ʄg) @iSԈ1mU'0Ob\3 M52y$n=%Y)v@b-r HqoZ n:4ĕ!U+Oo.i=>&pmr<@5:45r5?iN :p{f&Q-D|̻j:x\OQ0Gl䭸< R;ĞxCZß?]/|9=O?s$G J_ٹuֶM2XuAm[cx yOjIoؽU,F ?n@+E%3~1!XgpPRP"\X:LHl]@1'K= >`شb$i#ka3g cSڐn^T 0+j?'""~v1+nӫ[J :yRFJ'g9E%"O/K$Fҳ%'\2SO6XnǻGpt^"V^n~UЦ+_$}LJו&Ù&ֿ/5dya5R_辀J/%69(j^ !u1IGNG*@ }VbgZ '<)LM` C{(IR%v2X{1v ĝT P-JQ(jub Ͷ 낰Ly-<)"8=t$@~V,@ЙL~+R(bBOѸns~F[v\M >IU,XA%,~ "$==E-si FX?+QqK|RJ/>HGI|xCj_ܿ]/7f|8'`{4p9f|F?[r{sV~+X񶲎k^|[îĻoҟ|yZ^-ş<ۼ_S 6)/7Z21 (2a=D1TRɘ"`uq&dʑR$#Dlyg'&&\< pr=H'e+mkꜸ!~Z{t.78&d4iiXTYj@qA0%AYE\eL~fNw⪅͝ {˸ƀ~>թuuQG.fFP PT2b!5$!tUɒ%Mϑ-[_'~ xPwVa* ETᾔKs!UOR%쨟[CvAE* OQ#)  \US.}#TO M*HHე[!4GI|4ug= .R[`'-kg7U5WÞZzʅiO{3.H_AAsR>&'R`̚?1:{`(D[w}8'}8'ݸa@ ry ,? Y@ @X;^eK ϣʷUT (|" Nȵ.B&W U=FZͣZ7'_zn/o2GkZDen9room[7q@ [V֝^;>}⸒g?wz럾ڧ~ʇ窾 3z熷 @ D@чDx8' q% j`^X?pgYHu7Ř%&QKq{],0pD Z.j"{SjV\C%|kHz &hޅɹYO@$ROBaC;@4bgAIY˝hN(Ve7~濋.i˽\m=W NJ0D @b΁g(86EnXO[%1vSK}1RqDrE }@1: ؗzRD^0GȄ80*^zG$ OR*}@G!? ?5QsMSeKP7kDR1nB$Rz quAjEiB})Ah 5TcF*Ov@|v Eii4 ԼEpܚj.\3{@حNK,~+Ɤ0aVȞ@M2 8'!8'v'p1!2ps 84*{+(9(.c)Y=׮ȹi3WݽJ vf˿?q4o0|N2"&w1r͐SQІZi7z3?[̞>ZWnzO9")qvkڶA|Ŏpu?my+q<7\O\5OYߺ*}]}Èޱ-{b+nk .r xǤZX9@=T7ΘzX.'Cg0B] ]iIw$ ={,11BCQ96Kg3Xv T1Os7Ų1+V 'ߌC T=eKYr|P3`Y/'Xu-0mW~ѡZ^RGRϖuqg8@ 2vBNxs"y%:G$D/_]"?@P[*8@%)aY^⸀@uCk]xU.{2{<r18U|TwAPϫ3Qv%r-mnzRLHg[pIR%)Bxqx'=gAnsKs}> 11.?U]jZ/ilf0쪷H{%tEUa: >:AV\3`I4"i "s8 D8N}Ɛkܥ`>^ӯsOQ ,R /Wkи) OS)9{jͺ:A vT ^ח¢.d]ƾ{Oň$'keH ?.Uݤ aI-+Wtm`7ZA'j ;KԚ>jﺉUFoapֶmmI۹A|#'xJV:r2/SKzs}'UJݯ>mAB`"C|WZB xJzpv **l!P k1Ձ$UI7!MĄv_< ܞ"4d-!0AX磜T  NXeg75@] RX,ʀJ>yz nYu@yG(PzLE4qb}v}K֕%M4q+CW$] G(!NS5Gae *PW?PGAǨZb A{`RX՚;U*5VaPc;A+*)xⵆ{ {dS[J?.5 ,T }09YIR8ȴ2@VkxwAq$ܸ6ÔSVO{ /q%, -<{˃3fDA [j^L/.8-`$h`~F;qNnSص?"aԮ1LSA8#]8w:%TIsp!1.ҽ"H8\dƤ, tpY`}X8ڜЁ) <#:cqa߲4O}ԝCyA.^B.UMf-x$N XcAď0fX\7b\KahMԳqdZ5C@H _ 56%EyD,aEJ5L0/e~b)A:5r]x7qB; KIߥa,¸/n={sD.j[ijA^vJ6rἵc! @Yw Af@R٢ae0`$ohrє\SbA;p=L y\s ?H408c՟~?ş1ҒWV\oŽP⏙BNʇU !*8%V^Ϥ"<bܓ~o?ɝ-w7r y!K#Ńw僤W G_c_}JOC9뮗Jc3.ß4 Jڶm3(sm5IVĶqO8|~3_Q^xQk|\_ӿvU?pz O9ȿvXABwւ* _ pTs+ ;_js># i6>-)O$إqDzaɅDYo@2, Y0,^\o>lũ7:AM@'b\qXTR/TA Aa4,Ul?>0%"`@ȄA3(.qvj23pw^>=V^0!22A4+c8*@2j7<ՎRvj@WPBj~K1.Ydxp4k%,T}tcA"i'i151:*5813Ԓ Kkf%9,(JCy4QX#X !@l 1G٫0(iwbea j3c?1wgKHѼY`Zğ$~~#'ʠԸ5@#ӆAc?ȿF!n zPE|G{J ZqS?cp` `s0gBS=azrGn $_$a{j'>RkPb~wjSÿ3{^|H<m's٠?.b˟ ڶmT0ZAQT׺-6:ʼQ?F_[Ԇo+]UO6FvVJ>7C\p —Q8tt + R1KRU`LJ5>v[ ,- 6c?̈7q4bd%` kdK/sVpLL%)5] p:3o;ltKanA*apF[&]-l0uF$l߂X+Jq9[^ 7on" ڱo9/52Pg`C,N|U`  ψ,x OQs(B̭aA:1~%R>G<sS2ˤA^@օ| *jnᜡ&0RGNzvPn%wQ*Pn ZiL퀈qOc FRgҗ:u1R4 ž *: ΤK,q )?Y3?-)?0eFMK!!)K/4 QZcZ*I߲; @`t|aXǨ(}v*+8 }{! G((@âΐ?W /nk!2" 5vi~7|Z ~]~Q~ym;VПAN2@6][ֶm`upQzw(O= 5|W~++wo V <| +)Q$|Jd)U /՜-GaK%2Kl@:yWΥK-O=D WKKQ^d^Ғ8jd|q^ow-p *w&_/"@Pܕ-IInMZ>!X"6aN-e%\%6!.B Z-mc! !VX3 y|j6Wp8&QBQT%h_]_"j ~j Apj݂R|v!GֿA*csdQH:ā)bK0\VT*cMD@DYԒG;: F9`$ 2 |¹6Bs&q prEhAEv(k$0HK EEX`p|?Fr,ŵ!{tF/o>EuEUq|3sYn){ʃ)u*Coks ]o/Hk+_RW#waqzX7Z _AK(žsD,O.Y$G[X^uJw)n֋IOg4GĂJqڔv6S [2EM^8;JZgr5:sz/si@b:h(]]4Z/p;-LM `K~/iZ¸,/ %E%">ml >g1^Bloqt2ͭaKɕ A-M_|% _.lA'W)/A* RA*dH?;AA) /"˿E -V=O}|5'v7 7V?[-/򟚉I>JCV~i w( yYd_CvLT<.EF*1QqDZ R:}̅JZ8gD+ =0Yp>KjD nV<@JWC nLJ #*e@%@@m"އeЍz܁k9!!3HC|[Lm?[ֶ7lQJP`Y_򼦅]GN8S_I? =/|7j_Z_+Z]&Jo#_ɇ`I"fD_N%T>a B` p}TD@=@>,@-etn`>IqCc QJC"u&~wLJ! $d`U(T /d̤_ 9 (^g7R&3`Pb ƤkBs?i!MpY?Y^8˲- kgEi|4g ?wL7 C= ~}9A.;uk^8HuQ'A6  zX͡:BͰԀY1>-Ÿa\g`\,\29ZƩUAW/ r >0Y"@[jNPm0禩%'A9R2MiTI#!}/7 ܹ@cY{$^0[0g׀d?ǂ=姬ġp "Gs*gp Ke 85s)"kl*q~8]8߻/kA (GA1:""m: \;8U CER~ 7+"_Ss.RPy#/+ڧ?Ze;jk_| g~[ׁ5o+kO:|%v[+mEom[m35Y;zGy}.renUWu}~{Ux Fه7|5>(X/r=D%(d:NŘJ#{^IFM,7W/"p!ƙQ`p4]EgcX.&$l4@48_׸o싴i*5,P+`v3,HD8,"d+߶9h̰֝7!)fI.a$o % d`r!`X҂Q1X$~4 3ԧRs⼩;{q>A ~0p dE S:D]\D,5yfԲ,!p2NX-&E!6Gy.n]PD,@P,vQwE5`f)7EyԘ;DԕsőV(X$_λuExy?D䯱T{@q 0/@I<PTYaeLJMHJNlWntv&q^!zp8+TUgDR?(=[LSTVmtVֶ6Eߠ\#@w –^GŽS&>%Zk_6:__kD/ON>VqzŇ7:d * yaa n#_)E'Wa dWg@J$ E@XeLE `tQ@ y y^5<kx\*bVftuP 2٫s yt!P ˶b%k@5$= 2ɧDVsÊ2U$zbCvt9h`|#3`yFڡ] "'Y*YA}:! u{fQj(>@m5jgh IDAT7#HS,zc'L͒_k;!V)@*`=TP,AfP P5`2 V \ju ]ԚtQЗ'iWkAvПbԮ{RX$va83͎}ƹڄUr羸9muMn|5j[RZㇵo.SgXQrn9'%TJ+ǩ^k>ԄNRm1 aߏGc"xMȿ$|1/H…ׁoPJRUBn!lDM+JW~5z}9%r2}^wIG#0Je3wkڶa۹"=^hg`Gj^r@uǵFOJ+ZG }èd=㪯y143wz3Ҩ6Vz%۲$&˲+`!B$ d6w-&M/$b,=^َ7e};)}w{,l r9w=tR<;$ Gcp2(E:iNRYs hʔ+**j?5D!Am5Wp4!*ı\ `Ad>?>݄,嘇lIm`Tozm9`v6Lf͂!:qns7*; .0y XUzv\`n("M9 xxռd﫨Զ=uT{VSJ Jp!BFAV )۸4 @ L2?JixT˄ llk:\a\\Zc#" BȀ6.<0T!0PNj2l6c;u*.S}@"@e!G|EhS&>"D kd:M+'eתEz~duWNܵW3p ҭ0Kr*Ԫ ZUҏK[-_~ >M* q­Iq`28^ׂ~W?t-7B ȸ|'~+9[md>sƜg3;2W}o oij~ycçR;zE喭 ,׊xk=ɑ\kҥuJ /轢rE}_07K[Qc%(A<)}s=dMf"O=x9|G!˻>9EaD:QD&3ETPdZ%(+T3@5IpK Ep_t?~} {W 5s+cnY;  @Ǟ;r/n-*T@%PT1BfMp _`֦- yXH I}&NYm9ʿ\3( pɯ+@eB W?n{/Y  @q"|6v*TbV*nMF*po|<S"\v !RC@0|&NR $yWII9x#GyQ ~`7LͯVZTltdla=EE bNŤ_r$1/EO)4C;Uew]^r|aC{65?9W@|T?1+%+ٟ@?xΜqϜ5nYpC]R_$G:cM>D6AxG\jA ȅC%EZr`PT-\v^TA\J[ |d&@i TDu_`- ֑ z)c a?,4(X"`54 -FGKDr*E.qYvI_gnעp9AAZ:SZ"g'.3djuzP%Mo)BS%f.>QϱMH5E67bc$'WlQ="?} P/wOR9/Հ!S@gj@gRn w<\MuDqG92O)䜒~1S?7|檷eh|yCo--m}WZHw@XF\wOR$Gr'wdzhFA::`bQÁͷܦo}aKW+ů\}c֣(dʼg~rWfr#8"3>όt ! 2@JXD*ȍO$W״:giPBjE_61G9lal;XVsg[x-|Pʵx [-j#.twxS^@̰4ϑڶI]w66k"@X,50AC%"ڵd3^{u:d-(aSK̄zP @67&6VfDKZ G'c_EVD&Dz&JlvJm%}3;@l.dǺ BrAm/ 8VQAP2Lj_ XĎZ3 lk.{3^ZrAsVuK9gJI`Ѐm-DV5!& xՎ~n.@F Fo ^q#Y'L;)SgG/~j*?xp}=Rqaö{Gt'dP/GIHc>E#TKgGu URw64]GL 1U-SŷTόy/c}}c#gM9Yg77̀p^!N-p9Ws<HwJck+E sngc T*SGUH_(Bl͕}%'@d!+P+3;s{]syB"r k4,1w,@7T[7O-:q.Df1 y4(K.GվjC'xU:!#UB2͹{\Q(hg`Ri  %- 71;9 Ah dn39gy'HLf6Rl`Aiֽ fQ`7AN'L90)A&)lP|a:.{c|eA&/ro6sRgtkY.||>~l4 Z;p]f.>Rttj+ԾZ5(G<ˀR+G]`QY H 'A9aB3Zl"D%8d? Bލ:`-UyVQ[e"Կ/tKL1w+y}E.^j] p 7"DqrO-vR_CC~oLoRo^;45)՛ueChE] i%#9Y=q! XH)O\N_w|RxՔ撷~KC0>)JsSs9g>rق7=9}W{DD߳CLKԖSl_L,0:E/@!bf psl9:If6Uk@@h rאpxLYSiQt+FPV]JEzt!K:3m&= f-jS|J= GsG]B͆ՐmP*Arx"=Rk(s!.B] Ri9"Y%cf- wž dA2:ŵ;%!LQ4M UDq-58(gFmBb _?DN/ՉR,yׁE@HWȿ?s:ΔYkƽ2 HO=|@e`'~ԶSBc!anpp9YPOTZ(eUgR:,`[MDnZo`l$;n_/.*2!iВRDa프fѭդ tb_E$uC^7OdqD~ADMFZ /A9cup!w9Q͔pK"|D}áB ZSѿ?;5;]L yŽ n7}8@F~y<{AN{qMw 6Sb"ssq="e1D^{4=bP =/{g:}XbiJ^-3p>@@fLv'3B^Zz >.%!*w_j_%nU2-G_Us5 upkUCֹ7PgjׂkcTǨ܅@B0x[ ӻ_ Q-rB wg'{9 s?0d}%_(o\_^>cDjî=+[~YU.)>zYr$'Gr?S9' hZT04v7hh~>cg_K)?K̯g`yC%>uΒyߜ-~!, "2AG!^ w { B@]H!jL|6: Ʊ?N1`vRgUWS| {/H rofrAvx+q Tp/˝ :$9^[3"iW\mV,ru17ih g|d̖ց*;A f쳰±Dfk J҈}~*!^E mN εq;3d=H O4\3w7oi/y;o?x\TiYH,Dx:Aq w@ PT(x8}ШtR ;%⼷ZVch!onS,@h7"&s 3/ &~5ec؎*8j|/۫d_cT\CuփA.=N5T\A@sL77q|A/; VAqoLތ9)vGƌO}`|%L_'s׾m}'N,¥+./+%A>trHGHUspy؊m[ 54=x/)5oiL|ۦo_u{ƬG ?5gMwlO-B89CWGqH@cȳ]B<+b.L1F*{Ύjh5ke"D'A1Tļ2]Tfl-TnnaF米ϙ25?0gY2XId \KU 8J~C짨gE<{T1b2ixv@"c."*F 8tD ݔAJ9LsL*@PY ltKƀGa 0_nt"6ȑ$^>)Q+3K\&p *cLrj2t)MeTjx6Ę#H~)dOSo+') 049E \J 0u杻{E 8x=j":JqnmeUCsP-bM b6EP쐨g,~CG IDAT%8K+/7Xe i{ yɶ1.@q> dY@f&4!0&t ǨΑI~cn$&|=䁐yR@C\w'v|=1Dn=CwYʏ,_iSӏ{;O .ji+ed$#9sx9lE*/^ýS7Yi}aK/Yk,~]%*Κ LYb%r;YD'{(9BA$ rĻ`7.g- Ğp<6s2-~!vOQ11+^1HxBoLDQ]ad6A!.3iDL(b>`RQ @]#F fR\DLAx. CY l (R4 @ 0zTj\H7-"=7陑5}vrtCA "~wR=)ŵ`MqӸn3 A``/9{!BaOޤ6Z,,= ^2D7Z :/? v;a8VX_!5N w!Geڿ)s`k5e"O`Lnts?_`Qu 7B`@u]M)ѫff%rY%rd=SS΋?0/@JS;^7BI4ܙBkɑM|Nhz }1\yy蚅ՓS^i}gxX#_^1?*ٟHG#"sdBDnBC{)we^g(׳|B b YJؖ;'T@X@k%\[Uo!ʀcvrl u]#m\yן'irJ).c#'vsdZt1 jX #*@ /S!5d? PTpb`w+z59Sbk)"k(¤(!_؜7zlf9rJ11̷OU=^|fEKW^h92%?M]M'Gr7h̊N" ūu :?V||ancO*O>blzƚ7\)oD)zJ (yO~d#Sc̙ϙ2n cM _`^좨oŀ8ҘGݭ_Ζ{ HO0;7H)"DUnuT=KG=qܳ Rk տĩ"T[%-6zzIF5R8b $> .[KNrt7y0C?B(=t E#WCpJDȱ9]s,{1!4Ms׌_x"&vlbe9] 9GљukɑǼ| x9?)--K:ch9qSwyJo7scwy_xߘϞS3GfG]d*~< .Fd= |3ĽۤOzB$5]׋j "+ k#jp&5A5:jF&j#8<lKe` `p! $Xqoߌ&*p06z:Dڀu-m j*AUEMEo[m!P 1(@Ĝ!j!*@u unY&u=gT~\^5alAA..r#wAQ 4Jo`Pp7 ~}`/v'U1/>P`gbPx* ؎QSxޚWgː4)eh"r<_Q9^T ռ̋BB+V&yQFWjt,u";;;ᙡ \8DX8Jc8J!!@Ȝ;|ͬ!zǻC1d|gJѐ/?T?R+gv_^4̖%Rϕ>.nqq X8Y/ـ+6lNߵtI峏Yj5_+wJj*|7Js0>"3d@#G :\GnN yE~&psW /RjQe?^a[в%K2G?ދ]˨ٵZ\Z+DA A C Dcx-[Ta0IծI` c H 9BT]B T@ CC C( j9Vi絖q}@&k˩/ :ƶ`)kjW@pݨ'qwJ)t"WlTTDiY-wY}MA4l^a}x<߿.^IQ4[')ӺYs tqg,Fs A1DȪBDO!>Su~- "/ beLWikUX'Ϩs<\ܣJ̏j_2 OY]G9sG+)Td?#(sssug͡>0CZ_Д}{J_ӗ?I9y|Q]ґ鉺=s[Or$Gr&WwgꢅU ۺH2pqGRyZ}㫦 N˜+W)9sYk]sO3 rEo#o$C7Q x=pTxgywmf3QZDM d^rGq-[Y !`V9Lp-F׆N*jh8h8X%"P3XK͈.`n.F {@/RFc7M |K,A 2@-q9,xOAD~sWf8p76I&J/g`ߘ=BN$}[``)bR%9{ vBlcY+ k !t;ȧ~e gk,9gOI\smJ䢢cWZubip]. P{t`e4/*\vƫ64gUg4VmsW~h{J`~}Sg͙nu?Ip8Eh&ǵf5563*aش_'7t) p~cd7X{c 9D avPg?=nzs2VhXxL/?܊Uhx0-RjV|VR,Cݐ,TY"z^JeF>Lycszw8@BVg:(اH}{Z*<]Q!5g1j2cRP'n٨jT8WI p~Ʃ" @kӆx)Z/&Ⱦ4@1jj_iW{p DnD#/9, 8Ar]sYG9kળJ?CwΘĿ3%o^~EiOݛVs)E6-,I-䖾a7iH4s w L|]aa+*W]Tw`j'H^4T|-RrL?%v9KYk9]@  ߀& @uῆ"ޣB$r裂Xn xԶg8fA uj}~ϣ$`}`8cAuBd t0lWm>@~?@D`^ G8Mmnßrcsb\w`?c:{I& ]ӪR@$I#Z^=j@JRg2;!@Td]F@?P RJ(5b"4iP\T ^8ضyVQg.uWRg8@<4s>,D-v1Q@ qQ2I"1r?iuD8wEď( y!b*܉tH?_% 0"tFh?CAvQ]s쓔oHTdHF<<_'H /LIWGȻݹtݮ>`d^&A0h5 ^y±%‹KqPWAJqL1G&2 dS UsY9Mo~|Ɯm(}/ݛR}屔 ^^߬eQGvdPɑW\MP-\d\l[4~px|a=)1T=p/_RsO1_c5|CKsYw\ |AʊYA3 J!*@ֱK,܊Vm,Am@;`Qm3p߀ xςQpBcYC[{D<$3uls\cȳ=Bn^.cGVŷ R 3,Rzď?DE?/˵ e3wer+<*V;/ߎȻ>E#8/SE7"^Q{ôԽ? {hAC :cnl]t 5TBv}HK,dj!N6/:N[+ B$ymo;)MS^߮9wG7F{_ O__|EgӪP}ݵ J7L."*ݒ6gaSIɑe<3,:קb:T'Ɂ+WNN\Me/5տ6f}cNA}%|Yk=x`3ā>SABRxSgemkeS:%ŀ4 ^ް=/Dm7*n{YZp%D@|_ow@p6V`iW,{_B] ,D@:x g1!XtۺEKKTfS 1Jy9 ,IT]"Қ&?v^ϐ_C `Ud![`#/e`Ţ @x  ?&DN#GPzyNb ]VXɑͼuaF;ЃzC]zҰd> qшzi{q::PQѧF~~uQ?WpIM!^__A ATJ?M9ii ߿}1s{'AWC`~;J>y}ݷ]]JٖmE|e:c4EOg'?9#9?Svp"e]} nL=t, UO}XqRƷ3?T23c5z:5xGYW" bݔC9}(t0"*!>A z?ʴOS>8xv`=V 2cYAyeThFLSK IDAT,Nr}TmV4Anj3p-ɰv*@ȝ܅ zLy@ZvJ>cCP8f:TX= =V.6ms/[@Meu`"R;A!uX !sᜄ)I}, m"I[IL T`to}!6#ܡ A µv>0ތ"`j*pm*pm*ϕ+@ܲwsfA."\D@apN*ATYM@`",P-NDb8ם]*d96"^O7:YF3Blt'}5BXx,="lz- Vt2+)-ͭS3%~ɑ}\?>, Q5[QqY D-髎7T?RJ_Sr_kC3?6D>kC7o=9" n6ǶSҟrV>| R+ŏo HXo]DkU;^똸ɕ0ir p]A.-ߢ'GEh>Nj :. 9ā@Q5Avq˼ħ"U[ybƺ P@#U lj@4lΐo Km[!p|8 wv/ P40MVq'A @y#V|I%C>KfnT-M}DC3 \v{qצikPK1wJ^0`mUYYRJAZia%w \Z\cxxȃuz?O=Sҙ2;Wz) 4 |9wǬs7n{>kC(/w% +o=-qu)?32rYir[Cq]$u"dr$Gr6Gy@' V-l뿢h՚'nW?Mů[cC>pM}?sy=Ss$[((off2&ʿU$%W=p+$!J+tW gu%2*,@ !PmdL2,M%~&^!_Oŷ,Ao5q?hӤ%/"^^Y:PYelV,t=ko,X^ L@$IDLHʤ qe8SdldB Cw``w/)dDr8}œkݸ&q,^wO!"Qrk#3 Qθ-f? AmmG+>* z!~\ⷨQ?Wi񒋥 O]J!R*7[۸Ճj>4_ߏ*>5w?D'_[ge) qE߳s;k^?1x SVbcs3R«>EVlvy^˸'H_]dr$Gr_ɁjBKz˥LghA橔O?uO˿%k5e'cI <[?*k?8ku&)JHž THM Fj!zP=~k  RP bjjE+6jkz?$<-Fion4E9 Gg D΍TX|v+w޸89/Q9_bȭ=m>/|-jFE>O/%ȸq؃%= RJbIS@DTW?o޿3S^[}#gxW~S?5fCWc,~5gkN_P5ѕ :zu̩3.^ON'Gr$+# VqSJڍn>Æ_01axGi;$U={=;f]ـk\ij➍ rZPDguTn6I[*O¹ Q7Y/y$? Jr2D#b"|hl{Y,!O}TgDA>M@3/XT!n`RɩKCEG}m RYDK'}I:Jr;ڕ+uR6H5֝6>2yETב!x=H.q? ܊ J \Apa7!Ҝ\>6isqf1PT875jZ;}-Z9NL$)xss. ¨@TJ0xݪ,i>-D$ }T7?.?\)jkWZ~Tp4aW?6٪LW:`?6F3VsJY{'5~/_9?/#w~P~U[.`-y2S\)H7.X$}(0,.dZjWrsjч|PW /טL7m*k>xsg} D sD^CEnJ:&\~-@@$ԹA4Bg"024qa3`OxU PF|#ð60TЀ }3=2 09^`+/[KK@bbNï=,֜^g_!!!p.x,$0 /î |vk`;!_O x'ABͥ "{5A@(6r ͸>A8e>zDFɱZȿ"e&Jζ-l6[b^ xO#^!f&\F-_vm^Zj~x \ߟZ _ϲ=[)MS{!NYg9G؇{~?+CU1o _x]_siW|ԿßwAorӵ}㚜6E@ʲs}d܎\~kW;~ĥmt/q]"/͛_whiJ>bZ^(-yp)[$5aUBh,R@\ @T[Cm[eP33߱)rv}F2 7 ҏIi{Ss fggSC8k.}|.ux&w9< )f;\iU@-)q U4WNuu"Mjێs@}D@9GCӘKhA<.,&&ma^H`9{R&d?6D?w,gͳs{z-A4~' {c+oKɧx>/,VY"} oٚZuJcO*՟{Z|EK+mcƗ~l7ox_q{1rn vCML۪ [eΕ=ZIUTB{Ǹo* /0A8)%28#^|yăT#"1@N Kz '*XtT/, ^-qæNmo,}2خ6lj+=)(se!΀5!f B%&?ssci'ϥEH>_Py>عT=RgS\ dBXxSȻNfhăVЄk* VPkj^N.1L@cQfd :m< &2T#!hwi [V1+` *f̽h_ņAqU7mM*Lr1vv|p#tU7MOD"EIP )F5ޤ΃#nB>D5-dȿGї U/ɿ'Y E *  oW=A[,j ܰBMhBzG&>YUƛAoЪJrUL}B5npgtpkvcq:}Tupv8gtHh4{Y\| 1'YHDm<hnon Z-0'a:gҡSo?H֭ҙoS?}NEJԮ4ЊM2EQ A-;.9h37w*BH熀υH"d˙u M0}9 ?0:E@`B :ɿ#lӼ'Lq!tl }4f+-%? \<{rM0@z|`H1ȬOdG @ " & n*(gv/ AF0n"uqsgmm:{w$oݣ'#tE)p7"ğ5|3{.gB]N~З77ܮt{\o\/nn]-EI'$8{!0@(ߚ ux"7gdȳ@1D>E ͪҠNUP◩+$OpǸvC\a:x[b>-tS5y,>l@xV-%3[ì_],#|"H?hD&RL$ՠeBMPo6&{5j0kTQDMX :wN~\%o=w\ b_Z@XB> Ӑg04ˍv % ~7 |<dH ɶ`dL#6šh○e  =™ww v4C؍ w9\\IO>[-Lr[\P]eɛѼ @ Vj*/Si<^F?i:W~3//ɩVėsǾ";uuꏔpHcWg+[yΛ""e1D ]_kG# ~g>l|<&^C {V0su=؞h_ p}~.x16ͅ܊!@ׅMG`h>@XT% $)'e&J3,#k]wIٯh+o˧Hdꕸ*Bl&v~5#\/%!HD"Op aF</F4 6cx7e:bݲE⩮/ѩz+R{7V'(zZ5Qg - ᒠ1F#+ZB!x >'yy҅S?LA~hCvЊXX@g6ΐ(H]纡{j8)lj!d޴B~T  H._j| B6}_)LwQh/j2 |f6Oh\0m,g)oBe^=7m]&۾qz~K2/|B"-\WbeHQDU6Q1ԀD HW| )mx%]_7dz&2P]A=(XBto߅ ?'hI r6, '}3P0 OV?FQ`8FZ]UOj_k=w(S rK*$ߢ=Gٻw׉sb\c!u-{`t #a&B'RD$"olM9t6ۣt^ MG@3n;s۷yNs^ 2 Q7H(RCZVV5qrnz@+ jAboQVp "EȪ6 Vf@>.;@Vְͣ[6 vKHrG 5ucB5 yЇXȍH G, ϔAH? !T ͞fzvھ:teʩAzVTpR?@$+?I~Hn8A.K<7s+zmxh3U*T_p՚"`˛d0|> ;zи";!aOtkqGk=|]b+.}`TG?gjD#Pa0DG?!q8xI1WL A= }rQOojf7Қ҇a/aO}TAIDATT±tiەk%*q»wػr;J5":}p,cw inLbH^_$D$"o"+p9T OX@_h:_`0 Yn@yܧNPiR7&asҿ.L5HTUrT*˃:XB H0QQ'.e)x/S*ơj'! h|o"t4FH#j Ne,Yt @Gp @Kh-(h&%>cya"gFokB)yCbu&X@g"d rYHD"a|SdPoTMSkؾ+O-Vͅщ[(#eGTIp°>!]V(S#!(0JOVMS MQD@@p@pcD@d CKkܨIh]- vag{P 3.a>> d㟇>{@x]!xdPm& [ iF+svq#[@>"5hh[)=/k-jTz({({(Gœ-x־ҔsW_ @,s(fbL66 &24(LWc4x-l{|;ozk{C&aQE?rxNZ㕵E,817s3:yIPJŴ&Z5 ׯz@J4N%]J~2@,fuNn1X2.]Ee;D'^JN)=qfN>گ ZeC6٠K6U9ڄw.1. $ n{)t* } Dg1O;I{!gD/ m !G3G p%W旳Mz\5^yN[yoKjnq$O{_U{ʭ9پ]<&lZsĄV1MRkLfraC hXoD$"lEG)4G)*c̎(5fsW={[޴ b6Ũͨ.zלGaHD"⏚ Pi2cJ[fY:4UZ"LAx,%;7)۩wɔ O}Mހۄa= qyO@(~oД̚ҠUSLTm| $ަ}PçpNx:ΕvP>tF9h<5 :G#|wfL!a°SaرthHh7 U*,Ln4lQ@Δi'ǸvC\Wt&eJ98ǙDDD֪bb> fJǰ8-I5Loҷ ʙ'Ϊ o,'2vm#R.]ߑ Ւr#)[0OQ@ B`h&Ȑ e>y{!'cY.: "9\y!^<}߇O Z!— cZf\@l*d Hs@ Jy+iud7/P#o:ҷp0kXwQQ ,S\#x\#d2o&H_$"HIn)pCh]`Y8F5mطl1y޳t=I^%SL%Dۤv=J7ZD=Aj*~$) Z4I >ޖLS| 0OfXR;!AV yӎ}x6N~`(~~ 6 :fu}oeGFfr[$a4:B _e>R{B;ԠkY̙9f(=fꔃ|!b딡R6!GU8.ZJJlv"=Jlk ±{;t i<)-}'\ym?{ dIgI&07lKVݧ4 (ͼzfF)BԯQ @$, &@OVbM|"   AO>aR3n@Rj ā>) |i?D ㇤G`( @.lcx ?z )E~)WD+*q{aS>gަ5={9SfĎ~CcR;v[{1ŊřtnbCK2eta@:G]%%cGIqbꅿSHeu|\RVؠ kJd)RY^0E1($J- 7ˇMAʆ/~$gJlED1V̭UI嫏Ү_{of@_P?$_&M|!ysr?۲YZdF;/`:ciX,m6¯͖c}HD"O-o,F8 SY%S!#It5wfSSM9ΟJw:焱e[ YvԼTӚfNYڤQQYYQ4s%A % XC ȆxZŽpd ⸀0p8 d^h⃈{.74LhpCÐ`lp0Kw_͎)ŤzB57\3:m$µ ȬYVfY54:`A/F%d=F ( vSf#'1F.5a*Wڡֿo}(a{ ¹m 8|JxJ8!ey w2I~+1_Nz$.О #[7Q9˖9U 9ŕ2FJy mwuN,Ff ?铆_!HD"OU'VlvbFx+& sg}+`[ttK5*S2WȰG\B>_Sh?a&үQT~br (IhM\oZ.Vy 0P퉙8ˁ@Hg.)0t2T9<B4 :ЯkdؒFV^rnMw$LG??؏3k(ͤgBtR`֥ u[[!5'ؚZãwGd ,/uj?D(fǺ/eJ:B=G&{4|k}Fh|Cj6|GH)ݥ9iv8q)uf2B>R/aKYif^Hr kwI;nO{t:xA¹}ۥktڥE"q}d۵ :]P9MUT^c{ !k#[C]@k?G"hM9kd)m]{F;:ǎfN-~lZGGIRRI!k?"->|MwO& ڕIͫ(+uRF5UhT(7*jĔ Z,JxW #;` obFfmKHB(|2@ 2 !>xaٰd:I͌m RvRC7jٯ !L5רԓgɌ} ז-⬥Å L Ln2óYϒ[˱ͧ2bF1 Ѭ]ӆuM9}ȵj1y#?j4@O4nB` RGRg[x^G(^O*< < T+(w);fOv/p[rsRz#2dŷs ~u݊g_Vc3Fjmz|\ŧ`r56 f?""HDB|mD R!|AƦ9:m\(tM#˗N@JkQRNKYN gTo}7q;_IvCZD3?$ s9Mr_ة~7%* "S}@j3N_u$][$<³&tOP1d0Aj>dP/AoXHD"Oي@sYfgP&+ԅ{Rv7dRne/* VeKIun*Q~L=sJ:!a9w|3"WDp;v= QҚE4 뤚W(x^j=⠑Qlsӛdl%?/s į`KpD B&I7l-k1eqL8Ŵqy0++%4k$۾# {՟ߣpmb¬b#2*Hmca&5R`VK_K_?#g+2j2<`َ3>}FDdTN]V׿)oI8L'WR#wHC#֚kDH$'N]"N\ NǏS{IDƍUb⥸jAwLafqYk8̑_ҫ?Ux>Jt,F#ץ岞H?D$Uw 7pxEXa9W !AZޱCF +vOƽYkV<%ΚTƹ92dI˥@J8x44lM6! oBj#ߧk~4Ѝp#RNzPTRO*^q0f?&9u$T{H(~#'!U+Uk$5[oڝ_'NZjߣ%)'ϐd ez&G -sf`H~ͫ?{훏eXLbx9 0k.M^1D謨M;G\|} \&e {m;J=8HP} Ǟ]gҳiy o Q΢Eܪ✹ϔJgbqplk؈h[߁1I]{Xڿ(开ҽHH*<ߗbOA"HD"Ele@ͯKzLn`jKZ1-:v<\)(̞9Ch>]xrl']G$˧( T;oQ)oKY/|L[NBk }MGvbGR6izoKh75 55kkժ"b2eEʥEc+Y^#tWoNv}M}J4W䳧ӇiGnҵ ܷdALQEBN1SN6|/AorlJBb%Zė"sƜv1IzmbbǸ*+Ğ{@`K|7,>t)gƐ ӧᕼ>=mꋐ~$?@\IENDB`nifti2dicom-0.4.7/data/icons/hi64-apps-qnifti2dicom.png000066400000000000000000000160621226163507100225740ustar00rootroot00000000000000PNG  IHDR@@iqbKGD pHYs  tIME 6TIDATx՛Uso{u{<bE0(%AHDDHY @E(E *AHl@clݪE[1zTY>Wk@W`.=~ƻo}E=R=?{{)osh/}>Tt׀^x;~w/mdK (u~ _{Y_?lFg1K[~Mo|W@ɰ_ou= B<nˢ5xud{[E:WYmrI.')]ў'w8~}_5E|#:=AS\?A#)q#'h͘?O:KVQg"%ޟ5Y{ġ"5yT jHۄywnFK!jAlIr2:n=_6r/BgOfX[ҙg)p#BvxƬj$ĭ1>sQaJƎ` .NY \|)x|c4?3Kǎq%7`?lJ@ b;K?K؏51L$OSXQaf1J\}FFJCf"3-*-(^fLo/[w;\Ÿ'˚RlUY@9"IVʺ9MGky.s, DK鐓R%rR 1{p/]?~+VI\]Rd3YK nУk`jzr:`{/v-/q*1cQ[#Idt|e~珼I~^};i)Xu֭5+%IL]ɕiyIYɫ(XJ5D]QyY2aS:T"Zk""⊔sl>X1KQK GԚӥ9x#_x }yT߶siOB9jV؏3qȌ-+ 8a@jǹYMhUlX(U !+R3H:vǂZF҅6_c3־7{}iCB3UcW R˦WxjaҌL;DBYGYU<\y61$B(bpCj-)E6c!\YH?/:˽~=>ԏ7Xnsz^ۀ#sÌs"je5a($at8$I P#2Ds32v$bdDqL1iJ?kw{to Ȳl\ߓQQ-J6N9o &ӘǤtLQK:l@"Iy39BMB15ʂVhqRPa",XL&^#q4c&Jg:iBG2oy=o@x<)Ob%9e S1n$G2!%c_҄xUf$4C1" #J6aYя¾QrT8m[9%7سG&Iͪu,IW# 1ސХ+Lf8R2֬fI;,XÃiV1[#2ӈrh=^^.O9x"%(h(D|ʉ19LMROmY`I{\siLP":,4W{{c&)=egIzqBֵUl{xU!#ЂF\IT1.u'[ZB|3Vsw, /ƌ# d-S@gu\>gO<,P (qhM)rوX~T4a+&TT0s%,(M8iEb˪S>CMNN.FEqCrN0K=xvQuHCpT+o+D)”%jblؓ: gHX Z1p-]r r\qrT̸e7d'xkȥ$Θd(M NsB?)\ _#Gv zQy<;Reč~zi?XaYDF<,<m@) Qdz K̓'&Kd >9HIAKZ‰c+4wENz#S#W( nu9[N1 w ;q"M ;Hn~9H1t֑)K) c:98J6A@ȼy%e9EHAGe4!LJ_Y/ϰ̓GSqyLXц`SDV㌡Ѝak+'ϮZݖky-BC7%Yyx#, 0LsߧPG;uiΆoY92ZXp rM,Y]0OΖe7pCjDRk# s`5k)pUF'* ES]܊ƀaܴVJ΂4\` \`Xdl΍g9jW!/0bGhl(,gO2Eyk:yM\.ٌ=2H 2X5Y9mdǹTXkiEI"{IS9#.5yG, ƍ9::v1KXHB:XukݐSؔ9"(&.BL9oSyl>"&:9hC36xs9pz\I%u,Q)e# #^Z03ќ֜a!!YKʤVJ 5W1}Z]˳Riѳ wDU8i3q<92 P*[m+djSnn˄S}.+,j>2JֵlŌ/gOd S#-1tvW,t #͙%%<1R(.dܗf 5v+|>udFV}`R'>'ERA܀%"itzoK$.tfy4ms>mSpJv@Ԯ_"df&Y++T2c:6I~+2O[f!39*EsϲHQkAmlC\ 9FWv^ZΦ=<-ddRPʘ%dly ,1ӌ[E8 @ɲqń!QX&GC)IK4:34s:>cyG%_h RsܗϦ>1rcLMW$6#5橣is5V@)ȎLL]~zN7-,vdL3MjkB;Kq"L'H4rLae e6d6AӀqg}J&A+:`MMH\2A,#/.x*!;w 94})*XGLmciž#HE2P#q^JVx9y^p68^qRR%)5@жqx1jT$dϹ4sutDuȶ[i_ݦ!?K8>PYL 駄(ճW(00dYwߋyn/5E25eguq3pQ/33aȦͩeȘ&GYQw;u|TSB+jPWxM z|U>^ g%c}"cC#L3N`CKK˷_yNO̿e .d,1 YO7jsT%IdIӎCK2ɬ$r7ld^V9Kc~%ײj!5g"[*ydܶ^5BݍZ^UuEKԌXlA##\G1eߔ9< mJ*ֵeScV*C5 )pHZr-r ڧVϖ[dشu׮cW1v}1"%1Qc%}]*mt8mֿ,ɕLRpcWe&L鉣Ñc:ƮNJu8#UئOSg6<;eIaA#*TZz:q2-vO/ኆ*Vct6q{o=䫿]Sy;BOKo\ .kKIENDB`nifti2dicom-0.4.7/data/icons/lo16-apps-qnifti2dicom.png000066400000000000000000000003521226163507100225760ustar00rootroot00000000000000PNG  IHDRaIDAT8 0DY+BW` Z)q61z U%$}T2IP`N$I;o9O^u&dbh?}qI+p} (jGd#F !0x`RrR(! O+n#.@v0H C6}d,ӳ2TD;VB\|IENDB`nifti2dicom-0.4.7/data/icons/lo32-apps-qnifti2dicom.png000066400000000000000000000011011226163507100225650ustar00rootroot00000000000000PNG  IHDR szzIDATXWہ [҂--¶@3aG\M&3C7o˜]yVsٯ1(9={W!1G)Ԇ1_pLYYjrk#vMU ~P6E[x &ȲV$r| tݩҎ Z5fBb{I}Y,(H2{4я$@rhf.=Z W&j#`}M遧>PǮF+ Xz 9 ђ-R60!o k[ʳ>:#ĵPoDNV7 O b@+QB9 HބS|k !}ana72N+sIENDB`nifti2dicom-0.4.7/data/icons/mono32-apps-qnifti2dicom.png000066400000000000000000000002621226163507100231320ustar00rootroot00000000000000PNG  IHDR szzyIDATX1 DQi D@2&2W!" x^DZE,DzB[4e'A0 qvHIJBlvnE5ͻ V1IENDB`nifti2dicom-0.4.7/data/icons/qnifti2dicom.icns000066400000000000000000010747131226163507100212430ustar00rootroot00000000000000icnsyics#H????????????ics8񱱱ֱ񲎎󱲲򲎲񎎎ϲ񲲲ֱղ󫲲ֱis32 0)!2$&CKD9EC+ =QQPBRGB "JPSNAWJI, KRMJ@OOU( 5JDMNGaKPA" FZJGB>POcP) Pjnhf[qmrZ* EhVO`Yf=QR. H6CKE;iLEJ" 7HYZ52\S?E LCN<2^IL$ +BB-#EE+$A8 F0! '& 3%! ? ( # U  % -   &  ,$  _"   F#  F%   L0  + L  B .0)'% #"w\fkXm nL<>A=Eb X844919Hx rF6/05*4vǂ lG@OYCHmsUWoWjyhs8mk'45> "S 8e"WC Z 1e=iYwe_6MFN\3 &>dc`,8'75NA),%OlTD:"5A>:zu?Fic9`ZFSpi<\C %PsNqz}S#}}Zvc6$ 8U6,X>$wL QT5qo:?F6  5YC9rtP8L/\K>m^,,dE& 3M\+AuoYL4?XnS=<8]B  9RS6@PI:'MsYXZBJK$1FQ^%Io`0Kh`CDPQ5  7LZ.5D@-5G?;CEB 8N:HL&+1L^D/&5*>H70+LM@3" 1>BC3$9:AL9=H9IKlrH95;2,7G/844A;EdUxGB9<3,+5I(,/497/E.)+.@)0&01)5@l`>.0O,/,.<#4./8%2Ojs\I7.2I%'!+>$**=&.=IbL876HC%/#;(E6.58\wH20-EM9@)0D&*:>E3+5@O|cF=>&%.)!3>&'+$"+;7EȄg>.2)" (6" -)3D܃mT@0%+$$+&&118*+*%=@|ӃN=8%#(*)%"'-#*0'&"497yӃL^6D+#%%.$)-@F4=F'@؃U`4>I:/74/@*42,<;'DӄqA/JB+:>,HL,$2$'8;6PI28:(#,-,@7.*+&(5K284B3,/.)6-/8=9=RP@8E@97FMF;=C>BKPCEA>Kfl\OC=HVx[WMFPZfZFHR_{fXSPYvpWTZp ~hUOdx[_v nwxl8mk-ܳɄ!)3 {6e0q4 mBO ARW W VM+ZVr 2E $ &_,}$it32{S            " "))$"!  #''$   + ',,&#(*&  *269850*&"    !" +49;9.  ,23246:;;<<92+#    ,1-(%'-8BFEC@9* '12/)# "+5@GHD:-"  7 3@>=ADBBEGC?==;0 +7<=:4++5FKH@;72.29A@4 .ALPNLI?+"*299+  < #*',28DNPJ<+!)8DLL=# 6KRQMKMK?2/6:887. ( ,3+")AT\YN8!!:MUZWG( ">OPIA:9>FPTQJC;'.4*  ? 2<9892$1R_YK<.&*2$#-LPC*=WTD;=EJKNQQPPRI/(@LLHC=.)OTTQF3'3745- D $3BRTNG>71+'4MYZVK<5BU`c`XA1Q_\WVVRI4#-G[ba]Q: 2GKB=:, F %Udeb[L4!-HTOGA;,F %7- '>S]\YTG2&7LOH?55/ H  %2@GH@9?Qbe`P26Vhok^K;6AS`b]I$ 9T_c_XMC@A>4)(6FMPQL;'$8EF;.(/*I #%4=B8-4I\dbV?%-SiqpeQ:)*>UekfP) 8Uacb^VLLSYUH3#)9HRSH4$%4AA7+$' ( "(1-8DG@2$ L9GCAENW[]WC0-4H]c_TD76\da[RIBFR\bfe\G.&=Wfie\TG83?FA1 N!9>8@NV_dcYKQaibSC3,6GT[[X[ejh_K' HQ[df]H*(BV_`]ZSC24<>;&N +47=JU]bc\MN`qtkS4!/J]ff`]aipnbJ% HLLKKC;=A=;2 P **5CNUZ^_ZMBMdqreI'%Falnha_ekpqhO* =Zefd]O;,*3=GTaf^?(4::8854@KG>6# P')+@QXWWUPE76I]hgW8#=_opme]^elprlT. ;YgllkeVGFNUUSV[V:,8=>:86,0@KH;) P *%3IRUPH@8/-7HT[UA'1Vnrmf]UU^elokS- 8WipqpkaVV`gdXMJC2'1BMNMJGF=//GQYZVH3)Upsj^N@66EU]a]F# 0Shpqk`VRWcjj^@! 1H\dd_[XOFGNME<<8$' R &( 6IJB>DIHNVaec\J1-Xoph^N=14GX`c]E" 1Qekh_REDN_jmgK#1NbigaXPG;8GUUJ@:)+ R *#'ALEDMSPPWaijicT;%,Ncgd^TE9;M^hkeL& 5UdgdZJ84ATdlk[8*G\ffaVG:,'9MWULB2)$ T !, 3HFDPXTMNW`dhjeZD,$9Q\bc\OBAQamrmT, :YijfaT?07J^inhN' 9O^dbYI7%$8KURI: $( T &("GMH=7=JRSVajmkcVC+5\oqnfWIGUgrsmT-8Taec[M>36EUbknhR$,L_c_YRNJC8,$/CH.,! U !+%5@>:BQ[ZRR^gkh^N7 BeqqlbSFEUhqrjO( 5P_daTB1)/?R`hicQ',K]a_ZTRQMG@5+2=/.) V (.#7?BIS\]RDDUdjg\G-Kipoj_PBCUgomfM$ 3QaeaTA/'/DXdki^I#.L\bb^WTUTQLF;1-$0/ V 13%Qbig[E)Gclmh]M>@QbhhdL$5UegaWG6/:P`iojW:3O]ab`\XVTQOMI>,-/ V 99)BMRSRKEDEJS`gg\F,;Yili^J:9HYafdN% 9ZihaXJ;8EYelpiR-=Yfeb`^[WSNLLMI5'& V ::(DMNHA@JTXWYaef^J11Tfkh]G41?Q\ddO( =_kg`WJ;;J]gloiQ'(Hcnlfb_\YTLFDHI9 X,/%AE?3.=S^a__chh_L5,SfkfYC.*:N[ddO) ?`khbWG56GZeikfP',Ojvskea]YSJA;>@3 X 45+ 9S_bbcfki\J5 -UhkdU>*'^mohYC,%1FYbfeQ+1Vq}xka\TI<, .>>0 Z #($*//:O`efgmqkYB-=comaN7,5OfqsiM( @boqm]H0"*UgopeJ$ >bqtnbO8'&3G[hk^:(JcqupgZK7' $4@?/ L /;>5"!=PVUUY`egnrqiV<$NiolbSB;EYippcD7]osofWD4.5EWelcC B^nuuocUF;85 ,!*6=2\"5AC6 ,@OXZWW[`gnttjT9 (VjoldVG@I]mtqcB,Sgooj_QE?CLWbjgM"9Xozytk`TPOLJLI>3134:5#\ &8DD5#&7AIPSOJLS_kutfP48`mnleWHCNbpxtdC)Obmqoj`WQRX^cikZ10Sp~xph]YXQLPTND>?<:7' \ (:GE6,:FGDCB>63;Lapn`H.JiomiaSHHWkwzxhG 0Sgrwzxrg``cfgjldD&Oo}~{th[RLD@ITVPHEE>9) E'811?QZYQJIB8% ]#8;>:0&+9A;.@cli_QA1(3LgzvW. ?cyylcab`V:(?B81-/8AHGFJWcf_RE9*  ^ 0DHN^ij`RILTZVH5().,$@^daWG4!9Wjw{rV. @auyl_XVVXYWUM5&*+0:FQZcea^ahiaR:+#"_(:EQclmc[Z`eheXC.":TZUK;)%?S`gcL) 9Wgnmjd\RIDBCDFEB;(&;N\cfgjlkfcfg]H+"+42` 0.(/5/0@\kqpkebfnrmbP<+ +0,&$#&*'""*297( !6CC?:4-%'6H[n|~yn_TPLJH?1)1AKJ@0 `4CJG=/1J^gjeZR[ksrlc[RC-(62b7FOSN;*2EPSOD;Jbqvvusm`G+ '?QW^caWH=652# (CKF?;74.("$09AEIScquop{i@""'-256ALPK?3/"b #9FNSQC/#)2660&;_t|ykU=,&&->Q]elmkkg`WOG3;Yb^]][XRLD==CMV]cgks}|u|f/$8IW\ZZYPC0$%#b '5=DGGB4('**& 0b{o]QKGEFP[dlolmswsld[D! Mlttw|ztnf\UTX_elsw{~d(>^lrrng_O5! b&*010;EGGLNG6"-d~tkiic\Z`hnssmntz{xsfM' (Ztzz|{wmgghkpu{](-Vr{ytph]F*  c '" ;Uahoqm_@ .d~}{||vomqux|ysx~}oR) .\qvw|{xxwwx|zM(>f}|riaQ6%*/##,Gdovww{w]6.[}|{?}~yypO' -Shot~~}i<0Ux{paP9')8;/27!&Qksvqr~nG.LsF~||{vzkF $E_oz~~}~xO1FtyjP5$)8DB4 ">=('Okupdm{W2=`t~D~||xvtsxj@?ayxsrttx[7:f~yc<#8GMD4  ,A?.%DfobXmk@4G[ioqqpnBmmliimupFInwka_beip}z_;4U~wV(1FPOC2 c 0?A6'5V^NUr\<6@LSVXZ\\XVTRRUVYan}yU!%Y{sgYOLMOQYgnsrmfP6-Hq|i;";PUN>,c .=E?/+:B=Wyz\C:=CHNUYXRH>756:@L\pc0 8gziXJ?721239BFHHF:("9duN,DWWJ6!F*;IH=.%$(Sy}hXQQU^gmlfVE4( ".?Vpm:Hq{bJ7) #+/+#-U|~a+$;PYWF.c );MQK:%Huzrjhlqsroe[PC4(!&6Nctp?Qwy`C)$,27>HLKHD?@Sso>5N\]TC/c*=OXUJ6 8m~sic^ZWUX^ffb\TF7/3CXomBSv{lW?.-5AJOTY_ekrvusrppwxP-EYc`SD6*!+>MTWWK4$[{yk[L>3,,7Ldp>rqjZF=CXlujF Qnri\MCFP^gmnieejnrz{`*)AS`e^SH=1 c)9EMU^YE(?ixz{yz|zrdTB1"#9Sbb_cpr_PMWfgH J^YMIScyzrgYPPW]bm{yc8%AXbe`WRKA5"c  -5?P`_P7%OjqsrvxxumcTD5-/5@JNICEUos_QV^E@NHLb{hP9./5=FS`ikns{{thS3 =[lmdVNMJC7!c !#.DY^S@(0[oux|~|wnc[Z^``ZJ5()=_}x\NO<9HTiiI+$.6;AFNUWN@/5Smvo[F@BC@6c !&& %NhrtsmaSMZlpkbXK7$.PlmH% 8Vn{}~vdF" $+*"&*&7ezaM=1+))"c 0=BL\gi`M5# 9MTQF7)+BUYPC3%!5Qhpw{{|~pR) (HaprqvxgH".CQVPD;:@D:6nu`SI@70(c .>GO[cfdXF4% "23*  +Sp|zrg^alqn[.3L^\SUewrX6'C[jpog^ZZYI2h}eXTQKA9,c+;HNU[]a`VF7*   :i~uY>7FZcS# *544Ifv~{gB3PeqwyvplhbJ+O_WLINQME=. c)8GLQTSZc`VH9* ").-(! ?o{Z.!5@0  ;b~xX*(D[hquwxvrl_@+<>76.EQLDBHNH<3) a /9>8-$*@VeeR8'NajnmlibXJ7"1b~~saN>,-C[vuL+G_msromjfaYF$%?Wc^TKIH>1% )32,%"):M\`R9'TinqFolg_P:$6cy}se]UH7(7Qdt{{}tT)&@Wisvrmhd\RC*7PeleXJA:1%_$,($)3>GOY[P<$PjoprrqppnfU=&5Vhi`YXSG7;YjsuonofN+$>Ufpuunf_VI9%.F]llaQB5.*'%_ )''6FRW[^]SA+@dmnpqoqturiXA)+BLLJJKG::Xkpj_UK9&'>VgqvxshXJ<+ !:SflgZH:1351)_&*0ANW^eebYI6"(Rfjjkmqwyxvn]G1"(15668<45P]^Q?1&!$0DXjuxzwkXA.! %A[hibVH=>A>2$] ,6FOV^eec^TD15TbfhmquxyzyqaN>41120./7/ )?EA5*#%0?O^mx{{xkU=' &$'F^hf_VNJKF<,  )6DLSX][Z_`S?)6Q`hpst?vzyrf[RKGB>99=0 *02357BP]hqx~}ufN5" ,:B:!(Iahc]XUQJ@2#\$2@GMQQLN\f_K3 6Rdpvuqnnswvrlf_ZTPNKF4$.=JOS\iquy|}r]C*$4ESWI'+Nce]YXTNB4( [ *8@DEC?FZfdU>( 8Ujtuqlggknomjd_[[]XL9#-:P_cemuyzyuhQ7%"-=N[caJ!0P`^XTRND8+Z(14348H]gf\J6$>[lrqle\XWXYWTQSX[WK:-:GXelqvzyshWA.&,:HVbij];8QYTMHIE:-!Y !'+/9M_ee`TH<-$E[gjg^RG@;8656;CGC>21AKWclsxvk]J8-1=JV_hlldM*&CTUNFCD<. X)5=BO\a_]\[UI5 *?KONMJE=60+%!#(*))$,>FQ`lqsm_O@:@P^gmnhb\P=% 6PZYTMG>/ V "-LRRMGB;2'! ! $3Pckf^PC6*!>Weigc`YOC8/++)  #09GXfnomiecfltzwdE15ERM::O]_\VJ=.*(T+5>BB=2*,?Vfhd_VF5$!E`mqsspkd\TL@8/ '9?HVbmqtsomnrvp];$-F[bS.+@GLU_iotuojikcP1(F_jcL;EU[SG<431"R'5@HSYUIABP^abaV?$:Yipqtwuqke[L;+,CLPV^fjjg_WUOA*;YggYD=P\WI>762%L&4@KY^YPLPY\ZXRA% =Q[bimnmiaUE6(! +>JOU[baZSKD?8-?ZaZL>EZ^PB:82% O $1;HVZXUW\^YRK=& '39?GLQTUVPB6+ $3@KTZ]ZPH@9887+7LRMC>KZWH?:3'N$-4@KRUY^b`WN@*$142-++/5>GHB;0! "2BPVWSJC<5*! L%*+.5?HPV]_\UG.2FMKD8.&#(3=A<4& $5DKNLE@=BJMLE83>LNA26GPLB8,#L!.36326?HRYZUH/8OY[YRH=3*(.1/,!)39@A;65:2.3=HU_db^YSPMC0"(57/$F %+28>EILMJ<'&=OTTOG9+! !(11!#-27+ <#'*+.0.&$&&'('&##*4:9/! !""(06;?BA@?>>=<<=8-! #/9=@DB=97764$7=@?8+ !#$+1332236:=>@@?;2+*% 8 #$#)-19DLOOPQPMKJIGA5*" !#%-8?BBACHKKIHD=3/.& 5 +/-*&(2AKMMPQQONNIA6/( #'+28?ELSWUMGB90/-  3 '4::64;EHEBDJLNPMD<5* )058;BJNNID?7/.( 0 )6:99@GGB@EILMHA=6'  '8GONLLIFD@80,     ).,0;FJIE@9:<4#  5IRRQPLGB7," * !,,-6@EHF@97:8+   !:HKJF@6)  &'*/69:<;4%  #)'   !#         &+-.12* )2434341.& !(./-)')**,3<8/?6+&! #&).3460( ./)# +0#!&+03- 54+" %./-( #-5-  9>0!  !!  #8@(  (5;8('4C<3 *93*(% *-07576)  $2:&)8.   +9' ,6)   )9)'6(  % ,;#5)   -<5+    .: 12    "21$9&      !&6& =0       #,84:#      %52%%:%       .; 9*     !;830      -A !7$       #5: -4-!#       (7, 7&#       %-910&  &     !(4/ 6-#         %.: &5(        %9%23"         /51:+        $9$(7"       2*30        )5 7&       44          2# -0          ,-4+        &5 8&        "6 4          / (/           (''0(        !- 3!            / 2!            # !13&            #'9#6'        "9.)48!      '   *>@,  ,       6+06          *8. 8)         #7 !8!          6*)2          133,          ,5 7(           ): @)    6       (AH*            'H(5M)           !@=HK$            /JU7            E/&DK3                =A AG5               #>A!@E3               &?E@F2  ?          )@C>F4           -@@:J8            3C? 3K9              !9C<)K=" 5              %>B: H@& "     *        ,AA0FC+  &           3B?>G/   .           &7E=/I4!             ):I.J<$               -BG DE*          !4I: 6J3              (?K&$H=%           3HD$@E.          )=K/!+I9%         !4HE DC/        %    )?N/ 0K:)         #3LG  EB2%        (@R% -H7(          "1R; EC-  "      %FQ(K;%           6U, ;K2 ;         *KE8KF(        &>P(O:"        #4J< :F,          +?G G8&         %4F09B)"       ".@A D5%         )9D"1A/#        &3C7 =;*#     $.?@?3)"   #+9F-=/(!   #+4D-5>.&   $+1B6F ;<,%   &+/?< >9+%   %)-;> >9+'  #%)9> <:-'""$&5= <=0(# #$$18 5=3)$!   !#/5-;1&# " !#03'#6/#   &32 61! +5)34' #( &24&6/""3?/!-5, /6-! ,7)6&!.5. 24+!#132)%/40 00,%)2' +-'! #(.03..75/&#'31$10253,%EV^ff]D Ey{_@!CmgBo> %$fɡȬzuv}[(%ptot||vqqvĤvkb^[[^ckt~K +nxw|se`_gzrc[YXXUQQRUX`fq51:xſoghklh^TOOQRTXczyg]Y[_cge\OHFIPWar˱_5?aXWVQMJHFFKORSU_pr`VSSUZ_jup_SNLNTaw½m"8)ziVVRKGGKLNSXVRMLSdwyeRHDCEGHKYlqh_YRPVk@:E}gkwZWQIEEGMV`bYQLHFL[n||p\I?;=@A?=?HPQPTXVT`~~y~C>CL^gZLGECAFUiy~oUD@@BEHGA>?>?>@HNRZqye^iwB+FhZ]_]Z_]H=:>DLUZTH@=<=<@M`ileTGA?BDLUWK@:9;?GLLH@=< ?CBENZab^SHDFGOaiXF=;;<>BGM`aMFL^uBe]_UICHW]I?BJIB<989>CFGFCAGS^aYMCACDDA@I_j[H?>@@BHPYaXNORbw Bioih\LFHQ[WJGJH=99:>DKIDA?@@CNZ^UF><<>;:9:ANPC>=>@BFO[YSQSUZp`6}uk[MEEGHIGHNK?:.?FF?:78:;?ITWM=769;8566;@B;789;>EP`XFCJRT_< Ô|mVMD>9?>AGD?>:657::762138;AMOA7545:=98:@KND81268>FY^J?CKORbZ~oTKG??BA>;8;CEC=62.45665349=CRVD<9625<@>>CNYVG92249ELSUbaH8p[NGFFJI@867>MNA730/15:=<624:@M^bQC:52139?@>>ENPH=658FSXNBDO]igtbJawvbULQVM@;97?:5442.00,+4GO?3/.--)+--)+,.5CSK80-28=FLPJELYuMN(mSTSFDA;988<:3224:@A>73211-,-29>GZ_L<3//15687/,-,-.13BQF61/39;BLQKNQaNfw_WVMB?=956995.-.7EF<4/-.//+**.8BM\`P@5//28@JQLC;50/015ISE;8689=BJGLTWtUO}g`VME?<:65:<91,,0?M?4.+)*++,,*+.8ESTF9/-..07@JMH?;50/13>SPFB@@ABFGADQWb@jh\MC@>;;:?C>5/./:KG6.*)()+**))/=LPD6.,*+,-/475310/4;EFCBABCENRHAFS\x7oxggRG@?@ABEIF;4317GM:0+(*)*)(.:7;=>??DRWNEJVml jk`OGAAGJHHE>76 APE3,)**+./..+),/>PXL9-&"!#')+,,++.321367747:;=>?>BKRRQZ}wIR`mqiRIGGMF@?=93344:ED7.,,-.49:6/-.-2=M^aOCB??GPTWuxzzS|lt]KHIIF?>=:502115=@5-+,,-.263/-+)+5ETXJ;.($#%)041)%%(+7LRA3//14;>BHIA=;8211/15<@81/.,++.120.)'',;JO?/&$'&'.691)'().;NI7/.127>EPVNA<@HQal-TNjtcLMLA=?>=9643/0039@>60,))*,01/+)'',8JR>,&&'(&&)/30)&&(-1EN>1,-247@HT[QB>CNYzqWnltZQOE@ACB<9872../05@@5,)*,//,(&%'+6GRA/*$'&'(,-*('%&)-=PC5.-.46;?BN^YICFTuvwvvpmXTIEIHC=::82././17A?3*()5,/.*%!#',9KVE5/,(#$(,/-+*))(*+4JE5-..06;==@L\\OBInzo orjZQHLLB<: 4/10./3=G@1*(),//*"!"%-;PZK:2+%"$+373/,*,/0@@3-.0139;93.,-08FK9.*)(('*,)$#%(()4HQA2,))*,/7=:2+)&'-3143)*,/12799;=ADIU]obmw.iVoTKD@<8<@A<62/,,2=LP?3,(%$%).,*(()&)5HQ=0+(*/560(&.8<7+"#*/01479<=@CFIZbhXYLxRHB@<>C?;564/-.4APUB2+(%"!&..,*+*'(4LU<-((+,,-10(##%$%,8GB, %.01366:>ADFGWms&TGQGCBBC>95F10-/5APWD/*'%%&,44/-*))+6KR<-)*+)+-0/#!#$#(5KL3$!*//1569=BFJMY"X4bXUKIIKB985200.+.6BSZC0+'&()/892*'&(-8KO<0$!"'.9HJ:/+'#%(/9;1'##$(,3GP7#"*-,047N]^A+'%&(-7=7+$!!%-8GJ9-)%""&0=F=0*&$$(0CN9)#!%+--/49BP`itzpZKQcPZWscbj|zXCBF>51-,-,**3?P`[;*)'&',384+&&%&,8GJ7($" "&.:JJ>2*&%&.?N>/(%&*.-/6;FT^j~p]OP[|[d[[exlK?=?931,,-+,-4@TaU5+(%%'*051($""'-8HK5&# ""$)1:842/-,**+,4CVaN/*&$$&).3.&! $,5JS:(#"!! $+0450*)(&,9KF5-'&*.58:>@@HQUWWUWj;ShWQU^YKB=9763/.-*F,3FY^C-)%#"$'-0,%#)5IT:&#"!"(*,-*'')()5GJ:-&$(*+.2448;<=DIMRWYd`2wfVMSXOEA=978740/,*),5IZX9*%$#"%'*)$ "&5MU8'&"% $&&%$$%''/ANC/#!%**,/148;;9>CILSZa~\dSMQRG?>=;;<>=83/+*.;M[M0(&%#!#'%! '2MU8-(!! ""$'(,9QG-" ())(*07;<:8<@HKNX`} aPLNM@<;:9;>AA?83/.4ARXB+)'%!!%9#  %2IQ<2%! !"$'),6QL.$&-'($*3:@@:6:=EJMVabOKLH<898689#:9754:IXX;+)(%#&%(-)$!.CO?-#%"#$%')-7NS7*04..*.16<=:47;BINUf55FeOLKC96534742136;=?GUa[;-+*')**2:5)!*:D9(!%! $%&(*/:NZF7HPXij_wߴgRLJ@8531320/-/3;CJUakaA1.+'*06@I@-" *9C8' #%"%&')/4>ScZI?;741/--001348=FW_dmȢ`؊lcWNH=821031/,,.25@MZgrgH50/,-5BQN=-##4HQ=(" !$(+*-+./8>CTd\H6.,,--../0357:@G]_X]kC`[Ҫi][WRJ>4/-/100-,-.-4>IXgfQ>89;?IW\I92*#!$#(=SWB/(%&&%'(-4;<><>>FJINQI;/)((+,.12367;CEJWTPVbt`ЂaURPQM?7/+.220.,+*)-04=LXUMHGCCHNH;1132--+0CUXI9/--..026@KPRONKKLH?840*(&'*+.37:;;BPJGLJMS_xś4!s\OKILOD;2,-7;50,*(')++/9DMOKA4/34.)%',/11/5H[\J7./'39@FIGCA=;82-*('&%&),08?CB=DSL@EGMV^q%KխlXMGEHOK?;88@E;1-)&&'(()05:=9,&'*("!9#')./5I^]C1+,+('%$')-1320/0,**)(&%%$&'*5@GD@::CH>BHN[cmH%wߚeUMHFHNMEECDLRB2-'$%&%%),-./+%%'(! %(,-.=RR8,()&!!),*(')'%$%#%&)6HE98535=>AIRamsq2وeXQNMKGDA?;>JXI4-'$%%$%'&'')'&''#!"%+,,4D@-(,##('&%$$"!!"##%%$%(5H>1/1227=AIWesᛙFуk\WZTH@<84142,&$%#"#"  #! #'/>9,,)&# ! "#$&'-79.*+,039=BNUW]{̙EI՗pV^gL>8300-*-294+'%$$""! ""!! "'/?<4/(&!! "$$(38-&&)-05:AFMNOXoٙ@_ܜbQ[^H<7122-)(-66,('%$#"  ""! !&2BE;/'$  "" !$#-74$%).17>FJEHKUjޙcs؍XQWXH<3154-)'*030.)&%%#! !!""  "$0@B5,&  !"$%%$%&#  !!%(47-#&*-07DKIAAIUhۙzWQRUI:27:4.)&'*+05,*)'$"$!"""$#,<=-'#)#%*+,++/*""%$(-71)$#(,-/8LMEAAHUiؙcqYPMPI;8@:1,*%&&$-60-+(%##$&')+*('%$#"%#*K^zҙc޹q\JB=9>CSI6,(*&"!#$#%)$"!"!%&$%)*+/0+)&"# *2*0'  '04676330.0,$%)++**'#%+-.8GG?74=AL\sԙJ޺r[IA<969PQ6.)+("##""%)%$$%$%'%"## "#"$)(''"!!-0'/)"  $$&''('**((& "%'%&-0813IS6-)$&"4$(()-0/.-'#$%$!"%))&&'0,&1.)'"#$"!"!&&))'((" %$#%""(.8NE2/833@<97+%#'*'$$('+1-!%./+')80'&&1EPRNI=620/.)).07GSS@& &08ABFNVfՙҟlbVH=425=RT=0-*&&%%#"!"%$#+7?8' $-2'&7-%&!$6K[a]SJC?<:629DUa[H0'2=DHKTYkڙcКi^UH?60/8KYL4.+(&$&%%$$"!!#%$#(02+$ #(*,*%7,"%  )7O`_TJDBDFEAGT`cS8$(8?ENR[_tٙcϕgXQF>7.,6CSXC1.+)&'(('(%##%&''),+#! !%(+*&8.!"  &/@OL@7335;??CMS[I-!*7;CLT_gԙcҗiVOE;6.-4=HTRB4.+)*-.-*(''(*.00+'!"(.254?1$'%  "&/=B;0,+)+0259?FXI),69BHQ^ləGrӝlXOF=71/28>FQWM=5139>:/+*,07@B7)"#&(/14>KN9*-.*" $)4>:0(&'+-.14=YM'08;AEP\nͿcWעp[NF>:73135O_igXLB;5126=IXf`<& $,;A<20?Pc[F5)'#"!(9A8+&%&() ,/;^S/!1;91/./8GXe_K=2/.--17?N^_@&""/IPHAKUU\YB." !-@?0'$#%'()*-/C]K/%-;BEACNUbѸK'…dTKHDA=50+)0>P`V>5-+**)+-1;LVF,"  1GOOU[UM.3"! $4@8*&##&'(()++,4LV@*)3=@A?GRYnՠa}ȓiYNIJLD82,')3CWT=2,**)''()-8DG6&  "3>ACNURH@B3"%# "*:=1(&#$'(*+,--/ATN9))3;>>BKWex*VҠq\UOPRI;50*).8IN?4+)*)'&%$&*4=@1%! $/83?EE>784)*)" "&2:4*%#"$()+,,-/;QTC1)+2:=@FQbsAA.ٯy`ZXSME:63/-1:DK@7-**))'%#"%+4>>0%!"-789;8>;23..-/*"!!#'.63+%$%)+,,.1:PYL;.*/3;?FMZhsڠ_e`]RG@8311.29BFA9/,*()(&$ !',3<<1(%$%,6=A<07701+*/20)'').31+&$%&&'*.,.1:O^VC4--15B652--4:730+('%#!#%%(*/6;>AHVXC40/27:BGGNYo׊]ēp`QJD>8221025;JJ:2.,('))&%#"')+*-04=QU>.0788633463.*'%$$""$&'+.7?@;;@KP>30048837;FJ;1/27:?@GQ^qَ3 Ŗn[QKE?=;51/15=JPE60-(&'())'&%$%'((,59<>==EOIB;2/%-)&$#$$%&*.4;=;72139HG6/159=?DN[iHIжgXQKE@>821246?JNA40-('()(':&&'(-.//39;45;;<;4.,+,+'$$%%'+17;96410/4@LA4/17=?AKUcw܃ " ä~gYSMC?9410357?HK<2/-+)())())*,-,,2<;37:59<5.+($!&'(*/477522//.1:FH<118=DCEP^p/Gвt`RMGA;862123690*('&(*,.2665200/0018=CA727;@FEJYn~[WÔvdRHFA<988500129BB<7320//0124899758DI@722/7??4(('')+,/220/.--03389:@=669DD=2((*7@?6*&(*+)*--,-,+,.59::7:>968:;@GN^jq۽85hϗo_SJF@ABA<82/0248=DMF92-++*()*,/49761'"'-7=B7-&%&),-/19CA<65:<88:;=EMYbhtTڿcZOKC@CEB=8211038?HG<40.,**+--,-**-)!$3;A=2,))*,,-./.14=IG=416<=<<;@GOY`c}٪%1ةs^SJD==?B@=742026=FG<520//.-./+'&((!%0:>>9300/-.01248ANK?525:?@=9:=??9763129DMC730./..-,,.-,/4125+*3789622343467:CSQB736:?B?<@GLTW]oњP̢k\SI>;<==:987538DRO>8642/..-.148BHF:.#%.15984356568;BMRH;56:=AC?=;8 ::>FROD@??=6236969DOQOLQK9/1356336;?CGHFB;9;=>AEBBIOSZhx˄ N̠rf_WOGCA=;99;<>GPLC@ABDC?<;9:>CELPQ_mr[G?:8:<;:=BEC?=?A@?=>CFGFHMSYfuɬ,LM}h`\YSJC@?=:9:=DMIB<::=DEBA@=;:EQLCHOczs]NE@?=>CD@=;;>BA=>BJNLHIQYer`KzìycZTSTQJDA><=AIPKA=;:7:@CDECAK^^_hg`_bnnf\MDDGGD@>==??>@CFNTOJOZcmˀ J"vfZOLNNKFA>?CMVRE<::98;@CDDJalryg^dloi[TQLD@=<<=>BDGLTUOPYdk{ʠ!HDui_RKHJKHC?>AHKHB><>?==?BIUdltlnqklkVJLU^[SLGA=<;=?CGHLQXZYZak{ĴDFaujaXPKHIHC>emS;(  9]ʹ[,A}͸^9 *WʜүN!/_D/ar9 9h٫{P)@ E= A22ڃ)!}q\W8;x"RV 6*|[ T1.rbE,! WK ~;7 ``"3B Uh|+2DI ae ~(-?G _d |%.-:M X%FOq~&.<IUdm{".9H`m!,@ Te .$J1kAR'_6kEuS} cqz!$$#!}wwdlO\>F-/rlPB1"` U5/{oF@~F Ev6DVv9?_k$09Y\$&J Tu$4 HWls,. CC VTge!vo'zr#'vu$"iv&Vs$Cd  3Q(qы>Yj* <~ÆEṔPzǐR"  '[d$ $k޽T% +Y@GɵrG" +R}a*  "EgxcJ0 ic08 jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 WJm"%]BM"Jְf[xd&!{P+GKɝx9b].uTZ ̓@.#ƶ@?AxA'bBeo6X-Sn[%v Ho@gE'9D*U~:, &?H~^Ӗ\cq q{0Pc|-~Rx< PJ{qϖ)1"]ӡb .i4kf9r 7cߖ|8BYǒ,g$a, R{zHo]Eq+ s!p}8tL V[1vωR|&kIZX:B}@bT>K`5Z3E)cj}uGjYhWD|ŧ#^Kl[y}59Nje'1<ɽ@}KAgfxIub}9h:) F ZZaZK[1PR4b^y[` ~ps\K2XCO[R)|ʒw z]s ]s>~J5Eg cgi: c,f&rNRsŸ9I{bw4BrjM\K!'4JƦz$^JkaM%%~7!jHBȘr[Bh.ܬDFS 'Twt(R ?R+]6=82`WZM}=dy׼ُ#ك\ky4\|˞ ^FV,a \#tM7Pu҉61jR8Kboz\OXZF]=XG8t0<gwm~tKz(ty;Q_>#`l([Z>8UnɃ+)msip6rl&2$Ɲ";kšB-H%4nG̉1ob̳ie&׷%]9FP k, rmKS煠 O@5}2yݿ\K>5E4csh.v8#4K:|RX7![[*xj2T>x:K݈ZCwUMeqCN ]5Fla٣өp:'ԫ׺͋KWᕕ>ng9afR@ FErr,E̟*cH"cisy{Crtm:޳L`/msIKqJ#T몬@|,p7(m'q?"Q &ܻI԰e(;Aeg &9TZ/e>s= H_OKVQI[ 1 ]oی򋆬53 5r  ޅrF=/j)>@bgMɆhGXZp@3&ѭ.DOaղEc'ue(GE~m"Z4|xsYisEZsQV&(} n.$ Z3iB }Qd[M1|:-ⷈ_wtK+=8Zuw3]&b$d ?IuqʣjQ@N ͒Rz#)..ER1&P?bؕ5.4gRϘ2'P"H \Ya=.v! EI>/%^ȑ/;J†|QϸRII&.-cWbst\>@F'Ja. b(Jm i`cS9@#-@6^ v[V[J`w ߿W^Y\M]9SA'{?78~ R9KW a*6]y -=/T@D?:r4jG, )+y O)*N<<ԛ(MZF88ZBLz'P2I|'QG&G+2?V:N.o 4b 8;H&:l-B1?Rg-1pvԌk0B# sw*ďK n/8qzjm"U\xxd|?Rkf&cf}t<"vd7 d~Ѧ.3SLP^TtX{E j*9FiN5cM}ۻ HrɉDǦ>Rwݹ.#FK^_|`.NkH88x { 'mG}W/مN`癊"8 FIꝗBG2y2p0ǸJRx贡>2wv0t޴C5}6}>s!2lhg 44P"0 R&Om(L "X!٤FMwS6ʛ\•K Cwqu毾x:Z`w jCDžQ~;2F4TihֈF,&CXcsF)5[UTqԫuZdr><wԉdcpiie:)dWTkۢhg(ajIz -ozƆ=B핛j=NQz4n8CFeIɽNWJ"N8U$))^#!6erӧ`,W|%>l D U?7š r&+ epMSu9g/x8e\5 WACupD4ܠB:#{z|>tVIbu]CL9uY !H[܊KoV'`l Y I14H[Zl^X(ꤲpdʁ(FK%$M-T RÎZF@v'۾P9?xIWX#<, g[놊HVS3\n Փ$ U3RJf]8Kp ,pҝ+"/Cm])HtA=@;+/OǙ.2ੌ]fQV Me8! "_a^̾Oc@qsHW,NԆ?T(\bmގ}[MhfygL͂:'?k"Mzc^ŨܿsU!Bp m5NwjRi,]YEZB{;NbcC3b'l8حrz{JoK$OQ4l-@&p4ZIV\/ƲoT[}m DPD0W{M$Uo! 0f JCnSGRXUig{^qu-F=BEh%cz#+~L,RY63*94n}ӏv)+ )R/FfFesHzȅDWBAY1@;iݯ MZ~7a9D`x\t!ѯ~w}ee3"2:Р+ W풥ݠ./q;/(M-Pco)1jɖUg=ky\q/46^ v)@hNeE?*vF]v0'Mb)|XOEr>Dy 9ǼzJ.`yEo'_$v_90P/C8t!D3/*b0d9MV1d-9!}L8R3`}V[tև7Z H" :hg#3c*ro7Hu߷1 "1Rݡ%;ӆK0I\/'S 9mm6JAÿs4h.iT5S '4$K/A=WI=I>71CVÓs ,K:tqa;M +[(R!$K-`C&Uۮ潯%W)l j$r bщB"&l#@`N0I/si, @ kGdT5B9[tHSDjϋ1ތiwh : XH߾iT1|-ZhI!B/Uh H: Q 3v(O?JdT\12xͮǻ7(ˏJxrEPm!{n" ׻kO<1Aśň]ʊ|'J15ÓPZ6z\/TFROaA}$٫<l.F@GI HyLN4٧ aH_;Joy͡SIH.Sv%C8䎀*l_Ӗ|u{԰{0:-K-ͮ{9\l^LYRԍrpD}6;yӬ犿9 \sJZ|ӓc2}@bme)сXˢ{tl~4bͷek/{z2~to^eĀ:~M/硚=cQ+{jRX ,&Vt^Ql3d.!uDU;,pak 9Lw~oV /eωX'Tw zL.pDqR13dx'/S؛iN4b?Fs4)+@X'bvg [vσmm)xvڤi'on8|SN׊$ ø y- SeHlIyv){&4>rh,ƱyK@GXVcuXF'=ܳ3zS.*.c;<5J(C<}xX8SRd"UwqRF\6\zP55 g 4QS 4i [i`*ϡTz(wzXg{3]P/kCˣZs.Kӹqj#Y`-!~(W#Ʊ'0"V[̟/*&?dD~<,w}'KjVD1}ڱd< vUCEeFEaLpP#Ϥd[tJ-fPm_a[JЛF".ޝvGIߙAQv}bǃ+ yVeT]0ekug[qn2[L|N+"lUpR*0s˺3;}; :6AG=[XNgՑ8d_k3^v ?kbG0#tD Jucil'R5t1Ae/쐭b֑,q:-[! ֊})^g"MAx @ΜB\@M>sÝR:+%x%fNt*TS{%g,vKhߪ M>퓼;G RE~?z(1/ '\D`l\yM*tfYx4mrJWXINJ۴1և.G>czg+H#U TԒ=wpDG.8S"Xm+&q2LV[{ԎV*LCri 53_t; d =/÷h%pVYz܊1K"C1e,4C,UqWh,wsMa>(J˶̹`/tH!C=qhu{mVH鐈T[ rJoP[Ղ_y}ljؓ>_>.0Tp|Ea*XczcRW_~\ΑgPn/Qy}/ Ayɴ7}ذpekA$菬?N͒ m38g,M]F D)-E"@8W+J{83h E鯎dSd5 T;bd)#adzURhX${q+]Zʖ%`?WnnlةQdg9~2rR t؈oEǽHj:/{IO^ο-DVOXny8XՎ8?v|+o(Pg7D!PP:錳`Hߍtlg(1WB!<@7{<Vnƕ0zzͰ-p[Cf= 6Ϳ9*3%>;7$|JX!wd"mDͤ"| ̀Iϫ/V7^.y`پ5#o:Vɶ{S4j`4LO[%Cs"ŗ\;YK?5 b8X=lАE~gh-Ŧ gh H5X"'$L˔pCD<uVwN_s <Qy9 *)d;w{H_bF)5'>2)Duh|.w{C YG6B7οk3d)bi-~͖c1ԻXQ3#bKa_,KFWtŰqTKg,]աҹ5H ۙ뻞qPUֹUZĴHE~X_3d@'.lS:g`]OtS($em0Lqrōaݟ8xZEL=yaL~] !0)Z=|'m,嫏17oyŅQ|vP=&D 䰱_minEM5)1Zt;9vx{a"*ɬ݊s3/^ /bSb#rzCMv&t(46 UVܧGgcdzXϣ5ϱV°r[wpg(ݶNHQЩ4=Y*pֻ%UJzǣ-]D9sU/|OFȱf\*So/LY-Kۋ% "tu22 +3Lylpأ\^o'e0H)b]I/Q^'pwv5pbexcjkO]CFRB $`;ƠֿApE<Jn[ȭaWߙcRIi-P4za#7_c㻼)">NaØk<`m^ukZ 0DShHzs;5ߝ.q1;^￵1α~_[ dn+=lޕ3W p-PmN,̈́on'Y̰ͮ AZ❫0i=KʉYrơ7-8 eut-駱KY%F\Z^Ѧ\DX 7w* E0vJ2 clRlea{я5k}j10ij_(V=׎;E51>z/ќ(X%fbX_RҰž  %V|{u#4GppXСj$1as=/ \SPR zpJQF@ @SQɺx'p{e%+BUT޽qhݍmΖN;2S9ipk@0IѸxj<~ѬXSgmc~ J* K{' sӁΎYrPDH 8x?..eOTz~;$9 L_ gb;d f΢Y|^Ux2Y ů$Zߤ>|vx 09R_- C}y?~v:2k{ noJ.+%Cw}5T2cDIKh=@R[풧.9ޅ4=RgWM)تꓟW=/`FLewɒȖ34/Z*g~;AZqlfZpO# Tjg$D[5 +| flX7l|@DټVzO2. \:Q }2]8wt͋ N2`2u>y}%F!Xo@==T@95f$ns>7z,U7%r3'.$(a5{J:l1iX`uv rn]-h>=MA'ϙB2["=cv=erųU{_.H}(ve TOܓB TW$l}a@QA4qX/,H/!M [^Ɋ7F h{++4x|/it$?JoyO~[oم KtvgQN0;d| T* C2㖶 ƀJ':eqVP <)/ ֞pW&!X ]u #xIYٌ7yKHWĊr՚Iuw'lݦor52$yQ̮׺|>H0/a v܍2q(N GVLL+㯈o{xQZR6@y{U*)Ψ&ѱׁd"H U}! )݂O z&Uy﫚G|F7gMc(bC;cYr%+Fe†6&Y%  [)51I]DU!c"Qp=ƪBk\;:VP Wxks8q=%$6w/P;?HN\oIGi,,%su,yaسh5Mx _I|gci8cBVt}!TRޞ3(5ey:~ J 0*j .@Ww|&E <}ܵ ID57 e( WZj'=[/su+Aml^I@4>KE{7BE[>2H9Jl;Kw9`2٪Կ|֮O ]$+ .tx;JCU/\젍4X}y1]U"uA}(^jV.qu;R!KeԔ_@:wn 3ᘿ2+@xVA(=s}R %#M]v5P+ً} ɯH gckxhՀ/1#0 ҧ m0OFO~ZĢ-17gZFnO}qG6} V `h,Wm8R?U]7*#IJf(jGpV)ȇcZGY&)ܰ(.~>Fi K {D3 9FC r]CVe[҇@'4@~hNRݝXW Fq/ jo*)$fY;3Cns{>5z _2¸]h{Q WO5mcG6.ِבٌ3 A\D굋b"Ew*0X~Yuio쭴;} 3_1T⣶Ў][/vgb:|ܞp% Ƌk{A\LZ v!euZພEخu䂶 Q@7h0pkO6F5_tnP69,w%zᣢfSc1:+)18LIػŪ dyAhyJƜi&=_RjDG .(]G+:{΋ 3u^!ddLX!H,XP-M +F@F|b7ET=p , zt rP5[m`dM\1wKw8Y~obZ~k5qbk{ZR݇>YSeK$蕰)7kR. ,yR#]rmJ]z&9&}Z9\e!Q^IvgAXL4Se85I \!ϝRo|7>TFQ?l+d^":B$yq< va9I3c^@\2r4#WkJ2Ħ*ax:0I*g;Gd d8Z7`Uxר@6fdGF6J~1=Rr `>FXR Gsvq%OjŢ2Vku[P9V+ֵϏ!R_X"֛cr./Yn9>设!Y׾9E5a?LԭkBѣ%ov|Tx1qO!ԿձjS2!J:A{ PG٥>u %+DG.P8O7F-@8@~v/mA:jAMdJdh2Wr0dta?\a~Af(&\~ 0if`>sНe,<\6 K7o:5䐴!\;v+43S=Xo&~>p44}̷\^A20|>a ft<eWچLˍZOL#ʈ%ˠ(_&فM 㺤`]ш"B 4TJh"q-#kV-/,A <ӮoG1gmo{|\NJ>,̬3G%oBeMZV y#+tLbaHL< ,I׳=%aUL7hUzȸz+yg~l`xVJʐWoSr-;bi>E>;TW.&P =/曭 [Ld$jQ˝}HЬ+>d.SC)zʀo&WKw33Z-HI~G3/z}C 'zmfҘ3gX_ m_N 7n ]NP;zkՂfq'65ZJ}`.߻jU+.rk(DLAAg"=Vԙ5B(mܚrSy  {8@blX4/T蝶 o_vT'i,SI q4ҜVHI?36,bPϛS^ dlv3 tzRfŗN@?c;'8b*6i6T3źS)|Qh^'@JX)+qMr->Oj eol@6Cio<[Dߵ3bPj toDw׍Uҧ8>LqzS'vu}N z!)%O0SRiYbEnVEoSdY.eK|tP$y[ xHAzlg;}92Ųbh7e7zr@ -)8uї?wH,^;=4!K"RdsH(1|t}E'ˑ@u.9ͧ*Vk\ʀũ{R(Jd8OyzYJ g. aan`M:TP%aImW,-||QRAqk -Dm0}֓&h\ ( ]YD^2}kֆ3i2}B26rm'X1OM$!QE ۚ`.,|r_~W]1m#A38ф̻€&{>z.^7uyD[cGY(ǛۮWh%2\B@܏=fsM*#IJ=wZ ;2F&>r &G>׍7 pN=DŽ }Hof HH^I lj[-/jٽP6j$9M؃D =+S+[eP[k={^~EPfR@rV.Y˔-O&ehZk놑I3`sC3+u4c?Kg\SMڬNbzx_&} [N"Uĸ~T:=᲻E%}D;1Is4We "|WpC|:MbjJg5X KJ0(\5bM236íMԦ׳-F 6TDMYбgI0Ct5e|ˊF߅+]i+vۼ*fͩ v)YyD*cLmvU\U~\!fq$g4ٟJ0m'yTL{|H>vז1hh```@fW9'#9TU%vnQ?-8+,c"v%-MN]m!+[FH q'f0q-*}!9c3>IHjj5s|TH!kUAƢi9_0>U[)\\"FU^]JuېQ`!=,Z_\_^f)6k˷-큋ٿ5 jq*d|n|Qx)o>Fi ^/a Po}4dcvlJ=<ZN})OvMӾ^y5bMpoe9.o 8*Q. oaFόv}kYE"KY +p,z[=GFn#F1k=wɖX}ɸA솄{T?rT٥2qކ:<}ϵXNbL=qܔ/n.d uPϹZ{[.Vz%0;Q3gSk?N{>(q!]Fχ̒rH)=t nCʇNKb>^ѽWj{ҩxmz3d#_k!}?{ܮG=Xct L@SA 1ECncz~M?emH3Tp+2Ok6Ep )M 5z yCng;IfIsT,1&Ѡy yӝQ5NMշ7#8ao8햐/Q 0Yz̭~4*AM>E=Vq:K"ȥٶS!?.OmziSMc‡v:0.R%" (;k:ȒE@%Ůw7݈= dg9J-.Marc _j @2씭nX}ʚ-%՞פGs$I!+$JvUʭ\gۓ&y @s"tA2]hZ*y%˦eߎͽ,XH%(A0Ф͍nkb"'< hՀyeJNw98P%u'#|MZ{_kN95L !uvl}ohϿ="Ok(z5 WG\X߅6 t|[*Ċ*vnvz< JRk"Ķe2Q}Ռ(1aF7ě:fB ]:K6yy+SN2?v6|DJ -_faΥG S ևU;=CFV v4݆8[8 K5lE`t55Eȉܸ(D;%jjB#jPIYGss=}j7^8*D3[gZop{ _-f] ^R3 Fn t0du)X9Oq_7ƞE\TSO㣸?퇘T mhّde+Ry Yo2$_?"ۆP>m믮ܩcޔ߁̇[,,Z:jY;[yq~(ō٫J<C&:^ycf3_ѕd+ƣR *z}4@ 7΢QZG<ߗjj/+;!;HuYZ'\ Q/!MGr3򠡧 %~>ӲA[fk&(ڔyjՇZwfXS9X_7HFᣊ 4>(.ek D4}|Z'0>ɞQ[Nx[OL ,s`:u&hpsqx)GyP/lyBt.q]0M,mjM\ }=M(5[XdF r@!Z@-ęlHD: 6di|ءV<Ƚ̚mSKfKF> aE1'@~*dO(JE@ٌ? z;Cb읳'Uxu:"cؽ8<EANo<xRK&g\'ϪeIU#a(LWc`ѶS\ ENa;i:z'p\t\=lW4107@˞Y r.64J쪑R\omX*4?ڑ8mkT໎D0YBdvF}A39^ "mB50m~L^zz{q;S EȏG}kUtwAJT'窜j1p(1B*Mى14aD#.*;`+)FۜC-L굣L{ t{{$|l^ ҭEH:)/܎zgO OJ!+01f6*pqu(*E^;r7M*_-eBc efߐN' ]أg-8ۿ^%vg>qϔ| #:!UOxq >e^}R@QKxknZl.#Y73owY2@RL.oAdP!_D|6sC(Cjy#t*1*{K*$?ۉ}e&s^ ..TaM'ҡUϪjwn/~gO2?8"QC(陧b)BCGF<4JwZhȱ?Ers а9reE-%rbF|Ȝ oVg_.(mR,e()E_'RMX4pAvHhb&ޛ9rV;5ˢCΥӄZڑD_d Nw'hnѥ2{Ɠ.Ij9*?Z9qTT2T:(Jh4l‘pKUഗEY|+nBLv}6#0KML)Fhڅc,jJ(`9|* ]M]HQܾLfA % y]XQP֣`KRϸ*uvD/,%,?g>@t,A|^ d2٭/,$w=/(m-xRe;-r8 *;we|OX}ZR)e0=A>@Äxz) ,fIe@fHo6QfaBqE*NzF_鏨 i^uxAƲurVjca[#evWwפCtFs4U#YMK_ ^b~PxwU8`_钷 kLc &v/:&䏅JϝlR652-L_˕P[rQ5R{W~/ C7B>F0-6&}H|,g= =[MPC62)ZXVy@)9֢%0|ERv:&A$$.zL0o />c[|5gvdJԱXi"Wg{ tZaU? u\h,SGEZ/.Е%e><*E B+GV)ɫCbo 2YbѲwc=[0֏)1 ZZWJ6<ÕkGf8_v /"N~>iW ]#r+.,+Mjw9@L~g6B(WK&\,k ZGY0dZː:2,:)@9>% Uw48p^ @u;0`T1sͤH!`y3ԏtlڵFl]vTlOD:,DD_ɰrA=?w6/K.Χ^Uv?hV1BE,#ow>(Ib,݂/D;UD̪4~XSD2#fxyL06)̥,QzF&q99Cg:0|1ab=[fobq #'m+ӟ(SYKU9ЬlQ|:ae׿k\0,^n;5.L;gA؇@څm2s {6]ۇ*4II \3g= m^ƱT~]\[<֮P~ύX݅Jw2o}K& ڬ"D@^!̛b4ƈ[}f%7s*-9d\rY2k£@Uu8690yїo?v d7 ȱgJV[໷q.&L~ͻI{mkbryD 9m+̲Ȇ @]&h {Zϒ>tCLUԧbE[S| c4 g6$켩TMȿ05S|ReO/n&"w/eZeН?Myꋖ33׆ ؁Icsx/忆'ANS5O:cynx'7S9Sk7a}.hQ:P\[h|o^w9`f#W*#-A׌ne_'Ģi]$\6C'DD#6]?xA_%g^xKn|-{7|O-&{R#-$袛T-B2&<^j35cQjSa\>19f+pnj]]s7,v$Nբ$Q@Olm% GQ,ӡ;0{$-GVj{#%e">BЈƚZw{D& "lΦɿ],MqټЉDP RuLf%! 2\'ƅɵ %+<0i~*xCks 8!b?OӉQy}k"ū3CL(_w:znQK>}@vJSv=.TZ%jN+'gs |cqf B5\K_M<#{1#a TyVqTOdmQ).Z-/ƥ ώڂXa{J*C]\hRE74mҦB 1AMGm0Rɘ=MBW :rwI{A>FkP̗ NgmLdH91tr1$c5u]< W&$6.bZ;b/:-x69Iʁ NU!Qj'xy^EwWMՂș?Rӑ:]78Q}OҕBց%%f`< T7.gAzĨ\B8K  \9SaN@/M5Rͬ OK6fGxVzx'E<%$ >Oػbkޝq|W%P||h&iAksTW4TB7Y oSWeWSiI~s6PWa9}d3)2ȩsaa;U֛ 3~]mg.q$[ȼ;voL͛ C ?r^E6h%Iwy.V+*9R.{=PT:_iJ}&Uȣ.U-fbIǤ#J8Q7oHBºSy,Gg8ο /pxMMeod`m0b8oBi}qƵqoh07.a(дt͊QkheP2uȦr, 5fQմ#cab$%0Zr`c|$~$yO|tf}gRѻZ}KW-2鼴10[/1S{qՏhg= Q=Fs%iskmh Woѐ9Pb$':K(khԉ^j)r-XO[b \6ɾK^ ]hOzo0zf &<&p[Gwq$z! mYF[WM_M0\l,om`<1NʨGB\_ѽvãkPbAecbjɯBަ8#bqKϕP\H3dsI>;q llEDܤCh.N{2+˸[gXAʹW@![L.ǣQ\Uk+6Rlb\e9b[˽JZwP/.o`пBU8H.?89dIG;3Й803o ݾ@<yE{Hzt#4ʞVLث\ңgv|ʍv kkf]-2(C24v fxcrUL{AEUut[a4'7znܔ28ŠF"k]Rv8=F^O) *LWp2PVݪueh QּF4:%;cp'4aoKsnրm78pJe84Uyh;²%ǻS2<6oL}57@*OJy{{g5rZcY2cB fЀ y!R Q^^X+܌ m[؞v4f_E7(A0ChF}23qB7Irt~醧U4;;ѽua#QQ+:2Y Ip&T'A=Oj)4PFjRWWpRU,K5͍Uu:qx@!ä't{s*>g~[}5!t}-a>%bWo,4{CjƲ 7x\jO|Tw_/BQ)<A]#6ssĻUwSq]ީ`gOW{d/`R[+߲"]=g>ͱfl$4%4!9.}#${JGGV7VA$cؑeJW ,ߦ0ʵIg H_'oQ 1WAZRr}&:4*A#,}ct?JeUDj+mT|pFև6) ~@1Ӣ/P.n*-"`/Udp)! @u7)ԂoTu(Ix5~m1L|!T0ՠ غ>pDoV8rlF[tg^C׊vv<R4Ҧ(F3W*&^8XTe w>["=ePiZJ -QI/`mM/!| $ 0_ M-\ֈ K-oB5y6ƸN6[N2V R6Bq`{w=z}pŕiC8Toil"9Hfm*i6Yn&@YN9|nA-4p?I/dG*PM+A!'0A) # :4A>["{8EӢFZPC>-WN:oܻ7TaWDfn3sn iUk2P)^E̕Y[S48CY. Ad<ԿV1'5kzg 6l$C1iŎk'=x-L:겎YwC6j}_!9oA.Xq[llz!Ռeޞ2  en^?R`+҄!mƽ5'wtCwI[h3  6B wFN/ҝc`pНG|4V>.A,~(QJqw1z[*RG(." =ɜ{N۵x4| v5OPm?H3QtܪJH6' r/+'vCgg n<@KcC#H1YPKvb9 U|t7&f];Qk)xMβ *I#a`$ԂZ߮e[J #8by~{ANC;Ulh};_f7.`t"}$ZlǬϓ0! ||VG 7񆴣ܕ5ivsxDXPo6K MExF3S\(@53J*A5V)T@#;CMZ|@ ZoUX7"7%['6z'(Q^O-L?u etl;M0C,X[al`T!DH/"`]<?T<ИfYG]TJHNzX0z9Xa_*q!(6 !1S3E*cT\}?xfθ ;/|#5ήaPƐ9:+KGCaa댍g<é&%PjTujM`zEKj"0Q $z˴Tp~1$3&nSNwk*ʹw/CMOZm<]1~Yn@g.٤yNxjJg/ /fV8 H. BP$IC<Ɲ=ηC\vFJR{DfTh+[H7jD!z䣒Єk -%e*d|ad{YAZ}&T2yEN@m 02г{կ(Rxosby6/TBs2#/^LJX0z_/ΪNʅ}nLKwlc[Vm9J,*-ȹ<{֜ڤu5չ's>:a 1wxdUN2\p6_\ dUiV!sO{,]-2 ¹s%|RrAW0 ff 9~DUL*}Z" SP + lUtk]JypQ%ثO3ˮKbgϭR8g(9) K61Ki JSxlh*Et1:0}G[URb?9+}z~4%j,-425#PϏhӫ-6.ii9=}2b2E 4dBۄ aILeGcZ.5j]1G|{G+ ܓ%݉ū"W:G(ʭ3}^>F .LnĽ:1 U u}\@"ܛO@4tfFh;튅a"J1e|j 2Wf94`пGM_n›sno;zJ#P0u,֣6ƒN.FT0j5#8<`z'-@٧'#K+kn@ 6Mf4emNWgN I<b˓ha$!FR5lB-H tIh` ֻ&燡u*Ct4.pv{n[29PXLwOX~Hxiw^z"u;5@ [;♎L]znfj%7&]$z O)j>,X:Vfuv+Hso1Flo-(Ij8;"&xBQf/_C69X%4O;Wك'ƕZ}qUg 0;Y;˵fh*qNY(h\;ZP&\޼)"svD|(t^B:!N05߂( ,4 (O9YJ\87ܫZ?W^vU*cI#Q٦yJrp=19fy'`=_3dՑZM6D6tXahExz'>EK~k[3ahj57A#/rޙ&Ђ#SSDqdaGDgAM%5tr7`ln ? F yX˒ʦ^b0q65ci%tngL]VD٘X?Υ>sC͵ kz/q ʳ<ᡦ F uQ7$hD;Bn:.vvYg$P1UjfxPC /x1F~Q3,ݩ_ T7p^Ar4с.v0j^ R~?̓tܮlCPcQC TP;Yida 痯L{""+zDulVfd״*baӲ -O5-=<:` '3n\I$' ݫ;y=-` 6F}3 ;l J>j[7YwhZ+-ZUqGڝy7;.7-z~E:Ixvu ; : XaϝkON-e{Q6EޑNe[J2kA"r<2_7}ROE0B=2}!x0@!rצ2k*#RJn,&FM ![;zW<[G9yJǠJPF(Z4c5d {eAᒌ/zRrnz6q: HN[! hnpQ\YrOe87YbX[ oT܀F(C P2k^%=a\bFq)moYRn}ayEazfld6O'V+Tv)S*"^ 8i)/1!"L| B%T0 >wfvq}N,+,ɹDE-|2o0O2j[?*Ei8Xܚy^b8[HZʥ,;LFGzWUa2 fR왉%Vp .Y=Iϐio;fbWqQq}azUx%l79`Y->ö׆"bw[Bw۰WLC3ߐhtKŗ/kE_%hR]΅2d q]Fs!Z(aj3|Cy}1/J({we^Ir̿JtYF( t!Qg,wꙂm1M,Џ-Gs x^WdA[IJ1`QN)S{/pӸLaT" Ǘbmcrq{BO5`c D E=,5?XMFh m 4F+,h`&l}eDFʓ1AH5Ob^4DF>130>$sZW0Mb!YLRr'z[Y8GQ&@fb.Pվ1w\yeTؽvzs$.t_7}=&VUUF g(\ˑ>mgO讞{h_y\ac--u;Z`_iJm!bl6jJZ>9j-t漍3Ԡ(b2s N %C<\א)i={h0tJ?cH)iss),6)-V[ѹ Aryr^i8Qs_е\RUG68CZ|NJJo5soTU?3[+soI'] TsȑfB2U"oZ$xcZRN_ W>p7M@cH1r/9~ Ҽ<|n'H؈tPɴw~aΒeKA=Գʢ\"S(pdAlK mtA!s˜G|ߡ &Jd,n4hq >p^{+oa&?p±Yω|\ﴰ+c.@؜ tU|&2,Z "-f/hWaQ jŘ>McM#K(Rd6^GNIb7[Ws4}WGO4q W9?_7.,xaKnD؃17pac6zO(";+@ 1i#CU%1x"W\lik2)U =XÚ&rmyzc2">'+e\F$"lupβѺgSdi_}W1L*OԉۀsmeuO(JE }ޫJsA[rO]N7_E}T(-?{0B2tucO{ s}0 EO0SjGfa-.c{F,yu@]Z7,v7X"=KRâA7v4һ5ac+a27;؁,7"k&*̣m zxK>ܼ*u7D1۠9Ml@5 pV?VO;2tKH{X|XIfgE">PG܁NֺxP;CwIFBf;š>HZ5RuMz+ L2.鍸0ؖQѿҢXߨM}׈tn@;NoH?uҶ;BRgi'5{uoػ]clNVC @r`J2ۑ!*gevH[wBjd$@~ž>mFXhX%3F/IJ'8T hL$ MD2&[< b*VC.>JAiPgh;gBf 0󺦉]Cu`1$7cךp=Bܿo2w3/.WM F7`#n+pjl! W6/< /y vt1)*ƒi[T`#+{|YtI"-oFFRi\eQ-I_M#)4zKxNErVܚC(fo8o[.% μй(1p"@y=@y5 X 50ӇF1jW\_W%? ӏ9@1]'F$u#=@ !QD8p{̆1xy[C:P#0'C.C{̜ZdbxBdFA"#l#6'Xi4RTw@f"&n.v;n6Lj,b<=J$AEƯA|↪S[LAp!LWxjZ%lj t~.8Zma/^$!neKg5Ʌ$}$"W%ߕ89`MN=$Xѵ-Б/0o Mi(< s0 mۡaUm7И.VoqMSZI~0 aUo@G*"5&Y #3^1AptF/4ղ+Ԃ0/ߒ`RU1Tq-t\zB¡],zIpc( A0g91ļ[6V%=5旣`TO(IIYFY懂@>(_!{j0:#yK'? فhO=9B}m d+Dӕy drPel)rWG/t35²;KNɧx 4a>6,f=w16GS4I?8"O/q0 )c4o߳{BDm5^g +r\`u無}AĦlXО+uƸ^G 1 ;%T[Q"i-MsTqAkqnN#dli 2 ;G 6ibc2G9NJ2LpOF\ VNj`pf쪍<@U%ޞ*ÆQ;=aFNJ๤l83 ~@#[CSBuƽfA]7̽F1'r!O'٘Ò|1Qo5x:j,v83?3Ls.l`-(($4_.o.d&fxqƔ|BY3X$*,hjX)& =':gBȋt=Mas_qY"sW@~#m] z@"@~W.L@㦸;Wax,h\HqßCj̊M6n Y]wqXj*OT聜b=+f)QήIt#KՁ„82^q[HM; u1Cə^C9K02_RzoYX%Hq*IXwV(ӛc>`l\WM7oBMh9u Ϳɝ4WM2ꜗ]BU__y;} Vsvs%?&,8L5Gk _$mq&\t%\XK˫gffcS07 $x=u$TSymF}=!<' Stn_5w|TmAg Hi,.z9> U9,PVpO(HHrrƂ]R$x[?0WfjqTB|/ =dއ}tj7Z "ǸHWVR Ntދ28!Kh5TPq{;rI^-K,pɫ񰦚b?Ek~BJ\$lO_fp:泩 ĝwj Ezª(+9 ,17O}>^6-0@Er}({hDO0I2~ՂlEN&穔gg>"T y4CFʤ_2"*_BS1 V؈yvd$}F 4 hTcZʮ Ca Qmg(_Z5x@.Uޗ0j Buz ;-!b|CYv3?Bi#Xigq x,?`K_.ZB5r(xVDA.Dm conkam%~zVR$Tu.ߒ@ Zj"^J|"Ũb~>+Tol,/?oω2Kɂƥ\pE~6Z**O; ĸ@V &VZs5|c0i+^w'~ޏh(voml@} ?5RNWrwvZjfecbҔDJO}ޑZKiD2ΰArHtbO_;iE=YP%6z%Ɖ܌Yo5WH?k\rD+D2[7;BuW#Ѧ}̞hVF5Q6p6t(^pJΙ2$D:_!*; p \QYЗ]upeUTv\ zvxԃ9&RLzz҇ `w(#n"/A>l:AH0Ȥ6j}JL/HMVOH28%Gm%U-6_\d*zMI3HZ}|ܯM" Ј9|'8OhG7Sjо2CR!-}|JqϘ4mLعWڛsy0/ }4# V Y<1U8%p=m>ǫ<x@'LG7NP6=E.rH:X)LMY#5#Rlvw+Qk^(]{ )I;yΥŞaGgv~fDOCzД0]MGUˏ z2z%M3#@(LFy2 4NW5E#<㽬 *YuxmǏqn:ћ/lrQ6I:| aإ=#A8Bt$qv`ED|4Ra0b[d` QBj5Me[ABLW&w= $[lrSiCUʅ뗩 T~X„.j펪 OsĤx͊eqAlgٔ:  Q[rږhfbK.53?t adR_ld<\AIۺ ؒ;gզz?&A`!PT_|B8 =YS9h/1$K#moOϝR}I93k~ GNLpb85 ]0m<6מ,}g8ovHxa`]H~ Ц^ϭ8)G+dAUt9`D0?b;\gwk5)E0)GYHl,g Rl7_dFksax]x -}=i,-uNڍ@ VZ.6t%;A{MqT,;fٺ Y}k?vgXT"SOriLmr61J<22- <aQD&HwWҧ؛-33tD҃7|6 ZNxEZV*.ΉZ1 4%|,8V\+dܚi$O'5)0h~~* tos/L^+X%ٟ3vNf}("DrcQC_~5*E?b@`>أ5 ځ[)G8A8'$ [;E:~r%9湪Ddlh!frW^ɗB{G^r\%A {~b%lݩyE7aS?P,RMTymʄnMPLq\ Z᣿_stu<2ƉaǮ:/UIkl?~˕"+]t4YeF"E":[50 CR&[݋pM_^65K7*jj) EL(֬q-*P&boxN'rާ4KR*D3LYs%/ NŎ@.z*dm"Y_|`Te'S]|%Vs t ťBW~I GK!5 =ZqщD*ˬ/?3l1㝾;wc7cnT[H_&@iU~8hG ڨGiY(1$g"]䤧lWS@?qA$6Y2Ӹ^l\ᰐ(I wn Q5bק>$CB!Oh"Uw&x TuN9|?W +ћ [| &{կSX]0L;^(YG?U$ c\FrLYL_ i`AVۂ6̢ 7,MhBR|{$~p; 3f RbSa:|G҄v9E`!qbӧwFeƉ/9e}\$+eۉ1DٝKB_A k]Ьݸv+:03mXǙ6ϓya6,cb&\+,3I Tc md:,#ZlKrݎ"jQOjv9ZiYpkXiOٟ+1 fG2. Iܐ1NG^ Mߩ:mXm!]SuDSqz u,Hn.^&_5JTa+Z0,okMQu. 8Wg!'(ݨ SwwN*mvKvq0@QRuMOoJהwyL^Dslcӕmg3 gHXa/$N v@z)Li'w 3\Fpm68*^i}lʲYS^Jx` VtMY)I)[=NnlR2fN#}?jVTCΚBKcy`V*R%ufh!`P C U76( ^CHpb‹ CbvX1Poy .9t?%./;yC%8 -4$)܅_x/ř[1 y|X6jV]{o<#nJwJ1`t1)G sJNy{"%ոjҌ"=t?.8Qu!=F7IY(OJn 4x%Nl\5?`n_RIZ.ѡPCdޠKgrii5 { bRM3OQaLC?OIދ;uӽ W1)* ~V ݅I-/IǥFW.qyInV@R ,~p:Mȴ_"֦21n6E((XH(V ohR/Ғίl‘UV̹TmvFAK1|B* ^?CݧWw9:ں|[)la}sL[טư%Q`\*Hb%' /7Vx NH@nmNB s+=?@c2 z)*-fŔeb,2ˑuؔ΃xHODǾ!P^(T7;53@^>K-$(}9k4~|gǯOgC 7EGѧm.SP,a"h!VH>W9Ԣsqٔ)zVsSAd=G4wb$Jd* n{jKQ8.6#i[Z ~H"De_ҏ!H"Rڪbmt1P]sRW]'cՕͫ{pO%.`2ՌL! ]}G (C@; |~+cU>\gfR& xӆoJօCGZի80[e3Ui/d[ E ~τD\`Fbw,:]`В#LԱX]'` )d4Qsi=*H^YE5ָ_.{Cj{|#CO)v>_ +Ǽ߸ ܺҶ\KHWZEme5RοˌwR  ekpQ"B"!G HMSӬ9x81,bozFTKKq |1ssZU}  }BA rFvgXKP44@zb2mmmVS8Z; AQD4[t/jԆXpYDxC-:BQkMS*n"2oAwI<spjH<ߩdվ|}ei]^@r#9]LfDz׫clt"8{=Ԏm!/&n|g㿶gCIyIv}}rZyxϬ x-:dreL1n|w 2L iulm*K|zڱ 4X,h# DlVyyu᭯àKZ`%pLڅW~/IPh3e;zaq?ID1M6J9iR]gAy\G$#b,# ʡuZ1QH%BdJ9rxi'f/2Oqae=B]TʾeP xu#}gsMsrxq H.kZ%@ք-b}`nZ#'z(CZ8$=zYmÓ.PQ ̐AKO̎VC% oqҦ襣jyM^ljMϗC2oKBZQurn U=~D"њ[Yb{cN J*rȠn.v, F!u!yКDh49P>U `7E-FˋR "Z\PϺPl 0wFc xX:@&mmCey纛?e/ouuyM$2R})LyӶPOK .¢s}+ˇv&#YKRg\EB-xNF ز0_9+32C?3DEH1Kآ÷R9j,t Z+T|慨wΣ/¢݁sTfvw5F|NӈL:pa/ G XE*HRU*yW`Uw!(yJEfcHǚ!9ߩ~vUbF9Kn O5]&n{"Fl2l'6`l>0i} íGG |Ԓ!DZl˴;U”! yz<V8c),&91}'T CVUr+$~vlb}2t"H1qaVM#^r@aꞐ7ͮIoT2 eL/U?0]^Tή9+ODAclGl$4b6=`'d`IDz?Aـ)NkZ qM<{\ ƱNBrcq\dY͏ T0-*].&5 XlND,!6'XVQ.+az)OЀ;W4J_-y;B5K?nvgf%t:!Kqn@6HQ\MJ^1b8YHG[~|{_QĞMA⸈.\u{iiN'[RdžN!J6{p;>yIݾK1G,Ux*h<<<@EXKB ֢*_$);q+=';,GAu2DC?&ɭӽDtT̅XY`_n @Ka8';vZY +2ZD4z.k!FOE&\嘋jIœ|s @QrZ:|r'( L@:bl89f). S WPۿ(i%maWOUHjԹ`f8SW6YDQ]u8}/:ŨZL1=J_bswxY{,s0>z9H۟mq8l|ҋ1nW8\߰9&/ħ$!nma7YvI{tf>ǭϋ/~$E27jMDqC(, (KbG&k;쓦l[!O=lrc^ ُz^Դy y*[E9|A/*ѷM{EvT4o5ADh`4ӍQcH34a*+p\eFҽ#3Y}зoXN&P^KD1ٮ) 잏sE`ݼTޜs72O7tvU% (#DC$AɚZrƼ-=w4iGR44ZoL۔ Լ_tovl^У)^GH!6ma'X}K]@j\>HBH@&+@tA N< yBٍXKW\6 Upd2`vQL!Z%&!ZEM`HGՐBf`v&a ]$-&(bX's䛃=0mJ`z[ufq ż ?hp5ysZCWՓZOk//9B#KGޅ8 Op$tkr1g.86V1t33j'VV  ڦv.Plf=t&Y4~3li6H)# 9,&x NkTņۧZY,ɳ(-` &u14%^7ȉXr Ǽ(2G"7@H^o/ VqMF$*,qP=ب&P{/*JVA vZ$NȁJ6tz]߄a d4yN=pCi݉l+[{giߣygxX%Hł8f<@ˊ{?<$D!hIYO@JCVL63To M  v„@|;_^!ecl vo<:Hq]T -,\"^c:N/ dl$f5-A-Kt%%hH߄߬Zy i 4CpU "ѕhQRuRn MP$Kz3K!ŒbVmd`m:ٛSojz\~w7M ͥ9Ur?Y&) 4³0~1ِ3AKӝs5,.ֱ4P}+.t=1P#y#+ڧ/)Z}Y*K/Fn"3X9#D[OZHoVgS5sF3k52g??,:Vv)<+jOc'+ZI+LXVuk5)[x?RY5Ό9Fn_01MG*DR [¯GVG8׸wYmEԠ[7Peo(,mv%ZTer,QX5 petI4䃃w~!?Ҋ!s:)8hّJl10x2_V1PB?ܽc0/ K8l>*"fj )R1df(0{Iq3ܸGwby=儥:S["ރςӠd+hkKzmByAMgI9 ֌qgS.OG:NT˜cM$'tA5+L̿&pBjTR~ʇz F3:ƻƪpBsV*qUss5z=LWCl7%S2I>ܜxf)GX#`fڀ.ceX3k^~b80ө([z+\~]8b:,F% =]eoBD弋R6uu=6W T(5;R"^zl*pIyL~p=[(v{9"GHd֘A'(U/(Q.ĻuP'xi7B;3#uv/BeHCS(hx!֖qUJlة b1nVCcGqS,+*'kٵM険 aL{ɨy(Ulۼ sYsI=^~kJ0FBGN" yې`gk-Tz0V!_}aerZׇUh2a" {W-|CNc0Vq I%+"}k U ;f@]ȎmgM%:OFOr"°2IJҧmo#,kc(EEYz}f>@KCoL^$xkaueuA-To@%eZ)p^E ډo9935,T{av[Z}[Tk~f6a\0Xmph1bM%o&yM%Y{$d#r(7 Po _`H*+o)ԅ+[ F\ =J!kr1K"킾䮫D7ȳjI)Ф: MxILv.`[sUTets_,ouXG](^h6hс-QX-SV5Cld#U^䐚X|ycmhtw⹏?wW/'79dL?Cߐu4{erA !iT*t(W?B[wrFw-7 <חc^~޼Ep)ghܨ3zܢ谏ݛ~Y* نK f.üOExAy]"vw7W\f8F\stܿg+QȰͻ"F7#hU{碥X 5pLٚ6guAa,Dv??ja]ђcmCH :X+N<h! 7TÞ/ 1%[6s&DatK0ɨJzk>y% oU•( H^au,%u=\mM{9oشkWn314Th*Qrڤ`VFqYѵ!sC- &Xۣm? zJh`'_~ݠVј! ޾jZC9jȃPnYpBs=Rsrw#鞌{K5nyV79eع,0#abT:|<\GigGhR{m1-E%VԯP|$~'+RhͶߌc[G#}#Q>5m"Qwej/CQ < dX#6/ N MBW麊BWQr ǒ0]mM %s:-'\)QjjI\0>t5^1[+LyJ zuday/Y=Q?:X&RTϑ,M,w/n:X}a7K2Z;erVYNw30U!V2pU^%n Qdo;R ;ZKPcO9/e:d4ĭ`J0Fn' LӺTQ^ ۄ8x)\?COpwE[f,U ZiFxqG%8%Fk9lpbO(P3(3 7a=)V%$(؇W߄1+fO񉄾$9C`\4!',cnzS"qKR BI\ ,g 釹T#" gF{KjŚ9dc"A;p4LX%<iPz|yTa["+:El[ZBc\VK<ΡאB+D־59`P3bDg{s{xvjko+4½J`bs)KJe`Nb5e3s1a& Xc4Gzon$^oL-V62r*~ ]xqʏB!`}p&2 ~Kh+-!E][EnAwR՛RF~L( )(ѣ0nPlٕ 2"QS\cTt*=[nUi}F=*֝VDj:=W^3Ֆf h8D~D* >9sI+FR[&Œ"#Xi;aݗйkvS]Wi`7جjEGj)qڴUs+R+s͒@gRlYį1FAf2[pjdujU?"K % J+[h5kxɴVQmr[uZQY.P "*cM9}k^1T^JBu5Ҏ!Y6Y jfΑZ#pr݇.Q[z5*8Hl_G5 ~>/'&0a{9-2G5YŕVit"+#o/`APLyOkihᓓ"6j,R!BTTPޛd&@XgaBn36Iϔ.%-6#bVW*sEYiK\5'% E؇ՎJ),%$^RAl] +jY6I,VvZCqڮ!=ֽ,FjigϺU[5u="}u}7}s&P̒mԿ~z;0eq,㌃\)e}6>K7Ꝋ|˧DbdÓ߼m@A/@[Gu8C+Iyn=]/ww{N⺊x(0,F"),Hsf(M Bal~DQY8kְ c&)Qt4Y e썔սQd\E6v]?|S"55É %!cBQ eغ4zfAzO68xfc kє ,aȂL/B|olWFS2k9䰘͵ɟn!&iFd< n=}}Bςn;3xb7BmxTкswS꣩l)n(5!_˚Hyʗ9 % 1Jtj'hx|Mq|YpL9XJ8LҮ`}ٛbMh5i|Pnp|,D Co*~?Ϗv4KFv =$)|k(Q#OerU((|8#kelR:!ޣ=V5Y`8N zpΝaTd8.=]m8/gᡊUd!40 {pڬ ^S"٠詰Zp{Wٍ; +жMA$&;ZRy5+)LbǑHsQGDFH,}_[+S>?AcMʵC&Ipm W4AXRR=QtgP]4LJ44$EDNc'^요S;@ch)[;<sl6Om4bў?: ;r}jw[;iۭ=s+',*R 5P]t'Ǿ/"IcUiTykԲRhui^4CglD*QÝ;ᰔԯQ5NZH:@]Д>s󠯈u‡b&wHPg.NHɋ1V崢$Ss'R |jษ 蝨xI;s1pQ6D3I2RKv& ;TC-4!~eU"m "__3$C;دβC4E'm*/)|YjA_ER(K\L2kl_A/V <3P1"~R86 N ׳R+p>mr#q}N\=jG輐SYj<{"S xFAv͈Ob> gZ/\F_p4b'wAT \VvZg-1 BCƋ wQ^%>\+_1LnK㬰j]!ctdT# jPeg;W.)RZj H"PojOm^/f/4ΓJZq"U͏44r/ZE{x'g& 4.z)|ه"\~X FdBza-01d7Ĵ7fBǞYLfQwoMicɼ; ={r5ц{MQJbO Z e-Npѹys~&Ҽ2^+-˿VS Χdvܓ:E488seAd:(F"e?=d6PLLic09ı jP ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cOQ2R \ PXX`XX`XX`XXXPPXdKakadu-v5.2.1 P ;BM ⯨a_"hW_¹X"g5hwP4VG2Z\>xv1213ӛ/ˆNЪaG3e;k;@n3ےO^:F?;6`pf[i+JNeNV$sҫ" SIK#IG`[fVkЗIӼ/꽪H?bwM*F1jཨZC :cpl3O<Wa6+(RǕw GZv5/l:!OrЯENHٔ,/tב]]1a>=t/LV3ךT@Dl,[&0,f/ȵ;A60 ތӷ;ۂ^a7:*fCiW*+jb=͐pw jhC)@p/? ,/6sOϘW[GZ`Y}E;q [Ӌ!%h~Qۯ{h0]H-]X ֦\GM=&$Q Dx6t"} NZP^=#%Ijw7 Fhk&4TQ\yP=4 P(诳lg0UYf屰 H +rcvǪwK^,IS5׆ '5ôaYMn#԰vOAUZH=4m>Q_O|lᐺL$OD9Xg&G7*@Mrʞݻ+ Yj-&yCEhȳj2&7|T@HI3 M?h>ژcZa `*9\vǁNJ<̌ hFN^ECC3ir#w1~gD.)Tu,ci߂]#ʙc| ce!WCiBԝ?B` AyXꍐZf<(S3W\sy.Oɫ(:7,k=[*=E^Pk,i,-Oo:=MٔMΗk~HLi{zO"<Ү&غCh. 0"ӑzUGs Ԉ^۷;NY(BCGA x&I~PB̻HUUtdAjqoLS &l= eܧt6&WdXIB_H3mvag5sSC,na%0S/:e;!P5`C!X ZM}jاYvF[kѷI.tosاY/k_|0%ư̪.|}ǝ82#]S手N&n6LRŃ8|Q1וCLkb)ďaFSo[`d)]52ڗZSDS$e'286rl&HDpU 3"^¸z}…0lZbc `HggIxoU&ɕUCȵWoţmgK{鰹* ԑ"XpeoGkuEM?I tK't4u[*{-lϓ5Czm`JIׂ^I@ww4ڂ4@aل 01Vca^87竲n\X,}[6 ֩hL1T(+H3\@".g,ɈhMީ"hƇ身Ӏ"/i=XWN,7W':nA@H GɝWb~hQ\+jO 3̗~Ait Ax#.)&z(t.\N0SWyUʰ(&;~& #9(t@fwAKndau@pohDDFR^ V@+YztOz :HIG@ބ*6_Eo0Cm'ܟF<{!p;gf[M&Q-$Jo# Ѷv ?~(wl +R_K'%VS)~>}+ w'!^`}ۛK1`J*E uvZm~G5K r_fIfUb֨<݁L SN(eKLլVn[m 9`Qt@{f~n ?>[t \迲hpn( 2L=GsJM=I,Jf{"#>;>zc ?78~`R9KW a*1;`eܟ_;]f(bi u{=.%{zHgG`?e%2ܣցJ*`Kpj[`Ql9e#|X"*XLwUάUZG}dTŨb6G,77RIDLzO9os[W̬}Xf"N_Vt Z82ψENF}Y.@[u;ٝS >Ǵ}O5X۵ ]wFcV L`UPIPR~u{ ]6}ۼ |R3^IVQGV$XZiQ3K[|U8)_A/0+܂Fb {|V S˜^27(qWE?K #ܹvJЪ(D'FQ׼P5jc:{yKƇ*%:>-0ʶirx3OŸWJcݦTSbQi Yď)<*pP8脫3BcV1S2[rb|[t[\?>b\ 1a^Q&xd<r w:>#;Ka04I7x踕~Wuve/gJN'Ӄ>svޑP=q& b_+ܪ(N*!} mqClVe2v'x+1[ FPs y",Rz=<M hk"e#Up1B6ȷ~[N9j?CN&Ɖ-nÖ́\r/1'["%NH/aE$^ez죁QjisE;HF]lhj%)lq"Tnu[`vqow04 GruWPɩ΂3&W2p h#iz@ĭE%Ԙ/F!'Sg Foz7/c%+{IS:rGibmSݩu)!5pO@$h! Iv; HV8830XJ["'MRW7=-q,ﯨ'2>|evp\\gVK%S&xy.SbۓKZ/8piU uL UU-nhEO,ʻR_15H,.@m/>n)Rэ&D‹z>Y .$!`o+ !3a6>v.o,Uk!pYPx홃* QiYKpZ.$^/@^=E.fPn;3&Qj?QpIFeQ*yBĩ;U@<]vlh஗qc' HROܯUzq??r)QsKH AOzM>QSݛ,#-KL^Qg)NSuw$) ^c\q<)P*6IB"V[m@N:?Ͷ*%a\ ֶ9g}4-,න 73.zĦ Z6js`AP݀ ][c 0:˓Y.p\IhGfR3QCwlGɩP;"b4D0Ty~G9 : ÌL#/?G2dxt7(,#[QDdLؕ~yk#^ F E-[v-TiΓF%º01JWLqzYb$M ξ1mkTw`x jԢd:A I l kqS[͎ Si~; <}BRٖleS09~8m2}+%q;] ÓkY2*U%)V2nCI0x0<0st*-\q8D'8g)lY:RN+I@jՠ *P d@?@.i}%b`tp;MVv aGcʾLqY$B|â_6w(ywX+oWA+˩2&:'px. {-̗T8D "{̠ /!KFo/|aa_};enC2g{4I.) BGVwh!JUbvoD_ q[7QY>F\) eI83p{! MJ1?5_‚-\^̓ y$qwkLЛ%5(Q?&`ʨ߆PJc.P?5M?gN~*~7.4SyYM{\NwUU@$Q3+rY,*9״k6nGi#;Y4m*%&Y>NBG -;%bPR"fˑ g[>Gۍ^Q>=lxbiF4:RdĂxU&ٳ'.cbcag\x]]UӶ9G.6e2*wl(t+~^~K.> mZ(s! %! :0'{C%RЧOc皇l>N)=I>71ެˇՏ%.L9kbnRZ1| d7/{ʫ?@F=ɣ+P,l>QH!́6OX\]e8;P4@ОΐG*săXmYDtQ.+[;qxP_ނU?x 7IПUŌ}/Nr G0Rht`ξDHvH1\aX…1~X%5Z˸E1 !,]w`I@$b&܇QYz@uDܙ<ϵuS:IaGue ad5k5sN5aN&eiz՞Z ybTW5F?-4wD-!y1oJ}#Nhz@tnO*``̘_FVWKh/x%PBm5W;A?bzE0 'PZPq#~o3QXCT^֭:F-gAZ$m\y eZRTz)V \Tګ1L_q/QU/ވHܓ4FzJ\ڑ'u rPLs j{6Gimg$v]2B"yT_eu=_Eo/ &Q?z]GOa+nnj/bVSBx^i/YkKHA@&s1d1|Wjr;jIBm#Յdb6,VYugwd\ rBaqkL{ " _N=ۤ%ut[{c95(w,v,8[%=㌺k-I&!r*9iA;u+!nh^c#p #@[ʃJ:( d]ǛRg^>ѢI}-nFᩮ5,M_JA-a-l0ń2}*G'e_։P 3!0i+Bxץs:Ot S p#/o~GLMtPl&s!G}I/:sU^P.+c5 NcvC{f=DFmBRDerkj~}ԏ т+ތ+rSnMSN{잊ۧ<|iȀ2@Nq,FiJYf*3J;9C\86將-oƎzVX̂6^VMN# ?PBj?ŏg3%8hnd&@ѧ f-͍ bC%OS㥐dH l}JX;csf<JE~Ǹ"n NBmSjiU(M2Pb#Ǚ9`  M5u"톻Î 7iG4PJ~|oF#gdج65:4{PTHFJ5QEª S3a"O|'7`y Y}\Xs(a !Hmπ_)mw!U*_[W(8 Xi*ӵ,~l KwlO, G i~g+)F0eƍΩxĺxk' F>̌ B4j/I$~Mk,/?Y׵C *L灖kxZjNr43sGTEPF lc-T&bj,\p2ӏ=¸V "V'k7^ߤI{q:mn\,u.[XR[9֔N.׎RbEmdBF氄IBiG A3 c2 ^I4X8:TDZ4^WӨfG͍ ~7~fgv )!=([R[&T {+/yg`a-t$Mѱ")>ږW}^=3= "~_FW% ۽֋KI>B\ixn@֏d>͏6\(4D3fDfwV['p˰ ^]l_gm=b9o,I6.c8w#MQ:GFvd_nA#]^IE*uiHwG݇CRsݕxޕK7-a) PnEOD xM] 03ý};*@53_s6þ7畚F?6'9V()ކI@ӳ\~2:aL}̽Ƕ^Zo=3.=ˬj`;ի`[ܣ4DHIFFPkP#:CaY/\1 ^2:0+d.^(KE&[NuK(ǫFſ AHŵYh<ď.:uSHp>13 QԄ4K3;\#1Y_l@A'dboCq VHeš-NG0!: WՅop } |7W&`w9D\Rrc 1 zI…0O;[hi:5-9㩍s͎nŨZCvۇM6CgSk..ix8u-?x0a= a-Cgȋ t\->1JVDQl keR,`6}SMٹQIf*> ӏ",#d1O 1TT ,CݵIsT 2w-mC[zpBbXVLCu?_SQ`}t2LSH04`O}%>:RS%4ڜрkio R^`:B 2SV1}Jx܎otEg;aB tɀ5TJW!F#[WX>oXKh2Q4+jIF0a##]DB<<4=J[fOŷ ˾D KBZ7_5N\ 9lIS_yXl&K$JۡVW%ӔM/(ud$iDp.R9_~~m13nUBnvdLBu"g?A\uj@Qd=pJUc"H؁pܾ5@&RIܾ![pp1gIE ]}Eu`l2T4݋J{-˪Z8rCt8J"36cCup!)2>x\&GEx4}-¯s [hZZ%J!Gr,(fζo*[rBJq7LBз MC5< cI$y7}C np6c/xk N?5p Tg .e B#}^a>kS9WcȖ5\ov}@в4'µx5yVQ;weQuI|h@8i!+ ^Ysxy׫E>",䓅eaYdֺè|*ќ۸ ޾y&78CCpot,VՋyLC ;ϝ9-a-m&3R!YNYh>]wU#.uUNpQ(ȺlP5tў_6X=gھ8Km>v¿Gn׮Gf1 LzJA//񳃩Wɺaɼ!o`2 ]fx)zS}:ƳRD41;R.؄%jd櫜OgdPӍTH\n7\[(X-Ƚup/"{SB2w~l+8Olnλ|Lnx6!u>3! %f(nGYZݐsI%18:'x8.ܼaMK޻s4FRwd[9qE|A ٨x ݌@%b7mGdp:VRq#<_D?I-WP$}bBԑՌRx%Zy}1IxsM)v͵^ /hM r;{9G?{(|:p}9 bf;r_cNԍGU&n( H^ǎ!֑/jlAq]fv}KG%c5C8M37y;ώF]*J/<+,Ă鐹Ҥ.xudl1U]z`0,y$>ДQO&GUs^m`?h#a:CkbM7/nٌO2!dеv@qkzc?R\yj]ގ7 Y f݇DZ1.ianfn.rYOd7w{ FT&΢LPE@B jFWY׊O pݗ'p~mxY}YOLx'`єtw7 e2b|az#v^; }#is>5YЇ Ri)S^['ѝBk:"^\ fGNӏg2_gjV;._!]*﫵yTȥ 4{9ˣ$C<}F =/Aj(na%w)# )YLE7_+RR ]}vM щl]]7g ;0nov_rW~ )&,pf\W8jvy,:"k4 <5s%Q& ]ݜ|H$w?./w| rT]8mu RkjtԽh}@WV=-o)S8لQfZD[=|El~ۛoW1⒱-f7V؉,3%S[{7~›{^ruQfǏ`1i=;]_W&KLo?u|ѺDXWDp֌UIXfJngf aޭy#h7àr{%aig匄R6FHYŞ{PpdlH Kc/d..Е0u lE+%Qtc 4 ^AI'fDKY@(Ϝtt̥M 6Ol~$I T%O` y/JȟYƅ<޻-n?Iʳ2b\+ |7u! [T۟jIҴ'>Snv 9Ql]|cvDЭ?GRlI(P6zdDzKp%g*3_%^K;k@a{i Ff^#%@??I(Zp~"ѻ{|{Gc<ޣ(< Gr|y'7S{Qp_ˉᰥ 8%!tFe<82YVSk%㻽Qc9Iܵzu]!=h!L>Þnݬ ltqwh & BP/9)?vfn9߆,*~ DxS0_^We87>"޽C]_D-O6(;Wv5//b.Ω}Rs% -DXXj(wIFS Ҿt=?uܪ2 166*+FSƲGKgMEd,D ħلcIyFH'q{Pַ?`z0_#tUh-}XO'bkfzE-;1#🐎:9ĊM;#D` G(s0Uv_(Jػ`׾iK6^#ڀ&\GL#c`1'1Cj}'>f;tIuvhWH,EfpKG\ gyfOcS h¾d4I\hOze7aw?%DBUP,FG![OїYCe!(#Yx rSSp޺Y173]=@_!Q? '$p f>9+v0[$ReNlGrwU+H$󖠮#rtA@Nkf#ފXdQ]~uxz?fx{Wh‰v%XOQ'\4dS,1Luq;-fMxPE_FS'+&)~6Zk!p E pp*dOw$ S*'NdOֽ^K \p!eiFT9PeL 'zVޒ 3':(k祈߯gJJ)xRQ#͢jE⇂gAnXNmޢn`_g!p3y7so=L1=2#H38_{چ0Һ>s}ѴmVèDK5? oq]d8¸t:j B 6s&ЋHC u]f[ԤR؋y|P![&(>l',US{I1T}k%Rl0-܌xOuuU7 \Z.U* kh=VI=O)*r82zBca4ڹm|6~ Evd+e ᅩuWrOuU=VV^˔"RrxA T۩SO}0lԷl(|.dõu_Q6942B<}ֹ ԉ(fx8biQrԞґPZURo+1,0 mJ!kQ`v")+ْjE#{0^jifѭ@kq]k-SyxŽ{0=-ic2> `cSkVjHJG07Ma8F5) !z( h %xÜp+< eyZ @޺_B;95` gcd&PWilu7c!) !qgr}dt ys.nl~x =xuI=ɀN8 h $z=@9->\ey)HӓԆxP{: >E%$FL!H-Yn9P#=jo[` KnxXI*8j9ވT9U]6'%FC'P/0NɉQbB]b^nߖvQ &7]VA& ~eʤ{3ζ5B{EBO~~3:ڐ +w3N1 \GȖc{4x7-z?i t=֒rr W"6aaCYQPҽw@IfCHkH DOب5Y`3 p47vC@[V9kx[0Tb]1PP. lvi4bL{IiG9a"5P<:)OHR&]v3a$6v1XTBяNgC (9H`lcET8wx6\XeT5!Fqla8(>̓Vzm>X%CEp w#աgcu$6 Z4jg_.<={ƪjt(G\.C(/7#c `>,*@M>솰SUteP`G;7QmCГonl&~!KaFzweVLfKk2mɩkaR:YH]M)[ƍ<<Xڅ9QY*_&|--37Pmf_݂9^wy~4,.0kn0зagMM W8JʁyQz@'s93vef(g?KE#vDs'Z%Ԯq C5(Mh7mS,4\q?\8hu6-3p#oEe3X.۵4r.)gz5#'dTÏ hGY2F9J 龐jn8E薚1{YRqQBɵD ADV1j -K/ 'd'en9P6w^$Ce~,݇ExCELS)2wt/PbLmak1!qpju 2nKOk8 0$H5[|2"8 1`s4,А"a\ 8~^YgjfHܪZf)FaQkY鴎ͩ >OW7cqs',s '@02;:+횒\q:3Γؿ@ ɸ.!4x[ =+i74:GrmqfO$% %OW5grpxR>"&6}\/!%3ǀzpwMmlp]N, eL}kk^ CUY ol6Ȧ~'##Nz;]myT-edc/ymCTF7gB%3= ojLz@?/(yX'OBU? mbL3x~hKJ U] z#TG9J320h-CՍC1Gv /@=vdX#׵ iݘ4aOz|ȣCId0Ga+}hY`0 i%ծ'\\BoA(':ͺ1ͺ/m(MK_E!ѦB8);% 7V65-H4LxNLBi39^9i %vI(X^"04r <YV@Yw-jɘz\[apk< ~no؋ &6T5X6GT_3Ɲ\\U)UwpH -=Zk! q< , #H #Goq6ՁFМR(~!A`qv :1ܕSaS]TN[(oRA~s1級Q~[<.V8O#Hna)a#X{ ímlĮT E+$CEȸOOas uijJ2!nj 1 dȏFrqwPҮ"Z2Go&\RiD/ 1i8;bF/>Fh{ `+ e[md@`siTߵ协OsBkky>SIAg+c8γ4.u+_ر\#1¨yJYs%jXyE ^K6 cľ#EO%X=ҡc10U-*BSHL?4֫YMoÞ ڝ{s#PpЂKnAン_$On46Dyt1kq X-e?ngZU&S{ThnlW!ƾՑq@pufl8aW$RrΎSRNR(y/gg:߸Eʎ"h4rFzM}w*V+>xSX!~|$!ԮlxcF-)6wGR^a/j ##ec o e""kg(!3 vAFs@KOF~EPxWN?nCPS׏jF?i%{‹uBX'OtjD,4. 0K>|/)Yr m p_21s es*Xo]bC)t쥴B_)ϸ.to iD#KN(&),]y"ɗjzBiKnJK,*}z(S۠? $e4/].*]ͪoZ: ll'FV-)s/9rWOvj M / i(I)]Rϲ  Mst pc<@xAFOL214.?+O+GNJX}F61n=TG~y ȋbfg|v֛ܓA| 5l3yJ=n<ҁ&zH\1dvEGar4 L,qΐۮTW _xR..Z=R =$_@.eV, PoW l]"BMOZ'IN8Cc*hזbK쑄AN+H ScW Nԕ }Ʌs\]s1KܳguӱIz<9^B"&O*$/zØIeR_|gN~_4L|;(p1P?-ĞiYq Üa`znhKGi~\/VF[C!`ugW[_͏,D La/ (Ox5+Mۼڧ.J-_S-ڗZ^$7P\%'.[ʓ:yPts~4eepyA?PIq]_Xkp1 Wy- <ҫvD=JJ%3JV=mNѻT3ʔ!c3oA3{-Ew_3ˬ"#'o; ]A,kEW94ɒ֜)\"jF46- <|] PpyfGƇ;5U@D̹U]y&TԸo3f˧[~ 9CXjNSt'Do/Rmz;pqVԗNsZS{XirFz4|e R^@p LʔO/mtץTqYg[fu OvyH6`lCRlh0HU.j~7>e' t- k^a7J{R6 7' ){%յv_39p<ROe/֗ˁ3u@ #DyD7yQgASCFd qKX 0#c|ט c1H =U[i_#n!B'B]t~xbHrmy͘yassV3kJ̋aH;wЂVLYuHX>f(idP,~F"%gDe] 5ZQc":eFxᡱ>l ҒC̎ DsjiC*y~3B u6쑮v]EjY6_(=+3.'-EtB"ؗ/s^GBW,VAi)+θ3*؋ss@z"<_S)&p7=-|$~B:H17kc NLQ zӐ8ֳGLܕp:N- Z]VAZOն<W_ a]?~D2 nw1J8Uf"]GGIWJ>XB"A5[:zJnH 1s9xmRQ tOYNlj*j8? o&}- g!TZÓ#AڈY<+Kƥ)+LAjP+{jJ:"8`+bI=ӽ50E#1-חX^듘FKL$1xf_5|ï]]`?'{J@mՄQd?B-K-B$} *7yVv8dDɶR.؍%͕S9hHKvp{I,gݖ5g2!G8%SClFf`3^ZunȔ^BL΀vN9Ү,n^9uGvi_eKm*أ`U1{ Θ;g6 _j:%#P /K`j7 UUM  i}>"#sԇ$R"G5 LNCtr( G)sbљۺTraJr+ugI1,. /0qL8'ac,Egcн×${+n+f*_:.ՀGMlԑЬKe´G %ɧ3 |xǞ D^ :_uv [&LGhX"OU43M4$R} U? chԌK0vz効H&cOGG7pjc9p|j_#7lHyLukŹq1/ii *拁 :.,Q #d\i''6:L?YC ʼndWnjDTRSB Fc5DveL>>k/²%C+F觡3:?},F8yB/x@^,p@Ηӷ!;zeUŅT2sb_"@o3BBt@} N0;܄Ng6ڴT* 80 h@ujϮ<1bh Fԕʶa$r<_nKȌhN d,,$f` ]-@\`3d ~%tĈ30i˚ys|uT58SP˭L 2,b-:(W9Qf7t6V7 aqpÇK^5pJ b  ,LXEpI9؎JiKmVQs}W)nHKKNV>@XƎ'u \2rLr>٦Yǟ]WXNN7|EJ],2Ҝ('Gh:SJ *9Cw*Q:bDghFGX$eG9k!e?(UXz>7ԀXzݩ܍ȶ;}3 lս}n\6Z橢+3 -}MC{cj9r#y ? %}ȞN:@9 @&^˭ΑBY=].7mgvt0 4 l!3*񑙩'z7_fеgӄh|4k܀o]|Dݙ~ 2 ]*oyldryPƄ'S']|z 0eW+~qe)_<_eVߊLhB?.R;m#˃,V09^ *!$\=Xز˥kO*:wBI'|MvNzb:u798Wmy'.Zۮ`>)4OD>`) GFv [g66?!TSGYtR܀lR帿fto&OmfvOO:[Ol\`XR ?}=W+`Ah䋼E`4 ]:~oI wY1E9\)GLp]HE%YVF(hʴJсDnQ5XkQw͗T0)_O(9'Z5qcbkۂk*F\8wKI OǘwSI$ [`ajl<@t2A>ku+/}3qT5,ܮfFOV.#D;,Ǜc1㮆yҳ(_ɘjG :䅺˰LS >` +f`- RpZ(ma&zqc浐S.sU8k29Ǝߖְp)+)k hAxY,\DRdfV= :oE00N:WY#L͙sFg?UybhK\ JRLH 3wBw {3PUD _T#عcϸBI0`+;r=X=!1SA/ibYpDijXK[ޕNV ֧.tWUT3tAh]7 S8IQ+CaI1~?<`;>ChbMTgvi)[֚֎ 0[thN>OM~}k2=&$ -W拖6rWxmY[ɟGKk9|xKWK9x|FEJ Ov_&ᰱ<9>rHM4S2M]־&oUYbF\b~3Τ0Fb; rgm]oʧF Rxhv/ؿQ"`ܔՙºlF-SI?jQ)&!/u '➤Z*jSuCխ+5s$Lga\.Fו9ߨ$j~XItrTҮf {vg-ϡ+vi+kn\ \ aC9VI Hzſ<-M,瑨ay1@2ڧU (k9Te.ZGG]V }B' u?k ƨI涏~ƙb.D8Vd@%ɷyqLў8k*HCMd|.z`y]Z''S2rBP5exyHJ'"Iц0XnSI;`6zh@ۀ }ncja+:Go;u~$sϽfcޱQw'{%8S֞4`C,̎:=+\A0y nIA¿Xz@8Iś2`zYH!Y* AEG$%bj4M!KG}gwM.2Ҙo@WS#fZb~O?c{gfT7U{,ԒȃlMVkوpq*ʞK}K|bģڰFIP hF{f_j\xx/l=tPc aV7%M*4&vB`I;'5">p(O7kӀcrx/8dj[ZW&IZ5,#"r[;CEu5OMF<s8@P9 XX=j_9B{n ;^D$a"Vz*j$,,PR~ !+=e !v G>#8a{-nKt~|s֍t)jYvڬV7oGe ԀGj1PP7}oPL~#`e9W{ňBdZJvKC^^8U AfZ ?(?u+ ?@h!Jw52@!U7n@f)5 A&M_0J~֌IJ-pnsbsQlj~%+`JX&xy{6D<5FHE~ %=nm∸-G؛'(oBO?Ts$ߟ/EՑ3G'6ÉBbPٕTPA" 2 'RmɎU ɀh4Ƃf3L6ϳ_FƷpp셑O6PR]L#Her͐JIp ]:whGFIR7/n"琤>hEFe_‚h17AcC g ,9X - ԍ(hQaʲ^Y8({}ly(*2Xs]HcoI@s")>%{tF5Uw-x08i7IUDĵ2c=ҤsJQ /qKuЗb:jW):U<~x^빆L7e=d- ԟl6͸;qрnզ s.w΂J!b1y&׹iç=Ǵu /Eb+ `r/~Y}ZTQtP?`NQq<%JC`]aXpH5`h8<:1L_̅Le,M4R8&j-W+ZAm2Wwˁfƃ6Bb"Tp1 ޅhE6(残󸔑r@_!͉ -LԲj.398+7J߭z\kXw#=u}bxǭ,4CMxFt>4fJvW^$5pQ(u\; #j& tD$D8ͫ捱77PT˂SÕ:P/6*J?r+v]GVyvW]b`~ f}lF`hur gTz'Um=LkIfXB)`ڑA]3֣Dq9Cz!Bekp|eo5Jyhc&G| l!FSjJBkgX{bqEg)"7oGOSeFGZE^kOSMVFaDHI4;½mJ0J$n< @8N1|Q "R"LN?x *5h*ϰgB7O'V({f H7bC*gR`TbdiMW^SgV bNӘlA鶣щl 9%st>j YbD5O'nX^skd#A(U!Gt!=tC'4t٣;C˞gZL\j=8 mU\L'(Gxbygu&1`TrR;^Q'En<,t6lGT= K.&un!CEx.bE k` OAՂ I$ K".o=q6fN3Z>~}QBڰDwj&3lY`ܦ!ް>'6ed)l$G$JcX )C54̠$4$r'3;_.MS1%%H 3%;c_<7"QFk,&u8H$Nl^o!$.EFRDUL06TxRpd靦0U1B-gKA _`<̜WUPeuGsx4`XjZZC.Zu Cd-nEw2j JhHԄsvc;BWV22 igU83a6ՌP7:̣Y;6\A#Kծ$񽼥rb CfjwpւSէz(H9P@Ruz{mUih^UA{Ӟ`@cY L'R v{z>a æZC$vS#!;yL oUQ&Qv^bR]ȯ]9"v>] |۪pqȿ Q6hy9 d"ԥsph> $h#?h<rf96ja[3u uX{ZhȺcCjGeT=_nR@==\[–x ':baQ2oR1S5"WujCVG_ J-6<cf3A 儌(?+#g۴ݻ;OKǤ5(8 ܼkqC.&mlv8lڑi%FDCjV(et,*٭.;̦Q*}n;4k8%G6z}qdX;}xe^jS#V9#c"$%?0;Hj[BW5'Ծ`{ 1H~5D-!' lpW)Sb' u33l6a7ssuo=h{ۭv~ V"&p0)+NaEtMץ^J݄+\Vp><(o7& Ң O Z7;Q˗?@uВKꪣ8fv2s#;X+u 0#'aR2 43̹B 3 )`rsT1UXN츁bd>gl H+܊>Єo ^H=sX.2Du As`W[~֘jze((o;$xBr;l&;e= lqr4 R2QȩP#$ǥ 1IiwīNj yˌUMRA{tSyt@s.M#TcV.;'f`]^ɤHx)Snƾy+1+"m|7D_/oNd9ʄ(V(TC>$m]^\'W&kS+amY -?>Hrҏ.FFR5shBuEj„o^A*̣\4)]a DFhUuZ/:L$,f(=qB_3k1Dp6]馼}6-e?$k;$|CW.2aM*e` q.$&kʼn}?׬=&7D|GE7MoƖ| +Ê]n.wf~o5O#V(7leAo}T]ahev=I4ܑVOb{Ʈdf@攭;$۪ C fGN˫[v"[śoɄQ(Mk 26rU;׋}UhkK؁;&3^eK^uÉ3N QiN(Xn\~ZB-"Xy41/ %\ u<1x~j9EvB臟@eD5QA]gTk@?x0`5زGd/EfVئVUBp% ~f TRDM3$e |yd} H 3H:ӕap^-!J8O.Gsr[go:q,&wSvF$JAy.Z,׿ IE2t:&*ܘ 8Z-Y˨Pѥa^~`Š#თ c^kZn|j:eqʥ/sciv+YWwdP]g h89xz[,BXF$$nx_k9 {\ɣ/H+\d/_N#h(|C ntOHK83 kRsȂf4^FV=~B ۂd?0[ѠcU&8$DJw$+mW!DO%{j!y^3M3sډ ΘNUYrV tv@vq^=t!MjJZEsg ]3rӢ>4W TʊJ:_a0_\_fAYqN%{^OG$jfL\R\M`FzG,\n6+""|<AҼ;,y=?omFLHq+{2;qWY4p:RaPzjQ8]50S8=ďL!igك6|2:fǣ7U UXZ+},)Ǥq]d,]E){?,%9cɼ/5hcB(R/<+i$%T杣n젭KgS旤-i $*Z3TVU{ ꙚA)vd3vrelujmOaL>ex <>]j /J'b b p\#B88ںL|*WdŐ'l.&RBS7(>$-rKQҧ!}^}^ AJm/7|#M?WA4>\<\Ҡ=N|;~dUqAU,Lz$r*IuM$`p1'@4?,+9Q`&:^Aj_ qյwfj[8WDVgx<6e(^ |uZuK8ݒR!’N+h/'`;ڞ[/k1n_4ւry˕smͺ y;>J%CeXgB NNj8k c`$!ꗉW^(Aʖ{Km8 a80F5g^&7m!Afgȸ+S5F|SF+ܛdjTm:-MwG BTH*J ;s/q#97a9dP-JAAg;ct6.GV!xDqߕ >il4c{X0)n 2h㨌22{#AǼ~& =O_4dkW;RW"%C"fƻTƚtؔ*E­F-;w0$uURy1KE]IẄw}7B Tg:py"GKh`U^xn=d0ኸҬJ-,跒΍b|pF|t`6FexE/vyҬ9 Jl{G,ĭ7WYe^oXJ84ѿ}Y@Y G(V`v1GpU[5x6_/ǽ@<]s~? Xʌr9BNciv )˽&b  B6$XR}Yȶ.8yx\H/:!+֣EĠ@ ( M #ܗ֞in9Cm*n/fZ5zBiQAMcWB3⟢5ͅY}/H( 2°CO Z1̇ل6m{wu0H %5IGH$%Sj Y 9p!i6HvJ_?`j=n]"lp~ (hp[Agx+'uw5x ƪB,UF̉X^z%*Y/BGwOQ!U@DXJV$_h&1kA5vU-._!€= x$' #-ͦZ,7gW3 Zs_P~D'\h\dnׄE4M"U$ b%4|u|eGQIHecR K- N$u&r >L'^݈~hbnck\^994ٸIt\-[uőM#̉au&௤I!q;iMkX5{>ӆ>-HT#L"DrH{%Eit$R ua},ף8aբ]/-:jvtۑ*wujϤ> Dzr\n(~$ON52߀J<9$”{Țr)rhc^g h9T*vaL.6mК,8^E"B&0{ױ8w^~NҹhPq&kP]b5nJ_Ԩ6=NyVv}9ثNxйE<;%L4-`n_vW) h5WKyGd+6wQT&'B6[c 8m Q(`}i80A'eşʥ8Ǥ?MSI+\<ț婝49cX9]&:REaVDr\!FE"#A1kHMJRژmˠzi/h55!P|sѢ4y gpJSFrנpsg>T92t|zK&|dżPMkъZIDWA; I*8x)=SHjp - ?F ׵7S_RωK{cGŊ% JRt/y JSE&j?'E7C|vHx?rՖ@Vޫ0ݽ`Rn^ n.1އ_A@6"2 XL/&ӜE~MXv:B,W. a. ڃZ9*+W{Umur7]+@T)x:A[Q\%:Fz?s| M7NT8?)-˘Yr8@Gȟø6wH75SUiAdM_ -uxK HjmPN2e\Ė8_иư{/E/!"̓1Bsae{$ϲˮSH(b$R;Yz=\~@[qkRji,Zv*mڧ*ebbu=SO RsQoୢe +xoH[Ly@eJ'bV0xfIy&}A5x^Ș[bu=Uگ/ܽl+<*U7*|sY<ܔeTV&z((^uRsT*A@h(;0g,l@h(cRqTdDN!sk*xO0TAԩDo=Tːd[v'?ڀHդ1cMFј Q|w@K$ޝgL Hϡ?m;ZPBƆ>}]R>It;c3{I>NfGf5=: \i`">nlpvuØ SWzn#!to[mJ۠H =9lNFpB9hI{eew_o֩|}17VV(JD/g0ݺ!#x>ʈc}--$ K‰J"0iN Н1F<%q3R=*M%h!ReVbh]nq;Ա/6N1}4{9Anna P^ji629ZՊ \W5 qg9^]XCM^@ MEؙ!1j ޼ҒReuJtnVT[U O n:)-ZD+.>Rx?nI^6_s9bt[z2;l?e o Oisg"xh2iKl|/v%]7EB z/%${kBtB0Yrbșzwg%Y O!;Θ@l>I?,iQ(OEs#!烽B@1 PW=pZPm m=&fHҴq*;]%T}\;|,Ƨh5y4htf"h#-I#.⛋|}{\!s~l s͊Y%#nX +K棙ӯCnS4JS,S<1q@&سM9Ń'qL闸r-Wu(>;Wϝ{\#x>Hq22ɨϾPTgqԂw_TЄeS5.HU^uT`(ANT )5R0nSƎB`&v,ۃW72xazU`v(BSO[uJz7NdLv_L+[(֊s# dH(SNޖ#nW,/a#@[ƭdT y[rd(+[嵩侟58/TG`|hj6`7۠xhO)+C³&I27f}hv`F Nu{^"އ~{1m+)@*#/u=sQ! 3(U(k*̬RA9r:d" wNvU1?,缉AM͞)5ndϘPOEÛu+^)(ll[; %XڪsnW,ey)2t.6x "BOIJPBԲVVN`7;EX83"_˴,#W#Ưе9ϢR$ o# |'+oʴ+;Ty j+7wǤK (YL/t#wK#t#3Voi-z>yK _J9htۣ)Ù_oL8imעi la^5ac$K [yA YN4ٕ&#׽e71_3OԽ]jCOCl'3b{E|)K/5/3A}G g uz2wffzN+m&. NWcWu|+juhlOr7qA]^Q""qCPJ \?W]Okx$u#޼@ћ34)LcQ.4\^"7Q=(!B2AgB\䃓?Ԝ?vzcüѩMPH'~ rwՄ[Dws{,`ldNdlc,Q 6c&~u\ H9#3Gyΐ[.{YؼWr8nHjVY#QIt}?C^& %ź N$\5{i%3t1eO,zƵ AR1_m5X/Mۋ+U>'FұJV얅2>xDp2Sc%/DV& 7MK8pUTgbu̬]7l\sg[AM(w67H`]}rd EUg]l :jVz-K6x|:G._S]q5 S{DŊcv iގ)(9;g QI(Ha|dZ+ySZ?7څ {EF72ٻ@+u-̋I>0EY݂ļ|#\JAC>xp(3rs#tGGqhYp+$uW|C~Qڋ;p+f2<ѦLke osTS_=p*wT=._٘Mues c@5j)@d{(p!nIB<-h?+߃%7R2}8 xgҫ+,eXɋ.Rzl 1 Ki#%9Za+Pr7{sZh>礂F m{, fPla@^ TR$ EM;~_Z ({-}V%frEo$0v:T4g4•b+5 ]U'rlW28ᵆ ! it&-7N646~`#wS}oÜ$O#2g7ӒF*O% -ᦧp),qxp@K3kU,(nb X|%[f8or4E5]FqRm.Zw6"%m\Gm ˌ&דM @ӹ ^s6PV g7Uo-_~ slw4nRwkń?o)U7ann-Zqh'܅?}Z` TR~'8?^%teV'qjFwۍGֱ 5S2 &%hyxl{:F]H7N?R78$aBׯ}btksT7i T0{̤q.Dp5~ ?wL|SsTn薟!aI1w "Ѩp©8~IRlqh  `\f~^5^m" H&7=m} q#[{3rTn)u@jS >u9u wrS<ʯlMp ڟK ;8SCSZLV*˨\q.<( wA9񨨻g1m5}yĂJ>NdI %K1wy>^`чɆ!F 'PLFXv|$Qʼ?,|u({NKw$ҍ ZUJdASF^~÷4,rOD#=a&q}aTA8gVj}uzHKҐҪ:\cSي8ݲwJ$"][\;Amr4}F o_CsP-H)~]"'T7v0 Un^GP[RZU3!).k[T *Ʌ$YD 3~E|jHr[KrNI4&Žwz~9`n$N({D^{FqkA 6W/;;#jD'b/සJ߹Y:=: t ̬( Ts6% s aO\xz-(׳Qvo>Nf1"qDBgW5`5&McfX$]톀 rӕ(-Ϯ%C Ǯf"Y¹$Ǜ+/yAAZ᣿4s$iL!f _A'F+́37}/3HjSF5*ۈR Qfk,(;A nZ+"h}tK' ]jh"pBΕǞJeɪ|=~LaX {M W^bdԄ$jйވޓ9b, lIR#8e%W-ѣ7T{7~{l"0W",5^-SJIIT|n 19 SAWiNE)#x#j2jv.1eJZl'Ib.i7c(TQFbYlń_4 pֲR{?HB&bN7G)HJRB2(̬K:RߛW ekrɜ ǵDAePRۘ%.3*|Ӑ1[*ށr' r,}` [%_EyL&NdO濒wW,!7HVVq?+cPhױD?ҭ,%@|zKPL4BgB2 =j1/Ix9S,9jޠAUaQWQeQC޾IBzf2RBps[`1Mݷ]q(2ZH | >̤С"y<1Wc ߪAmNyj`'bty5]wOtec,$$Gu}J.۲c]BbzjtM\LH]/oر2X Ɯ̖~S(MhȓZH?(G]ܥo(kFVc;i(@?a~Zn s)}Hc~DfΩP1EIE[ˤB}jEw 2?r/u<*먽Xa'9pb!-M-v@nY=&‡MM::gKϝͽѓa_],%\1PbVto,EtrKH!~P9gv/BlƒK1`O%}\zko&x<. D8Ț[[:rM5UJE^3: R,]R9ڞ],"n8Յ/*[[lҔ{DbAڛs(w{S:+zHCKc_d7ivfD6oyآ\n+X^ldS.5@+f\Y˛RaBA2>K6:54huǟ1%7 ЮLT>4*V?9$+@'a+,5l4TeTk EMжO9w52q |FdR(C 7x`yaX64G36"=ׇkQykS ,D&i|,qvӀgdEA$-%1mV( h^ţpXB=dV/0Jr;CJ5](Gugv pd{YhLi̠f(GBue+] ,?)3*Lhp4QKM|֟<K=N ƛM0A.3>. X*V $>ԝYn?<(H/0qUOU(3u3PE͔T)6 >oH iO6{b5(ӱ'kՑ8CMl=zBaf=B̘5p$_SM9lePBH HzL[b(UiUVCa«MOvФ$ء<૗]2gʜ d Wdff~| !C&ewyj\S͟%'T^lo 7& i[vz+e1l o"Vs4|6,mk KQ /RUЀQm&k/Ѵdѐ(*| ՟'D>Zr[iӍ==5.z<KsT[")ه8]"(R/-_<O(#ޜEա\z❽ 4ݿV_#!7t^C#ŏ>bU FEF5OAUXomZYLgj()_o\6={[Ue eƭ5^\HKwt=`9^Nb;\Zll:Pait [dEg@Y89VwtL.8W,Ƭy^rbyiǯIpX)ub1UׄW,U uqI*G WuPJHG=M4%rطٴdbB0q#\- G]?ī?nQp{Rn1xX{+PUd$1uwt:0y, f'k±^&"WsyI)B}kQ}XJOL'4yQ5F֒X,aO,-͏_@DT͑Íj3t%_t l7*|g|Kk#!S5H*|.. cU1؎ʉPƣ H|-_*dB DHe;tW/ed?u^g}f$@?(˿B7U(gϥku/~ Br5?j'mmn?=~A#C3߶ןX~z؍n*v N Bwt6bL6:u H8](W[Db'xœp2T` n^t͋47~11 R]Y>7@:-ڑ^+Y_΋MP㼞M |yfNyGCF2@aȻA>īϰ*^f:a0/^Ci=W_gH葺᳁؞pFU]Y/}j"SVa| Ij,I,5?wO r2ci{K;V ƘWcGoQvNNoFXIuߍ7yj0{y(}H! u[`BQ9 oϝQZxP+J[?,l1Ov#4NQjc?ėɑ `;#tH0j~0{6:/pLLJm.ⴶL\'#bD})LEAҩ,]%pet.'qhcG?!4w_;$6 u  {t2f  U}"ikVΰH -#rHD>mmM| mo6?? }4t %:ktta[m=3>ߊʓoe S%4$wyN~]9$^@vD2Ϸ'^M*/IE[@MwO[\y@M՚ 4i+HƢOX/+/Lr?rM~l T`2p[_獀L-/CJ(R,,0_Xկx4G)=\(Oo]C^RTjmp/*'G7+2AG,7?71/_`~`8 n奋q2l3|v郪T3< 3Qm\}G.8Oj/4 L㌇Jf<i4%,Ҫ[cp/&EbGj0U!k2% }0ȸ `"`oD1#D~!~NpVf6B%ZJjo2؅=74R})لXV!;CtO?GV m~PYC(anR3):]ܠӜURy#k,bW_awniOR1 !hw.,kJUya,!БؕS׬4=mG%ڰA fJ2/XvBn@S`lGktZ26@dԥbZlK0(b|qf/ !J=r2%!@cYYӢ=KhW,e 7qk!t(?5:}L˂. \_VaH=ȣRW'p :ezcmER\J^y!o xټLprNMzp`1#o| b5eQF>jX`%w6 4ӊzp g'W0;"SYɼ` e 'niLǦSf(#zIhPoMM,$SMRasHHz[+"%f {AQPswE}='+ %dV_z#YҜ$<n&St0DR{=PFMf>C &OYPϯtoz&)8_\"vuj>\TY տ0}YkenV&b,]}66ҝB"boR~9RՇwȝ@,X  43H h_.RDܓAo9Wjkvk^7;ٽpn1֢9"fdsu۾},vǓoR  VVe6#bk;>1ި|3DiabMLEZR2\$֜zb^BkHrSB\SqH)#O\y m\c5*jEy:~2>iEqww_NW;@Nj5pHmΎ/qC C7=I+M_Ju?suapVRK/T&t5K8^rM赋lRBP&JǭqǝHDd r I&@ڋqOoy|}z3NGniSefu^6H9%7Y' RW5? &ׯƇe8(kX+鏒xN;p!(lTzFPnEnv ZW=bJosvr kaT/Es3ROmiKIvԷ{hZ=u2Wo}${J ;X!iN-m&U|ɪ&7,F`Jλ ߞ%ZL,?>zR| &S.8;=|H8hmp0Z3/.F"Vc/Mj{z`VPz?Q@ C;V zޖ7'|Xa^ 5F<3&xCHnٯG=m\L>ZPݠԹ[@z;?ցu>?'"NoGD &r;2,Wtְ~]1בdttO`m XM'U3A >[?ITDJ &ioxYjT C}zM2"k'c4R)x0P]W[v ~25gh6WD9ȋ=39&4lh$-'{ӑ&/N9ц?Q&AYא+Y[(ж{<_%aommH \wI(ka9߹tl( 1 TwR\;@>>]6<ie[eD% !+!E7u"0m`#onԦ:xBrkOH7Ib_&K9:mt/:959EԓUz4gn2;Ȝx|m8+x kiiY^+|EFMlGTvȾ΃qI:b#;JOɵ]H=.4YK|:%lRX$Zt\}npW/0ȻJa/ P7\ ]5U|~6IyTСl4-=z|4|VGRMJtL(tվhS*[׾m~\Sw]f_] Fȡ{횰ȓAOFk~!&Ԭr&}zIai%a Q#n Y!|{ J ^oO*˟q l<5 "2p5L / &jg63Ru<=t)c5ޫxPc> [|ym T)9oUbZREwty\E6;A"eu0OsfD+n}%'=oPammS+xδ-&{dugDx42R.](M-FL5#zWf}S"+qb,9kU-_TFKl3x>(]$D 9ąYm@xv[m[˥fX^/>OPU$b'zӎlڵ#䑃ŝ(LWf '${}֫UKG B6Ä́0TnxShnv4գo[l ϙg'$uP'k!TۮKJ1va\ !U~NR;#-qUh Lʵ= EroٷfF?I"y^wMx 9y4 U.{~{IȃN<*Š7ЯKiGqk(a "A@%uo&N s \cDn5|jD-;HIU]VKngWE%/BEMf;WoIoWˎ  u++sTi&/lg, 1űtڼ_' |0/9y?WI9`&goL}]n[=%=5Q;ǧk4t@2)*d7C lfkRˀCPtf/ː5`ms^%`ZפF8DY-` twKh\G8' HWW)/w٭_*yz4m_i]+H5Z]XqNAKIëc4Ńq֡>  H8)Qef#;6e/P*č K)+-A`N Zr|jWOk0Nk}x Y{9g2SjB*"'2Zwe65#S=͸4$b[N$ÜpCddLSŶWDxƺ/ lǁ7kᏗYB^ꪷ޺  ŰSFiL^-""ofX &LtR]`J-jvvjfTMYauzY%;=J W`jyzo"Agѩ-c absԢ #odWS)ANvI] G}1*U۹QJ[!l[Z,{낎W3 /@1wlݭ+֍7q$FĿV` \0(@Hau'`'*nL(>gj]_XQ\Z☍5WvZQz&cրX-16)iɸyEBIϠyKL>l ~3{@YnFǺ_4RGpE!IbXxc|14)eqK;ͲN rrg_; ?= dfr #6#ݲRҔa58.p Lx ց`#Q_J uO>_^Űc~AP(HxgZ$MXו@:m%x[PJiklPv /3w3h\x[=,hO'+XU+;5uRE?D:W/Fi ?܁(^LgdLdKҗ+hDSQܴ x̍^oY,\ߊ҆pGrLZX\f&ITiM]O$(oi1^:Ӣ~_qU#ku? ;Ya/s;q1ź` 3z !֓4 ;Ĕ0A3EF/Elg1qTGzX \1+h$%Lb|pB+1DDǧ3j(/9XnY)VOmti!#:T&z%gf9E=X[TC='c^Թ/KQܜdma7_Ap:t^zZZe3Hێ+6 GKFHY]+R!c&X$ RYߣzqEpZ0aڵpNHq%SFF6L}e`&7r34vW/$:d^. #M3чZ])o(QdU7].xXanPn]|6*^zXR!#ZFS`93~ҏNr1*k `;@pRH(:PM S-V$i!_WXypi ';9겂駵m L0;\}R+혻 ʌ_VO'LSv.|ի^5ܣ[`XZGQTb }ٓDZeƼt̡z6}WnIѽ>! 8s~uhِMqt&xV%)/$Sr5HLdX3nKRS.<T2xQ[`؄AL364q檪Irֿ |'󢕈(cU `:ܿdoe ?(pz] ?JjoUR#k4gƒE1@(dMx{8QV~kmq SP9Jf鮂^jE&|k {=Ջ;U]WP;GL֐]-@%~sps%"5BC<}p?ucQXFX HT^1?BS\%I3ҡQ>+#r?*W% uEZ. eyM6XZxCr7kz|8-w#B+pאIt 4=2fs7pӆY,?C0yVg7K\KA&B_ԦkUt_RksnxiK lrW&?z-("&/u-Lj}$l_mtITe'H;9M %+ز-C,FK>ֆ)Ͷ|pwnBwOc^|-,k=Opq+ٔPPnz_%ﯮtSREnx5PCluDMiFmd]0,m''+kev9c-_X\kW,0~FwrOcz/WQyf$ s5:[! ^Beh0V*߳h:Qtse%MRf§@~5>lFި_LSݽ}ˤ_FP1wwv)ZB_DfuQRú#'h;'+Tty 4st4?TB6m |2VOJկ=KUH[-fhg⿈36k֦gӏXRvw2Pqo:gd#\A-]͛e^byU2R'xHU7>3e>4z"d :9٥`J̒cRj.z0 W4ރoL?iڇ/$Ӽ;16}5j sF0GJڭͫ[JƬpV#8o? Z?6HPhdh’2@p="c ]  ;=ٻ >+0eMRWȳUIpAEbb-[yb%DWf$:8A<ʞ mvMv(;?SeN1As=ELG&'o\?+j]>f/X*FÝHq]8_Z:Ϡ= QtۥMX_ڳO5=$@@j'o9Cif|[5f$D#bn-TO7U.S /Yn>ʨ/ر =uu%\A ƘDU H^r1 PUk'aq5O>1/,NDLĄ{\cv9O AIMpt1t@@ ',iȴ+h{sa<ÉYuƐeM[v_Ջ/;\:iSRJYIi$phRl;ƺQuH( A{0ų>#e|7F&=(L'.nmo2Ǫ.UIMXMd J08i. 45vr}s~vU\ 6zH?YR"#%‡ThH90\%e棔6"1%Ivmg;i]h\"j%k G?zT4mV-2tI 4eON exm̻c3kl/ݭ3u"JW )ULwmYY8Dĵ M/KH} fRە`poΥ,vwשkXz; z ;@@i< T-g3%$]Єw`>PLp:+DXEHJ߄^5kQ֥*Q0dT:85-KⰖZJ7ƊeӤ2Y [`eQ@?2E+-<,OG{.&Q0Y Il`Aoj}xCUzݲWFhLX"`D@\ 8POi!]=jEpz5iaR =a:~Ǿ~7Г(-9yvDx;- Hev2k9W>4(@zCir[JΧHpg P] ۥ9Y2䲝yĖu_q ү͔l,8#q;h$d.Tu-Wg"S_рj_E'^O&j7ݽ*48Yt ` @\t|`G(vbr{sJ!%ESfg+rn}= ?}ŎpaRZ9@K(I՘Q4_O{-uhJpM&̌dImz$(†` Od Mۈ퉰'U1w<+Oc7v9a7 W?ž4ЌcBŻhܠ"\: @K?ٮ/ u"ḯRiZ m@7zwp`Fu@Z}Gν NQ>3sJ>ۓht̰/ZTy` @^b:}xޑ|tt;`"'48׮C lf?0mòT_ 0L7Xz,(l%B4ågkfwSh|E sV )ʴaezGޢ~hK~Uzmˀ= JޱiE:-r0+u;F%?, 3W㉉6[H1\e>vs/>pP[orM> ?wϹc7WL5 >Վ,{G4|b4r<8?g'4g\Wdy"V-\ޯ(cIĩ:a7_ƂsިV׾O_d CP{Xj䭔q}}W40>̟>?0 'z; yWfWH#O%lgdbW?5Msd 3y={(0M@F[V_յWciG\H> Oxvxσ @IY*QOΝ.4."+U> փx6gF\XF,cm}9#ɸq b)@*5oBOpiC C7r.cJPw HL•5j&Q؟'ms}Tnٽ"~Z>MX>Y!T bIhyZ/1sT}{Bۃ/3!wO̓Dj0J;YFHE$wL3_{&xo]5'w,}N{F^gpݏkJʹyᇥ5)F ɽ ,O&I`jL8!0ɡ [/.d5ٓ_D!1/5i{pɚK >[*58J/_1 0 AXa54Uv*P wfUA)tTɠ "~n >3Pr g[tGE{X6o$cZH(dpEKp $83[6^`{UW^;Ϭ߼u ȏB`/"S)u௵T[[*\Ux+F_Z'0WzYg+eQ:aw,Ug(v(SYW9f8`S*rPGM^0Bޜ*v-w@)AU8eOYNg[%Y9#Q@Hze÷ķ^MM*YS:4b^ 2D-5AuTV)m5 Bx 3[)<2ә$}\!|>XQ e݁ ǧ۬+] ?WXIV!xO>qUyPLo: lGkE;ՙϕc,zފ$0xV.{hy&Q-2e]@U{ަ.E6%פX7WM6!]u Pڂ4dt``GU.CXbñqy:o} D7])ys{-S[VHbjvQwrA}εR0Z\M ̨(!Z + AoIgZ$% eHha.^g@Zp2z<|oOhNجl"F%KJ>$sUJRI,qcǜFV'+pqiL{(vqkxU0AvdzLUM}"zH!wm>_Qnk i0^H. ܠ8_`B۴햭#6{OJl{&t6 灻,]u"1bJ{@ӏ" y@ mh)!ϵ+J;ihySPXR C0Ћ9>)H}K%o'I(sIzf݆ꋅ.No } + pH/nJLybGw;d8uۖ_bHM4Z6!i2!s]F w8 ݔGydiӋ']ȺCX*c?2 A3qK_55v^ߎOAcU"{10~ZsZdĘ,&Qyw*Sms5=\U>&sLcŶ#4jX>ШEn}43yj.ˣ(80a?3m3iK=%N_DOl{y׾i'~~o߮|>~~gٿ?G>п;?k~~?+~m߇P?o_cn(Uvxe ,;K0]𩝗z{CQ)k0%CQUe3ֵ-;$+*7= KQCQENi;惽z(ynTrؿT#C"t"f}0{X44Sfx\iy aȎN02Onv~K{j2a'A.(aNے6_Co7 NN8نq˼UX7ei1"p>u~gEmⵧW 2{n͞9%f.sw:3LR04:O`z ݮi._M]qje{8,-XhG 2"kԪ30 JsǾq,LҚE ų@p/Bmk;w(MJϝAj T}/;LijZOqޣj|'tvRe alH(&'|Ky# 8 ;K(luO\7xރ4jň)ⴁ5-Ev#a0\<0)rDV )豽2jԾ'ݏ?c+Qi.8 p)$ +3S:8H&+7wx#NQU/؏nq9߉Ԗb昦|踵Qu'?x@ 4{63@o6fҵzD2>5di,(p^ /uMs a2t/ 4Y1Cv gQI9sˢ2D˽<0ກqD-tGT٨?`\>nLbP+ӐDbufoj- i7۰r&ƾj ?Ejr8IT5Kش80<ǀd'Є Z?I4kZԻkw,# _@;"^Nl9g6A &ۯ +co%W8~f ,aZBWNB_*~bz6MтEV)գjBS(݅rZz)bE ^8z]z " AU[E`XY~=eG=2s3ڪ̸0@:헶딣p9(\v9*~ GSz,>7VDWT^O@2)<2cU5pv;[OhtS!3|$rȐ^QdM.VU^ǡ .uR+t?LN2-z$&k8'v&E4lzaQ<+2pfpʨYF 78ڞ_{`&\Q8k{G卄8Vt`lc|1bNEs¬7͎SW&i @T)l:R4u?Y$rlY/D GH z}萗%7Z⾸:ncsiCb̠hb XUku[޺#sȾsR ߛz誁ݶhfl֐+}q(ݺ& $Z R PT5^-XGDkt` 77)&^MD3;`vfp=s/J&Jf*^M`<>xEG|CܚG@h;~- k8&< ] m~BtJ\eCR>\O/)S6 >ar %DŽ3 * D( *6ZG*"V}ru#SRJ(6ֺVI[:H>1`V%+?aGpa!o-Z3 YHLmP`ьB=bJIhjW2&u]莒<~0OfTN /ӱǘkI/q7S1"x #;FKcvA?r4QRYۿhF_vpRRvI⑚|Eɉ"3 >CZgΫRt2IkwC.Tg,_e/kYT w0;Ec$5Y~Qc"*Oqݱ6֝tW.3>K?ڹS6A R?"(]ZbA[v˽ߜdAN5Y-Ö$$ l5677ፕʲ_jk)ڞ#߉8 =}Nbp\E%qڈYMωH!ؿ>d>"Eb41$U?bill0˒U2/(`ZN,.Z}RH_q[n9~J@>#vi#5;YZI;kiAQ Ճd3{we5pY+̓YñX 1C4%60[}uC]\;V]4F*W>F@@c*ű*MQ=Rq=t*hncxC0ǎH(6:6PJٯ/H *N\*lrW۾uA^"F;`䂵2cVQWV82А<`+NhCtڃ~4MYCj=K9|Ӯ3zl@6 hȇ|+rg1M yl)Y9PyX 1%JV=aTksJNӔ{FnS"Du!ZQųkc4^q`$nmڛ:&D;rYXp?> 0%MP2A٘+pJf\LT%$-ؕ\ IJՑ5}yw؛kݦ zRX NJi?1,/px2轊mnu7 hӽl1#j,EU.Yp9Fb|`6L- `Ks:Hoc2zk@9ϯx237dL?Mc.I9t4(3N^ntŊzjHM:;D8 J=2!BKJ6jp7ĖJ jMёʃVSŽZ%N"Ee *ڪ܄Ftzzf 'nOSSp2AS.pwlcEle_*W57",<(V>^LR)4a2{:T&$!,X6<8sq spK,1^Ggؗ of$އTJ69F+}M4Ucj^/Y(魡lGW'E <ӱ͢V8u/N/mK)،#Bn$Z'$2a \Iwu -cş6]Bs!#b@xjHV*c$sfq]%J OwF-](lB57xǧKNiz֥A?/M1[@*H.!`$Gdÿk!Px.# Yҹm0gP_~>+0g$(HX/X,5(V;+ `?գ e =h𕤻6jQ] =v>I7%>ݺ'I-)po6.v\v%.1%[Jه_]87͈D_ڸ05#VϪ'VWG -E5t6`g\JwFO*k(.!8ʂE]^y4l^O$RDE<5xt8ު j+IpΗTg1X8`dgzHz-PGZSh ),}tUcgyqspA⦠%z'5j&iaoρJ-ɆfK#)i-}5R`@r'N.z%yNMY8$0Nҟf?ӜY?H CB8Uiϒ $;Q$Dz .o`h_v Jp}7I]ɻ.D-*xgjij5eB H ^d\.uk}jkϣF|"w4, >` . 2?2АFgĿh?еy%vrJ9Rh`JB4܇'+ib=:rC}Gq3 {2bsbFkΊUv1~9|GmU٭Ś+D S "eKUg7zWUp5/OҨqӀ9t^fXW&k# 9(¼VK[#8p}\ZKP!ˈyOjǬlmqtk}anN E34o:e'ZH ou20Bs ; 0L~, idȞDXƐNjesk ӎ՟Og2?1LwWI4@^}$z/EeĚ[ұrST0뙹*RR.kډiI=%vNÀ6ʣ&LFCuV0ɤӒO,tKS@_8:VFb%@'b "&>bg ^pZ +jT/ěŵnQ? 0E S\&N\5ѿrm)q>-pߐ"NU/;E)9pNjț"%D ;]]a@y\~.%%XAԘg5)%$*>\@ĔuI_JA#u^w477 r=D,b !7>o4Ij8QkYğP;G2҉u?2>@ś烴Qv9?_ K[zWM"|զd0N6)m֖޷:Ӗf)f6L5sL; l]fN>oNrlxd+^GH9dzsփvK8>Ibxx"mFs&fJ \`x7C{0-)tj?F.wh!ֹN{}ȥm?hإ+O IZi4*MVǐk0ӛŝN#[͒rPjq${l[<0<s$Rm\F\[+w~k}Dj_j=1eN;ܿQ}B'ibҍ2>!zVNp;mn7흗Xnt*Eg2{W;\I.jN=FsDc~@EEJ},ϢƌrlzG0 p> x-ށsqh48Mn_AV FS°DH:Mi<pmW`jF7vZ#4;5ɾBP'_#;W_LnugY<<9*UT\n[;01^[Xݬ/D{i2ऀDm<ćk*2ʬh'Z>+8T#s?5[k*_Q>\;jF1n s<d-q*'BYt$lc0&hP'S\q0^ >9 Ds[pg{)" 8] <넶uhЪ}EtwNJy~n@ kڌ}L-apUz&/CF)%[ıY=*hmv$j S|MJ{}0w`KfwR_o=Ad{ea+w)I db[ C\X5 ~q{e 4*=\z_wR -G/J0 +S%0={%xY﬑W'k|T|{* ÞzѼr0Փ*Ri MDzLOok˚mGdK^:Xښ ѷP/^ǻbQ||LʄVUZ0~UJB*HOk}ϩ̖۾% $ xcEك\s(ޞWn*2RKOJr#c5BtUDom5VbPF`CijU 8b'lK0GcLr~'1&tZ- ]3Jת- `)'j,ޞi fwN oY.|nA.Tqj%WC0NSut[_,w̉YƵwS"'o 14OAO/3nU.1]Mĩ!MC! <׍}..T9.J!xkj=چgDݣ,UaL6 ߅|iܺ5jtU1O~X~q?3+wE2&h% .<~nnW' [O >tR$9h jۑ;?JFΨ%p󭢬 85EwBQ hG bf7AH2sYCY!K`n_a8HǞݤmBah+rh[R`4 B7 a>`$z*Xm5xl[_q >Uy;Nn ZGWr~ID 4o){Y.CPp5h`yk7Kbwg} 5`򼵕kd0িW8Mo 3KX+YZH`kbBஂBϷc\4sl] vg?[M8KX? eMD*!bX dXU[ ė{Ҷs ,5,c-)=ѴAǣ sXN8uq (@^0ۨ=Gg}+;! a(^!+vRu{=|=fv0rZB ZظVxMz+ [-;k[j*zWKX1@@ PqBPx[z1,쎾J|o2nE>2a*kSbŬ/ˉNx~5b \yȍbGޖ[ CЬ~R_b0tfYf#ȋ0Uht <ܵ>`rpMAB.cu$ ]rlɰ!Re̻uKL?9˩Ph\5jR'}=e~4^PaEn67#@L}1NĜ >7[L;i@](@yQߌ#ʠC1Bd|~6εiK&RDB;W:}Bݸ0wPOK 6 $G7[̎8#gvH4pqܫ̱xqmNC/.oՎ"6*݁{\*R>*Q8 W뭍[ Pq9m`5 'ߏ =9݃Fiw_jC(тqcSɏcಏ&1P/TI.}cVW'3ơ ex^Y50JrglYz VP ʃFʙ O-[<|u];;C˟IאO^NkʮZj@@pvk^n 9'^S"X{U?{[_"о DdޘFI cc߽B VKc &r.~ C> LJ? YMNqu9Đh&`YIt=bZKE"\Yi'l6-j brT)]s1&Noս 'P9j* %O͇ӒyngRPZѢ_P ^T X14_j$.=$-nW= Z{#誎fV!WZ^Eϴm觅TR|jHTh 47$f] X;;8aι d48tţ+LJڷEu^MM e23 vti [7[Pd\%+ЁyaJO*I_'‚" I|$XmvO,Y"8{:b$-[]ugC[ f`+OvNR]NPAȧ03`y[ deYKfY"kr,dq"Sżq9?;oa;PbqPmB߂*VI k@b͊}랻i2Opƺxw* a {S % 2=^/*ѩtzL#ضxrQErBH|A;QbT8VSrg*%h-` M<^ү`Si'cmm~鱲]f֝CQ ŅRVpN`Pocʼw7 457fo Mgڪ{U:_$gwR9^e)\[*Mܳ[p̍q )К}S<ai&FuR"#[Oťvi+O&@>EPh=Ƽ6b4'OXEâ4,{Lm~v-AzcRault[|R?rd IGvX3T۰T ԁW TV1;-ͧ:9{D# @yYhR-FCj% q0S¤=e1"4⃦@̹dDUrYKLH݈6[QBX88?~|yX@u'r&a=m: FE[B% 6$v." >Gj@!=`=D^êٌ~Yra(t'Bz`'z1uZAVc9v8~ 409TSx 0oM+li0l9[+oIg87< zGDQgb#U{=s m\^;PCv!D>}B)s&6첕-yuu-Xw%[,L\mA:J?][%2%}iލ~#ޢNL 2 KѰ YI (\-z߃<@641z7x\cKuTX/"BB^ݺ(og.YaGub#_Y\k ΄{~_T%cb܀xi=q 19E=6=v@Uӟ% RJSuqA9fb%"kO9ċJpy a밥]GJmOq%lO>Btlu% L E䈼y㣊.}b[p7 w&SոOK5CD5eJ [,i1[u6:v;/' _]V޺]+--0b}X̓Vs[K 6.-J;#1ٜWWx 0?qc34bV$&6<4j脐ӒFy;#.xt!v АI  k'G8z+E s]/& G`J:?`Ț!aWLb-uM^~%^787LKw(.ی,`DL(`d뻦uP/٠ii*o#ГL(G UFM祑7NBiyӮ|re1zg/Y6Bz`iH N $ݜi%wu_iZ 򠑉DA-v]3!'8>)OkI:21㾈d&#Ơ~="Y h8o xftMkYݟݝ?9VTו}f>sYI&}ƂuzO-E0[g3_fӏnu_Ŷ̉C!*H[:Exβݒ\`w5|{Mr^x3<:G+"״ Y֢p(x!V( E6;\dGxmMUVq@b '0,hR}=E_Z2. ޚ[7DW&?KO[-P[Cn#,MWYٟ8ɏﺹsYIObEHAdHG =LtHkGCsLt6i.PS9 LEy۶.\AK[X=} 4 ? ؞ˊl/$8cp4^u(S\8 BG3U~4Y; ,V;1t|) 6h9)v WlZbYYj%@++oأR~oxD8)jz\/ 4L9g\xiP*v+ͻ)m-㽉&6/Wː~,bQdsM$Qc⣿'mo9~5GROe~WvQ`>{لe-k$s1DoPc{{\P&y1=Eo'AH=_ڈ{vQKAV9DB}iƏ5qr,$!X%N?P0O6M?J%aoen6#0E_J;l!>`Hz# XڞE¢a"Y¡>Rb?U܂Z$6K&Dv(GIW55F̞qAfRuϽ$naXn vt=fG yz ᲀGI:Ѽ hZ 5ЎswV LʞۜlWaW0AFBGiTO=ܦ@-M.wr3 !ezVamwQYbHQ>/l'e4qyKC_":!w7cDtV T&y8&]q3 _)+dEb䗀.da1Cw<90V+1].Xpgt{ZsK!oS9^)YޘF ޜ3.iH.Aj",ܰq)ӑoү%z,SR9N=u' ?;L: ò#WYQ3$ۧ]R۫I]=儈v>VW<}"LjҨ}~od4`//IO}ԆAmzZr@]kLT!mbyLGtV =!q[Gg9n1:e\]-vL"(r#jG?eHWG{=tà{ #_E,err`Ucി 8<,;Ta y-qШi7q/s37yH Uȵ D$ UPsR:sgcFʮ#{k\|B]TI{C`VƋmT +2}ů~ej&m킆7 lyw7E)[$cߝ0-O=5}-<,g+{"Γ^v{# @BQYn|3\pv]e1Aa7SbʄZ#DolߘVzo!fBӨݡ,݂2eͰiP~y[_W!&,-G3/m茘4y;xX٪q!ԩrjWHdi .[ӤR JXSc:hCXyo *d%$iۮ.{eNLPm-h,=΂ٰ]SJtTɌ7'z9ͨlšϫ! dD1I̧$qIIZN*ԮM : l82AȽg"ڗ!5-ۿ \QڟYC[Rֳ=)1#[0G`'MMsfCQb"ܹ̙Xf8>Ƞ9ZedN,,WV:Dz:sH'i.n& ē$J7Ī%U^ p܀Ia4'|/3s*!Ϸۏ}pҹ/0by"ӵQf4ؙF;Ug"6FN%fU6%v.b+.1Ϸ搈 k:qpCSd~UMdV2&EVύT̹oyORQ ~ FQAn x2Quo3&ʛ`H#=x2LHfEv`=t$a)$"Cg  N?ZN:fv8yΒ YaNGP`Vn?Ng/ Uusp?pW npi7*=$!-e1oW3\nC ,$nFf.~z JE']bW^vNmܸ%mep]Gm%bN/x9%XZmjF,zB]Gj`*j]ƄkOgM15UKy~O;g -pK@&˟b<!DaYP}BDTb;M+Tc6a՛f8h\b,/{y=YlCxoPuZ hjO "IZmUsbHUx*pXe̔3tp6p|/?eI[݋q:E_j8'$7HT8%g^k$A bY L0PenمdżY٪%t%Pd1̖FE|^x^N9vеcM|jhKf”.`|k&@ I*r hV)/-W[k4Il+Hh`3 Pi5*A5tހ/ɯ !󓿬/єF:/'E{y.2htn[Ih@725f %ܛ9j.5ΗUZLӃK%q[d, PC =-+S8 ݛ^{%IXrJ :d\Q׀ +C](h|W=v)~MhlF{N{ݾHr?ዐ%(b&oTBYşı:=yb6C֓ϕZt 9'r DřPNPmu }q[aUZb{UOVw C`yWsqт r7 f,_I,CT Y>_+[1w"$VOO%&4E.Ofc=3fsB/Û(#uȻ,gL,u!8"fLqšT1 NYF?bcazP;4J rINnrzqJuB9d^iS. FFBd/7 Ye3+ԑ~(n"f_הxa;#7 m f`е0tJ9J3΁ =2no&OC=Ն^Ykƚ^6@(GPw/x5ooܜ\QMɒaGmjNhS?>S`LϦ<ҽޝRDH:zߟp4CCȳ b۽]ag7hm>tY#FD:pN=r @Bvxg_͸M,3H<>,Y`2bn#:cEfE{fe[a)-D [:k*o0ۨBe||!VǮjeC3R <|+a ?kVu'fܦ]HrL> kc^xEp})EX*iK cHZgwv3u*DJHor&xa,qfmilA5?x*gF3Ӄ<3KYO\gUi'ս!kaaMZ- UiqC 'K[NBrľwjԈ,0+Dү"jD(:1Wy$k,zjq v&գ|"%Rcf~5.LkўY\މLjhJȍx$"KIg6`C`ʇ/cf]̔> }eD-W#Xژ,szotrl6)^:M[2VlFnHAd}X0`co?VMlKyr;3.8y 6'>?v#[FY^o]Sl`ĕI}{'zƙWtK-+FKs"v|'CAt,뜊:Z~vޣߩtj:;"%p(~pzIj>R3͘Qk,e?2k,ԝpOrKѯɇP$ '`QšstĖ)NZ{>肼1~o'HtFlHO&Vxk'and1*|DE=&'~JUQ(fkrH\`]T!WTE6MlU䫃+])3'3mŦ4ڊX|W"b\vKK{}dBZYOٺiJ?dƿ1k}OG@+ &tBynzIRJ@q#aQѐǡ۔n" 3NmH.-@WcGܟ#_8>r^ُt$)*Hh/ȿ^R9~Yv ^3l/ v߅9P7~p6dgZE 2O> ؿ:iOϰ@"'}WZ24(t]yC bm {mܥ.eݸu5XOߘ^g~Lga$Z(^gOdTxfM;`d!*:v1 jsQ(d9v39N^Q $W-4 ,;OX9r?)Lbݰ7ˌP׈i1Y k}KF%߅-SOr\˽p"=NJ?qWqggI0[?K0 Y;gOMmNʮ)Zyٸ)l,;< rk(݈u#щPRrBͤTϏ&w-Lp/$ݑMr`>IA}Ւ"8~h|`|\$@ %PLQ$)W2w{10 dK]5FM|ӏnQ?{#f\Ǔ*l{A|O-ݹZvqDJI7X 0'==1kR=;$SL'\1(z$b|c6iCU9rڝ?VNt@:Q(v/4&! 1Ry* d;*1J !"!#kZH%1Rm_d8DŽtfdooڱޤ}5:HV:oT0g[ZdSp^"yϗ&r8Z##f)"^u_ۤShYs'w;wO_4>K&=qIH'ٗ kE$Q#BCD (`'@QmR>S0lw X8ejHEwpfbD?YPJUNNY8jI#|2X_rDŽ3|v_>̩%+BzI Vp![>ʙ QӿVsF&n5e#rb e2 m+ְOy 3UP|i2Ie l:s0~\T)MM@*@?^B!\"g `1YG^ e1jGiq&d~*jmEՓP#QҾB\oR爋zC]!׺EVh 4?cW7“y 8m>mǸ/xk._> OT,P{n ND=:x)ś8vJđdN|Cii|ʷE|>v%1<ac }HB:}%i/!忀qYzçIRDԯ_zO7x/1FýXŎ4 ҂IkZ&k_nhG|[Wyt }v5fL>].ʺ MPt)y&}ҷ]Ao}y dQjۀVXת ⰓYS6#ӿh]BIx(UayK|;F b;al&U^˘݁*#x!/6Ľml(b0ht%/"`aw+ W?]FJXWf[~)dL)?Hv69Yݵm v~IN lzh"iNP'-͑Eiv $u\uWe _NӁL?4 *Y ynCe̻|֣aЏ4/_d1 5+᧗8%1;.dbWpdcWۯcDXMSJ:}axņPɔffWS(q|:[ӎ_w:;Mwԇ39~#]VZ>w\n4i._fK9F}`{sxi$lzmw=k?"HsR n3c8pd`+ǤKei̦l.hM,žMPyly",D?-<ӫhҩZh|EqU֐\QK'Ɯ$2ǚ g+JC4s🞉kq+ZI7DPX?uKDs9qqԪL9&`fؖx YiӌCcx`AFSۓ-ݜT*HtN$M|3Y vVyTAM>I2ys+xx"^|AD*L8vP/= ՗gl"ӎf2eeXS++qfpUԷژSb|[ǩ| SR(KXFUxj>g4iܯ$Rx*$*e7jv1j_.q` b j"n\)S,Asi -Npo3|( `#nljEB!gup]텃vjRx:6%0ZD=-Q+0+x[f)O3)KbLXހTlK>=uZ2nڤ,# Eu%y q#{\eQqِxYirٷOxa ο,}]=A7 5G&Q]GE=DG ܊0R$jd|1(y#4BUg^`ی&**]R#mjZdGv L] u-W!{}UUoF]?~JW G|.n9ّ#SV.ƶt<対[&:kvmB+Pu 6?$G f%vxVU+Y! {h#"*hąP{3I>db#+) 3 r[vzvIs(EGM~2ޭaZ: DmmƏsh:kҩD3._Sm#[\`Yvwy</|=X{H+JPm 0Xہl&jV"U]k&U:7D[te@ 4eWu1G/d9Fs-@)lD ӞVg=NO!0+!wS0~4 U#0QăLj4)u[E;V߉]5 ~mFG5k\xu [ym^Qt,]!& zqf,^T "͕E=*Z7#hVŷY=Fe]k UɐglnfѲs DCiQji7WdYԿЯoX&9b,{P3{9SDnQ4pO821.] g &8ƾv׃I; _c6y>3cd<$,[ICIsz|6WoF5Kӆ/Z*7Y ݠ{Ek~,#ʫ1Y?GhMehN,)PP׋J[AT 9]GI&2>7&l&Pךk_/LYM}9 soɋX|8!6˸u&hy>sho'?L2wc'Rw}D1P(ƶ‚wC]d 1`t:&z0ZbS>6Ӎedz(+jLcAM{:ybX|9ڇ ?#6cDFg GxtS$>ͧ!2-][oEdQ39nSo*xko;G'z 3-0tww9 B\yF:W( iH֥eΆ*I%v懣ET${5Pa׫v"y9I'T•^d{Qz+;8i> >h}8j!F:{FG>~DGyGΰ$Gqb q|"YD6[}jCmuh>Z Ƕ0v8%c~ь Kxd_6v"SXqObCw懼LXC _w+h&}\ejN\ya0GF_@ m_ (aV Lj҅IɜrfߔA>XQ #V,/5ı%>A$nyv,m<>>=NO3TE79D]Qˑɕ4?@Wt0Mu¬b #76z[]r#= crX7BMRm9lSI&y0Sܨա+-o;wRknfn~| +\7-uW^ #ҢUyX뉃Z 徎AP IUivH:?u||ThzlG-o`nAfS`vaG}t{Wkpx^?A%Ჶ~A9w,oM0^`~9E2 %ڗ,&\qǑVXv0-YJ؅yiB嫿*cG1=buKyJ*j$odFڃF茉 ܿ3,ɠd<OB7(^w,`Y;ASΕ6 bj6jWKhԳL|0r_>Q}SIzPtٸm8\y>6_cQqtH5">C̈ětSOՂU{ yqi asϥs dhN*K(pFqׇƷЦ?#3C}6 g{."LMj3c}ơ@Sw6Mq,>> F, ^"ٔ#,<{ dxÇע#fVԓeKO;x, cT+tASzCʆN@- *Yv<ǩϩb_(aA$lj~u"ZGidnqZ:!"Sз)X]DnU'5q$| n#%eDtU[ؚ@J(MgLHjf*hƼ4ozųc={9-n+7L3# ޘÀ5LQ#J } S[uA>;5rooy#Bk̯2[xk^uI= 6pY3 *7g ۑ=]Ѱ0"8yӵ,sهlxd%r+yFԌ?[K/NmSv/\G5.1I;[R<0\;;eԈ$ZKSQ,JJq@Bg}!st T00]쭟f"]`Wdg4h<bͰ<6T8v&/v֑^ <)-ymB(CE4&F+h I(nZjz뾁쓚Y*\ExUy& }# ǵx@lP/]bp࢜^8X4P,^/}ߢhoHn{#yX$3Xt:wy I6-\ &T%dF#$xmcy\@(ε5JG 3&2ntf?#P{QuC"~ c1x=6gT j٧$7䍣Q`gz_D' Ml/΄Y[GJ -u{:|Z&Z9eݤ:~#~cey=EL53$zM6ԊLvƠ;Dg"J^'Z+?eqb dÃԆ0$1>᜸3}Ykf,A]J-H ƐƎ'MP%F<wa2oE&0`4qhiޠ|rS`~3PbT!w5s K=SBq"4;G,bJ@Ōh虱Vϗbw#9k豗I<9B qM%4.Ln'vx{\gHhA.\f$jFji >U 3lj (PWAJǑ@y*a&d >H*ުd3JGRyn”C*9˳:1ڨ'9_[ILlOϵx-.s.eE%s:,.,]-"uk B | Ю08omAi4Ab< (v斣,N se>ɵ<{py :YroGV$-^5٩ MPb+[0h sXQ(~o@B`SUz&6\J%eA#Ny^KJɐ>&8fx.|MNBxPy!)m{ Ug|C~) _)>(#^080oQӘz/tʫMgIvBxl 93˂7ˮ^4IT}>+aM԰'FIh`SI39$ M#}[5?7zIj9^.}ʓriR՛I ]m%[Gh{'=0 5sSc;eh5yXžbiGQCDwm$L*IW,d 'T-p8OeݛJ[- ٍ,(e%;q__? Fb*U?W 9(J Cq#-{`е߷.܄0R9v_칾f,$U!;~wů1* & =x+rHPœ rl_M)a܊ɁE,<,w/sޟ'k_?~sǏ]g>{n?V?J|&¾ME??LH7냟'HH^>j|o߫ԣz?\xϱ/tK^>b=bw.|?>Ѿ=|~~}0@E|BׂVX `!StBUg^#|?.*(١j׻)}79 sy=爰;hLIWk9jIi{qq<c+ѻز' &{LӉP ud3 ~ʓZȨNp-$HVJ}ynp?Y '(덬pjD>ɵjduDj8^yu4f™w \4Ý(Z05ON^[5BCKzD&GS>s.zL?+krdn,5}|- C<i7}.bWӬZu;(ia]ڽ~y+F%HyTfR6_pTn\¦'e^ɋ>--Ԫo;OU&l'G{ʓWWUDT'^Bn7,zIx`/.krbdvPGX:S9}xm\z%1KA,.çĊF)ԱHDvTW6i$@c^AYu%ZV>R<A RLJnd{bY$M\m(&[ظVO'<;H$~lbT\AJ&Ii|_`Ugx+qb9D8PGC2hI Uk5HC=ʟ U' ۹L LV :L'$xߙ݇Lª/OՃ>vsجϐ4\KwEvTs@MZQ ՘5~Wy{mWbK ==J+MVk/x7LmA1r)^f2!mi.!hoKѺ3,PQw b@Ut`.t'rpPyA>V[s_=o̷!7Ζ8G%~VfW7Y.GNj߯l9vV`/-7F6re{>/CH "nP-WV#(,z;}ϒM2F_B1,(&r1=k2x<-d6vu!$h*_@77F;~=qG̪'yD|ѱuZw!ty*,b1K[.24y;H"_h[z阘uULwWdx<9֚5)+C,CjGP3P)`)7@kMkm^L{lk[ `Nb{xZj͎Z N:azRaJT_ ͸[F#@q2I< +]pփ]ʬJ1Oƅ9FBz-5s$8W*ZS }X7D :,}? %@ ).93s!c.1z!$^?u~H!HGo+- *ϓ*^~|?^Ws{|>`'iD'n̙ ĽMS0NV.D;]i,2h"c$$Y֐_);g*F2z!\WLD7'YD(Ŕˡh j gQ N yyA) H[ދ meSb7BGZYv unrzGT"&߮䒩AbFdYӸ173lokDCB[Q@?jM9Y2Ku cJPR'egMhU|-,EX&P]WuݨVCtECoF߃/8zKoE_%Cp+q +ll_]a4@#{[<|3r|Ԋ%X[2ǯȠ/ $ 225b ,gJ*H4F% {vCTZFbwvUi*U`} =Yr{X$>ʃ+ QM>P7s@ͷ'tAyFg25$dl(-x;Mvs} />_S L*{hͲD6c%+bd{.%Ʃ*"ʺǙvLˎ'#U{4 wu:iwڣlqE,},m@ߺzǏo)K0hݎiO|t/6tv=UD1u)R0y /=jfN$`ҶTԖ0")>@#6Wާ?"M-'6:ib c};Wet|.5p"PSYJ tPdZkfQmvݠaR<@k Kf#m'pW˄J~ m5KCW;#T>~ArĴyMաE5=؍iVXk|̊t &U4&{ 7qt!R6u` _}ʩj':uR8 S5RN@seXy-3 E&Go<\İ zvۅ[`"鲇HAݵ޿uʀ9 茲P''ˏk$M鳅A NiĀyN|[2)ӧx^;: _Jb"˧D u~ 1DYv9bB HQSˀtBٗ6k\pYSiG[g93tUҪFzQmN :xlMA||l.NUWC֪r ({܈n=eȖd}ojx&`tvG!e[L%ky|*H[ 4[_{ /Ŗ`bPVD?mW!mY{q&ѯMI MGL:F(ՖJUdN~٪cLԮA{3=wQhNWJo>wٕk #w8&8-TE5g9MY٦t}.j LX"ksCJrOA0Cg}=m㲈9={)Ow3V`f/9@k44Bn`(3.{\AgYPӌjttfB>$R?Ӳմfh^su(hƸk ' 6yڶ)R?!ŏx |nlˋ@k$ c(Z6/mG"d 8D:J;Mʹ亖 ==µriÛ{dM H0ˡiIoeh@,.>_?Qa6 sE 2uo,@erFtuBGwBly ac\*j/$5E}S56F)0\WhH>)CTLPmHv;? OuJ8Γ蕌 Rߤk[p͈ęG-|Do;9BL vZ<Z^J"@ph,6ȽyEozo9t6u{5'23C-c"u. nڐռzK;&$}#n~~q(CZ|hdL1__<_U>([ V;.u7;dL[]=g=4b 瓍bhN{7z,iWfuƸ^~l\d%{0)⧦#4?,6F R%I %{a.@ RZ|Z.tM\B|F)P/;P8KX39dJڝgoOߪWvZyoSB tq }RXӘ D)E:ŕdP^;UqD箚k{Ko0oe+F/fǘ+l}^+\?1WR* on$b:7`"fOfTVD(|FUÚbcsB,5 ӭ?ObcN.8ϩ((զȖ[^qsu>O?؂@$TW8xP@ ^~ @ި:Jg &L-uiL'QN bχ>'«(^#<49!ƈ>t՘Ƃn˴xD=W'5ޮ02^G܎%ٕ%>O]ZL~@S,=N?@=^^C+7a5Է%4"EkLYc'͠_A |ZYf[㬑j.%2fds+ZC.QX{IރL' '7F>1_ ~gdųDOq(>G 95~ŵ1[i ^^8CE׾XB7C=80iH..?SdX&Q3P~J8dp91e.|F> -$ P_ݫƧDX[0X( Q Uuceu{ȼ[}E_Fp[Id YEXL _&s)9[n$80SnuXD4H{w0Z%.!䱃:܊g. q%4,;7 9R s -opD|-d8<`n@s0Ln'P " ivR0ᇓ/JFr^"iFUG\kÀmgSsuImS 2hVu,`rb[0t[ BUus=$7Ϳb})bE][X5O4LΫ'Iue<ͅvjMk֍uAfԏBӷҹ"ʾSt+,痴`w'O".2hǸVrT)q8%E1u%{ZUqp_TI\N:,L9KoeYswJߖ5mw'A܉-{Pˠ* Piht΀`ji d{)ëasQ@f6'sJqKOY9Im'=.J?aBq+L4Wy*uQ=6C3yOO+zQy}@khS)HPlӐ*xo|3ݷ]kDkx{niJ!yZ&Y ɣ_n*[= 7Q*!i?fZj:}Px6el ,K' ܃U6gyH>6rbQV81>2nH/ʻ13]:OHI_ceO8bǡZyoѬ3lo0l5."(oQչ5R-s3R7a5Dpsy W#Y.6=I&kN~ +t:%0P"jp=~e)|z(״~)jB!sl+^$` 'Gvlv8qLdc,Fm]}a3>HT;.K9l2J:l(emߊU&1_S~ D8&=dG6_{GM6#`cJYЕ1Zr[9\n%ۦ1~ M{Ye#E1 ##4/y#J+I?v׵cexGm[ۥe!k~&erpC9a D(^Hxs&q! IQ~d>V|bxddCvИKkC>l7֤ŧ: ,g/wdDZa3c;S$Ń;fvOlήpr5 wwf֭Ym" jSD gB"nqb7!9tH3Χ;LzoG nps&_ѧWDPC ܴ*܋ n%}XL{]?,<;S!2v}ctT$ARA}>#tꎡ+afK] z,;i Q~xZ{nU~6>q kYW}.0c*oXozd#!krhta^y4`+pҴ`ؗk˜6 К5VY 8{/nڜ591KQeF8e>.d+(0p$g|ս>e U&V*lT F-64u,yox5FLP5 ^h𓏫6EZnDlsqXbHF+%qCy?b(ͶnONrûD&JP?asqw"[66(M8#8pCBF@|]|! e4Yf¡4&;, s7J*$-įUZW@ǒ b6:T/:ITRA?6ûɅ g\ayIФ{{Oж䈥6Cq3^z+$M°(\?>e.IJ+ն .Sxn1) 1o K-0+s"ee9+-NU'+p߯BG3ٜ`̄)|i:SNW2ħU0mu+aYBH$[)H%?*.BO)nH:9 ,U{>rD|p^;JQT6PFEl a=ڈ]@捣'"J P2,&_pN  =rNGfXPz:p9G|gnLV]@2`+(U#tFe-g~0,-` pH_(O8gɎwIPߘajɹ1LMIDžhy#ˉw)7*K)7XꪙȷozT|sDeqls]>#AV.e`t|P)D(r  hnaI&¯DY`Oؤd^f>2gχtc(9N*Z7rWfAl3ѽǓ(P@iS[uCwY]T]Yb1nYELsIt(j"($IB miq' @!!lZPs&UH%Rxʅ(JwӢDc]<1sO#ZЮz&-Gov۫窝k Q+VYn-֛BeȾ>9? :2q$% F=:#}~Tr2% 䅸u.ޙ늿՝bYB|hxi旯3ѧ$+1V!^37']VctV\~<3CC- :)<ߣ@{L2LJ}bJDd)I-&r^k (QhL⣬NǢl.Ԟ9ՙ))(_>!:BrԫzTkUlPBg$,F?c&֡<*ˊfО[BDm/ |w3YFd[۶J)Cpak4kK?MBDjخb% #r/uX\ڟ=h9KU!Uw{6j=u|m| LKɍ,8$~%wPKc ݳô f jp!־-_π/ˉdVA[~9%mw| UݚU319iL!@oۉ汪p [jn7ի8[5w](o ,p_S˩cA2ww iÊ˷soBPgRt:W30~5G ,Wt,d~|)Hn41sKBM=nރ+6N*X=>|\-!Zć;M,=Foy^eJu9g 29}=FǪg K$`#r0f>'?cW=/#pKdGf'{,LwKضц܀{^6a^^cw}^J3rZtX])q(hH#lRᵨaY݅ǎ'WέR(^5=L!}abpQN&~Rz±.WJ aY%,m.X՟nFhz*;8GEFa|a7KGH! uXxԹ;bʪRQhGf[̻?|P<,N7.MBb<Y1<$F#O!1ˎ3ӥZѬ)9> dq 62M2u%xpLA_/yq7?8qjsi<>Rڔm%qں|9 MkuRztt>fK))kTz"KRFū#%@j} ѷZD}Nx^sg#o#.{ ]T1_@~Unƒ$OK߿XYM^ ~9%[؆17QEYeKtCD4TZCKtT$4tRd hM0dQ/;[SNW^+b3uu y{!~pz?;,vQ@fM]@|5=j}fN6m4 ̷(^: <Xh,EnC T< 5a% [ECW??:ݝl3|/IfZytVIC.}pO8-Қ+|cک}ExbwI[@S Uw_m,o;A;ϒ ppI2Fs@< kS >tUD4 kvbC_~q6ErDڻT(dj5@2{q&O_Zi47pw }lSp|)1'HՆ+[wJhZKd##$Y )8uO̢G1T ' l5>ctBbNz$d$vf}{|o}.6Rz)/ɛ6ʁ Fk<|+mE,`LLI O1cFW?} x5FW՛q2|edB<.OD_gN+֗s# $|nMìϨ hO]e.c^!KUKʱ <"a;e_LJAL~NP\<4oe76c*O y:VۙBΛoEpuCh`n ^7 Zi$Wy\zܣ ] DFd}<0cgm-x2C g[W ϱfDpaTC%-sm3èب($h6qxriI 0W! yXO%X#LdS#Sh/ bW#(:@ܪG2.3lA"w-fx)dp=(=&qz gӲ`s Oظ*GTFaU^Fsǥ]2 p81g 8 ^WIw3lJo} y{89h-=QFK\I0vl01Χjr%햰 G+6wzIE \0 xs(?ullnc ǬopmF^'_ǐM6mDb +wxuE~ "*aK% 6Eq-,_YD~<&z%:t6{awƮUved3Pk XIdB%ǶL/\=vIW߀3g@xp2K;6<.TMeع vm1U]]V5 d~O ig|%َ$dRn %;ڋK}i-`4zc[QK:)…]2ml|o m1E} =oՆ>8sz\,, 5e\gM<'Ҽي;+ 5Sˆ#v : '{X&GZ6tսGL/e6Ab2:/-{\s HP?K}UD؈j(,%;? q(&$ ᪺_HRD3]WV=mqyN=!euhªw}`/E^&Y~$?;\f]VS,57_}3%iB_)9N75m\;B/6]/ oS<9٠wlf%; b΢\p@j=Lk>W3V &I}wAx[/zVo%'W/Ӏ =a场فNXNn~˸5!821aU#p*-;㠒DW)`Ԡ$FXY^n.X&DFD&Kr?_h~2o4c6)q0/w.9XLɖJo~nPߍauo547BB&ݲׄηp غ"?zc;tSh=GYٕIʷjɽ|V\Q+b(& مIjdSi}?1%F$Pk:b B{8.d Dpj6Ehqi^  0˧x]ٔzB1h;iXAEiy$WXW^'jts~:+d;҂FSZp'X93W~8bG$= :l-z n?/$3퉞KYdq_sd5-Hv>vkAbu@0~Dj|^*5t6b}v =0 ݴ?LqӲ837j\ =i?z2Vy*o gHKHXZ{Z=We$Vk")*l*).hatAJs th9$UH"ֺlAb< @xf5/4.OaɸU szMs9~IFLeZ*c}+_6˕"GaLd=1Q/ezqiu<-8^DUN1apfx5?,טsc{E:iVR͍(5Tn0߻Y  5K̤8^Lp8[g|yL4V^.xRp;c#B8Xf_~$˗0\fEܬ-Kl۟B.&O,}n+OSed-X@wcsЙЋ0KӼ\T^UL#l,1#YVMVk®J:b G6(09A#VӇP8ON.+֡~< ppP_۵:CX?A7M7}o<z9plT'Zf u:2kzy|ƴ5cSP;x#\!!̉\WAYf>ٻĮvdKhԘ,hn~>q߆Oz?l2<=W޷4?UA؋]'/!ٺ:ޅD% U!Ôp~Vj>z/MQlٮ_]c^:ǵ;:)m\s'Ҷ x5Y3!I|񡋳E!gUvًZyOEFj:kA/08c.[n2mZqVL FMQ']Ѐ:^Ǿ l1w2kvltu-׀o~Y2h@|̰ -Hi&nȗ {l,/N-d[rrf>!x @\҉ouj.ސC3e+Б eygL 7RG/m 8'<drD2j8=PƟkY3:T,cC Wn.7e$[Ygorzג<3Uu}\j.&7S^4+ /99}E YBZ?P6)wÐ#,'og^G[A5SB,k>9P$Zew0&ӛ-U KtXQXŕ1 Op tNuq+{]?'C4x}gLCbu`NfVBrOc U=3Bc~DW):.$Z:Dÿ!oӓ]ZyqܥEWapWr/h+LHGEaUԣ,,3~UJ\ˉ+_ʽ \as9+{nN`3$^ݲKG#wQ/dl᥀(TJ8E]n Bh )`h0!z2h?Qbn_F0j4pvo=YROdͥ$ʼn++V%m\mњs zg݆̉3GvKɪWG׫ >@BgNtZs3R hg@6XVbU*gv/ɈT>x=CBNI'C)&ҁ,7l=2a7)E:ȁ2&Z ך(hd[!iQʨ^H΍ 0-]5ohVtݾ־s+JGlNR%-ALCS Lڇ1hĹ{Ux7ټxӵ|??%V6pBkwKj;;"7qWj3Tɹ{+W l.LdR^94 fm+2:BU(CS"DSA4 k*].<Z>#!0iLy;bcTp2CYrCbc&?Y!R4Ccjk2hYӷN džUH׎~9{nkP&t6( "Oq~GW{) ^-H4Rnֵt ejy0W#DLY#lgdƲ.u0@,Cآ)IRELԋ&-ݙm~/ss)@œ_p)oƻRo,p?;z7-'/d"H8 id9R Pd=U׎A#G*$ٴi%E𑑬{[8OŰ gos&Ū\N n^0&!w_<蠛ֿKKappyWTnXx*D•:&D qWDvMgV>p"fq s#[6L3e`Şk}G?YʂW{1FICӢƮ&;Va{֎,ltu؞&x+3Ge4S ⅿ5˯A07R~Ɉ;˛h'ooQ#E7AlHIIJ6LLr1]޶}>;H,h7RqKwJ[zBٙ\)r%NX*a!yA:~ZlHFMdÕ 2/Et)Ev9v=DMko2Dơ(0N??e5[`IHQ#pki%8n6)l+jy{Da4z @&BгZP#WBqZPs XnC9'wqk:C;tpu6BTbwC0+~h:e=zXҚ 1n+qC BQWs"_5aX^nO]HX𔾯]wQZC⸽82h*4|G$3ofO7_- W[?tI) \D91If)%XeEPG5IN|*a[89CbjI?K/ =]dD!l֣x؆Q Z~$b_Y}q0Xh$:3ء5MxVtS9Ŭ0*Dgq;ش$!b[=ԇ;Z by6[wY3fY;Ӣl]#: ΅A+;q1.3Ux`Z7r{D;F@B zS3/p l%;zqWDM5V0o<\2jǾv5jm`D5,S ײPL9M7[8EfI;˿Er${KƯ*@d[&$?Sk*zj{"YR?Ue-K\ R1LYF#<ʆGErJ>LkkA|m]ƦơѨȚ7zdɶ^!oPPah6.jqvHKIz$x9Fצ؇f_-c1TWoY.U͚1Nj/JRKYeH;cK}guNPrt*W_Y4 mO nP r׵zvpi8w-)-L/#K_K nt8KZE' o-}z<+i4O`uTHWoaiamy})fqU),'˻˻gI`kɢǙ.+CTk;~1Eŝz܃11æp`Y[JQs}1,w%+G@#6OKRA[; w)qۓ%WFZ!PKq !\ى@/W1~-bw :H% |׼Ւ2o -cwRƸ\ζ"r1:&u`Оa"Рy^fcXL Gڷ[u(2T~׍yV^,TR -B$FMhu[V5I`5|^:B9+ [JNUcdbQ!d/\H޺;s]X{H:L, p[:^F|IUaNG[vwH+A ƘFm@ACo, Q !#Ê:qrGJJ7s"/B&ťBA^@,[UX]}%tF0^@n.jP\O;G62`l t qdܥi/zP+'4ep=mtA2-dl*Du$ ]iz mk#fL#q*eg_ 6F!=vߞF.ӆ>rC69\k2bK!:N-_`#DC_|,+ a?GAJ>'ƘѮm(7QO=_y1A!V5L(nX'q&g'D W69 * |lN W{WZ爌sж`\@_p ѴRtajsmÅW!*a o  'd@f0jtGSEIiz0qam7&ᐼ~J2U=rʹM“ڌ"[-{%1ErK ٌ?xgL.r R=i  U|騩0gXFHpE %SQ̶̣QʽoT7'PyT*I{ 9gCR $8De mrK=>_j*0\ܰM.ԕ.XZDS;k(n|J.$H* pRP{ $W][Hjp9nDξ}\#2ErR{s}'GgLIS/z;9}D d8\;uIF->gY&gʾqK`"}z*x6srL\ ?Q7>7NZ= tSiz+]*NLAԇ" 9m2(SY:m@a:7c{=3x@@/f  ,F$ ]e "BS!0g+p穨 nEPI k'Z9*m .y41yR)ݹ4# ֘ _NBZh6]\,Խ_w@%W8g{yh5;4ܴbthr/i2UL}r O&Wu*vn~XDCL2,jj)5fC $JS B[9-`lo}\ wZ.$;Gө/5+!Mtl^Q [{1pD2ovҒL6=3b),YbU*?)9jO5qmt3z3Ӌ E q ^5m^h" ma1Ey%#ye =6H3a\]5[@&dijUi^'gj#f*ax)_Sk(66%ܢrqd4(]?[U G-Hě3(Lc TgSG+d5f(ceNG Aj P߲D,5yO清 Srmt"t=°pbeH Mni)6P?ݟ\֔g IFǑ6J-^mI-Bl{i4iq I^#]q:ΙpimnQ6ɜ w%Wr>ϦP _ѥĺV`)bR"JMx%2Z*MހmfHx#rɦiDˁ{ YQ\4&;ͱ5.Κ,b(q0c'qq,j`sZ b \('/gMu"3PZ) m+Xvѓq=ͤXjOýFPk{4tb>ɳc`q9?=N4br>t0C8)'A̋SG•j$Gn1",'2b֗Ϟz;4"n IFߔf G`[c+4~?qkhkK2 9YTsES5|"2}`Ps}HE9-*`EE|o~ K)ZsM {@|W clsbyn\V5^* 2Q_"5hnvnM5쌩Dm~%AmS*'%vI]A\JHMyR6R IJIO͢vry.~տݾ6 vF]G%}vryMZ2rgCg onqHrJB][z^kΑw4`mFYU06o!Lp>b0"9F6Jdcw/{뼖h ”r<ߧ*Cg,%!'UTj'C!4EsnM(JHShUnEu!K%1,1߫(?82eAUPV*LgLmIA4+0wAz(Z9+Ia0'^n⮷ǘgt{S: NN+ `%'kZ*{ -KDH: $3(I aVApm`).#7ˏk&ӝa?x>jt3ˠa[*Ӓح~xNps˚HhDG؂ɹiF* ,IM,:\;Γ 왱LaTys92tN_f,Dooɞ |K :#WpF(,X]/6WSWp6{>WѠڱp㩞e4:i5< z~|- K7w'}/eG|))!i0ho5ɞixhKe,F3 Մ ۪)K[/ /O_>(^A`>:8~ R28dN59@J=ɖ7#LoL@V1ݎER?Չ:; $w_#5?1KvyIV$3/bQx߆_BQqi%*z@zCհŲJυ0k3!;W{O`S$/d;8x u# $oصpy;ꩦM}^GLz b1;v|0<Gigg=X_LeRfS`+lx5#6RR.7(+;?ǐvٮ i M|ז-|x| k{/oimzr}h߲|kO"t6 d%mMXmފwD^l?e&}]LJ,]fy ~BYҸ )ǴT-%G;˯c`pC@R Xt]}JJy A4@.0ܔCG_ig݀T*Z!YejZ]x#da{@ȡ`KUɸ&؀ =:|= 19_ko݌eR)P—?}~,D҃1mƻ*s%M&O_E!e3iPGlhh s gc+O69il?\=wr[ND5val1]=n/qE܃{ 3jKfʰJ"ϨXu ƍ~*788BanlPQnd4I0Bvs<9u&6:0OY|>9 o1hA014I*JI=~tUhv NK{eU eɘy'ly)1j3kAɬ󮣓_Z%CV/&Um.^mx@'^xN^CI} 4n~Rz豮)51r`*[Cqf(:؎?y DG;vInj{ľ3X5B Egk1YwSɘ"O\﫥,Af}|} ,j`5?dh8.Wm7yCzYDQG羼9xEZQV-oCvu.% ׺JDʬ f]f'2xaw6lwDHV .$ V}!54Ib}[ )qo!WEJNȺD>?:k~Ng]b ^K>#wD]fBsBj96'X^v60A%ʙq^βMsP VoVf"{Iƛ){-ԉ+c2,+JDx)~|]~e,& 2Yt"F)5hM*ZY6-fˏ\K;E(~ZWW,ƚMe<8N7Y~z엃#zO?tj> XFA ҊuB+«wX:g_<@T*LABNJi1jX^VgIAmMYlᖵTR{Àl:|T7kLՌ8?rz^-$ުzn-v̚C!k~ eAy L*m my-P\a"D󠖢Ů7_P>ڍeA# "^-7Q`h ,ߥQAgs詎4VA2LaՉmScuFǐa&V(Dfn`vpHwy;ZUQ$RJMHQ^>v$t^1,D~ԜQޢST#FywEv'LBGfTY{,|0[7.(40]MGm5aT6ߓcmp_+0w'QhBt JZK˯a}_lz,q|(?~7o*DFg9) #FWNuzȗi54l]ƶF}yoU SMI~H?6{c\_'򀄺RuۥBG}lB^$S%Z&YnsBc[̺=~h.TYEU;BP IȘ.gm{Ž+lmMkiEڐ~`HrPXnba[Hvx[;ُ"r?>s 9iQռrnF>4pyQs"\¡QPOs4< pMt zJV-V#BØ ۻ0>nTƤD z>~ L9lҺ6` fܐ3 5GA`,hn]5z0* yZZW w6 ^ Aw&H,قs8tZl̅-=h,WiRLBk}U4` fadߥQ1M۪Rk d%0۱}QF-Ա.FL9wfnȔ&M0x`Kر痹0Nq g,2;|٘=O~ѶGsqP&R$q:\ :)6#FrgJVqjQg1&?oe%Q$=2jM=G܏Ἶ'6[]6ˀ' 2YL+7^_)zFW{]Y0NŤiImZHWi+oZj EA j ֟lxHW xh1ş"~mH(*=8vTXuC#U;z 40fe]i*|EǏA%h5@+iSDF/t8!8}?ff@9Ut/Eza/9F#lΏ3 0+|!;ƑH@jl XLVK54F |SK1VfӬ^* /Tl0 =~\ȩ%r<;c ojCIeJ3zMyl3j7R<Q(;cKlO)(aGK }_([G(WmfJ12_a+0AFYLL;mq1]cV,8ܒ"ϕɈYd"%l!cs}%)©E >]ExM0n?؟Bf lq/b+79m'x<QWܬWWl𪓆r[e0μf\v-aajo|$Jv¦P8hi^/9[bb0m|#);.|;sџ||هBkT P3Sda:gYBo{5hH$qJ<|2X (lD{uHqRf "KuJ:<Y0l?8Z[ y",$C_;7[̥+/䁒_IwZL~c@4}{nU%‰H *BҦU[CfLOں.*qݫb Q=p 1x8xǕ2<1(7*D9Ƌu:tLsz"WR2hUkpc._f?8q.z! @K{r$,XI ~7l15 Y$2N-Q,-m;aVtϬZA>E5Hƚ~ƉMh!Ӧ_ q,:pXX_D4<(|MlLk/%> >j"q۞7S%YPz$9zl}űUhfV|m҆q4MdvxbFx[52ts]]?NvP(䲡;M&̀5͛V EZJ# tQ$#h'*/~WH+ZR$yv_E ‘gA~vq1sR ًD &Q/F[Y`Q5y^_R.3ٴth<5t/M.L?_Uuv*9ɹOm/+D ֊o[*ek+m)t8,m I]]V3ղ%ufxҮ3KA=&?5`¶;TpI+ÂVŦ7C3ǠᕟJ$lB68_yVB6o~ ghP@E7ELkY.̜Y~(=бjR 1e;3З,=bo%]B.Np$P]9fqRt54i~'L*PCw~Se|hz{Qb||e3&e9 [3R]&:\jwj.̆i \q9)OT_-m695FZ=%cdoʱ7>sBJAc˚PMԅ.\g"$.c6v[ r"1+^y/y]n%4AD/.H}R,j3?]Er;Ƈ$SAWeT^]}8HyB^2sNF\ $mP y8Ar8\g'k^@Y_G{WkKE<,Z4hH,NRڒYV%r;댉=ydC`dpĎ pWrm٩x+p0Mʍ;ʶҟ\ՌCnÿ%BEP̀oRJ}RxL~<<߭ HUR֢T8{y> nBh4#x,:ثTdUI:gt1UBmTwi0(lB J1sdV§<(g ":dbg`ΉKpuxaZ?Ar~x'vIjO-zC Zy/XuB*QXԧ;ؔWo[ jo_QCFK$w/l7"_elpDEhbƇ {eBa*'k)pSX5Ahe`DvNK*eRx "!FxtrD̺ 1+zƪPKU/m@U^t@/-{ F`+ETI&MxdЈ@?8D^QP`$CCE! X3!^IΫe$wIBwKZQ. *~m)x L7լrYj #YJI1s0S}$IZ|Q}lsMFmxȏd;8m <Ȅ%̜LjpRhtv2Xҹ%Y| vjYg.HJ]4i6%nz q[ݏƒ<3)xMAuljm k}jrc&9SwK'-(O]"{k%SUv>b9){?G~ۖ]VVLB(NB SL 7~:}2y泝*P(m+ Ϋ#0? ڐRc@xxX])˹LLr' 2YVInX^^vH)rO 5P܋IL;u5{rz;9q( ݜ#4(=9.h<`[iָА1LxY!g Ϊ]eP48g^i?MAu\;S s#p}jˏroZYYoVPI1CR? P:4^o5FخBz(^(`À?ۊF|\z?nJ<"#yBVxg;%?" !/=QkNLY+PXD=C8{]Nu"`@]&ù0́㍶+ץ9"3"dOh6Rv#}(_Vm,|4CSbr>RKOӾ+-F#)ɓh#x%)cD<&s1/jR-sK>ePn^u ʒ.`n-Nc[oE-9ٸn3dӤk~/qQo b dԜ[W)]91o v9n[ߩ@kؕYҿif&/&Ӧr58cS ,@H#\C'$Tk>j0'A-@pZ>+hꊞ:n~7uct@-0n$ʚ!B8 2k4z/T 9}9{\gk{ǙQdB3G :$Ϩ1t) ҿ.>fL\UŢ) Byh-zg1w} &{d`3ƉNSΛa+%]g.e ;-}t p5.Rj2s Fg1^ǺFp8j)G])_̼q< \}e=?Tr Av@#nѠpe5`4Ojq 3@ Lpʦ"b %.gJ ZI5U7mLJ恓@y;d<8̀048_O ^L 8)2ՌVGU>0|0*7wmH=j<+/NZ*.!٤׌1[~mEh# /:X5[ˏEҳHХۉV7>h&.gFeá2KG}P/c%E֨ ꔈ FgZ8nkg3@6R5, & ":zD`zIQ%DuD=SiC7oށ%H=\cEӪ, "믨69!;#.6>)hC$>%2&d<lG3Inp=靿ܧD[lg4pRHQg IR'LDJ$6ph[H,+cIU?Ӏ 8^fjșLJ_t{RGHբd*ِAu$ԥ1x>hatHp?,Gհ wY!AS#~Oz[caq )Sˣhʓ -Xᕣ(56Y2,_z '^~joUy&"{z\>9૰'``r\a7 /r]P{[Qo*30Cunؑ~>9x_匷cXe[I\VFIC\H5E߰bejg8 L7UrqzT6¬\y)H))4Ao-~vU@qmmgҫVì('YǗtY*֞n'1#=KXJt#9?af 5BWj/o;Df‚m`Iܕ$RQ' Dj_[oA )jG8Vf8$qN91x8#);`{^eو˶VAqwO0lۗtb![[tȕFC`*"a4#u*9"UJJe.ީ TF5"5KSŇi$\ ,qrZtHIbneݰu0[J Cs*?gǹP'075'\9 ~㘝Lj]+LjdY^'k&rB.:墌ԦQqH,X)Q_l# UYn帨+m^RYud!vEk0O龝/'YB\E`gEyp,%-,B _ os[,֥jd\()ͬgp>YPq!RR'/Qh@a iɆbVB~pi+5kB1`t~قF–ӴOv~wu Zp:\J,Å~YfŞce^z_:jG|ηKoCDw+vSZaJR;uq=N`Q%A0'epcLP<_wou#c7AoGv Գ-Ո3Z*ӈ8Mp6!~2nlݒ&-~ܭ=JY ͊ʽe*82N^ęFͫ~5H&(UWxqSjۊݪb]=-kYjZڸΜT~m"섂>_UIm9pl-M$েbzDa\ɗ&_EWJY-PZ؀?nRNN IK wg ,b%q G=ʏG,{sWz@=xā`8iť*X?g]["iqFJL%$'#޺ ͺ,m!)`G\\[**zk-ʽi:&6T4EStb .±GQ\dW9, t4d/Xr_<8_&. 3ǥ7s=GO-&}jf{7)P> }!ZgNDsj醷hL[sL`bu@3< j z~R(o_r8$K!S@SڷZe}7 bZ;!(!t| #ӄE2Ėub~mH\^*K_Y#qy@5M/^r3 mK,CX(~vX#oAf."(j !q Pw9@5֩@zɩ'#2r*2rJ@6>o-:?4= oМMqh\`(X5nD'[6K+P鰚*bMR?n\ X2MJvX[T4]2hԫ>)*āeuFU>y)MV?DQj2E  21ݝ iZ n/? *arde(} r~/kӄJϵ*4rEZZr׵L-Yk5:_.f8LxGx=d.HQy%1)6 x=n< =c#B=c9Z B3+T1E]Opͤ V,0:S+Yƌ84Z;:y| =?X|1Uhe c^0Uc`^& )釻K 4w@tZZZoeZH+ l4Z~%[m.=')1 y/M'ܳg۾^Kf#gHwxQS,p{(%aQ4˛Zȝ?2Q(o'(Iƣ[j}܏?Q"Nn-DoV]pB8WV 2sRK,+GެL5qo8K3] ~Ae{"B(f9hM@xg"W>_:ݢ_I$ڌ+Uv66Gu [ o4FGa9Sz: j=`V]mE;vT,0ATu/*Sv( 19L0Iad# `=p7hw0&]=/T돈gyl߃S 'T$AQ[qeMܗAVċ' zxk.N>̆D7M+&HNiGjf$bhĺO'~%P(dwZ]T~ Mk7"B@CpI(Vz㼎m㻎Δ6ݗ9ER#R,`@ _I"z>Hi[Ɍ4YSe6ar !yCcۗ[kۑؼؤ2pHBU׸-զa"P֧AWv&B9T ,Ф3U,S79UY`"6\w+E& ]nGAų鸲4GTa.K _/jcĒaaݸYԩ"cvW:M7soY:fal)ݯXOѿ(1U$__\̸[SyiL@ vhe!,yHM AFP ȟA=\c{e[1xwVWaB" u,6_oB2լ)!RuyЈج/_Q B.BS*/qfܥ yGzۇ#Q2"ɱ8^y 'ýsX <нrBnʻJA/[ڸjǔ@dU,|\cJ$ߦbX&.*SV7qH::۳s7#ԳNAkI 䜓*?Ayayx-mlL250yUJrdRҝ Ckvʲ>\s J2XR7.WC>hL*$[lhg!%X9Foie~r*9 6!kkZw̿:,jm8uv_( ssg\dHq)6ye?N# uA+axCH"p{G- Yi^ͶB`"Zr‘$9 Wr\t&̰I[,4.!ВN&8{y[4"r *J&of=Nг4CYL׳̲@Ą2Ռ(cO>OT:)=H_|?j6O>5o^o{z֌P>|?{Nw_'MOW/|?=j_)m=NO_Z~NF#ac?yٵH$,UlB"mX2r;Э>E~MpL.juW wY?)}o`_*. 7ezۭ;ÀC ƽ4M#MuXr)X|gFGHEiY`V=!q$8Bxs(/^Q24h0Qs.Ãߍފ:y{2*w6@|QoWgvґ8PZ rr8^{bHQuaz7Y|n>bAylщ4Xj125/ k!S҄0LS K ^ g(3jHl%y ?YU^/M%6jcZ<"u#|Png7K9r7Ca`ڵB;xit}=D9 p变׫ed"m 1oHxM-v:C,6{8[o ^QrBԿ-]q q:N8de3 s?B߭Ħ2 #zsƄ`'_ 5W! iʺzw4kS qgP}$~ &^ٹ%^a5jtɩ-g^!g7!Su{M|͍G}e!zWv"0(͒: u0 xP (lq$}ݠIPhc"rQ&9МX?>vZ |OZ9nx5'QQgu]Q\B{#_hN?eg84+|.GTg<;~ ~ "jˡԐ1~WR`^o0d*@z26@Cȇ$$ x7 krx(z֕mhUh }H}e5oD ]K Ŭ~ccJo:GQ0t5 p|o/Y!e!VT .zWot[zFP^UUIL]&cQz]2:㥵4o=`)xôM1\Ar::Ӕ\XܑP5O Y"L.Җy)a):!a-7=dyKjzBPfOt",&lC S}PJv8A',dWdɨ^!&f\9]M2Iǽfr))gC }aˌ_Y04}\e\%.<OTg;6>b@ę\jG%]0-ñw>*UI*ôbf.?fFCIES֚>u SuS] (>͚ԻX1fuNAjC±hn zj7 shBA#1\̧' RFA a+²*ٿG$4wf͌=e p$8_bYɫ(ykȬK.?!/O0r [˼RǛ=Rwbjr0h i ݨ K%ЯH  9Uz<{e_'K7;0]̋5ot9Dⳁ51r4*+UJFr^e@P -}U^)0;o͕a5`Uxy6n/4?xvx]z7IšӐpg|×cvĺ rd4Wmz)F5vdut6{<JǺ'%4q4cA%RRt~&iR[P2ׂG e]"}FHrĶQv;K\1ocT&؟h^$a ΀/eA*FS(KJ삈؜#^׏" CF ͨcjÞ& ^}([J`~{Zlp* @2&eWnT_,*gRE%2}8yȉ[®ټ:(klMsSOonk?7kl5S8OUW @^w5e%(I"wD%g.5z oނFJWe$wدQS+e nEA,t\'.E% zA/@oj cz,:!e!Ȅ1XfaG5K6On&{&vrnV_h}ѭ_h0XtՓ$cKgB˵ޭ1A}2TҡPv4^?_ U phVd ^]/:O`NAS\GFK`LSH-ЎO˱cE߸!T` ,WH( @|^le a:v ܮ-~'WxWN2$n!"Eg|YAŀ}&sZ)j)?lAcwj-@'#RWrVNjnfo*/HQt-yh" -Xj|j @>bXf fmw-_*X@3BD\%@5$?i;R6m*EH{ @MYFr;<"8\6%=eqm~֮N8.Xvn^KIR?,_fDx[@%z^Yfg"Ϡ<{|&/&Kٗ=򣉲 o CPlq@; =!D(v_#7"0]޷30WuʓB ZYřC8zX*';z%|x@*QMFS}%zYQ2-yC{5&~O ~LېC%wI8!)3u'.`'U~/鷚&/-s$f[X}D}0L)ÿhpC$%H]~uP"EAdNcpv'eJ5r!hZrn fa CrY["dpu p$i[8IyjXwe7g.. t/?qƚyDa#xw)6.f~]HP7/ݗ$a#դGWje YeY/p-`Hߨc<'<҅4yぱc%3Nky|Ҷ/zTYt#nsQ&엸Hħ])g7$"b<`dR˶[ 6޷zX w"& R CL:LeV@`؂)ޏkM_<v/ܩ^Cׂs; љY_@q  aux+v 3Z&$YrKn->Pqmt&l8B[nro6zt-j)7Y!`MV)W:C9A,Z}\ Wȁ,c2.lqqohM=z`6̌P4cjv\{YH X}ԂwnAou1R0]-+4ba#"D 4$W&(C[ >0s d\21 ?PSӣDkSdQ&%q;@*t}37C $GDG=؃i坘 s NM𞊒IbEbCXZ?6\rd2[#DQ\zJ7v'xCEl{Z'k%B,`3[߯qBއad[%3[{dASbg vն!:<>#2h蝄WD.:`̽Y,"#JQ[CjNv. 61 {Z76uqB>;ry_k\Iu7mMh#Z7Ngujb%[2J'n13pHPvZI `3N#!m9<%#wR1F/Ijr.jB @in6ڦisՅSem 5[)> 甶:~M9wSuS^lrk!vuwytAc̈́v8wJ=:lQ;J9G5۬2&R=93(ܾ/O:sfHWf~4p­Cpku%g`kL`Wȝ`J~ѨMIg-//O#h: ̏ᕭE?AF5OL-d. ͥUUK{O>Nl$_A鎴d AޗQY:u)O>c~^c ֳA#Ej>vEsr)!|YCC秗FHc'mb)OMQC[]f"?f3.s.^ܥ^2b߽YPER3dL}S.Ht A6DT>-[.xe"aT wwwfĊPdj[&cEdxmm܈i`acԲ"t D(.fw}Eذd`p&L)7sTo4Roo88Z/x 31k<.I^cq=/9mݹV8RU ~, sm6#n)<`g䪯m 8w+HurR y;:!m<=ҠYNj\cp+SZ8{\C63 KDyt!l830e[CF<~b!L+_2evi0li̢-̔53mMʯPlZ&D8)((r3eDp9%,q>V,ўq8e'c8s@ݬ<Ԝ7{}[Ef_znK 0~egSY~P:Uk}  ߭a yUL%(Qu:4d^Wo3p4 qTorkM0zoڗ2~zSmh3WN(3Yn }b> (TU`KBb)u)oY:ӺC}ᾧǜ0sjq8s2v/lBL,ƹ/;hM<-|̈́j4 S~W³ۯJ8ޞKp!"J $ŧrpK]ҀV ;]dN+c,Sg<)?cd;/adv3gJ%-ʌ\dp褪}e 1|wr0Gknydon r6q lsV9_j^[ Pb`^8wTh,.s~H?=+pV63E7koYۉp~9]s!6l8УIK]nθuz ]ϪL e(dRd *lTv$HlQ;ުvic"~ff R`Y}.p}*UV6dJg0>-G+*Jya 3|kGس;i2/SǫE]{T ɓhvJ/KL{"+H= TD {5I9hb8wIz&7rn>=5U3uB.5\e P b( f-L/x"0OIg "'`]Kc\a><֙$x(,> /⨞N:Wo|w~]?Ӵ5TjcY.s$v.\ =Ur>A1@һh$A#9mfQAҐcG>o<Ѓj"׮U O|aq+cEKJOsj'ێjג4xG7棒ؗ6C7ǜ&7Tk[SܼMuJb0Fľ ȔJȃև yfʩ쥴ͥ#xJH>e mI:s, `"F*nGc)pXYXɡW}~&n!K*NO͟k&Æ5{2au* zxgA_c)>('T@੄9R.HgɂQ."DZj9hkh'PN/ Q^T2yF}m"R=,u#zPoԙ8Ω$w֗E[yu$7o$sIKpg} 1oRm #-(U[ؙ$e ξns(aV넗vE%olvy vȇ_Jʹ(;v zH &[cHh$shI!ל'A/Fd4ߤ'9¹.#Z5^a6EO6$ˤ/l|\C fUW,T6i? x0ZSP*(=/塨SɧR}E<~0ki͙/w:!ʪ႞C}Mr2vOBg}J)]ؗJN7bD st7^cWݜUKd<2 !NSmp&kꭎsnf T8N{5/#2uZ { ,V@+?:͒b񘦈^aJw h׺[ Jh&ibKo GʬU{d&ec`AIIt`>9IY5U3)!&<䳸U`fL(?8$T>4#4sg:b2N%k0 XYN#nc1sk!9!OqƳ<##ˎt6KvK,'K@I1& JFIX,*D g,tk AW̨J p:%+ /YD^I övnIlE&VV&@[+Wd(T@@߃3vA$#RO{#r&RV-ntPrKv$] ڗh^b ]ָ꿧ltfRI౉:˕L̀= u6tw`-i9/[4].\BSix[fF#Ǚ `?jrRr%< q_[ YB?-;*~]bwBƜȪu=B'چ(7HuY݉쳦2xh!QsL8v=٢tFd=L["Z!Fn%隗U&-OVдF^Ϭ;Xq$.9VJ o`yr٥8<8j'>L&j2_Dl-#ۢ5*cSк'06>;/^X~4.ݼTD O"GށՓНɱ~{Gۘ(> HB71͊1dtR F !nf+=,bdbuYfW z6>QAHB5P#*K6E8 ‘HtiY $VG2 @I$B/ ajeco|hVTґ/N rXzI+2хPMt)a>NAJw3UĐ̪EDЏ\_W"`vƨjI]hX 펂"3U |㼏55 ;ru4~Mc0mc~j?vKzOV3UNEE{nB+ˉa309]^5Yѐ%UVXb3q&I 9#G`KDfĹvor︸Es-C<8PgemRbn^1Dg"⥾+v0@9WA$)zOziLbcn8=lmBf&ըe]UT賭`{%ړtR=`, ߭^@xw;2{3R&Ο BtʻzZKJ87o~cq xfw"wn9Smb^r#ֿ qxE=t{SC6$111qsMd-mw)y6-FF;W ns.9n@eŦU,l$6 @M ;Lotd^خ<ӨiKVgN.?ed9jx'{;q iw+Z<@}1h5jv\]=@iwİq*Y U`{"#-KLd HFoKMjFlהFUpw5c1̲L„He =?JVg|GuD5Yjt{Ow%5=7yM.=i;.CB:~֤]1~V_!'ҥze>cN5Slw?|ӗ9,9&7k*G7 T`8RL?$W"gx6 Dqu\yɥxV H4YodXppK90AeS,S SDi+Fp6~U5+Ⲻ>iMPcؒFO ~fu޸R]jR.j Q_ѡ#0%IG9h=pRKPjWODlX T$' ¿@}I˝`Ej|kTbn'?qGUOVh[cKD;50L7wsPqLAN!nd"gK zHٛ<.#BRN"*!{U^SIrf !ljdb$>Du Ϸ{3ebt)lJG(>` <,WO!؋'K0ZrVXRq]kֺرD;I6v dݓZZ4>keHqbk`; 1M;b%\'|i-BB{%֝CcMErpP泸v5%G$늏5nՁ6 vȔAd/lTQ+XGfCcg@1ƫv3/kT╨ -DQoYX L!gVsʣo8NCpȮx9XcrvAQ| QfxHn~8iԪ 〡*L^Z[+P*{;S2;}Q3CzFq%G@aE_n>SV?*&$5n]#ú ?:c56 v́ i+iie?`-iO9':7 f"T6w=)] ' x7Yo"Mh= feB18)K^6+Pff5؍ܧH; N:R:`N'wPӛ2 [7]jj:+Udu84پa&Tg%q*WM_H4rm{ :;:2U Km~KF!'wvOUҀ|1;LXmd_H 1"\]~aEdϧ(ݥa]熪-39-!Y ' l } ԌXQ|5)p!YS:g"(M]\&)_'&6 ө%JA#^ H̡e)Dg9DS({̔I={27NhGGѸ@7:WvrI݆ML p{!>LvRvKzi`{Q;-3t*+ldOZO^+dA76&l #plI DNGC-2doPkuVa4[`8Kbif5O{%a2?ȩT`y+vg8?!z((l357Gj\'|-ǚQUS yh}\Ҿ{xQmxO .XF.t}n`˱SOi0湃e!wGWy^5kk╉ہܥv<> ths]_'j_c M_HcG2Lr(!l6R_JM/G%U43s{:onFo3SԞAT_Y),YRt}8ґtem`^^~Zw6/\xK?4$<`mʠ;D[e[E xzÔmb=O!:VO! ''Kjy4Jߣ"8{޸5H7B2RhPU!}a3lZ*ǜL2;;`HWB&v EXο MQ=Aa[5#:(sr2L6vJ]gqst=#g V=3 ]9M{H6ח Fj&eGɶyvR`g w|F׿x "wַZϏƌB{. Mb{=4F~6t֎cl %gW~@{C/J(jjJG*Fc?D`,^}9߇T%ܓ~vMI+PS٪ bh"M`Hh.G#QI[G̋"Z A*~-T0`٫7VL/|`̴l[3Ro@F ߼e .la "̗CP)&P0yoH31p2VNFcE*'Ҏ ` |Rr76-Χ/=coido=Vмs..zLBe8WfzXX Gu煽$+@X )ńSj(ͰތzQ~!tH#|i>2oηOy3mfX2Nrp 1!Z cPZ v tv$nb r4,Y`9ʧB?mY3ʙ8q*=ge9BS~CKߨ27lTtDYLW?6C˻$,T\ x[YGǹ"|Br]R븈j_֕#1!=WRLJ8hp- vz pQ؃%FR)`U\qx'tWjk_eŢp1\jL}⮉Xr,䬚G =kۃrO~;jfS~~Ϗ|ۨIIÅa.ԜDA*wj"繇6~jPT u72-A19RX#(`wׅ_$h䧯t܋"]?y<HuWJ7XC8k8QJtgujf֥tmlBJMiAm~^PŇ#8y>|׿ߌݛI*fw&0ڽ˂X4}-aqcݏ22!~Yߦ5ܼuΣy!zC&LWخ4l}n xϘtQibA*1E.Nkm9m`=G#q-6#ڌ5#e/iR0Ptv2MǮfch lk2t6A +rH*BcPmVW昆")N/Ÿcwǩ y*cf1ڲ L΋FyzZK[O`Q(FV(r[[7^ù,_5f  )hiĆVEouVJ}K+*_A,, Q4l1 %j9gφR_[#8ǚ*q.MbxLN_Wʫ4$pSLRHzn%) R B&| sqPwẤ9wK]40'5kT'ef6aZ9n(KTeǙDz9.*eK 'MBZ ~} )OB[̼i򐄑j{_ .b^\ Y@L U%Y;/UśI>mjs k B ~ng>eoܟgמe>U[ ư›, #},wmөPY')`xjT3՝TӔ라 % p۔0e$f{i c*}nIQྚ(:8zFH\=(7TXש}]VРu]( Bホb "i GK޲8bW6Nx?߄H??w^|ХP$O6iggécCM_G`:>WI^+8s`Ah(οXQP(ꌆ#ޡL'1au;ۂU]X[ C0ٕPn4bq`b3\J* Kܵ86ÇH7U;c@0D5M s]SmBw]kk*2'~/9߆ߴyN9&jBoctM:|&O{hkz!g$`{E,HU3C<7Kkn[fXmoYѰXsjQ#J@VՇqU;ezQ%;ZHXm vQjaYc8̉]yYjbH-O OBfFv?bD?^] HlHK+JDgg+$|H8zgr;VNr3V^t[j+9iJHY+a}Q: 5 kh sp.t;OP(ē` F`&=EYR6FVCZgtw k !JQ̀Ƥip 'eJZW/i4䯔3>jcbKd;}@WzeƏ؁8@.V {<\I jX~ d6SdV;wda@3Ƈd<* `RŒ6k *옔*RۯrMB~u$gj_t wb-Elm<|ƀŇ>3rf{>s{c(JL,T>"^S.AlH 0U9f]X`Vh |x7J&20M?HlHCB0P>&~mJ!켉hO^-YA~铎:ke 7hR^gSTp` D/ |ߡ뽸Wcw5ሐ))x+Y4Cdlh%'C :C"sRBl@#A|crEEASڏ9Cȱ ?yP71$@&EW-^F.}_u)c ڒ2*%Vx8r|Q ?0d^^X?!ʜ(A`KwW⳼-[}[j SF`(FrE1@:LP8Ewj>a;Q3$b_\ǦI!xMI*-un-ၨc64r@:Cͷ㵇 o8pyrS)#Bꀖi,=boud H hqGf݀vÅgcKyu=gr;㈝1YD3TUnirH dh%48O-+z rkd.k1u*v>ѤJg]6QaR#HdTΎu>q5G-Di>1 rLEɒ EW lmNˎ ו`;YL$%[TK-9h]&%QaB;ym˄ZMѤy~FC=B~Yב1\Um`F|#N%qߊ2wy6C^ ѝ U!\pV'jB)yЍf ;(\aoD+p"c{#z%ݙK1h]%(3_xt:z&f"thOY٦uKrTUvڂNR(P#FR3[GbQx,T@5r)}5a(j-_=};RUdZjYL#N֍ ` jY(":^IHJz󓿓o秕3.=&Z!gkS!<ӧ&-SKp)@aez_1g}BncDగEXx#m&R/Āޏ+<wGq"A:f2J?V#fm]kN9[cGN.0>5v$b*#:OS5)*MF)Д_ZYBtn"J NfNSyܜ'(1Nά7b "\-EQ`/XQOoՊznPJa7V"\oNOU1֥T3OF87ބ][-AVhFsJI͊1ﻞ;Xd_B&ӗLES&M4wқVRyI>t W8ܫbe^wg~ה rT4'q-X- n_);'M&G<|hz%%}3'{LCV~"keB; FR rGR^uloNU {ڕ9f;E gk LWcO x7==%'es/1B#h9RNkB˅9#cw9ZD(Qΰ9Z])^3 s lO$J ♇5Iu]>^/Ḧ́j%l,yūΘlFܖe* rxmv}{H|k'~yc׬vY,m+°'67JZ> wMB6$Nl|G)q'C)%geɪԙ3.*uì:7_@Rbr8!쐌ϠZ@KW#u"b*)^:@x)X ^ߠ+Pt0`]d&&bpܧJt7gV#*9xr3O)Sdh*!񣮥>LBxz0Ai([UZAjO}O328@р7EÆ41iзu[\p /ńO&L~-|zT[00%L)H贾EMZ.&OS}ySYC7t۩(m8.B{]sHxY]/L.km˃ XHƤJ`Q<!`%d^ow+<-a3,f5Ig_IM``<:lQ9[pnA=n` ÿ-٬^EP=j"Io͹VP)mfڂNZRGR4+YGeI€w%~aU1:voDcdz̛)YՍ!TTe3ZS(0\t+h,#_pǞ]iÁ=x=VOR6 P ZJ.2IݫDRaxJlkd{{Hw^Qy-Omhp%m8USx)B}Glzz4-h|1It_&ddS!;'30?>| 32 ?ܮ }xztqMiwqdalh$ L8#v6ʈjG|S9NjnshOv]CfƋ?,yր< ~càcHBGiAYfpI$bMiwɔ(ڰL3!N*#=%SÊjU@'e%U _>_j&'vJ2س'.ըfWڼ؍KnxBiNDU]y'}VJh GQ)^CNI}7B %D %8::aJ1}ߢ7Y(DqZb9"Y{H84[lĊZ,; P`A8Mec4H=0T1<SŦ;]N4X#C瓍4k9F &eHܺ܉feRߊ:(z禑B6)m! c<;bŝ#[@G;mF)Mx>BCR8&|x Fس܅1)] 0P 47lpu?BT #F*)㳑FuL8Eu=ł M-&}$RhP䢃mfŖeC9-"ȿ73%?35V?j gŦ$t:NV࡭4r7Ak6d hCP, e; X~GWMkt.wt޶%ƥ`qz` a &eBfR%w> ku!H>M!m |Tk& M j}m)S:4jL΢> < pQ{W"<aXKU<Ҹ JT& s | [bܵ :eO2An( p<ܘ<hJpelOYFۭ7X]6‹soxF` :FKOk?uR[ t򳚁ּ޲jߥq÷Xubhl1#cvT;qdpu>t.i? )СPFp*MԢ:!Ja aEAE॔; !FP_[1SxnP8J ʫDOi$1/O_oGR߹ѹiI߽xvˠ;=/DQ7iԜfd}O)礒aE1W ?v=T͒U&&Ws'A +JK^R0vVH* )/!gD&&Y0,gČGI`Aۘf&Ya{7GnX\r42`6p~8.ي;@ /CD)uaUhru]cWL.>=V=F'=o C`f̤02Šeh~Y}J;E5pig,MKuk 5#E7s"!mO'MOg^BO`ʢc~ /F|`~N'Yb\U1o37WLa&ʾ՟Fq*)'NWv~sT^|΅ K^Q aH)p$bEr+O2 wNCbxM42B|K vΔ5D%BBo9U;ퟴ{$Kl'TVPi̫ 1RE]>~ G3߰wYC bd3>袍ڲDqyR /҈" H$Nn&Er*D =˯S:Lx0X |=|Vg Z4CtZEV`0`g<`'wdp Uc{H} ěXb3#J ,P b^_H6ԓ.9)\qFt!eyR@ }K( Y\Կ;@FDR-`Ԓv)-[EeVA _c^JfS"=Wlyx+wߖAۮ֕"}BMtkX{6tY6t7'% |ڳ>i"9bI @%sXɋƜ>j4ǭ0EV,x|Ls_/v yxVa(T̆ggMRFL6wj/p *}2hkGaW=FoG̐\kr7)iV+ޢ 6MF@p7_.{{0|`Q6&A#8,98E >Y5r!lwk75bǨdI͋%-[ea_m LEm(͗DZh!~t,q</M7kBBƁM.{g> Qx^6kT Gi`Vb.TpAs ьm A&_Kz,D3/wݴf8'˰@\9tm{TbWo4J}^>l$9i\-^ 1뛉 Bν-,~Gbxrҋ~']VL tշȌ"vNhN6鷹A7VjMܫ `KS'Ai-xgg9;Q, KM@Vb}`.}86H*zI=i ӛiq!HӄI+kg w+^$D`O5XeYǗ!$(p"3nt8LIu&c)> ,S j CΆȡWwxNiQIftX%6_MsJoC+ߑ4Ʀ>3f>bO(Q+/Vtԓk5RRv1n%̪豃LdwvO!I~32=!z`Uů/r RK"Dq=d g#=dmqd0*n(v}|j* JȪC7B)@%D6,"wI1snW8p2HguRPzÓ[:+ȹӫp<#mӿ+hM:ajdB (<+q, (hy]2=Y->)U[|?(MFasGQW~8BόsiLm' 幪 ؍]K'WHA&&u sx70fY,R8seTl^zpDHu걨3m&͗l)j޿IR/(Ș.d9 6Ř5Ԃ-}CHg},Fr+Vmˉo#V/`MC,J[p]ìԝ/'|Q?-wi`kyBC1/c̞It5O?yrډv($$"VsXgf<()aZ9DHPuO j(XN-ɞNNU#yIF\&]TP̚d:٩ |1D%)ґ#vn(L#X{vj:)l8^ br`u dy^t?ړ2tFVwz bmm`h(5#I|-1_q>)^Lgbvn<#wNzRe>6|gJٖAC  5eK*266eI j(U+_W.kU~xkL~L#x1wMo)ζZq`H~k7O'$UD4 6S--jϋS}.G9^ 3$Ajwnbu)eɺby%a X[z‰0|qsX=m4r֕ Jq۠-b]h̦>h <w4&VȁBY[ฃjj uqƫ]oj@@̌HU*JS^(ˁ-McPѵ(hv+/H%뺱f3 м1z4U30Joժ1{m"wFOI[~ u9OaN|)J)q>~a'mRʚ/RS2H\*+U#1ۼ}:o\?B=&Z1w7#7z n$5 ~)e2K[2.'N:k=L'%gI_O)&Pb!Mk"Y|^k'qS" !ͮq>rc7A1F nlE\k61?hJyҟ 8|\$iux>8P+r "is=!^] EFͻbrd $WV){"r%bQmkO3לf{qnGSI0CvX%sFLfnYiDaZc%$uЁBB:?# y22[!iv+ }}eQ4cYoTOuxIڐ;MKk<++| _SHq@N2 8[U:zÉBVWР %4/A1fvbGߡщ&^$aBQ&JGɂj 5C~!?ha=Ӹ5_Ov[ٰv;w!XxB⌡τV]}A7&gmf ܯWy [-Wϲ5琦\BecؠS| g;Bai5dڊHrb^ lʉl3ǝID \kV𵑕kBrdj\\=qwݴ@xk aqŢހٗlt)"*K&w!xMgeU3zbv+_)Lm6rFise] iqX'MߵHʗHEXS;Ws0vPHMc7 A*1㕃z3ToPҞoW/PgδL9ݾ~=J@ufju~p8J]#| $~s!,٫WȖ †nq}WDih6`G2kgW-zj%(aNohUF=^/0oԹ m߈u%08 ;-Ft*ƚ|ldGLjrN\ܭۄ<_K$ > )"7Ke/5Zo'vޒ0ۜT͉?k"cEIf7@f/˦$~O`TR Hu@=]>ߏCE'O?E ^z/hUmVA4mֱKv(0ђJ(Ȁmhu|1Y_n!C(9>~' pLߩztw@D]Uȷ)y{C֏y =Xpn*'1Ycn"HOP Ln߀zl5Ww:j_H(Ț\(*aqHDjQJ:mF$Sa@f|VZ?6#{`eb=$%S*x(9's| }@%fmz>S'6B&ڶRlʼ=G9>1RLS:Mht]٤PXEm0vdQ$N @w7MuAsr֘b(6L)ef%h1]^S si-KR#e"TjKQf_gJ@ʚ\ʷf28$%oþDuHJМP /ͰKd\и;=vf8ߎRPc,a`1/콡 J3;ϛQ= $)# r!kDJqX1^硏W|m@i$]Zo1޿z\qWX+dCA_뺂XxPWlOo~ Z6L樏;M QEZܚgؘˋk粔2:08J'L$dV34 9,?\A3=3sQYGQbMhn1a3jl @JFdp}%F%]ۇ4)zUg_8`ӆ6ꭌAKW17 v,IP 撂aTX TQ:qqF]{n)JJs}IHC?N 2,>!9 ZQwWܝe=ut{'[K^wS% Yj®ܮ;(?dHrSPo,A4KvYEz0g0F +zKkGRPb?s1J :@}H)6Q8lA Al˶^w_w̒N |]zF[4)Y&Kg-(bjDv˹.^qK@f2Ӕ+6|DL9gcJ~T ^&WIT7wÐL}GrCJ)Zl=Ůo3-+ÛƩmJ䑳 U,AnZJ521:a{@ ÆF'.SBbT;+1=.3ƫf%DLX 9Z= DD '*'5|A גR({2_8Atޝ/5a2GNe=CwP t..H/#ʎ(}aLݶ8B-(>2hس/a_QMZۡ _([q;z I G"# t'LPS RUݷn+%3duN<O%Ha2 7 IvI-Q#nۮ]TG|.} ޻^abžXI~'ve듻x%luK)_v"YmKݵ]d"Cf{+skf2%z9] X%\<ȒWiN]y^=nD_θV{tQvW KϡYwMw"k?Pk!Q+1hdKcҕ'"kѠp]naArR"`sH ei|u$e:Hgaޛ5' iHKJaQ9e]?SO4 "ZM/ֲ yJ4/aus0FY8we̐(mEevt̺9bV7vtW)`aFV#urY땙Nl9@d,C٭~ֵe(m g;["_Oc'\44>u0EPx?@f83M]mq6wX79;f;IsA~^\@'cj*F)\f.0(pZAԵ S ::N!+E,G%o[}L=#,b盕-P51ͪx b&qiDc] 9S /#_LL Z'gCM)O_SpAހ- [sم/eL n<_\A@e!t?a{Lj[L-?Ql.)%W]w!mub,VR8TOT1$esнhL-P26O.c[ Wg=_W(~ n9^O ѓ<BÉ+#4 ظJR9$8Bkڑ=,+SGЅ='|"a4?Ihj6ʋïh i31?Φ [~7EJj׫ ߤ(bug04XK&#;4F"Ql-U$&b`oINzKu,@#J,ECSgTz${QYooRju^;8?cHܨ7bˀ"$EŮήCDx^y(t02}tGG@u6MldăIU.}\O%Ɍﳏ%d s VZF(юhzaL(<Q"ۘX*KS꺠UhpnoΣ7l\2,4]^Bw; {vהAw%C"؆~0H}\!`y'! Kt^ FoV2PT i)nrCGT3Vh"6wcGT:쮇*~2&u!. iqT*h3QzMʟP SH@ᐣJڿsxi`{  @029W[2rKqd괫S*׽E>XvE7z.9az4"T}>qDX O+$MQm@|eVrl@' @dϖ"A]ژ. a.gsEOhdjԟ'C&4]; Tb,L= 7\Ek%* 7?\3dRD[)X9-Q3GFwS :h*ZzA{BGw;s6t`J|ZӒ zB-fܐ?\A*>Q .Pn E!|N匀镡&?1thꁟ؜ٜR⍆uCmҿT"0=r=)q{BdIfCo|#G& ` J؋Ǚ'I?fwE^,,]Lَs} 8跔DLJ{G._ pJ6*l2coeBQV}mbD亽u\"4' #G .xg1]Ԍ &Zڑoj%Wc¯Q4{Wbڤ1 ^ΣEHEwGV}vipkWj2)l-5I͜E6ۓ^m8$ l+c!GHgV29⮙R~߆!$V,G7N U5KoaZ ǔTslݯGWBH8d?mX Ր203!KȮdmu5@t$cATQ|X!lю/WSrU؝Ui5%"R)aԨwZh3 O IvtE1ᢿ PsEj wqEZmV3YNc@Q惴7c>#(u3m 32((SbA-.oNC}P>@ZH*%\ *|mK?z"Z"0O}DOdbj~YB~8e5hc"?BT sK~pF\-OˑurcQ >yyj1{p}1[ECjFhE<)M@2]Ob8AfC%řV!t[LK8$GA9֬( +"1<ްn9eC;{I>mr3@%FߤpZV N!I iGUvR Eϣ "lt$cޖYɋ6IDM3! "ee{M$]ö4e<{` \f 4ԶyVՠ *VW$_rkeK1Á-"|ݺUj^0wzKRM>ۚPu< pf#)FSKYmnR'96겢Ԭ*_1#F \Ǎk: oz1 M?3bdBуrӋćW+na5' ā鬟OmVf\ל86Av;RTjBK&{z.ЧŬ1/`y]hb>'vL/ϞHթ=nN_ /\F0(}f0(3jl.3E?qڠ*{PU*atKAq0l񏹧e"Gtl3^ޛAC#W|PQڠv%(i;~!R?O=at% U pjDD֓Ad崡z0^gISK@Zent.<ƻg-0^]>+ 88N[ڨT2g'T(eaeO(lΡjsL3qn0l-Q,Oq 'fNߓB7Og5Ӫ $ƭ[|$ZbtoƯjPIz,d€AE^^Oytω,-9ˀK~F%$qwB;7PX~CL9$gs6N!e ݓj Iч2S8gQ)Qy(-ԝ@?;wΨμ8Xeeپ+Dyb.O2N~ZieU9A PQЇxr3rH!io-4"#ļ&Z>9r % 1!VȦsʇxj|fwGAeWafB4:jH,V}XPIy!TEg}z:0:MvTY("bl v5{nш*IJȹ'|1:Ưm*^a94CDZʏE?dY-ρ<O<KUū»-њGxhW=U2N.vB\87[xH2ᦴ E1QE'F t-oG4X^؂o9 {'dž;vAmn?uaԂąaj#&:~to9P6)5=WvH\ggIC^"9 Udr7M_ GVaW|CHeK4uxXM98.W؍k @qG_㳌O#Ź,ދەp"ZPǚ" qȹzd~0dzb>2l?+=cF%VCHؔXFfAolմ Ǝ뻭Rgp+#NZR}KM[^Ht Oe}ը%q[۳3WIמV4rO9ٱ>e#['+ ,SMP A)(lY{[}h@5UѼ MX#FD2grlҤ{u?#:Ds!aQah;"p7Nch-'U_{w/hҦ4a,[5mЩJˁܺ͊߀07A2JAm9`ـC8o7w]|_ӺpӕT;j;vG3fEU'sV WNHz8&$_E?VQ [%e@קjάςeq>)Shr7K`b\ֹHjʰƢZ7N&MSI`+J8%bF‡o 7n`EOk5x>(PFh,r/7`;bB^:DU'hnKTWiedY0/GϑNfvJ3TwrJ> ʔ|wZ(ٖi(#U:|Q&RLVcA'=2<Y/UVJ;΍1O駝u`RT|_ܲYORӊf101>b{*s0Ni$oXs}G]T> 3V}uܩ 9W_"~  .VcC¹EB XEtEpguܯ '2Ul^й{?6n7眉/`-z[" fu{a3`-J)8Gw$[C+9M٫A%ߠ1'7[ĹdDxhA̻wSjLòp+ nQHLRs6bIl$,*cqD>.vb#\-'ou)/rB'_ݸ C"7w6ưEqXŇ̯]'7ibӴoN@6{ܯ9M΀#K+bJېjc;}\.?0J[NbV#.jAߌM 30ϽDJ?0#w ®(X՛s4W` p|kSW]_eq+%_l[Oj<23=v :dJScb~F@yY!G˱/E1wW]gB6;`rc.@hQJl'X];p9zL%U1g:#kcFF׵@,%?~EX7lF]?|=\~M/666M5\%qE@,|;L|= q[Cv=*]m@Sݷތ=@`_}g s `PJxWS{Y|]cى[ʎ9YPJ)I"gw11[[BD6YS`I[֩eN3:)'.y,0Csd8KOcמ B(f<܀o$յK;u&{q/L0oKeQb uWqf˷٢QQ5X# ͽ)Rq@N:2Y,m SA V\GݲD wLV{Kr1\H!@ h;2i4|mybOR 2rU6x`5޽LƒU50D832(5Vaʞ"4W7+~Rs[ѦGv5: gn#o ƩhVЬʇ-I>A ѥ\gũb{(6"H@YXi-hW3j{bs٪gpewnS/F -E՛A4eQ(l UXv7`cU9#@9lU!*8,].eKUYS(if&/bo$჌H |'|\Smx"!e$&4eU*Y!xC#Y \k`2g t"#\ANe%ӷ$A'U0:#]\CtFX fa6Ɨ"!T!Uw`jO*.|#d`_J_<[hX.4`Q "P5]z?f1[ ;Rf-7 aY^iFQ9ùbQ!܀fR{ݣwȮC`Xqt*D(dN $?\GpZhvd]Izlx'egE߅ۨu[UX*1GK8U{6T*(%)![js͍0EaE$WY~kw.K~ sKpr|kƧG%2^UL? OȨxp.6~ ٪2?&C ۠[`&p/wj2k¿&2N/*фFcfh:S^UE#B-|;!\W6"Ģm+ޚSp ?2ﱳ=m2{Mm7'\}$Lf>!ޢSBEe>xդFuTFw#_/.>!C8.{27MigE7٤(pD<@_Ҁ)ӶWۯ Y* ` 081gZW=}Sf8x ȷ3rIRUgr(;=Mh ]Q;G $;_ 3.w LZ#_)C`O~}HMɥ=,]oR>~8˯_|H1ITkBgȃ> #Dal -*+nطED4&`sY8Q(lDa "E__썯"h9H̀atHa\Yz|_Ry-(#gVkɇ-r}̃do8TJ5b^BO~m*ޓ8L9F*ng\\KѲZBe&|ћU+W8 3*ʶ-czJtvuA=;̶oL̴0Q`Mș/|y 2~#S`qsKH#.oZ!&OJ_)skC5h7p#{%7UK9p8HO u;lkʤB s:{}?>-] w#6"<FYӈ*LZU'ֳ23! î h&Rjٚ{ZQr^ă2J4PέWJFoyp?)0 Ag8, ڻՍ|QebxTǏ"7Y%J&QuphT0LV?ju}I+leʥ 9 NKW%G&3%AE5W! C`6rywyܕzv)р6z([/"s ky.:<Wr{vvHN!AГϓZl ݱ.؆WtU;v{0}ҖSu=FBA3oq My;EGRv*xt6{,5pdLy wRE+wGvzgI)do|hDLÖ׆am]ZX* tt-addad•xWɴy`_@/n{R$2*jKJ4Σ80 }-S!ƾ4<Jdr?_`T߾N ;bI#)+E]^-dweB5(q .tc~0cBɯQ}j` h<M/N]=]<} Q|Ilj 4(Aägv0=}zfp]P<>% h^29+%UA-k&_0Ѿ&g^iD*)+hSb@C23FNBǙImy)q x:q,"Av-@b?t)|z3aCxQuZ `rf5!^Q2LZl.(]ek _Ix[GA8z2D˯!qnV^7d3p*o=b`qN/ IiиX?ު6I޴uX"`Lqb8wDh4צ1LλE8cғ= S9Pz#UW Ǧ{AQzlИ V;Umy=<6^3ɲk dߛԎ"еAmqmvRL$p!`M~|߼Aquʒ};C]O w. a gIbdDxY٭JeYCE޻X8*{j'ZD'{!ceBrz5QYh#u&K4+WB[t۷Uz\oKW1"uGcPL1nwF>_>o48hį"Dӓ8k{b7tԈZ/aX!i CKx1r={}ZӘ7xUL5.[H<Ǝj; 2Z(z4J xA/nmƂ$;f P0W1I'+%{)v`{ruB*.TzKw`, YY7 S2_n9P.2s%Q!StCnifti2dicom-0.4.7/data/images/000077500000000000000000000000001226163507100161125ustar00rootroot00000000000000nifti2dicom-0.4.7/data/images/background.png000066400000000000000000000026171226163507100207450ustar00rootroot00000000000000PNG  IHDRFrsRGB pHYs  tIME ,WtEXtCommentCreated with GIMPWIDATx10З .Х[#00``  000``  000``  000``  000``  000``  000``  000``  000``  000``  00```  00```  00```  00```  00```  00```  00```  00```  00```  00``  00``  00``  00``  00``  00``  00``  00``  00``  00``K  00``   00``   00``   00``   00``   00``   00``   00``   00``   00``  000``  000``  000``  000``  000``  000`odE}IENDB`nifti2dicom-0.4.7/data/qnifti2dicom.desktop000066400000000000000000000004101226163507100206230ustar00rootroot00000000000000[Desktop Entry] Name=QNifti2Dicom Comment=Convert 3D NIfTI images to DICOM 2D series Exec=qnifti2dicom Icon=qnifti2dicom Type=Application Categories=Qt;Education;Science;FileTools;ImageProcessing;MedicalSoftware; Keywords=DICOM;NIfTI;Medical Images;Converter;PACS nifti2dicom-0.4.7/doc/000077500000000000000000000000001226163507100145015ustar00rootroot00000000000000nifti2dicom-0.4.7/doc/CMakeLists.txt000066400000000000000000000117271226163507100172510ustar00rootroot00000000000000# This file is part of Nifti2Dicom, is an open source converter from # 3D NIfTI images to 2D DICOM series. # # Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli # # Nifti2Dicom is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nifti2Dicom is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Nifti2Dicom. If not, see . # Build documentation if doxygen and graphviz are found find_package(Doxygen) if (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND) message(STATUS "To build documentation run the 'doc' target") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in" "${CMAKE_CURRENT_BINARY_DIR}/Doxyfile") add_custom_target(doc ${DOXYGEN_EXECUTABLE} "Doxyfile") else (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND) message(STATUS "You will need both doxygen and graphviz 'dot' to build documentation") endif (DOXYGEN_FOUND AND DOXYGEN_DOT_FOUND) # Build manpage option(ENABLE_REGENERATE_MAN "Enable regenerate_man target" FALSE) mark_as_advanced(ENABLE_REGENERATE_MAN) if(ENABLE_REGENERATE_MAN) # Find help2man find_file(HELP2MAN_EXECUTABLE help2man HINTS /bin /usr/bin /usr/local/bin) if(NOT HELP2MAN_EXECUTABLE) message(FATAL_ERROR "To enable the regenerate_man target you need to install help2man") endif(NOT HELP2MAN_EXECUTABLE) # Find sed find_file(SED_EXECUTABLE sed HINTS /bin /usr/bin /usr/local/bin) if(NOT SED_EXECUTABLE) message(FATAL_ERROR "To enable the regenerate_man target you need to install sed") endif(NOT SED_EXECUTABLE) add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 DEPENDS nifti2dicom ${CMAKE_CURRENT_SOURCE_DIR}/man/nifti2dicom.help2man.include COMMAND ${HELP2MAN_EXECUTABLE} ${CMAKE_BINARY_DIR}/src/core/nifti2dicom --version-string=${Nifti2Dicom_VERSION} --no-info --include=${CMAKE_CURRENT_SOURCE_DIR}/man/nifti2dicom.help2man.include --output=${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 COMMAND ${SED_EXECUTABLE} -i "s#${CMAKE_BINARY_DIR}/src/core/##g" ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 ) add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 DEPENDS qnifti2dicom ${CMAKE_CURRENT_SOURCE_DIR}/man/qnifti2dicom.help2man.include COMMAND ${HELP2MAN_EXECUTABLE} ${CMAKE_BINARY_DIR}/src/gui/qnifti2dicom --version-string=${Nifti2Dicom_VERSION} --no-info --include=${CMAKE_CURRENT_SOURCE_DIR}/man/qnifti2dicom.help2man.include --output=${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 COMMAND ${SED_EXECUTABLE} -i "s#${CMAKE_BINARY_DIR}/src/gui/##g" ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 ) add_custom_target(regenerate_man SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 ) endif(ENABLE_REGENERATE_MAN) find_file(GZIP_EXECUTABLE gzip HINTS /bin /usr/bin /usr/local/bin) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/man/man1) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/man/man1/nifti2dicom.1.gz COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 ${CMAKE_CURRENT_BINARY_DIR}/man/man1/nifti2dicom.1 COMMAND ${GZIP_EXECUTABLE} -9 -f ${CMAKE_CURRENT_BINARY_DIR}/man/man1/nifti2dicom.1 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/nifti2dicom.1 ) add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/man/man1/qnifti2dicom.1.gz COMMAND cp ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 ${CMAKE_CURRENT_BINARY_DIR}/man/man1/qnifti2dicom.1 COMMAND ${GZIP_EXECUTABLE} -9 -f ${CMAKE_CURRENT_BINARY_DIR}/man/man1/qnifti2dicom.1 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/man/man1/qnifti2dicom.1 ) add_custom_target(manpages ALL SOURCES ${CMAKE_CURRENT_BINARY_DIR}/man/man1/nifti2dicom.1.gz ${CMAKE_CURRENT_BINARY_DIR}/man/man1/qnifti2dicom.1.gz) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/man1/nifti2dicom.1.gz DESTINATION share/man/man1) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/man/man1/qnifti2dicom.1.gz DESTINATION share/man/man1) nifti2dicom-0.4.7/doc/Doxyfile.in000066400000000000000000001740451226163507100166270ustar00rootroot00000000000000# Doxyfile 1.5.8 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = "Nifti2Dicom" # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = ${Nifti2Dicom_INTERNAL_VERSION} # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = ${CMAKE_SOURCE_DIR}/doc # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, # Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), # Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, # Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, # Spanish, Swedish, and Ukrainian. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = YES # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = ${CMAKE_SOURCE_DIR}/src # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = NO # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = ${CMAKE_SOURCE_DIR}/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. Doxygen will compare the file name with each pattern and apply the # filter if there is a match. The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = YES # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to FRAME, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, # Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are # probably better off using the HTML help feature. Other possible values # for this tag are: HIERARCHIES, which will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list; # ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which # disables this behavior completely. For backwards compatibility with previous # releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE # respectively. GENERATE_TREEVIEW = NONE # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = YES # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. This is useful # if you want to understand what is going on. On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = Monospace # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = YES # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 500 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = YES # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = NO # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES #--------------------------------------------------------------------------- # Options related to the search engine #--------------------------------------------------------------------------- # The SEARCHENGINE tag specifies whether or not a search engine should be # used. If set to NO the values of all tags below this one will be ignored. SEARCHENGINE = YES nifti2dicom-0.4.7/doc/man/000077500000000000000000000000001226163507100152545ustar00rootroot00000000000000nifti2dicom-0.4.7/doc/man/man1/000077500000000000000000000000001226163507100161105ustar00rootroot00000000000000nifti2dicom-0.4.7/doc/man/man1/nifti2dicom.1000066400000000000000000000115441226163507100204060ustar00rootroot00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.10. .TH NIFTI2DICOM "1" "July 2012" "nifti2dicom 0.4.5" "User Commands" .SH NAME nifti2dicom - Convert 3D medical images to DICOM 2D series .SH DESCRIPTION .B Nifti2Dicom is a conversion tool that converts 3D NIfTI files (and other formats supported by ITK) to DICOM. Unlike other conversion tools, it can import a DICOM file that is used to import the patient and study DICOM tags, and allows you to edit the accession number and other DICOM tags, in order to create a valid DICOM that can be imported in a PACS. .PP USAGE: .TP nifti2dicom [\-# ] [\-s .IP ] [\-p ] \fB\-o\fR [\-r] \fB\-i\fR [\-\-acquisitiontime ] [\-\-acquisitiondate ] [\-\-acquisitionnumber ] [\-\-useoriginalseries] [\-\-seriestime ] [\-\-seriesdate ] [\-\-seriesdescription ] [\-\-seriesnumber ] [\-\-seriesinstanceuid ] [\-\-donotuseoriginalstudy] [\-\-studytime ] [\-\-studydate ] [\-\-studydescription ] [\-\-studyid ] [\-\-studyinstanceuid ] [\-\-patientweight ] [\-\-patientage <###Y/M>] [\-\-patientsex ] [\-\-patientdob ] [\-\-patientid ] [\-\-patientname ] [\-\-referringphysiciansname ] [\-\-institutionname ] [\-\-manufacturersmodelname ] [\-\-manufacturer ] [\-\-protocolname ] [\-\-softwareversion ] [\-\-imagetype ] [\-\-modality ] [\-\-sopclassuid ] [\-d ] [\-y] [\-a ] [\-\-] [\-\-version] [\-h] .PP Where: .HP \-# , \fB\-\-digits\fR .IP Number of digits in dicom file names .HP \fB\-s\fR , \fB\-\-suffix\fR .IP Suffix of dicom file names .HP \fB\-p\fR , \fB\-\-prefix\fR .IP Prefix of dicom file names .HP \fB\-o\fR , \fB\-\-outputdirectory\fR .TP (required) Output dicom directory .HP \fB\-r\fR, \fB\-\-rescale\fR .IP Rescale image before exporting .HP \fB\-i\fR , \fB\-\-inputfile\fR .TP (required) Input NIFTI 1 file .HP \fB\-\-acquisitiontime\fR .IP (0008,0032) Acquisition Time .HP \fB\-\-acquisitiondate\fR .IP (0008,0022) Acquisition Date .HP \fB\-\-acquisitionnumber\fR .IP (0020,0012) Acquisition Number .HP \fB\-\-useoriginalseries\fR .IP Use original series .HP \fB\-\-seriestime\fR .IP (0008,0031) Series Time .HP \fB\-\-seriesdate\fR .IP (0008,0021) Series Date .HP \fB\-\-seriesdescription\fR .IP (0008,103e) Series Description .HP \fB\-\-seriesnumber\fR .IP (0020,0011) Series Number .HP \fB\-\-seriesinstanceuid\fR .IP (0020,000e) Series Instance UID .HP \fB\-\-donotuseoriginalstudy\fR .IP Do not use original study .HP \fB\-\-studytime\fR .IP (0008,0030) Study Time .HP \fB\-\-studydate\fR .IP (0008,0020) Study Date .HP \fB\-\-studydescription\fR .IP (0008,1030) Study Description .HP \fB\-\-studyid\fR .IP (0020,0010) Study ID .HP \fB\-\-studyinstanceuid\fR .IP (0020,000d) Study Instance UID .HP \fB\-\-patientweight\fR .IP (0010,1030) Patient Weight .HP \fB\-\-patientage\fR <###Y/M> .IP (0010,1010) Patient Age .HP \fB\-\-patientsex\fR .IP (0010,0040) Patient Sex .HP \fB\-\-patientdob\fR .IP (0010,0030) Patient Date of Birth .HP \fB\-\-patientid\fR .IP (0010,0020) Patient ID .HP \fB\-\-patientname\fR .IP (0010,0010) Patient Name .HP \fB\-\-referringphysiciansname\fR .IP (0008,0090) Referring Physician's Name .HP \fB\-\-institutionname\fR .IP (0008,0080) Institution Name .HP \fB\-\-manufacturersmodelname\fR .IP (0008,1090) Manufacturer's Model Name .HP \fB\-\-manufacturer\fR .IP (0008,0070) Manufacturer .HP \fB\-\-protocolname\fR .IP (0018,1030) Protocol Name .HP \fB\-\-softwareversion\fR .IP (0018,1020) Software Version(s) .HP \fB\-\-imagetype\fR .IP (0008,0008) Image Type .HP \fB\-\-modality\fR .IP (0008,0060) Modality .HP \fB\-\-sopclassuid\fR .IP (0008,0016) SOP Class UID .HP \fB\-d\fR , \fB\-\-dicomheaderfile\fR .IP File containing DICOM header to import .HP \fB\-y\fR, \fB\-\-yes\fR .IP Do not prompt for Accession Number Warning .HP \fB\-a\fR , \fB\-\-accessionnumber\fR .IP (0008,0050) Accession Number .HP \fB\-\-\fR, \fB\-\-ignore_rest\fR .IP Ignores the rest of the labeled arguments following this flag. .HP \fB\-\-version\fR .IP Displays version information and exits. .HP \fB\-h\fR, \fB\-\-help\fR .IP Displays usage information and exits. .IP Converts NIfTI1 images to DICOM .SH AUTHORS .B Nifti2Dicom was primarily written by Daniele E. Domenichelli and Gabriele Arnulfo. .SH "SEE ALSO" Full documentation for the .B Nifti2Dicom package is stored at https://github.com/biolab-unige/nifti2dicom nifti2dicom-0.4.7/doc/man/man1/qnifti2dicom.1000066400000000000000000000020101226163507100205530ustar00rootroot00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.40.10. .TH QNIFTI2DICOM "1" "July 2012" "qnifti2dicom 0.4.5" "User Commands" .SH NAME qnifti2dicom - Convert 3D medical images to DICOM 2D series (GUI) .SH DESCRIPTION .B QNifti2Dicom is a conversion tool that converts 3D NIfTI files (and other formats supported by ITK) to DICOM. Unlike other conversion tools, it can import a DICOM file that is used to import the patient and study DICOM tags, and allows you to edit the accession number and other DICOM tags, in order to create a valid DICOM that can be imported in a PACS. .PP USAGE .TP qnifti2dicom [\-h] [\-\-help] [\-\-version] .PP Where: .PP \fB\-\-version\fR .IP Displays version information and exits. .PP \fB\-h\fR, \fB\-\-help\fR .IP Displays usage information and exits. .SH AUTHORS .B QNifti2Dicom was primarily written by Daniele E. Domenichelli and Gabriele Arnulfo. .SH "SEE ALSO" nifti2dicom(1) Full documentation for the .B Nifti2Dicom package is stored at https://github.com/biolab-unige/nifti2dicom nifti2dicom-0.4.7/doc/man/nifti2dicom.help2man.include000066400000000000000000000012141226163507100225330ustar00rootroot00000000000000[name] nifti2dicom - Convert 3D medical images to DICOM 2D series [description] .B Nifti2Dicom is a conversion tool that converts 3D NIfTI files (and other formats supported by ITK) to DICOM. Unlike other conversion tools, it can import a DICOM file that is used to import the patient and study DICOM tags, and allows you to edit the accession number and other DICOM tags, in order to create a valid DICOM that can be imported in a PACS. [authors] .B Nifti2Dicom was primarily written by Daniele E. Domenichelli and Gabriele Arnulfo. [see also] Full documentation for the .B Nifti2Dicom package is stored at https://github.com/biolab-unige/nifti2dicom nifti2dicom-0.4.7/doc/man/qnifti2dicom.help2man.include000066400000000000000000000012441226163507100227170ustar00rootroot00000000000000[name] qnifti2dicom - Convert 3D medical images to DICOM 2D series (GUI) [description] .B QNifti2Dicom is a conversion tool that converts 3D NIfTI files (and other formats supported by ITK) to DICOM. Unlike other conversion tools, it can import a DICOM file that is used to import the patient and study DICOM tags, and allows you to edit the accession number and other DICOM tags, in order to create a valid DICOM that can be imported in a PACS. [authors] .B QNifti2Dicom was primarily written by Daniele E. Domenichelli and Gabriele Arnulfo. [see also] nifti2dicom(1) Full documentation for the .B Nifti2Dicom package is stored at https://github.com/biolab-unige/nifti2dicom nifti2dicom-0.4.7/patches/000077500000000000000000000000001226163507100153635ustar00rootroot00000000000000nifti2dicom-0.4.7/patches/GDCM_4digitsgroup.patch000066400000000000000000000017051226163507100216250ustar00rootroot00000000000000Index: Source/DataStructureAndEncodingDefinition/gdcmDataSet.h =================================================================== --- Source/DataStructureAndEncodingDefinition/gdcmDataSet.h (revision 6152) +++ Source/DataStructureAndEncodingDefinition/gdcmDataSet.h (working copy) @@ -129,13 +129,13 @@ void Insert(const DataElement& de) { // FIXME: there is a special case where a dataset can have value < 0x8, see: // $ gdcmdump --csa gdcmData/SIEMENS-JPEG-CorruptFrag.dcm - if( de.GetTag().GetGroup() >= 0x0008 || de.GetTag().GetGroup() == 0x4 ) + if( de.GetTag().GetGroup() >= 0x0008 || de.GetTag().GetGroup() == 0x0004 ) { InsertDataElement( de ); } else { - gdcmErrorMacro( "Cannot add element with group < 0x0008 and != 0x4 in the dataset" ); + gdcmErrorMacro( "Cannot add element with group < 0x0008 and != 0x0004 in the dataset" ); } } /// Replace a dataelement with another one nifti2dicom-0.4.7/patches/GDCM_DSDigits.patch000066400000000000000000000061371226163507100206570ustar00rootroot00000000000000Index: Source/DataStructureAndEncodingDefinition/gdcmElement.h =================================================================== --- Source/DataStructureAndEncodingDefinition/gdcmElement.h (revision 6137) +++ Source/DataStructureAndEncodingDefinition/gdcmElement.h (working copy) @@ -211,21 +211,77 @@ } }; +// WARNING: The number of digits in exponent can be dependent from compiler. +// gcc uses 2 digits if the exponent is < 100 and 3 digits if >=, but +// some compilers (i.e. MSVC) may always use 3 digits in exponent. +// If some other compiler with this behaviour is detected, should be +// added here. +#if defined(_MSC_VER) + #define ALWAYS_3_DIGITS_IN_EXPONENT +#endif + + +#ifdef ALWAYS_3_DIGITS_IN_EXPONENT + #define MIN_NEGATIVE_EXP 6 //MSVC always use 3 digits in exponent. +#else + #define MIN_NEGATIVE_EXP 5 +#endif + template < typename Float > std::string to_string ( Float data ) { - std::stringstream in; - // in.imbue(std::locale::classic()); // This is not required AFAIK - unsigned long const digits = + + std::stringstream in; + // in.imbue(std::locale::classic()); // This is not required AFAIK + + unsigned long digits = 0; + + // 16 integer digits number or 15 integer digits negative number + if ( (data >= 1e+15 && data < 1e16) || (data <= -1e14 && data > -1e+15)) + in << std::fixed; + else + { + digits = 15; // 16 - 1 (dot) + + // negative number + if (data < 0) + digits -= 1; // (minus) + + if (data != 0) + { + Float ldata = log10(fabs(data)); + + // numbers that need std::scientific representation + if ( ldata > 16 || (ldata > 15 && data < 0) || ldata < -MIN_NEGATIVE_EXP+1 ) + { + in << std::scientific; +#ifdef ALWAYS_3_DIGITS_IN_EXPONENT + digits -= 6; // (first digit + exponent) +#else + digits -= 5; // (first digit + exponent) + // 3 digits in exponent + if ( ldata >= 100 || ldata < -99 ) + digits -=1; +#endif + } + else if( ldata < 0) + digits += ldata; // (zeros before first significant digit) + } + } + /* + // I don't know if you really need this check + unsigned long const max_digits = static_cast< unsigned long >( - std::log( std::numeric_limits::epsilon() ) / std::log( 10.0 ) ); - if ( in << std::dec << std::setprecision(/*2+*/digits) << data ) { - return ( in.str() ); - } else { - throw "Impossible Conversion"; // should not happen ... - } -} + digits = (digits > max_digits) ? max_digits : digits; + */ + if ( in << std::dec << std::setprecision(digits) << data ) + return ( in.str() ); + else + throw "Impossible Conversion"; // should not happen ... +} + /* Writing VR::DS is not that easy after all */ // http://groups.google.com/group/comp.lang.c++/browse_thread/thread/69ccd26f000a0802 template<> inline void EncodingImplementation::Write(const float * data, unsigned long length, std::ostream &_os) { nifti2dicom-0.4.7/src/000077500000000000000000000000001226163507100145235ustar00rootroot00000000000000nifti2dicom-0.4.7/src/CMakeLists.txt000066400000000000000000000015741226163507100172720ustar00rootroot00000000000000# This file is part of Nifti2Dicom, is an open source converter from # 3D NIfTI images to 2D DICOM series. # # Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli # # Nifti2Dicom is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nifti2Dicom is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Nifti2Dicom. If not, see . add_subdirectory(core) add_subdirectory(gui) nifti2dicom-0.4.7/src/core/000077500000000000000000000000001226163507100154535ustar00rootroot00000000000000nifti2dicom-0.4.7/src/core/CMakeLists.txt000066400000000000000000000054661226163507100202260ustar00rootroot00000000000000# This file is part of Nifti2Dicom, is an open source converter from # 3D NIfTI images to 2D DICOM series. # # Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli # # Nifti2Dicom is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nifti2Dicom is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Nifti2Dicom. If not, see . set(nifti2dicom_SOURCES nifti2dicom.cxx n2dVersion.cxx n2dToolsMetaDataDictionary.cxx n2dToolsDate.cxx n2dCommandLineParser.cxx n2dAccessionNumberValidator.cxx n2dHeaderImporter.cxx n2dDicomClass.cxx n2dOtherDicomTags.cxx n2dPatient.cxx n2dStudy.cxx n2dSeries.cxx n2dAcquisition.cxx n2dInputImporter.cxx n2dInputFilter.cxx n2dInstance.cxx n2dOutputExporter.cxx ) set(nifti2dicom_NO_INSTALL_HEADERS ${CMAKE_BINARY_DIR}/Nifti2DicomConfig.h n2dVersion.h n2dDefsCommandLineArgsStructs.h n2dDefsImage.h n2dDefsMetadata.h n2dToolsMetaDataDictionary.h n2dToolsDate.h n2dCommandLineParser.h n2dAccessionNumberValidator.h n2dHeaderImporter.h n2dDicomClass.h n2dOtherDicomTags.h n2dPatient.h n2dStudy.h n2dSeries.h n2dAcquisition.h n2dInputImporter.h n2dInputFilter.h n2dInstance.h n2dOutputExporter.h ) # nifti2dicom target add_executable(nifti2dicom ${nifti2dicom_SOURCES}) target_link_libraries(nifti2dicom ${ITK_LIBRARIES}) install(TARGETS nifti2dicom RUNTIME DESTINATION bin) nifti2dicom-0.4.7/src/core/n2dAccessionNumberValidator.cxx000066400000000000000000000100131226163507100235240ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dAccessionNumberValidator.h" #include namespace n2d { //BEGIN DICOM tags const std::string accessionnumbertag("0008|0050"); //END DICOM tags bool AccessionNumberValidator::Validate(void) { if (!m_AccessionNumberArgs.accessionnumber.empty()) { itk::EncapsulateMetaData( m_Dict, accessionnumbertag, m_AccessionNumberArgs.accessionnumber); } else if (!m_AccessionNumberArgs.yes) { //Stampa un warning minaccioso if (!AccessionNumberWarning()) return false; } return true; } /*! * \brief Stampa un warning minaccioso e aspetta che l'utente inserisca YES o NO */ bool AccessionNumberValidator::AccessionNumberWarning() { std::cout << std::endl; std::cout << " " << "\033[1;37;41m" << " " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " ---------------------------------------------------------------- " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | WARNING | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | ACCESSION NUMBER NOT SET! | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | Use -a or --accessionnumber to set manually | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " | | " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " ---------------------------------------------------------------- " << "\033[0m" << " " << std::endl; std::cout << " " << "\033[1;37;41m" << " " << "\033[0m" << " " << std::endl; std::cout << std::endl << "Do you wish to continue? " << std::flush; std::string cont; do { std::cout << "(type \"YES\" or \"NO\") " << std::flush; std::cin >> cont; if (cont == "NO" || cont == "no" || cont == "No" || cont == "nO") return false; } while (cont != "YES" && cont != "yes" && cont != "Yes" && cont != "yEs" && cont != "yeS" && cont != "YEs" && cont != "YeS" && cont != "yES"); return true; } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dAccessionNumberValidator.h000066400000000000000000000033451226163507100231630ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DACCESSIONNUMBERVALIDATOR_H #define N2DACCESSIONNUMBERVALIDATOR_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::AccessionNumberValidator /*! * \brief A class that handles DICOM Accession Number Tag * * The following tags are handled by this class: * * \li (0008,0050) Accession Number */ class AccessionNumberValidator { public: AccessionNumberValidator(const AccessionNumberArgs& accessionNumberArgs, DictionaryType& dict) : m_AccessionNumberArgs(accessionNumberArgs), m_Dict(dict) { } ~AccessionNumberValidator() {} bool Validate( void ); private: const AccessionNumberArgs& m_AccessionNumberArgs; DictionaryType& m_Dict; bool AccessionNumberWarning(); }; //END class n2d::AccessionNumberValidator } // namespace n2d #endif // N2DACCESSIONNUMBERVALIDATOR_Hnifti2dicom-0.4.7/src/core/n2dAcquisition.cxx000066400000000000000000000056561226163507100211070ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dAcquisition.h" #include "n2dToolsDate.h" #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string acquisitionnumbertag ( "0020|0012" ); const std::string acquisitiondatetag ( "0008|0022" ); const std::string acquisitiontimetag ( "0008|0032" ); //END DICOM tags //BEGIN Default values const std::string defaultacquisitionnumber ( "1" ); //END Default values bool Acquisition::Update() { #ifdef DEBUG std::cout << "Acquisition - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif //BEGIN (0020,0012) Acquisition Number //TODO chech if acquisition number in dicom header is "1" ? if (!m_AcquisitionArgs.acquisitionnumber.empty()) itk::EncapsulateMetaData( m_Dict, acquisitionnumbertag, m_AcquisitionArgs.acquisitionnumber); else itk::EncapsulateMetaData( m_Dict, acquisitionnumbertag, defaultacquisitionnumber); //END (0020,0012) Acquisition Number //BEGIN (0008,0022) Acquisition Date if (!m_AcquisitionArgs.acquisitiondate.empty()) itk::EncapsulateMetaData( m_Dict, acquisitiondatetag, m_AcquisitionArgs.acquisitiondate); else itk::EncapsulateMetaData( m_Dict, acquisitiondatetag, tools::Date::DateStr()); //END (0008,0022) Acquisition Date //BEGIN (0008,0032) Acquisition Time if (!m_AcquisitionArgs.acquisitiontime.empty()) itk::EncapsulateMetaData( m_Dict, acquisitiontimetag, m_AcquisitionArgs.acquisitiontime); else itk::EncapsulateMetaData( m_Dict, acquisitiontimetag, tools::Date::TimeStr()); //END (0008,0032) Acquisition Time #ifdef DEBUG std::cout << "Acquisition - END:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << "----------------------------------------------------------------------------------------" << std::endl; #endif return true; } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dAcquisition.h000066400000000000000000000032201226163507100205150ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DACQUISITION_H #define N2DACQUISITION_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::Acquisition /*! * \brief A class that handles DICOM tags related to Acquisition * * The following tags are handled by this class: * * \li (0020,0012) Acquisition Number * \li (0008,0022) Acquisition Date * \li (0008,0032) Acquisition Time */ class Acquisition { public: Acquisition(const AcquisitionArgs& acquisitionArgs, DictionaryType& dict) : m_AcquisitionArgs(acquisitionArgs), m_Dict(dict) { } ~Acquisition() {} bool Update( void ); private: const AcquisitionArgs& m_AcquisitionArgs; DictionaryType& m_Dict; }; //END class n2d::Acquisition } // namespace n2d #endif // N2DACQUISITION_Hnifti2dicom-0.4.7/src/core/n2dCommandLineParser.cxx000066400000000000000000000735251226163507100221620ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dCommandLineParser.h" #include "n2dVersion.h" namespace n2d { bool CommandLineParser::Parse(int argc, char* argv[]) { std::ostringstream version; version << GetVersion() << std::endl; version << std::endl<< "Using:" << std::endl; version << "\t" << "ITK " << GetITKVersion() << std::endl; version << "\t" << "GDCM " << GetGDCMVersion() << std::endl; version << "\t" << "TCLAP " << GetTCLAPVersion() << std::endl; version << std::endl << GetCopyright(); try { TCLAP::CmdLine cmd("Converts NIfTI1 images to DICOM", ' ', version.str()); //BEGIN Command line arguments declaration //BEGIN Accession number command line arguments // ----------------------------------------------------------------------------- // Accession number // ----------------------------------------------------------------------------- TCLAP::ValueArg accessionnumberArg ( "a", "accessionnumber", "(0008,0050) Accession Number", false, "", "string", cmd); // ----------------------------------------------------------------------------- // Accession number warning // ----------------------------------------------------------------------------- TCLAP::SwitchArg yesSwitch ( "y", "yes", "Do not prompt for Accession Number Warning", cmd, false); //END Accession number command line arguments //BEGIN DICOM header command line arguments // ----------------------------------------------------------------------------- // Dicom header to import // ----------------------------------------------------------------------------- TCLAP::ValueArg dicomheaderfileArg ( "d", "dicomheaderfile", "File containing DICOM header to import", false, "", "string", cmd); //END DICOM header command line arguments //BEGIN DICOM class/modality command line arguments /* // ----------------------------------------------------------------------------- // (0002,0010) Transfer Syntax UID // ----------------------------------------------------------------------------- TCLAP::ValueArg transfersyntaxuidArg ( "", "transfersyntaxuid", "(0002,0010) Transfer Syntax UID", false, "", "string", cmd); */ // ----------------------------------------------------------------------------- // (0008,0016) SOP Class UID // ----------------------------------------------------------------------------- TCLAP::ValueArg sopclassuidArg ( "", "sopclassuid", "(0008,0016) SOP Class UID", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0060) Modality // ----------------------------------------------------------------------------- TCLAP::ValueArg modalityArg ( "", "modality", "(0008,0060) Modality", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0008) Image Type // ----------------------------------------------------------------------------- TCLAP::ValueArg imagetypeArg ( "", "imagetype", "(0008,0008) Image Type", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0018,1020) Software Version(s) // ----------------------------------------------------------------------------- TCLAP::ValueArg softwareversionArg ( "", "softwareversion", "(0018,1020) Software Version(s)", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0018,1030) Protocol Name // ----------------------------------------------------------------------------- TCLAP::ValueArg protocolnameArg ( "", "protocolname", "(0018,1030) Protocol Name", false, "", "string", cmd); //END DICOM class/modality command line arguments //BEGIN Other Dicom Tags command line arguments // ----------------------------------------------------------------------------- // (0008,0070) Manufacturer // ----------------------------------------------------------------------------- TCLAP::ValueArg manufacturerArg ( "", "manufacturer", "(0008,0070) Manufacturer", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,1090) Manufacturer's Model Name // ----------------------------------------------------------------------------- TCLAP::ValueArg manufacturersmodelnameArg ( "", "manufacturersmodelname", "(0008,1090) Manufacturer's Model Name", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0080) Institution Name // ----------------------------------------------------------------------------- TCLAP::ValueArg institutionnameArg ( "", "institutionname", "(0008,0080) Institution Name", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0090) Referring Physician's Name // ----------------------------------------------------------------------------- TCLAP::ValueArg referringphysiciansnameArg ( "", "referringphysiciansname", "(0008,0090) Referring Physician's Name", false, "", "string", cmd); // ----------------------------------------------------------------------------- // Other Arguments // ----------------------------------------------------------------------------- //TODO //END Other Dicom Tags command line arguments //BEGIN Patient command line arguments // ----------------------------------------------------------------------------- // (0010,0010) Patient Name // ----------------------------------------------------------------------------- TCLAP::ValueArg patientnameArg ( "", "patientname", "(0010,0010) Patient Name", false, "", "COGNOME NOME", cmd); // ----------------------------------------------------------------------------- // (0010,0020) Patient ID // ----------------------------------------------------------------------------- TCLAP::ValueArg patientidArg ( "", "patientid", "(0010,0020) Patient ID", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0010,0030) Patient Date of Birth // ----------------------------------------------------------------------------- TCLAP::ValueArg patientdobArg ( "", "patientdob", "(0010,0030) Patient Date of Birth", false, "", "AAAAMMGG", cmd); // ----------------------------------------------------------------------------- // (0010,0040) Patient Sex // ----------------------------------------------------------------------------- std::vector patientsexVec; patientsexVec.push_back("M"); patientsexVec.push_back("F"); patientsexVec.push_back("O"); TCLAP::ValuesConstraint patientsexCon(patientsexVec); TCLAP::ValueArg patientsexArg ( "", "patientsex", "(0010,0040) Patient Sex", false, "", &patientsexCon, cmd); // ----------------------------------------------------------------------------- // (0010,1010) Patient Age // ----------------------------------------------------------------------------- TCLAP::ValueArg patientageArg ( "", "patientage", "(0010,1010) Patient Age", false, "", "###Y/M", cmd); // ----------------------------------------------------------------------------- // (0010,1030) Patient Weight // ----------------------------------------------------------------------------- TCLAP::ValueArg patientweightArg ( "", "patientweight", "(0010,1030) Patient Weight", false, "", "WW", cmd); //END Patient command line arguments //BEGIN Study command line arguments // ----------------------------------------------------------------------------- // (0020,000d) Study Instance UID // ----------------------------------------------------------------------------- TCLAP::ValueArg studyinstanceuidArg ( "", "studyinstanceuid", "(0020,000d) Study Instance UID", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0020,0010) Study ID // ----------------------------------------------------------------------------- TCLAP::ValueArg studyidArg ( "", "studyid", "(0020,0010) Study ID", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,1030) Study Description // ----------------------------------------------------------------------------- TCLAP::ValueArg studydescriptionArg ( "", "studydescription", "(0008,1030) Study Description", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0020) Study Date // ----------------------------------------------------------------------------- TCLAP::ValueArg studydateArg ( "", "studydate", "(0008,0020) Study Date", false, "", "YYYYMMDD", cmd); // ----------------------------------------------------------------------------- // (0008,0030) Study Time // ----------------------------------------------------------------------------- TCLAP::ValueArg studytimeArg ( "", "studytime", "(0008,0030) Study Time", false, "", "hhmmss", cmd); // ----------------------------------------------------------------------------- // Do not use original study // ----------------------------------------------------------------------------- TCLAP::SwitchArg donotUseOriginalstudySwitch ( "", "donotuseoriginalstudy", "Do not use original study", cmd, false); //END Study command line arguments //BEGIN Series command line arguments // ----------------------------------------------------------------------------- // (0020,000e) Series Instance ID // ----------------------------------------------------------------------------- TCLAP::ValueArg seriesinstanceuidArg ( "", "seriesinstanceuid", "(0020,000e) Series Instance UID", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0020,0011) Series Number // ----------------------------------------------------------------------------- TCLAP::ValueArg seriesnumberArg ( "", "seriesnumber", "(0020,0011) Series Number", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,103e) Series Description // ----------------------------------------------------------------------------- TCLAP::ValueArg seriesdescriptionArg ( "", "seriesdescription", "(0008,103e) Series Description", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0021) Series Date // ----------------------------------------------------------------------------- TCLAP::ValueArg seriesdateArg ( "", "seriesdate", "(0008,0021) Series Date", false, "", "AAAAMMGG", cmd); // ----------------------------------------------------------------------------- // (0008,0031) Series Time // ----------------------------------------------------------------------------- TCLAP::ValueArg seriestimeArg ( "", "seriestime", "(0008,0031) Series Time", false, "", "AAAAMMGG", cmd); // ----------------------------------------------------------------------------- // Use original series // ----------------------------------------------------------------------------- TCLAP::SwitchArg useOriginalseriesSwitch ( "", "useoriginalseries", "Use original series", cmd, false); //END Series command line arguments //BEGIN Acquisition command line arguments // ----------------------------------------------------------------------------- // (0020,0012) Acquisition Number // ----------------------------------------------------------------------------- TCLAP::ValueArgacquisitionnumberArg ( "", "acquisitionnumber", "(0020,0012) Acquisition Number", false, "", "string", cmd); // ----------------------------------------------------------------------------- // (0008,0022) Acquisition Date // ----------------------------------------------------------------------------- TCLAP::ValueArg acquisitiondateArg ( "", "acquisitiondate", "(0008,0022) Acquisition Date", false, "", "AAAAMMGG", cmd); // ----------------------------------------------------------------------------- // (0008,0032) Acquisition Time // ----------------------------------------------------------------------------- TCLAP::ValueArg acquisitiontimeArg ( "", "acquisitiontime", "(0008,0032) Acquisition Time", false, "", "AAAAMMGG", cmd); //END Acquisition command line arguments //BEGIN Instance command line arguments //END Instance command line arguments //BEGIN Input command line arguments // ----------------------------------------------------------------------------- // NIFTI Input file // ----------------------------------------------------------------------------- TCLAP::ValueArg inputArg ( "i", "inputfile", "Input NIFTI 1 file", true, "", "string", cmd); //END Input command line arguments //BEGIN Filters command line arguments // ----------------------------------------------------------------------------- // Rescale image // ----------------------------------------------------------------------------- TCLAP::SwitchArg rescaleSwitch ( "r", "rescale", "Rescale image before exporting", cmd, false); //END Filters command line arguments //BEGIN Output command line arguments // ----------------------------------------------------------------------------- // DICOM Output directory // ----------------------------------------------------------------------------- TCLAP::ValueArg outputArg ( "o", "outputdirectory", "Output dicom directory", true, "", "string", cmd); // ----------------------------------------------------------------------------- // DICOM File names prefix // ----------------------------------------------------------------------------- TCLAP::ValueArg prefixArg ( "p", "prefix", "Prefix of dicom file names", false, "N2D_", "string", cmd); // ----------------------------------------------------------------------------- // DICOM File names suffix // ----------------------------------------------------------------------------- TCLAP::ValueArg suffixArg ( "s", "suffix", "Suffix of dicom file names", false, ".dcm", "string", cmd); // ----------------------------------------------------------------------------- // DICOM Number of digits in filename // ----------------------------------------------------------------------------- // TODO Number of digits in filename TCLAP::ValueArg digitsArg ( "#", "digits", "Number of digits in dicom file names", false, 4, "int", cmd); //END Output command line arguments //END Command line arguments declaration //BEGIN Command line arguments parsing cmd.parse( argc, argv ); //END Command line arguments parsing //BEGIN Populating structs //BEGIN Accession number command line arguments accessionNumberArgs.yes = yesSwitch.getValue(); if (accessionnumberArg.isSet()) accessionNumberArgs.accessionnumber = accessionnumberArg.getValue(); //END Accession number command line arguments //BEGIN DICOM header command line arguments if (dicomheaderfileArg.isSet()) dicomHeaderArgs.dicomheaderfile = dicomheaderfileArg.getValue(); //END DICOM header command line arguments //BEGIN DICOM class command line arguments // dicomClassArgs.transfersyntaxuid = transfersyntaxuidArg.getValue(); dicomClassArgs.modality = modalityArg.getValue(); dicomClassArgs.sopclassuid = sopclassuidArg.getValue(); dicomClassArgs.imagetype = imagetypeArg.getValue(); dicomClassArgs.softwareversion = softwareversionArg.getValue(); dicomClassArgs.protocolname = protocolnameArg.getValue(); //END DICOM class command line arguments //BEGIN Other DICOM tags command line arguments otherDicomTagsArgs.manufacturer = manufacturerArg.getValue(); otherDicomTagsArgs.manufacturersmodelname = manufacturersmodelnameArg.getValue(); otherDicomTagsArgs.institutionname = institutionnameArg.getValue(); otherDicomTagsArgs.referringphysiciansname = referringphysiciansnameArg.getValue(); //END Other DICOM tags command line arguments //BEGIN Patient command line arguments patientArgs.patientname = patientnameArg.getValue(); patientArgs.patientid = patientidArg.getValue(); patientArgs.patientdob = patientdobArg.getValue(); patientArgs.patientsex = patientsexArg.getValue(); patientArgs.patientage = patientageArg.getValue(); patientArgs.patientweight = patientweightArg.getValue(); //END Patient command line arguments //BEGIN Study command line arguments studyArgs.studyinstanceuid = studyinstanceuidArg.getValue(); studyArgs.studyid = studyidArg.getValue(); studyArgs.studydescription = studydescriptionArg.getValue(); studyArgs.studydate = studydateArg.getValue(); studyArgs.studytime = studytimeArg.getValue(); studyArgs.donotuseoriginalstudy = donotUseOriginalstudySwitch.getValue(); //END Study command line arguments //BEGIN Series command line arguments seriesArgs.seriesinstanceuid = seriesinstanceuidArg.getValue(); seriesArgs.seriesnumber = seriesnumberArg.getValue(); seriesArgs.seriesdescription = seriesdescriptionArg.getValue(); seriesArgs.seriesdate = seriesdateArg.getValue(); seriesArgs.seriestime = seriestimeArg.getValue(); seriesArgs.useoriginalseries = useOriginalseriesSwitch.getValue(); //END Series command line arguments //BEGIN Acquisition command line arguments acquisitionArgs.acquisitionnumber = acquisitionnumberArg.getValue(); acquisitionArgs.acquisitiondate = acquisitiondateArg.getValue(); acquisitionArgs.acquisitiontime = acquisitiontimeArg.getValue(); //END Acquisition command line arguments //BEGIN Instance command line arguments //END Instance command line arguments //BEGIN Input command line arguments inputArgs.inputfile = inputArg.getValue(); //END Input command line arguments //BEGIN Filters command line arguments filtersArgs.rescale = rescaleSwitch.getValue(); //END Filters command line arguments //BEGIN Output command line arguments outputArgs.outputdirectory = outputArg.getValue(); outputArgs.prefix = prefixArg.getValue(); outputArgs.suffix = suffixArg.getValue(); outputArgs.digits = digitsArg.getValue(); //END Output command line arguments //END Populating structs } catch (TCLAP::ArgException &e) { std::cerr << "error: " << e.error() << " for arg " << e.argId() << std::endl; return false; } #ifdef DEBUG DebugPrint(); #endif //DEBUG return true; } void CommandLineParser::DebugPrint( void ) { std::cout << "-----------------------------------------" << std::endl; //BEGIN Accession number std::cout << "Accession Number:" << std::endl; std::cout << " (0008|0050) Accession Number = " << accessionNumberArgs.accessionnumber << std::endl; std::cout << " yes = " << accessionNumberArgs.yes << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Accession number //BEGIN DICOM header std::cout << "DICOM Header:" << std::endl; std::cout << " dicomheaderfile = " << dicomHeaderArgs.dicomheaderfile << std::endl; std::cout << "-----------------------------------------" << std::endl; //END DICOM header //BEGIN DICOM class/modality std::cout << "DICOM class/modality:" << std::endl; // std::cout << " (0002,0010) Transfer Syntax UID = " << dicomClassArgs.transfersyntaxuid << std::endl; std::cout << " (0008,0016) SOP Class UID = " << dicomClassArgs.sopclassuid << std::endl; std::cout << " (0008,0060) Modality = " << dicomClassArgs.modality << std::endl; std::cout << " (0008,0008) Image Type = " << dicomClassArgs.imagetype << std::endl; std::cout << " (0018,1020) Software Version(s) = " << dicomClassArgs.softwareversion << std::endl; std::cout << " (0018,1030) Protocol Name = " << dicomClassArgs.protocolname << std::endl; std::cout << "-----------------------------------------" << std::endl; //END DICOM class/modality //BEGIN Other std::cout << "Other:" << std::endl; std::cout << " (0008|0070) Manufacturer = " << otherDicomTagsArgs.manufacturer << std::endl; std::cout << " (0008,1090) Manufacturer's Model Name = " << otherDicomTagsArgs.manufacturer << std::endl; std::cout << " (0008|0080) Istitution Name = " << otherDicomTagsArgs.institutionname << std::endl; std::cout << " (0008|0090) Referring Physician's Name = " << otherDicomTagsArgs.referringphysiciansname << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Other //BEGIN Patient std::cout << "Patient:" << std::endl; std::cout << " (0010|0010) Patient Name = " << patientArgs.patientname << std::endl; std::cout << " (0010|0020) Patient ID = " << patientArgs.patientid << std::endl; std::cout << " (0010|0030) Patient Date of Birth = " << patientArgs.patientdob << std::endl; std::cout << " (0010|0040) Patient Sex = " << patientArgs.patientsex << std::endl; std::cout << " (0010|1010) Patient Age = " << patientArgs.patientage << std::endl; std::cout << " (0010|1030) Patient Weight = " << patientArgs.patientweight << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Patient //BEGIN Study std::cout << "Study:" << std::endl; std::cout << " (0020|000d) Study Instance UID = " << studyArgs.studyinstanceuid << std::endl; std::cout << " (0020|0010) Study ID = " << studyArgs.studyid << std::endl; std::cout << " (0008|1030) Study Description = " << studyArgs.studydescription << std::endl; std::cout << " (0008|0020) Study Date = " << studyArgs.studydate << std::endl; std::cout << " (0008|0020) Study Time = " << studyArgs.studytime << std::endl; std::cout << " donotuseoriginalstudy = " << studyArgs.donotuseoriginalstudy << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Study //BEGIN Series std::cout << "Series:" << std::endl; std::cout << " (0020|000e) Series Instance UID = " << seriesArgs.seriesinstanceuid << std::endl; std::cout << " (0020|0011) Series Number = " << seriesArgs.seriesnumber << std::endl; std::cout << " (0008|103e) Series Description = " << seriesArgs.seriesdescription << std::endl; std::cout << " (0008|0021) Series Date = " << seriesArgs.seriesdate << std::endl; std::cout << " (0008|0031) Series Time = " << seriesArgs.seriestime << std::endl; std::cout << " useoriginalseries = " << seriesArgs.useoriginalseries << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Series //BEGIN Acquisition std::cout << "Acqisition:" << std::endl; std::cout << " (0020|0012) Acquisition Number = " << acquisitionArgs.acquisitionnumber << std::endl; std::cout << " (0008,0022) Acquisition Date = " << acquisitionArgs.acquisitiondate << std::endl; std::cout << " (0008,0032) Acquisition Time = " << acquisitionArgs.acquisitiontime << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Acquisition //BEGIN Input std::cout << "Input:" << std::endl; std::cout << " inputfile = " << inputArgs.inputfile << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Input //BEGIN Filter std::cout << "Filter:" << std::endl; std::cout << " rescale = " << filtersArgs.rescale << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Filter //BEGIN Instance std::cout << "Instance:" << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Instance //BEGIN Output std::cout << "Output:" << std::endl; std::cout << " outputdirectory = " << outputArgs.outputdirectory << std::endl; std::cout << " suffix = " << outputArgs.suffix << std::endl; std::cout << " prefix = " << outputArgs.prefix << std::endl; std::cout << " digits = " << outputArgs.digits << std::endl; std::cout << "-----------------------------------------" << std::endl; //END Output } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dCommandLineParser.h000066400000000000000000000034611226163507100215770ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DCOMMANDLINEPARSER_H #define N2DCOMMANDLINEPARSER_H #include #include "n2dDefsCommandLineArgsStructs.h" namespace n2d { //BEGIN class n2d::CommandLineParser /*! * \brief Parses command line and fills nifti2dicomArgs * */ class CommandLineParser { public: CommandLineParser() {} ~CommandLineParser() {} bool Parse( int argc, char* argv[] ); void DebugPrint( void ); AccessionNumberArgs accessionNumberArgs; DicomHeaderArgs dicomHeaderArgs; DicomClassArgs dicomClassArgs; OtherDicomTagsArgs otherDicomTagsArgs; PatientArgs patientArgs; StudyArgs studyArgs; SeriesArgs seriesArgs; AcquisitionArgs acquisitionArgs; InputArgs inputArgs; FiltersArgs filtersArgs; InstanceArgs instanceArgs; OutputArgs outputArgs; }; //END class n2d::CommandLineParser } // namespace n2d #endif // N2DCOMMANDLINEPARSER_H nifti2dicom-0.4.7/src/core/n2dDefsCommandLineArgsStructs.h000066400000000000000000000150071226163507100234300ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DDEFSCOMMANDLINEARGSSTRUCTS_H #define N2DDEFSCOMMANDLINEARGSSTRUCTS_H #include #include namespace n2d { //BEGIN struct n2d::AccessionNumberArgs /*! * \brief Contains all arguments read from command line related to filters. * * The following tags are read: * * \li (0008,0050) Accession Number */ typedef struct AccessionNumberArgs { AccessionNumberArgs(): yes(false) {} std::string accessionnumber; bool yes; } AccessionNumberArgs; //END struct n2d::AccessionNumberArgs //BEGIN struct n2d::DicomHeaderArgs /*! * \brief Contains all arguments read from command line related to DICOM header. * */ typedef struct DicomHeaderArgs { std::string dicomheaderfile; } DicomHeaderArgsArgs; //END struct n2d::DicomHeaderArgs //BEGIN struct n2d::DicomClassArgs /*! * \brief Contains all arguments read from command line related to DICOM class/modality, etc. * * The following tags are read: * * \li (0002,0010) Transfer Syntax UID * \li (0008,0016) SOP Class UID * \li (0008,0060) Modality * \li (0008,0008) Image Type * \li (0018,1020) Software Version(s) * \li (0018,1030) Protocol Name * * \note (0002,0010) Transfer Syntax UID cannot be set by GDCM * \todo otherdicomtags */ typedef struct DicomClassArgs { // std::string transfersyntaxuid; std::string modality; std::string sopclassuid; std::string imagetype; std::string softwareversion; std::string protocolname; // std::map otherdicomtags; //TODO } DicomClassArgs; //END struct n2d::DicomClassArgs //BEGIN struct n2d::OtherDicomTagsArgs /*! * \brief Contains all arguments read from command line related to other dicom tags. * * The following tags are read: * * \li (0008,0070) Manufacturer * \li (0008,1090) Manufacturer's Model Name * \li (0008,0080) Institution Name * \li (0008,0090) Referring Physician's Name * * \todo othertags */ typedef struct OtherDicomTagsArgs { std::string manufacturer; std::string manufacturersmodelname; std::string institutionname; std::string referringphysiciansname; // std::map othertags; //TODO } OtherDicomTagsArgs; //END struct n2d::OtherDicomTagsArgs //BEGIN struct n2d::PatientArgs /*! * \brief Contains all arguments read from command line related to patient's vital statistics. * * The following tags are read: * * \li (0010,0010) Patient's Name * \li (0010,0020) Patient ID * \li (0010,0030) Patient's Birth Date * \li (0010,0040) Patient's Sex * \li (0010,1010) Patient's Age * \li (0010,1030) Patient's Weight * \li (0010|****) * * \todo otherpatienttags */ typedef struct PatientArgs { std::string patientname; std::string patientid; std::string patientdob; std::string patientsex; std::string patientage; std::string patientweight; } PatientArgs; //END struct n2d::PatientArgs //BEGIN struct n2d::StudyArgs /*! * \brief Contains all arguments read from command line related to DICOM study. * * The following tags are read: * * \li (0020|000d) Study Instance UID * \li (0020|0010) Study ID * \li (0008|1030) Study Description * \li (0008|0020) Study Date * \li (0008|0030) Study Time */ typedef struct StudyArgs { StudyArgs() : donotuseoriginalstudy(false) {} std::string studyinstanceuid; std::string studyid; std::string studydescription; std::string studydate; std::string studytime; bool donotuseoriginalstudy; } StudyArgs; //END struct n2d::StudyArgs //BEGIN struct n2d::SeriesArgs /*! * \brief Contains all arguments read from command line related to DICOM series. * * The following tags are read: * * \li (0020,000e) Series Instance UID * \li (0020,0011) Series Number * \li (0008,103e) Series Description * \li (0008,0021) Series Date * \li (0008,0031) Series Time */ typedef struct SeriesArgs { SeriesArgs() : useoriginalseries(false) {} std::string seriesinstanceuid; std::string seriesnumber; std::string seriesdescription; std::string seriesdate; std::string seriestime; bool useoriginalseries; } SeriesArgs; //END struct n2d::SeriesArgs //BEGIN struct n2d::AcquisitionArgs /*! * \brief Contains all arguments read from command line related to DICOM acquisition. * * The following tags are read: * * \li (0020,0012) Acquisition Number * \li (0008,0022) Acquisition Date * \li (0008,0032) Acquisition Time */ typedef struct AcquisitionArgs { std::string acquisitionnumber; std::string acquisitiondate; std::string acquisitiontime; } AcquisitionArgs; //END struct n2d::AcquisitionArgs //BEGIN struct n2d::InputArgs /*! * \brief Contains all arguments read from command line related to input. * */ typedef struct InputArgs { std::string inputfile; } InputArgs; //END struct n2d::InputArgs //BEGIN struct n2d::FiltersArgs /*! * \brief Contains all arguments read from command line related to filters. * * \todo orientation */ typedef struct FiltersArgs { FiltersArgs() : rescale(false) {} // std::string orientation; //TODO bool rescale; } FiltersArgs; //END struct n2d::FiltersArgs //BEGIN struct n2d::InstanceArgs /*! * \brief Contains all arguments read from command line related to DICOM instance. * * \todo otherinstancetags */ typedef struct InstanceArgs { std::map otherinstancetags; //TODO } InstanceArgs; //END struct n2d::InstanceArgs //BEGIN struct n2d::OutputArgs /*! * \brief Contains all arguments read from command line related to output. * */ typedef struct OutputArgs { std::string outputdirectory; std::string suffix; std::string prefix; int digits; } OutputArgs; //END struct n2d::OutputArgs } // namespace n2d #endif // N2DDEFSCOMMANDLINEARGSSTRUCTS_H nifti2dicom-0.4.7/src/core/n2dDefsIO.h000066400000000000000000000027551226163507100173520ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DDEFSIO_H #define N2DDEFSIO_H #include #include #include #include #include #include #include "n2dDefsImage.h" namespace n2d { //typedef itk::ImageFileReader< ImageType > ReaderType; typedef itk::ImageFileReader< DICOMImageType > DICOMReaderType; typedef itk::GDCMImageIO DICOMImageIOType; typedef itk::NumericSeriesFileNames NameGeneratorType; typedef itk::ImageSeriesWriter< DICOM3DImageType, DICOMImageType > SeriesWriterType; } // namespace n2d #endif // N2DDEFSIO_H nifti2dicom-0.4.7/src/core/n2dDefsImage.h000066400000000000000000000025701226163507100200600ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DDEFSIMAGE_H #define N2DDEFSIMAGE_H #include #include #include namespace n2d { // Base definitions const int Dimension = 3; const int DICOMDimension = 2; typedef itk::ImageIOBase::IOComponentType PixelType; typedef signed short DICOMPixelType; typedef itk::ImageBase ImageType; typedef itk::Image DICOM3DImageType; typedef itk::Image DICOMImageType; } // namespace n2d #endif // N2DDEFSIMAGE_H nifti2dicom-0.4.7/src/core/n2dDefsMetadata.h000066400000000000000000000024521226163507100205550ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DDEFSMETADATA_H #define N2DDEFSMETADATA_H #include #include #include "n2dDefsIO.h" namespace n2d { typedef itk::MetaDataDictionary DictionaryType; typedef itk::MetaDataObject< std::string > MetaDataStringType; typedef itk::MetaDataObject< unsigned short > MetaDataUnsignedShortType; typedef SeriesWriterType::DictionaryArrayType DictionaryArrayType; } // namespace n2d #endif // N2DDEFSMETADATA_Hnifti2dicom-0.4.7/src/core/n2dDicomClass.cxx000066400000000000000000000127741226163507100206370ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dDicomClass.h" #include "n2dVersion.h" #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string transfersyntaxuidtag ( "0002|0010 "); const std::string sopclassuidtag ( "0008|0016" ); const std::string modalitytag ( "0008|0060" ); const std::string imagetypetag ( "0008|0008" ); const std::string softwareversiontag ( "0018|1020" ); const std::string protocolnametag ( "0018|1030" ); //END DICOM tags //BEGIN Default values const std::string defaulttransfersyntaxuid ( "1.2.840.10008.1.2" ); const std::string defaultsopclassuid ( "1.2.840.10008.5.1.4.1.1.4" ); const std::string defaultmodality ( "MR" ); const std::string defaultimagetype ( "DERIVED\\SECONDARY" ); const std::string defaultsoftwareversion ( GetInternalVersion() ); const std::string defaultprotocolname ( "nifti2dicom" ); //END Default values bool DicomClass::Update() { #ifdef DEBUG std::cout << "DICOM Class - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif CopyDicomClassTags(m_ImportedDict, m_Dict); #ifdef DEBUG std::cout << "DICOM Class - After CopyDicomClassTags:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif /* //BEGIN (0002,0010) Transfer Syntax UID if (!m_DicomClassArgs.transfersyntaxuid.empty()) itk::EncapsulateMetaData( m_Dict, transfersyntaxuidtag, m_DicomClassArgs.transfersyntaxuid); else itk::EncapsulateMetaData( m_Dict, transfersyntaxuidtag, defaulttransfersyntaxuid); //END (0002,0010) Transfer Syntax UID */ //BEGIN (0008,0016) SOP Class UID if (!m_DicomClassArgs.sopclassuid.empty()) itk::EncapsulateMetaData( m_Dict, sopclassuidtag, m_DicomClassArgs.sopclassuid); else itk::EncapsulateMetaData( m_Dict, sopclassuidtag, defaultsopclassuid); //END (0008,0016) SOP Class UID //BEGIN (0008,0060) Modality if (!m_DicomClassArgs.modality.empty()) itk::EncapsulateMetaData( m_Dict, modalitytag, m_DicomClassArgs.modality); else itk::EncapsulateMetaData( m_Dict, modalitytag, defaultmodality); //END (0008,0060) Modality //BEGIN (0008,0008) Image Type if (!m_DicomClassArgs.imagetype.empty()) itk::EncapsulateMetaData( m_Dict, imagetypetag, m_DicomClassArgs.imagetype); else itk::EncapsulateMetaData( m_Dict, imagetypetag, defaultimagetype); //END (0008,0008) Image Type //BEGIN (0018,1020) Software Version(s) if (!m_DicomClassArgs.softwareversion.empty()) itk::EncapsulateMetaData( m_Dict, softwareversiontag, m_DicomClassArgs.softwareversion); else itk::EncapsulateMetaData( m_Dict, softwareversiontag, defaultsoftwareversion); //END (0018,1020) Software Version(s) //BEGIN (0018,1030) Protocol Name if (!m_DicomClassArgs.protocolname.empty()) itk::EncapsulateMetaData( m_Dict, protocolnametag, m_DicomClassArgs.protocolname); else itk::EncapsulateMetaData( m_Dict, protocolnametag, defaultprotocolname); //END (0018,1030) Protocol Name #ifdef DEBUG std::cout << "DICOM Class - END:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << "----------------------------------------------------------------------------------------" << std::endl; #endif return true; } void DicomClass::CopyDicomClassTags (const DictionaryType &fromDict, DictionaryType &toDict) { DictionaryType::ConstIterator itr = fromDict.Begin(); DictionaryType::ConstIterator end = fromDict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; if ( !tagkey.compare( 0, 9, modalitytag ) || !tagkey.compare( 0, 9, sopclassuidtag ) ) { std::string tagvalue = entryvalue->GetMetaDataObjectValue(); #ifdef DEBUG std::cout << "Copying " << tagkey << " " << tagvalue<< std::endl; #endif //DEBUG itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } } ++itr; } } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dDicomClass.h000066400000000000000000000036561226163507100202630ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DDICOMCLASS_H #define N2DDICOMCLASS_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::DicomClass /*! * \brief A class that handles DICOM tags related to Dicom Class, Modality, etc. * * The following tags are handled by this class: * * \li (0002,0010) Transfer Syntax UID * \li (0008,0016) SOP Class UID * \li (0008,0060) Modality * \li (0008,0008) Image Type * \li (0018,1030) Protocol Name */ class DicomClass { public: DicomClass(const DicomClassArgs& dicomClassArgs, const DictionaryType& importedDict, DictionaryType& dict) : m_DicomClassArgs(dicomClassArgs), m_ImportedDict(importedDict), m_Dict(dict) { } ~DicomClass() {} bool Update( void ); private: static void CopyDicomClassTags(const itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict); const DicomClassArgs& m_DicomClassArgs; const DictionaryType& m_ImportedDict; DictionaryType& m_Dict; }; //END class n2d::DicomClass } // namespace n2d #endif // N2DDICOMCLASS_Hnifti2dicom-0.4.7/src/core/n2dHeaderImporter.cxx000066400000000000000000000041331226163507100215160ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dHeaderImporter.h" #include "n2dDefsIO.h" #include "n2dToolsMetaDataDictionary.h" namespace n2d { bool HeaderImporter::Import( void ) { if (!m_DicomHeaderArgs.dicomheaderfile.empty()) { if (!ReadDICOMTags(m_DicomHeaderArgs.dicomheaderfile)) return false; } return true; } bool HeaderImporter::ReadDICOMTags(std::string file) { DICOMReaderType::Pointer reader = DICOMReaderType::New(); DICOMImageIOType::Pointer dicomIO = DICOMImageIOType::New(); reader->SetImageIO( dicomIO ); reader->SetFileName( file ); try { std::cout << " * \033[1;34mReading DICOM Header\033[0m... " << std::endl; reader->Update(); std::cout << " * \033[1;34mReading DICOM Header\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mReading DICOM Header\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return false; } tools::CopyDictionary( reader->GetMetaDataDictionary(), m_Dictionary ); return true; } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dHeaderImporter.h000066400000000000000000000034421226163507100211450ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DHEADERIMPORTER_H #define N2DHEADERIMPORTER_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::HeaderImporter /*! * \brief Reads a DICOM file and imports its header * */ class HeaderImporter { public: HeaderImporter(const DicomHeaderArgs& dicomHeaderArgs, DictionaryType& dict) : m_DicomHeaderArgs(dicomHeaderArgs), m_Dictionary(dict) { } ~HeaderImporter() {} bool Import( void ); /*! * \brief Get internal DICOM tags dictionary * * \return Internal DICOM tags dictionary. */ inline const n2d::DictionaryType& getMetaDataDictionary(void) const { return m_Dictionary; } private: bool ReadDICOMTags( std::string file ); const DicomHeaderArgs& m_DicomHeaderArgs; //!< Input Arguments. n2d::DictionaryType &m_Dictionary; }; //END class n2d::HeaderImporter } // namespace n2d #endif // #ifndef N2DHEADERIMPORTER_H nifti2dicom-0.4.7/src/core/n2dInputFilter.cxx000066400000000000000000000165141226163507100210570ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dInputFilter.h" #include #include #include #include //#define NO_REORIENT namespace n2d { //BEGIN DICOM tags const std::string patientorientationtag ( "0020|0020" ); //END DICOM tags //BEGIN Default values const std::string defaultpatientorientation ( "L\\R" ); //END Default values bool InputFilter::Filter( void ) { #ifdef DEBUG std::cout << "InputFilter - BEGIN" << std::endl; std::cout << "InputFilter::m_InputImage directions:" << std::endl; std::cout << m_InputImage->GetDirection() << std::endl; #endif // DEBUG bool ret=false; switch(m_InputPixelType) { case itk::ImageIOBase::UCHAR: { ret=InternalFilter(); break; } case itk::ImageIOBase::CHAR: { ret=InternalFilter(); break; } case itk::ImageIOBase::USHORT: { ret=InternalFilter(); break; } case itk::ImageIOBase::SHORT: { ret=InternalFilter(); break; } case itk::ImageIOBase::UINT: { ret=InternalFilter(); break; } case itk::ImageIOBase::INT: { ret=InternalFilter(); break; } case itk::ImageIOBase::ULONG: { ret=InternalFilter(); break; } case itk::ImageIOBase::LONG: { ret=InternalFilter(); break; } case itk::ImageIOBase::FLOAT: { ret=InternalFilter(); break; } case itk::ImageIOBase::DOUBLE: { ret=InternalFilter(); break; } default: { std::cerr<<"ERROR: Unknown pixel type"<GetDirection() << std::endl; #endif // DEBUG return ret; } template bool InputFilter::InternalFilter(void) { //BEGIN Typedefs typedef itk::Image InternalImageType; typedef itk::OrientImageFilter OrienterType; typedef itk::RescaleIntensityImageFilter RescaleType; typedef itk::CastImageFilter < InternalImageType, DICOM3DImageType > CastType; //END Typedefs //BEGIN declarations typename OrienterType::Pointer orienter; typename RescaleType::Pointer rescaleFilter; typename CastType::Pointer cast; //END declarations typename InternalImageType::ConstPointer internalImage; internalImage = dynamic_cast< const InternalImageType* >(m_InputImage.GetPointer()); if(!internalImage) { std::cerr<<"Error Null Pointer In Filter"<UseImageDirectionOn(); orienter->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_RAI); //Orient to RAI orienter->SetInput(internalImage); try { std::cout << " * \033[1;34mOrienting\033[0m... " << std::endl; orienter->Update(); std::cout << " * \033[1;34mOrienting\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mOrienting\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return false; } itk::EncapsulateMetaData(m_Dict, patientorientationtag, defaultpatientorientation); #endif //END Orienting image if (m_FiltersArgs.rescale) { //BEGIN Rescale rescaleFilter = RescaleType::New(); #ifdef NO_REORIENT rescaleFilter->SetInput(internalImage); #else rescaleFilter->SetInput(orienter->GetOutput()); #endif rescaleFilter->SetOutputMinimum( 0 ); rescaleFilter->SetOutputMaximum( (2^11)-1 ); try { std::cout << " * \033[1;34mRescaling\033[0m... " << std::endl; rescaleFilter->Update(); std::cout << " * \033[1;34mRescaling\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mRescaling\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return true; } m_FilteredImage =rescaleFilter->GetOutput(); //END Rescale } else { //BEGIN Cast // Caster cast = CastType::New(); #ifdef NO_REORIENT cast->SetInput(internalImage); #else cast->SetInput(orienter->GetOutput()); #endif try { std::cout << " * \033[1;34mCasting\033[0m... " << std::endl; cast->Update(); std::cout << " * \033[1;34mCasting\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mCasting\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return false; } m_FilteredImage = cast->GetOutput(); //END Cast } return true; } } // namespace n2d //TODO set correctly BITS ALLOCATED (0028,0100)/ BITS STORED (0028,0101) / HIGH BIT (0028,0102) // (at the moment it looks impossible to do this using itk+gdcm) // // Bits Allocated // itk::EncapsulateMetaData( inputDict, "0028|0100", "16"); // // Bits Stored // itk::EncapsulateMetaData( inputDict, "0028|0101", "12"); // // High Bit // itk::EncapsulateMetaData( inputDict, "0028|0102", "11"); nifti2dicom-0.4.7/src/core/n2dInputFilter.h000066400000000000000000000040221226163507100204730ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DINPUTFILTER_H #define N2DINPUTFILTER_H #include "n2dDefsImage.h" #include "n2dDefsMetadata.h" #include "n2dDefsCommandLineArgsStructs.h" namespace n2d { //BEGIN class n2d::InputFilter /*! * \brief Filters the image * * Also handles: * * \li (0020,0020) Patient Orientation/ */ class InputFilter { public: InputFilter(const FiltersArgs& filtersArgs, ImageType::ConstPointer inputImage, PixelType inputPixelType, DictionaryType& dict) : m_FiltersArgs(filtersArgs), m_InputImage(inputImage), m_InputPixelType(inputPixelType), m_Dict(dict) { } ~InputFilter() {} bool Filter( void ); /*! * \brief Get filtered image. * * \return Internal image * \sa m_FilteredImage */ inline DICOM3DImageType::ConstPointer getFilteredImage(void) const { return m_FilteredImage; } private: const FiltersArgs& m_FiltersArgs; ImageType::ConstPointer m_InputImage; PixelType m_InputPixelType; DICOM3DImageType::ConstPointer m_FilteredImage; DictionaryType& m_Dict; template bool InternalFilter(void); }; //END class n2d::InputFilter } // namespace n2d #endif // N2DINPUTFILTER_H nifti2dicom-0.4.7/src/core/n2dInputImporter.cxx000066400000000000000000000100761226163507100214300ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dInputImporter.h" namespace n2d { bool InputImporter::Import( void ) { itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( m_InputArgs.inputfile.c_str(), itk::ImageIOFactory::ReadMode ); if(!imageIO) { std::cerr << "No ImageIO was found Not a valid Nifti" << std::endl; return false; } imageIO->SetFileName(m_InputArgs.inputfile); imageIO->ReadImageInformation(); if(imageIO->GetPixelType() != itk::ImageIOBase::SCALAR) { std::cerr << "Only images of type SCALAR are supported." << std::endl; return false; } if(imageIO->GetNumberOfDimensions() != 3) { std::cerr << "Cannot open a " << imageIO->GetNumberOfDimensions() << "D image. Only 3D images are supported." << std::endl; return false; } m_pixelType = imageIO->GetComponentType(); bool ret = false; switch(m_pixelType) { case itk::ImageIOBase::UCHAR: { ret = InternalRead(); break; } case itk::ImageIOBase::CHAR: { ret = InternalRead(); break; } case itk::ImageIOBase::USHORT: { ret = InternalRead(); break; } case itk::ImageIOBase::SHORT: { ret = InternalRead(); break; } case itk::ImageIOBase::UINT: { ret = InternalRead(); break; } case itk::ImageIOBase::INT: { ret = InternalRead(); break; } case itk::ImageIOBase::ULONG: { ret = InternalRead(); break; } case itk::ImageIOBase::LONG: { ret = InternalRead(); break; } case itk::ImageIOBase::FLOAT: { ret = InternalRead(); break; } case itk::ImageIOBase::DOUBLE: { ret = InternalRead(); break; } default: { std::cerr<<"ERROR: Unknown pixel type"< bool InputImporter::InternalRead( ) { typedef itk::Image InputImageType; typedef itk::ImageFileReader ReaderType; typename ReaderType::Pointer reader = ReaderType::New(); reader->SetFileName( m_InputArgs.inputfile ); try { std::cout << " * \033[1;34mReading input image\033[0m... " << std::endl; reader->Update(); std::cout << " * \033[1;34mReading input image\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mReading input image\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return false; } m_ImportedImage = reader->GetOutput(); m_dictionary = &(reader->GetMetaDataDictionary()); return true; } } nifti2dicom-0.4.7/src/core/n2dInputImporter.h000066400000000000000000000046151226163507100210570ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DINPUTIMPORTER_H #define N2DINPUTIMPORTER_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsImage.h" #include "n2dDefsMetadata.h" #include "n2dDefsIO.h" namespace n2d { //BEGIN class n2d::InputImporter /*! * \brief Imports a 3D image * * \warning Image format must be supported by ITK * \todo Copy MetaDataDictionary ? */ class InputImporter { public: InputImporter(const InputArgs& inputArgs) : m_InputArgs(inputArgs) { } ~InputImporter() {} /*! * \brief Get internal DICOM tags dictionary * * \return Internal DICOM tags dictionary. */ inline n2d::DictionaryType& getMetaDataDictionary( void ) const { return *m_dictionary; } /*! * \brief Import a 3D image image. * * \return true on success. * \throw n2d::exception on failure. */ bool Import( void ); /*! * \brief Get imported image. * * \return Imported image */ inline n2d::ImageType::Pointer getImportedImage( void ) const { return m_ImportedImage; } /*! * \brief Get imported image pixel type. * * \return Imported image pixel type */ inline n2d::PixelType getPixelType(void) const{return m_pixelType; } private: const InputArgs& m_InputArgs; //!< Input Arguments. n2d::ImageType::Pointer m_ImportedImage; //!< Imported image. n2d::PixelType m_pixelType; //!< Imported image pixel type. n2d::DictionaryType* m_dictionary; //!< Nifti tags dictionary. template bool InternalRead(); }; //END class n2d::InputImporter } // namespace n2d #endif // N2DINPUTIMPORTER_H nifti2dicom-0.4.7/src/core/n2dInstance.cxx000066400000000000000000000106571226163507100203600ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dInstance.h" #include "n2dToolsMetaDataDictionary.h" #include namespace n2d { //BEGIN DICOM tags const std::string instancenumbertag ( "0020|0013" ); const std::string slicethicknesstag ( "0018|0050" ); //END DICOM tags //BEGIN Default values const std::string defaultmanufacturer ( "BIOLAB" ); //END Default values bool Instance::Update(void) { #ifdef DEBUG std::cout << "Instance - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif //BEGIN Image info unsigned int nbSlices = (m_Image->GetLargestPossibleRegion().GetSize())[2]; n2d::SeriesWriterType::DictionaryRawPointer dictionaryRaw[ nbSlices ]; ImageType::PointType position; ImageType::SpacingType spacing = m_Image->GetSpacing(); ImageType::DirectionType direction = m_Image->GetDirection(); ImageType::IndexType index; //END Image info itksys_ios::ostringstream value; value << std::dec << std::setprecision(15); for (unsigned int i=0; i(*dictionaryRaw[i], instancenumbertag, value.str()); //END (0020,0013) Instance Number //BEGIN (0018,0050) Slice Thickness value.str(""); value << spacing[2]; itk::EncapsulateMetaData(*dictionaryRaw[i], slicethicknesstag , value.str()); //END (0018,0050) Slice Thickness //WARNING In futuro questa parte potrebbe essere inutile //BEGIN ITK Tags //BEGIN ITK_NumberOfDimensions itk::EncapsulateMetaData(*dictionaryRaw[i], "ITK_NumberOfDimensions", 3); //END ITK_NumberOfDimensions //BEGIN ITK_Origin index[0] = 0; index[1] = 0; index[2] = i; m_Image->TransformIndexToPhysicalPoint(index, position); typedef itk::Array< double > DoubleArrayType; DoubleArrayType originArray(3); for(int j = 0; j<3; j++) originArray[j]=position[j]; itk::EncapsulateMetaData(*dictionaryRaw[i], "ITK_Origin", originArray); //END ITK_Origin //BEGIN ITK_Spacing DoubleArrayType spacingArray(3); for(int j = 0; j<3; j++) spacingArray[j]=spacing[j]; itk::EncapsulateMetaData(*dictionaryRaw[i], "ITK_Spacing", spacingArray); //END ITK_Spacing //BEGIN ITK_ZDirection typedef itk::Matrix< double, 3, 3 > DoubleMatrixType; DoubleMatrixType directionMatrix; for(int j = 0; j<3; j++) for(int k = 0; k<3; k++) directionMatrix[k][j]=direction[j][k]; itk::EncapsulateMetaData(*dictionaryRaw[i], "ITK_ZDirection", directionMatrix); //END ITK_ZDirection //END ITK Tags m_DictionaryArray.push_back(dictionaryRaw[i]); } #ifdef DEBUG std::cout << "Instance - END:" << std::endl << std::endl; for (unsigned int i=0; i // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DINSTANCE_H #define N2DINSTANCE_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" #include "n2dDefsImage.h" namespace n2d { //BEGIN class n2d::Instance /*! * \brief A class that handles DICOM tags related to Series * * The following tags are handled by this class: * * \li (0020,0013) Instance Number * \li (0018|0050) Slice Thickness * * Also handles: * * \li ITK_NumberOfDimensions * \li ITK_Origin * \li ITK_Spacing * \li ITK_ZDirection * * These "ITK_" tags are used by itkGDCMImageIO to know 3D information of a 2D slice but maybe in the future they'll be handled by itkSeriesWriter. * \note In future this class could be unuseful because handled by ITK + GDCM2 or maybe ITK will set correctly ITK_ tags. * \note ITK_ZDirection is not supported by ITK at the moment, a patch was submitted to support it. */ class Instance { public: Instance(const InstanceArgs& instanceArgs, DICOM3DImageType::ConstPointer image, DictionaryType& dict, DictionaryArrayType& dictionaryArray) : m_InstanceArgs(instanceArgs), m_Image(image), m_Dict(dict), m_DictionaryArray(dictionaryArray) { } ~Instance() {} bool Update( void ); private: const InstanceArgs& m_InstanceArgs; DICOM3DImageType::ConstPointer m_Image; DictionaryType& m_Dict; DictionaryArrayType& m_DictionaryArray; }; //END class n2d::Instance } // namespace n2d #endif // N2DINSTANCE_H nifti2dicom-0.4.7/src/core/n2dOtherDicomTags.cxx000066400000000000000000000066401226163507100214650ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dOtherDicomTags.h" #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string manufacturertag ( "0008|0070" ); const std::string manufacturersmodelnametag ( "0008|1090" ); const std::string institutionnametag ( "0008|0080" ); const std::string referringphysiciansnametag ( "0008|0090" ); //END DICOM tags //BEGIN Default values const std::string defaultmanufacturer ( "BIOLAB" ); const std::string defaultmanufacturersmodelname ( "nifti2dicom" ); const std::string defaultinstitutionname ( "OSP. NIGUARDA" ); //END Default values bool OtherDicomTags::Update() { #ifdef DEBUG std::cout << "Other DICOM Tags - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif //BEGIN (0008,0070) Manufacturer if (!m_OtherDicomTagsArgs.manufacturer.empty()) itk::EncapsulateMetaData( m_Dict, manufacturertag, m_OtherDicomTagsArgs.manufacturer); else itk::EncapsulateMetaData( m_Dict, manufacturertag, defaultmanufacturer); //END (0008,0070) Manufacturer //BEGIN (0008,1090) Manufacturer's Model Name if (!m_OtherDicomTagsArgs.manufacturersmodelname.empty()) itk::EncapsulateMetaData( m_Dict, manufacturersmodelnametag, m_OtherDicomTagsArgs.manufacturersmodelname); else itk::EncapsulateMetaData( m_Dict, manufacturersmodelnametag, defaultmanufacturersmodelname); //END (0008,1090) Manufacturer's Model Name //BEGIN (0008,0080) Institution Name if (!m_OtherDicomTagsArgs.institutionname.empty()) itk::EncapsulateMetaData( m_Dict, institutionnametag, m_OtherDicomTagsArgs.institutionname); else itk::EncapsulateMetaData( m_Dict, institutionnametag, defaultinstitutionname); //END (0008,0080) Institution Name //BEGIN (0008,0090) Referring Physician's Name if (!m_OtherDicomTagsArgs.referringphysiciansname.empty()) itk::EncapsulateMetaData( m_Dict, referringphysiciansnametag, m_OtherDicomTagsArgs.referringphysiciansname); //END (0008,0090) Referring Physician's Name #ifdef DEBUG std::cout << "Other DICOM Tags - END:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif return true; } } // namespace n2dnifti2dicom-0.4.7/src/core/n2dOtherDicomTags.h000066400000000000000000000033621226163507100211100ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DOTHERDICOMTAGS_H #define N2DOTHERDICOMTAGS_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::OtherDicomTags /*! * \brief A class that handles DICOM tags related to Other DICOM Tags * * The following tags are handled by this class: * * \li (0008,0070) Manufacturer * \li (0008,1090) Manufacturer's Model Name * \li (0008,0080) Institution Name * \li (0008,0090) Referring Physician's Name */ class OtherDicomTags { public: OtherDicomTags(const OtherDicomTagsArgs& otherDicomTagsArgs, DictionaryType& dict) : m_OtherDicomTagsArgs(otherDicomTagsArgs), m_Dict(dict) { } ~OtherDicomTags() {} bool Update( void ); private: const OtherDicomTagsArgs& m_OtherDicomTagsArgs; DictionaryType& m_Dict; }; //END class n2d::OtherDicomTags } // namespace n2d #endif // N2DOTHERDICOMTAGS_H nifti2dicom-0.4.7/src/core/n2dOutputExporter.cxx000066400000000000000000000066161226163507100216450ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dOutputExporter.h" #include "n2dToolsMetaDataDictionary.h" #include #include namespace n2d { bool OutputExporter::Export( void ) { #ifdef DEBUG std::cout << "OutputExporter - BEGIN" << std::endl; #endif // DEBUG unsigned int nbSlices = (m_Image->GetLargestPossibleRegion().GetSize())[2]; //BEGIN Output filename std::ostringstream fmt; fmt << m_OutputArgs.outputdirectory; fmt << "/"; fmt << m_OutputArgs.prefix; fmt << "%0"; fmt << m_OutputArgs.digits; fmt << "d"; fmt << m_OutputArgs.suffix; std::string Format = fmt.str(); #ifdef DEBUG std::cout << "Format: " << Format << std::endl; #endif // DEBUG NameGeneratorType::Pointer namesGenerator = NameGeneratorType::New(); namesGenerator->SetStartIndex( 1 ); namesGenerator->SetEndIndex( nbSlices ); namesGenerator->SetIncrementIndex( 1 ); namesGenerator->SetSeriesFormat( Format.c_str() ); //END Output filename itksys::SystemTools::MakeDirectory( m_OutputArgs.outputdirectory.c_str() ); // Create directory if it does not exist yet //BEGIN Writer SeriesWriterType::Pointer seriesWriter = SeriesWriterType::New(); seriesWriter->SetInput( m_Image ); seriesWriter->SetImageIO( m_DicomIO ); seriesWriter->SetFileNames( namesGenerator->GetFileNames() ); #ifndef DONT_USE_ARRAY seriesWriter->SetMetaDataDictionaryArray( &m_DictionaryArray ); #else // DONT_USE_ARRAY seriesWriter->SetMetaDataDictionary( m_Dict ); //seriesWriter->SetMetaDataDictionary(*m_DictionaryArray[0]); #endif // DONT_USE_ARRAY //BEGIN FIXME (see n2dOutputExporter.h) // CommandUpdate::Pointer observer = CommandUpdate::New(); // seriesWriter->AddObserver(itk::AnyEvent(), observer); //END FIXME (see n2dOutputExporter.h) // n2d::tools::PrintDictionary(*m_DictionaryArray[1]); // std::cout << std::hex << m_DictionaryArray[1] << std::endl; try { std::cout << " * \033[1;34mWriting\033[0m... " << std::endl; seriesWriter->Update(); std::cout << " * \033[1;34mWriting\033[0m... \033[1;32mDONE\033[0m" << std::endl; } catch ( itk::ExceptionObject & ex ) { std::cout << " * \033[1;34mWriting\033[0m... \033[1;31mFAIL\033[0m" << std::endl; std::string message; message = ex.GetLocation(); message += "\n"; message += ex.GetDescription(); std::cerr << message << std::endl; return false; } //END Writer #ifdef DEBUG std::cout << "OutputExporter - END" << std::endl; #endif // DEBUG return true; } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dOutputExporter.h000066400000000000000000000063351226163507100212700ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DOUTPUTEXPORTER_H #define N2DOUTPUTEXPORTER_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsImage.h" #include "n2dDefsMetadata.h" #include "n2dDefsIO.h" //#define DONT_USE_ARRAY namespace n2d { //BEGIN class n2d::OutputExporter /*! * \brief [...] * */ class OutputExporter { public: #ifndef DONT_USE_ARRAY OutputExporter(const OutputArgs& outputArgs, DICOM3DImageType::ConstPointer image, DictionaryArrayType& dictionaryArray, DICOMImageIOType::Pointer dicomIO) : m_OutputArgs(outputArgs), m_Image(image), m_DictionaryArray(dictionaryArray), m_DicomIO(dicomIO) { } #else // DONT_USE_ARRAY OutputExporter(const OutputArgs& outputArgs, DICOM3DImageType::ConstPointer image, DictionaryType& dictionary, DICOMImageIOType::Pointer dicomIO) : m_OutputArgs(outputArgs), m_Image(image), m_Dict(dictionary), m_DicomIO(dicomIO) { } #endif // DONT_USE_ARRAY ~OutputExporter() {} bool Export( void ); private: const OutputArgs& m_OutputArgs; DICOM3DImageType::ConstPointer m_Image; #ifndef DONT_USE_ARRAY DictionaryArrayType& m_DictionaryArray; #else // DONT_USE_ARRAY DictionaryType& m_Dict; #endif // DONT_USE_ARRAY DICOMImageIOType::Pointer m_DicomIO; }; //END class n2d::OutputExporter //BEGIN FIXME //FIXME This command is needed because "seriesWriter->Update()" causes a segmentation fault after // writing the second image (I cannot find a reason for this) // Adding a command fix this, but this behaviour should be investigated. #include "itkCommand.h" class CommandUpdate : public itk::Command { public: typedef CommandUpdate Self; typedef itk::Command Superclass; typedef itk::SmartPointer Pointer; itkNewMacro( Self ); protected: CommandUpdate() {} inline void Execute(itk::Object* object, const itk::EventObject& event) { Execute( (const itk::Object*)object, event); } inline void Execute(const itk::Object *object, const itk::EventObject & event ) { if ( ! itk::ProgressEvent().CheckEvent( &event ) ); const SeriesWriterType* ptr = dynamic_cast(object); if (ptr) { std::cout << "\t" << (ptr->GetProgress())*100 << "%" << std::endl; } } }; //END FIXME } #endif // N2DOUTPUTEXPORTER_H nifti2dicom-0.4.7/src/core/n2dPatient.cxx000066400000000000000000000142371226163507100202160ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dPatient.h" #include "n2dDefsImage.h" #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string patientnametag ( "0010|0010" ); const std::string patientidtag ( "0010|0020" ); const std::string patientdobtag ( "0010|0030" ); const std::string patientsextag ( "0010|0040" ); const std::string patientagetag ( "0010|1010" ); const std::string patientweighttag ( "0010|1030" ); //END DICOM tags //BEGIN Default values const std::string defaultpatientmeta ( "meta" ); const std::string defaultpatientid ( "id" ); const std::string defaultpatientdob ( "19900101" ); const std::string defaultpatientsex ( "" ); const std::string defaultpatientage ( "" ); const std::string defaultpatientweight ( "" ); const std::string defaultpatientname ( "N2D_PATIENT" ); //END Default values bool Patient::Update() { #ifdef DEBUG std::cout << "Patient - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif CopyPatientTags(m_ImportedDict, m_Dict); #ifdef DEBUG std::cout << "Patient - After CopyPatientTags:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif //BEGIN (0010,0010) Patient's Name if (!m_PatientArgs.patientname.empty()) itk::EncapsulateMetaData( m_Dict, patientnametag, m_PatientArgs.patientname); else { std::string patientName; itk::ExposeMetaData(m_Dict, patientnametag, patientName); if(patientName.empty()) itk::EncapsulateMetaData( m_Dict, patientnametag, defaultpatientname); } //END (0010,0010) Patient's Name //BEGIN (0010,0020) Patient ID if (!m_PatientArgs.patientid.empty()) itk::EncapsulateMetaData( m_Dict, patientidtag, m_PatientArgs.patientid); else { std::string patientId; itk::ExposeMetaData(m_Dict, patientidtag, patientId); if(patientId.empty()) itk::EncapsulateMetaData( m_Dict, patientidtag, defaultpatientid); } //END (0010,0020) Patient ID //BEGIN (0010,0030) Patient's Birth Date if (!m_PatientArgs.patientdob.empty()) itk::EncapsulateMetaData( m_Dict, patientdobtag, m_PatientArgs.patientdob); else { std::string patientDob; itk::ExposeMetaData(m_Dict, patientdobtag, patientDob); if(patientDob.empty()) itk::EncapsulateMetaData( m_Dict, patientdobtag, defaultpatientdob); } //END (0010,0030) Patient's Birth Date //BEGIN (0010,0040) Patient's Sex if (!m_PatientArgs.patientsex.empty()) itk::EncapsulateMetaData( m_Dict, patientsextag, m_PatientArgs.patientsex); else { std::string patientSex; itk::ExposeMetaData(m_Dict, patientsextag, patientSex); if(patientSex.empty()) itk::EncapsulateMetaData( m_Dict, patientsextag, defaultpatientsex); } //END (0010,0040) Patient's Sex //BEGIN (0010,1010) Patient's Age if (!m_PatientArgs.patientage.empty()) itk::EncapsulateMetaData( m_Dict, patientagetag, m_PatientArgs.patientage); else { std::string patientAge; itk::ExposeMetaData(m_Dict, patientagetag, patientAge); if(patientAge.empty()) itk::EncapsulateMetaData( m_Dict, patientagetag, defaultpatientage); } //END (0010,1010) Patient's Age //BEGIN (0010,1030) Patient's Weight if (!m_PatientArgs.patientweight.empty()) itk::EncapsulateMetaData( m_Dict, patientweighttag, m_PatientArgs.patientweight); else { std::string patientWeight; itk::ExposeMetaData(m_Dict, patientweighttag, patientWeight); if(patientWeight.empty()) itk::EncapsulateMetaData( m_Dict, patientweighttag, defaultpatientweight); } //END (0010,1030) Patient's Weight #ifdef DEBUG std::cout << "Patient - END:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << "----------------------------------------------------------------------------------------" << std::endl; #endif return true; } void Patient::CopyPatientTags (const DictionaryType &fromDict, DictionaryType &toDict) { DictionaryType::ConstIterator itr = fromDict.Begin(); DictionaryType::ConstIterator end = fromDict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; if (!tagkey.compare(0, 4, "0010") ) { //TODO (0010,21c0) Pregnancy Status causes a warning with dciovfy std::string tagvalue = entryvalue->GetMetaDataObjectValue(); #ifdef DEBUG std::cout << "Copying " << tagkey << " " << tagvalue<< std::endl; #endif //DEBUG itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } } ++itr; } } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dPatient.h000066400000000000000000000036311226163507100176370ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DPATIENT_H #define N2DPATIENT_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::Patient /*! * \brief A class that handles DICOM tags related to Patient * * The following tags are handled by this class: * * \li (0010,0010) Patient's Name * \li (0010,0020) Patient ID * \li (0010,0030) Patient's Birth Date * \li (0010,0040) Patient's Sex * \li (0010,1010) Patient's Age * \li (0010,1030) Patient's Weight * \li (0010|****) */ class Patient { public: Patient(const PatientArgs patientArgs, const DictionaryType& importedDict, DictionaryType& dict) : m_PatientArgs(patientArgs), m_ImportedDict(importedDict), m_Dict(dict) { } ~Patient() {} bool Update( void ); private: static void CopyPatientTags(const itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict); const PatientArgs m_PatientArgs; const DictionaryType& m_ImportedDict; DictionaryType& m_Dict; }; //END class n2d::Patient } #endif // N2DPATIENT_H nifti2dicom-0.4.7/src/core/n2dSeries.cxx000066400000000000000000000153301226163507100200370ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dSeries.h" #include "n2dToolsDate.h" #include #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string seriesinstanceuidtag ( "0020|000e" ); const std::string seriesnumbertag ( "0020|0011" ); const std::string seriesdescriptiontag ( "0008|103e" ); const std::string seriesdatetag ( "0008|0021" ); const std::string seriestimetag ( "0008|0031" ); const std::string frameofreferenceuidtag ( "0020|0052" ); //END DICOM tags //BEGIN Default values const std::string defaultseriesnumber ( "1" ); // DateTimeStr()? const std::string defaultseriesdescription ( "Postprocessing" ); //END Default values bool Series::Update() { #ifdef DEBUG std::cout << "Series - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif if(m_SeriesArgs.useoriginalseries) { CopySeriesTags(m_ImportedDict, m_Dict); #ifdef DEBUG std::cout << "Series - After CopySeriesTags:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif } //BEGIN (0020,000e) Series Instance UID if (!m_SeriesArgs.seriesinstanceuid.empty()) itk::EncapsulateMetaData( m_Dict, seriesinstanceuidtag, m_SeriesArgs.seriesinstanceuid); else { std::string seriesInstanceUID; itk::ExposeMetaData(m_Dict, seriesinstanceuidtag, seriesInstanceUID); if(seriesInstanceUID.empty() && !m_SeriesArgs.useoriginalseries) { gdcm::UIDGenerator uid; seriesInstanceUID = uid.Generate(); } itk::EncapsulateMetaData(m_Dict, seriesinstanceuidtag, seriesInstanceUID); } //END (0020,000e) Series Instance UID //BEGIN (0020,0011) Series Number //TODO Use DateTime instead of "1"? if (!m_SeriesArgs.seriesnumber.empty()) itk::EncapsulateMetaData( m_Dict, seriesnumbertag, m_SeriesArgs.seriesnumber); else { std::string seriesNumber; itk::ExposeMetaData(m_Dict, seriesnumbertag, seriesNumber); if(seriesNumber.empty() && !m_SeriesArgs.useoriginalseries) seriesNumber=defaultseriesnumber; itk::EncapsulateMetaData(m_Dict, seriesnumbertag, seriesNumber); } //END (0020,0011) Series Number //BEGIN (0008,103e) Series Description if (!m_SeriesArgs.seriesdescription.empty()) itk::EncapsulateMetaData( m_Dict, seriesdescriptiontag, m_SeriesArgs.seriesdescription); else { std::string seriesDescription; itk::ExposeMetaData(m_Dict, seriesdescriptiontag, seriesDescription); if(seriesDescription.empty() && !m_SeriesArgs.useoriginalseries) seriesDescription=defaultseriesdescription; itk::EncapsulateMetaData(m_Dict, seriesdescriptiontag, seriesDescription); } //END (0008,103e) Series Description //BEGIN (0008,0021) Series Date if (!m_SeriesArgs.seriesdate.empty()) itk::EncapsulateMetaData( m_Dict, seriesdatetag, m_SeriesArgs.seriesdate); else { std::string seriesDate; itk::ExposeMetaData(m_Dict, seriesdatetag, seriesDate); if(seriesDate.empty() && !m_SeriesArgs.useoriginalseries) seriesDate = tools::Date::DateStr(); itk::EncapsulateMetaData(m_Dict, seriesdatetag, seriesDate); } //END (0008,0021) Series Date //BEGIN (0008,0031) Series Time if (!m_SeriesArgs.seriestime.empty()) itk::EncapsulateMetaData( m_Dict, seriestimetag, m_SeriesArgs.seriestime); else { std::string seriesTime; itk::ExposeMetaData(m_Dict, seriestimetag, seriesTime); if(seriesTime.empty() && !m_SeriesArgs.useoriginalseries) seriesTime = tools::Date::TimeStr(); itk::EncapsulateMetaData(m_Dict, seriestimetag, seriesTime); } //END (0008,0031) Series Time //BEGIN (0020,0052) Frame of Reference UID gdcm::UIDGenerator uid; std::string frameOfReferenceUID = uid.Generate(); itk::EncapsulateMetaData(m_Dict, frameofreferenceuidtag, frameOfReferenceUID); //END (0020,0052) Frame of Reference UID #ifdef DEBUG std::cout << "Series - END:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << "----------------------------------------------------------------------------------------" << std::endl; #endif return true; } void Series::CopySeriesTags (const DictionaryType &fromDict, DictionaryType &toDict) { DictionaryType::ConstIterator itr = fromDict.Begin(); DictionaryType::ConstIterator end = fromDict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; if ( !tagkey.compare( 0, 9, seriesinstanceuidtag ) || !tagkey.compare( 0, 9, seriesnumbertag ) || !tagkey.compare( 0, 9, seriesdescriptiontag ) || !tagkey.compare( 0, 9, seriesdatetag ) || !tagkey.compare( 0, 9, seriestimetag ) ) { std::string tagvalue = entryvalue->GetMetaDataObjectValue(); #ifdef DEBUG std::cout << "Copying " << tagkey << " " << tagvalue<< std::endl; #endif //DEBUG itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } } ++itr; } } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dSeries.h000066400000000000000000000036651226163507100174740ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DSERIES_H #define N2DSERIES_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::Series /*! * \brief A class that handles DICOM tags related to Series * * The following tags are handled by this class: * * \li (0020,000e) Series Instance UID * \li (0020,0011) Series Number * \li (0008,103e) Series Description * \li (0008,0021) Series Date * \li (0008,0031) Series Time * * Also handles: * * \li (0020,0052) Frame of Reference UID */ class Series { public: Series(const SeriesArgs& seriesArgs, const DictionaryType& importedDict, DictionaryType& dict) : m_SeriesArgs(seriesArgs), m_ImportedDict(importedDict), m_Dict(dict) { } ~Series() {} bool Update( void ); private: static void CopySeriesTags(const itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict); const SeriesArgs& m_SeriesArgs; const DictionaryType& m_ImportedDict; DictionaryType& m_Dict; }; //END class n2d::Study } // namespace n2d #endif // #ifndef N2DSERIES_H nifti2dicom-0.4.7/src/core/n2dStudy.cxx000066400000000000000000000145231226163507100177200ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dStudy.h" #include "n2dToolsDate.h" #include #ifdef DEBUG #include "n2dToolsMetaDataDictionary.h" #endif namespace n2d { //BEGIN DICOM tags const std::string studyinstanceuidtag ( "0020|000d" ); const std::string studyidtag ( "0020|0010" ); const std::string studydescriptiontag ( "0008|1030" ); const std::string studydatetag ( "0008|0020" ); const std::string studytimetag ( "0008|0030" ); //END DICOM tags //BEGIN Default values const std::string defaultstudydescription ( "Postprocessing" ); //END Default values // To keep the new series in the same study as the original we need // to keep the same study UID. But we need new series and frame of // reference UID's. bool Study::Update() { #ifdef DEBUG std::cout << "Study - BEGIN:" << std::endl << std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif if(!m_StudyArgs.donotuseoriginalstudy) { CopyStudyTags(m_ImportedDict, m_Dict); #ifdef DEBUG std::cout << "Study - After CopyStudyTags:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << std::endl << "-------------------------------------------------------------------" << std::endl; #endif } //BEGIN (0020,000d) Study Instance UID if (!m_StudyArgs.studyinstanceuid.empty()) itk::EncapsulateMetaData( m_Dict, studyinstanceuidtag, m_StudyArgs.studyinstanceuid ); else { std::string studyInstanceUID; itk::ExposeMetaData(m_Dict, studyinstanceuidtag, studyInstanceUID); if(studyInstanceUID.empty() && m_StudyArgs.donotuseoriginalstudy) { gdcm::UIDGenerator uid; studyInstanceUID = uid.Generate(); } itk::EncapsulateMetaData( m_Dict, studyinstanceuidtag, studyInstanceUID ); } //END (0020,000d) Study Instance UID //BEGIN (0020,0010) Study ID if (!m_StudyArgs.studyid.empty()) itk::EncapsulateMetaData( m_Dict, studyidtag, m_StudyArgs.studyid); else { std::string studyID; itk::ExposeMetaData( m_Dict, studyidtag, studyID ); if(studyID.empty() && m_StudyArgs.donotuseoriginalstudy) studyID = tools::Date::DateTimeStr(); itk::EncapsulateMetaData( m_Dict, studyidtag, studyID ); } //END (0020,0010) Study ID //BEGIN (0008,1030) Study Description if (!m_StudyArgs.studydescription.empty()) itk::EncapsulateMetaData( m_Dict, studydescriptiontag, m_StudyArgs.studydescription); else { std::string studyDescription; itk::ExposeMetaData(m_Dict, studydescriptiontag, studyDescription ); if(studyDescription.empty() && m_StudyArgs.donotuseoriginalstudy) studyDescription = defaultstudydescription; itk::EncapsulateMetaData(m_Dict, studydescriptiontag, studyDescription); } //END (0008,1030) Study Description //BEGIN (0008,0020) Study Date if (!m_StudyArgs.studydate.empty()) itk::EncapsulateMetaData( m_Dict, studydatetag, m_StudyArgs.studydate); else { std::string studyDate; itk::ExposeMetaData(m_Dict, studydatetag, studyDate); if(studyDate.empty() && m_StudyArgs.donotuseoriginalstudy) studyDate = tools::Date::TimeStr(); itk::EncapsulateMetaData(m_Dict, studydatetag, studyDate); } //END (0008,0020) Study Date //BEGIN (0008,0030) Study Time if (!m_StudyArgs.studytime.empty()) itk::EncapsulateMetaData( m_Dict, studytimetag, m_StudyArgs.studytime); else { std::string studyTime; itk::ExposeMetaData(m_Dict, studytimetag, studyTime); if(studyTime.empty() && m_StudyArgs.donotuseoriginalstudy) studyTime = tools::Date::DateStr(); itk::EncapsulateMetaData(m_Dict, studytimetag, studyTime); } //END (0008,0030) Study Time #ifdef DEBUG std::cout << "Study - END:" << std::endl<< std::endl; tools::PrintDictionary(m_Dict); std::cout << "----------------------------------------------------------------------------------------" << std::endl; #endif return true; } void Study::CopyStudyTags (const DictionaryType &fromDict, DictionaryType &toDict) { DictionaryType::ConstIterator itr = fromDict.Begin(); DictionaryType::ConstIterator end = fromDict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; if ( !tagkey.compare( 0, 9, studyinstanceuidtag ) || !tagkey.compare( 0, 9, studyidtag ) || !tagkey.compare( 0, 9, studydescriptiontag ) || !tagkey.compare( 0, 9, studydatetag ) || !tagkey.compare( 0, 9, studytimetag ) ) { std::string tagvalue = entryvalue->GetMetaDataObjectValue(); #ifdef DEBUG std::cout << "Copying " << tagkey << " " << tagvalue<< std::endl; #endif //DEBUG itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } } ++itr; } } } // namespace n2d nifti2dicom-0.4.7/src/core/n2dStudy.h000066400000000000000000000035161226163507100173450ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DSTUDY_H #define N2DSTUDY_H #include "n2dDefsCommandLineArgsStructs.h" #include "n2dDefsMetadata.h" namespace n2d { //BEGIN class n2d::Study /*! * \brief A class that handles DICOM tags related to Study * * The following tags are handled by this class: * * \li (0020|000d) Study Instance UID * \li (0020|0010) Study ID * \li (0008|1030) Study Description * \li (0008|0020) Study Date * \li (0008|0030) Study Time */ class Study { public: Study(const StudyArgs& studyArgs, const DictionaryType& importedDict, DictionaryType& dict) : m_StudyArgs(studyArgs), m_ImportedDict(importedDict), m_Dict(dict) { } ~Study() {} bool Update( void ); private: static void CopyStudyTags(const itk::MetaDataDictionary &fromDict, itk::MetaDataDictionary &toDict); const StudyArgs& m_StudyArgs; const DictionaryType& m_ImportedDict; DictionaryType& m_Dict; }; //END class n2d::Study } // namespace n2d #endif // N2DSTUDY_Hnifti2dicom-0.4.7/src/core/n2dToolsDate.cxx000066400000000000000000000035661226163507100205130ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dToolsDate.h" namespace n2d { namespace tools { bool Date::ready = false; std::tm Date::s_Time; void Date::Init() { std::time_t theTime; std::time( &theTime ); // get the calendar time std::tm *t = std::localtime( &theTime ); // convert to local s_Time = *t; // copy the structure ready = true; } std::string Date::DateTimeStr() { if (!ready) Init(); char currdatetime_bfr[15]; std::strftime (currdatetime_bfr, 15, "%Y%m%d%H%M%S", &s_Time); std::string currdatetime(currdatetime_bfr); return currdatetime; } std::string Date::DateStr() { if (!ready) Init(); char currdate_bfr[15]; std::strftime (currdate_bfr, 9, "%Y%m%d", &s_Time); std::string currdate(currdate_bfr); return currdate; } std::string Date::TimeStr() { if (!ready) Init(); char currtime_bfr[15]; std::strftime (currtime_bfr, 7, "%H%M%S", &s_Time); std::string currtime(currtime_bfr); return currtime; } } // namespace tools } // namespace n2d nifti2dicom-0.4.7/src/core/n2dToolsDate.h000066400000000000000000000026711226163507100201340ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DTOOLSDATE_H #define N2DTOOLSDATE_H #include #include namespace n2d { namespace tools { //BEGIN class n2d::tools::Date /*! * \brief A fake class to handle date and time strings * */ class Date { public: static std::string DateTimeStr(); static std::string DateStr(); static std::string TimeStr(); private: // Not implemented Date(); ~Date(); Date(Date&); static void Init(); static std::tm s_Time; static bool ready; }; //END class n2d::tools::Date } // namespace tools } // namespace n2d #endif // #ifndef N2DTOOLSDATE_H nifti2dicom-0.4.7/src/core/n2dToolsMetaDataDictionary.cxx000066400000000000000000000066001226163507100233340ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dToolsMetaDataDictionary.h" #include #include #include #include #include #include "n2dDefsImage.h" #include "n2dDefsMetadata.h" #include "n2dDefsIO.h" namespace n2d { namespace tools { void CopyDictionary (const DictionaryType &fromDict, DictionaryType &toDict) { DictionaryType::ConstIterator itr = fromDict.Begin(); DictionaryType::ConstIterator end = fromDict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; if (tagkey.compare(0, 4, "ITK_")) { std::string tagvalue = entryvalue->GetMetaDataObjectValue(); #ifdef DEBUG std::cout << "Copying " << tagkey << " " << tagvalue<< std::endl; #endif //DEBUG itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } ++itr; continue; } /* MetaDataUnsignedShortType::Pointer entryvalue2 = dynamic_cast( entry.GetPointer() ) ; else if ( entryvalue2 ) { std::string tagkey = itr->first; if (tagkey.compare(0, 4, "ITK_")) { unsigned short tagvalue = entryvalue2->GetMetaDataObjectValue(); itk::EncapsulateMetaData(toDict, tagkey, tagvalue); } ++itr continue; } */ #ifdef DEBUG else std::cout << itr->first << " NON COPIATO" << std::endl; #endif // DEBUG ++itr; } } void PrintDictionary (const itk::MetaDataDictionary &Dict) { DictionaryType::ConstIterator itr = Dict.Begin(); DictionaryType::ConstIterator end = Dict.End(); while ( itr != end ) { itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast( entry.GetPointer() ) ; if ( entryvalue ) { std::string tagkey = itr->first; std::string tagvalue = entryvalue->GetMetaDataObjectValue(); std::cout << "(" << tagkey << ") " << tagvalue << std::endl; } else { std::cout << "(" << itr->first << ") " << itr->second; } ++itr; } } } // namespace tools } // namespace n2d nifti2dicom-0.4.7/src/core/n2dToolsMetaDataDictionary.h000066400000000000000000000023071226163507100227610ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DTOOLSMETADATADICTIONARY_H #define N2DTOOLSMETADATADICTIONARY_H #include #include "n2dDefsMetadata.h" namespace n2d { namespace tools { void CopyDictionary (const DictionaryType &fromDict, DictionaryType &toDict); void PrintDictionary (const DictionaryType &Dict); } // namespace tools } // namespace n2d #endif // N2DMETADATATOOLS_Hnifti2dicom-0.4.7/src/core/n2dVersion.cxx000066400000000000000000000035731226163507100202400ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include "n2dVersion.h" #include "Nifti2DicomConfig.h" #include namespace n2d { int GetMajorVersion() { return Nifti2Dicom_MAJOR_VERSION; } int GetMinorVersion() { return Nifti2Dicom_MINOR_VERSION; } int GetPatchVersion() { return Nifti2Dicom_PATCH_VERSION; } std::string GetInternalVersion() { return Nifti2Dicom_INTERNAL_VERSION; } std::string GetNameAndInternalVersion() { std::ostringstream ost; ost << "nifti2dicom " << Nifti2Dicom_INTERNAL_VERSION; return ost.str(); } std::string GetVersion() { return Nifti2Dicom_VERSION; } std::string GetNameAndVersion() { std::ostringstream ost; ost << "nifti2dicom " << Nifti2Dicom_VERSION; return ost.str(); } std::string GetITKVersion() { return ITK_VERSION; } std::string GetGDCMVersion() { return GDCM_VERSION; } std::string GetTCLAPVersion() { return TCLAP_VERSION; } std::string GetCopyright() { return "Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli "; } } //namespace n2d nifti2dicom-0.4.7/src/core/n2dVersion.h000066400000000000000000000024461226163507100176630ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef N2DVERSION_H #define N2DVERSION_H #include namespace n2d { int GetMajorVersion(); int GetMinorVersion(); int GetPatchVersion(); std::string GetInternalVersion(); std::string GetNameAndInternalVersion(); std::string GetVersion(); std::string GetNameAndVersion(); std::string GetITKVersion(); std::string GetGDCMVersion(); std::string GetTCLAPVersion(); std::string GetCopyright(); } // namespace n2d #endif // #ifndef N2DVERSION_H nifti2dicom-0.4.7/src/core/nifti2dicom.cxx000066400000000000000000000220431226163507100204070ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2008, 2009, 2010 Daniele E. Domenichelli // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . /* Some notes: [PROBABLY OUTDATED] 1. seriesdescription: the fixed list must have those fields: 1. fMRI; 2. DTI-ft; 3. Image Fusion; 4. Other/postprocessing. 2. accessionNumber: by default the field must be set manually by the user. If a user sets a reference header instead, it must have 2 options: 1. (default) set manually 2. copy it from the DICOM header, BUT it must prompt a warning to inform the user that there will be 2 or more images with the same Accession Number 3. [FIXED] studyinstanceUID e seriesnumber: the filter completes them automatically (those are univocal fields, created using date and time of the exam). we have to understand how they are created to check if those fields are set correctly. 4. [FIXED] patientName: at the moment it is set to "GDCM",therefore it must be changed by them manually. 5. [FIXED] sometimes (not for all the images) a gantrytilt is added (even when there should not be). patches/ITK_Direction4.patch is a patch for ITK that should fix this problem. This problem was reported upstream (see https://itk.icts.uiowa.edu/jira/browse/ITK-281 ) */ /* More notes: Steps performed: ( -1. Declarations of the common objects ) ( 0. Command line parsing ) 1. Check accession number 2. Import DICOM header 3. Class/Modality/Transfer Syntax 4. Other DICOM tags 5. Patient 6. Study 7. Series 8. Acquisition 9. Image import 10. Image filters 11. Instance (Reslicing) 12. Output */ #include #include "n2dDefsImage.h" #include "n2dDefsMetadata.h" #include "n2dDefsIO.h" #include "n2dCommandLineParser.h" #include "n2dAccessionNumberValidator.h" #include "n2dHeaderImporter.h" #include "n2dDicomClass.h" #include "n2dOtherDicomTags.h" #include "n2dPatient.h" #include "n2dStudy.h" #include "n2dSeries.h" #include "n2dAcquisition.h" #include "n2dInputImporter.h" #include "n2dInputFilter.h" #include "n2dInstance.h" #include "n2dOutputExporter.h" #include "n2dToolsMetaDataDictionary.h" int main(int argc, char* argv[]) { //BEGIN Common objects declaration n2d::CommandLineParser parser; n2d::ImageType::ConstPointer inputImage; n2d::PixelType inputPixelType; n2d::DICOM3DImageType::ConstPointer filteredImage; n2d::DictionaryType dictionary, importedDictionary; n2d::DictionaryArrayType dictionaryArray; n2d::DICOMImageIOType::Pointer dicomIO = n2d::DICOMImageIOType::New(); dicomIO->KeepOriginalUIDOn(); // Preserve the original DICOM UID of the input files dicomIO->UseCompressionOff(); //END Common objects declaration //BEGIN Command line parsing try { if (!parser.Parse(argc,argv)) { std::cerr << "ERROR in \"Command line parsing\"." << std::endl; exit(1); } } catch (...) { std::cerr << "ERROR in \"Command line parsing\"." << std::endl; exit(101); } //END Command line parsing //BEGIN DICOM accession number validation try { n2d::AccessionNumberValidator accessionNumberValidator(parser.accessionNumberArgs, dictionary); if (!accessionNumberValidator.Validate()) { std::cerr << "ERROR in \"DICOM accession number validation\"." << std::endl; exit(2); } } catch (...) { std::cerr << "Unknown ERROR in \"DICOM accession number validation\"." << std::endl; exit(102); } //END DICOM accession number validation //BEGIN DICOM header import try { n2d::HeaderImporter headerImporter(parser.dicomHeaderArgs, importedDictionary); if (!headerImporter.Import()) { std::cerr << "ERROR in \"DICOM header import\"." << std::endl; exit(3); } } catch (...) { std::cerr << "Unknown ERROR in \"DICOM header import\"." << std::endl; exit(103); } //END DICOM header import //BEGIN DICOM Class try { n2d::DicomClass dicomClass(parser.dicomClassArgs, importedDictionary, dictionary); if (!dicomClass.Update()) { std::cerr << "ERROR in \"DICOM Class\"." << std::endl; exit(4); } } catch (...) { std::cerr << "Unknown ERROR in \"DICOM Class\"." << std::endl; exit(104); } //END DICOM Class //BEGIN Other DICOM Tags try { n2d::OtherDicomTags otherDicomTags(parser.otherDicomTagsArgs, dictionary); if (!otherDicomTags.Update()) { std::cerr << "ERROR in \"Other DICOM Tags\"." << std::endl; exit(5); } } catch (...) { std::cerr << "Unknown ERROR in \"Other DICOM Tags\"." << std::endl; exit(105); } //END Other DICOM Tags //BEGIN Patient try { n2d::Patient patient(parser.patientArgs, importedDictionary, dictionary); if (!patient.Update()) { std::cerr << "ERROR in \"Patient\"." << std::endl; exit(6); } } catch (...) { std::cerr << "Unknown ERROR in \"Patient\"." << std::endl; exit(106); } //END Patient //BEGIN Study try { n2d::Study study(parser.studyArgs, importedDictionary, dictionary); if (!study.Update()) { std::cerr << "ERROR in \"Study\"." << std::endl; exit(7); } } catch (...) { std::cerr << "Unknown ERROR in \"Study\"." << std::endl; exit(107); } //END Study //BEGIN Series try { n2d::Series series(parser.seriesArgs, importedDictionary, dictionary); if (!series.Update()) { std::cerr << "ERROR in \"Series\"." << std::endl; exit(8); } } catch (...) { std::cerr << "Unknown ERROR in \"Series\"." << std::endl; exit(108); } //END Series //BEGIN Acquisition try { n2d::Acquisition acquisition(parser.acquisitionArgs, dictionary); if (!acquisition.Update()) { std::cerr << "ERROR in \"Acquisition\"." << std::endl; exit(9); } } catch (...) { std::cerr << "Unknown ERROR in \"Acquisition\"." << std::endl; exit(109); } //END Acquisition //BEGIN Input image import try { n2d::InputImporter inputImporter(parser.inputArgs); if (!inputImporter.Import()) { std::cerr << "ERROR in \"Input image import\"." << std::endl; exit(10); } inputImage = inputImporter.getImportedImage(); inputPixelType = inputImporter.getPixelType(); } catch (...) { std::cerr << "Unknown ERROR in \"Input image import\"." << std::endl; exit(110); } //END Input image import //BEGIN Input filtering try { n2d::InputFilter inputFilter(parser.filtersArgs, inputImage, inputPixelType, dictionary); if (!inputFilter.Filter()) { std::cerr << "ERROR in \"Input filtering\"." << std::endl; exit(11); } filteredImage = inputFilter.getFilteredImage(); } catch (...) { std::cerr << "Unknown ERROR in \"Input filtering\"." << std::endl; exit(111); } //END Input filtering //BEGIN Instance try { n2d::Instance instance(parser.instanceArgs, filteredImage, dictionary, dictionaryArray); if (!instance.Update()) { std::cerr << "ERROR in \"Instance\"." << std::endl; exit(12); } } catch (...) { std::cerr << "Unknown ERROR in \"Instance\"." << std::endl; exit(112); } //END Instance //BEGIN Output try { #ifndef DONT_USE_ARRAY n2d::OutputExporter outputExporter(parser.outputArgs, filteredImage, dictionaryArray, dicomIO); #else // DONT_USE_ARRAY n2d::OutputExporter outputExporter(parser.outputArgs, filteredImage, dictionary, dicomIO); #endif // DONT_USE_ARRAY if (!outputExporter.Export()) { std::cerr << "ERROR in \"Output\"." << std::endl; exit(13); } } catch (...) { std::cerr << "Unknown ERROR in \"Output\"." << std::endl; exit(113); } //END Output return EXIT_SUCCESS; } nifti2dicom-0.4.7/src/gui/000077500000000000000000000000001226163507100153075ustar00rootroot00000000000000nifti2dicom-0.4.7/src/gui/CMakeLists.txt000066400000000000000000000203731226163507100200540ustar00rootroot00000000000000# This file is part of Nifti2Dicom, is an open source converter from # 3D NIfTI images to 2D DICOM series. # # Copyright (C) 2010 Gabriele Arnulfo # # Nifti2Dicom is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # Nifti2Dicom is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with Nifti2Dicom. If not, see . #if( APPLE ) # set( PROGNAME qnifti2dicom ) # set( MACOSX_BUNDLE_NAME qnifti2dicom) # set( MACOSX_BUNDLE_ICON_FILE qnifti2dicom.icns ) # set( MACOSX_BUNDLE_SHORT_VERSION_STRING ${Nifti2Dicom_VERSION} ) # set( MACOSX_BUNDLE_VERSION ${Nifti2Dicom_VERSION}) # set( MACOSX_BUNDLE_LONG_VERSION_STRING Version ${Nifti2Dicom_INTERNAL_VERSION} ) # set( CMAKE_OSX_ARCHITECTURES i386 ) #Comment out if not universal binary #endif( APPLE ) set(nifti2dicom_gui_SOURCES wizard.cpp init.cpp customize.cpp finalize.cpp itkImageToVTKImageFilter.txx qnifti2dicom.cpp vtkKWImageIO.cxx vtkKWImage.cxx ) set(nifti2dicom_SOURCES ../core/n2dVersion.cxx ../core/n2dToolsMetaDataDictionary.cxx ../core/n2dToolsDate.cxx ../core/n2dCommandLineParser.cxx ../core/n2dAccessionNumberValidator.cxx ../core/n2dHeaderImporter.cxx ../core/n2dDicomClass.cxx ../core/n2dOtherDicomTags.cxx ../core/n2dPatient.cxx ../core/n2dStudy.cxx ../core/n2dSeries.cxx ../core/n2dAcquisition.cxx ../core/n2dInputImporter.cxx ../core/n2dInputFilter.cxx ../core/n2dInstance.cxx ../core/n2dOutputExporter.cxx ) set(nifti2dicom_gui_NO_INSTALL_HEADERS ${CMAKE_BINARY_DIR}/Nifti2DicomConfig.h wizard.h init.h customize.h finalize.h ) set(nifti2dicom_gui_MOC_HDR wizard.h init.h customize.h finalize.h ) set(nifti2dicom_gui_QRC_RCC resources.qrc) QT4_WRAP_CPP(nifti2dicom_gui_MOC_SRCS ${nifti2dicom_gui_MOC_HDR}) QT4_ADD_RESOURCES(nifti2dicom_gui_QRC_SRCS ${nifti2dicom_gui_QRC_RCC}) include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../core ${QT_INCLUDE_DIR} ) #if( APPLE ) # add_executable( ${PROGNAME} MACOSX_BUNDLE ${nifti2dicom_gui_SOURCES} # ${nifti2dicom_SOURCES} # ${nifti2dicom_gui_MOC_SRCS} # ${nifti2dicom_gui_UIS_HDR} # ${nifti2dicom_gui_QRC_SRCS}) # # set( CONTENTS_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.app/Contents) # # add_custom_command( TARGET ${PROGNAME} POST_BUILD # #COMMAND mkdir ARGS ${CMAKE_CURRENT_BINARY_DIR}/${PROGNAME}.app/Contents # COMMAND mkdir ARGS ${CONTENTS_DIR}/Frameworks # COMMAND mkdir ARGS ${CONTENTS_DIR}/Resources # COMMAND cp ARGS ${CMAKE_SOURCE_DIR}/data/icons/${MACOSX_BUNDLE_ICON_FILE} ${CONTENTS_DIR}/Resources/ # COMMAND cp ARGS /Developer/Applications/Qt/Qt\ Creator.app/Contents/Frameworks/libQtCore.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/ # COMMAND cp ARGS /Developer/Applications/Qt/Qt\ Creator.app/Contents/Frameworks/libQtGui.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/ # COMMAND cp ARGS /Developer/Applications/Qt/Qt\ Creator.app/Contents/Frameworks/libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/ # COMMAND cp ARGS /Developer/Applications/Qt/Qt\ Creator.app/Contents/Frameworks/libQtSql.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/ # COMMAND ln ARGS -s libQtCore.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtCore.4.6.dylib # COMMAND ln ARGS -s libQtCore.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtCore.4.dylib # COMMAND ln ARGS -s libQtCore.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtCore.dylib # COMMAND ln ARGS -s libQtGui.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtGui.4.6.dylib # COMMAND ln ARGS -s libQtGui.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtGui.4.dylib # COMMAND ln ARGS -s libQtGui.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtGui.dylib # COMMAND ln ARGS -s libQtSql.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtSql.4.6.dylib # COMMAND ln ARGS -s libQtSql.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtSql.4.dylib # COMMAND ln ARGS -s libQtSql.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtSql.dylib # COMMAND ln ARGS -s libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtNetwork.4.6.dylib # COMMAND ln ARGS -s libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtNetwork.4.dylib # COMMAND ln ARGS -s libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtNetwork.dylib # COMMAND install_name_tool ARGS -id @executable_path/../Frameworks/libQtCore.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtCore.4.6.2.dylib # COMMAND install_name_tool ARGS -id @executable_path/../Frameworks/libQtGui.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtGui.4.6.2.dylib # COMMAND install_name_tool ARGS -id @executable_path/../Frameworks/libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtNetwork.4.6.2.dylib # COMMAND install_name_tool ARGS -id @executable_path/../Frameworks/libQtSql.4.6.2.dylib ${CONTENTS_DIR}/Frameworks/libQtSql.4.6.2.dylib # COMMAND install_name_tool ARGS -change QtGui.framework/Versions/4/QtGui @executable_path/../Frameworks/libQtGui.4.6.2.dylib ${CONTENTS_DIR}/MacOS/qnifti2dicom # COMMAND install_name_tool ARGS -change QtCore.framework/Versions/4/QtCore @executable_path/../Frameworks/libQtCore.4.6.2.dylib ${CONTENTS_DIR}/MacOS/qnifti2dicom # COMMAND install_name_tool ARGS -change QtSql.framework/Versions/4/QtSql @executable_path/../Frameworks/libQtSql.4.6.2.dylib ${CONTENTS_DIR}/MacOS/qnifti2dicom # COMMAND install_name_tool ARGS -change QtNetwork.framework/Versions/4/QtNetwork @executable_path/../Frameworks/libQtNetwork.4.6.2.dylib ${CONTENTS_DIR}/MacOS/qnifti2dicom # ) # #else( APPLE ) add_executable(qnifti2dicom ${nifti2dicom_gui_SOURCES} ${nifti2dicom_SOURCES} ${nifti2dicom_gui_MOC_SRCS} ${nifti2dicom_gui_UIS_HDR} ${nifti2dicom_gui_QRC_SRCS}) #endif( APPLE ) # nifti2dicom target target_link_libraries(qnifti2dicom ${ITK_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} QVTK vtkGraphics vtkHybrid vtkImaging vtkFiltering vtkCommon vtkRendering vtkIO ) #if(NOT APPLE) install(TARGETS qnifti2dicom RUNTIME DESTINATION bin) #endif(NOT APPLE) nifti2dicom-0.4.7/src/gui/customize.cpp000066400000000000000000000077331226163507100200470ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include #include #include #include #include #include #include #include #include #include #include "customize.h" #include "wizard.h" namespace n2d{ namespace gui{ customize::customize(QWidget* parent):QWizardPage(parent) { m_parent = dynamic_cast(parent); this->setTitle("Second Step"); this->setSubTitle("Customize dicom header field clicking on proper " "row and the type the desired value"); QStringList labels; QVBoxLayout* layout = new QVBoxLayout(); m_dicomTable = new QTableWidget(0,3); m_dicomTable->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); m_dicomTable->setColumnWidth(0,100); m_dicomTable->setColumnWidth(1,300); m_dicomTable->setColumnWidth(2,200); labels << tr("Tag") << tr("Value") <setHorizontalHeaderLabels(labels); m_dictionary = m_parent->getDictionary(); layout->addWidget(m_dicomTable); setLayout(layout); } customize::~customize() { //std::cout<<"Called ~customize"<Begin(); n2d::DictionaryType::ConstIterator end = m_dictionary->End(); const gdcm::Global& g = gdcm::Global::GetInstance(); const gdcm::Dicts &dicts = g.GetDicts(); const gdcm::Dict &pub = dicts.GetPublicDict(); // Part 6 while(itr != end) { int row = m_dicomTable->rowCount(); itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast(entry.GetPointer()); if(entryvalue) { std::string tagkey = itr->first; std::string tagvalue= entryvalue->GetMetaDataObjectValue(); int a = 0; int b = 0; sscanf(tagkey.substr(0,4).c_str(), "%x", &a); sscanf(tagkey.substr(5,4).c_str(), "%x", &b); gdcm::Tag t(a,b); const gdcm::DictEntry &entry1 = pub.GetDictEntry(t); QString item1(tagkey.c_str()); QString item2(tagvalue.c_str()); QString item3(entry1.GetName()); QTableWidgetItem* tagkeyitem = new QTableWidgetItem(item1,Qt::ItemIsEditable); QTableWidgetItem* tagvalueitem = new QTableWidgetItem(item2,Qt::ItemIsEditable); QTableWidgetItem* desc = new QTableWidgetItem(item3); m_dicomTable->insertRow(row); m_dicomTable->setItem(row,0,tagkeyitem); m_dicomTable->setItem(row,1,tagvalueitem); m_dicomTable->setItem(row,2,desc); } ++itr; } connect( m_dicomTable, SIGNAL(itemChanged(QTableWidgetItem* )), this, SLOT( OnItemChange(QTableWidgetItem* ) )); } bool customize::OnItemChange(QTableWidgetItem* item) { std::string value = item->data(0).toString().toStdString(); QTableWidgetItem* itemTag = m_dicomTable->item(item->row(),0); std::string tag = itemTag->data(0).toString().toStdString(); itk::EncapsulateMetaData(*m_dictionary, tag, value); return true; } bool customize::validatePage() { return true; } }//namespace gui }//namespace n2d nifti2dicom-0.4.7/src/gui/customize.h000066400000000000000000000027051226163507100175060ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef CUSTOMIZE_H #define CUSTOMIZE_H #include #include class QWidget; class QTableWidget; class QTableWidgetItem; namespace n2d{ namespace gui{ class Wizard; class customize : public QWizardPage { Q_OBJECT public: customize(QWidget* parent=0); ~customize(); private slots: bool OnItemChange(QTableWidgetItem* ); private: Wizard* m_parent; QTableWidget* m_dicomTable; n2d::DictionaryType* m_dictionary; virtual void initializePage(); virtual bool validatePage(); }; }//namespace gui }//namespace n2d #endif nifti2dicom-0.4.7/src/gui/finalize.cpp000066400000000000000000000213441226163507100176200ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "finalize.h" #include "wizard.h" namespace n2d{ namespace gui { finalize::finalize(QWidget* parent):QWizardPage(parent) { m_parent = dynamic_cast(parent); m_dictionary = m_parent->getDictionary(); this->setTitle("Last Step"); this->setSubTitle("Review the final header, fill the output directory and the accession number"); //Styling grid layout QGridLayout *baselayout = new QGridLayout(); QGridLayout *rightlayout = new QGridLayout(); QGridLayout *leftlayout = new QGridLayout(); QGridLayout *browselayout = new QGridLayout(); QProgressBar *progressBar = new QProgressBar(); QLineEdit *progressInfo = new QLineEdit(); m_outDirLine = new QLineEdit(); m_accessionNumberLine = new QLineEdit(); QLabel *label1 = new QLabel("Output directory"); QLabel *label2 = new QLabel("Accession Number"); m_rescaleBox = new QCheckBox("Rescale"); m_headerTable = new QTableWidget(0,2); QPushButton *browseFile = new QPushButton("Browse"); m_digits = 4; m_headerTable->setColumnWidth(0,100); m_headerTable->setColumnWidth(1,200); QStringList labels; labels << tr("Tag") << tr("Value"); m_headerTable->setHorizontalHeaderLabels(labels); m_headerTable->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); browselayout->addWidget(m_outDirLine,0,1); browselayout->addWidget(browseFile,0,0); rightlayout->addLayout(browselayout,0,1); rightlayout->addWidget(label1,0,0); rightlayout->addWidget(m_accessionNumberLine,1,1); rightlayout->addWidget(label2,1,0); rightlayout->addWidget(m_rescaleBox,2,0); leftlayout->addWidget(m_headerTable,1,0); baselayout->addLayout(leftlayout,0,1); baselayout->addLayout(rightlayout,0,0); baselayout->addWidget(progressBar,1,0); baselayout->addWidget(progressInfo,1,1); // progressbar->setMaximum(4); // progressbar->setMinimum(0); progressBar->setRange(0,3); progressInfo->setReadOnly(1); setLayout(baselayout); connect(m_accessionNumberLine,SIGNAL(textChanged(const QString & )),this, SLOT(OnAccessionNumberChange(const QString &))); connect(m_outDirLine,SIGNAL(textChanged(const QString & )),this, SLOT(OnOutputDirectoryChange(const QString & ))); connect(browseFile,SIGNAL(clicked()),this,SLOT(OnBrowseClick())); } void finalize::initializePage() { m_image = m_parent->getImportedImage(); n2d::DictionaryType::ConstIterator itr = m_dictionary->Begin(); n2d::DictionaryType::ConstIterator end = m_dictionary->End(); while(itr != end) { int row = m_headerTable->rowCount(); itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast(entry.GetPointer()); if(entryvalue) { std::string tagkey = itr->first; std::string tagvalue= entryvalue->GetMetaDataObjectValue(); QString item1(tagkey.c_str()); QString item2(tagvalue.c_str()); QTableWidgetItem* tagkeyitem = new QTableWidgetItem(item1); QTableWidgetItem* tagvalueitem = new QTableWidgetItem(item2); tagkeyitem->setFont(QFont("Verdana",10)); tagvalueitem->setFont(QFont("Verdana",10)); m_headerTable->insertRow(row); m_headerTable->setItem(row,0,tagkeyitem); m_headerTable->setItem(row,1,tagvalueitem); } ++itr; } } void finalize::OnAccessionNumberChange(const QString& in) { m_accessionNumber =in.toStdString(); completeChanged(); } void finalize::OnOutputDirectoryChange(const QString& in) { m_outputDirectory = in.toStdString(); completeChanged(); } finalize::~finalize() { // std::cout<<"Called ~finalize"<getImportedPixelType(); n2d::DICOMImageIOType::Pointer dicomIO = n2d::DICOMImageIOType::New(); dicomIO->KeepOriginalUIDOn(); // Preserve the original DICOM UID of the input files dicomIO->UseCompressionOff(); n2d::DICOM3DImageType::ConstPointer filteredImage; n2d::FiltersArgs filtersArgs; n2d::InstanceArgs instanceArgs; n2d::OutputArgs outputArgs; n2d::AccessionNumberArgs accessionNumberArgs; filtersArgs.rescale = m_rescaleBox->checkState(); outputArgs.outputdirectory = m_outputDirectory; outputArgs.suffix = ".dcm";//m_suffix; outputArgs.prefix = "N2D"; //m_prefix; outputArgs.digits = m_digits; accessionNumberArgs.accessionnumber = m_accessionNumber; QGridLayout *tmp_layout = dynamic_cast(this->layout()); QLineEdit *tmp_progressInfo = dynamic_cast(tmp_layout->itemAtPosition(1,1)->widget()); QProgressBar *tmp_progressBar = dynamic_cast(tmp_layout->itemAtPosition(1,0)->widget()); //BEGIN DICOM accession number validation try { n2d::AccessionNumberValidator accessionNumberValidator(accessionNumberArgs, *m_dictionary); if (!accessionNumberValidator.Validate()) { std::cerr << "ERROR in \"DICOM accession number validation\"." << std::endl; return false; } tmp_progressInfo->insert("Accession Number Validated"); tmp_progressBar->setValue(1); QCoreApplication::processEvents(); } catch (...) { std::cerr << "Unknown ERROR in \"DICOM accession number validation\"." << std::endl; return false; } //END DICOM accession number validation //BEGIN Input filtering try { n2d::InputFilter inputFilter(filtersArgs, m_image, inputPixelType, *m_dictionary); if (!inputFilter.Filter()) { std::cerr << "ERROR in \"Input filtering\"." << std::endl; return false; } filteredImage = inputFilter.getFilteredImage(); tmp_progressInfo->clear(); tmp_progressInfo->insert("Volume ranges properly filtered"); tmp_progressBar->setValue(2); QCoreApplication::processEvents(); } catch (...) { std::cerr << "Unknown ERROR in \"Input filtering\"." << std::endl; return false; } //END Input filtering //BEGIN Instance try { n2d::Instance instance(instanceArgs, filteredImage, *m_dictionary, m_dictionaryArray); if (!instance.Update()) { std::cerr << "ERROR in \"Instance\"." << std::endl; return false; } tmp_progressInfo->clear(); tmp_progressInfo->insert("DICOM Header built"); tmp_progressBar->setValue(3); QCoreApplication::processEvents(); } catch (...) { std::cerr << "Unknown ERROR in \"Instance\"." << std::endl; return false; } //END Instance //BEGIN Output try { n2d::OutputExporter outputExporter(outputArgs, filteredImage, m_dictionaryArray, dicomIO); if (!outputExporter.Export()) { std::cerr << "ERROR in \"Output\"." << std::endl; return false; } tmp_progressInfo->clear(); tmp_progressInfo->insert("Output Saved to disk"); tmp_progressBar->setValue(4); QCoreApplication::processEvents(); } catch (...) { std::cerr << "Unknown ERROR in \"Output\"." << std::endl; return false; } //END Output return true; } bool finalize::isComplete() const { if(m_accessionNumber.empty() || m_outputDirectory.empty()) { return false; } else return true; } void finalize::OnBrowseClick() { m_outDirLine->clear(); QString outDir =QFileDialog::getExistingDirectory(this,"","") ; m_outDirLine->insert(outDir); } }//namespace gui }//namespace n2d nifti2dicom-0.4.7/src/gui/finalize.h000066400000000000000000000036461226163507100172720ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef FINALIZE_H #define FINALIZE_H #include #include #include #include class QWidget; class QTableWidget; class QCheckBox; class QLineEdit; namespace n2d{ class OutputExporter; namespace gui{ class Wizard; class finalize: public QWizardPage { Q_OBJECT public: finalize(QWidget* parent=0); ~finalize(); private: Wizard* m_parent; n2d::DictionaryType* m_dictionary; n2d::ImageType::ConstPointer m_image; QTableWidget* m_headerTable; QCheckBox* m_rescaleBox; QLineEdit* m_outDirLine; QLineEdit* m_accessionNumberLine; n2d::OutputExporter* m_Exporter; std::string m_outputDirectory; std::string m_suffix; std::string m_prefix; std::string m_accessionNumber; int m_digits; n2d::DictionaryArrayType m_dictionaryArray; void initializePage(); bool validatePage(); bool isComplete() const; private slots: void OnAccessionNumberChange(const QString & ); void OnOutputDirectoryChange(const QString &); void OnBrowseClick(); }; } } #endif nifti2dicom-0.4.7/src/gui/init.cpp000066400000000000000000000342161226163507100167640ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010, 2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "vtkImageViewer2.h" #include "itkImage.h" #include "itkExceptionObject.h" #include "vtkRenderer.h" #include "vtkActor2D.h" #include "vtkRenderWindow.h" #include "vtkLookupTable.h" #include "vtkImageMapToWindowLevelColors.h" #include "vtkKWImageIO.h" #include "vtkKWImage.h" #include "vtkRenderWindowInteractor.h" #include "vtkImageData.h" #include "vtkIndent.h" #include "QVTKWidget.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include "wizard.h" #include "init.h" namespace n2d{ namespace gui{ init::init(QWidget *parent) : QWizardPage(parent), m_renderPreview(NULL), m_renderer(NULL), m_interactor(NULL), m_dictionary(NULL) { m_parent = dynamic_cast(parent); this->setTitle("First Step"); this->setSubTitle("Required input: Nifti filename and optional dicom reference header"); QGridLayout *layout = new QGridLayout(); QHBoxLayout *infoOpenImageLayout = new QHBoxLayout(); QPushButton *openImage = new QPushButton("Open Volume"); QPushButton *openHeader = new QPushButton("Open Dicom Header"); QLineEdit *openedFileName = new QLineEdit(); QLineEdit *openedFileSizes = new QLineEdit(); m_headerEntries = new QTableWidget(0,3); m_horizontalSlider = new QSlider(Qt::Horizontal); m_renderPreview = new QVTKWidget(); m_horizontalSlider->setVisible(0); openedFileName->setReadOnly(1); openedFileSizes->setReadOnly(1); infoOpenImageLayout->addWidget(openedFileName, 3); infoOpenImageLayout->addWidget(openedFileSizes, 1); layout->addWidget(openImage, 0,0); layout->addWidget(openHeader, 0,1); layout->addWidget(m_renderPreview,1,0); layout->addWidget(m_headerEntries,1,1); layout->addLayout(infoOpenImageLayout,2,0); layout->addWidget(m_horizontalSlider,3,0); m_imageviewer = vtkImageViewer2::New(); m_renderer = m_imageviewer->GetRenderer(); m_renderWin = m_imageviewer->GetRenderWindow(); //BEGIN Test vtkKWImage// m_reader = vtkKWImageIO::New(); m_localVTKImage = vtkKWImage::New(); m_importedDictionary = m_parent->getImportedDictionary(); m_dictionary = m_parent->getDictionary(); //END m_imageviewer->SetSliceOrientationToXY(); m_renderPreview->SetRenderWindow(m_renderWin); m_interactor = m_renderWin->GetInteractor(); m_interactor->Disable(); m_inputArgs = new n2d::InputArgs(); m_dicomHeaderArgs = new n2d::DicomHeaderArgs(); QStringList labels; labels << tr("Tag") << tr("Desc") << tr("Value"); m_headerEntries->setHorizontalHeaderLabels(labels); m_headerEntries->horizontalHeader()->setResizeMode(1, QHeaderView::Stretch); m_headerEntries->setEnabled(false); m_headerEntries->setColumnWidth(0,100); m_headerEntries->setColumnWidth(1,350); m_headerEntries->setColumnWidth(2,100); setLayout(layout); connect(openImage, SIGNAL(clicked()),this,SLOT(loadInImage())); connect(openHeader, SIGNAL(clicked()),this,SLOT(loadIndcmHDR())); connect(m_horizontalSlider, SIGNAL(valueChanged(int )),this,SLOT(OnSliderChange(int ))); } init::~init() { //std::cout<<"Called ~init"<Delete(); m_reader->Delete(); m_localVTKImage->Delete(); //m_interactor->Delete(); } bool init::loadInImage() { // update QLineEdit with proper values QGridLayout *tmp_layout = dynamic_cast(this->layout()); QHBoxLayout *tmp_single_cell = dynamic_cast(tmp_layout->itemAtPosition(2,0)); QLineEdit *tmp_fname_cell = dynamic_cast(tmp_single_cell->itemAt(0)->widget()); QLineEdit *tmp_dimension_cell = dynamic_cast(tmp_single_cell->itemAt(1)->widget()); // just clear the labels every time you push the load button // this prevents multiple append to the same labels when user // pushes button twice due to wrong file selection in first place tmp_fname_cell->clear(); tmp_dimension_cell->clear(); m_inFname = QFileDialog::getOpenFileName(this, tr("Open Volume"), "", tr("Nifti Volume (*.nii.gz *.nii);;" "Analyze Volume (*.hdr);;" "MetaImage Volume (*.mhd);;" "Nrrd Volume (*.nhdr *.nrrd);;" "VTK Volume (*.vtk);;" "All Files (*)")); if(m_inFname.isEmpty()) return false; m_reader->SetFileName(m_inFname.toStdString() ); try { m_reader->ReadImage(); } catch(itk::ExceptionObject excp) { std::cerr << "Error while opening image" << excp.GetDescription() << std::endl; QErrorMessage error_message; error_message.showMessage(excp.GetDescription()); error_message.exec(); return false; } double range[2]; m_localVTKImage = m_reader->HarvestReadImage(); m_localVTKImage->GetVTKImage()->GetScalarRange(range); vtkLookupTable* lookupTable = vtkLookupTable::New(); lookupTable->SetValueRange(0.0,1.0); lookupTable->SetSaturationRange(0.0,0.0); lookupTable->SetRampToLinear(); lookupTable->SetRange(range); lookupTable->Build(); m_imageviewer->GetWindowLevel()->SetLookupTable(lookupTable); m_imageviewer->GetWindowLevel()->SetInput(m_localVTKImage->GetVTKImage()); m_imageviewer->GetRenderer()->ResetCamera(); m_renderPreview->GetRenderWindow()->Render(); m_parent->setImportedImage(m_localVTKImage); m_horizontalSlider->setVisible(1); m_horizontalSlider->setRange(0,m_localVTKImage->GetVTKImage()->GetDimensions()[2]); completeChanged(); lookupTable->Delete(); tmp_fname_cell->insert(m_inFname); int *dimensions = m_localVTKImage->GetVTKImage()->GetDimensions(); std::ostringstream str_dimensions; str_dimensions<<"["<insert(str_dimensions.str().c_str()); return true; } bool init::OnSliderChange(int z) { m_imageviewer->SetSlice(z); m_renderPreview->update(); return true; } bool init::loadIndcmHDR() { m_dcmRefHDRFname = QFileDialog::getOpenFileName(this, tr("Open Dicom Header file"), "", tr("DICOM Files (*.dcm);;" "All Files (*)")); if(m_dcmRefHDRFname.isEmpty()) return false; m_dicomHeaderArgs->dicomheaderfile = m_dcmRefHDRFname.toStdString(); m_headerImporter = new n2d::HeaderImporter(*m_dicomHeaderArgs , *m_importedDictionary); m_parent->setDicomHeaderImporter(m_headerImporter); m_parent->storeDicomHeaderArgs(*m_dicomHeaderArgs); if(!m_headerImporter->Import()) { QErrorMessage error_message; error_message.showMessage("Not a valid DICOM Header"); error_message.exec(); return false; } n2d::DictionaryType::ConstIterator itr = m_importedDictionary->Begin(); n2d::DictionaryType::ConstIterator end = m_importedDictionary->End(); QTableWidgetItem* tagkeyitem ; QTableWidgetItem* tagvalueitem; QTableWidgetItem* desc; const gdcm::Global& g = gdcm::Global::GetInstance(); const gdcm::Dicts &dicts = g.GetDicts(); const gdcm::Dict &pub = dicts.GetPublicDict(); // Part 6 while(itr != end) { int row = m_headerEntries->rowCount(); itk::MetaDataObjectBase::Pointer entry = itr->second; MetaDataStringType::Pointer entryvalue = dynamic_cast(entry.GetPointer()); if(entryvalue) { std::string tagkey = itr->first; if(!tagkey.compare(0,4,"0010")) { std::string tagvalue= entryvalue->GetMetaDataObjectValue(); int a = 0; int b = 0; sscanf(tagkey.substr(0,4).c_str(), "%x", &a); sscanf(tagkey.substr(5,4).c_str(), "%x", &b); gdcm::Tag t(a,b); const gdcm::DictEntry &entry1 = pub.GetDictEntry(t); QString item1(tagkey.c_str()); QString item2(tagvalue.c_str()); QString item3(entry1.GetName()); tagkeyitem = new QTableWidgetItem(item1); tagvalueitem = new QTableWidgetItem(item2); desc = new QTableWidgetItem(item3); tagkeyitem->setFont(QFont("Verdana",10)); tagvalueitem->setFont(QFont("Verdana",10)); desc->setFont(QFont("Verdana",10)); m_headerEntries->insertRow(row); m_headerEntries->setItem(row,0,tagkeyitem); m_headerEntries->setItem(row,1,desc); m_headerEntries->setItem(row,2,tagvalueitem); } } ++itr; } delete tagkeyitem; delete tagvalueitem; delete desc; return true; } bool init::isComplete() const { return m_localVTKImage->GetVTKImage()->GetDimensions()[0] != 0; } bool init::validatePage() { n2d::DicomClassArgs dicomClassArgs; n2d::AcquisitionArgs acquisitionArgs; n2d::OtherDicomTagsArgs otherDicomTagsArgs; n2d::SeriesArgs seriesArgs; n2d::StudyArgs studyArgs; n2d::PatientArgs patientArgs; seriesArgs.useoriginalseries = false; studyArgs.donotuseoriginalstudy = false; studyArgs.studydescription = "qnifti2dicom"; //BEGIN DICOM Class try { n2d::DicomClass dicomClass(dicomClassArgs, *m_importedDictionary, *m_dictionary); if (!dicomClass.Update()) { std::cerr << "ERROR in \"DICOM Class\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"DICOM Class\"." << std::endl; return false; } //END DICOM Class //BEGIN Other DICOM Tags try { n2d::OtherDicomTags otherDicomTags(otherDicomTagsArgs, *m_dictionary); if (!otherDicomTags.Update()) { std::cerr << "ERROR in \"Other DICOM Tags\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"Other DICOM Tags\"." << std::endl; return false; } //END Other DICOM Tags //BEGIN Patient try { n2d::Patient patient(patientArgs, *m_importedDictionary, *m_dictionary); if (!patient.Update()) { std::cerr << "ERROR in \"Patient\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"Patient\"." << std::endl; return false; } //END Patient //BEGIN Study try { n2d::Study study(studyArgs, *m_importedDictionary, *m_dictionary); if (!study.Update()) { std::cerr << "ERROR in \"Study\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"Study\"." << std::endl; return false; } //END Study //BEGIN Series try { n2d::Series series(seriesArgs, *m_importedDictionary, *m_dictionary); if (!series.Update()) { std::cerr << "ERROR in \"Series\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"Series\"." << std::endl; return false; } //END Series //BEGIN Acquisition try { n2d::Acquisition acquisition(acquisitionArgs, *m_dictionary); if (!acquisition.Update()) { std::cerr << "ERROR in \"Acquisition\"." << std::endl; return false; } } catch (...) { std::cerr << "Unknown ERROR in \"Acquisition\"." << std::endl; return false; } //END Acquisition m_parent->storeDicomClassArgs(dicomClassArgs); m_parent->storeAcquisitionArgs(acquisitionArgs); m_parent->storeOtherDicomTagsArgs(otherDicomTagsArgs); m_parent->storeSeriesArgs(seriesArgs); m_parent->storeStudyArgs(studyArgs); m_parent->storePatientArgs(patientArgs); return true; } //bool init::isComplete() const //{ // if(m_localVTKImage == NULL) // return false; // else // { // return true; // } //} } //namespace gui } //namespace n2d nifti2dicom-0.4.7/src/gui/init.h000066400000000000000000000050671226163507100164330ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef INIT_H #define INIT_H #include #include #include #include "QVTKWidget.h" #include #include #include class QTableWidget; class QSlider; class QFont; class vtkKWImageIO; class vtkKWImage; class vktRenderer; class vtkRenderWindow; class vtkRenderWindowInteractor; class vtkImageViewer2; namespace n2d{ class InputImporter; class HeaderImporter; struct InputArgs; struct DicomHeaderArgs; namespace gui{ class Wizard; class init : public QWizardPage { Q_OBJECT public: init(QWidget *parent = 0); ~init(); private: QString m_inFname; QString m_dcmRefHDRFname; QVTKWidget* m_renderPreview; vtkImageViewer2* m_imageviewer; vtkRenderer* m_renderer; vtkRenderWindow* m_renderWin; vtkRenderWindowInteractor* m_interactor; vtkKWImageIO* m_reader; vtkKWImage* m_localVTKImage; n2d::HeaderImporter* m_headerImporter; Wizard* m_parent; n2d::DictionaryType* m_importedDictionary; n2d::DictionaryType* m_dictionary; QTableWidget* m_headerEntries; QSlider* m_horizontalSlider; QFont* m_font; n2d::InputArgs* m_inputArgs; n2d::DicomHeaderArgs* m_dicomHeaderArgs; private slots: bool loadInImage(); bool loadIndcmHDR(); bool OnSliderChange(int); bool validatePage(); bool isComplete() const; }; }//namespace gui }//namespace n2d #endif // INIT_H nifti2dicom-0.4.7/src/gui/init.ui000066400000000000000000000046271226163507100166220ustar00rootroot00000000000000 init 0 0 438 445 Form Choose Input file Choose dicom Header Qt::Horizontal 2 inputFname clicked() init loadInImage() 80 23 218 222 horizontalSlider sliderMoved(int) init OnSliderChange() 84 421 218 222 inputDicomHDR clicked() init loadIndcmHDR() 297 23 218 222 loadInImage() OnSliderChange() loadIndcmHDR() nifti2dicom-0.4.7/src/gui/itkImageToVTKImageFilter.h000066400000000000000000000063571226163507100222260ustar00rootroot00000000000000/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkImageToVTKImageFilter.h,v $ Language: C++ Date: $Date: 2004-02-19 03:47:59 $ Version: $Revision: 1.6 $ Copyright (c) 2002 Insight Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __itkImageToVTKImageFilter_h #define __itkImageToVTKImageFilter_h #include "itkVTKImageExport.h" #include "vtkImageImport.h" #include "vtkImageData.h" namespace itk { /** \class ImageToVTKImageFilter * \brief Converts an ITK image into a VTK image and plugs a * itk data pipeline to a VTK datapipeline. * * This class puts together an itkVTKImageExporter and a vtkImageImporter. * It takes care of the details related to the connection of ITK and VTK * pipelines. The User will perceive this filter as an adaptor to which * an itk::Image can be plugged as input and a vtkImage is produced as * output. * * \ingroup ImageFilters */ template class ITK_EXPORT ImageToVTKImageFilter : public ProcessObject { public: /** Standard class typedefs. */ typedef ImageToVTKImageFilter Self; typedef ProcessObject Superclass; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(ImageToVTKImageFilter, ProcessObject); /** Some typedefs. */ typedef TInputImage InputImageType; typedef typename InputImageType::ConstPointer InputImagePointer; typedef VTKImageExport< InputImageType> ExporterFilterType; typedef typename ExporterFilterType::Pointer ExporterFilterPointer; /** Get the output in the form of a vtkImage. This call is delegated to the internal vtkImageImporter filter */ vtkImageData * GetOutput() const; /** Set the input in the form of an itk::Image */ void SetInput( const InputImageType * ); /** Return the internal VTK image importer filter. This is intended to facilitate users the access to methods in the importer */ vtkImageImport * GetImporter() const; /** Return the internal ITK image exporter filter. This is intended to facilitate users the access to methods in the exporter */ ExporterFilterType * GetExporter() const; /** This call delegate the update to the importer */ void Update(); protected: ImageToVTKImageFilter(); virtual ~ImageToVTKImageFilter(); private: ImageToVTKImageFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented ExporterFilterPointer m_Exporter; vtkImageImport * m_Importer; }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION #include "itkImageToVTKImageFilter.txx" #endif #endif nifti2dicom-0.4.7/src/gui/itkImageToVTKImageFilter.txx000066400000000000000000000061201226163507100226060ustar00rootroot00000000000000/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkImageToVTKImageFilter.txx,v $ Language: C++ Date: $Date: 2005-06-12 01:23:44 $ Version: $Revision: 1.7 $ Copyright (c) 2002 Insight Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef _itkImageToVTKImageFilter_txx #define _itkImageToVTKImageFilter_txx #include "itkImageToVTKImageFilter.h" namespace itk { /** * Constructor */ template ImageToVTKImageFilter ::ImageToVTKImageFilter() { m_Importer = vtkImageImport::New(); m_Exporter = ExporterFilterType::New(); m_Importer->SetUpdateInformationCallback(m_Exporter->GetUpdateInformationCallback()); m_Importer->SetPipelineModifiedCallback(m_Exporter->GetPipelineModifiedCallback()); m_Importer->SetWholeExtentCallback(m_Exporter->GetWholeExtentCallback()); m_Importer->SetSpacingCallback(m_Exporter->GetSpacingCallback()); m_Importer->SetOriginCallback(m_Exporter->GetOriginCallback()); m_Importer->SetScalarTypeCallback(m_Exporter->GetScalarTypeCallback()); m_Importer->SetNumberOfComponentsCallback(m_Exporter->GetNumberOfComponentsCallback()); m_Importer->SetPropagateUpdateExtentCallback(m_Exporter->GetPropagateUpdateExtentCallback()); m_Importer->SetUpdateDataCallback(m_Exporter->GetUpdateDataCallback()); m_Importer->SetDataExtentCallback(m_Exporter->GetDataExtentCallback()); m_Importer->SetBufferPointerCallback(m_Exporter->GetBufferPointerCallback()); m_Importer->SetCallbackUserData(m_Exporter->GetCallbackUserData()); } /** * Destructor */ template ImageToVTKImageFilter ::~ImageToVTKImageFilter() { if( m_Importer ) { m_Importer->Delete(); m_Importer = 0; } } /** * Set an itk::Image as input */ template void ImageToVTKImageFilter ::SetInput( const InputImageType * inputImage ) { m_Exporter->SetInput( inputImage ); } /** * Get a vtkImage as output */ template vtkImageData * ImageToVTKImageFilter ::GetOutput() const { return m_Importer->GetOutput(); } /** * Get the importer filter */ template vtkImageImport * ImageToVTKImageFilter ::GetImporter() const { return m_Importer; } /** * Get the exporter filter */ template typename ImageToVTKImageFilter::ExporterFilterType * ImageToVTKImageFilter ::GetExporter() const { return m_Exporter.GetPointer(); } /** * Delegate the Update to the importer */ template void ImageToVTKImageFilter ::Update() { m_Importer->Update(); } } // end namespace itk #endif nifti2dicom-0.4.7/src/gui/qnifti2dicom.cpp000066400000000000000000000054471226163507100204150ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include #include #include #include #include "init.h" #include "customize.h" #include "finalize.h" #include "wizard.h" #include "Nifti2DicomConfig.h" void print_version() { std::cout << "qnifti2dicom " << Nifti2Dicom_VERSION << std::endl; } void print_usage() { std::cout << "USAGE" << std::endl; std::cout << std::endl; std::cout << " qnifti2dicom [-h] [--help] [--version]" << std::endl; std::cout << std::endl; std::cout << std::endl; std::cout << "Where:" << std::endl; std::cout << std::endl; std::cout << "--version" << std::endl; std::cout << " Displays version information and exits." << std::endl; std::cout << std::endl; std::cout << "-h, --help" << std::endl; std::cout << " Displays usage information and exits." << std::endl; } int main(int argc, char* argv[]) { #ifdef Q_WS_X11 bool useGUI = getenv("DISPLAY") != 0; #else bool useGUI = true; #endif QApplication app(argc, argv, useGUI); Q_FOREACH (const QString &arg, app.arguments()) { if (arg == QLatin1String("--version")) { print_version(); exit(0); } if (arg == QLatin1String("--help") || arg == QLatin1String("-h")) { print_usage(); exit(0); } } if (!useGUI) { std::cerr << "Cannot run qnifti2dicom without DISPLAY." << std::endl; std::cerr << "Please set the DISPLAY environment variable or use nifti2dicom instead." << std::endl;; exit(1); } n2d::gui::Wizard* wiz = new n2d::gui::Wizard(0); n2d::gui::init* page1 = new n2d::gui::init(wiz); n2d::gui::customize* page2 = new n2d::gui::customize(wiz); n2d::gui::finalize* page3 = new n2d::gui::finalize(wiz); wiz->addPage(page1); wiz->addPage(page2); wiz->addPage(page3); wiz->show(); int ret = app.exec(); delete wiz; return ret; } nifti2dicom-0.4.7/src/gui/resources.qrc000066400000000000000000000001651226163507100200320ustar00rootroot00000000000000 ../../data/images/background.png nifti2dicom-0.4.7/src/gui/vtkKWImage.cxx000066400000000000000000000143571226163507100200560ustar00rootroot00000000000000/*========================================================================= Program: KWImage - Kitware Image IO Library Module: $RCSfile: vtkKWImage.cxx,v $ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "vtkKWImage.h" #include "itkImage.h" #include "itkVTKImageExport.h" #include "vtkObjectFactory.h" #include "vtkImageData.h" #include "vtkImageImport.h" /** \class PipelineCreator * This helper class will take care of instantiating the appropriate * ITK Export class corresponding to the actual pixel type of the * input image. */ template class PipelineCreator { public: typedef itk::ImageBase<3> ImageBaseType; typedef ImageBaseType::Pointer ImageBasePointer; typedef itk::ProcessObject ExporterBaseType; typedef itk::ProcessObject::Pointer ExporterBasePointer; typedef itk::Image< TPixel, 3 > ImageType; static void CreateExporter( ImageBasePointer & imageBase, ExporterBasePointer & exporter, vtkImageImport * importer ) { ImageType * image = dynamic_cast< ImageType * >( imageBase.GetPointer() ); if( image ) { typedef itk::VTKImageExport< ImageType > ExportFilterType; typedef typename ExportFilterType::Pointer ExportFilterPointer; ExportFilterPointer itkExporter = ExportFilterType::New(); itkExporter->SetInput( image ); exporter = itkExporter; importer->SetUpdateInformationCallback( itkExporter->GetUpdateInformationCallback()); importer->SetPipelineModifiedCallback( itkExporter->GetPipelineModifiedCallback()); importer->SetWholeExtentCallback( itkExporter->GetWholeExtentCallback()); importer->SetSpacingCallback( itkExporter->GetSpacingCallback()); importer->SetOriginCallback( itkExporter->GetOriginCallback()); importer->SetScalarTypeCallback( itkExporter->GetScalarTypeCallback()); importer->SetNumberOfComponentsCallback( itkExporter->GetNumberOfComponentsCallback()); importer->SetPropagateUpdateExtentCallback( itkExporter->GetPropagateUpdateExtentCallback()); importer->SetUpdateDataCallback( itkExporter->GetUpdateDataCallback()); importer->SetDataExtentCallback( itkExporter->GetDataExtentCallback()); importer->SetBufferPointerCallback( itkExporter->GetBufferPointerCallback()); importer->SetCallbackUserData( itkExporter->GetCallbackUserData()); } } }; /** This helper macro will instantiate the pipeline creator for a particular * pixel type */ #define CreatePipelineMacro( PixelType ) \ PipelineCreator< PixelType >::CreateExporter( \ this->ItkImage, this->Exporter, this->Importer ); //---------------------------------------------------------------------------- vtkStandardNewMacro( vtkKWImage ); vtkCxxRevisionMacro(vtkKWImage, "$Revision: 1.1 $"); //---------------------------------------------------------------------------- vtkKWImage::vtkKWImage() { this->Importer = vtkImageImport::New(); } //---------------------------------------------------------------------------- vtkKWImage::~vtkKWImage() { if( this->Importer ) { this->Importer->Delete(); } } //---------------------------------------------------------------------------- void vtkKWImage::SetITKImageBase( ImageBaseType * image ) { if( this->ItkImage.GetPointer() == image ) { return; } this->ItkImage = image; this->Modified(); CreatePipelineMacro( unsigned char ); CreatePipelineMacro( char ); CreatePipelineMacro( unsigned short ); CreatePipelineMacro( short ); CreatePipelineMacro( unsigned int ); CreatePipelineMacro( int ); CreatePipelineMacro( unsigned long ); CreatePipelineMacro( long ); CreatePipelineMacro( float ); CreatePipelineMacro( double ); this->Importer->Update(); } //---------------------------------------------------------------------------- vtkImageData * vtkKWImage::GetVTKImage() { return this->Importer->GetOutput(); } //---------------------------------------------------------------------------- const vtkKWImage::ImageBaseType * vtkKWImage::GetITKImageBase() const { return this->ItkImage; } //---------------------------------------------------------------------------- vtkKWImage::ITKScalarPixelType vtkKWImage::GetITKScalarPixelType() const { ITKScalarPixelType pixelType = itk::ImageIOBase::UCHAR; ImageBaseType * itkImageBase = this->ItkImage.GetPointer(); if( dynamic_cast< itk::Image< unsigned char, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::UCHAR; } else if( dynamic_cast< itk::Image< char, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::CHAR; } else if( dynamic_cast< itk::Image< short, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::SHORT; } else if( dynamic_cast< itk::Image< unsigned short, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::USHORT; } else if( dynamic_cast< itk::Image< int, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::INT; } else if( dynamic_cast< itk::Image< unsigned int, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::UINT; } else if( dynamic_cast< itk::Image< long, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::LONG; } else if( dynamic_cast< itk::Image< unsigned long, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::ULONG; } else if( dynamic_cast< itk::Image< float, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::FLOAT; } else if( dynamic_cast< itk::Image< double, 3> * >( itkImageBase ) ) { pixelType = itk::ImageIOBase::DOUBLE; } return pixelType; } //---------------------------------------------------------------------------- int vtkKWImage::GetVTKScalarPixelType() { return this->GetVTKImage()->GetScalarType(); } nifti2dicom-0.4.7/src/gui/vtkKWImage.h000066400000000000000000000041151226163507100174720ustar00rootroot00000000000000/*========================================================================= Program: KWImage - Kitware Image IO Library Module: $RCSfile: vtkKWImage.h,v $ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __vtkKWImage_h #define __vtkKWImage_h #include "itkImageBase.h" #include "itkImageIOBase.h" #include "vtkObject.h" class vtkImageData; class vtkImageImport; /** \class KWImage * * \brief This class represents an image object. * * This class associates an internal ITK image and a VTK importer in such a way * that internally it can make available both image formats to ITK and VTK * classes. * */ class vtkKWImage : public vtkObject { public: static vtkKWImage* New(); vtkTypeRevisionMacro(vtkKWImage,vtkObject); typedef itk::ImageBase< 3 > ImageBaseType; typedef ImageBaseType::Pointer ImagePointer; typedef ImageBaseType::ConstPointer ImageConstPointer; typedef itk::ImageIOBase::IOComponentType ITKScalarPixelType; // Set the untyped ITK image void SetITKImageBase( ImageBaseType * ); // Return the pixel type using ITK enums. ITKScalarPixelType GetITKScalarPixelType() const; // Return the pixel type using VTK enums. int GetVTKScalarPixelType(); vtkImageData * GetVTKImage(); // Return the ITK image base. This is independent of the pixel type const ImageBaseType * GetITKImageBase() const; protected: vtkKWImage(); ~vtkKWImage(); private: vtkKWImage(const vtkKWImage&); // Not implemented. void operator=(const vtkKWImage&); // Not implemented. ImagePointer ItkImage; itk::ProcessObject::Pointer Exporter; vtkImageImport *Importer; }; #endif nifti2dicom-0.4.7/src/gui/vtkKWImageIO.cxx000066400000000000000000000424131226163507100203000ustar00rootroot00000000000000/*========================================================================= Program: KWImage - Kitware Image IO Library Module: $RCSfile: vtkKWImageIO.cxx,v $ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #include "vtkKWImageIO.h" #include "vtkImageData.h" #include "vtkObjectFactory.h" #include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "itkRescaleIntensityImageFilter.h" #include "itkGDCMImageIO.h" #include "itkGDCMSeriesFileNames.h" #include "itkImageSeriesReader.h" #include "itkMetaDataDictionary.h" #include "itkMetaDataObject.h" #include "vtkKWImage.h" #include #include /** \class ReaderCreator * This helper class will take care of instantiating the appropriate ITK * ImageFileReader class corresponding to the actual pixel type of the input * image. */ template class ReaderCreator { public: typedef itk::Image< TPixel, 3 > ImageType; typedef itk::ImageFileReader< ImageType > ReaderType; typedef typename ReaderType::Pointer ReaderPointer; typedef vtkKWImage * ImagePointer; static ImagePointer CreateAndRead( const std::string & filename ) { ImagePointer kwImage = vtkKWImage::New(); ReaderPointer reader = ReaderType::New(); reader->SetFileName( filename ); reader->Update(); kwImage->SetITKImageBase( reader->GetOutput() ); return kwImage; } }; /** \class SeriesReaderCreator * This helper class will take care of instantiating the appropriate ITK * ImageFileReader class corresponding to the actual pixel type of the input * image. */ template class SeriesReaderCreator { public: typedef itk::Image< TPixel, 3 > ImageType; typedef itk::ImageSeriesReader< ImageType > ReaderType; typedef typename ReaderType::Pointer ReaderPointer; typedef vtkKWImage * ImagePointer; static ImagePointer CreateAndRead( const std::vector & filenames ) { ImagePointer kwImage = vtkKWImage::New(); ReaderPointer reader = ReaderType::New(); reader->SetFileNames( filenames ); reader->Update(); kwImage->SetITKImageBase( reader->GetOutput() ); return kwImage; } }; /** \class ReadAndCastImageCreator read and cast the image to unsigned char type */ template class ReadAndCastImageCreator { public: typedef itk::Image< TPixel, 3 > InputImageType; typedef itk::Image< unsigned char, 3> OutputImageType; typedef itk::RescaleIntensityImageFilter< InputImageType, OutputImageType > RescaleFilterType; typedef typename RescaleFilterType::Pointer RescaleFilterPointer; typedef itk::ImageFileReader< InputImageType > ReaderType; typedef typename ReaderType::Pointer ReaderPointer; typedef vtkKWImage * ImagePointer; static ImagePointer CreateAndRead( const std::string & filename ) { ImagePointer kwImage = vtkKWImage::New(); ReaderPointer reader = ReaderType::New(); RescaleFilterPointer rescaleFilter = RescaleFilterType::New(); rescaleFilter->SetOutputMinimum( 0 ); rescaleFilter->SetOutputMaximum( 255 ); reader->SetFileName( filename ); rescaleFilter->SetInput ( reader->GetOutput()); rescaleFilter->Update(); kwImage->SetITKImageBase( rescaleFilter->GetOutput() ); return kwImage; } }; /** \class WriteCreator * This helper class will take care of instantiating the appropriate ITK * ImageFileWriter class corresponding to the actual pixel type of the input * image. */ template class WriteCreator { public: typedef itk::ImageBase< 3 > ImageBaseType; typedef itk::Image< TPixel, 3 > ImageType; typedef itk::ImageFileWriter< ImageType > WriterType; typedef typename WriterType::Pointer WriterPointer; static void CreateAndWrite( const std::string & filename, const vtkKWImage * image ) { WriterPointer writer = WriterType::New(); const ImageBaseType * imageBase = image->GetITKImageBase(); typename ImageType::ConstPointer typedImage = dynamic_cast< const ImageType * >( imageBase ); if( typedImage.IsNull() ) { itk::ExceptionObject excp; excp.SetDescription("Error extracting ITK typed image" " from the vtkKWImage"); throw excp; } writer->SetFileName( filename ); writer->SetInput( typedImage ); writer->Update(); } }; /** This helper macro will instantiate the pipeline for a reader creator for a * particular pixel type */ #define ReadMacro( PixelType ) \ ReaderCreator< PixelType >::CreateAndRead( this->FileName ); /** This helper macro will instantiate the pipeline for a reader creator for a * particular pixel type */ #define SeriesReaderCreator( PixelType ) \ SeriesReaderCreator< PixelType >::CreateAndRead( this->SeriesFileNames ); /** This helper macro will instantiate the pipeline for a reader creator for a * particular pixel type and cast it to unsigned char type*/ #define ReadAndCastMacro( PixelType ) \ ReadAndCastImageCreator< PixelType >::CreateAndRead( this->FileName ); /** This helper macro will instantiate the pipeline fora writer creator for a * particular pixel type */ #define WriteMacro( PixelType ) \ WriteCreator< PixelType >::CreateAndWrite( this->FileName, \ this->ImageToBeWritten ); //---------------------------------------------------------------------------- vtkStandardNewMacro( vtkKWImageIO ); vtkCxxRevisionMacro(vtkKWImageIO, "$Revision: 1.1 $"); //---------------------------------------------------------------------------- vtkKWImageIO::vtkKWImageIO() { this->ImageThatHasBeenRead = NULL; this->ImageToBeWritten = NULL; } //---------------------------------------------------------------------------- vtkKWImageIO::~vtkKWImageIO() { } //----------------------------------------------------------------------------- void vtkKWImageIO::SetFileName( const std::string & fileName ) { this->FileName = fileName; } //----------------------------------------------------------------------------- void vtkKWImageIO::SetSeriesFileNames( const std::vector & fileNames ) { this->SeriesFileNames = fileNames; } //----------------------------------------------------------------------------- void vtkKWImageIO::SetDirectory( const std::string & directory ) { this->Directory = directory; } // Read Image void vtkKWImageIO::ReadImage() { // Find out the pixel type of the image in file typedef itk::ImageIOBase::IOComponentType PixelType; itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( this->FileName.c_str(), itk::ImageIOFactory::ReadMode ); if( !imageIO ) { std::cerr << "NO IMAGEIO WAS FOUND" << std::endl; itk::ExceptionObject excp; excp.SetDescription("Unable to open the requested Image"); throw excp; return; } // Now that we found the appropriate ImageIO class, ask it to // read the meta data from the image file. imageIO->SetFileName( this->FileName.c_str() ); imageIO->ReadImageInformation(); PixelType pixelType = imageIO->GetComponentType(); // Use the pixel type to instantiate the appropriate reader switch( pixelType ) { case itk::ImageIOBase::UCHAR: { this->ImageThatHasBeenRead = ReadMacro( unsigned char ); this->ImagePixelType = UNSIGNED_CHAR; break; } case itk::ImageIOBase::CHAR: { this->ImageThatHasBeenRead = ReadMacro( char ); this->ImagePixelType = CHAR; break; } case itk::ImageIOBase::USHORT: { this->ImageThatHasBeenRead = ReadMacro( unsigned short ); this->ImagePixelType = UNSIGNED_SHORT; break; } case itk::ImageIOBase::SHORT: { this->ImageThatHasBeenRead = ReadMacro( short ); this->ImagePixelType = SHORT; break; } case itk::ImageIOBase::UINT: { this->ImageThatHasBeenRead = ReadMacro( unsigned int ); this->ImagePixelType = UNSIGNED_INT; break; } case itk::ImageIOBase::INT: { this->ImageThatHasBeenRead = ReadMacro( int ); this->ImagePixelType = INT; break; } case itk::ImageIOBase::ULONG: { this->ImageThatHasBeenRead = ReadMacro( unsigned long ); this->ImagePixelType = UNSIGNED_LONG; break; } case itk::ImageIOBase::LONG: { this->ImageThatHasBeenRead = ReadMacro( long ); this->ImagePixelType = LONG; break; } case itk::ImageIOBase::FLOAT: { this->ImageThatHasBeenRead = ReadMacro( float ); this->ImagePixelType = FLOAT; break; } case itk::ImageIOBase::DOUBLE: { this->ImageThatHasBeenRead = ReadMacro( double ); this->ImagePixelType = DOUBLE; break; } default: { itk::ExceptionObject excp; excp.SetDescription("The file uses a pixel type" "that is not supported in this application"); throw excp; } } } // Read Image void vtkKWImageIO::ReadImageSeries() { //Extract the series UID of the selected dicom image typedef itk::ImageIOBase::IOComponentType PixelType; itk::GDCMImageIO::Pointer imageIO = itk::GDCMImageIO::New(); if( !imageIO ) { std::cerr << "Failure generating GDCM image IO " << std::endl; return; } // Now that we found the appropriate ImageIO class, ask it to // read the meta data from the image file. imageIO->SetFileName( this->FileName.c_str() ); imageIO->ReadImageInformation(); itk::MetaDataDictionary & dict = imageIO->GetMetaDataDictionary(); std::string tagkey = "0020|000e"; std::string seriesIdentifier; if( ! itk::ExposeMetaData(dict,tagkey, seriesIdentifier ) ) { std::cerr << "Series UID not found: " << std::endl; return; } //Generate filenames of the DICOM series that belong //to the DICOM volume of the selected image typedef itk::GDCMSeriesFileNames NamesGeneratorType; NamesGeneratorType::Pointer nameGenerator = NamesGeneratorType::New(); nameGenerator->SetInputDirectory( this->Directory ); typedef std::vector< std::string > FileNamesContainerType; FileNamesContainerType fileNames; fileNames = nameGenerator->GetFileNames( seriesIdentifier ); this->SetSeriesFileNames( fileNames ); PixelType pixelType = imageIO->GetComponentType(); // Use the pixel type to instantiate the appropriate reader switch( pixelType ) { case itk::ImageIOBase::UCHAR: { this->ImageThatHasBeenRead = SeriesReaderCreator( unsigned char ); this->ImagePixelType = UNSIGNED_CHAR; break; } case itk::ImageIOBase::CHAR: { this->ImageThatHasBeenRead = SeriesReaderCreator( char ); this->ImagePixelType = CHAR; break; } case itk::ImageIOBase::USHORT: { this->ImageThatHasBeenRead = SeriesReaderCreator( unsigned short ); this->ImagePixelType = UNSIGNED_SHORT; break; } case itk::ImageIOBase::SHORT: { this->ImageThatHasBeenRead = SeriesReaderCreator( short ); this->ImagePixelType = SHORT; break; } case itk::ImageIOBase::UINT: { this->ImageThatHasBeenRead = SeriesReaderCreator( unsigned int ); this->ImagePixelType = UNSIGNED_INT; break; } case itk::ImageIOBase::INT: { this->ImageThatHasBeenRead = SeriesReaderCreator( int ); this->ImagePixelType = INT; break; } case itk::ImageIOBase::ULONG: { this->ImageThatHasBeenRead = SeriesReaderCreator( unsigned long ); this->ImagePixelType = UNSIGNED_LONG; break; } case itk::ImageIOBase::LONG: { this->ImageThatHasBeenRead = SeriesReaderCreator( long ); this->ImagePixelType = LONG; break; } case itk::ImageIOBase::FLOAT: { this->ImageThatHasBeenRead = SeriesReaderCreator( float ); this->ImagePixelType = FLOAT; break; } case itk::ImageIOBase::DOUBLE: { this->ImageThatHasBeenRead = SeriesReaderCreator( double ); this->ImagePixelType = DOUBLE; break; } default: { itk::ExceptionObject excp; excp.SetDescription("The file uses a pixel type" "that is not supported in this application"); throw excp; } } } // Read and cast Image to unsigned char void vtkKWImageIO::ReadAndCastImage() { // Find out the pixel type of the image in file typedef itk::ImageIOBase::IOComponentType PixelType; itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( this->FileName.c_str(), itk::ImageIOFactory::ReadMode ); if( !imageIO ) { std::cerr << "NO IMAGEIO WAS FOUND" << std::endl; return; } // Now that we found the appropriate ImageIO class, ask it to // read the meta data from the image file. imageIO->SetFileName( this->FileName.c_str() ); imageIO->ReadImageInformation(); PixelType pixelType = imageIO->GetComponentType(); // Use the pixel type to instantiate the appropriate reader switch( pixelType ) { case itk::ImageIOBase::UCHAR: { this->ImageThatHasBeenRead = ReadAndCastMacro( unsigned char ); this->ImagePixelType = UNSIGNED_CHAR; break; } case itk::ImageIOBase::CHAR: { this->ImageThatHasBeenRead = ReadAndCastMacro( char ); this->ImagePixelType = CHAR; break; } case itk::ImageIOBase::USHORT: { this->ImageThatHasBeenRead = ReadAndCastMacro( unsigned short ); this->ImagePixelType = UNSIGNED_SHORT; break; } case itk::ImageIOBase::SHORT: { this->ImageThatHasBeenRead = ReadAndCastMacro( short ); this->ImagePixelType = SHORT; break; } case itk::ImageIOBase::UINT: { this->ImageThatHasBeenRead = ReadAndCastMacro( unsigned int ); this->ImagePixelType = UNSIGNED_INT; break; } case itk::ImageIOBase::INT: { this->ImageThatHasBeenRead = ReadAndCastMacro( int ); this->ImagePixelType = INT; break; } case itk::ImageIOBase::ULONG: { this->ImageThatHasBeenRead = ReadAndCastMacro( unsigned long ); this->ImagePixelType = UNSIGNED_LONG; break; } case itk::ImageIOBase::LONG: { this->ImageThatHasBeenRead = ReadAndCastMacro( long ); this->ImagePixelType = LONG; break; } case itk::ImageIOBase::FLOAT: { this->ImageThatHasBeenRead = ReadAndCastMacro( float ); this->ImagePixelType = FLOAT; break; } case itk::ImageIOBase::DOUBLE: { this->ImageThatHasBeenRead = ReadAndCastMacro( double ); this->ImagePixelType = DOUBLE; break; } default: { itk::ExceptionObject excp; excp.SetDescription("The file uses a pixel type" "that is not supported in this application"); throw excp; } } } // return pixel type vtkKWImageIO::PixelType vtkKWImageIO::GetImagePixelType() { return this->ImagePixelType; } // Write Image void vtkKWImageIO::WriteImage() { typedef itk::ImageIOBase::IOComponentType PixelType; PixelType pixelType = this->ImageToBeWritten->GetITKScalarPixelType(); // Use the pixel type to instantiate the appropriate reader switch( pixelType ) { case itk::ImageIOBase::UCHAR: { WriteMacro( unsigned char ); break; } case itk::ImageIOBase::CHAR: { WriteMacro( char ); break; } case itk::ImageIOBase::USHORT: { WriteMacro( unsigned short ); break; } case itk::ImageIOBase::SHORT: { WriteMacro( short ); break; } case itk::ImageIOBase::UINT: { WriteMacro( unsigned int ); break; } case itk::ImageIOBase::INT: { WriteMacro( int ); break; } case itk::ImageIOBase::ULONG: { WriteMacro( unsigned long ); break; } case itk::ImageIOBase::LONG: { WriteMacro( long ); break; } case itk::ImageIOBase::FLOAT: { WriteMacro( float ); break; } case itk::ImageIOBase::DOUBLE: { WriteMacro( double ); break; } default: { itk::ExceptionObject excp; excp.SetDescription("The file uses a pixel type" "that is not supported in this application"); throw excp; } } } //----------------------------------------------------------------------------- vtkKWImage * vtkKWImageIO::HarvestReadImage() { vtkKWImage * image = this->ImageThatHasBeenRead; this->ImageThatHasBeenRead = NULL; return image; } //----------------------------------------------------------------------------- void vtkKWImageIO::SetImageToBeWritten( const vtkKWImage * imageToBeWritten ) { this->ImageToBeWritten = imageToBeWritten; } nifti2dicom-0.4.7/src/gui/vtkKWImageIO.h000066400000000000000000000054231226163507100177250ustar00rootroot00000000000000/*========================================================================= Program: KWImage - Kitware Image IO Library Module: $RCSfile: vtkKWImageIO.h,v $ Copyright (c) Kitware, Inc., Insight Consortium. All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notices for more information. =========================================================================*/ #ifndef __vtkKWImageIO_h #define __vtkKWImageIO_h #include "vtkObject.h" #include #include class vtkKWImage; /** \class vtkKWImageIO * \brief Class that reads image using ITK reader factory. * * This class uses the ITK readers/writers factory to load * an image and returns it into a vtkKWImage, which is a * ITK/VTK image container. */ class vtkKWImageIO : public vtkObject { public: static vtkKWImageIO* New(); vtkTypeRevisionMacro(vtkKWImageIO,vtkObject); // PixelType //BTX typedef enum { UNSIGNED_CHAR, CHAR, UNSIGNED_SHORT, SHORT, UNSIGNED_INT, INT, UNSIGNED_LONG, LONG, FLOAT, DOUBLE } PixelType; //ETX PixelType GetImagePixelType(); // set filename void SetFileName( const std::string & fileName ); // set directory void SetDirectory( const std::string & directory ); // set a vector list containing filenames of an image series void SetSeriesFileNames( const std::vector< std::string > & FileNames ); // ReadImage void ReadImage(); // Read DICOM series void ReadImageSeries(); // Read and cast image void ReadAndCastImage(); // WriteImage void WriteImage(); // Return the vtkKWImage that was previously read. This image object is // returned and disconnected from the reader. Once you receive the image // object it is YOUR responsibility to release its memory by calling its // Delete() method when you don't need it anymore. vtkKWImage * HarvestReadImage(); // Set the image to be written. void SetImageToBeWritten( const vtkKWImage * imageToBeWritten ); protected: vtkKWImageIO(); ~vtkKWImageIO(); private: vtkKWImageIO(const vtkKWImageIO&); // Not implemented. void operator=(const vtkKWImageIO&); // Not implemented. // Containter that holds the image read from a file vtkKWImage *ImageThatHasBeenRead; // Containter that holds the image to be written to a file const vtkKWImage *ImageToBeWritten; //BTX std::string FileName; std::vector< std::string> SeriesFileNames; std::string Directory; //ETX PixelType ImagePixelType; }; #endif nifti2dicom-0.4.7/src/gui/wizard.cpp000066400000000000000000000052321226163507100173150ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #include #include #include #include "wizard.h" #include #include namespace n2d{ namespace gui{ Wizard::Wizard(QWizard* parent):QWizard(parent) { setWindowTitle(tr("QNifti2Dicom")); this->setGeometry(10,10,1000,600); this->setButtonText(QWizard::FinishButton,"Do!"); setOption(QWizard::HaveHelpButton,true); setPixmap(QWizard::BackgroundPixmap, QPixmap(":/data/images/background.png")); connect(button(QWizard::HelpButton), SIGNAL(clicked()), this, SLOT(showHelp())); } Wizard::~Wizard() { } void Wizard::showHelp() { QString message; switch (currentId()) { case 0: message = tr("In this first page you should provide the nifti image to convert and optionally a reference DICOM header from which copy anagraphical data of the patient "); break; case 1: message = tr("In this page you should edit DICOM field filling proper information required for the output header. To do this simply right-click on the proper row. At the end press enter to confirm your change for the selected tag."); break; case 2: message = tr("In this page you would be asked for an output directory where all the dicom slices will be written to and the accession Number. All those fields are mandatory. At the right side of the page you could review the final header. Nothing has been already written to the final files so you can go back to the previous page and edit correctly the header tags"); break; default: message = tr("This Dialog will contain information for the current step"); } QMessageBox::information(this, tr("QNifti2Dicom Help dialog"), message); } }//namespace gui }//namespace n2d nifti2dicom-0.4.7/src/gui/wizard.h000066400000000000000000000126651226163507100167720ustar00rootroot00000000000000// This file is part of Nifti2Dicom, is an open source converter from // 3D NIfTI images to 2D DICOM series. // // Copyright (C) 2010,2012 Gabriele Arnulfo // // Nifti2Dicom is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Nifti2Dicom is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Nifti2Dicom. If not, see . #ifndef WIZARD_H #define WIZARD_H #include #include #include #include #include "vtkKWImage.h" ////////////////////////////////////// // FIXME CONTROL FOR NULL POINTERS // ////////////////////////////////////// namespace n2d{ class HeaderImporter; namespace gui{ class Wizard : public QWizard { Q_OBJECT public: Wizard(QWizard* parent=0); virtual ~Wizard(); inline const n2d::AccessionNumberArgs& getaccessionNumberArgs() const { return m_accessionNumberArgs; } inline const n2d::DicomHeaderArgs& getdicomHeaderArgs() const { return m_dicomHeaderArgs; } inline const n2d::DicomClassArgs& getdicomClassArgs() const { return m_dicomClassArgs; } inline const n2d::OtherDicomTagsArgs& getotherDicomTagsArgs() const { return m_otherDicomTagsArgs; } inline const n2d::PatientArgs& getpatientArgs() const { return m_patientArgs; } inline const n2d::StudyArgs& getstudyArgs() const { return m_studyArgs; } inline const n2d::SeriesArgs& getseriesArgs() const { return m_seriesArgs; } inline const n2d::AcquisitionArgs& getacquisitionArgs() const { return m_acquisitionArgs; } inline const n2d::InputArgs& getinputArgs() const { return m_inputArgs; } inline const n2d::FiltersArgs& getfiltersArgs() const { return m_filtersArgs; } inline const n2d::InstanceArgs& getinstanceArgs() const { return m_instanceArgs; } inline const n2d::OutputArgs& getoutputArgs() const { return m_outputArgs; } inline n2d::DictionaryType* getImportedDictionary() { return &m_importedDictionary; } inline n2d::DictionaryType* getDictionary() { return &m_dictionary; } inline void setImportedImage( vtkKWImage* in) {m_importedImage = in; } inline n2d::PixelType getImportedPixelType() const { return m_importedImage->GetITKScalarPixelType(); } inline n2d::ImageType::ConstPointer getImportedImage() const { return m_importedImage->GetITKImageBase(); } inline void setDicomHeaderImporter(n2d::HeaderImporter* a) { m_HeaderImporter = a; } inline void setImportedDictionary(n2d::DictionaryType& b) { m_importedDictionary = b; } inline QSignalSpy* getSpy() const { return m_spy; } inline void setSpy(QSignalSpy* in) { m_spy=in; } public slots: inline void storeAccessionNumberArgs(n2d::AccessionNumberArgs& a) {m_accessionNumberArgs = a; } inline void storeDicomHeaderArgs(n2d::DicomHeaderArgs& a) {m_dicomHeaderArgs = a; } inline void storeDicomClassArgs(n2d::DicomClassArgs& a) {m_dicomClassArgs = a; } inline void storeOtherDicomTagsArgs(n2d::OtherDicomTagsArgs& a) {m_otherDicomTagsArgs = a; } inline void storePatientArgs(n2d::PatientArgs& a) {m_patientArgs = a; } inline void storeStudyArgs(n2d::StudyArgs& a) {m_studyArgs = a; } inline void storeSeriesArgs(n2d::SeriesArgs& a) {m_seriesArgs = a; } inline void storeAcquisitionArgs(n2d::AcquisitionArgs& a) {m_acquisitionArgs = a; } inline void storeInputArgs(n2d::InputArgs& a) {m_inputArgs = a; } inline void storeFiltersArgs(n2d::FiltersArgs& a) {m_filtersArgs = a; } inline void storeInstanceArgs(n2d::InstanceArgs& a) {m_instanceArgs = a; } inline void storeOutputArgs(n2d::OutputArgs& a) {m_outputArgs = a; } private slots: void showHelp(); private: //BEGIN Common Structures n2d::AccessionNumberArgs m_accessionNumberArgs; n2d::DicomHeaderArgs m_dicomHeaderArgs; n2d::DicomClassArgs m_dicomClassArgs; n2d::OtherDicomTagsArgs m_otherDicomTagsArgs; n2d::PatientArgs m_patientArgs; n2d::StudyArgs m_studyArgs; n2d::SeriesArgs m_seriesArgs; n2d::AcquisitionArgs m_acquisitionArgs; n2d::InputArgs m_inputArgs; n2d::FiltersArgs m_filtersArgs; n2d::InstanceArgs m_instanceArgs; n2d::OutputArgs m_outputArgs; //END Structures //BEGIN Common object vtkKWImage* m_importedImage; //END Common Object //BEGIN n2dClassess n2d::HeaderImporter* m_HeaderImporter; //END n2dClasses //BEGIN n2dDictionaryObject n2d::DictionaryType m_importedDictionary; n2d::DictionaryType m_dictionary; //END n2dDictionaryObject QSignalSpy* m_spy; }; }//namespace gui }//namespace n2d #endif // WIZARD_H