pax_global_header00006660000000000000000000000064135655413200014516gustar00rootroot0000000000000052 comment=9934246db7e665f9d0522a1725fe1ae4fe44e8db wavbreaker-0.13/000077500000000000000000000000001356554132000135725ustar00rootroot00000000000000wavbreaker-0.13/.gitignore000066400000000000000000000004741356554132000155670ustar00rootroot00000000000000*~ /build /linux_build /wavbreaker-*linux /wavbreaker-*linux.zip /macos_build /Applications /wavbreaker-*macos.zip /win32_build /wavbreaker-*win32 /wavbreaker-*win32.zip /.flatpak-builder/ /flatpak_build/ /flatpak_repo/ /wavbreaker-*.flatpak /snap /wavbreaker_*.snap /dist po/POTFILES po/*.gmo po/stamp-po .DS_Store wavbreaker-0.13/.travis.yml000066400000000000000000000036111356554132000157040ustar00rootroot00000000000000matrix: include: - os: linux dist: bionic language: c env: BUILD_TYPE=linux - os: linux dist: bionic language: c env: BUILD_TYPE=windows - os: linux dist: bionic language: c sudo: required env: BUILD_TYPE=flatpak # - os: linux # dist: bionic # language: c # env: BUILD_TYPE=snap - os: osx osx_image: xcode11.2 sudo: required language: c env: BUILD_TYPE=macos PATH=/usr/local/opt/gettext/bin:$PATH services: - docker addons: apt: packages: - libgtk-3-dev - libao-dev - libmpg123-dev - meson - ninja-build - gettext - flatpak-builder snaps: - name: snapcraft confinement: classic - name: multipass confinement: classic channel: edge homebrew: packages: - gtk+3 - libao - mpg123 - meson - ninja - gettext deploy: provider: releases api_key: secure: MJ/lh4chzgsbEdAMAF1fCgqT+EHmeKInH0IdB6HQ5nYQTslg9/XyqA2IkAJlfY8EoBrjWe1NilrwCXd7Yrn7a0k3q1PZfeYfU9fOpiBgquRFtigprrelcj3k+ptl8lm8DBOdHqU3oG4rJRf6hRcg8D65ij/OmUZ3TMj3uvmtvQ4hAciYz7aGNrzB9hd+JUO18+buLQO4P84HLbiBA5opI0OXu8eZHnjWD2xGzPReswroUUZY9WSlG5nYBM9U18y8iXAi5WEl8aI1Dt4+DmZR/DRn4KhRf7/VmRKo0x3mEZTd7e+oBK6BOgX4PmB/mekbLqmuH+qgdnbNnvbY1qPjKRW+4C/Q4gyLKSddyg5otDCgGFqzQ/cCPnVwzTIdCwbqBJh9u8Loe9XW1MzH0rE4//K+GVy+3gZ3/P9nJVXSdLK3oSZRKBW0mtT5ZBjZ4yH7gNzXvWRBBiA1umqRiCZKDOto1pW8rm7A0o/pjvvqWRzERvnhXv3Rdb4CB24oOJSrgXoTeubGQtjvWei706b/EkxYOvXWXTB7JzmwiFIv5WBzv0RN20CQL+f6OuxxxfizVj/SbSv4ranrE4ajVC4M7RLyhm/c+39CmKNZUGMzFUcvb7c/bSI5RZ+3QgmJCYMOVHSSO3T6ty00PEZGvFkGjffU10q/id3/fRdHD/YOUEw= file: dist/* file_glob: true on: tags: true skip_cleanup: true script: - scripts/build.sh $BUILD_TYPE wavbreaker-0.13/AUTHORS000066400000000000000000000000471356554132000146430ustar00rootroot00000000000000Timothy Robinson wavbreaker-0.13/CONTRIBUTORS000066400000000000000000000003341356554132000154520ustar00rootroot00000000000000Dave Maley Justin Ruggles Thomas Perl Avuton Olrich pigiron Tomek José Jorge wavbreaker-0.13/COPYING000066400000000000000000000431031356554132000146260ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) 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 this service 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 make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. 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. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. 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 convey 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision 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, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This 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. wavbreaker-0.13/README.md000066400000000000000000000040431356554132000150520ustar00rootroot00000000000000wavbreaker ========== [![Build Status](https://travis-ci.org/thp/wavbreaker.svg?branch=master)](https://travis-ci.org/thp/wavbreaker) [![Packaging status](https://repology.org/badge/tiny-repos/wavbreaker.svg)](https://repology.org/project/wavbreaker/versions) This application's purpose in life is to take a WAV file and break it up into multiple WAV files. It makes a clean break at the correct position to burn the files to an Audio CD without any dead air between the tracks. wavbreaker now also directly supports breaking up MP3s without re-encoding meaning it's fast and there is no generational loss. Decoding (using mpg123) is only done for playback and waveform display. The GUI displays a waveform summary of the entire file at the top. The middle portion displays a zoomed-in view that allows you to select where to start playing and where it will make the break. The bottom portion contains a list of track breaks. You may change file names and uncheck parts that you do not want to have written out to disk when saving. There is also a command line tool `wavmerge` to merge WAV files together. If you download a show and don't like how it was tracked, you can merge them together with `wavmerge` and then break them back up with wavbreaker. The wavmerge tool will only work on files that have the same format (for example, 44.100 Hz sample rate, 16-bit sample size, etc.). Screenshot ---------- ![Main Window](data/screenshot.png) How to Build ------------ wavbreaker now uses the [Meson Build system](https://mesonbuild.com/). To build wavbreaker in the `build` directory, run: meson build ninja -C build macOS Packaging --------------- scripts/build.sh macos Note that the macOS package doesn't include the runtime dependencies by default, those are expected to be installed via Homebrew: brew install gtk+3 libao mpg123 Windows Packaging ----------------- scripts/build.sh windows Snap Packaging -------------- ln -s scripts/snap . snapcraft Flatpack Packaging ------------------ sh scripts/flatpak/package.sh wavbreaker-0.13/data/000077500000000000000000000000001356554132000145035ustar00rootroot00000000000000wavbreaker-0.13/data/Info.plist.in000066400000000000000000000017651356554132000170710ustar00rootroot00000000000000 CFBundleDevelopmentRegion English CFBundleExecutable wavbreaker CFBundleIconFile wavbreaker CFBundleGetInfoString Copyright 2019 Thomas Perl CFBundleIdentifier net.sourceforge.wavbreaker CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleShortVersionString @VERSION@ CFBundleVersion @VERSION@ NSHumanReadableCopyright Copyright 2019 Thomas Perl NSPrincipalClass NSApplication NSHighResolutionCapable LSMinimumSystemVersion 10.7 wavbreaker-0.13/data/net.sourceforge.wavbreaker.desktop000066400000000000000000000004021356554132000233320ustar00rootroot00000000000000[Desktop Entry] Name=wavbreaker Comment=Split .wav files into multiple chunks Comment[de]=Teilen Sie .wav-Dateien in mehrere Teile Exec=wavbreaker Icon=net.sourceforge.wavbreaker Type=Application Categories=Application;AudioVideo;Audio; MimeType=audio/x-wav wavbreaker-0.13/data/net.sourceforge.wavbreaker.svg000066400000000000000000001731471356554132000225010ustar00rootroot00000000000000 image/svg+xml wavbreaker-0.13/data/screenshot.png000066400000000000000000006406301356554132000173770ustar00rootroot00000000000000‰PNG  IHDR3Ál†ÿ DiCCPiccH‰•—XSW€Ï™$¬@d„½Dd„°"ÈD%$„CBPqSJ¬[DA­hUÄb«:Që¢(në(JQ©ÔâÀ…Ê2@kÿñü‡çÜûÞï|ç[œ{szµ|™,Õ @Z$Oˆ eMIKg‘ºü€Üø…ŒŸÀðýïíå5€¨î—ÝT¶þ9þ_›P¤€ÄCÎ*/ÈäEÙPn;«H¦â ÈFr d™Šs4\¦â, W«u’¸÷@¦ñùòt[ œU,Èvto@v— %Rôȃb¾rä13U õ€SÖ'vrþf3kÄ&ŸŸ3š\Ô&QÈòùsþÏrüïV¯öá;M,JPå ëv#of´Šiû¤Y±q !¿–ÕúQªX•¬ÑGÍ .¬`Bvòâ!›CŽæÇÆhåYÙ’d¸BÐÙ’"^’vî‘"3!n˜³å\Žvn#_®ö«Ò?©ÌKæhíß‹xÃö_”ˆ“R!SÀ¨Å’”XȺy‰Ñ̦DÌÖ‘+TñÛAf‹¤‘¡ûXF¶<"A«/+P ç‹•‹%¼X-W‰“¢4õÁv øêøM 7‰¤œäa;"Å”˜á\„¢°pMîX‡Hš¬Í»++ MÐÎí—åÇkõq²(?R%·l¦(NÔÎÅ'Á©±ÇÈŠâ“4q♹ü‰ñšxðb¸ °€ö,0äIG_s|ÒŒD>ƒ nZÉðŒTõˆ^A ø’(Fæ…ªGE ÊßH5W7­-VÏÈ €hŸ•êYÒo)àw(‘üûƚ»jìŸ2”Äh%Êa»,½aMb81ŒEŒ :ãfx€ÇÀkìž8÷Žö£>á¡“pŸp•ÐE¸9CR*ÿ,–I  ÚÐfœõiƸ´é‡âÐ:´Œ3q3à†‡~8x0ôì ¥\mܪÜYÿ&Ï‘ >©¹VâNA)£(!§ÏgêºèzXQUôÓúhbÍ©*wdäsÿÜOê,„÷èÏ5±%Ø~ì4v;‹š ;е`íØa¬¡ßÕkhØ[‚:žF0€é`LÌsÃØ‹ÃÒ±lLŽ-À*°*¬kÄZáú2Ö…õaop"ÎÀY¸\ÃQx2.À ñø2|#¾ oÂOâ—ñ{x?þ@'˜\ þa !‡0‹PN¨"ì  œ‚oSá%‘Hd‰¾ðmL#æç—7÷;‰ÝĉdJr%’âH|R©œ´´‡t”t‰ÔCzMÖ![‘=Éät²”\J®"ï&!_"?$Rô)öJEH™CYAÙNi¥\ ôP©TGj 5‰šK]L­¦6ROQoSŸëèèØèøéLÖ‘è,Ò©Öù^çŒÎ=74Cš KË )iËi;iÇh7iÏétº=„žN/¢/§×ÓOÐïÒ_ë2tÇêòt…º ukt›t/é>Ñ£èÙëqô¦ë•èUéí×» ×§OÑwÐçêóõè×èÔ¿®?`À0ð0ˆ3(0Xf°Ûà¬Á#C’¡ƒa¸¡Ð°Ìp›á ÃnưepÆŒíŒSŒ#¢‘£Ï(רÒè;££~cCãñÆ)ƳkŒw11¦“ÇÌg®`îc^c¾e1Š3J4j鍯Q—F½2mb"2©0ÙkrÕä­)Ë4Ü4Ït•i³é3ÜÌÅl²Ù,³Íf§ÌúF-]1zßè_ÍQsóó¹æÛÌÛÍ,,-"-d,NXôY2-C,s-×Z±ìµbXYI¬ÖZµúƒeÌâ°òYÕ¬“¬~ksë(k¥õVëëAG›d›R›½6wl©¶lÛlÛµ¶m¶ývVv“ìæÙ5ØýjO±gÛ‹í×ÛŸ¶åàèêð•C³Ã#GGžc‰cƒãm'ºS°S¡SÓg¢3Û9Ïy“óEÔÅÛEìRãrÁuõq•¸nríCã7F:¦nÌu7šÇ­Ø­ÁíÞXæØ˜±¥c›Ç>g7.}ܪq§Ç}p÷vÏwßî~ËÃÐc¢G©G«Ç3OOgç/ºW„×B¯¯§ã]Ç‹ÆoÛá=Éû+ï6ï÷>¾>rŸFŸ^_;ßLßZßël#v<{ûŒÁ/Ôo¡ß!¿7þ>þEþûüÿ p È Øðh‚ãÑ„íºmù[»‚XA™Aßu[óƒë‚ï‡Ø†Cv„<ä8sr9{8OBÝCå¡B_qý¹ó¹Ç°°È°Š°ŽpÃðäðáw#l"r""ú#½#çF‹"DEG­ŠºÎ³à xõ¼þ‰¾çO<M‹NŒÞ}?Æ%FÓ: 4qÒšI·cíc¥±Íq Ž·&îN¼c|aüO“‰“ã'×L~à‘0/át"#qFâîÄ—I¡I+’n%;%+“ÛRôR2RêS^¥†¥®Níš2nÊü)çÓÌÒ$i-é¤ô”ôéSç®›Ú“áQžqmšã´ÙÓÎN7›ž?ýð ½üû3 ™©™»3ßñãøuü,^VmV¿€+X/x, ®öŠE«E³³Wg?Ê ÌY“Ó+W‰û$\ÉFÉÓܨÜ-¹¯òâòvæ å§æï- d”Jó¤'gZΜ=³Sæ*+—uú®+ì—GËw(Å4EK‘ܰ·+”_*ï׿ž•2kÿlƒÙÒÙís\æ,ó°$¢äÛ¹ø\ÁܶyÖóÏ»7Ÿ3ëdAÖ‚¶…¶ Ëö,Š\´k1uqÞâ_JÝKW—¾ø"õ‹Ö2‹²EeÝ_F~ÙP®[./¿þUÀW[–àK$K:–z-ݰôC…°â\¥{eUå»e‚eç¾öøºúë¡åÙË;Vø¬Ø¼’¸RºòÚªàU»V¬.YݽfÒš¦µ¬µk_¬›±îlÕøª-ë©ë•뻪cª[6ØmX¹áÝFñÆ«5¡5{kÍk—Ö¾Ú$ÜtisÈæÆ-[*·¼ýFòÍ­‘[›êꪶ·o{°=eûéoÙßÖï0ÛQ¹ãýNéή] »NÖûÖ×ï6ß½¢mP6ôîÉØsñ»°ïZÝ·îeî­ü|¯üþ2¸¶/z_Û~öþÆí¬=À8PÑ„4Íiêo7wµ¤µtœx°­5 õÀOcÚyÈúPÍaãÃ+ŽP”:Zrtà˜ìXßñœãÝm3Ún˜râÊÉÉ';NEŸ:ósÄÏ'NsN=xæÐYÿ³ϱÏ5Ÿ÷9ßÔîÝ~àï_tøt4]ð½ÐrÑïbkç„Î#—‚/¿vùç+¼+ç¯Æ^í¼–|íÆõŒë]7„7ÝÌ¿ùô×â_o-ºM¸]qGÿNÕ]ó»u¿9ÿ¶·Ë§ëð½°{í÷ïßêt?þ]ñû»ž²ôU­Ö?ò|t¨7¢÷âSÿèy,{<ØWþ§ÁŸµOœžüøWÈ_íýSú{žÊŸ=[öÜôùÎã_´ ÄÜ}YðrðUÅkÓ×»Þ°ßœ~›úöáà¬w¤wÕïß·~ˆþp{¨`hHÆ—óÕ[ v4;€g;áa5 î.ÂcÂTÍ9OÝÍÙTMà?±æ,¨n>ì  y1p²v{È4xWmÕ“Bêå5ÒµM‘í婱Eƒ'Âë¡¡çZx/Ü44ô~; ö&Ç 5çKU#³Á7Î*êh§‚ÏÛ¿„)~d©š cHRMz&€„ú€èu0ê`:˜pœºQ<bKGDÿÿÿ ½§“ pHYs%%IR$ðtIMEã  n-SzTXtRaw profile type iccX…­™k’䪮…ÿ{gÄCÃwþ8ŸlgUfuõ޳#nVÓNcB¥%çñfÇø$ÕrœþÙj%Ô³žÅή®2˪RcŽR%Æ3·¬¹Çó¬+ñx<Í?ó<ãÅž‡ÜÿÓg³«K^3Åù%Ù¿üÿnxEJ®©¤û6?ý%E¼»ÌûÁë*-rà³Æzß—Ôî 1ÕŠæÎW~$r ÎK÷ƒúÚYJ}ïoòÕÿ1^ÛûB‚enQK¿wh'VD[ñYy—Dg-È_‰Ö|úÓy”Å©µ¬ë~Ÿ¯‹áÅî [^ še¿úŸÏØŽò7‰êß%-¿Hz\êŸ>¬óýi‚üîwÅ]X¿üKóÿýóÿ¿*´š%–ç‹•V£´ïÛp+9ÌVFÙ2r|-t+3,ÊQ–ìgÂ=1ì†eå{ƒ§?ž 2äãc‡ÌCXÒãpg¸%ŠÉ•D䉸po¥°±±±Ÿ0l)*E{<ñ+UÍ_~÷·æ¶•œÓk¡GT5¼yã?ûg)è(IøÜ¸/÷ÿ7e¿v0Aá#ç¯ ÏP*{‹¾ðéµÐ–Š–pÝúRö­“tvbIs‘õôß×#FN_:ºJ1úBHºþ\(Öœc~€&Þ’¦„ý¡ƒ#|yö}‘dW.“1%b¾3 êå·N¥U¨¢çóSGRàÒ8 ‰x0‘ó}-üW¶£œƒµ­e£.»Ÿ]:zMbù³ š{ª]ñæçÂ?7Éõ5‡…¯ýÆY»#úÓÇBî ÷Žo‹Å· }Œ à¹ç/ƒßwö…ߤ½&>›<}•—D.>ž¦¯ù{7—ìçñ2—™°¼L#š7©ètœNWš— «=%Õ06Á܂ĂÒHSèH:GDÔYLЉ»‰ì…«Í3ãòcäÔq=sndì "Óp‘ŒT¹ÓVË´;gÑ0óõî°ð¾…õ(ñÏU7(;Ç[DGk-âRÏÍù7^¾†Wotµ‡Ãñ>÷2×î\<éc&Î_Y‰­Aÿ¬‡Ï Dòõ/ÈGgÍBèhË4„Õ8\ ÄUˆ’C,{ Ñh ”>ÓAàó…]¨ñZǧ-™Ð„xÔŽAJÒì|‹=‡´Ÿ¥œZŒÇ œÊ£Í_5ÊÑPŠ…Òv(#"(}»‡ 4T Ê!Ô•è+à[G¨»†ŽèŠ#´ÖCë;´Éw&^Ñ´Œ œT®;§ÃÐcÍôŠŽº®€o„ŽB<Œ4Âà˜ƒ’ŒÙƒ#.,s­#ú1³`èwZSXhVÇ0 ˜:L[¡2vXèd©„…C­¥acV€?†Mÿ;ìÕ㥎HäÁšˆ 4;L¶¬F VdV¤|”¨16¾öãœäœÁ­V1©Äd‘œæ`¹£ÈŒR-JQf÷芙Á¹ÐÈÜ™Š>o28 “Ý£¿ë(°‘XL7ÐDc­D Ôid·³áB­#ÈØ7 œEQ|T4!x0å#RnÇ®8Þ€HŒ#`Yã` Ú,i´²¢± Í fZœøä¬%N6ž ¡Ü¸Ä"‚á52‘å=n qs”½ÎKV¾NôÎAàÉ‚ùPQ³1EL.\,)Eà¾@|fJ€sª;ÁÌRÂd‚¬âå«®$³%|?eð97Êl‹GÊ{&ES*Êï+ˆ“¿©ž4ÔR5µMÏÎ-5k |ÙHÙHßz¤Î2½Jâ¨d–81e>nÙ{«aК TÉ8’­”&&Z~JµNâ‰þŽð<Ò"E$ØÇé ר+’“\%S¿ÀÕâ……ˆî†—.ä!S!z…Ö…°UE1vñY©¤°Neµ4HeTï€ržKJôWO°Ã>:)hGj¸Ýyl²4B K x!:í*0ìR¥³‚ØM®w6,<šøŒ*†Õ(ªp`é2cL“ Xe ®pçJ!gðlOOôv `é R!p Ì#ã9VâTÖ2f$±öìüÐßzHÛXye-çÊAhV ™µtÍÞŒ2Ž\ %Òxn¸`«37YA- ÞyÆ«¹3­wÚÎy µ¡´Åš‰ˆÙD¢‰¸³¶Ô6 ¯‚Ý©nà šö‰Sƒõ£o% ª1ÄvÕ‰‡‘…”¼§«/¼erС{÷† ¿¤U©¤Ö¼Ó´P¾Ð*L)DaN¶ž;{AUP@Çgð²Õ‘êè-ÇÞL:Ë…ÌXï$}2J„ÙXJF·n0Á)prù"w,Ò¾û/ù›à›¡]}@CF˜$,!ãHŸÐ}_œ8U"9¤‘[‡Ÿ!wÕ°átm ¡­Çh“r†´ªL¥G™•_ÜÏÂ0NxÆ„ÚBEq0m“ùɤ{C*¡’ç²Ta`|Þd=R@’&µ´¸µ,ƒ“5‰k¤5#6 $øGšÖ†t™½ô€¡4CZØÅXÉ8ˆ‘± <#q ®Õ6òSÍÌs@Û’qhhÚ“jé˜Àý$ß GE€HÖÌmå<ËÅY=ÌVH‹ ß,b쎹fßÝC~Ï| _‡Á‚µÂmByæ†ìNeCº¤Ö†0Rîü&“Ææ@È´À®EY²(”ƒÜ6—ÿ.^,€” ÇÂ÷'öTû4—¾Öï]ÓßûRb×µå<Ö6ˆt¦ XyøBØ.ƒJ‚n i „¼Zƒ½síRæ.n4ˆfcLÃé :1P7в;T~Ôº±'ÒРîIŒ,{M# Û½©»ü—Àðö:!½^iø¯3×›† v]fÖû•Åý'ÅÍøøÉðû^ïLŽï×ÿ©ÿõÓãß×Ò%Y6öÊózb÷K]Ï7Oÿùôç—Dù~uAMé—ëÇ"Kï¯q¥×ó+DÞ͉¥n¥Ôq½þÙÓYøäuýù=d^:Ä.áõ+éçÑc@T¿~¦$ÚìùAè?ÇÚsgç5D—ë€IDATxÚì½wœÇu.úUwOžÝÙ¼È@‰`)*“"­-K²-Çw®Ós¸òõ•ƒtîõ³L%*0A2EФHJ b)$‘A€6ÌÆÉ±»êýQÝ=Õ=Ý3³  >ü3Ó]}ΩêªSçÔ©HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHœu³-€Ì³„„„„„„„„„Ĭmæ Ű_(rHHHHHHHHHHH´†³î8-'B:/çæÝ¹™§¢óéÜHGJBBBBBBBBâ|Å|:­ðšSyæÒ°'Ó¸' ‰… 6ÅëÍîMsá}Ÿ HÇHBBBBBBBBâ|ÇlÏFjÕyñûlô}FòÎĸoÅ‘!hìÀ´êÔÀ‡6›Bä3 ‰ S±‘-»hmª™—Ó¦pϋϴlum– «™ÃBšÜó¢Ÿßs?gÃÏIñúÞˆ6i!]SL×Ah6…ÌËqÿ¡Á5¯ÏÙ’]BBBBBBBBBB‰f?g†5¸æwß‹^#|1‡ Gf&@ktf$$$$$$$$$$fú7sd¦óçE×O_LušÙt¥Éï™85³‡é:1Ôãw#õSΦ4ýl¦kf92ŠÇw¿Ï©84îï3G+‹ü91ÄõhìØÌxíÌTœ™FÛ'û92J ß›95€dF:53C«‹ýýœÅü.FZ¨ðI…4~¼§™Nd¦Ù´2·ÃâõgÝW…?¯h àíÔLÒù‘8ß1Ó]ÂíRF…OCø³ìxˉ± ‹þ”£4­:3Í""ÍÕõ; mÙ²eý7nèSˆf€Â#Œ1…g‡0fósåÕä`>‚y½ ‰ón{¸©LsÛI‡„Yi!”Â@)£¥C‡œ9s&  ŠúV"Ü s²køÛ3ÝÀ/2ãåÄXßÛ6nܸö÷ÿ÷Þ|õ®]W÷÷÷­U5`JÛ$rš^!Ž‹Ä‘Ò¯4ˆ-wúUŒfôˆIGò—ü%É_ò—ü%É_ò—üçš?Ÿ"¦ Ì›^í”&01 Ô¨Ž$GŽ?óì³Ïüë¿þÛ“:îÔ4ZëN…kÄM³®š ©§âÀx;0ÖT²ÎÏ|æÓWýÉÿñgW,_~™nèÁj¹ J °ù›ø×ï´³™Nò—ü%É_ò—ü%É_ò—ü2ÿ)€EU ¡jZåÔéÓ/|å«_ýÞ-·ÜºÀ$jÓϨði}gÂo¿õ8J>Ý Ü×½¦™¹™¶OúÓWýÍ—¾ôßímg3)†áÉ‚˜/ˆÙSçܼUB„´~¢2_>Œ1Ïë’¿ä/ùKþ’¿ä/ùKþ’¿ä/ù7à_­ \*BUÕà’Å‹®þ›/}©ƒ1àÖ[o} ÝŽ‹×Ô2qq`ãÆ ÿùŸ¾úÛÝ]]— yPê\ûCá…è#71fÍBIV:¯Hì»õ<æž MüßÛ¹ŸÉ_ò—ü%É_ò—üçš?ñ1`§‹s-ÿ’ÿÙáÏCµZA4íݲ咮'žxâàØØø¸‹0s}Ö‘Á40UgÆýçåÈxýuþÍ—¾ô¾+.»ì—Ê¥¢Ê¦9§Œ1&x‹Ú¬@“ªOÄy³8ûxÄ‚¼öyQBBBBBBâ€evyÙBªº+ón?Iœó0týmmíÉxð€’ORÖäwËh6ÍŒ4¹çå܈NŽ @[¶té¢Ë.Û¹K׫A?G†1ÆذFÍÌúªù4>OÿL…( i¹ÁZr2JÁX3uà'œåíÇ­Ù”SBBBBBBâüÇ”íûÃ+e#û‰æK»D¢*¥¢`ÙÊÕÃ0 ŒÑÌðkŠBÐÞÙ‰H4Š3oœ@¥TB(qäÊ¡@ìɱ®Z(–+q×bÞfõQ'áÙ¥i;|Lò—ü%É_ò—ü%ÿùâ,<»¤\B(\³KÎëò—ü[âo1tÝZ;/ú¦™µ‰qc:Î q}o¶)€B)S«í^f92†a@¯VÑ¿x)‚¡ CŸ†8­À@ …ÐÕÝ‹äÐ #UUkïš1PÀ®WÑ·h T-€jµ2GrúƒR 5@gwF†0‚€ªò)gf^êVæ•·ÎÍ­sŵ¬>½‹†U‰E^’¿ä/ùKþ’¿ä/ùÏ-¶Pí’@DUaîû{Þ–¿äßœ?¿NA)«ó àïȈ"OÉ¡™idFüîåШf é(s{æp4Jça(Á”2„£±šLªjËÉ{éP8ê±îgÞä4 „ÌÈ‘A)Um^é\÷ZA³ZÄ\i­k’ÿ¹ÏŸ´þ|οä/ùKþ’ÿBç.Ù%s‘1­X&â5Éað7í˰"2^~„ïs™!>ßÅßn'†ˆŸŒ2Ååìñ‘3ZC”iÉ>‹`¦ 5ÔYa3.'ƒ3’Æå%^¡oµ¡é •úo½#+*oË"lC§ðÞ=ËÎw ¯÷m¥oòN¼ÊÑ=²k§S[ÿˆe.¶/G]7óÝPN«.ùèì©–¿ß5Çæ<â{1eg”Î ÿ…j—Àª÷3X7³ûÉ¿õk„×Âj‘‚ú¥(nGF„è4u93^ÓÉÐâ§Ë¹aÄ¡B¬ ÏÜìΖCãläŽNHøm]vt¦^…»ãô¾Ü´³sß¶:.³·œvg)1=B02:Š×O¼åË–bé’ÅÓ2šóÆÇ'ðúÉ“Xºx1–,^4«-ƒRŠ^zU]Ç;/E±X¾W_ÃÀàEÁšÕ+±yãDÂaŒOLàðÑãX¼¨+W,ŸÝ|˜˜˜Äácǰ¸¿«V,Ÿs @A¥\Áèø8ò…º»:ÑÕÑawþ•j£ccÈŠèéêBgGÂî˜ !Ðu§N¾X4оÞÞ‘‚r¹ŒÁá$ …úûzÑÝÕå›çjµŠ‘Ñ1ä ôtw£³³ÃÖ~€n8áâáE‡Ëê̇§<½½èîö–Ç›æóïõ\g‡ƒn+yÁC¹\†B‚Á &&&pøØq,îo\)¥O¥¡ëµ)Ëš¦¢³££æt0†‘Ñ1ŠEtwu¢-÷ïÀC*F¹\?…§½­ º¡ãàá#6?…(hooò¥Khk›“úL¤Ói:r U½ŠEýýX³j%EÁ©38uú UÁº5«ÑÛÝ=-!¨T*ÎúÕÙ˜fk¥R­kCÞ©o9 =GÔÙ·ëI,оžZý*W*žõÙª{#cc(ä‹èévÖ=Ý0066ޱ‰Itu&Ðß×UQæì½”J% Œ¢R© »« ]ÐuϽðÂá.ݺ¥æ”MŒ-X»Är§ïÊHœO0k¨—óÒŠ!V¥¦NÍL¦™YŸ¦™„1fK8Go˜øcŠê¥6úæl6Ö‚ýéyý7bËiM•¶0Hãˆöˆ£Ž-K)ŒFÙ2Y£ ñôy^ŸòŠ‹NݰÔBàOœå ÔFå`±#Ž,÷­ø¼Mš(Š‚WÂM7Ÿüȇ°bù2†áår¶AqÄ.>VþÝ÷QpðÈü_ÿ6>òÁ÷㣿ô~>ÀyD-ŸNÙ…üÛe+ÖYÎëðñ×qÓÍßÃ;ßúlÞ¸ßøî-Øó‹my5UÅ»Þù6|æãÅñ“oàÿüç7pãõïÀgW.cyüY' ‹ñXÆ c DQpìÄ Nÿºw`ÕŠå £&v9Š÷šþÏYräòyì¾û‡øù³{P.WÐÓÝ…üÒûpíÕ»P®TpçîÅcOþ•J==ÝøåO|—íØsß|ì{õ5üç·¾ƒk®º¿ò©CU¤3ܺûn<ûü Ðu}½=øåO|;wl¯ã_,•qçðÐõ:Šk(”€ W(xæãÍWïB:›m"wûk*›Wþ‰wž>kòk˜'ŸöOÁÄä$¾{Ûn,[º~ÿ{qüÄø?_sÖCwû' A:“ÁWþõÿ`hx@Ų%Kðçô{èH$@œ¿þÇMï|êã¸îmoAi½àFôÍ·ÜŽ_ÞgîÔÄ# !øÌÇ?ŠåË–âkßüòù<U£¼^¯_³ŸûÌ'°nÍ[àÖ5uúÊ£^…àôÀ þã›7#›Íâ²Kwà~ç7 ñà#?Ńü‘p¿ýëŸG_o/˜}µTÛ»]šõ¢Q;)‹¸ÃóÞU D™r9~êcÁõo{ Ê•Š³ž|úãP‰ûºlÇv¡î=…J¥b×½Ëvl‡®ëxà‘Ÿâ¾‚l.x,†½ÿ=x×;ÞÆ[¡þýd]o¬_aë¿t6‹ïß~'ž{á%膎¾ž|ò£Â;/ʼn7ÞÀÏŸÞƒ?þýßÅEk×8ÞAë0k„ÐýM×.©i“™£Î.ÊÊÉéB°?$7Óþ÷ô <þ,S®žÓufÜ þ&æÎõð.ãVËå/êÊZUUtt$ iÚôFÍ­€ãŽQÌŽD–üBÙÛm˜+¼l¾ "—Ï×¾çr ˆÅ¢ËÀ҉|ÄDÄë!«ÒkøÄƒ¾Ç5—’vÞóÊ¿ŸÐóÍŸÀ0 L¦R` èîêD¥RA:“E4A<C&“E±TFg"ÊÑ+БH ·§„L¦R0 ŠÎŽ …2ÙÚÛÚ`Êå2Ê• ’Éd²Yôöt£­-Žb±„L6‹h4Šb‘xÛ×ÛƒJ¥‚á䊥’=jmM}(•JG¡P@g"žžn¨ŠC7P,• Wu€1¤³Y”Ë3QT*ÕÍî.tšÑ…R©^†Þžn»¨Ê• zä§ ”âM»®Äk‡ã™ç~m—lÆ{o¸ù|»x/þÙã¸ò²ü ¨Jº®ƒ€ R­`89Šb©(ðåv¹ZErdÅ¢S¦B©„l–¿ƒl6‡b¹„¾Þ^$ÚÚ@ ŠrÙ¤OÊbYY4Ì:Q,18œD±XBwW'úz{ìmÜ ö½"º»ºj÷˜YAŸêñü/^Äý?yo¸kV¯ÂÏžü9n»ëذ~=Î âÇ?ykV®Àæ‹7âÁ‡Š{þë>l\¿cãã¸ûÞûðÊk16>ŽR¹lW½§žÝƒ‡ö8vlÝ‚õk×àÁG~Š;îù/¬[»íí`fý'„àÕ9U+°y“Àã¢õsó(Õ·ÓôÏÇ:¼´ï—ö®¸tzº»ìjT*•‘Íñr(–J(Šèïë!É‘Q¨ª‚E}}Ð4 ES¿F"är9K¦.koóϿ€G;·oÇ’Å‹ðà#?Å=÷ÞK.Þ„7íº ?}üIüäÑŸaÕŠåÐ4mšýl”iÚ%^±V÷ÅÕ¶à“N»D¼oû2Šý!ù‹üY­ý‹ÓË913ÂLœ/AÜßysÌ*󊃴̔är9üýWÿ /ïÝWG/‰àcú>ôKïG0lÑ¡G˜‹&êüæîCÝÓáÍåóø‡úg¨ŠŠßþâ¯ãÿþçMP¿ý¿Žÿûµ› ‚?ý£?@,sìá_O˜·ÒñÉ"s¥iN¿–1§ŸÔìÚÙàO€b©„¯}ë;ßÿÑïáàá£øÞí»qõ•WàSû0n¾õ=þ:>ÿ™OâçÏìÁK{÷ƒ2Šh$‚w_ÿN\÷¶·â–ÝwãÕñ›¿ú9\~é<øÈOqßC㳟ü˜9ª¨à™=ÏãgOüÙlë֮Ư}öÓNâÛß¿ K/B29Šk¯¹ ï»ázÜv×ðôsÏ£Z­¢»³ ûÐð¦]W"•Jãæ[oÇÞý¯:døÀ{n´GM…àØ‰“øÚ7oF©\Ư}öÓX³j%§¹çyTõÍ7_sö¾ò*n¾åv,Y´É‘Q¼éê+ñé}„Î* ††“xyÿ+Ø´aõ÷áÕƒ¡ë:â±–,êGGg‰vœrÕJ7\÷¼iו8=0ˆW^=€¡dÁ@ñX +—/C*¶_U×qìõ“Ð4 ï÷»°}ë%Æó/¾ŒÓgй9a·àÅã&3ƒx嵿Ž7NÁ׿ó=ôtw#›Íb|bK/Â?ÿYL¦ÒŽú5l¶“áä&¼êÞÞýHŽŽbé’E°|Qÿ×Ê‘ø£™åxý;°}Ë%8=0èªû¼}¨µ¯-Îöuø¨³Îž93ˆýxÝ{õÀA‹E¼íÚk°iã¬_·±hñxÌž¥*/ïÛ›o½=ÝÝH¥ÓÈærؾå¼¼ÿƒ|äïÃ׿/¾¼ß½}7úzz0"è²Ï擈„ÃxË5×àCï"‘0žá%d³9T+U,YÔuk×àŽ¼ —/]boå4ÕþÏm¡LÉ.©¥†ýtKý¶hÜ Ò± Ìþü Öì ›Œ‚ÆþÂŒ›©NÞ$ ®7™zæÝ[uhøPŠ¢ _(àå½û02:j.`6#ó”áôé3øÚ7¾‰;ïù*•VOÄu¿6æq°œ2ëºøOt„ÄçE…¢ð-”5Mƒªi PU~]Lë1sÂÉÅ˱v•$ó¡ãN+¾0æó‡÷"0†H8ŒÞînœÂë'ßÀ‰7N!92Š#ÇŽctl ‡ŽE$ÆÈÈ(öî[6oÂÞ}# …"|ä§(WÊX½r’#£8pè0r¹öî†a`íªUœc˜˜LáÒm[±vÍ*¼´w?îèäryŒOà•×¢£#K—âɧŸÅCþ kV®Äûn| Ån¹ã. 'GpðÈì{åµ:Ré´Y§ ‡‡qó÷oçÏàú·¿›7mÄÍUNšƒCITªU.ÃèèhÇŠeKmåDÁÑã¯#•Î`åò¥ƒX·z5–,^„'ž~þ?¿ŒøçÃkcÓ†‹°l釓ýs‘ï»M¾»ïÂàð0~þìsõùÜ}‡“¨TùÜûS§ÏàòKw`ÝšÕxá彸Q­Tí6êIÿŽ»0”Á {÷ቧŸÁº5«ð‘_z?ÚÚÚðôžç‘ÉæðÂK{]÷âxzÏóHe2¨T*( ( (•J¸áïÀßé/±mËfœ|ãN ‰"b2•F @gGšª¢»³•j“©V­XŽßøügñžw]‡@ à˜®©*ªÕ*NŸ@rt ÙlºÎŸ+[ü‹E L¦óøM«K*—ËB>Êõù83€h$‚ŽDªÂå9sf#ccÈæjòXp÷º®#žZþ­çÜyêŸ[¹¿ù…Ïâ=78óø´Æ‡påå; ±dñ"\~é4­®“­kÿ„`bbù|÷Ü{?þ×Wþýw_Áƒ? J ¤3ÜûㇰaÝZ{êœ=ðÓ3„¨šŠáä~ôㇰxQ?Þ}ý; j21~Ô€¡èH´céâE(–J˜H¥pð°ÐÎßs# …|䧨TªXµ|9‡‡ñÚ¡ÃÈåóØÿêk ”bíê•øÅ‹/㉧ŸÁZzÍ7h–-YUÕpòÓ8yê cX¹œOÃ#Š‚—_ywÿ×}h‹Çðñý.Þxž|úY<øð£( Ÿ˜À™A\yÙNlܰÁ3Ï=w]÷vüýßü%¶m¹Xh'´µµy×½h‰öv{ÐÒKÿ+b9>`–ãuï„аrù2gÝw9BVû±Û—ŽÑ±1¤ÒGÝëìì°×ó$GF¡:îýñƒø«¿ý;|ýæïáÄÉ7쨈UÿJ•2FÇÆ19™Âå—î@4ÁãO=ƒ‰Ô$Þ|ÍUÈd³øÉOC.—GÙ\Gô†K—ýèÁŸàŠ;ð»¿ñ«HŽŒàßoúÆ&&pùΈÇc‡BX¹l&S)ý„c3„©öpH)Ù% –-EìÍ"¬?÷5Ï6æÅ¥îe{Ûtç»ý!ùûñgͦ”5ò+ZÆtÏ™™ŠwE˜×ÔÌáÆÓä²Ù …4M5øÐOOw7þ퟾ŠÞÞ^Àèè(~ÿ¿ÿ ’##øÆ·¿øØ‡?ÔB„¦öZ­ÑQÎzÙ™×£Vní$±X ñ§ MUð¿ú@wwþß?ùc AÁ0hî2»½íz×°UL-}ý*óH±ø4 /ZG{‡ÙA,êïG6›ÃCGNgpÙŽíØ¶e3rùoŸ1\ºm+~ç‹_@[<.ŒÄ3ŒŽƒRŠö¶6PF±fõ*ü·ßøu<ù̳8|ôŽ;Ž—÷îÇ£O<‰ßû_‡¢ð‘‚J¥‚ƒGŽzò}õÀ!vÜ#5™Ž‡B¸L×^}¾ø¹_ÆÑ×_Çñ'qìøëX·zá Šýè=~Ü^;pâSˆÅbØvÉŸäâMf>˜ëÞfl¹xBÁ î¸ç‡8vü`ËæMøàûÞƒx<Š—öîÇ÷î¸##£øÐÞ‹%‹¡R­Úk£@E£zU· ZEƃªiرm+ž~îyÜzç=øñÃbll QP,–°ûÿ…#G6mXR©¢X<EmÂ|1ÿ?¼ÇŽŸ°ÕÊG,Š÷íÇ÷ï¸ËÎǪ˱cÛ<½ç9‡<„(öV®îöCÀ£VUsª_Ëù_p¯»žSÅ<@UÔº¿üt ±sû6ÜõÃ{Ñßׇ۶ॽû&™gûg ¡Pë׮ź5«ÑÕÙÿºÿAÜó£cËæ‹±ÿµ8uf¿÷[¿ŽSgÀC¥Z±óÝPQ†§ö<‡¡ä¾ø¹_F_oß-Ì+­P–ÀšU+kí|DhçÕ*¶o½‰ûÛqððQlÝ|1NÀæM°¨¿¯< BN¾q q³^[uþ C¢½ ŒR¼~â$&&'ÅÐ×Ûv€R¯¾v•Jï½ázÜxý;ðú‰-8täö½z½==.»t;>óñ`Ï /aïþW‘5§žÅ"¼´ÏÙN–-YŒ` €h$ìyy¬=r–#ÅÓîr¤Ì¬7J­~qÏš¦âÒm[êÚߌÂpÕ=>Íœ1†J¥Šjµ ]7°hß áÑÇžÄ?¼֯ÚÕ+9_Vsg/ß¹Ÿûô'/ä1:>Žßùlݲû_;ˆl.‡ª^5—3 ºìxM—U«U´ÅãÈds¦ž50œA¡XD(D{;Ÿ¦<61aNÍjîþÁ{d³¹]B ŠñTÊ^#æ5| ª¢ £³ª¢LÃ.ñ’Ù£½N;ÿ ×þ°ŠÈ±ÓêÞÞ—@Ì~þkëi=.ƒ ~ÍétøÛ¶°—ÏЊ1¥lÍÖš?aœ[#¶#ÓÌkà•"›Ëáï¾òU¼¼o?õ÷áÿð÷mÖÕÙ‰Þn¾&À:¥l6‹o|û;PU ýСª‚PN9ÄÊVµt…Kr·þ`Nº¡@DQ0::Šÿñ·_üÝßü5z{{Àhý®D [¯C„îœÕä¬uÄHKZÉ÷V¹Î8ûü)cX·f5ímxõ¬\sÕxqï>üü™=¸QyòÔi<ðÈOÐ4¬^¹mñ8ªUŒQ,^Ô‹7^„ׯÏìA¹\ÆÎ[ ‡í#AUUÄcQT«UPÊb._¶ÈŠ(•ÊPcã(‹èëéÁ¢¾>´Åc8þúÉztçÁ±¥jNž:äÈ(úz{P*•Ûisý:6>§÷<ÞžnìØºÅο¨ÏB ¨ &&SF$FwW޽~³3ưtÉ\´n-ŽŸ8‰'Ÿ~år;¶mE0ÀÎÛ<ëüò%K@Ì C3÷ü‹/!‹aÕŠåˆE£v›-–JÐ4Õtzb±B¡ J¥2 s›àŽöv(ªŠ`@ƒªò¾tÝÀOýœ×/¡躎ŸyÔ=yó<‚ññq=¦›1â(Ï­™ý ìÛÿ †“I¨ªbGf¾[A ›c¯¹í'c”/>ýÁpÝÛ߆žžî)xÂVµå¬EOœjÃiÔQb ¥0 ƒÃÃx§Ë™zÅÏ|œ]MÜÚßkŸDQ‡˜âÂ.·¶ó£ñZ°éÔ½°³Ë Ý]X½r%~ñÒËèìHàÒm[päØ18tK-ŠeËpϽ÷!•Jã7¿ð+X¿v þéß¿f:3@8Â¥Û·â…—÷âɧžAGG—lÚä¨?Á©38xø0Ò™ V­\ŽP8€A5§zº»@𦫮ÄÎí[ñâ¾ýGG"ûzØS ”R¼íÚk …pÿCã‡Åç>ý ôtwÛ4/ݾ/íÛѱqôöô ÿÆ)€ª˜—¹&R'ÚÛù¢übŠBpàà!|û–ÛqíÕWáSýº;;ÑÝÕ …‚{w¶`0`ò%xÓUW`çömv^–-YŒî.!Ÿ;¶âŽ–LÝHeҼ̎ð2{õÀA¤3Y¬Z±Á _˜í ¿Ë¤oÒèîîÄËû^ÁÄÄ$>ü÷" ⎻ˆ#Ç_Ç©ÓgËç÷îù/sZá8~õ³Ÿ¶·ƒ ‡C8~â$nÝ}7*•*>ü÷bãEë184ŒEý}X²xt]Ç¡£ÇÐßׇoœB[<ŽÞžnß_¬Eý¯¼v—nߊåK—âÿÜô ´·µaõª•ضe3*•ªÍÿÑÇŸDµªãÐÎã¤Í£‡×/W#gŒ! áWùS¶£™ù¸³>ý}½8|ô^yí CžD[›¹8N}fÖ UU§œ>ÅnÉ"þÜá£Ç°¨î9fסú¦*ÖMï™r¹Â7²hºØ™;þ>üS¼ðò^|ìCÀŠeË0‘J! "‘hÇ–‹/F(!Åb „„#!ƒåRûIîô áÍW_…®ÎPÆj»Ì ›Ëáð±ã¨TªøéObh8‰]W\Žî®Nü×ôÑ5 Ñh—nÛ‚ý¯ÀO?‹D¢—lÚàػÿÕúz}üuœD8hé«V,ÇÃ?} ããxëµ× PäMÃâEý¨TªØûÊkX¿v-ö½ò&'Sؾõ„C!‡n°ª…¢>z ·Þy*•J]ý:yê´gÝëíéF,s–£ ¿ QðºXŽu›ÔY@Vû:p ®>/_¶Ã##¼îëßä`éâÅ ÔÀÉS§°rù2¤Ó´ÚÛâ838„½û_Áê•+`7;˜Æ¸kw®º® ÀÃGpê̼zàÒ™,6oZŠç^x{^x¿õ«ŸÇê•Ë¡W«|j½II !hoksöÝ-÷‚MLÏ.1÷T27ˆµCªM¾»ÄKv<žÇöQRé þîŸþ““ŽdVqwuvâ/þû «³CÐùó“BÒé þ×Wÿ üʧ>Ž•ËùV÷gñÝ[wclbùÇ€®®NÔ5Ï)ñ·¿ê¦™Á㻛˔1Ó ü~ׯ©lê¹4Ž*Ys:&tuvâ_¿ú0ð)g¿÷GŒB±ØÂHˆ‡7éª Î\8G'ë^´¢{ÅRz4wñͶ‹»m4(˺U€"©Fï€5¾Ô²xvù3ÆD°aýZ<óü/H$°bù2,Y¼{_y kV¯DOwº:;A)ÅCþ <öFFG¡iä y00lÞ¸xãÔi\sÕèëé¶#iŒ1>z ó÷_E&—E@Óðæ«w>¢I ªšºýîà¡G†á‘$.Z·7^ÿtuyÉ !Ÿ/Øsðõ÷áš«®ÀKûöãgOþ—íØŽ7íºÊƒæZ¼ÿÆwqçÞ0ìiÅòãóé—! a89‚ª9ÍeÝšÕxòég±ÿÕPU“©4V._†«.Û‰ñÉI躅(¸æªxá彸ýîâ¡G³ù¾÷ÆëqÍUW˜÷\2½û]¶ôÊkñ×_þds94 oÚu%"‘0ªºî¤×ñÐ#ý®c Ï>ÿ>Š%‹û1:6Ž%‹aÙÒÅ8pèˆóÞè–,^„%‹!‹ñ‘js ÒÞW^ÅÈèîùÑý¸çÞû ñ;_üU\ºm+Yþ~ôÀCxòég1:6ޝ{»éhPsºœaæ¨3éOíyO>»ímmÇÞ÷ôõö@SUÀ´ïˆB°cë¬X¾ ?zð!<ùŒÅãß:xpúmñ¸Ý¦üóñ»_üU´žÚóž|öY‡<½=ÝðõÊÃö-—pÙ¦’ßçÞa;hÄl—bž¬²óêF¸ÃÇðêÁƒ¸ë¿îú5«`PjOIò„ h–/]‚ûzÿß׿ö¶6 Œào¹kV­ÄEëÖâ]ômPU÷?ô0޽~×îº ›7m¢2Ä-‚Á!”Êe¬X¾ Á`÷)Ö!ž”áÀ¡ÃøòWÿ†a ªëX³j%>ðžŸóãÕÎ |s-›/F¢½ ÃÉ\uùNôöôØ„Zõz±P¯÷÷c||‚¯Ñ1 .S(ˆJ¥‚•Ë—áÀ¡Ã¶¸êòxzÏóxèÑŸaïþW0‘J# ãoy3 ʧiYïÒ~GÅËû_ÁÈè¨g;9züuGÝ»ûÞûñÛ¿ö\yÙ¥&=süR0nàSŽ–‚gõÄœnûìóxògûêíî¶K6{´§·£·§ ;wlÓO?‹{î½?õ4‡qÅÎX³zžá%üç·¿‹÷Þp=Ö®^ Ý 6OÊ(tð·~§Ô”Ç쪅à•ñ×_þG[—½õMW#‹bÏ /â¦o‘HÉ‘Qìºâ2¬\¾ÌÜ¥1‰H$ŒË—yDgÒÿµf—00tuvàßþ÷Wy~83 !ˆ†CÞÑ_»ÄzõÑß Åþ j`|r““)twwA37 ÃÀøÄÿN —É;ù…BèèèÀž_¼€R¹Œßü¯„àë7/í݇Ë/½ÁPhÆüXª|…i;4jƒ{ÇŸ"ü©®ïÖŸ °dÉâexÿû® ƒa‹8eŒO% :ºj[¬ÖKAÏåqïý?F.—C<Ç;ßþ6<òÓŸ2оï}æ¡g܈F£ˆÇb0 ?üÑ}>øþ÷¡-kø>(5šƒ¢¨|T[ØžŽR J ´':†ÝÝ¡A)&'S|u¥Šûxðþ÷¼„™lÁ`ˆw\>oÒ}™ô$UƒªªµÓgR f?ÙÏÄcqôtwኗ⢵kÇlÇ`Ù’%X´¨ÑH¡ ŸŸ¿ëŠË±|é¬X¶‰v„C!t&X½z%Þ|õU|Z ÙP{ººpí5»Ð×ÛƒþÞ^¼÷]×a×—ñ¨ l¹xúúø4ÂÞžn¬_»@Ñh».¿ ýàû±xQ?÷÷{ȰË—-Eg"ÎŽ6oÚˆ5«V¢¯§==Ýèë鯖‹7yÒ\Ô߯P“Áœj#–S4Áþ×`tlW^¶}}=ؼiº:; GÐÝÝ…Ë/Ý}ðX»z†D{;6oÚˆ-›7aýšÕƒˆE#¸ÊäÛß׋ÞnŸ|ö÷ãø‰“xþÅ—ñ–kvaë%›ÑÛÛ÷Þp=®¾òr¨ªjÒ߀-›/¶iˆôõñ¨ÉÒ%‹ønrŠ‚Í›6âCï{7V­X¥Kcé’Åõ÷V®pŒb”¢T.cÙÒ%¸äâM¸hí¬_·Ö¯ÃÆ‹ÖcÙ’ÅX½rŸßoÃ[Þt5Þ}ý;¹3$T²D{;.Ù´ K/ôvw›-p§ãº·¾ïºî툄BŽhc ímmX³jBAÇuïD<µe%ý°— ›½¥¥’>Ö®Y…åKùÆmñ8®{Û[ð®w¾¡`¥rÙ\K ;þ(¥èèH`ÍTóÏøá‘^ÏÅ£QGçÖ.ä‰1uñ“%áy$ ,[ºkW­Dgg'6oÜ€ÎDÂ÷¹åË–bù²%¼^%Úñ¶kß„÷Þp=âñ…¯ËPDQÐÛÝ…­›/FWG‡o¹0Æ (|ÍØâþ~ìܾ‰„£]Åã1l¼h=6¬_‡‹7nÀ›®º|ß»±vÕ*B°xQ?¢‘oç;¶a×å—cù²¥X±t :‡Ãxíà!ŒŽOØÏQFízM¾ñ£^ƒ×µÍ›6`íêUˆÅbؼi#vîØ†P(„Eýý¸äâX¾t)6¬_‡h4‚`0ˆ ë×áƒï{vîØ Btv$pÉÅ›ÐßÛËëo[.Þpº»º°|Ùl¹x.Z»ë×­Á†õëpÑúµƒX¶d±yo .²ëÞ:ƒATªUT=ËQá帨;·Õ—c]ýZÔÏg[ôðöŬöõ¶·à†w¾¡Pímqï:‰¢-Ǻ5« qõ—áƒï{·b<â~ñ&,Y´]Øb–!K—,Æ%7¢­-- aýÚ5ØxÑzœ>3àÔe=\—íºâ2,]¼+–-E @¢½o¾ú*üÒ{ß®ÎL¦ÓøÁ}?Fï/™MŠaÓ´Kc(òÐõ* ]þ ó“_§Ô@0T³M¦c—´¶ùÒ̱ìBò…ùوŢøê—ÿŸøè‡ñþ÷¼×\}žzúYÀuo+b‘èYÉ(ÄÅ›.ƧÎ`ÿ«¯áø‰7ðü‹/ãÕqÉæ‹ñ»¿ùEtwv4]ÿÖ”?_k[¾÷G÷=584t€À@…OsTÌþôúk ¤…{‡Ób~Íïó{dçÎKwÝüͯÿY<OX£¥Ð«z«ÖoD ô‚$GFð…/þFFG±iãüÅŸý þá+ÿÊþùÿÞ^bP(Š‚ÑÑ1üáŸþ9àŸÿñïÑÝÝÕpšYµZÁÉ£‡ jA̽ðn8T«UèÕ2–®X@ X7 bGX(DÁØø8þâKÿøàûß‹¿ÿßÿ øó?þCüðG÷crr_þÒ_£§»Ëc¤¦>ìH@P­V1pêuh´@€/Ð#¤á‹t‹špñ®­:[ …¿µ¦ÊRúDá»áYN41G>)5ì¹ÌÄœOjÍæÛ0PfŽƒX)ŠÂ§#P^5Uµi*J‡%!œ®aæZØ‹Öã#‚n`ò§Œ‚Qæ…ÌgÒÔk4­‘}Q«Ü‰P.<ü(nÙ}7~ë×>k¯¾Ò.3kêK °wéYÛ;SjÔñà)!<öþýëßÂ/â£øØ?€Jµj.Ô¥ Ž|6¦¯p£Õ0 4þh·®æ½€yÖÕ+ë >7¬÷®(Œ2è†Á 3¢eÑQ\õŠÙt ªUnPƒÁÚûpÕb—3ë?Klþn^õܪ^ù°$å븸<ÀD*…ÿä EçnEŒbõÊ•xëµ×  òEýÓÈ­ÜÌÝÞÄüÕªGŒa²‰,o»öƒA;½5]g|b÷=ôÏçV­\‰·›ÏUuŒRsg,Ôé~1ã““-•‹ÕŽÅiH„ÀžV*ê$fÖg+"O5(/SÂu9eù|<öî{ð'ˆÇbø«?ý#ôtuùÔù€]?a–§õUA Âë¸]Lƒ´Z­BSU{Ó‰ZÛæú4­¶ëU¿¼ UB`¾›‡}ßÍÛ\å(®Å°ë·+_6ýºöÅìàC}{‚00@ì €½Ù…"äGŽkå (Îòã›ð>öáÇÇ¿ßdé²÷›ºL³ ?EQ`P†aêt?õ4nºùûøü§?Á7r±äså_¼æ®SBNË.Qˆ‚ѱ1üé_þŒŽA!Þe½Ý=øÇÿõ7èíéqEù›Û%¶ý$Äz¡Ø„ŒŒáOþêBUüÓ—ÿ'zº»ŒŽãÿü¯0|åoÿz»»ºd>ó …0<2†ü—Ç.Z?ýÃßDzÅý(—J-ñiÈŸ¹\>ýù_ûâ?¼øâKÏ(¨¨šp§Šš£cýQ8ѱñ4ä§2<@¦yÔB\–Ã1%‡‹KϺ»ºðú'èhOàÏþø•jCæZ”Rü¿òߺ¡Ã0Œ£ÎxlÍ-B‚pL #ׄt¡P±X ÿüç838ˆ\.ø÷¯}GÇÕW]‰P(è•õ z•[£†ê•®FÇÿõÕ²'Nˆów“"ƨ0½†ÍZ|§%J˜G¹Rk-–ÀŸºèÚžO‹ŽePX¹ÖnÖd0¨Ç»5t›?uæÜˆiúäÛUþ oºêJ>vGŽÃ;wðõÀ×?˜D@/>í£Ö ˜9…DÓ4G‡ÌL™ˆëžBÂázº»‡¹áEˆP¶æ2;_Ô¦á>IšR UQ¸±Ø&1y[÷¬´žõR讎X,'J¹¥©ª=@ÒèýCxNSUÀÜMɯük²‡9Õ3sj¬ýO¬÷¬ÿ¦“-ÊÓá†w¼ÝY6æÃ¡PªªÂ0`¯ü‹²9T 1BÐ4‡É\ÏYh‹™²˜­x°%‹cÛ}Æ ë:bÑnxçÛíwç ³žÀtžÄ¬Âl–sA@Л4›eœ¦5Xá¥{sÖ_/XF»ª*&ë+Èçóxâ©g ( Þó®ëÐÕÙ)lûÍœõšÙŒu³< øbÿšLÔ!#ço×VÛcŒÎÈ¡.¼#÷|ÚŒgn­rżë_‡(–£¿þgŽ| =A£öåj³ÌEVÞY­Wß?G¾)¥&ÊÙktEA8$è2ÆøNBÝ0,ý¥ªö{/W*8rô8v]¾»®¸Ì±=ùTû?o+ 5»„‘ÚÀBßȉÅ>ÿ«þ0ÌævIMk0'Îjÿoíèg|º‡çËþpS3 †ÙóÏævï|Ø_ÕJårÑÖ+”©”J¨˜"c†ü‰e÷;ýöéø-9 SuÎ,’ç(©‘b€ÝÁýÙ_þ5FÇÆì‘j¿¶¶„íîîÂ?ýÃß¡§§ÞÑæñÛ»ê7|L¼ÅâñþÛoÿJ¥2^ڻמJwôøqìØ¾ ÿÏoý&âñ¸mР™hÄçFݘ'8gÃþ! xãôiÜtó÷øÔ²‹/Ákàß¿þ üÆç«V.wœ]4=þ¤E7Ä-;2ÀìnÐÎ^×Ý{\7–Ûb¦ë:FÆF144 ¢(MÃkŒRsŠO£ùbH¼Ag£p}åJNV¯Z?ù£?ÀWÿù_ñÒÞ½€Û·áOþð÷±fÕ*zÕAÞ¯€«ÉÇla­Æê!¸XëêZƒŒzÅë ÚõNÝ<$ÿËŸ1~¸h$ {:Ð\ñ·"”áp¨Öv.ðò·ù ªØ»ÿUŒŽ¡§» •J¯Ÿ8‰K·oÅ’Å‹M=ÉÓZSfˆÐ—{Ú3ß-`\’š/lá.ŽØÖÞ‚¡\©ààá# ”bǶ­PA±TÂÞý¯"“Í6\´Ë—,ÁCG008d,é†+wîÀÒ%Kì"b”¢\­:h2FQ)VqðÐPF±cÛ–ÚJæ¹F/ï©tŒ2ôõö`ûÖKÉdñÒ¾W ë:ªÕ*Ö­Y‹Ö¯õenñý›ÅS»Fê_í\¼¾MkWW'¿lípu×Ç´?ƒw¡´¿)òg`‹ºÌ}‡'ÞîÚÛÚÌK³¡ÿ˜EIüÙ‚]§5WÊ%_GÀB eJvI]7Óòø˜m:Á—ÿé_01‘ªk÷Œ1tuuà/þˆï6Ûü=ë±oM¦Rø__ýaÉ‚ÉTÝ]B_Èf™¿;ŸÎ{|MÏwn½û^y —]ºð»¿à_þïà…—^ÂwoÛÿþß~±h´V_§Ã¿^V0í€Él3Ó,„dûëþb7ΰÙÇ™»š)¾sßÝä™5·Üîð™u— u×j§êŠ0'CóžÅÓ0 ¬YµúG€ù¿ÿÆ~ÿÿù¬]µÊ<„ËšBSO‡¹* #>²ß>Yl¬ÅçEY?H%ù/PþM·)ŸMþug?ÿ ?!CCÃÆ®+.CoOtÃÀËû^ÁÀà‚ £èééF¹\ÆØø$õ÷!—Ë¡P(¢R­ ‹!—Ï#“Í¡#‘À’EýPTÉ‘QŒŒŽ! aÙÒ%ˆF"˜L§Q(Q­VÐoC¹RFG"Á£/¦ÎÊç xiß+830ˆU+—ü7NŸA®Ç®+/G29‚ƒ‡Ž ¯§o\ukW€àä©ÓCgGt]Grd]0 ÃA“ÈŠ.>µ2"B&“Å®Ë/C¥ZÅsÛãÓƒ‡ùvÆ'ß8…“§Nc•¹ü\{ÿÖu϶xÔÿs‘Ý”òùOíÄ&ùwS­Ú%„“)üÙ_ýŒŽó‘=@Íkþáoÿ†ï²hÙ&ÍìË6o`bÍ8ÿ¦ ª¢Ö6@r•³¢¨ ûY(u±êííªi1TUE_o/º:;ø:¬F2ÍUý'|Úc._Àµ×\/~ásèíJ~ÿw~7}û»C¹Rqnü2SþŸžÙŒ/³yhf#aíu#^M ÔHð°Ý$?ø¯E¦åº=QñE9†C\Y4/Ô@*•v,Þ ‡Cø½ßým€±HgíÇTEAgGG-üØp”õŠmF™žáó’¿ä/ùOïyŒŒ¡«³ƒoPUU°}Ëf0Æpèè1K%ôôt#—+àÀ¡#èéîÂpr¯8ˆEýÜqÉfsXÔׇÃG>ªºÿÕèëíÁÄÄ$FFGqåå—!i>×ß߇5«VáÄo`Ã:>eÆš…°}Ëf{á/¥|Á~OmmP?‡$Ÿ/ ·—¯H§3H&GpÉÅ›FP,–pâäIƒëÑÕÑí[6# Øk&Âáz>b¹¤Riü°XjP¬]µ Á`‹õc¹ª¢T*!›Ë#ã‡×6Õ‰ ñýKþ’ÿLøOÑ.±@ˆâ»( !µÃD›ÊåWÓ5QäŸQ†ÎÎ|åËëšZ/&b`Fuêd ü›¥µ¦ŽþãÿúÏà60É7‡õ1†Î^~Á@̨¢l®‘ééêÀ_ýÙG¥Rm½üÅêg™ÍŠÓ⇹vf¦PÞS¥BÁ z»»qàÐ!üíßýÒ™ŒcÑs#PÃ@OOBÁüŸð/cÇ3u ƒßŸ&„ •JáOÿêKwDìӆŲŒ¡·»ÿð·_BOwwÝ.'"72ó9ˆ.z­¤eusìg¢§$É_ò7µc¨Vus{öÚ.RÖÚ:fî gÉÁÌõ”ò-—wîØ†ÃGŽbb"…ŽŽºº:‰DpøÈ1ôõôà²Û‘J§ñäÓÏÚ:3cçöm‡Bèîêä ö…NËÚ*; #_(à WËå º::pgIUUTõ*—‡Q{ý$ÚÚâèíå#¹¡`—]ºš¦ÚsØÃa“&ã#«œOùBÑQ¨5P(–0>1‰D{;ŠE>ÅíMW_‰¾ÞTʼ´ïœ:sË—.ò»Xï_ò—ü§ÃŸ uØ%€iÈvvà_¾ú»§:¡‚H8djê%ótí’™–?ƒêºî@o¿¹ÿ ˜™¨žcµ­ˆæ†sª (ª•¢ãúJ¥ÕСÅÞ$gfügÁXæÑ™as„ç<Ÿb íí |Á÷n¹ #ccèíím±"=Ý]ø•_þ4‰öž¦¢eöNEœafâx̾Æß| nÇ{Em­?§~^j²"®p²³d¿½y½‹ä£(\ôÜù'Â5Û(“ü%ÉJü̃é¢LN¦ Ts{ÝÓƒ˜L¥xÚ\ûb膰»C{{;BÁ V¯Z àØñ×Q®T°nÍjT*twwß&UåÛ43ÆÏð…B „ ì:ĢxªBP5ú»·ÏfsHŽŒ`玭<ºÌà o/þvï0Ä\Sv`N%f|mÐÒÅ‹qéö­ÈçòøÙO!•J£P,"‰àÒm[°bùRü⥽Hg2ü´jV¯³êû—ü%ÿéð·¨Wú¦v‰ …´Å¢u²Ôƒ;À\–ks»ÄÛ¡šÍògta­±Ük†æõý3Âzê ×ûY©¬V~bZ¾ã¤cvø7°ëçg!2c«Yî–éB€·¿õ-¸ü²ËP©T¦Ä-¢­-ÖZÈŒðÿ¬\Ús<ȯRŠ®ÎNüËWš~X°FAœ‹òœ‘W«þ0󢯊åžk[7âàïlÞ%É_òo…?°¸¿'OƉ“o`é’Å(•J8pè0õ÷! !É"_(`xd•jüÔyþ<¥ƒCH´·ã¢ukñòþW0<2‚P(ˆññ ”J%ŒOL€ñX “)›³aPL¦Rh‹ÇÓ™à>_ë¤* í $GF±zå '“hŸSM€á‘Q„‚At&:` 礬åXØÑÊÚ´Àz¦T.#—Ë£«³‰v 'GÏå‘ÉåÀ qäØqD#lÞ´¯3´66`b¹žï_ò—ü§Êß+û /»Ä–œÁ±EzKpˆÝÌ.!~)g%ÿ­šÆõŽÔlòŸæû'þiÏ•ú75þS‹ØÍóç̰–/z?nžf=åCeêçdס~œCüå¤a>¬¶Eá”ñ—‘uëyfMŠ’Ô’{fÓ#m#:ETOWò—ü%ÿ)ñ·¶ßxÑ:9voœ>ƒjµŠŽD­[‹b±ˆ3ƒØó‹aPÑhhùÁt¡PGŽÇpr…|­_‹x,†—÷¿Šç^x ¥rk׬F<E@ãÏ”«¼zð0.ÞxúB!gÞC ¨!h­ X½j9Æ''ðìó¿€aPlX¿ápÔ Èçóèéî6¨äFD¥Zåô7\„¾Þü0Ö`ÐpòÑ4~"á»:zW^¶«V®Àøä$ž{ñe躎U+–£««++ËðêCHg2(KX¹|9ÚÛÚà92½Àß¿ä/ùO—ÿtì/vÍØz¥ln—Ô§¹ÊÝ ìýŸ üçó™q9‚SqÜ£Sßi*BùÞeŽDÖäsôƒ´D¾w…!Î éväê¼êfÙa-^k­XüÓIþ’¿äß=BÖ­YeK–ðÃ8ÍCF5UE8µW_]×í «V,·£¾«V,C_¯} h8!oÚu%ªÕ*ßb5°rÅr{|(ä¦u†¥ ëÖ¬¶·fŒ!a×—óyÕ¦l–"Ü´a=áäxæAŸ1pš´6µƒ2†ukWÛÓͺ»:qÅ¥üW âªËw¢\®€‚H8 E!Xºxº;;¡›‡ ‡C¡úΡ÷/ùKþÓã/LðiÑ.±o{¦îW?ï§©]Ò`-óyUþ’SþóìÔÌ›3Ó¼ Z/½Ù†8/°qDåá~Ö;ƒÍòÔ@‹°zr5'ÍcqÕÅÌ3$Éÿ<åÏx8> ×4 «©˜p8€;Ä4"4­¦¶ Qìˆ-*¸3aOï2GÀñ±·döÒ#Öz˜šN".µF²";§ž~@ Ôå]¼¦ª*TM­É8å0-±p$ìÌïœëÁó¸þIþç ^é™ãff—Ôµ!âºÞª]‡Î˜›üÏ7$ÿéð÷^á=w˜×È «}]hæl925Þöyebcg.W‡y?;SÞ-]g~éj£4\ÖV‚Éît^ ÓëY?^’¿ä/ùO›?sï?Tueö°ª‹óáßLW±ùgÞùglù{†¢…ßžúŽÀšÒr^½É_òo‘½/²í’¹ËÿÙ.ɺüç3qfUaÒ(y­XÌég72cmQ'îÔàÌãi4fêg,Àñ³–Ww´Å‹» a]·×æ’ÚÚ§œõ¯Yµuk¶áèÐ9ýPä/ùKþ’¿ä/ùKþ³ËßJâ°Ÿ„]Âàg—œOå/ù·ÆŸo$Óózxš˜ª3c9_­º^Þã&B£(rG"s´¦9Š…£|+T1w¶œ@¹TD0ä>¯ÆõJ¾;ï úžÄê锋E>—†.£Û5d~‰ìK „™Ïy 7râ%É_ò—ü%É_òŸ{þæ³Ü.a È.A½ýt>–¿äßÿ·›L1=g†ø|Ÿ>˜ðg% DÁäØ(‘("ј0bàÃÖõ–ˆ›¦¥$Ò @±ÇäØ(?ÿÅUŒ–œŠ¢ ›I# !Ž4—³.ãn°%I(•ŠÈfÒö齤™–j%s=#>lúLž³NT9É_ò—ü%É_ò—ügŸÿB¶KZ.€s¸ü%ÿæü ™’/Ò .«½žëY8g¦&! Ô@åJ¯9€ž¾Åˆ·'̰[uSš¥ó¿or™4ÆF† ¨Q\ÏB jTÊ%œ9u]=ˆÆâPu^JÊ  ¹R“cд ‚¡°©4fÁÏlVߘ8ÆC¦ö¬ä/ùKþ’¿ä/ùKþ³Ì¡Ú%À”ì’s¶ü%ÿYá?‹˜GgÆ à߉&U¦PªV1pêÄY)„@0„`(E!B˜”ËjE…A a:F“C˜ï9q„‚!hÁ ˆBL¹,9ý”‡ŸcÇ<®ù=G<Ò5s%É_ò—ü%É_òŸ þ¶ý¤Û.Kµv8ø,B´K¸ý$Ìn9Ë_òoΟ[üóWçuk暇gá•_QH4ŽP8Ã0Zj~®f¯Æ‘–¨ª EQ=¢˜Ž;4j‹r¶"ÔåTT(ª ¢g8·á“­phÁ5Ÿ]É_ò—ü%É_ò—üç‚?!DQ Gã…"0èÔì§™äŒŲŸH3Gföó?µ4’ÿüóŸ*­b^œ+«^Ý…€0”0»qX‰êŠÈk⨛‘“F¡OîP;*ãéÍ€@QÀå„)§¢ÙŒê_%«¿H\¾­§wCê/ùÈ):3Ì#ýl‚/ìkp_ò—ü%É_ò—ü%ÿùãODQ@ÀÀ ÕgÒ«£é¤å“ÆùxÞ&ᬤÞ.™óüûˆ,ù/þâd¬yÀ¼83Öl(Æj¨æ7ðµ a€¹`ȹm «Ð„ËŽ­½iâÈÔ¾zzâ3¢Ö2á§4DY,ö e70b?á$l+Sëû²ù„HÇòë’5*;Wzwþ1' É_ò—ü%É_ò—ü癿iH)„Û%5;£žª±ñÚv¹ní¾ãºÛ.©ÙKâú]gŠ  ü%ÿ–ùÏ5æ520;§õA–ZTÄéŠÅÂjÿ‹o€ 7R£ç_¼î½Ó½™rÂKN§Ìœ¯È‘¿Ó%äß5<â»u¢ù_Ýmáyæ!CÓü»ùHþ’¿ä/ùKþ’¿äVù[ö“ÓŒp³åõµ?P;8\ ã´MZ4S/°ò—üëùÛÁ‰ÖIÎó³fÆÎèy8sé_˜¤î;ñ¾\+$$&hàT´”Ñar?o_•Ї߫x?OH“ü[YiÆ_(êº<4z~¶ò/ùKþ’¿ä/ùKþ’ÿYáO0×á4ö/ûh4@kÝ"0 8ÿ’ÿàŸts„yÚ€Á0tFµ‰ç':^#âÃ~÷ˆ½Öä”ü%É_ò—ü%É_ò—ü%Ézü ÃÐ]ÏÍæÅ™©V+M¢TˆÎ_ÌIBBBBBBBBBb–`m7L¦ä(\€ @>_@µZ™vóâÌ(Š‚P8‚@0<ïû KHHHHHHHHHÌ„ƒA0JQ­ê˜ÏsTÎ5B2E™9±0O»™qv2[„aÐyɘ„„„„„„„„„ÄÌÁ ‡±só6dÒi:|zU?ÛB-X¨ª‚°6¬ù;4“”RT:3çcP†@ EÕ@)ƒN©œl澡ÕüDe€Ú¾>pœ×s¶…‘°! ‰sÒ™‘8'! ‰sÒ™‘8'! ‰sÒ™¹PAä>ç6¤3s!‚R™, Ïü™H'Qb꘯ƒÅ$$$$$$Î7HgæB!гY$o» z6+#4³ FaT²“N¢D=üŠ¢‘ƒ¬7s âú”87!€$DHgæBÄ\Ff¦âWŽ^É"yøNè•,¤¹$!ÂÏa! (é9<—¼ %=·à:h¿&j]_HM¸™(@Ö0`0†¬a€z<³€²#!1¯Xhº§ä„Ò™™.櫟+>Ó¡ÛìÆ`d[t’(åi; Ññ#3d®øÌ”æ¹Óa/hæ°P³c¦3ì˜g»Q dòF]s¦Èæ èCÖã¾[žùhÞ–£âW‚@Îб{$‰#…v$‘Ñu䧦 ‰¹Ât‰Ùr@Zqг³Ð€æ T. hˆsÏ™™-#œÚßT1Û‘ ?D>3µfú|³<3†òÀ’ß¿¥ùô5EáSݾ+ʧÏÀHgZ(ËÙRX F5 €M“ñNCˆpxL9›ùg:ÍS&/¹üdõ›¤3w‰_Ge]ï/„N˜ÿÜòp‡%VWïêÓN%?V3ós9 =nÍ)z߆kNšÍËh”'×}›O: #›ó–³k@àA¦3 LQ çr ólärHÞr+ʃ<ÚâGË”…ʃƒø¯a𦛠çr òâv@üŒi?ã¼–¦œÂðÛPÎ :éRãS瀘ŸŒB¯¤¡WÒÎ4¦“`ª„@¯ä„)g^ñùô}Ó˜ÆFœÏW25Ê‹Óa2¯W³`Ìp–QSkªrÖàÕÉû:e:ІU®ÎÎv&NN«éë;|Š‚žFAÏ€2Ô‡GyZ†’ #EÉ0£“.¢–wæï ™äŠõއíà0‡úrüQÆi°ZÕ5? ²y½®9sº:tƒ!“×=•F%·Aý#;.îpÔ(€´¡cRב6tP³xEU(€œé¨ÜåˆÆ0¤ C7˜¤Í{ þÆA#£b¾ K†jµÚ4íTej”~^ògê]?]¾7MÐG³åÔ´âHø!U³ÉÝæsŠCGxÑ"üœƒ-^ŽKª<„=ÉÝ(éyûž.'è:êÁ‹yÈá­×Ýåâu­ÑïÙxÏêô=cóê\†á k}oæè4¥Œ±Ë»œ©³ëÌ0ÆŠTºælXS•¬ÔLc¤3ÐÓi$o»z&S3îÝ0Õ‰ˆF¸å0=—ÃÐ~§¿ò¿1ôŸ_wÒ>e´~7sLÄ)Uæogž'AìŃ‘ÍAO¥ë‰&Žø]tŠôl¬Ñ¼1/Yîté4ô Áñs«R =e¾GsÚóbå°e±‹ïß5dÈÛ˜6ìzã¨è”³H¼ …‰#HÚ ½’ƒmÔ—Ræý;ìëã z5‡ÁýßÂàþoA¯ZirÐË$ÞJn§¯äjp#Œ;6ï(“6ÕŸ".Är¶ZÌÔ9F9 ½œŸ¼T2N‡‰Q!»yÙÜÍïÅÇÁ">2ÔåÊ7 R×É30”ŒŠzÏÜTe{’wa¢<ˆ‰ò Ý±°;RÑ)h­Ž’º;kn”äñøàÍxbèf[¶Éò Õ4Šz==É»P2r „çïÙ䘬 2Ãtt˜màìIîæÏ×9HÔv¾ÿÀ0N'˘ÌèHçjއ¢93²’ÉéÈx”$Ó1™á™œt–Ó-ÛÎ…AÒY©œƒÖ;,¼ió®Ý=8âtXt“¦nª bË}ËÃ8t¢€[®‹ìˆÎ‹;B¤>]ìÛƒCø·Ó§ñíÁ!ä £.RðÎ-§ë¸c$‰r;; àˆÊd Ë)âo3]©`Â4¬Î^4$¼:n?ƒÂ0 ûOÄL;ÿjµÚÔ¡ñ’©‘ñâ—J)ªÕ*&''Q­Vë ª©C ›ˆ9àrð”sC5Ç†ÑÆÏ5Ü$QßL!Ò-:=ƒ’e®‘]˜É  gÀÌ襯œ “å!<3|;Rå!Óɘ:‚¢`êçÀ3’;QÔ³(Yäõ”Í×rOŠzåìIÞ‰’ž›×DyE#cËÆ©;0T8b¦¯ééTyÏ ßTyÈ‘—:ç(uy® ÕòàÖËÎ2vô´ÑöˆJ×9«–|bˆ1]×}Û¼Õ6µ /½à†»­¥R)PJm¢CãÖQ^íR¼oµér¹\—Vd³`é¢é8S³‰ùuf\FpypƒÖÈ|6 #›Eùô ÷ûö¿#M& #›Aùôi$o¹•;5ù<ôL†;9Ù,ʃCH~ŸßÓ3è“02§CnDW­È c¼SvEl˜aÀÈåjô-š–Ñn9c“&Ë1Éå¸5SªnAy``äóüÏ›jyÊålzöšËQa Œ¹œJ¹“cÉ•Ë(ŠÓ+±•>•ÆÈm·s§Îí¸ó’É yËm(>Œ¯ý'ÿó&¹<ïØ-'ÇtÐlÅ̇£lîP~ŸGmìç,ù§‡¸I0”sƒ¤’ÆÈ¡» W¹"äßn&Žbpÿ7kÆ9Qj†x%‹ÁW¾…ýß@97lvb¦_Éahÿ·qúÅÃÀþoòNÔv@jÆ;Oå4 Á!9Ä ùJ~È”–óƒB³òqôråÜ’w£’ÆÈá»QÎ!iæÉ»ÓfÐËièåŒé,*š¯9BŠ# Cˆ £’CòÐ]0*ÕŸª ã¹äÝ5£ƒ£eüÇ]gpÓ=Èäud-§%k`"«#•­ât²„[Hbp´Œ›îÄW¿w _ýÞ)û™ÁÑ2n}`ƒ£Üú`‡Oðµ»pÓ=­àv!²bEee¼©:Uˆå1U‘ý›±šS£e|÷~îD‰Q!E!¶ó’+èPw„ˆÿæ‘™*2†Ê¶0^nâ"ÀP¹Œ;F’ȵécbÄæÎ‘ä *²†Ý#I¤+Pƒº®cbbããã¾Æû;À;ù‰‰ ŒabbÂv<¦êdXpÌZF„Ÿc=Öo+½Ÿ&æRj??>>Žññq”Ëeû»u¿Ž ·ŽbÞƒ6Ö€Õa”³ö S^81Ì—Út^S/ZXö=k ˆn• ×1¦ƒd¾Ts0ªyû{Ý4a‡®ªE/ø`JÏ&w›†ºÓÈn5ê ÌX ¨Ó+VZ1J[6ÌŽ wÒåa<6ðM<>ø-$‹Gñøà·ðøàÍ(@ÉÈ¡ gðlr7&ʘ, zéf”Œ<×}FތǾ…‰òJFÖ”o7R•aMÝXÔ3HU†ñLò åàÙ¤à´K¾;m'§lÔt©è¼LGQÏ`²<àÈsÙàƒBÞlF‚œz™çÉt~/Gk ÇŠÖ7Šžy9FÖ@ç™3ßùZQ)ž”R‹E»M{µÙjµj·«Ý»uÅÄÄ„C/¸é¸ë3¦èpXô¬všJ¥êœ‹žØŽ­4– „:Ùütœåµâ¸Í´yáB`Ô,-¹sqË-(Ÿ€–H |æ ÆüôÉŒ|É[nAÏÞ±{„òé3Ð ÓaÈ yË­ ÊgÎ ýó§‘xÓ5ÐÓ)”OŸÁø}÷ÁÈåQàô&&¡„Büef³€aÀÈã‹AO¥ATÌ00ôõo@ŸLAíH û½ïAú‰Ÿ×èŸ9ƒñ„>9 ¢PÂø€‘JCëêDïG?Êeœ˜!J4 šÏó)UƒHÞr+–üÖoÂÈf¡OLòéY¦Ó¤§y´iüþ£ÿ3Ÿî Š#Ÿ( ª©Fn¿‰k®†žšä´¬ žÎ`üÇ ïÓŸ„–H8Æ §SÐÓ)€QÛ1Q#”‡†‘¼åé Ïû{Þò™3H~÷û0 0Ã@ »F.‡Ñ»îAâMW#ýó§Ðÿ©Or¾¦ãeE½@Ôö6ôúÓ¥¦z ú>ñq¢ÔO)3 f€¢@kkãÆð!k”ŽÁ(gP-O¢Zž„QÎ@ ´ñÎ/Ç;?£š‡JðºVÉÑ*FßÄÒ]ÐK¦án9Œ;2j ½’Aµ4 „;M£š¡œDòÀm ZÈŒÐì1&£ÌG¨ªåI•4w8MƒÜr\ˆ¢Á¨dÌìQÕ<ôJ#‡ï‚QÉ¡ZNñH µ‹ ´`»»ápççÐÐËiÛ1QƒmfhÁ6¸£!z‰ÓfæÔ¸j)½’QÉ"yèNôoø@.W™ËXÎ yè(*o/z5 ÆtÛ9a`ЫYÔ.þ¾*V‡ÀGõJ̨`äèÐwчaTr<f[c 3x9”Ó?ñ K®æeiÊ­ha¤*Iìë»@7 ö$ïÄdy¥3¨Ðž¹e£ ` ñ@ÊFÏ%ïád2‹mÝ7`¢<€g†oÇ®EŸ@TkGH@1§yR£ÊF–w°FÎ…c (šhX‹Cjvðwb²<ˆg’\ÓÿIt†–˜oLAÑÈà¹ä]5Ùì·IP6òØ“¼;zÞ—Ç@Q¯u¼©òžNÞŽk} A%k¤ÔB¡šBÑȸFtVçúFn(‰OÝØ;Jbù®~d  ƒG\‚€íødr<†AšÈèá2[¢Î6Ín–¬”ñÀø8ò†¡rÏdÒ¸&‘ÀÓé4®nOÀŸ‚æ¹³ÖÒd *!¶”ÓÚÛ7 zÑ °J)2™ ÚÛÛÍwÁÆ…h$X†DGG‡ý[L›Éd‹ÅP(H$Ì÷©Ø÷c˜˜˜›†xÏâFQ(ÐÖÖfó·øŠ£º"o‘(»ÅËÊ«˜Æ«º¯b¨ä‡1þúƒèÛðQh¡³T+Œ¾]«®·6ôJɃ·(ʹ¤žF÷ê¡Ûx߈¡’O"yðvý?5Ô£œÁø‰Ÿ {õ 9| oÃGø€ÑÁÛнæÝ\ßQ ½š‡^â}‰ˆs}Ê(@®S W3¦Žm7‡4xYY+;ºß#égpeßG t XÍàù‘{pE߇ tØ2!5*èœ< zûÆ‚‹W£¨g Õ¥»2ØÕÿqDÔ6 öŽ=„=ïFGh±yárñèîn” ^ÎÏ ß’‘CX£ §PÐÓØ?þ0¶t½e#o뮲‘eÊt®«˜Ž¢‘65•‚g“»±­ûF!c:`FÏ%ï±’‘CTK˜Ÿí¶|Œö÷°Ú‚‚é¼UhZÀÓ÷"W@Ù(`OòN¼uÉP2rÈë“PÌ~˜ë©Ú”¶ÉÊžÞ -"UÆÑô³XŸØ…cé=ØÒ}^™x—÷~*ÑT£uSŽ‹z®öŽ´„¥IQ4Ò¼•Ïàhz®ìû(!fùfQÐÓUÃ(óö ÕVºººê¢Ôâýöövär9´··#8")Öý|>ïhûb[µÚ¨ÅC¤ÝÖÖæ¸699 Æ*•ŠC&1ãvJTUuð³d‡ªªèè耢(H§ÓH$6oq°ÄÒ3ªªÚòÎ'æÉ™QÌ(ÂH\Fv߉êøÉ'Ĺ7òy{Sy`Ãßý>¿f¥¹í6–¼å6Ðb¥7Þ-•¼åV;½Ev4 <0ˆñûÌ#4æ4´Á›n‚ÖÑî÷¼úd ÕTŠG¾w‹‹þm5UÕÁ€ÑÈrzÜúùÓèºñ]ü~6#AòŽÝ59o»´TÂÐM_cŒOKg ÆcÜA°#.|*Ñ4;É[n-—1ôõoØ‘ f Š#Ã(¹'Ï(ô\z:ƒ‘Ûî QBúçO!ñ–k1þ£ûP>3P‹´|ÿV³¬­ic”ÂH›‘±ï~$â‘Ó94[F-"“É`ð?¾ØåíŽ4ÀŒÀ ÖÃŽ,ùÍßÂfÅêÕ«9Œº T/"yø.ôoü8ïüÊ@0ðÊùA¤žAbéÕ¦£s ½hüÛëOÞî57ò+Âð²­à^UC97„ñ×äò‚ÁýßâïTÏóˆ‡^èó¨ˆZKWÉA 'ì¨^Î`äÐ jÀtr2>x]ü)„⋹zŒêÜ¡ËØQ™äá;Ñ¿ñã9t'3пé“ü¢B¯d0´ÿÛ¨–&A'‚^NsÃÂÌŸ{º>BIu°V+Ã%»„éÌîÊùA¤÷ kå;Aˆ£’ÅØ©¡sÅÛ`T¸ƒ9þúƒ¼\›cC¯ÞŒj)Z- ”9 ¢PÉ!3¸ñµ×cÏø=˜, šNKÏ%ïÆ•ýæ#pà#pÄþ$ `„œôŒmð[Ó*ÊFEdñØÀ7 tâ­K>¨Ö¼`x”Œ<ö?ˆKºÞiÎ>烥*­€·-ý"Z¢¶fÇäQs@ÂæÛ§ÙDˆQ²‘ÀiR攎íÝ7:ÖÛ”ôöŒÜëGzÍé[”r§d2SÅDVG:k@Q€JÁ€¦òˆoJĪêvÄ#W0pÛƒIä‹ Z º7d È dòÜQ)–(n}0‰¼µ÷>>†ÁÑ2¾6RæÓÃò: ¨ pËÃÐ4‚3É2î{rÌœ2F@wV²·üx„ï½¶Ù‚Ž›~0U! È Üú@¿ò¾Eˆv¨v¾³ºŽ;’IäÍ©f»G’(RŠÓ¥’ýYðpdDXÓÑîátbB†Ý££©TÊáX†a· ñYV¤ÆÖrªÕª=2šÍfÑÖÖfÑh†a˜ƒÎ)HîÈ wSN¬ßV~¬4¹\Î6†¼œ¿èÍÄÄï¯Ly¹.ÉbüØ‘Xz5ÒO#±ôM?ñômü’‡jn€òh,ãQgq 扥C“wƒêE®‰-”@ßEAòðæÔ]‚Áýß4g Q.§P-§jº‡™ƒBïQ(ç¹>/ç‡í¾däð]ÐK)¨¡6ôoú$T-ŠÁW¾ 0ŠþMŸ„® L7õµ…¨(YD4îxðé[)Eƒ;–³SÒ³x|ðfä«“¨Ð"&JgP6òkmÝ•.ãñÁoÕ =g“»íA+Ú!êö÷²QÀãƒ7ƒ1 U ØQGzB @AQÏâù‘ h®½±4U-"Q°#D Ì–³¶žO±#àùˆbG‘võ¡Åµu‚ zy}E#€8¥²‘7Ë“—«õLÉÈáù‘ U‚=É;Q¡EŒ•NA%š±Ÿ(àhúYlᄀÅv¾¸SdMëãÊÍŠ’<*ôlòNh$ ½€¢žAÉÈãñÁo£3Ö­[·ÀJÛnÖœõcµ'±Ý[„å¸d2G»œäàÕj…B±X ™LÆ1añ³xYíÔ½±¾3Æ ªª}­ÑT0Q‰4ÜN“øÛ=ÅÕŠFYÎfŠÎTŸë^+äĬ"|ŠªÇ_`ÑâEË®¿æê7?ýl8°d1r¿xF:혟ÀÊe“‹0Ãºæ•Æúíþt¥%„€V«(: }r…Qw¬Éa¥2Œl…ƒ‡`äóµ ¶}‘¿Èãð!}*•8½aärˆ®[‡ü+¯"ë×#÷  ¥’ƒ-•ÀÊeÐJ¥“'\¼˜?â]„ìK/#û‹ç‘õU/B~ÿ+¼ Íg­?‘†ÖÝñÝ@W²/¾„ü¾½0r9;Máà!T†‡Í2™p”Ýûó˜Ë–JP£QÄ/¹ÉÛï@utT¨1µ©b\.žG%æyyñ%äöíåÀé<„êØ8Œ"Dµ_½ (È î5J°¦&1ZÉŽt¬A.ù²pŸ€Ò* GPÉ'Q˜8̧TB=`Tr(L±G­çóc¯!›|™Oe³iFµ4kÍ 5J †Y/¨}R—N DÐÖ· ¹Ñý Õ"­€U&¹ F%‹Röâ½[A Fí†NÔòhN£°òžM¾Œja¥ì)ĺ7ƒQ :RgžäQKîâ8˜Qª½GZãéQ¼o—áè唣œ¬ò0ªyD:Ö ˜z±® Ƚ‚X×d‡_@ndª¥ (jáö•HÞlò%c‹~Éví2˜8 ªéß‚£Ù_ B‹ÐY…w˜„ /²ù¨Ò²çÜhƒV1\8j: UV¾—À°4¶ PÐS8™Ý‹ö`~1úCª“XѶ…Ãè®ATmG…–p(õ*´ˆeñKUÛ¡Ó2ŽgžG•–¸£aä0^:EÑu8•݇Šy½D¹Ü(9 Ž8ò0謌€ƺĕªa”*ÏìK£T¦v“«ê‡O/ !ázÎ¼î¾ÆP®0· æ:+¤àêm „C F&«øÅkY”Ê•*¯Í 8QÀxº Æ€R…¢T¡5U  \e¨V)ž¬¥#¨V)öËã²KU‘É8x²€\Þ@©ÌP*S”+ÔæóÆ`­‹b_9‹’Ùá–™5מw¶ñ™!Ø ¢#A±Tr –#Ákøùðm”–1EQ Q(P.— …ÏçQ2åP‘H¥RÉ~¶\.£X,ÚQëšhÔ¸[tòù< …J¥t]w¤u?ç•+ *H~ ¹‘}¦î8„jqœ×!S_$–ì£U íÿ6RgžD.ù2ôò$×1ºXçj”aèE¢ Þ·™¡_€êE€ÀÔa%0£,è·ׂ®õMµ4áèK²É—P-§`Tr(eN!Ú¹™¡çP-Ž!?öÒ£/ãŒ6‰3Å£ö@„Î*Ðiã¥SˆºðÂè½HW†q&Ç3ÏãDæE”Œ–Å7#¢Æ‘©ŽáHêÓ€¯éOÝE˨Òªfÿbé…|u¢nJýw†*-A§e•V¶mÇ©\½n *¬hÛŠ×3\çºõ–¨§üt¬[o¹åãúñ–Ç/Ï<¢žE²pÔž %„¾ÈZ¼‘Û‹*-Á UŒÙåú_(9ôEk÷kòñ÷`Ð*†‹G‘×S.Aª<ŒñÒ),‹m†Îª¨Ò²Õ13Ò’ÃÒØ&¢ JËxzøVd«ã¶ž *,‹_Œç’wÛ×+´„€À5½F8s挣X^mÆjãÖ}·S!¶%]×Q*•ì4„„Ãa[¸Ÿg tœ¢(ˆÅb`Œ!ŸÏ7LÛHwY|cƒ¶þñ¢a9wÑhAM)ÿäáGŸNŽœP©  á»øÇ\ðøôÄüDfø‘ËaäÖÛa‹µ5%Â}¯gZúíµÏ§{G3sñ¼á·™µÖÄ‹†ß>¢^»¦ CšF.Ç#8VD ¨}÷£-lql\ÏŒ\¾5±ÊÐcÊVy`ÐY£,âÿ†eâ†Gq‘‘Jùo-\³×ÖäY\ï§¶q…QÉלÎAé1×cÕ¾·½Ø“ØŸþ‹G™¦ö<ŸƒÚu¦CÏïu`~0ËâÞqëå ôrªåÓܬ¨’0¦àÌ;ì©vV4Š;qÉí*#¯û ÊРBzs-ˆ*D—j›ØSÓ¬57ï°!ž1ŠU+%Ük!0¿Ã?­ùÒÖ¡Ü£”" þ]AÙÈ㉡›íOkzCÉÈ!¢µ£däùœøáݸfñ§TÂæsYs„ñæB]÷Î=æÜ· mœV—ñ=ðˆ†ß0™¼á¹U²ûºûZ³FÊž ö­µ1èˆ;§9d0§É‰ÏYi<ÔR9s£qCÔ÷©ÙMÞI“Þr൰h¼6§•Õ¦²KY#^~Ï«V{¦ÛZºÃÖW•<´P»9Îìé¯Ä\¯âÐ1ÔÞ&¯ÌžúZKî¯ßêt¨‰SŸsj“QÎØÑd{Í¢0¦¢,´Mqq½mµ¢5ÉWÔ"oG œkIüuOã§¼!F¬mcÜl/§ ÔW?ùìhŽž1§ôÖÓ7#AÎ(6©ëÄO‘¦iáë°üaÓdf x|ðfDµ¶v_oFš¬u6ÄåwóS’Si3­´E¿èk+ôݧ©Íbtº™ ¥ó®LçÏ™á¥=›å‹Õç­ôس}–‹¸ã˜yOüî —cUç$5;ÇÅEÃðÚ)­Õ2iPŽçd*[D7ÛŽÛÜÚxäøÝþÛ×äb®Ï†šÁµÙBM^¾P7ú6|`° ß¼Û;ñ©¥ÌisjW³2h–Ÿff!©95ºŠä¡»@Rý”;—#XïZäj#Šn4ê@ë¥nœ†™”˜Þ¢-v¦p‡æÊþ ë0ü&âØ¢Ô«#ž)-^-Ñ,*¹(n{pØóŒ—Vw‡o”ÖÁ“qGæ¾'Ç00âQjU…LgÌJ¼ž+è¸õÁaT¯¢ |YÑy÷–«îÀ­Sá3»u»sÿÎ5ÀשYŽŒ#}úÖ"þº,·žß=®y îÔ –‰ÝS †¼3M½³ã-ñÌõ›WúFºi:çµLõü+z½'y®èûOyëyg¹6wæÜ´­éoe#oç‘ës hdìÍ ÜÒlëó™`&mÞ½Vo6Њg£ÄæÝ«˜Ò9'ç ü"FÓ}fª4æªÌ§sxh«²X;Ž5Ü6ó\«KâLÍòMР¼ê£QuÛVÏWžÄ݈<ù·ÅjÄeöÞµûŒ÷èhm‹Tg´Åa· µ0݃ï¦*·µ£P¡šA¶@§Ôô¦Å“Ô¶€-Ïœà aQCÏC'Æ;¿´¥kSÅLΦðG³µéˆºÓ^{8-ÌôðàVdŸV¢­­n?›ðÓM^gÜÌ¥ %ûL04;|sª2ú×eÑò; t>ôùT0“6oM…;ß1¿‘‰¢(þçÍL‰Ð;皿ҭtM|ÆbºÏÎ6ÿÙÊEãѹ¹<Õº0áp»ù*iËX(ãPó!™/Fg³™qœ Ókm’Xóñnf—ÇÙáo¶Mñüè.æØ)òlç½Ùý³‘‘˜Îî¡™gDQ ¶·Ÿé~ç9ñ+SâsÀ¤wÚx5³„ùó¯7i1ÿvöyn×מåCàÎèUqÑ«Íu›ÿùSgóa´ÏgHâ„´f/D˜çÕÌ……2é|s¦Q Ûü ÓV§.ÌÉ4 ‰é`V§·ùÔ BDÔxËupå|LµRâ{4¸6 ´ ÏBì?âñŒµM§u`æÙ>ÕúœÁTt–Ôo SP™f{ph®å=Ÿp¶´œÈÚ0MÌ—!¾ þf²Mk9âcG‡yÏã\*A‘¶7Ÿæ ïEpf*»ìÎ9,ļßêvÙ‚ŽÛL"“w.þŸmÇBQ1µŽ®u]Ó¼ï‹éæËáQA›ª6th4BÐ4tjš•ÄÍg,ǦMÓ ¾@øB0fSÝ;NÂÂtõòléóVTfƒ×l MuèBÆÜ¬[x8ë5(J1ëõÛŽ$X'¡6xÆóžiªjˆ´ûY?£Ý^£<5zFmoQÕú­¬›ðóL'”ßTòL$hè¨Mƒ–HðC=›Éiå[Óèè€ÖÑÑ0„(ößG©»/¦kHCÑxôDÑ<é{9#îkõiL™¬ëf1JÓð9wž|F.›F~<òì|Z 2Á§|‰gy¥oõÞtž¯miZ“U1ÿüÉ©vxÓ-_w™A.µÏºô®<‰÷ÜySˆbo©Ìw…  ù9µO˱PÍ?ÑÙ¨}·Ò¨JíÓùœŽŠ—yÒÌáQàó|ÃßP@΋Ÿ#£ÍtT4+2@%ªy¯]Ó ši­èŒÄÙ» ÍÍfß[¢cNÿM#Z%šÃ0oUgZÏ).½ì×úé&ž/8ô”»Œ,^*qö›^º×‹~£÷á÷»Qš© µŠföùŒ a`æ¬n`À` z*Å/ª*ÔxF6 ¦ëÎ4™ Ôx´X„‰ð4æ)Äj[ŒLPûy0ÆéÅb0òyþ™áÛ²j€ª†=•²ÃÛF?cüš¢Ôè›ü`9Aât-ó8Kqq½å”¹Ï“¢pþ€'ëÇÂ|‹¢@3e·ï‰ryðóäo•A>ïý><òB‹E¨±ˆªò¼[‘ +QÛ‘a”r¹MšÖ}+ÿ`ŒËlÉàåÄØÓgÑ̳ ó ¾­§QÉ1jøT/B Äx™–Ó`–#`*<-”° KiUËéº{`Ô>_À¢«h{kQ-”°yð4qÕ´`›íÄhÁ6Õ|Mš§VÛÏj £šçy©y²òîx7Dˆ:%C[ ¶™ç¾P[.˜N—oG^œù­•¯3V‰åo¥·xûÝsU8“¯^ÎXoÜüT ‚°ç Þ…J4„Ô(*´„ F…–R£¶ƒ`  @AH¢l@AQã(Lo©Ü"O?X²ˆt QÕÚe£`ËÆPë|ÃZ%=ƒéP‰†°· ñžEKÌ[IÏ!¤EP6w¿UÐÙ¦9œ •7MÛ ‰GUJÑ‚\Ñ@{¬–Þ0§«µÇx7ÉëˆGxúxTµ™ö˜†É¬jÎk³š¬×,7E! ”9'Ûñ!ü\E!¶Ü…ƒ¶E#S‘Π”9~ƒJZjÀ<§F×m7€ÐQóf4Fꟸª‚˜N޵Û ®iÒ™™#Xº¡þ×+DѸž`Tó5]xNK³ô¡ƒ¦EKЕª©“Á¨­“ìë~úÉ…(ˆhm¨¢€°Ðö­3«šæÑ-;øCX‹ƒ@1ÛH½^qÓ´uQø€†ù PÓ;ø)÷ŒrÚˆxè&Kg2SKQPu¾ ˜¥‡¬~³ g@@ÑÚêt¯¥÷­gÄëö»0å-90À¡¯EÝçȃK/‹?Vù»?§RÝ<Á`Ó°ä-°Ì 7­˜K̯3#FU\0  Æb¶O Ù,Ô¶¶ZUåÎM{;wb4 j$Z,Ö¢ñ87ô5ͦÆìH T•ËbòaÖwS>-‘àrŒ|ŠH_Ó ‰4Efz‹‡½ŽéXN™>9ÉåSU®@TµöŒ¢ØN(…ÖÞn¯k!ŠbËNGÃÁÏÌ‹è BpºÄ?ë}«qzäÝ*kÛz¡ÔQæJ$b;⻵5ëPMðüg2ÎH› 7?,ЍŠO-T‹¢0„¨ Dµ;,˜ÑËÐfÖ5. Ô@Ì<%Ú5ê"þ¾3ó7ÿРÛùvšBZñS”‡8žk³iY†¬õ»æø¨Ž?+mS äÏæíê¬ÝŠÙ–G( ·³U—W~‰]6Î<Šeñ¬·¾´ Ka$Óê˜ÄwÃ#f*!(9(PÑâ¨Ò²=ZHÍN_%TEbÚê…Õ:•h DAÙ(ðQE­ EŸ§à(+«´G(‰=âÇÄòt½KB”t¾C7¤•º)¢al90–A!ŽtZ÷JzŽçBD†ÕFN!tÔ–Ãa¡=¦!W0ÎH@SÌS߉+=sD^…ðHJ›1¢*µÏ9òâ15N,s+J¥µµyOóShö5&æEp’ï¨9UœH®% r5« ‰[ë7Q4ϵ•ÎïyÑÀu_«ý&¶L®ÂrD?lç D˜†ž7yxD†Ä€#ïŽH‰¹—¾iò* .ŠsºY£üzåÑ¦Ë¨í´€h6~ж¢:ŸWT‡aaÉMˆEÑB%PQ€_ŒþP”4%Å6¬N¿Ñ´,±£§oQ­ÝŽpˆF‚á`;ÄtÄ;+jÂke‡HWŒÂøÁ=­Ä}Ïâç®—-nÕ:g÷8a@#HÄÓºsû3÷t/÷š¿õ/Là£*5g#SAÌ(‹•oE!´›¾U7,Úî{Šð¼W Ž®õÛ0€Œ¡Ûr¹×ÊXß5…¿!kZYv‘|€IDAT3Xt!çåAœóB¨¡@Tç SOØú ‚§=)š0HGäÖÒã=½’…&Lvë9‘–­ëìiºN}^§O]<ìA&•GgÂ*¤¨æ  1 mq€B%µºké¯h¬å¸¨Ó]Q­Ý¡ODšÍ¦Í‰zË]ƒ`€­cÝúÈKOù­U±ø¹å³®[À{ÀǺn9–n~ˆè™uÌ¢áà²-‘¯ÅÃvN pM*DÇ@€ˆçæ›Y.¯¨Öލ–0e;¿×Ÿœ‹˜×ÈŒ½®BUëïµ°þÄ÷·e –_Z¯C;}×k4 ß2—cPç´yÉîZHïé4‰4¼ò$DUÜ‹ìÅHßwÕlŽ0Õ ïÓ‹NKkQ¬È–sšËìm{¥ñû=ë çï6*ÇFmMá×Þ‡õðŠÈØeåÌ»8zéŽBµ’ÇÖòë5íM©žŠ&לrQÖºwfÎ0BQÒ³ÐTÓІV{6~OÜ©3ÌÐ9$f‡Ç;AV7 Ì‹§9iu@:ëŒxɰ˥Ñz´xÝíÜxó˜¸æpDø+$-ói&ƒƒ¯B<~3¨Ì½~¦~ÝŒâq¯¬…ÿ3€×ºR[ëgEÎí¨º—.p“té2†šþq§ñ¢åmì‹¶B}_"ò¨=Ôbæ³>:JÔª0 ãŽh4ÒÃn}2Õ5"6=[¯y¤ñm@£ÉµFò‰~ ±÷€—ƒã.W/çJ|âZJÀ­W\÷,'K(«Ñ uåb9­ ó¾ff!íÎu6ò<Ý üî5„Ïf ³™¯©žWÓZZfÊF9ëOëœT,MN@6ó­›sº›uðÖwqôr^ËÅ=£LŠ&Ð4¿3Ùm$œ£ã4§YXð‹šx=;Wàš(4EA$î¿“ØlŠžXßÏ&BÐ.8TçQ]Q¿M“ÖT6B™Š|3á1Ýhì\£‘nšO½å7äN×èÚTål–wþ‘&ïçäpÇBÅYÝ@âÜÇÜ9§Öag;‡³œ«V”ñ4:–f‘˜ùÊ9Ç4tßoôìœÉÓùjqúÔla!9êù§ÎÖõ™ù÷¼´µYæq6ßζÞjÓËæ»í6ËßùºƒÙ…ù¶$$æ S퓊ta`A¾b­ƒ9Û‚œȱÑB [Ÿ :Û‘‰…ùŠI\˜µJBb!;{‰™€P øÚ•s< &q>ajg¯HÝvaB¾w‰¹‚¬Y RéK4‚¢Èíƒ%$$$$$éÌHHH,ÔÖƒœmIÎÈùVÒ™¹`qî*7•éÃ:K…\€jIÖ ‰éAö ÓÅ|9sÀ‡¨ ?T"íf²˜bN…QÕyw¬æÊp䇯µÏéÎbçÂ.@3’ó¿Ûͼå­Á®9µ½µwÓ 3;Ž5:³†Æ<-3S0²h¶†H!ªùWw ÌC?g]R ‰æ˜®^žËí©ç’×|È+qaáìÖ·1kþöºÖèwÝg³´^÷Èäþ$´Ž„Η‡‹®›¿Ÿ\Ü|êèùñktMáÝ6wdH]ï÷¡xËâUƒÖÕ ­«“Ò©6Î/Qž¾§ZW§‡Ì¦¥Bá@Fž&‚x¥±o ‡˜D @ %j§I7x¾vÝ}Mñ¤ëÐH¢òƒØ\Ž ÿNœ4|òäFMö^Ô+{.S-ïî¼xå·¾ ëïOû\™yw‚fÑRˆêû'–µû÷l/Nvóh,£•UPIÀ%§ÂÏ'*Ô×5wÞ·e6¨†¢( A@#HÄUhZÍP…?Ñ±ðºæ¾/Ò hN=aóRù§×Á›ü€M¡ ‚D\5i‘N”Á ¥ÁAœ|Ñ)ÑA»ªòkÖ3Ö'!ÐA§¦¡ËüëÐ4„í§FÚ5 ´ õùß¶U§cë|‘^3_—n†ç–ÔÑFc}èKK8p3ª¶Ûí\iQÇŠ:EqézL˜ãÙ¾˜ +2v;âyéi³zé|€?¯hN}\§¯L[@Ðu–Îm¬Ÿ¸¼5yÍTˆŠ¨Ea•Ó.9SGåAa@аGÉÈ¡FSÔ|m Š°C™M= @!Âj¬N¯ˆ49-aŸÛ#`}CÀ=b=ÑÚ]º‰ë̼ž‚ ¦Y´êõ)! "$’‘µuì´¢¼5ùÄ|ˆº .:pÈÑø{­/ƒ¬}ß*³±ûŠZŸ‘ƒfÕS‡Ì,ûZy2Fù™b&Oë ˆ™(è)®¯åXÇ‚Äü93е«šÂø>G?xQëH8GçUç5wñ·8>4NkÊcßëêcÌW&/ú¤ ÆjÊE¤«uu:ø{Éå–ÑM×¢'Êeñïy]ƒ¢@ ø¹f¾Ý2z¾WžmúZ€;x¡*)æT!3úâ›_Å´š„wj4 š/˜–ê2êÛy´&€¥HÝ‘-Ü鸧(úhŽ¢™éàó¼Ë™p]»é‹GZŽ ! ˜Õaš£V^¬çI8àp´p‡ÃsÒ¬uHb‡ït¬;m­œìG^Z*C×}€qš&wÙ‡¼µÚ$ÒUÂPb@!Y„4>B¨*(ˆ‘@ý{ò„‚¨ZË—êúÓ:]¾SËaPH-áèXÅŽ™ý©ö Ò1­ÓtPòuÑ•:.æ3¢\b½±èÕçWATk7ª(?4Ót$Ĩ…¦ÕGKÞÔê£(Îk^ÏÜ™°øtÄ5hj-=Q:Û5‡ó¢CfFlÚî{ŠûùÚ›¨ÑqÓ5(Ó îL™Q˜„ªÚŽJ»ù= (¶£â÷63²C¬È“ÞÌ”a äzgÞL`~ðþÁ­ß¼ôt½Î‡©ïr|ûzs «‘¾rè:-oýDqsðˆ ª(ˆ(Xµ*ªµÛ:Ê ©w0œŽAmC±uD…©¦–ð¢I\}ž÷A”5=ÂLGÌK71¨$ÀR³m,n=Å#" W/¯˜Kw2Ó™Pˆ—¬×}õeà¼o•™UŽbŸÁ€ºr‡«<Å/+êÕÚÍÁ ^.Öõ˜Ö‰X Ã|_ú,6‰ÙÀü93„€(|Ê’§kÛÊt©fS­|¦kù¦îy:Ûè7ááë¼·"W«tñ󹿸$¤u9}xz9=SίK^#_ÀÈí»xkH\uõ3Í×£øM;hš®Áõ†aÿ–e±”瘪Æ#(F%g;$­äÏíM%­òhtßšþF”@㲪c$”1ËÈ=m`SÄšwú"Á ¨ïXýšƒ2ý)€­Ü³¢RµAME8ìí|´:uË}­ÑsíšozÒ`J˜ûÚLäU…‰°ÆïYAe1âⱦU(„@º0ÓŸbÛ|Jޝ~ka šõ[tP÷QG‰µµ^×ø `À_Žæ4›½šsâ·&Ïš^6“¾°™|–~Œh ;ÊÞ*m¯2ðÎc}ŸaioçË`‰@!¨+þæåt³… ùf$f†¹X¼O èÙìy·õ¬{ƒßt®õ6­o<·|>ò&~Ngÿ…·2o{*ÿHMU‘ˆk¨ó7ßAi°¾e^a€$ZÕmÀ4õ›¿ùÈÓB¦7[¼çK®Ú:—ù-‡énl ×Éœ[oKb‚øGðÎqÌÆÈýù R[à.áîðñ}…ˆÒó?V>gŒAkkGß§? µ½í¼Û¹™“Â…^JA/¥.P‡æì¢•2?»ï…oïÇw._ƒÒ©ÉA)›ò36ÏûÂȹ„ˆ©´‹sE·5’óläa.xž+ïbº2Ÿ‹ù“˜:æÏ™a Œ`”‚U«ÐSi°jÌ `†Á§Y†±øé¾æñžWúftÝiýxyÝóH˪:ô‰Iè“`ÕªÙû2ž29ÊÃ/_­”A3y½Ê¦Iþ¸|Â{4¨?­Fùôã£òÈ Q0f˜…ÊïûE-ø5fÞ7Ì?êxÖëy?ZîëNúÓSŽŒê0ÊûyO:¦ü°òíGËÎ'uý6švÀŽûî2jBÏy½Ñýz eiÀ«ì§PÎ-8Œ” ¶ü½¬Š‚‘±¯[ijVš4 VõÈ÷4ëE˃Ý0Îé¨ÞN¥ †ëÏÎï9¿û´tÎ@UgMhóO]g˜Ìè˜Ìè¨êþNÛᱞ¯ éœÎï Û¶S×§}1¾ŸH‹ŽŸÜ ~z`Œ:t›uyèÆŒ:=ØHwùëæ«CÑm®yzF«0Êi0Z5å6uøgÁÈÀ`UPóº_Þݺęoó;ËD=ô“ûY¯¾Í‹—øŒÁôMø—Q«N]+ý©(o½Ž­/'7¸ÌiLwÒó(ÃZZþž¼ÊŒN¡~H,\hóƉR)è““öo½Z!V÷ÁE…Ú‡‘/@EadsP»ÖQU€î1Ô€‘ÍAm‹ÿ‹Úé뮹éZßí«m(9A—0¨f[Κiâ(Ó"Âj*áý3[ƒ¨¯øK?åφ”ˆy ªuØÏÕdà¼,ùJFÎ~†‚2eƒËÀïgVÛœ­ÓQ–>.š÷,ºµ „(0˜îÐNÞÞ:ÖzÇ*¢Zx_jéZƒé(²´#ÿ¼ c¦Œ°ËÀ`:ò,˜eÊ, Šðî¼òÊ鱆N§ÄÙÅü93à‡!Â0¸3ð~1A¡§Ò¶£c lj×,_4¨íô€ãYßk.ºw:¬´Ö0!²bݳ®Ô€š0e:m;26=“«êuЫг9ïwXÑÁ z%jT@©0 jŽ€^š„Ó\#ŽÒ,@Ó¹¡`¥ª)¿ø¼9jTNC ¶Ù«ãQO_/Mºœ%Þ¡:;ñ6‡“Q£›2å&f盯KcM7óSôbrº.â,ŸúçÄü[åêþ¬§çMª»ïºæO³f4•*ãëfŠzÚζqçgçÐv6ˆG:çh.!0G[ùÈ$c@ÁÈ4cŒ‚À`U”Œœ=J˜×'=ùNW^+ 7b st‘oŽaPn”OftGKð‹ŒXé¬4UÕ=gEXÄû"M‘Žø¿Ž†´©+€Ìêè¹óà¤ÉŸ' ¥WAª¤–ž1T)ß:¢Ê˜ÐjÍ{Œ!­ëHh¼ËKë:DóXä@ÕyíÏ0&è,Aט:Ø©_˜­ë.ïè wžÕ9{P' Fõ¦:ŒyêVo^5 0F`0êÐBüyÝ© FÚƒ&u\/ènx3£Îùqë+§~²ž5h  QÁ` ¨gm$ò峞@3Ïjý$w¸®9µ÷b9Ü©›4ß ±#ËYu£o?pÝ\hqÇÃÊ‹ÁôºüçYÕ–Q,;î šeïz ×»óÒÇŒQhUÕ|FÆpžÆn2MŒöÔ4Ï4-ÐhøŒðÛwlÕuÏšVæI‡§0§b±:žÌƒ¶ïoW9 Ñ³>|àé06¤ß¨,̼1ÃhXÎnz¢ÓæàÏ@ÍÌÌ©uS¡àmT»§9ˆÏ4 ›óé_é†iÜôkQÑYrvâ^4Ýt=enÇVÓµbŒ»ËÈ«œ§E¯Ï0JÁ3Gô~ †›v+±fî 6iÌeÔL…ïTåeŠFvÜ€ÔºÚVןÌtªÙT®7šjÖ*½zš¼ Ê̈i­O×õŒa€2ÓáÒuÏ4b9S‡+$Ñ:˜9-ØUn¾SY}ÞA‹Ó.ºÓ=¨ÓDßÌt*Q«:»•tÎ)_é)éÚú)V|0ˆÂðNï3×kê³[žzå¡ÿPÓÕn‡Åw£|úÑòË+ú×oZZ3=Îû&sðUbÁaá93Í@)ŒtÚ¿g<‹rù LæVÖ!µˆiç­iú©3é ¦½ð»Áú—…¿˜|aO ÈCUãö´ûÞ–Ó\×›Y•“Èž0µƒås4踴ºvFbác*ë:ÎÌ4Ôcpf.åiÉš…)Y³IKâüƹ¹÷íBq Îw™eÞ$æ f§%íM ‰iá|pê$$¦ŠsÓ™‘¸à! ‰9º&!!!!!!!ÑÒ™‘X`à;œe¥C#!!!!!!!ÑçÞç1£Ð+YÏÝx.ÈÚ­ãÝlëÍö“ƒ/g g-2ÃÎóEãŒÒó>V>%ZGKþj(PÖÚg(Í7Εè(e Æïkukh1ýTŸaÈ="ƒ^ÉÍh;ù…ˆFrž<ÌÏså]LWæs1SÇYqf˜®›‡KVÏKc˜é:ôÉIè©Ô”òÇÌsV=3Ûå5]zŒR°jF&cÓpÓšMY§£ZÚãž·Ö§Í6ïùÊ cÔ÷<‡é3 a-Ž+û>ŠˆÚ†¹4Wç&[òmMsæÁ”Ô3/ÓQ4rÓÞŠ{¦ 0ÎéóºÍpíÐÌú³jÒyÃ>lÓ+;ýdVÇdVŸ–CCC&Wÿ¬Ürùlƒµ<ãÖƒÓâ6GmÍ¡D9]g¤8t¼õ¹»Ÿ¡æßtûŸFºgºå5šÓåÏÌóã¦Ë“™eßêÀS³´ÒÙ9?0ÎŒyú;­êÐÓiÐJz*}rLב Á8ö3”¤›Žé k: Ìý]HëÇËëž×o=ýÿ³÷§Q’d×y ø=[ÜcqðØ2#T&PUD TO·ˆe¨Ù=ÁH l”HPÈ£Ó-µ(’±@JÙ>gØ AŽFG-q‘(Š) ¤4-é4II¤Îé#QRS@-™…ª23"<öˆ ÛÞüxï>»ï¹™»¹‡‡Gd–}u²"ÂÝÜì¾gæf÷{ß]ö “HS MÍ±ŠÆe>—$ŠÐO—èeª1%'ev”­h»t?o@Z@¤ ¥ÉZ¼»«ÆY°/c«~Øü–ι¾ùÓC¥ÌÉä7H)3;ïÄmÉöUôP-:†»ÿ±Pö t¶©´+g.̸²dè»èÁb7´“ÖþÝ£Éé’Ó=di„DÓ“cƒKŠr‚¤Ì àa6h«¿ûæ~„i2þ“ôIá8ÙÇq²¯èÉ!2™èfi™õž¹Vdb:kg°çå<¢m2©:`g™D–ÊÒÆ—©óï, 3‰°œFöŽRë= I$öŽ£¸¸Ûðý¥´Mê÷A 8ûf²Ï[ÛJ‰ÖÓ}O¢&;þEiÝ_ÜíÝÛ­%÷öüÙÀýZä¢{›Ìs¿–Ybîst¯úûŸé¿“,²¾ÿü~ÉÇÉ>Ž’]%»ª=ÝOBTfÝ{2™¨öÎBLß|³¿‰x¥2“ý÷è¾ÇöS4GUÉÀ° ilIMœèñeǤ{of‘ÈbrÄ·-š3²Íš›šÜÜ—˜NÎŒPÎj¼»‹dwÇÄÅË,SÝàwvÔv¾~ÙÉ ¼ÙY¤‡‡êåV ÙÉ ü¶Añr&“éÁü¶r‚ÒÃCx³³jûV ð<¤ûûÖkÉþ¾üÂBþû⢲eoBý ([uØK²» H‰ ÓQ6¤)Ò£#ø d“/ÙÝ|A»ôèÈWÐé@!@f^’ñî.„ç™cѤ&H𼜤)ÒÃCk¬q..Bxžš«ÃÃÜ^"È´c›;$ž~?Ó΂:ŸùÃï8Ù79äDÀq²æ‚HHœ$àÌœCûжš }ý¤‡–½ÖûÈ %pOos/=Ľ$AšeØ9NàûÀR;€ç dÊ@ì$H3Xvû°0À÷!8OÛ t_œ36ø}ÔçÍ}%ᇳ0“« „u¯a÷.ë^gîíê¾,¼À—îeÖý†ö+3s/^P¸˜D¤P]ß“èBfˆOœ$RŸ:Ägæ>’f ¹ Ð$™¹YβPNö="EÈp/Éïq긹]Çɾ¹yúžp’(b&há4=FÛÁiz úž”oÓôçÊ÷’CÌ… €NÒC4¼C2™ JïaÖo€¹'ù"0÷¨¿eõ©¥ßéÞ§é±ÚNž!aRéYÖØ2™X÷Wë4@…Ï z_À½äÐŒ‡ÆßôçÌO²™æ8ÕÇÞgÓŸC”Ý3sF„ŠÏ íÇ>õMáòbºôª¼û@äÊI²¿¯œØ‚d_9ä(·ÛŠ`0DjB$ÙgešÂoµ”SMû 2Ø¿Ç1ÒÃCÈ$QŽ#=:Rïk’E*K²³£ŽO«}Yfœòdo¯Oý ñ’f\{{Ь8ª ýMûãc 9òÛmEŠÈþ,3sgœÆn"Lìx´?!„QMhž½ÙÙ¾¿iŽ hô>ù¾èu>—2Ë‘Ê2$GGŠpJ ™¦ê8ÇÇÚmõЉ ³I”RZ«ùô°!g^Ê´òg;‹©z9Δdï‡óæaI:×Y'¢ÀWÍÃNø-õ€n´Œ#ê¾_CRÌ"‘DêFKö¨—µ]œ´±;_ñtC×ò‡:í7KN೎3?ÊùØW M˜ø1ò‡»MF€\­ø~CbÎ! TôËdR°¾zøÑƒ›FQvÏþðJe¢spZæ=ú¬» ÉmRZ+¬’®w[™YNI&S¡Ž™Y„ €u|r:få8ÐÖ´ô>èæÄ756¥Úû&µâð8ÅÜŒW¨xd™"ä€d™D| ™a!‘eé‘D{ÎÇáq®´xúxäÒ¤lùïI"qx¢î?­Yß(-©Cz\»|OmOcàöÄi†,„ö’~"0ïù8JS$Râ IH˜ CûMµjãA™=}›÷}œdf='Y†ÏC’e~]g,ÈÌ~`÷~/5ŸÑ÷l°{×€p\á,>Ñ}’Ž›ieÅlÏöKʱuo×Ï3 ç«!ê±æª°tueºé/‘"µ–öÅ{úÛ×à#"\.ú¬»8Ãïƒ@nk&èÞ Ka ˆ¾ŸÑû÷’CÌ ¹º¡ï¿´ Ý_3F`ÈYÓŸ3÷Fö6úÜ—Ý_Eúø¾èþilål¦m­y£q;T²}Ùss`¢òs1_«6—S¿cåµabÈôª²v”‘eHò.‡š™­,¿ð¿Ë~7!SÌ–A¹!†”hÛ*y¸ß§FæŽÁ¼æ&×.þ™dw×¼oMN q¢ÏHiJ÷ï¢ñéó!‰X ˜[u0rGã§ã¤)½½ìs¼í•ozO=,ûWMTØÓ¡Ú·ãlóP÷A—Ï'ÛFx}ÇçhçD0ÛóÏC¬q†¼I‹$ô{Àkî¾ bá_|å1e‰»²4ônж/$8¥Ÿ‘F•¢•ÍÙ m­Ò*=„ÌO™;ÃVre…Þ£U¸ü¨ýÔ‘ÃÚ˜cAl:–«êð(ßÐZæüØ«¾t}ç׸@‘Ã/†n¹™(z?I$öS¸!gD>h\ô>íG:¡f{Gißkeve¬íúBÍhýHªk—ÂËzÊCÊ<­œf’í 0ÛfœeêJ‹³ -!êc@}çZ1oè狾—Ý“é÷ªù4ü^nóÌ(Ûo_¨ëÇum毹ßé²í¬ï¹þ;â.öÙ¾c„ŒÙgm/í{R&`)Kî±2a“&ÚÁ ç²ì`·mSNô\ÒfÏE¾åÞC‹÷[l»Dÿýù8ÙÃL2;0$°ÆÅáþZ~Ê2À÷ÍïU̇åŒTÙ®èoë=Nå·Z#©RŽÊ9&UÆIäÂÍË1¿sÅ©èï"TœgÚ_a± ³KG¼Yð1÷­"Ôÿ^ùƒlÐ6R“¡m UF볌ȸûPR@À[H“ã±W‚ ’’Øfwn&µú4ò~ÌŠ-ì¢ówFW÷†•²ÕÓJæÙ‘]ƒâÒû>o“®ïê¹.U1,a¿êöV.MM²¢m£ŒaX.Œ›OCŠLr~ÖêÞËï7²äÜU%2.gÁeÔãVÿhÛåÙ Ú_•üŸqíDœªÜ;¥TʇÃïËUluÉJÙ~ :GD•ë#›Ð³±ÆäQ7ÍœŠ”üÍÜy¿ ¨RT¡úÎF[ŸòåbŒ°ÔQVôÊ>?Ö6,ì,¹·£’G •–ªûh¶6°þú'uÊå¸f¦ ^0èA:Iœåš™F% ëX/ÇëáŒà„'“².ð€`\Eç2ã²Ù?úó Vµ·³ŽgPrÿô!ê”™KŒûK™.1°LPm ó~cܱÇ\\ä ¯JøW…½ h,`ýõOêøí—ïÓU¹.+¦yÍI©FjÔ¸”¸Økór8¼‹ay(Sµ¥>5¦ˆûN™¹oˆe 2»T<Èc›:„€ßhVݘ5lHyÿ^έñRBð¼ûîñ8&:>áÁw*LÆ%¿îSLS-¾_P«Ù/\ÜÝú O³Kï<ë’ʦ„óƒŒËî•\:T˜¯zJ/ U|ýpô<`aÞ¿4·–Qnž:ívoLáñ¼o9€ç{X\\„O9š|ߟàø$‚°õ×=Ž ¬;2ñ¹HÈïLÿ>Péþ4r“ûïSÕf³~Û*ßÿrƒïûì}ŒcêgXjõ™Ê+?hΰ”ð[óØøÐ±ñ¡"Ð¥‡«~Öú9h› Ú;öçè<’Wåîk¢¶Ž³/Yáõ)^}ñI{Zc‘ìX²à½ËdkÑ‘¥ùÉç>þ‡€(}8NÃ)hÏxÏ·®ca>˜Úí³ìÖäy@{Þ¯¶_f“”@k>À‡Þ¹½s­1ì§ã¹DhÒÓ à=àÀÄ•™° A‘m¬¿öñ3æž×…Ïîmü~Í£, îôº½'û3ü¿¢m†Nñ€{ÏðQç,û÷øeóU}ª ‰™ …7®?†™ Uz¼ËNæÎBF|ßG·ÛE·ÛE†S³ù"ftºdFJ!м¶+þýh¾òð; ýêÂUqðË>;Î6gõH•é.Á_Tåš «¶x~» 9Ñ+Ø·¿Ð®öT3¾¿QæÙóàwÐ|å+°þþ÷ª¾0BضéñôcÔù•o%¯ô3"莽B8±²â¢ÿØ#íÖ!#EŽøM ht4:žo;0äÐô…ȹûƒŸsôÐéAè sÁæ‚<ácÆoa6hãëa.XÀ¬¿€¹`A—üαؼŠ7­?™`ÞzNË)€”Z™)W6ª¬)Œ¤¦høB ¶vÑž ðþo»‚k«M¡”—Aª‘'€Åv€Å!ÊL™Í­¹ïýÖ+‘ó´u£Ì¾ÏŒ;Í£NÒ„PÅq©BB&ETFÛÏ {{¯ð^%Q~¶¤ýï¼”á™{aK߯Xè¯ÀŒßÂ\°€7®?†Ù ¿OøÖ÷Ÿß„n®;,b>XÄ\ÐÐÿUuÊÅæU¼yý í˜WW_ʜѷÏóQ¡Ü¹P÷ß`èÂQÙk.ADŽç»LqW ‹>® Dñê¤ðtóÍ!wM„ð y0c [Cç]û™³a9 t­óíš­«Øøú¿ˆ«oø>4æ¯`íu![jÎm¬¿þI4Û×à7ú £>Ç…ÕÚ$=\<ÌöƒwÔé ¸™ …7­?Ž+sà›6>€?sõ/`±qoZÝæ+0ë·0,à›6¾ß¼ñýXl^1Ÿ_l^Å[®¼Ýæ5Ìú9ÑÅ)Å^w³A³Á …¾ÙŸåJ‰Oû”“²0µ²[f{.À{ÞºŽÕ&ÞóÖu´ç~+õµ&Þ÷íWКóÑšWªßÆÝŸý¯À)Q{<Xlè´‚¼,€vàñµu´‚Àrñ8É™-!"RFH\G€¶£×¹ãB¯}†;%EÎŤBȪ8@fl~ÑýPÝ;„˜{ˆ:ß쟾/æ$¹÷Áh."h.Âo,Ø÷ÎÂ{'PüŸû¾ý™ laã ÀÆ×ÿE4[šê¸Íö5\yý{0Óº†¥æÞ´þfƒÌú-t›×ðæõ'puîQ¼iýqÓ7¿Ì£éÏáÏ\ý^¼õ•ÿ=ÞúÊÿæê_ÀLÐÆbóÊPr"à™…–7¯?ÅæU½øÒ.tÐûÕ ¬P ×iŸÂY€²j+!ƒ”&ûÞ8™`o\–šWñƵwa6hë…#uîi eDOÙ¢ˆá¬¿_“HNŽúm˜ñÛð`oë _ßÓŸdspñJ ÿî/.." Có]<Ë"…K:„9ù`÷Œ²cðûçyð}abii aš}˜í¦=%2“!XXÀúûÞ‹Rc|~§ƒ°»¤þ--Á_XPÛ½çÝÚm47®bý}ïEcãªy­¯× À‚`aA‘ !rçÞ÷á·Z:¬¿_‘áûyn‹êóïoî€ó§®çåÄ„y }Î?)z&ÜŒlòÏEäPú¼™¹pl ôO²Áœ¢ù¥ÏêãH–Ù,„@¶!D¿Ñ†ü&{èу‘œ{ÏGÐè œYB0³ˆ ÙQ¿!-ål·6òùÐïå÷¯¢«0ä“¡üAZD|œ×(±_臛”;I¤í m“,Ùµ&j¯sÝG±þú'4Ûð›mzÜ~³“ëÁÎË>·`;-UIíµ#h.(§aF=È©ºšÎcýuЬÍÂæÂæüfîØ7ç¯âÚ×ÿEl¼áðÃy‹0ú¶r þØ»Ñl]Õ—°&Lz.f‚6Þ´öfõƒ×}¨¹+kEOZi“ç…®oYR‘’`žð±Ô¸Š7¯?ަ¯œ‘Ù`A;*ïÆRsKÍ ¼eýÝXl\ÁlЛ֟ÀRS¡éÏ;NAùª"ýÌW½>{‹ÂßÈ¡ù¦ïÅ7]ý>Ì…mtÚ¾•{’1¥ä•ë3è´¼r}þ;”r¨.-¦Öš LON \$ÐiXZPDÂ}F Rc„ÐÊL oRÝÞD®ìäÛ ,êÜ~«Í2[í¡ý·æ|,¢ä[DH@‘–mßWÍD¥DËW$g!Ðr”›¢@ÉQ\×1 pŽ••¬¬¬ ÛíZŽK0ˆ¸¬¬¬`yyÍfÓ8œ‘ ×ÙDœÊVR}ß·œtìF£Q¸òêîo±Cvä÷ou¯y"_ôh. h´l‡Sä $ŠD\)»RfðÃy\}Ã÷á•ÿõ_Æ+ÿëÿ×Þðýh¶®©{»·³š{uÐX0$(hгJ0õ8¿$=G h¶6¬›õ×=ŽÙî#xèú•ߥ†ZàhújaäêÜ£xóºrˆ`Æç$ÁÃl°€ùp sá"æÂEÌjEøM}äÄ^Àá„£Û|…ZÄpöïg>Wš©4)ÌôžZ€ñôýD9÷3ZµÚáçê Ý“l2”Yár´-©V®ÚÒd¶Òù1JVÐÆRó¾ùÚðÍ@·¹¹ ƒ¹ ƒ%M9Ñ“È0´ðÆõwa±yo\'ø†µw*r´þ.K­FEë¨ó4ÿ(Þ¸þWð kïÄbã Þ´þ˜ED‹”šü~Ì5þî[Lò~¯†“w?|ße UÕ•ÅÅEsÏáä„~q_vïRŸ®43ÒÌ€h\ÛÀúûÞ~Î<½üùy\ýàR"ÝÛÇö?ù‚Î"š¯|–ßö6ø­y„‹Kð;ã̧''@šb°òöïÄÖoü&„ç!X\Bó•¯@çO#¶¿øHޱöäØûßEçß‚Þoý6šÊɾ󋿄µw? ?ÿóðÛm4_ùJ¬¿ï=xñg?™e¾™¦ž‡þày¸ó‹¿ˆtoþbËßþm¸ûK¿‚dw7wÊ™ƒt:Ê‘ïtÐ}ë·`ïw~ËoÿNøíüNÉþ>|M@¼¹YCÖ×6°þ=߃ÛûAv|Œµ'ÇÞïý+_‘†tÿþü¼ºw°ò¶ï0sÀIÑúûÞ‹¯ýÏŸCº¿æ+®aùmoÃÝ_úeÄ;;ÊF!tt:F™!â' ¬=ñîþýEHONмzEÃV«¿á¥×®¡ó–7¡÷¥ßø J% :K‹z~ß‹îóIŒôðA»µ'ŸÀÝ¿÷÷!£B‰óèl¼{/þkuýÌ_Åò·¸óŸÿžé\/„‡ÕG¿½[ÿ k¾S“YÃo´°òÐÛq÷ËÿÊiVS¿ÑB’Aݨ›­«Xý»wþè—qztÍù«X~õ[±}ó·±þÚÇ5qè¨ÇMr ÏŸEšƒšw¡rˆ“øPõÀ¾òú'áù³z;õÀð4;úzñµ2ã1»öᆒ34[×°þú÷@f1š­kX~õ·¢1¿Ž?ñ}ˆïíâ¥ÿø·ÔÜ@ à3^—}–€ßhaíµïBïÖ?Ãòõ?‡½—~_í?lcõÑï6ó(efl šê„-¬½î1xÁ,Ö_÷îüÑ/+å©•T™e¦k½ß\P6ÞøÍüF[wì^P÷€æ–o| z7ÿ©zôPUÄãO.+þÍÝ_ÅI²Y¿(»‡†7c~ž¦GÈAÀÃbó*þ«•oÿÛú-'{¸—ªŽÑ<4õCŠÜà)M¤Ò8±Â›WðÍßfÕXÒáfÿòÅÿ¯& &ñV9 ó8M̓X½6‡(;AÓŸ q’¨•ʵÇð‡ÛÿÇÉ¢ìMpš#ôfˆÿÍê;ðwþ9fƒÌ ç3|è×ÐÛñs¿ö5§hÏ*µecµ‰|×5¤™ IkÍxÿwø»ÿø6öStÛ–BtH)qp”õåýÎà;ÿÌ ¾ø/·ðâæ)Ús>:-E$NO3”´Ò²oB ÓVßxüÏ®áK¿·w¿u­9Àßy {‡ ~éK·±”B›¯­5ñ=ßqÿË?º !€·ýßVð¿ýï»è´Àü™”8Ê2ET„ÀÕfoétð¥ímì')à Nà¿]êânÞÅn’ÀÐ @GYŠYÏÃI–™Ÿ.ñ!'Ò45ÎÀÁÁ²,C§ÓÁññqŸ“†!æç籿¯:‰ÓCž¯¸ÒëKKK}$åààÀ|&MSËN’è}Ïó±“ãû>Z­–±Sê0oN´ÑëõÌ{t:߯ó<,,,`q›ã‘“帺ßý±wà æ6±ht°ôªoÆÎWÿyþüo´Ô‰^`ZÝ“xñ?ü´=‚Æ‚ú|SÝoƒ¦*]Ÿ¥§ð-¬^ÿ.l?ÿ[8=üh±fù5߆½ÿò;X¾ñ­†ì$Ñ^ú ~8•×|¶žûG8=º œ„)Se8Ô½™BÍ ßS÷Š ÑA(Žã]Ìø-ø"ÀŒßV¤Ãoá(ÙQ÷t¡œhˆüþÕôçÍý˜Ô‚Y¿­È‚ßÂ_ùïð›ÿÇÉžR¥v{úž¦Zæp”ì™ûÜ›ÖÇïßùUü‰å?‡göþ5¾~ù­$þå‹ MoY7$$þpû·1ã·ñ¦õÇðÏ¿ö Þ´þ.<³÷osŸ»ŠG:oÆïßýUÀ›ÖÇ¿ÛþvN_4¤@'EŽ “<áãÖ¾¸­ž÷oXþüÛ»ÿ‰Œg'ŠDi6ëw „ºÿJIDçqs¿û¦˜û¥'|¤21D/ÎNzM£ªø:4Ø>f‚ܶY§é!Þ<æ‚­¢µ1´ñ–õ'‘ÊsaóD,}EЉÍh‚Jc'RH'ûæ{Ñl†æûNß9ß÷ͽ`nn{{{Rš÷ù÷ÓÓ ·Bë5®lìîîöÝgÃ0D[/\÷z=¤i ß÷;:Ç1Ê „0ÇRšãÒ÷= C,//#MSìïïc~~ÇÇÇæ8Eê3íO¡~z´˜:=B3Õ>3BhgŸ?ù´Ã@«7ï73ƒõ÷½W9ëRbí=#466ÐùÆ·àîßûUÈè"±þ^¥²lüà5€?7‡õ÷¾þÜ‚Vw~åW”²óçßEð´*ÔjeüÎÖŸ|Á‚úâ5_ñ ,û·Á_ì ÝÝÃö?þ'ð;°ñƒˆè$‰ $‚00ÉԓƵ ¬ÿù÷ßS_Þõ÷<‰öóðÚ•È•“æµ \yß{õ1ñff°þ䓸óK¿„µ'ŸD°´¨ßùylüà‡Ô—#Š)B©IK‹: ¸ò=ߣ[ Úm¬½÷ÝÈNN ÓœHu¾ñÿнßýWðÛ : è~ËŸÃÞïü–¿ómý!pž~N©^ï{/då¹PY¯5+/Âå®R§²L‘»o}+¶ó7‘ŸÀ_X@ó•¯TDè·~¾V<3 ¯„çÏ`ýõOèþ+Àƾ_àèÛ7Ac ”b0³ˆOz ¥%œY4«(¾Vh¶Ÿÿ’R#^÷¾öïÒy°>;ÿùïaýuê¸j%°… ÑÆÆŸøâ{;¸û•_Ãòõ?‹»_ù‡Hîí h,`ã ¼ø‡ñ邿"Ö_÷$óH¢}øÍ|õÌo´påÑ‡í›_2׌ ¥x_ûÃ_0D+h´±ñ† l.ªy> S«/¯úÍÖ–o|+`ûæ?Agã-èÝúgzžQS”º¢˜Î“i¿©T™°©çL¦fLŠåj ÍÊ* HŽz Q˜šÔçòIøá ƒ~½â ™A_­Â6 ´RE›ן@ÓŸ‡KÍ«øúåoÅnÿSüñî‡ÿØû_ñ†å?‹?Üþg8Nv!„‡7­?Ž¥æU|óµk8Nöðûw~'éfý|ýò·à+{ÿª/¤‚ e’ÑôçÌêÞœ~»92´ê÷ kß¿…ãdOÛ=7®?†?¸ûk8Žw³á¾aõ»ñzÿ ß°öNxÂÇ¿¾ó÷ à¡«W'ãþàî¯ákïüÁÝ_Ãïþßñìü 4ƒyxäIiª‚@g>€'Þý-ëøÝ· Ï:mß íÚXiâ»F‚+æf||ð»¯a÷0ÁßùÇ·q|/ÅÆj?ôØ+ Aê_úÒ¼û­ëè´ø>¦ ó>öd™, %ØXmàÛ¿qðw ‹š@-¶Hµ:-í9ߨ%°w˜àÿî¶ÞG?ôØ5@ó³>^ues³> €ll`'Žñ«›wñØÚ:®6x|m³ž‡kM¤ð…@œeF¹ú»Õ B|àꀲ½o\ìà÷ööðæ…~»·w.¯ uŽöÐétŒÓB=¼ C@h%“V1¡÷E¿—©-¾ÏÅÅEloo€qvø~Èñi·Û–Ä)%Ò4ÅÞÞžqZh:ClÜar¢È.rrŒÔݤ1ë¯/óW™aíu#KOÕý¡ÙQ‹$^ ”¢Ã\±–€ßlë…·µÖçY….¥âÊ“€@s~WþØ{ðÒú»È’#¬¿î 4[W1Ó~…¾Gzæûî7ÚXícê^×x7¶žûGXyõ·Áo. =ÝÇöÍßB®Ò…¥)ǾGäê¼R):ÆN~ÿâ+ý”Çýꬿ`ë“dMß´ñ½þýöoÁÓJ Ù!‘™ûÒ\ÐA·y oYMÇÉž¹'-57H¥:h<á£éÏ£Û|Þ¼þþ,àÍëO ‘¹L¡aÿâÅ¿©Iƒ‡ÅƼaùÏaÖW÷Ããdÿvó jÁçšZðIeŒ™`_·ôÍø½ÿo\'f|•_øMß !’,V÷Vá2ÀÜgé&r÷0ã·ñu+ߌÿ´óÏñuKÿ-þÓÎ?G¦¯4R¬‰ÍøJµù7wþ>¾aíh…]½p¤æyÆo!CŠ7®½ oo\{—"RRšóuš™pâuû—ÍÜÀïÝþexBbvv÷âÌ|oˆ´ðï­”ÒZÌ E½=õ,'ÒÑn·±··gH uïüžÂ7è^ÀïEÛÛÛȲ¬ï¾Â•$ß÷‘$‰¥öðû˜çyXZZ‚ÂRhËÂÝ赡aòç„)7Í,È9úsI¤4?Õk- M±þþ÷";=Íëßû×&dH‰ù, È):­$:Ÿe^)",#ètà/.Záfþü¼"[í¶ú[“s,!ìîÂo·‘ìì–çì€6×ãÓOn¿ÓAó•¯Äò۾ݷõ÷¼'W®„°Ç@sÓé XZBÐ]B¸¸h…}É36^UVYLvwÕiìz|q«³ÅŽ!M3ׯ+ØVDƒ1~îHY1¹AéŒ5Ϧ B§c…Æ5µú´ý¿‰`¡¡…_ÇYËÌ8Í´B@‡ ÀZ©£}K~=1ò!u\4çm9ƒߘ×ʃº&”S¿„ I«î2W_šH™æ¡ÂÓáߊP(ì­¹¨ö+€ œÇÆ>,‹õX4;Êž`NÑCÐT«’ts }ùÍNž;ÄH…:†–_«*~£•““`k¯{LWø@0£Ô§p.w tܺùóï³ÚÀ~_Úó <=G<ßÉÚ'){íãŠl¥‡˜ñÛ8MÍî©T³~›­¬uL˜Âq²‹?Üþ§*äBÇFÏøófµOÀCÓŸCwæQQ÷LJW©8”‡2¨H¢ VU¢ï¢Ùv.X4a&sÁ"fƒ¶V|¤^YT*É|°ˆùP}n.T¿ÏêB®*dÌÇû¾ý ~óÛÂ+ÖUîÊ\Ó/ŠÆUª»å.´|´ç}|Ïw¨Ï+˜ï -Ë …€½ïÛ®àïþ¥ò¨07½ºK䪥¶™ŸQã÷}ëÌ4=¼ç­ë˜›±I–k×¼ 1›ÓŸ%Â&¥ U£Ïv|KA€ßG Tˆ™„Rmè~Û‹c³>Øò}ìèŧßÇBàÝ늽ª9ƒXJ,– ´gf9«JÀ É( íàê a”<þyúœû“¶#‡¤Ì1t|þY"-E!r<·giiɬÒz&ÙW+#¯þVFJj²¼—ê{ñÖ^û¼`ë¯{Ûω¾L ¼sï^±@^LäI«Þw¿ü1¢Â$Úß OÍŽº O+Gï1Ç¡|¿üþ[޲{ÄL@$˜ æMÈRÿv9€7®¿ oo\þå‹3~sÁ"#Cs†Àx,LÝÕ~<øfÿyȘºg(ÕA”¢ÙÀ®Ä6ã·qœì2fŠ¢ø &œëMë›…%ˆ\a„Q_ãžV×såJè,Ê‹9–»˜õ[j?ey:ôÑûRj•Ry<(ÿJå?>†DƘñçቀZX¬¿`å"ñ°8 i~Ò9yóúøwÛ_R+æþ<(Õæ-WžÄ—þ¥þdÖw­ÕjáððÐúÞòÅRY‹¾³ôâß±²ïï ¼;Ú^aŽå†¡òß‹ó‹Ç Êeí¿5e2SEUµX⾌"k×Á˜-LR(D“žÂõçI%a$‚ÕÝœ×6ÚÏûÞ‡Ûûo#;¹WLÖJÆg‘&¬n)W¦0€ ¿ÖêåŽMç¸hÑùÓ߈½ßù]uSbÅüù9À÷ijiùžw[¯÷Á%qeóL˯ ”?äÏéýšŸ+ÈIqi–T¯VêìHxJõCí¨[û Øim‡~«ª5úúÑù~cÉé>KdÏ óœ›,?¾~Øa «_÷Ýg–,Eƒâ·å½ýynOn¿oÔ FÎÂù‚¤W7?Ç&8~Øbda.ùÈI¢Ìö ó€^ØÖï”LKó88QÖqgõCêîþCCD(æ{6hõ­¬yP«oÒ! ’c¾ÚÇ`æÒ¥ê:g-8 ®´¢ª’~ÿ‚fÖôçòÕ@ÀR|”*4o;9lœqvZh—ÀµÕ¦"³>|¯üTV3Ä|~Æ794@^zžRLŒÊ#€ù9õÝúÐ;•¢Ùš,;ˆ„p2Rfåë”=`rbæ4‰é»ª¤4$¦xr}¿tçŽ:Ó"ϵ‘z›0û| Pqá˜ÆƒÝUw“Ã$îÙPô·ÙžÔd¶ˆ’Ÿ¼ˆK~/–ù‚'üÞ5èYj ‹¨°¥\ÝÉ •ëYÀ ›˜ã¸÷ßÁ(.Ûîi‡½<§¶ã÷!"³~Ýæ5|½K£×ø¾8âd‰/θÇ5„%È•"J¶Ï·Él2æÏã$90÷]J´7Ç’”ŸØ2ä€V‘Z&œ®ßÙ§~—öE÷÷Ù`oZ{ Ö£¶XäÐUÍŠÏ«´“Ut€¥ÆÞÜzB?ô¬ï ï WkŠÞwÃNÝ÷Ë@ßu7?Ž(÷ÞU¤ _Vr2*.™v1X*G¼‚°67éœBʶ+û;7D‡ƒ½w~åW†“×¾öãzÅ¡y}¯ ú ÛN‘¯÷›ÅÌC)á¾êoîëCÎÍ yî{ŸE÷xUa’7*c–c^´?RyÚV¨VÑç­‡!ÿÜë‡Ì“ÿ4::TJ‡ù5´Š“ÙÇ•Åû´àªÌæ “bÿÞGRä€}ŽæÌ¢TÍn³0aê8g­dŠÂ•µ¢UPµÇò¿åÖr‹mU‡;3VØúÉTñ‚~'GÅÔ7É”­f:SÍÀ8Õ„]A ªgîëE*`«(ç]]È«••m.‘W:›ó}, À_ÜØ¤"Bî7 h—åA_¥\ó0¥¨hËŽ?Lr_ç{<¾êWöF\ªgøƒµ ÃTª½ÊÞw˨"]gm‰2êWœ[Òy`Ø!]‚ÒÑ!hrÌý]FœÕ!™¬#3ê½lÌwÈÑÐ…¡³kJ¨z/:KéàQö]…ü¸ïÓBÔ Å—ªc( ¶¿óšSÃ*Vå;X¤ˆŒûÝö™ªû|ˆ p¿’™‹xj±Ç æ¼_4F]*„QÇæ†žMê\V" sY  T}¸V=îË “PLF=Þe·ñ,¤ë厗6îK<(Éh(S½Ÿ1‰ï÷$ïã«*‹/£ÿ²Ý÷¨r™[ýoØgä0¯‹ÆýGf.1pí*PÎÅy¿ wlã„’U3è"'Ãþóy¸^îç}Ú6^湨QãâQ?ŠÔâ‹Àýpÿ>+xYæQ>Sã|p‘™ËN ªæ°„„'â(B–&ð„@à (ﶆ Ïó¦:3S!3Rl¹5 Y7¼¬Q£F5jÔ¨qA¯>ÿed™D·= ‰™‹6éÒB“ã“©©WSSf _HQ³Ø5jÔ¨Qã\PôŒ­kÔ˜â(xµ*3Âüo:˜b˜™@ÐhNod5jÔ¨Q£ÆËÀá1pp þÎ$àio¢ÝZsu5¦q|2µcM‡ÌH‰ ñš×þ1„aõµF5jÔ˜ <òßü²Ÿþy`ïòð¢Õ:mxŸü0ÄŸø¿YzÑVÖ¨Qã‡@GøÃÿýßNMžž2#ÂFC“™5jÔ¨Q£ÆDñ'¿Ù#CþÖÿ88îBü7ÿ¼?ùõ@`š‘å5jÔxCØ•ßÎÓ-Í\ 25jÔ¨Q£Æù 5ñØ;€…õ¸]XP·æ/Ú²5j¼œ0e¿î3S£F5j< oúSoþS@šB¼ùOA¼éO]´I5jÔ¨q®¨ÉL5jÔ¨ñ `~â»ß\]W?çç.Ú¢5jÔ8WÔd¦F5jÔx€ ¾îõ¯y5Ä×½þ¢M©Q£FsGMfjÔ¨Q£F ¾1; øõ#¾F>ê;]5jÔ¨ñ ¡îçW£F— j2S£F5j&„¸h j<`H3‰Ýƒq,h‡_Ôß©£—$øÉnaçvxS)ÑKâš°Õã®Qcúx¹çíÜd@í˜×87HH%uc˜¬½žW'kL™”ØŒ"lÆT—W°/'¼\Ç}?ãå¼Ê¿âå|Îî2S£Æ9@Bâöñ3øõç?£dç¢Í¹ôH3`k7FšÊKå˜\ÆžËhÓe†°“$øÌ / ?xá‹5./‡0ÆIáå¾Ê_ãþÃ}Ifê‚5&…ø‡_¿ùiÜ>y²c¬.È\Bs“ö{{É¥³é"I‰­8ÆV#âH¦Rb;ž~8Ò´ÝTJìÖŽõTQç팆—ó*ÿ8RÖsv¸/ÈŒpêº Àpð9£0*ùÀoŒ)SƽšÈ ) Rö“Ê¡¹hõ¡(iÿ"•)»;îöܼ¢ªè% þê³Ïà¯>ûL¥|˜‹ ÈÓtt„Éz¹8ÖµèA$UB‘êËš·sU£Ëìœ'I2UÕ¨hÜ×Ò4ÅÝ»w/íœ=è¸ôdFBjg3¿@.KA€‹Pˆª“Ï™€ÀQÜï?ÿiÜ>~¦&4—F_¸<àÆT.Û‹­Ô5!Ä¥ªjæ&íŸU­9ËUAóÒÛá_¢»,×$ÑˤÄfc3Ž¡HLÃÑ“Ótt…v¬/@*ÃYçxÐç%€í$AzC5$5Ž/uÞΤÉtvÖó™¦}ÎùeqÒÓ4ÅK/½„—^zi*6Ñß‹c|æ…[è%ñ¹Œ×U_v’±”ØKÄYVJR/“âV{×6úÎmÆq¥óY¦8£ž¦©Qh¦‘CS…œ*CÄ!MÓs³+MSÄq\¸ÿ"[/kÌI’¾ËBj]\z2Ca@™L§z¡T e#…(É"'{Èd¦_;»“]NZŠU)Úþ0îA"3s¦ eÖ§p],Ò•ìàŸùaüâ3?<2!¬C Ï)#0€ºI§™rÌÓÌŽ7›VQ3R2F.¤D)áðÄø!´ãÿsã9üB¾OÊÕóçJFÌ€/õù™çñå¯ã<Åm ¥ÚŽcs†)@ åÓçQÖ×rĵ³½EæµÂ±L€P ÛqŒŸ|á5/Ã$æeœ96¥´ãx ²uÞyP½$Á§nÝij''ØÒçò™ãcM x…÷Ë”CãªFãÚ¦ hÜÂVcgÈù,Sˆ p…a!gUŠpµH4Mñâ‹/žI¥)û\•}›—i:þî94¯ãÚu™ CL•ÌTu,¸Ã ¨0 rЧ…A¡l™L5yI!„¯Ô£›J¡9Jv&âd ¥+˜GÚ^‘Q:uÂ©Ž’]|Q“. Ã~´‰ýhsd’uYB å–Ðê¸ÐOXåÜ'Ú1O.djg_%ÔßéÅØ=H¤_~áýÜóèíÇŠ¼èm¥¶öÔ˜Fµ”öÃÕ•Qš— M¥Ú‡þ½l®Ï EäOmß®ÎòÔßçaSª‰‹•ô/ò»“„r¾øû‚«7º¢Ùy„ñð£ ÀŽƒãǥ½86+ü“!ÉsÜIŒa}yøÓyF>òRÚj,üq²Löܹ!TRJ<{r‚Ÿ¸u›qŒÝ$A"%zz› Ò"Ç„‹ì}ãQQðþ¨¶I›qŒÛ¬¼ù°y/Sf.*Tj˜“í-®ÌŒcó 缊ê3(Oæ¼~Ìaù:üõ³Øuž*ØY152“Q¢u…[8W„ð „§ ÃÓýáfç áë(Qä…l‘È4yÉLÐÉÖÇW¡cø/P⬚Ësmb?ÞÒs%ÌãÍÏÅ“³icáu®Cm…”i¥#“™Vbd¦¦š+3Ól1£Žã¥ÍSlíĨ܉ðÔçoâ+/ãã?û<þèæ16wT8YšIì&¸Û‹ð”Ηå2á$ð½â¼ 4“ØÚ‰qg;ÂÖŽM¸#uë&ž99±ü‹Ì¡q‰hÏÉ)Ƕ^ãénṓSÞ|ØÜ»Ê‚«|Ü/8‹­<”®èu!„E¢\²7ˆL—2à ÙSUy—\öS!3J½ØÆo=]ª®d25¡F¶Ê¿_• M âÖo«"/Ü)3ìG[ضΔdÏU©çä Ú4j†0.ÂåºÑT û¢ü§ƒh Gñîò]ÎoÆ% “Êå5gªe*€ëPSH™ÌÔ ýG?÷<žùê 6wÕï_~áYFj Ë“IåT<½é³_Á_ú©¯`ç A–)ÂŽý›;‘I¶ïí«±Ý݉ÐÛ=ß%/vÀ×MQ^ÐÎ^‚¿ô׿‚'?üŸð—þúW°³Ç$DúŠÎÉÙòxFAšÁ"O}^‘V"iOýÜMlîÆz®Îß& w<#)±“"b‡]·#ÅE+ Ldö“.ˆ"£V¹™Fh9¼\mxîäåÙgð—Ÿ}ÏŸœ 7Á¾<©„9/UUBõ ¶jC„qt{lõ‚Ò¦.ó½GÖöBV)îô’ê|råÆU²¦ù$%BFJ_¬Ïé§nÝ«ƒOù,™C&9éRÊ¡Š”Ôû8ˆ7-åml;KÈæ¸à×׸99“Êå9Jzøâ­ÏèósžG ¯+S\‡ÚÓ+åR›;1þè¦ ÝÚ܉ñÌWÕïÛ{1)?Ñö£M|ñÖgqûøY|ñægqïÀc!igQ°$$n?ƒ_þÓVR>¯ÜFao4ïù1‡W#8Ã#„“MC€ÏÊÉ¢ýŒ›“3©\žLfØ·°ÝÅKÇ_Vç#ÞÑa;Õn(ƒTrÐåüǩė¿zŒ}îylîDØÙWÎ0•fŽciöÅÉÃ$0´¹¤PÄÄóÔ±·vc㨻ã2½MšÊ±ˆ=©”üïÅÔ‘Múç0â4Íg¤‡'O°¹ßK¦f#­ Käá^™çׄžN|æ‰ßîûnè«ÏsË‹0reÙÈì?oŸêü(ËÐÓáxä§È AÛJuÈÒˆ“™²•ü~2ÚùˆcÄ‘Šñö‘:çH‡Œ„:Ã, Ϣר¸D]]/ÉÏÿyçgIF´èZS!J¤fSÔ“·¤_¯¤°¥)NOOqçΫï—E¹B”*"〕ÓÓÓJû4ç©bŒ»o’vÖã_†kÀÅ¥ªf¦*níTJ'gV©£¯‚çJà §S¥CÞ9~¿vó“¸}üŒrôu‰c÷Ñ+„Oøª4òͧϠ0ÕGKç\ù9ˆ·q”ì •1âMìEw°m!• nç%˜}Œ|dCNžµIæ¡™ £y·ËgW»¤HÉ9Ku5E6Ÿ1x\ðœ¬#¾Ÿq½» x…ŽcuÎÿÎWþG¼tüÆÛÈÌÚ[USÄ€÷)1ù'Ÿ»‰/¿p¬T ö17oä,UÂ\ j.i*•±ŠjÛ»*4ên/2¡QÜÛº7Z¾ ›|@Ï"qÊùpm‚È•£"EÈÐahÓà 9áƒ.Þ ŽZÄÉ(éÜBEñ"–Z)ÏCÌ6ãøL 9âqI¾MYBu&¥ê6|räõOžCB«é?që&¾||<‘ü™ŠÓh†›ó¨s¼Ǻ9鳨#d‰5"N£ŽŒçÑô’³åËÐøuK.ÿœ%Iåæk•TSnÌów.ënß5ª<ïã9¸L„®ŠÜ^NpŠŠ;LEE..™Q°¿<žðÑ—,Çœh9f8”GÉ.ö£Mµ"?DÝ‘*ì'Þ*áêtž•[14ú‡á¬Gq’“ʇ:¼M12‘aÖWØÈU¥”"õÅ[OãÎÉsø¥gþÚ€þ1ÂtÈpö/ØÙçšt¯¼Ië„1(‰«Džðuëø9w¨ûÕ »üò°ýŠÄø¾rø}_@b|çœrTT¾‹r¦)´í£Ÿ{_yá€Ï!Xˆ!WB©ŸVyÂT²–+ª¯ÈmJ3‰»;6wclí(åˆÏ³ ËËûó¤™ÄÖâ8.ìùKðÔç•Òö©Ÿ¿…/¿pŒ§>«´º›'€Þ~2Ѫfyþ‰þä!cá6»i‚Å04¥±{”»2â*uUÛªî²Ð!†vÚG$>– å@+N9‚ÜÎ3Uv‚:/‘½¢\&%ž99ÁOè*fœPøB 6à¢*CåñP9`;n;…p)5y_šgŽÏ½œ5d- µ+ÊíñˆLðrÏìŽÙ袒¾/k(SÛ¦™WRTYÎ4H×e:G—ŽÌH½B.ejVì•ÔL·A‘‡étš™™²ÊUÔa­£Ð¾ª~œ9pUÛ —ääD$¯ï?É/–0¥²‹J*AI²Èä¥2ÆaÜÓÄ%s÷†‰ÞµK@•òò|ÞÇHÀ&~"W¦Îù17¨P€,$zg«ÜfHøì/°²"ð|Æá?‹s.t‚m“¿¡rb¶wcĉÄönR¢(8c²¹<ùqDNöD1q£ w{1îîD&dŽÔ+R|' n’à0I´2ãü,šRµîöT1€IV5ã¹ î1‹Ô_Pa@›ºbÕÈN˜PŽâÞ€0©í‚’Ç”fRõ{æ‰Ñ­hŒÃ>ENð$Cت4ÙäjÆ(c£*bDh.yµ3Œ<)¡U”›}„˜ö¿ÍrPxØÏ“¢×}‘ç ‘V42Hér‹ x°‹œ—Ö‚«ÔE?‡­®OÚ!>«ó{E`R¹5ƒ0 òW4®CïŸ'Ù(«švQçÂÉŒIâוºhUz?Þê[¹¶’«Ôïc¬ì÷!QhÏ0Ø 3'³’oçÙM8…eçðDs£~¬æSBXò"YdòTx˜˜é£ó‡(ï#¯ò6ýЭ¼RÞ3æo:ÿ¾ðÑi¬ ÓX'<œ•4”Áï¢óg&Oô&µbøz?²_)ÃÐf‘¤Xìæ*ˆ›«3ÈüÀXí†g£ ø‚&ïe"O¼ïí%𴺳ºÂ×ó•fyÎIK2ã¡y¹:EóV6–íûÉÄCà¨qîŒTBX@à(ÞÉósNžÃo}št…?I™b?ÞÂ^tqYÿZ=?ä•ò>£d×.> Ãñ<á›âgWeú ÑQ²«K-—p¿ “‚p–,«úo\T>ÍÔÉŒDf•SÎKÓ£ERsmâ(é¡và ß( €dagã¡ì¶‘É Ñ&âM³eÑg“müÆ­ŸÒNAØ7ÊaÖD)fÇäiá£v äÐö´0êI§±ŠNsp’ì#É¢‘KgȬüœ£dGå™DþÜNR˜¾¨‰aY¾&¥£žMaƛϺ,%ˆRf8ˆ¶°wzÛ"VfeV&=ÖœôìýoèzÞìñÛ¤GåqŸÖ?Cy‚?9©yCGV  àr%¥Ã×9ýî"ô=¬é°³A$I%ç'p}láõûÂÇÆü¢û¾@·`÷`Ì8æðóž,ƒ“éóc¯R8ž§ó|¤ ÇKγ٨¬Àѹœmú}ç´¨_HŠºÓgRªÒÀzuÞÂT¾#‡r7I°„•’®i>º”gR€¢,JIé%yˆW]ø·[ ò¤86M S™/ÁL"QœòH!è dŸqºÙÓvdã ÂU.ëyÎD™ÞkåòTÜ/D>'S=\š¸yB”î·JmgWSN Ï%RàéëŽÛå.—U:`w~šWØvÂßÜùFàËŽeÆ­çœÅOšÔ´ÜQ¯\G¼J3Ïqrl.S¾ÙÃÇQÔ sÔýKÚF™£Ë2Sï3“—õÝ5¯IÙŸwâ‹GÉ.¾pói'{ðôê¹dù:Ây‚ WŽâœ¨”¨?0ÉíÂq¬½ ·È¼ÔqžÇÁÃÛˆ%ñÓkE$‡Þ£)rú=áë9åUÄF¿•ó"‚å˜Xá~¦QîÔs%È76úè4WYˆWuxÂcã•VUAÂÃ±ÓØ”r§¨rÏù¡œ¥*à98ž“Ï@5?%Riª¥ÙM?•-©L&–ƒ•«ÏëŽöÐy)Ïc{—©𠦟ç{Ð"©&j0°­LÒ6”X·gWH3ä«DYંС\~ÉS? v|âçnakÔ¤v©ŽAùA¡/ÐÛOðÉÏçÉô[BßOX…Eæ¤dazc Óázq2$lÍ—{¡‡µnˆFèåÎ׊¤w§ïé[¦4ð3ØÒUÊYX϶î³›ÚN\¡Ý|•Z &E!Ynù^ I¢Ð5N<‘“%ú·$øÉ[/`7M8Åã@B)BÐm¨kb3Žq;Š°Åª†QÄÅ%§GuÆíÜŒbûûŒ û%ÔÐséÎM‘"R6{<NB‘¯¢2;t^ötoª¶¶Üh ô-%’D9·gY5?‹ã:ŠŸÆñªõ°m/²¨@• i|\¡¡ã’’qCÞÜù'²%!žd¯Ÿ³bŠdFhuE+Ѧ&1;Ø·tE±m“ìoÔ‡D9›žð±ÐXÆI²›;Š"w@ÏÚ4‘@%qâÒm<á£vµS®Ø–v¬=á,‰Ì}’3­Ž»ã„·Ù娹³/ØåB:aj٤ܹñà«‚FÉ×鸊„,3Òå[áo•« š=V»X‚K3¤º妙{5ç=kÎ’‘½L™ïhGñ.Y=tâMD[ö1“]Å;øõ›ŸÆ“çp÷ìF¨É6Š"ÄPâGU­¨BX®Äö7LXQÀ*“ÅáeŠ8¬èÕ|7ôª7$©ÝÎˈ±s—3îíÇfÑŠ¸¥š}_ Ùð°ªð•%õóÊrWVh„M[‘ÊA öTÖøã:= <»³¡€çŸúù[ØÒN99·0' ’T´‚øÂÊ¡02ÎVðO ðD²¨òW–!O’O¥®ª•7Ñô}a‘îŒû¾@SÛìk5„sÏ£dÛ¡§i&±s Cü¼Lj §}²éÚZW–v¸úUñ-A–IµíˆU*û?nasÇîÀ”c¦þ6\¹"2F$Ð÷Uå5ßF¡…ÈÐDÞ#ŠLhYê5®®“é†õå°°¯TJd¥%f=¨¼Oç iÈ {¯Äªã.# ªq'Ùf—ÏÔJµÖhrSäà&¦:[öFä.6}On›{q h¢°—¦Æö„Àª¶¡áyhx^!™(:W.xgzZ’"=Ÿç- *‰ì 5ߟ)¨Êå*"¬S½VÇÎ?ƒ´Ô_"sè#Çd¿ž€Ð!;#oÕ/ûT`?¥tLêV¥@ÁEbjÊŒºQú:3Åa¼c*beHá‹ÀT•¢´Ø1ÄUC‚†U*Ë›pª} á©\“Æ –S”¯£¶Í«b•­žç9B©!f©Lpœìâ ÞÂoÜúëºTm!<Ó_Çý×—x¡Q„¬“ÊŽ­íáUßÔÜ(Òx ´]ø^`ÞI²§‹.¨cÙEvàëòÆ™LšV yã!bUÀuïà‹7?ƒãd e"ÔçÀdàs]x9}{,%Ì ´ÂVí+"t˜ÚI²‡ù _8ˆ¶poZóa7{•¸sü,~ýyUœ@h·BÍÑ2¯aÎW³\pÕCêæ‘@î˜{"¯È•eyR{–ICP(ühnFåS¾0äÆgνO噦™Ü¿+Kø÷Ì*¼Pù2B唬.5LÞMo_}vk76g'ÐN9ΕCj œm«‚Wó aÆè{Êñï_(ÐÇ évœa˜*•}ìsêSÚ%o̶í€Mþ8øù "OªwWÖwJJκÎ&­¢»«ðܱÛIìÆI±#ÌTŠ9÷T7úÿñÙgð#Ï=«+I©2ªõÙ^€`«øEö6ɱœô!·/R_(ObÇ©NF×79ð¼<49æ¡¶‡Ô"1F•“‰¡ðŒ›£˜I}à•¶ŠìsÃÞÈ%‡´!TÉéAóEÎ{”eªIhÉv†Ð$ºû»2h­´ç¯ŠLlë|˜Õ&)Gz~XY^ÏLªÂ¶;WÜjs.ñž9>ÆOܺiÔ-g·}*HßÂ{“ú³© …âmF1vU:;( !î\¸s"î6|œUT6Ê;¢B EäF äi#ìcðï?¾¯U·µF7jiÿ\çß=1zLä”QÖµÞ}ÿ¼Ž;íq>È0çpÊ×Ü‘Í +Ìw䫺,™)4‡<ô:go`NåX®¢ÓXEà…%ù ¹u®#œ+ »òªUGqÏô@Qy,¢oŸ6YÊ_—Éñ5Ñ úª« žGš›ÃdRf Z-ð˜5¼UPó+F ‹x!'|#\‚‚=:­‡z€£¸¸¬15 UD!¯`v”lã‹7ŸÆabçËp"Ê«‘%;¦‚o¾É+óq;­óÊÚ³ Ï c³ÏC>7ýŠÜ|ØQêYÒä °¼•¼Wåª|ên*Gô0µœgåì’B2ø›4ì}ÊÇÑgH­Økg[õŽÝ7ªðÀj—åëhǛ¸Ü.²#`ù þÚ¨¥Õü%}=m81’Î߯?·5d¡\üýÇmÝÞKðñ åªÙE!ñÚÒ Û6;ç¾kyhýT|Àóa·2{r‚§nÝÄ3''jõ­ ѾèÚ(sU¿¢¿)üŒœ¹Í8²BŸ\ÜÏWª–VÑÞ¢}TYÕçM TOݺ‰$1c«›<åÜ$êgFóEª’œ&‚”ç”±}¸sãiõ6ƒRãHå"Òñ“¦Oþ9 ƒãóY¬Îäs³©«¹m²B ̤4!u~…ëÈý½ìs®jD!Že„!'€/ä„+Š Ï)?Zà•W%óKˆ¾µ/ýÞ |œí!„Þ«2Ú4@D†÷S™–zq‘ÕÍøX‹òa.Ú®³Œ%/ 0Ýã_™ÑJò²´-¶E•ÂT8×RŸSO rlG/ªH«éóá¢IVß×H•h„‘ŽDøðõöƒBªheÿ ÞÆo=ƒxÓ”uV3â„a¸ÕÑ ÞòÒÍÅÛ8š „Äo¼ðS…j”*QM¶žÁuÚ¢É!j0õ |®x¨T•9-j&J ÿ*ÇJ½W舺¶t•¼h ‰Œqœì¢vY>“š—¢²Û\Q#‚”êRÍ©LpûøYüÚóOáÎÉsH³XÒ,otŠ”= mõHà7nåó]tN]{YQlëœ)%dK‡qqßõ¼žc¤V¬Rµ¯ÝÄääPBŒí½ËÐ8ÖæÃD¸ÈXéìû,åŒUoU¡ˆ(˜äùL–’eŸ…ÙåÐ¸Û Úõž!¥%ÓáfTqm{He8ÞàR}†ØPÅ·Qs`ˆ`ùž@šªbi¦’î{qŒ/ã7Ÿ7·SK¶KrcŠ®•ª-rÉѳr  gšÏxhØjI²~QÁ÷¸>»ÏÜÙÜCÄçˆÖ"õi1!~:äo+ŠråLªâ Kaˆ}]l§Âyˤij'Çøä­›øýý}|ZçýÙpì¼as-€ Ò„¸¹rūݹ临OŒ•‰ÎÀó$D^mNÏãŽ.ΰ§ÉU*%v4‰áógrˆ¤´ NlƱ>ý&<ösÐÜS)ojxgY_±Ó`¶ll¨Fº«b$ MÓB"3-\$Yp›wºå²/‹b4*.:¿fªd&ƒ -SÈ#g}M ŒQ&—Å/tøò×ø:+ùaP]ì{øÂ-•ÐC26U³DräÚS8qŒ(TQ?¾póiSµ-“©®ìÕuÈšÇre<ëõb†Ÿ¾~²#Ìü (¥@–܉D§]“=WqqÇ!Ù±)‰}X Ýî’ÕhS÷! «ß}VW¿£ÊuÅëª*äl¿ø•¿¦úÉ$;,T+0ÊR‘’ÅKn{"ÐM?Ÿf‰ù ” s˜ì€öOÕ¤èºz|”?âžO_we×)SºBMBÌ8ÆÛ{1žú¹›¸Û‹ÐÛWÄÂí!3Éîó¼Ôo૤~^ZxÂ$ôï&ƒü!®TµrÈÕ†²•qà ˜^3½ý;JƈW”Šç¡#¨Eæ=¿_µñ˜zu§cï0AKl犯»ª7 yM¤¸xBô•Ȧ¾7ãΗï©*wyyì»: è/?û ž;9é Ï¢ Vn‚|Q.BÙ*}ù¹+)NÎs4k6 /YvQ5-žŸ †wÙ¥llkeÆ“Kêwí,r|‡…ªÊéÞŠcì¥ 2ôÏÅf©ªjCœR|>}ë~ŸÔ}RxF~n…èñžmݨ—Ä…½hø9(£û™I8ê¼l7…ìñ’ØÛºž)vAj NÖ'r³'øáçžÅ÷ýç?Â÷ýç?Â?÷¬ùŽÂQšh~ÍbPUª ;Œœgå„PÐ×w\>'ê£bèqŠþö˜â6HIÊâ$ÙGšÅØ·T"ýßA¬JV§YÜJFP«{ªÇ°ob?ÚÒÝ|ì\%e޹rìG›º/M D!‰TlÀ>惎!ÈîXyÑz_•ª\¡Î>7ŽâD6 ´Â±Ÿ—úšX9Ý<¯¤jHM|Oä•Ît!ÐØÒ:·tî)#€Ê€ƒ«Ý®.7M‘ª^v¦êZ®¾@·b÷@)T€€e_^VšÈYѾªæŸ¸ÔË%M%z{ªxCNèl…†È‹±¡‘«<4¿U C&uÕ»Tæe–uéeîlvÃM¦€„žgýÞßÑ|ôÆ“²ì½ 7[i4°—¦&'(8FQT™>Š­U¾CTq­ëô醡é Â+ZuY}Ø:–þ]¼bW/Ið™[ÊñöD™b¤ø$Lù)BUâG3ß‹cÄ™4¹(gîÜœ•Ì ¯¡ªÕ¬”›3e·’êE¥¤…¶¢·õ¿MFb»¬×ÍÀÐ2ý>‘`þ´K+†,ž7Æí;CUËâ8>פ~"I’àÅ_Ä‹/¾ØW*yšsåþM=o\27È®I“°Iïoš„ºÓUf¬Æ‰ÝJ¡JÜv_£×çÃŽââMKâ"§—ZVÕªŠ×|<«òÙ§F˜üë!mÒÂéa«ò£B9Ç<Œµ £ iÐ$µÃnÞ'ëf^v¹ìQ5Jø[ÙœÒñTÉçY3KU†YõþÉíÈC´ìEI×t¬ï}ÑÍß)ÏGòàÁ3J‘ŠgçÈ({|–CcUDfÙàÊŸ€°Þ/êT4WJ1ú öãMê‚äì*÷D9ðJñ$yÊÈüÑ®-^å+pÝarO(GG˜ò½@èSÉ[Ø=HLµ2¦[à‰‰‘²Ë£F˜Z¹àDA•ˆ¶“ç×JÈJÕü“²y+=¯žÈsvRÝà4•:Ñ_Â÷U™ífHe§I™Qãò„è+•=¨ äÕÊDNz¹2Cedýÿúæ`ȯHÍ¡Uz˜d{)çXo–@‡)Qø’Û~wIÁ '¼Š“L ;›³ŸTšîT¼Š–{ ªÆKóm†9ÀUæ•ïm¦ä9Ä@ ø BQ“Ó*óµ—&X C„Âë+ÞP¤î•ÍQÎQ¤2W[<ä×¼‡<ŒK@W[»E6«cÓóJIž§ú9sVÕVê(´ ô=§¹§<¦*”æ<]ÌQIAYŽÈ¤àöG!õè¢B¶ŠzÎÅêKrqQÊL•íÜp¹icÊ93T+Ϧ~Ð6íp®BC{óÃøågT¯Ô©<’ *¥ŠQy>Ïè—•”n?ƒ_¿ù*/ÞŠØ—&·Šz­ä¤Ó3Îýn©¾3ÂZ¼TíÎ —|íªÿ¦2ž^7“Î>›È˜qê t­>åf¹òy'òFc³ Ø9HÐí(gW¦· ÍožHáI» >ñù[&a¿ Hah„žRJô0èvE¨Rvƒ£õJ¸y2Æ*m¬' ŠøºÉó#z,›è¼xl³Ð¢e)¥É‡Q=afŸi £x™Šig ‚…ûmí&Ö5ÑGbÜqY1¯ä G9á«ôy…-¡+Ýij''Öâ9œ¸¹3®2RÔ…½Ò|A9ÀOë>2ŸÕaIôóip¿Üh N™€IDAT˜^1¡çaE÷G)+x0*FÍ!b°cåç”í·Áˆ—,9†‹@;åŸ}áì&J±¥>@üóœ` «Ã’í)çe+Še™.:ã³_}A-’iu+Óû’:§,β¾~õs7qpÌBÊØ½ÓN<Ïmu{¾¸p{Íäûã%a%õ›ž%†,©P7OsLEBK‘vì*(#@äÜg™Ä—_8ÆG?÷¼*c¬çh{O%Þ ‘7ôtHÞYòO  ¬uC4CûÜP«c;šð VO[å “¿²µÃó˜*¦«Ç}ên)G?¨^ŽšˆmaÈ[&ó^6tŸ”9‰ihrAN7ÿÆ­˜“³¼†X/qâ @C¬!^ò×”‚ÀЊPêšÊA_©°Ÿ¾ù‚*kL}db',‹ºØ[}Mô8WJÂð#ö)#iÏPÍD99Ð •Cð‚’ýrr²jv:h~T™­§K@§LíXm6 ÙäÿF !+S²8ùö‹æ\_WjÇ_}öüÕçžÅsºÑéf™dÚg(–!ž?¹‡O¿p Ïèméšn~W „iúúÃÏ=«Çjrõ)}L¥æ=”øø!¬*w“v1Ëoîü^D—‹<þý +{o.Ce¸)‘^˜’îPÇ<'.ãÌÚjƒ€0¹)‰Œõj¾Jþõ›ŸÆKG_ÆA¼ »ùcžðí÷‘W ríóDÀl³?+unN’ÅFYP!_]øŽ㕪+–­ƒìâ¯ÛÛ¨ŽNc u“Øþ…›JÉXh,+5¦ï¡!™ÃOö¾\ª’?>C$´[$„O?ŠânÖÓŠ‘°æ¬­«“Ñù7Çú8œÿ”+Wª0@±½ž e¼— Ýè¢Ó\…'<œ${hþ3þÙþs4¾òFŸDvéeUî8ËXè—pªþxÅN¾!!<\L‡¡­uC4BÑ׿E¨Ë99ñ½\ÝàÊÁ®VŒHñ(ËG)²Ñµ—pN LIdÝx“f¨ÂÅÂ@`÷ ÁÇ>w_yáX…ì'¸Û‹ðÑÏ=¯|õØ”’¦<UFyPßšA¤  ¬u˜›ñ°Ú ìP?ΧšŸ§>¯ÂÝvtˆYàAÍ£/0‰7¯-HÀç« \] ñе®®¨óË·Sv ÀƒI¦÷…êB¿Úh`µÙ„'zÚTò•;sèW ¼¬Þ °;Oê5bBp碰K²r2«Ya Y¢–ý+aˆ¦¶ƒÔ z•*O©ž.Âä¬Xj‘nºéÎ\£ ®Èn7$‹W ó„Àr#ЋU(RÀ.êýC¤‰ö³R~G†çöxúzXo4Ð`óSFhWØ9ó H%²‡%¦lì®:h=fǬ&§ ö3Â"/®]¾X Cô’[:We'IÔBl²¹Òhà M•:¨‹"ìèRÒÃB-Ýù¡óN¶PcV"õ›±ê­”ø©^@/ޱ«U $Ág_PªQ Iÿ*¿@ÞCh’d¦hµÞÍI) ±šÆÍé9o›.k?™(Š s‹î'LM™QÉÙ«ÖJu‘³g“·jÖj®Æ Õ]9°yE0µÄíc݉=Ù'‚>"Áserc‹Kt)YQyZµ üÕ‘~h‚zø"°B¤ŠVæÝyàao4ª*XÀœo^ÞWåÂØUà¸CèòÀý`f4O¤'EƳöX6rМ +­ÈË^œH¨¸cÏ$ñ{Â7Š‘qâM¹î¼ÚÏæÂ4ô„¯ý›+fΫ^£ýcZFè5L—ãd¡×Ô¤T͇)1ÞXê»VúQý+çV`ßk`¡±ª>ϨmäkS‚¸éÑÂK!Ó¸œœf(°¾¤„fèÓÖ» MhÈA× ÿtyi…F_‚–Z£H¥].ب9 ã–‘†«ËÚ_1ÛT!nÀÃÕå×ô몗rôçf<¬Ûu~Ðal¶ù‰_PÕÍžùê1>ñs7Uÿ—@ÀóV—MT€À/V}\›Ü&™4‡4Vº:M!O…¬¤©Äþ¡*Dð©_PyDžÎò4IñŠæDŸWšk· o,ªB4kú<û¾ÐsÞÐs¥ç^ªcúmÏþŸ/`?I°Öl`­Ù4!ïy1(,Šˆ `“ "+¾ãxZŽ\˜¿ù~¸Jä0Z‰¦eùüwîEÿVƒ@…D1EéŠv”Îß(›Y A9¡,¼jþ„K¸ªÓW´ 3ž‡+Zñâ¤Kýó°Û«ò¼Jƒr~\'|…ŸnbF—q%?qèu"l®‚× Cì¥iñ,"“„FA![¸üØ`s¶ÎÂ×ø`'‰Í5d-} ‚ÇçˆJI F°‰ä]i6qÅQœø˜8ù#{›ìü‘ݤ‚Ò§wÓ‹:/'5<•í.‘!rn·»ž¸Ó{zzŠ;wîô©!Tzø¢pYs—Ø]»È†$IL1‚q ×eÏTÃÌA¹ÅJ÷}y-v_מ;ТÝè:TI"3Î15¦TýIr"‘“†â•y¡mZj^3¸rpWµ3N¶)[:+è4® áÍ¢íôU©R磮¨$}Fàòý¯[¹9ÉQN-ÙWÔ[&¯ä–ÙqæÂ‡‡@û¦žó«l®¼å‡ƒU^Ó!?Ee¡ƒÂ9ð°vˆ¡×„'TORò0ìÀ÷ü>Æ÷®¬¨Õw"vؘúI Â쌇«+!®®(²°¦+ži0’Ãò¢'$5oô=’ÕÓ„“)ÏÃ% ¾o—~n6Զ͆@85…"͆M&h_Š0«¿I1¢P. _]çD€“>¿Æ¦@XÄQ;•ŒŸ_õùghüBÀT £äÞ½ÃÝŽ"Ri*µ|O vD˜ÅUµfƒl§†žý N3tˆ+±M½2Ü•pžD^nƞϜ7îxº«æîq;w§!<+„j- q¥ÙÄZIþW¸´¢‰P…/zBÜ8©hèªmMOº캢ü„Ý$Ñå}_(ì/S5q›ÛÈxr\‰`Ò×Ãë|¾RÕ4¾.S#xRÀj䎽jÖg£ã¨7´C?ë„_Ü4’çP™ñ2G•`CÒÜãð÷ô1Íõ¦GÀ_ÿêWM1 >WDlÊò¬„³­«–ñë‡E²µéسÎHÿ›ô±\u‹ ÌsãüzQ²}E}=RÎ;áÿ~'­‘+"1£ž«Ë0ξ‹Q ˆ„[V‡ûªï ©.™¤’¸Òl«œq á*$2³rQ¿qëi4üYœ$û˜;Øî"•IŸº2,á(ÙÅ\°ˆÃxËrT•µvxW§q…ÙZ ŠÛ‘TƒœPõŸhÚ;G¼Ú•°z¢ðý†]‚Ž|¾}“(N‰ò@foè4VLb:9ò¤äçÊVghšNrâ-´Ãñ¦3Fiæ¿*§F¾&¤4/GI¯‚Ò ô$ÂîÀC´~ŽÕïvWà51ë·UoV],“d¥M˜”ʵƒ…ÆŠ ' màǧ¹âv“6ÙãÛoF)Zl^E/éo"J+öä¼’º°¹›³ ªv5,G–`9(ž(|n~䨋„¾£B+4ÂÊ¡ñ„0ù9fŸšØøžr´Û6w•W—u¨Œ&.1r X$«4¤d‘“?,ghu)„”ùß+‹vtᙫ4IªÂ׈˜ýø«Ý/m)e( âTâS?êo5G”¹ÞÚ‹ñ‰ÏßDà Ó›g|ü{‡ ¡úÝ«KzŸdn|O…³5B•ÅžOÅâÿä ·0ë…åC†TrÞvßwsF< /L©!ÚA€Ý¤èÞ)Ðm„¦ßF‘2ÃÕîØö]ËìwÚÎUœú’àµã)Ñô·¦46ìâØô^Q¤ð8Ùe¤æŠ¹¯‰ù`©p®[¡R«rEЃݯF±QÄnU`Î+…¯I}½ÎË8IL˜\&%;˜º•¯=@õÑI3åü.Ψ.r±²¨ªdQþÆöžŽ«UÉä¦Î£ØÜÿc)!>°¾âÅ»>ñ³Ïc¦é#ôUÙhzÈ’£}§!Ë€+˹Ӥ2W‹´½„³TãªA‚©:œp±°¶"y¦r”ÙAă®Ü0ðtN 2`­ÛÀ^æûaèiµF•º&Õ¥Ó °s`©`k7V?3ÉHëxóEçRu_Øóú¯Ðó°Öh`5 ±›¦X ²Ô Ô½€~䨵G+>û;Òôý ÅÀ¨ èWƒR)û°Ü}‹‚ãÉV:§DbHà¤/,p¼‰\¬‡¡éBŸVÈQJJì!ç7³^¥>2 û>º¾Ý$±‰€çaÁ÷±«W÷ƒ¢ùžï`Èyu¯Å À+cLsD¯ûºaˆý‚ð<÷å '™ƒHŸ Wå"’±Å®Mz‚¸s4,gj% Ë^R'”2ÎíoZ p%·Âçýê ¿𠜛©’™¼‡ª¤~¯î°©ü÷V¨rg<Öì1WdVp’è­ó1 ;ã ÑÙ J&=t¼U„þ¬!+y©ca…‰©ž3UÙÑ` •Hšæä$Ó!xsÁ"^:~™LAýfÔ¼(»‹”ª2ը깠{ñôúÂüxQ†ÀSDå0ÚÆoÞú),Ï¾ÒØÈm¹—â‹·žF ^_2àê aXµ:"Dêg¡ó°(gGÊL…Æiãgyž}^ó7E¶h{ý9G.,º¦ò„E®Ž…gœð++ÊQëí%ª²—þ‘Ok%)Ý0'!T¹ãkk>Öº*¬B±ˆL­-…ØÜMŒÝæóVOx&ÃA9,Ôï&ðl'Ä÷òÜ ajUQÈݨsE%ª¯¬4°Ü °µ«ûnH ŽUõ²µÖ–BÓž¼2’uV{y} „ÞŒÎeê!É"cÍ_+ìâÅè+}{¡yNe‚{É®Î?ŠÐköÍõ(¶Óy;Jz˜õp”ì˜P±L&8ˆ·0,áD+?­’Æ®öþƳ…¶i…+ ER"@X]j@FÂJþV"ÿl™L0ú@…’5pg;Føž®®¶ dÄ¥(L+` ·w"v‘:³X] û²ð°sƒû¢P»Å¶­Ý™Ì4=¬wØ9HL£ÏOüìM¼æ•³hB+K2½ßl¬5'Gþ¡@§`×OûœM"5@qØ{“‚ëðwƒ·OOÑõ}+T§,«Jå°qáØM|æ…[˜ñ}•P®N^lµ¢‚P¥ßͰÏI@‘P@å‡ùÈWûB`) ”»BázEMSGµ“Î%¦ßÖŠ?‡UÕ‹IƒÂ툠-»I‚Å ÀA’¨dýF½8VÎØgi[ú¾ k2[Õ¦U=O®=Ûq Õ父›æ|•ÁMr¯ Miaªd¦ú ôèûí4Ö‘Éñ&’,Òª@;\ÆQ²«Õ·œñàP±³‚Jû…ÐÇñª!¯ §’îsA"C;욢íÂ5id2µˆ"&*tÐÍûQ¥‰ûIÙ*!±ÐX±æü,sMDŠ”>®&ò|7¯ gÇ\µZÁa¼‰Fc @’²¸ï’ù¾±9bh„Jq¸²œW Æ÷‹Ã´&iGßXYNQ(°0¨â:è¢WjSį 4¥&--¸Û‹°µ› Í$$r²'¥4Ué&¦béü'„€/Tè’ÛÏó.ÂjxÖuÕ2·ÒԤŽª‚ÈÕVáj³‰Ã,3Î//^0êªü¸¶ðßyÎ Ô9:«rÅ·7áÐ*LA(âE€Wþ"e…õÝü¥Õ‚FÚvÒ߉>{´ TcK²cŽ“k5)ÔD¦Æ41圙ósйB+é'ééð^TÞù¼ÇÙWp€­sS}F‡0}qŠ”!%a›¾ßS+—€PÒ<ýS#€e#ßÇ ÷Ïj€¾\-RI¨Å4቞§ˆU#ôÐ ûBŒª8¸çA ¨Tò êbçI\ Ç©+Žy3LO¨’ôþ´áû”w˜<S5M¨÷U“ˆUŽÏó¤É¨™ ¡W‚ rf.‚4ÙPäÄ]¹ZÑ¥šOtÒ*åÌàbIš‹• Ä¡¥§Wo›–I<ËÀ#–X–§TÂèÓxúŽ¡•?RÙŠ¡ûyc×%mØX£Æ$0u2“·»<§™>+^iU¨i¡(Aþ"1<´O\ˆcNe™Ý¢Ŷ³ñüÆP–td•æ'J|¬-HN)ýùâá{ü÷‹wVŒ-¥§/‚ÄÅe¤}¡ðs’“ h6DaŸˆs™_}5„WZÒõ"Ћ\m.³‡ºØ[=k0¹õ±çiȱ/’T\"S4£(EÓP•åOU9w—ežkÔ8O\/{˜FhTU;.*“ÛtÙì¥À0/b u~M¨ /pYýóR DÍQ!ÉÒ?ç¼`œáËÁ‘óù¸D«úÃì¹,6³ÿåŽûuîW»kÔ˜4.¤ÏÌË —‰È\f{G9nÕ’Ù:.™iP™³á2„å]v\6'î²ÙS£F/'Ôd¦F5jÔ¨Q£F÷%j2S£F5jÔ¨Q£Fû5™©Q£Æ4»¬Ay5jÔ¨Q£F³àeAf2™BBšó/wÔóPã¼q™ÈC’JlîÄHÒËcS.Óœ•e€¤—¬¼ëe³ç~ÂEÍÝýpÎîkÔ¨‘cêdFâüœé¢ýf2Åa¼…4‹poMÝ‘¿lÄA5þ<Œb_êÈ.M³DRM.ÚI—¸Ém.ÊF:nêÌÙE#I%gÂR)±Ç—ÆÑ»lö¸¶]4YpQsw™ÏÙe¶ñ2ÙR£ÆeÄôÉÌ99Ó¹“ž “©ùIŠŒ„Dª_Ÿ’,ÂA´‰$‹¦vÌá2Åe¬…•d‘s•ã*kg½ÆÜÏŸÕžs™¯hq2½kº²m)dòÒ¨"Y&‘f6qI™Ó&|n’L"I4‰Hå…’š4“¸Ý‹qç42NT*õÜáòÜ9.“=©Tä~^gX8þEÍÝe:g“¶ñ¼Î7‘«Ó,Cª¯1yŽÇ«Qã~Ä…)3“v¹¼ÝÁÎ鋨‹îè×2@šÅØŸ¹PäjQv‚ƒøò5ÿ™¹Q_´CN ùJ²S$Y„½è6ö¢ÛˆÒ{8°”µ¤ÔfNb“ìôL¤™“c)3d2ÁA¼…(=qìI­ÏL‹äd2Åa´‰Ó8Âݧqv)VõSíŒGQ†»=ERg:ÒL©$ÓPC¤–;!~ü!Ë€Ó(3"Š¥±1I‘˜–]„$…±ãä4ÅK[1¾v7ÂK[1¢XÛ£ÉÍ4ç,ÉÈ9×ÎT’ •YEÖ´@Ç»,Ž]*%îÄ1^Œ"܉cDR:ÃçicÑ< ;ZÆ>3̶IžãŒäËä§ì*{=ʲs%°‘¾Æ¾¦¯±{Y†M}­Õ¨Qã‚rf„ ÿš„ã—dö£M¤YdÔNnâ¢ôö£-ÄÙ½B'wò¨4ÇWŠƒ"4®ó{~Ç/F&SìGÊ'‡=ÉN­®3^Å®IÙžŸ¯-$YdÍ[ªß+»n8‰%"KãÕ¥`¥2ž¶!É"ìÇê:SN@®ô‘ª4­pÆL¦H‘Bˆâ /mÅÆ¦Ki*ñÒvŒÿr'‹[§Êw¶9ɉ⬒b3 û}_)$‘†@ÜéEˆbM¾â wwªÛ5 ÛÒL‘”»½'÷2ÜÙŽpgHR©æi'F”dxi[Û“S5wI*KÏï¤Î·J`3Žqª»Ó,ÃV!ʲüxÚɺÇF™8Ð~#)q[‡£›Q„8Ë Ù*û\Ùß“B¢™SæÔr§Ô>wE¶ŽCÌR¶ï­8Öwö~ÁøS)±¥çŽÎß þNãvÙyN¥ÄváD÷¶vÈ/!ÝŠcc×]g¬î9ä$0bÄâ<ÆÁ?únj[7'pNjÔxpdFšpI„}‘óg÷°mb?º£•¡ßOg§8Œ·1´!„§)ûö1Žó[Lf8ˆw ¡!µÁuÔóðªÉ;Àî>=ácÆoã0ÞA&¤Y¤IÀ×°ÝAªm±í²C÷ŠæR!]™sMÐ߇ñRM.ÒÂ09Ùg'©=e¹TE¯%eçGÊ RN¼HU"ûŠšªv O‘O庸áø^¦Wúsç×Ez¡LRïWJ`±˜Fä´§©Äf/1"2ô$•ØìM DMÂ8þ›š°(B¥lRD02ä+-±‹ˆ‚Ðã¼Û‹qUWĬð6ú|œ!É$°c'ÌÁ=Ñ6DRâTJlÌ·uœ~•VnØ©>‰”ˆôñÉï:×lËÆÇ??îÜÑüÐ<œf™/ýDˆÏãœYç€ÍÏ)# œ¬œJ‰Í$1$ðkQd²H_cE㇤‘¼E–*ÊÉ=}'.“ÊuYáû/†Ú/GL™ÌƒßC’Åc9ÂEb&“ eD%Í"Å;˜õÐ »xûõ£t ÷›h§žBÓFµ£²Ï1wC¨8Á™Dˆ’«ªðù•˜ :xûc.è(§¹"¢œch‚c/;t/±ŒL04.’—ÞÃAÜC&3hŸg¥ÊÈÒ}‰Â}W'`ýcÉó­s.Õ5¼UHžÈ>)]Õ+±>cÛ‘T>ïy8žVÖ¢2™æŽ‚ YÊ_wfHAyi{2y"\%ȤÄÊb€O~èÕX^ pexiK…MÆ’åÑ$Šà q¶“¬ÿX#ƒ/aÂÉÈá'–$C"F^èóQ¬‰P…yt‰™RÔôk‰ÄòbˆO~è:ÛqFÝ¢4v>";D@8A$T• &Œ$ÝÙ‰°y/2U,%:A€XHÇY%¥&OK*8ßÅ$,OO ÌK}77¹Ý‚ªQ‰žmWž¬NyGqsAžð HˆR$³‹œpå”sÅcK°ò2®Uæ‹ÞW×Ķ )#«Æ›R=¯ý("2Y‰:SžÄ/Øÿ“,ÆA¼©Ô¦²‘|.8A!‚H$p_d [£¹£ùLó>øœKk»4S¤Àr¹ g=fJLîøžýGIìJ%H¦€ï ,/HSàN/Fe&lŠ;æ‰VjÌkŽZÄÏJŠ "7fÒ\™!u&Ër;<_`¹c«"}ãÌ4yÙŽñ_îFxi;OÜçó?È"fl?•&Q{± ·g«=Ead|¾£D©3Ç÷òù´#³£œO"H±vöR)Ñ‹TÎßrB… ]µnîÁ8 ñÜyÎ~u w5¹ê–·r›9ðD„8qò*Žå ÷L¨‘{£ý“ÃÉÏ¢+Œ+#){4Ä™/[ùOl%¹#LûMÌxiþB3—eã*"UÂÒ ¯-)‘ø±‡BW«Bt|£,Ñ|2•„o“ÈþP®Q Ž!ÇI’+CŒ8wƒ?~ý:ºúºrÏa±âjáWå² ›I‚S=®aăP¤æ+Ê2ôâ±þé’Ì¢=’ºzÊïûBÀ÷ý ! ãØ;m\$‰ªb»ËjcUL™Ì“Ÿ9«ÓUä¹snW–j]¼ýÆG0t°mb/ÚD*c"9ð‘ÊĬü²Õ˜¢×l¸Çwß;Œ·d1v£;ȲßñÐ_$´b4xl©q’Ø«ùÕ”¢Ü9w Èä}(§ZêUý-K)#ùß,FR9Ä6îø=6ÝcÎ]xÂÓûW„æ0î!Õ?¥Ì ¾NŽòù{ƒÈ£""‰ÎÉÉsE<ÈžkDº\²®C—äÜÆ^tÇÌ…\òðÃbsÅ{hzl殮N4©0<©<ßK¾Mz–Ф4W8Ìõ‘HÜíEˆ" Ú«^¤š JÁó~R¦ÞD±Ä]Mb(,R)Í&Yv. ‘(Îpw;Âb+À'ð–Ã<EÚvnöóY^mL ;)!§,oÉ=st©Ð2`yQ9”›½q¢rwnoâöV„(Îúòb •9Y#5ŽÂä­4q•Æ­àVv®3"{)Ð sg—¾]†´9ómBq´wÂÔR$’ Ž8;öeW£/:A€¶’_¶¢ßG¼´3{2 ¼É Uë»îµŠ@&'P¤¹ÛË‚}еÁWã¹Z`®1 °b}–æß +s¾å;x²yZ0§eêÌ …®Ÿn¢D:÷‰_C¤ ™ùaï“]ƒÎOÌ|ÊâE¾óÇ÷Yt­ôâØÊ“âç-EEÛg %~졇°ÌÔrvÉ1/_ià¡I<$-×ß‘«Q¤ó+õ•çÚæm“ÁÃõxè\/Žû ?l¨Gœøò×¹óMÇØfÅ$¸#ïª î<ƒƒ‡î K¤’™c³ëªèœ÷§2ÇçÃ=¶«^¡£×7cõYB‹Ðn—pWÅTã:¿RØ®2C¿¯­­¡Ùl>Nòƒ !Dßù¹ŸÏÕT5¥T&˜ó;ø–Wüø/þËdNÒs|SòW÷ ÞB;\5û9ˆ·å€nŽ*¼k±¹@Àž±…~W犚¯”!Ñg¯šŸfý–xNPLN¤2¸y(ã]´Ã¥¡sÁm$%ž KKõ\Íú 8JvX~‰:¶'k€ÄA¼Y¿ @BÀÇBcóA'Éæ‚Eœ$û8ˆ{fFuhar€vc ¡—yP×Ϧ—Ij{=‹¼Æ[ <.OЃ.é¹ÌØg}Ì‹8Šw‘?„5&®àÍ?·EóéžõÞ¶žË|]Ÿ”EO´Â.d¶»½{CW–ð}¡ˆ„Ȥ´ˆ‘…4“|aò/Ô{R…9ŧqlŽè{«Ý<¡ŸV6oëP«,“ØÜU÷ííSHêé"‘ùKO¼Ÿÿµ±½§ñ­Ýv`HÍ]§Ç ·€±•§îîÄð„ʱœ&½ßŒdI6~ªlæyI¦lOS¥$ÝÞŽ”ß(G÷ ÅÊb`ÈÐ Øö+ „ž[‘oóÒ¶rN’DÂ÷(´,Aš©ó´Ü qg[9£´O*XÐí6Q,8¿®-D…P¤Fƒœ ‘zc—Tóó±\ÇŠ¬§V¼–Ãò•ê"¯,$g3ޱ&ô‹®%Ú–ŽÁO·×f¤r>„Tù)™ƒ[n4 Õ"»Ý÷SäJж“³á ѧ*m:¥ª€U‚çC`)áØ VÜíù¹sJ„(Ñç`Î÷ÍßBm?€ …4úTJf‘ Æ(‹“ü‰°®„!BO=³ˆ<­j¯—$X`a*Æ!×s%¥4jÄÚ)_ Cž§®å‚9»£z~®èø;qŒLÿ¾Ÿ$è†!z,ôÏÂl»ØÖöð}ez‚À\ÏnQ ~«|Š®‘þÝ#lIçèŠc>{9ÖÓÛ¦)Z¾Ý86×=¿®¶ãKaÃÃÀ'Zð‚ÍfÊÿIS¼øâ‹HÙÊ“ïûÖß5.|‘*¬¯¯ãÎ;8==½hÓFÆÔ”Z=”‚"à÷u/ç+ϼB_‰Ïs[!Ȥ Œ§m×çÆwßø(ZaW‡T형ðDÆ&Á‡õÛ»eÔž{AÇåáBdg~Óñ1vx!Z¡*:@¡S¼dô ãÓj>­Ø+[$ £Ú,ì{Â’²5ž‡b°Cϲ‚ÏÚ!‚qz‚}cË&x©gšW^-MhøæÂEÌú ø®ÅúÜk X®)y1ö2Ì| €ªÚ6¯‹=”…2æ¡|›He¤ÃÎzšÜøJéÓdx.XÄÛ¯«Â yA…Ì:—ÒÌÕhaùY®:c‡[ªFEÑaK¯êo„aå‰ä¹:’W×ÊWø¦èPÿ“¯Ýp{;ÿŒq®ÍÏœI xÚA§ž|ÏÃÜ\p"C÷Û$ÓÊ£ì¤ÌF£Ž°Ð2ž“³Øð”VC<,é<•„WÊ\aâáne6Î)6›W®fe2W¿–;!>ýC¯ÆëoÌauQ.:)4”÷Sv~ÓÕ†H ·ƒò•¨‚²K“ªÅÂRb‘ÿýÀ„Ë…(¹Ž˜û>ПÍžH¿é¬N»åp“‚|¢°^<8Ï„^ãgQXåãåäxžÅÿôð#øé×<Œ¥00$K2§ÈÊBŠNYH½nÔ#§ä³ÐveèEyH…"dlŒƒÊ/ÇšÐXçSÛP”$oJ/SXTÁ53U¯Šêa…¤é9ä9*›ºì3½gUÁ+sÏ;¿·Ù\ñshmvéÈ ÎUÙ5±Šn¤¹jŽ:¶úëáÙY|ôú <27gŠq$|<ú{cªœÉá 1“©2<ƒÔBQ~Æy(÷³ÊpQh4X[[»/çnJdFXaByøW1ܰ³ü÷¤ïs¼¢S¥4¬ÍÜÀ;_ý ¬Ï= Ï[ƒ åq³»í„%Ù=GÊ µÆ¬®+%f>\ÂÛ¯ÿÖgÑNð"ö£m‹¹½pŠB¾¤E^¶Œ#Ÿ“{»¤ˆM&I˦ªU”“3¬ŠYšªÐ5ê­Ã_ß܉¦JuZ^ ¼j?û‘×âg~ôQ,-¨Êf†Ì¥’TFºÜù*;çvî L/j@‹¥RªØ”DJìÆ1Ú¾Ý$F$3kå:¿ZaÀqêݰ*B¡Ã[ ¶ðWxÈTQ¨Wѱ‹B¤†Ù&¡r‹>vý›ÃJ*Åj.bF 6?Q#ÝâÔš3nÿ½(‡È%¢RÊÂmÝÏ”)IäбAJF℘e#Œ¹èX@Õ;þwY'&=V™®!ºþèÒyÚŒ"Ü>=ÅfA@È*~€bÒʉâí8†”À#³³øäWãáÙYøFåÚŽ"‹TÑù5vžê '+f6 <¼iÒÉç¾ï£Ùlb}}ýÒ&´ó𼋆k‡K>ïL5gF|¥ÊÊæòUt®€*äDÊ sAG­êϾÆÚ¿„4å™çÃ%¸,U¹j»Àùç ݃WÐýÑ .Ãæƒ%!Ì6 Ë«P?£ûΑè<’aÕÖ–LÞ+%aRà¹9¼A%…O ²³j‚\qI&ºf…WB@Í›/Ì‹h…ËxÛõ…”i^K€ºÆ«è4® ® _3vËVÛב{Ž=(rå{!Z,ï©vñ¶‡~óÁ2ÞvýG0,B"3JÿÙ_\¡ˆ°œAàR™`6èà;¯­¬ã©]Gw!4Î}’æ!Ve8KŸ™¢\ 5÷ÚöL…*}òC*©>ÓŠzOÙ×Û‹±ØVrœB«ªŒ…o' òPVXécšŸÕ¥Öº*,RmçyºÁ&ú K_e±!9EEe’U)k•¯óÉÝÀrG9'ËWWX] áy@·@ªgç çg•&š}ã2ežíRپȋäJC®.lkÇ‹9Jêw%˜ç„)®s,ÙOºwPè‘zM Ø?Æ8=^€|ž„PN¦Ñ—ïÑ T^VYÕ7îÔ2‡&TW½¢P-~g&~~ý†){–5=7¤ˆÀW¼3¨W7P¡‚¾&äø¹«é|?“wY å¢ãÊ×!•¡øq=g‰~ï”èî²cSÛq”9¤ñ™’¡º>Ü<£(h5!“ªÈÆR*›YÁ3>‹A€éÐ&"‹Ãr}‘B ‰nàãzŸžóÙíåoª6 x¸»¯nÀ‡ÞµEˆu! :‡Ý °>ëX X sçÙ ÉãǬ¢@¹ ÕäP93?þÐu¬†!–ôk´°@Çš&FUXhå?‚Â0´³ÀÝçeP>4f²ë2ÙwYì8 .Ì@+$Õaœ^‡lxð,§Üî#Ca¥CÌKxû¨Äé’žj¯ #ù—³vñŽÆ|ØoIǧü7_¥x†õ¿éY$ƽ ùS„†‡RQˆ”Ðv¹Õ¶ú+y2•ÏW¹ã®øBø†¬¨yËÏ•D†ùpï¸ñá¾óçAàÊÜÃxçOàêÜkña!†UçѽvŽâ=U}ž"0a—©Bj¢ž¹¶ýC¯Ær'D”ØaeI* ©h„º£UÚ«i&Y¶äª’í•2”fÒ(IkÝÝ…E÷vKÁ°UŽ?¾®öæ TBÀœG_5‡OÿЫ±ºbiAÄTR¨ÏíÉÉ+Ù6*YM3»ƒür؉ì‚9ðR5ÒüØC×ñÈÜì@‡dTËu8É1÷„ÀJâµssøøõX BUºöU!Í2Ü==5UÕˆøp‰¯¨Ojì| Å 0V¾—4å$"qœy7dð¬àו?þñ‡®cµÑÀ’&54Wt|:‡@ÚEa†yè!,i2ȯ·"õ2 R¨è[m4ðã)òš ¹ž§EpŠœbî´sE†—.s¦i»ªÇvÕú[N™àU±ï²¢ˆd ³ù2ŒéBÈL*H |çõÅ|ÐÅð,9\"³mc.èà×Ë ŠZEïšÊa”ØNä çrØŠ:?²ú¿À|ÐE TÈ’'²6*i(³I€'ް“Ü¥Äpõ€Êg&L®Ê㥚!M(à;®DaÊx]EeœUõ"‡žÂ|~ú5ãzø¼fvÖ(Eæ±cùº“»/„Y)çÝî'áà Zeç¡ofþ†ÌyÙ|•Í!ÍÉë )¨º[>ÝP­”{†f>+±¬U™%G•q Ÿ«Vô<3wFmÐ 10û$¥‡º¹J•.xÐ|FYfÂ.…!Vô|pRÃÏ¥!†lþÝjDD¬c°ð¶¨B^”U6ºd;uÝûCT Êš¶bCàN¼ë(*ÝLÑ666Ðl6‡§Ì çŠÈE£ŠÓÑÄÀ%÷ËÒpó‚”õ¥¢jSEÎfÜhqr²çuò8çß8È7>bŽ'J™\Éֆ嚆) nÈ’R–Œ£>,1§ˆWâ6š“[ôuÍÕöš¤<•Ìä™´‚.ã=‹\©Òš£\U„ADFR†„I°GßQs›\x,¼Ðú”ÌJŽm“ÞxÕ%ÅD†¯Ù`ÁØ&„ù` áªErÔuµc…˜qPCOÊêïg4œÀ=àx¯}hŸøàuÓÇdܲaúôø¾0yÖ{4J ¬±<ÆED…’äMˆT¢¼g^’˜cXE1©• H­ -†COWëbd¢bÐb©éUÃ*žQ‰g>ÎQ”£LRa‚Á¹CRª°3 ‹ë´||ânàáWÌâ?p–:¿> ¥ƒD¥’ÒEHX?³ê¯aOäÖŒnÆ£ªŒÑŠ:'ãä¸}@Àà.sª•JÄ:Å˼q%U|"ynOÕ°ŸA ¶£iÁÈhÞ|ØNù o¶Û?ÄÍ*Ê!B¹ØMì°º ÊÉþ±W©\ŽŽïçahzÙé”kÞÔ¡x±®ã-u^)ƒf¬<¼L«k:y]¥ À¾Jõäù‘W=¤*æÁ.àà~Þ%vã:énÑ*¯½ÌHMWçõ¸d…~z€ÙƼîÐ"»«ÚLD©L5£j–ÃÆ9é[ÿ¨JǨ¡d¼WM³Ù4¿ãèWQD.’@p6J¨Þy‚Îï!t‘öTÁÔÉŒ}9ëÕjŒ¦>ðÐ'rb„ Qò¬| ©{„t {©$Y„CJ$à1,G¦¬ ýaÜC"cãÌš‰ÚU´«ÂWù ¡* 0Oá^–ÍÉÚpdN3‘ ª8F$Žæã0Þƒ„Ä:å™<ò70.™Ü”\=òJCòl…i´ù2ûAžÇSÏäÎx%¤)'fÖ1™òT`¤!èWmŠr©ôåÜQàa_}ôšÍ¿;t\*BˆP‘,á3"ÅæÇ"Wœ ^ù./çÌ{þ .tÁÇÅ!tX 3rrt^G’™ RIt…ÕÀ& ê_ÒÐÊ¿÷Q?Þ»fY“ŽvÎ顪a9! WsԳ݅a Ð]¨~§”Hi‘߃õè‰â i"íã:c÷=8QÎØÇÿâ CFJ]VÄ_7ae©j¹Ô±¹áöÖ©V¤ìsJ XYh©O\™YÒÎÓ''î™ÌûÑtuï‹2e¡jÿ ]ÉIï÷áÙY|X¯–:Wäà©>+¶‚ÑÕÍ,©Ó;U=+*+=¨ò™}Ì¢Ðf•¨½†øñ‡Âb˜D{®l¸*õ¡9¤}ýÅ Õ.iw9Ô…%ˆ¸°ë‡ToˆCÊs*Ù-Kæ¥Jn‹å¤[J‡¤’ûÒ"fejÔ°×Ê®©2{¨Ù¦e—T FWÃÐ4%Âóðì,þ:ÜñáÙYužtÊå F"X.Q£±ïêFŸegÈæP…ÅK*¿8=`ª ¬'̸Äbù”?3 r«­¹û+úý¼QfK•qM»p…èU±ë¢ó“¦FfT‰T;W-œJR᱊WžV;\§Óƒ‡)„‡+³ã¯~ Wtoš"iiàï»È¹CLaTo¿þa\™}Ø”ŠN3¥æ¤2Ö•Ä6KSf[Ñ F”A©LÌÜ5KøÆ.úŒ¾RÂUxº,òBco¿þa´Ã£Úðq•)3™L±£Li°çnípÕR°_ŹO”«Äm£„|UÞºŸ˜fHYÕ¶b›sbJ…´Ó¡Ë2Ó¼’ªE9bo{èG1tÌ1…•³”WK²~e•WyëŸóÜÁµböEÞ‡’r0”SÅ+›ñ X†`T!7C.SIΊN¶ÿ«ÊÅ•[£ˆï‹í½=í|ëØ#îp‹ñMéV—“Ôó-MSË(ɰµ«êytscè¼,ë’ËåÇÔ„i„»45á¤b ÝNh ;dÎÍAö rtZ‘ÔÊ?­ o³}¼Ã:_Q§÷ÊV×)Œ Pá?W ¬”óå:™ûã×oàa]}˼;4ˆ—’&BÆm*ª2æÚÇ÷Õw.@¡KÊî†ÒÅ+Œ Îç ·K™óÎûÛPu³<ôºV YGø%í Såµ¢óž©(œ@ õ^Ñ9ss[øu92'`Eó) þv•+>gÃ"úY8F(GîáÙY|ìú ¬„!–‚ü†šätÙõH×Ý#³³æ<òqÙo… ʼ\6Tž;ú>®4Ê+Òñ)dh”•}×q&gz’uÕp¦qPD¨Í´ILrUVíŒÂí¦­€T%'—4Ee&O@Ø ³v Ó,é[ìü¼/ŠÎÓ™IÃ.‚q:ƒ.C‰ó볯ÆwÝø˜q–‹òERØíª/ý]àK&\xXWt¸=ó,U‡'êBîÓ*Wî Séeræ3°^.´,ß7óá’nXù°~0yh7V°1÷Z¼ãÆGMoóV<ÀVÒcá *‹”†¢¹› ­äÿá(žÅYG%á—©#¹ûãÚá…MO€޶ˆù`ÑäiÑ1æÙ¹àªÖ\°ˆL‡ ÙªMÿ\J ¦’õƒà0ôòRÄìý8‘Xhø™}ÿó>Šî‚R=¨"W’I¤‰D)çüä4µVò9òæ—úgÁ¥¯òB`*‡‘B²ØàûBw¦¬†’ŠÜDZ¡ÉÕ$=Õ¹-“¾o2â&ß)¬ŒÈˆRg„ÊZjÀÓUѤQ¤E|_Íd®Ü {F,/–(BƦEBÙüñ¸Ž4S;‰È°áö«G,¨ô8°t+l y‚¹N˜#Ϋ.™&ƒVùõÏ%'¨hcú¶šrrÔaë°ëJhÝdžAÄ!Î2lEY‰ ¥j©ü‹èm\ÇTBåq’Æe™¥Æp•¦láŒ:ÆûB £‰Q7PÎîJ*]«k´êÏ­²Êk§ÜMHÏ Î[Y^TÄšžz¤eÈ‹ðòÇô³¨@€qüQÜ×E–üÍ÷U4FÚ†z»¬„¡É7¢qº·;_‡ÊÈU8­°Q¨¤'„•cFóâÚiÂÇ*Üã„®ð·ªÏu‘¢åâ,ñy„—qµç¼CØxŸ—i9ßœ@“R9¨ ­J!„iƒÆC¾åE‘š©‘™"bà!ϷȯL[ (yŸ+l*Z8€œÎ~Õ 8M€®6¦΂*Sôš½zNùƒCÐE°Þ~]9¼êïE+yÜfÁDPŠ•·GR–휳?™÷•xÚU/•+sb—ÉóÁ"¾ëÆG±6{‡ñN_©e)3F;ºÍvNï°sY¬bQh5š•½S7Œ¯ú‡HÄ;´bU~¾„QZ){\ýãÕ×質é¦&1îõÏ®ç,ë¯èGjÍÎéìœÞAïô62™á;¯ÿX)ñ[¶òBn`¹XNsªV.w¼a$ò¾$[;JUØÜɉLç[®t{;ÂæN„ö\€½ƒÄ‚¯>®-5Š{ÊH"'ýãHí½ÜF'Ĭ/ä„…«ÉÑ. ÝgE—’Ö=Wè8ž]í,·»ËJbwÙ<Ó<º0It_š­¨’Úå{Åáp–ò&©Ùg^¹ŽÂv¨ªþÓ¨GiÚ¾Ja}ŸüÐ ¬,‰V‘“înÎsåE¸+eL± †Û“+™Ém¨ª¢ýËäcèÿZ,,Žö›–6óT±R™"C†¹ ƒ·_ÿ°Ê_)%¬—•°v1tx ̇K¦’—*%œš*a¼¯M*e ûÇç<·=ÓñÑ<Ÿ¦úy¤ h”䆨õm§¢™g Eø¥ùZRf}UðŠ0Hý®Ì>ŒïºñQ+4N²Æ¥DD‹H·`+3 $á.#~ä‡è#´ORSHQ­œ§v¾‡ù©ß£.öDnâD¢Ó ð‰¸Ž×¼rÖ$ÕÈ9^ë6Ð]ÈW ­¾îõ2Â}Of¹.a°B½X›ª—¯Ri¨ªZdòx(ŒOf¼z\¿Æç> °Þ/cz®òÖsžrc¦sLMV-ÎUeø¾=g,.ŠœôAà+ân™Z7„Šl#Åc1°5Ä –Py5?ýð#ø=ò(fDEBUƒ" Çf¾ªÏ•w äìo9«éeÏ r†Ý<)ó±9X"¢¦?¶³N¶ˆ(ÜtÏg~Š,"ý~©àœ¥Ø^º7¦”í:Õçí¨ž×1\‚p^ÇwƒH\b1I𦦃T–Aå°§éÐN,Ï-€Q#œULæÀeÆ ›bJƒíâÉ(?át³¼dp–°ü";VÎ °mbHNH¥¹±Â”–‘ÊD+@‘©®Æ+õ/3 GšE8Š÷K«¶vŽÒ€“dýÉKHr…GcÈš|Ÿ¢~)&ÇCøVÞ‘49TÕû ™ëCÆØ;ÝT Ðéfi~‹Ðù6}!eæAR^=̃7p>rõOÊT÷¾ù(®Ì>lÈG^}zÒØ¥Ã“L–„[%ÁõiJUÂòRÈeád··•¢pr/µ¶Ëû´ôw±'b%„nIʆ†Ê#Q 6©ï ‡íkëDéNh9ã¤ØXIø¦ºXd*s„ªBÈ`÷ý°{˜(µÇ­zæ;s˜Û3?ê:%åÀc„®8`ÖžÈTJ«JQ®)Q«|2µYP”@¦47ïb_”_DãæÈììœ*ÅÍ$ž{äå^ã^úáèø>|?öª‡J«…®µ2eÆmjI` tƒ{ÌÖ¡£:¯2ïä!x†j•gTg{RJÉy9ãUìâ¡eƒrVŠŠŒ‚Qò‘†%p÷;M‚@ M¯^½:ÖyŸíÊq}fìjL¦Ç »uçå‘c‹DìÆï( £Ú@´Ê}°§Auz_ê»É’"3,›Õx®Fо ªRc× k’ƾ|NvdQA8^–+F2ÓŽ½4?­‘óJ_hGÁ×Y'ç›T £n÷¤Ña]¬ªÏ;’#¶£!ƒ&u(5¤k„Š p˱X2y2“‚©vFj–ȉ 5÷¤ÊyjµÔ³Î»)0)ƒ$­ìô¿ÅCµ†•ì5°“iïeg(ÊÿP]î•zD!QD|yÃO D±„Ì$>öױ⨔£RT9\õ{àx­)Ôaeÿï}¿òô×ág~äQ,u†?°RSInç¶òÖ]øyaúêõ(±-“F±Q$uüÒÝEŽ8…æ¬R¾Á äd Ï™«²<ä;Ž;)¾ãÈ{:yt×ÔÇÍ£1ÇFµ¦……ûúH…ï™Õ{–ïÃÕN œÀ,y2¸²spX”È÷µª KÙ'¤s®Š$Wñ*K´/#.²àœÐ5áæN¹T^ÚRÒW%ëa¡R5 ˜bŒÔ,Ï|v.MW–ÎàÒ\$RUd£Í"‡½ ÎêL&5Šó寲p3!r…`THiw'‡SÏä‹ðrÃv§xÛé'ò(Ç܃¯“´Ç¹ør²–“¦ePzä̆±ó€):+ýkƒâRµ`‚5G½qúÎ7Uí‚‹”Êä „”o€ ‘WÌc9V\™ ±mOŒÐäó¸Ô÷å#½ëÆ'peîaF ÃNࣥ+°MÊáQ³ÊÐä|ôMá9£,ÿCê-r¾»ÀT<£f–KLW…ôj¼n8¹¹›jl€¸9Ú}Õ„díØ¹%Rç¥,wB¬/7°²T\Ú¹0fP Qz>=~(œÌØi•‚.'®TpÂDzŠq*Õ¼ª+AUqú˪S•aXÈKvÌç˜cÍ«˜¹•¸Ê‘AÎy˜®ììê4á{FžÐ\y"B’ÿ˜þ"ËT].tå2RÎäÐ9²Æ¥WòúáGLÙáa&Î߆Ì|fP¢=Oú·Jh[Ÿgäàz^¹Ë ï”åe¿ù–'ØŸ§ß%¡H¯EjXkbĦšEä¡u{qŒEJÐÆø¡Tg sªªîŒC Î3¬éWËŸþ¡xý9¬,éN÷p˜%!heHXß’IݶÒT¢» ’Ø» 2jR)Y_‡{¹" E_óM ¯ÌõÔóœ^˜  „ f˜ÛÉí)‚ï Uµ­Û( í²V…ýÑ Ö ˜>­^­uªR§Hc°¹3»ujˆcÅrÐf˜#®œm¦|ðsƒbµƒÌ ° žtÆ{Ã0²£š*yÁ÷±ËVõ3ªV6@UÕ>Ûa¥Ÿ/ê$ï† †žg)5|ÿ“ðÑiþÍ]Qذù^Xb)DØLR<#ÇÝŠ!Œ€­†]\7ŒbX¥›YqˆqÂSw¿aˆpDÅÃU ¦Qaì¢P5D­êg¸“–yWg<¦NfŠnÞ C*K榜êOSµ*×™ì…M †'úŸ3£Š#xøÿ³wžqT×þf¶I»Ú¦Þ,Éjî6WÀ`ŠÁ”PI$@„’ÀB€K~ ¬Îê/”hÁi ¬!öÂi!ãÉœ£L¿ñw¤'I§ fÁS{¯+“þ[i ¹B£ám½m›PnBÒ»9)Ý%´ŽHA¼9°ŽH0{šFk'0æÕ_mÝ/(ÚÕœ›èÐÁ€·æá¢ˆ4Ὁ}¯3Wu—¶sŽ" y¸zSfdb‰°AGÄ<œóŒ:2žbzÿ´VzG¤0Å`x ‰cì¡G }Úõà@F7æŠtöÝPŽºw‡Þ |t4é_éäžìj¾K[¦/†COÃîº3'´Oo׬®†Ð 3¡p§¶Äž¦ ní t¥Fª¢FeS‹¦o£ù¡¯ÕÌeÅrYñƒXôŽveÆ2ôT¥5\*´Okæ5•x½ jzbï’·®WÓêêoC»ãtÓÖVJ•Ü>YÅàä²¢‡¸¬è¡˜s^zChm!«!%°ègŒv«(:lƬÆä€Ñ3ÆzÛIá¡IíÝèü:múpWU•pg| £14‰¡ù26NkÐ;coíˆ'C¨B½ÊPç<ä©é¬ì®t—Îê@QBs’Œt ‰öV#*–Q ëÂ8ê :U!Åi %è…Ó‚×8dü)A#OQÛ¶‡ÐÅîBs"¾‹œK9z¯Å0nB뱄½;ú®×Úè­œöÐZ4£à!ƒëwy£)Œ±K¨šzå5¡bÝœs:– á„ ¥nÍ\Õµ§¢/DÊÞn’~Œy+Z/•H,ïO¬í1Ccx•†[W<4ñ?rÎÙ¹¹aCÚуðÀÞЗ‰îÃÞ$)h;ɽ»ó»šï*·?²ue<Ä2:cyÖ"1™L½Nn2Ô3L³; ꢙ úDÄAWP‚£Õj;ÏG,U&úh8ôHî`v°€$)*+WtEö.MtˆÈ¯EïÄfèžg@´Y·'ô¹­÷£5ÅrßæñÚ…,ƒ*œ¹+¾ "cÜÀ(æî†¼)(ÄëmõsbdQ ­õc5$õ›á×Ò»¼@Ûr„(«!)e¯ÝõïÛ$LE‰Î á yCT%0ÂÏÏóHqpÚôQÙ²bÕy_ïBJx®L(…sÈSÕá¶¢¼3¥Hµˆ>}OŽ‘h×sw0¬íî«ó(ʉçîkò¢ ‚zÖ×÷ú5F-Ú:RòÔѯó5£æsHEΑ¡+”h®£Ð¤ž¬‚ÞgÚÌOP%‚ÖÁÂ…½Ídëü:+A…pf±£ÑÞCY¦S§k]³f€ˆQ•Qsz;·(²¼v‹h] 5Ô>¢2§u1wg°ˆ){‚ë¿´fì(aE³#º;Ú>\Gå{3Ǥ£ßD.ÜÙl^}ß—ÔÆÝ=f¤œ‘Ï™AÃ%---æ>½©ç6Øé¢»b=3OöV[pT:Ô鋜 º5•ˆu:Ú i]Ä2¸®MØ¢„•OèØ×з¶Þî”]?Ý-¿o7V()A;#@iJ SôÞFi׿é ½³CÃtÐZ¸þ¬†$±ôZ¸Ž‚ƒAdo³äh›ù*xøÀü€ a‘–dbÜh3ÿu]>ÇN±sïµ!c¢õ7¡¹j°ÓÔ[ïGh¾GbDšãĈ ÿŠB8ì©u¾I„§¦Ñ©„'¿‡çét³£ õÒëRœF2’MÁp9Â!V!L_:*½®ßÈyH „QØvåôD½cd‡VDÏÿè,”k(FÿB†¬B`R½c»³›^•.ÕYâ#óñpAa8Ü(rîÈ€œ7ë<4¨Ú»­÷%äasêõü./°hiO;?á4ÑmBÚ4BÜòÂ^À$CÛlo1Ò=Ó?ƒ0Ý¥£08”72wä¶¾¨ƒp¦»ŽÍÅèI‡t8zpúšñ+ÖoÚ.ÙÑb›]»;©{Jä5Á´Û¡cG^ÓÔÔTTU ;F£±_ê:dü Ç9Tƒ»hf'#Ë}txÌò&„&e‡Œ›1…½cÀ¦Ú-fJïZCD1DÌkó~úy˜3$O •Eï´¹C!Bפõ˜"ª®¬†dÒÌ\w0#\Wéš{wýb-´ÚB‰úžD¢oÄÊXÞœ¿c7¦a3¤‘a.§Ãî-‘™¯"i4?š¢œxîýyÀù¯ëò“cFQ['k"”X ŸâÜxôúˆþËÓ>es¬ïBÇŽôÔÄʨj½1®Z;þmîíä82ÆmúVOOTês0¥¯Ö©ð®¤ˆ…5ƒH/B t Áù.*¦ ÞÜé¨}ÎYéè|¶õ„´E¡ÕH³4Б7’f4F/‘‹ úû±c®…Ö$é¦Ç)rÞL(LOmS^ÈÈc¶ô(3ZˆPšè‡ ‹ÚuúCÇT”èù%"¸FQ¤‡"vfT:žë3t–[E‰2èûãBúCá‹™îb¡ÓéÈÌÌì±ç ¯×þêü !úœe¬3ÛvÚÛ.¶iT„B¶«c2ªBçÝÖˆ …È)ŠÒ¯i¥cNÉA1±­aXyBóQZxäYQ”ö‹8˜b ,È»ƒx½­ru®=B+×·zKÉä-$NgaAÞíüsÛ¯¨÷Tt«¼Þêø»üáð1«1«1…ÁŒyxŸ[çê²Â9±’ø^î­¤›‹É´Œ%^×þú„’|/÷>:¸¸Çõ¦»lðV„“BŒTBÆaÛvš¿sVî-Ø©ÄýÆ:ÔawZ ªòDÍ•P•À|½NÁi ¨‡UO™×܉65 ^Æäš¹ïùXâuüþš<ì ¯Ntª‚=AÛ«E$3ˆÞVßä {Uzb‡„:þ.·‘@@ÅjÑõ(óX¨·7º]**çšùÃu£¥®bû¦K³±YôŽë è—ÎßååñdiI %²^#8jß#sG#ì…FÀ‹ð‡Ñùd8Út’´`F­Âøx~—7g½2]êÛÚ†ÁSû½^R ­É=úB(s¢Á0:ºqn!âÆíÛP…;róXZY”Ñi0§ªÜ™›Gr/ ¿\!Z#"ˆÊÒ§Fx«táùYÁÝ‚ü[srùûÁR Á2gÀ åÈößA뼩Eûövk‘Ø®Ž•d0Ðàó…½U[Góª“Úßé†CúþòÞväi‰4`ôz=~¿?êûÔÔÔ°—d°Yåååí>wUgƒ‘ÈA§Ó úµAÂO‚!‰y]/Žê˜vµþH`D»÷aS%#ˆ*_ßšÆWUtXôL ¥®«!«!%Ø0B%Š`Ç¿u¾‹ ÚCž_1awm dQ[ˆÍ˜‚Y+³V(MµsÞ‡†ª´c=õ®%çâd˜‹±S»•y¬³ºʉl…ÿ)Š›!«!›1«!©ÏÐÈÌWa/ª3Š2qŨ¸ð¦ˆš·òûkF“ê4’\d³7Ç,ÞÙòÖa!|D¹«®"I²øÃu£Ã^!Úꥬ֯Ef3¿‹¡W < ?r2w(„)2õî@ÙA…5µ ãR ¼öÊ=£ó‹Iöñ˜]ÑUZig„×¢¯õò€ü9´Pf7~öP­F^nN½§^Ϲ¹$׊é¯Ö®‹ðEêt\W)”üŽ`øYxAÔà®«¾¤‘î+¡vžÕYû"祅þîi™¡Žqo3]u§üþ¤¿žÝÝ ¡ë(´*ô÷`÷#"’õGªè®¼2áºdÏÍ  ªs]ºB-Ü×ÛÚeê+¡µWNɾ¦Cã*”îØ£µ …ÒA^\$¸ÁÉy£Ë«»~ËߨÏõ0¦tŠ«1«±Õh Ü4*ƒƒC2çæ-Ä«¹ÃkÜ P-šÐX0úvât ,}{LoLø7èˆ7ØI k§KèÑqÒÌü°ø¿ÂX›¥“Ìc!F‹¯¾Ãm ÞŠA«·î3°‰.B^š— òsT©PœÕO´2eÕ6ø-T)\‘“#½Á gQÅl­ë¾ôÚ LÜËÔΡä >¿†:(³Ø;—%”¢[hk÷Õ£qZõhZ¨~^ŽÐÂíä v6+½u¨B±Žöï׺‰ ­Š1¯^ vÔ¯ÊÌ"-˜:·/„&®÷u$±­×b(Êr Ü•Ûêm³éõ´hZ0„ÊÅëGc!bçÖ´ð™ëÓ¨ª$ Ôú|Ac”p›J /VÙz};ò| !£ô`Ý‘›G³ßOk:Ÿžk~…À¢¥ ­ó‰þ¸woʉ ›Ò´áñêHÈ\¿n®Ï«=‡¼D!¯Í`ÑÕz6!yûcâdù]D:mëbpçÌt³ªŠ.ØOF§‚¡^ý§p,z'çåÿ–tsQ'žŸÈ9¢54‘£umR÷c¸“EŸÈ‚Ñ·“n.dAÞ€FïD§‚ë $C8¼ËÕ2dÚC^˜ÀµêØ[^#((gÛK{‚‚‚ÕöXtæÝ y±,g»º ©zçˆWë ‘sSbÍS Õ/Ê1‡×T‰µ0äÀÊJìy9"˜æÖ¦Zë%”­?¼ ½Mnà´G¤½¶êû%Et™ŒÀ`¼ëõý»gO …Û8ƒÆBL®ïö±CsPôú˜º3Q¯ç®¼ÑŒ5›û”• Z'~ß™›3KÚH#ÒÛit ÎàêóýéU …Ø¥DxìƒÇ)ŒgaÐ3äzh~››ÇL›-:y}»ò| $‘siZS0G.Ú¹Bg6˜{0=.Öœ‹áFh®Off&F£qØÈ8â»J¿+¬¯/Èúšla ÚÙÏ1ˆ ¡2ëÑûÐ4ýÔÙTƒ#ù= ÙéÈëë<†ÎdÔÃÚ¬ÆäÝNZ|—=ØnUQÃÆWd Ûᆠ×Sy½«1›!¹Ñ0Šë»ô§Á|8š™Þy0[Wx•û+Ó«ŠBJ¢‘§!ìéé öméÃ#”-#Å\”t+¬;ç¨Ãõ~‘ϱ“íÜû‹þ[ȳ§D.J{˜i 2K›Á2V‡’Îֵ鈑ꙑH"vfx¬éÎæ< =Yß#r–¡«îxp›P6ûêŽ“áæ ðvÔÚfA;\NF[ÿžWkf³áD Õ¯±Ó+’ÁÈnu$t¨‡+ƒi¬å9Ž”°:Éàr¸«Ãî1Ýшtgs¡ àGîa6¢Xæ·¤Çêäÿî2œ=!Ãá65P WÆáŒsï#DéHèPWƒ­7^ ‰äp`$Ïõéö9µméhDz¨Fª‡Óˆ}G«Åg™CÒXq^þo;]‡f¨ΞÉÐ0\=‡3‡ûÈòP®m2X Wƒípo[G2‡»×¡?8ÜëHÞÙ]Ð]b0èn‡{8ÉIhN‘D"‘‰ ê#Á`“ b­§2T ŽTo­ÚŒÄû‘(³D"‘HF>G‚Á&^ #b8UG"Ã'I"‘H$‰D"HCfèÆŒD"‘H$‰D"‘HcF"‘H$‰D"‘ŒH¤1#‘H$‰D"‘HF$Ò˜‘H$‰D"‘D!ç€HF 2åˆD"‘H$‰$ŒÌÎ%IHÏŒD"‘H$‰$ iÈHF Ò˜‘H$‰D"‘H$#iÌH$‰Dr8!!ï‰Dr˜#‰D"‘H't*8ìw‰D"9Ì‘šN"‘H$’à ‡废 ‰D"9̑ƌD"‘H$‡J¢än‰DrБ¦Sb|V"^jÄ{äKãeHOKÍþÞYgŸ‘5*.2;ƦM›x饗xï½÷(//gÔ¨Q(ŠÂ{ï½Guu5YYY(ŠB_p»Ý¼ÿþûýV^[êëëùâ‹/Ø¿?V«•¸¸8:Ć ¨­­Åét¢×²`{<Ö­[‡N§Ãjµ°oß>6lØ€ÛíÆápÄÌ Ò“òÚžÿwß}Ç–-[0 Øl¶n³7Ç®¯¯gãÆ8p»ÝŽÉd —óÕW_QWWGrrr‡Çjii¡¡¡“ÉDuu5ï¾û.z½ž¤¤¤˜û8p€;wrèÐ!:„N§Ãb±PYYÉW_}…¢(áónKii)Û·oÿþСC!عs'+V¬`Ó¦M|ýõ×TTT””¾¾Ãy_Éûj íjµ«µë¨)-%qT6z£±ÃcK}Ý=6nÜÈŠ+¨ªªbÔ¨Qøý~V®\ÉgŸ}†ªª¤¥¥õ¸ÌXmQÓ4víÚÅW_}…ÏçÃáp ªrÌY2òÐü~–ìw¿õöòOÊÊË^@ ¾üŸ#_¢Í‹ï="Òp %€ˆ,€pÉ@: ŒЉÀT`0wʤ‰·¯ùø?µ·[„X»v­˜0a‚HOOÂn·‹ë®»Nìß¿_̘1Cüüç?>ŸOô•ÊÊÊ~-/’ŠŠ q饗Ь¬,‘••%.¼ðBqðàA±eËqÒI'‰ììl‘““#|ðAáñxÄ¡C‡ÄÓO?-òòòÄóÏ?/„bÍš5bÆŒ";;[äçç‹Ç\øýþ¨ãlÞ¼¹ÛåEâñxĽ÷Þ+rrrDVV–˜={¶X¿~½X·n]—ÇìͱkkkÅW\!²³³Evv¶øÉO~"jkkEmm­X¾|¹˜8q¢¸å–[„¦iÖéâÅ‹Ågœ!ÊËËÅçŸ.F%ž~úé˜ûz<qýõ׋ŒŒ QTT$ Åßþö·ð¶_ýêWÂjµŠ|°Ãã-Z´Hdgg‹¼¼<‘““#ÅÝwß-î¸ãa4Ãç’””$~üã‹ÊÊÊ~mCý¼¯ä}5Èv5ÂÚUV–ÈÉÊþéOR_÷·Þz«ÄÑG-ÊÊÊDII‰˜0a‚Ä}÷Ý×ç¶xÑE‰ÒÒRñÚk¯‰ââb‘-Š‹‹c¶‰d$àq»ÅšÿS;eÒÄÛ¹A{`jÐ>(Ú ÙAû!9hOXƒöE\ÐÞ0DØ ‘vI;†lÑÌ+V°k×.ž}öYN>ùd|ðAÖ®]KYY^¯¯×‹‚õë×óÎ;ï ( gœq3fÌÀãñðÞ{ïñÙgŸ‘’’¹çžKZZ/½ôV«•ÊÊJ9÷ÜsIJJÂívwZ^ss3o¼ñ7n$;;›SO=• &ðí·ßòúë¯ÓÒÒÂôéÓ9õÔSIHHŸÃÚµkY±b·Þz+‡û￟÷Þ{ƒòÍ7ßðÄO°lÙ2ž~úiæÍ›Ç#<ÂòåË©®®ÆëõðÜsÏqèÐ!žxâ þýïóðÃsúé§SPP>Ϋ¯¾Úey§]—––òÜsÏ1oÞ<æÍ›Çõ×_ϳÏ>‹¦i”••uzÌÞû³Ï>cÙ²eÜrË-(ŠÂƒ>È\À–-[xüñÇÙ³gsçÎí°M”––òÆoðÑG±dÉ&L˜€ÛíÆï÷ÇÜ¿¥¥…­[·rÊ)§ðƒüƒÁÀرcX¹r%Ë–-£¡¡æææyÖYgQXXˆ¢(üë_ÿbåÊ•sÌ1|úé§X,/^Lrr2ûÛßxöÙg9õÔS¹è¢‹X¶l_|ñ©©©Ì›7ŸÏÇG}Äé§ŸNaa!o¾ù& œwÞy¬_¿ž÷ߋŠ'œÀìÙ³Ã#µò¾’÷Õ@ßW²]íê/á—_áé¿þ•y§&õuõuèúïß¿ŸÝ»wãr¹¨¨¨Àçóðá‡òÞ{ïá÷û9餓˜7oååå¼õÖ[8vî܉Á`à’K.᫯¾Šj‹üã9ñÄùàƒHNNæ¶Ûnã¿þë¿xüñÇ9óÌ3q:zK$#!3fÒÒÒÐ4gžy†ýû÷3gή¾új¬V+Bt:_|ñW\qš¦¡( ÿþ÷¿ùÇ?þÁ¶m۸馛ÈÎΦ¼¼œ•+WòÇ?þ‘?ýéOTVV’ŸŸÏŽ;xÿý÷yä‘GPU5fy¯¼ò Ï?ÿ<ß|ó 7ÝtÓ§Oçÿþïÿxÿý÷ùóŸÿÌ 7ÜÀþýû)**âùçŸçþûïç²Ë. ŸCnn.üã¹à‚ X±bŠ¢P[[Ë–-[ÈÍÍåŒ3Π®®ŽåË—SUUÅwÞÉ´iӸ뮻ðz½”••áp8˜9s&»wïfÙ²eìܹ3ü òz½lÞ¼¹[åµ%>>ž… r ' „ >>žúúzÚsǎ펧GÇÞ²e ªªrÖYg!„àá‡fÛ¶m\vÙeL˜0Ÿþô§ѱ§°ººš’’|>[¶l¡¸¸¸Ó0—ËEYYµµµ,^¼˜cŽ9†iÓ¦Q]]Íã?ÎgœÁ’%K:m‡'Ndâĉ|÷Ýw|ûí·\y啜uÖY|üñÇèõz ÈËËãšk®áÅ_dãÆ ~õ«_QTTÄþýûY¶l×_=¿ÿý﩯¯çꫯ殻îâè£&??Ÿ«¯¾š¤¤$ ¯¼ò ‹/fêÔ©ò¾’÷Õ ÜW²]aí*/3N;ºÝ{y÷ãUR_÷ƒ¾VU‡ÃAbb"_}õn·›´´4PU•>úˆË/¿»ÝŽÁ`àÿøO=õééé,\¸«ÕJVV6l ´´”ýèG,Z´ˆóÏ?Ÿ+VÃüथ¥1eÊžxâ ÊÊÊ:4%I+CfÌ\pÁ”••ñꫯ²hÑ"„Ì›7… ¢(J8{ÇŽ\sÍ5<ñÄ,Y²„;wâõz9ï¼óX»v-|ðëÖ­à¸ãŽã©§žâ‰'žàÑG嫯¾BUÕË[¾|9ƒúúz™0a………øý~öïߪªŒ?žI“&‘Íã?ζmÛ°Ûí\wÝu\y啼óÎ;üîw¿c„ œxâ‰|ôÑG˜Íf ð€‚€"/,,dß¾}èt:„ fÍšÅûï¿ÏøCöîÝ‹ßïçã?fåÊ•´´´0cÆ šššº,Ò§Ÿ~šíÛ·c·Û¹öÚkùéOÊ7ß|Ão~ó„\vÙe|÷ÝwÜsÏ=ácz½^\.W»käóùº}l€¦¦&âââB „ ©©‰ŒŒ t:]ø÷1qâDÎ<óLöìÙÃu×]G]]]§S¯×‹Ãá >>ÇÃ=÷܃N§Ãh4RWWÇ…^Èk¯½s4’P'MÁUW]£¬i&“ UUiii!55•óÏ?ŸÌÌL–,YÂæÍ›ÉËËcÊ”)|òÉ'Lš4‰ŠŠ æÏŸÛí¦¢¢‚ììl¦M›Fbb‎²ÉûJÞW²]áí*>ˆ3A©¯ûA_kš†Ýng̘1¬Y³ŸÏǸqã(//Çãñðꫯâr¹xíµ×0›ÍœqƼòÊ+üìg?CÓ4.¹ä®»î:.¼ðB¾ù抋‹9ꨣÂmqüøñœ}öÙQ^^ÎwÞɺuë¸ãŽ;HLLðû["é ‰1#„`ëÖ­°téR***xì±Çxùå—™3gªª"„ ¶¶MÓ8pà‹…ÓO?¤¤$6lØ€^¯çÛo¿ +Žøøx4M£¨¨ˆÌÌL PU•ÆÆÆð1Û–wÚi§‘ššÊôéÓÙ´ik×®¥ººšcŽ9†O<‘›o¾™^x^x½^ÓédÛ¶mlذ””.½ôRÞ|óMî½÷^¦L™Â<Àرc±X,ìÙ³'üpÂ.CÊ6ÄøCü~?ûöíÃ`0PSSƒËåâÓO?¥©©‰´´4Ø·o_§å)Š‚ÏçãË/¿dݺu¤¦¦òãÿ˜>úˆo¼UUùë_ÿÊüùó9ꨣðz½ácVVVb··Oái0°Z­];DèûæææðC-æá÷û»5zl0PU5<*ÙV«•ÿþïÿ&77—ËÅñÇϪU«¨¯¯gïÞ½ÜÿýTUU±lÙ2Î:ë,fÏž³œíÛ·³lÙ2Î=÷\ŠŠŠÂß+ŠÛ´iMMMdee±gÏÞ{ï=&Mš„Á`Àétrúé§óØcñüóÏ“””ıÇ‹Ùl檫®bÅŠ<÷Üs¤§§3sæLòòòä}%ï«A»¯d»:òÚUs‹ Eêë~Ð׊¢`2™˜>ž‡~˜•+W²dɬV+ .dÛ¶mœxâ‰:tˆ>úˆ÷ß?ê˜Q…ƒ &tû\Æ‚%K–ðꫯ"„`„ áòB£]µææf¾ûî»pÜ|GlÞ¼™+®¸‚‡~˜ÿû¿ÿ£¶¶–¢¢"®¾új~ö³Ÿ1qâDôz=iiiŽnmذêêjæÌ™%kCCÿüç?Y´hwß}7©©©œp ¼óÎ;ø|>®¸â RRRÂíë´ÓNCÓ4^ýuN8árrrøôÓOÙ´i?ÿùϹúê«Ù¼y3ëׯ祗^âààÁƒüñ䥗^bëÖ­ÜqǬZµJÞWò¾êñ}¥( ;vìàŽ;îà“O>aÕªUÜqÇl۶矞E‹…Ù®óvõÚküß§Ÿ˜”$õuõõ_|¢(øý~&OžÌ¡C‡¨ªªbÒ¤Iø|>L&'N¤´´”_|‘W^y…;v0qâDÌfs¸ÎCõ¯( Ÿþ9wß}w¸-®_¿žÏ?ÿœGy„7ß|“Ù³gÇ[o½Å¦M›¸óÎ;ùøãÙµkW»û{×®]=¾§%’Ã! 3»øâ‹Ù´iÏ<ó ÿûßQU•k¯½–“N:‰—^z ‡ÃÁ‚ ذaÏ<ó š¦1mÚ4&L˜@ff&Û¶mãž{îࢋ."==¤;ü¯ÿú/jkk¹þúë™4iiii–7~üx|>‹/æ®»îBÓ4Î?ÿ|æÍ›ÇÆùÇ?þA||<999\|ñŤ¤¤„ÏaÇŽ Eáïÿ;>ŸÛo¿‹.ºˆ?ü»ï¾£ÑÈÍ7ßLVVpéggg‡GÀòóóÙµk7Þx#f³™… ’ŸŸUWßÿþ÷YµjU·Ê‹±ûòË/ihh 99™7ß|“×^{ pþùç³{÷î¨c†ÊkË…^ØícÏž=›‹/¾˜þóŸ!¸øâ‹Ã£k:ŽÌÌÌ.C¬&OžLZZýë_¹þúëÉÎÎŽ™Â`„ Ì;—^x!Ç{,W_}5cÆŒ©>?üðCÎ>ûìðw±¥ÛŒÜ'11»ÝÎ3Ï<ƒ¢(äççsß}÷qüñdziÓ&Ö¯_Ͻ÷Þ‹Ùl&##ƒÊÊJ&MšÄÑGÍûï¿Ïé§Ÿ@QQš¦ñàƒ¢×ë9á„8ùä“Y¼x1ß~û-çœso¿ý6Ó¦M###ƒ×^{Ñ£Gs 'ÈûJÞW=¾¯ÊËËyíµ×(**ÂçóñÚk¯1þ|Ö¬YæM›øÙÏ~5)^¶«Ã°]}ü1wß{/FUåæ[n‘úºúzÞ¼y,]º”ŒŒ ÆŽË„ °Z­äåå‘™™‰Ãáàâ‹/æóÏ?çá‡`Μ9\uÕU466’••EBBŠ¢ššŠ‚íÛ·GµE¿ßÏÏ~ö3öìÙCff&6l`íÚµäççsýõ×óÚk¯QPP€Édjw/X° ]”HŽ4”n|¯F¼‡Ö–ÑE¼ë#^ZS8‡>›§Lš8ëé'½ýèÇÚ Áœ÷poïÙ³‡ššRSSÉËËC¯×S^^ŽÑhÄétÒÜÜÌŽ;Ð4‚‚‚°¢¬®®f×®]X, ©ªªböìÙœsÎ9ÜtÓMx½^òòò0 ]–'„àÀìÛ·/\^BBMMMlß¾ææf²³³ÉÎÎŽrù644PWWþ[ÃáÀjµRSSÃîÝ»±Ùláó‚À$¿ªª*ìv{8¿~II »ví"55•˜kô¤¼.—‹êêêðÈ©³ÙLbb"¥¥¥ácñõ×_óÝwßEMà4™LÌ;EQصkW·ŽÝÜÜÌ®]»BPPPŽ÷ûýTTT‡Åbá“O>áСCáã !HNNæØc¥²²¿ßOFFF¸~×®]KKKKT]3nÜ8vìØÛí¦   jDÏï÷S^^ŽÕj¥ººšµk×FM¦TU•iÓ¦‘œœLcc#©©©ás«««£¡¡!p3C5Bk¸\.vìØÑh$%%…––ìv;‡â—¿ü%dùòåá[UU»wïFÓ4FMJJJ8CRbb"ÕÕÕFâãã©®®Æf³õªÃ)ï«#û¾r8á߆Új}}=III455áõzIIIéuØŠlW#§]íüê+lMÍäÍš…!ÑÙ§v%õu µµµ¸\.’““©®®FUUìv;•••X,l6 ìܹMÓÈÏÏÇápàñxÂ÷£Ùl¦ªª xÑBò†HHHÀår…³£…æiÙl6jkk±Ùl †v÷wrr2ƈ~•D2ðz;vìÀn·“‘‘1 ÇH:BÓ4vìØË墸¸¸ßVžjä}%d»8D}CÀ˜ñzÁ`@ÉΛµïF®úZ". ¶13¸sf”¾Ñz½>¼—D2بªJqqñP‹ÑïÈûJ2Èv5@hÔÖ?øÜ÷kˆÚ:”KŸ¼3‡‡«¾–H† ØßÅ 3B¼OОØT¢‰D"‘Y(ˆ¦&hh¡_Jàïº:‹ùì•H$‚×ëðe"c&˜S׶̓vb‰D"‘IMƒX+ÆïªG‘ž‰D2ˆø|>PÇE3(ÆŒ¢¨ Ã‹ÑR“H$‰äˆAQAoˆ±AH§ŒD"<ôqþÿ 0hžEQR£J$‰D2ˆ r»DÒ(ƒ4ºß]3|j¤¢ûý‡•gF"‘H$‰D"é BÜn7Ú01 TEÁh4;ëHG3‰D"‘H$’a…ÛífÇ®]*+Ççõµ8è ÒÓR)ÌÏÇd2 µ8’ Ò˜‘H$‰D"‘ „ìØµ‹í;v¯°®–?v¬ôÐ dz‰D"‘H$ɰ@<‡ÊÊB (ʰz !8TV†Ç㑳ц Ò˜‘H$‰D"‘HzÈ0òÑÈ03‰D"‘+‚oí€IDATH$ɰ@F£‘ô´4‡W˜L]éiiÆ¡ED3‰D"‘H$’aƒ¢(æç Ûr¾ÌðA3‰D"‘H$’a…ÉdbüرæçËÔÌ’N‘ÆŒD"‘H$‰dØ¡( qqqC-FÃ-ìM2HÆŒ„@ d#H$‰D"‘tÙmy”`¿p.Þ 3 =>ôÂ7('%‘H$‰D"‘H†z|(ƒ”ïmPŒ™¸¸xrFbµY¥‰-‘H$‰D"‘®( õ ÄÅÅÊáÇ3£*èF £Œ5”H$‰D"‘HS%ÐïWÔÁI”0x‹fJ#F"‘H$‰D"9üÄ~ÿˆÉfÖ[ŽLŸ'‘Yô—÷·7ºc =ÏC-Ô¥‰d É}¼‘ ûH±/ cF¦ùñûýWxoŸÉ\EQÐét¨ªnÄ\¬# MÓÐü~Ä M“ ªN‡ªvÏI< º¢½pídU^ßïCh¢}ûÈæ:ÔòH]*‘HzÁpîãišÖéóg8Ë>’dh†Ô˜ \†ºZšêäArK.„‹Õ†Õî@UÕaqAŽt„Ðh¨«£±¾ŸÏ{ØÎ±BCQ/Ês¸Ê¢( z½›«ÝÞ¡‘º¢±¡¿ßß© »í¥ƒíÝý>„N§Ç™œJÅ¡’°üÑ‘„#UžØ?èÒ©K%Iƒ¥·cÒ ½ä÷û©«¯Çn³¡ÓéF”ì#EÆÁbÈŒ!~¿ŸêŠ2ÜngÆøx úÀ„!ŸÏ‡N§CAÁç÷¡×é ígŸ½>Ð}~?záÏ‚À1ôz}øxz½¡ ¼>/ž–jk*ñ¸]$¦¤Ž'ÂC†Uåe¸ZZHLNÅbµ¢¶Q0‡BÓhnnÂl¶ tÓ#q¸Ê¢ùý454P]YŽÇí")5­A¥+\.œÉ)X¬ètÝP_¡ÛYôñû°, !ÈÉ/Âh4ö,,ø0”Çï÷ÑÔØ@Me…Ô¥‰z½Ý]½¤ùý#Rö‘ ã`2tÆ ÐP_‹Ûå";o4MÍlß¾§ÓIœÉÄÒRSR0 ””–’–šŠN§£äàA2ÒÒQ…Òƒ¥dfd „àà¡2²23ðûý”•—“•™‰×를¢‚ìÌ,\n7UÕUdefÑÒÒLm]y¹ydçæs`Ï.êk±;“ºg‘J„†º:\--d. >Þ<Ôâ š¦aðz0Mݯ:œe‰‹7c¶Z9°{' uuØΨ푺"+'£).èN׺.\ôÓ÷õ¥ùÇBC .ÜmCyTUÅîLÄl¶P²oÔ¥‰dÈõv_ôÒH}$È8˜ ‰1#„ÀïóÑÔPÍᤦ¶ª’——‹ÉhDQ, :]Àm•`± ×Dµ&$„?Û¬­Ÿí6[Àë8ìöðg§Ã^¯Ç&I‰ÎÀgkN‡MÓ¨« ÈÐP_K‚ÕŽ¢×ËÅ!@Ó4ëëHLN=¬ ™Ã)xn8Èo&19•ÚêJlö°a©+‰Iè ¼^ÏÉÙ“,sT4mHC!‡‹<š¦¡3p$&QW[-u©Dr3\ôvoôÒH}$È8Ø Ù°°ßçÃïó¡38PR‚N§ -:“ÉñÙ„N§C§ÓñÙã³¾£Ïz}Ôg‹Å‚¢À¾ýûÐ ay$Cƒæ÷ãóy±X­C-Šdˆ°X­ø|Þvn¿Ï‡ÏçÃ3$`°B ݘÓ5\äÑü~LqñR—J$’a£·{£—F‚ì#AÆÁdÈ<3B4È"át80™LáïÛYuB@ð;ü;Ÿ/øPîÁïé[µ Àçóq¨¬ ŸÏ%“D">„uE/èúª+Zå„sÑGyPkÄ^C+O¿Ö¡©~(P"‘ŒX†•Þî¡^ ²“!_4Ӡד3jT`"dM( Q–§BðŸð­tdvÔIî¦×éÈÊȧw–H$ØÈû<òV]ÑúGë#@é®<Áï@QUZ\.šššðûüèô¹‚qqqÑ“÷RžªR&‘HÚ2’õÒH}$È8 ¹1ãõùØ_RB~^&“±µ’Úzj(!ë¯{2*œOÄN›ù×7x uJ$’¾"Ú…Š†®ˆÜ ¢þìZ…@ sMm-Ÿ­^ÚuëÙ¹{7MMÍX,f òó™5c:ÇÍš‰Ãad%@y¬~Ú>L%‰è‘^ z«YæÛ+”Á×K#A§Ž–!7f„ë$@ìZ‰˜ü¨ŠÒƵ±PÛòcXŒÓ磼¢kBB—r*ŠXá4XfhåÕÃPèKÛsëè{‰dðÎÛŽÔq´®ˆümäöXût¤+"·G?\»)¢ðÝæ-<ó¿‹Yÿùçøý6› ƒÁ@Uu »÷ü‡ÿ|´ŠéÇÍÏ~òcÆ×þAÔŸò Pý †ÅSM"‘ #º¯—Pš››innÁlŽÇlŽê¸öz)4É<–ÁÓz©/:µ½Œ£S¥Þ‡a`ÌôzrsÚ„™µË–ÐZQ~¿FUm-F“ ›ÕxèÇœ‘Ô¦Œ6ß z}÷ÂÌ täëo¿£¼¼›ÍÆ”IÉÍÉêêëWE¡¼¼‚’ÒR&Œ‡Á`Àçó¡×ëÛ}?ðz½”––’žžŽÉdën”——ãv»q:Øíöðþš¦QUUEcc#6›¤¤¤ð6ŸÏGee%‡ÃÍf oë¬Ìζ)hšFmm-‡cÀßlÕבá¨m6*"æ”`Æ!D;xà(ÅÆÚëöˆrD¬¢;•GQ¾Û¼™Eý™m;v0iâDÎ:ãt&Oœ€Íf£®¾ž¯¿ù–·–¿ËgkÖRQYÉÂßüšñcÇ2Õпò ˆèl»ºì3ܭ㡹Ö]†þ™&‘H†=ÑK[·mãÙ<Ïö;).,àŠÿˆ1E…Ñ}¼`¸T]]¯§Ã.ôÌég½ÔëgŽš_£&⹨өí#¼z¡SÛöwûò\ìð‹¨÷=@8¥\°†¼^{÷ïÇëõ:„Ü‹mÂø((ÔÖÖrÛoïfá]wóÞŠ•457·.°G›ß·õ~E|¡ ÜO„Õ,Âò…P… Ÿoä®{îãù—^fÓ7ß²ìíwøíïïã“ÏVGLâ¾Ê‘·Ý'ìåéàw¡mm¿µÛmmï¨ÌH9Eaëöí¼ôï%´´´PQYÉ3ÿ»˜²òr¶íØÁKÿ^BSssÌóè®<ÉØ^|ñEÎ?ÿ|¶mÛ@ss3=ôçœsgu]t«V­ÀãñðÔSOqî¹çrÞyç±`Á^~ùe„466rÿý÷sÎ9çpöÙgsñÅóñÇwYfgÛŽ$jkk¹óî{¸óî{ÂFM­+DT¾Ý½þQ›W°½Õ74RYY…?䆰!SßÐ@Eeex[h‡vz$æUÇò(ŠBmM-ÏüïslÛ±ƒSO>‰Û~uß?oE…¤$'Q\Ï…çŸËïý=§z*Ûwìäoÿû\ £Riö] UVVÑP߈´^ÚmkhJ·t©ˆ¿ŸÊª*ì¶Ø 5†<Oþíï$''sýϯ&%9™ºúzþŸGùÛâç˜0n Z\.¬ (Š‚ÇãÁív“€×çÃãv£ª*MM$'%áñx¨ª®FUu$%:£¼ UÕÕ´´¸p:ìØl6„x¼Þ¨2’Ñ×cq{<ø|>%0RÃaËßQ™Š¢ÐÒÒ%G\\ãÇ%))‘x³™»w³bå‡}ÔQŒ).â'‰—a±X€ —#–¬½^G]]=ƒ>ù$·ÝvÅÅÅÜÿýÜÿýL›6Õ«Wóàƒò‹_ü‚“N:‰gŸ}–{ï½—3fðå—_ò /pÛm·‘››Ëƒ>ÈC=ÄôéÓùôÓO;,³£mS§NÅz-þéz¼BŸžÛµ{\UU\.«×¬ãÕ¥oÐâjaÑ}÷’’œ„¸ÜîÀ¶7Þ ¹¥…‚Û4¡µ+;Vù]É£( Ÿ®]Æ_0iâD~ôƒKxéßÿæøÙ³9qÎñúðùHKMáºk®¢ô`)ë?ßÈgkÖrÖ§ã‘õÙwyjjj¸í®»1ÇÇsÁ‚s˜5sñÁ{±¦¦–Ûïúñ‘Ûâ㉠ÂGˆ­K[µ¶ˆ)™D"9RéZo«·ïØÉqÇÎæ77ßȃBðÙš54µ´`6›ÃDŸoü’ÿ~ô1JJrÅ~ˆÕjm“¢¾?õRÏž9Dì¡ùýTVŸ‹,jÙwÚ;C3E;7LŒufF€ÞrcF¯×‘“^¯o­°ÈÙ¯®1œ±¢**:Ž––V~´Š/7}Í©'ÍåÜïM^^NxQ¡ØuÛzÉÃaf,Ô¨ª*¿úŠŠŠJ~õËëÉËÉÁ¯iÄÇÇsõ•Wðù_ êTÖ®ßÀû¬ä×7Þ€Óé`íú üç£ùõM¿dó–-üûµ¥èt:<W_ù^^òÛwîDUT&ŒÇÕW^A||//y••­Âçóát8øñe?`æôé|õùF–¼(Ãívó»…· …OW¯áwß#Îdä@i)FƒþàN8þ8\.¯¼úZ»2gL›ÆÁC‡xúoϲc×®°×üìJvìØÉÿ}°’+üC–¼þ••¼øò+ì±lݶ®ûBÓ:”õó/¾äµ7–‘`±°gß>4Mã’ ¿ÏóæáõzùÛÿ>‡ÍnãG?¸¤×áHUUU<ðÀŒ3&j ´´£ÑÈÉ'ŸÌ˜1cx÷ÝwY³f š¦±mÛ6ÆÇÕW_ÃáÀï÷³|ùrvïÞM]]çœs—_~9:Ž5kÖðöÛoãñx:-³£mþa°Jý`¢* JðZªœÙ$ZaÓ^Wxà M°mûv^]ºŒ•­¢®®Žô´´ðâ¸Ûwîl·Í¯ùÛxç¬3OçŒyóHr:Ã{Æ 7W„™µ¸\˜ããcʦ(Pzð v›¬Ì ü+œ0¦¸€ºúzö8€ßï„­Ô7°¿äš_£©©™ ¿à„ãŽå¢óÏcýÆ/øvóî¸õ„¦ñ·ÅÏñÝ–-¸=Þ|g9?ýÉåòÒ+ÿæé¿ÿ/ùù47·–qþ‚s0[,Á›W¥¦¦–õ6pé%óÃK/aé²·øûsÿ`ܘ1|³ysÌ2 ó Xõɧ|·e wÜú›V96o¡±±‘»va2™˜Ú<6oÙÊ‚ïESS3;víBÓ4>]³¦CY›ššØøÅ—|ï¬ùÜú«›XòúR^]úÇÍž…9>žìì,,fs¯CÍü~??þ8~¿Ÿk¯½–_ÿú×ámsæÌ!%%…Ÿþô§dggóÉ'ŸpóÍ7“À\À™gž‰Ãá ©©‰¥K—b±XÈÎÎföìÙ¬]»–×_·Þz‹þð‡Øl6Ž?þøËìh›Ãáè÷û$4/ůifKÔ©ê€Î[i+‹ª(TVU£i®²ª:°ý.‹hãÒŽ:qZïëÊêj–ÿß{¼ùÎr”” ÓéPU…ªª*Þ[±’eo¿µ­5L!–qк0X[—{Gò( 465±k×nl6ãÇA¹sŽG¯ÓóüKÿÂíöpÌQSB`0HLt2~üXlV+;w¹9ìµí«<õ¦ª ÓéhjjâíåïñåW_³àì3™vôTÔÛÎ9k>gž~:I‰ÎŽ‹ÖŒ*“H$‘tGo fshjnËqíÕW‘›“Ã'«ó€ô:=™˜L&²3³ØwઢâóùX¿ac'²*¤¦¦pñ÷¿O^Î(JJ²uëv<v›óÎù^ŸšËòåËyçwxä‘G0™Løýþ°'¤¾¾ŸÏ‡ÕjÅb±`±XرcMMM¤¦¦°zõjyä¾ýö[.\HQQQ¸ýÔÖÖ²{÷n\.‡ÂívÓÐг̖––·555…Ãñú‹Ð¼”ªª*5¶9#4ARRÿuÏÝ$&&öëñ;–EEÓüÔÕÕðÛßÿUÕ!4­_eü ­ºBA¡©¹‰??ú8}üIø¡û°©©™??ö›·lÅçóEm ~–©¾#c‘£]é¢yü>?MÍÍôz, M  Ç; UUùç‹/±tÙ[y¹9Üxíϱ&$`0hnn¼ÏûCêÏV (´`gIi)}v1Ÿ|¶š¦ææ˜Û¶mßÁí·ü ‹ÅÜ&»PëєУp<Ø$ÉÐÓ½BÓ…ùÜû»;q¹ÜèõzÞ[ñOÿíïü剧¸ôâ‹8nöl²³³XpÖ™ACFkWjÛ#÷V/õDvEQ!¼¿½›ŠªJTE úÕÕpÛo‡ªªhB#%)™þp)ÉÉ¡õIö¾Ê‹þ–q°bcF ×éÈÎÌ d‹ ‰ˆ&¦t/./ÐI‰Ñá‹ÊÐ#Ðëõd…Ž+]@jJ õ õÔ××ã°ÛB Óéøö»Í¼¼äU®ºò'­£ºÁ Å.—+Âò ¸O-f ^¯—çÏçcÍÚu<ý÷g1üôòÓÐÐHJJ ƒ¿¦gŠCQTÜ7ˆÖ2Ú…0 °ÛìÄ™âÐü~¬V+Fƒ‘—‹úúR’“Û•ÙÜÜÂÜ9ÇãñxÂr ®ÿù5QaBBh+ží0âêHíHÖàùÆ™Lø5 ƒ^¨ŸˆT ìž·ü––/^LEEÏ=÷•••o›CÖ¥ùä³Õ˜ãÍÜû»ßRVVÎ}ü‰5ëÖ“˜˜ÈÞ}ûhjjÂn·³}çNÒRSÙ½wo¸ŒöU¨PQYIMm II‰ìÚ½¯ÏǨ¬,’“’b–™š’ÌÇmåXô'>þô3&ŒUB„Â+™8 C‡å¦¥¦Q_ßÐiYCCŠªb1›{ÜZt:?øÁ˜6me1¤¥¥H€OBpÝ ¤¤¤pÑÇÌ£>ÊM7ÝÄ~ô#Ìf3~¿ŸÏÇã?ŽÉdâ±ÇÃ`0„ÃÄÜn7õõõ1Ëôù|nˆL‡ƒÿºçîn‡™ $‘²„ÂÌ~ûûßð‡ßÿžä¤Ä¨0³þ f•¶Ó³‹ÙÌ-7ÝÀøqcyý7Ùà@x{hÛç_|É«K߈ÚUdGá×]]ÖÈ‚‹…‚|vïÙÃ7ßmfܘ1áýü> æøð}Èùæ»Í4442{æL,íçþõRžŽêKÈÎÊâ‚óÎeÚÑSùÍÂ;illŒÚvþ¹çpÖ§ÇÖ©±ç…J$I·ôv$ MMM4·´`Ðøà?ññ§Ÿ’5§ÿöwü~ Î>ƒÞÐñÜè~ÐK=‘]h§ÓÉŸÿôš¨Á~ÙM¿¹ €??ø@ÐËH¾dŽ‹1±ç²÷EÆÎŠîO‹¡3tºV1Bá"¡¿¢h³8OhþJRb"§Ï;•óœCNv6~¿/ÃßιñÉï÷SS[Kb0ûW[4M£`ôh.<ÿ|þñâ‹ìÙ»ÜQ£ØµgûàšŸý§ÓINÎ(</?õWl6ºš¤`h&DØ›¢Óéhhh`ÉëK9Xv€¦¦& ò›Ëz˜ÿyüI²²2YùŸ˜=sÙYYìܵ»ÃI劢PYYÉ£O>Íø±cYõé§L™4‘¼ÜN<þ8=üßíÊÌÍÉaã—_EËÑÜDþè<f@, šæçõeo1*; MÓЩ*sO˜Ã¢˜²f²eë¶ðïC×($»Ûãáñ§ŸÁá°sÕ?éñ\ £ÑÈ\þûÛo¿åý÷ßçÊ+¯dòäÉœvÚiüêW¿â¦›n";;›åË—3eÊÆŽËÃ?Lyy9ü1ëÖ­CÓ4Ìf37Üp'Ÿ|2wÝu7Üp¼ñÆL›6I“&qÚi§qóÍ7·+sòäÉTVVÆÜ6nܸ~¿GTUÐб¾Ê¢=ÉI‰Që÷ô'¡Wtàh··Ø¸ì¢ ™=s&ÿ~õ5Þ_ùjkkÑ4 «5K/¾™3¦Gm §“Œ(?ÖüɨÐ× £8¦çŸó=ŒÆölûS/uWv$¿±%XÂÓ Ü®–p¤‹-Á‚Ö€4^%ÑIÿ´û²÷VÆØ…µ~ìOƒŽb.”Ÿ•ˆ—ñùÒÅxFÊξä’KŽ7™Lq¡‡©Ï磱¾«ÍŽÙlÆd2F\€GOªmæÍwÞ¥¡¡‹ÅÂÜæpÃu¿àì3çc·Zñz½±+6ÖµUÀd4a2šhnªÇbµ£×Úe¡( Õ5ÕTVU‘•Å.ý3§OCQì6é锕—Ç™§ŸÆ¸±c(.,D¯×“˜èdlq1z½žœœQ ¶mßAMm-'Î9ž3æJvV¹£F±gÿ>*+«˜1m]p  )1‘±ÅÅQ VªªÊ·ß}GeeÇL=Š’ÒRÆË.ú>»”ÔÔËÌ[£Á@RR"cŠ‹±&$`6›ñx<Œ3†ÜœQ‘™Ùa¹@ø÷}ÀHMLt2nìôz=ÍÍÍd¦§“›“åÁÑ4? uµ8“S¢ŒÛÎB`µZ™6mV«•‚‚ÆŒCCCB¦NÊM7ÝDZZdeeát:±Z­Øl6œN'Gu³fÍ";;›††4McæÌ™ÜtÓM$''Ç,óÆo$==½Ãm]Êíõz0Mý¶æNoéYšš›yûå gÎ?£W^7$w¨©ªÀjw„CÅBº¢©¡ž›U4€céΡ:뉉fΘNQAuõõ N9éDâLFœN³Úl;õ¤¹˜ÍÉ@b„p Màóûp57‘`³u.xVwîÞÍç_|Iuu EE…Øm¶ðœ%¸NÓ¥<õ÷gY¿ásŽ5‹Ë.¾(pÿ´ŸžÒ{yhiq±fýzòGæºk®ââ Î'9)¿ÏKSssë¶«ÛR’ñù¼á‡pd=ÇzÊišFcðZµÕ¥‰äÈ §z[A¡¹¥™ÿyüIvìÚÍìY³Øº};n·‡[nºÓN9™Ñ¹£ÈËËã˯6ñÉg«1 Œ)*D¯ë\Ov¦—„á¹Ï‘s({úÌièdA`ýºe#@pöü3ˆ7Ç£“HuUNW²}—1ôŠ\»&âï¾Ê¨( n·Ûý¯—_þäÀ/ _þˆÏ‘/ÑæEŒ÷˜(Ýø^x0ºˆw}ÄË|#>›gÏž5kéë¯ßn³Ù욦¡i.W å¥p$¥¶†™™ŒÁáÅØb)ŠBeUwüþ^Ìf3çŸsÇΞIœÉ„×XüRéÏËëórðP)IITW$5sqqñ1‚TU5–d4Q"c6#¶+JkÌ~èïжÐ9@ÀK¡ð6„˜ª&Øûý&“1ܨږB§Óñò’WùðãOxà¾{‰‹3…êB±³2cÉy.¡Ïš¦…ë$òûîÈÚöïP–Öf=¯×Cé¾=äÑÁépCÓ4šš°X¬šul°d©®®æÎ»ïèÓ„ÇÍ®­ß‘™“‡Á` ·—«…²’ý¤gŽB6æÛw€¢(è zZ\nÜn7ñqq¨J`b¤ª¨è Z\®¨m–Çí¢¦¢Œô¬QèõË£êT¶ïÜÍÿô[¶mcÜØ1œqê)L?›ÕF}C=ß~·™wßÿ€Í[·2¦¸˜;o»…ÂÑ£ÛÝ#ý!&M&ñqqø¼^4¡¡ ´ÙfÂçõõxÄÍçór¨d?iYëR‰DrøÒ½­¨°¬_Üp3ÇÍžÍ-7ÝÀƒü…ÕkÖòÌãÁé°£‰À<ç/6}ÍCþJJòãK/á}ƒÞЩLé%¿ßOMM N§3ªoÒ—g´öUþ.ð\üã½w“œ”Ô+F[Ù[°¾Éˆ‚êÞ¾=•QUUTU¥¾¾¾îÜóÎ[´zõš5@3ƒÆ x">û"^!#'ô.‚ïD¼Gžh˜!O (¹DDµVr4š8þû?b2šˆ<Œ=Á‰ç­‹÷´= Û#ÊÓ4êêêHr:èê‚jš†¢( †˜–kh;D/fúÀd4\ƒ儌†ÑQ‘˜ãÍ8B ÚÊÖY™Éy¬ÐoÚv¬º+kÛ¿´5XŽBshBŸ c€¦#]Ñ:O]àõx0ètƒa“¡ßhBÃãqGlÓ: 1‹PP„ct!æ÷S\˜ÏoÞÊÓ{–5ëÖóÈÖíØ¬¬e^¯—ú†ôz=sŽ;–«®ü Eùø}¾Ã’û"ª(X-"Bo*1¶yÚ7²äØK(]ŒI$’#îèm!sëÌÖj[³n=cŠ‹0hAo‡ÏëeêäIÜqëoxô‰§ølí:ΞI‰Îvó@úC/õæ™úÃétðçg &Têøw½•½·2F†¢ue½?¤ÆŒ‘ú´ÔÔÖ‰ÓáL ´¯ %ôÀ5#xÜîèòºXÈ´mqzެ¬Ì°Ð-™ûñÜûŠßïç¤çpìì™r{Qè0u”Œps>Oì¬-ÄÔ­¿ $ûˆ*'Âe®E>d"ËlwìöÄÝ‘ÇçõQ0:»ï\ÈêµëølÍZvìÜISS3N§“ãfÏfö¬™;s:fs| õzýÕòD .ÄÈz5Ø Dü¶3]*Bû ÄpxªI$’aE—zIÌñf~ö“ËùûsÿdÍúõŒSÌO/ÿæøøð€©|^/ãÇóðÄëõbŽk]Xx ôRïž9"<80úvíûQ§öVƘÓÒÛÈÐ_24ƒnÌ„WF%3îóùØwàEálfØ€"Ò~t?ö‚wíë7º%ù5úúzâŒÆ@ü:ʈ‹ñ6›Í½6d$’áL¤®hO¤"Ž­+¢þ¦Í¾]d:Œ ÜQæœnÈãóz‰7™8ýÔ“9éÄhiiÁï×ÐétÄÇÇaÔëñz=ø¼Þ¶?y¢-•Ž#bü¬#yÁ¥C[Gž.•H$}§·z[ÓüäçqÏ]wÐâr‡Q¯‹XW¯u=ŸÏKœQO¼É€ß9¥oz©?Ÿ9‚@ªé¶EÄüÜ Ùå¹8‚ôþg3SSÄ|VÚS tð䎵,&ìÚGÓ4INLìò—ÃiÄHŽ"Ö;j³¡Ý§þÖ±ŽÕ3y£snW`9..Z«i~\n_2õ·<P?_"‘±ô@/ù}>tŠˆ¾ÑD؉ô»„tŽ_Ó@Dõ¥éw½Ô/:µ•þЩ‘s¢ûOÆ‘¯÷‡<ÌLÕéHMIF§×Åt{Eí2F}ÕQ`È-ÜI¯Óìì~˜™D"¢"ƒ»Œ#¦uEëW±Öz*´èp®ð~C OÕtÂH$’¶ôT/ ´ÀôïÈý;ÑK1CŸúI/:d †4•R(ÌlÿáÝií!K0øm^Qûý}Äf¿æ§¦®6˜ul(kB"‘t‡€¢¸÷»Ú¹ŸtEGaW}–‡a&O¯ë§[G”H$G #Y/ÙG‚ŒͰ3‹3Å¡(jD%öµjD·¾×4¦Æ&´ZäO"‘ô#1çˆ Ž®ysÛ Ržþ;”D"9üÉzi$È>d†Ì˜QÔÀú›ªNGjjJ—k*´%d÷ôÅ£¢* ÙÙYèt%t2I†‚ÐÄ1M¦n>bÑ‚ë2µØ¨¨JĺN"ø´<ü‹¶ÙW:õ™¿æñ}ÛÔ@²ð/¤<º8| ¥.•HŽh†‹Þî^ ²“!3fTU‡Þ`Àíj¡¾©™––rG §¯Óëôø|Þð"”>Ÿ¯Íg5ø9zŸÐÚ'Öá÷û8PZŠÓáDE ×PUÝ]ˆ#U§C¯7ÐÔÐ@\|ïV—Œlš÷¡.ú>TÕ@Ûp»Z0šLD§ÿÒÁ(‘ÒÙÆŽ›Åü>¨ ¢R8KyBå¸]-R—J$’a¤·{®—F‚ì#AÆÁdÈŒN‡Ùb¥¾¶›Í^¯Çãõ²oÿ~t:™ì?p½Þ@zZ*û”`2IINæ@I qqq$'%±¿¤s|<‰N'JJH°X°Ûí””–bMHÀjµRRZŠÝf'Áb¡ä`)»«5£ÁˆA¯£±¾›#N>€‡ UUI°Ù©®,Çlµ˜4ÃiÜz8ÈÒÒÒLue96‡UžÊ§Óé0't…Ád"..>bd©+éEÄ~±—žì~­D/ô—ˆ\ñ÷–Çåj¡±¡^êR‰D2lôvoôÒH}$È8˜ ‰1ÊCm±Úhin¢²¬»# ••…¢´lý¬'';ú³ôÌäfg£* ªN%wTvØ“;jTøs^Î(TU‡ª*ÁÏj =ªÉ@eY 6{"«M®‹0ÄXívdl†.€¢ ª*ƒ‘¤”4ìÎD|^_'¢·»3¬(*zƒ>秆½5’¡EQTl' 6;šßß&Tr¸¡“€¨x…OW´%ºí&8ªô2FåÚ§hï18†Z©K%I÷ }*ùB·ûòµµn#_’áAèæHEW´;h´îˆÔzƒ!|ìHúåØÃQ©K%I)}¼XýŒ‘ ûHq0ÒufB'/„ˆ~phQd…õH$]3Tº"òø‘ï‘ÇŠPÈá"Ô¥‰¤#Fro$È>d,†|ÑLè^eˆ^š•àŽ%I?1pº¢Ý‘ºÔ±äèŸcGy¤.•H$½c$÷ñF‚ì#AÆfèŒ!ðù|ÝŸÑÛçñ¹‰¤Ÿè/[¢7ºc ĆZ©K%É@1’ûx#Aö–Q!`¨¬Ÿ!3f|>_8ûÎppQõ!Ĉ?‰D"‘H$CÑÜ8RÏýp9ïPX[vn>zƒaHd2c&ä‘ÉÉ/Âh4ŽØœUB¼7£é°h”‰D"‘H#¹q¤žûárÞ àñxØ·kûfŸòF£ƒÑ4”bô‰Ejá R"‘H$Éàs$÷#ŽÔs?ÜÎ{¨ÏaÈsߎTLôIg!‘H$‰d(8’ûGê¹&ç=ÎbȉD"‘H$‰D"é Ò˜‘H$‰D"‘H$#iÌH$‰D"‘H$’ɰX4³-~¿Ÿ%%¸Ý232HH°P]SCyy df¤÷q“•™‰ÙlŽ*£®¾ž%%$:¤§¥áõzQU5{iii¡ôàAü~Ô÷:ž„ UUU$:±$X8x𠇃Ԕ”n•ÝÜÜLIi)ªªcÔ¨lŒC¸î|>?¹9£ý|%‰D"‘ô~¿ŸýJp¹\Á%<B³TU%>ÞL}}N§“Œôô¡·ßini¡¤¤M ô¡E!..ޤÄD,K¿OÕ_ŒìKEýVW×p ´„¦¦&ôz=ÉIÉdgeb¦@®­«ãСC òrsihlŒú[§Óõ¹FÃRJ![·mgÏÞ½챌7–mÛ·óåW›HMMá¬3ÎÀëóñÙê5ø|>Î:s~;c¦ªªŠ5k×1~ÜX,>[³‡ÃÁ´£îÕÅí-5µµ|òÙg¸Ýž¨lñññäóÝæ-Œ;–ÔÔV}ò)ãÇí¶1S]SÃ'Ÿ­FÓ4Ž›=‹±cÆàõzù|ã4·´ž–:b¢D"‘H$’h<^/¿ø‚ʪ*E gÁRƒÁ@vV&û`LqñaiÌÔÖÖòéêÕx<TU ¯Í’èt2{æL22ú÷œ›øtÍjœÓ9&Ü—7v éiiƒšµkï¾ý¬^³†Úº:t:š¦¡ÓéSTĬ™3BðɧŸQRZJVf&)É)á¿332ÈÎÊêU7²»ÏÜ[†eOW¯×“’œÌŽ;©ªªÂãñPSS‹ß¯ÑÐÐ@Ss3-Í-465‘ž–†A¯§¦¦“É„ÇëEQl6ãÆŽ!-5•ººz””ÒârÑØÔ„ÝfÃëõRS[‹×ëÅš€ÕjF*„ÀçócMH`ü¸qAãB ×ë1›ÍMžž†ßïGÓ44- ¨º#ŸMÓp»Ý|ûÝf²³²0 Ár´ð~n·›ºº:Ü‹»Í†N§ÃãñÐÔÔŒÑdÄëñàv{p8ì(ŠBmm-Šª’èt†ò`Õ™D"‘H$0è L™4 —ÛEyyÛvl')1‰â¢" =&“ ‹ÅBzZn‡æÃì™.„Àï÷c·Û˜0nšì߀}û÷³ñ«/™—t2hjl$.>s|<‡ÆÆFâââÐéõ455êv»½Ã~Q]}%%¥¸\.›Â}ÉŒ´tEÁï÷S[[KCc#&“‰D§3Ð÷ ö§L&#^¯¦¦&,Øl¶^wcc#ŸoÜHm]cÇ“?z4 |¹i›·n%))§ÓIee%³™1ÅE444PYU…Ålfì˜1 Ün7UÕÕx½^pØí]^ÿ¨:ö™‡;ÃÒ˜HKKÅd2QU]McSuõõÄÇÇ…RcS^¯—ŒôtÊÊËùlÍZ,ššš(.*"55…Ý»÷àõx©¬®ÂëõR^^Áú Ÿ3혣ùâË/Ù³wš¦ÇQS¦0n옻‘Íf3…ù˜L&„3{÷ígçîÝ zœN'mijnfíºõìÝ×=ùôz=•UUlݶñãÆµnP›øä³Ï8xè Bö7f ÓŽ9š}û÷³zí:âããp¹Üx<ÒÓÒ8TV†N§cò¤‰5y2---¬éL‰D"‘Hú†^¯£  “iÛwîÀn·3qÂxTUeïÞ}ìܵƒ^ÏçgͺÃó™nM°2vìXô:¹£Fñö»õ”—WP[WG]]=Ÿ­^Íĉ8fêTJäãO>e̘bNV¯]î2~Ü8>]½:º_4v ãÆŒaÝú ­ýÅÏ?'gT6»wïA¯×“••ÉÆ/¾dëöíø|>E!#=cgÏ¢ºº†O?ûŒøøxÜn7-.Ö„Ž;v6Y™™=>ߊÊJªªªHOKcæôéÄÇÇ „Ƨ«×°uÛv¼^/n¯ÏÇ—›¾üívãQ¶íØŽÃnãó/¾äPYBh¨ªŽ ãÇqôQGár¹Ú]ÿ©GM!'''º6làÄ9sÂamÕa›Àép`·Ù¨¯¯çС2Ün7ÙYY¨ªŽòŠJª*«0èõ¤¥¥â÷k477SQYI‚ÕJRR">ŸŸÆ¦&‚‚Ñ£ÑëõØí6òóG³s×.¶nÛNrr“&LÀç÷óù©®®sQ…ªª*Þ[ño/—·–/çÛï6ãóyijjÂíö´î,Û¶mgÛönÊ'éi$%&²eëV*«*ÊHJäPYY™™Lž8ŸÏÇÖíÛhnnÆç÷ÓÜÜŒÇí!?/“ÑÈž½{ñx=àñxغm;.—‹mÛwt_&‰D"‘H$ýŠ¡ˆ  7ó†ú>Ÿ÷0~¦ D0âÄl6‡#lšššðû}4·´àõxðù‚{½ø|~ZZZÂýÃää$ŠÑ/Ú¶¯ÏGAA~¸¿X?!D`ðÜãeÏÞ}|ýÍ·ÄÇÇ1íè£ÉÌÈ`ÏÞ½|ýÍ7xÁb!/7ƒÞL/++'-5…£š‚Ñ`è ŸÙDMM 999á:ÈÉÎÖñðf؆™)ŠBZZ*[¶mãà¡C˜ããIMIÁáp°wß>ü~?ÅEEÄÇÅ!DàÂ;Žv‰¡Ñ 4M »[Z\hZ5» ‡ÝF\\Ü€œ‹‚ä¤$Nž;£ÉB`0ؽgoÌ}{*Ÿ››ËÞ}ûؽg/Š¢,y!(++cóÖ­èu:’““‰‹3Eͧ@Ln k…UQ1 J"`ˆy¹Î$‰D"‘ôœÃó™Þj 446RWW‡Á`Àb±ÐÒÒØ%¸½ßï!"û‡‡ÊÊ;ì !Z—´(C>ŸUUÃud2™Ðétøü¾ðñâã^”ê{ökBz½žªêÀ¼q£Ñ’[¹=Ò,tªAhþtÈ['Âó©sss¨«¯ã@I)%¥¥ø|>***1›Íøü_¡ia™ÛÖãpeX›[)))ÄÅÅ&'Y­X­VœNÞà$ÿô´Ô(ë[Q;‰ów¬ßï§óËËÍaö̤¥¥a±$0`ç¢êTââLÄ™LIi!·]›v¢×éÂrt_>Éhdâ„ Ä™LaÏŒÏïgÿ¸\.¦LžÄQS&£Su ¢œAˆ!ÑæÞÓët$Xz*“D"‘H$’~EtýõáøLoq¹())eç®]¬]·Ž†ÆÆÀ·ÝŽ4jjk©©©¡¤4´†®œPÿÐßI¿(²CóOB}y½.vå÷ûÙ·?ìÝ»—––l6CÐ7жÚK[ 99»ÝNiéA¾Ü´‰êêjöîÛǦo¾EAVffë1Û¢î÷îÝG}}“&N`î spØíyè X;égFÖÇãéžÀC̰õÌ$X,$%&R[[‹ÃáÀ`0à°;Щ:ŒFc8…qÈ*¶ šÐB`01šLT"hÙC`ô&” °° Ÿýû÷ZI$‰D"‰Fõu€à3ûp{¦ !(//çý•+Ã^—ä¤$¦Lž„^¯'ÑéÄjM`ï¾}”•—£÷ {¨ŸûE–Øý"·›„„Œ&#bý矓š’®ÓüÑ£Ù³w/[·mgÿþ¸ÜnŒãŠÇà×´(öÏ´^z6ì6S§LfõÚulüâËð¿ßOþè<Š‹ q»=×[¯¿@hUUQU•%%”WT`µ&ÐÐØˆÝn#))‘¸ø8öí‹}ýEi­ƒ Ÿsܱ³‡}€Žfõ(1>+/5â=ò¥‹ñ2Œ•}É%—o2™ÂþKMóÓPW‹39.¶M¥Ó鈋‹Ãaw0:/kBF£‘øøxrFe“••…NUQ‹ÅLVff8 ž¢(˜ãÍdff’œ”DB‚‡ÝArR"y¹¹¤¥¥†¥œQ£˜zÔìv{¯*Ñï÷¡ÓëcfQ,ð”™™ARRRTìaHƬÌLv;f³9œ<5%¥KùââãÈÌÈÄép ª*‡K°œŒôtN°Ûldee1:/ÄD'‰‰N,KT½)Š‚Ãá 33“¸ û4-5•´´Tœ)É]Ë$‘H$‰¤gtÖ¡ `6žÙN‡#<7$ÐÈÀn·c±XFÜ3½ë>”‰ŒôtÒÓÒÈÌÌ  ?Ÿ£&O&550 O¢Ã‰Íf#--5Ñ6%…ÌÌŒ@ߪm?ÇnÙ/r:m–@1)9‰¤¤D,dfdž–FZZ  ‰I‰d¤§3qârssPT‹9ò8¹233p:1Ï­«kît:IMIÁn³‘’’LzzE…Lž<‰øøx =éé$û—‘'%&ât8°Z°[mdff0iâD’““±&$ÄîgÚlá$»ƒää¤v}×öç᧦ª«ÝŽ:R·Ûíþ×Ë/ràÀ€Ђ/ÄçÈ—hó"Æ{÷F×ß«ï!Fñ®x‚/cÄgóìÙ³f-}ýõÛm6›=dµz½J÷í!ÌxŒFS?߃‡Û…Ñ7,ÓJ$‰D"¾Éýˆ#õܧóöxÜìÚú™9y Ïž¢(Ô×××{Þy‹V¯^³h&`ÐxOÄg_Ä+dä„ÞEðˆwˆaØ ë93‰D"‘H$‰DÒÒ˜‘H$‰D"‘H$#iÌH$‰D"‘H$’‰4f$‰D"‘H$ɈD3‰D"‘H$‰dD"‰D"‘H$‰D2"òE3E» F‘‹SI$‰D"‘ô„#¹q¤žûátÞÃá†Ô˜Bàõ¸C u]ôÏyH$‰D"‘ô€#¹q¤žûaqÞŠ‚×ãrƒfHEQ0M#zÑL‰D"‘H$‰äHe¨þò03EQ†¼$‰D"‘H$IÏ}ø!7fú ¯ÏOu½ ¯ß]y»0èt$Úâ0èuC-ºD"‘H$‰D"é‡1#(«iæ™·¿åãoÊhvû»õ+³IÇœ‰©\uæÒ-ÀÐ[–‰D"‘H$‰¤ûŒlcF<>?ϼý-Ë>¯¢° ˜ìø®çß((Ô××òâ›+~·]:£^ÃÀU&‘H$‰D"‘HºÇÈ6f€êúV}sˆ¬œ"4“:oç1f >¯÷¡m\8'/wÕRUßBFbB¿ËÖÒÒÂgŸ}Æ×_¢(L™2…™3gÏÁƒÙ±c3fÌÀdêÿ]~$š¦QUUEcc#6›¤¤¤¨m•••x½^œN'f³¹Ýïkjj0™LQÛ|>•••x<IHHèôø½9FOΣ'òô‡lýuN!„ø|> C·Û†‚††\.Š¢ „Àd2a³Ù¢bd½^/¥¥¥¤§§wÙÖhii‰ú½¢(X­VÜn7«W¯Æår…5zôhF= m¸ªªŠuëÖ‘ššÊÔ©SQU5\÷_}õdÆŒ$''÷ú]Ýmëiý%$$þ®§÷TWí­ªªŠºº:¬V+ÉÉÉÆH÷w»•HŽtºsOuµß`–ÑßçÞ•ŽìLŸtõ ëé9µ}ÖuW÷æ¼»®W”ˆ—.ø2F °VÀ$é@60(&SÀÜÙ³gÝ^vè`mKs“hnjÍM¢®¶ZlÞ´Q¸Ý.Ñ4Mšæ{ÖˆÙ7¼&ÎúïbÁcZ_—Dÿüî¬ÿÞ)æÞô¢xê_ï‰%Õâì;–‰=k„¦ù…¦i½’%n·[Ü}÷ÝbìØ±âì³ÏóæÍùùùbáÂ…Âãñˆ¥K—ŠN8A:t¨ßŽÉ@—yž?þ¸8öØcÅ”)SÄqÇ'þõ¯ MÓ„Ïçýë_ÅŒ3Ä1Ç#~ô£‰-[¶Dý¾´´T\pÁbÉ’%áïÅ}÷Ý'¦M›&&Ož,¾ÿý¿þ:æñ½^o¯ŽÑ“óè‰<ý![S$û÷ï .ûöíË–-ëVÛ¨¯¯×\s˜9s¦8þøãÅìٳŭ·Þ*𛛣ö[¼x±8úè£Å¦M›:-Ïçó‰x@̘1CÌž=[Ìž=[Ìš5K̘1C¼ýöÛâ›o¾ùùùbÒ¤IbΜ9âè£ÅÅÅâ—¿ü¥(++ëÖyö„U«V‰ôôtqÜqljòòòð÷UUUâä“OiiibåÊ•½.¿³6ÕÑ6¿ßß«ú[¶lYx¿žÞS]µ·P{™éìÖþI[Ú>뺣êš'Ün—ؼi£¨«­÷ñ[š›DÙ¡ƒµ³gϺ˜´¦íƒâ ½´’ƒö„5h_Äí C„ i—´Cj«©O0B€×/ >‡šý[ð¸š(áï½îšö®á³“¹òü“ˆ7[íìçÙÛ·o祗^âöÛoç•W^aÉ’%\ýõ¼øâ‹lÞ¼MÓhnnŽZ8©¢¢‚}ûöQ__}šls¹\Ô××ÓØØÈž={¨¬¬ oóz½Ý.¿©©‰]»v±wï^\.W—ßG²jÕ*|ðA,XÀ3Ï<äI“¸÷Þ{Ù½{76l`Ñ¢EÌŸ?Ÿ?ýéO”••qï½÷ÒÒÒBKK O>ù$W\qï¾û.---á2ß|óM/^Ì5×\ã>Jcc#‹-ŠÚ'Äúõë{uŒîžÇž={xûí·»-OÈÖ_çÉ®]»xå•Wغu+---Qm£#Ù¸q#çž{.¿þõ¯ùÕ¯~Å9眃Á`ï³qãF-ZÄÞ½{ñz½–§ª*'žx"×]w×^{-×_=444ÏçCÁwÞÉ믿βeËøÝï~Ç[o½Å£>Цiá¶}àÀvìØAUUÐ:‚×ÜÜ>^ss3UUU!hnnn×–}>.—‹ï¾ûŽÏ?ÿ<ü»M›6ñõ×_ÓÒÒ‚ÏçÀï÷SRR¶mÛ¨©©‰ºëêêhnnfß¾}”••…åììÞøä“ObnÛ¹sg¯êoÔ¨Q¸\®ßS§ÃûÔår±sçNî¾ûnŽ9æþùÏrÜqÇñ—¿ü…òòò»%I€Žî©žkllÄívw¸ŸÛíîðþŽÔ•«'eô'éÏ]»vuªë„466ÒÒÒÒá3,..ŽuëÖõèœb=ë:{ž Ô5—Äfć™ ÐDàåó¸pøœbK »DËš!΂×ÕŒkïZ~8'Ÿ{"ƒ¿æêo&LÈýŽ–ÍfãÊ+¯$))‰ÄÄDvìØNKí÷ûyî¹çxî¹çhnn&++‹[n¹…ã?ŸÏÇ?þñ˜ÛÞ~ûmž{î9Ìf3;wîÄd2ñ›ßü† „Ëîªüýû÷óÛßþ–¯¿þUU™5kVøÆ¹óÎ;£¾ÿýïß.äfÛ¶mŒ7Ž«¯¾‡ÃßïgùòåìÙ³‡5kÖ’’Â/ùK’’’¨®®æÎ;ïdß¾}Œ5Ц¦&²³³±Z­Qe~úé§uÔQ\~ùå JKKùýïOii)Qû®X±¢WÇhKGç±cÇ>ûì³nËÓ²õ×9…¨©©á±Ç£¤¤„‡zˆ¹sç¢Óuů²²MÓ8å”SÈÈÈÀn·G³ªªŠx€1cÆtkÁ,EQ˜9s&3gÎ`ïÞ½,^¼˜Ûn»É“'óÅ_ ª*N§3NpÙe—ñÝwßñúë¯sýõ×cµZY´hË—/Ççóa³Ù¸õÖ[™;w.·ÝvÅÅÅÜzë­<þøãìܹ“›nº‰E‹±iÓ¦p[¾ï¾ûP§Ó‰ÓédÅŠœ~úé(ŠÂŠ+ÈÉÉ J‡?ÿùϼúê«x½^RRR¸ýöÛ9ùä“ùðÃyòÉ'±ÛílÙ²MӸ馛øáØa›Ú·oÛ·o¹mïÞ½õ¸þŽ:ê({|O•””ðÁÄloàã?FUU®¾új’’’¸úê«9餓b†=ôw»•HŽt:º§öïßÏèÑ£¹çž{HII¡¥¥…ÔÔÔ˜÷^G÷÷¾}û;vl—ÇêIýIg}‹¬¬¬õ‰Ûí×Ëé§ŸÞá3¬³óm{N=ë:ÒÇS§Ní÷k>u}80²=3ö¨hüBA«/áücl<|ëeüä¤Q¸ö¯¥±¦‚–½k¹üÄ .?÷DŒ=^?¬ØÜL}‹@ò˜;–ã?ž; pë­·²råJÎ9ç²³³Ã7„ªª|òÉ'<üðÃ\vÙe<û쳤¥¥q×]wQ]]Ýá¶šš***X±bÅÅÅ<õÔSL˜0{ï½—’’’p ggå×ÔÔðÆo°~ýz{ì1yä¶nÝÊúõëY¶lY»ï×®]Ûî<¿ÿýïóä“Oâp8hjjbéÒ¥X,ÒÓÓÙµk………Øl6 BPZZŠÙlæ–[náø)))Q Âd2QQQ‰¨ªª¢¶¶6Êó#q÷îݽ:FwÏ#//£ÑØ-y"ñù|½’­·¿ë »ÝÎ~ô#222øÙÏ~FNNNØ{Ð`ß¾}\{íµœ}öÙ,X°€åË—OÅã?ŽßïçÚk¯òÖt¯×˃>ˆÝnç‚ .ˆÚÖöœŽ9æššš¨¨¨`óæÍ¼÷Þ{üö·¿å•W^!%%…¿ýío¨ªJVVK—.¥ºº:ܶsrrX±bëÖ­k×–EÁl6sÊ)§°fÍ***¨®®æ³Ï>㤓NÂb± ª*o¿ý6Ï>û,7Ýt/¼ð¹¹¹Üu×]TTTPWWLJ~HRRO<ñ“&Mâ‰'ž ¦¦† /¼0f›ÊÊÊâ‚ .ˆ¹-''§×õ—У{ª®®ŽÒÒÒÛ[II ;vì ¹¹™;3Ï<“_üâøýþvˆþ¼%IçÏ‚ƒ¢Óé(**"##ƒÝ»wSPPµÀž={سgO‡etu¬ž”ÑßtôLÎÉÉ!>>¾C}¢ª*………äååqàÀöïßõ {÷Ýw»¬ÛHºó¬ëìyÖŸ×\Ò1#Þ3BÓ>¿ÆôI…\qf2 ñ.9ë84ÿxç?\~ÆQ\ö½ã1èõxý‚׿häåõ x|óPu8<ñļ÷Þ{¬^½šõë×ó¯ý‹ñãÇóä“O†' !xÿý÷ÃÓ¶oßNzz:o½õ[·neåÊ•í¶½ùæ›lÛ¶ EQ(((àç?ÿ9™™™\ýõœþùlÙ²¥Ëòß|óM¶nÝŠÝn§¾¾ž—_~™“O>™?þñŒ;–C‡µû¾°°wÞy‡?ü€yóæ1oÞ<V¯^Í#<·ß~ËwÜA~~>ÍÍÍ$$$„½F£Œt‡ˆÕ©™?>Ë–-ã׿þ5ééé¼ñÆøý~EáÝwßeåÊ•@ÀÅëñx0›Í=>ÆÛo¿ÍG}Ôéy,\¸¢¢"N?ýt–.]SžŽÛ£†Ëåêñù÷öw¡ª*£GÆl6SXXÈž={ºõ;ƒÁÀÉ'ŸÌ…^ȨQ£xä‘G¸óÎ;™8q"_ý5ï¼ó<ò&“ ¿ßßß½´èpÙøá‡üÏÿüO—ÉL&Š¢àõz)**âþûï§¹¹™>ø€òòrL&š¦qæ™gòÒK/…nTVV2þ|¾ùæ›vmy̘1lذMÓ˜3g+W®dÆ ˜Ífêëë9ñÄyçwðz½|ðÁLŸ>‹.º½^ÏUW]Å~ð¶nÝŠ¢(dggsÓM7‘››ËüùóÙ¸q#---dffÆlS¨ªJrrr»m………}®¿žÜSBÜnw»{HQZZZhjjbß¾}\vÙeÜ|óÍüïÿþ/ .düøñlß¾ÿüç?@ßîE‰DҞΞn·NÇÕW_Ûífùòå1÷s¹\¸\®.ïËÎŽÕÝ2ú›ÔÔT€Nud,}b4¹æšk€€—㤓Nj÷ +((è–¾X¾|y—Ϻž<Ïz{Ͳ®cF ‰ÀÜ™-å‚¶º9{²½NÇ%óg3cb>£G¥aÐëñ ™ç×ÔÓäÖlåÒuëÖ±oß>¾ÿýïsÑEQ__ϧŸ~Ê/~ñ –/_NVV°Äkjj¨««ãƒ>À`0 i§Ÿ~:ñññTWWÇÜfµZB””D||<N§“¸¸¸¨FßYùf³™sÏ=·ÛÍ»ï¾Ë]wÝ…Édâþûïç‚ .Àëõ¶û¾ªªŠíÛ·0mÚ4ü~?O=õO>ù$3fÌàŸÿü'S§NEÝn§¶¶ŸÏ‡Ñh¤®®.,ggÌ™3‡?ÿùϼûî»444pê©§òÿ÷$%%±uëÖðñ>úhUUU=>Feee·Î£+y:Â`0ôêü{û»®Ð4 !Dø½;LŸ>£>šÄÄDn¼ñF.½ôR6mÚÄ?þñ***xî¹ç¨¬¬äàÁƒ<ôÐCÜ|óÍÌš5«Órý~?/¼ðùùù1÷m{O~óÍ7˜L&ÒÓÓÙ²e <ðBŠŠŠ0èt:4Mc„ ðÞ{ï¡( EEESPPЮ?ðÀ¨ªŠ‚œœ&OžÌ»ï¾K\\ãÆ#//!^¯—êêj233Ñëê2>>UUÃa¤6›-|† Ü{O?ýtÌ6åñxxæ™gbn늮ê/±Úð{ï½GZZ6›êêêví-99™¸¸8&MšÄu×]‡ÃáÀb±ðŸÿü‡mÛ¶Q]]Ý/÷¢D"iOwŸ&“©ÃýRRR:¼¿#ËèìXÝ-£¿é‹Ž ÑÑ3lß¾}ÝÒW---,^¼¸Óg]oôq_¯¹¤=#?Ì Z'ù ¨iòóì'u¼ùU~M`4[ÉhÀ§ –~ÙÈ?W×Óè̵4kæ›o¾á¶ÛnãË/¿ž‰'bµZÓŠ!Ðx322p8ÜsÏ=<óÌ3\uÕU¤¥¥‘••Ezzz»méééáQ‹’’’ðdÜo¿ý¯×KNNN¸ÃÚQùééé$''óæ›o’À‹/¾Èk¯½F\\K—.å7ÞÀjµF}¿lÙ2.¹ä^zé%^zé%.¼ðB>üðC}ôQ®¿þz}ôQŽ:ꨰ×bܸq|ûí·8p€5kÖ`³Ùº ¥yûí·Ù¼y3>ø ÿó?ÿC||<ùùù¤¥¥q饗†ñÅS\\Ü«c\vÙeÝ:®äéˆÞž_ê­+„áyTÝÙ÷ùçŸç/ù n·;ÜÖTU%%%…K.¹„«®ºŠÜÜ\2220¤¥¥ukTêСC¬ZµŠùóçc±XÚm%ðx<|õÕW¼üòËÌ;—´´4^ýujjjøûßÿÎ#<ÂøñãÃí-!!3Î8ƒ·Þz‹·Þz‹3Î8‹Å³/[¶,lØÅÅÅqÚi§ñî»ï²lÙ2N=õTÌf3BŒF#™™™lÙ²…ÆÆF ßg±êS§ÓññÇwئ:ÚÖC³«ú‹E¬6ãÇïUEou¤‚ºº:êëë;|†¥¦¦v«^¼^/?øÁ:}ÖõF÷åšKbsxxf„@Ó@ f%«kÑøûÇuçeA§*ø4Á_4²øÓ:šÜˆÐè÷,f!N9åžþy~þóŸ3þ|ŒF#«V­"..Ž“O>™­[·†;mçœs¯½ö÷Üs“'OféÒ¥äåå‘À÷¾÷½·)ŠBii)·Þz+3fÌà7Þàøã§¨¨ˆÍ›7wZþèÑ£q8TWWóøã³wï^êëë™2e uuu<úè£á¤úúz&L˜€Á`ˆŠýè£(//çã?fݺuhš†Ùlæ†nà{ßû/¿ü2¿üå/™4i¯¿þ:—_~yØ á÷û£æp(Šžw Óéxã7øÝï~V‘“×Ï:ë¬^C¯×‡GÚ;;o¼Nש<Ñ[Ùzû»Î°Ùløý~ž~úi&NœØeH˜¢(¤¤¤ðÐCQQQAff&K–,á”SNaÒ¤I̘1#¼ï·ß~Ëûï¿Ï•W^Éĉ»”eÓ¦MÔ××ÇÅjhhàá‡fÉ’%455ñÝwß‘œœÌ 7ÜžSVVÆ3ÏTUå¼óÎ㪫®â׿þ5üûßÿfþüùòùçŸG Nhš~à~øá‡Þ«V­Š¹íúë¯güøñ½®¿ŽÚFG÷T||W]uU8$¬øøxf̘ötŒ=šôôt¾úê+êêêøÙÏ~Æyç3Wbbb¯ŽIWçqÌ1Ç––ÖNUUinnÆãñ´{iš^Œ±§²õæœB©¾;’Åjµb·Ûq¹\L›6âââðH—ÛíŽù›±cÇ2zôh¶nÝJUUgœq7Þx#v»=ªþ„X­V¦M›FBBB§rèõzêêêÈÍÍåä“OLJÎ)!!ÔÔT¬V+iiiÌŸ?Ÿ[n¹%<µ  NÇŽ;ÈÍÍåÚk¯%!!ôôt ±X,¼ÿþûuÔQüøÇ?FUUÆŽÛ®-ÿð‡?Äd2‘˜˜ÈÌ™3III!55•¹sçrÜqÇ¡Óé°X,̘1ƒ)S¦P\\Ì–-[(--eÞ¼yüò—¿ (¤§§sôÑG‡CÌÒÒÒ˜:u*>ŸÌÌÌvmjÒ¤I˜L¦˜Û&OžŒÙlîðštV½½§:joqqq8¦OŸNII »wïföìÙüú×¿Ž¹hÜ‹‰¤•ÄÄDŽ:ê¨pâŽ3Ï<“+®¸"<ˆÐÐÐ@nn.ÇwS§N¹_geøý~ZZZ8ꨣ;vl‡ûuTFä½ÝŸtöL>ꨣÂac铆†òòò8묳(,,¤¾¾¿ßÏ 'œÀõ×_ÝnïV½L:•ôôôp¹‘ϺP”®ôq]óªëþÀï÷SSUÕî÷ÓEÁív»ÿõòËŸ¸™¼€|ù#>G¾D›1Þc¢tã{5â=dÀè"Þõ/­‹k†>›gÏž5kéë¯ßn³Ùì!¡×ë¡tßòÇŒÇhìùêÞ"W¶¯¼Ž‹þëC”” Mñ³­‹Ý¬rLn÷º©mñ²U<îDÅ7¼rçIä¤ÚûÕ˜‰Äív‡ÃY:CÓ4¼^oÌÕÎcm{üñÇyýõ×yíµ×0›ÍQž†ž–röÝÖÑ÷½©ƒž–šûÓ]Ñ›côEž²²2}ôQêêê¢Ú¦iáÎtä„ÍÞÈÖÝßõD–žþ&äáëNƲÞÈѼ^o;yêêêX½z5·Ýv[8OÛº„Þ·åÐÄÏþ¿#ÊËËùË_þ2`õ×Õ=ÕY{óx<Ãæ^”H$ÉðÀãq³këwdæäa0žŠ¢P___wîyç-Z½zÍ ™€Aã<Ÿ}¯‘zÁw"Þ!†a3âÃÌ :–8µ7zcÈr [,Ô6k¬ø®E Tn(ÜR àñ¸qÄé1tc;Ð݇ºªªîk›Õj%%% KC¦«ò{úý@ÕA$=í´ tç©­<‰‰‰üüç?o²%„Àb±Du¶{+[w×Yzú›î´­¾ÈÑb•óÁð‡?ü¹sçr 'ôº.;B§Óuk}ž¾àt:´þºº§:«£žÜÒ‘H$É`1¢8Œ?.‘­ ÄÃë Ý{ˆú¼n+öröÌD F Èz3É\À™gžÙ§T€’Þc0ú´ÒïPË2òeœvÚi̘1ƒÄÄĘ‹:ކS›’H$‰d$0b™€—E`2èùñ)x½[ølëv]Ý[ë§ãô£üø”L}¸Ì‘„Åbésö ‰äp!!!Aö‰D"‘aŒXc‚Ƈª’“‘ÈMçMä’ªzÜo×Ê0 ¤'Ùp:l(ª:â ‰D"‘H$‰äHgä3€^o )щÓa &èxý‚ógTU‡4d¤1#‘H$‰D"‘Œ,F´1„ UU‡Ó‘H$‰D"‘H$ÝDí{‰D"‘H$‰D2øHcF"‘H$‰D"‘ŒH›¸,¯ÏOu½ ¯ßß­ŽD[ýÀ®!‘H$‰D"‘H†ÃÀ˜”Õ4óÌÛßòñ7e4»»—šÙlÒ1gb*W9´D #o•‰D"‘H$‰äÈfd3BàñùyæíoYöy…ÅdÇw½h¦‚B}}-/¾¹á÷pÛ¥³1êu 3šI$‰D"‘H$#†‘mÌÕõ-¬úæY9Eh&uÞÎcÌ|^7îCÛ¸pN_ª¾…ŒÄþ_l¯¥¥…Ï>ûŒ¯¿þEQ˜2e 3gÎ$>>žƒ²cÇf̘ÉÔµÖSºüH4M£ªªŠÆÆFl6IIIQÛ*++ñz½8Θ+³×ÔÔ`2™¢¶ù|>*++ñx<$&&vºboÑ“óè‰<ý![S!>ŸƒÁÐí¶!„ ¡¡—ËÕºH­É„Íf‹Jeîõz)--%==½Ë¶ÖÐÐ@KKKÔïEÁjµâv»Y½z5.—+|¬Ñ£G3zôèiÃUUU¬[·ŽÔÔT¦N̈¨û¯¾úŠƒ2cÆ ’““{}Œ®î޶õ´þˆ‹‹ ×Ó{ª«öVUUE]]V«•äääSÙwVNoÎW"9ÒéÎ}ÓÙ³ +=ÞgM$mõ}wuR_èK¡£úëîó­í±6›­G×§§tvn~¿ŸòòrÜn7N§»ÝÞ-Y:*s0®ßP¢D¼tÁ—0q€° H²Ñ@10˜ ÌæÎž=ëö²Ck[š›DsS£hnjuµÕbó¦Âív‰Þ išÐ4¿Ø{°F̾á5qæï ;Ðúz¼$úïLj•ˆ³þ{§˜{Ӌ⩽'v–T‹³ïX&ö¬šæš¦õJ–X¸Ýnq÷Ýw‹±cÇŠ³Ï>[Ì›7Oäçç‹…  Ç#–.]*N8áqèС~;f$]~äy>þøãâØcS¦LÇwœø×¿þ%4M>ŸOüõ¯3fÌÇsŒøÑ~$¶lÙõûÒÒRqÁˆ%K–„¿kll÷ÝwŸ˜6mš˜Z‹_þò—¢¬¬¬[çÙV­Z%ÒÓÓÅqÇ'ÊËËÃßWUU‰“O>Y¤¥¥‰•+WöºüÎÚTGÛü~¯êoÙ²eáýzzOuÕÞBíeòäÉbÖ¬Yâ…^ˆ)ggåôæ|%’#îÜ7]= :ÓãÝyF·¥­¾ïŽNê }é#t¦ƒºõ|khh÷Üs˜>}º˜4i’8ãŒ3ĪU«º}}zJgçÖÔÔ$-Z$¦M›&Æ/N;í4ñÑGuy®±Êüæ›o„¦iýrýÜn—ؼi£¨«­÷ñ[š›DÙ¡ƒµ³gϺ˜´¦íƒâ ½´’ƒö„5h_Äí C„ i—´cdg3 :a„Ÿ_ P(ø¼jöoÁãj |'@ àõ´Ð´w-?˜•Ì•çŸD¼Éˆ"¼Ðf²}ûv^zé%n¿ýv^yå–,YÂõ×_Ï‹/¾ÈæÍ›Ñ4æææÀ± ŒTTT°oß>êëë£O³ƒm.—‹úúzÙ³g•••ám^¯·Ûå755±k×.öîÝ‹ËåêòûHV­ZŃ>È‚ xæ™g˜4i÷Þ{/»wïfÆ ,Z´ˆùóçó§?ý‰²²2î½÷^ZZZhiiáÉ'ŸäŠ+®àÝwߥ¥¥%\æ›o¾ÉâÅ‹¹æškxôÑGilldÑ¢EQû„X¿~}¯ŽÑÝóøöÎ<<ª"[à¿îNwg뤳‘I !, {-€È¢Š ŠÊȸ0 ›"‹è80âè“M>((8 ›b@•MQ…@$$²t–^ÒÝ·Þ!mbº;f½¿ï»_'·î­:U÷œª:·êV]¼x‘;vx,OsÈÖ\yªÍùóçùøãÉÈÈÀd2ÕÑ WTTTpüøqÆŒÃÌ™3ùË_þ¨Q£P«ÕŽkŽ?΢E‹ÈÎÎÆjµºO©T2pà@þüç?3yòd¦L™B\\åååDFFb³ÙB0þ|6oÞ̶mÛxá…øôÓOYºt)’$9t;77—ÌÌLŠŠŠ€_ÞHFGzF£‘¢¢"„Æzºl³Ù0›ÍüüóÏ|÷ÝwŽûNœ8ÁÉ“'1™LØl6 úmX^^gÏž¥¤¤¤Ž  ŒF#999\½zÕ!§;Ûøê«¯œ†eee5©ü¢¢¢0›Í¶©ªª*—vj6›ÉÊÊâÅ_¤G|ðÁôíÛ—·Þz‹‚‚õÝb±pðàÁFçWFæ÷Ž«:äüùóní]AEE&“Ée=îííÍÑ£GÚlíz´6Îê{wuú`4›ÜG¨¨¨Àb±¸-¿ÊÊÊÛ7€Ï?ÿœuëÖ1iÒ$Þxã „,Y²³Ù|Sê5Wy³Z­|ýõ׬\¹’‰'òÖ[oa³ÙxõÕW1.eqÕ‡ùÛßþ†Éd"--í¦<¿5·ü43@’I›ÕŒ9÷;üJ¸{{ë4ÞþXM•˜sŽðpÿ3µÚ »dnnÆAÍÐTw´˜8q"!!!“™™éØðÓn·³fÍÖ¬YƒÑh¤uëÖÌš5‹~ýúa³Ùxÿý÷†íرƒ5kÖàëëKVVZ­–gžy†Ñ£G;ân(þK—.ñÜsÏqòäI”J%½{÷vTfóçϯsþ¥—^ª7åæìÙ³tèÐ'Ÿ|½^ÝngçÎ\¼x‘ÇÆÔ©S ¡¸¸˜ùóç“““CTT•••DFF¢ÓéêÄùõ×_ÓµkW&L˜€Z­&??Ÿ—^z‰üü|âââê\›žžÞ¤4~«|dffòÍ7ßx,OsÈÖ\yª¡¤¤„eË–‘——Ç’%KHKKC¥jx¿k×®!IC† ¡eË–ÖI³¨¨ˆÅ‹Ó¾}û#¨ºNMM%55€ììlV¯^ͳÏ>Krr2ßÿ=J¥’   ÇðøøñãùùçŸÙ¼y3S¦LA§Ó±hÑ"vî܉Íf# €Ù³g“––ƳÏ>KBB³gÏ`ùòådee1cÆ -Zĉ'ºüòË/£P( "((ˆôôt† †B¡ ==èèh‡£TUUÅo¼Á¦M›°Z­„……1gÎ̾}ûX¹r%œ9sI’˜1c?ü°KÊÉÉáܹsNò³³i×®]£Ë¯k×®TTT4Ú¦òòòسgS}ËÍÍåàÁƒ(•Jž|òIBBBxòÉ'4hÓ©(®ôöÒ¥KMʯŒÌïwíkëÖ­]Ú»ÅbaÁ‚„……1lØ0—õ¸»¶&11±Nœ®ê{WuR·nÝn(ï’$5©Å‚ hÑ¢>>>.눈·í[ ¥¥¥Œ5Š & R©8|ø0;vì ªªÊåó¹‘zÍ]Þ._¾ŒF£aðàÁ´oßž]»vqøða$IjR¦f*uJJJ³?¿5·öÈ 8FT$ 줲<îéÀë³Çó‡AQXrŽPQR€)çlÉ„1Ѩ½°Ú!ý´‘2“ý¦¬c–˜˜H¿~ý˜7o£GföìÙìÝ»—Q£Fé¨ ”J%_}õ¯¿þ:ãÇç½÷Þ#<<œçŸžââb—a%%%’žžNBBo¿ý6:ubáÂ…äåå9æ?º‹¿¤¤„­[·rìØ1–-[Æ›o¾IFFÇŽcÛ¶mõÎ9r¤^>ï½÷^V®\‰^¯§²²’-[¶àççGDDçÏŸ'>>Þ1¿4..!ùùùøúú2kÖ,^yåÂÂÂêTŽZ­–ÂÂBÇÛ¡¢¢"JKKëŒ|˜ÂÂBŠ‹‹ùæ›o4h~~~(•JvìØÁ{ï½ÇŒ3X·nmÚ´áù矧°°ƒÁÀ¾}û aÅŠ$%%±bÅ JJJ¸ï¾ûœêTëÖ­;v¬Ó°èèè&—Ÿ¿¿£lÊ`0ŸŸïRßòòòÈÌÌÄh42oÞŸ¦â*oW¯^eÀ€„……ñÇ?þ‘qãÆñÑG1fÌüýý]¶)žöašûùý«¹åGfj„Àf—è•Ïc#Cñ÷Q3HÞÿìK& ïÊø»ú¡öòÂjlþ¾‚ ÇÊ©²Ýœ±½^ÏŠ+ؽ{7‡âرc¬_¿žŽ;²råJÇÇÆB¾øâ ÇÇgçÎ#""‚O?ý”ŒŒ öîÝ[/lûöíœ={…BA\\“&M¢U«VL™2…{3gÎ4ÿöíÛÉÈÈ 00²²26lØÀàÁƒùÛßþFbb"W®\©w>>>žÏ>ûŒ}ûö0tèP† À¡C‡xóÍ7ùé§Ÿ˜7o±±±Füýý£¨~Ó]ƒ³Îøˆ#ضm3gÎ$""‚­[·b·ÛQ(ìÚµ‹½{÷ÕÃÛUUUøúú6:;v°ÿ~·ù˜;w.íÚµcذalٲũ<.õQ’0›ÍÎSïs‡R©$&&___âãã¹xñ¢G÷©ÕjÌ}÷ÝGTTo¾ù&óçϧsçΜûŒ7ß|­V‹ÝnÇn÷lYt¨ž®°oß>þû¿ÿ»ÁÅ´Z- …«ÕJ»víÃê{öì¡  ­V‹$IŒ9’>úÈ±àÆµk×1b§Nª§ËíÛ·çÛo¿E’$ú÷ïÏÞ½{ùöÛoñõõ¥¬¬ŒòÙgŸaµZÙ³g½zõâþûïÇËË‹'žx‚|ŒŒ  ‘‘‘̘1ƒ6mÚ0bÄŽ?ŽÉd¢U«VNu*..¥RIhhh½°øøø.¿ÆØ”‹ÅRφ &“‰ÊÊJrrr?~>>; Óét! ÁÇÇ€   ¼½½ëTDîâ÷õõe̘1X,víÚÅóÏ?V«åÕW_eìØ±X­Öz狊Š8wî={öÄn·óöÛo³råJRRRøàƒèÖ­B)--Åf³¡Ñh0 9ÝÑ¿Þxã víÚEyy9·ÝvŸþ9!!!ddd8ÒïÞ½;z½ž¢¢¢F§qíÚ5òÑ<®P«ÕMÊSïkI’B8~=¡W¯^tïÞàà`¦OŸÎC=ĉ'xÿý÷),,dÍš5\»vË—/³dÉž~úiz÷îí6^»Ýκuëˆuzí¯mòÔ©ShµZ"""8sæ ‹/FA»víÐh4¨T*$I¢S§NÄÅű{÷n íÚµ#!!¸¸¸z:¾xñb”J%B¢££INNf×®]x{{Ó¡CÚ¶m‹«ÕJqq1­ZµÂË«ººôññA©T:¦‘8l°Æ€jÛ{çwœêTUU«V­rÖ •Ÿ3œéðîÝ» ' €âââzúŠ··7IIIüùÏF¯×ãççÇ—_~ÉÙ³g)..öØÝÙ—ŒŒŒsn¤ž¨ÁU=ž““ãQûi2™X½zµÛú¾)uÒài›ì®üœ•˃>Hff¦Ã™±ÛíüðÃèõzFŽÉСCÙ´ióæÍcâĉ$''7{½æª® âÝwßÅÇLJµk×ÁÆyæ™gøÃþ@Ïž=›Ü‡ùW?¿›Áo™q|ä/ ¤ÒÎ{_îêâ‡F£&1®úC&›$ØòC*ÃXuýÃø›ôÕÌ©S§øë_ÿJll,Ý»w' €Î;£ÓéCuçµeË–èõz,X@›6m8|ø0Û·o§uëÖDDD8 «ñÂóòò((( ((ˆŸ~ú «ÕJtt4gÏžm0þÐÐP¶oߎ¿¿?~ø!999<öØclÙ²…‚‚t:]óÛ¶mãÿø÷ÝwPýÆ|ïÞ½,]º”3fðÈ#àëë‹ÝnG¥RÑ¡CÞ}÷]rss‰åðáÃ48»cDz²²xíµ×ðöövŒô„‡‡óÐCÕI¿   IiŒ?žxÀ£|¸“Ç …¢Iùoê}ž „p|Gåɵk×®¥°°¹sç¢ÕjÉËËC©TƸqã¥Z­F£ÑîÑ+W®pàÀžzê)Ç[¯ÚÔ,`µZ9}ú46l --ððpÞzë-JJJØ´iÌœ9“Ó§O;–’>|8ï½÷ …‚'žx???Ö­[WOÇ·mÛÆ¨Q£BàííÍí·ßÎ /¼€R©dîܹøúú"„@£ÑЪU+Μ9CEEþþþœ8q€èèhŠ‹‹–§J¥âàÁƒ.uÊU˜R©lðù4T~Îp¦Ã111DFF’˜˜ÈªU«êè›N§£mÛ¶ÄÆÆòùçŸc0ÐëõTTTàåå…^¯gøðáÜ{ï½€{[Œ‰‰áÀMίŒÌÖBÊÊÊP(.ëñ-ZСCÞyç§m$I””” V«yðÁéÙ³'༾oJt#4Ô&—––¢Ñh8tèÓòsU.*•Šàà`„£V«Y¾|9Z­–eË–¡V«ÑëõŽ%­o¤olÞÂÂÂ(--ÅÇÇÇQî!!!¨T* …Ûö¦¡òúW?¿›Áo™A$©zª &‰ÿ=XíÐŒêê‡J©À& ¶~_Áê¯ TZÄue¤ÙW1«aÈ!¬]»–I“&1bÄ4 ÀÛÛ›Áƒ“‘‘áè´5ŠO>ù„ œœÌ–-[hÛ¶-þþþÜu×].à ùùùÌž=›””¶nÝJ¿~ýh×®§OŸvLL z½žââb–/_Nvv6eeetéÒƒÁÀÒ¥KS’ÊÊÊèÔ©jµºÎ|Ùýû÷SPPÀÁƒ9zô(’$áëëË´iӸ뮻ذaS§N%))‰Í›73a‡#VƒÝn¯ó ‡B¡p|w R©Øºu+/¼ð‚Àk¼~Çw4) ///Ç›vwù˜>}:*•Ê­<®hªlM½ÏØívÞyç:wîÜà”0…BAXXK–,¡°°V­Z±qãF† BRR’ãƒA€Ÿ~ú‰/¾ø‚‰'Ò¹sçe9qâeeeNß•——óú믳qãF*++ùùçŸ eÚ´iŽïb®^½ÊªU«¨¨¨ ==›ÍÆñãÇ0`·Ýv¯¿þ:^^^Ž©ƒÅÅŬX±¢ŽŽwêÔ …BÍfC’$úöí‹$IX,ú÷ï$IØl6”J%wß}7O<ñ3gÎ$..ŽþóŸŒ1‚øøx¾ûî»:/'$IrLßÚ·oŸKÛ8pà€Ó°)S¦Ð±cÇ&—Ÿ+ÝpeS>>>Œ9’õë××Ó·ÐÐP† ƺuë˜>}:©©©ìܹ“Þ½{“””„R©¬³3½ýÃþ@XX_~ùe“ó+#ó{ÅU»ôk»ùµ½›ÍfæÌ™Cxx8‰‰‰,Y²„‚‚ZµjŦM›2d øúúòá‡2uêT:wîÌ–-[˜0adggóÇ?þ‘iÓ¦Õù†ÂY}ïIt#¸ªÏŠ‹‹ëµÉ&“‰¹sçÒ¢E l6›Ëv=<<Üi¹tèÐK—.1qâDf̘Ám·ÝÆüùó™6m-[¶dëÖ­ôìÙ“öíÛóÚk¯5{½æ*o 6Œ¿üå/̘1ƒÈÈHvîÜI—.]HLLäõ×_o°㬼þÏï_«%Nþ®½Æ³²ÖoíCåäPGEEFŽ7®ŸV«u´|’d§ÜPJPh*UÓ}*C¥…ÌFá†R¥Fº.˜Ù*ø)¿ _­’˜P5;NTò¿_(7׬ç 6›QYÈ}ýÛèï ¾µö½^Oß¾}±X,œ9s†«W¯’””Äœ9sHNNF¡PN÷îÝ‰ŠŠ¢K—.œ;wŽóçÏ“––ƬY³ÐëõDDD¸ ;vìyyy 4ˆ¬¬,zõêÅÓO?MpppƒñÏœ9“   Ú·oF£á‡~ °°1cÆ0~üx’““ž¯½yaÍj#­[·&((NG@@AAAtéÒ…ØØXºuëÆåË—ÉÍÍåž{îá‰'žpLÉjÃõññ!%%Åñ– &&†ˆˆ~üñG ?þ8wß}·Ó¸‚ƒƒ›”FmÊG=¯'R©Äh4RUUUï$ɱccekJžj–úv%‹N§#00³ÙLÏž=IHH k×®Øív,‹Ó{‰‰‰!##ƒ¢¢"†ÎôéÓëlÒÕou:={öÄßßß­^^^ Ú´iÃàÁƒs´kòäïïO‹-Ðét„‡‡3bÄfÍšåX5...•JEff&mÚ´aòäÉøûûA||<~~~|ñÅtíÚ•G}¥RIbbb=]~øá‡Ñjµ“ššJXX-Z´ --¾}û¢R©ðóó#%%….]ºÀ™3gÈÏÏgèСL:ÕñB!""‚îÝ»;¦˜…‡‡Ó­[7l6­Zµª§SIIIhµZ§aÉÉÉøúúº|&îʯ©6åJß¼½½ÑëõôêÕ‹¼¼<.\¸@Ÿ>}˜9s¦ÓD]Å£Õj]ÚW×®]ÓräH{ì1¼½½±Ûí˜L&ºuëFDD„#ÞÚõ}ÍB ÕI7‚«ú,22’ÒÒR”J%<ð£Gvôj–«ŒŒ$**Êi»žššJll¬Ór±Ùl˜L&ºvíÊÀ‰ŒŒ¤¼¼I’HMMåé§Ÿ&$$„ŠŠŠf¯×Üå-..ŽöíÛS^^Ž‚nݺ1cÆ ÂÃÃ]ÊRÓ‡iݺµËòºÑçg·Û))*D¨wÄ©P(°X,–õ6|•››› Xéúa¯õwíCüêÀɯs=ñ༲Öo£ªõëUëPóËæš5ûöéÓ»÷–Í›çÖÌ×·Z«ÈϹHlûŽh4ßÝ[\ŸW–S`àþ¿îCÖ Ö‡šÉcÕ×@ ’m¼9žm¡ÔdG©¨U  ÊbBžâãùƒˆnجÎLm,‹c:‹;$IÂjµ:ÝíÜYØòåËÙ¼y3Ÿ|ò ¾¾¾uF¿Åb¨æê|SÊ ±qÔ|ûã©q5%‘çêÕ«,]ºƒÁPGo$Irt¦kÝÙ<½¯1²4öžš>OV,kŠMÁjµÖ“Ç`0pèÐ!ž}öYÇÞ ¿.Khº.×|ôÚÜum xë­·nZù5dSîô­ªªê?Æeddddþ3¨ª²p>ãgZE·E­®n# eee†1wß½èСÇ#Õ¨ªõ·­ÖQãäÔüŠë¿Ôú'ŽÍ-?ÍL­Ráç­ÂPeÁKSóæú—N@©Q"ýg# EuáJŽUUôÞ^¨=ØsãFð´QW*•.¯u¦Óé«i4äÈ4cÏ߬2¨Mc;m7»óôky‚ƒƒ™4iR½)[Büüüêt¶›*›§÷5F–ÆÞã‰n݈MÁY<{öìá•W^!--4¹,]¡R©<ÚŸçF º©å×M¹+£ÆØ£ìÈÈÈÈÈÈü«¸¥èý5ôëÌú#ÙÀKíY#j³Z¨(ÌæÎÔ`ôþšë£5·cÇŽeäÈ‘·ä2z¿ÔjõÌ.¹M‘åfÈÿï,“Ûo¿””‚ƒƒnêx+ðŸ¤S222222··¬3£P(ª÷NQ{ñè8¬Ö3|“qŽ ³g{]è¼U ëÄ£CâЪ½qÞJÔ¬3.##S½ÉšìØËÈÈÈÈÈü¾¸e¸î|(•D· fÆÝWT†¥ÊÚð e ÐjÔD„¤@!/*#########sËqë;3€——šà ‚ô×p½Œ\ÿ~F©T9Ö—™[‹[Ú™ŽˆR©ü-dGFFFFFFFFFFÆC”7…ŒŒŒŒŒŒŒŒŒŒŒÌ¿Ù™‘‘‘‘‘‘‘‘‘‘‘¹%ùÍÌ˲Úì—™±Úí- V©ðFíus÷‘‘‘‘‘‘‘‘‘‘¹9üœÁÕ#«vüÄÁSW1Z<[šÙW«¢ç<1²áÁ~Üz»ÌÈÈÈÈÈÈÈÈÈÈü¾¹µ!¨²ÙYµã'¶}WD|\‘> oš©@AYY)nOGØ«xö¡>h¼T ¯h&#########sËpk;3@q™‰§®Ð:º’6ƒÕý3 lV –+g¹¯[~8_JQ™‰–ÁͿٞÉdâ›o¾áäÉ“( ºtéBjj*>>>\¾|™ÌÌLRRRÐjvÀËÍŽ¿6’$QTTDEE„„„Ô »víV«•   §;³—”” Õjë„Ùl6®]»FUUÁÁÁn7CljÉGcäiÙš+O5!°Ùl¨ÕjuCAyy9f³ù—MjµZê,enµZÉÏÏ'""¢A]+//Çd2Õ¹_¡P Óé°X,:t³ÙìH+&&†˜˜˜›¢ÃEEE=z”-ZЭ[·ë+"V—ý?þÈåË—III!44´Éi4d®Â[~þþþx{{;Î5Ö¦Ò·¢¢" :ŽÐÐP—KÙ»‹§vúz½ž€€€f¦22¿UÜÕ³ž¶®®óľ=i“Ó4Wr»Ë·«úÕÓvÍÝu€GqÜŒ|Ûív °X,Ø ¼nÛç³½Ù(jªë‡ÐÞ€ ô@(D1@Ðè¤i}úôžsõÊåR“±R++„±²BJ‹ÅéÇ…ÅbMA’$!Iv‘}¹Dô™ö‰ùL1zYî/Çò¼ºÿ/Ë£—å‰;þ‘%Òf|(Þ^¿[då‹;çm/—I² I’š$‹3,‹xñÅEbb¢¸óÎ;ÅСCEll¬˜;w®¨ªª[¶l W®\i¶4ks³ã¯ÏåË—‹ÿú¯ÿ]ºt}ûöëׯ’$ ›Í&þçþG¤¤¤ˆ=zˆGyDœ9s¦ÎýùùùbìØ±bãÆŽsâå—_={öÉÉÉâÞ{ï'Ožtš¾ÕjmRÉGcäNöêô€IDATiÙš+Oµ¹té’˜;w®ÈÉÉÛ¶móH7ÊÊÊÄSO=%RSSE¿~ýDŸ>}ÄìÙ³…Ñh¬sÝêÕ«E÷îÝʼn'ÜÆg³ÙÄâÅ‹EJJŠèÓ§èÓ§èÝ»·HII;vì§N±±±"))Iôïß_tïÞ]$$$ˆ©S§Š«W¯z”ÏÆpàÀ!úöí+ 狊ŠÄàÁƒExx¸Ø»wo“ãw§S®Âìv{“ÊoÛ¶mŽëkS é[¾$''‹Þ½{‹uëÖ9•Ó]<åååbÁ‚¢W¯^"))I >\8p ÙŸ©ŒÌoWõ¬§m«ë<±oOÚ$w2Þ®äv—owuoyy¹Gíš«öÏd2yGs绲²R,Z´HôìÙStìØQÜ~ûíbÿþýBáT¦gŸ}V”——»l7¶oß.„7ül-³8}â¸0”;úø&c¥¸zåriŸ>½çi×ýn×ýƒ„ëþBäuÿ!ôº?¡»î_x_÷7Ôµ|Ú~I=níÕÌ®Â6»@ @ Àf­¢äҪ̕ÕçX«LTfáÁÞ¡L¼g>Z BÇF›Íɹsçøè£˜3gü17ndÊ”)|øá‡œ>}I’0ÕiSíU’““CYYYÝlº3›Í”••QQQÁÅ‹¹víš#Ìjµzee%çÏŸ';;³ÙÜàùÚ8p€×^{Ñ£G³jÕ*’’’X¸p!.\àÛo¿eÑ¢EŒ1‚¿ÿýï\½z•… b2™0™L¬\¹’Ç{Œ]»va2™qnß¾Õ«WóÔSO±téR***X´hQkj8vìX“Òð4/^dÇŽËÓ²5Wžjsþüy>þøc2220™LutÃ?~œ1cÆ0sæLþò—¿0jÔ(ÔjµãšãdzhÑ"²³³±Z­nãS*• 8?ÿùÏLž<™)S¦Gyy9‘‘‘Øl6„ÌŸ?ŸÍ›7³mÛ6^xá>ýôS–.]Š$IÝÎÍÍ%33“¢¢"à—·pF£Ñ‘žÑh¤¨¨!F£±ž.Ûl6Ìf3?ÿü3ß}÷ã¾'NpòäIL&6› ¨~–——ÇÙ³g)))©cƒƒ£ÑHNNW¯^uÈéÎ6¾úê+§aYYYM*¿¨¨(Ìfs£mªªªÊ¥šÍf²²²xñÅéÑ£|ð}ûöå­·Þ¢  Àc}¯ªªb÷îݬ[·ŽI“&ñÆo „`É’%TVVz¤¿22¿gœÕ³F£Ñ¥½ !oãÝ]—™™é‘}»²íÚõmcÚOp%·«ó5y¶X,.ëÞóçÏSYYÙ`»®Û?FCyy¹Gq4g¾¾úê+V®\Éĉyë­·°Ùl¼úê«TTT8•÷®»îB«Õºl7¢££9räÈ¿üÙÞ nùif$’6«sîw$ø•p!÷2öÖ)h¼ý±š*1çááþ<:f jµvÉÜÜ>Œƒšé PÝÑ `âĉ„„„Lff¦cÃO»ÝΚ5kX³f F£‘Ö­[3kÖ,úõë‡Ífãý÷ßw¶cÇÖ¬Yƒ¯¯/YYYhµZžyæF툻¡ø/]ºÄsÏ=ÇÉ“'Q*•ôîÝÛ¡Èóçϯsþ¥—^ª7åæìÙ³tèÐ'Ÿ|½^ÝngçÎ\¼x‘ÇÆÔ©S ¡¸¸˜ùóç“““CTT•••DFF¢ÓéêÄùõ×_ÓµkW&L˜€Z­&??Ÿ—^z‰üü|âââê\›žžÞ¤4~«|dffòÍ7ßx,OsÈÖ\yª¡¤¤„eË–‘——Ç’%KHKKC¥jx¿k×®!IC† ¡eË–ÖI³¨¨ˆÅ‹Ó¾}û#¨ÖNMM%55€ììlV¯^ͳÏ>Krr2ßÿ=J¥’   Ç”€ñãÇóóÏ?³yóf¦L™‚N§cÑ¢Eìܹ›ÍF@@³gÏ&--gŸ}–„„fÏž ÀòåËÉÊÊbÆŒ,Z´ˆ'N8tùå—_F¡PDPPééé 6 …BAzz:ÑÑÑG©ªªŠ7ÞxƒM›6aµZ cΜ9 <˜}ûö±råJ9sæ ’$1cÆ ~øa—:•““ùs眆eggÓ®]»F—_×®]©¨¨h´Mååå±gϧú–››ËÁƒQ*•<ùä“„„„ðä“O2hÐ §Ó\émvv6ƒQ£F1aÂT*‡fÇŽX,üüü<Òc™ß#®êYI’\Ú»ÅbaÁ‚„„„0yòd—×íß¿ß#ûv×&%&&6º-ðWùsu¾&Ï-Z´ÀÇÇÇeýá¶]«Á]û×PÛx3ò ŸŸF£aðàÁ´oßž]»vqøðaÇ41W2¹kw_~ùåù³½ÜÚ#3àQ‘$° Êò¸§G¯ÏÏEaÉ9BEI¦œ#<:°%Æ D£öÂj‡ôÓFÊLö›²ŽYbb"ýúõcÞ¼yŒ=šÙ³g³wï^FEdd¤C)”J%_}õ¯¿þ:ãÇç½÷Þ#<<œçŸžââb—a%%%’žžNBBo¿ý6:ubáÂ…äåå9æFº‹¿¤¤„­[·rìØ1–-[Æ›o¾IFFÇŽcÛ¶mõÎ9r¤^>ï½÷^V®\‰^¯§²²’-[¶àççGDDçÏŸ'>>Þ1Ç4..!ùùùøúú2kÖ,^yåÂÂÂê‰V«¥°°Ðñf ¨¨ˆÒÒÒ:#OÕÏ\âÂ… MJÃÓ|´mÛFã‘<µ±ÙlM’­©÷¹#00Gy„–-[òøãí=pGnn.999Lž<™;3ѣG³sçN z¤bùòåØív&OžÜè7RV«•×^{ÀÀ@ÆŽ['ì×yêÑ£•••rúôivïÞÍsÏ=ÇÇLXXï¾û.J¥’Ö­[³eËŠ‹‹ºMzz:G­§Ë …___† ÂáÇ),,¤¸¸˜o¾ù†Aƒáçç‡R©dÇŽ¼÷Þ{̘1ƒuëÖѦMžþy 1 ìÛ·V¬XARR+V¬ ¤¤„ûî»Ï©NµnÝš±cÇ: ‹ŽŽnrùùûû7ʦ ùùù.õ-//ÌÌLŒF#óæÍcäÈ‘üéOÂn·×kdÝÙbnn.>ø .äÈ‘#<óÌ3¬]»–;^ß(½‘‘ù=ᮞugïJ¥’øøxÚ´iãöºsçÎ5hßîÚ¤+W®ÜP[à Wr»:_“稨(—íy›6m¸té’Ëv­6îÚ?wa7+ßýû÷',,Œ?þñŒ7Ž>úˆ1cÆàQ¾~ÝnØíö˳½Üò#35HB`³KôJŠç±‘¡øû¨wG_$ïö%†weü]ýP{yaµ 6_Á†cåTÙnާ©×ëY±b»wïæÐ¡C;vŒõë×Ó±cGV®\éøØXÁ_|áøXëܹsDDDðé§Ÿ’‘‘ÁÞ½{ë…mß¾³gÏ¢P(ˆ‹‹cÒ¤I´jÕŠ)S¦pÏ=÷pæÌ™ãß¾};RVVƆ †ÊСC8tèo¾ù&?ýôóæÍ#66£Ñˆ¿¿¿c@£ÑÕoºkpÖ1bÛ¶mcæÌ™DDD°uëVìv; …‚]»v±wï^HUU¾¾¾NcÇŽìß¿ßm>æÎK»ví6l[¶lq*K}”$Ìfs£óßÔûÜ¡T*‰‰‰Á××—øøx.^¼èÑ}jµšÁƒsß}÷Å›o¾Éüùóéܹ3'Ožä³Ï>ãÍ7ßD«Õb·Û±Û=[ª‡­÷íÛÇÿ÷7¸˜‚V«E¡P`µZi×®¯¾ú*F£‘={öPPP€V«E’$FŽÉG}äXpãÚµkŒ1‚S§NÕÓåöíÛóí·ß"Iýû÷gïÞ½|ûí·øúúRVVÆÀùì³Ï°Z­ìÙ³‡^½zqÿý÷ãååÅO<Áƒ>HFF …‚ÈÈHf̘A›6m1bÇÇd2ѪU+§:‡R©$44´^X||ü —_clJÅb©gC …“ÉDee%999Œ?ž§Ÿ~šÿû¿ÿcîܹtìØ‘sçÎñå—_ ÛbÍ⥥¥\¸p³ÙÌ•+W0›Í-`!#ó{dçÎ Ö³Îì]£ÑðÔSO¹½NáÒ¾;tèà!v×&Y­Vd¼\µu¿>ï,ÏÎêÞ .8m×:uêTçe’«ö/99­VëQÍï²²2l6:???üüüÈÌÌÄd29FlÜÉôëv£ªªêßúl›“߈3#Dõ·3g {2,ܙ셗JŸ}HéKLT8j//l×™µ‡Ë¨´HͺòDmŽ=JNN÷Þ{/÷ß?eee|ýõ×üéObçδnݨ~ëQRR‚Á``Ïž=¨Õj$IbذaøøøP\\ì4L§Ó!„ $$‚‚‚ðöö®Óéu¿¯¯/cÆŒÁb±°k×.žþy´Z-¯¾ú*cÇŽÅjµÖ;_TTĹsçèÙ³'v»·ß~›•+W’’’Â|@·nÝBHii)6› FƒÁ`pÈéŽþýûóÆo°k×.ÊË˹í¶ÛøüóÏ !##Ñ~÷îÝÑëõ5:k×®y”†äq…Z­nRþ›z_CH’„Âñë ½zõ¢{÷î0}útzè!Nœ8Áûï¿Oaa!kÖ¬áÚµk\¾|™%K–ðôÓOÓ»wo·ñÚívÖ­[Gll¬Ókm“§NB«ÕÁ™3gX¼x1BÚµk‡F£A¥R!I:u"..ŽÝ»w£P(h×® ÄÅÅÕÓñÅ‹£T*BMrr2»víÂÛÛ›:жm[„X­VŠ‹‹iÕª^^ÕÕ¥J¥Ò14 Àaƒ5ŽTÛÞ;ï¼ãT§ªªªXµj•Ó°†h¨üœáL‡wïÞMxx8×Ó·ÐÐP¼½½IJJâÏþ3z½???¾üòKΞ=Kqqqƒ¶X³RÝ?ü€N§cäÈ‘ :”M›61oÞ<{ì1ºwïÞd½–‘ù­b2™X½zu“ëÙ†P(øøø8µïsçÎ9œWm’B¡@£Ñðî»ïÞ4›Š»úÕY»öàƒ’™™YÇqu]FF)))tíÚµ^XVVV³93ÎX¿~=>>>¬]»–ˆˆ6nÜÈ3Ï<Ä HMM¥[·n.erÖnxyyÝrÏÖ¿ gÆñ‘¿€’J;ï}e@¸«‹šÄ¸Hl’`Ë|p¨ cÕõãoÒW3§Nâ¯ý+±±±tïÞ€€:wîŒN§s|T ÕEË–-Ñëõ,X°€6mÚpøða¶oßNëÖ­‰ˆˆpÖ¢E òòò((( ((ˆŸ~ú «ÕJtt4gÏžm0þÐÐP¶oߎ¿¿?~ø!999<öØclÙ²…‚‚t:]óÛ¶mãÿø÷ÝwPýÆ|ïÞ½,]º”3fðÈ#àëë‹ÝnG¥RÑ¡CÞ}÷]rss‰åðáÃ4hì;vì ++‹×^{ oooÇHOxx8=ôPô 𔯸ñãyà<ʇ;y\¡P(š”ÿ¦Þç BÇwTž\»víZ ™;w.Z­–¼¼<”J%aaaŒ7ÎÑ8¨Õj4 ááá-Y}åÊ8ÀSO=åô{‰š…¬V+§OŸfÆ ¤¥¥Î[o½EII ›6m"""‚™3grúôiÇ2“Çç½÷ÞC¡PðÄOàççǺuëêéø¶mÛ5jB¼½½¹ýöÛyá…P*•Ì;___„h4ZµjÅ™3g¨¨¨Àßߟ'NMqq±ÓòT©TŸ†ÊÏÎt8&&†ÈÈHYµjU}Óét´mÛ–ØØX>ÿüs z½žŠŠ ¼¼¼Ðëõ >œ{ï½po‹‘‘‘,X°FòeËP«Õèõz EºPFFæT*>ø ={öWÏ !0 (•J·K ÇÆÆòÅ_8µo¨žŽ@ÇŽëÕÄÄÄðÀ4¹-hNjò¬Ñh8tèÓúU¡P8m×T*ÁÁÁ!(..Æ×××åuAAA|ðÁ\½zÕiØÍB’$ >>>޲ q¼Ì[»v-W®\q)“³vC©Tºìoü'=[OøM83$UO5C€Á$ñ¿«šQ]ýP)Ø$ÁÖï+XýµJKu§N’höUÌj2dk×®eÒ¤IŒ1FÃðööfðàÁddd8:m£Fâ“O>aÁ‚$''³eËÚ¶m‹¿¿?wÝu—Ë0…BA~~>³gÏ&%%…­[·Ò¯_?ÚµkÇéÓ§ÝÆƒ^¯§¸¸˜åË—“ TcvéÒƒÁÀÒ¥KS’ÊÊÊèÔ©jµºÎ¼Éýû÷SPPÀÁƒ9zô(’$áëëË´iӸ뮻ذaS§N%))‰Í›73a‡#VƒÝn¯ó ‡B¡p|w R©Øºu+/¼ð‚Àj¼~Çw4) ///Ç›vwù˜>}:*•Ê­<®hªlM½ÏØívÞyç:wîÜàP±B¡ ,,Œ%K–PXXH«V­Ø¸q#C† !))‰””ǵ?ýô_|ñ'N¤sçÎ ÊrâÄ ÊÊÊœ¾Ù)//çõ×_gãÆTVVòóÏ?Ê´iÓßÅ\½z•U«VQQQAzz:6›ãÇ3`Àn»í6^ýu¼¼¼S‹‹‹Y±bEïÔ©“£3-I}ûöE’$, ýû÷G’$l6J¥’»ï¾›'žx‚™3gÇ?ÿùOFŒA||<ß}÷]¹$IŽé[ûöísip6eÊ:vìØäòs¥®lÊÇLJ‘#G²~ýúzúʰaÃX·nÓ§O'55•;wÒ»wo’’’P*•uö¶q¦·øÃˆŽŽ&--^xéÓ§Ó²eK¶lÙBÏž=ILLôHed~oh4š:ߺ«gmïf³™¹sçÊK/½äh3}ÝðáÃù裘6m©©©ìÚµ‹Þ½{Ó¥Krrr˜8q"3fÌà®»îrÔ;wfË–-L˜0¨¨¨:/ÙÛxŠ«¶®öùš<·hÑ›Íæ²=gÉ’%ЪU+6mÚÄ!CèС—.]bâĉ<ýôÓDDD8½®S§Ndffò÷¿ÿ½^Xûöí›UjçO©T2|øpþò—¿0cÆ "##Ù¹s']ºt!))‰¼¼</^ìR&WíFízûßñl› WK)œü]{ge­ßÚ‡ÊÉ¡ŽŠŠŒ7n\?­Vëhù$ÉN¹¡” Ð0Tª¦ûT†J ÿ<˜Â/ ¥Jt]0³UðS~¾Z%1¡jvœ¨ä¿2Pn®YÏl6+¢²ûú·%Ðß<|kí z½ž¾}ûb±X8sæ W¯^%))‰9s朜ŒB¡ <<œîÝ»E—.]8wîçÏŸ'--Y³f¡×뉈ˆpvìØ1òòò4hYYYôêÕ‹§Ÿ~šàààãŸ9s&AAA´oßFÃ?ü@aa!cÆŒaüøñ$'';=_{³¤šU7Z·nMPP:Ž€€‚‚‚èÒ¥ ±±±tëÖË—/“››Ë=÷ÜÃO<ᘒ¿ u§¤¤8F:bbbˆˆˆàÇÄ`0ðøãs÷Ýw;]+88¸IiÔ¦¡|ôèуðððzò(•JŒF#UUUõI’›16V¶¦ä©f©oW²èt:1›ÍôìÙ“„„ºvíŠÝnÇb±8½'11‘˜˜222(**bøðáLŸ>ݱIW Bt:={öÄßßß­^^^ Ú´iÃàÁƒóskòäïïO‹-Ðét„‡‡3bÄfÍšåX5...•JEff&mÚ´aòäÉøûûA||<~~~|ñÅtíÚ•G}¥RIbbb=]~øá‡Ñjµ“ššJXX-Z´ --¾}û¢R©ðóó#%%….]ºÀ™3gÈÏÏgèСL:ÕñB!""‚îÝ»;¦˜…‡‡Ó­[7l6­Zµª§SIIIhµZ§aÉÉÉøúúº|&îʯ©6åJß¼½½ÑëõôêÕ‹¼¼<.\¸@Ÿ>}˜9s¦ÓDÝÅÓ¾}{ZµjEFF 8gžy†°°°f©oed~ëÔ®gk ïª}+//§mÛ¶´oßÞ1"ÿëëj컲²³ÙL·nݘ>}:!!!Øl6L&]»v%11‘®]»:9r$=öX—îd¼\åÏÙùšeê###‰ŠŠrÚž§¦¦KYYv»0eÊyîÒ¥ ýû÷wz]@@íÚµ#..®^Xs.hâ,qqq´oßžòòr„ŽçÑ L®Úààà~¶v»’¢BtzG?M¡P`±X,ë7lø*777°ÒõÃ^ëïÚ‡øÕ“_çååÁye­ßFUë׫֡æ—Í5kþöíÓ§wï-›7Ï ¬™¯oµV‘Ÿs‘ØöÑh¿›¨¸>¯,§ÀÀý݇"¬­5“Ǫ¯@%=Úxs<ÛB©ÉŽRQª@A•Å„(<ÅÇóÝ"°Y™ÚX,ÇtwH’„Õjuº»ª³°åË—³yóf>ùä|}}ëŒ446~‹ÅP/ÌÕù¦”Acã¨ùöÇY‡­¹Ò¸y®^½ÊÒ¥KsLk$ÉÑ™®¹¶©²yz_cdiì=5#|ž¬dÒ9š‚Õj­'Á`àСC<û쳎uó]–Ðt]®ùø±9äwEAAo½õÖM+¿†lʾUUUݰ-ÖŒ„ÝÌ2”‘‘‘‘ù×QUeá|ÆÏ´Šn‹Z]]·+ ÊÊÊ cî¾{Ñ¡C‡Fª+PUëo[­£ÆÉ©ùשõ N›[~š™Z¥ÂÏ[…¡Ê‚—¦æÍõ/€R£DúÏFŠê•3 ªª,è½½P{°çÆàiçI©Tº¼ÖY˜N§s¼ÙlÈ‘i(þÆž¿YeP›Ævxn¦#ãLžàà`&Mšätu??¿:í¦Êæé}‘¥±÷x¢[7"GSpÏž={xå•WHKKcÀ€M.KW¨T*ö繂‚‚njù5dSîʨ1öè*žÆè’ŒŒŒŒŒŒ'ÜÒ-‹ôþúufý‘là¥ö¬Ãb³Z¨(ÌæÎÔ`ôþšë£5·cÇŽeäÈ‘ÿ‘cýP«ÕDFFþ»Åh²,7Cþg™Ü~ûí¤¤¤|Ë.÷ûŸ¤S222222··¬3£P(ª÷NQ{ñè8¬Ö3|“qŽ ³gk`ë¼U ëÄ£CâЪ½qÞJÔ¬3.##S½Ù˜ìØËÈÈÈÈÈü¾¸e¸î|(•D· fÆÝWT†¥ÊÚð e ÐjÔD„¤@áÁr¨22222222222ÿYÜúÎ àå¥&$8ˆ }Àõ…\ï£@׿ŸQ*UŽ}dgFFFFFFFFFFæÖâ–vf‡#¢T* Ù‘‘‘‘‘‘‘‘‘‘‘ñåG!###########ó¯GvfdddddddddddnI~3ó²¬6;Åef¬v»G ¨U*‚¼Q{ÝÜ}#dddddddddddn¿gFpµÄȪ?qðÔUŒÏ–föÕªèß¹OŒìDx°·Þ.32222222222¿onmgFªlvVíø‰mß—@¤OÛf*PPVVʇÛÓö*ž}¨/È+šÉÈÈÈÈÈÈÈÈÈÜ2ÜÚÎ P\fâÀ©+´Žn‡¤ À`u?ÇL›Õ‚åÊYîëß–ΗRTf¢epóo¶g2™øæ›o8yò$ …‚.]ºššŠ—/_&33“””´Ú†°Ær³ã¯$IQQQA@@!!!u®]»†Õj%((ÈéÎì%%%hµÚ:a6›k×®QUUEpp°ÛÍ›šFcòÑyšC¶æÊS Bl6jµÚcÝBP^^ŽÙlþe“Z­–€€€:K™[­Vòó󉈈hP×ÊËË1™LuîW(èt:, ‡Âl6;ÒŠ‰‰!&&æ¦èpQQG¥E‹tëÖíúŠˆÕeÿã?rùòeRRR mr Ù†«°Æ–Ÿ¿¿?ÞÞÞŽsµ©†ô­¨¨ƒÁ€N§#44ÔåRöžèmcôEFæ÷LCupcëw¶ç®=iHަ¶ áI¼ž¶Sîò×P½êI½ÖœxÚÑëõx”wåà*ÎÚܪõ¶¢Ö¡º~¨ à ø:@„@$$n@ Ö§Oï9W¯\.5+…±²B++„¡´Xœ>q\X,fÑ$I’dÙ—KDŸiŸˆ‘ÿÈ£—åþr,Ï«ûÿ²\1zYž¸ãY"mƇâíõ»EV^±¸sÞ6qñr‰$»$©I²8Ãb±ˆ_|Q$&&Š;ï¼S :TÄÆÆŠ¹s犪ª*±eË1`ÀqåÊ•fK³67;þÚù\¾|¹ø¯ÿú/Ñ¥KÑ·o_±~ýz!I’°ÙlâþçDJJŠèÑ£‡xä‘GÄ™3gêÜŸŸŸ/ÆŽ+6nÜè8WQQ!^~ùeѳgO‘œœ,î½÷^qòäI§é[­Ö&¥Ñ˜|4Fžæ­¹òT›K—.‰¹s犜œ±mÛ6t£¬¬L<õÔS"55Uôë×OôéÓGÌž=[Æ:×­^½ZtïÞ]œ8qÂm|6›M,^¼X¤¤¤ˆ>}úˆ>}úˆÞ½{‹””±cÇqêÔ)+’’’DÿþýE÷îÝEBB‚˜:uª¸zõªGùl ¢oß¾¢  Àq¾¨¨H 6„§í®'í”»ü¹«W·oß.„ÕkÍ…»v£¼¼\,X°@ôêÕK$%%‰áÇ‹ƒ I’šÜ68‹óÀëNµÌfqúÄqa(-vôñMÆJqõÊåÒ>}zÏÒ®ûÝ®û ×ý…ÈëþCèuBwÝ¿ð¾îo¨kù µý’zÜÚ«™]„lv@@ÍZEÉ¥3T™+«Ï (°V™¨Ì>ƒ½C™xÏ |´„Ž6›“sçÎñÑG1gÎ>þøc6nÜÈ”)SøðÃ9}ú4’$a4«Ó¦úíBaa!999”••Õͦ‹0³ÙLYY\¼x‘k×®9¬V«ÇñWVVrþüy²³³1›Í ž¯Íxíµ×=z4«V­"))‰… rá¾ýö[-ZĈ#øûßÿÎÕ«WY¸p!&“ “ÉÄÊ•+yì±Çصk&“ÉçöíÛY½z5O=õK—.¥¢¢‚E‹Õ¹¦†cÇŽ5) OóqñâEvìØá±<Í![så©6çÏŸçã?&##“ÉTG7\QQQÁñãÇ3f 3gÎä/ù £FB­V;®9~ü8‹-";;«Õê6>¥RÉÀùóŸÿÌäÉ“™2e qqq”——‰ÍfCÁüùóÙ¼y3Û¶mã…^àÓO?eéÒ¥H’äÐíÜÜ\233)**~y“e4éFŠŠŠB`4ëé²ÍfÃl6óóÏ?óÝwß9î;qâ'OžÄd2a³Ù°ÛíäååqöìYJJJêØ Á`Àh4’““ÃÕ«Wrº³¯¾úÊiXVVV“Ê/** ³ÙÜh›ªªªri§f³™¬¬,^|ñEzôèÁ|@ß¾}yë­·(((ðXßk?“Æè‹ŒÌïWu°··7û÷ïw[‡TTT4h{F£Ñ£öÄ•Z­–mÛ¶5©}lˆ†ú˜L&—²i4òç®^ŽŽæÈ‘# Ök͉»¾È_|Áºuë˜4io¼ñB^{í5***HKKkRÛðùçŸ×‹sÉ’%TVVºÕÿ4nùif$’6«sîw$ø•p!÷2öÖ)h¼ý±š*1çááþ<:f jµvÉÜÜ>Œƒš!?¨îh0qâDBBB&33Ó±á§ÝngÍš5¬Y³£ÑHëÖ­™5kýúõÃf³ñþûï; Û±ckÖ¬Á××—¬¬,´Z-Ï<ó £GvÄÝPü—.]â¹çžãäÉ“(•Jz÷îí0Ôùóç×9ÿÒK/Õ›rsöìY:tèÀ“O>‰^¯Çn·³sçN.^¼ÈáÇ cêÔ©„„„P\\ÌüùóÉÉÉ!**ŠÊÊJ"##Ñétuâüúë¯éÚµ+&L@­V“ŸŸÏK/½D~~>qqqu®MOOoR¿ÆU>233ùæ›o<–§9dk®<ÕPRR²eËÈËËcÉ’%¤¥¥¡R5¼Šßµk×$‰!C†Ð²eKë¤YTTÄâÅ‹iß¾}ƒŽTy§¦¦’šš @vv6«W¯æÙgŸ%99™ï¿ÿ¥RIPPcX}üøñüüóÏlÞ¼™)S¦ ÓéX´h;wîÄf³ÀìÙ³IKKãÙgŸ%!!Ù³g°|ùr²²²˜1c‹-âĉ]~ùå—Q(Dzz:Æ C¡PžžNtt´ÃQªªªâ7Þ`Ó¦MX­V˜3gƒfß¾}¬\¹’ÀÀ@Μ9ƒ$I̘1ƒ‡~Ø¥NåääpîÜ9§aÙÙÙ´k×®Ñå×µkW***mSyyyìٳǩ¾åæærðàA”J%O>ù$!!!<ùä“ 4Èé4 wz›˜˜Øh}‘‘ù½ã®vU¿dggÓ¶m[,X@pp0sæÌ¡¸¸Ø©íI’äQ{âNŽÆ´×Á]¼QQQ,X°€°°0† æR6Oò×P»ôòË/»­×šWÏõÂ…  FÅ„ P©T>|˜;v`µZIII!%%¥^jJKKÆi±Xðóó»eêí[{d#*’vRY÷ôàõÙãùà(,9G¨()À”s„G¶d˜hÔ^Xí~ÚH™É~SÖ1KLL¤_¿~Ì›7Ñ£G3{ölöîÝ˨Q£ˆŒŒt(…R©ä«¯¾âõ×_güøñ¼÷Þ{„‡‡óüóÏS\\ì2¬¤¤„ÂÂBÒÓÓIHHàí·ß¦S§N,\¸¼¼<ǼIwñ—””°uëVŽ;ƲeËxóÍ7ÉÈÈàØ±clÛ¶­Þù#GŽÔËç½÷ÞËÊ•+ÑëõTVV²eËüüüˆˆˆàüùóÄÇÇ;æ_ÆÅÅ!„ ??___fÍšÅ+¯¼BXXX#Ñjµ:Þ|QZZZgä©ú™K\¸p¡Iixš¶mÛ¢Ñh<’§66›­I²5õ>wòÈ#вeKüq¢£££îÈÍÍ%''‡É“'sçw2zôhvîÜ TT,_¾»ÝÎäÉ“ëŒÖx‚Õjåµ×^#00±cÇÖ ûužzôèAee%………œ>}šÝ»wóÜsÏññÇƻヒR©¤uëÖlÙ²…ââb‡nGGG“žžÎÑ£Gëé²B¡À××—!C†pøða )..æ›o¾aРAøùù¡T*Ù±cï½÷3fÌ`ݺu´iӆ矞ÂÂB ûöí#$$„+V””ÄŠ+())á¾ûîsªS­[·fìØ±N⣣›\~þþþ²)ƒÁ@~~¾K}ËËË#33£Ñȼyó9r$úÓŸ°ÛíõDw¶xåÊ€Ò™ß#îê`WmV›6mP(ÄÇÇÓ¶m[l6›KÛsWg4$Ç®]»ÏÛëÆâ.^•JåÈ_nn.—.]rZFžæ¯†_׫v»Ýe½vùòå›òÌ]=×ÈÈHxà.\È‘#Gxæ™gX»v-wÜqz½Þe*‡qãÆ¹ŒóFÛù%·üÈL ’Øì½’âyld(þ>jÆÝÑIÀûŸ}É„á]W?Ô^^Xí‚ÍßW°áX9U¶›ãiêõzV¬XÁîÝ»9tèÇŽcýúõtìØ‘•+W:>6BðÅ_8>Z;wî|úé§ddd°wïÞzaÛ·oçìÙ³( âââ˜4i­ZµbÊ”)ÜsÏ=œ9s¦Áø·oßNFF”••±aÃÌßþö7¹råJ½óñññ|öÙgìÛ·€¡C‡2tèP:Ä›o¾ÉO?ýļyóˆÅh4âïïïÐh4@õ›îœU.#FŒ`Û¶mÌœ9“ˆˆ¶nÝŠÝnG¡P°k×.öîÝ ÀÀ©ªªÂ××·ÑiìØ±ƒýû÷»ÍÇܹsi×®Æ cË–-Nåq©’„Ùlntþ›zŸ;”J%111øúúÏÅ‹=ºO­V3xð`î»ï>¢¢¢xóÍ7™?>;wæäÉ“|öÙg¼ùæ›hµZìv;v»gË¢Cõ°õ¾}ûøïÿþï?Õjµ( ¬V+íÚµãÕW_Åh4²gÏ ÐjµH’ÄÈ‘#ùè£ n\»v#FpêÔ©zºÜ¾}{¾ýö[$I¢ÿþìÝ»—o¿ý___ÊÊÊ8p Ÿ}öV«•={öЫW/î¿ÿ~¼¼¼xâ‰'xðÁÉÈÈ@¡PÉŒ3hÓ¦ #FŒàøñã˜L&ZµjåT§âââP*•„††Ö ‹¿áòkŒM !°X,õlH¡P`2™¨¬¬$''‡ñãÇóôÓOóÿ÷Ì;—Ž;rîÜ9¾üòKÀ½-Z­VvîÜyCú"#ó{ÄUÜ©S'Ç‹WõËSO=À§Ÿ~Ú í5Ôž8“cÞ¼y$%%qÇw¸l¯owý•JåÈ_zz:ƒ r[Fž¶—¿®W«ªª’ÇjµºIùoê} !IBǯ'ôêÕ‹îÝ» ÀôéÓy衇8qâï¿ÿ>………¬Y³†k×®qùòe–,YÂÓO?MïÞ½ÝÆk·ÛY·n±±±N¯ýµMž:u ­VKDDgΜañâÅ!h×®•J…$ItêÔ‰¸¸8vïÞB¡ ]»v$$$WOÇ/^ŒR©DAtt4ÉÉÉìÚµ ooo:tè@Û¶mB`µZ)..¦U«VxyUW—>>>(•JÇ4Ò€€‡ Ö8Pm{ï¼óŽSªªªbÕªUNâ¡òs†3Þ½{7áááP\\\OßBCCñöö&))‰?ÿùÏèõzüüüøòË/9{ö,ÅÅÅ Ú¢B¡@£Ñðî»ï6Y_dd~¯8«ƒ|ðA²²²hݺµË6«³ÙÌêÕ«oØö\ÉqöìY ÐèöÑÌöíÛiݺ5NÃj¼÷¼¼<  â§Ÿ~ÂjµÍÙ³gŒ?44”íÛ·ãïïχ~HNN=ö[¶l¡  NWçü¶mÛøÇ?þÁ}÷ÝT¿1ß»w/K—.eÆŒ<òÈ#øúúb·ÛQ©TtèÐwß}—ÜÜ\bcc9|ø0 V0;vì ++‹×^{ oooÇHOxx8=ôPô 𔯸ñãyà<ʇ;y\¡P(š”ÿ¦Þç BÇwTž\»víZ ™;w.Z­–¼¼<”J%aaaŒ7ÎÑpªÕj4 ááá-ÉyåÊ8ÀSO=åx+T›š…¬V+§OŸfÆ ¤¥¥Î[o½EII ›6m"""‚™3grúôiÇ”Çç½÷ÞC¡PðÄOàççǺuëêéø¶mÛ5jB¼½½¹ýöÛyá…P*•Ì;___„h4ZµjÅ™3g¨¨¨Àßߟ'NMqq±ÓòT©TŸ†ÊÏÎt8&&†ÈÈHYµjU}Óét´mÛ–ØØX>ÿüs z½žŠŠ ¼¼¼Ðëõ >œ{ï½po‹111<ðÀMÖ™ß#®ê`•JEhh¨Û: ¬¬ ›Íƃ>HÏž=ÆÙžÝn§´´___·r|úé§œ;w®Qí£'4ÔîÖ¼,q%[CÎFMþüüüðöövZ¯*•ʛֻÂÕs­™.¨ÕjY¶ljµ½^ïXß6ÔL#ûuœ5úw#íü¿šß„3ƒHRõT3Lÿ{°Ú¡ÕÕ•RMlý¾‚Õ_¨´ˆëk´Ó쫘Õ0dÈÖ®]ˤI“1b†àííÍàÁƒÉÈÈptÚFÅ'Ÿ|‚ HNNfË–-´mÛîºë.—a …‚üü|fÏžMJJ [·n¥_¿~´k׎ӧO»?&&½^Oqq1Ë—/';;¨®»té‚Á``éÒ¥Ž)IeeetêÔ µZ]gÞäþýû)((ààÁƒ=zI’ðõõeÚ´iÜu×]lذ©S§’””ÄæÍ›™0a‚ëÁn·×ù†C¡P8¾;P©Tlݺ•^xÁa@µ?^¿ãŽ;𔆗——ãM»»|LŸ>•JåVW4U¶¦Þ玀€ìv;ï¼ó;wnp¨X¡PÆ’%K(,,¤U«Vlܸ‘!C†””äøÐà§Ÿ~â‹/¾`âĉtîܹAYNœ8AYY™Ó7;ååå¼þúëlܸ‘ÊÊJ~þùgBCC™6mšã»˜«W¯²jÕ****HOOÇf³qüøq Àm·ÝÆë¯¿Ž———cê`qq1+V¬¨£ã:ur4’$Ñ·o_$IÂb±Ð¿$IÂf³¡T*¹ûî»yâ‰'˜9s&qqqüóŸÿdĈÄÇÇóÝwßÕy9!I’cúÖ¾}û\ÚÆœ†M™2…Ž;6¹ü\é†+›òññaäÈ‘¬_¿¾ž¾…††2lØ0Ö­[ÇôéÓIMMeçÎôîÝ›¤¤$”Jeý \émTTT†¿±ú"#ó{¤v\PP@«V­Ø´iC† !!!¿þõ¯Në©S§Ëœ9s åå—_vÄéÎö~]gäææòÇ?þ‘§Ÿ~šˆˆ§r´oßžóçϳbÅ Š‹‹Õ>z’WñšL&æÌ™Cxx8‰‰‰.eó$Ó¦McÔ¨Q.ëÕÚõZçÎÙ²e‹Óö¸¹p×§zôèAxxx=y”J%F£‘ªªªz‡$IŽÍ+[SòT³Ô·+Yt:˜ÍfzöìIBB]»vÅn·c±XœÞ“˜˜HLL 1|øp¦OŸN```òB ÓéèÙ³'þþþnåðòòÂ`0ЦMì˜\“'Z´hN§#<<œ#F0kÖ,Ǫ8qqq¨T*233iÓ¦ “'OÆßߟˆˆâããñóóã‹/¾ k×®<úè£(•JëéòÃ?ŒV«%88˜ÔÔTÂÂÂhÑ¢iiiôíÛ•J…ŸŸ)))téÒ…„„Μ9C~~>C‡eêÔ©Ž tïÞÝ1Å,<<œnݺa³ÙhÕªU=JJJB«Õ: KNNÆ×××å3qW~Mµ)Wúæíí^¯§W¯^äååqáÂúôéÃÌ™3n$ê.WúâéŠ|22¿GÚµkG\\eeeØív ÀÔ©SÑét.Û¬®]»Dyy9mÛ¶%!!Áѯqe{Îê »ÝŽÉd¢K—.ôïßŸØØØ:rL™2Å1òIii)J¥’x€Ñ£G{´b¦;Š·&wÜqñññõd«ýQ¼»üuëÖˆˆ—õjpp0]»vu,D0räH{ì±:íqsá®/ÒµkWz÷îMdd$åååH’Djj*3fÌp8VMiÚ·oOTT”Ë8kpWoÛívJŠ ÑêÏG¡P`±X,ë7lø*777°ÒõÃ^ëïÚ‡øÕ“_§(<8¯¬õ[ãÀ¨jýzÕ:Ôü²¹fÍß¾}úôî½eóæ95óõ­Ö*òs.Û¾#Mãw×ç•å¸ÿ¯ûP„uB£õ¡fòXõ5裤GoŽg[(5ÙQ*ªC(¨²˜…§øxþ ¢[6«3S‹Åâ˜ÎâI’°Z­NwWu¶|ùr6oÞÌ'Ÿ|‚¯¯o‘†ÆÆo±Xê…¹:ß”2hl5ßþ83ÊæJãFä¹zõ*K—.u w× I’£3]smSeóô¾ÆÈÒØ{jFø oš©@AYY)nOGØ«xö¡>h¼T ¯h&#########sËpk;3@q™‰§®Ð:º’6ƒÕý3 lV –+g¹¯[~8_JQ™‰–ÁͿٞÉdâ›o¾áäÉ“( ºtéBjj*>>>\¾|™ÌÌLRRRÐjvÀËÍŽ¿6’$QTTDEE„„„Ô »víV«•   §;³—”” Õjë„Ùl6®]»FUUÁÁÁn7CljÉGcäiÙš+O5!°Ùl¨ÕjuCAyy9f³ù—MjµZê,enµZÉÏÏ'""¢A]+//Çd2Õ¹_¡P Óé°X,:t³ÙìH+&&†˜˜˜›¢ÃEEE=z”-ZЭ[·ë+"V—ý?þÈåË—III!44´Éi4d®Â[~þþþx{{;Î5Ö¦Ò·¢¢" :ŽÐÐP—KÙ»ŠÇS]’‘‘©+ûó´©mûz½ž€€Âj¸m'x"[mœ¥ïIyZ¯6wþ\áNf»ÝNAA‹…   ëÝÿëú¿¡çw3ú>ÿ)(jªë‡ÐÞ€ ô@(D1@Ðè¤i}úôžsõÊåR“±R++„±²BJ‹ÅéÇ…ÅbMA’$!Iv‘}¹Dô™ö‰ùL1zYî/Çò¼ºÿ/Ë£—å‰;þ‘%Òf|(Þ^¿[då‹;çm/—I² I’š$‹3,‹xñÅEbb¢¸óÎ;ÅСCEll¬˜;w®¨ªª[¶l W®\i¶4ks³ã¯ÏåË—‹ÿú¯ÿ]ºt}ûöëׯ’$ ›Í&þçþG¤¤¤ˆ=zˆGyDœ9s¦ÎýùùùbìØ±bãÆŽsâå—_={öÉÉÉâÞ{ï'Ožtš¾ÕjmRÉGcäiÙš+Oµ¹té’˜;w®ÈÉÉÛ¶móH7ÊÊÊÄSO=%RSSE¿~ýDŸ>}ÄìÙ³…Ñh¬sÝêÕ«E÷îÝʼn'ÜÆg³ÙÄâÅ‹EJJŠèÓ§èÓ§èÝ»·HII;vì§N±±±"))Iôïß_tïÞ]$$$ˆ©S§Š«W¯z”ÏÆpàÀ!úöí+ 狊ŠÄàÁƒExx¸Ø»wo“ãw§S®Âìv{“ÊoÛ¶mŽëkS é[¾$''‹Þ½{‹uëÖ9•Ó]<žê’ŒŒL]œÙ_cêòòr±`ÁÑ«W/‘””$†.8Ð`Xmš»-ðOes—¾'eäi½ÚÜùs…»vÃh4ŠE‹‰ž={ŠŽ;ŠÛo¿]ìß¿¿ÎýÎêwϯªªê†û>‹Yœ>q\J‹}|“±R\½r¹´OŸÞs€´ëþ@·ëþAÂu!òºÿzÝŸÐ]÷/¼¯ûêZ>Hm¿¤·öjf×a„›] P P`³VQré UæÊês ¬U&*³ð`ïP&Þ3­!„c£Íæäܹs|ôÑGÌ™3‡?þ˜72eÊ>üðCNŸ>$IÆê´©öœ ÉÉÉ¡¬¬¬n6]„™ÍfÊÊʨ¨¨àâÅ‹\»vÍfµZ=Ž¿²²’óçÏ“Ùlnð|m8Àk¯½ÆèÑ£YµjIII,\¸ .ðí·ß²hÑ"FŒÁßÿþw®^½ÊÂ… 1™L˜L&V®\Éc=Æ®]»0™LŽ8·oßÎêÕ«yê©§Xºt),Z´¨Î55;v¬Iixš‹/²cÇåiÙš+Oµ9þ<ü1˜L¦:ºáŠŠŠ Ž?Θ1c˜9s&ùË_5jjµÚqÍñãÇY´hÙÙÙX­V·ñ)•JÈŸÿüg&OžÌ”)Sˆ‹‹£¼¼œÈÈHl6BæÏŸÏæÍ›Ù¶m/¼ðŸ~ú)K—.E’$‡nçææ’™™IQQðË›,£ÑèHÏh4RTT„£ÑXO—m6f³™Ÿþ™ï¾ûÎq߉'8yò$&“ ›ÍT¿ ËËËãìÙ³”””Ô±AƒÁ€Ñh$''‡«W¯:ätg_}õ•Ó°¬¬¬&•_TTf³¹Ñ6UUUåÒNÍf3YYY¼øâ‹ôèу>ø€¾}ûòÖ[oQPPà±¾›Íf*++Ô%™ºdff:µ¿k×®5X‡TTT`±XøüóÏY·n“&Mâ7Þ@Á’%K0›ÍìÞ½ÛiXeee9š»-ðWr×ÈVQQQ§¾w–¾«:¸v=ÛP»t³òç wíÆ×_ÍÊ•+™8q"o½õ6›W_}Õ1²äªþwõü¼½½Ù¿³÷}þÜòÓÌH$ lV3æÜïHð+áBîeì­SÐxûc5UbÎ9ÂÃý#xtÌ@Ôj/ì’¹¹}5ÊÕ­€€&NœHHHÁÁÁdff:6ü´Ûí¬Y³†5kÖ`4iݺ5³fÍ¢_¿~Øl6Þÿ}§a;vì`Íš5øúú’••…V«å™gžaôèÑŽ¸ŠÿÒ¥K<÷Üsœ‰^¯Çn·³sçN.^¼ÈáÇ cêÔ©„„„P\\ÌüùóÉÉÉ!**ŠÊÊJ"##Ñétuâüúë¯éÚµ+&L@­V“ŸŸÏK/½D~~>qqqu®MOOoR¿ÆU>233ùæ›o<–§9dk®<ÕPRR²eËÈËËcÉ’%¤¥¥¡R5¼Šßµk×$‰!C†Ð²eKë¤YTTÄâÅ‹iß¾}ƒŽTÛ§¦¦’šš @vv6«W¯æÙgŸ%99™ï¿ÿ¥RIPPc˜{üøñüüóÏlÞ¼™)S¦ ÓéX´h;wîÄf³ÀìÙ³IKKãÙgŸ%!!Ù³g°|ùr²²²˜1c‹-âĉ]~ùå—Q(Dzz:Æ C¡PžžNtt´ÃQªªªâ7Þ`Ó¦MX­V˜3gƒfß¾}¬\¹’ÀÀ@Μ9ƒ$I̘1ƒ‡~Ø¥NåääpîÜ9§aÙÙÙ´k×®Ñå×µkW***mSyyyìٳǩ¾åæærðàA”J%O>ù$!!!<ùä“ 4ÈéÔFwzkµZÝê’ŒŒL}öïßïÔþüüüÈÈÈpY‡´mÛ– †^¯gôèÑL˜0•JÅáÇٱc‹…ÒÒRFå4ÌÏÏÏ!Gs·žàJ¶ªª*¼¼¼X°`ÁÁÁÌ™3‡ââb§é»ªƒk׳îêÕnݺݴü¹ÂÌ—/_F£Ñ0xð`Ú·oÏ®]»8|ø0’$!I’ËúßÝó»}Ÿ·öÈ 8FT$ 줲<îéÀë³Çó‡AQXrŽPQR€)çlÉ„1Ѩ½°Ú!ý´‘2“ý¦¬c–˜˜H¿~ý˜7o£GföìÙìÝ»—Q£Fé0¥RÉW_}Åë¯¿Îøñãyï½÷çù矧¸¸ØeXII ………¤§§“ÀÛo¿M§NX¸p!yyy޹Ÿîâ/))aëÖ­;vŒeË–ñæ›o’‘‘Á±cÇØ¶m[½óGŽ©—Ï{ï½—•+W¢×멬¬dË–-øùùÁùóç‰wÌs‹‹CA~~>¾¾¾Ìš5‹W^y…°°°:„V«¥°°ÐñÖ¥¨¨ˆÒÒÒ:#OÕÏ\âÂ… MJÃÓ|´mÛFã‘<µ±ÙlM’­©÷¹#00Gy„–-[òøãí=pGnn.999Lž<™;3ѣG³sçN z¤bùòåØív&OžÜè7ìV«•×^{ÀÀ@ÆŽ['ì×yêÑ£•••rúôivïÞÍsÏ=ÇÇLXXï¾û.J¥’Ö­[³eËŠ‹‹ºMzz:G­§Ë …___† ÂáÇ),,¤¸¸˜o¾ùÆÑaP*•ìØ±ƒ÷Þ{3f°nÝ:Ú´iÃóÏ?Oaa!ƒ}ûöŠ+HJJbÅŠ”””pß}÷9Õ©Ö­[3vìX§aÑÑÑM.?ÿFÙ”Á` ??ߥ¾ååå‘™™‰ÑhdÞ¼yŒ9’?ýéOØíöz¥;[¼rå yyy.uIFFÆ9çÎsj¾¾¾.ë6mÚ P(ˆ'**Š| päÈžyæÖ®]ËwÜN§ã`áÂ…õÂôz}9nf[àŠqãÆ9•-00Б¿¶mÛb³Ù\¦ïª]wUÏ:«WoVþ\áJ樨(úõëGXXüã7n}ôcÆŒ!00???—õ¿»ç×Ü}Ÿ·üÈL ’Øì½’âyld(þ>jÆÝÑIÀûŸ}É„á]W?Ô^^Xí‚ÍßW°áX9U¶›ãeëõzV¬XÁîÝ»9tèÇŽcýúõtìØ‘•+W:>6BðÅ_8>È:wî|úé§ddd°wïÞzaÛ·oçìÙ³( âââ˜4i­ZµbÊ”)ÜsÏ=œ9s¦Áø·oßNFF”••±aÃÌßþö7¹råJ½óñññ|öÙgìÛ·€¡C‡2tèP:Ä›o¾ÉO?ýļyóˆÅh4âïïïÐh4@õ›îœuÆGŒÁ¶mÛ˜9s&lݺ»ÝŽB¡`×®]ìÝ»€RUU…¯¯o£Óرcû÷ïw›¹sçÒ®];† Æ–-[œÊãR% ³ÙÜèü7õ>w(•Jbbbðõõ%>>ž‹/ztŸZ­fðàÁÜwß}DEEñæ›o2þ|:wîÌÉ“'ùì³ÏxóÍ7ÑjµØívìvÏ–E‡ê!û}ûöñßÿýß ~P¨ÕjQ(X­VÚµkÇ«¯¾ŠÑhdÏž= Õj‘$‰‘#GòÑG9ܸví#FŒàÔ©Sõt¹}ûö|ûí·H’DÿþýÙ»w/ß~û-¾¾¾”••1pà@>ûì3¬V+{öì¡W¯^ÜÿýxyyñÄOðàƒ’‘‘B¡ 22’3fЦMFŒÁñãÇ1™L´jÕÊ©NÅÅÅ¡T* ­Ãå×›B`±XêÙB¡Àd2QYYINNãÇçé§Ÿæÿþïÿ˜;w.;väܹs|ùå—@öèJ—:uêä±'#ó{BáÒþ:tèàYpU¿<õÔSuâ+--åÂ… ˜Íf®\¹‚ÙlvŒ¾8 «=úz3ÛW4$[Mþ>ýôS—é·hÑÂi¹ªgÕ«;wî¼)ùs…;™¿ÿþ{l6:???üüüÈÌ̤²²ÒQ^ÎêOêßæêûü»ø83IT;s¦@°'ÃÂÉ^x©TŒч”αÄD…£öòÂvÝ‘Y{¸ŒJ‹tÓÊÑ£GÉÉÉáÞ{ïåþû溺¬Œ¯¿þš?ýéOìܹ“Ö­[ÕoâKJJ0 ìÙ³µZ$I 6 Š‹‹†ét:„„„„àãã@PPÞÞÞu:½îâ÷õõe̘1X,víÚÅóÏ?V«åÕW_eìØ±X­Öz狊Š8wî={öÄn·óöÛo³råJRRRøàƒèÖ­B)--Åf³¡Ñh0 9ÝÑ¿Þxã víÚEyy9·ÝvŸþ9!!!ddd8ÒïÞ½;z½ž¢¢¢F§qíÚ5òÑ<®P«ÕMÊSïkI’B8~=¡W¯^tïÞàà`¦OŸÎC=ĉ'xÿý÷),,dÍš5\»vË—/³dÉž~úiz÷îí6^»Ýκuëˆuzí¯mòÔ©ShµZ"""8sæ ‹/FA»víÐh4¨T*$I¢S§NÄÅű{÷n íÚµ#!!¸¸¸z:¾xñb”J%B¢££INNf×®]x{{Ó¡CÚ¶m‹«ÕJqq1­ZµÂË«ººôññA©T:¦‘8l°Æ€jÛ{çwœêTUU«V­rÖ •Ÿ3œéðîÝ» ' €âââzúŠ··7IIIüùÏF¯×ãççÇ—_~ÉÙ³g)..öÈèØ±#]ºt©£K>ø YYY²3##ã…BSûËÌÌ$66Öe›Uƒ$I|ÿý÷èõzFŽÉСCÙ´ióçÏçÑGE­V£Óéê„Í›7Ç{ŒîÝ»;â¹Ym+ìv;?üðC=¹-›ÙlfõêÕNÓÿË_þB=\ÖÁÎÒüu½j2™\Æ#ùs‡»¶aýúõøøø°víZ"""ظq#Ï<ó &Lp+‹³çWSÿ¶nݺYû>ÿ.~ÎŒã#%•vÞûÊ€pW?45‰qÕqÙ$Á–*øàPƪëÆß¤¯fN:Å_ÿúWbccéÞ½;tîÜNçø¨ª;¯-[¶D¯×³`ÁÚ´iÃáÇپ};­[·&""ÂiX÷ž——GAAAAAüôÓOX­V¢££9{ölƒñ‡††²}ûvüýýùðÃÉÉÉá±ÇcË–- Óéêœß¶mÿøÇ?¸ï¾û€ê7æ{÷îeéҥ̘1ƒGy___ìv;*•Š:ðî»ï’››Kll,‡&  ÁÎËŽ;ÈÊÊâµ×^ÃÛÛÛ1ÒÎC=T'ý‚‚‚&¥1~üxxàòáNW(Š&å¿©÷y‚Âñ•'×®]»–ÂÂBæÎ‹V«%//¥RIXXãÆsTxjµFCxx¸GË6^¹r…ðÔSOÕ™—]CÍBV«•Ó§O³aÃÒÒÒç­·Þ¢¤¤„M›6ÁÌ™39}ú´cÍáÇóÞ{ï¡P(xâ‰'ðóócݺuõt|Û¶mŒ5 !ÞÞÞÜ~ûí¼ð (•JæÎ‹¯¯/B4 ­ZµâÌ™3TTTàïïω'ˆŽŽ¦¸¸ØiyªT*<èR§\…)•ÊŸOCåç g:Cdd$‰‰‰¬ZµªŽ¾ét:Ú¶mKll,Ÿþ9ƒ½^OEE^^^èõz†ν÷Þ ¸·Å¨¨(Þÿ} êè’J¥º!]Fæ·Nll,_|ñE=û v[‡”••aµZY¶lÞÞÞ,[¶ µZí˜Bf6›yçwP«Õu …£RTT„¯¯ïMk \Q3µK«Õº”Í`0`³ÙxðÁéÙ³g½ôÜ–‘$I”––âç燷··ÓzU¥R¹Œÿf-QìJæš<ûøø8Ò A¥R¹}Aéª-W©T„††ºm§šÒ÷ùwñ›pfIªžj†ƒIâV;4£ºú¡R*°I‚­ßW°úk•q}mmš}³† ÂÚµk™4i#FŒ@£ÑpàÀ¼½½ÿ\-i¤pòwí5ž•µ~k*'‡:**2rܸqý´Z­£å“$;å†R‚BÃP©šîS*-üó`6 ¿0”*5ÒuÁÌVÁOùUøj•Ä„ªÙq¢’ÿýÊ@¹¹f=g°Ù¬ˆÊBîëß–@oðð­µ'èõzúöí‹ÅbáÌ™3\½z•¤¤$æÌ™Crr2 …‚ððpºwïNTT]ºtáܹsœ?ž´´4fÍš…^¯'""ÂeرcÇÈËËcРAdeeÑ«W/ž~úi‚ƒƒŒæÌ™Ѿ}{4 ?üð………Œ3†ñãÇ“œœìô|í¢jVÏhݺ5AAAèt: ¢K—.ÄÆÆÒ­[7._¾Lnn.÷ÜsO<ñ„cJü2”ž’’âðöcbbˆˆˆàÇÄ`0ðøãs÷Ýw;]+88¸IiÔ¦¡|ôèуðððzò(•JŒF#UUUõI’›16V¶¦ä©f©oW²èt:1›ÍôìÙ“„„ºvíŠÝnÇb±8½'11‘˜˜222(**bøðáLŸ>½Þ&]Bt:={öÄßßß­^^^ Ú´iÃàÁƒßUÔäÉßߟ-Z ÓégĈÌš5˱rJ\\*•ŠÌÌLÚ´iÃäÉ“ñ÷÷'""‚øøxüüüøâ‹/èÚµ+>ú(J¥’ÄÄÄzºüðãÕj &55•°°0Z´hAZZ}ûöE¥RáççGJJ ]ºt!!!3gΟŸÏСC™:uªã…BDDÝ»wwL1 §[·nØl6ZµjUO§’’’ÐjµNÃ’““ñõõuùLÜ•_SmÊ•¾y{{£×ëéÕ«yyy\¸p>}ú0sæL§‰º‹§]»vé’ŒŒÌ/ÔØ_ee%f³™nݺ1}út‚ƒƒ]¶Y]»v%((ˆòòrÚ¶mË]wÝEtt4åååH’Djj*3fÌ ,,ŒöíÛå4Ìf³a2™èÒ¥ ýû÷'66–²²2ìv; `Ê”)õ ¨ÝÜèj…îd×7lÛ¶- Ž~Û¯Û"weˆÑh¤[·nDDD4X¯6wþœÑP_$%%…„„ÊËËB8ô¡eË–Ž8œÕÿíÚµ#..®Îó›:u*:®Á¾OëÖ­)--E©TòÀ0zôèz}1»ÝNIQ!º@½#L¡P`±X,ë7lø*777°ÒõÃ^ëïÚ‡øÕ“_§(<8¯¬õ[ãÀ¨jýzÕ:Ôü²¹fÍß¾}úôî½eóæ95ÃaVkù9‰mߦñ;©ŠëóÊr Üÿ×}(Â:¡ÑúP3y¬úôQÒ£7dz-”šì(Õ¡ TYLˆÂS|<Ñ-›Õ™©ÅbqLgq‡$IX­V§;Ë: [¾|9›7oæ“O>Á××·ÎHCcã·X,õÂ\oJ46Žšo\U,Í‘ÆÈsõêU–.]ŠÁ`¨£7’$9:Ó5×6U6OïkŒ,½§f„Ï“U\š"GS°Z­õä1 :tˆgŸ}Ö±ßɯËš®Ë5~6‡ü®(((à­·Þºiå×M¹Ó·ªªª¶ÅÆè’ŒŒŒŒÌ>UUÎgüL«è¶¨ÕÕm„B¡ ¬¬Ì0æî»:tø0`¤Ú¡±Uµþ¶Õ:jœœš_qý—Z¿àı¹å§™©U*ü¼Uª,xijÞ\ÿÒ (5J¤ÿlD¡¨.\É10£ ªÊ‚ÞÛ µ{nÜžvž”J¥Ëk…ét:ÂÂÂtdŠ¿±çoVÔ¦±¶›éÈ8“'88˜I“&Õ›²%„ÀÏϯN‡­©²yz_cdiì=žèÖÈќųgÏ^yåÒÒÒ0`@“ËÒ*•Ê£ýyn„   ›Z~ Ù”»2jŒ=ºŠ§1º$#####ã ·tË"½¿†~‚Y$x©=ë°Ø¬* ³¹35½¿æúhÍ­ÅØ±c9rääüÅßjµºÎÁ·š,7Cþg™Ü~ûí¤¤¤ìtSÇ[ÿ$’‘‘‘‘‘¹¸e…BQ½wŠÚ‹G‡Äaµžá›ŒsT˜=[ÿ[ç­bX÷ ‡VíåˆóV¢fq™êM#eÇ^FFFFFæ÷Å-ëÌÀuçC©$ºe03îî̸¢2,UÖ†W(S€V£&"$€ } –C•‘‘‘‘‘‘‘‘‘‘ùÏâÖwf//5!ÁAé®/ àzÿ ¸þýŒR©rìë ;32222222222··´38‘ê¢nùìÈÈÈÈÈÈÈÈÈÈÈxˆòÆ£‘‘‘‘‘‘‘‘‘‘‘ù×ó›ÊpõÙŒ<™LFFFFFFFFFæ·ÁoÆ™±ÛíX¯ï’íÉ J¥µFsÓ÷‘‘‘‘‘‘‘‘‘‘¹9ÜòÎŒ‹ÅL^öyÊ %Ix²˜ ¥‚€À Z·‰E«õ–‘‘‘‘‘‘‘‘‘¹Å¸¥!’ÝN^öyÌfñí;£ñp—ï*‹…œ‹™äeŸ§m\{”*•ìÐÈÈÈÈÈÈÈÈÈÈÜBÜÒÎ @U•…2C ñí;£ Ô{|ŸÖÛ‡è¶ñdfœ¢ªÊ‚·Oóïn2™øæ›o8yò$ …‚.]ºššŠ—/_&33“””´:`áfÇ_I’(**¢¢¢‚€€BBBê„]»v «ÕJPPÓÙKJJÐjµuÂl6×®]£ªªŠàà`·›!65Æä£1ò4‡lÍ•§„Øl6ÔjµÇº!„ ¼¼³ÙüË&µZ-u«ÕJ~~> êZyy9&“©Îý …N‡ÅbáСC˜ÍfGZ111ÄÄÄÜ.**âèÑ£´hÑ‚nݺ]_±ºìüñG._¾LJJ ¡¡¡MN£!ÛpÖØòó÷÷ÇÛÛÛq®±6Õ¾a0Ðét„††º|ñÓ\ñÈÈÈü‚;»iŒM¹j3Š£¡¶ vÝ¢×ë hÖü»j#=©?›«-uVFžÖÇ¥©}»ÝNAA‹…   Œóßýlo6ŠZ‡êú¡4€7àè= D‘@ tº)@ZŸ>½ç\½r¹Ôd¬ÆÊ a¬¬†ÒbqúÄqa±˜ES$IØívQ^fßÚ/Ì&c£ã0›ŒâÛCûEy™AØív!IR“dq†Åb/¾ø¢HLLwÞy§:t¨ˆsçÎUUUbË–-bÀ€âÊ•+Í–fmnvüµó¹|ùrñ_ÿõ_¢K—.¢oß¾býúõB’$a³ÙÄÿüÏÿˆ””Ñ£GñÈ#ˆ3gÎÔ¹???_Œ;VlܸÑq®¢¢B¼üòË¢gÏž"99YÜ{ï½âäÉ“NÓ·Z­MJ£1ùhŒ<Í![så©6—.]sçÎ999bÛ¶méFYY™xê©§DjjªèׯŸèÓ§˜={¶0ëÚÚêÕ«E÷îÝʼn'ÜÆg³ÙÄâÅ‹EJJŠèÓ§èÓ§èÝ»·HII;vì§N±±±"))Iôïß_tïÞ]$$$ˆ©S§Š«W¯z”ÏÆpàÀ!úöí+ 狊ŠÄàÁƒExx¸Ø»wo“ãw§S®Âìv{“ÊoÛ¶mŽëkS é[¾$''‹Þ½{‹uëÖ9•³¹â‘‘‘ùgvSÓWiŒM¹j3<‰ÃU[`2™DEE…X°`èÕ«—HJJÇh¶ü;“ÛÓú³¹ÚÒ_—ч~(¬V«Gõqcij_¤²²R,Z´HôìÙStìØQÜ~ûíbÿþý ÆY^^~ÃÏÖb1‹Ó'Ž Ci±£o2VŠ«W.—öéÓ{vÝèvÝ?H¸î/D^÷B¯ûºëþ…÷uC]Ë©í—üöœ™²ëÎŒ©VK’¤:‡$!Dí£“±R|{h¿(» ÎÌ©S§DBB‚X½zµ0Â`0ˆüã¢M›6âÇŸ|ò‰èÙ³§¸|ù²Cæ‚‚‘- C½¼: 3™LÂ`0ˆòòrqáÂQXXèûç?ÿéqü"++K\¼xQ˜L¦Ï׿‹/¾mÛ¶‹/G“&M;vYYYâðáÃ"66V¼øâ‹bÏž=âöÛo=ô0Âh4Š+VˆaÆ ???ñÁ8âüè£D\\œXµj•Ø¿¿>|¸?~|½N´B|óÍ7MJÃÓ|œ?^lذÁcyšC¶æÊSmöïß/âââÄ_|!6lØPG7\‘ŸŸ/zõê%þö·¿‰Í›7‹þóŸâ«¯¾V«ÕqÍwß}'EHHˆøî»ïÜÆ'I’8|ø°X³føàƒĺuëÄøñãE‡Ä?þ(~øá#Ö¯_/®]»&rssÅÚµkELLŒxî¹ç UUU•¸té’8wvíšB»Ý.®]»&*++éUVVŠk×® I’Deee=]Þ»w¯Ðëõ"((HìܹÓqß—_~)ÂÂÂD@@€Ø½{·¢Ú‘ÈÍÍ¢¸¸¸Ž –––ŠÊÊJ‘-®\¹âÓmìÙ³ÇiØÙ³g›T~ßÿ½0™L¶)‹Å":äTßL&“ÈÌÌݺuO?ý´øñÇÅÌ™3EjjªSÝq¥·GFF¦šsçÎ9µ›«W¯Š¬¬,·6U^^.ŒF£¨¬¬tY/¸Šÿ×véª-BˆM›6‰„„ñ¿ÿû¿"==] 6LŒ5JTTTÜPÞÝÉíªn­©?ËËË…Ùln–¶ÔUåçç‹£G:­?Þä|7¥/RUU%vïÞ-Ú´i#V¬X!ÒÓÓÅàÁƒÅ°aÃDee¥HOOwgff¦¸råÊ ?Ûÿgæ–žf&„¨^¸L€Bˆês×s[³€µVÇpÚ/÷‹fòP3üÕÃ{Lœ8‘‚ƒƒÉÌÌtløi·ÛY³f kÖ¬Áh4ÒºukfÍšE¿~ý°Ùl¼ÿþûNÃvìØÁš5kðõõ%++ ­VË3Ï<ÃèÑ£q7ÿ¥K—xî¹ç8yò$J¥’Þ½{³páBŒF#óçϯsþ¥—^ª7åæìÙ³tèÐ'Ÿ|½^ÝngçÎ\¼x‘ÇÆÔ©S ¡¸¸˜ùóç“““CTT•••DFF¢ÓéêÄùõ×_ÓµkW&L˜€Z­&??Ÿ—^z‰üü|âââê\›žžÞ¤4~«|dffòÍ7ßx,OsÈÖ\yª¡¤¤„eË–‘——Ç’%KHKKóh¿k×®!IC† ¡eË–ÖI³¨¨ˆÅ‹Ó¾}{‡Ý¹C¡PššJjj*ÙÙÙ¬^½šgŸ}–ääd¾ÿþ{”J%AAAŽ!ðñãÇóóÏ?³yóf¦L™‚N§cÑ¢Eìܹ›ÍF@@³gÏ&--gŸ}–„„fÏž ÀòåËÉÊÊbÆŒ,Z´ˆ'N8tùå—_F¡PDPPééé 6 …BAzz:ÑÑÑPUUÅo¼Á¦M›°Z­„……1gÎ̾}ûX¹r%œ9sI’˜1c?ü°KÊÉÉáܹsNò³³i×®]£Ë¯k×®TTT4Ú¦òòòسgS}ËÍÍåàÁƒ(•Jž|òIBBBxòÉ'4hÓé®ô¶±ñÈÈÈT³ÿ~§vãïïϧŸ~ê4ÌÏϋł  aòäÉ.ëWñÿÚ.ݵ%%%Œ5Š & R©8|ø0;vìÀb±àçç×ä¼K’äRnWukvv6mÛ¶eÁ‚„……a2™hѢе¥®ÊÈÏÏ^½zÑ«W/ n}Ü­[·&绩}‘Ë—/£Ñh|I’Ü–WDDÄ¿üÙÞ ~›fVw¢ª „€ëNMíCªwNªÕk¸#ÖXéׯóæÍcôèÑÌž=›½{÷2jÔ("##i+•J¾úê+^ýuÆÏ{ï½Gxx8Ï?ÿ<ÅÅÅ.ÃJJJ(,,$==„„Þ~ûm:uêÄÂ… ÉËËs8fîâ/))aëÖ­;vŒeË–ñæ›o’‘‘Á±cÇØ¶m[½óGŽ©—Ï{ï½—•+W¢×멬¬dË–-øùùÁùóç‰w̱Œ‹‹CA~~>¾¾¾Ìš5‹W^y…°°°:a­VKaa!F£¨î4—––ríÚµ:iK’Ä… 𔆧ùhÛ¶-Æ#yjc³Ùš$[SïsG`` <ò-[¶äñÇ'::úúæîÉÍÍ%''‡É“'sçw2zôèÿgïÌã£*²†ýÜ^³uÒÙH!„„5 aI`XD!¸€â‚âÊ ê8(Š‚£3:3¾øŠ¯Œ83Ž :(û""¨ (*‹$ì„$@B–ÎÒéõÖ÷G'mBº;ÆÁ¹Ïï×t¸Õ·êTÝsªêTÕ­bãÆ€kmî‚ p:<úè£hµÚ6Ù‡Ýnç•W^!""‚ñãÇ7 »8O}ûö¥®®Ž²²2>ÌæÍ›ùýïχ~Hll,ÿûßQ©TtèÐU«VQQQáÖí¤¤$¶lÙž={Zè²$I„„„0bÄvïÞMYY|õÕWîÆJ¥R±~ýzÞzë-¦OŸÎÒ¥KéÔ©Ï=÷eee˜L&¶oßNtt4 .$##ƒ… RYYÉí·ßîQ§:tèÀøñã=†%%%\~aaam²)“ÉDII‰W}+..æØ±c˜ÍffϞ͘1cøío‹ÓélÑøû²Å¶Ä£  ðGõh7!!!^à ’$Ñ¥K:uêä³^ðGS|µ&LàÅ_ä믿橧žbÉ’%Üpà ÆKÊ»/¹½µ×:uB’$ÒÒÒhß¾='Ož$55õ’ÚRÊÈW{ÖV鋜?ž¡C‡˯ýk&L˜À²eË7naaa^Û›N:qæÌ™û³½\Õ33Íhœ•ñ ?¹, ³6!Ñú&Îc4Y¸p!›7of×®]ìÝ»—åË—Ó£G-Zä~ÙXÁ§Ÿ~ê~éêèÑ£ÄÇdznÝ: ضm[‹°µk×räÈ$I"55•Gy„„„¦L™Â­·ÞJ~~~«ñ¯]»–‚‚"""¨®®æƒ>`øðáüÏÿüݺuãܹs-®wéÒ… 6°}ûvFŽÉÈ‘#صkóæÍãСCÌž=›””Ìf3aaaîYN¸Fºzl-ŸA^^kÖ¬aÆŒÄÇdzzõjœN'’$±iÓ&¶mÛÀ5×\ƒÍf#$$¤Íi¬_¿žÏ?ÿÜg>fÍšEZZ£FbÕªUåñ†,ËX,–6ç?Ðû|¡R©HNN&$$„.]ºpêÔ)¿îÓjµ >œÛo¿Ž;2oÞ<ž}öYzõêÅذaóæÍC¯×ãt:q:~Ë´oß>¶oßÎ_ÿú×V7SÐëõH’„Ýn'--—^z ³ÙÌÖ­[)--E¯×#Ë2cÆŒaÙ²eî 7.\¸@^^l¡Ë]»vå›o¾A–e† ¶mÛøæ›o ¡ººšk®¹† 6`·ÛÙºu+ýû÷çŽ;î@£Ñ0yòdîºë. $‰ÄÄD¦OŸN§NÈËËcß¾}Ô×דàQ§RSSQ©TÄÄÄ´ëÒ¥Ë%—_[lJÕjmaC’$Q__O]]………Lœ8‘ÇœþóŸÌš5‹=zpôèQ>ûì3À»-¶O÷îݽÎD)(ü7#„ðh7³gϦ[·n˜ÍfŸ6õð÷ˆÏŸø=Ù¥·¶ gϞª*Nž<‰ÅbáܹsX,–Ë2óê©>k×®à½n}衇°Z­lܸñ’ÚR˨-íYkxË›¯¾ˆJ¥Âd2áp80 „††ʱcǨ««óY^'OžüÙžíåäã̼;3MÓlš\‰Y€={öPXXÈm·ÝÆwÜAuu5_~ù%¿ýíoÙ¸q#:t\#ñ•••˜L&¶nÝŠV«E–eFEpp0à B¢££  22’   f†ê+þƇÕjeÓ¦M<÷Üsèõz^zé%ÆÝnoq½¼¼œ£GЯ_?œN'o¾ù&‹-"''‡÷Þ{ììl„DDDPUU…Ãá@§Óa2™ÜrúbÈ!¼öÚklÚ´‰šš®»î:>ù䢣£)((p§ß§OŒF#åååmNãÂ… ~å£5y¼¡ÕjÊ ÷µ†,»f"¿ý¡ÿþôéÓ‡¨¨(¦M›ÆÝwßÍþýûy÷Ýw)++ãwÞáÂ… œ={–¹sçòøã3`ÀŸñ:N–.]JJJŠÇß^ì$ûì3Ž9BEE…_¶è+ž£G*ÎŒ‚‚$I"88¸…ÝŒ?ž'NrI6å-~Oqxj t***0 Œ3†‘#GòÑG1{öl|ðAúôésEÊÆŸúS¯×_r[êORš7oõxdd$ÿûß fÉ’%ÄÇdzbÅ žzê)xàúõëçµóŸölå°Ì  å²2áírƒÓxíÊpðàAž~úi¾ÿþ{ÀÕáéÕ«ƒ‡ÃáþV«¥}ûöF^xá/^ÌäÉ“‰‹‹£C‡ÄÇÇ·‹w{ÚÅÅÅ”––pèÐ!ìv;IIIî«·øãã㉉‰aíÚµ„……ñþûïóñÇĪU«X½z5ƒ¡Ùõ5kÖ¸§/—-[Æí·ßÎöíÛ™?>S¦LaþüùôîÝÛ=kѽ{w:DQQ»wï&<<¼Õ¥4ëׯçðáüòÊ+üõ¯%88˜””âââ¸ûî»Ýéßy礧§”ÆÄ‰ýÊGkòx#Ðü_J¹µFã{aþ¼&„`É’%¼þúëX­V·®©T*bcc™0a“'O¦S§N´oßNG\\œ_£RçÎcÇŽäååy\wëp8B`³Ùøá‡øàƒ6lqqq¬\¹’ÊÊJþñ0oÞø€Ç{ŒŒŒ V®\Éý÷ßïvÄi4ªF$Ir¿w V«Y½z5Ï?ÿ¼ÛH›¾¼~à 7”†F£q´ûÊÇ´iÓP«Õ>åñF ²zŸ/ÂÃÃq:üío£W¯^­. “$‰ØØXæÎKYY ¬X±‚#F‘‘ANNŽû·‡âÓO?eÒ¤IôêÕ«UYöïßOuuµÇQ¬šš^}õUV¬XA]]?þø#111L:Õý^ÌùóçY¼x1µµµlÙ²‡ÃÁ¾}û:t(×]w¯¾ú*ƽt°¢¢‚… 6Óñž={º+eY–4h²,cµZ2d²,ãp8P©TÜrË-Lž<™3fššÊ¿þõ/òòòèÒ¥ ß~ûm³Š]–ew£º}ûv¯¶±cÇaS¦L¡G—Ÿ7ÝðfSÁÁÁŒ3†åË—·Ð·˜˜FÅÒ¥K™6m¹¹¹lܸ‘‘‘J¥jv–‚7½m-ÏŒ=šeË–1uêTrssÙ´i  gÏžÄÅűdÉ’a™™™X,fÍšELL üãÝmæÅõ‚·ø³²²(,,dÒ¤I<þøãÄÇÇ3wî\JKKIHHà£>bĈdeeqÍ5×ðüóÏ3uêTÚ·oÏêÕ«éׯݺu»låp±ÜÞÚëÇ{Œ””fÍšE»ví˜8q¢»NêÕ««V­ò«--**â׿þ5Ó¦MãÆoôXFu—?õq[ð§/RQQѬgÔ¨Q<ñÄLŸ>ÄÄD6nÜHVVݺuãÕW_õg\\ÜÏúl/Þ¶4’<üÝt[4U“例‡¶cÇÄÄ & Öëõî–O–Ô˜ªˆŒ‰E­̧r-±Q^vŽèظ†x„‡û÷GpØí”_8OL»x´ ËC.׎fF£‘AƒaµZÉÏÏçüùódddðÌ3Ï™™‰$IÄÅÅѧO:vìHVVGåĉ 6Œ'Ÿ|£ÑH||¼×°½{÷R\\̵×^ËñãÇéß¿??þ8QQQ­Æ?cÆ "##éÚµ+:Žï¿ÿž²²2ÆÇĉÉÌÌôx½éá…»tèÐÈÈH áááDFF’••EJJ ÙÙÙœ={–¢¢"n½õV&Ožì^’?Mãæää¸g:’““‰ç‡~Àd2ñ›ßü†[n¹Åã\QQQ¥Ñ”ÖòÑ·o_âââZÈ£R©0›ÍØl¶Y–݇1¶U¶@ò$˲OY X,úõëGzzº{tÆjµz¼§[·n$''SPP@yy9£GfÚ´iÍâj´CƒÁ@¿~ý ó)‡F£Ád2Ñ©S'†î^Ãܘ§°°0Úµk‡Á` ..޼¼<ž|òI÷®q©©©¨ÕjŽ;F§NxôÑG #>>ž.]ºʧŸ~JïÞ½¹ï¾ûP©TtëÖ­….ßsÏ=èõz¢¢¢ÈÍÍ%66–víÚ1lØ0 „Z­&44”œœ²²²HOO'??Ÿ’’FŽÉc=æPˆ§OŸ>î%fqqqdggãp8HHHh¡Sèõza™™™„„„x}&¾Ê/P›ò¦oAAAFú÷ïOqq1'OždàÀ̘1ÃãA¢—+vSWW‡Åb!;;›iÓ¦í5,&&Æ}bçÎéÚµ«»osq½à+~‡ÃA}}=YYY 2„””ª««q: :”)S¦A×®]騱#555ȲLnn.Ó§Ooá0Ч¶Î[{Ý»wo"##©©©¡S§N 4ˆììl÷ ócÆŒáÁlµ v:Ô××Ó»woÒÓÓ½–3Ðj}Üüé‹tèЪª*T*wÞy'cÇŽE­V“ššJ×®]©©©AAvv6Ó§O'..ŽÚÚZ¯qæææ^ò³u:T–—aˆ0ºûi’$aµZ­Ë?øà‹"×Ô˜>Î&7ýxê¼ûµS—äÇuU“ïFFÝä[Óä£å§óhÿ8pÀ€U+W>Ñ8b·Û()þøcBBBšÍ4´5þÆ)Ƌü]¤ ÚGã»?þV¤q)òœ?žùóçc2™šé,ËîÎtão•ÍßûÚ"K[ïiœáógDz@ä»ÝÞB“ÉÄ®]»xúé§™3gyyy-Ê×åÆM.‡üÞ(--åõ×_¿båךMùÒ7›ÍvYl±-ñ(((((ügc³Y9Qð# IÑj]u»$ITWW›ÆÝrËœ]»vï̸;`kò·£É§ÑÉiü ß4ùü«z™™$I¨T*T’ »ÕÒà,ø·tLlV+*IuÅœ˜Füí<©T*¯¿õf0ˆhÕ‘i-þ¶^¿ReД¶vx®¤#ãIž¨¨(yä‘K¶„„††6ël*›¿÷µE–¶Þãn]Šà)ž­[·òç?ÿ™aÆ1tèЀËÒjµÚ¯óy.…ÈÈÈ+Z~­Ù”¯2j‹=^®xZãªvfÀÕÑ  ãlq!Z?J›Íƹ¢B‚CÃÚÔYûObüøñŒ3æ’·T ­VKbbâÏ-FÀ²\ ùÎ2¹þúëÉÉÉ!**ê?nÛHùOÒ)…««³kVFZ£!:.sE§9q¬áç Ñ’JEPpÑq ¨œ™+9;s%hÜK\AAÁuÈšâØ+(((((üwqÕ:3ðÓ2³ˆ#*•šÚšš†…Z[j&¡Ñh30 W|™™‚‚‚‚‚‚‚‚‚‚Âåçªwf÷þ×I‚÷m—ï‘$ µZívdgFAAAAAAAAAáêâªvf·#¢R©®Úw_ÚŽêÒ£PPPPPPPPPPPPø÷£83 W%¿˜uYv‡“Šj v§ÓŸ÷ÿѪÕD…¡Õ\Ùs#® ¿gFp¾ÒÌâõ‡ØyðÚ"Ïåírå©!‡­Vë·n!¨©©Áb±¸©Õëõ„‡‡7ÛÊÜn·SRRB|||«ºVSSC}}}³û%IÂ`0`µZÙµk‹ÅVrr2ÉÉÉWD‡ËËËÙ³gíÚµ#;;•Jå.û~ø³gÏ’““CLLLÀi´fÞÂÚZ~aaa¹¯µÕ¦ZÓ·òòrL&ƒ˜˜¯[Ù{‹Ç_¹~¢5»q:”––bµZ‰ŒŒ$""Âg|žê…¶Æqq}ïo;—*[ õο3ÞhZWFÂÃÃÖÛdû0Mã¼8¬iÛðsäýr#5ù¨>Z@¡€01@<$é@/ Ȇ 8à™óçÎV՛넹®V˜ëj…©ªBÞ¿OX­², YvŠÓg+ÅÀ©‹1ÿwLŒ}£è§Ï‚âæÿ£HŒ}£XÜðÇŰéï‹7—oÇ‹+ij׈Sg+…,;…,ËÉâ «Õ*þð‡?ˆnݺ‰o¼QŒ9R¤¤¤ˆY³f ›Í&V­Z%†*Î;wÙÒlÊ•Ž¿i>,X ~õ«_‰¬¬,1hÐ ±|ùr!˲p8âÿý¿ÿ'rrrDß¾}Ž÷Þ+òóó›Ý_RR"Æ/V¬Xá¾V[[+þô§?‰~ýú‰ÌÌLqÛm·‰xLßn·”F[òÑy.‡l—+OM9s挘5k–(,,kÖ¬ñK7ª««ÅÃ?,rssÅàÁƒÅÀÅÌ™3…Ùlnö»·ß~[ôéÓGìß¿ßg|‡C¼üòË"''G 8P 8P 0@äääˆõë׋ƒŠ””‘‘‘!† "úôé#ÒÓÓÅc=&Ο?ïW>ÛÂŽ;D||¼4h(--u_///ÇqqqbÛ¶mÇïK§¼…9΀ÊoÍš5îßµÕ¦ZÓ·F}ÉÌÌ K—.õ(§·xdYöKn…Ÿðeïk×®‹EÌ™3Gôë×OôèÑC\ýõâóÏ?÷Ÿ§z¡®®®MqѲ¾÷·h+—C¶@êWþ¼QSS#^xáÑ¿‘‘‘!F-vìØáó&‹ÍfóÚÞøŠÓWÛàoÞ­V‹8¼Ÿ0UU¸ûøõæ:qþÜÙª< kð²üƒô!±Áˆið' þEPƒ¿¡mâ'7Ì€IDATƒ4õKZpuïfÖ0 #8œ„@Âa·Qy&›¥ÎuM€@Ân«§îô×Ü5 †I·^K°^‡ÂuÀfk›´‘£G²lÙ2žyæ>üðCV¬XÁ”)Sxÿý÷9|ø0²,c6››òYVVFaa!ÕÕÕͳé%Ìb±P]]Mmm-§NâÂ… î0»Ýîwüuuuœ8q‚Ó§Oc±XZ½Þ”;vðÊ+¯0vìX/^LFF/¾ø"'Ožä›o¾aΜ9äååñ¿ÿû¿œ?ž_|‘úúzêëëY´h>ø ›6m¢¾¾ÞçÚµkyûí·yøá‡™?>µµµÌ™3§ÙoÙ»wo@iø›S§N±~ýz¿å¹²]®<5åĉ|øá‡P__ßL7¼Q[[˾}û7n3fÌà‰'žàæ›oF«Õº³oß>æÌ™ÃéÓ§±Ûí>ãS©T\sÍ5üîw¿ãÑGeÊ”)¤¦¦RSSCbb"‡!Ï>û,+W®dÍš5<ÿüó¬[·Žùóç#˲[·‹ŠŠ8vìåååÀO³f³ÙžÙl¦¼¼!f³¹….;, ?þø#ß~û­û¾ýû÷sàÀêëëq8€k„°¸¸˜#GŽPYYÙÌM&f³™ÂÂBΟ?ï–Ó—m|ñÅÃŽ?PùuìØ‹ÅÒf›²Ùl^íÔb±püøqþð‡?зo_Þ{ï= Ä믿Nii©ßún6›6l˜×ç®  Ð_öž””ÄÎ;Y´h“&Mâõ×_ÇápðÒK/QSS¸êïÆºÞ[½ðÅ_øŒãb<Õ÷þ´КlµµµÍê{O²ùjo~îüyã“O>aéÒ¥<òÈ#¼öÚk!˜;w.f³Ù«,AAA|þùç^û0Ÿ~ú©Ç8- ëÖ­óØ6X­Vêêêþ­y¿®úefd² »KÑ·¤‡Vr²è,Î9è‚°××a)üš{†Äs߸kÐj58eËåöaÜ4No‚«£ΤI“ˆŽŽ&**ŠcÇŽ¹üt:¼óÎ;¼óÎ;˜Íf:tèÀ“O>ÉàÁƒq8¼ûî»ÃÖ¯_Ï;ï¼CHHÇG¯×óÔSO1vìXwÜ­ÅæÌ~ÿûßsàÀT* pw@ž}öÙf×ÿøÇ?¶XrsäȺwïÎC=„ÑhÄét²qãFN:ÅîÝ»‰å±Ç#::šŠŠ ž}öY 騱#uuu$&&b0šÅùå—_Ò»woî¿ÿ~´Z-%%%üñ¤¤¤„ÔÔÔf¿Ý²eK@i\Œ·|;vŒ¯¾úÊoy.‡l—+OTVVòÆoP\\Ìܹs6ljuë»ø]¸pY–1bíÛ·'""¢Yšååå¼üòËtíÚµUÇ\Óû¹¹¹äææpúôiÞ~ûmž~úi233ùî»ïP©TDFFº§Ç'NœÈ?þÈÊ•+™2e ƒ9sæ°qãFáááÌœ9“aÆñôÓO“žžÎÌ™3X°`ÇgúôéÌ™3‡ýû÷»uùOú’$Idd$[¶laÔ¨QH’Ä–-[HJJr;J6›×^{>ú»ÝNll,Ï<ó Çgûöí,Z´ˆˆˆòóó‘e™éÓ§sÏ=÷xÕ©ÂÂBŽ=ê1ìôéÓ¤¥¥µ¹üz÷îMmmm›mª¸¸˜­[·zÔ·¢¢"vî܉J¥â¡‡"::š‡zˆk¯½ÖãÒFoz{æÌrrrÈÉÉi!wvv¶_:¬ ðßFkõåÛo¿N§cøðátíÚ•M›6±{÷ndYÆjµò /Í£>êµ^())ñ‡ÓÙr#%oõ}kíD x“­iþ¢¢¢xæ™g¨¨¨ð(›·òóTïü»ó窪*n¾ùfî¿ÿ~Ôj5»wïfýúõØl6Ÿ²xkoNž<‰Édjç† 0›Í>û[f³ùßš÷Káêž™÷ŒŠ,ƒS€\]Ì­}ÃyuæD¸¶#Ö¯©­,¥¾ðk=÷»VƒÝ [›©®w^‘}̺uëÆàÁƒ™={6cÇŽeæÌ™lÛ¶›o¾™ÄÄD·±¨T*¾øâ ^}õU&NœÈ[o½E\\Ï=÷^Ã*++)++cË–-¤§§óæ›oÒ³gO^|ñEŠ‹‹Ýë}Å_YYÉêÕ«Ù»w/o¼ñóæÍ£  €½{÷²fÍš׿þúëù¼í¶ÛX´hF£‘ºº:V­ZEhh(ñññœ8q‚.]º¸×f¦¦¦"„ ¤¤„ž|òIþüç?Û¬òÐëõ”••¹G]ÊËË©ªªj6óäzæ2'Ož ( óѹsgt:_ò4Åáp$[ ÷ù"""‚{ï½—öíÛó›ßü†¤¤$÷ì/ŠŠŠ(,,äÑGåÆodìØ±lܸpÍT,X°§ÓÉ£>Úæ‘»ÝÎ+¯¼BDDãÇovqžúöíK]]eee>|˜Í›7óûßÿž?üØØXþþ÷¿£R©èС«V­¢¢¢Â­ÛIIIlÙ²…={ö´ÐeI’ aĈìÞ½›²²2***øê«¯¸öÚk E¥R±~ýzÞzë-¦OŸÎÒ¥KéÔ©Ï=÷eee˜L&¶oßNtt4 .$##ƒ… RYYÉí·ßîQ§:tèÀøñã=†%%%\~aaam²)“ÉDII‰W}+..æØ±c˜ÍffϞ͘1cøío‹ÓélÑ ù²Å³gÏúõÜ<ãÉn† Bll,¿þõ¯™0aË–-cܸqDDD I]ºt¡S§N>ëoqÆféûªï}µ—‚?ùëܹ3‡£Õ¶¨µzççÈŸ7&L˜À‹/¾È×_ÍSO=Å’%K¸á†0œ9sÆ«,Þú0‰‰‰Üyç-â3f ‘‘‘^û7åååÿö¼_ WýÌL#²8œ2ý3ºðà˜‚µL¸a²€w7|Æý£{3ñ¦Áh5ìNÁÊïjù`o 6Ç•™›1,\¸Í›7³k×.öîÝËòåËéÑ£‹-r¿l,„àÓO?u¿XuôèQâããY·nlÛ¶­EØÚµk9rä’$‘ššÊ#ü·Å¶}ˆŠŠ`Ú´iÜ}÷Ýìß¿Ÿwß}—²²2Þyç.\¸ÀÙ³g™;w.?þ8 ð¯ÓédéÒ¥¤¤¤xüíÅ6yðàAôz=ñññäççóòË/#„ -- N‡Z­F–ezöìIjj*›7oF’$ÒÒÒHOO'55µ…Ž¿üò˨T*„$%%‘™™É¦M› ¢{÷îtîÜ!v»ŠŠ Ðh\Õepp0*•ʽŒ4<<ÜmƒŽ¸lïoû›G²Ùl,^¼ØcXk´V~žð¤Ã›7o&..Žððp***Zè[LL AAAdddð»ßý£ÑHhh(Ÿ}öGŽ¡¢¢¢M¶ˆÜ ÿíx³›åË—Ì’%KˆgÅŠ<õÔSÜÿý~Û—?qÔ××óöÛo{­ïsss[´wÝuÇ¿¤¯?²Y,Ÿ² 0 ÕzççÊŸ·gýý÷ßc43f #GŽä£>böìÙ<øàƒäææ’íQ–:xìÃøŠsÒ¤I :Ôcÿ&""‚ôôtz÷îýoÉû¥ò‹pfÜ/ù ¨¬sòÖ&„€›²BÑé´tKu½ì嫾¯å½]Õ˜m /Æ_¡·f<È_þòRRRèÓ§áááôêÕ ƒÁà~©\×öíÛc4yá…èÔ©»wïfíÚµtèÐøøxaíÚµ ¸¸˜ÒÒR"##9tèv»¤¤$Ž9Òjü111¬]»–°°0Þÿ} yðÁYµj¥¥¥ †f×׬YÃÿýßÿqûí·®ómÛ¶1þ|¦OŸÎ½÷ÞKHHN§µZM÷îÝùûßÿNQQ)))ìÞ½›ðððV`ýúõ?~œW^y…   ÷LO\\wß}w³ôKKKJcâĉÜyç~å×<Þ$) üzŸ?!ÜïQùóÛ%K–PVVƬY³Ðëõ£R©ˆe„ îηV«E§Óç×hû¹sçØ±c?üp³Ñ¿F7°Ûí>|˜>ø€aÆÇ믿Nee%}ôñññ̘1ƒÃ‡»·Û=z4o½õ’$1yòdBCCYºti _³f 7ß|3B‚‚‚¸þúëyþùçQ©TÌš5‹„èt:ÈÏϧ¶¶–°°0öïß@RRËS­V³sçN¯:å-L¥Rµú|Z+?OxÒáäädéÖ­‹/n¦oƒÎ;“’’Â'Ÿ|‚ÉdÂh4R[[‹F£Áh42zôhn»í6À?[ Dn…ÿv<Ù,˘L&‚ƒƒÝuntt4jµÚ=XUUU…J¥j¶oSü‰£¼¼­VË]wÝE¿~ý€æõ}hh(K–,áüùóÍÚ µZ}Ƀo­Éf2™p8^ek¼Ï[½ãt:©ªªúYòçÆånz½ž7Þx­V‹Ñht¯Lxï½÷<ÊãµMi\†ç)N§ÓɆ 8räH³¶!55•¸¸8Þ{ï=JKKÿ-y¿T~Î B Ë®¥f0ÕËüc§Ë¡¹¹w(j•„C¬þ®–·¿4Qg {rsÙw1kdĈ,Y²„Gy„¼¼ø€Ç{ŒŒŒ V®\Éý÷ßïvÄq:ÍÞá$ÉýÞZ­fõêÕ<ÿüóîÊ©éËë7ÜpC@ih4÷H»¯|L›6 µZíSo*[ ÷ù"<<§ÓÉßþö7zõêÕê’0I’ˆeîܹ”••‘ÀŠ+1bî—¹:ħŸ~ʤI“èÕ«W«²ìß¿Ÿêêj£d555¼úꫬX±‚ºº:~üñGbbb˜:uªû½˜óçϳxñbjkkÙ²e ‡ƒ}ûö1tèP®»î:^}õU4{é`EE .l¦ã={öD’$²,3hÐ ÷‹¥C† A–e*•Š[n¹…É“'3cÆ RSSù׿þE^^]ºtáÛo¿m68!˲{ùÖöíÛ½ÚÆŽ;<†M™2…=z\~ÞtÛM3fÌ–/_ÞBßbbb5jK—.eÚ´iäææ²qãF @FF*•ªÙY ­é­?r+((4ǓݨT*FÍO<ÁôéÓILLdãÆdeeÑ£G, ³fÍ"&&†?þñî6³i½à+Žž={RXXȤI“˜:uj³÷LšÖ÷>|˜ÿýßÿ¥´´”„„>úè#FŒA×®]γ?ù{æ™gˆ‰‰áOú“GÙÛ"oõNQQ¿þõ¯–üyC§Ó1lØ0þð‡?0uêTÚ·oÏêÕ«éׯ½zõ¢°°Ð£,éééüå/ñÚÞ >œçž{®EœÝ»w§¸¸˜… RQQѬmh•©ÎÊ¿vžF E¥Ö"7f± •ØÑ«HŽÑ²~ÿøÂD¥q?gp8숺2nÒ™ˆ° ðsÔÚŒF#ƒ Âjµ’ŸŸÏùóçÉÈÈà™gž!33I’ˆ‹‹£OŸ>tìØ‘¬¬,Ž=ʉ'6lO>ù$F£‘øøx¯a{÷¸˜k¯½–ãÇÓ¿üq¢¢¢ZÆŒDFFÒµkWt:ßÿ=eeeŒ7މ'’™™éñzÓà eY¦®®Ž:‰Á` <<œÈÈH²²²HII!;;›³gÏRTTÄ­·ÞÊäÉ“ÝKrÀÕÉ &''Ç=Ó‘œœL||Œ±­²’§Æ­¾½Éb0ˆˆˆÀb±Ð¯_?÷ô±ÓéÄjµz¼§[·n$''SPP@yy9£GfÚ´i-.B`0èׯaaa>åÐh4˜L&:uêÄðáÃÝïU4æ),,ŒvíÚa0ˆ‹‹#//'Ÿ|Ò½k\jj*jµšcÇŽÑ©S'}ôQˆ§K—.„††òé§ŸÒ»woî»ï>T*ݺuk¡Ë÷Üsz½ž¨¨(rss‰¥]»v 6ŒAƒ¡V« %''‡¬¬,ÒÓÓÉÏϧ¤¤„‘#GòØc¹âããéÓ§{‰Y\\ÙÙÙ8ZèTFFz½ÞcXff&!!!^Ÿ‰¯ò Ô¦¼é[PPF£‘þýûS\\ÌÉ“'8p 3fÌðxhkzÛšÜ -ñf7©©©tíÚ•šš„dgg3mÚ4Ú·oï>ì°sçÎtíÚÕ=#q½à-ŽøøxõõõdggïN·i}o0HKK#55•êêjœN'C‡eÊ”)-6h+þæ/==ÝÝo»X6_åçt:Öüy£k×®tìØ‘ššdY&77—éÓ§ãQ–Ç{ ƒÁàµÓ»wo @bb¢Ç8gègòî¼óNÆŽ‹Z­ö;ïN§“Êò2 Fw?M’$¬V«uù|QTTTعáãlòwӸ胇oH~\W5ùnt`ÔM¾5M>Z~:\³ñï Xµrå3áááS„v»’ÂS¤tíN×öÓ½Eú²ÂRwüe;RlOtú`¹~Á*úv bßi+UõNT’+TBÂf­G”äÃg¯%©]ÄeufšbµZÝËY|!Ë2v»ÝãiçžÂ,XÀÊ•+ùøã i6ÓÐÖø­V+@‹0o×)ƒ¶ÆÑøî¿Ÿ@Ò¸yΟ?Ïüùó1™LÍôF–ewgºñ·Êæï}m‘¥­÷4Îðù³cY r‚Ýno!Édb×®]<ýôÓîóN..K\—_ ½’ñÒÒR^ýõ+V~­Ù”/}³Ùlÿ1¶¨    ðŸÍfåDÁ$$uF«uµ’$Q]]mwË-svíÚ½0ãrh쀭Éߎ&ŸF'§ñ[4|Óä<86Wý23­ZMh“ÍŠF×8rýS' Ê,³åG3’ä*\Ù=1#a³Y1iÐúqæÆ¥ào£®R©¼þÖS˜Á` 66 UG¦µøÛzýJ•ASÚÚi»Ò§‹å‰ŠŠâ‘Gi±dKAhhh³Îv ²ù{_[dië=þè֥ȞâÙºu+þóŸ6lC‡ ¸,½¡V«ý:ŸçRˆŒŒ¼¢åךMù*£¶Ø£âÈ(((((ü»¸ªÃt îÅò¯O#Ö¿FÔa·R[všs£0†éfk®.ÆϘ1c”-N&´ZíÌ æÈr%äÿ9Ëäúë¯'''‡¨¨(‡:^ ü'锂‚‚‚‚ÂÕÀUëÌH’ä:;E«á¾©Øíù|Up”Z‹g]‚ÔŒêÉ}#RÑk5î8¯&÷^WPPp©8ö ÿ]\µÎ 48*Ií£˜~K/&”WcµÙ[ß¡L½NK|t8‘Æp$?¶CUPPPPPPPPPPøÏâêwfFKtT$‘Æð†¼Ÿ#!AÃû3*•Ú}®ƒâÌ((((((((((\]\ÕÎ àvDT*Õ/!; ~¢ºô(þý(ÎŒ‚‚‚‚‚‚‚‚‚‚ÂUÉ/f]–ÝᤢڂÝéôk­ZMTxZÍ•=7BAAAAAAAAAAáÊð pfç+Í,^ˆÏc¶ú·5sˆ^Í^í˜<¦'qQ¡\}§Ì((((((((((üwsu;3B`s8Y¼þk¾-§Kj:‰Á­š)!Q]]Åûk· œ6ž¾{ :”Í®®ng¨¨®gÇÁstHJCÖ‡c²û^c&!á°[±ž;ÂíC:óý‰*Ê«ëiuùÛ«¯¯ç«¯¾âÀH’DVV¹¹¹söìYŽ;FNNz}ëX[¹Òñ7E–eÊËË©­­%<<œèèèfa.\Àn·éñdöÊÊJôz}³0‡ÃÁ… °ÙlDEEù< 1Ð4Ú’¶Ès9d»\yjDÃá@«Õú­Bjjj°X,?R«×Þl+s»ÝNII ñññ­êZMM õõõÍî—$ ƒÁ€Õje×®]X,wZÉÉÉ$''_.//gÏž=´k׎ììì†]eÿÃ?pöìYrrrˆ‰‰ 8ÖlÃ[X[Ë/,,Œ   ÷µ¶ÚTkúV^^ŽÉdÂ`0ãu+{_ñ8NJKK±Z­DFFqÙŸ©‚Â/ ovão]—Ͼ¡eÝâo;—Ú·híwm­ƒ½µ¹mi‹ý¡i]m4 ÷æ­/HŸÊ“\ÉgûïBjòQ7|´€B`b€x HÒ^@6 8pÀ3çÏ­ª7× s]­0×Õ SU…8¼Ÿ°Z-"dY²ì§ÏVŠS?cþï˜ûFÑOŸÅÍÿÿF‘ûF±¸áÿŽ‹aÓßo.ß,ŽWˆg¯§ÎV Yv Y–’ÅV«Uüáݺu7Þx£9r¤HII³fÍ6›M¬ZµJ :Tœ;wî²¥Ù”+Ó|.X°@üêW¿YYYbРAbùòåB–eáp8ÄÿûÿOää䈾}ûŠ{ï½Wäçç7»¿¤¤DŒ?^¬X±Â}­¶¶VüéOýúõ™™™â¶Ûnð˜¾Ýn(¶ä£-ò\Ù.WžšræÌ1kÖ,QXX(Ö¬Yã—nTWW‹‡~XäææŠÁƒ‹Š™3g ³ÙÜìwo¿ý¶èÓ§Ø¿¿Ïø‡xùå—ENNŽ8p 8p 0`€ÈÉÉëׯ)))"##C 2DôéÓG¤§§‹Ç{Lœ?Þ¯|¶…;vˆøøx1hÐ QZZê¾^^^.†.âââĶmÛŽß—Ny s:•ßš5kÜ¿k«Mµ¦oú’™™)  –.]êQN_ñÔÕÕ‰9sæˆ~ýú‰=zˆë¯¿^|þùç—ý™*(ü’ðd7;vìN§Ó¯º@ˆËgßBx®[üm'ÚÊ¥ö-ZË{[ë`omn[ÛâÖ¨©©/¼ð‚èß¿¿ÈÈÈ£G;vìBø×7 ¤OåIdY555~=[«Õ"ïß'LUî>~½¹Nœ?w¶jàÀÏÃüìÿ ½Á_Hlðbü CƒÔàoh›ø Mý’\Ý»™5L§@ !pØmTžÉÇf©s] °Ûê©;ý5w ˆaҭ׬×!„p´y99zô(Ë–-ã™gžáÃ?dÅŠL™2…÷ߟÇ#Ë2f³Ù•6®Ñ²²2 ©®®nžM/a‹…êêjjkk9uê.\p‡Ùív¿ã¯««ãĉœ>}‹ÅÒêõ¦ìرƒW^y…±cDzxñb222xñÅ9yò$ß|ó sæÌ!//ÿýßÿåüùó¼øâ‹Ô××S__Ï¢E‹xðÁÙ´iõõõî8×®]ËÛo¿ÍÃ?Ìüùó©­­eΜ9Í~ÓÈÞ½{JÃß|œ:uŠõë×û-Ïåírå©)'NœàÃ?¤  €úúúfºáÚÚZöíÛǸqã˜1cO<ñ7ß|3Z­Öý›}ûö1gÎNŸ>Ýn÷ŸJ¥âšk®áw¿û>ú(S¦L!55•ššq8!xöÙgY¹r%kÖ¬áùçŸgݺuÌŸ?Y–ݺ]TTıcÇ(//~a3›ÍîôÌf3ååå!0›Í-tÙáp`±XøñÇùöÛoÝ÷íß¿ŸP__Ãá\££ÅÅÅ9r„ÊÊÊf6h2™0›Írþüy·œ¾lã‹/¾ðvüøñ€Ê¯cÇŽX,–6Û”Ífój§‹…ãÇó‡?ü¾}ûòÞ{ï1hÐ ^ýuJKKýÖw«ÕÊ—_~É¢E‹˜4i¯¿þ:‡ƒ—^z‰šš¿ôWAá¿‘/¾ø¢…Ýüå/¡¦¦†aÆy­KÁU[­V¯vÙû6›Í^ëÚ‰@¤oÑXÿ·–w«ÕÊÎ;ýªƒ½åÝW™\ Ÿ|ò K—.å‘Gáµ×^CÁܹs±X,¬[·Îc=n±XêSY­V¯:PVVvÅží•àª_f&@ Ëà°[°}Kzh%'‹Îâìƒ.( {}–¯¹gH<÷»­VƒS¶\nÆMã0¸:ZáááLš4‰èèh¢¢¢8vì˜ûÀO§ÓÉ;ï¼Ã;#Ùl¦C‡<ùä“ <‡ÃÁ»ï¾ë1lýúõ¼óÎ;„„„püøqôz=O=õcÇŽuÇÝZügΜá÷¿ÿ=@¥R1`Àw¥ðì³Ï6»þÇ?þ±Å’›#GŽÐ½{wzè!ŒF#N§“7rêÔ)vïÞMll,=öÑÑÑTTTðì³ÏRXXHÇŽ©««#11ƒÁÐ,Î/¿ü’Þ½{sÿý÷£Õj)))áü#%%%¤¦¦6ûí–-[Jãb¼åãØ±c|õÕW~Ës9d»\yj¤²²’7ÞxƒââbæÎ˰aÃP«[ßÅïÂ… Ȳ̈#hß¾=ÍÒ,//çå—_¦k×®­:FàZ‘››Knn.§OŸæí·ßæé§Ÿ&33“ï¾û•JEdd¤{ºâĉüøã¬\¹’)S¦`0˜3g7nÄápÎÌ™36lO?ý4éééÌœ9€ püøq¦OŸÎœ9sØ¿¿[—ÿô§?!I‘‘‘DFF²eËF…$IlÙ²…¤¤$·£d³Ùxíµ×øè£°ÛíÄÆÆòÌ3Ï0|øp¶oß΢E‹ˆˆˆ ??Y–™>}:÷ÜsW*,,äèÑ£ÃNŸ>MZZZ›Ë¯wïÞÔÖÖ¶Ù¦Š‹‹Ùºu«G}+**bçΨT*zè!¢££y衇¸öÚk=.§ð¦·gΜáìÙ³èt:†N×®]Ù´i»wïÆéôoÃ…ÿFJJJ<Ú‚œœrrr€æuAvv6‹…^xØØXêëëi×®Ý%Ù·,Ë^ë–ÖÚ‰@ ¤oqæÌ’““[Íû™3gü®ƒ½åÝW™\ UUUÜ|óÍÜÿý¨ÕjvïÞ͆ 0›Í>ûFñññm®ÿÏ;ÇŽ;<ê@hh('Ož¼"ÏöJpuÏÌ€{FE–Á)@®.æÖ¾á¼:s"\Ûká×ÔV–R_ø5÷]ÓžûÇ]ƒN«Áî„-‡ÍT×;¯È>fݺucðàÁÌž=›±cÇ2sæL¶mÛÆÍ7ßLbb¢»ó§R©øâ‹/xõÕW™8q"o½õqqq<÷ÜsTTTx «¬¬¤¬¬Œ-[¶žžÎ›o¾IÏž=yñÅ)..v¯gôee%«W¯fïÞ½¼ñÆÌ›7‚‚öîÝËš5kZ\ÿúë¯[äó¶ÛncÑ¢EFêêêXµj¡¡¡ÄÇÇsâÄ ºtéâ^šŠ‚’’BBBxòÉ'ùóŸÿLlll³Î°^¯§¬¬Ì=ÊR^^NUUU³™'×3—9yòd@iø›Î;£Óéü’§)‡# Ù½ÏÜ{ï½´oßžßüæ7$%%¹g|QTTDaa!>ú(7Þx#cÇŽeãÆ€k¦bÁ‚8N}ôÑ6ÔØív^yå"""?~|³°‹óÔ·o_êêê(++ãðáÃlÞ¼™ßÿþ÷|øá‡ÄÆÆò÷¿ÿ•JE‡XµjnÝNJJbË–-ìÙ³§….K’DHH#FŒ`÷îÝ”••QQQÁW_}å®ÌU*ëׯ筷Þbúôé,]º”N:ñÜsÏQVV†ÉdbûöíDGG³páB222X¸p!•••Ü~ûíuªC‡Œ?ÞcXRRRÀåÖ&›2™L”””xÕ·ââbŽ;†ÙlföìÙŒ3†ßþö·8Î š/[,..fèÐ¡ÄÆÆòë_ÿš &°lÙ2ƇÑhl“Þ((ü71dÈVíÆS] R©HKK£}ûöœýôS÷‹UG%>>žuëÖQPPÀ¶mÛZ„­]»–#GŽ I©©©<òÈ#$$$0eÊn½õVòóó[íÚµAuu5|ðÇçþçèÖ­çÎkq½K—.lذíÛ·0räHFŽ À®]»˜7o‡böìÙ¤¤¤`6› sÏèt:À5Ò݈§ //5kÖ0cÆ âããY½z5N§I’Ø´iÛ¶màšk®Áf³Òæ4Ö¯_ÏçŸî3³fÍ"--Q£F±jÕ*òxÕGYÆb±´9ÿÞç •JErr2!!!téÒ…S§NùuŸV«eøðáÜ~ûítìØ‘yóæñì³ÏÒ«W/8À† ˜7oz½§ÓÙ¦Qö}ûö±}ûvþú׿¶º™‚^¯G’$ìv;iii¼ôÒK˜Íf¶nÝJii)z½Y–3f Ë–-so¸qáÂòòò8xð` ]îÚµ+ß|ó ²,3dȶmÛÆ7ß|CHHÕÕÕ\sÍ5lذ»ÝÎÖ­[éß¿?wÜq†É“'s×]wQPP€$I$&&2}út:uêD^^ûöí£¾¾ž„„:•ššŠJ¥"&&¦EX—.].¹üÚbSB¬Vk ’$‰úúzêêê(,,dâĉ<þøãüóŸÿdÖ¬Yôèу£GòÙgŸ¾mÑn·S]]ÃáÀ`0Jhh(ÇŽ£®®ŽÐÐP¿õFAá¿ ìÆS] Óéx衇°Z­lܸ±E{Òš}wïÞÝã ±§ºÅ[;ѳgO¿g<Ñ®]; m} «ÕŠZ­ö™÷ÆßEGGíwì­Í½\NL#ϵªªŠ“'Ob±X8wî6›1cÆxíù’Ç[ý/Ë2µµµu W¯^èõú+òl¯¿gF ×»3ù¥‚­VnÌÔ Q«™7œ^)$wŒC«Ñàhpd–쮦Î*_±öìÙCaa!·ÝvwÜqÕÕÕ|ùå—üö·¿eãÆtèÐpÄWVVb2™Øºu+Z­Y–5jÁÁÁTTTx 3 !ˆŽŽ&88€ÈÈH‚‚‚šuz}Ÿqã°Z­lÚ´‰çž{½^ÏK/½Äøñã±Ûí-®———sôèQúõë‡ÓéäÍ7ßdÑ¢EäääðÞ{ï‘‚ˆˆªªªp8èt:L&“[N_ 2„×^{M›6QSSÃu×]Ç'Ÿ|Btt4îôûôéƒÑh¤¼¼¼Íi\¸pÁ¯|´&7´Zm@ùô¾Öe!„ûÛú÷ïOŸ>}ˆŠŠ`Ú´iÜ}÷Ýìß¿Ÿwß}—²²2Þyç.\¸ÀÙ³g™;w.?þ8 ð¯ÓédéÒ¥¤¤¤xüíÅ6yðàAôz=ñññäççóòË/#„ -- N‡Z­F–ezöìIjj*›7oF’$ÒÒÒHOO'55µ…Ž¿üò˨T*„$%%‘™™É¦M› ¢{÷îtîÜ!v»ŠŠ Ðh\Õepp0*•ʽŒ4<<ÜmƒpÙÞßþö7:e³ÙX¼x±Ç°Öh­ü<áI‡7oÞL\\áááTTT´Ð·˜˜‚‚‚ÈÈÈàw¿ûF£‘ÐÐP>ûì3Ž9BEEE«¶(Iááá,[¶Œàà`–,YB||<+V¬à©§žâþûï÷; ÿm,_¾Ü§Ý´Vèõz¯í‰/û>zô¨×å®㩸뮻8~üø%ux½Õ‘þö-|å=22Òg›ÿsát:ùþûï1Œ3†‘#GòÑG1{öl&MšÄСCÛÜï}˜víÚìQòóó:t(½{÷¾ìÏöJpõ/3ƒŸ^òPYçä­/L¬ý¡§,Ðé´tKMD¯Ó⫾¯å½]ÕÔY^Œ¿BoÍS¦LaþüùôîÝÛ=Rн{w:DQQ»wï&<<¼U#X¿~=‡æ•W^á¯ý+ÁÁÁ¤¤¤ÇÝwßíNÿÎ;ï$=== 4&NœèW>Z“ÇæÿRÊ­5„î÷¨üùí’%Kxýõ×±Z­n]S©TÄÆÆ2aÂ&OžL§Nhß¾=:ޏ¸8¿¶¬n\§›——çqT¾q#›ÍÆ?üÀ|À°aÈ‹‹cåÊ•TVVòüƒyóæÑ£G·¾………1zôhÖ­[Ǻuë=z4¡¡¡u|Íš5nÇ.((ˆë¯¿žM›6±fÍ®»î:BBBB ÓéHHH ??ŸÚÚZÀµAà¶3Oå©V«Ù¹s§Wòæ£ÙZùy“'''“˜˜H·nÝZè›Á` sçΤ¤¤¸79׋µ£Ñè·-&&&b2™vëGtt4jµú²j*(üRe¹U»ñV!¨ªªÂl6{lOü±op-Gò¶ùOc:žÚ µZ}Iƒoཎô§ô•÷ððp’““Ù±c‡×:Øét¶š÷+Aãòí¹sçât:ÑjµF÷»Ï6lhs_¼÷aÚ·oOrrr hT½RÏöJð˘™Yv-5C€©^æ;M7÷E­’pÈ‚ÕßÕòö—&ꬮˆ,sÙw1kdĈ,Y²„Gy„¼¼ÿüsJKKÙ¹s'{öìA–eBBB˜:u*7Ýt|ð=ö¬\¹’ûï¿ßíˆ5Ò8ÝÙˆ$Iî÷Ôj5«W¯æùçŸwWèM_^¿á†JC£Ñ¸GÚ}åcÚ´i¨ÕjŸòx#PÙ½Ïááá8Nþö·¿Ñ«W¯V—„I’Dll,sçÎ¥¬¬Œ„„V¬XÁˆ#ÈÈÈp¿x .'úÓO?eÒ¤IôêÕ«UYöïßOuuµÇ‘Äšš^}õUV¬XA]]?þø#111L:Õý^ÌùóçY¼x1µµµlÙ²‡ÃÁ¾}û:t(×]w¯¾ú*ƽt°¢¢‚… 6Óñž={"I‡Y–4h²,cµZ2d²,ãp8P©TÜrË-Lž<™3fššÊ¿þõ/òòòèÒ¥ ß~ûm³Á Y–Ý âöíÛ½ÚÆŽ;<†M™2…=z\~ÞtÛM3fÌ–/_ÞBßbbb5jK—.eÚ´iäææ²qãF @FF*•ªÙyÞô6!!믿ž'žx‚ÇœÄÄD6nÜHVVÝ»w÷KþÛP©TŒ=š'žx‚éÓ§{´ouÅbaÖ¬Y´k׎‰'ºí²W¯^¬Zµª…}O:•ÜÜ\6mÚÄ€ÈÊÊ¢°°I“&1uêTn¾ùfwÜMë–¦íDii) |ôÑGŒ1‚®]»^Rþýí[4ÍS\\õõõ>óþÀËgŸ}æ5þÐÐP|ðAŸyoJ[Úb_èt:† Æþð¦NJûöíY½z5ýúõ£{÷î³páB***|öE¼ÕÿßÄèÑ£yÿý÷›é@nn.ÙÙÙ”””ðòË/_ög{%𶥑äáï¦{<«š|7ý¨=|´;&&N˜0a°^¯w·|²ì¤ÆTEdL,juà>•©ÎÊ¿vžF E¥Ö"7f± •ØÑ«HŽÑ²~ÿøÂD¥q?gp8숺2nÒ™ˆ° ðsÔÚŒF#ƒ Âjµ’ŸŸÏùóçÉÈÈà™gž!33I’ˆ‹‹£OŸ>tìØ‘¬¬,Ž=ʉ'6lO>ù$F£‘øøx¯a{÷¸˜k¯½–ãÇÓ¿üq¢¢¢ZÆŒDFFÒµkWt:ßÿ=eeeŒ7މ'’™™éñzÓà wóèС‘‘‘ ÂÃÉŒŒ$++‹””²³³9{ö,EEEÜzë­Lž<Ù½$\FLNNŽ{t!99™øøx~øáL&¿ùÍo¸å–[<îÀPMi-}ûö%..®…<*• ³ÙŒÍfkñ‘eÙ}c[e $O[}{“Å`0Åb¡_¿~¤§§»G¢¬V«Ç{ºuëFrr2”——3zôh¦M›Öâ°C!ƒ~ýúæSFƒÉd¢S§N >ܽ†¹1Oaaa´k׃Á@\\yyy<ùä“î]ãRSSQ«Õ;vŒN:ñè£F||<]ºt!44”O?ý”Þ½{sß}÷¡R©èÖ­[ ]¾çž{ÐëõDEE‘››Kll,íÚµcذa 4µZMhh(999dee‘žžN~~>%%%Œ9’Ç{Ì= OŸ>}ÜKÌâââÈÎÎÆápÐB§222ÐëõÃ233 ñúL|•_ 6åMß‚‚‚0ôïߟââbNž<ÉÀ™1c†ÇƒD}Å“ššJZZGŽ¡¨¨ˆ0sæLÚ·oYê[…_"©©©tíÚ•šš„dgg3mÚ4·Ýøª jjjèÔ©ƒ ";;Ûýò÷˜1cxðÁ›Ùw]]‹Ått4‡ƒúúz²³³‰<×-iii¤¦¦R]]ÓédèСL™2å’6÷ð§oÑ»woyj-ï<ðz½Þkü½{÷&""³ÙÜjÞ}]”®]»Ò±cGjjje™ÜÜ\¦OŸNLLŒ{6½ªª •JÅwÞÉØ±c›õ¼ÕÿÞîó¥þ>[§ÓIey†£[I’°Z­Öå|ðE‘kjÌÈ g“¿›~ÄE<|{Dò㺪Éw££nò­iòÑòÓᚇ 8`Àª•+Ÿ hœµÛm”ž"¥ktº¶Ÿî-Ö•–š¸ã/Û‘b{¢ÓÓ¸xÌõˆVÑ·SûN[©ªw¢’\¡6k=¢ì >{-Ií".«3Ó«Õê^Îâ Y–±ÛíO;÷¶`ÁV®\ÉÇLHHH³™†¶Æß8xq˜·ë”A[ãh|÷ÇS‡ír¥q)òœ?žùóç»ß hD–ewgºé ‡Èæï}m‘¥­÷4Îðù³cY r‚Ýno!Édb×®]<ýôÓî³..K\—79¸ò{£´´”×_ýŠ•_k6åKßl6Û%Û¢ÃáÀáp´Z*((((\ØlVNüHBRg´ZW!IÕÕÕ¦q·Ü2g׮ݻ3.‡ÆØšüíhòitr¿EÃ7M¾ÁƒcsÕ/3ÓªÕ„©1Ù¬ht#×?uªÌ2[~4#I®Â•Ý36›c­gn\ þvžT*•×ßz 3 ÄÆÆ´êÈ´[¯_©2hJ[;mWÒ‘ñ$OTT<òH‹%[BBCC›u¶•ÍßûÚ"K[ïñG·.EŽ@ðÏÖ­[ùóŸÿ̰aÃ:thÀeé µZí×ù<—Bddä-¿ÖlÊWµÅ½ÅsñòN…KåªnU` Ó1¸{Ë¿>4Zÿ:,»•Ú²Óܘ…1L×0[su1~üxÆŒã×K× —­Vë>mùç&Y®„ü?g™\ýõäääåñPÇ«ÿ$RPPPPP¸¸jI’\g§h5Ü7"»=Ÿ¯ ŽRkñï¬ CšQ}"¹oD*z­ÆçÕDã¾ó ®CÌÇ^AAAAAá¿‹«Ö™çC¥"©}ÓoéÅ„òj¬6{ë;”I ×i‰'ÒޤR]uŽŒ‚‚‚‚‚‚‚‚‚Â;W¿3h4Z¢£"‰4†7l àýü ÞŸQ©Ô¨Å™QPPPPPPPPP¸º¸ªÀ툨Tª_BvüDuéQ((((((((((((üûQœ…«’_̺,»ÃIEµ»Óé×Zµš¨ð ´š+{n„‚‚‚‚‚‚‚‚‚‚•áàÌÎWšY¼þ;žÇlõok潚!½Ú1yLOâ¢B¹úN™QPPPPPPPPPøïæêvf„Àæp²xý!Ö|[N—Ôtƒ[?4SB¢ººŠ÷×nA8m<}÷@t5(;š)(((((((((\5\ÝÎ PQ]ÏŽƒç蔆¬Çd÷½ÆLBÂa·b=w„Û‡tæûU”W×Ó>êò¶W__ÏW_}Å$‰¬¬,rss æìÙ³;vŒœœôúÖ°¶r¥ãoŠ,Ë”——S[[Kxx8ÑÑÑÍÂ.\¸€Ýn'22ÒãÉì•••èõúfa‡ƒ .`³ÙˆŠŠòyb i´%m‘çrÈv¹òÔˆ‡ÃV«õ[7„ÔÔÔ`±X~:¤V¯'<<¼ÙVæv»’’âãã[Õµššêëë›Ý/Iƒ«ÕÊ®]»°X,î´’““INN¾":\^^Ξ={h×®ÙÙÙ ;"ºÊþ‡~àìÙ³äääp­Ù†·°¶–_XXAAAîkmµ©Öô­¼¼“É„Á` &&ÆëVö¾â Ô†ÚÖNø[OøŠÀétRZZŠÕj%22’ˆˆ²µV—ù[xŠ·µv°µßù[϶‡?r\n<µ­¾ž‰?yõ¦GWâùý' 5ù¨>Z@¡€01@<$é@/ Ȇ 8à™óçÎV՛넹®V˜ëj…©ªBÞ¿OX­², YvŠÓg+ÅÀ©‹1ÿwLŒ}£è§Ï‚âæÿ£HŒ}£XÜðÇŰéï‹7—oÇ‹+ij׈Sg+…,;…,ËÉâ «Õ*þð‡?ˆnݺ‰o¼QŒ9R¤¤¤ˆY³f ›Í&V­Z%†*Î;wÙÒlÊ•Ž¿i>,X ~õ«_‰¬¬,1hÐ ±|ùr!˲p8âÿý¿ÿ'rrrDß¾}Ž÷Þ+òóó›Ý_RR"Æ/V¬Xá¾V[[+þô§?‰~ýú‰ÌÌLqÛm·‰xLßn·”F[òÑy.‡l—+OM9s挘5k–(,,kÖ¬ñK7ª««ÅÃ?,rssÅàÁƒÅÀÅÌ™3…Ùlnö»·ß~[ôéÓGìß¿ßg|‡C¼üòË"''G 8P 8P 0@äääˆõë׋ƒŠ””‘‘‘!† "úôé#ÒÓÓÅc=&Ο?ïW>ÛÂŽ;D||¼4h(--u_///ÇqqqbÛ¶mÇïK§¼…9΀ÊoÍš5îßµÕ¦ZÓ·F}ÉÌÌ K—.õ(§¯xµ!…¶µ²,ûUOøŠC!êêêÄœ9sD¿~ýD=Äõ×_/>ÿüó²µV—ù[\Œ?í`k¿ó·žõ‡¿r\ .n[}=òêI.Çó³Z-âðþ}ÂTUáîã×›ëÄùsg«ð 0¬ÁÈnðÒü…Äÿ!¦ÁŸ04øA þ†¶‰ÒÔ/iÁÕ½›YÃ$Œàp  ‡ÝFå™|l–:×5 »­žºÓ_s×€&Ýz-ÁzB÷A›—“£G²lÙ2žyæ>üðCV¬XÁ”)Sxÿý÷9|ø0²,c6›]iã/++£°°êêêæÙôf±X¨®®¦¶¶–S§NqáÂw˜Ýn÷;þºº:Nœ8ÁéÓ§±X,­^oÊŽ;xå•W;v,‹/&##ƒ_|‘“'OòÍ7ß0gÎòòòøßÿý_Ο?Ï‹/¾H}}=õõõ,Z´ˆ|M›6Q__ïŽsíÚµ¼ýöÛ<üðÃÌŸ?ŸÚÚZæÌ™Óì7ìÝ»7 4üÍÇ©S§X¿~½ßò\Ù.WžšrâÄ >üðC ¨¯¯o¦Þ¨­­eß¾}Œ7Ž3fðÄOpóÍ7£ÕjݿٷosæÌáôéÓØívŸñ©T*®¹æ~÷»ßñè£2eÊRSS©©©!11‡Ã‚gŸ}–•+W²fÍžþyÖ­[Çüùó‘eÙ­ÛEEE;vŒòòrà§‘%³ÙìNÏl6S^^޳ÙÜB—‹…ü‘o¿ýÖ}ßþýû9pàõõõ8À5V\\Ì‘#G¨¬¬lfƒ&“ ³ÙLaa!çÏŸwËéË6¾øâ aǨü:vìˆÅbi³MÙl6¯vj±X8~ü8øÃèÛ·/ï½÷ƒ âõ×_§´´Ôo}·Ùlm²if³¹Íí„Ùlfذa^ëYpÕíV«ÕkV«•/¿ü’E‹1iÒ$^ýu/½ô555ÍdôUÏ8qÂïúãb|åÏß<ìܹӯzÖWÞêǦmÍ•ÀSÛúÅ_x|&f³Ùk^Oœ8á³m¸RÏïßÍU¿ÌL €,@–Áa·`)ú–ôÐJNÅÙ!]Pöú:,…_sÏxîw Z­§l¹Ü>Œ›Æi^pu´ÂÃÙ4iÑÑÑDEEqìØ1÷ŸN§“wÞy‡wÞy³ÙL‡xòÉ'|8Û·ogÑ¢EDDDŸŸ,ËLŸ>{î¹Ç«NrôèQa§OŸ&--­Íå×»wojkkÛlSÅÅÅlݺգ¾±sçNT*=ôÑÑÑ<ôÐC\{íµ—YxÓÛ'N°k×®€lHAá¿Y–ÛÜNœ9s†œœrrr€æõDvv6‹…^xØØXêëëi×®Ç8Ξ=‹N§cøðátíÚ•M›6±{÷nœÎæ›,ùªçNŸ>íwýq1¾ò—œœìWü­g}µ¹ÞêÇÂÂBºuëvEž»·¶µ¤¤Äã3‘eÙg_¬C‡^õèJ=¿7W÷Ì ¸gTdœäêbníΫ3'òÀµ±~Mme)õ…_sß5í¹Ü5è´ìNØrØLu½óŠìcÖ­[7ÌìÙ³;v,3gÎdÛ¶mÜ|óÍ$&&ºT¥RñÅ_ðꫯ2qâDÞzë-âââxî¹ç¨¨¨ðVYYIYY[¶l!==7ß|“ž={òâ‹/R\\ì^Óè+þÊÊJV¯^ÍÞ½{yã7˜7oìÝ»—5kÖ´¸þõ×_·Èçm·ÝÆ¢E‹0ÔÕÕ±jÕ*BCC‰çĉtéÒ…ððpRSSBPRRBHHO>ù$þóŸ‰mf°z½ž²²2÷ÈGyy9UUUÍfž\Ï\æäÉ“¥áo>:wîŒN§óKž¦8Ž€d ô>_DDDpï½÷Ò¾}{~ó›ß””äž=ðEQQ………<úè£ÜxãŒ;–7®™Š àt:yôÑG›ÍÖøƒÝnç•W^!""‚ñãÇ7 »8O}ûö¥®®Ž²²2>ÌæÍ›ùýïχ~Hll,ÿûßQ©TtèÐU«VQQQáÖí¤¤$¶lÙž={Zè²$I„„„0bÄvïÞMYY|õÕW\{íµ„††¢R©X¿~=o½õÓ§OgéÒ¥têÔ‰çž{޲²2L&Û·o'::š… ’‘‘ÁÂ… ©¬¬äöÛo÷¨S:t`üøñÃ’’’.¿°°°6Ù”Éd¢¤¤Ä«¾sìØ1Ìf3³gÏf̘1üö·¿Åét¶h}Ùâ¹sç j³ )(ü·ãͦ}µgÏžuß艹P©T¤¥¥Ñ¾}{NžýôS÷ ÏG%>>žuëÖQPPÀ¶mÛZ„­]»–#GŽ I©©©<òÈ#$$$0eÊn½õVòóó[íÚµAuu5|ðÇçþçèÖ­çÎkq½K—.lذíÛ·0räHFŽ À®]»˜7o‡böìÙ¤¤¤`6› sÏèt:À5Ò݈§Îx^^kÖ¬aÆŒÄÇdzzõjœN'’$±iÓ&¶mÛÀ5×\ƒÍf#$$¤Íi¬_¿žÏ?ÿÜg>fÍšEZZ£FbÕªUåñª²ŒÅbisþ½Ï*•ŠäädBBBèÒ¥ §Nòë>­VËðáùýöÛ騱#óæÍãÙgŸ¥W¯^8p€ 60oÞ<ôz=N§³Åˆ/öíÛÇöíÛùë_ÿÚê‹àz½I’°Ûí¤¥¥¹§Õ·nÝJii)z½Y–3f Ë–-so¸qáÂòòò8xð` ]îÚµ+ß|ó ²,3dȶmÛÆ7ß|CHHÕÕÕ\sÍ5lذ»ÝÎÖ­[éß¿?wÜq†É“'s×]wQPP€$I$&&2}út:uêD^^ûöí£¾¾ž„„:•ššŠJ¥"&&¦EX—.].¹üÚbSB¬Vk ’$‰úúzêêê(,,dâĉ<þøãüóŸÿdÖ¬Yôèу£GòÙgŸ¾mÑáp——ÇÊ•+ÛdC .m'<Õ:އz«ÕÊÆ=Æa·Û©®®Æáp`0 %44”cÇŽQWWGhh¨;víÚ-ûÉÉÉÔÔÔx¬?ºwïîuºµüY­VÔju«y°Z­DGGí³žõ•–ÅbÁb±´ÚǸœlܸÑkÛêë™xzçÕSÛp%žßÏÁ/Ä™ÈÂõîL~©`k•35hÔj&ä $§W ÉãÐj48™%»«©³ÊW¬1ݳg………ÜvÛmÜqÇTWWóå—_òÛßþ–7Ò¡CÀÕÐWVVb2™Øºu+Z­Y–5jÁÁÁTTTx 3 !ˆŽŽ&88€ÈÈH‚‚‚𙝸CBB7nV«•M›6ñÜsÏ¡×ëy饗?~}0”——·9 .ø•Öäñ†V« (ÿÞײ,#„pûCÿþýéÓ§QQQL›6»ï¾›ýû÷óî»ïRVVÆ;ï¼Ã… 8{ö,sçÎåñÇgÀ€>ãu:,]º”””¿½Ø&<ˆ^¯'>>žüü|^~ùe„¤¥¥¡ÓéP«ÕȲLÏž=IMMeóæÍH’DZZéé餦¦¶Ðñ—_~•J…‚¤¤$233Ù´iAAAtïÞÎ;#„Àn·SQQABB«º F¥R¹—‘†‡‡»m°Ñ—íýíoó¨S6›Å‹{ kÖÊÏžtxóæÍÄÅÅNEEE }‹‰‰!((ˆŒŒ ~÷»ßa4 å³Ï>ãÈ‘#TTTøe‹áááôéÓ§Í6¤  àÚ‰Öê ½^ï1I’gÙ²e³dÉâããY±bO=õ÷ß³ø|ÕeÁÁÁë£Gúì ûÛzËCãï|µëþ¤ëµ~¼”öØõõõ¼ýöÛÛÖ'žx‚U«Vy|&<ðýúõk5¯ž¸Ïïçàê_f?½ä/ ²ÎÉ[_˜XûCNY Óié–šˆ^§Å! V}_Ë{»ª©³6¼…Þš9xð O?ý4ßÿ=àjÐ{õê…Á`p¿T .Cjß¾=F£‘^xÅ‹3yòdâââèСñññ-ÂâããÝÞtqq±ûe¬C‡a·ÛIJJrwX½ÅOLL k×®%,,Œ÷ߟ?þ˜   V­ZÅêÕ«1 Í®¯Y³Æ=µ¹lÙ2n¿ýv¶oßÎüùó™2e óçϧwïÞî×îÝ»sèÐ!ŠŠŠØ½{7ááá­.¥Y¿~=‡æ•W^á¯ý+ÁÁÁ¤¤¤ÇÝwßíNÿÎ;ï$=== 4&NœèW>Z“ÇæÿRÊ­5„î÷¨üùí’%Kxýõ×±Z­n]S©TÄÆÆ2aÂ&OžL§Nhß¾=:ޏ¸8¿¶Û=wî;vì //¯Ù_#Øl6~øá>øà† F\\+W®¤²²’üãÌ›7=z¸õ-,,ŒÑ£G³nÝ:Ö­[ÇèÑ£ õ¨ãkÖ¬q;vAAA\ýõlÚ´‰5kÖpÝuׂNGBBùùùÔÖÖ® ·y*OµZÍÎ;½ê”·0ÍÖÊÏžt899™ÄÄDºuëÖBß ;w&%%ŽÉ¸^ºÕh4F¿m1999 RPPðŒ?í„·zBAUUf³Ùk‰‰‰˜L&‚ƒƒÝuztt4jµÚ]G•——c·Û}Ös¾êKÍ_kyHNNfÇŽ^ëY§Óé|éÑ£‡Ç:055õŠµÇžP«ÕÜu×]ÛÖàà`¯ÏD’¤€Û”+ñü~~33B Ë®¥f0ÕËüc§ !àæÞ¡¨UY°ú»ZÞþÒDÕÕ‘e.û.fŒ1‚%K–ðÈ#——‡N§cÇŽ1|øp ܶ›o¾™?þ˜^xÌÌLV­ZEçΠ㦛nò&I%%%Ìœ9“œœV¯^ÍàÁƒIKKãðáÃ>ãONNÆh4RQQÁ‚ 8}ú4àšÆÌÊÊÂd21þ|÷’¤êêjzöì‰V«m¶†óóÏ?§´´”;w²gÏdY&$$„©S§rÓM7ñÁðØc‘‘‘ÁÊ•+¹ÿþûÝŽX#N§³Ù;’$¹ß;P«Õ¬^½šçŸÞmÀM_^¿á†JC£Ñ¸GÚ}åcÚ´i¨ÕjŸòx#PÙ½Ïááá8Nþö·¿Ñ«W¯V—„I’Dll,sçÎ¥¬¬Œ„„V¬XÁˆ#ÈÈÈp¿\ .'úÓO?eÒ¤IôêÕ«UYöïßOuuµÇÑšš^}õUV¬XA]]?þø#111L:Õý^ÌùóçY¼x1µµµlÙ²‡ÃÁ¾}û:t(×]w¯¾ú*ƽt°¢¢‚… 6Óñž={"I‡Y–4h²,cµZ2d²,ãp8P©TÜrË-Lž<™3fššÊ¿þõ/òòòèÒ¥ ß~ûm³Á Y–Ý ÈöíÛ½ÚÆŽ;<†M™2…=z\~ÞtÛM3fÌ–/_ÞBßbbb5jK—.eÚ´iäææ²qãF @FF*•ªÙ™Þô¶qv 6¤  àÂW;Ñ«W/V­ZÕ¬ðVOX,fÍšE»ví˜8q¢Ç8¸þúëyâ‰'˜>}:‰‰‰lܸ‘¬¬,zöìIaa!“&Mbúôé|ûí·^ë¹Æ¥¿S§N%77—M›6¹ëÖ𖿸¸8êëë}æá 66–Ï>ûÌ«l¡¡¡<øàƒLŸ>›nºÉ]6M+66–¼¼<–-[浜/':®Ù;¤MÛÖÌÌL¯Ï¤[·n¼úê«~µ)둯>Ü¥<¿7Þ¶4’<üÝtgU“例‡¶cÇÄÄ & Öëõî–O–Ô˜ªˆŒ‰E­ܧ2ÕYù×ÎÓH¡±¨ÔZäÁ,vÁ¡!zÉ1ZÖï¯ã_˜¨±4îç ‡QWÆíC:~ŽZûƒÑhdРAX­Vòóó9þ<<óÌ3dff"IqqqôéÓ‡Ž;’••ÅÑ£G9qâÆ ãÉ'ŸÄh4ï5lïÞ½síµ×rüøqú÷ïÏã?NTTT«ñϘ1ƒÈÈHºvíŠN§ãûï¿§¬¬ŒqãÆ1qâD233=^ozxaãN+:t 22ƒÁ@xx8‘‘‘dee‘’’Bvv6gÏž¥¨¨ˆ[o½•É“'»—䀫“LNNŽ{”699™øøx~øáL&¿ùÍo¸å–[<îÀPMi-}ûö%..®…<*• ³ÙŒÍfkñ‘eÙ}c[e $O[}{“Å`0Åb¡_¿~¤§§»G`¬V«Ç{ºuëFrr2”——3zôh¦M›Öâà4!ƒ~ýúæSFƒÉd¢S§N >ܽþ¸1Oaaa´k׃Á@\\yyy<ùä“î2SSSQ«Õ;vŒN:ñè£F||<]ºt!44”O?ý”Þ½{sß}÷¡R©èÖ­[ ]¾çž{ÐëõDEE‘››Kll,íÚµcذa 4µZMhh(999dee‘žžN~~>%%%Œ9’Ç{Ì= OŸ>}ÜKÌâââÈÎÎÆápÐB§222ÐëõÃ233 ñúL|•_ 6åMß‚‚‚0ôïߟââbNž<ÉÀ™1c†ÇƒD}ÅÓ›VPPhŽ·v¢wïÞîM5ÆŒÃ>èn'|Õ555têÔ‰Aƒ‘Ý"Ž   RSSéÚµ+555!ÈÎÎfÚ´iÄÇÇãp8¨¯¯'33ƒÁà±.ËÊÊ"99™þýûSWW‡ÅbqÇáÏAÄÞò×8€â+<ðz½Þk»Þ»wo"""0›ÍôîÝ›nݺyM«µr¾’4m[gŠ.~&Ó§O'..ŽÚÚZ¯ym\*î©ßà«ïãïós:T–—aˆ0ºëtI’°Z­Öå|ðE‘kZËÈ g“¿›~ÄE<|{¶?®«š|7:0ê&ßš&-?®ÙøwÈÀ¬Z¹ò™ðððˆÆ)/»ÝFIá)Rºö@§kûéÞ¢a]Ya©‰;þ²)¶':}0‹Ç\¿ˆ`};±ï´•ªz'*É*!a³Ö#Êòá³×’Ô.â²:3M±Z­îå,¾e»Ýîñ´sOa ,`åÊ•|üñÇ„„„4›ihküK‰.óv=2hkïþxê°]®4.EžóçÏ3þ|÷:ãFdYvw¦›¾ŒˆlþÞ×YÚzOã Ÿ?;–"G Øíöò˜L&víÚÅÓO?í>àⲄÀu¹ñEÌË!¿7JKKyýõׯXùµfS¾ôÍf³]²-¶Õ¦þ³±Ù¬œ(ø‘„¤Îhµ®º]’$ª««Mãn¹eή]»wf\°5ùÛÑäÓèä4~‹†oš|ƒÇæª_f¦U« Rc²YÑè=åŸ:Uf™-?š‘$WáÊî‰ ›ÍŠ1Hƒö úÛyR©T^ë)Ì`0 Ъ#ÓZüm½~¥Ê )míð\IGÆ“@[ê‹ãõ7}¯õ—€P½D‡H-!:‰óÕNJ«wÞºý‘ËúÜ=´­!:‰¤(-!z‰ó&'çL®ü´¹½©tàÑ>t¥Æ"£QöüþÝ\µÎŒëÝ2BÈXe5{Eoœþh†„ÃVO]á×LèkrùdÞ>l²ìŠ .ËìŒ A*¦ˆ¤_rÇKíèÔy½BÌœ ôì ãAì+´`¶:AúÉûõ52ÚlôÅýÏOžµª!ž^tÜïgüM=so£;ÞFä Á*&‰`HZ°kDC‚5?Ôòþî4*øõ†wÁ)C•Ùɛ۫øæ´ WÅÑ¥–§ó¢Yõ]-«¾«E%A¬AÍï†Éê¨G¨¶È¼¹½ŠÝ',Í Hàªd~=¸mi\< ßZ>ƒULñC.ƒl*ÕåÉÓź“¥åAá¼óU5]ãu<8¸¹n´´/W™<{C4£48œ RÁÁb+¯lª¤Öêj45j˜c ¯W(/®-ç»B«×Ž¿F-q߯šìÖE•ärÞü¼Š3~;̈Ù&cª— ÑI„©8rÎÆü­Uœ(³»ÌÏ#L¨5ê¯Jj©Ë²€.qZ¦ ¤¼Îɉ²R +H@ŒAͣ׉ÐPQw3w§éÉÓ÷¥SzÄä¡-Ö}]ƒÍáy@ÆWù-ÞQŪïêЪÛfS»Ž[ÕIžíô”nïg`|_ƒÛ±Y÷CïíªvwVš¨N+((x¦­6µ¿ÈÖj=ÑXIÒ¥Ù¬¯¶sÙîœB´©þ I¼­¥ßX§‡zùÝÞSVâÂÕLn$#Ñ5Xm± ÞýÊÄ'‡Ì-º‡—Ú¹Ü\ܶî;m%:LÅ£×FÒ¯³ «C毪Ùx ®ííÍ÷µ¬ø¶Ö«®ü¿U¬û¡. ç÷spÕ:3û‘@pÈ÷H8íVjΟ$4&mP˜{žÎa«Ç|zw ŒáÁ[‡QQçt9E 1].ÅÒâ´ôíÄ;_V³æûZ4j‰;ú…qGÿpÒãµ ~Úø@:µD‡H † ¥Õ.Ï¿Á_C§i&Ë®J$DçêÝ%Dj0ÕËœ)·ã’ä_üíÂÕ$EiqÈ‚Óåv*Í®Žª·ëÈ2 I &/#”å{jØs²ž[ú¸­¯=',ÄÔܘÆšjùö”…E0y¨‘£+ÊpÊðë!á H &)J‹N ¡®ïérúþ¾ÓÄér;“‡sÿ¯"8\bÃT/7[’”›ÜÆ4Zâ+ßœ´‘¨÷Kž‹ã D¶Ë•§¦hT úØ)ˆ¯OZÒ¸vô¥ïTû ë÷×QpΆZUf«]¸‚!]‚¹­¯µ Ô­Ì?;eÁÖÃu>kuOߘFÇH-…åvÔ* »,xç+Ûóë ÒJä¦ñÈ0#÷þ*œ9*°ÚaA*’c\£d¥Õ®& £QC­E¦Òìš¡ˆ UªWqÖä *´¹.—×þ4ð®&«£žÓåÑAG‚QÓ £„@¢UÑ9FK˜^ŹjÅ•œ 6hRas:5ÔÛe ËÔÙdŸ¶Ñ1Jã1ìÛSöÙ»KÑ·¤‡Vr²è,Î9è‚°××a)üš{†Äs߸kÐj58œŽ&Þ¹@\®­š­Z"2TEx°Š*³Ìªïk)­qrÖä¤}„Æ%¾€Păƒ#Ö-!Àæ,Ý]Í'‡êÑI<0¨eØÆu\ß#„;ú¨· Âô*T¬ø¦†å{jÏõÿ¦ƒutm¯ãñ‘‘D…¨‘$(ªt0÷“ Bõ*ž¸¾ùõÿÛ\ÁéòæKnbÂÔœº`gå¾ZΙCÔ L &!RC¯=uN>ÜSCI•ƒv ]A§(-ÇÊlT×Ë,¶¦v?SF"=^˱Rö×bª—é©aÒ:Dj¨ª·¹ËX£†>Ú–FKò• £4¤Åé|ÊãIg‘M Ъ¥KÊS‹< 0†ªß×@DˆšÛûø±Äê×Wí ®øO]°Sc‘)«qRRåpÏŒtŽÖpßÀpŠ«D‡ª[µYÀgl|_hC‚ÞIz¢CÕ,Ý]Íþ"};¹F¾j,‚ ³•$±n]ât ëB»p5uV™ÇGFÒ#Aï~mùžj¶6óä¨(ÎTÚ™·¹ LA‚QÃò=5Lá’±A—_ÙT¬Õ!ÈIbó!3²ôO¢Î*£RI!ˆ UóØp#}:áA‚e_W³ú»:w æÞá˜m2Á®%yk¨å­/L^m#.BM¬ÁsX»p BØË° U›mªS´†ì¤ ú–å ³;[~¬C ØzØÌ7§,î‹Õ¨Í:­¥Ò¬ÌÎ((´ Á(ÚjS‰QZ¾+´ðÙ–õÄg¬„êUÌÌ‹¢²Næï;ª0Y.Íf½ÕsíÂÕ$µÞëFï«ýLŠÒr´ÔÆÌÑQTÕ»ê!O¿KŽÑ¢–$>˯gÃ:NÁà´`úwBÓ´ýë\îºKöÒ¶ <È儿Ÿµq¼ÔNI•ƒ.ítHÄ4mnob j>9XÇþ¢æº²¤¡M~`Px@Ïïçàªufš"pu0œBB®.æÖ¾áÜóÖ|ö-ßò5¶Ø 䲃ÜM{î½y(Z­»¶æ×Qm‘ ¾¼òH=oç‡3Vnïgມ+µq¨ØÆÎ£õœ©°Ó7É5í) ’̘ŒPÞÝUÍw…îÎ çAáì/²Ò«ƒÎcØ÷g,ëTtŒÒ²|o5Û~43¾Ÿ;r |}Òâÿ´`:FjøóºrlNxt˜‘Ìz"5-¯'ê9Sá@«vi±S¬Û_ÇÖÃf*ÍN:ÅhÝ+‹]¦¬ÚI\w5E•j­2j•DQ•Y@t˜ŠïÏþ±³šÄH ý“z²X삘05‘¡jì² >BCV""Äå°5¦¯U»fÚš¸Þ!QI­åCPXî «£wyÜoÕ_¤A‰váš6˦ð>_ºXe–ùèÛÚGhø×75i$rZ¹WhgÐЮašÞ)»t都5¬ú®FâþAÔÛëö×0y¨ñ§å_>*9UÃ2±ð`5Š ¬ÆÉ'ëfH’YBB%¹Þ›9rÎÆuÝCˆ UÓ>\CJ¬ŽEÛ«8YfgÚu‘Œìʧ?š9^fgHZ01†j„€œä`>/0Ó'IORTK]®±Ê˜m2?–ØèÖ^O|„»SÐ3AÏ·§­ôHÐ×÷ áW]‚Y´½ŠÃ%6îýU8÷Œà»B+:Db”†êX÷C%wæ„3ªW(«¾«eíµ-tÊj—)©tð}¡•Ïòë[„µò~Ž·ò¨³Êm²)½F¢ÁÕÐ]¬oNâ"4ć« kØÒª¬ú®†¯ŽYP«AÝ ¬,µ^Ò÷¥ÓQ¡ªVuFAá¿ ²©èP•»þlQÏâšáÝwÚŠÙ&Sm‘yëlV­ÂkàœÉI¿NÁ^ë_K´}µŸQa*ga_¡§ ¿êìµVïZ‚›ìšµèħ‡\ý¾ÆzÖW9·Öá2×]ïøxj[U¸ò<6;ŒçoЦÚ"Ó1JËÇßÖPk‘Y¿¿–m´7j•kÿb]Q« >BÓæç÷sñ pf\³3² §LÿŒ.<8&†°`-n„,àÝ ŸqÿèÞL¼i0Z»S°ò»Z>ØãZŸÚêÁ4mC’ ¼ÎÉœåôëDÏ=]ãuÜ70œ2Cù˺r× [¸:æYƒ$—×ݧ“ëïè05iqZ2õÃ’c\KÕ.Ô8ùøÛZN–¹–éôëDçmãÄŒÏø“c´TÔ:Ñk$Æ÷5°ï´…w¿2ñC‘•뺇¶¸~¨ÄÆM½ÃÈIàË£f60¤•Õ+”;û0†¨xçËjN”¹Þª· ·cålØ!ªq9’$Ѭ"°;áË£õ êÌ좨2Ëd'éÝKînÈrMù"\†­Qµ- @%IÜFÿÖòñU5ùçlÄ«gHZKyd¯™$¹–wµE¶K¹ÏΙœØœ‚’*í#4~Ý^o—Ù}¼ž­‡Íœ«v217œ{†s°ØJÏ}’ôÌý¤§,P« X+¡UÓê¬úuvÙÄ+›*\£k^{ð’ÛV$ Žœ·ñîW&bBÕt‹×¡¦Æ"#˰ëX=×÷ ¡g‚k  D'±ëx=É1Úæº¼ËÄg¬îuÔßž¶Ð½½Ž¬Žz¬vN#ñí©zz´×¤Q‘™Ä¡Ÿ2Sk•Ù°¿Ž¾ v†€Ê:™å_WSpÞNJ¬…^ :ôZ‰såBt¢™N½ýU5ÇËìØ`¶y+µµ:uï©üš®÷Û¦ø©Ž°:šë€NíÚ4"X'ñÅÑzöž²0.;Œ‰¹á*±‘¥!7%ØmC›šÖiÏjSÞê «C°â›šKŽ¿‘òZ§Ç>À© vBtRËúc@8Ь^—Ó¶–¾F媯þõM-!:‰A]‚±8ZþN¥’¨µÈ®Ë†wJíAb¤–0½Deh6pÔÖþˆ¯ö?PTÜæ±mÕ¨%Ú4„èTUÚ9kr¤"-NGd¨šÒj'Á¶7²¸HWÌ2AZ‰ m`Ïïçàà̸¨ä— ¶X¹1SƒF­fBÞ@rz¥Ü1­Fƒ£Á‘Y²»šº+´Ë—,àW©At‰ÓñáÞ62¦WÑ·“žÙ7D3 5˜³UÀe°!:‰ ­ŠÔvZ¬Z%±û„…êz™P½ªEØ×'~šæ3ÛeÌVJå]pÈ¢™‚y‹ÿëªÌN~Šòþ㟙=sß$@ $$ÜBEA¹¬¨õ(J­ÕÖ£þQÅ£µ­üÔÖ_UlkkµB…zpXåð ¢ !áHÈ}o6{ïÌóûcv7»›™ÙƒDD¿ï×k^³;ÇsÌ<×gžçù>’1Ðh¤/emÝ\¢$„±Çê8iئÅÉ á—Àà™häqëɲiJ1½!ô\&¹ç§†Zžj1 èvˆH‹ JoÐaa÷|ÙûÏçÒðž“Ê„ÁÉZpà|yHÍpJ¥i‚ø¡*Oêå„Ï´o”õÐcpE©,ã8Àîf½ÊI9F NÑâÀi§ba²ÌðÄÁåV¾Îîb˜Q ³]ÄΣ6||ÌŽKÆÅá– ’P©Gùq{é…ç¬VvªÕÿÑÀoäqaaŒlݪÕӆǠÃ*àÉÿ¶¡Ñ$àÇããpû…)(ÈÔÁêq[õ\Zá=í+»+º÷w6ø^‰Æ$¯¯|lcÀ¥ãã ×ëP”Ÿ p‹ ë¿êÆëå]°:ÅÞÆÎúƆ¥ëð‹iI¨isá“*¬-Ý܃è÷éÚ)0´v °9%«Ç›]8¿ 3ŠbÐÚ-(ž3Ù0)±äfhÑa0f°ZžCƒÉœT¸î[ óÇÆBÃsøí»m˜¬Á£ ÒQ–'¥D/jÀSïµcóA‹¯7wL掉Ãûºðî ¬É •ÝÅpªÕ…‰1@# NLÊ1ÂábÒPÈÙ6—æ-͇‚L=^ú°NaÙÜT4v¹ÑÐ)5:·x†Õ¸i>C$~pž/ýÿ=Ð͇$wBÅcÎè8dõO“É-›—9›‘Æ?ÚûÂ…ó¢ -Ïaai²’4xnk:¬"rÒ¥5œšº¬ÿ²ûNhÁd§h‘¢ÅñfZºÔMV2 LÒbä@Þú “çk¡¿Ý|£žC¼‡NÃaÂfÅbmÝMI„^Ëá¡u­h·X67YIR1f²‰Øs†kJoì•òùµe‰à¹À´<)LjOŽÛ6§ˆ½'íøŸ™Éþ¶Û‹Cjd;Ý Í] ³ôȈנÑ$`Ô 8 &7ú€7â‹¢œ7"F6MYLñœÃÍ|=#‘3šÍ4<ßÔ;{Ú eg£I8]v[[±ãHO{¤¯á=b*¸nµ8N·»QÝîò Ãc8xÚ5Ÿ™Ñbvà‰¼¾©h”>ŒÇäÓŠ·üõþb´"Î˶aà€Tðçrp8Ž5k×~\[[[ À@ôl‚ßoÿmÙ+f“PÇy¿½WÀhüöZ¿MçÙô~¿c§N2eýºu$&&&y{C—û¿>Ž{RÑáoB²?Ò¢™"ÜN;:Zê1(Z¾Çd3$Á’ÃcRŽû«è´ >k@8¸]N´ÔŸDJÆ`hõF€ãûDÌxñ.Nä]AÝ除æV#2ø;™4¿EËspxVlõÿz|N`Ì·PÔâ7£Û!JßXÏz¡á¸ïµJ¢×ô„Ñ?ﵘ§ˆ2iLÃq’zO´¼Ôó—Adà8®×B„Þ.U‡›©ŽkÆ^n¨ÄÃ[™ø‡†¦jñËéIˆ3ð½T¬hrbUy,­&ò°E'Àay½¼ 6'óMöD†Ütú=ŸvÁêdÐk=]ÿ‚Â⩬'­‡óL¬NƤ 1x·Ô¥ãµÊã¿&ÇI Hº<ùɛƳ’´8¿ ‹¦$âÏÛ:°õk+x^=‹žž9=ß5#5¢Çô³7ë4R%ãp÷öÞá­Þ0xŸ…×_‘ɧ)¯Æàç8,]‡_EùüÔÒT¨<¥–Þ¼e–NÃ)–¡ü7M!Rž}½£e¥T6É—‚§!Îóѹ/•Ì×^R*ç¼e¤è׃Ë{އƒZüüã NiÀX°ÿþqð³ {Ìß Nu‘ê¾ÄWŸÅ›ùµU|ÏY¥ #Wß¿#¥´êý1)7îŸÒމ£ó¡Ñé¥k9]]]¦Ë¯¸â©òò={X! §ßo·ßæ9Þ=óìá·÷zÀ9;ÌÌ;w€ó|ªv¹\àµú ³’YÚmßX}_$¼C»—Ë §7¦¯ëUofð6~9¿cÐ=ÇE8¼_ZCœã³]D[·4wÆ-ô|u‰Ä}ïõNA¾‘¢tÜç.¨õ«y…›S&^^‚­£x¯ó®0ÊbF4~D¹ð4u xéÃNðžÂÂw)׳~‰†.l‘Æ)TXœîÃ<ð.ô=‚~o#_ÍòŒ&‚gÂË)"Ï!mˆZÎ{Ú-°˜<̈«K°÷„ {OØò Ÿ–ýóˆÅý—&D lðA]þaâ¸Àa€ñ€ü¹æ3x~JiÃëŸZžRKoÞk]Bø½(Ѧi‚ äQÊSJeŒZ9!×Ä}.èz^¥`P c(Ôî .Ÿ•Ãéý¥µç äFÜŽS ‹ZF©¾ñ~PIGѾ¿o“sVÌxåÏk Óé`îh0­.¬û· æŽfèt:ð¼Þq¢ýñÊ"q“ 󜆶¶àã6tG0v3œ®¸hÃÞWÏà»ì‡?.¡IeÂ{€ÙÇ~ŽS$a9“{ú#}†¶±bï ›gý˜Þ ïï~q|öžŸÏýo!ŽçÂ{ ‚ ÎÎY1Ãqœdk‚× 6>–®vt6Õt¿©ÞZ± ©àxÔÛq¨O,N‹C ¡g‘ïÒ³&,ýþ³õL,N¤¼|v‚Ð'|—ÒAA|×9gÅŒpƒ1C‡ GUÅa8cbû>^Õÿhüˆ$‘„§/ÂÖWqòƒÛí†N§ ;m0Æ`6›a·Û¥EjƒÁ`@bbb€ðw¹\¨¯¯GVVVÈ´f6›a³Ùîç8 p8(//‡Ýn÷ù•››‹ÜÜÜ~IÃmmmØ·o €ââbð<ï{ö@CCJKK‘žžµ¡ò†Ò¹HŸ_||<ŒF£ïX¤y*TzkkkƒÉdBBBÒÓÓC~øQJ›‘¤Y‚ zˆ¤ž·œå¾™‘œœŒÄÄDÕ0×áÖ!ÑÄ]í¸÷ÙôU}®TÇEZ.FŠœ¿‚  ¹¹‡)))HJJ çPïáLÛpße8¿MãÙtôŒâ$H @6€\Æ(P `ÆÔ©Shjlè´Y-ÌjéfVK73u¶³#÷3‡Ã΢AE&3w™Øç廘ÝfØ »ÍÊ>/ßÅÌ]&&E1ª°Èáp8Ø£>ÊŠŠŠëì3ï#ãIDATØücvñų¼¼<¶|ùræt:ÙúõëÙùçŸÏûÌOúÛ}ÿx¾øâ‹ìG?ú?~<›6m[³f E‘¹Ýnö·¿ý•––²I“&±ë¯¿ž=z4àþúúzvå•W²·ÞzËw¬»»›ýö·¿e%%%lܸq쪫®b‡’õßårEåG$ñˆ$<}¶¾Š“?§OŸfË—/g555lãÆa¥®®.vë­·²²²2vÞy籩S§²eË–1«50¯½úê«lâĉìàÁƒªî¹Ýn¶bÅ VZZʦNʦNʦL™ÂJKKÙ¦M›ØáÇY^^;v,›>}:›8q"+((`wÞy'kjj +ž‘°{÷n–••ŦM›Æš››}ÇÛÚÚØÌ™3Yff&Û±cGÔî«¥)¥s‚ Dõü6nÜè».Ò<*½yÓ˸qãØ”)SØêÕ«Ué”6#M³AHDROˆ¢V9Ê}³ÙÌüq6yòd6vìX6wî\¶{÷nÕp×áÖ!‘Æ]í8c}_ŸËÕq‘–‹Ñì¯ÅbaO=õ+))a£Fb³gÏf»ví g³Ù¬øœNçµá$¿íìÈÁýÌÔÙîkãÛ¬ÖÔØÐ9uê”Ìðèb>(ðè…l~H÷艾0zô†ÎOƒøë’éòˆ›_æE1`c¢Èóß$lV û¼|ëê1søðaVPPÀ^}õUfµZ™ÉdbüãYNN;pà{çwXII khhð…¹¹¹™UWW3“ÉÔ+®rçl63™LÌl6³“'O²––ß¹7ß|3l÷»»»ÙñãÇÙ©S§˜Íf yÜŸ­[·²aƱ+V°}ûö±Ûn»5Š?~œíÙ³‡ååå±G}”m߾͞=›]wÝuÌjµ2«ÕÊV®\ÉæÌ™ÃâââØë¯¿îsó7Þ`ùùùìå—_f»víbsçÎe‹-’-?ýôÓ¨ü7'Nœ`k×® ;<}¶¾Š“?»víbùùùlëÖ­líÚµiC‰úúz6yòdö‡?ü­[·Ž½ùæ›ìã?f.—ËwÍ_|ÁŠŠŠXZZûâ‹/TÝE‘íÙ³‡½öÚkìõ×_g«W¯f‹-b#GŽd`_}õËÍÍekÖ¬a­­­¬¶¶–­ZµŠåææ²‡~ØWQ8NvúôiVYYÉZ[[cŒ ‚ÀZ[[™Åbñùg±XXkk+E‘Y,–^iyÇŽ,99™¥¤¤°Í›7ûîûðÃYFFKLLd|ðcLµµµ¬¢¢‚µ··äÁÎÎNf±XXuu5kllô…S-olß¾]öܱcÇ¢z~_~ù%³Ùlç)‡ÃÁÊËËeÓ›ÍfcUUU¬¸¸˜Ý}÷ÝìÀléÒ¥¬¬¬L6íX,Yÿ•Ž¡ŽZÞQª'º»»ÙÞ½{eˉýû÷3Æ$¡bµZUÝë­·XAAûÇ?þÁ¶mÛÆæÌ™Ã,XÀº»»eÃ*W„S‡Dw¥ãÞF»ÝnïÓú\.^•••a—‹Ñ"çïûï¿ÏrrrØÊ•+Ù¶mÛØÌ™3Ùœ9s˜ÅbaÛ¶m“sUUkll”}¢(FÕ†ó¯gûnˆ™sz˜cL2\ÆÆD0ƤcžØz 0œŸUæëj빟õi¡·›ºéqÓM7!-- ©©©¨ªªÇqà8‚ àµ×^Ãk¯½«ÕŠÁƒãÞ{ïÅyç·Ûýë_²ç6mÚ„×^{ ±±±8~ü8 î»ï>\vÙe>·C¹úôi<üðÃ8tèxžÇ”)SðÄOÀjµâ¡‡ 8þØcõrsìØ1Œ9·Ür ’““!6oÞŒS§NaÏž=ÈÈÈÀwÞ‰´´4´··ã¡‡BMM † ‹Å‚ììl$$$¸ùÉ'Ÿ`„ ¸á† ÓéP__Ç{ õõõÈÏϸvÛ¶mQùŒR<ªªªðé§Ÿ†ž¾[_ÅÉKGG^xáÔÕÕá™gžÁŒ3²â×ÚÚ Q1kÖ, 8III~¶µµaÅŠ(,,ôå;58ŽCYYÊÊÊÕÕÕxõÕWqÿý÷cܸqøòË/Áóúè#ð<[n¹iii¸å–[pá…*ëó_é8Aê¨å¥zâôéÓ(--Eii)€Àr¢¸¸v»?þ8ÒÒÒpûí·+ºßÙÙ‰ à†n€F£Áž={°iÓ&8ÄÅÅ\«T„ªC¢‰»Òq‡ÃÇ @LLLŸÔçJñÚµkWØåb4(ù[__½^™3g¢°°[¶lÁž={ Š¢b}S]]¬¬,Å÷m®¨¨¨RyßÀŸíœ9Ò‹–„Œ0xDÿ&ö:&ú%’¾_ꧨ¨çw|ðA\vÙeX¶lvìØ  ;;Ûç7Ïóøøãñì³ÏbÑ¢Exå•W™™‰GyíííŠç:::ÐÒÒ‚mÛ¶¡  ùË_0zôh<ñĨ««ó 35÷;::°aÃ|öÙgxá…ðÜsÏ¡¢¢Ÿ}ö6nÜØëøÞ½{{Å󪫮ÂK/½„äädX,¬_¿qqqÈÊʉ'0|øpß8Ûüü|0ÆP__ØØXÜ{ï½xòÉ'‘‘‘a ZZZ`µZH»³³­­­~‹¢ˆ“'OFåG¸ñ6lôz}XáñÇívG¶hïS#)) ×_=ˆ_ýêW:t¨Ç„¹:µµµ¨©©Áí·ßŽÿøÇ¸ì²Ë°yófÒ¸Ý_|‚ àöÛo‡N§‹(¸\.<ýôÓHJJ•W^p.8N“&M‚ÅbAKK Ž9‚>ø?ü0þóŸÿ ##ÿûßÁó<Œõë×£½½Ý—¶‡ŠmÛ¶aß¾}½Ò2ÇqˆÅ¬Y³°gÏ´´´ ½½Ÿ~ú).¼ðBÄÅÅçylÚ´ ¯¼ò –,Y‚Õ«W#''<òZZZ`2™°sçN¤¥¥aåÊ•;v,V®\‰ŽŽ\}õÕ²ijðàÁ¸òÊ+eÏ :4êçQž2™L¨¯¯WLouuu¨ªª‚ÕjŃ>ˆùóçã׿þ5Am(ù¯.‚ ”QÊ;jõDCCƒï~¹r‚çy >999ªysáÂ…xâ‰'°wï^Üwß}Xµj.¹ä$''„Q­.P«C¢»Òqo¼† Ò'õ¹Z¼*++Ã.#EÍßéÓ§###¿üå/±páB¼ñƸüò˯X§äääàôéÓŠï!š6œû®pN÷Ìàí•‘©'{$‹§×†ãÚˆsô$''cåÊ•øàƒP^^ŽÏ>û kÖ¬Á¨Q£ðÒK/ù&3ưuëVß„¬ÊÊJdeeá¿ÿý/***°cÇŽ^çÞ}÷];v Ç!??·Ýv „;î¸?ùÉOpôèÑî¿û¨¨@RRººº°víZÌœ9øÃPTT„ÆÆÆ^LJŽ÷Þ{;wî\|ñŸøâ‹åååxî¹çðõ×_ãÁD^^¬V+âãã}½z½€ô¥»çµõ~óæÍÃÆ±téRdeeaÆ ÇaË–-رcà‚ .€ÓéDlllÄ~lÚ´ »víRÇòåË1bÄÌ™3ëׯ— ¢(Ân·GÿhïSƒçyäææ"66ÇÇ©S§ÂºO§ÓaæÌ™¸úê«1dÈ<÷Üsx衇0fÌ:tï½÷ž{î9 ‚AÂÓþýû±sçNüßÿý_ÈÉ—ƒÇÁåraĈøýï«ÕŠíÛ·£¹¹ƒ¢(bþüùxã7|7Z[[1oÞ<>|¸WZ.,,ÄçŸQ1}útìØ±Ÿþ9bccÑÕÕ… .¸ï½÷\.¶oߎɓ'ãšk®V«ÅÍ7ߌk¯½à8ÙÙÙX²d rrr0oÞ<ìß¿6› ƒ ’MSùùùàyééé½Î >üŒŸ_$yŠ1‡ÃÑ+q›Í‹Å‚šš,Z´wß}7þùÏbùòå5j*++ñá‡ÌCJi“D ADG´õ„\9¡×ëqë­·ªºÀ×ûÒÙÙ‰“'OÂn·£±±v»= bóæÍŠuR2zôè°?Ü„[žÈÅëLês¹xy?*•‹#GŽTìYµçÙÕÕ·Û„„ÄÅÅ!..UUU°X,0`€lœóóóqòäÉï!Ú6Üw…ï˜aP3þ× @c ýÑ+ûöíCMM ®ºê*\sÍ5èêêÂ'Ÿ|‚_ÿúר¼y3 @úÂÒÑѓɄíÛ·C§ÓAEÌ™3111hoo—=—ÆÒÒÒHIIÑh HhjîÇÆÆâòË/‡ÃáÀ–-[ðÈ#À`0à÷¿ÿ=®¼òJ¸\®^ÇÛÚÚPYY ()) øË_þ‚—^z ¥¥¥xýõ×Q\\ Æ’’’ÐÙÙ ·Û ½^“Éä §Ó§OÇŸþô'lÙ²f³]tÞÿ}¤¥¥¡¢¢Âçÿĉ‘œœŒ¶¶¶ˆýhmm +¡Â£„N§‹*þÑÞ Q”z"½ûp˜>øàp‡#F   ùùù½ÒøŠ+Àó<c:t(Ƈ-[¶Àh4bäÈ‘6lcp¹\hooÇ Aƒ ÕJÅeLL xž÷ #MLLôåA¯¤¼÷׿þU6M9N¼üò˲çBêùÉ!—†?øàdff"11ííí½Ò[zz:ŒF#ÆŽ‹ÿùŸÿArr2âââðá‡âرchoo÷å¡I“&E6 ‚ˆŒpê‰hÊ /‚ ૯¾Brr2æÏŸ‹/¾o¿ý6|ðAÜxã˜8q"Éb뫯¾ªX”••õªC®½öZ?~mâ?iÆ{ç ÃóÞÓO!:|ø0~÷»ß!//'NDbb"ÆŒƒ„„¸Ýnßu:Drr2üqäää`Ïž=x÷Ýw1xð`deeÉžóªðºº:477#%%_ý5\.†ŠcÇŽ…t?==ï¾û.âããñïÿ555¸ñƱ~ýz477#!!!àøÆñÇ?þW_}5é‹ùŽ;ðüóÏcÉ’%¸þúë A Ñh0räHüýïGmm-òòò°gÏ$&&†,Ä6mÚ„ãÇãé§Ÿ†Ñhô}%ÈÌÌÄu×]àsssT~,Z´?ýéOʇZx”à8.ªøG{_8xç……37Œ1†U«V¡¥¥Ë—/‡Á`@]]xžGFF.\è+(u:ôz=233Ã2YÝØØˆÝ»wãÖ[oí5öD€WH9rk׮Ō3™™‰?ÿùÏèèèÀÛo¿¬¬,,]ºGŽñ™;w.^yåp‡›o¾qqqX½zu¯4¾qãF,X°Œ1FÌž=¿ùÍoÀó<–/_ŽØØX0Æ ×ë1hÐ =zÝÝ݈ÇÁƒC‡E{{»ìóÔh4øè£Ó”Ò9žçC¾ŸPÏO¹4œ››‹ììláå—_Ho 6lòòòðþûïÃd2!99ÝÝÝÐjµHNNÆÜ¹sqÕUW€OèÑÿ„SO(•Œ1˜L&ð<¯hjÙ;ÔÉ`0à…^€N§Crr28Žóµ_ÚÚÚ Óépíµ×¢¤¤@`]‡U«V¡©©) Ñh4ýÒöÆK¯×£¼¼<ªú\Ettt¨Æ+11Qµ\<4¢¿1110™Lˆ‰‰ñÕ³iiiÐxÖHTªS8Ž“­Ë5 ÒÓÓUë©þj‹ôß‹ˆÁk Àk€ 2ÞžÎóI—ôã°‡Y³faÕªU¸í¶Û0oÞ<èõzìÞ½F£3gÎDEE…¯Ñ¶`Á¼óÎ;xüñÇ1nÜ8¬_¿Æ C||<.½ôRÅsÇ¡¾¾Ë–-Cii)6lØ€óÎ;#FŒÀ‘#GTÝÏÍÍErr2ÚÛÛñâ‹/¢ºº€Ô9~üx˜L&<ÿüó¾!I]]]=z4t:]ÀÎ]»v¡¹¹}ôöíÛQ‹Å‹ãÒK/ÅÚµkqçwbìØ±X·nn¸áŸóâß} HµwÞF£Á† ð›ßüÆ—ý'¯_rÉ%Qù¡Õj`Jñ¸ë®» ÑhTãD´a‹ö>5!þú׿b̘1!‡„q‡ŒŒ <óÌ3hiiÁ AƒðÖ[oaÖ¬Y;v¬or)|ýõרºu+nºé&Œ3&dX<ˆ®®.Ù¯…f³Ï>û,Þzë-X,|óÍ7HOOÇâÅ‹}óbšššðòË/£»»Û¶mƒÛíÆþýûqþùç㢋.³Ï> ­VëöÔÞÞŽ•+W¤ñÑ£Gû*fQ1mÚ4ˆ¢‡ÃéÓ§CE¸Ýnð<+®¸7ß|3–.]Šüü|¼ù曘7o†Ž/¾ø"àã„(оá[;wîTÌ»wï–=wÇw`Ô¨QQ??¥´¡”§bbb0þ|¬Y³¦WzKOOÇœ9s°zõjÜu×](++ÃæÍ›1eÊŒ;<Ï+®Y¡”6#I³Aô VOŒ3ëׯ¨'”Ê »ÝŽåË—#===ö˜¯>õw_¯×cÆŒxôÑG±xñb 86l@II F…ššÜtÓMX¼xqÀœGÿº`ìØ±8räþ÷ÿÍÍÍ4hÞ~ûmÌš5 ………gw¹ãÞx 0n·;d}ÞÞÞÞ«>¯®®Æ/ùKÕxÁh4bõêÕX¼x1ÊÊʰeË_¹x&èõzELJٳgãž{îÁ’%KÍ›7cüøñ(**³Ï>«çÌÌL<óÌ3½ÞCAA~÷»ß…Õ†“Kcß%”Lq2¿ýÍ¢ñ~{ÿM#³é† ÉÎ^¸páyƒÁW󉢳©)éÐh¢ÓTÒ×['ÚZ‘–‘éq‡Él¾;|c€ÛåB[kÒdAçÒWÍ’““1mÚ48=zMMM;v,xàŒ7Ç!33'NÄ!C0~üxTVVâĉ˜1cî½÷^$''#++KñÜgŸ}†ºº:\xá…8~ü8&OžŒ»ï¾©©©!Ý_ºt)RRRPXX½^¯¾ú ---¸üò˱hÑ"Œ7Nö¸ÿ‚Q^«"ƒFJJ ˜˜ˆ””Œ?yyy(..FCCjkkñ“Ÿü7ß|³oH 5²bbbPZZêëéÈÍÍEVV8“É„_ýêW¸âŠ+d-p¥¦¦Få‡?¡â1iÒ$dffö Ïó°Z­p:½6Q}‹1F¶hâ$Š¢jX””»ÝŽ’’`„ ‡Cöž¢¢"äææ¢¢¢mmm˜;w.îºë®€Eº¼ù0!!%%%ˆW ‡V«…ÉdBNNfΜéƒëS||< €„„dffbÞ¼y¸÷Þ{}Vfòóó¡ÑhPUU…œœÜ~ûíˆGVV†ޏ¸8lݺ&LÀÏþsð<¢¢¢^iùg?û RSSQVV†ŒŒ 03fÌÀ´iÓ Ñh‡ÒÒRŒ?8zô(êëëqñÅãÎ;ïô}PÈÊÊÂĉ}CÌ233Q\\ ·ÛAƒõJScÇŽ…Á`=7nÜ8ÄÆÆ*¾µçmžRJoF£ÉÉɘù$f̘óÏ??êg©„F£ k}ž3!%%¥_Ÿ_¨<¥öŒHÈAßEÎi1H ­˜¸x4ÔÕtaV¸N§µ5ˆ‰‹?g'¯^y啘?~X“®‰¾G§Ó!;;ûl#ê°ôGøÏæ3™={6JKK‘ššÚg‹—}Û|—ÒAAœ œ›­xH½2Œ1h´Z¤eBcm5NTU€…9¹”ãycb‘–9˜éÏÞ™þÀkgœ i15öAñÃBIÌxd þýÂ;Ì,))<¯A·Ùì±,j¨­V‹ø„$$$ôû03‚ ‚ ‚ "†)üöiÏŒ¿À‰äú~Á+@¼6н IÊf—½÷pFã2$f‚ ‚ ¢Ï ·‘­²Z¤2g2ÌL-`ý·€Kp ¬rAV9ÏA]Ðh(jüÅŒ€Aæ¸Fæ^ÞÏm¿äÂú…AA!‡Z{:¸wDÎÈ— ³-Ïo91ã¯ZÏMpxˆÄš™¿#ÁCÍÄ c‚ç¿wï€$VÜè3þâ‡óÛ 9C½0AAÑ·„ZzÅ_Ð~{¯(‘ëyñ.á˜kŽhñÌ31Í,7wÆ+j8¿ß‚Âý¿{x¿ëåzeÔzdü!‘CAAê„ áX/öïQ -rÃÈ¢J¦F¸bÆß@ð±`!#BYTx¯å(d¼›ÜP6(¸GCÍ‚ ‚ "rÂmG{É à¹.rÃÎÔDM8ÍBJÌ(‰ïCVk¢ß¹àåßã퉑›'ã/`"í™!‚ ‚ âÌPê™z ¹¹/JsbBõÌD,j"f&·öŒ¿çÁ¢Fî!ø÷Äø÷ÌÈh® AAA|›„3wFv}IÈ‹špL3Ëù’H È oÆýJCË”æÉÐ\‚ ‚ ‚è"™;îü™pDލà^¸áò颙Jÿý÷ÊG8x¾ ‡ðzeäþAAÑ·0…ÿJ½*rü•ŽR Âøß‹¾fæÅß2‚®õ7 d¹LmŽ ‚ ‚ ‚øvPjæÝ+™YÃÜëÃÌ‚#çoÀkfÞkø {‚Í7“!‚ ‚ ˆï‘5a£&b¾uÓÌÁ¢DÉs¡â½Ö_ÔÏ %fä,«AAÑ·Èu\¨‰™àÿ¡&û³nÿV¤¯zf”ziü¯ î•Q›èOse‚ ‚ âì¢6wÆ»ÕSƒ0ŽËùÑZ3“‹”œzó*J=2@ø"FM4AAqfȵ·£5þ¿C]÷à l4TûJ¬p*ׇòSé8AA¡ÚÖjml¦²÷BüŽ:‘Þ§6i?ñÒ“ýi(AAA„G´¡DH¨½Ò±¨Ât&@mH˜š¨QûÝá"‚ ‚ ¢ïa!ŽE2©ÿŒ… pæ¢!” Wð„ O8ᤡfAAgÒ¾ŽDÔ„:§æOŸD"Z7±HÎ<‚ ‚ ‚ Î.áÌŸQ;vÆ“ýåèKÁ0!ÁBAAç6Ñ•>UÕb"7ûKÄ8"‚ ‚ uúkzF8îö©ßßVãŸDAAAü°è÷9ígCd°!‚ ‚ ˆï'ߪQ®ï›°ø¾Å‡ ‚ ‚ ú²LAAAAAAAAAAAAAAADßñÿ^}¿¥(»}îŠeXIfMM*>F(‡iN’†x f ‚ASCIIScreenshot­4Ð7%tEXtdate:create2019-11-17T18:09:47+00:00f<¼‚%tEXtdate:modify2019-11-17T18:08:43+00:00 ìKtEXtexif:ExifOffset78ÉÔ{'tEXtexif:PixelXDimension1638æåWÇtEXtexif:PixelYDimension1410`w²ñ\tEXtexif:UserComment65, 83, 67, 73, 73, 0, 0, 0, 83, 99, 114, 101, 101, 110, 115, 104, 111, 116@¸r(tEXticc:copyrightCopyright Apple Inc., 2019XK5×tEXticc:descriptionDisplay•¸IEND®B`‚wavbreaker-0.13/data/wavbreaker.icns000066400000000000000000001077601356554132000175250ustar00rootroot00000000000000icnsðic08è‰PNG  IHDR\r¨fiCCPkCGColorSpaceGenericRGB8U]hU>»sg#$ÎSl4…t¨? % “V4¡´ºÝÝ6n–I6Ú"èdöîΘÉÎ83»ý¡OEP|1ê›Ä¿·€ (õÛ>´/• %ÚÔ (>´øƒP苦ë™;3™iº±Þeî|óïž{î¹gï蹪X–‘š®-2âs‡ˆ=+„‡ ¡WQ+]©L6O wµ[ßCÂ{_ÙÕÝþŸ­·F qb³æ¨ ˆð§UËvzú‘?êZöbè·1@Ä/z¸ác×Ãs>~ifä,âÓˆUSjˆ—ÌÅøF û1°Ö_ Mjëªèå¢b›uÝ ±pïaþŸmÁh…ómçϙŸ>„ïa\û+5%çáQÄKª’ŸFüâkm}¶àÛ–›‘?ÜÞš¯¦ïD\¬Ûª¾Ÿ¤­µŠ!~ç„6ó,â-ˆÏ7çÊSÁØ«ª“ÅœÁvÄ·5Zòò;À‰º[šñÇrûmSžòçåê5šË{yDüú¼yHö}rŸ9íé|èó„–-ü¥—”ƒăˆ¡FAöçâþ±ÜJjåI.’£[/ã]m¦èÏK 7ÔKëúR ÿD³‹r€¯Y«QŒOÚ-¹êëùQÅÎ|Ÿ|…6«¾ ³ (˜0‡½ MXd(@ߨh©ƒ2­Š_¡fçÀ<ò:´™ÍÁ¾Â”þÈÈ_ƒù¸Î´*d‡>‚²üެÓeñ«…\c?~,7?& ÙƒÏ^2Iö‘q2"yŠ@ÿ«g Ÿ|U\ ï8eXIfMM*‡i  D"8s@IDATxì]˜%Eµ>=9îl³ifÙÀ²Ë.–%)ˆ ¢ˆá‰è3>yÏœÅì3>*0 *HP@A JÉa6±‘Í;9Ü~ÿ_ÕçÞê¾}ïí™Yf—>÷«ÛÕU§NUW×9uêTh‘ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒHk ­´ÒòhÅùCN5%˜Ö@Z#¾šPÂ68îÍp{=”íõO˜>`ZÉk`PëôC’'Ûs1S{w-ð^¸š\pê{)ÔÀW|™Œçç<+ï÷z¨ØëŸ0ùÔËô[p]™×VЉ¢ª=² éïI…”•¹ µŒ¬·4¬¥Q  ¿W¸'Ä…=ZÀƒ”äï’nmÈ60Ê·2Q)B Ý|ÿ¯ÇýQNØÈ~0îóÊ\ p*œ—¶·{³ í; îöàpÌ¿ƒA“j­;µ[âèÇ"…§x+Ck*WûMòÎo °h‹`aFÞ«JSºÀC!X7EÕ'Ä¿T€õq"…9O̹Ð0kÙú{ŒÊÌgÒöêî Ø£žõíh¿ó”x` 5ÉX΋“ÿíGO‘M«õT•«d ‘Õ»ª‚‚rRX¥†@[âòÜõp‚»î~¸¯Ãíмû¾î¬X<Ø«Tû¥Õ>ãÀ@%zò«óÆJá†p½_'w]ýzRVþ ®—;#k À÷)œ\© ¾³ãàf¹…?óùÜpì ¯„; î8Âûá^m|»þ÷Nxn)gdv+P`†}Ùl—¾=V¨çeŸ¦ˆ'R^úš¼±Råš/!žc#™<ëGøW‰Ê‘5 È €<ÛÆÈÒTXsþ—Ûმ7,óñwAø½åžçÿ´¹¹Ïßo¿JÞ¼§ö 8Né>l/»ü6(Ì‚› wÖ.S8Z¨ÿ’*…m Úøö°?0v"ÞN„”÷ì~aÛÁÕ~•ÜzÅ»ÄNeÍVùÀ5Dú ‘¥”a¼ýè3TpzP—ìµ^æÔëygUT|¼@ N.Ÿ2Å{óèÑ´ŽŸï—•}?ÈäÁõ \§þA]ÖÌ›w*í$>×ñï/æµk{;BY©À¡àôPÌrƒ^6o'BÊ{æ öM‚;~¸PÖ>s†‰ž·äzi]ÈJÜ×$Y€@ÑýXNF–ø”_&×ú¬×}Bîïø‡Äû¦ÆÆ#Öö÷‰ÄÞ3v¬¼itn$äyÞëüùóg"ê^'³ÿ€¼Ð*öûG{ûǑȂ=÷»ÕþÂ!@O¼àóì‘]Z"ÞN„ÄZAOâWûåòÇï½½i”WtÈEß µ˜*Ê##Kpü×Û-tYà@™ãõ÷^„ºC(=Â:TðÁÞ€!«žî뻩 Ë£gUUÉ—&ºYªeâyì±×ÂéLЮ0ÈIvu”—DÛË™AØn¹À¹ðù4d؆Y¹ì†Ö÷j¬D—íÐb3œè+ þuK«¬~â<“ÓÌ…7ÉÌÅí8m§&ÈY‡y­*¶d¥©/€+¬”¦AÑT+ÝFˆb,ÁyËZöø»ö¼Ñ§teËÏîíì4]þw&O–º²Øæ±’P ï ’r±×àÀ÷O¾½½]‡^‘;B»u€‡©ëi=ïÖ!3C1{ÀÍÑ~ ó ±o؉÷–ÇHª¨¿ûÄÅÒßÛ$^YŸ¼áÒkMb/kDQ0UÄÇáh»Ñä3Ø¿²ì J!§ûFc^Œ{OšeË ½a¨ö ~³}ûù$~T]œÞ஋r²ô}à*¥…øÇW±5“9þάð½¹ü>Èé4\ÝaS€¡÷b»\mö÷–<ïV9Íú‡—âO*yº´&Éep "F4?9IV>ò“éäY·ÊÁ/߀*a(ˆ> ýÔ ¾Ú4={7ÂþT€aëý¯kkûñ=FmüÄøñ¶âþ=OÀŽ zpõ´aáwttŒ‚±ÑÀ¢ªª»àùlræë<|¯»ŒÔž2ßw·b3¹òY¼á1Id›œèŽ , úóÏ“Þî)xŽŒœõ_¿É>OÅk×úKMý‰YúÖszä>ñ­ç{QðBx\b"»½Ôd †Eøûî{Ðvî4cñ9û¿¬PïÏçô±ÂÓ³ÁunpØ¥¬ìä[Û­ÞÍ<ž=›Œ¶ÐîÄ ž ÊA ÀÆà~(.öp87äÆNœmP±æ_v'IA'¢C€¿àA*klO?¶ùrÚ»T}‚8ÀtàßÌ´¡jÚƒ$)_ÞÄë¥qÜ’HÄñ‘ûÜÂÐá⯠nvû‚·1þ)Ò¶%*¨qÑxö‰üÄA[|ÿ¿Ûa;ô·Àê_´µ{žªŽk´\%óö}ÿÄÛpr½E(Ãë0àL±mª$µ]Cðpˆ;xï#Æn¥€…kÙµòRÿ!ÀQË“» ߘ)¯íÞ!$%18mw,Ó'\ð«¼Ì_0ª ñæçá•  Á“¹ÒݵÌR m·I{°t¨6k°–¸#J€Ùm²ß¶-ú¾È l@d–A?{ö„?·µ½¼-“1xa“vðÈùþ¬ÌìÙÌ÷ƃùsê.1ø\÷|oï‘Ouw›4'A@ ¼‚³¸ŽÃ0äd¸a诵ÝÁ ¢§Ãìo$ýëpð°!,Ä,Ð:; 7W|ƒÍâP$|ÜÅž'_Û±Z~¿WY+[q- ÑU2Ap‡·øõh9V$4ŒyH.üÊyDzxÞ ÜÔÑ"aïS%=j¡º' ÉÞú‡>½ÇÀýŽå¹.|£Žínœ ÒI0FÚó€–ïxÕ“øUUoøs`‰_\S#Ó*+•füÕó*½êê#ùÜߤOâš¼-uuó׎2»QN€À–ÿD8j`ª]ì*s€Ti0€H•íš!5+m d²]†K}ÙgŸSä• ävVƒÞlŸ·Ãýî‡p—a=Û%;ê'É¥ïyFþ†°’ü¥EIÙ£´8œë):ãQ4s_cÖÙóÅ*ÌTϯ¥¯×“îvU9¯GúU •ª¼½î¸àæÃ}-ðãל@“´ ªIÌ¡¸ýˆ<÷ýó| }îhr†óY èyÏ»¥Ív-ÿQª™Ìë‚ ÷áŠE´B ŒãøBeDT˜þÓñÿAµµ2¶<›DžZá,¸ ãÎ?t`=m¶³¯B×{‹öød.Ÿo—¡\ÊÎlœà½"BˆÚSm$¬Ô­j`Çq%>hrþ¬£ä‚}_!¯÷?å°O¯—ï”" ñƒ¬§?aý|4ÂÁg¬—÷üô^%ºz5„5pýAxKpØÅñÍ;^¨€¾è —ãzuà;®, ™Ÿ FœoÑáÚ¸ìþûŽ(+''èP…=Ë=”Àž³îõp|éÞhɸecC@åûHw÷kû¸þF OýE©zÞ…þ‚û ø_pçÁQÝ|+Ü“p+áȸ!#rRdü¯¸gƒ ) T°s9^#‡ëŠž3k4·yò~P–[f_ü}Ú·úsƒ°N\)uØfO Â]'É{¸½}߉—ÿùl§£c3s‡u£ f÷,}zlš6â(U»H*—ötx£B‰íÇpd¦œð) 4­öX €ø½p„“í¥ô?ÖÛ–Éœvw°/ñø?Lz׃\œBþ6ß?ãÚ`õßù¥ÿ" 7sù55ïD0%Õ¯‚hŽom;óý¬Í¡ë æWÇwÚ¼ ÏÅ÷EAB˜·ÄøÂãVßé™ðO G—¾C#2éÛ6ZÜúP¿î}þó¾,Âüý¦ÿ^gêµ Xì¼n‡k†û#ÜL¸’€‡ilß”ÿKãd)‡,x[ð¿pý%#¯OÂñŽ…3ðe”sÅßdN.2Úô¤ý²³[Š2¨ëîm¦Ççƒ)C%Óç5cçàwÆ—Íq#{„ñEÿ€ÐˆÞ;Û±ÕM ÝÆ?î ~Ù›>…a|n.ÜáVÃñÝ_‡"š©ˆqXã?ž~ÂäEÙaª äÿîb õ£œ|(ÂyÒÝ}ø™Ñ88t î…ëb`±½äý7È–u¶Ûh𨓛@µÿY'x¶ãçñ–áw¼`‚½±Íõ0*2 {c{Ô÷*&eø¯!¢°¿¹&@¹ªÍbY¯2Ç„rÜI8œh„!p ÆÎœ>£ƒÚ} PБ™^‰è¼/ýý¯ýõަ1rÞÔ!Pÿ³zÞ,™?ÿ0Üß ×„çÏœYó\OÏ OË ªÿJ ”à…,ɪö¼Ï24âoŽŸ“w&"h@€9¹,Ý´<ôÌ…€Âà—_ôå PØ^ ž„+ËV wn̦‹|LûÅÚ€SqÎ藽¦D®„£ a‰Ž‚»ŽÐ´yinÑÝ>'ïy`’}cå¦wl\qæîý²3ÞùMÜ“)”ñæ!0 ¸¡Æ„™\Zxf MºëZÚÙÛ2Ž­U;•}2ó~$Àç¥0rPJzs@mNÒÇMXàÝãѲa…¹Áß&¸Û‚›V\' Ù‡ÀÏ››å/3gÊçí‰=ì)±ÓhŒšÜç]0ÿfí‰/ÊÞ?È *ü©ð¢‡3†<†( ÇÞÒÞ^ÇZþ)xŠ*é5pdøßxÓp=2›»ÞêÆçâæeãzÐNÞ¹>‡ ãZ1(ËøÞåŸóM§ð7 Þ ×¢iÆ/kjßè ¦äìà!ÇA ó_ÐlØé<÷íàÚ„±AÃŽµvHP^)m÷3Â"@ü¥h¡O66帠w½Cš&|Xj·bÎ~ƒœ÷±«å¢o)ƒÚ®Øö¼a"\u5J¶màÍÝæZäSo³‚è;ƒ+µŒ”a<·yMî~€o¶i>‡@HC#t ß0Ö“ë|j"l@«™ƒ×U‡úWЋå>µ¬‹ûßþ¡7å2`tS€r¸Q¹¥³ä#ýE‹ÈM·0Àú9Áøbþp²ï¼_íØq ­ÿõ˜19w”Žzb„2i=?8³ Ùñÿ±`~æ] @£E.<8‡ÕyS»94ÿ;WV]@ÈLÙá4QÍy(¡È®1`Ô/Ÿ ®óq}Y1rƒ~ntG @Ão˜’ºÍb¢,e¯ ¾†+5»Ñp8åK°†€ïYÊ«³m“·»ÅßÂ.‘ŽIŒõyhü“äçž—_o¿T®xáërÁgß`ë8–†oô4+káMœUR@&³î°c[¨ üܪÌC6²·2nš@háQßÙÞKiäðêó¤É߹Ŧ5Žy\ˆucüĂڛšqª?ƒÚÁ 8j.„ÃP?Ü`nšÀü¡—æyØÕs<"9† à"œn/ùÿ]ž÷†oo±eyzÿQ%1ŸBé K °Ø“æb¹ñËuúé?‹ùÏd8îç»Pcà¹ðg¿²>d`âypà¾G!ú•ÀÝŽë¿áN€ ˜yòÆÇmvÐqu]iðå Ÿõ¦xUÈ]T"aS[`¬%}eåæ¹b’ø-_öÍsl@¤ õ7ÂÏ3 ¬¨ÊžW“~`AÙÊX²Abgdšý+¡ö Qð²çî›Bñ¼¡j´â‘zéïóLÜŒd”âàûûË•vqwˆxÅ9#¬ÖÓ0 ±QЫdì*‹Ü¿×£‚k’ é/€ãÕ,VÚÆ÷ hšÈŽûùWð¾ry<(bË¢ –ÓÃçËÇÀøi‚¹d7¬ÊÍ`m0gäá €ÇpaìÿŽU½½†‹Þ7n\Ú.‡¡^Çföߟ*{ÀZRö±^˜£[ŽÏnlL–‡µ÷·AÒ\ø±r;[Ϫijr®ƒ{ìà΄£±îV¸OÃÙ6¤ËŒuPÆ`¥0À˜%=x9Åbûí¸½ÞÅþéØÌig¨hM9õ?Gn„_\^úG™Š£Ë¡!À*Xµ­у¿” >é¦Ì €ÂÇ]ËiÈæÚz &%Ç—7xl0OÀ= SšZðeª¿*h£Sa?¢ðýƒ„çˆÜ`Q)œø‹]Gäópìõ¨V¼ Žô ðy“³‚fHyÒŠfz bŸ’Šš‡-Û+¢f¬ÚÐý&@äPÐÈÚÆÄõؘÓpo®-¸RÆ ç}wË–ñ <LˆY„püÞy™Ìc¯K[€ü|›Õ`–`õ_K©-ÇL@€AËŒ©=·Žð{ ý/ÃÝMAˆ½YV}>cÞÇŸÎwó)8r:¯¿€3I°h½}2…º_RðåÂoeÌpëº …þ)…’#ãÑ/X@íè|õßM‡33döëáÚἇ-` °µ{ªà>¥ã÷3¨{jPA í~š¬xØv czdl³iX™X/^ðñˆà‹¿<@8WjQ0ƒ€ÚÉA¦·øî4“L\ñ¿ï!šÌË–>îgpŸA߆ó«qZ2nA¾‚†W;݃•Kn7úײxZ°„ùŸAÐ8 Æë4à˜8 Ó•X“?ø4ZNy­’ÔëoÛÚ>ƒc¸Íí%8óXÁ÷)v™çà ”í‘(è*à ¬›;÷ÄOlÜh¤-ðÇ—°ÂkºA_}ß<è¾55Vûbá¾2¤·I¯U‡›á?£m½xËï0á²ð\yá½OxŸ~Û߼ƮðäœzT“Þ¿L¼?¢GeÆ7ÀQóZwÂã¿‘»¯}›ï¡’†I88âl„¼³tj„3àò¤Èe¾™þk„À2`ܯÃ`ù˧=ƒ`(„Ǭ"4CKœZT2½MZúä€S9ÊØìéC Mº½¨m=­ª (ý„Ôï‰fHümà#R{ï<0f}–1÷?!K ŸÜü&¸2rZÁõüÁ?ÜëÜù…lдý(Q.…{/œ/ë—^ä&ÐЛç`‘瑊Ú%ôlž rÈ™6ŒЉ3!ÿÍG87#ð9FøÏ>X©FÀ+Kå2KÌ”7Û¤¿¼iÓ÷žî±ß¿þê$´öa4àãyôד­­Ó®š6M¾†<ÿŠ©ËèæŸ’ÅÈ ®é a¸üÐc¿Ç ¿ß¦>ãëÞ[á{³½‹ý?µZ¼{1Ͼ/b‚;î˜ûŸ²ì/ 4`\q¥'º(–BL ž1xq¢` д#Ȧ@Û™†J¬7`G$XÅ×–,ìiFëÁkô8wÇîa´IHõºâq’ÂȽæÔ ,…€…küqòìƒÓq(¦‘ëÞü£“ P€Ñ†½2áãpT«¦Ëßû¿þm?etÈ•9‡Y?ÿ}Lé\mN¿¥`oÁ÷e¸±p!€*úr|݆½o>øm g(éÿî,=y‡9r SŒÞ{~æÎvÊx»þ‘Y«wÑ·ÄûÚâ})Þnl~F¦yù²@`Œµ«í2 ÌÇõ¸{ fRþþ±cß{ÙÖ­¦Gùù}0Öþ7Ð(·`MÀ¼S—Àà8e° Ž<ïÍAyÄ+V0uÇWì¡03–@·žÄ¿ÌƒÅÿ>,ä¡ Ü+þ_òŒ×ñÖÛ<¡Ö0û”â‰ãbÁ3 T"îpëœ×GqñÆ[WÜeÇïŒk=6»6Šš½íjô*loF`D¦Ïj˜ýØ 5Ï#s«àóãtz±Ÿþ¾k'_EU§m3þ¤dèk|4Y÷>“lÙgˆ €“Ñ8Œ άFïü:àqÀLü>8¾XöÊwÀ g‡”n¢ŒŒFÏZQsº· Öøk2óñ-¿uØž\íýr«x?\3—ÌàûÞ)0!ã§ã F×Ðj‚!€ØCìËÖÖõ&`\&ò|ŸZáp½pC’^õÃmÛ¾]xÂÝw—N˜ÀøÝž‡Å-ñóï*O ‚64?ƒ{ši·?ÏÌ‘^Œ’Ã(tªW>ã­ÿßXIX·Ï‰˜_—œ@ æËF]ä×AÛMyà7— º—•·'gañRÏ„}³+^]´1 € ü‡o³zkë[¥¦u:Àáÿ¨Äï=ó¤ªæCR׈ÅW sÔkÄ»àÒƺ9&fÿÖÉØ©Ûî^€õ¿÷A#øañpåX´ÎÿîE²q¹ ö†NàráC Ñ}Éi<•>÷Ñ'¬7ÆìÇÞÎRà‘òxè©/øW¹Ú¶k •ðnÁý?òþóÉë¬úÈEÞzð( èÖ|[6f.+ÜS3¶(7hÐþ#`œ™<ÅÁõH¬§iò~ù©‹eëZÌ€Ïûȳƒ~Ò¡HèAª_çÓÐ÷iCòߢ‡WE˜¶¯½É¿8Wz§¾]5")ŸsxoÕž9†’©D  Vg<ï«AùÞ+;1~cíî?]⿦&Ø+Ú_ö¹ì©Ø±×üÜHÌŽ;æ“ò<Îlg8ö¬›vXÈXî¢Ø?‚ 3v5àx öòõ2¶îþ¿{’yªC_±Rž0 é¿×F‚è™?ìjü­Ô4¾MRׄտÇgowÙãyÍr=„À!gÎò>ð˜ò>*ÕïúÁö]¦›®8S‚oñN¸à¾XÏØÔŽ“Ì!É–‹ïðžÅò¾ §ˆ/¶Àö\Æ¡e`©œÐ8Nj|Ÿü[€ÿqÈÛä§ÙÈ!ðdKC@k×HÐ"¾É¬~z„¾÷aìÔ;ß6³÷ÞŸ< ¨rLÜîþó°ÃŽù¾à½óû·ù?ýÀù8ïO¼·Bã«á¤ÁÐ&/¾j³ÌLf+Êz;9ݔ­è¨?þ\ÆŸ ¾-;×4XjpÝh3™¢Ü$̵!¡1TÍýÀ¤Õ§E:ýËrV?t—¢3ê9¥.«ã2ŸòŸ”Ïx•£_çK_÷+½æ9írîGVI}Sê&Ñx 0\ìí~Ÿ½³ôûÇzÇ^0IÓИ”BL ÌðŽÃa G“Q2#4ï`ЂñɨÝ1E/÷<"c:Ãò #J@ºµ–-ÆQK×ø=Ø75u–ÅUJ¶ûeüñ&b(ð m_f1¼5P……¢S0Sº6k3Þüvu`P‚ê/†+ÿcЄØÌ0DaÊ]Z)é5¯ºq,ßtgAfÂP.ÕY^ŒÚ†óQ²™g&)í´†º:üM0³·B˜:Ô¤w;=ªþåRƒÕ üíÞ~/»ýu§E tš³S=L¾5ä^4Tû«ü¦Šò`û{ŠÝ»/§ÝõDi>/‰èÄZÚË'c´Xn÷Ù#ž» Ÿ`­@o_í7–×ȸŠz™XYŽd|UýÍl€ž®‡QFÀázÈ”îÞWdþ.̰Õàð¥)X4ù¼Ù‘;rŸý¼g™½––~,ñêÇ´`wXöiô~ªÿx²a1øÇVNªÄVK¸'Ô@†\£=CŽGq‡oì 5[:G ºJ8ÂoÂIˆ~½ÃoôÚ^>:ö§M`wMz9ôó¥ ÓxQj€ÃB>´Ë)Áá‚ÑÒ!s Ž\î?p¨•ñ˜ßã…E– +ã77Tû­@°Bû×ià E*PY)êȪ.³±ÎòÉlìÂÅØzX Xez~Eæ@,ÝoÀ6‡Ji7»¬ÆÊß¼ªŸÅ7ÃP¶ìn©†¥òR¢i W te@æ¹òc°wû¬ÄYq!Ñ+äç?†z}%@ª<Ö‹úûCóhÆ9_pRçø`ˆà2rŽ Zø)@'@â5.û1ØÞÛ!—£5Ô¾Ô8Ô5šÒÛm5@@Æ„ ÀAÃöV㣠÷”,ÃL9‡ù]hðVàðç'䪂i2fo”¹‘+ÀüS°[m¢1ØÑ É%ɽ8§c§¬ñÚ³urI2=KjiЇµndtžo˜a ®Tý­Ÿ‚ ƒßpÂî3Ãù)í§Åq/ò)CÝF° e+ÁÃn²Wa¤Žä%€½·Â(ôéÅ l•çÇ;Aš¤'yΩüý¶ïÏöþFŒh:guWKPŒá»¾$5€âx‘ÁméÁi·_ånjÁɈÇbŸÚ~øÈù58Êuç‹ò¨œ´`™Rû×¹øúÜxôï/à{•è§+¡¤ww'´ƒíæg?dÕ§_LÌ;/?0wƒ§ÛŽõš|¿|«÷¬ÁÏmX"fnÎe:2n/ ü»Áø’£±§p \Ë|ž\К†ï„kk±C[Ôû°±t¨`ñb´z´[~žüo´B`]è䲡ʩ(>¬èdž; ˜S­-“Ž‘YX*< t¿a*2ý\Aø¼Ü €3f(%pz¬Á$Ã2ŸÜ]ˆñƒ8Š"g¬‡!Ay;N ç¼?Ó¥ß\ÚoèP `Ú¤a¸] È•f@C vž ¼$@mÀø•¨ï:ø;XÛ{ P-Ÿ;njd°¡’ŒÊ‹–.¹ûn`½‹K¡²ò)ð C¯ÃIØú¾tø”†î¶+™š+-SZ1 ½±½S†µw5PÐ÷ÁÇ“'ÊÙ2ÒˆW h0dj dï0M7?‹gKÓ(Íe=²ìË{Ž÷™ÎÆ!éñuxÀ@ötqŠ Îpe ‡Ãkxi ÖuMè<ö@Æ?GðÃd|:ÑÞw_M•ù±ÇlØ`ÿIŸøÊ… …ÂY°ÀSàPÈèiY¤áóÐ G°ÌeŸ×õŠ«ÇÚ…óÕ0½‹^=ü&‡èÃÍÃõÛÔ,C=ãÏ®Ì`Õl7ŽÎž@<žøF¯ d|óÒe_—›€aúsXa˜rdU`ÑšöȆrL¾dI˜9µîÉt Xa áƒ¹ôœJSi°í}´Å_'’sႪ^‰8Nýq|Of#áÔ½W †ÜýuÐ  zÈÃ=é)—G4?ezÒÒ8¬óg^H”KG?{vÞßÑÆäâ†[”xSZÄ‘y… ïõbx>îÉÀÞýøãE¦Æl‹%“ÚveŸ‘OÄ!çwàÔÅÞ?õd4Ìq”®Kiþ|‡‰žÿ{|άÍÉù) hG àúÝïráôáã%ÆQËà—ŒIƒöj/Ì×NåÈlª†«ß^ ÇY»%Fm`6>ó·VîÇDž=„™Œ8ßg™ H¿M[:‹gúsЦôL/Oš çÏb™rƒñyO‘Àc @XnW b0ŒDC·WôPßË6 èÐ%[/†àBPš‚†<0Ÿù•Q\æ×ŒgÍ—§ãƒS«1öé@ûDâ]`Ñ5kŠÛ:H©¾2ï)SDÞòËÜqÆÁ`2|¨ÔØ^À¹ªwÝ…/Abœýò—ãói ,·–]¯4b2ݦM8h«[ŽÄy ØV-ì–9‘. ôÛû\œ¾®îÏI~j\àÓˆéÀ>˜ {q/Wÿs ¿5"ªÝIJ-©ähj†gcmÞ¹üÈàÖÂïâË<¡‰Ãè§£#Ê‘n ¸ZÜàºG VÚ˜JL·ôÚy¶‚·®àŒÀî€W ó¼ <Ö=”‚œÓqd…bŒ¯8¼òÛ4*s)ÃQ üýï"Ë–¹ØÖO3'?\C˜·Òc¾C(^ˆoðþQäqžóê…щ'âƒÝÇX;5‚((]–™ÚÓÆy[Ð+öÃÇwï¾e0bŽs5úËŒ!±+`üJ#XT¸– ÓÌáYLÉX)¶Ç§±ßƘ¬Ж“‚@óà}?’ƒ b4ÁCÌe….쪜TíÕ„Zç©w‡ €2½m{’c;`‘ãѵ·TÆÇÊ…¯.-ú§†O²Ä,¤aïÏáFŠÑ¤ªÿÊWŠœ|²U÷5-µ2·K»MM0%oÉœÊ|6Ú2l±8×@<µ%XZÅiZ†Íå—·K~ÀPŽ÷m=ÒÈ» †ë}n€¯‹é êþżÑ!¥?¬Ä:3^f\•”Wjm'ÌÍÕ8 0ÜÀ×GÉ?!C’g]ÈÌ™ÅÚ}°bŒ¯xÊxdv.òQàZwêካ8…®Ä;üp;$hmµªþ+^š6)Mų„_½{ïú™ÀÅ$ †_|eöëÝqé”ÿ®Wöbz¥aÊ’eü`ʈtH5´ ' ¸÷Π”65É^ØM&@¬€-À£Âí` EH„¯cÿñUýt€ÏµcjnÐ0o^¸×Œ#D†"hdïòÿãð8«Àñ6Çè'œ`‡ LIÜRôWÅ¥ñ‚ 콆1^! ]§œdÅàé@Á2¦½wý$îÞçü® €XŒMB“x¤—Ÿ¥ÁxÆZ<ë·%±éǾßqƒ;c#0Cëç=‡86.¡`m&hÈþ†\|sYôÜNé¼i“lYºs­AàûיɵR xTãÕÝ1à!(ÆBPhD­/‹¦ÿ3 åEß0Çã…Àa”B(&¼ÓQ-?÷\‘;ðÑSLÛ%¥IÂÅèºJJ3O™™LFÐ{×_8.^P…Óq4oAq£ù¡O7¬mÙ›XZ6{ú6NSÚ–`gÃñ>5 ‚¾@ A²?y·ELð?¤àû‹åÀwÌ’ÿc¾¯Ù"W}§ü.Av ¥ +=1¶.ã»Ý Ì’ô¸úOaHÔq%VäÊéJj´ÔàÊ>€š›ÇÓ‡’ßû+ÓéµHY33Çðc!©†’¦23˧ ¸åN¯e¦8¦´l—ϰ¬yâ¼!†9 œ¦M˜Kg~¶T6?„à–!¼'¦ýq¡2ûxèÁC‘5ºC›ËÐþ;}á®>wªù6š!ÆÂdððÛÉä¼Ó„@TH: [Ã.†*æU·`èî…À¾0˜'öüT§øð.SixÜ5)nR<æ‘7iÒ$ûX†Ê±“ŠÇƒ}k¸ï£  xºp~šw\~nœõ[Þ¶,ð9rüïM¹HÏ–›xšÐp-2pé|™#×Z|l´Ù=Àç·Wi`óˬéDKPøêF…ÛAÁD ±††Œš{}aT2öɬzޱw=ÁeZ®£É¢Nvè—‚éµ^¹Z‰W,qRæKÊÌšWº¡™xü¹ Ë"¹÷®?Wn˜?ü&+°k0н/F3WŒñ9|SktU!²¤eËr#¨r,Ê)ASÈ!üËQ!Š®Õé+cœ ·L÷/Äm¶€ueX§± ³ßjK¨ÑÉÕ¥Ë <á& …¤@7†³!ÇSU9é•U{'ŽÃpÙbh¼®XÄŒE°Ýqiìy±6`:ÇiÍøH´ÛV àš`e&^“@6€8PºqqnXR<¦‰æíÒqý14sŒg+6wï „p\tüÏ,ªŒãisŽ£iÃÜÍè!×u£ÄEHº3DKjàF?{^ÜnÏЬ”é©]…ýo›°×)ˆë×4­µD ƒéž-"Û‚•ºXÔFmVdljJ¡ÀÕT‰R-€Ã`­)Ûîì>n&âjA.çåê;. ºç»ri—þ8hÞ¤QŠ&qbéºÏH¿½'cåÆþLŽsÏñ¡=€ç”JWŒf4ŽL[ù—³è3ÆYCŸ½£6CàÀáæ!èÇ^@ø­a‹BB€é†bú2Ö5¾Î[Uš|qxÿl¹2«½ä†ÇÛäbW{^¬€/ •¡A7â3ª±yÏ)?¶'ãi3FžâM¨.N7Oá¼8†W  L>×ÃpˆF¡ržÞ6G›ÊMÏ;䔬¹NAmŸ‹Ãj^‰u2gbÃÚXüvh•Tþ ÑBTCYXfÊÖZǽœ¦ã®1X¾Ü îþã¼½»P'BÎÜ&ÍŸ‹€¸šÏµcÄÑcX"š–‰ˆN_¸Öãã\ =X”^fâÓÙè\œ+XJÅ‘ééòñ’£IÆç/&iJñ ÈÍÉä ægfd~(,F½®Ø¯ÆÔl®LŽïµÍÞ˜i5rƒÚ.W¿ÐcwST•KýØêˆ¥8èá*ÆWJÕ£döHååõÚ›U/µPµGÁbFÌNæ·"T›>Tåòb릢€ë\FͧnC¢8¼Ÿ6Cµ½~îÓŽ*jv…>j¸Ñrjx¡+Ž/þ›Ï9ׂˆIœÔÙšrÂØãŸ}¶eü•+E~ùK¬[¾Iäºëì^Nº ƒœ¤É˜ ´œÔ0Ž:Êî^ÜÕaF¶9¢Ïe(ׯq®Ð£Å©¸¸®_ÓÙ+3¥Ï¶ˆRqˆ'd›*Pw` Xg<)§~ŽÇÃ@ìù=ß¶j |Æì:ä1 H²Çg&¦­R \2Ʉſöù¹rAy™Ô ïxçÃrÝz眦Ûò øšy€:,ÞZ;j4¿” ãïS'µ‡Ž‘&0OM5, WW©,½ÔsìY¾3z­u¨±à.& Uìú@ `ÕêiUÅW²Ì‹äDÿÌCidpéúÓWA Ý*Måѳ¡ìƒvy®±¶ E Q‰Ü(ãÂåî¾SOE+C•=ý´]»Ï=„-‹<÷œõ»ë”¦)þïâ’áyf…»ƒQ˧W‹ÿopì+· H4¾÷-Xv³Âqî Ó-ÎF¯Òºp:ÒwóËùmþzá^w®,ìÑs÷ôåâÈø¸8Tp[ ãì½¥áÆÙ'ÛÕÿ fÇÊï•gVIÕ„éÆš°œ8QêfÖú¯gÅ`UÛ5m“Ž•m>ömÚçÙ¯ÁAÛÝD\½§µ¹ü€&iBPÄdr®ÀÇZõ$ت¶v_Pm3\°¹Ç÷â6 E5fÃÅ@œ 0V~„´aøËu°i˜ãÃtÐäœà™RÆA\4<‚¬˜¦Œ?mÄ£`‚fe€yÍ„Vþ6ÐeuÙ¢…ÿµRŠáqËí™g"3<üºu"·Ýf{|7 w Ξm— ÌmÄn|8×ðËàâN€¤t‡Üܳb…Mãâ…©äîbŸÉ2”©CƒéÞ»~FÚû8À!5ƒ>1¦x¡iq5?MéÞóù&óã¬"ì£Ýkûe:¬ÿ3}™µ w\„F9DÕÀühù*;óAcôΚÀ÷Êk*ʼÑ`àžO?cÏU~¢ÍC·aaFƒ×¤~½BSpD€©¿,lAQTsãUbJ±`N$<k6 ¬Æ9õ^9zíP8â{W®Ó×Wij!x@Ãàf€ùHS_é—Z‡ qÀŋңÁ•÷@Úþ£¸¡ûDHA núáªBnͽùæø­ÀÔ¬ž'P ˜¡2DÇý¼§ð)…èeÓYFË5½'‚úµ)xh书Ü|]ˆxÕ˜¸"¶…ütƒsÊ…Z„’ ‚̓mØjü' `[µß+7F@9„F€ùy-ø&`Áöœ"Uh”Z;2{ŒT̪óß²¬é”¯~ÞÖäí›ÌY͆W`Ђ)9 è?LÞ©%²ÆÆßñÝÏ%u4†cì „á‚)‰)Á `c ^6Î)3SÄ 2{Ü804•hB¦y—l«ÀOB3Vå/’¿aº$™“ñ¨úï¿¿¥x÷Ýñ‡wO‡Ät³)í?ñÔ¹áQ¿ ž;@|;š›£X¢™cJeu}‘9æ"A{gã¸õWßT°GƒN§Tßæ]8?ò0qݼõ^›3‣4苨ýÀ¦+Çh·[`è®AÇøêG‰Â o sç(é+[ $¸æ 9»²ÌãÛË\¾\®l®†þØØ#½=ýb·¢×ÊÄÉ W^‹‡ À¢dò>:§w%‡ž1Éê\ÊÑ8€wqÉÔóÅ;d´ç]„Si4ÜE :?Oz% É|é’ xIP‰“t’Éx3çIŠÇIq ßY”Ô’2‰!š­NKcqZþ ÿügX‚EéÆ €8š–Zþ¿âNÊÂiyþy‹Ës¨ (^>…üà:MÄć6ŸsB€ãhÛq Y—ß ðl@—Žëg¼{ïúKÅÙ¼³B ì²™›’˜í$,ÎÕ€^Á:Y"&‡Ê%3–‹¦ëý@¯¤î-ÙV1%Uÿ×c便1³l•«ÊYn@s•TcSNvè™Å[žÓš›ø. ã`Q¯Êræ ,€QëÑ‹×Ïoðk±†¾~q“WS[*¿¢škÜÃètãty.­õ—% )É$Å5x‘|©•ÄÂ%–†.'æN¿gžaÍ[‡LU Gpàúâ&(ž³ýxÖ‹Ä¡ À¥hGé|Û„sL½w™7wX¿Àö i µ@IDATèÀ'DüÔ!GÇõ§Y8e`Ò$ [àÕ†Øt†¹ƒ8etËìf?@v@c˜ýȲXþãÌ8Á ñ¥®,Qó1 (ùfi Áñåö»J°’?ð˵ø¬š-õRÝÑÏ™HÔ²|0¶2ÜcÓ"gÁ¼[x\›Ðò„Šm¼$VèiTpeÞV«ù%R·I¯`!hÞ‰p‹Ðä–af÷ŽžPV%\HS LA‹äN†Ó)=ÕåNË¢«†@Â+„§yÇU¾Žÿy+Ù¼Ùúã†6ƾH¥«a‘«Ë°Œrï]¿Æ© @¿ù§ÚÓó]Ó‘rÔoLx|Ü\ÿ¬ºãå “ð-‚F+¬@Ðt¶|ñj?C ÑޟÆà]š~6f'lsäâÚž‹¨F@®íç§ÁÅÆÛ†¦E+úoÚhQŒ\dšÜÞìígO«¨É;™G‘J0‰¢™)=~<„øO„dw%ëQšk×Ú 2ª;—E„‡¸…€³郺_£ö0°J°r°JSù}[üþžÐ Ìá²$ÊX¦È–"€)5þr¯&GÇõéÓeß ñ„¦Ú$"$ìØwº@f)YР¤:ö_¿Þö—N™YãøU!®àãÑ`--v™0óâ¹erýÚûSê«ññ´ðTc9 `™’fÁCï2ÓYOÊŒKBSñì•ÿÌÇ—foIv±+ÖxÓ䨆§åºÆY&çª[,ýÁÏÛ@6?Ô¼µ¾3Îó*ÊŽ’O6K^vdŒ›‚:Ê”yU£WÖ%ÛÔ¿rµÉ2xŠ\â4–N]AZË;ägX‚›‰›ÊÛÞ‹¯40=7jVWC?Wùa\[hdKd|[éfî<‹Ç]Ö£ÀÎ0¿Ñ«Õb¥\ÕÏ’é_YèMüÒ÷½ÅÞ˜¨©Dq™^«ÀÖ@Ðñ¶Á鹿…,„Gtzì`½hÏÃuó!=}x-§oü\GO5Þ-T'•‹G†æ9‚„+Ì%ûçâeÇíÏ>ko8{@‹¾4ŠëÞ+ŽŽÿy¼˜ûBžùOÚjŠoC ÿ¼è³+ã1N!§F@ð+Ã< œ0Jfh"\ÃéŠÑŒÆk½Qþô7U–4ÚѾ-™[{{fj€–%gãEÎËÏX$o~ ¾h<·[¶¯ïõ:6wø\&7}å 9ü=[¼eAK&•Z’”טpukN£CW¬÷_ýëÕ² qDÖêk à8ì©w•ùÛ°ðß0mˆsc†¢„Œ©ò¡«ÚâܶÉÛpÄh™+~Õ“dÜm²~6ì ßZ(3V±¹ÛïWí•cÍ@å|0曃æDŠÎé²_# À,² £9¥{µ€É0î8~çׇ w`šù{Ë­¿ÐÍ‚€s2±2dA¢ }•ì‰Ù‹–…R¦‹âZ¬Ü?µî h‚I†G…q.Õª|AÂ.MÒU €=|8  ]ƒàÁ£±¹{—f.4â³ «õÉÏŸ½Ïùs@Ѐï—ùì#Ë ¤³™åè„é3Vã˜#´ oZHL”Å>?hj,_NÉÈJ<K- ‡*ïY8]Ž; ^ÿqùåå•KþÚ#ÝâuuvûÝ]¨ÞA3?é“YÚ\1´ÐH÷³5òèö"ë±,ØšUAç`èT£"†?—<Þk¬õŸ8£u°ÿÚ¿ç–V 8m’?ñìÉþ0ÿ,2ÿ3;¥ûÿ’µ»0,hð+ =~Ø ‚ªÓÃ:™¶˜J*DÔID542˜» .F¼¶k⺠‚Ê Ëúy¦! ÁBD[[m*àhŒ+„¥M<.úÃrv~‡Ç}Ÿx"ZQÐÄåMÃ!mWhÞ:ÈEFœžŒBÍ(îÉz,Fï5 Ãu@Æ lÌVYj¾­âýâ/ ô(pB@öÞ†ü¿˜°5›€fG–¹¶€.ˆ»î~;€¥¸Y€e}´ÿkûÙÜ8CÐØ ¸`G¯× :ýÿùˆ<~åjõ-eÓŸñW¿ãß² 6Åæ>K*xlÅ0cíYÝ!‘9 P0mToJ\ã*‰g¸p4j Ž&÷Ä-øá‚¥¸xh[¿ÕYÙSòË;Qfr3ú9nWfTõ?ŠÃûLg’QýWc$?PRhI¯ŽÿÕÀ—§j*”A?JÎ2–Öž2©ÅÒ¸ð4 £`›¬07«V·1–so$ž¦ÅÍÅUH ˜Ù(X»®o©ÜI‡زc³- ‡kÇú9VÔûV9i_¦é‘öíOȯ—ÓÏmÁeÙ­Á…°3är ðƒõl×%B½¯ÀúŽŒ]d Kþ8 ˆb„i ÀË5ù7–{†-Ñ[Û†„Û{ý¾¬ðÖ}ú)Y}Ãzo›áü€ Ö%˜[Lëi 01¤¦mJ5€è¼6;£§ÉÐú˜©É8 Wìbp G{ïÅ6GçõyàÇWˆàu™,OÖüu¦"šÿ=›2½æAØA´¶F£ ßóá[ZÐzŽ~jQp+)½W\."Rµž³Q ½‚{:•hïÂÿ:H!•d­A8µs‡çµø¯àÞÓŸÓì,€â®5“Z8YfËYˆ(3 ØžÁ¥Aºî½ë·qLÕ-@§¿¹•ÜѶU–-à yûŒ ‘8Y4øt¡‚pó[éÛ*Ï<݈ͫèù!\r 9Hp@vÝ)Zj (†‡ÞÚØËýÐÀ {êßÓ*¾z jÙ×ú¯Á Á=»Qín„ËõŠŒ+ðL Ò™Ê1íÔ‰§W5 œ]ý`g3Ú^ˆ£Mçž9ÀïðUñàOî” V¨ÄQùêlÇ¡·æÊ3Ww Ö­³áqÃ7…2©†)>–ª¼BOÃã®Ä¿ÿmCÈèÊìJS—ù£˜àB£övKGµ{—ûçÌW0r¸¡{ r±Æç2"ýÑ{e¶œ Àö+¦±ûyÌö,hy²HÞ"‡É%rœ|V¦ÀG(F3——¥VíÌV÷xm¦]Þ/ßZ‡íÆ|ˆ´þùôyl‡÷ÃÊQÂã'Hs=ŽûÐlÿMèݲVÐ#ÇÊPsµÇ€ì Ï˜藙‚©¤­§† Tõ|G@q ´ðŠiš‡‰FÄÜ»¸*8Óp×f‹L5Ÿ³ ÄãÚXûgk%·V8"„ ÊžÐÃ}üj5w™Î¢‡ÿɘ´²«ÿJákê$xÄÑSƒt¦WfÖ1>q ѤMÀýDñܳ¯sù@4?›Øýg­Ú¦¥LÉXýý[#‡Ç°~(YÏË=7È“r5ô› ³à¹̃/Ÿ¦A0”rqî;ÑwÙ¸•þ;nó/yl½<¸‰ |¦ËQÓN”¯?çIsì¯B`Œ7;k:^'÷mä@c~ܘ‚a@,£Ø2m5h~AH‹a|¾`¤{ݶa/ô~ >9ON]éM„Ñûçò¢Bo8p ê5H Ó‡hµæ„\g´Ff;Q&YLb’‡é>[ã:{V ä€ð|  ëÑ] cÞÑöÇð8 ñ]Ð! lƒÆ+óåA¢üIàIÚ?UÐ!ŸK?'®šŠ™{×z­­É ªçù±—eo\ ÌEŸ¨@Ååš™W÷*p½ •·wñÿI†še Fè‘&Ä’Õô-ójýÊèî៺øGãâÒ-GSÝ"Ïš ñÝ»† L3.]• S7àCÐlëÌYþ7{Ow]#¯yèÿdêMkäî5˜¬8ÂÿБ øn”ëd *ªtwµÉÃGìù© p€q8Úd—myŤ°d àP€N—³@.lé–žÕò Ãj’ã0~2ý7o›/[!÷kóêsµdš”Y\œ¢cúåͽV0½‡¦»×\1E°µHk=Þ€¢Îµôo zÔguè‰^™S%œô€¤4™GTË À=÷lµÇb C™zY?7û(M5Trªò«ËD¾ÇcÆ PÚjo7 ÐÌ…¥aMñŠ­ý7Å”âôJ¿»¦@µíýY^ÝDÜB@z…†1iªrŠdL,Y2̤Šdÿ´w}ب†ĥó±Ûíj¼›ŒÙ-8]Ž hüm槃0í¯G:ý~ü,}qÑÑò.¬ èFþ™käµ÷öÈήj¯±öy÷"‹‡ÎÑŸZÊ "Íl†ìýuÀ®ÚL!ƒLYÈ  AH̽º¯»Cc¢CAW÷pØ€‚å¿dÊ,wîŽq0®•2ûÈiQ¶qópýqI“!ÒãïÄf×\hõÂÐt?0ÈšžGäŠÇH|ªÔÜZ™Xl¯Æ…–‚DڲƦã :âì ðIµkÚyzq’Ì`+ô3åâß¾QÖý×ãòÉ›Ö˯~¼B~øÖyW‚y žŒo*¶;Ï!Ì“a15 fíb[‰ ‰HcÑ|'„&à€ÑЗ" €t¸4Ÿƒ©@á ¼qÀ7  ³t˜ñ$^á Á+?Ã[]yHðœƒàQ¼Ê™FÜåf*x()!/5äqMtÜ-¨NÏ‘ù]ÉM¼(®Í.üŸO· s¹0Žºæ@Çÿ.ÕB4¹=Xg¸çA!¦œµÁé=õ2I°IFÈXÈûLÜ‹žzR’ü‘c>úí±_ìYÛðÞù^å¡0^4Ý*¹ÝЬÁbá‰0 –J‡S† á>ϾENðõKgf£÷h¶3 ‹Ãÿ.ËH–ÓT–Ï“³[(``«0z"ÒtRíX%Î ¦ÇB!zž•R.}UQV 3‘mÕÌõs…ŸKì±²õ‹ÏÈ]?_)£2qÄÁ= KàÌ€@!vSá@Î?k[ŠÕ~áØü»€‰}XÝyF5œWÆ›ˆ )²_íá©¿+5œÖxL;uŠø “ñ:節qw¢m`ø4ÒO¡€aRö`|Á€j˜Ö W¦¶;ê´ÇUË{ “dOóeºûï·© 1ŸÒÖk=s¯JO xJª™D@)ºªp‡„ñø®&™)-Yr;>GA•¾Q¦I«œ‚=}G6²EÍ1· =$Êè9ÆfÊ\ºÐ¶Ë CnªŠsñ Ò©è–Æ㢿Ö ŒnxÀâÙÿ²²k½ÿÐ*ÞM—£gõIW£_Ã=~‡`wӢ鷓€¶§Ù•™€‚ °äÖ-8ý<+€.ww!aß`W `ED—Ì<»Þ3$ !2ÏvÌØÍü¾­¾Ñh<`TN O÷%`>=v1µÄGi†qÃþ-3D>8óùà·ÚÃo2%±©ï€ Óê^jRÍ'PG‡±À*Ôa×ä‚ó1´¸ãôBø 'mûŠŠaÙ8O{ÿCµñ\úË=)Mâ©à¦% “(ˉÙKNGoÏ+Ôh¡±n™Ü(ëäô’}85f,49Óx!2`f]™n€ö9FgvVäÇ­—‡Li&@ßPc 7ð(X*6lÆÓ!Ùc£<ÜÝ뵫²©I²×§¼«—ò¦IfM56~ŸÓ6к½Ž.íý!U‘o®[£@ ‚Ä Ä €D ‚ ããcuI2íÇcG5ƒnß3’ óì‰)Á™õÖÊ&j§±1šYSc¬|b§×ûl›Ý‡€6ø¾aަö°ØÊ‚‡ƒ¹zŽÃukp!rCÆ?¯·AûÄzÁ—‘³LË×£Cõ`póLø[‡§]Ša” œÛ'è0[¦ ¸6ó¯=޹u¹­‹F\‡<÷¯ „I‰w©¯þA!‡Mëâè†#ŽEáG†Co ö¿Éf¾±Ø/—[ âïDÃ#säå0$¡Ž4ê@x Ð:¹ââ;òù¼Ü-_ÂÝ7äa¹<$÷ƒò“ŽÌk£W‘Ÿ®Ê ;`>s䌩e^µÑW{a ´Í1> ’èå:2Ýpø‚ Ë`(8Hp€i«¥èpAW–ÂcMàœfϯû®tÛ%‚ïF‡ÂÕ‡l`ÂHÏúu&€ˆÓîÀðƒd6ÿiÕW-`Ñ";æÖâJ¹–‹{ûíHImˆ",nSäÿ'Á#5 .3¦±‘»]££KUówÃÔÏáÊ=ìÑd|j7œQÀÄ—`ïÇä\¶K ÀY4÷œ\å§sødÈV §ÈÁ•ÄM`í$À¡Â ¹SW!§­Ùt&4$*0?®\-ÇgµñiÜ`ô¹Ü»-Ò 4Eþ'¡KýÔ; ¥Ì«0FllRê‚Üß%›z»üm}Ø›{È€Væ…åS‹”¿÷RX쬒Ú8ÏÅ1FT—ùè÷°xN秊€í¾Á,z'zÇü†öü߯µô/œî•ó“ÞÊØ<çäÁMlÏÞÓ¡:úä:‡O:d`öÞœÓç,N+6põ+$ìýgþG¼b.ÊÎë#ж~ŠŒÀ¼Uè,€‰ù¿ï>[@ªÜº<–cgîÓ'p¶€Çy¹} 7Îõ/ ®‹Çõþ¿ü¥Ý.̳ÿ£PŠ5n5þßÿyê)›š_'ÖÚTëÉÒ3~6úçr¿ LÎ1Z@oHkÈ¥*äcïOÃè„: ¦È!yèè±Ïæ%{%²^þeZa½Lž a]ꎫa²8ÂÁ‚ .ADoz40‚éí‹bÙ´P"¸ŸÁj0©˜ v¢”±rp2Ã`¡ï»o‹,'(ZÁe?^!ÝÇ“ª)µâ}i?)ãü;áïP²((¢Å½mÌL<ªó\Â{;´w6‰ñÇT}'!ñðaTó5ßià¿'vØÞÞ­9Óöû«çmÞŒÓ2PÐ0%8¡³»%{C2 çú©òSu~Õ«°±D¸öþO2eÍ2²[ “ÿ¯LZ —x¥p”zšdþßý½ÔGÂe—‰|㹕… ûÚ9f&l—•`ÎCíß„¦¿)`ÑfV€*úŒ±ÑX°t ?Ýh'üãáùƒÙ@û§)L¢0Å;ÌôÞØý× Õ^û¥(ZÞý*¹sÃùP(ZÇnl‹ Ú>õ>t5¶ ¹@áÀsÌÏ¡¸³×ǃaºU~XûZ rþA£ñöÏ´aÕ„å×P.±%óÅÁ¤þÇžö»¾½Ð«Uë>UýŸBÃŒ6»?)rÉ>ö³Þ¯›&r>Ü-ÉßYž›ªSŸká'=9þ\>¢:ezÆ;ÎÛ<àz €¹ "‡ ye¦o´=$™þ]ïBFȉjøUWY!ÀûRŒªÌ¬×¼L€hþNTž·®BAE[×)pX£ðç?Û/éçËhS Pš^/Xžcuô´š2t À|y-¬ë3ðØpì›ÈÍ„ÐKÞÐpHÛÁò6€×Ëíògb“·È‰¦ÃÂ2߼?S®–»¶¢Ïû ˆah»E(CÙÚa΀+Ñ.µ `f޼ª0êúnÏØÞñ‰Ÿr,€i€Zn”ŸÇ8x±ÿ¹ ïÕÊ’Ò¬dðÛîeÞmï˜ € Õ»ví¹Ý‡4Nª¤¥þƒÃZ mât”à?[DNÕLÿ‰'­¡P×D€S̬tróqã]¿æ¯šFÎÖkö@dQ‰gp³!‡Ól—_.rÜqØÈ &OÝåš –„ñI¦qôm–Â-…G&¿áûAÒ-ï~·È~dm4z2­“?y÷ÊWz_ˆÌ˜ ï–/à$žWK‹œ åJW(œ6‡{0cÀíÂ,”7BïøaZ‡‡…Œ>ºTnó¦Е‚[ ½ŒW‚0:ˆ†¦Kz­Tý’m›R’-BWŠKbÛª[¨åmFµ7A³d” €WNö[À­e˜=ð¯_ » fî¥p“ôÓ8GPìµ]â_¶‚;‰A6Ú¶gç>6ÎÜÑÃi»o,´ß|{‹=ÜK— èÊ>{gÿMÛ/@ÓÅ£?ŠKÀ¢kùˆCC¢yü}|ZƯ¿žI,bQdà”bRC(ø#n)zDMJ“ÆA$’8,à9„­­±eà˜\ç#DZø“òü÷ NÙ1uª+‹¥+‡uüÐ~‹‰À×áì ™™‰8Ȼن†™ÿ¹ æÚ/¸§A7>0’ªù@8ø˜³7í°Ãõ?h¯Åðhäb µÉ¦¾Lpˆg#fUxÙ$o½O¶ùëÖs °F¹G]45¼§!¸‡p%ÇŒË-âq5€Ä4X—«i TàpEwjXÁ+™O° "’àhú¤4‰Ÿ”.Ç÷Ñ‘j~…®ÔÜL<ŽåWÈm…Rņ?-×`îÞîìÓõ±ˆ o—Bÿè0Ó‹ÇÈ'M ®L\ä½ÅŒÿŸðë}_÷€vH= ønA&4;õ~8®…@¡všW2~’u†ñÔ°z÷mèñŒŠÃ×TF9I¦Âˆ6ùõï)^‹i£Åœ8ó@ ^G†@ì/0=ó°HAèHÒö“V¦®Hd%å¾f¬W-XÜÕTT‚‡gÚ¤¸Å#>ÇûyVü¸;a´üÿþ÷è5Ðs(€Öfÿ EÚ9úè­ÑÑ‹¥<0¸„ô-%žìJ£ãmò?ùù TΖ_y\wµÝ¿ËûÌ@ gh­‘{ OðG‰e…‰†¿¨HÚV!›Ì˜¸d«2F@šcëöaùÁºÿ:¿¥¥^êÞÞâ/áýÒ²á/ƒ ˆ@Ò¶Çdæbs54ÃAÙ»+WYouP[ì™uñN)Æ“4o&eþØ*mÖ$Ð zë 1‘ÈI iE%ÅKš?éñ»ƒƒ‚Œ>§3o½Õ†Ïþ‚<ÅJtÏé¼gåOX¬Ã´Áx.QÊ|¤‡äò7)PŽ“Ï¡[æßàÿV^‰CÔ7:+?m¡,<Âö­Æ>¶Æ»û±BxCn¬•ªOšî46cL`…7³9X´WŒäå+åáSÆËÑÕ8üó§Êùu^ ¦þz¾° +*bÀ4û´ýÒOc³*öà\$D-` ívb¬þ…Òh Å[*ößÅåÒáwa:‘+ ¡,‡ÊdxÔMõÓ@Æ B<ƒq†rÜ®y™×Yâ©ØSßÕœ€pä‘"KŒ\ÇJ¬`ÕÆ ìÿî»í™ƒÁ—_Àg2 +°Êoìø¹·?XJ#ä—=`†ÏåÇ>V ö`º°¿D-Ì[”û¿/s/›$ûU­”;×D¢ˆ‚óë.}ÌÙû8Ø ‚â{r7X ¤íÚ ùÑ–|lÊéüör¹þ?[ät,­ÇÝ_\*w>¾ÃGKö²e3†=PĞȢ`NÚ~#—Ü4K¼)âQ”ì ‘Sa©àt_¡Þy 4MIbò' ³,9(—¡‰°¢Åä‰;üªWÞq:ð˜crKgMF1I˜™8 %+*Àå_™Ÿiɸ »¿ÅÞôŸe¹î:ûŒ8”€ ´Ü'_G#¡˜Ýu؆…Àt§ÆM¸K6÷bM,PÃY&+7ˆ Æç|?¹¥pH€•.Y¼«×Ês¿_'?šT)˜†ã*J$§3ë{É:5ëJä«E2mDK=U+õ®îJ\¥Çñú]wåcQP3г ò1’…†.núpÉfQ”æP1ÑLö€ÈB@k×iæñOÓ‡~£¦aüý2ß+˜Ÿó–ñ±áÇ’4µñ% ‡*n ’YiS ÔÓ$"%MÃ¤Ü ð$(D†62"×Òóƒ\*ÌÞ— ÏÝt*Ðñ> >pÁ5ÜQ8c†MÅ‹ Žùn¾ÙÎÕGqyï½"z„x\|ö¢Ô@T$jÓ´` {ûÁ¨%Z5x;ÿð¾J\pUIš¦ Ô|C.!óšøÓά@MpR\ƒ‡%ªÈh:\zÌ•€cK “•ñ¨jëÉ@… KAÀ422çßét¾ž‚€cï––ÂÚ{y¦)(F+’ÈŽªi,E‘6€žêlÇWÌŒƒBJÓdïo\Qj6’xI–“Gø0%ˆ8n©ì ½¤¸Iñ‚üyÞ €º#1®,š¿‰ã»óÇl÷°w¿öZ;•¥C!ó0¬—)ìq5ÅJŽsŒ|XçÙKU}3PÓ0säø°BILãO0ó`ð $’€ÁM€˜¤’âF…Î:0?‹‹ô´bÞ+éfá1Ì iÏœ ÜMž*Ä•yüR°W!rŠŽ…Ma«R i›ÆJ@|5(Q•üIæOìí“ *£$¢ ¤$mÕ<8þˆËsûx2/­óq ¸qqn˜Ás?÷ (èúâòüÊ™˜<ÌC;¹†[ ð4` †Èø®üçVËè<ïï¤ —AFkAÓL§šeÀ4ü ÓÞÍ›«Azä@’}ŒœÒ¦%)PN_Tà ¦ö—ät &éÇø>“lH`Î 3õCå5ì€c»Å7W2t’áxÆÂdìO&亷Ÿ;îÜcÌï rÓ´ 㸟†< ¥É}wÂ8Î+‡|<,ñ`ÞúmBüé0€/‡³dþÒŽH$ðqc=ÛkQàb ´ïDÇ„gÊ8hiö‚6Nêí$#À, 4w„a^Ðè6¶ð?™®d!‘œ8¥pùéðBcþÂ%°´©ÆøE7žÈ£Ã\ ƒS P`¸;GÃYN=b\ãÒkZCY¡!@ á$ü„3LÀS ¦üH¼@¶ÏÎõ“7pJo–Øf?çIA€3÷zÇñ¼cW' Hã §$ñ %¶¥‡$¦WFš’åÜ%Ž1s±Å}ìéÕvÅæóñC!,G¡ ÆiHæb<‚ìÉ(ô>­!ªB@ÛeQ^1 ɪ ¶áP­ê&u(2 jvgGŸRctœ0@Ðþðlìξô­ò_*ÃzeÐ>2½8_ ‹—ÃõgÌ„Z~¸¢hÅߎ¢ÛΕf:VïøŒ«‘4ÝÆú â°ó(¾´"·ý£Æ¥0\[•XõßQ—.—N9Ã,¢ÁIžRÓ.pý,`oEÂ7YéÇgH9¯fc|‘£Œ…KO¢¤ô‘Uc½üŠâb6~ú±òäTy<Ã=†ñ±(…,n¨ø×ïØÁÆÏë¶£h ŸÿlshÂÝ Û—˜Ùt:ß=ÎrRî¤ùÏ‹ Kåí°·4 ^‡ç‰¨),~AžèýñÍi1¸PÎüêèîâ—‰²Ç-U_:“†œ,j»BØajÑó’ϲFÙëªãÒVÒi½µ®FÈ®òæ—¼.íùüÀr¶>};…-+„|o 3^æx0¦M ÷––Š|ð/–•çÏV’GØÍÏû¤LÆ7 ¿kldyÑĵ(á•À¾À‹íåå«97T©ávþTÏ9$¨ž8î÷b.¿|δͼ¯DÚ˜³eÎ+'Èúi÷˧àO-6,Ô‹NÛæªû¿¢pe#£lÿ 1•XH ЄÞÁøsÔ£J n xLSÔïíà—«|óÌË¢3hj 6rŽx馳^Æ}Bþë*L=½"ÄøA÷ gÃwÑæ13æSøÑOÔ³»`L*^Ž©©9 ç S Fó‹Â€^ `¬WŽý±A.[—¾"ŸªÜ&/Ãó³Á†mU5nß®f5;î?@%PpÅÓ¹¢iXnŒZ¾u/3 Ö§Wm'}ÿ†x~SíðPsñ‹â”1ÝHWïå­ÐpËýµežºkµ>ÍÅçàÃÇúŠúšîØSj»gàÓ˜ÀQ—\° CÂoÙžìVÿ µç¢ãJl£Zõú³Q íîbåLóù­Œ›38[Þßêä¡zÎ=nF‚èZ¤¼w+Ïi.~2üw@SYÞŸPévsÒ7!@UâûwÐÚ{IçØ dŸÙŰWûˆ©OÒµg§¼áûͨC@¨¼³Pî–x>„w£V¾A¾¬"⯢º*#œÿáUr»Ï`q5ˆ´&I[­Aû•É"_b™³‰#’Hˆ5ù ao†\ôg\ d±ò3_†«1[¹Âý`žÑ¶—çÊO,m/3›ÿu«Çà6äâpEŠ×Oþd |3¹e¹Y3#$ø ¾Ò³;æPûx£Ùä3,ûQ—•Í ðOºõ+|h‚—íæ!æ%ª@óŸ’bÚ?%n’6ŽfŸyépñdÝnùäÄWôú º^C0C}ÿaƒ~!º8M ³Œ!Û(vY]U«iß\æØ#0á#ñªíÆd{P¥ÃÒä¯Ñ`ƒÊ†>&¯ä €÷œ±7ôþ8:$ÿ¦ô¦p6åì¶vn®ìÒ ò–î]å¬×}Ýó~t­õ(Íb­U?]O#¹|+É\Q»[½èÖfá‹¿5Dã/þ)â;bOúœõinÔŽ%·øÒâØ‹è~±ºúBèS–YgËÌÈ(G‰¢Iý4 Ïûžï^ظ¥ö!àµ@6Ú+_8Tœó# ªLkVNT‡Îøþ?` \lwgÃñ1í…ß`qs°àPa4í€?mœ&¿2­Ö¿Þ–ÇÒ…É¿™0Ø©´‹èi¹›×ZŠßlXÄÊÕlÌD”åg‹%“þ ’’’’:#LÕÈëî”ei^'ùÒ 'ˆâŸºà Ð©bÜÀ ¾)ˆ&QŽ%ñ¦ñÖ:åÔ#ÉÉ@_“o?É a@†§E!Ãà²ÂìH1ŸéªÇ͉é†Á¡I¨Eçê›I¿­÷–-“!h¿Œ”f{„¯³>*Ú;##T닜½±ÿx؉·3ëAˆ@öÓƒuÊ.ç=i9ø ŸœJ—X_iÚ2s„9‰b4oŽ´‚œþOYÇMDÅËMŒë9ìb=aÝ͘x£8=}…*ÄSDÏší"—n¯+hãMj~nyœyÈ€ÄArÀÈ».Å„Z¼­=x¤§›y,óÕHÙá¾^B¾Óÿhá¨O‡Z&@zúÉ`êܘ+ ÿeÖÊ?iý³s)­ù6M!ðí'×I—û¸g‹†½+Eþš±rOÙí¨\Ï@Y£Àˆ Ö@ÌûÞ¯) ÷Uõh)oЋÚøBóÐÖ…¡?6úôrgB¼¼Ç جj›” 8dà ÛL8°Y:½ÞȃchÛ,›–¶Õö‹`2BÔæµ¦Õÿ¿æ},• ñ§ñä° /Bªö:`Ú–˜Ì“j’TÑø4€.ÖªShÌýÝìå7Ò{óLqìÎU8$g½í½%ªWçdãx†£¬w:j¤=ËFȣ蟖©†–Ø O³@áå󇨒f c HžX1ý±añÙªÀR>Ó_ƒŸÂö?mÝ”ÎëæŠ5szYdÍöS_-¯3VÉ'/¹C~;—ÚÇבÂþËïT˜¿r¼= ˜ |RÜ’{ T?ôKÑÜf €£°2ŸÛãêjÇvéA„=?×Ð Ã0[€òÙï•è"à³@ ®'=žÏt8^(óxúÃý(ð%ÔÞ9§äç/†08æ¼¼+á÷М‡%VXŽò=€½ ¢ %t­ôzG6x½3+®‘ÆêÄö(ÓåûSϸîÙgô Ö$ópÓöÿ øæ3dáPщAg€ÚcéMYa5(’„»¡µy¶9þïÚ[i‡lô„m@ #±w§¸§©NŽŸõ<ŽO€! Ÿe*â„,ºËçüŸzQFk™,9`ü ¾bw^U4)‚éj¡˜¶À«Úæ5¥™bí—+zó5˜¬Ì¬ ¼Þ²Ó=ȱ×ÍⓦË1÷Ý æ—Á=¬›gÒö<ü;XØ3·p\dƒ'^ dƒùp—÷_t0” ¦ÎxµFŽøÛM˜â ´'³»1Nò—Þnèbœ8'!œE¸ZÑœæ²ß8,CÀKœ c‰r´üG^= <x ðàÕÀß^ | H©ò÷2—k±qãÑ+›šÎ…ÀÝ¿˜zØ ¡ì²"üdEE 5 ¯Ûöf5ÂUãÅìzN íÆéà ÀꆅØIøžåw3–òæÐîª7}ŒŒ˜„]•N¶óæÒŽ =00² ïÐ\qOÙE+¢ÀLƒvöDl 鈫•«Ä ŠPwûjÒÑ Ì5òæ’-Ù”#f¿q£̉¥F5G¿(Ë—bÖÈC…«‰_tâ“!ï†Äc™¤6@|x•÷x1÷Í7dC5htÀI¹¼U&­£nzt‘Ÿkƒ²ÍužÚ‘—O²ÿÉØé7à±püD9a…úX4æòBeŪÈlX,¥TôãvË;òÁ“¨óz“è l )0—ýð•61ˆ~1+Ï µVØ@6¬¯€) †©Î8+?ÒÅEEˆô®@îÎòs©à1gãwÒþ66%a{²Ùbá.òz·Ó?JP/¤®e”j·£Š¶u®»û‘ªgm©C!ág&µè±èYYäjD E é± _]Gƒ6¿v‡øœf¬}„å>×2Ÿ…À¶È•áÀ¿Yߥ¸kñ0Ÿ@ ¤‰Ùž°qYޏ)g²økϯÅUÆÝx1¬8ááÕ[oÀÄ—ýª@ð`x¢ ßç•K&²÷Âbk—Yøg‘€=µ*y¿·õdo·6/Ã& rJ,Àò±í_€‰I³¢ìÚ*äˆ;ì‰>6€ 1ãå¾$¶úO{ùv6D[tŽ}f!\MÆëÕÕ%5è=‡ù—ýÆ‚*EBa/R <HÁpò††¹=·m!°î¨`Æþ„œ´´BäŸKÔKy^‰Ó¹ƒv¶šïêí9xúDK"‹S1ª`ã<ë´LðFìPHG~ñ¹Ä²7Dog•r°,góÝöjÉäÔ™ÙJµKâó‡eðÏ@vJ—ŸÆÔÎXçž?X Ä•9Åñ$'1`ÌßoÇ–Õ_¢¶3½ÿU»­V˜쓆œ$¶¯;[ùJùÌŠŠpN>0U(ñø‰¢¢ÈTýûÞ GÜŒ_ø VØ@¹jÎ[ÍÐyËŸ–˜îœ °äFvPë  WÍ9 9êP®÷qXÿ1 ÄéÇsPý*¥=Ø¥›¾…@EÜ[eõO˜`¨ªêò<?ý@­f¹†Û ¨œ$#zU»Ý³nÞµ +-² R†åãfmKÆøÿUг‘)ó„% eL+|·¾ç£_øÞ ïš·À¼ tçj$`Ëé­Â¼Að<’8÷‰3µþ‹FÓÒüZEä$Ô䜩â€8+WÍê‡{>ãÇÀÇ€óñÛÂãVä{â2ÐÍ{¶‰ZdZ‰^·d0=]e·(WsZ/ÜNC”\ðDÄÌ—{¸MkÑú1㵿ZþT“&íGÞà ï"Tšw‘23²Ø£.Töèÿ^)%vŽvÕi0ó#FÝøIrðÑ["ÒîO *8¼ Q[ ]xm•$¼þª÷‚y –þò}@C¶YIù@·œ›€e¼?ލ6Ýxéjv>6I¢MV:¾ß½¦ÔÖ~8¯±ñV<êt*Ê &IDATCx!oåþ.Îòsž"Ó0H÷åMÀg1¾¬¯ïM¿®ii|¿±ÀZ³A‰µ˜û/JVšÑÓ³” a9£Ñi•y~ wTG9€Æ~_Wzðo+ë;Hø Ûî˜Ç ±òå>b“h…C á@m“0½ ј!M>µTÖ €wöš|xP&ÛVäöz ñB¿»…£î@ø³ÞÙ±Õ"A§p«É?U ,ÿh ö–o›„òYW99b¤B«.ew³kÄ(þœ·Ê+Ç?b±ç_,°<²Dñ¥b›Õ±eu²‡'þøu5ô>8 ËÀöY6üW}¾mkÚ"þdž'^^XøÌ×€a/f¬¥þg˜‚Þ^E àÞÀH{½Þ#iB´(HH,ËfúåÍ]iî\mÊÇÜCÕ¸8Zòã:m˜‚•z &cb‚‰5;©)1ÅŒ˜{?ðFà< Ën 3XýPmDÖ¬Z/~\t¦?KËVYrpßó×\ -¡/üXØ[¬±€ý²‡ Ãjȱ$¡hõóñüõõ-Æ®œ²å8ê-U Å¡v¥rlÿE=Šm¤íÕ@B¾iàþ¸L_^» gZþ暎†½¦à³hà=!…Z{A12ºÝÊìì`O¬&õB ÀS‰Û±=™Ð(åÈðîN†Á+¬b„ú Á³ôå%Ê%Dç\µÉ'Ú´¶‚Ú2îøõÁ,´F3,µÉiþxðà^`{Á§Èèrீ…Ëô´·¡¦Æ.XùE/—¿¯SK$ΠԪw®Üæ‹4{µú¥Þ)ÿ?E¬›s³gÌÅ–=cˆÙ0Ø;Þô78b€Ð.Sô¿9Êèöfãr «ãþ2Ö–uWIIï=0íJ²(^ÊÓŽWá†!1(]®ìsŽºLËÏ6ÖÃò¾íhGs>òšÊüʼÞç+ÎçÂå£ÇÊãûŸ`Á=‚ŒB1V°çúî+ßÛGy 1¯Ù“RˆÚ"u G•ÁÑ׊π!xjöpm‚ÏÙ,D'pD]\™†D­ éuõ¿V©gd~ 3OÙë¡Ì©/öÓ_yãEö`¬8/*ÿØÿ(•¯þTbOJ-2Úå¢aËlÙ™Cax¢}©.³‘Û0 1<°Pm„8+í£Ì܃¨QÃ!4ÍJÅkÒ‚ã ÆO @¦,Û±GpHWXˆ"ôü³q—?aŸ×ûJ`˜eÿ¦©À’ïvÏ CÉË9sÊ&{ãwu~Ìuc 3Â>þCí ×NŽY°£vH3:pa@e»ÛpÁeJ•¾Ìñÿ4ö¦ =ÇŠÏžï&&==\áÏ^÷/@6¦d×V²åìÑlpaAÚà #X›ã-÷}ˆ»8x/0L~Ù¾n§ê]m'LSxÜ~,¿ý Þíf-DN“™vôÝÝ$eP™ßBïOÉ”eT¯i€üœn»k=Ö›XZ…b­ÿ³°DZ¿š ;J¢Ï`M NQ¦Ñ¡É¢TM!Ó’à_Œý¼ ät°7]b‘õ<õ„C7¸×9Ä^#€º}µ*ÈüwB{VùªvšöÜž¶Êî‹Þ6¤ûa¢«Ç µBhlmÀôîÑ›m‹½²a¼U€#þ¯¬¬Ø.Œòw,õ[ÝÆÂ¿¹w~ÂÞ\ŒØØ3öÓB³sµí6VA½qmÀQàXãÛQ;¬}¼4K#(ÝL0X1~¤Ú‹KR­bÏ)Ðlp°¤P˜-Uå(ßþè2»Ã–i_•éÝ9;¸†%ŽÛsbÚ•ª±=þ· æ[W|ÙÐĦI†É9‘|fünMÍñx–KJäG®z|4ù:SddþÀ¬rØ?²‚¨ž! ,U¬¶È‘_O* [(¿hkÆÞô}`¸¡†¥†„-a²=WX8®ÜåÚÁS‰ß['±Õ—Kcm œþ#pðZ`Pow4@žs²Vµç²ªmRÍøw\¹å§JŸž±>©O{æ{›/{ÎèÀB€Óʸ\Af'_ ¡jgªj|v»Á«Ž=#­Þ¿³aÐQ{0yPq~ev+òóiRR[mÅ£EŽŸÈ…˜ö"ާy»ª,¤wCä¬RŠ‚ªÕo(¯kŽÆ(¼^Ùí?nÚ±‡ef%S¤²Ph³ëµêêž“jMmÏßC„Ž›ì‚Öä«ûlçÏÂŒO`¶týb³÷'›ë~ì€Ü¢êª*ÏAkŸT~ ¤íöYÛß’Ê€C#¥Eͯ¯?ŸÓçP¥¶Àø°ýÙÔª}Ú Žl-iUJ0r|à&Ì8öuSÏk\Þ*ì€ÏþµUæ^òË·V•¿.@†µDÑ^ŽTäÍC£xY ÷:¤ê¼Ë¦Âó)à` í?+ˆOE^7…>o6ä €iWæ•×l`ïê ¥Õ¿N_oÿù(MÅI|¢]IÌ;š¬ÿ"‘È0ŽÅ}½)ì8|8 ØÜ¾…Žò,1—3~ -‘Aµ¯#7“LWo¬ûLÿ0 p°tr¡¢IÎ_2…O4OÌ%TnÄ98*šš&µ8¿ðP㤥oL­GŠ©4ŸZÔÇ˹cÌ9zØ»³²©Ùì³h’aP  Juèˆ`ªó´]Ê¿p[@Ç[dì8Ì¥¶±÷÷ÆŒ`!åNK©éÞ‹kͦ c@ûªÚŸ+:Ç„q ~àu™RßQßWlº`§Òs§,/á8ÐhFÖåNîŸLQ”\èÜÛˆñ 5ÀÉ@ûp°’åN2Nþ(î9ú0\þ9{ÌlË &µCþ‘²ð !³)±×häöºw(nnŸ|Û&—g,û×F\Ø9MÙ ƒ›ƒº“ ·¢,›]º$»0:Í“snYïý—°#ÏñÐlh¦9 Ežíè€rý·Üa­.FzÜ,p»~í²<øãWQãN,é9Ÿ1ÈM?%ÀW€oS¸+)x0eô¯VÀ¡As Y¸÷JVæ:_ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ6åÀÿƒqtŠ>ŽÕfIEND®B`‚wavbreaker-0.13/data/wavbreaker.ico000066400000000000000000000715061356554132000173410ustar00rootroot00000000000000 0s‰PNG  IHDR\r¨fr÷IDATxÚíwœ$EÙÇ¿Õ=3›ÓííÝ^Ή;âŽ#KP‚"*AñU1¢ï‹˜@TÌ1   ä$眎Ëùnosž<]ïÕ=Ý“{fg÷ö¤÷Ù›™îêêêð<õä|üJV¸nÿûÏœ æØ2þ€¥û ÍiöÀ;Â|âÑ ‰¸¹„îÆ¤DÔÿ¡/@+•@¤`»›dŸùqk<¨ÁŒ¿ +?U€Ðœ@yoâ¥uú_‡à](f>ܼ¸»U.¨’@"‚nn²Þ×=6%øSà[ì¢]ñFÀ8~9 7ãxº¶YUUþa~V2ÞfWiJ2Å,ð Î6w_~¼ülw¬\HX€ÍÚÌÏ=V¨pIÛÅ3‚›2t¥TÜ)«yâ¦OÍ·ø£cïøR’ ÀH·7îî¡å€…*_5Úçù%ðWÔLx=p0p‘¹ÿÿPE4ÊÏ€u(̘"©„’›Ö›Ÿ{¬à5PU@u¸åG+hßx­s®Áæ¨0ÞÔ›¤Û6Æ—¤bãKÀ£À›ÀÌÑ:‰¿¾  !ÿ4mZ\.]ê—‹­~Žré|­L§; ÅÐæ§ŽÖ5å‚€ªDŒDrÓó³poóGÐG•èyÀM2ÀƒýRúðWõòå[îÚ-Æ— Q‰”`$Ò¯i¼2€“ÌÏ*à„Ñ8Á<Ÿï+ ø4À§Lç74ø‘òCèúïÍ&3?¦ä\;/>8ܱéý£vçrÀ€ªX0e“%`ÆX§hU`$u¥L<ö‡eì\{2‹WÜÁœeèÁµ_ @RE4™ÓñÅ.‘·É“§mgïrŸæüúú;‰\8amltîþ°\²dð¬cÛþ¥žK.]º×“ÃÃß"5ãxÆØþ" *šÀÊä¨2€hŽãn’:÷üJt_Oüâ>j”·ìÆÎK$¾/)Ž”GxzüUŠÐ'L}Š?»-¹/G¤2Ù48›úæCÓ6]r‡’*")&`kE 1HÉ;LɆzÒÀ¹(ãÙ·GÒw¯a|û_jBÿXccþ·]Kx-MøâTb3€Ô²qåÄÍÀë()£¬ G?›ÍÜSĵ—€t­¯ßAÔÇœ{CFûN*±@¥Z¯/‘šÔXH$”n™=”R¹´FÁç–uæç¸’€V9Ü—þ¼*P/PÉVs9~ËCCï2 p^CÛ§”såüùض—&”ëÎý9—/¯Þ¯\QŽ„ckj@Ê÷Ê¥KÀ-(5¬8n,n¬¬Š˜ ÀW “—1x[<¸Œ§›‹ |U‰j¤’ÎAÀ' 4+¶òg@ªèusðÈU€ûe ši°©mz…\±*£}œJ`»cKi®£}˜ˆ$@$hɨ–¸8Ø/­õÀ€UØá«™ÔìwnYçès<¡‰áÞ\Ïë@JI**νߴÄï[YÉt¿¿Ð~**V¢f°'Ímß¡˜w)>â?ÃÃP¢Ã1JhB%mÁ–.ÆD Ð*@@MMû $+ë]8¨çùdÞüã9ÔɪTæ=ú<ðàjÃà"!¨må®á—×^"¤™uÌ”ËOù[Ö¶T’ºØf©®•I$â‚Ȱ%rÞl5¿ŸæhwÊ¥t °¸ÒüžyPïBØŒj4âîA%Öü¾„c›êË%jë¹®¯¤aœyÿšþNʯûÛ0Œ›ß¾DQØP³ÂꀔIýÿ€ª*&èÉC,‚¿Åü<•1¨[)¡::¤&û@-4kÆÞü<´¤ŽÓ £R;I¼7móñ@±ÞK; بâCsçœÅïåìÏ?ÏÁßmã7n;II0Á=²aŠóËOÞÅçÿôlŽ–Õ(¿ªeô]â9ëèïô%™ln2¿ ¥Z\€"0ü Epk6‘ éCتJåwE­Dy/Φø‡ÞH¦ àDQb8€\ºtÂë‘ÈŠq•õìšqž\¶lð2p&Ð |¥7o¡@<¿„cÓô §IÅ@,ÐÌHì;î‘´j@"-ð°ùy0åÑÕç{¤e4 ©[A pl1ÔµòàP!ˆû-.þ^µ<Ák½ƒ&/'ZL_¥3€ï¡1ä¸)  ¢û²× 4¨AEyí4·Ì.éœ:µ t8eÔ.‘­ñˆ«•ï5CYÁ%{eíSP/C&ðB¤æ-Œ(Î=‰Ûå>\ý¢»ìt=ð×Çß/k€Áþ|Ï«x}Ù0N¸ohHhÔu­rÍ“*1Œ›äâÅÍÀ(OÀG€™÷ìVÈnˆ’ N\‰ìÛf2 e K—‰2޽in}£º4`ñ%’ ¨eâ%J )šÁ¦C g ìL¾o›ßÏvÛÇ7Ú™àËMs¸ÿذ×¢t°~*p7ehI£Ÿ¥”¦$¨£ßÁθ¸°ñ>»r âs×ô‹¯þË:g·ù™K§·%€@uØåØW ™§*»¶Ô&ípVðŠù9Ü8ðî{Mñÿøš|¢¨÷è4mµ\ºô/rÉ’ã¤Jú*‹P®!›‹Ðç{×CÃÃ@•¬¬N² #] 8ƒÑ/^Û”Ô­U(‚oCÕ>€"ˆ4~¦²N'Gú“*Íìú˜gá"–EJÄs¿åC± JSÞëýÜ;Ò Éu*+’¢´¥¯Ï.儺F-]IP÷ñ³¹]NåV¹Y»%ö°¸nçñç];9á!$³¸GVP8`ÅfUõvΔ/¤NòÜ´m'‘É”Z€kQÄd3ÝbYU€k±­\KD¿”ï~ÚŒÄs-þ§b"R~!ndéÒ?H5]ŒšÁ«P©Ãi'¶õÿë«©Lg:Bœa&²X  •Ô²r£ºˆCP÷G³bK,{Í{A †L– "ƒŠh¶7¢tT¡•¼¸f¬˜£ô½ÇŸU…Ž)„Ò€^„ÖÈf—rJiPÇ`¯-L˜Ú*$w ¸Mjú4MI —¦è3åÒá°T€ÚFu”­”«èF†<9m[¥?;ñm”.}8 9‚&¤„Ð`6Û+ØÙyîÅÔ%KöÿÏðð䘔àÄÒ€ )?ÁÒ¥Ÿ4ïßwÍ­'‘æ KyÜ#&xwösNeÙ²ÀkØYyùÔ€`%Æ Ü$Ñš˜¥$‡$ßw‰¤UÍj ŠHïDß.§Èb!œ0£CŠÌ{“QŒÛ*š{ð±ÝÌìÙÌ€ºVÞòWRl…î ŒÍ ‚ 3h­¹¥•T‚<%½œ˜§Ÿ†{ÐýÒœ±ó¡°||u¤[¨¯–~pÄÔM´¤ ëÅ›_¦;PKdÈ©`[ŒÐV”žïŒh<[ h$4˜R±Âu¨8zPn4wÏTˆwß>¨Âù÷¯¬dª¯ Æv)$çÎm@Ù¶£$‚O$w/[6ï‰Phΰ¡[N©ÃV¬  ÷“]ÏÝõ¬žA× Ê#"ffC…=¤º e×›ç_‹²#*„ò*Êýê Ô&ˆxD=Ÿ9GˆÅ¦Zp+ÊŽJmú&YÂ¥DÄL v*5¯~zJÊrÉ»•âÔ`’Ž›w6JäkÞàëÈíJªe¸O½©Uu… vúhÀV2ëüµ˜¿­8€¦V‹H-ÿoY€u„›®1?fr“¬]}«ÒΧaÇÃ71œ×ѨëR* üƒæ¦fT‘Ž‚2Œ“o5£ÿ>T(øÇ=š¨¬ü,ÊÛc„…õžI™´9ÌñûYR‘sÒ~Ÿ©NüËü=ƒì®¸ °Ÿé)À”bœ02¿Ǽ.—^*Ù燒®‹wqjoEùß§wãÒž% n¨ÛviÖMA£}Òüù¿ÀQy?DySÄ¡"^õ›er"ª¤éÉ{%½[#ÂØ1eÈz› cÆ¢©í·êþ$“/¦¢Dºlw±Vš@M}ŒB0h ժߚ²ßg1sHZ­—Éâ® Êtõé àï¨l: ø0•ÊÎuÎèFKj9μŽ&†lPeêÍ ÁÒ¥ËQ†ªÔcò@.[6ù®ÁÁ†œ]>ð “x­HÁ`¹ùý¤ûÜÅÌféÒQA›Ìm)õ/—|:P›b‡ÒPÁ_EÁgÚ††Ì·¤¶5EШˆ×4Äæ “ÅÎK%'£îé¨wdªÞ¥ëi]°ÓžØª[ˆ<ê2©ô¥†|Û›² õïÀŒƒÐ¼ã%’YZSöNy¯KÆX® ØŒšî0ŸI4z;ÒhDÓwG¢Ä-P¢]6ÔÒÛ¦¦úInüuØI+>£ÇM0 òDÓÔs1˸ÒL ³J$µi  ÛÈuû²+E¢³ª( ‰Tp|m-ÇÕÔ(šar±>jí.8Ãøà :¨(¼iåÿmÌe¯½FÙ%¬›£äìÙ•›"‘cÞ6Ã]ÏD¹ànvüNšDübâÂŒbE'&% 5Ô qóÍ«kÍÙ´^ þ~¹ä ³½ÀÜ~,™¶œl¨ê´‹éÖ·Zþzy¢íG?’ú¹—JB¨â«'£há0ì(Ö†®õvÐݼãö4 ’‘uךŸKißt BHí”ÏýEáåšyëèkWF&L)ÌÓÌ~­¢¤ËSökÔtHÓ@c*ÌÕ¾ÏSx¶ é¢4ÀRñâ‡Ó¾ÙjÝ…€25ƒ¦0€¿Lʃ³fq©ªØcÍø–pr-Úb±ó­™øœòÎþæõŠQ®×Ì-ûS[{ä}ÃÃÕ•BXΌ!åY¦$a1€é¨@* ¾š‰†¸¢s÷´:¿µ­y›kñÇK%S€G°¥œïQ€– ´†áv‡ К°Ól hÿ{™¤ñksß× µƒ;•J ûš´!Ê€±c’fsv}Œ†–¯Q]ßKCK;g~ó&ñ‰_Zš;÷Y!¡Žþv+ë°àâ$šLZñ­€‹#SZéÞaÿnž{£¢­){Ä @B]R‡¯ ¸]ÎG½@Ûäãÿ8HvlVûÕNß3ÀÁÛ õºÃD"ÄJ¹Ï>5¨ PÖðœaÁrÑ¢E7 ì“’Mãýõ£P~OJë>[1 H$õÿ#kj¨Ñ ¾z³Y¶l9yÔ€@]†k×iÿ8ø²ùw¹íJS¯@ýÔ‚W×$Ð.7¿ÿÐü\B­‡;Y;…l*lµ@û ùýJ”d×|@Bm¸_1v_ƒ” c»<¸Æ¡Ü.'ó׎íÜÐÿþÚñ3ÎùÁÒH;,=¶1ãØÍÄ#‚¾Ž*1inA ErÆ·¢W Üo Óèq2€éh’}Q¢§5{-/thƒ=ê[}3šä<”ÁGåN¼|ïTvš’–™A`3v<ÂÁRÒÄpŸêH×ÓZ€Xìh”Nj†rÖGkÚ¹¿êQcùhCõ… ±XÅ(¬h¾…;ãñ÷Xݺ¥üêYXÆÀ÷ãxgÕ±(‹PÓoPLôÇæß£(«}ch­o©ïþ*hrJ%Ïýdð6“ûD¾#4 ™  ¢ž¸¦ç\¹{ö’E(Û•ÅÔ?"¡:T @«HÖ+1Æ–LGr:é>y-Y7Ð2fÊ¥’f6½^C"®ôÀYKƒÆÞüMÖcKU8 ŒšÆt¬™W÷Ä)H• v¦[1A(VÂô˜Ú©ô™*[Ã$$œgæ3ü€¡^·Ì!ÎÞÛ-)à` Iš*@£že"S"7Ø/ÌÉd<úhßýýŸÞ‹¡_lµŒç rŸ}¦£ÜºÚ7;;X)ǧչ,#(¥¥[;Õ€¤7@$ï³%ÄëÀíÀçP ö\”wà%`Ê]z [‚œÙöº¢ÅÉË@sWÙ@÷¡}ÎüþWÇ=ϧ×4»¥ ²!¼~ÝÊ>´ÔÄÃ×ÝôXPÔù+’¶•cl@nX · ™Â¦×ì©cö~nt ZEÙV›Û>âèsšÜj¾£Ó*&p‰Ô€'ÌVSqtÊ÷ý&*ñé£êR­IF3y.Àîà`5þ*%iHåó´¤!‹„”I@SöÛrÞiݲù¨ÛÛÏümOÏD€SêêX0jH$–¢fÝÀ_úú8´ºšÙ…SŽ-Ì•‹/G¹ÍÈYYÚ­‡dX졜ÏÖË$ÛQ˜‡ ‚“¤ùù7LIPÀ>»LYoJÊžDž÷+IŠá€búÇçißêR@Uy=X¹àI5Ê`> ˆ×nd¿XH1½rO•rß«jPN @×˜Îæ×ÔÔQÛ¥yJa7 ºÀ£QÞZžìC˜¾_)™‡Åf.³ib–Oa‡ØºÉÖúÊoÛ‡’pþ |›™ˆ”lSöM1u¡5.ň–úhJ/³÷n†0[©¨Íì\;1Éô¬SÔ¹té|”ñ°ÏÜöÁôF7~殺2w_4aÔË,EÙQž»²FÁ‚#é"] 8БˆÞMÉV=S–ð™¹G3Ø8 ú$œ~•˜ âÑË¥ö³›ÔÉ¿Š¶FŞܷßùÌîÝÊܦ?÷˜¢r!& +•b*±ò$x hìÙ¢&ºúiù xô uÿB˜±3ío°0V¿7Ò¯+ŒVÕ œqûR2]n~U½=3—¹6‚Hɇ̈¿¿¢r×k€sÔ,oìŦW³klHŽ@I#V„]~7ÏOžÿ:¶ꓨßá‹‹.císÐoªôK³Æu&7É*>þË ø3që\?öEŽzu׿Øhõœ2êûÍë³f¤áȥߵhÑ»¾Ýѱ”ëïèBVø‘Â0X\Yù€µiqEç§.4RŠ€-ONÚ…ØdZv–½ŸÎ/¬Ò.ùÄ#¢î+›güAà3cŒ$òÿÖ#î¾DÒˆ’Ž@å¤óæ?yúÖOH! ¨ KNs?,Õ·f¥=ßc~žL–˜€«%~ ®w£bÍ DA6lÆó½›Y*à«úodUT’Zk>ýFÎfëÛÌÝoÀu¿‚V&q ʨfé’_§êÙE¬y¶&I˜{ã8$Žl7=¥fâ6yˆ ^–ü=}髨Ď/’¶µŸß3%ô© `qÒ“Õ@§i³—µp YFÓaÒ,Ð8•Ÿ@nxÉo›r3‹P®¶F‚£Hʺº~·&E~2y Öfâh¹|yõÛsæLÿÇôé\9y2ÿ™5+3ù§0,5àuÌÙ°^׿úæ¿íÈè“&>.‘ççéãÄ Ä³—I£ŒvwÇCLYÿ Šÿ?ëz‘LriUó±À²DbvÀÌøC½*`ò^…ExSQiÏ„û™T@þêò¸a<1€h Ðp.8q‹l–ë_žÁPw€X|¸{rù-”X5ƒk¿øSùðŸÔÖšFXRöín’ (°ðW%¥X“¼‡.³ª¦#~ñÒ¯xDV¢ü¸§ÒÔ:@°š§!.¼t;èF(5`ŽøÄ/W¾ˆøý:ðÐd²Ýs¬{ž6r¹\¶l *.ÞJú: _ÔÜü…«{z\:dǯT6ýwJ¨ṘTVÐ{d‹|ðÚƒ1šOrìÇv•x$|@è“p1þŠ|Äoi„O xL»Uþ‚›¤Žr'ýe¤¼†ÎmSi3y&–X†À0M­mÎÍÓ ûÐ ]O °y~ ðÉcjjö|âW˜Œ”«€‹4)îƒvFÚ…æ×cÆì>þS9  ²‘ø¾ç¤Šóù MÐ8-5õwÂ\÷RDá±è¶ëï9óS™ËÃÑ•òá?©ä }ŽicÂ4Wþÿ2CHÁ5?0¥‹VËß~ÜG‡rH‹òIiÚæhK<>¿œã.ˆ¦™ôÔçÿLf½³$òœ+$ÓQï®UëáçÀÒ®Õ>³ê6%þôI±Ë_]TŸÊŸHjf’"3ý`Š‘"òbÜÜLi/fÅí¯„¦ñ÷ï^@ÏÎ:ˆ÷cC©ý—eŒ‚r»ü<Ê(x ¯>Ò s™^Öu$AJ!N¸ Éíõ…‡Ä{¢ÿߊÚOÌïÿ‡bž¾çÿŒs¥S÷gø„&«bg…@CK#Éah>ò»l×*ü·²ž¶iï©É@ù¯~ª øW”»† ÕWÉ»£¢ð>u {]”ûoT†)ù®™Õx3UuÉÕ °ìèržj*wr2W|ùŸpæ7¨üìÕý#ïÖÃè@~èRɹ(7ó1À嵓‰WMÄ8èô\ð¸Ø r& Ð…DKáðÐR;ª•_äºIKyjù'ùS9G=~Œ€à£›E¨’+¯Ñ³ãCL_Ò-¾ðÇ7(ÿ*­¥`"’ Ë´Ï^õ°qÝÅ"2ŒøøÏ¡r„…5Ó ~Ìå°³‡…ˆ…#îÔèAC\{©”³<$Ñ4 ¢lZ(,ú 4!0p>äì¥CÅI?æ•“Ìs"#®êÀxbh>Ž2.‘os‰øG|X‹œ.¦-æ}_ßJMƒ¸Î"Mø¢¼SÞ')ŽQ¹øB(G*ò%fŠ£ØÊ“HÆO Ä·%|E #(Âw ‘!" ѹÐqÅ€9Ú>\ n‘Q©ÓŒä9~$9žÔ˜$É,=ì¨c ²3i3Þó!ð ‰ÊPÎy>7ÆQYwa±ÔXnÆA{ðú™Áá#ïhœ@'¤Åt;Àhbü1\ (»hdueZ½mwBCà£RËæýs{ð°"D ˜>꫆6t Ñ§›Ú¸DcÉ<àaDˆn$­,GgωtÔð •Z€:½Šf_ “ü>!B¢‚<”7`lÔ€ñfôàÁ$az©¤‰)ÄvžÚÝCÊ €¨a²ßG%C$ I"!1hBb ¡!cdþSð${,‚t!ÌähF3DD SAéåÓ5|40Çï§Fsö*’3¾HÑý5cEšð°Ç"d†Ä×2™)î×é,Ìf&GQGi¹ULÔ5tIØ"ɬ4ÀŠíB ’¢ÿX©ð°Ç"LÖÌ?Ÿ“ñ•+Å? êVög"{msP£ ‡„"CŸF*jI7àX0xØcN@TÒÄNu}l€:ÞË_8™k© p¥b‹€˜Í ޤ…½©e*Õ´PÅDSEÈN¯šijS}¨_ª?¥•EŽÚº=# ‡=aúÉðYÁ4V0À6vðLÁcgq Ë8€Í<Īäz¬™0ˆ¡ˆ[˜úºZ¦PÃ$ (C^‚8AØ)†³®Û)Pƒ„9fiJå°f|M¨¨_å4FÙ$èIJÃAÁn.4¡‹ ‹xÓSÖÍŽZìE뙑·mjzNêùœ³¸J™ÍhÂAZñ”Ù?Õ`¥ Gc øŽ”¾²¾ºz¢°à¡‘÷÷ŽCSy$ìµÜr –-=½(„“…qDRr:YF'oà§?U„èemô³)Výj J5ÌþEÆù¬_Ž}¢’&ÑÈ\½U)J&gq†À0ÔÐH $’™€v26&!ÁïHÐè‡&?ÔŽ“’R£Ÿªª ‚x¼|ýšÌ&M‚|D1¶¶‘÷[$â„IAÃM”Šfš˜K#³"ºA‚]lçi*Uç 1™T2”`ÿ²Ïgí‰@PÅeª>ÌN f.[ÂT! Ãüm)‘ßýACÇ@£™ôŽdU&áû5¨Ö!8®2JGˆ@.„yó ¹Yª”°n<ý4$Fx±>,[fÿ®©î¹V¯.½ßa@'k6Θ©+™ÀË×OÚù,ß¿åô³úT^¤®&F²S‰&tÓ 8ZØ£€šüè½E2'h#ðÞV¸·½Ì›šÁ$oHÂwÂïWFB'‘ ¡“OÂúõ™ÇÔÕÁ‚¹ûL— jká¼óàî»á­·RÛ†b83f(‰äˆ#”Tmåc«_¿_I3”Ï~=Bù糋áÖlœkŸSÐð£@6 ßÌAø…ÎgºóÆJ‡µ_í“hÂn©¡¶'’#²½šÐFѸGÛ" dkEñL,Å8,PP£Ã䊑÷•k¶tktK×ÛÓQSï~7¬ÌHsÀÙíùúôùàôÓá¸ãR‰»©II üþÔ¾ Ȧog Ðɵ/=žß²%¸é“ûDf?§5C€ÔOå °®[$“…Ìã’*ÀhÆìÑ d`L û5ŠºAc­è&ßo©(ã9««aÖ¬âˆßM)±ïµ—ã†U¥ºþœmÝôyÈ!J%˜3GIï}oîÙ¾(Bª1-_”)¿RmþäêÝÅö™}_j¬ªÔàÜg…;úLÉ휀=ZHHˆÈ–úÎ" 0;@ý0K÷ŸhN:+š`ã0¬A§‹¶è»U ²µ;òH¥owvÂ1ǨYÚjëfu¢ô>[[áœsRõûôöEŒÓé‹Ï.†çß§§1Õ®ûÌdﳄüt[€÷Ÿb H$miQB SìW±ºÊàeg¿Ø›}6 º·‹žµƒ”1ü,;ÂFkþ÷JR嫆TL`B@Iu>8t‚zßוÐa]b¹P áçjã÷ÃûßÊmç¶ÏBý–:ÎŒv©‘xÙ 6÷¾ìÀÈú´ 6ƒ°-ÿ€iW°t›)f“ð­Ù?a¾î`åDY_ÿ«öeÿOÍá×è寇?οFÚg!„ äd?Z­C.ÙMõnðÄ %yL®€J]Í +šÔü°¦X&pà™³¿EtEΤyáóÁ„ åí3=v PÛmŠˆÑO1Ðé  j}Ú¿Hc¶Ñ3ÈGù*³Ÿdœ^ÐîÓÊ”UÁxßtε¾7úò†W• ¡ÒÐZ‰ëÈþʼÍ#L|‹Iõ*Ì®Nݾ¢ ³¢Ø¢EJœ¶PŒÞ\ŒÞ>}º…‹>Sƒ|Rõïüû@`êÜç7U·}ârŸYõ'kŸN# V 0ˆD&P6ðÃ%,h °Âú]3F lúG&Ðܹ9U€z—2вzE¨¹žÂìj8®E‰÷Ù5”éU™ûVL€}\”œ›Q-ôœ‘xùPnb.¦ßQb&2e–UpK¤ªwê“ôQSð¸âßþ­‘ZóO8 !Òaô³Ë^DŒÈK2RJ׳êù38Ïyª5šÊ=Øl'”åÓ­ÂR€O¨$ n%€Hæ×Â!M8Öp±1¹B©GMLU1,X‹þö¯M»@ŽóϨ‚“¦ø®tk«Ó‘0 ¿?w»Ñ üb®Ég´]êïÜû´,KL¨)xœó»p¹Ïé IWà` f`JôSjm@}Ô*åœÿ¤”> ZJ9$ ¬‚÷¿ó™:µ’•-Õc%$lÃí´*ô¶Hþש*8ÝÚ"†z÷&VÀQÍðR¿ª'`Á"úJ ›tAÜ1x–AÙzžÂâZÅžé>3R×'”t°¼t3l´ J5ÂUT¨d¢¹sU8o<®‚‚žyFEî9Û–ëÜnúÌÙo¡È¿ìûœ A ?~j WÌ>gäŸÓöàôÒ£•'€d‰p«:šýu32±œÈÊV¤”$+, _ùßùœ'@´¯äN€ ‘]¨hû4PW!ÊÃÒ¢Ò~•ÑR‘¿ß àRˆ9Þ×J]ùB‡JP©›Š©Ü”úz:·ÚeÔ xÿT8} œ2Ι6¹0TÔž6M¹é8@ÅlÚ¤ÀâÅÊoïÆåèæüMM*šÏiÇQŸÙgã|ûœ@UXi ?nú¤ˆ}éÒ@j<-êg.¦aI£‘”ñT¥”Eü– Ó·´*§dʇ¦Ñ4£’3^é禎¨Ê¦ðkÔ4g‰Òkôã›è'°_õ,r_GÌ­¡êà&êÔR… Ä û5™Y…žOSJgõþÜb·Ùæž%µJl¯Ô "íJ¦U*»…¸¡n¦[ »9'L‚o-‚“&åiX½}î\8í4Eø[¶Àßÿ÷Þ ·ß®Âv'NL *åüV»åËá°ÃTœÁHÕ ÇÓ(&*ÐɬÒâ~S(&š°ð>UöÛ.øaGŠäv;J0UìWeÂÕqšc_yíÙØzNÿˆ‹&å–.]È9š 2!øì«ÜÞ±ë4RŸ©øuuwjüè˨oô+&Ðs«©:¸‘†i•TVhh­TXûó!î « 1§*·- *íŠ}jÌ3èy.éz½EÌ-xWKv&²¤fš,Ì•”ký™WsÚ˜W§NÉa«(†ðrµ4 NµŠ@_4@Qú;ÓZÖCôfÉx­ÊÂ|ʰ¸V=Š`BÅ ' œPåÃ,7 4¼œƒ 䎥„ƒLE¨)­Ašÿ9½OÀtS À¬jØ%So/tSòµ«¨€SNQþþ¶6xøaõ€œÇlÛóç+ÂõûUq1†HgÛ––TUbútؼÙÝõ伦⣳1€µèø‰)©ÏÉ@Éߊ°•,í_¦Yû¬¶vaµOG/k@½&¹2úemu§NÏ\ á·K9K4Jˆ~wª«üÖyG™5™×ci‰Í†D #·ÞÀ_£å·îki°,¨F¯É’#4úUœ¾e£­ÕaJ%,¨Q¸™ÕʼnïζºPjB6¯Ïª4Òp9é#:¯\©¢ £Q¸ï¾ì©À=æãBÕpsþ\cH×û[[ quMÖ ›mvÎÜçs¼ÊaSAMy+uŸãõ"e–×2<Î"%@ºûP×ÐÔý•y< L!Ðà·¯d~#¾y5| `Gˆ»nÚ®îäc]ôa¾×S*2U€¸Éü¶°$ –ÔS]©g7î ”Ø©å×`i=ÚD*È*øÕŒ› N‘<d±m ´+:M¹X±|Ò$Ø{oõûé§³ïÒV {µ!ç¹ ßb;v¨¶ºS§Ž¨ÏÜ¢¶È¹Os0€ ]Éïª4˜(ªOòž‘ÙGFŸÂ)t›Ù‚º¿:NF¹m¦Ñ/×ë–¤)Ÿ@œ1ǶÜr§ùS㛹~Z@õÑ%3˜Èî ”¢0á›ÜAêñE,xp%<)Ó³ÐèWl1Û{â°°q`bÿåJ[’%ê®ÁŸéŸwÅpOôÅöé6@©d¿üŠêÝëé7ÞÈÝÖY9(ÝhWŒ´QY©\‹  ªòÓ³¬·çºßlA…‰ÔN–D4þ€jGqP·}æ´ëý+¤D: €©Ë…ezô$#ÐÐ…–Æj˜^r@{®™?«t:_P±¤_•†XÔÀ=1y­Þƒš¨;¨I…SEÊÐèÏdî?©¬åÉsŸ9•i§µ2ï° L¹jöÝ«Žª&¿²ô×êh³«)xñ~¡fþJ ³„ôΨ²|nEýRU‚¼í^P‰Ë¯¥EYþž>uzÛl  #àd»'íí°}»ú>eŠ’ŠìS¦ÝÑb¢ôtsKC!ÓlUͤ¼Ç¹Ý§¥íK‹H[Ì6šv§PØ*Bv#àÁ\4ó>‘e“<°Y’yk)𮾻…šGŽäˆ€`ÀÓ=üC7¯hJ€ŠZ -$Õ­ËÂjüÙCª˜þtÐ`³åé•ÔØHÍ’Zªi¤fß*«|¹íÙ.Ær×IìðÜ%uåß‹m›mœ9”Êag… ÀÚµùû4 ˆ˜¹ÖÕÕ¥ŸÛ*ÒÛ«jýmÛF²¢°“9”tMéD™;JÏéL ‚›‚(óvYÔM4a¡}ZÚ>-sU`‡Jâ Ö,&a2Í*¬¡£›¡Ì ûòñS„k«l&¬ZD®&)KoÖÕºJÁ/þ½UÎ6³j¨š@µ–É&øSglZîsÏ®N5$®l.a(Q)¸Ù`1€¸ËKàFÜ.V%(vÆOGzNÁÜj8¢E ÐÔä¢ÓÛ((RfEøÖï½ùøôãøÙ庫`¹\(4÷å|ƒ5WoãYÀŸHÃ4ìU ´Á„Z·¹Ú—j´›WEµ®V:2²%@ÀoºÃ â•:¾EuŽ5¬‹pp#Uº†þ\‰HŽQKl ГGÈæ›ÏwƒÜÈ`ÅôYËã3w®*Ü™r€›N¥}<À®]JÈUì}ëÖ©¾ª*˜=[… gk— Öìo¶ñ”`ÿý•maòd5&·¹`ÕÝwúâÓcôÓ÷i@ Ä´G ¨gݬÎz\®>­ïvT ÝTVìt_Ÿ˜Îáµk¹-ˆ# ,#¦•,ÕraB&‹„h€O;œKžÃñ+«˜8¤¡¨-ÂÀ[opý6W7, ²±sW*Á¦aþ50Y$ƒú¹Õ*§`^5UþÂ;)ìI¼)`·¬‡6€f?Kê©’(>2¿šÀŸ`Æ—1éò½hþí¾4é铉ãb, %Àª&léÛåßu6Â1ajUi…œ `Æ %Æ—býBÕ;'[»tôö† êûŠÊ¢_L KÿïìL]£phHõ J (ʾÞÖ}Ÿe´T€}ÄPõÙê™YRŸYTQÏŒ”§8Cë„Ã.58=ÎTàSøãÉ{óÑÕ2ua˜þ]1‚ÝAÚ_ÚÀ½?þ _ØËúŠã+8ç>דYg„m7nc=9TˆÁdtïmeÚ}õüqýæ³OyªM~Ûaûpí+™Üà'pòdšW ²k~-¿\ÆÌ?¾ž(‰ ô%uøW4áªËd$2õЬ°ßP¶42šå§‹›TçS«<Ö¿ÛT|Ÿ9€®+"¶2ß MŸI[[Õ,ÅÏâO>©rT©°;`ëÖLF’Þ§¶°kWfÛmÛT‚дiðRž´SWãtÁgK±d»~¶2‘%41M9ŽË×gê>õ6Õ¥1€Éì[§S!„“³?Ø‚ ìå¬x¹¹pÙtŽ<oqÃÿÃEÿ‰ A(%J&~uî"e.Åb›7n›Íú ÁãÃßþ¦B‡ãq5–+r÷cÍþ±˜RÒûìïW¶Èô¸ |iÎ_v@}s…çê)€Ú׃Z EC§™EYúÈßg6QAƒÐÁ¡.VóþI¤– w•ÀJûϩӫ™8 à-þö Ó h  Q&¸– >¤Ó10¦+°Ùo3C¸7–Kê}êI%$Æ@ŒÄP‚Äg^ã­ë·³íþº._ǶO¿ÊÖ¾˜’—†bªïº´ð_çeS©5ÿFjѯL#ÞÛ³÷9¥2{ÀO¥–]Åx¥ÏP#niQ+ïPYi£%þg½ —ýmÝj#—,ÉÒkéÿ–/,)ÀbE~:ÜDð¥º"ôÑÇf¦qhžÞ]8°N•°êÒ_Çý-,«›Æ!õ©.@Az80hÌåØÅ1†ûWqÃ&ÕVV@P9¤€|FÀ‚ˆÅÔ¬Ÿm_0¡‚¬›4Ò=MÒ ôjM h+kôň_µ‰¶ï­fÛmô9;6 ©×¥9éÄ’ãÐíОZ+JˆîËÑ8}öÞ·!Ó¯úøÉRøÅÞ°¨6õÆ×äÐÿŸî4bIÝÞšÍ] V*ë½U58—Þ^ltßÚµ¶X¿|yf;]W9`»³ÁrVVº‹5È w>|=Í `íÛɳ€Z¸…e403É,Š5P›Ü¦'±•džzÙØŸOÏÔ©ÐH)–š ÐD3Kæô°n ¨Â`jŸ.Ê•ìd®ßÿ¸Lñ³a8¡ìu:)ŠÝ¬Jj.œÃþ˜Âü”ç*2]øu¦0·Ó󽧨5@6®cIƒqضí˜êr¥j7œÌYs !•›rÅ{›Ž7ïŠ.3pöYEÿ°=H<¹Øf65 c Ž^î¿P(w»B}¦ãÕWÕç¤I6±[}Za¾ŸôôÀ°¹JJ®  ŸOE0®Xaç¤!»HžI¤zš`µèä-zÙöácÌEÅ÷™ÂAûL ¬pTŠ2h¼À/ÛDfÕÉwéø…@¤Xü­ï>j|U4·ô²n›¯žÌô™ÿF ×FÀ˜´Œ€…Ú w†ÙÐàgZµ»¸²‰ÉWíÇ>0•3.œË‡¿»Ã ÞñÓQk2€`BUÔ*”D4œHJ"WCkvˆ«2]íf”ë´<> ‹èݺ-ÀðJ¿ú~¸cb›T‘*úïU—*!d“:£æù-ë>;@:¡ú|*ì…?‹íó‰ïV&áüù©í¬‚08˜¿OK ÈfRe.Ξ­Ô˜¥K³ ÔU¥`EnV P„T†7ù+ë¸m<ÎNžÃO ûp>³96gŸÙΠ.¹1Ê@ ›µ‘ç¸r³Aܘʊ–Ó¹ñУ¹lŸ–Ö9mMLã‰åÐîäõ8ö9Ó‚Gª¸2º1‚J'7̶oô³@øŽšÈÔ¾¯-à£ÕºÉ·rûë©V–T›OjØ¡ä$0hÚjr¤kØâù€Ù㎰úœV™½ÏRl•OæCtQ­ò6HTl€ØÛavº­æké3«BO]m5/DÌóç++»ýWÎj½RÚc²b ,XÄléøùÉÖ­æÅW+5 ½³AssÒ—o~&²©/Yÿ¢ gp‚8Ûy†uÜÉÛÜÄîUÏ÷3Eä"üô¨@Š 0(­€ -<:𽹋—º~m:+§ËÏŽžÅ‘Mw ˜À¼Fëø6žïpfªsèeI .‹0žÅpã’0ÀáÍ,ýÎ"Nlð1)!‰=ÐÁƒÕ:µ42![ŸPïWO¹?–Û×é|§ÚÂÊóPçCÔeIªÑíG6h*ÛMix¦ƒ(ݺü’çOÛf©¡¼Ø§>ª(¨ÂŸ * [ç_èHS¶TCÚˉ[’ [·Úzs渨UÏoÛ6Ûâîæ†ººx©b@¯•«ÐР •`ïÏ7j€!¨¤!'ág бgfûF[Á?v_æq›xÖ",ã\3†@<®")H¢ô@rÐnÖ„oá¬W~Å´{wðÌ•¾|me “ÍZ¹‚j¦4$ˆ†ÙeèIIAÃ'´¬…æÝ£d# eÈe èÝâ%€åupÇÜÛÎ}Woæë[Tk3 RJ¤µ¯) ¢»b„3)2_ÓÍ!ÛV0§Æ,vâøsZú»L‚Ú`½sUÊXL`®¶U ’€gÌ`·#ͼÆI&hÀzóüsU‡œ®ÊŸ¬‡Ÿ­WeÆÕÛ³¥;@e¥Ý._ì1‘…ÎOH)°¤‹ˆãq;¨P¿¹Ô€,¯:Qî}¿¹@œ ùfqµO²Š›Ô0‰Qpö7U FX&’–&µo€Má~6Eâ ·rÖ³1†Âj«äÂ}¬k˜T¡¿_YþEÊìo%¹(™™Ec2ê2öèúmÜ—+uêhƒ¼þãu<Ó!‘&WRg™¤ >=ر@¾A®"6W»÷­Ã—Þ®ÅQЦü‹è"sÙ®t¸‰’l²£ÇLâV óklбÏ?£ÊŽE¨q0€-AX5¨<I^kÙæÌ)¼Ìö’%ªM<®Š~f½°"CŠÓ‹Ù’…µ– ¥ÿ·µe/5–­O‹Xj@TŠÆÎîÃ÷;rË, €”–™Ç…èd'Ï0wãHäÉTAƒeÔLÛ@˜ÎXë“kY²3úy`:‡-¬fR%h¢‚†uüР=]8=årºz¯‡‡Áµ-@" ùH'm_|‹ïÜÛÎ ×næ…ë-ƒ_Ä ¶«/S«¨ÔÍ»Ö%ìf‚2$¼5¨Ô…ý3ëX À* PJØ´s“æÕdï·(•@]`«oB§ùÈl¶#;"°Ñ¬¸¥ ˜eª!–§b8‘ãü–!ÏïÏÔ»Ój¹çÖ¬±óú­v#%|'¬”ቕÑÑŠ9°ô7}vwÛjÀŒ©íÓPe–‰¨a2s9¥œÃÎb&GRƒU_ SD¯4T£ a`ä àÌã¶ò(•41‰} gã %¬VqBF;odH³ÏòÓõ’„¡áÓrêl ª €áÓðçôÀÈÕ€² K%ÐSÛ¾9Hïåkyâ/[xËò HŒ*,ÕZö’ã kmoýA Àäbòå>e0Ü»_z‰ïI&áuÇì•z Øl¾s{¥å–T—Æ$ð¸i \9ÁfDز “Ì5%A Çsœ¿£Ãžq-Ë{6‚²ªù¼ð‚㢊õÝ´“2µfÀ¬Y¶d’Î õëT²µ5·U3‘f1›ã¨fÃt'HÓ™ÃñÌà0Ç 6‘ZŒ#˜ŒVÏ=‹;²“þd ÐÊ‚ÇUš€2 Äd/…Œ,kD °5¼‹—·Ìàð¹1†ßdQ†ÃªGg‘PÅ,F0Z À•dp`ÁÀªøeKÕ¾L`ój”µ&.16s3€ôA>ß§$€:b¿›UJTu_€mi½½nÒ’e‰/táµ>øØLøÊ8~Rfck†ïr¨JuÛÒ•+ÐQq[ÌñÌ­É´d¿hi« æèÁ«Ï­[ÝÇþ—`1ŸR~s:;ÕŒ^ Ó±@UUv5À 'hÌàHƒì`²ž»hãE â42ùœ‚?iôSDZe¦*P\tß.^ …¥Ic t¤Ä8Ã- Ê !‘tðZ$ÆPÎDø·¹y@s§†Ï¬À#N­ä¬à‰Qpº6Æ}. ?FZÕŸˆ¡ôú*-¹¶8>«ZI]Q†ãFæy¬¢¡éÛW Û8¬žÊSð9gqk†Ý”Æ^3}õ3ªÜ­ø•pæT%Îa.ü`‰M´š°gø][|o ú´Â»&ƒ°Ô€y&ƒª)ÄÀ6èM˜`‡Û:ÑÚj«Ï?_ø¢Fª8C}­â6/mäR¬„£¡¡$óSbu˜<ƒåìa-›¸Ÿ(ƒTÒÄÞC•igöS“\$Hm¼À‹ü†§¸”§ù/ðs^ã&#y!¹l˜u®^TMÁö¢›Õ¬âlç)s=«¥ ’& LŸÑˆØ0íy×¶xƒ?m•R XÈÉÓ4*Q†Âé…A$ %dD6tâÒE–}NmŒ›An:7$ÒÈñãj¦®Ô©ÉÀÂló©m¦.,bz òâ®Å\ŽjÆgÜ8uìi à…>¥”ˆž Rªø}+¹çÎ]ÊÅ·o\²H15v‰ñéÇ?Öíè ¥Hi{Z*”„´Ä3ÏŸ$–Um= £J”*K «+êðHŠ‹:«sYˆFÝ¥,gëÓ’fÌP„_Y©ÜŠ}}ðÆl’°'YÇÄ 9;%L?¹Ÿ ø©a§ÒÈ&¢ˆ blå Vó/†ØIœqBD`ˆ6:x-ü‡×¸Ž7¹žNÞB" ÑŰY>lûÐÅ[ °•ÜÇjÜ~ªiÑzx;ÒÍê‚fó =ñ!vvLå–¤½¯‹UC}l °%ÜϺ`ëÃÃìŠEèŽÓ›ˆt«©fÀµ0’@Æ*]ÚA¹–ŠeVi™F@Ÿ†˜Q¥¬5k†”UʂվÔãȻڈD eUßT¥ìSo[Ùßt¸¥Š |©Oí;zb–>7hI]ò:ùóVøú*uüâ:øá8Ã̉é‹Á–Pj?O÷Ø‹„öÇ”›lO€@¹*@N—c| ?s8)(ƒh/ÒÅ›®.=H'›yˆUüƒ0½Éã&²”(C)çÛÉslãI©S!„©}næ¡«]¼½ `2ûͦ%L_8ÊP"DW,B_3Þ=Yý·ßV†ÂIY\|ÙÎíêf:ÎoIÎØ…¾Xj»¬÷sxþøG8ê(åèèP:tÿØs1íâq¸óNUK >ÿy¸æe ظQëè× Æ³ü$éŸÏ†Öñ4—±˜0›cÌ­v@P±ˆæ~Ä>|ŒjZXÆGx•?$÷·°TL`¡°ž{Š"Þ(C‰ =µLIZ¢†é] „æú€ùg £.¬ÿñàB2ØÁ+£Èvk†T2À©Sàˆf;ˆÇ)¸î3OÑ`Ü‘ò‹RW"nµÇrG÷Óg1ý&™ ‘Âw¦0±NI‚Í<\TWk¸…n3³¯"o2Qa<Ê7ˆ¤‘9Áwh`ûp¾ðG*Ú:ßÃú¤yØ íccqÖÊ"‘‹¸}§UV ‘H]d(N|WD‰øKj™pJ+Ó¦™¡Z7î`u¡> éjû‚ÜÐHZ»G»à­A53y½Ý*ÐáºOc|Ý‘©»¹ßÏ–•—¯íhZÿÝ´“Réûá"'Åžø÷¿S³Å¤¤‡µ2V8B<}0¼ÉßH£‚ÜÉjÙÑÏæbVðVò Nåᧆ òI¾_Ò̽ƒg’joˆî®Rú(é À5áG£¹ë:aÈÌ  ¯ô³`a ³gWSý©Ù °~ˆöÚéÈÙ§Q\rŽë÷4ǾëMá5ûG ;x§ç¶Î_»Y©È€‡:ó4Ü]Äì¶­”jÝÁR]éX¿z(¥NŠ”$L„èb÷ áÇË:p9ð Wñ_'AŒ£ø!Ó8” òfN ÓîÚúïÄ›üm[˜Þ~€í<å.XaPk•);¸`‰1é.ÐôæÈ|=^·…×Nháð€FàOð¡*ʈAô²u<—­½×S~A7³ÏM_êSRÀR3èþeõ#è3[Û]øÜk*’0‘v¼,$íÄãʪÞÔ¤‚‚Ê©·;Ûjkððʬ\ ‡ª¾”Œ§ŸV5Í•;å[%Oà›ù“Ù÷©^¹ñ,W°š›™ÉÑÄ”¹?f Qªlg8ñ;^=™½[y¼mÄ,WÕÂN¸ r[ع-DèW¹ã3s8©F§¦'ÆÀÖòø› 8Ç&]RT’è­ÅYòµ5ÿs³NŸ|sœ8I~®Ù¹˜>ÉÑVb†%‹Ô¶y»Ü±C­ª‰(wàGØ¡³ùn–[c!¸oûÆ6ñƒ"\PŒ ¢‚’!%Ü~»ºÆÆFqQe(WW$xŽŸ¥$òŒ}l¤fù‘#LOl¼§Â(yqÐt$$RêÈB3´ ðÏ66þ«k&û©kS+ûøÍ?࣠…Ê(Åúî¶ÝPnisøùE }šÿ¹žœÝxÖ®…×_·Âþ£2òr-´a µË‹Y1÷~é^‚žxâ‰Ì6O?­$ƒl¥Ã‹aØÁM_©•‹ø÷täb®¥Ø„iÄó‹ú`~†b¨l¹0Â$| ÏàP·u{A¥ŠïyÛãt{~«ÀçÛogî ‡!VVª;jjÔìªlºõ—­´“®+5b•Q8s¦Ý—qQØÄŸHØ«eóÏÚ%Ä=ŒäŠÌþk.&eaÂOXÿ¹×Ç Ïøj„’"Ê;;»lë–˜ ©B÷m€ …Ôd§¨mUÊ…pØ®Øë‰„ò¿wuÙþúÖV¥{Ïž[:xúéÔlÀ\ãñ0®ô! ’SÄ@FE¤»±8«„€”\ ÙŽâ|óÛÓ¶È>»£Êhe$æk (»ñ—»v©ÙýÖ[Sëû[ظ^{mìÆã¡lp“ HÐPF@7m­B Á0ÔZnú4pIøé,c»¢úLcmfPWÔ®Vìl—Òç›oº¤+7ÚÛUd^ÐáâîëS.ºR]|v+\Eºé(!‘ñxávÙ*ç<¹p÷Z]»¯ˆ€ )UݾUƒd©æVBŸY¶·9$c+¾@¢ê :ò^î5bc:ógÃð°¯ßÝ­¤‚\yÿÆ=FdŒªúo"…²+¥@J¶€Ž0щü®¬êFáþ’S¢õÿí!;î߯¥.äé ÞÏׯŠº¢jI°JÛ ©I?[Cp€¡‚Žªux°S¹× æ>ˬ]«’º»sý<ìHan‚b2^DY0))˜md€ì‹Û"^飲6O¶´œóPTè»uÛv†S“~¶‡T °F¿‚ Ã?dªUlrEjŸžïU„^£Ã±-$ë¸îL‹ôNH¼¨V-d1à®v˜£jùî›Å><Œ{¸²XVYnÚš;[€”HC C [Ã*¥ª'š}-@Ãmd+îlɶYZÆeöxüî¨ÊÜ[7¬Öˆ›9 Råï¿Ô§˜‚Õg_ ï²gùᬲϽ#‹aÜR4”W VRP©…áŠ È # µ6€›Ò`¦~/AI›‚„,Û@oœ˜Õ‡µz°á‚œ2Zôw…sëü…úÞjÎêíaU(=¥qý°bý±Ô @ Öv‰]b܃‡Ñ@Y"VL€ XeÁ,QÛ6 Œ&Ð-ù[Ð#ÖÈ®H¡Â’íõaݵ˜€œŽص¶†ÔLß™£Cª…Bò…Ž®Rõ[ð6<ŒFfŒtP»”¶†›‚„‚ 4H]Ê«+B¬9Ëì3뇉D%ñ&?Tëh:h ‰3HD%"¦ŠhU:FƒŽ¬6¯Äm$^ÌpQ/ ™›øבÛꈨ'xMd07‚¢†ËâÒ”¶µìQ{ÛC„b ‘Y²¸ùÜÀøþÉG³éÕ© M[©Ý’x¢œj€…®¨Zè³É¯ÜmÁÄÈ‚€/”Ô>„14ú_{€îØ#ñ`kr_o»^b¯ïHH`}4í‰Å¾ ümwÇ  #Ñ›Hü!.úÒ®]Oÿ±¯.V~£¿}<…èk¼‰pÖöí¼‰€K&êúÙ‹4íî±eÃÎxœ³·oç±`P.º€i(>öàßfÓQUß¼Yu_?—ú¶ò¤¹ù>àtàZà¬;/d¯p›<÷˜KÅÀô’NäÀ¶çdýŽçU?FŒ+Ò®ñ%ó·xãoL;òK”}¹ð’ßúce–"ú|âæâ/€µ2j?ƒe üX5ʧ):û±'‘भ[y[•ê–@MW"ñËüs7ܦÂ(%ïÛ¶Ç‚AlþƒbÿÞüp,Æ„M«ï•¸'m÷mÀá(£Ü²/ãçùbF‡p!)dnž}Ñ®]e×]Ë ð\(„¦r±NNö>€¿Ç« a’ópgŠna5J%öºö¾‚!/Mo´þa´«VÊš+ËáÛ.”ßJŠÍŠþ­T¬½Oýq~Nv†ò4@" ƒ”ツ‡tùŸ?¯T#7ëœ÷ €`åî¦üý§á¹Û ô+¹â¬CÊ~’Ð ò§ÀíWŸ¾òy¢ÁçÜzßÐ7 `ÀÀM˜÷òê¾¾é1j%¥âw==´ø|o”³ïD6?ÁÚ§~&¿Õ½Nž —’ƒ »oÜàŽœ’ÝëÀ§Íï'}·Öž¡Á\ÁüÓÒ·íôî5,{þ7\iâ–\ã{ôGÌIDÑ…N¸:G³ÇÌÏýw¾LÙ—  @^ÿõýêm@ˆ†ñý´ÝŠ„†w/xûIxê&ë—šMƒý‡A™£´^¼†z¬;Ó ^¸«ßÍaQ)ù¢9É x[o¾ bÇc÷îÆ;˜m±ÏšÙe]ñøoÊÕ¯”ðµpi‹ŒþáH¹ðî/ñÃ+rË7…ëß)‡L‹z×:¥zW5Çzç²ãï˜ÞˆXˆv¼)š¼žç {}J ý‘ןbd ]ŽÑ^»QÎp]¶1™0|÷~™™e¼ýÀx`¡Ÿ|ôoG Äõ¤Îþ`=Œx0·TÐË(Ï•7›Ò^ j#ð s󜞊rœç­ÇR~«Ÿveøº²»›µÑ(BU4»Ð±ëvósÖ7ÚÛïÍ{T,VU^„0ð@¹ú}ð[’[?) àþü•vÉÓøæ`›üiÅÁê³zbn‘Ý‹Qâzï–3hX÷ Ú¨%ˆ2à±ú>NñBzÏüŠiá>*F‚Ÿå9×:Ì€ -O±D”ÙºûÀŸ¾t Ã}õÇ0~¥…bÑHæÂ8¯ÜW'¿°÷"yvc­¼ë71Zh[¯˜ïg4ô]T„@èo©¬çZ›&ño]Uðm‹Å¸Ô\š[ÂÏ5ŽÝO[.ïé9!®µûT$ž6é÷wP&Iê­[áÑË’??ƒ ©ý_”}! œ|ùTŽ‘â š––ŠZWIg€¿Qþ'Ô'þ °ùqUL·v2¯£âÞûÖmÆC)GKxá9@÷s'5"ˆG8&Nyãv/èØXÅc7¼KÝù‡7B]p"Þ²uç† yÅ™‹Øúf5Áþý¹î⣣$<~ƒZ¬ ¢fø3þð…(— –45¸cSAÿïÅíí º»€t&šÀ¶¤ŸÓºfÍ? «‘kÌñª¹¨h«®¯+áð }8: w}AMBðoÔìoá>à›æ÷ ÿz†q;ŽèºaÓÁæ¯fÀåùm~N¸õ“ÆP"[Íôx”»QïI/à»ñì…#¤øõ›hîÙH@"šø“ w˜Ÿ¾ðÛ‘ÕÅLÇîe¿þäñD‚ÕÑ|7G+sj“Í8M^û…Ù„‡u¬q#qº¼þâ‹…zÐeuQJK÷¯®»åš{‹ ímÜiÞÏ?qþ'Ü+-UŒ§)gè~^ÀÎúˇûPÒ‹xð»ìW†Ç‘ÄîcÏÝÖÊ €”—@Î kûD! õ¦¿ñH/ßÛbn¿¸˜Ì¿¯¼Ç8]¼(¿yÜùò¦~[ÞöÓoËõ/Ÿ# ¾ì(iœÛVÁVÓÛ»ës«>‹z(§ñÿ/äé¢IžÝ°¿qÑò øèäßqšðËÐÐ{(Æ—¿öyõé¯H`"Áº\Í%ðes‘NŸÒ9oÌÓô,”Kir_,ö”XµªºfÍšÿÙoÓ¦¯·®]ûK±jկŪU—W®Zuú‘ÈHù-Êdßø]o/u«WSõöÛ3'­YsÐÞ•HÐo®7Áçs+X¢Ë“"CZ|æ×Š?T4p¦Ú“ø¶ùý¸‡¾gXÁ>„ûÔ§¯Ú5S’Š…9dýƒJrðWÁöfüÞ<çä_îMÚø0u[Ÿ¥ s5û `ºDCÝœHëì>ðç/ŸŽ44„X­/eƒÅüô¶«è–;1)!PÕüå3¾=v5o>ü7|ûwüéË¿äâåÿä}â`ù÷oœ€i˜)ò©›Õ—ªº¶KTÀÊ»Ìmû¡ôíß *}“×}X\g®Éu&hž¶#yÝñX­µ?®é)Ìä&Ó‡‡‹Èo ޾b\ß &w¼ ]Þø*ðãܻφ Š·ßž3eýú“âB„(†(RðL(Ä…mm Ôv&¿&wv:–7€ÜÀŠŒã•¿)ƺ¯@çjõ=ÜË/óôq7¦ ç?—°° bÊM>Q®6‹Ðg­¹[éÿu­¼‰-®CÍÞôïàÓÑaùç»þWÎG‚¼ÜRĹ,›Å‰÷^DÙŠÖíð—¯îGÛú…Hù¿äÏt²%ƒë úvùyåþIÄ#VðDø0xŸùýkÀ÷Pº×¹ùòÛäUŸû ¦ÅÖ5^5ÍÓŸ#³8éSÀÑ(‚÷Ç¢,ð3÷_`üñÿ2™ÎöÕpÇÏzå¯>v–ØÆKËXYÿ–íCõÄ£QúÚ‰tn50-ÂQ)ùFG:܉í.ʇ(JÕšœ¼ë>8ø1JÕúø®hôUñÖ[³_ˆD£D/Ëw::¬˜qÓÎΤovvnïr,mHéVÒèÁ$Þ5÷§®–¾ê6ÅûÌø‘<}HàOæ÷ÆÂâ^€˜µ"³¿( À’B´íÏ+Þˆgd ~Åö»¤–O·¿I ¥,ȰÓq3Šô§~Éi²Xõ2ʈzu|²¥¶¯®áîß~ÀüåÆ e3€ö ’»~=•XDCÓ£Æuim{€[QÒÀÀ%À¨—w÷ýî·r¸çBÜ"„õfBVdø¶"îÄ?Pv¸ëׇãdÏÜ‚üâÞÈë¾ÔÄþ|ƒñ÷ï<@tlVmBý÷}æòºÿ‹Ëó[‘.›1dü¶§‡Êí—HÀWŠ|RèB«A͈«P„õJ˜2F€/¼~ýÇnÞ|®‹g•‚§ƒAVïiBYãw\Û×7½'‘H¾ü›‰bÊ|½0¸“ù¨ç ÀÚûÌ›5“—(œ:kÅH4>ò=cK,†ù„t_Q ù®K©üÿ}[“; /¿2¿f~~w Û‰0*^ .xô‡I†:"”‡¬z¦†³jþÁGšãñ)dCÒ•gŸId¸!º/¸èÝf»Öòñ¿«ŒŠê»p§ íDICÀAœÓ¼‘LôÈÕOCÜ”¶:·›®|îFâ(¬eçZä¯Î· }j¡“Û®ÜKühßô6¨$4¤‹ˆŸ÷ôlïM$ø¡íöû*Lµœ@Í\£ÃÞÿ nÝwÈ?»¦à7½Jˆ©Ñ´Í(FóÀa¾-Ûjá‰ç†‡‹Ir±Rd÷7¼ *‡¿íUµQ®˜ÔjóºxæwLŽÛ3±æKÞw7hsþðWEÓñ%TXöÀ ¨‰©üõÎOzàÛ\œ(ƒ¦< à÷?HpH ø=»²ë(7~w›^± â®ÚJ7¦Ne<ý¯½èØ¢D¿Ðàï‹ájàróûÅòÅû®vs|ËdÒ5MA`}‘wÅ™§ ö %ò7Ÿ€Ð ±¸ €hp%Ð%-`u}•ÿÞ—ìi°;)Aü¶»»ú²®.z t¥ú|¯ÈqƒUÀ!¨Ùª¥;»ëC;v\La¿5ñ8ÿ6½Æñ3óüዞÛê4Í ¸u¬ šÚõ«¡;^²ãø»Öâ6Øé€È†ûl„Ðl©Âpˆâu¼ãZ T2Ö×PQ𥢸ºùýÓßœ `ußzúÐíß‚íÃÐUïÒ›3r Ú7¾Ç±¥‚;®lÉh·õÍnÿùGÍ_wÛbq,‹îÎuÇà«Ø…2ƒ_ 8v ?8åì`žÜXõ„úœ4kMÁ¶™°l ‚¾]Aú£ÕŸDÊÿA‰†sˆÇ7$%€¦)–E¼/ÙÓ`wr†jO$Þý«ž PL­8›FñèFÙ ^ZþÙßýÁàÙäτ㺾>¢Râ"Š4ƒb÷ M¨Ó´býÚ¯`N¯üÕl7o aŽÓ ž5?è^oKPš^GäêP‡rû2®E¾5ય žÿÉþþMAû%‚0y‰À¸Hò¹p‡œüñK ‰GRó¢×=ÓšòÛH.;íS„' ˆðSîO€å'Võ”ñ¯X_0ÝxÆùr¨ûØl¾KÕõ/l›‰¾ä·õ/òÏ_¶~]…£­Y4À¶×ÛXgNlþŠ'3ŽêsÆ—ÏJ)|B´CÞÒrbx/ŠÙìuâæÍß@ÊŸçjl0Å¿7bÇÖï´ôÆL€ZM+Ö¢=ˆ©ò¬€Z€/%óøwâÞíj…\V¼y“cM[IG‘ã±Rx·£jCŸGy¾@IÏfkØãB²9xíу3¶u혔òûÒSßCûÆýÌÁžMñe•œñ±}$ ¹h\ƒz?›¸ìŒüVÔÞ6;)'<üD çJ“ä5_Ø‹á>ÚN”N äÁ?ú“çjÛ|§5‚äþà@Fᕸ”ßWqëåÂVà<óû©­k×¾‚Yc+îbSLÙႆñë´Ý)«<4­”׆;Ytl7­uYõï\X‹4µñI»PŠ–(ºèOPîçEà:аøp"°êœïBâ’ž÷ `"qΠŸtѯgçr„ÄšÕ‚=““û¯ÿú>¼zïÍ_ß¡´ïß \]OgRz<ôvÌüjV=q0ùüÏÛ¡^*…ØcìkWaÌÒø4öK²Ýº—òÙÛ˜÷P°"Ãú’LJ‡Ò‹¡¼îã ʈ1}×í‰ÄeݑȥÙ]eÎþušö™±) ÀOIÖl˰ß@/X©¼±á¢ôk‰)Yöoa®µ1<\’Jµ“QŠ  „@*æŽ "9YD@HzÓfÈðü§° e¡aµ”Ñ¿´[úU¤ÔQ/ÎJ¼–NàTT¶‘®x«ùy¢ö=•³•Åü•¥­ÏÖŽdbâÏ(&f!eÛèÙ©b"ê&îÂ&üÖK ¦/fþeFaÁT—ø’9¶¹37nœ@Zç–XŒ{Õ¤>hWf9þ1nº ñx)Y€¨¹÷b‘¦2ؽ¡èwc @"ÊTkÃ+ÿ›2àãîÀÑŽ—íS"†µä×k÷×3õ¡=ˆ%‰¹ÜrY=7~÷;$╨Y÷\Ê£_",7Q•qÏïsª"Òb-3G0îÏ¢Œ•¿Be¦¥#Õš¥G†õˆ;«!ÝÏîMæÙŒŠs hŸŠ¤E³]Ý«– 1dµKà f>=@<^ŠUü%Lë±À_EœâÝ¡)í}ªâĨ”߯pÇ+0oÒ=X f„Hè)ìà†ýøË·~Nÿz·–EùŽ„ò—2.,WÛ!Ä"ÙÓ1-¨•L<…ŠÉ?5ËþñÄ8˜¥ÆÂ†±)7üƬïW%ÄýŒòºö(+¸åi‰ñ’|ð)iÈþÊò%Ùì)(è& [ à5ÇÞTàÇÝì>CU!X  F>~ã–¬-,à«möÊ¢ŸMÕµe¡ËË÷<¿#ßö\(Ä ffâ°”?ƒówïFÙWN#³”œ à¤òW©[u\ 4 A4,ˆ…ÕRÆš>ÄÒbð–ýžßd®7" 2'~ÅhGÚåÃx•À&8ñr(Ô÷ksö¯b¥éõ¥àY”}åžô‘”ôŠq)­Ž*Jcu$¸íŠV¤aæªË7w÷…‰(Jü†/Ï&=µr¸ÏNóv'ÏÀfëËÏz{›oìWÒxXÊËå|ÊŒdšsïzJ‰÷Ø£Q؈ÁÎOþî‰ëµ«‡-åJ©¾èá>û»Ðwç‚ã™taJQ iBùÕ¯Q¯c¤´ì):EwGi à,‘ ÀL2ÇøŽ Wõ0>q,Ð2â^. This version is currently maintained by Timothy D. Robinson and Thomas Perl at http://wavbreaker.sourceforge.net/. wavbreaker-0.13/man/wavinfo.1000066400000000000000000000010511356554132000160750ustar00rootroot00000000000000.TH WAVINFO 1 "2007-04-20" .SH NAME wavinfo \- Display format information for wave files .SH SYNOPSIS .B wavinfo .RI file1.wav [file2.wav] [...] .SH DESCRIPTION .B wavinfo displays information about wave files you pass to it on the command line. This includes information about the sampling rate and bit rate used. .PP .SH SEE ALSO .BR wavbreaker (1), .BR wavmerge (1). .SH AUTHOR wavbreaker was initially written by Timothy D. Robinson. This version is currently maintained by Timothy D. Robinson and Thomas Perl at http://wavbreaker.sourceforge.net/. wavbreaker-0.13/man/wavmerge.1000066400000000000000000000015201356554132000162420ustar00rootroot00000000000000.TH WAVMERGE 1 "2007-04-20" .SH NAME wavmerge \- Merge multiple wave files into a single file .SH SYNOPSIS .B wavmerge .RI [-o merged.wav] file1.wav file2.wav [...] .SH DESCRIPTION .B wavmerge can merge wave files that are in the same format (i.e. same sample rate, same bits per sample, ...). If you want to merge wave files from different formats, you will have to convert them to the same format using, for example, .BR sox(1). .PP .SH OPTIONS .TP \fB\-o \fImerged.wav\fR Specify the filename of the merged wave file; if not specified, \fBmerged.wav\fR will be used as the filename for the output .SH SEE ALSO .BR wavbreaker (1), .BR wavinfo (1), .BR sox (1). .SH AUTHOR wavbreaker was initially written by Timothy D. Robinson. This version is currently maintained by Timothy D. Robinson and Thomas Perl at http://wavbreaker.sourceforge.net/. wavbreaker-0.13/meson.build000066400000000000000000000056161356554132000157440ustar00rootroot00000000000000project('wavbreaker', 'c', version : '0.13', default_options: [ 'c_std=c99', 'warning_level=1', ], ) subdir('po') prefix = get_option('prefix') localedir = get_option('localedir') glib = dependency('glib-2.0') gtk3 = dependency('gtk+-3.0', version : '>= 3.22') ao = dependency('ao') cc = meson.get_compiler('c') libm = cc.find_library('m') deps = [glib, gtk3, ao] have_mpg123 = false if get_option('mp3') mpg123 = dependency('libmpg123', required : false) if mpg123.found() have_mpg123 = true deps += mpg123 endif endif wavbreaker_sources = [ 'src/about.c', 'src/aoaudio.c', 'src/appconfig.c', 'src/autosplit.c', 'src/cdda.c', 'src/cue.c', 'src/draw.c', 'src/guimerge.c', 'src/moodbar.c', 'src/overwritedialog.c', 'src/popupmessage.c', 'src/reallyquit.c', 'src/sample.c', 'src/saveas.c', 'src/toc.c', 'src/wav.c', 'src/wavbreaker.c', ] if get_option('windows_app') windows = import('windows') wavbreaker_sources += windows.compile_resources('data/wavbreaker.rc') endif add_project_arguments(['-D_FILE_OFFSET_BITS=64', '-D_LARGEFILE_SOURCE', '-DGTK_DISABLE_SINGLE_INCLUDES', '-DGSEAL_ENABLE', '-DGDK_DISABLE_DEPRECATED', '-DGTK_DISABLE_DEPRECATED'], language : 'c') conf = configuration_data() # Surround the version in quotes to make it a C string conf.set_quoted('VERSION', meson.project_version()) conf.set_quoted('PACKAGE', meson.project_name()) conf.set_quoted('LOCALEDIR', join_paths(prefix, localedir)) conf.set('WANT_MOODBAR', get_option('moodbar')) conf.set('HAVE_MPG123', have_mpg123) configure_file(output : 'config.h', configuration : conf) meta = configuration_data() meta.set('VERSION', meson.project_version()) info_plist = configure_file(output : 'Info.plist', input : 'data/Info.plist.in', configuration : meta) if get_option('macos_app') install_data('data/wavbreaker.icns', install_dir : 'Contents/Resources') install_data(info_plist, install_dir : 'Contents') else install_data('data/net.sourceforge.wavbreaker.desktop', install_dir: get_option('datadir') + '/applications') icon_dir = get_option('datadir') + '/icons/hicolor' install_data('data/net.sourceforge.wavbreaker.svg', install_dir: icon_dir + '/scalable/apps') endif install_man('man/wavbreaker.1') install_man('man/wavinfo.1') install_man('man/wavmerge.1') executable('wavbreaker', wavbreaker_sources, dependencies : deps, gui_app : true, install : true) executable('wavmerge', 'src/wavmerge.c', 'src/wav.c', dependencies : [glib], install : true) executable('wavgen', 'src/wavgen.c', 'src/wav.c', dependencies : [glib, libm], install : true) executable('wavinfo', 'src/wavinfo.c', 'src/wav.c', dependencies : [glib], install : true) wavbreaker-0.13/meson_options.txt000066400000000000000000000005531356554132000172320ustar00rootroot00000000000000option('moodbar', type : 'boolean', value : true, description : 'Moodbar support') option('mp3', type : 'boolean', value : true, description : 'MP3 support') option('macos_app', type : 'boolean', value : false, description : 'macOS app bundle install layout') option('windows_app', type : 'boolean', value : false, description : 'Windows exe icon resource data') wavbreaker-0.13/po/000077500000000000000000000000001356554132000142105ustar00rootroot00000000000000wavbreaker-0.13/po/LINGUAS000066400000000000000000000000141356554132000152300ustar00rootroot00000000000000de pt fr es wavbreaker-0.13/po/README.md000066400000000000000000000002541356554132000154700ustar00rootroot00000000000000To regenerate the pot file from the sources: (cd po && ./update-potfiles.sh) meson build ninja -C build wavbreaker-pot ninja -C build wavbreaker-update-po wavbreaker-0.13/po/de.po000066400000000000000000000416211356554132000151440ustar00rootroot00000000000000# German translations for wavbreaker package. # Copyright (C) 2007 Thomas Perl # This file is distributed under the same license as the wavbreaker package. # Thomas Perl , 2007. # msgid "" msgstr "" "Project-Id-Version: wavbreaker 0.8\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-11-15 20:23+0100\n" "PO-Revision-Date: 2008-07-07 00:06+0100\n" "Last-Translator: Thomas Perl \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/about.c:29 msgid "Split a wave file into multiple chunks" msgstr "Teilen Sie eine Wave-Datei in mehrere Teile" #: src/appconfig.c:370 msgid "Select Output Directory" msgstr "Ausgabe-Verzeichnis auswählen" #: src/appconfig.c:372 msgid "Cancel" msgstr "" #: src/appconfig.c:373 #, fuzzy msgid "Open" msgstr "_Öffnen" #: src/appconfig.c:419 src/wavbreaker.c:2749 msgid "Preferences" msgstr "Einstellungen" #: src/appconfig.c:439 msgid "General" msgstr "Allgemein" #: src/appconfig.c:441 msgid "Save output files in folder:" msgstr "Ausgabe-Dateien speichern in:" #: src/appconfig.c:454 msgid "Browse" msgstr "Durchsuchen" #: src/appconfig.c:464 msgid "Maximum volume considered silence (in percent):" msgstr "Maximale, als \"Stille\" erkannte Lautstärke (in Prozent):" #: src/appconfig.c:478 msgid "File Naming" msgstr "Dateinamen" #: src/appconfig.c:480 msgid "Standard (##)" msgstr "Standard (##)" #: src/appconfig.c:485 msgid "Separator:" msgstr "Separator:" #: src/appconfig.c:502 msgid "Prepend number before filename" msgstr "Nummer vor dem Namen einfügen" #: src/appconfig.c:509 msgid "etree.org (d#t##)" msgstr "etree.org (d#t##)" #: src/appconfig.c:512 msgid "CD Length:" msgstr "CD-Länge:" #: src/autosplit.c:76 msgid "Interval (MM:SS.FF, MM:SS, SS.FF or MM):" msgstr "" #: src/autosplit.c:87 #, fuzzy msgid "Split" msgstr "Auto-Split" #: src/guimerge.c:96 src/guimerge.c:188 src/wavbreaker.c:1447 #: src/wavbreaker.c:2371 msgid "All files" msgstr "Alle Dateien" #: src/guimerge.c:100 src/guimerge.c:192 src/wavbreaker.c:1451 #: src/wavbreaker.c:2375 msgid "Supported files" msgstr "Unterstützte Dateien" #: src/guimerge.c:103 msgid "Select filename for merged wave file" msgstr "Speicherort für zusammengefügte Wave-Dateien wählen" #: src/guimerge.c:106 src/guimerge.c:197 src/moodbar.c:110 src/saveas.c:52 #: src/wavbreaker.c:1461 src/wavbreaker.c:2331 src/wavbreaker.c:2382 msgid "_Cancel" msgstr "" #: src/guimerge.c:107 src/saveas.c:53 src/wavbreaker.c:2332 msgid "_Save" msgstr "_Speichern" #: src/guimerge.c:116 msgid "Open file in wavbreaker after merge" msgstr "Datei nach dem Zusammenfügen in wavbreaker öffnen" #: src/guimerge.c:160 msgid "Wrong file format - skipping file" msgstr "Falsches Dateiformat - lasse Datei aus" #: src/guimerge.c:195 msgid "Add wave file to merge" msgstr "Wave-Datei hinzufügen" #: src/guimerge.c:198 src/wavbreaker.c:1462 src/wavbreaker.c:2383 msgid "_Open" msgstr "_Öffnen" #: src/guimerge.c:272 src/wavbreaker.c:2745 msgid "Merge wave files" msgstr "Wave-Dateien zusammenfügen" #: src/guimerge.c:309 src/wavbreaker.c:473 msgid "File Name" msgstr "Dateiname" #: src/guimerge.c:320 msgid "Length" msgstr "Länge" #: src/guimerge.c:333 msgid "_Add" msgstr "" #: src/guimerge.c:337 #, fuzzy msgid "_Remove" msgstr "Entfernen" #: src/guimerge.c:344 msgid "Merge" msgstr "Zusammenfügen" #: src/guimerge.c:379 msgid "Merging wave files" msgstr "Zusammenfügen der Wave-Dateien" #: src/guimerge.c:389 msgid "The selected files are now being merged. This can take some time." msgstr "" "Die gewählten Dateien werden nun zusammengefügt. Dies kann eine Weile dauern." #: src/guimerge.c:411 src/wavbreaker.c:1167 msgid "Operation successful" msgstr "Operation erfolgreich" #: src/guimerge.c:411 #, fuzzy msgid "The files have been merged." msgstr "Die Dateien wurden als %s zusammengefügt." #: src/guimerge.c:418 #, c-format msgid "Adding %s" msgstr "%s wird hinzugefügt" #: src/guimerge.c:434 #, c-format msgid "%d of %d files merged" msgstr "%d von %d Teilen zusammengefügt" #: src/guimerge.c:436 #, c-format msgid "%d of 1 file merged" msgstr "%d von 1 Datei zusammengefügt" #: src/moodbar.c:100 src/moodbar.c:116 msgid "Generating moodbar" msgstr "Moodbar wird generiert" #: src/moodbar.c:106 #, fuzzy msgid "_Hide window" msgstr "Fenster verstecken" #: src/moodbar.c:115 msgid "" "The moodbar tool analyzes your audio file and generates a colorful " "representation of the audio data." msgstr "" "Das \"moodbar\"-Programm analysiert Ihre Audio-Datei und erstellt eine " "farbenfrohe Darstellung der Audio-Daten." #: src/moodbar.c:136 msgid "Cannot launch \"moodbar\"" msgstr "Kann \"moodbar\" nicht starten" #: src/moodbar.c:136 msgid "" "wavbreaker could not launch the moodbar application, which is needed to " "generate the moodbar. You can download the moodbar package from:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" msgstr "" "wavbreaker konnte das moodbar-Programm nicht starten, das für die Erstellung " "der Moodbar benötigt wird. Sie können das Moodbar-Paket auf dieser Website " "herunterladen:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" #: src/overwritedialog.c:98 #, fuzzy, c-format msgid "" "%s already exists.\n" "\n" "Do you want to overwrite the existing file?" msgstr "" " existiert bereits.\n" "\n" "Wollen Sie die existierende Datei überschreiben?" #: src/overwritedialog.c:105 msgid "Overwrite all files" msgstr "Alle Dateien überschreiben" #: src/overwritedialog.c:118 #, fuzzy msgid "_No" msgstr "_Gehe" #: src/overwritedialog.c:123 msgid "_Yes" msgstr "" #: src/reallyquit.c:28 msgid "Quit wavbreaker?" msgstr "wavbreaker beenden?" #: src/reallyquit.c:29 msgid "If you quit wavbreaker now, any unsaved chunks will be lost." msgstr "" "Wenn Sie wavbreaker jetzt beenden, gehen alle ungespeicherten Teile verloren." #: src/sample.c:455 msgid "Open as RAW audio" msgstr "Als RAW-Audio öffnen" #: src/sample.c:456 msgid "" "The file you selected does not contain a wave header. wavbreaker can " "interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the " "byte order for the RAW audio or cancel to abort." msgstr "" "Die gewählte Datei enthält keinen Wave-Header. wavbreaker kann die Datei als " "\"Signed 16 bit, 44100 Hz, Stereo\" - Audio interpretieren. Wählen Sie die " "Byte-Reihenfolge für die RAW-Audio-Datei aus, oder klicken Sie auf " "\"Abbrechen\"." #: src/sample.c:464 msgid "Big endian" msgstr "Big-Endian" #: src/sample.c:465 msgid "Little endian" msgstr "Little-Endian" #: src/sample.c:571 #, c-format msgid "Error opening %s: %s" msgstr "Fehler beim Laden von %s: %s" #: src/saveas.c:49 msgid "Select folder to save wave files" msgstr "Speicherort für Wave-Dateien wählen" #: src/wav.c:35 msgid "" "Error reading chunk. Maybe the wave file you are trying to load is truncated?" msgstr "" "Chunk konnte nicht gelesen werden. Möglicherweise ist die Datei, die Sie " "laden wollen, abgeschnitten?" #: src/wav.c:85 #, c-format msgid "Cannot open %s: %s" msgstr "Kann %s nicht öffnen: %s" #: src/wav.c:92 msgid "Cannot read wave header." msgstr "Kann Wave-Header nicht lesen." #: src/wav.c:98 #, c-format msgid "%s is not a wave file." msgstr "%s ist keine Wave-Datei." #: src/wav.c:139 src/wav.c:192 src/wav.c:213 #, c-format msgid "Error seeking to %u in %s: %s" msgstr "Kann nicht zu %u in %s springen: %s" #: src/wav.c:162 #, fuzzy, c-format msgid "Error reading format chunk: %s" msgstr "Kann nicht zu %u in %s springen: %s" #: src/wav.c:178 msgid "Loading compressed wave data is not supported." msgstr "Komprimierte Wave-Dateien werden nicht unterstützt." #: src/wavbreaker.c:462 msgid "Write" msgstr "Speichern" #: src/wavbreaker.c:491 msgid "Time" msgstr "Zeit" #: src/wavbreaker.c:502 msgid "Duration" msgstr "Länge" #: src/wavbreaker.c:512 msgid "Offset" msgstr "Offset" #: src/wavbreaker.c:553 msgid "Check all" msgstr "Alle auswählen" #: src/wavbreaker.c:554 msgid "Check none" msgstr "Keines auswählen" #: src/wavbreaker.c:555 msgid "Invert check" msgstr "Auswahl umkehren" #: src/wavbreaker.c:559 #, fuzzy msgid "Auto-rename track breaks" msgstr "Track-Breaks umbenennen" #: src/wavbreaker.c:563 src/wavbreaker.c:2020 msgid "Remove track break" msgstr "Track Break entfernen" #: src/wavbreaker.c:564 msgid "Jump to track break" msgstr "Springe zu Track Break" #: src/wavbreaker.c:1128 msgid "Splitting wave file" msgstr "Teile Wave-Datei" #: src/wavbreaker.c:1139 msgid "" "The selected track breaks are now written to disk. This can take some time." msgstr "" "Die gewählten Teile werden nun gespeichert. Dies kann eine Weile dauern." #: src/wavbreaker.c:1163 #, c-format msgid "The file %s has been split into %d parts." msgstr "Die Datei %s wurde in %d Teile gesplittet." #: src/wavbreaker.c:1165 #, c-format msgid "The file %s has been split into one part." msgstr "Die Datei %s wurde in einen Teil gesplittet." #: src/wavbreaker.c:1182 #, c-format msgid "Writing %s" msgstr "Schreibe %s" #: src/wavbreaker.c:1199 #, c-format msgid "%d of %d parts written" msgstr "%d von %d Teilen gespeichert" #: src/wavbreaker.c:1201 #, c-format msgid "%d of 1 part written" msgstr "%d von 1 Teil geschrieben" #: src/wavbreaker.c:1274 msgid "Analyzing waveform" msgstr "Analysiere Waveform" #: src/wavbreaker.c:1286 msgid "" "The waveform data of the selected file is being analyzed and processed. This " "can take some time." msgstr "" "Die Waveform der gewählten Datei wird nun analysiert und verarbeitet. Dies " "kann einige Minuten dauern." #: src/wavbreaker.c:1294 #, c-format msgid "Analyzing %s" msgstr "Analysiere %s" #: src/wavbreaker.c:1352 #, c-format msgid "%d of %d MB analyzed" msgstr "%d von %d MB analysiert" #: src/wavbreaker.c:1363 msgid "Error opening file" msgstr "Fehler beim Öffnen der Datei" #: src/wavbreaker.c:1459 msgid "Open File" msgstr "Datei öffnen" #: src/wavbreaker.c:2019 msgid "Add track break" msgstr "Track Break hinzufügen" #: src/wavbreaker.c:2021 msgid "Jump to cursor marker" msgstr "SPringe zu Cursor-Position" #: src/wavbreaker.c:2121 #, c-format msgid "Cursor" msgstr "Cursor" #: src/wavbreaker.c:2128 msgid "Playing" msgstr "Wiedergabe" #: src/wavbreaker.c:2292 src/wavbreaker.c:2318 msgid "Text files" msgstr "Text-Dateien" #: src/wavbreaker.c:2294 src/wavbreaker.c:2322 msgid "TOC files" msgstr "TOC-Dateien" #: src/wavbreaker.c:2296 src/wavbreaker.c:2326 #, fuzzy msgid "CUE files" msgstr "TOC-Dateien" #: src/wavbreaker.c:2329 #, fuzzy msgid "Export track breaks to file" msgstr "Track-Breaks in Datei speichern" #: src/wavbreaker.c:2380 #, fuzzy msgid "Import track breaks from file" msgstr "Importiere Track-Breaks von TOC-Datei" #: src/wavbreaker.c:2397 src/wavbreaker.c:2402 msgid "Import failed" msgstr "Import fehlgeschlagen" #: src/wavbreaker.c:2397 msgid "There has been an error importing track breaks from the TOC file." msgstr "" "Beim Importieren der Track-Breaks von der TOC-Datei ist ein Fehler " "aufgetreten." #: src/wavbreaker.c:2402 #, fuzzy msgid "There has been an error importing track breaks from the CUE file." msgstr "" "Beim Importieren der Track-Breaks von der TOC-Datei ist ein Fehler " "aufgetreten." #: src/wavbreaker.c:2585 msgid "Time offset:" msgstr "" #: src/wavbreaker.c:2721 #, fuzzy msgid "Open file" msgstr "Datei öffnen" #: src/wavbreaker.c:2726 #, fuzzy msgid "Open menu" msgstr "Datei öffnen" #: src/wavbreaker.c:2734 msgid "Display moodbar" msgstr "Moodbar anzeigen" #: src/wavbreaker.c:2735 msgid "Generate moodbar" msgstr "Moodbar erzeugen" #: src/wavbreaker.c:2740 #, fuzzy msgid "Import track breaks" msgstr "Springe zu Track Break" #: src/wavbreaker.c:2741 #, fuzzy msgid "Export track breaks" msgstr "Springe zu Track Break" #: src/wavbreaker.c:2753 msgid "About" msgstr "Über" #: src/wavbreaker.c:2762 msgid "Save file parts" msgstr "" #: src/wavbreaker.c:2858 msgid "Toggle playback" msgstr "" #: src/wavbreaker.c:2863 msgid "Cursor position:" msgstr "Cursor-Position:" #: src/wavbreaker.c:2880 msgid "Seek to previous silence" msgstr "Zur vorherigen stillen Position" #: src/wavbreaker.c:2887 #, fuzzy msgid "Jump to time" msgstr "Springe zum nächsten stillen Frame" #: src/wavbreaker.c:2899 msgid "Seek to next silence" msgstr "Zur nächsten stillen Position" #: src/wavbreaker.c:2909 msgid "Auto-split by interval" msgstr "" #: src/wavbreaker.c:3048 src/wavbreaker.c:3070 msgid "Export failed" msgstr "Export fehlgeschlagen" #: src/wavbreaker.c:3048 msgid "There has been an error exporting track breaks to the TOC file." msgstr "Beim Exportieren der Track-breaks ist ein Fehler aufgetreten." #: src/wavbreaker.c:3070 msgid "Unrecognised export type" msgstr "" #~ msgid "Disable audio output" #~ msgstr "Audio-Ausgabe deaktivieren" #~ msgid "wavbreaker Preferences" #~ msgstr "wavbreaker Einstellungen" #~ msgid "Audio Device" #~ msgstr "Audio-Gerät" #~ msgid "Audio Device:" #~ msgstr "Audio-Gerät:" #~ msgid "Output device:" #~ msgstr "Ausgabe-Gerät:" #~ msgid "Enter the time for autosplit:" #~ msgstr "Zeit für Auto-Split eingeben:" #~ msgid "Example (5min, 32sec, 12subsec):" #~ msgstr "Beispiel (5 Min., 32 Sek., 12 Hdstl.):" #~ msgid "Add wave files to this list and click on \"Merge\"." #~ msgstr "" #~ "Fügen Sie Wave-Dateien zu dieser Liste hinzu und klicken Sie auf " #~ "\"Zusammenfügen\"." #~ msgid "Stop" #~ msgstr "Stopp" #~ msgid "Play" #~ msgstr "Wiedergabe" #~ msgid "Select name for TOC file to export" #~ msgstr "Dateiname für TOC-Export auswählen" #~ msgid "TOC export successful" #~ msgstr "TOC erfolgreich exportiert" #~ msgid "" #~ "The track breaks have been exported to a TOC file that can be used to " #~ "burn a CD from the wave file." #~ msgstr "" #~ "Die Track-Breaks wurden in eine TOC-Datei exportiert, die benutzt werden " #~ "kann, um eine CD von der Wave-Datei zu erzeugen." #~ msgid "Load track breaks from file" #~ msgstr "Track-Breaks von Datei laden" #~ msgid "Load track breaks from TOC file" #~ msgstr "Track-Breaks von TOC-Datei laden" #~ msgid "Open a wave file" #~ msgstr "Wave-Datei öffnen" #~ msgid "Save track breaks" #~ msgstr "Track-Breaks speichern" #~ msgid "Save to..." #~ msgstr "Speichern nach..." #~ msgid "Save track breaks to folder" #~ msgstr "Track-Breaks in Ordner speichern" #~ msgid "Configure wavbreaker" #~ msgstr "wavbreaker konfigurieren" #~ msgid "Merge wave files together" #~ msgstr "Wave-Dateien zusammenfügen" #~ msgid "Quit" #~ msgstr "Beenden" #~ msgid "Close wavbreaker" #~ msgstr "wavbreaker beenden" #~ msgid "Display toolbar" #~ msgstr "Toolbar anzeigen" #~ msgid "Show or hide the main window toolbar" #~ msgstr "Anzeigen oder Verstecken der Toolbar" #~ msgid "Draw moodbar over the waveform graph" #~ msgstr "Moodbar über den Wave-Graphen zeichnen" #~ msgid "Add track break at cursor position" #~ msgstr "Track-Break an Cursor-Position hinzufügen" #~ msgid "Remove selected track break" #~ msgstr "Gewählten Track Break entfernen" #~ msgid "Set cursor position to track break" #~ msgstr "Cursor-Position auf Track-Break setzen" #~ msgid "Set view to cursor marker" #~ msgstr "Anzeige auf die Cursor-Position setzen" #~ msgid "Automatically rename all track breaks" #~ msgstr "Alle Track Breaks automatisch umbenennen" #~ msgid "Generate moodbar data" #~ msgstr "Moodbar-Daten erstellen" #~ msgid "Split into chunks with specified size" #~ msgstr "Splitten in Teile mit angegebener Größe" #~ msgid "Export to TOC" #~ msgstr "Exportiere zu TOC" #~ msgid "Export to CD-ROM TOC file for burning" #~ msgstr "Exportieren als CD-ROM TOC Datei zum brennen" #~ msgid "_Import from TOC" #~ msgstr "_Importiere von TOC" #~ msgid "_Save offsets to text file" #~ msgstr "Offsets in Text-Datei _speichern" #~ msgid "Save track breaks to text file" #~ msgstr "Track-Breaks in Text-Datei speichern" #~ msgid "_Load offsets from text file" #~ msgstr "Offsets aus Text-Datei _laden" #~ msgid "Load track breaks from text file" #~ msgstr "Track-Breaks von Text-Datei laden" #~ msgid "Start/Stop playback of media" #~ msgstr "Wiedergabe starten/stoppen/fortsetzen" #~ msgid "Jump to previous silent frame" #~ msgstr "Springe zum vorherigen stillen Frame" #~ msgid "Show information about " #~ msgstr "Informationen anzeigen über " #~ msgid "_File" #~ msgstr "_Datei" #~ msgid "_Edit" #~ msgstr "_Bearbeiten" #~ msgid "_View" #~ msgstr "_Anzeige" #~ msgid "_Help" #~ msgstr "_Hilfe" #~ msgid "Add" #~ msgstr "Hinzufügen" #~ msgid "Auto-Rename" #~ msgstr "Alle umbenennen" #~ msgid "Audio output disabled" #~ msgstr "Audio-Ausgabe deaktiviert" #~ msgid "" #~ "If you want to enable audio output, please select a audio driver in the " #~ "preferences dialog." #~ msgstr "" #~ "Wenn Sie die Audio-Ausgabe aktivieren wollen, wählen Sie bitte einen " #~ "Treiber im Einstellungs-Dialog." #~ msgid "Enter the dirname to save files:" #~ msgstr "Verzeichnis, in dem Tracks gespeichert werden:" #~ msgid " (%d of %d)" #~ msgstr " (%d von %d)" #~ msgid "Opening: " #~ msgstr "Öffne:" #~ msgid "Play from cursor" #~ msgstr "Wiedergabe vom Cursor" wavbreaker-0.13/po/es.po000066400000000000000000000403161356554132000151630ustar00rootroot00000000000000# Spanish translation for wavbreaker # Copyright (C) 2009 Thomas Perl, Ricardo Mones # This file is distributed under the same license as the wavbreaker package. # Ricardo Mones , 2009 # msgid "" msgstr "" "Project-Id-Version: wavbreaker 0.10\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-11-15 20:23+0100\n" "PO-Revision-Date: 2009-05-14 19:11+0200\n" "Last-Translator: Ricardo Mones \n" "Language-Team: Ricardo Mones \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/about.c:29 msgid "Split a wave file into multiple chunks" msgstr "Parte un fichero de onda en varios bloques" #: src/appconfig.c:370 msgid "Select Output Directory" msgstr "Seleccionar el directorio de salida" #: src/appconfig.c:372 msgid "Cancel" msgstr "" #: src/appconfig.c:373 #, fuzzy msgid "Open" msgstr "_Abrir" #: src/appconfig.c:419 src/wavbreaker.c:2749 msgid "Preferences" msgstr "Preferencias" #: src/appconfig.c:439 msgid "General" msgstr "General" #: src/appconfig.c:441 msgid "Save output files in folder:" msgstr "Guardar los ficheros de salida en la carpeta:" #: src/appconfig.c:454 msgid "Browse" msgstr "Buscar" #: src/appconfig.c:464 msgid "Maximum volume considered silence (in percent):" msgstr "Volumen máximo considerado silencio (porcentaje):" #: src/appconfig.c:478 msgid "File Naming" msgstr "Nombrado de ficheros" #: src/appconfig.c:480 msgid "Standard (##)" msgstr "Estándar (nº)" #: src/appconfig.c:485 msgid "Separator:" msgstr "Separador:" #: src/appconfig.c:502 msgid "Prepend number before filename" msgstr "Número antes del nombre de fichero" #: src/appconfig.c:509 msgid "etree.org (d#t##)" msgstr "etree.org (nºDnºP)" #: src/appconfig.c:512 msgid "CD Length:" msgstr "Longitud del CD:" #: src/autosplit.c:76 msgid "Interval (MM:SS.FF, MM:SS, SS.FF or MM):" msgstr "" #: src/autosplit.c:87 #, fuzzy msgid "Split" msgstr "Auto-recorte" #: src/guimerge.c:96 src/guimerge.c:188 src/wavbreaker.c:1447 #: src/wavbreaker.c:2371 msgid "All files" msgstr "Todos los ficheros" #: src/guimerge.c:100 src/guimerge.c:192 src/wavbreaker.c:1451 #: src/wavbreaker.c:2375 msgid "Supported files" msgstr "Ficheros soportados" #: src/guimerge.c:103 msgid "Select filename for merged wave file" msgstr "Seleccionar el nombre para el fichero de onda agregado" #: src/guimerge.c:106 src/guimerge.c:197 src/moodbar.c:110 src/saveas.c:52 #: src/wavbreaker.c:1461 src/wavbreaker.c:2331 src/wavbreaker.c:2382 msgid "_Cancel" msgstr "" #: src/guimerge.c:107 src/saveas.c:53 src/wavbreaker.c:2332 msgid "_Save" msgstr "_Guardar" #: src/guimerge.c:116 msgid "Open file in wavbreaker after merge" msgstr "Abrir el fichero en wavbreaker despues de agregar" #: src/guimerge.c:160 msgid "Wrong file format - skipping file" msgstr "Formato de fichero erróneo - ignorando el fichero" #: src/guimerge.c:195 msgid "Add wave file to merge" msgstr "Añadir fichero de onda a la agregación" #: src/guimerge.c:198 src/wavbreaker.c:1462 src/wavbreaker.c:2383 msgid "_Open" msgstr "_Abrir" #: src/guimerge.c:272 src/wavbreaker.c:2745 msgid "Merge wave files" msgstr "Agregar ficheros de onda" #: src/guimerge.c:309 src/wavbreaker.c:473 msgid "File Name" msgstr "Nombre de fichero" #: src/guimerge.c:320 msgid "Length" msgstr "Longitud" #: src/guimerge.c:333 msgid "_Add" msgstr "" #: src/guimerge.c:337 #, fuzzy msgid "_Remove" msgstr "Eliminar" #: src/guimerge.c:344 msgid "Merge" msgstr "Agregar" #: src/guimerge.c:379 msgid "Merging wave files" msgstr "Agregando ficheros de onda" #: src/guimerge.c:389 msgid "The selected files are now being merged. This can take some time." msgstr "" "Se están agreegando los ficheros seleccionados. Puede tardar cierto tiempo." #: src/guimerge.c:411 src/wavbreaker.c:1167 msgid "Operation successful" msgstr "Operación completada con éxito" #: src/guimerge.c:411 #, fuzzy msgid "The files have been merged." msgstr "Los ficheros se han agregado como %s." #: src/guimerge.c:418 #, c-format msgid "Adding %s" msgstr "Añadiendo %s" #: src/guimerge.c:434 #, c-format msgid "%d of %d files merged" msgstr "%d de %d ficheros agregados" #: src/guimerge.c:436 #, c-format msgid "%d of 1 file merged" msgstr "%d de 1 fichero agregado" #: src/moodbar.c:100 src/moodbar.c:116 msgid "Generating moodbar" msgstr "Generando barra de análisis" #: src/moodbar.c:106 #, fuzzy msgid "_Hide window" msgstr "Ocultar ventana" #: src/moodbar.c:115 msgid "" "The moodbar tool analyzes your audio file and generates a colorful " "representation of the audio data." msgstr "" "La herramienta de barra de análisis analiza el fichero de audio y genera una " "representación coloreada de los datos." #: src/moodbar.c:136 msgid "Cannot launch \"moodbar\"" msgstr "No puedo lanzar la barra de análisis" #: src/moodbar.c:136 msgid "" "wavbreaker could not launch the moodbar application, which is needed to " "generate the moodbar. You can download the moodbar package from:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" msgstr "" "wavbreaker no pudo ejecutar la aplicación de barra de análisis, que es " "necesaria para generar la barra. Puede descargar el paquete desde:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" #: src/overwritedialog.c:98 #, fuzzy, c-format msgid "" "%s already exists.\n" "\n" "Do you want to overwrite the existing file?" msgstr "" " ya existe.\n" "\n" "¿Quiere sobreescribir el fichero existente?" #: src/overwritedialog.c:105 msgid "Overwrite all files" msgstr "Sobreescribir todos los ficheros" #: src/overwritedialog.c:118 #, fuzzy msgid "_No" msgstr "_Ir" #: src/overwritedialog.c:123 msgid "_Yes" msgstr "" #: src/reallyquit.c:28 msgid "Quit wavbreaker?" msgstr "¿Salir de wavbreaker?" #: src/reallyquit.c:29 msgid "If you quit wavbreaker now, any unsaved chunks will be lost." msgstr "Si sale de wavbreaker ahora cualquier trozo no guardado se perderá." #: src/sample.c:455 msgid "Open as RAW audio" msgstr "Abrir como audio en crudo" #: src/sample.c:456 msgid "" "The file you selected does not contain a wave header. wavbreaker can " "interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the " "byte order for the RAW audio or cancel to abort." msgstr "" "El fichero que ha seleccionado no tiene una cabecera de fichero de onda. " "Wavbreaker puede interpretar el fichero como audio de 16 bit con signo, " "44100 Hz, estéreo. Elija el orden de los bytes para el audio en crudo o " "cancelar para abortar." #: src/sample.c:464 msgid "Big endian" msgstr "Más significativo" #: src/sample.c:465 msgid "Little endian" msgstr "Menos significativo" #: src/sample.c:571 #, c-format msgid "Error opening %s: %s" msgstr "Error abriendo %s: %s" #: src/saveas.c:49 msgid "Select folder to save wave files" msgstr "Seleccione la carpeta para guardar los ficheros de onda" #: src/wav.c:35 msgid "" "Error reading chunk. Maybe the wave file you are trying to load is truncated?" msgstr "" "Error leyendo bloque. ¿Quizás el fichero que está cargando está truncado?" #: src/wav.c:85 #, c-format msgid "Cannot open %s: %s" msgstr "No puedo abrir %s: %s" #: src/wav.c:92 msgid "Cannot read wave header." msgstr "No se puede leer la cabecera de onda." #: src/wav.c:98 #, c-format msgid "%s is not a wave file." msgstr "%s no es un fichero de onda." #: src/wav.c:139 src/wav.c:192 src/wav.c:213 #, c-format msgid "Error seeking to %u in %s: %s" msgstr "Error desplazándose a %u en %s: %s" #: src/wav.c:162 #, fuzzy, c-format msgid "Error reading format chunk: %s" msgstr "Error desplazándose a %u en %s: %s" #: src/wav.c:178 msgid "Loading compressed wave data is not supported." msgstr "La carga de datos de onda comprimidos no está soportada." #: src/wavbreaker.c:462 msgid "Write" msgstr "Escribir" #: src/wavbreaker.c:491 msgid "Time" msgstr "Tiempo" #: src/wavbreaker.c:502 msgid "Duration" msgstr "Duración" #: src/wavbreaker.c:512 msgid "Offset" msgstr "Desplaz." #: src/wavbreaker.c:553 msgid "Check all" msgstr "Marcar todo" #: src/wavbreaker.c:554 msgid "Check none" msgstr "Marcar nada" #: src/wavbreaker.c:555 msgid "Invert check" msgstr "Invertir marca" #: src/wavbreaker.c:559 #, fuzzy msgid "Auto-rename track breaks" msgstr "Renombrar cortes de pista" #: src/wavbreaker.c:563 src/wavbreaker.c:2020 msgid "Remove track break" msgstr "Eliminar corte de pista" #: src/wavbreaker.c:564 msgid "Jump to track break" msgstr "Saltar al corte de pista" #: src/wavbreaker.c:1128 msgid "Splitting wave file" msgstr "Dividir fichero de onda" #: src/wavbreaker.c:1139 msgid "" "The selected track breaks are now written to disk. This can take some time." msgstr "" "Los trozos de pista seleccionado se están escribiendo en disco. Puede llevar " "un tiempo." #: src/wavbreaker.c:1163 #, c-format msgid "The file %s has been split into %d parts." msgstr "El fichero %s se ha dividido en %d trozos." #: src/wavbreaker.c:1165 #, c-format msgid "The file %s has been split into one part." msgstr "El fichero %s se ha dividido en un trozo." #: src/wavbreaker.c:1182 #, c-format msgid "Writing %s" msgstr "Escribiendo %s" #: src/wavbreaker.c:1199 #, c-format msgid "%d of %d parts written" msgstr "%d de %d trozos escritos" #: src/wavbreaker.c:1201 #, c-format msgid "%d of 1 part written" msgstr "%d de 1 trozo escrito" #: src/wavbreaker.c:1274 msgid "Analyzing waveform" msgstr "Analizando la onda" #: src/wavbreaker.c:1286 msgid "" "The waveform data of the selected file is being analyzed and processed. This " "can take some time." msgstr "" "Los datos de onda del fichero seleccionado se están analizando y procesando. " "Esto puede llevar un tiempo." #: src/wavbreaker.c:1294 #, c-format msgid "Analyzing %s" msgstr "Analizando %s" #: src/wavbreaker.c:1352 #, c-format msgid "%d of %d MB analyzed" msgstr "%d de %d MB analizados" #: src/wavbreaker.c:1363 msgid "Error opening file" msgstr "Error abriendo el fichero" #: src/wavbreaker.c:1459 msgid "Open File" msgstr "Abrir fichero" #: src/wavbreaker.c:2019 msgid "Add track break" msgstr "Añadir corte de pista" #: src/wavbreaker.c:2021 msgid "Jump to cursor marker" msgstr "Saltar al cursor" #: src/wavbreaker.c:2121 #, c-format msgid "Cursor" msgstr "Cursor" #: src/wavbreaker.c:2128 msgid "Playing" msgstr "Reproduciendo" #: src/wavbreaker.c:2292 src/wavbreaker.c:2318 msgid "Text files" msgstr "Ficheros de texto" #: src/wavbreaker.c:2294 src/wavbreaker.c:2322 msgid "TOC files" msgstr "Ficheros TOC" #: src/wavbreaker.c:2296 src/wavbreaker.c:2326 #, fuzzy msgid "CUE files" msgstr "Ficheros TOC" #: src/wavbreaker.c:2329 #, fuzzy msgid "Export track breaks to file" msgstr "Guardar cortes en un fichero" #: src/wavbreaker.c:2380 #, fuzzy msgid "Import track breaks from file" msgstr "Importa los cortes desde un fichero TOC" #: src/wavbreaker.c:2397 src/wavbreaker.c:2402 msgid "Import failed" msgstr "Falló la importación" #: src/wavbreaker.c:2397 msgid "There has been an error importing track breaks from the TOC file." msgstr "Hubo un error importando los cortes del fichero TOC." #: src/wavbreaker.c:2402 #, fuzzy msgid "There has been an error importing track breaks from the CUE file." msgstr "Hubo un error importando los cortes del fichero TOC." #: src/wavbreaker.c:2585 msgid "Time offset:" msgstr "" #: src/wavbreaker.c:2721 #, fuzzy msgid "Open file" msgstr "Abrir fichero" #: src/wavbreaker.c:2726 #, fuzzy msgid "Open menu" msgstr "Abrir fichero" #: src/wavbreaker.c:2734 msgid "Display moodbar" msgstr "Mostrar barra de análisis" #: src/wavbreaker.c:2735 msgid "Generate moodbar" msgstr "Generar barra de visualización" #: src/wavbreaker.c:2740 #, fuzzy msgid "Import track breaks" msgstr "Saltar al corte de pista" #: src/wavbreaker.c:2741 #, fuzzy msgid "Export track breaks" msgstr "Saltar al corte de pista" #: src/wavbreaker.c:2753 msgid "About" msgstr "Acerca de" #: src/wavbreaker.c:2762 msgid "Save file parts" msgstr "" #: src/wavbreaker.c:2858 msgid "Toggle playback" msgstr "" #: src/wavbreaker.c:2863 msgid "Cursor position:" msgstr "Posición del cursor:" #: src/wavbreaker.c:2880 msgid "Seek to previous silence" msgstr "Buscar el silencio anterior" #: src/wavbreaker.c:2887 #, fuzzy msgid "Jump to time" msgstr "Salta hasta la siguiente trama de silencio" #: src/wavbreaker.c:2899 msgid "Seek to next silence" msgstr "Buscar el siguiente silencio" #: src/wavbreaker.c:2909 msgid "Auto-split by interval" msgstr "" #: src/wavbreaker.c:3048 src/wavbreaker.c:3070 msgid "Export failed" msgstr "La exportación falló" #: src/wavbreaker.c:3048 msgid "There has been an error exporting track breaks to the TOC file." msgstr "Ha habido un error exportando los trozos de pista al fichero TOC." #: src/wavbreaker.c:3070 msgid "Unrecognised export type" msgstr "" #~ msgid "Disable audio output" #~ msgstr "Deshabilitar la salida de audio" #~ msgid "wavbreaker Preferences" #~ msgstr "Preferencias de wavbreaker" #~ msgid "Audio Device" #~ msgstr "Dispositivo de audio" #~ msgid "Audio Device:" #~ msgstr "Dispositivo de audio:" #~ msgid "Output device:" #~ msgstr "Dispositivo de salida:" #~ msgid "Enter the time for autosplit:" #~ msgstr "Introduzca el tiempo de auto-troceado:" #~ msgid "Example (5min, 32sec, 12subsec):" #~ msgstr "Ejemplo (5min, 32sec, 12subsec):" #~ msgid "Add wave files to this list and click on \"Merge\"." #~ msgstr "Añada ficheros a esta lista y pulse en \"Agregar\"." #~ msgid "Stop" #~ msgstr "Detener" #~ msgid "Play" #~ msgstr "Reproducir" #~ msgid "Select name for TOC file to export" #~ msgstr "Seleccione el nombre del fichero TOC a exportar" #~ msgid "TOC export successful" #~ msgstr "Exportación de TOC correcta" #~ msgid "Load track breaks from file" #~ msgstr "Cargar cortes de un fichero" #~ msgid "Load track breaks from TOC file" #~ msgstr "Cargar cortes de un fichero TOC" #~ msgid "Open a wave file" #~ msgstr "Abrir un fichero de onda" #~ msgid "Save track breaks" #~ msgstr "Guardar los trozos" #~ msgid "Save to..." #~ msgstr "Guardar en..." #~ msgid "Save track breaks to folder" #~ msgstr "Guardar los trozos en una carpeta" #~ msgid "Configure wavbreaker" #~ msgstr "Configurar wavbreaker" #~ msgid "Merge wave files together" #~ msgstr "Agregar ficheros de onda" #~ msgid "Quit" #~ msgstr "Salir" #~ msgid "Close wavbreaker" #~ msgstr "Cerrar wavbreaker" #~ msgid "Display toolbar" #~ msgstr "Mostrar la barra de herramientas" #~ msgid "Show or hide the main window toolbar" #~ msgstr "Mostrar u ocultar la barra de herramientas de la ventana principal" #~ msgid "Draw moodbar over the waveform graph" #~ msgstr "Dibujar la barra de análisis sobre el gráfico de la onda" #~ msgid "Add track break at cursor position" #~ msgstr "Añade un corte de pista en la posición del cursor" #~ msgid "Remove selected track break" #~ msgstr "Elimina el corte de pista seleccionado" #~ msgid "Set cursor position to track break" #~ msgstr "Establece la posición del cursor en el corte de pista" #~ msgid "Set view to cursor marker" #~ msgstr "Establece la vista sobre el cursor" #~ msgid "Automatically rename all track breaks" #~ msgstr "Renombrar automáticamente todos los cortes" #~ msgid "Generate moodbar data" #~ msgstr "Genera los datos de la barra de visualización" #~ msgid "Split into chunks with specified size" #~ msgstr "Recorta trozos del tamaño especificado" #~ msgid "Export to TOC" #~ msgstr "Exportar a TOC" #~ msgid "Export to CD-ROM TOC file for burning" #~ msgstr "Exporta a un fichero TOC de CD-ROM para grabarlo" #~ msgid "_Import from TOC" #~ msgstr "_Importar desde TOC" #~ msgid "_Save offsets to text file" #~ msgstr "_Guardar desplazamientos a un fichero de texto" #~ msgid "Save track breaks to text file" #~ msgstr "Guarda los cortes de pista a un fichero de texto" #~ msgid "_Load offsets from text file" #~ msgstr "_Guardar desplazamientos de un fichero de texto" #~ msgid "Load track breaks from text file" #~ msgstr "Carga los cortes de pista de un fichero de texto" #~ msgid "Start/Stop playback of media" #~ msgstr "Iniciar/detener la reproducción de medios" #~ msgid "Jump to previous silent frame" #~ msgstr "Salta hasta la trama de silencio anterior" #~ msgid "Show information about " #~ msgstr "Muestra información sobre " #~ msgid "_File" #~ msgstr "_Fichero" #~ msgid "_Edit" #~ msgstr "_Editar" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "_Help" #~ msgstr "_Ayuda" #~ msgid "Add" #~ msgstr "Añadir" #~ msgid "Auto-Rename" #~ msgstr "Auto-renombrar" wavbreaker-0.13/po/fr.po000066400000000000000000000417461356554132000151730ustar00rootroot00000000000000# translation of fr.po to português # translation of fr.po to # French translation of wavbreaker # Copyright (C) 2007 José Jorge # This file is distributed under the same license as the wavbreaker package. # # Jose JORGE , 2007, 2019. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-11-15 20:23+0100\n" "PO-Revision-Date: 2019-11-11 09:38+0100\n" "Last-Translator: Jose JORGE \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 19.08.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/about.c:29 msgid "Split a wave file into multiple chunks" msgstr "Couper un fichier wave en plusieurs morceaux" #: src/appconfig.c:370 msgid "Select Output Directory" msgstr "Sélectionner le Dossier de Sortie" #: src/appconfig.c:372 msgid "Cancel" msgstr "Annuler" #: src/appconfig.c:373 msgid "Open" msgstr "Ouvrir" #: src/appconfig.c:419 src/wavbreaker.c:2749 msgid "Preferences" msgstr "Préférences" #: src/appconfig.c:439 msgid "General" msgstr "Général" #: src/appconfig.c:441 msgid "Save output files in folder:" msgstr "Enregistrer les fichiers coupés dans le dossier :" #: src/appconfig.c:454 msgid "Browse" msgstr "Parcourir" #: src/appconfig.c:464 msgid "Maximum volume considered silence (in percent):" msgstr "Pourcentage maximal du volume considéré comme du silence:" #: src/appconfig.c:478 msgid "File Naming" msgstr "Nommage des Fichiers" #: src/appconfig.c:480 msgid "Standard (##)" msgstr "Standard (##)" #: src/appconfig.c:485 msgid "Separator:" msgstr "Séparateur:" #: src/appconfig.c:502 msgid "Prepend number before filename" msgstr "Mettre le numéro avant le nom du fichier" #: src/appconfig.c:509 msgid "etree.org (d#t##)" msgstr "etree.org (d#t##)" #: src/appconfig.c:512 msgid "CD Length:" msgstr "Durée du CD:" #: src/autosplit.c:76 msgid "Interval (MM:SS.FF, MM:SS, SS.FF or MM):" msgstr "Intervale (MM:SS.FF, MM:SS, SS.FF or MM):" #: src/autosplit.c:87 msgid "Split" msgstr "Couper" #: src/guimerge.c:96 src/guimerge.c:188 src/wavbreaker.c:1447 #: src/wavbreaker.c:2371 msgid "All files" msgstr "Tous les fichiers" #: src/guimerge.c:100 src/guimerge.c:192 src/wavbreaker.c:1451 #: src/wavbreaker.c:2375 msgid "Supported files" msgstr "Fichiers acceptés" #: src/guimerge.c:103 msgid "Select filename for merged wave file" msgstr "Sélectionner le nom du fichier où coller les fichiers wave" #: src/guimerge.c:106 src/guimerge.c:197 src/moodbar.c:110 src/saveas.c:52 #: src/wavbreaker.c:1461 src/wavbreaker.c:2331 src/wavbreaker.c:2382 msgid "_Cancel" msgstr "A_nnuler" #: src/guimerge.c:107 src/saveas.c:53 src/wavbreaker.c:2332 msgid "_Save" msgstr "Enregi_strer" #: src/guimerge.c:116 msgid "Open file in wavbreaker after merge" msgstr "Ouvrir le fichier dans wavbreaker après le collage" #: src/guimerge.c:160 msgid "Wrong file format - skipping file" msgstr "Mauvais format de fichier - fichier ignoré" #: src/guimerge.c:195 msgid "Add wave file to merge" msgstr "Ajouter le fichier wave au collage" #: src/guimerge.c:198 src/wavbreaker.c:1462 src/wavbreaker.c:2383 msgid "_Open" msgstr "_Ouvrir" #: src/guimerge.c:272 src/wavbreaker.c:2745 msgid "Merge wave files" msgstr "Concaténer des fichiers wave" #: src/guimerge.c:309 src/wavbreaker.c:473 msgid "File Name" msgstr "Nom du Fichier" #: src/guimerge.c:320 msgid "Length" msgstr "Durée" #: src/guimerge.c:333 msgid "_Add" msgstr "_Ajouter" #: src/guimerge.c:337 msgid "_Remove" msgstr "Supp_rimer" #: src/guimerge.c:344 msgid "Merge" msgstr "Concaténer" #: src/guimerge.c:379 msgid "Merging wave files" msgstr "Concatène les fichiers wave" #: src/guimerge.c:389 msgid "The selected files are now being merged. This can take some time." msgstr "" "Les fichiers sélectionnés sont maintenant concaténés. Cela peut être long." #: src/guimerge.c:411 src/wavbreaker.c:1167 msgid "Operation successful" msgstr "Opération réussie" #: src/guimerge.c:411 msgid "The files have been merged." msgstr "Les fichiers ont été concaténés." #: src/guimerge.c:418 #, c-format msgid "Adding %s" msgstr "Ajout de %s" #: src/guimerge.c:434 #, c-format msgid "%d of %d files merged" msgstr "%d des %d fichiers concaténés" #: src/guimerge.c:436 #, c-format msgid "%d of 1 file merged" msgstr "%d d'un fichier concaténé" #: src/moodbar.c:100 src/moodbar.c:116 msgid "Generating moodbar" msgstr "Calcul de la barre d'ambiance" #: src/moodbar.c:106 msgid "_Hide window" msgstr "Cac_her cette fenêtre" #: src/moodbar.c:115 msgid "" "The moodbar tool analyzes your audio file and generates a colorful " "representation of the audio data." msgstr "" "L'outil moodbar analyse votre fichier audio et crée une représentation " "visuelle des données audio." #: src/moodbar.c:136 msgid "Cannot launch \"moodbar\"" msgstr "Impossible d'utiliser \"moodbar\" " #: src/moodbar.c:136 msgid "" "wavbreaker could not launch the moodbar application, which is needed to " "generate the moodbar. You can download the moodbar package from:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" msgstr "" "wavbreaker n'a pas réussi à lancer l'outil moodbar, qui permet de créer la " "barre d'ambiance. Vous pouvez le télécharger à partir de:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" #: src/overwritedialog.c:98 #, c-format msgid "" "%s already exists.\n" "\n" "Do you want to overwrite the existing file?" msgstr "" "%s existe déjà.\n" "\n" "Voulez-vous écraser le fichier existant?" #: src/overwritedialog.c:105 msgid "Overwrite all files" msgstr "Écraser tous les fichiers" #: src/overwritedialog.c:118 msgid "_No" msgstr "_Non" #: src/overwritedialog.c:123 msgid "_Yes" msgstr "_Oui" #: src/reallyquit.c:28 msgid "Quit wavbreaker?" msgstr "Quitter wavbreaker?" #: src/reallyquit.c:29 msgid "If you quit wavbreaker now, any unsaved chunks will be lost." msgstr "Si vous quittez maintenant, toute partie non enregistrée sera perdue." #: src/sample.c:455 msgid "Open as RAW audio" msgstr "Ouvrir en tant que son RAW" #: src/sample.c:456 msgid "" "The file you selected does not contain a wave header. wavbreaker can " "interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the " "byte order for the RAW audio or cancel to abort." msgstr "" "Le fichier que vous avez sélectionné ne contient pas d'en-tête wave. " "wavbreaker peut interpréter ce fichier comme du son \"16 bits, 44100 Hz, " "Stéréo\". Choisissez l'ordre des octets pour le son RAW ou annulez pour " "quitter." #: src/sample.c:464 msgid "Big endian" msgstr "Gros-boutiste" #: src/sample.c:465 msgid "Little endian" msgstr "Petit-boutiste" #: src/sample.c:571 #, c-format msgid "Error opening %s: %s" msgstr "Erreur à l'ouverture de %s : %s" #: src/saveas.c:49 msgid "Select folder to save wave files" msgstr "Sélectionner le dossier où enregistrer les fichiers wave" #: src/wav.c:35 msgid "" "Error reading chunk. Maybe the wave file you are trying to load is truncated?" msgstr "" "Erreur lors de la lecture. Le fichier que vous chargez a peut-être été " "tronqué?" #: src/wav.c:85 #, c-format msgid "Cannot open %s: %s" msgstr "Impossible d'ouvrir %s : %s" #: src/wav.c:92 msgid "Cannot read wave header." msgstr "Impossible de lire l'en-tête wave." #: src/wav.c:98 #, c-format msgid "%s is not a wave file." msgstr "%s n'est pas un fichier wave." #: src/wav.c:139 src/wav.c:192 src/wav.c:213 #, c-format msgid "Error seeking to %u in %s: %s" msgstr "Erreur en atteignant %u dans %s: %s" #: src/wav.c:162 #, c-format msgid "Error reading format chunk: %s" msgstr "Erreur en lisant le format : %s" #: src/wav.c:178 msgid "Loading compressed wave data is not supported." msgstr "Les données wave compactées ne sont pas supportées." #: src/wavbreaker.c:462 msgid "Write" msgstr "Écrire" #: src/wavbreaker.c:491 msgid "Time" msgstr "Temps" #: src/wavbreaker.c:502 msgid "Duration" msgstr "Durée" #: src/wavbreaker.c:512 msgid "Offset" msgstr "Décalage" #: src/wavbreaker.c:553 msgid "Check all" msgstr "Séleccioner Tout" #: src/wavbreaker.c:554 msgid "Check none" msgstr "Déséleccioner tout" #: src/wavbreaker.c:555 msgid "Invert check" msgstr "Inverser la sélection" #: src/wavbreaker.c:559 msgid "Auto-rename track breaks" msgstr "Renommer automatiquement les parties" #: src/wavbreaker.c:563 src/wavbreaker.c:2020 msgid "Remove track break" msgstr "Supprimer une séparation" #: src/wavbreaker.c:564 msgid "Jump to track break" msgstr "Aller à la séparation" #: src/wavbreaker.c:1128 msgid "Splitting wave file" msgstr "Découpage en cours" #: src/wavbreaker.c:1139 msgid "" "The selected track breaks are now written to disk. This can take some time." msgstr "" "Les découpages du fichier sont maintenant en écriture sur le disque. Cela " "peut être long." #: src/wavbreaker.c:1163 #, c-format msgid "The file %s has been split into %d parts." msgstr "Le fichier %s a été coupé en %d morceaux." #: src/wavbreaker.c:1165 #, c-format msgid "The file %s has been split into one part." msgstr "Le fichier %s a été coupé en un morceau." #: src/wavbreaker.c:1182 #, c-format msgid "Writing %s" msgstr "Écriture de %s" #: src/wavbreaker.c:1199 #, c-format msgid "%d of %d parts written" msgstr "%d des %d morceaux écrits" #: src/wavbreaker.c:1201 #, c-format msgid "%d of 1 part written" msgstr "%d d'un morceau écrit" #: src/wavbreaker.c:1274 msgid "Analyzing waveform" msgstr "Analyse de l'onde sonore" #: src/wavbreaker.c:1286 msgid "" "The waveform data of the selected file is being analyzed and processed. This " "can take some time." msgstr "" "L'onde sonore du fichier sélectionné est en cours d'analyse et traitement. " "Cela peut être long." #: src/wavbreaker.c:1294 #, c-format msgid "Analyzing %s" msgstr "Analyse de %s" #: src/wavbreaker.c:1352 #, c-format msgid "%d of %d MB analyzed" msgstr "%d de %d Mo analysés" #: src/wavbreaker.c:1363 msgid "Error opening file" msgstr "Erreur à l'ouverture du fichier" #: src/wavbreaker.c:1459 msgid "Open File" msgstr "Ouvrir un fichier" #: src/wavbreaker.c:2019 msgid "Add track break" msgstr "Ajouter une séparation" #: src/wavbreaker.c:2021 msgid "Jump to cursor marker" msgstr "Aller au marqueur du curseur" #: src/wavbreaker.c:2121 #, c-format msgid "Cursor" msgstr "Curseur" #: src/wavbreaker.c:2128 msgid "Playing" msgstr "En lecture" #: src/wavbreaker.c:2292 src/wavbreaker.c:2318 msgid "Text files" msgstr "Fichiers Texte" #: src/wavbreaker.c:2294 src/wavbreaker.c:2322 msgid "TOC files" msgstr "Fichiers TOC" #: src/wavbreaker.c:2296 src/wavbreaker.c:2326 msgid "CUE files" msgstr "Fichiers CUE" #: src/wavbreaker.c:2329 msgid "Export track breaks to file" msgstr "Exporter les séparations de piste dans un fichier" #: src/wavbreaker.c:2380 msgid "Import track breaks from file" msgstr "Importer les séparations de piste depuis un fichier" #: src/wavbreaker.c:2397 src/wavbreaker.c:2402 msgid "Import failed" msgstr "L'importation a échoué" #: src/wavbreaker.c:2397 msgid "There has been an error importing track breaks from the TOC file." msgstr "" "Une erreur est survenue lors de l'importation des coupures de piste depuis " "le fichier TOC." #: src/wavbreaker.c:2402 msgid "There has been an error importing track breaks from the CUE file." msgstr "" "Une erreur est survenue lors de l'importation des coupures de piste depuis " "le fichier CUE." #: src/wavbreaker.c:2585 msgid "Time offset:" msgstr "Décalage temporel :" #: src/wavbreaker.c:2721 msgid "Open file" msgstr "Ouvrir un fichier" #: src/wavbreaker.c:2726 msgid "Open menu" msgstr "Ouvrir le menu" #: src/wavbreaker.c:2734 msgid "Display moodbar" msgstr "Afficher la barre d'ambiance sonore" #: src/wavbreaker.c:2735 msgid "Generate moodbar" msgstr "Créer la barre d'ambiance" #: src/wavbreaker.c:2740 msgid "Import track breaks" msgstr "Importer les séparations de piste" #: src/wavbreaker.c:2741 msgid "Export track breaks" msgstr "Exporter les séparations de piste" #: src/wavbreaker.c:2753 msgid "About" msgstr "À propos" #: src/wavbreaker.c:2762 msgid "Save file parts" msgstr "Enregistrer les parties" #: src/wavbreaker.c:2858 msgid "Toggle playback" msgstr "Lire/Interrompre" #: src/wavbreaker.c:2863 msgid "Cursor position:" msgstr "Position du curseur :" #: src/wavbreaker.c:2880 msgid "Seek to previous silence" msgstr "Revenir au silence précédent" #: src/wavbreaker.c:2887 msgid "Jump to time" msgstr "Aller au temps" #: src/wavbreaker.c:2899 msgid "Seek to next silence" msgstr "Avancer au silence suivant" #: src/wavbreaker.c:2909 msgid "Auto-split by interval" msgstr "Découper automatiquement par intervalle" #: src/wavbreaker.c:3048 src/wavbreaker.c:3070 msgid "Export failed" msgstr "L'exportation a échoué" #: src/wavbreaker.c:3048 msgid "There has been an error exporting track breaks to the TOC file." msgstr "" "Une erreur est survenue lors de l'exportation des coupures de piste vers le " "fichier TOC." #: src/wavbreaker.c:3070 msgid "Unrecognised export type" msgstr "Type d'exportation non reconnu" #~ msgid "Disable audio output" #~ msgstr "Désactiver la sortie sonore" #~ msgid "wavbreaker Preferences" #~ msgstr "Préférences" #~ msgid "Audio Device" #~ msgstr "Périphérique Audio" #~ msgid "Audio Device:" #~ msgstr "Périphérique Audio :" #~ msgid "Output device:" #~ msgstr "Périphérique de lecture:" #~ msgid "Enter the time for autosplit:" #~ msgstr "Écrivez la durée pour la coupure automatique :" #~ msgid "Example (5min, 32sec, 12subsec):" #~ msgstr "Exemple (5min, 32sec, 12subsec):" #~ msgid "Add wave files to this list and click on \"Merge\"." #~ msgstr "" #~ "Ajoutez les fichiers wave à cette liste et cliquez sur \"Concaténer\"." #~ msgid "Stop" #~ msgstr "Arrêter" #~ msgid "Play" #~ msgstr "Écouter" #~ msgid "Select name for TOC file to export" #~ msgstr "Sélectionner le nom du fichier TOC à exporter" #~ msgid "TOC export successful" #~ msgstr "Exportation de la TOC réussie" #~ msgid "" #~ "The track breaks have been exported to a TOC file that can be used to " #~ "burn a CD from the wave file." #~ msgstr "" #~ "Les coupures de piste ont été exportées vers le fichier TOC qui peut être " #~ "utilisé pour graver un CD à partir du fichier wave." #~ msgid "Load track breaks from file" #~ msgstr "Charger les séparations de piste depuis un fichier" #~ msgid "Load track breaks from TOC file" #~ msgstr "Charger les séparations de piste depuis un fichier TOC" #~ msgid "Open a wave file" #~ msgstr "Ouvrir un fichier wave" #~ msgid "Save track breaks" #~ msgstr "Enregistrer les séparateurs de piste" #~ msgid "Save to..." #~ msgstr "Enregistrer sous..." #~ msgid "Save track breaks to folder" #~ msgstr "Enregistrer les séparateurs de piste dans un dossier" #~ msgid "Configure wavbreaker" #~ msgstr "Configurer wavbreaker" #~ msgid "Merge wave files together" #~ msgstr "Concaténer des fichiers wave ensemble" #~ msgid "Quit" #~ msgstr "Quitter" #~ msgid "Close wavbreaker" #~ msgstr "Fermer wavbreaker" #~ msgid "Display toolbar" #~ msgstr "Afficher la barre d'outils" #~ msgid "Show or hide the main window toolbar" #~ msgstr "Afficher ou cacher la barre d'outils de la fenêtre principale" #~ msgid "Draw moodbar over the waveform graph" #~ msgstr "Dessine la barre d'ambiance sous l'onde sonore" #~ msgid "Add track break at cursor position" #~ msgstr "Ajouter une séparation à la position du curseur" #~ msgid "Remove selected track break" #~ msgstr "Supprimer la séparation sélectionnée" #~ msgid "Set cursor position to track break" #~ msgstr "Définir la posiiton du curseur à la séparation" #~ msgid "Set view to cursor marker" #~ msgstr "Définir la vue au marqueur du curseur" #~ msgid "Automatically rename all track breaks" #~ msgstr "Donne automatiquement un nom à tous les morceaux" #~ msgid "Generate moodbar data" #~ msgstr "" #~ "Calcule les données nécessaires à l'affichage de la barre d'ambiance" #~ msgid "Split into chunks with specified size" #~ msgstr "Coupe en morceaux d'une taille indiquée" #~ msgid "Export to TOC" #~ msgstr "Exportation vers TOC" #~ msgid "Export to CD-ROM TOC file for burning" #~ msgstr "Exporte vers un fichier TOC de CD-ROM pour gravage" #~ msgid "_Import from TOC" #~ msgstr "_Importation depuis TOC" #~ msgid "_Save offsets to text file" #~ msgstr "Enregi_strer les séparateurs dans un fichier texte" #~ msgid "Save track breaks to text file" #~ msgstr "Enregistrer les séparations de piste dans un fichier texte" #~ msgid "_Load offsets from text file" #~ msgstr "_Charger les séparations depuis un fichier texte" #~ msgid "Load track breaks from text file" #~ msgstr "Enregistrer les séparations de piste dans un dossier" #~ msgid "Start/Stop playback of media" #~ msgstr "Démarrer/Arrêter la lecture" #~ msgid "Jump to previous silent frame" #~ msgstr "Aller au passage silencieux précédent" #~ msgid "Show information about " #~ msgstr "Affiche des informations à propos " #~ msgid "_File" #~ msgstr "_Fichier" #~ msgid "_Edit" #~ msgstr "_Édition" #~ msgid "_View" #~ msgstr "_Affichage" #~ msgid "_Help" #~ msgstr "_Aide" #~ msgid "Add" #~ msgstr "Ajouter" #~ msgid "Auto-Rename" #~ msgstr "Renommer automatiquement" wavbreaker-0.13/po/meson.build000066400000000000000000000002601356554132000163500ustar00rootroot00000000000000i18n = import('i18n') add_project_arguments('-DGETTEXT_PACKAGE="wavbreaker"', language:'c') i18n.gettext(meson.project_name(), args: '--directory=' + meson.source_root() ) wavbreaker-0.13/po/pt.po000066400000000000000000000413301356554132000151740ustar00rootroot00000000000000# translation of pt.po to português # translation of pt.po to # Português translation of wavbreaker # Copyright (C) 2007 José Jorge # This file is distributed under the same license as the wavbreaker package. # # José JORGE , 2007, 2019. msgid "" msgstr "" "Project-Id-Version: pt\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-11-15 20:23+0100\n" "PO-Revision-Date: 2019-11-11 09:30+0100\n" "Last-Translator: Jose JORGE \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 19.08.1\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/about.c:29 msgid "Split a wave file into multiple chunks" msgstr "Dividir um ficheiro wave em partes múltiplas" #: src/appconfig.c:370 msgid "Select Output Directory" msgstr "Selecionar a Pasta de Saída" #: src/appconfig.c:372 msgid "Cancel" msgstr "Cancelar" #: src/appconfig.c:373 msgid "Open" msgstr "Abrir" #: src/appconfig.c:419 src/wavbreaker.c:2749 msgid "Preferences" msgstr "Preferências" #: src/appconfig.c:439 msgid "General" msgstr "Geral" #: src/appconfig.c:441 msgid "Save output files in folder:" msgstr "Gravar os ficheiros de saída na pasta:" #: src/appconfig.c:454 msgid "Browse" msgstr "Navegar" #: src/appconfig.c:464 msgid "Maximum volume considered silence (in percent):" msgstr "Nível máximo de volume considerado como silencio (em percentagem):" #: src/appconfig.c:478 msgid "File Naming" msgstr "Nomear os Ficheiros" #: src/appconfig.c:480 msgid "Standard (##)" msgstr "Standard (##)" #: src/appconfig.c:485 msgid "Separator:" msgstr "Separador:" #: src/appconfig.c:502 msgid "Prepend number before filename" msgstr "Meter o número antes do nome do ficheiro" #: src/appconfig.c:509 msgid "etree.org (d#t##)" msgstr "etree.org (d#t##)" #: src/appconfig.c:512 msgid "CD Length:" msgstr "Duração do CD:" #: src/autosplit.c:76 msgid "Interval (MM:SS.FF, MM:SS, SS.FF or MM):" msgstr "Intervalo (MM:SS.FF, MM:SS, SS.FF or MM):" #: src/autosplit.c:87 msgid "Split" msgstr "Dividir" #: src/guimerge.c:96 src/guimerge.c:188 src/wavbreaker.c:1447 #: src/wavbreaker.c:2371 msgid "All files" msgstr "Todos os ficheiros" #: src/guimerge.c:100 src/guimerge.c:192 src/wavbreaker.c:1451 #: src/wavbreaker.c:2375 msgid "Supported files" msgstr "Ficheiros suportados" #: src/guimerge.c:103 msgid "Select filename for merged wave file" msgstr "Seleccionar o nome do ficheiro onde colar os ficheiros wave" #: src/guimerge.c:106 src/guimerge.c:197 src/moodbar.c:110 src/saveas.c:52 #: src/wavbreaker.c:1461 src/wavbreaker.c:2331 src/wavbreaker.c:2382 msgid "_Cancel" msgstr "_Cancelar" #: src/guimerge.c:107 src/saveas.c:53 src/wavbreaker.c:2332 msgid "_Save" msgstr "_Gravar" #: src/guimerge.c:116 msgid "Open file in wavbreaker after merge" msgstr "Abrir o ficheiro no wavbreaker depois da colagem" #: src/guimerge.c:160 msgid "Wrong file format - skipping file" msgstr "Erro no formato do ficheiro - será ignorado" #: src/guimerge.c:195 msgid "Add wave file to merge" msgstr "Adicione o ficheiro wave a colar" #: src/guimerge.c:198 src/wavbreaker.c:1462 src/wavbreaker.c:2383 msgid "_Open" msgstr "_Abrir" #: src/guimerge.c:272 src/wavbreaker.c:2745 msgid "Merge wave files" msgstr "Colar ficheiros wave" #: src/guimerge.c:309 src/wavbreaker.c:473 msgid "File Name" msgstr "Nome do Ficheiro" #: src/guimerge.c:320 msgid "Length" msgstr "Duração" #: src/guimerge.c:333 msgid "_Add" msgstr "_Adicionar" #: src/guimerge.c:337 msgid "_Remove" msgstr "_Remover" #: src/guimerge.c:344 msgid "Merge" msgstr "Colar" #: src/guimerge.c:379 msgid "Merging wave files" msgstr "Colar ficheiros wave" #: src/guimerge.c:389 msgid "The selected files are now being merged. This can take some time." msgstr "" "Os ficheiros seleccionados estão agora a ser colados. Isto pode levar algum " "tempo." #: src/guimerge.c:411 src/wavbreaker.c:1167 msgid "Operation successful" msgstr "Operação conseguida" #: src/guimerge.c:411 msgid "The files have been merged." msgstr "Os ficheiros foram colados." #: src/guimerge.c:418 #, c-format msgid "Adding %s" msgstr "A adicionar %s" #: src/guimerge.c:434 #, c-format msgid "%d of %d files merged" msgstr "%d dos %d ficheiros colados" #: src/guimerge.c:436 #, c-format msgid "%d of 1 file merged" msgstr "%d de 1 ficheiro colado" #: src/moodbar.c:100 src/moodbar.c:116 msgid "Generating moodbar" msgstr "A criar a barra de ambiente sonoro" #: src/moodbar.c:106 msgid "_Hide window" msgstr "_Esconder esta janela" #: src/moodbar.c:115 msgid "" "The moodbar tool analyzes your audio file and generates a colorful " "representation of the audio data." msgstr "" "A ferramenta moodbar analisa o seu ficheiro áudio e cria um gráfico colorido " "que representa o ambiente sonoro." #: src/moodbar.c:136 msgid "Cannot launch \"moodbar\"" msgstr "Impossível de iniciar \"moodbar\"" #: src/moodbar.c:136 msgid "" "wavbreaker could not launch the moodbar application, which is needed to " "generate the moodbar. You can download the moodbar package from:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" msgstr "" "wavbreaker não conseguiu iniciar o programa moodbar, que é necessário para " "criar a barra de ambiente sonoro. Pode descarregar o programa em :\n" "\n" " http://amarok.kde.org/wiki/Moodbar" #: src/overwritedialog.c:98 #, c-format msgid "" "%s already exists.\n" "\n" "Do you want to overwrite the existing file?" msgstr "" "%s já existe.\n" "\n" "Deseja sobrepor o ficheiro?" #: src/overwritedialog.c:105 msgid "Overwrite all files" msgstr "Sobrepor todos os ficheiros" #: src/overwritedialog.c:118 msgid "_No" msgstr "_Não" #: src/overwritedialog.c:123 msgid "_Yes" msgstr "_Sim" #: src/reallyquit.c:28 msgid "Quit wavbreaker?" msgstr "Sair do wavbreaker?" #: src/reallyquit.c:29 msgid "If you quit wavbreaker now, any unsaved chunks will be lost." msgstr "" "Se fechar wavbreaker agora, todos as partes não gravadas serão perdidas." #: src/sample.c:455 msgid "Open as RAW audio" msgstr "Abrir como áudio RAW" #: src/sample.c:456 msgid "" "The file you selected does not contain a wave header. wavbreaker can " "interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the " "byte order for the RAW audio or cancel to abort." msgstr "" "O ficheiro que escolheu não contém um cabeçalho wave. wavbreaker pode " "interpretar o ficheiro como um som \"16 bits, 44100 Hz, Estéreo\". Escolha a " "ordem dos bytes para o áudio RAW ou anule para saír." #: src/sample.c:464 msgid "Big endian" msgstr "Big endian" #: src/sample.c:465 msgid "Little endian" msgstr "Little endian" #: src/sample.c:571 #, c-format msgid "Error opening %s: %s" msgstr "Erro ao abrir %s : %s" #: src/saveas.c:49 msgid "Select folder to save wave files" msgstr "Seleccione a pasta onde gravar os ficheiros wave" #: src/wav.c:35 msgid "" "Error reading chunk. Maybe the wave file you are trying to load is truncated?" msgstr "Erro na leitura. Talvez o ficheiro wave que abriu foi cortado?" #: src/wav.c:85 #, c-format msgid "Cannot open %s: %s" msgstr "Impossível de abrir %s: %s" #: src/wav.c:92 msgid "Cannot read wave header." msgstr "Impossível de ler o cabeçalho wave." #: src/wav.c:98 #, c-format msgid "%s is not a wave file." msgstr "%s não é um ficheiro wave." #: src/wav.c:139 src/wav.c:192 src/wav.c:213 #, c-format msgid "Error seeking to %u in %s: %s" msgstr "Erro ao atingir %u em %s: %s" #: src/wav.c:162 #, c-format msgid "Error reading format chunk: %s" msgstr "Erro ao ler o formato : %s" #: src/wav.c:178 msgid "Loading compressed wave data is not supported." msgstr "Os dados wave comprimidos não são aceites." #: src/wavbreaker.c:462 msgid "Write" msgstr "Escrever" #: src/wavbreaker.c:491 msgid "Time" msgstr "Tempo" #: src/wavbreaker.c:502 msgid "Duration" msgstr "Duração" #: src/wavbreaker.c:512 msgid "Offset" msgstr "Posição" #: src/wavbreaker.c:553 msgid "Check all" msgstr "Marcar tudo" #: src/wavbreaker.c:554 msgid "Check none" msgstr "Desmarcar tudo" #: src/wavbreaker.c:555 msgid "Invert check" msgstr "Inverter a seleção" #: src/wavbreaker.c:559 msgid "Auto-rename track breaks" msgstr "Renomear automáticamente as separações de pistas" #: src/wavbreaker.c:563 src/wavbreaker.c:2020 msgid "Remove track break" msgstr "Remover uma separação de pista" #: src/wavbreaker.c:564 msgid "Jump to track break" msgstr "Saltar para a separação de pista" #: src/wavbreaker.c:1128 msgid "Splitting wave file" msgstr "A dividir o ficheiro wave" #: src/wavbreaker.c:1139 msgid "" "The selected track breaks are now written to disk. This can take some time." msgstr "" "Os cortes pedidos estão agora a ser escritos no disco. Isto pode levar algum " "tempo." #: src/wavbreaker.c:1163 #, c-format msgid "The file %s has been split into %d parts." msgstr "O ficheiro %s foi cortado em %d partes." #: src/wavbreaker.c:1165 #, c-format msgid "The file %s has been split into one part." msgstr "O ficheiro %s foi cortado em uma parte." #: src/wavbreaker.c:1182 #, c-format msgid "Writing %s" msgstr "A escrever %s" #: src/wavbreaker.c:1199 #, c-format msgid "%d of %d parts written" msgstr "%d das %d partes escritas" #: src/wavbreaker.c:1201 #, c-format msgid "%d of 1 part written" msgstr "%d de uma parte escrito" #: src/wavbreaker.c:1274 msgid "Analyzing waveform" msgstr "A analisar a onda sonora" #: src/wavbreaker.c:1286 msgid "" "The waveform data of the selected file is being analyzed and processed. This " "can take some time." msgstr "" "A onda sonora do ficheiro seleccionado está sendo analisada e processada. " "Isto pode levar algum tempo." #: src/wavbreaker.c:1294 #, c-format msgid "Analyzing %s" msgstr "A analisar %s" #: src/wavbreaker.c:1352 #, c-format msgid "%d of %d MB analyzed" msgstr "%d de %d MB analisados" #: src/wavbreaker.c:1363 msgid "Error opening file" msgstr "Erro ao abrir o ficheiro" #: src/wavbreaker.c:1459 msgid "Open File" msgstr "Abrir um Ficheiro" #: src/wavbreaker.c:2019 msgid "Add track break" msgstr "Adicionar uma separação de pista" #: src/wavbreaker.c:2021 msgid "Jump to cursor marker" msgstr "Salto até ao marcador do cursor" #: src/wavbreaker.c:2121 #, c-format msgid "Cursor" msgstr "Cursor" #: src/wavbreaker.c:2128 msgid "Playing" msgstr "A ler" #: src/wavbreaker.c:2292 src/wavbreaker.c:2318 msgid "Text files" msgstr "Ficheiros de texto" #: src/wavbreaker.c:2294 src/wavbreaker.c:2322 msgid "TOC files" msgstr "Ficheiros TOC" #: src/wavbreaker.c:2296 src/wavbreaker.c:2326 msgid "CUE files" msgstr "Ficheiros CUE" #: src/wavbreaker.c:2329 msgid "Export track breaks to file" msgstr "Exportar as separações de pista num ficheiro" #: src/wavbreaker.c:2380 msgid "Import track breaks from file" msgstr "Importar as separações de pista dum ficheiro" #: src/wavbreaker.c:2397 src/wavbreaker.c:2402 msgid "Import failed" msgstr "A importação falhou" #: src/wavbreaker.c:2397 msgid "There has been an error importing track breaks from the TOC file." msgstr "Ocorreu um erro ao importar as marcas de separação do ficheiro TOC." #: src/wavbreaker.c:2402 msgid "There has been an error importing track breaks from the CUE file." msgstr "Ocorreu um erro ao importar as marcas de separação do ficheiro CUE." #: src/wavbreaker.c:2585 msgid "Time offset:" msgstr "Salto temporal :" #: src/wavbreaker.c:2721 msgid "Open file" msgstr "Abrir um Ficheiro" #: src/wavbreaker.c:2726 msgid "Open menu" msgstr "Abrir o menu" #: src/wavbreaker.c:2734 msgid "Display moodbar" msgstr "Mostrar a barra de ambiente sonoro" #: src/wavbreaker.c:2735 msgid "Generate moodbar" msgstr "Criar a barra de ambiente sonoro" #: src/wavbreaker.c:2740 msgid "Import track breaks" msgstr "Importar as separações de pistas" #: src/wavbreaker.c:2741 msgid "Export track breaks" msgstr "Exportar as separações de pistas" #: src/wavbreaker.c:2753 msgid "About" msgstr "Acerca de" #: src/wavbreaker.c:2762 msgid "Save file parts" msgstr "Gravar as peças do ficheiro" #: src/wavbreaker.c:2858 msgid "Toggle playback" msgstr "Ler/parar" #: src/wavbreaker.c:2863 msgid "Cursor position:" msgstr "Posição do cursor:" #: src/wavbreaker.c:2880 msgid "Seek to previous silence" msgstr "Ir ao silêncio anterior" #: src/wavbreaker.c:2887 msgid "Jump to time" msgstr "Saltar até ao tempo" #: src/wavbreaker.c:2899 msgid "Seek to next silence" msgstr "Ir ao silêncio seguinte" #: src/wavbreaker.c:2909 msgid "Auto-split by interval" msgstr "Separação automática por intervalo" #: src/wavbreaker.c:3048 src/wavbreaker.c:3070 msgid "Export failed" msgstr "A exportação falhou" #: src/wavbreaker.c:3048 msgid "There has been an error exporting track breaks to the TOC file." msgstr "Ocorreu um erro ao exportar as marcas de separação no ficheiro TOC." #: src/wavbreaker.c:3070 msgid "Unrecognised export type" msgstr "Tipo de exportação desconhecida" #~ msgid "Disable audio output" #~ msgstr "Desativar a saída áudio " #~ msgid "wavbreaker Preferences" #~ msgstr "Preferências do wavbreaker" #~ msgid "Audio Device" #~ msgstr "Dispositivo Ãudio" #~ msgid "Audio Device:" #~ msgstr "Dispositivo Ãudio:" #~ msgid "Output device:" #~ msgstr "Dispositivo de saída:" #~ msgid "Enter the time for autosplit:" #~ msgstr "Escreva o tempo para o corte automático:" #~ msgid "Example (5min, 32sec, 12subsec):" #~ msgstr "Exemplo (5min, 32sec, 12subsec):" #~ msgid "Add wave files to this list and click on \"Merge\"." #~ msgstr "Adicione ficheiros wave nesta lista e carregue em \"Colar\"." #~ msgid "Stop" #~ msgstr "Parar" #~ msgid "Play" #~ msgstr "Ouvir" #~ msgid "Select name for TOC file to export" #~ msgstr "Seleccionar o nome do ficheiro TOC a exportar" #~ msgid "TOC export successful" #~ msgstr "Exporte do TOC conseguido" #~ msgid "" #~ "The track breaks have been exported to a TOC file that can be used to " #~ "burn a CD from the wave file." #~ msgstr "" #~ "As marcas de separação foram exportadas no ficheiro TOC que pode servir " #~ "para gravar um CD a partir do ficheiro." #~ msgid "Load track breaks from file" #~ msgstr "Carregar as separações de pista num ficheiro" #~ msgid "Load track breaks from TOC file" #~ msgstr "Carregar as separações de pista de um ficheiro TOC" #~ msgid "Open a wave file" #~ msgstr "Abrir um ficheiro wave" #~ msgid "Save track breaks" #~ msgstr "Gravar as separações de pista" #~ msgid "Save to..." #~ msgstr "Gravar sob..." #~ msgid "Save track breaks to folder" #~ msgstr "Gravar as separações de pista na pasta" #~ msgid "Configure wavbreaker" #~ msgstr "Configurar wavbreaker" #~ msgid "Merge wave files together" #~ msgstr "Colar ficheiros wave juntos" #~ msgid "Quit" #~ msgstr "Sair" #~ msgid "Close wavbreaker" #~ msgstr "Fechar wavbreaker" #~ msgid "Display toolbar" #~ msgstr "Mostrar a barra de ferramentas" #~ msgid "Show or hide the main window toolbar" #~ msgstr "Mostra ou esconde a barra de ferramentas" #~ msgid "Draw moodbar over the waveform graph" #~ msgstr "" #~ "Desenha a barra de ambiente sonoro por cima do gráfico da forma sonora" #~ msgid "Add track break at cursor position" #~ msgstr "Adicionar uma separação de pista na posição do cursor" #~ msgid "Remove selected track break" #~ msgstr "Remover a separação de pista seleccionada" #~ msgid "Set cursor position to track break" #~ msgstr "Define a posição do cursor na separação de pista" #~ msgid "Set view to cursor marker" #~ msgstr "Define a vista no marcador do cursor" #~ msgid "Automatically rename all track breaks" #~ msgstr "Mudar automáticamente o nome de todas as partes" #~ msgid "Generate moodbar data" #~ msgstr "" #~ "Calcula os dados necessários para mostrar a barra de ambiente sonoro" #~ msgid "Split into chunks with specified size" #~ msgstr "Dividir em partes de tamanho indicado" #~ msgid "Export to TOC" #~ msgstr "Exportar para um TOC" #~ msgid "Export to CD-ROM TOC file for burning" #~ msgstr "Exportar para um ficheiro TOC de CD ROM para gravação" #~ msgid "_Import from TOC" #~ msgstr "_Importar de um TOC" #~ msgid "_Save offsets to text file" #~ msgstr "_Gravar as separações de pista num ficheiro de texto" #~ msgid "Save track breaks to text file" #~ msgstr "Gravar as separações de pista num ficheiro de texto" #~ msgid "_Load offsets from text file" #~ msgstr "_Carregar as separações de pista num ficheiro de texto" #~ msgid "Load track breaks from text file" #~ msgstr "Carregar as separações de pista num ficheiro de texto" #~ msgid "Start/Stop playback of media" #~ msgstr "Iniciar/Parar a reprodução" #~ msgid "Jump to previous silent frame" #~ msgstr "Saltar até à zona silenciosa anterior" #~ msgid "Show information about " #~ msgstr "Mostrar as informações acerca do wavbreaker" #~ msgid "_File" #~ msgstr "_Ficheiro" #~ msgid "_Edit" #~ msgstr "_Editar" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "_Help" #~ msgstr "_Ajuda" #~ msgid "Add" #~ msgstr "Adicionar" #~ msgid "Auto-Rename" #~ msgstr "Mudar automaticamente o nome" wavbreaker-0.13/po/update-potfiles.sh000077500000000000000000000001521356554132000176520ustar00rootroot00000000000000#!/bin/sh grep "_(" ../src/*.[ch] | cut -d ':' -f 1 | sort -u | sed -e 's/..\///' > POTFILES cat POTFILES wavbreaker-0.13/po/wavbreaker.pot000066400000000000000000000221071356554132000170670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the wavbreaker package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: wavbreaker\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-11-15 20:23+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/about.c:29 msgid "Split a wave file into multiple chunks" msgstr "" #: src/appconfig.c:370 msgid "Select Output Directory" msgstr "" #: src/appconfig.c:372 msgid "Cancel" msgstr "" #: src/appconfig.c:373 msgid "Open" msgstr "" #: src/appconfig.c:419 src/wavbreaker.c:2749 msgid "Preferences" msgstr "" #: src/appconfig.c:439 msgid "General" msgstr "" #: src/appconfig.c:441 msgid "Save output files in folder:" msgstr "" #: src/appconfig.c:454 msgid "Browse" msgstr "" #: src/appconfig.c:464 msgid "Maximum volume considered silence (in percent):" msgstr "" #: src/appconfig.c:478 msgid "File Naming" msgstr "" #: src/appconfig.c:480 msgid "Standard (##)" msgstr "" #: src/appconfig.c:485 msgid "Separator:" msgstr "" #: src/appconfig.c:502 msgid "Prepend number before filename" msgstr "" #: src/appconfig.c:509 msgid "etree.org (d#t##)" msgstr "" #: src/appconfig.c:512 msgid "CD Length:" msgstr "" #: src/autosplit.c:76 msgid "Interval (MM:SS.FF, MM:SS, SS.FF or MM):" msgstr "" #: src/autosplit.c:87 msgid "Split" msgstr "" #: src/guimerge.c:96 src/guimerge.c:188 src/wavbreaker.c:1447 #: src/wavbreaker.c:2371 msgid "All files" msgstr "" #: src/guimerge.c:100 src/guimerge.c:192 src/wavbreaker.c:1451 #: src/wavbreaker.c:2375 msgid "Supported files" msgstr "" #: src/guimerge.c:103 msgid "Select filename for merged wave file" msgstr "" #: src/guimerge.c:106 src/guimerge.c:197 src/moodbar.c:110 src/saveas.c:52 #: src/wavbreaker.c:1461 src/wavbreaker.c:2331 src/wavbreaker.c:2382 msgid "_Cancel" msgstr "" #: src/guimerge.c:107 src/saveas.c:53 src/wavbreaker.c:2332 msgid "_Save" msgstr "" #: src/guimerge.c:116 msgid "Open file in wavbreaker after merge" msgstr "" #: src/guimerge.c:160 msgid "Wrong file format - skipping file" msgstr "" #: src/guimerge.c:195 msgid "Add wave file to merge" msgstr "" #: src/guimerge.c:198 src/wavbreaker.c:1462 src/wavbreaker.c:2383 msgid "_Open" msgstr "" #: src/guimerge.c:272 src/wavbreaker.c:2745 msgid "Merge wave files" msgstr "" #: src/guimerge.c:309 src/wavbreaker.c:473 msgid "File Name" msgstr "" #: src/guimerge.c:320 msgid "Length" msgstr "" #: src/guimerge.c:333 msgid "_Add" msgstr "" #: src/guimerge.c:337 msgid "_Remove" msgstr "" #: src/guimerge.c:344 msgid "Merge" msgstr "" #: src/guimerge.c:379 msgid "Merging wave files" msgstr "" #: src/guimerge.c:389 msgid "The selected files are now being merged. This can take some time." msgstr "" #: src/guimerge.c:411 src/wavbreaker.c:1167 msgid "Operation successful" msgstr "" #: src/guimerge.c:411 msgid "The files have been merged." msgstr "" #: src/guimerge.c:418 #, c-format msgid "Adding %s" msgstr "" #: src/guimerge.c:434 #, c-format msgid "%d of %d files merged" msgstr "" #: src/guimerge.c:436 #, c-format msgid "%d of 1 file merged" msgstr "" #: src/moodbar.c:100 src/moodbar.c:116 msgid "Generating moodbar" msgstr "" #: src/moodbar.c:106 msgid "_Hide window" msgstr "" #: src/moodbar.c:115 msgid "" "The moodbar tool analyzes your audio file and generates a colorful " "representation of the audio data." msgstr "" #: src/moodbar.c:136 msgid "Cannot launch \"moodbar\"" msgstr "" #: src/moodbar.c:136 msgid "" "wavbreaker could not launch the moodbar application, which is needed to " "generate the moodbar. You can download the moodbar package from:\n" "\n" " http://amarok.kde.org/wiki/Moodbar" msgstr "" #: src/overwritedialog.c:98 #, c-format msgid "" "%s already exists.\n" "\n" "Do you want to overwrite the existing file?" msgstr "" #: src/overwritedialog.c:105 msgid "Overwrite all files" msgstr "" #: src/overwritedialog.c:118 msgid "_No" msgstr "" #: src/overwritedialog.c:123 msgid "_Yes" msgstr "" #: src/reallyquit.c:28 msgid "Quit wavbreaker?" msgstr "" #: src/reallyquit.c:29 msgid "If you quit wavbreaker now, any unsaved chunks will be lost." msgstr "" #: src/sample.c:455 msgid "Open as RAW audio" msgstr "" #: src/sample.c:456 msgid "" "The file you selected does not contain a wave header. wavbreaker can " "interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the " "byte order for the RAW audio or cancel to abort." msgstr "" #: src/sample.c:464 msgid "Big endian" msgstr "" #: src/sample.c:465 msgid "Little endian" msgstr "" #: src/sample.c:571 #, c-format msgid "Error opening %s: %s" msgstr "" #: src/saveas.c:49 msgid "Select folder to save wave files" msgstr "" #: src/wav.c:35 msgid "" "Error reading chunk. Maybe the wave file you are trying to load is truncated?" msgstr "" #: src/wav.c:85 #, c-format msgid "Cannot open %s: %s" msgstr "" #: src/wav.c:92 msgid "Cannot read wave header." msgstr "" #: src/wav.c:98 #, c-format msgid "%s is not a wave file." msgstr "" #: src/wav.c:139 src/wav.c:192 src/wav.c:213 #, c-format msgid "Error seeking to %u in %s: %s" msgstr "" #: src/wav.c:162 #, c-format msgid "Error reading format chunk: %s" msgstr "" #: src/wav.c:178 msgid "Loading compressed wave data is not supported." msgstr "" #: src/wavbreaker.c:462 msgid "Write" msgstr "" #: src/wavbreaker.c:491 msgid "Time" msgstr "" #: src/wavbreaker.c:502 msgid "Duration" msgstr "" #: src/wavbreaker.c:512 msgid "Offset" msgstr "" #: src/wavbreaker.c:553 msgid "Check all" msgstr "" #: src/wavbreaker.c:554 msgid "Check none" msgstr "" #: src/wavbreaker.c:555 msgid "Invert check" msgstr "" #: src/wavbreaker.c:559 msgid "Auto-rename track breaks" msgstr "" #: src/wavbreaker.c:563 src/wavbreaker.c:2020 msgid "Remove track break" msgstr "" #: src/wavbreaker.c:564 msgid "Jump to track break" msgstr "" #: src/wavbreaker.c:1128 msgid "Splitting wave file" msgstr "" #: src/wavbreaker.c:1139 msgid "" "The selected track breaks are now written to disk. This can take some time." msgstr "" #: src/wavbreaker.c:1163 #, c-format msgid "The file %s has been split into %d parts." msgstr "" #: src/wavbreaker.c:1165 #, c-format msgid "The file %s has been split into one part." msgstr "" #: src/wavbreaker.c:1182 #, c-format msgid "Writing %s" msgstr "" #: src/wavbreaker.c:1199 #, c-format msgid "%d of %d parts written" msgstr "" #: src/wavbreaker.c:1201 #, c-format msgid "%d of 1 part written" msgstr "" #: src/wavbreaker.c:1274 msgid "Analyzing waveform" msgstr "" #: src/wavbreaker.c:1286 msgid "" "The waveform data of the selected file is being analyzed and processed. This " "can take some time." msgstr "" #: src/wavbreaker.c:1294 #, c-format msgid "Analyzing %s" msgstr "" #: src/wavbreaker.c:1352 #, c-format msgid "%d of %d MB analyzed" msgstr "" #: src/wavbreaker.c:1363 msgid "Error opening file" msgstr "" #: src/wavbreaker.c:1459 msgid "Open File" msgstr "" #: src/wavbreaker.c:2019 msgid "Add track break" msgstr "" #: src/wavbreaker.c:2021 msgid "Jump to cursor marker" msgstr "" #: src/wavbreaker.c:2121 #, c-format msgid "Cursor" msgstr "" #: src/wavbreaker.c:2128 msgid "Playing" msgstr "" #: src/wavbreaker.c:2292 src/wavbreaker.c:2318 msgid "Text files" msgstr "" #: src/wavbreaker.c:2294 src/wavbreaker.c:2322 msgid "TOC files" msgstr "" #: src/wavbreaker.c:2296 src/wavbreaker.c:2326 msgid "CUE files" msgstr "" #: src/wavbreaker.c:2329 msgid "Export track breaks to file" msgstr "" #: src/wavbreaker.c:2380 msgid "Import track breaks from file" msgstr "" #: src/wavbreaker.c:2397 src/wavbreaker.c:2402 msgid "Import failed" msgstr "" #: src/wavbreaker.c:2397 msgid "There has been an error importing track breaks from the TOC file." msgstr "" #: src/wavbreaker.c:2402 msgid "There has been an error importing track breaks from the CUE file." msgstr "" #: src/wavbreaker.c:2585 msgid "Time offset:" msgstr "" #: src/wavbreaker.c:2721 msgid "Open file" msgstr "" #: src/wavbreaker.c:2726 msgid "Open menu" msgstr "" #: src/wavbreaker.c:2734 msgid "Display moodbar" msgstr "" #: src/wavbreaker.c:2735 msgid "Generate moodbar" msgstr "" #: src/wavbreaker.c:2740 msgid "Import track breaks" msgstr "" #: src/wavbreaker.c:2741 msgid "Export track breaks" msgstr "" #: src/wavbreaker.c:2753 msgid "About" msgstr "" #: src/wavbreaker.c:2762 msgid "Save file parts" msgstr "" #: src/wavbreaker.c:2858 msgid "Toggle playback" msgstr "" #: src/wavbreaker.c:2863 msgid "Cursor position:" msgstr "" #: src/wavbreaker.c:2880 msgid "Seek to previous silence" msgstr "" #: src/wavbreaker.c:2887 msgid "Jump to time" msgstr "" #: src/wavbreaker.c:2899 msgid "Seek to next silence" msgstr "" #: src/wavbreaker.c:2909 msgid "Auto-split by interval" msgstr "" #: src/wavbreaker.c:3048 src/wavbreaker.c:3070 msgid "Export failed" msgstr "" #: src/wavbreaker.c:3048 msgid "There has been an error exporting track breaks to the TOC file." msgstr "" #: src/wavbreaker.c:3070 msgid "Unrecognised export type" msgstr "" wavbreaker-0.13/scripts/000077500000000000000000000000001356554132000152615ustar00rootroot00000000000000wavbreaker-0.13/scripts/build.sh000077500000000000000000000026721356554132000167260ustar00rootroot00000000000000#!/bin/bash DOCFILES="AUTHORS CONTRIBUTORS COPYING README.md" VERSION=$(sed -n "s/^ version : '\(.*\)',/\1/p" meson.build) USAGE="Usage: $0 " if [ $# -eq 0 ]; then echo "$USAGE" exit 1 fi set -e -x case "$1" in linux) meson linux_build DESTDIR="$(pwd)/wavbreaker-$VERSION-linux/" ninja -C linux_build install -v mkdir -p dist zip -r "dist/wavbreaker-$VERSION-linux.zip" "wavbreaker-$VERSION-linux" $DOCFILES ;; windows) docker build -t wavbreaker-win32-build scripts/win32 sh scripts/win32/run-build.sh rm -rf "wavbreaker-$VERSION-win32" mv wavbreaker-win32 "wavbreaker-$VERSION-win32" mkdir -p dist zip -r "dist/wavbreaker-$VERSION-win32.zip" "wavbreaker-$VERSION-win32" $DOCFILES ;; flatpak) docker build -t wavbreaker-flatpak-build scripts/flatpak sh scripts/flatpak/package.sh ;; snap) ln -sf scripts/snap . snapcraft mkdir -p dist mv wavbreaker_*.snap dist/ ;; macos) meson --prefix=/Applications/wavbreaker.app \ --bindir=Contents/MacOS \ -Dmacos_app=true \ macos_build DESTDIR=$(pwd)/ ninja -C macos_build install -v mkdir -p dist zip -r "dist/wavbreaker-$VERSION-macos.zip" Applications $DOCFILES ;; *) echo "$USAGE" exit 1 ;; esac wavbreaker-0.13/scripts/flatpak/000077500000000000000000000000001356554132000167035ustar00rootroot00000000000000wavbreaker-0.13/scripts/flatpak/Dockerfile000066400000000000000000000004741356554132000207020ustar00rootroot00000000000000FROM ubuntu:rolling RUN mkdir /build WORKDIR /build RUN apt-get update RUN apt-get install -y flatpak-builder RUN flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo RUN flatpak install -y org.freedesktop.Sdk//19.08 RUN flatpak install -y org.freedesktop.Platform//19.08 wavbreaker-0.13/scripts/flatpak/build-image.sh000066400000000000000000000000651356554132000214170ustar00rootroot00000000000000#!/bin/sh docker build -t wavbreaker-flatpak-build . wavbreaker-0.13/scripts/flatpak/net.sourceforge.wavbreaker.json000066400000000000000000000015171356554132000250420ustar00rootroot00000000000000{ "app-id": "net.sourceforge.wavbreaker", "runtime": "org.freedesktop.Platform", "runtime-version": "19.08", "sdk": "org.freedesktop.Sdk", "command": "wavbreaker", "modules": [ { "name": "libao", "buildsystem": "autotools", "sources": [ { "type": "git", "url": "git://git.xiph.org/libao.git" } ] }, { "name": "wavbreaker", "buildsystem": "meson", "sources": [ { "type": "dir", "path": "../.." } ] } ], "finish-args": [ "--socket=wayland", "--socket=fallback-x11", "--socket=pulseaudio", "--filesystem=home" ] } wavbreaker-0.13/scripts/flatpak/package.sh000066400000000000000000000010721356554132000206320ustar00rootroot00000000000000#!/bin/sh set -e -x VERSION=$(sed -n "s/^ version : '\(.*\)',/\1/p" meson.build) docker run --privileged -v "$(pwd):/build" wavbreaker-flatpak-build \ flatpak-builder \ --verbose --verbose \ --disable-rofiles-fuse \ --force-clean \ --repo=flatpak_repo \ flatpak_build \ scripts/flatpak/net.sourceforge.wavbreaker.json mkdir -p dist docker run --privileged -v "$(pwd):/build" wavbreaker-flatpak-build \ flatpak build-bundle \ --verbose \ flatpak_repo \ "dist/wavbreaker-$VERSION.flatpak" \ net.sourceforge.wavbreaker wavbreaker-0.13/scripts/snap/000077500000000000000000000000001356554132000162225ustar00rootroot00000000000000wavbreaker-0.13/scripts/snap/snapcraft.yaml000066400000000000000000000054451356554132000210770ustar00rootroot00000000000000name: wavbreaker title: wavbreaker icon: data/net.sourceforge.wavbreaker.svg grade: stable license: GPL-2.0 version: '0.13' summary: GUI tool to split WAV and MP3 files description: | This application's purpose in life is to take a WAV file and break it up into multiple WAV files. It makes a clean break at the correct position to burn the files to an Audio CD without any dead air between the tracks. confinement: devmode base: core18 parts: wavbreaker: override-pull: | snapcraftctl pull # Point icon to the correct location sed -i.bak -e 's|Icon=net.sourceforge.wavbreaker|Icon=/usr/share/icons/hicolor/scalable/apps/net.sourceforge.wavbreaker.svg|g' data/net.sourceforge.wavbreaker.desktop plugin: meson source-type: local source: . # ??? https://forum.snapcraft.io/t/gtk3-applications/13483 meson-parameters: ["--prefix=/usr"] build-packages: - meson - ninja-build - libao-dev - libmpg123-dev - libgtk-3-dev - gettext stage-packages: - libao4 - libmpg123-0 - libatk-bridge2.0-0 - libatk1.0-0 - libatspi2.0-0 - libcairo-gobject2 - libcairo2 - libdatrie1 - libepoxy0 - libfontconfig1 - libfreetype6 - libgdk-pixbuf2.0-0 - libgraphite2-3 - libgtk-3-0 - libharfbuzz0b - libpango-1.0-0 - libpangocairo-1.0-0 - libpangoft2-1.0-0 - libpixman-1-0 - libpng16-16 - libthai0 - libwayland-client0 - libwayland-cursor0 - libwayland-egl1 - libx11-6 - libxau6 - libxcb-render0 - libxcb-shm0 - libxcb1 - libxcomposite1 - libxcursor1 - libxdamage1 - libxdmcp6 - libxext6 - libxfixes3 - libxi6 - libxinerama1 - libxkbcommon0 - libxrandr2 - libxrender1 slots: wavbreaker-slot: interface: dbus bus: session name: net.sourceforge.wavbreaker apps: wavbreaker: command: usr/bin/wavbreaker extensions: [gnome-3-28] # cargo-culted from https://forum.snapcraft.io/t/snap-issues-with-gtk/5120/2 plugs: - gsettings - home - x11 - wayland # let it run on wayland, because it's gtk3 so it should be fine - desktop # needed for a lot of gtk3 and glib interaction with the host system - desktop-legacy # needed for accessibility tools IIRC - network-bind slots: - wavbreaker-slot desktop: usr/share/applications/net.sourceforge.wavbreaker.desktop wavbreaker-0.13/scripts/win32/000077500000000000000000000000001356554132000162235ustar00rootroot00000000000000wavbreaker-0.13/scripts/win32/Dockerfile000066400000000000000000000015741356554132000202240ustar00rootroot00000000000000FROM fedora:latest RUN mkdir /build WORKDIR /build RUN dnf -y install make mingw32-gcc mingw64-gtk3 diffutils findutils automake autoconf meson gettext libtool git wget bzip2 RUN git clone https://git.xiph.org/libao.git && \ cd libao && \ git checkout 1.2.2 && \ ./autogen.sh && \ env LIBS="-lksuser -lwinmm" ./configure \ --build=x86_64-pc-linux-gnu \ --host=x86_64-w64-mingw32 \ --enable-shared --disable-pulse --enable-wmm \ --prefix=/usr/x86_64-w64-mingw32/sys-root/mingw/ && \ make install V=1 RUN wget https://www.mpg123.de/download/mpg123-1.25.13.tar.bz2 && \ tar xvf mpg123-1.25.13.tar.bz2 && \ cd mpg123-1.25.13 && \ ./configure \ --build=x86_64-pc-linux-gnu \ --host=x86_64-w64-mingw32 \ --enable-shared \ --prefix=/usr/x86_64-w64-mingw32/sys-root/mingw/ && \ make install V=1 wavbreaker-0.13/scripts/win32/README000066400000000000000000000002061356554132000171010ustar00rootroot00000000000000First, build the Docker iamge: sh build-image.sh Then, in the wavbreaker root checkout, run: sh scripts/win32/run-build.sh wavbreaker-0.13/scripts/win32/build-image.sh000066400000000000000000000000631356554132000207350ustar00rootroot00000000000000#!/bin/sh docker build -t wavbreaker-win32-build . wavbreaker-0.13/scripts/win32/iconlist.txt000066400000000000000000000007761356554132000206220ustar00rootroot00000000000000bookmark-new-symbolic document-open-recent-symbolic document-open-symbolic document-save-as-symbolic drive-* edit-cut-symbolic folder* inode-directory* list-add-symbolic list-remove-symbolic media-*-symbolic open-menu-symbolic package-x-generic pan-down-symbolic.symbolic pan-end-symbolic.symbolic pan-start-symbolic.symbolic preferences-system-time-symbolic user-* window-close-symbolic.symbolic window-maximize-symbolic.symbolic window-minimize-symbolic.symbolic window-restore-symbolic.symbolic *-x-generic wavbreaker-0.13/scripts/win32/linux-mingw-w64-64bit.txt000066400000000000000000000012221356554132000226030ustar00rootroot00000000000000[binaries] c = '/usr/bin/x86_64-w64-mingw32-gcc' cpp = '/usr/bin/x86_64-w64-mingw32-g++' ar = '/usr/bin/x86_64-w64-mingw32-ar' strip = '/usr/bin/x86_64-w64-mingw32-strip' pkgconfig = '/usr/bin/x86_64-w64-mingw32-pkg-config' windres = '/usr/bin/x86_64-w64-mingw32-windres' exe_wrapper = 'wine64' [properties] # Directory that contains 'bin', 'lib', etc root = '/usr/x86_64-w64-mingw32' # Directory that contains 'bin', 'lib', etc for the toolchain and system libraries # 2019-11-16: Modified by thp: Needed to set this to / to get include paths to work sys_root = '/' [host_machine] system = 'windows' cpu_family = 'x86_64' cpu = 'x86_64' endian = 'little' wavbreaker-0.13/scripts/win32/mingw-bundledlls000077500000000000000000000120401356554132000214150ustar00rootroot00000000000000#!/usr/bin/env python3 # Upstream: https://github.com/mpreisler/mingw-bundledlls # The MIT License (MIT) # # Copyright (c) 2015 Martin Preisler # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. import subprocess import os.path import argparse import shutil # The mingw path matches where Fedora 21 installs mingw32; this is the default # fallback if no other search path is specified in $MINGW_BUNDLEDLLS_SEARCH_PATH DEFAULT_PATH_PREFIXES = [ "", "/usr/bin", "/usr/i686-w64-mingw32/sys-root/mingw/bin", "/mingw64/bin", "/usr/i686-w64-mingw32/sys-root/mingw/lib", "C:\\msys64\\mingw64\\bin" ] env_path_prefixes = os.environ.get('MINGW_BUNDLEDLLS_SEARCH_PATH', None) if env_path_prefixes is not None: path_prefixes = [path for path in env_path_prefixes.split(os.pathsep) if path] else: path_prefixes = DEFAULT_PATH_PREFIXES # This blacklist may need extending blacklist = [ "advapi32.dll", "kernel32.dll", "msvcrt.dll", "ole32.dll", "user32.dll", "ws2_32.dll", "comdlg32.dll", "gdi32.dll", "imm32.dll", "oleaut32.dll", "shell32.dll", "winmm.dll", "winspool.drv", "wldap32.dll", "ntdll.dll", "d3d9.dll", "mpr.dll", "crypt32.dll", "dnsapi.dll", "shlwapi.dll", "version.dll", "iphlpapi.dll", "msimg32.dll", "setupapi.dll", "opengl32.dll", "dwmapi.dll", "uxtheme.dll", "secur32.dll", "gdiplus.dll", "usp10.dll", "comctl32.dll", "wsock32.dll", "netapi32.dll", "userenv.dll", "avicap32.dll", "avrt.dll", "psapi.dll", "mswsock.dll", "glu32.dll" ] def find_full_path(filename, path_prefixes): for path_prefix in path_prefixes: path = os.path.join(path_prefix, filename) path_low = os.path.join(path_prefix, filename.lower()) if os.path.exists(path): return path if os.path.exists(path_low): return path_low else: raise RuntimeError( "Can't find " + filename + ". If it is an inbuilt Windows DLL, " "please add it to the blacklist variable in the script and send " "a pull request!" ) def gather_deps(path, path_prefixes, seen): ret = [path] output = subprocess.check_output(["objdump", "-p", path]).decode( "utf-8", "replace").split("\n") for line in output: if not line.startswith("\tDLL Name: "): continue dep = line.split("DLL Name: ")[1].strip() ldep = dep.lower() if ldep in blacklist: continue if ldep in seen: continue dep_path = find_full_path(dep, path_prefixes) seen.add(ldep) subdeps = gather_deps(dep_path, path_prefixes, seen) ret.extend(subdeps) return ret def main(): parser = argparse.ArgumentParser() parser.add_argument( "exe_file", help="EXE or DLL file that you need to bundle dependencies for" ) parser.add_argument( "--copy", action="store_true", help="In addition to printing out the dependencies, also copy them next to the exe_file" ) parser.add_argument( "--upx", action="store_true", help="Only valid if --copy is provided. Run UPX on all the DLLs and EXE." ) args = parser.parse_args() if args.upx and not args.copy: raise RuntimeError("Can't run UPX if --copy hasn't been provided.") all_deps = set(gather_deps(args.exe_file, path_prefixes, set())) all_deps.remove(args.exe_file) print("\n".join(all_deps)) if args.copy: print("Copying enabled, will now copy all dependencies next to the exe_file.\n") parent_dir = os.path.dirname(os.path.abspath(args.exe_file)) for dep in all_deps: target = os.path.join(parent_dir, os.path.basename(dep)) try: print("Copying '%s' to '%s'" % (dep, target)) shutil.copy(dep, parent_dir) except shutil.SameFileError: print("Dependency '%s' was already in target directory, " "skipping..." % (dep)) if args.upx: subprocess.call(["upx", target]) if __name__ == "__main__": main() wavbreaker-0.13/scripts/win32/run-build-inside.sh000066400000000000000000000020241356554132000217270ustar00rootroot00000000000000#!/bin/sh SYSROOT=/usr/x86_64-w64-mingw32/sys-root/mingw/ OUT=wavbreaker-win32 meson win32_build \ --prefix / \ --cross-file scripts/win32/linux-mingw-w64-64bit.txt \ -Dbindir=/ \ -Dwindows_app=true \ -Dmoodbar=false DESTDIR=/build/$OUT/ ninja -C /build/win32_build/ install -v MINGW_BUNDLEDLLS_SEARCH_PATH=$SYSROOT/bin \ scripts/win32/mingw-bundledlls --copy $OUT/wavbreaker.exe mkdir -p $OUT/share/glib-2.0/ cp -rpv $SYSROOT/share/glib-2.0/schemas $OUT/share/glib-2.0/ mkdir -p $OUT/share/icons/{Adwaita,hicolor} cp $SYSROOT/share/icons/Adwaita/index.theme $OUT/share/icons/Adwaita sed -e 's/Adwaita/hicolor/' $OUT/share/icons/Adwaita/index.theme \ >$OUT/share/icons/hicolor/index.theme cd $SYSROOT/share/icons/Adwaita/ cat /build/scripts/win32/iconlist.txt | while read iconfile; do for filename in `find . -name "${iconfile}.*"`; do dest=`dirname $filename` mkdir -p /build/$OUT/share/icons/Adwaita/$dest cp -v $filename /build/$OUT/share/icons/Adwaita/$filename done done wavbreaker-0.13/scripts/win32/run-build.sh000066400000000000000000000001621356554132000204570ustar00rootroot00000000000000#!/bin/bash docker run -v "$(pwd):/build" wavbreaker-win32-build \ sh -e -x scripts/win32/run-build-inside.sh wavbreaker-0.13/src/000077500000000000000000000000001356554132000143615ustar00rootroot00000000000000wavbreaker-0.13/src/about.c000066400000000000000000000035101356554132000156360ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "gettext.h" #include "wavbreaker.h" #define COPYRIGHT "Copyright (C) 2002-2007 Timothy Robinson\nCopyright (C) 2006-2008, 2012, 2015-2016, 2018-2019 Thomas Perl" #define APPDESCRIPTION _("Split a wave file into multiple chunks") #define URL "http://wavbreaker.sourceforge.net/" #define AUTHOR_A "Timothy Robinson " #define AUTHOR_B "Thomas Perl " void about_show(GtkWidget *main_window) { const char* authors[] = { AUTHOR_A, AUTHOR_B, 0 }; gtk_show_about_dialog (GTK_WINDOW(main_window), "name", PACKAGE, "version", VERSION, "copyright", COPYRIGHT, "comments", APPDESCRIPTION, "website", URL, "website-label", URL, "authors", authors, "logo-icon-name", "net.sourceforge.wavbreaker", NULL); } wavbreaker-0.13/src/about.h000066400000000000000000000016261356554132000156510ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef ABOUT_H #define ABOUT_H void about_show(GtkWidget *); #endif /* ABOUT_H */ wavbreaker-0.13/src/aoaudio.c000066400000000000000000000036311356554132000161510ustar00rootroot00000000000000/* * libao output module for wavbreaker * Copyright (C) 2015 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "wavbreaker.h" #include "aoaudio.h" static ao_device *device; void ao_audio_close_device() { if (device) { ao_close(device); device = NULL; ao_shutdown(); } } int ao_audio_write(unsigned char *devbuf, int size) { if (device) { if (ao_play(device, (char *)devbuf, size) == 0) { fprintf(stderr, "Error in ao_play()\n"); return -1; } return 0; } return -1; } int ao_audio_open_device(SampleInfo *sampleInfo) { int default_driver; ao_sample_format format; ao_initialize(); default_driver = ao_default_driver_id(); memset(&format, 0, sizeof(format)); format.bits = sampleInfo->bitsPerSample; format.channels = sampleInfo->channels; format.rate = sampleInfo->samplesPerSec; format.byte_format = AO_FMT_LITTLE; sampleInfo->bufferSize = DEFAULT_BUF_SIZE; device = ao_open_live(default_driver, &format, NULL); if (device == NULL) { fprintf(stderr, "Cannot open default libao device\n"); return -1; } return 0; } wavbreaker-0.13/src/aoaudio.h000066400000000000000000000017361356554132000161620ustar00rootroot00000000000000/* * libao output module for wavbreaker * Copyright (C) 2015 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef AOAUDIO_H #define AOAUDIO_H #include "sample.h" void ao_audio_close_device(); int ao_audio_open_device(SampleInfo *); int ao_audio_write(unsigned char *, int); #endif /* AOAUDIO_H */ wavbreaker-0.13/src/appconfig.c000066400000000000000000000503751356554132000165050ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2004 Timothy Robinson * Copyright (C) 2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "appconfig.h" #include "sample.h" #include "popupmessage.h" #include "gettext.h" #include "aoaudio.h" #include #include #include #include #include static GtkWidget *window; static gboolean loading_ui = FALSE; static int config_file_version = 2; /* Function pointers to the currently selected audio driver. */ static AudioFunctionPointers audio_function_pointers; /* Output directory for wave files. */ static int use_outputdir = 0; static GtkWidget *use_outputdir_toggle = NULL; static char *outputdir = NULL; static GtkWidget *outputdir_entry = NULL; static GtkWidget *browse_button = NULL; /* Etree filename suffix */ /* Filename suffix (not extension) for wave files. */ static int use_etree_filename_suffix = 0; static char *etree_filename_suffix = NULL; static GtkWidget *etree_filename_suffix_label = NULL; static GtkWidget *etree_filename_suffix_entry = NULL; /* Radio buttons */ static GtkWidget *radio1 = NULL; static GtkWidget *radio2 = NULL; /* Prepend File Number for wave files. */ static int prepend_file_number = 0; static GtkWidget *prepend_file_number_toggle = NULL; /* CD Length disc cutoff. */ static char *etree_cd_length = NULL; static GtkWidget *etree_cd_length_label = NULL; static GtkWidget *etree_cd_length_entry = NULL; /* Config Filename */ static char *config_filename = NULL; /* Window and pane sizes. */ static int main_window_xpos = -1; static int main_window_ypos = -1; static int main_window_width = -1; static int main_window_height = -1; static int vpane1_position = -1; static int vpane2_position = -1; /* Percentage for silence detection */ static int silence_percentage = 2; static GtkWidget *silence_spin_button = NULL; /* Draw moodbar in main window */ static int show_moodbar = 1; /* function prototypes */ static int appconfig_read_file(); static void default_all_strings(); static void open_select_outputdir(); int appconfig_get_config_file_version() { return config_file_version; } void appconfig_set_config_file_version(int x) { config_file_version = x; } AudioFunctionPointers *get_audio_function_pointers() { return &audio_function_pointers; } void set_audio_close_device(void (*f)) { audio_function_pointers.audio_close_device = f; } void set_audio_open_device(void (*f)) { audio_function_pointers.audio_open_device = f; } void set_audio_write(void (*f)) { audio_function_pointers.audio_write = f; } void set_audio_function_pointers() { set_audio_close_device(ao_audio_close_device); set_audio_open_device(ao_audio_open_device); set_audio_write(ao_audio_write); } int appconfig_get_main_window_xpos() { return main_window_xpos; } void appconfig_set_main_window_xpos(int x) { main_window_xpos = x; } int appconfig_get_main_window_ypos() { return main_window_ypos; } void appconfig_set_main_window_ypos(int x) { main_window_ypos = x; } int appconfig_get_main_window_width() { return main_window_width; } void appconfig_set_main_window_width(int x) { main_window_width = x; } int appconfig_get_main_window_height() { return main_window_height; } void appconfig_set_main_window_height(int x) { main_window_height = x; } int appconfig_get_vpane1_position() { return vpane1_position; } void appconfig_set_vpane1_position(int x) { vpane1_position = x; } int appconfig_get_vpane2_position() { return vpane2_position; } void appconfig_set_vpane2_position(int x) { vpane2_position = x; } int appconfig_get_silence_percentage() { return silence_percentage; } void appconfig_set_silence_percentage(int x) { silence_percentage = x; } int appconfig_get_show_moodbar() { return show_moodbar; } void appconfig_set_show_moodbar(int x) { show_moodbar = x; } int appconfig_get_use_outputdir() { return use_outputdir; } void appconfig_set_use_outputdir(int x) { use_outputdir = x; } char *appconfig_get_outputdir() { return outputdir; } void appconfig_set_outputdir(const char *val) { if (outputdir != NULL) { g_free(outputdir); } outputdir = g_strdup(val); } int appconfig_get_use_etree_filename_suffix() { return use_etree_filename_suffix; } void appconfig_set_use_etree_filename_suffix(int x) { use_etree_filename_suffix = x; } char *appconfig_get_etree_filename_suffix() { return etree_filename_suffix; } void appconfig_set_etree_filename_suffix(const char *val) { if (etree_filename_suffix != NULL) { g_free(etree_filename_suffix); } etree_filename_suffix = g_strdup(val); } int appconfig_get_prepend_file_number() { return prepend_file_number; } void appconfig_set_prepend_file_number(int x) { prepend_file_number = x; } char *appconfig_get_etree_cd_length() { return etree_cd_length; } void appconfig_set_etree_cd_length(const char *val) { if (etree_cd_length != NULL) { g_free(etree_cd_length); } etree_cd_length = g_strdup(val); } char *get_config_filename() { return config_filename; } void set_config_filename(const char *val) { if (config_filename != NULL) { g_free(config_filename); } config_filename = g_strdup(val); } static void use_outputdir_toggled(GtkWidget *widget, gpointer user_data) { if (loading_ui) { return; } if (appconfig_get_use_outputdir()) { // disable the output dir widget gtk_widget_set_sensitive(outputdir_entry, FALSE); gtk_widget_set_sensitive(browse_button, FALSE); appconfig_set_use_outputdir(0); } else { // enable the output dir widget gtk_widget_set_sensitive(outputdir_entry, TRUE); gtk_widget_set_sensitive(browse_button, TRUE); appconfig_set_use_outputdir(1); } } static void use_etree_filename_suffix_toggled(GtkWidget *widget, gpointer user_data) { if (appconfig_get_use_etree_filename_suffix()) { appconfig_set_use_etree_filename_suffix(0); } else { appconfig_set_use_etree_filename_suffix(1); } } static void radio_buttons_toggled(GtkWidget *widget, gpointer user_data) { if (loading_ui) { return; } if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(radio1)) == TRUE) { gtk_widget_set_sensitive( prepend_file_number_toggle, TRUE); gtk_widget_set_sensitive( etree_filename_suffix_entry, TRUE); gtk_widget_set_sensitive( etree_filename_suffix_label, TRUE); gtk_widget_set_sensitive( etree_cd_length_entry, FALSE); gtk_widget_set_sensitive( etree_cd_length_label, FALSE); } else { gtk_widget_set_sensitive( prepend_file_number_toggle, FALSE); gtk_widget_set_sensitive( etree_filename_suffix_entry, FALSE); gtk_widget_set_sensitive( etree_filename_suffix_label, FALSE); gtk_widget_set_sensitive( etree_cd_length_entry, TRUE); gtk_widget_set_sensitive( etree_cd_length_label, TRUE); } } static void prepend_file_number_toggled(GtkWidget *widget, gpointer user_data) { if (loading_ui) { return; } if (appconfig_get_prepend_file_number()) { appconfig_set_prepend_file_number(0); } else { appconfig_set_prepend_file_number(1); } } static void appconfig_hide(GtkWidget *main_window) { gtk_widget_destroy(main_window); } static void browse_button_clicked(GtkWidget *widget, gpointer user_data) { open_select_outputdir(); } static void open_select_outputdir() { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new(_("Select Output Directory"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("Cancel"), GTK_RESPONSE_CANCEL, _("Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog), gtk_entry_get_text(GTK_ENTRY(outputdir_entry))); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gtk_entry_set_text(GTK_ENTRY(outputdir_entry), filename); g_free(filename); } gtk_widget_destroy(dialog); } static void on_appconfig_close(GtkWidget *widget, GdkEvent *event, gpointer user_data) { appconfig_set_outputdir(gtk_entry_get_text(GTK_ENTRY(outputdir_entry))); appconfig_set_etree_filename_suffix(gtk_entry_get_text(GTK_ENTRY(etree_filename_suffix_entry))); appconfig_set_etree_cd_length(gtk_entry_get_text(GTK_ENTRY(etree_cd_length_entry))); appconfig_set_silence_percentage( gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON(silence_spin_button))); set_audio_function_pointers(); track_break_rename( FALSE); appconfig_hide(GTK_WIDGET(user_data)); appconfig_write_file(); } void appconfig_show(GtkWidget *main_window) { GtkWidget *vbox; GtkWidget *grid; GtkWidget *label; GtkWidget *stack; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(main_window)); gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT); GtkWidget *header_bar = gtk_header_bar_new(); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header_bar), TRUE); gtk_header_bar_set_title(GTK_HEADER_BAR(header_bar), _("Preferences")); gtk_window_set_titlebar(GTK_WINDOW(window), header_bar); /* create the vbox for the first tab */ vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 10); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); gtk_container_add( GTK_CONTAINER(window), vbox); stack = gtk_stack_new(); gtk_container_add(GTK_CONTAINER(vbox), stack); GtkWidget *stack_switcher = gtk_stack_switcher_new(); gtk_stack_switcher_set_stack(GTK_STACK_SWITCHER(stack_switcher), GTK_STACK(stack)); gtk_header_bar_set_custom_title(GTK_HEADER_BAR(header_bar), stack_switcher); /* Selectable Output Directory */ grid = gtk_grid_new(); gtk_container_set_border_width(GTK_CONTAINER(grid), 10); gtk_grid_set_row_spacing(GTK_GRID(grid), 5); gtk_grid_set_column_spacing(GTK_GRID(grid), 5); gtk_stack_add_titled(GTK_STACK(stack), grid, "general", _("General")); use_outputdir_toggle = gtk_check_button_new_with_label(_("Save output files in folder:")); gtk_grid_attach(GTK_GRID(grid), use_outputdir_toggle, 0, 0, 2, 1); g_signal_connect(G_OBJECT(use_outputdir_toggle), "toggled", G_CALLBACK(use_outputdir_toggled), NULL); outputdir_entry = gtk_entry_new(); g_object_set(outputdir_entry, "hexpand", TRUE, NULL); gtk_entry_set_text(GTK_ENTRY(outputdir_entry), outputdir); gtk_entry_set_width_chars(GTK_ENTRY(outputdir_entry), 40); gtk_grid_attach(GTK_GRID(grid), outputdir_entry, 0, 1, 1, 1); browse_button = gtk_button_new_with_label(_("Browse")); gtk_grid_attach(GTK_GRID(grid), browse_button, 1, 1, 1, 1); g_signal_connect(G_OBJECT(browse_button), "clicked", (GCallback)browse_button_clicked, window); silence_spin_button = (GtkWidget*)gtk_spin_button_new_with_range( 1.0, 100.0, 1.0); gtk_spin_button_set_digits( GTK_SPIN_BUTTON(silence_spin_button), 0); gtk_spin_button_set_value( GTK_SPIN_BUTTON(silence_spin_button), appconfig_get_silence_percentage()); label = gtk_label_new( _("Maximum volume considered silence (in percent):")); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_grid_attach(GTK_GRID(grid), label, 0, 2, 1, 1); gtk_grid_attach(GTK_GRID(grid), silence_spin_button, 1, 2, 1, 1); /* Etree Filename Suffix */ grid = gtk_grid_new(); gtk_container_set_border_width(GTK_CONTAINER(grid), 10); gtk_grid_set_row_spacing(GTK_GRID(grid), 5); gtk_grid_set_column_spacing(GTK_GRID(grid), 5); gtk_stack_add_titled(GTK_STACK(stack), grid, "naming", _("File Naming")); radio1 = gtk_radio_button_new_with_label(NULL, _("Standard (##)")); gtk_grid_attach(GTK_GRID(grid), radio1, 0, 0, 3, 1); g_signal_connect(G_OBJECT(radio1), "toggled", G_CALLBACK(radio_buttons_toggled), NULL); etree_filename_suffix_label = gtk_label_new(_("Separator:")); g_object_set(G_OBJECT(etree_filename_suffix_label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_grid_attach(GTK_GRID(grid), etree_filename_suffix_label, 1, 1, 1, 1); etree_filename_suffix_entry = gtk_entry_new(); g_object_set(etree_filename_suffix_entry, "hexpand", TRUE, NULL); gtk_entry_set_text(GTK_ENTRY(etree_filename_suffix_entry), etree_filename_suffix); gtk_entry_set_width_chars(GTK_ENTRY(etree_filename_suffix_entry), 10); gtk_grid_attach(GTK_GRID(grid), etree_filename_suffix_entry, 2, 1, 1, 1); label = gtk_label_new(" "); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_grid_attach(GTK_GRID(grid), label, 0, 2, 1, 1); prepend_file_number_toggle = gtk_check_button_new_with_label(_("Prepend number before filename")); gtk_grid_attach(GTK_GRID(grid), prepend_file_number_toggle, 1, 2, 2, 1); g_signal_connect(G_OBJECT(prepend_file_number_toggle), "toggled", G_CALLBACK(prepend_file_number_toggled), NULL); radio2 = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(radio1), _("etree.org (d#t##)")); gtk_grid_attach(GTK_GRID(grid), radio2, 0, 3, 3, 1); etree_cd_length_label = gtk_label_new(_("CD Length:")); g_object_set(G_OBJECT(etree_cd_length_label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_grid_attach(GTK_GRID(grid), etree_cd_length_label, 1, 4, 1, 1); etree_cd_length_entry = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(etree_cd_length_entry), etree_cd_length); gtk_entry_set_width_chars(GTK_ENTRY(etree_cd_length_entry), 10); gtk_grid_attach(GTK_GRID(grid), etree_cd_length_entry, 2, 4, 1, 1); g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(on_appconfig_close), window); g_signal_connect(G_OBJECT(radio2), "toggled", G_CALLBACK(use_etree_filename_suffix_toggled), NULL); loading_ui = TRUE; gboolean use_output_dir = appconfig_get_use_outputdir() ? TRUE : FALSE; gtk_widget_set_sensitive(outputdir_entry, use_output_dir); gtk_widget_set_sensitive(browse_button, use_output_dir); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(use_outputdir_toggle), use_output_dir); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(prepend_file_number_toggle), appconfig_get_prepend_file_number() ? TRUE : FALSE); gboolean use_etree = appconfig_get_use_etree_filename_suffix() ? TRUE : FALSE; gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio1), !use_etree); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(radio2), use_etree); loading_ui = FALSE; gtk_widget_show_all(window); set_audio_function_pointers(); radio_buttons_toggled( NULL, NULL); } enum ConfigOptionType { INVALID = 0, STRING, INTEGER, BOOLEAN, }; typedef struct ConfigOption_ ConfigOption; struct ConfigOption_ { const char *key; enum ConfigOptionType type; void *setter; void *getter; } config_options[] = { #define OPTION(name, type) { #name, type, appconfig_set_ ## name, appconfig_get_ ## name } OPTION(config_file_version, INTEGER), OPTION(use_outputdir, BOOLEAN), OPTION(outputdir, STRING), OPTION(use_etree_filename_suffix, BOOLEAN), OPTION(etree_filename_suffix, STRING), OPTION(etree_cd_length, STRING), OPTION(prepend_file_number, BOOLEAN), OPTION(main_window_xpos, INTEGER), OPTION(main_window_ypos, INTEGER), OPTION(main_window_width, INTEGER), OPTION(main_window_height, INTEGER), OPTION(vpane1_position, INTEGER), OPTION(vpane2_position, INTEGER), OPTION(silence_percentage, INTEGER), OPTION(show_moodbar, BOOLEAN), #undef OPTION { NULL, INVALID, NULL, NULL }, }; void config_option_set_string(ConfigOption *option, gchar *value) { ((void (*)(const char *))(option->setter))(value); g_free(value); } void config_option_set_integer(ConfigOption *option, int value) { ((void (*)(int))(option->setter))(value); } const char *config_option_get_string(ConfigOption *option) { return ((const char *(*)())(option->getter))(); } int config_option_get_integer(ConfigOption *option) { return ((int (*)())(option->getter))(); } static int appconfig_read_file() { GKeyFile *keyfile = g_key_file_new(); if (!g_key_file_load_from_file(keyfile, config_filename, G_KEY_FILE_NONE, NULL)) { g_key_file_free(keyfile); return 0; } ConfigOption *option = config_options; for (option=config_options; option->key; option++) { switch (option->type) { case INTEGER: config_option_set_integer(option, g_key_file_get_integer(keyfile, "wavbreaker", option->key, NULL)); break; case BOOLEAN: config_option_set_integer(option, g_key_file_get_boolean(keyfile, "wavbreaker", option->key, NULL)); break; case STRING: config_option_set_string(option, g_key_file_get_string(keyfile, "wavbreaker", option->key, NULL)); break; default: g_warning("Invalid option type: %d\n", option->type); break; } } g_key_file_free(keyfile); return 1; } void appconfig_write_file() { GKeyFile *keyfile = g_key_file_new(); g_key_file_load_from_file(keyfile, config_filename, G_KEY_FILE_KEEP_COMMENTS, NULL); ConfigOption *option = config_options; for (option=config_options; option->key; option++) { switch (option->type) { case INTEGER: g_key_file_set_integer(keyfile, "wavbreaker", option->key, config_option_get_integer(option)); break; case BOOLEAN: g_key_file_set_boolean(keyfile, "wavbreaker", option->key, config_option_get_integer(option)); break; case STRING: g_key_file_set_string(keyfile, "wavbreaker", option->key, config_option_get_string(option)); break; default: g_warning("Invalid option type: %d\n", option->type); break; } } if (!g_key_file_save_to_file(keyfile, config_filename, NULL)) { g_warning("Could not save settings"); } g_key_file_free(keyfile); } void appconfig_init() { gchar *config_filename = g_build_path("/", g_get_user_config_dir(), "wavbreaker", "wavbreaker.conf", NULL); set_config_filename(config_filename); gchar *config_dir = g_path_get_dirname(config_filename); if (g_mkdir_with_parents(config_dir, 0700) != 0) { g_warning("Could not create configuration directory: %s", config_dir); } g_free(config_dir); g_free(config_filename); if (!appconfig_read_file()) { default_all_strings(); appconfig_write_file(); } else { default_all_strings(); } } void default_all_strings() { /* default any values that where not in the config file */ if (appconfig_get_outputdir() == NULL) { outputdir = g_strdup(getenv("PWD")); } if (appconfig_get_etree_filename_suffix() == NULL) { etree_filename_suffix = g_strdup("-"); } if (appconfig_get_etree_cd_length() == NULL) { etree_cd_length = g_strdup("80"); } set_audio_function_pointers(); } wavbreaker-0.13/src/appconfig.h000066400000000000000000000042771356554132000165120ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * Copyright (C) 2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef APPCONFIG_H #define APPCONFIG_H #include "sample.h" #include "wavbreaker.h" typedef struct AudioFunctionPointers_ AudioFunctionPointers; struct AudioFunctionPointers_ { void (*audio_close_device)(); int (*audio_open_device)(SampleInfo *); int (*audio_write)(unsigned char *, int); }; void appconfig_show(GtkWidget *); void appconfig_write_file(); void appconfig_init(); AudioFunctionPointers *get_audio_function_pointers(); int appconfig_get_use_outputdir(); char *appconfig_get_outputdir(); int appconfig_get_use_etree_filename_suffix(); int appconfig_get_prepend_file_number(); char *appconfig_get_etree_filename_suffix(); char *appconfig_get_etree_cd_length(); int appconfig_get_main_window_xpos(); void appconfig_set_main_window_xpos(int x); int appconfig_get_main_window_ypos(); void appconfig_set_main_window_ypos(int x); int appconfig_get_main_window_width(); void appconfig_set_main_window_width(int x); int appconfig_get_main_window_height(); void appconfig_set_main_window_height(int x); int appconfig_get_vpane1_position(); void appconfig_set_vpane1_position(int x); int appconfig_get_vpane2_position(); void appconfig_set_vpane2_position(int x); int appconfig_get_silence_percentage(); void appconfig_set_silence_percentage(int x); int appconfig_get_show_moodbar(); void appconfig_set_show_moodbar(int x); #endif /* APPCONFIG_H */ wavbreaker-0.13/src/autosplit.c000066400000000000000000000062651356554132000165620ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2004 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "autosplit.h" #include #include #include #include "sample.h" #include "wavbreaker.h" #include "gettext.h" static long parse_time_string(const char *autosplit_time) { long min, sec, subsec; if (sscanf(autosplit_time, "%ld:%ld.%ld", &min, &sec, &subsec) == 3) { return (min * 60 + sec) * CD_BLOCKS_PER_SEC + subsec; } else if (sscanf(autosplit_time, "%ld:%ld", &min, &sec) == 2) { return (min * 60 + sec) * CD_BLOCKS_PER_SEC; } else if (sscanf(autosplit_time, "%ld.%ld", &sec, &subsec) == 2) { return sec * CD_BLOCKS_PER_SEC + subsec; } return atoi(autosplit_time) * 60 * CD_BLOCKS_PER_SEC; } static void on_split_button_clicked(GtkWidget *widget, gpointer user_data) { GtkEntry *entry = GTK_ENTRY(user_data); GtkPopover *popover = GTK_POPOVER(g_object_get_data(G_OBJECT(entry), "popover")); gtk_popover_popdown(popover); long time = parse_time_string(gtk_entry_get_text(entry)); if (time > 0) { wavbreaker_autosplit(time); long subsec = time % CD_BLOCKS_PER_SEC; time -= subsec; time /= CD_BLOCKS_PER_SEC; long sec = time % 60; time -= sec; time /= 60; gchar *tmp = g_strdup_printf("%02ld:%02ld.%02ld", time, sec, subsec); gtk_entry_set_text(entry, tmp); g_free(tmp); } } GtkWidget * autosplit_create(GtkPopover *popover) { GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); GtkWidget *message_label = gtk_label_new(_("Interval (MM:SS.FF, MM:SS, SS.FF or MM):")); gtk_box_pack_start(GTK_BOX(hbox), message_label, FALSE, FALSE, 0); GtkWidget *autosplit_time_entry = gtk_entry_new(); g_object_set_data(G_OBJECT(autosplit_time_entry), "popover", popover); g_signal_connect(autosplit_time_entry, "activate", G_CALLBACK(on_split_button_clicked), autosplit_time_entry); gtk_entry_set_text(GTK_ENTRY(autosplit_time_entry), "5:00.00"); gtk_entry_set_width_chars(GTK_ENTRY(autosplit_time_entry), 10); gtk_box_pack_start(GTK_BOX(hbox), autosplit_time_entry, FALSE, FALSE, 0); GtkWidget *ok_button = gtk_button_new_with_label(_("Split")); g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(on_split_button_clicked), autosplit_time_entry); gtk_box_pack_start(GTK_BOX(hbox), ok_button, FALSE, FALSE, 0); gtk_widget_show_all(hbox); return hbox; } wavbreaker-0.13/src/autosplit.h000066400000000000000000000016271356554132000165640ustar00rootroot00000000000000#pragma once /* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2003 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include GtkWidget *autosplit_create(GtkPopover *popover); wavbreaker-0.13/src/cdda.c000066400000000000000000000063371356554132000154310ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "cdda.h" unsigned long file_size; int cdda_read_header(const char *filename, SampleInfo *sampleInfo) { struct stat statBuf; if (stat(filename, &statBuf)) { printf("error stat'ing %s\n", filename); return -1; } file_size = statBuf.st_size; sampleInfo->numBytes = statBuf.st_size; sampleInfo->channels = 2; sampleInfo->samplesPerSec = 44100; sampleInfo->bitsPerSample = 16; sampleInfo->avgBytesPerSec = sampleInfo->bitsPerSample/8 * sampleInfo->samplesPerSec * sampleInfo->channels; sampleInfo->blockAlign = 4; return 0; } int cdda_read_sample(FILE *fp, unsigned char *buf, int buf_size, unsigned long start_pos) { int i = 0; int ret; if (fseek(fp, start_pos, SEEK_SET)) { return -1; } if (start_pos > file_size) { return -1; } ret = fread(buf, 1, buf_size, fp); for (i = 0; i < ret / 4; i++) { unsigned char tmp; /* left channel */ tmp = buf[i*4+0]; buf[i*4+0] = buf[i*4+1]; buf[i*4+1] = tmp; /* right channel */ tmp = buf[i*4+2]; buf[i*4+2] = buf[i*4+3]; buf[i*4+3] = tmp; } return ret; } int cdda_write_file(FILE *fp, char *filename, int buf_size, unsigned long start_pos, unsigned long end_pos) { int ret; FILE *new_fp; unsigned long cur_pos; unsigned char buf[buf_size]; if ((new_fp = fopen(filename, "wb")) == NULL) { printf("error opening %s for writing\n", filename); return -1; } cur_pos = start_pos; if (fseek(fp, cur_pos, SEEK_SET)) { fclose(new_fp); return -1; } if (cur_pos > file_size) { fclose(new_fp); return -1; } /* DEBUG CODE START */ printf("start_pos: %lu\n", start_pos); printf("end_pos: %lu\n", end_pos); printf("cur_pos: %lu\n", cur_pos); /* DEBUG CODE END */ if (cur_pos + buf_size > end_pos && end_pos != 0) { buf_size = end_pos - cur_pos; } while ((ret = fread(buf, 1, buf_size, fp)) > 0 && (cur_pos < end_pos || end_pos == 0)) { if ((fwrite(buf, 1, ret, new_fp)) < ret) { printf("error writing to file %s\n", filename); fclose(new_fp); return -1; } cur_pos += ret; if (cur_pos + buf_size > end_pos && end_pos != 0) { buf_size = end_pos - cur_pos; } } /* DEBUG CODE START */ printf("cur_pos: %lu\n", cur_pos); printf("done writing - %s\n\n", filename); /* DEBUG CODE END */ fclose(new_fp); return ret; } wavbreaker-0.13/src/cdda.h000066400000000000000000000022461356554132000154310ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CDDA_H #define CDDA_H #include "sample.h" int cdda_read_header(const char *, SampleInfo *); int cdda_read_sample(FILE *, unsigned char *, int, unsigned long); int cdda_write_file(FILE *fp, char *filename, int buf_size, unsigned long start_pos, unsigned long end_pos); #endif /* CDDA_H */ wavbreaker-0.13/src/cue.c000066400000000000000000000036331356554132000153060ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "cue.h" #include "wavbreaker.h" #include int cue_read_file(const char *cue_filename, GList *breaks) { FILE *fp; /* These buffers must have the same length */ char line_buf[1024]; char buf[1024]; int next_track = 1; fp = fopen(cue_filename, "r"); if (!fp) return 1; track_break_clear_list(); /* Read the first line: FILE "foo.wav" WAVE */ if (!fgets(line_buf, sizeof(line_buf), fp)) { fclose(fp); return 1; } /* Check that it starts with FILE and ends with WAVE */ if (sscanf(line_buf, "FILE %s WAVE", buf) != 1) { fclose(fp); return 1; } while (!feof(fp)) { int N; int read; guint offset; read = fscanf(fp, "TRACK %02d AUDIO\n", &N); if (read == EOF) { return 0; } if (read != 1 || N != next_track) { fclose(fp); return 1; } if (!fgets(line_buf, sizeof(line_buf), fp)) { fclose(fp); return 1; } read = sscanf(line_buf, "INDEX %02d %s", &N, buf); if (read != 2 || N != 1) { fclose(fp); return 1; } offset = msf_time_to_offset(buf); track_break_add_offset((char *)-1, offset); ++next_track; } return 0; } wavbreaker-0.13/src/cue.h000066400000000000000000000017011356554132000153050ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef CUE_H #define CUE_H #include int cue_read_file(const char *cue_filename, GList *breaks); #endif /* CUE_H */ wavbreaker-0.13/src/draw.c000066400000000000000000000267151356554132000154750ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2005 Timothy Robinson * Copyright (C) 2007-2019 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "draw.h" static void draw_sample_surface(struct WaveformSurface *self, struct WaveformSurfaceDrawContext *ctx); static void draw_summary_surface(struct WaveformSurface *self, struct WaveformSurfaceDrawContext *ctx); /** * Generated using the following Python 3 snippet (with some editing): * * import colorsys * for i in range(6): * print(' { %3d, %3d, %3d, },' % tuple(int(x*255) * for x in colorsys.hsv_to_rgb(i/8., 0.8, 0.8))) **/ const unsigned char SAMPLE_COLORS_VALUES[][3] = { { 204, 40, 40, }, { 204, 163, 40, }, { 122, 204, 40, }, { 40, 81, 204, }, { 40, 204, 204, }, }; #define SAMPLE_COLORS G_N_ELEMENTS(SAMPLE_COLORS_VALUES) #define SAMPLE_SHADES 3 GdkRGBA sample_colors[SAMPLE_COLORS][SAMPLE_SHADES]; GdkRGBA bg_color; GdkRGBA nowrite_color; static inline void set_cairo_source(cairo_t *cr, GdkRGBA color) { cairo_set_source_rgb(cr, color.red, color.green, color.blue); } static inline void fill_cairo_rectangle(cairo_t *cr, GdkRGBA *color, int width, int height) { set_cairo_source(cr, *color); cairo_rectangle(cr, 0.f, 0.f, (float)width, (float)height); cairo_fill(cr); } static inline void draw_cairo_line(cairo_t *cr, float x, float y0, float y1) { cairo_move_to(cr, x-0.5f, y0); cairo_line_to(cr, x-0.5f, y1); } static void waveform_surface_static_init() { static gboolean inited = FALSE; if (inited) { return; } bg_color = (GdkRGBA){ .red = 1.f, .green = 1.f, .blue = 1.f }; nowrite_color = (GdkRGBA){ .red = 0.86f, .green = 0.86f, .blue = 0.86f }; for (int i=0; idraw = draw_sample_surface; return surface; } struct WaveformSurface *waveform_surface_create_summary() { waveform_surface_static_init(); struct WaveformSurface *surface = calloc(sizeof(struct WaveformSurface), 1); surface->draw = draw_summary_surface; return surface; } void waveform_surface_draw(struct WaveformSurface *surface, struct WaveformSurfaceDrawContext *ctx) { surface->draw(surface, ctx); } void waveform_surface_invalidate(struct WaveformSurface *surface) { if (surface->surface) { cairo_surface_destroy(surface->surface); surface->surface = NULL; } surface->width = 0; surface->height = 0; } void waveform_surface_free(struct WaveformSurface *surface) { if (surface->surface) { cairo_surface_destroy(surface->surface); } free(surface); } static GdkRGBA moodbar_sample_color(MoodbarData *moodbar, float position) { float index = position * moodbar->numFrames; unsigned long iindex = index; float fractional = index - iindex; if (fractional == 0.f || iindex >= moodbar->numFrames - 1) { return moodbar->frames[iindex]; } else { GdkRGBA a = moodbar->frames[iindex]; GdkRGBA b = moodbar->frames[iindex+1]; return (GdkRGBA){ .red = (1.f - fractional) * a.red + fractional * b.red, .green = (1.f - fractional) * a.green + fractional * b.green, .blue = (1.f - fractional) * a.blue + fractional * b.blue, .alpha = (1.f - fractional) * a.alpha + fractional * b.alpha, }; } } static void draw_sample_surface(struct WaveformSurface *self, struct WaveformSurfaceDrawContext *ctx) { int xaxis; int width, height; int y_min, y_max; int scale; long i; int shade; GdkRGBA new_color; { GtkAllocation allocation; gtk_widget_get_allocation(ctx->widget, &allocation); width = allocation.width; height = allocation.height; } if (self->surface != NULL && self->width == width && self->height == height && self->offset == ctx->pixmap_offset && (ctx->moodbarData && ctx->moodbarData->numFrames) == self->moodbar) { return; } if (self->surface) { cairo_surface_destroy(self->surface); } self->surface = gdk_window_create_similar_surface(gtk_widget_get_window(ctx->widget), CAIRO_CONTENT_COLOR, width, height); if (!self->surface) { printf("surface is NULL\n"); return; } cairo_t *cr = cairo_create(self->surface); cairo_set_line_width(cr, 1.f); /* clear sample_surface before drawing */ fill_cairo_rectangle(cr, &bg_color, width, height); if (ctx->graphData->data == NULL) { cairo_destroy(cr); return; } xaxis = height / 2; if (xaxis != 0) { scale = ctx->graphData->maxSampleValue / xaxis; if (scale == 0) { scale = 1; } } else { scale = 1; } /* draw sample graph */ int tb_index = 0; GList *tbl = ctx->track_break_list; for (i = 0; i < width && i < ctx->graphData->numSamples; i++) { y_min = ctx->graphData->data[i + ctx->pixmap_offset].min; y_max = ctx->graphData->data[i + ctx->pixmap_offset].max; y_min = xaxis + fabs((double)y_min) / scale; y_max = xaxis - y_max / scale; /* find the track break we are drawing now */ while (tbl->next && (i + ctx->pixmap_offset) > ((TrackBreak *)(tbl->next->data))->offset) { tbl = tbl->next; ++tb_index; } if (ctx->moodbarData && ctx->moodbarData->numFrames) { set_cairo_source(cr, moodbar_sample_color(ctx->moodbarData, (float)(i+ctx->pixmap_offset) / (float)ctx->graphData->numSamples)); draw_cairo_line(cr, i, 0.f, height); cairo_stroke(cr); } for( shade=0; shadedata; if (tb->write) { new_color = sample_colors[tb_index % SAMPLE_COLORS][shade]; } else { new_color = nowrite_color; } set_cairo_source(cr, new_color); draw_cairo_line(cr, i, y_min+(xaxis-y_min)*shade/SAMPLE_SHADES, y_min+(xaxis-y_min)*(shade+1)/SAMPLE_SHADES); draw_cairo_line(cr, i, y_max-(y_max-xaxis)*shade/SAMPLE_SHADES, y_max-(y_max-xaxis)*(shade+1)/SAMPLE_SHADES); cairo_stroke(cr); } } cairo_destroy(cr); self->width = width; self->height = height; self->offset = ctx->pixmap_offset; self->moodbar = ctx->moodbarData && ctx->moodbarData->numFrames; } static void draw_summary_surface(struct WaveformSurface *self, struct WaveformSurfaceDrawContext *ctx) { int xaxis; int width, height; int y_min, y_max; int min, max; int scale; int i, k; int loop_end, array_offset; int shade; float x_scale; GdkRGBA new_color; { GtkAllocation allocation; gtk_widget_get_allocation(ctx->widget, &allocation); width = allocation.width; height = allocation.height; } if (self->surface != NULL && self->width == width && self->height == height && (ctx->moodbarData && ctx->moodbarData->numFrames) == self->moodbar) { return; } if (self->surface) { cairo_surface_destroy(self->surface); } self->surface = gdk_window_create_similar_surface(gtk_widget_get_window(ctx->widget), CAIRO_CONTENT_COLOR, width, height); if (!self->surface) { printf("summary_surface is NULL\n"); return; } cairo_t *cr = cairo_create(self->surface); cairo_set_line_width(cr, 1.f); /* clear sample_surface before drawing */ fill_cairo_rectangle(cr, &bg_color, width, height); if (ctx->graphData->data == NULL) { cairo_destroy(cr); return; } xaxis = height / 2; if (xaxis != 0) { scale = ctx->graphData->maxSampleValue / xaxis; if (scale == 0) { scale = 1; } } else { scale = 1; } /* draw sample graph */ x_scale = (float)(ctx->graphData->numSamples) / (float)(width); if (x_scale == 0) { x_scale = 1; } int tb_index = 0; GList *tbl = ctx->track_break_list; for (i = 0; i < width && i < ctx->graphData->numSamples; i++) { min = max = 0; array_offset = (int)(i * x_scale); if (x_scale != 1) { loop_end = (int)x_scale; for (k = 0; k < loop_end; k++) { if (ctx->graphData->data[array_offset + k].max > max) { max = ctx->graphData->data[array_offset + k].max; } else if (ctx->graphData->data[array_offset + k].min < min) { min = ctx->graphData->data[array_offset + k].min; } } } else { min = ctx->graphData->data[i].min; max = ctx->graphData->data[i].max; } y_min = min; y_max = max; y_min = xaxis + fabs((double)y_min) / scale; y_max = xaxis - y_max / scale; /* find the track break we are drawing now */ while (tbl->next && array_offset > ((TrackBreak *)(tbl->next->data))->offset) { tbl = tbl->next; ++tb_index; } if (ctx->moodbarData && ctx->moodbarData->numFrames) { set_cairo_source(cr, moodbar_sample_color(ctx->moodbarData, (float)(array_offset) / (float)(ctx->graphData->numSamples))); draw_cairo_line(cr, i, 0.f, height); cairo_stroke(cr); } for( shade=0; shadedata; if (tb->write) { new_color = sample_colors[tb_index % SAMPLE_COLORS][shade]; } else { new_color = nowrite_color; } cairo_set_source_rgb(cr, new_color.red, new_color.green, new_color.blue); draw_cairo_line(cr, i, y_min+(xaxis-y_min)*shade/SAMPLE_SHADES, y_min+(xaxis-y_min)*(shade+1)/SAMPLE_SHADES); draw_cairo_line(cr, i, y_max-(y_max-xaxis)*shade/SAMPLE_SHADES, y_max-(y_max-xaxis)*(shade+1)/SAMPLE_SHADES); cairo_stroke(cr); } } cairo_destroy(cr); self->width = width; self->height = height; self->moodbar = ctx->moodbarData && ctx->moodbarData->numFrames; } wavbreaker-0.13/src/draw.h000066400000000000000000000034771356554132000155020ustar00rootroot00000000000000#pragma once /* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2005 Timothy Robinson * Copyright (C) 2007-2019 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "wavbreaker.h" #include "sample.h" #include "moodbar.h" struct WaveformSurfaceDrawContext { // widget to draw into GtkWidget *widget; // sample offset of sample view long pixmap_offset; // list of track breaks GList *track_break_list; // sample information GraphData *graphData; // moodbar information MoodbarData *moodbarData; }; struct WaveformSurface { cairo_surface_t *surface; unsigned long width; unsigned long height; unsigned long offset; gboolean moodbar; void (*draw)(struct WaveformSurface *, struct WaveformSurfaceDrawContext *); }; struct WaveformSurface *waveform_surface_create_sample(); struct WaveformSurface *waveform_surface_create_summary(); void waveform_surface_draw(struct WaveformSurface *surface, struct WaveformSurfaceDrawContext *ctx); void waveform_surface_invalidate(struct WaveformSurface *surface); void waveform_surface_free(struct WaveformSurface *surface); wavbreaker-0.13/src/gettext.h000066400000000000000000000000521356554132000162130ustar00rootroot00000000000000#pragma once #include wavbreaker-0.13/src/guimerge.c000066400000000000000000000404421356554132000163350ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2004 Timothy Robinson * * This file copyright (c) 2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include "sample.h" #include "wavbreaker.h" #include "popupmessage.h" #include "wav.h" #include "gettext.h" enum { COLUMN_FILENAME, COLUMN_BASENAME, COLUMN_LENGTH, COLUMN_LENGTH_STRING, NUM_COLUMNS }; static GtkWidget *window; static GtkWidget *ok_button; static GtkWidget *remove_button; static GtkTreeView *treeview = NULL; static GtkListStore *store = NULL; static char folder[4096] = {0}; static SampleInfo common_sample_info; static WriteInfo write_info; gboolean file_merge_progress_idle_func(gpointer data); int get_merge_files_count() { GtkTreeIter iter; int i = 0; if( gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store), &iter) == TRUE) { do { i++; } while( gtk_tree_model_iter_next( GTK_TREE_MODEL(store), &iter) == TRUE); } /* Only enable when we have more than one file to merge */ gtk_widget_set_sensitive( GTK_WIDGET( ok_button), (i>1)?TRUE:FALSE); gtk_widget_set_sensitive( GTK_WIDGET( remove_button), (i>0)?TRUE:FALSE); return i; } static void ok_button_clicked(GtkWidget *widget, gpointer user_data) { GtkWidget *dialog; GValue value; GtkTreeIter iter; GList *filenames = NULL; char *tmp; GtkWidget *checkbutton; GtkFileFilter *filter_all; GtkFileFilter *filter_supported; gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store), &iter); do { memset (&value, 0, sizeof (GValue)); gtk_tree_model_get_value( GTK_TREE_MODEL(store), &iter, 0, &value); tmp = (char*)g_value_peek_pointer( &value); filenames = g_list_append(filenames, g_strdup(tmp)); } while( gtk_tree_model_iter_next( GTK_TREE_MODEL(store), &iter) == TRUE); filter_all = gtk_file_filter_new(); gtk_file_filter_set_name( filter_all, _("All files")); gtk_file_filter_add_pattern( filter_all, "*"); filter_supported = gtk_file_filter_new(); gtk_file_filter_set_name( filter_supported, _("Supported files")); gtk_file_filter_add_pattern( filter_supported, "*.wav"); dialog = gtk_file_chooser_dialog_new( _("Select filename for merged wave file"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_SAVE, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_all); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_do_overwrite_confirmation( GTK_FILE_CHOOSER(dialog), TRUE); checkbutton = (GtkWidget*)gtk_check_button_new_with_label( _("Open file in wavbreaker after merge")); gtk_box_pack_end(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), checkbutton, FALSE, FALSE, 0); gtk_widget_show( GTK_WIDGET(checkbutton)); if( strlen( folder) > 0) { gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), folder); } gtk_file_chooser_set_current_name( GTK_FILE_CHOOSER(dialog), "merged.wav"); if( gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { tmp = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog)); write_info.pct_done = 0.0; sample_merge_files( tmp, filenames, &write_info); gtk_widget_destroy(GTK_WIDGET(user_data)); g_idle_add( file_merge_progress_idle_func, NULL); } gtk_widget_destroy( GTK_WIDGET(dialog)); } static void add_filename( char* filename) { GtkTreeIter iter; SampleInfo sampleinfo; unsigned int length = 0; char* length_str; int files = get_merge_files_count(); wav_read_header( filename, &sampleinfo, 0); if( files == 0) { /* Adding first file, saving sample info for later comparison */ memcpy( &common_sample_info, &sampleinfo, sizeof(SampleInfo)); } else { /* Compare the format info of the first file with the current info */ if( common_sample_info.channels != sampleinfo.channels || common_sample_info.samplesPerSec != sampleinfo.samplesPerSec || common_sample_info.avgBytesPerSec != sampleinfo.avgBytesPerSec || common_sample_info.blockAlign != sampleinfo.blockAlign || common_sample_info.bitsPerSample != sampleinfo.bitsPerSample || sampleinfo.channels == 0 || sampleinfo.samplesPerSec == 0 || sampleinfo.bitsPerSample < 8) { popupmessage_show( window, _("Wrong file format - skipping file"), filename); return; } } length = sampleinfo.numBytes / (sampleinfo.channels*sampleinfo.samplesPerSec*sampleinfo.bitsPerSample/8); length_str = (char*)malloc( 20); sprintf( length_str, "%02d:%02d", length/60, length%60); gtk_list_store_append( store, &iter); gtk_list_store_set( store, &iter, COLUMN_FILENAME, filename, COLUMN_BASENAME, basename(filename), COLUMN_LENGTH, length, COLUMN_LENGTH_STRING, length_str, -1); } static void add_button_clicked( GtkWidget *widget, gpointer user_data) { GtkWidget *dialog; GtkFileFilter *filter_all; GtkFileFilter *filter_supported; int i; filter_all = gtk_file_filter_new(); gtk_file_filter_set_name( filter_all, _("All files")); gtk_file_filter_add_pattern( filter_all, "*"); filter_supported = gtk_file_filter_new(); gtk_file_filter_set_name( filter_supported, _("Supported files")); gtk_file_filter_add_pattern( filter_supported, "*.wav"); dialog = gtk_file_chooser_dialog_new(_("Add wave file to merge"), GTK_WINDOW(window), GTK_FILE_CHOOSER_ACTION_OPEN, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_all); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_select_multiple( GTK_FILE_CHOOSER(dialog), TRUE); if( strlen( folder) > 0) { gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), folder); } if (gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { const char *current_folder = gtk_file_chooser_get_current_folder( GTK_FILE_CHOOSER(dialog)); if (current_folder) { strcpy(folder, current_folder); } GSList* filenames; filenames = gtk_file_chooser_get_filenames( GTK_FILE_CHOOSER(dialog)); for( i=0; i%s", gtk_window_get_title(GTK_WINDOW(window))); label = gtk_label_new(NULL); gtk_label_set_markup(GTK_LABEL(label), markup); g_free(markup); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); label = gtk_label_new( _("The selected files are now being merged. This can take some time.")); gtk_label_set_line_wrap( GTK_LABEL(label), TRUE); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); pbar = gtk_progress_bar_new(); gtk_box_pack_start(GTK_BOX(vbox), pbar, FALSE, TRUE, 5); status_label = gtk_label_new( NULL); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_label_set_ellipsize( GTK_LABEL(status_label), PANGO_ELLIPSIZE_MIDDLE); gtk_box_pack_start(GTK_BOX(vbox), status_label, FALSE, TRUE, 5); gtk_widget_show_all(GTK_WIDGET(window)); cur_file_displayed = -1; } if (write_info.sync) { write_info.sync = 0; gtk_widget_destroy(window); window = NULL; popupmessage_show(NULL, _("Operation successful"), _("The files have been merged.")); return FALSE; } if (cur_file_displayed != write_info.cur_file) { gchar *bn = g_path_get_basename(write_info.cur_filename); gchar *tmp = g_strdup_printf(_("Adding %s"), bn); g_free(bn); gchar *msg = g_markup_printf_escaped("%s", tmp); g_free(tmp); gtk_label_set_markup(GTK_LABEL(status_label), msg); g_free(msg); cur_file_displayed = write_info.cur_file; } fraction = 1.00*(write_info.cur_file-1+write_info.pct_done)/write_info.num_files; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar), fraction); gchar *msg; if (write_info.num_files > 1) { // TODO: i18n plural forms msg = g_strdup_printf(_("%d of %d files merged"), write_info.cur_file-1, write_info.num_files); } else { msg = g_strdup_printf(_("%d of 1 file merged"), write_info.cur_file-1); } gtk_progress_bar_set_text( GTK_PROGRESS_BAR(pbar), msg); g_free(msg); return TRUE; } wavbreaker-0.13/src/guimerge.h000066400000000000000000000017211356554132000163370ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2003 Timothy Robinson * * This file copyright (c) 2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef GUIMERGE_H #define GUIMERGE_H void guimerge_show( GtkWidget*); #endif /* GUIMERGE_H */ wavbreaker-0.13/src/moodbar.c000066400000000000000000000135631356554132000161600ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * Copyright (C) 2006-2019 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "moodbar.h" #include "popupmessage.h" #include "wavbreaker.h" #if defined(WANT_MOODBAR) #include #include #include #include #include #include #include "gettext.h" static pid_t moodbar_pid; static gboolean moodbar_cancelled; static GtkWidget *moodbar_wait_dialog; static guint moodbar_update_source_id; static gchar *moodbar_filename; static void cancel_moodbar_process(GtkWidget *widget, gpointer user_data) { moodbar_cancelled = TRUE; if (moodbar_pid != 0) { kill(moodbar_pid, SIGKILL); moodbar_pid = 0; } if (moodbar_filename) { /* remove (partial) .mood file */ unlink(moodbar_filename); free(moodbar_filename); moodbar_filename = NULL; } } static void hide_moodbar_process(GtkWidget *widget, gpointer user_data) { gtk_widget_hide(GTK_WIDGET(user_data)); } void moodbar_abort() { cancel_moodbar_process(NULL, NULL); } static gboolean update_moodbar_func(gpointer user_data) { GtkWidget *child = user_data; gtk_progress_bar_pulse(GTK_PROGRESS_BAR(child)); int child_status; if (waitpid(moodbar_pid, &child_status, WNOHANG) != 0) { gtk_widget_destroy(moodbar_wait_dialog); moodbar_wait_dialog = NULL; if (child_status != 0 && !moodbar_cancelled) { popupmessage_show(NULL, _("Cannot launch \"moodbar\""), _("wavbreaker could not launch the moodbar application, which is needed to generate the moodbar. You can download the moodbar package from:\n\n http://amarok.kde.org/wiki/Moodbar")); } moodbar_update_source_id = 0; wavbreaker_update_moodbar_state(); return FALSE; } return TRUE; } static gchar * get_moodbar_filename(const gchar *filename) { /* replace ".xxx" with ".mood" */ gchar *fn = (gchar*)malloc(strlen(filename)+2); strcpy(fn, filename); strcpy((gchar*)(fn+strlen(fn)-4), ".mood"); return fn; } void moodbar_generate(GtkWidget *window, const gchar *filename) { struct stat st; GtkWidget *child, *cancel_button; if (moodbar_filename) { free(moodbar_filename); } moodbar_filename = get_moodbar_filename(filename); if (stat(moodbar_filename, &st) == 0) { return; } if (moodbar_wait_dialog != NULL) { return; } moodbar_cancelled = FALSE; moodbar_pid = fork(); if (moodbar_pid == 0) { if (execlp("moodbar", "moodbar", "-o", moodbar_filename, filename, (char*)NULL) == -1) { fprintf(stderr, "Error running moodbar: %s (Have you installed the \"moodbar\" package?)\n", strerror(errno)); _exit(-1); } } else if (moodbar_pid > 0) { moodbar_wait_dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_NONE, _("Generating moodbar")); child = gtk_progress_bar_new(); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(moodbar_wait_dialog))), child, FALSE, TRUE, 0); cancel_button = gtk_button_new_with_mnemonic(_("_Hide window")); g_signal_connect(G_OBJECT(cancel_button), "clicked", G_CALLBACK(hide_moodbar_process), moodbar_wait_dialog); gtk_dialog_add_action_widget(GTK_DIALOG(moodbar_wait_dialog), cancel_button, -1); cancel_button = gtk_button_new_with_mnemonic(_("_Cancel")); g_signal_connect(G_OBJECT(cancel_button), "clicked", G_CALLBACK(cancel_moodbar_process), NULL); gtk_dialog_add_action_widget(GTK_DIALOG(moodbar_wait_dialog), cancel_button, -1); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(moodbar_wait_dialog), _("The moodbar tool analyzes your audio file and generates a colorful representation of the audio data.")); gtk_window_set_title(GTK_WINDOW(moodbar_wait_dialog), _("Generating moodbar")); gtk_widget_show_all(moodbar_wait_dialog); // Update progress bar/window in idle thread if (moodbar_update_source_id) { g_source_remove(moodbar_update_source_id); } moodbar_update_source_id = g_timeout_add(500, update_moodbar_func, child); } else { fprintf(stderr, "fork() failed for moodbar process: %s\n", strerror(errno)); } } MoodbarData * moodbar_open(const gchar *filename) { gchar *fn = get_moodbar_filename(filename); FILE *fp = fopen(fn, "rb"); if (!fp) { free(fn); return NULL; } MoodbarData *result = calloc(sizeof(MoodbarData), 1); fseek(fp, 0, SEEK_END); long length = ftell(fp); fseek(fp, 0, SEEK_SET); result->numFrames = length/3; result->frames = calloc(result->numFrames, sizeof(GdkRGBA)); unsigned long pos = 0; guchar tmp[3]; while (fread(&tmp, 3, 1, fp) > 0) { result->frames[pos].red = (float)tmp[0]/255.f; result->frames[pos].green = (float)tmp[1]/255.f; result->frames[pos].blue = (float)tmp[2]/255.f; pos++; } fclose(fp); free(fn); return result; } void moodbar_free(MoodbarData *data) { free(data->frames); free(data); } #else void moodbar_generate(GtkWidget *window, const gchar *filename) { } MoodbarData * moodbar_open(const gchar *filename) { return NULL; } void moodbar_free(MoodbarData *data) { } #endif wavbreaker-0.13/src/moodbar.h000066400000000000000000000022631356554132000161600ustar00rootroot00000000000000#pragma once /* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2005 Timothy Robinson * Copyright (C) 2007-2019 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include typedef struct MoodbarData_ MoodbarData; struct MoodbarData_ { unsigned long numFrames; GdkRGBA *frames; }; void moodbar_generate(GtkWidget *window, const gchar *filename); void moodbar_abort(); MoodbarData * moodbar_open(const gchar *filename); void moodbar_free(MoodbarData *data); wavbreaker-0.13/src/overwritedialog.c000066400000000000000000000110611356554132000177320ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include "sample.h" #include "wavbreaker.h" #include "gettext.h" typedef struct OverwriteData_ OverwriteData; struct OverwriteData_ { GtkWidget* window; GtkWidget* yes_to_all_checkbox; WriteInfo *write_info; }; void overwritedialog_no(GtkWidget *widget, gpointer user_data) { OverwriteData* data = (OverwriteData*) user_data; GtkWidget *window = GTK_WIDGET(data->window); WriteInfo *write_info = data->write_info; write_info->sync_check_file_overwrite_to_write_progress = 0; write_info->skip_file = 0; g_free(data); gtk_widget_destroy(window); } void overwritedialog_yes(GtkWidget *widget, gpointer user_data) { OverwriteData* data = (OverwriteData*) user_data; GtkWidget *window = GTK_WIDGET(data->window); GtkWidget *checkbox = GTK_WIDGET(data->yes_to_all_checkbox); WriteInfo *write_info = data->write_info; if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbox))) { write_info->skip_file = 2; } else { write_info->skip_file = 1; } write_info->sync_check_file_overwrite_to_write_progress = 0; g_free(data); gtk_widget_destroy(window); } void overwritedialog_show(GtkWidget *main_window, WriteInfo *write_info) { GtkWidget *window; GtkWidget *vbox; GtkWidget *hbbox; GtkWidget *status_label; GtkWidget *hseparator; GtkWidget *checkbox; GtkWidget *button; OverwriteData* overwrite_data = g_malloc(sizeof(OverwriteData)); overwrite_data->write_info = write_info; if (main_window == NULL) { main_window = wavbreaker_get_main_window(); } window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(window); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(main_window)); gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT); gdk_window_set_functions(gtk_widget_get_window(window), GDK_FUNC_MOVE); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); gtk_widget_show(vbox); gchar *message = g_strdup_printf(_("%s already exists.\n\nDo you want to overwrite the existing file?"), write_info->cur_filename); status_label = gtk_label_new(message); g_free(message); gtk_box_pack_start(GTK_BOX(vbox), status_label, FALSE, TRUE, 5); gtk_widget_show(status_label); checkbox = gtk_check_button_new_with_label(_("Overwrite all files")); gtk_box_pack_start(GTK_BOX(vbox), checkbox, FALSE, TRUE, 5); gtk_widget_show(checkbox); hseparator = gtk_separator_new(GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, TRUE, 5); gtk_widget_show(hseparator); hbbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_container_add(GTK_CONTAINER(vbox), hbbox); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END); gtk_widget_show(hbbox); button = gtk_button_new_with_mnemonic(_("_No")); gtk_box_pack_end(GTK_BOX(hbbox), button, FALSE, FALSE, 5); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)overwritedialog_no, overwrite_data); gtk_widget_show(button); button = gtk_button_new_with_mnemonic(_("_Yes")); gtk_box_pack_end(GTK_BOX(hbbox), button, FALSE, FALSE, 5); g_signal_connect(G_OBJECT(button), "clicked", (GCallback)overwritedialog_yes, overwrite_data); gtk_widget_show(button); overwrite_data->window = window; overwrite_data->yes_to_all_checkbox = checkbox; gtk_widget_show(window); } wavbreaker-0.13/src/overwritedialog.h000066400000000000000000000017441356554132000177460ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef OVERWRITEDIALOG_H #define OVERWRITEDIALOG_H #include "wavbreaker.h" void overwritedialog_show(GtkWidget *, WriteInfo *); #endif /* OVERWRITEDIALOG_H */ wavbreaker-0.13/src/popupmessage.c000066400000000000000000000035621356554132000172430ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2003 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "wavbreaker.h" void popupmessage_hide( GtkDialog *dialog, int response_id, gpointer user_data) { gtk_widget_destroy( GTK_WIDGET(user_data)); } void popupmessage_show( GtkWidget *main_window, const char *message, const char *description) { GtkWidget *dialog; gint buttons_type = GTK_BUTTONS_OK; if( main_window == NULL) { main_window = wavbreaker_get_main_window(); buttons_type = GTK_BUTTONS_CLOSE; } dialog = gtk_message_dialog_new( GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, buttons_type, "%s", message); gtk_message_dialog_format_secondary_text( GTK_MESSAGE_DIALOG(dialog), "%s", description); gtk_window_set_title( GTK_WINDOW(dialog), message); g_signal_connect( G_OBJECT(dialog), "response", (GCallback)popupmessage_hide, dialog); gtk_widget_show_all( GTK_WIDGET(dialog)); } wavbreaker-0.13/src/popupmessage.h000066400000000000000000000017161356554132000172470ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2003 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef POPUPMESSAGE_H #define POPUPMESSAGE_H void popupmessage_show(GtkWidget *, const char *, const char *); #endif /* POPUPMESSAGE_H */ wavbreaker-0.13/src/reallyquit.c000066400000000000000000000036161356554132000167260ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include "wavbreaker.h" #include "gettext.h" void reallyquit_show(GtkWidget *main_window) { GtkMessageDialog *dialog; gint result; const gchar *message = _("Quit wavbreaker?"); const gchar *info_text = _("If you quit wavbreaker now, any unsaved chunks will be lost."); if( main_window == NULL) { main_window = wavbreaker_get_main_window(); } dialog = (GtkMessageDialog*)gtk_message_dialog_new( GTK_WINDOW(main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "%s", message); gtk_window_set_title( GTK_WINDOW(dialog), message); gtk_message_dialog_format_secondary_text( dialog, "%s", info_text); result = gtk_dialog_run( GTK_DIALOG(dialog)); switch( result) { case GTK_RESPONSE_YES: wavbreaker_quit(); break; default: gtk_widget_destroy( GTK_WIDGET( dialog)); break; } } wavbreaker-0.13/src/reallyquit.h000066400000000000000000000016521356554132000167310ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef REALLYQUIT_H #define REALLYQUIT_H void reallyquit_show(GtkWidget *); #endif /* REALLYQUIT_H */ wavbreaker-0.13/src/sample.c000066400000000000000000000656021356554132000160170ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include "wavbreaker.h" #include "sample.h" #include "wav.h" #include "cdda.h" #include "appconfig.h" #include "overwritedialog.h" #include "gettext.h" #if defined(HAVE_MPG123) #include #endif enum AudioType { UNKNOWN = 0, CDDA = 1, WAV = 2, #if defined(HAVE_MPG123) MP3 = 3, #endif }; SampleInfo sampleInfo; static AudioFunctionPointers *audio_function_pointers; static unsigned long sample_start = 0; static int playing = 0; static int writing = 0; static gboolean kill_play_thread = FALSE; static enum AudioType audio_type; static char *sample_file = NULL; static FILE *read_sample_fp = NULL; static FILE *write_sample_fp = NULL; #if defined(HAVE_MPG123) static mpg123_handle *mpg123 = NULL; static size_t mpg123_offset = 0; #endif static GThread *thread; static GMutex mutex; /* typedef and struct stuff for new thread open junk */ typedef struct WriteThreadData_ WriteThreadData; struct WriteThreadData_ { GList *tbl; WriteInfo *write_info; char *outputdir; }; WriteThreadData wtd; typedef struct MergeThreadData_ MergeThreadData; struct MergeThreadData_ { char *merge_filename; int num_files; GList *filenames; WriteInfo *write_info; }; MergeThreadData mtd; typedef struct OpenThreadData_ OpenThreadData; struct OpenThreadData_ { GraphData *graphData; double *pct; }; OpenThreadData open_thread_data; static void sample_max_min(GraphData *graphData, double *pct); static char *error_message; char *sample_get_error_message() { return g_strdup(error_message ?: ""); } void sample_set_error_message(const char *val) { if (error_message) { g_free(error_message); } error_message = g_strdup(val); } #if defined(HAVE_MPG123) int mp3_read_sample(mpg123_handle *handle, unsigned char *buf, int buf_size, unsigned long start_pos) { size_t result; gboolean retried = FALSE; if (mpg123_offset != start_pos) { retry: mpg123_seek(handle, start_pos / sampleInfo.blockAlign, SEEK_SET); mpg123_offset = start_pos; } if (mpg123_read(handle, buf, buf_size, &result) == MPG123_OK) { mpg123_offset += result; return result; } else { fprintf(stderr, "MP3 decoding failed: %s\n", mpg123_strerror(mpg123)); if (!retried) { fprintf(stderr, "Retrying read at %zu...\n", mpg123_offset); retried = TRUE; goto retry; } } return -1; } //#define WAVBREAKER_MP3_DEBUG static gboolean mp3_parse_header(uint32_t header, uint32_t *bitrate, uint32_t *frequency, uint32_t *samples, uint32_t *framesize) { // http://www.datavoyage.com/mpgscript/mpeghdr.htm int a = ((header >> 21) & 0x07ff); int b = ((header >> 19) & 0x0003); int c = ((header >> 17) & 0x0003); int e = ((header >> 12) & 0x000f); int f = ((header >> 10) & 0x0003); int g = ((header >> 9) & 0x0001); static const int BITRATES_V1_L3[] = { -1, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1 }; static const int FREQUENCIES[] = { 44100, 48000, 32000, 0 }; if (a != 0x7ff /* sync */ || b != 0x3 /* MPEG1 */ || c != 0x1 /* Layer III */ || e == 0x0 /* freeform bitrate */ || e == 0xf /* invalid bitrate */ || f == 0x3 /* invalid frequency */) { return FALSE; } *bitrate = BITRATES_V1_L3[e]; *frequency = FREQUENCIES[f]; *samples = 1152; *framesize = (int)((*samples) / 8 * 1000 * (*bitrate) / (*frequency)) + g /* padding */; #if defined(WAVBREAKER_MP3_DEBUG) static const char *VERSIONS[] = { "MPEG 2.5", NULL, "MPEG 2", "MPEG 1" }; static const char *LAYERS[] = { NULL, "III", "II", "I" }; const char *mpeg_version = VERSIONS[b]; const char *layer = LAYERS[c]; fprintf(stderr, "MP3 frame: %s %s, %dHz, %dkbps, %d samples (%d bytes)\n", mpeg_version, layer, *frequency, *bitrate, *samples, *framesize); #endif /* WAVBREAKER_MP3_DEBUG */ return TRUE; } void mp3_write_file(FILE *input_file, const char *filename, SampleInfo *sampleInfo, unsigned long start_pos, unsigned long end_pos) { start_pos /= sampleInfo->blockSize; end_pos /= sampleInfo->blockSize; FILE *output_file = fopen(filename, "wb"); if (!output_file) { fprintf(stderr, "Could not open '%s' for writing\n", filename); return; } fseek(input_file, 0, SEEK_SET); uint32_t header = 0x00000000; uint32_t sample_position = 0; uint32_t file_offset = 0; uint32_t last_frame_end = 0; uint32_t frames_written = 0; while (!feof(input_file)) { fseek(input_file, file_offset, SEEK_SET); int a = fgetc(input_file); if (a == EOF) { break; } header = ((header & 0xffffff) << 8) | (a & 0xff); uint32_t bitrate = 0; uint32_t frequency = 0; uint32_t samples = 0; uint32_t framesize = 0; if (mp3_parse_header(header, &bitrate, &frequency, &samples, &framesize)) { uint32_t frame_start = file_offset - 3; if (last_frame_end < frame_start) { fprintf(stderr, "Skipped non-frame data in MP3 @ 0x%08x (%d bytes)\n", last_frame_end, frame_start - last_frame_end); } uint32_t start_samples = start_pos * frequency / CD_BLOCKS_PER_SEC; if (start_samples <= sample_position) { // Write this frame to the output file char *buf = malloc(framesize); fseek(input_file, frame_start, SEEK_SET); if (fread(buf, 1, framesize, input_file) != framesize) { fprintf(stderr, "Tried to read over the end of the input file\n"); break; } if (fwrite(buf, 1, framesize, output_file) != framesize) { fprintf(stderr, "Failed to write %d bytes to output file\n", framesize); break; } free(buf); frames_written++; uint32_t end_samples = end_pos * frequency / CD_BLOCKS_PER_SEC; if (end_samples > 0 && end_samples <= sample_position + samples) { // Done writing this part break; } } sample_position += samples; file_offset = frame_start + framesize; last_frame_end = file_offset; header = 0x00000000; } else { file_offset++; } } #if defined(WAVBREAKER_MP3_DEBUG) fprintf(stderr, "Wrote %d MP3 frames from '%s' to '%s'\n", frames_written, sample_file, filename); #endif /* WAVBREAKER_MP3_DEBUG */ fclose(output_file); } #endif void sample_init() { g_mutex_init(&mutex); #if defined(HAVE_MPG123) if (mpg123_init() != MPG123_OK) { fprintf(stderr, "Failed to initialize libmpg123\n"); } #endif } static gpointer play_thread(gpointer thread_data) { int read_ret = 0; int i; guint *play_marker = (guint *)thread_data; unsigned char *devbuf; audio_function_pointers = get_audio_function_pointers(); /* printf("play_thread: calling open_audio_device\n"); */ if (audio_function_pointers->audio_open_device(&sampleInfo) != 0) { g_mutex_lock(&mutex); playing = 0; audio_function_pointers->audio_close_device(); g_mutex_unlock(&mutex); //printf("play_thread: return from open_audio_device != 0\n"); return NULL; } //printf("play_thread: return from open_audio_device\n"); i = 0; devbuf = malloc(sampleInfo.bufferSize); if (devbuf == NULL) { g_mutex_lock(&mutex); playing = 0; audio_function_pointers->audio_close_device(); g_mutex_unlock(&mutex); printf("play_thread: out of memory\n"); return NULL; } if (audio_type == CDDA) { read_ret = cdda_read_sample(read_sample_fp, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); } else if (audio_type == WAV) { read_ret = wav_read_sample(read_sample_fp, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); #if defined(HAVE_MPG123) } else if (audio_type == MP3) { read_ret = mp3_read_sample(mpg123, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); #endif } while (read_ret > 0 && read_ret <= sampleInfo.bufferSize) { /* if (read_ret < 0) { printf("read_ret: %d\n", read_ret); } */ audio_function_pointers->audio_write(devbuf, read_ret); if (g_mutex_trylock(&mutex)) { if (kill_play_thread == TRUE) { audio_function_pointers->audio_close_device(); playing = 0; kill_play_thread = FALSE; g_mutex_unlock(&mutex); return NULL; } g_mutex_unlock(&mutex); } if (audio_type == CDDA) { read_ret = cdda_read_sample(read_sample_fp, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); } else if (audio_type == WAV) { read_ret = wav_read_sample(read_sample_fp, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); #if defined(HAVE_MPG123) } else if (audio_type == MP3) { read_ret = mp3_read_sample(mpg123, devbuf, sampleInfo.bufferSize, sample_start + (sampleInfo.bufferSize * i++)); #endif } *play_marker = ((sampleInfo.bufferSize * i) + sample_start) / sampleInfo.blockSize; } g_mutex_lock(&mutex); audio_function_pointers->audio_close_device(); playing = 0; g_mutex_unlock(&mutex); return NULL; } int sample_is_playing() { return playing; } int sample_is_writing() { return writing; } int play_sample(gulong startpos, gulong *play_marker) { g_mutex_lock(&mutex); if (playing) { g_mutex_unlock(&mutex); return 2; } if (sample_file == NULL) { g_mutex_unlock(&mutex); return 3; } playing = 1; sample_start = startpos * sampleInfo.blockSize; /* setup thread */ //printf("creating the thread\n"); fflush(stdout); thread = g_thread_new("play_sample", play_thread, play_marker); g_mutex_unlock(&mutex); //printf("finished creating the thread\n"); return 0; } void stop_sample() { g_mutex_lock(&mutex); if (!playing) { g_mutex_unlock(&mutex); return; } kill_play_thread = TRUE; g_mutex_unlock(&mutex); // Wait for play thread to actually quit g_thread_join(thread); thread = NULL; } static gpointer open_thread(gpointer data) { OpenThreadData *thread_data = data; sample_max_min(thread_data->graphData, thread_data->pct); return NULL; } int ask_open_as_raw() { GtkMessageDialog *dialog; gint result; const gchar *message = _("Open as RAW audio"); const gchar *info_text = _("The file you selected does not contain a wave header. wavbreaker can interpret the file as \"Signed 16 bit, 44100 Hz, Stereo\" audio. Choose the byte order for the RAW audio or cancel to abort."); dialog = (GtkMessageDialog*)gtk_message_dialog_new( GTK_WINDOW(wavbreaker_get_main_window()), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_CANCEL, "%s", message); gtk_dialog_add_button( GTK_DIALOG(dialog), _("Big endian"), WB_RESPONSE_BIG_ENDIAN); gtk_dialog_add_button( GTK_DIALOG(dialog), _("Little endian"), WB_RESPONSE_LITTLE_ENDIAN); gtk_message_dialog_format_secondary_text( dialog, "%s", info_text); gtk_window_set_title( GTK_WINDOW(dialog), message); result = gtk_dialog_run( GTK_DIALOG(dialog)); gtk_widget_destroy( GTK_WIDGET( dialog)); return result; } int sample_open_file(const char *filename, GraphData *graphData, double *pct) { int ask_result = 0; sample_close_file(); sample_file = g_strdup(filename); audio_type = UNKNOWN; if( wav_read_header(sample_file, &sampleInfo, 0) == 0) { audio_type = WAV; } #if defined(HAVE_MPG123) if (audio_type == UNKNOWN) { fprintf(stderr, "Trying to open as MP3...\n"); if (mpg123 != NULL) { mpg123_close(mpg123), mpg123 = NULL; } if ((mpg123 = mpg123_new(NULL, NULL)) == NULL) { fprintf(stderr, "Failed to create MP3 decoder\n"); } if (mpg123_open(mpg123, sample_file) == MPG123_OK) { fprintf(stderr, "Detected MP3 format\n"); long rate; int channels; int encoding; if (mpg123_getformat(mpg123, &rate, &channels, &encoding) != MPG123_OK ) { fprintf(stderr, "Could not get file format\n"); } fprintf(stderr, "Scanning MP3 file...\n"); if (mpg123_scan(mpg123) != MPG123_OK) { fprintf(stderr, "Failed to scan MP3\n"); } struct mpg123_frameinfo fi; memset(&fi, 0, sizeof(fi)); if (mpg123_info(mpg123, &fi) == MPG123_OK) { sampleInfo.channels = (fi.mode == MPG123_M_MONO) ? 1 : 2; sampleInfo.samplesPerSec = fi.rate; sampleInfo.bitsPerSample = 16; sampleInfo.blockAlign = sampleInfo.channels * (sampleInfo.bitsPerSample / 8); sampleInfo.avgBytesPerSec = sampleInfo.blockAlign * sampleInfo.samplesPerSec; sampleInfo.bufferSize = DEFAULT_BUF_SIZE; sampleInfo.blockSize = sampleInfo.avgBytesPerSec / CD_BLOCKS_PER_SEC; sampleInfo.numBytes = mpg123_length(mpg123) * sampleInfo.blockAlign; fprintf(stderr, "Channels: %d, rate: %d, bits: %d, decoded size: %lu\n", sampleInfo.channels, sampleInfo.samplesPerSec, sampleInfo.bitsPerSample, sampleInfo.numBytes); mpg123_format_none(mpg123); if (mpg123_format(mpg123, sampleInfo.samplesPerSec, (sampleInfo.channels == 1) ? MPG123_STEREO : MPG123_MONO, MPG123_ENC_SIGNED_16) != MPG123_OK) { fprintf(stderr, "Failed to set mpg123 format\n"); } else { fprintf(stderr, "MP3 file reading successfully set up\n"); audio_type = MP3; } } } } #endif if (audio_type == UNKNOWN) { ask_result = ask_open_as_raw(); if( ask_result == GTK_RESPONSE_CANCEL) { sample_set_error_message(wav_get_error_message()); return 1; } cdda_read_header(sample_file, &sampleInfo); if( ask_result == WB_RESPONSE_BIG_ENDIAN) { audio_type = CDDA; } else { audio_type = WAV; } } if (audio_type == WAV || audio_type == CDDA) { sampleInfo.blockSize = (((sampleInfo.bitsPerSample / 8) * sampleInfo.channels * sampleInfo.samplesPerSec) / CD_BLOCKS_PER_SEC); if ((read_sample_fp = fopen(sample_file, "rb")) == NULL) { if (error_message) { g_free(error_message); } error_message = g_strdup_printf(_("Error opening %s: %s"), sample_file, strerror(errno)); return 2; } } open_thread_data.graphData = graphData; open_thread_data.pct = pct; fflush(stdout); g_thread_unref(g_thread_new("open file", open_thread, &open_thread_data)); return 0; } void sample_close_file() { #if defined(HAVE_MPG123) if (mpg123 != NULL) { mpg123_close(mpg123), mpg123 = NULL; } #endif if( read_sample_fp != NULL) { fclose( read_sample_fp); read_sample_fp = NULL; } if( sample_file != NULL) { g_free(sample_file); sample_file = NULL; } } static void sample_max_min(GraphData *graphData, double *pct) { int tmp = 0; long int ret = 0; int min, max, xtmp; int min_sample, max_sample; long int i, k; long int numSampleBlocks; long int tmp_sample_calc; unsigned char devbuf[sampleInfo.blockSize]; Points *graph_data; tmp_sample_calc = sampleInfo.numBytes; tmp_sample_calc = tmp_sample_calc / sampleInfo.blockSize; numSampleBlocks = (tmp_sample_calc + 1); /* DEBUG CODE START */ /* printf("\nsampleInfo.numBytes: %lu\n", sampleInfo.numBytes); printf("sampleInfo.bitsPerSample: %d\n", sampleInfo.bitsPerSample); printf("sampleInfo.blockSize: %d\n", sampleInfo.blockSize); printf("sampleInfo.channels: %d\n", sampleInfo.channels); printf("numSampleBlocks: %d\n\n", numSampleBlocks); */ /* DEBUG CODE END */ graph_data = (Points *)malloc(numSampleBlocks * sizeof(Points)); if (graph_data == NULL) { printf("NULL returned from malloc of graph_data\n"); return; } i = 0; if (audio_type == CDDA) { ret = cdda_read_sample(read_sample_fp, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); } else if (audio_type == WAV) { ret = wav_read_sample(read_sample_fp, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); #if defined(HAVE_MPG123) } else if (audio_type == MP3) { ret = mp3_read_sample(mpg123, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); #endif } min_sample = SHRT_MAX; /* highest value for 16-bit samples */ max_sample = 0; while (ret == sampleInfo.blockSize && i < numSampleBlocks) { min = max = 0; for (k = 0; k < ret; k++) { if (sampleInfo.bitsPerSample == 8) { tmp = devbuf[k]; tmp -= 128; } else if (sampleInfo.bitsPerSample == 16) { tmp = (char)devbuf[k+1] << 8 | (char)devbuf[k]; k++; } else if (sampleInfo.bitsPerSample == 24) { tmp = ((char)devbuf[k]) | ((char)devbuf[k+1] << 8); tmp &= 0x0000ffff; xtmp = (char)devbuf[k+2] << 16; tmp |= xtmp; k += 2; } if (tmp > max) { max = tmp; } else if (tmp < min) { min = tmp; } // skip over any extra channels k += (sampleInfo.channels - 1) * (sampleInfo.bitsPerSample / 8); } graph_data[i].min = min; graph_data[i].max = max; if( min_sample > (max-min)) { min_sample = (max-min); } if( max_sample < (max-min)) { max_sample = (max-min); } if (audio_type == CDDA) { ret = cdda_read_sample(read_sample_fp, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); } else if (audio_type == WAV) { ret = wav_read_sample(read_sample_fp, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); #if defined(HAVE_MPG123) } else if (audio_type == MP3) { ret = mp3_read_sample(mpg123, devbuf, sampleInfo.blockSize, sampleInfo.blockSize * i); #endif } *pct = (double) i / numSampleBlocks; i++; } *pct = 1.0; graphData->numSamples = numSampleBlocks; if (graphData->data != NULL) { free(graphData->data); } graphData->data = graph_data; graphData->minSampleAmp = min_sample; graphData->maxSampleAmp = max_sample; if (sampleInfo.bitsPerSample == 8) { graphData->maxSampleValue = UCHAR_MAX; } else if (sampleInfo.bitsPerSample == 16) { graphData->maxSampleValue = SHRT_MAX; } else if (sampleInfo.bitsPerSample == 24) { graphData->maxSampleValue = 0x7fffff; } /* DEBUG CODE START */ /* printf("\ni: %d\n", i); printf("graphData->numSamples: %ld\n", graphData->numSamples); printf("graphData->maxSampleValue: %ld\n\n", graphData->maxSampleValue); */ /* DEBUG CODE END */ } static gpointer write_thread(gpointer data) { WriteThreadData *thread_data = data; GList *tbl_head = thread_data->tbl; GList *tbl_cur, *tbl_next; char *outputdir = thread_data->outputdir; TrackBreak *tb_cur, *tb_next; WriteInfo *write_info = thread_data->write_info; int i; int index; unsigned long start_pos, end_pos; char filename[1024]; write_info->num_files = 0; write_info->cur_file = 0; write_info->sync = 0; write_info->sync_check_file_overwrite_to_write_progress = 0; write_info->check_file_exists = 0; write_info->skip_file = -1; i = 1; tbl_cur = tbl_head; while (tbl_cur != NULL) { index = g_list_position(tbl_head, tbl_cur); tb_cur = (TrackBreak *)g_list_nth_data(tbl_head, index); if (tb_cur->write == TRUE) { write_info->num_files++; } tbl_cur = g_list_next(tbl_cur); } i = 1; tbl_cur = tbl_head; tbl_next = g_list_next(tbl_cur); while (tbl_cur != NULL) { index = g_list_position(tbl_head, tbl_cur); tb_cur = (TrackBreak *)g_list_nth_data(tbl_head, index); if (tb_cur->write == TRUE) { start_pos = tb_cur->offset * sampleInfo.blockSize; if (tbl_next == NULL) { end_pos = 0; tb_next = NULL; } else { index = g_list_position(tbl_head, tbl_next); tb_next = (TrackBreak *)g_list_nth_data(tbl_head, index); end_pos = tb_next->offset * sampleInfo.blockSize; } /* add output directory to filename */ strcpy(filename, outputdir); strcat(filename, "/"); strcat(filename, tb_cur->filename); /* add file extension to filename */ if ((audio_type == WAV) && (!strstr(filename, ".wav"))) { strcat(filename, ".wav"); } else if ((audio_type == CDDA) && (!strstr(filename, ".dat"))) { strcat(filename, ".dat"); #if defined(HAVE_MPG123) } else if ((audio_type == MP3) && (!strstr(filename, ".mp3"))) { strcat(filename, ".mp3"); #endif } write_info->pct_done = 0.0; write_info->cur_file++; if (write_info->cur_filename != NULL) { g_free(write_info->cur_filename); } write_info->cur_filename = g_strdup(filename); if (write_info->skip_file < 2) { if (g_file_test(filename, G_FILE_TEST_EXISTS)) { write_info->skip_file = -1; write_info->check_file_exists = 1; // sync the threads to wait on overwrite question while (write_info->skip_file < 0) { sleep(1); } } else { write_info->skip_file = 1; } } if (write_info->skip_file > 0) { if (audio_type == CDDA) { cdda_write_file(write_sample_fp, filename, sampleInfo.bufferSize, start_pos, end_pos); } else if (audio_type == WAV) { wav_write_file(write_sample_fp, filename, sampleInfo.blockSize, &sampleInfo, start_pos, end_pos, &write_info->pct_done); #if defined(HAVE_MPG123) } else if (audio_type == MP3) { mp3_write_file(write_sample_fp, filename, &sampleInfo, start_pos, end_pos); #endif } i++; } if (write_info->skip_file < 2) { write_info->skip_file = -1; } } tbl_cur = g_list_next(tbl_cur); tbl_next = g_list_next(tbl_next); } write_info->sync = 1; if (write_info->cur_filename != NULL) { g_free(write_info->cur_filename); } write_info->cur_filename = NULL; fclose(write_sample_fp); writing = 0; return NULL; } void sample_write_files(GList *tbl, WriteInfo *write_info, char *outputdir) { wtd.tbl = tbl; wtd.write_info = write_info; wtd.outputdir = outputdir; writing = 1; if (sample_file == NULL) { perror("Must open file first\n"); writing = 0; return; } if ((write_sample_fp = fopen(sample_file, "rb")) == NULL) { printf("error opening %s\n", sample_file); writing = 0; return; } g_thread_unref(g_thread_new("write data", write_thread, &wtd)); } static gpointer merge_thread(gpointer data) { MergeThreadData *thread_data = data; char *filenames[g_list_length(thread_data->filenames)]; GList *cur, *head; int index, i; char *list_data; head = thread_data->filenames; cur = head; i = 0; while (cur != NULL) { index = g_list_position(head, cur); list_data = (char *)g_list_nth_data(head, index); filenames[i++] = list_data; cur = g_list_next(cur); } wav_merge_files(thread_data->merge_filename, g_list_length(thread_data->filenames), filenames, DEFAULT_BUF_SIZE, thread_data->write_info); head = thread_data->filenames; cur = head; while (cur != NULL) { index = g_list_position(head, cur); list_data = (char *)g_list_nth_data(head, index); free(list_data); cur = g_list_next(cur); } g_list_free(thread_data->filenames); return NULL; } void sample_merge_files(char *merge_filename, GList *filenames, WriteInfo *write_info) { mtd.merge_filename = g_strdup(merge_filename); mtd.filenames = filenames; mtd.write_info = write_info; if (write_info->merge_filename != NULL) { g_free(write_info->merge_filename); } write_info->merge_filename = mtd.merge_filename; g_thread_unref(g_thread_new("merge files", merge_thread, &mtd)); } wavbreaker-0.13/src/sample.h000066400000000000000000000051671356554132000160240ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SAMPLE_H #define SAMPLE_H #include typedef struct Points_ Points; struct Points_ { int min, max; }; typedef struct GraphData_ GraphData; struct GraphData_{ unsigned long numSamples; unsigned long maxSampleValue; unsigned long maxSampleAmp; unsigned long minSampleAmp; Points *data; }; typedef struct WriteInfo_ WriteInfo; struct WriteInfo_ { guint num_files; guint cur_file; char *cur_filename; char *merge_filename; double pct_done; guint sync; gint check_file_exists; gint skip_file; /* -1 = waiting for check * 0 = don't overwrite file * 1 = file is ok to overwrite * 2 = overwrite all files */ gint sync_check_file_overwrite_to_write_progress; }; #define DEFAULT_BUF_SIZE 4096 #define CD_BLOCKS_PER_SEC (75) /* Responses for the ask open raw dialog */ #define WB_RESPONSE_LITTLE_ENDIAN 1 #define WB_RESPONSE_BIG_ENDIAN 2 typedef struct SampleInfo_ SampleInfo; struct SampleInfo_ { unsigned short channels; unsigned int samplesPerSec; unsigned int avgBytesPerSec; unsigned short blockAlign; unsigned short bitsPerSample; unsigned long numBytes; unsigned int bufferSize; unsigned int blockSize; }; char *sample_get_error_message(); void sample_init(); void sample_set_audio_dev(char *str); char * sample_get_audio_dev(); char * sample_get_sample_file(); int sample_is_playing(); int sample_is_writing(); int play_sample(gulong startpos, gulong *play_marker); void stop_sample(); int sample_open_file(const char *, GraphData *, double *); void sample_close_file(); void sample_write_files(GList *, WriteInfo *, char *); void sample_merge_files(char *merge_filename, GList *filenames, WriteInfo *write_info); #endif /* SAMPLE_H*/ wavbreaker-0.13/src/saveas.c000066400000000000000000000041701356554132000160110ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "sample.h" #include "wavbreaker.h" #include "gettext.h" static char *saveas_dirname = NULL; char *saveas_get_dirname() { return saveas_dirname; } void saveas_set_dirname(const char *val) { if (saveas_dirname != NULL) { g_free(saveas_dirname); } saveas_dirname = g_strdup(val); } void saveas_show(GtkWidget *parent_window) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new( _("Select folder to save wave files"), GTK_WINDOW(parent_window), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, NULL); if( saveas_get_dirname() == NULL) { saveas_set_dirname( getenv( "PWD")); } gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), saveas_get_dirname()); if( gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { saveas_set_dirname( gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog))); wavbreaker_write_files( saveas_get_dirname()); } gtk_widget_destroy( GTK_WIDGET(dialog)); } wavbreaker-0.13/src/saveas.h000066400000000000000000000017351356554132000160220ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef SAVEAS_H #define SAVEAS_H void saveas_show(GtkWidget *); char *saveas_get_dirname(); void saveas_set_dirname(const char *); #endif /* SAVEAS_H */ wavbreaker-0.13/src/toc.c000066400000000000000000000074541356554132000153240ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include "wavbreaker.h" #include "sample.h" #include "toc.h" char *convert_wavbreaker_time_to_toc_time(const char *wavbreakerTime); guint time_to_offset( gchar * ); int toc_read_file(const char *toc_filename, GList *breaks) { FILE *fp; char buf[1024]; gchar *ptr, *eptr; guint offset; fp = fopen( toc_filename, "r" ); if( !fp ) return 1; track_break_clear_list(); do { do { ptr = fgets( buf, 1024, fp ); if( !ptr ) { if( feof(fp) ) { fclose( fp ); return 0; } else { fclose( fp ); return 1; } } } while( memcmp(buf, "FILE", 4) ); ptr = strrchr( buf, '"' ); if( !ptr ) { fclose( fp ); return 1; } ptr += 2; eptr = strchr( ptr, ':' ); if( !eptr ) { fclose( fp ); return 1; } eptr += 6; *eptr = '\0'; offset = msf_time_to_offset( ptr ); track_break_add_offset( (char *)-1, offset ); } while( !feof( fp ) ); fclose( fp ); return 0; } int toc_write_file(const char *toc_filename, const char *wav_filename, GList *breaks) { FILE *fp; TrackBreak *next_break = NULL; char *tocTime; char *tocDuration; fp = fopen(toc_filename, "w"); if(!fp) return 1; fprintf(fp, "// Generated with wavbreaker\n\nCD_DA\n"); int i = 0; int len = g_list_length(breaks); while (i < len) { next_break = (TrackBreak *) g_list_nth_data(breaks, i); if (next_break != NULL) { fprintf(fp, "\n// track %02d\n", i); fprintf(fp, "TRACK AUDIO\n"); tocTime = convert_wavbreaker_time_to_toc_time(next_break->time); if (i != len-1) { tocDuration = convert_wavbreaker_time_to_toc_time(next_break->duration); fprintf(fp, "FILE \"%s\" %s %s\n", wav_filename, tocTime, tocDuration); g_free(tocDuration); } else { fprintf(fp, "FILE \"%s\" %s\n", wav_filename, tocTime); } g_free(tocTime); } i++; } fclose(fp); return 0; } char *convert_wavbreaker_time_to_toc_time(const char *wavbreakerTime) { char *tocTime; int i; #ifdef DEBUG printf("start of convert_wavbreaker_time_to_toc_time\n"); printf("called convert_wavbreaker_time_to_toc_time with: %s\n", wavbreakerTime); #endif tocTime = g_strdup(wavbreakerTime); #ifdef DEBUG printf("got to: %d\n", p++); #endif i = 0; while (tocTime[i] != '\0') { #ifdef DEBUG printf("got to: %d\n", p++); printf("looping with: %d", tocTime[i]); #endif if (tocTime[i] == '.') { tocTime[i] = ':'; } i++; } #ifdef DEBUG printf("end of convert_wavbreaker_time_to_toc_time\n"); #endif return tocTime; } /* min = time / (CD_BLOCKS_PER_SEC * 60); */ /* sec = time % (CD_BLOCKS_PER_SEC * 60); */ /* subsec = sec % CD_BLOCKS_PER_SEC; */ /* sec = sec / CD_BLOCKS_PER_SEC; */ wavbreaker-0.13/src/toc.h000066400000000000000000000020341356554132000153160ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2005 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef TOC_H #define TOC_H #include int toc_read_file(const char *toc_filename, GList *breaks); int toc_write_file(const char *toc_filename, const char *wav_filename, GList *breaks); #endif /* TOC_H */ wavbreaker-0.13/src/wav.c000066400000000000000000000371001356554132000153230ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include "wav.h" #include "gettext.h" unsigned long wavDataPtr; unsigned long wavDataSize; static char *error_message; #define CHUNK_ERROR_MESSAGE (_("Error reading chunk. Maybe the wave file you are trying to load is truncated?")) const char *wav_get_error_message() { return error_message ?: ""; } static void wav_set_error_message(const char *fmt, ...) { va_list args; va_start(args, fmt); if (error_message) { g_free(error_message); } error_message = g_strdup_vprintf(fmt, args); va_end(args); } int wav_read_header(char *sample_file, SampleInfo *sampleInfo, int debug) { WaveHeader wavHdr; ChunkHeader chunkHdr; FormatChunk fmtChunk; char str[128]; FILE *fp; struct stat statBuf; /** * This is needed for RAW audio * and also lets us check if the file size in the header * is correct (or the wave file is truncated, in which * case we are going to use the real file size instead). **/ wavDataPtr = 0; if (stat(sample_file, &statBuf)) { printf("error stat'ing %s\n", sample_file); } else { wavDataSize = statBuf.st_size; } /* DEBUG CODE START */ if (debug) { printf("WaveHeader Size:\t%lu\n", sizeof(WaveHeader)); printf("ChunkHeader Size:\t%lu\n", sizeof(ChunkHeader)); printf("FormatChunk Size:\t%lu\n", sizeof(FormatChunk)); } /* DEBUG CODE END */ if ((fp = fopen(sample_file, "rb")) == NULL) { wav_set_error_message(_("Cannot open %s: %s"), sample_file, strerror(errno)); return 1; } /* read in file header */ if (fread(&wavHdr, sizeof(WaveHeader), 1, fp) < 1) { wav_set_error_message("%s", _("Cannot read wave header.")); fclose(fp); return 1; } if (memcmp(wavHdr.riffID, RiffID, 4) && memcmp(wavHdr.wavID, WaveID, 4)) { wav_set_error_message(_("%s is not a wave file."), sample_file); fclose(fp); return 1; } /* DEBUG CODE START */ if (debug) { memcpy(str, wavHdr.riffID, 4); memcpy(str+4, "\0", 1); printf("RIFF ID:\t%s\n", str); printf("Total Size:\t%u\n", wavHdr.totSize); memcpy(str, wavHdr.wavID, 4); memcpy(str+4, "\0", 1); printf("Wave ID:\t%s\n", str); } /* DEBUG CODE END */ /* read in format chunk header */ if (fread(&chunkHdr, sizeof(ChunkHeader), 1, fp) < 1) { wav_set_error_message("%s", CHUNK_ERROR_MESSAGE); fclose(fp); return 1; } while (memcmp(chunkHdr.chunkID, FormatID, 4)) { if (debug) { memcpy(str, chunkHdr.chunkID, 4); memcpy(str+4, "\0", 1); printf("Chunk ID:\t%s\n", str); printf("Chunk Size:\t%u\n", chunkHdr.chunkSize); } memcpy(str, chunkHdr.chunkID, 4); memcpy(str+4, "\0", 1); printf("Chunk %s is not a Format Chunk\n", str); if (fseek(fp, chunkHdr.chunkSize, SEEK_CUR)) { wav_set_error_message(_("Error seeking to %u in %s: %s"), chunkHdr.chunkSize, sample_file, strerror(errno)); fclose(fp); return 1; } if (fread(&chunkHdr, sizeof(ChunkHeader), 1, fp) < 1) { wav_set_error_message("%s", CHUNK_ERROR_MESSAGE); fclose(fp); return 1; } } if (debug) { memcpy(str, chunkHdr.chunkID, 4); memcpy(str+4, "\0", 1); printf("Chunk ID:\t%s\n", str); printf("Chunk Size:\t%u\n", chunkHdr.chunkSize); } /* read in format chunk data */ if (fread(&fmtChunk, sizeof(FormatChunk), 1, fp) < 1) { wav_set_error_message(_("Error reading format chunk: %s"), strerror(errno)); fclose(fp); return 1; } if (debug) { printf("Compression format is of type: %d\n", fmtChunk.wFormatTag); printf("Channels:\t%d\n", fmtChunk.wChannels); printf("Sample Rate:\t%u\n", fmtChunk.dwSamplesPerSec); printf("Bytes / Sec:\t%u\n", fmtChunk.dwAvgBytesPerSec); printf("wBlockAlign:\t%u\n", fmtChunk.wBlockAlign); printf("Bits Per Sample Point:\t%u\n", fmtChunk.wBitsPerSample); } /* DEBUG CODE END */ if (fmtChunk.wFormatTag != 1) { wav_set_error_message("%s", _("Loading compressed wave data is not supported.")); fclose(fp); return 1; } sampleInfo->channels = fmtChunk.wChannels; sampleInfo->samplesPerSec = fmtChunk.dwSamplesPerSec; sampleInfo->avgBytesPerSec = fmtChunk.dwAvgBytesPerSec; sampleInfo->blockAlign = fmtChunk.wBlockAlign; sampleInfo->bitsPerSample = fmtChunk.wBitsPerSample; // if we have a FormatChunk that is larger than standard size, skip over extra data if (chunkHdr.chunkSize > sizeof(FormatChunk)) { printf("in size compare\n"); if (fseek(fp, chunkHdr.chunkSize - sizeof(FormatChunk), SEEK_CUR)) { wav_set_error_message(_("Error seeking to %u in %s: %s"), chunkHdr.chunkSize, sample_file, strerror(errno)); fclose(fp); return 1; } } /* DEBUG CODE START */ /* read in wav data header */ if (fread(&chunkHdr, sizeof(ChunkHeader), 1, fp) < 1) { wav_set_error_message("%s", CHUNK_ERROR_MESSAGE); fclose(fp); return 1; } while (memcmp(chunkHdr.chunkID, WaveDataID, 4)) { memcpy(str, chunkHdr.chunkID, 4); memcpy(str + 4, "\0", 1); printf("Chunk %s is not a Format Chunk\n", str); if (fseek(fp, chunkHdr.chunkSize, SEEK_CUR)) { wav_set_error_message(_("Error seeking to %u in %s: %s"), chunkHdr.chunkSize, sample_file, strerror(errno)); fclose(fp); return 1; } if (fread(&chunkHdr, sizeof(ChunkHeader), 1, fp) < 1) { wav_set_error_message("%s", CHUNK_ERROR_MESSAGE); fclose(fp); return 1; } } long x; if ((x = ftell(fp)) >= 0) { wavDataPtr = x; } /** * If we got a truncated wave file, we will not * use the header's size info here, but use the * real file size, minus the header's size. ***/ if( chunkHdr.chunkSize > wavDataSize) { printf( "Warning: Real file size is %lu, but wave header " "says it should be %d. Using real file size instead.\n", wavDataSize, chunkHdr.chunkSize); wavDataSize = wavDataSize - wavDataPtr; } else { wavDataSize = chunkHdr.chunkSize; } sampleInfo->numBytes = wavDataSize; /* DEBUG CODE START */ if (debug) { printf("wavDataPtr: %lu\n", wavDataPtr); printf("wavDataSize: %lu\n", wavDataSize); } /* DEBUG CODE END */ fclose(fp); return 0; } int wav_read_sample(FILE *fp, unsigned char *buf, int buf_size, unsigned long start_pos) { int ret; if (fseek(fp, start_pos + wavDataPtr, SEEK_SET)) { return -1; } /* DEBUG CODE START */ /* printf("start_pos: %lu\t", start_pos); */ /* DEBUG CODE END */ if (start_pos > wavDataSize) { return -1; } else if (start_pos + buf_size > wavDataSize) { buf_size = wavDataSize - start_pos; ret = fread(buf, 1, buf_size, fp); } else { ret = fread(buf, 1, buf_size, fp); } /* DEBUG CODE START */ /* printf("start_pos: %lu\t", start_pos); printf("buf_size: %d\n", buf_size); */ /* DEBUG CODE END */ return ret; } int wav_write_file_header(FILE *fp, SampleInfo *sample_info, unsigned long num_bytes) { WaveHeader wavHdr; ChunkHeader chunkHdr; FormatChunk fmtChunk; /* Write wave header */ memcpy(wavHdr.riffID, RiffID, 4); wavHdr.totSize = num_bytes + sizeof(ChunkHeader) + sizeof(FormatChunk) + sizeof(ChunkHeader) + 4; memcpy(wavHdr.wavID, WaveID, 4); if ((fwrite(&wavHdr, sizeof(WaveHeader), 1, fp)) < 1) { printf("error writing wave header\n"); return 1; } /* Write format chunk header */ memcpy(chunkHdr.chunkID, FormatID, 4); chunkHdr.chunkSize = sizeof(FormatChunk); if ((fwrite(&chunkHdr, sizeof(ChunkHeader), 1, fp)) < 1) { printf("error writing fmt chunk header\n"); return 1; } /* Write format chunk data */ fmtChunk.wFormatTag = 1; fmtChunk.wChannels = sample_info->channels; fmtChunk.dwSamplesPerSec = sample_info->samplesPerSec; fmtChunk.dwAvgBytesPerSec = sample_info->avgBytesPerSec; fmtChunk.wBlockAlign = sample_info->blockAlign; fmtChunk.wBitsPerSample = sample_info->bitsPerSample; if (fwrite(&fmtChunk, sizeof(FormatChunk), 1, fp) < 1) { printf("error writing format chunk\n"); return 1; } /* Write data chunk header */ memcpy(chunkHdr.chunkID, WaveDataID, 4); chunkHdr.chunkSize = num_bytes; if ((fwrite(&chunkHdr, sizeof(ChunkHeader), 1, fp)) < 1) { printf("error writing data chunk header\n"); return 1; } return 0; } int wav_write_file(FILE *fp, char *filename, int buf_size, SampleInfo *sample_info, unsigned long start_pos, unsigned long end_pos, double *pct_done) { int ret; FILE *new_fp; unsigned long cur_pos, num_bytes; unsigned char *buf = (unsigned char *)malloc(buf_size); if ((new_fp = fopen(filename, "wb")) == NULL) { printf("error opening %s for writing\n", filename); free(buf); return -1; } if (start_pos > wavDataSize) { fclose(new_fp); free(buf); return -1; } start_pos += wavDataPtr; if (end_pos != 0) { end_pos += wavDataPtr; num_bytes = end_pos - start_pos; } else { num_bytes = wavDataSize + wavDataPtr - start_pos; } cur_pos = start_pos; if ((wav_write_file_header(new_fp, sample_info, num_bytes)) != 0) { fclose(new_fp); free(buf); return -1; } if (fseek(fp, cur_pos, SEEK_SET)) { fclose(new_fp); free(buf); return -1; } /* DEBUG CODE START */ /* printf("\nstart_pos: %lu\n", start_pos); printf("end_pos: %lu\n", end_pos); printf("cur_pos: %lu\n", cur_pos); */ /* DEBUG CODE END */ /* if (cur_pos + buf_size > end_pos && end_pos != 0) { buf_size = end_pos - cur_pos; } */ while ((ret = fread(buf, 1, buf_size, fp)) > 0 && (cur_pos < end_pos || end_pos == 0)) { if ((fwrite(buf, 1, ret, new_fp)) < ret) { printf("error writing to file %s\n", filename); fclose(new_fp); free(buf); return -1; } cur_pos += ret; *pct_done = (double) (cur_pos - start_pos) / num_bytes; /* if (cur_pos + buf_size > end_pos && end_pos != 0) { buf_size = end_pos - cur_pos; } */ } /* DEBUG CODE START */ /* printf("cur_pos: %lu\n", cur_pos); printf("buf_size: %d\n", buf_size); printf("ret: %d\n", ret); printf("num_bytes: %lu\n", num_bytes); printf("done writing - %s\n", filename); */ /* DEBUG CODE END */ free(buf); fclose(new_fp); *pct_done = 1.0; return ret; } int wav_merge_files(char *filename, int num_files, char *filenames[], int buf_size, WriteInfo *write_info) { int i; int ret = 0; SampleInfo sample_info[num_files]; unsigned long data_ptr[num_files]; FILE *new_fp, *read_fp; unsigned long cur_pos, end_pos, num_bytes; unsigned char buf[buf_size]; if( write_info != NULL) { write_info->num_files = num_files; write_info->cur_file = 0; write_info->sync = 0; write_info->sync_check_file_overwrite_to_write_progress = 0; write_info->check_file_exists = 0; write_info->skip_file = -1; } for (i = 0; i < num_files; i++) { wav_read_header(filenames[i], &sample_info[i], 0); data_ptr[i] = wavDataPtr; } num_bytes = sample_info[0].numBytes; for (i = 1; i < num_files; i++) { if (sample_info[0].channels != sample_info[i].channels) { return 1; } else if (sample_info[0].samplesPerSec != sample_info[i].samplesPerSec) { return 1; } else if (sample_info[0].avgBytesPerSec != sample_info[i].avgBytesPerSec) { return 1; } else if (sample_info[0].blockAlign != sample_info[i].blockAlign) { return 1; } else if (sample_info[0].bitsPerSample != sample_info[i].bitsPerSample) { return 1; } num_bytes += sample_info[i].numBytes; } if ((new_fp = fopen(filename, "wb")) == NULL) { printf("error opening %s for writing\n", filename); return -1; } if ((wav_write_file_header(new_fp, &sample_info[0], num_bytes)) != 0) { fclose(new_fp); return -1; } for (i = 0; i < num_files; i++) { if( write_info != NULL) { write_info->pct_done = 0.0; write_info->cur_file++; if (write_info->cur_filename != NULL) { free(write_info->cur_filename); } write_info->cur_filename = g_strdup(filenames[i]); } if ((read_fp = fopen(filenames[i], "rb")) == NULL) { printf("error opening %s for reading\n", filenames[i]); fclose(new_fp); fclose(read_fp); return -1; } cur_pos = data_ptr[i]; num_bytes = sample_info[i].numBytes; end_pos = cur_pos + num_bytes; if (fseek(read_fp, cur_pos, SEEK_SET)) { fclose(new_fp); fclose(read_fp); return -1; } while ((ret = fread(buf, 1, buf_size, read_fp)) > 0 && (cur_pos < end_pos)) { if ((fwrite(buf, 1, ret, new_fp)) < ret) { printf("error writing to file %s\n", filename); fclose(new_fp); fclose(read_fp); return -1; } if( write_info != NULL) { write_info->pct_done = (double) cur_pos / num_bytes; } cur_pos += ret; } fclose(read_fp); } if( write_info != NULL) { write_info->sync = 1; if (write_info->cur_filename != NULL) { g_free(write_info->cur_filename); } write_info->cur_filename = NULL; } fclose(new_fp); if( write_info != NULL) { write_info->pct_done = 1.0; } return ret; } wavbreaker-0.13/src/wav.h000066400000000000000000000040451356554132000153320ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WAV_H #define WAV_H #include "sample.h" #define RiffID "RIFF" #define WaveID "WAVE" #define FormatID "fmt " #define WaveDataID "data" typedef char ID[4]; typedef struct { ID riffID; unsigned int totSize; ID wavID; } WaveHeader; typedef struct { ID chunkID; int chunkSize; } ChunkHeader; typedef struct { short wFormatTag; unsigned short wChannels; unsigned int dwSamplesPerSec; unsigned int dwAvgBytesPerSec; unsigned short wBlockAlign; unsigned short wBitsPerSample; // unsigned short extraNonPcm; } FormatChunk; const char *wav_get_error_message(); int wav_read_header(char *, SampleInfo *, int); int wav_read_sample(FILE *, unsigned char *, int, unsigned long); int wav_write_file_header(FILE *fp, SampleInfo *sample_info, unsigned long num_bytes); int wav_write_file(FILE *fp, char *filename, int buf_size, SampleInfo *sample_info, unsigned long start_pos, unsigned long end_pos, double *pct_done); int wav_merge_files(char *filename, int num_files, char *filenames[], int buf_size, WriteInfo *write_info); #endif /* WAV_H */ wavbreaker-0.13/src/wavbreaker.c000066400000000000000000003037161356554132000166700ustar00rootroot00000000000000/* -*- c-basic-offset: 4 -*- */ /* wavbreaker - A tool to split a wave file up into multiple waves. * Copyright (C) 2002-2006 Timothy Robinson * Copyright (C) 2006-2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "wavbreaker.h" #include "sample.h" #include "about.h" #include "appconfig.h" #include "autosplit.h" #include "saveas.h" #include "popupmessage.h" #include "overwritedialog.h" #include "toc.h" #include "cue.h" #include "reallyquit.h" #include "guimerge.h" #include "moodbar.h" #include "draw.h" #include #include "gettext.h" #define APPNAME "wavbreaker" #define SILENCE_MIN_LENGTH 4 static struct WaveformSurface *sample_surface; static struct WaveformSurface *summary_surface; static GtkWidget *main_window; static GtkWidget *header_bar; static GtkWidget *header_bar_save_button; static GtkWidget *vpane1, *vpane2; static GtkWidget *scrollbar; static GtkAdjustment *adj; static GtkWidget *draw; static GtkWidget *draw_summary; static GtkWidget *play_button; static GtkWidget *jump_to_popover; static GtkWidget *autosplit_popover; static GtkWidget *menu_popover; static GtkWidget *cursor_marker_spinner; static GtkWidget *cursor_marker_min_spinner; static GtkWidget *cursor_marker_sec_spinner; static GtkWidget *cursor_marker_subsec_spinner; static GtkWidget *button_seek_backward; static GtkWidget *button_jump_to_time; static GtkWidget *button_seek_forward; static GtkWidget *button_auto_split; static GtkWidget *button_add_break; static GtkWidget *button_remove_break; static GtkAdjustment *cursor_marker_spinner_adj; static GtkAdjustment *cursor_marker_min_spinner_adj; static GtkAdjustment *cursor_marker_sec_spinner_adj; static GtkAdjustment *cursor_marker_subsec_spinner_adj; static GraphData graphData; static MoodbarData *moodbarData; static gulong cursor_marker; static gulong play_marker; static int pixmap_offset; char *sample_filename = NULL; struct stat sample_stat; static gboolean overwrite_track_names = FALSE; // one-shot idle_add-style event sources static guint open_file_source_id; static guint redraw_source_id; // timeout-based (periodic) progress UI update event sources static guint file_open_progress_source_id; static guint play_progress_source_id; static guint file_write_progress_source_id; static gdouble progress_pct; static WriteInfo write_info; typedef struct CursorData_ CursorData; struct CursorData_ { gulong marker; gboolean is_equal; }; enum { COLUMN_WRITE, COLUMN_FILENAME, COLUMN_TIME, COLUMN_DURATION, COLUMN_OFFSET, COLUMN_EDITABLE, NUM_COLUMNS }; static GList *track_break_list = NULL; static GtkListStore *store = NULL; GtkWidget *treeview; /* *------------------------------------------------------------------------- * Function Prototypes *------------------------------------------------------------------------- */ /* Track Break Functions */ static gboolean track_break_button_press(GtkWidget *widget, GdkEventButton *event, gpointer user_data); void track_break_write_toggled(GtkWidget *widget, gchar *path_str, gpointer data); void track_break_filename_edited(GtkCellRendererText *cell, const gchar *path_str, const gchar *new_text, gpointer user_data); void track_break_start_time_edited(GtkCellRendererText *cell, const gchar *path_str, const gchar *new_text, gpointer user_data); guint track_break_find_offset(); void track_break_delete_entry(); void track_break_setup_filename(gpointer data, gpointer user_data); void track_break_rename( gboolean overwrite); void track_break_add_to_model(gpointer data, gpointer user_data); void track_break_add_entry(); void track_break_set_durations(); void track_break_set_duration(gpointer data, gpointer user_data); int track_breaks_export_to_file( char* filename); int track_breaks_load_from_file( gchar const *filename); void track_break_write_text( gpointer data, gpointer user_data); void track_break_write_cue( gpointer data, gpointer user_data); /* File Functions */ void set_sample_filename(const char *f); static void open_file(); static void set_title( char* title); /* Sample and Summary Display Functions */ static void force_redraw(); static void redraw(); static gboolean redraw_later( gpointer data); static void reset_sample_display(guint); static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data); static gboolean draw_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data); static gboolean draw_summary_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data); static gboolean draw_summary_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data); static gboolean draw_summary_button_release(GtkWidget *widget, GdkEventButton *event, gpointer user_data); /* Menu Functions */ static void menu_open_file(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_menu(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_delete_track_break(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_import(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_save(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_save_as(GSimpleAction *action, GVariant *parameter, gpointer user_data); #if defined(WANT_MOODBAR) static void menu_view_moodbar(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_moodbar(GSimpleAction *action, GVariant *parameter, gpointer user_data); #endif static void menu_about(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_config(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_merge(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_export(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_autosplit(gpointer callback_data, guint callback_action, GtkWidget *widget); static void menu_rename(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void menu_play(GtkWidget *widget, gpointer user_data); static void menu_stop(GtkWidget *widget, gpointer user_data); static void menu_next_silence( GtkWidget* widget, gpointer user_data); static void menu_jump_to(GtkWidget *widget, gpointer user_data); static void menu_prev_silence( GtkWidget* widget, gpointer user_data); void menu_add_track_break(GSimpleAction *action, GVariant *parameter, gpointer user_data); static void set_stop_icon(); static void set_play_icon(); static void save_window_sizes(); static void check_really_quit(); static void offset_to_time(guint, gchar *, gboolean); static guint time_to_offset(gint min, gint sec, gint subsec); static void offset_to_duration(guint, guint, gchar *); static void update_status(gboolean); /* static char *status_message = NULL; char *get_status_message() { return status_message; } void set_status_message(const char *val) { if (status_message != NULL) { g_free(status_message); } status_message = g_strdup(val); } */ void parts_check_cb(GtkWidget *widget, gpointer data) { TrackBreak *track_break; guint list_pos; gpointer list_data; gint i; GtkTreeIter iter; i = 0; while (gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(store), &iter, NULL, i++)) { list_pos = i - 1; list_data = g_list_nth_data(track_break_list, list_pos); track_break = (TrackBreak *)list_data; switch ((glong)data) { case CHECK_ALL: track_break->write = TRUE; break; case CHECK_NONE: track_break->write = FALSE; break; case CHECK_INVERT: track_break->write = !track_break->write; break; } gtk_list_store_set(GTK_LIST_STORE(store), &iter, COLUMN_WRITE, track_break->write, -1); } force_redraw(); } void jump_to_cursor_marker(GSimpleAction *action, GVariant *parameter, gpointer user_data) { reset_sample_display(cursor_marker); redraw(); } void jump_to_track_break(GSimpleAction *action, GVariant *parameter, gpointer user_data) { guint n = 0; n = track_break_find_offset(); if (n <= graphData.numSamples) { reset_sample_display(n); } redraw(); } void wavbreaker_autosplit(long x) { long n = x; gulong orig_cursor_marker = cursor_marker; while (n <= graphData.numSamples) { cursor_marker = n; track_break_add_entry(); n += x; } cursor_marker = orig_cursor_marker; force_redraw(); } /* *------------------------------------------------------------------------- * Track Break *------------------------------------------------------------------------- */ /* TODO */ /* static void cell_data_func_gpa (GtkTreeViewColumn *col, GtkCellRenderer *cell, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { gchar buf[32]; GValue val = {0, }; gtk_tree_model_get_value(model, iter, COLUMN_TIME, &val); g_snprintf(buf, sizeof(buf), "%s", g_value_get_string(&val)); g_printf("text: %s\n", buf); // g_object_set(cell, "text", buf, NULL); } */ static void set_action_enabled(const char *action, gboolean enabled) { g_object_set(G_OBJECT(g_action_map_lookup_action(G_ACTION_MAP(main_window), action)), "enabled", enabled, NULL); } static void on_tree_selection_changed(GtkTreeSelection *selection, gpointer user_data) { gboolean can_remove = TRUE; GList *list = gtk_tree_selection_get_selected_rows(selection, NULL); GList *cur = list; while (cur) { GtkTreePath *path = cur->data; if (gtk_tree_path_get_indices(path)[0] == 0) { can_remove = FALSE; break; } cur = cur->next; } g_list_free(list); set_action_enabled("remove_break", can_remove); } GtkWidget * track_break_create_list_gui() { GtkTreeViewColumn *column; GtkCellRenderer *renderer; GtkWidget *sw; /* create the scrolled window for the list */ sw = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_ETCHED_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); /* create the data store */ store = gtk_list_store_new(NUM_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_BOOLEAN); /* create the treeview */ treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); gtk_container_add(GTK_CONTAINER(sw), treeview); GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); g_signal_connect(G_OBJECT(selection), "changed", G_CALLBACK(on_tree_selection_changed), NULL); /* connect/add the right-click signal */ gtk_widget_add_events(draw_summary, GDK_BUTTON_RELEASE_MASK); gtk_widget_add_events(draw_summary, GDK_BUTTON_PRESS_MASK); g_signal_connect(G_OBJECT(treeview), "button_press_event", G_CALLBACK(track_break_button_press), NULL); gtk_widget_show(treeview); /* create the columns */ /* Write Toggle Column */ column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_toggle_new(); g_signal_connect(G_OBJECT(renderer), "toggled", G_CALLBACK(track_break_write_toggled), store); gtk_tree_view_column_set_title(column, _("Write")); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "active", COLUMN_WRITE); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_FIXED); gtk_tree_view_column_set_fixed_width(column, 50); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); /* File Name Column */ column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_text_new(); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(track_break_filename_edited), store); gtk_tree_view_column_set_title(column, _("File Name")); gtk_tree_view_column_pack_start(column, renderer, TRUE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_FILENAME); gtk_tree_view_column_add_attribute(column, renderer, "editable", COLUMN_EDITABLE); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); //gtk_tree_view_column_set_fixed_width(column, 200); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); /* File Time Start Column */ column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_text_new(); /* TODO renderer = gui_cell_renderer_spin_new(0.0, 5.0, 0.1, 1.0, 1.0, 0.1, 0); g_signal_connect(G_OBJECT(renderer), "edited", G_CALLBACK(track_break_start_time_edited), store); gtk_tree_view_column_set_cell_data_func(column, renderer, cell_data_func_gpa, NULL, NULL); */ gtk_tree_view_column_set_title(column, _("Time")); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_TIME); //gtk_tree_view_column_add_attribute(column, renderer, "editable", COLUMN_EDITABLE); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); /* File Duration Column */ column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_set_title(column, _("Duration")); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_DURATION); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); /* File Offset Column */ column = gtk_tree_view_column_new(); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_set_title(column, _("Offset")); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_add_attribute(column, renderer, "text", COLUMN_OFFSET); gtk_tree_view_column_set_sizing(column, GTK_TREE_VIEW_COLUMN_GROW_ONLY); gtk_tree_view_append_column(GTK_TREE_VIEW(treeview), column); return sw; } gint track_break_sort(gconstpointer a, gconstpointer b) { TrackBreak *x = (TrackBreak *)a; TrackBreak *y = (TrackBreak *)b; if (x->offset < y->offset) { return -1; } else if (x->offset > y->offset) { return 1; } else { return 0; } } static gboolean track_break_button_press(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { if ((event->type == GDK_2BUTTON_PRESS) && (event->button == 1)) { cursor_marker = track_break_find_offset(); gtk_spin_button_set_value (GTK_SPIN_BUTTON (cursor_marker_spinner), cursor_marker); jump_to_cursor_marker(NULL, NULL, NULL); return FALSE; } else if (event->button != 3) { return FALSE; } GMenu *menu_model = g_menu_new(); GMenu *check_model = g_menu_new(); g_menu_append(check_model, _("Check all"), "win.check_all"); g_menu_append(check_model, _("Check none"), "win.check_none"); g_menu_append(check_model, _("Invert check"), "win.check_invert"); g_menu_append_section(menu_model, NULL, G_MENU_MODEL(check_model)); GMenu *all_model = g_menu_new(); g_menu_append(all_model, _("Auto-rename track breaks"), "win.auto_rename"); g_menu_append_section(menu_model, NULL, G_MENU_MODEL(all_model)); GMenu *break_model = g_menu_new(); g_menu_append(break_model, _("Remove track break"), "win.remove_break"); g_menu_append(break_model, _("Jump to track break"), "win.jump_break"); g_menu_append_section(menu_model, NULL, G_MENU_MODEL(break_model)); GtkMenu *menu = GTK_MENU(gtk_menu_new_from_model(G_MENU_MODEL(menu_model))); gtk_menu_attach_to_widget(menu, main_window, NULL); gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL); return FALSE; } /* DEBUG FUNCTION START */ void track_break_print_element(gpointer data, gpointer user_data) { TrackBreak *breakup; breakup = (TrackBreak *)data; printf("filename: %s", breakup->filename); printf("\ttime: %s", breakup->time); printf("\tduration: %s", breakup->duration); printf("\toffset: %lu\n", breakup->offset); } /* DEBUG FUNCTION END */ void track_break_free_element(gpointer data, gpointer user_data) { TrackBreak *track_break; track_break = (TrackBreak *)data; g_free(track_break->filename); g_free(track_break); } void track_break_compare_cursor_marker(gpointer data, gpointer user_data) { TrackBreak *track_break = (TrackBreak *) data; CursorData *cd = (CursorData *) user_data; if (cd->marker == track_break->offset) { cd->is_equal = TRUE; } } void track_break_set_duration(gpointer data, gpointer user_data) { TrackBreak *track_break = (TrackBreak *) data; TrackBreak *next_track_break; guint index; index = g_list_index(track_break_list, track_break); index++; /* printf("index: %d\n", index); printf("cursor_marker: %d\n", cursor_marker); printf("numSamples: %d\n", graphData.numSamples); */ next_track_break = (TrackBreak *) g_list_nth_data(track_break_list, index); if (next_track_break != NULL) { // Take the offset of the next track as the end of the duration. offset_to_duration(track_break->offset, next_track_break->offset, track_break->duration); } else { // There is no next track. // Take the end of the sample as the end of the duration. offset_to_duration(track_break->offset, graphData.numSamples, track_break->duration); } //printf("\n"); } void track_break_clear_list() { gtk_list_store_clear(store); g_list_foreach(track_break_list, track_break_free_element, NULL); g_list_free(track_break_list); track_break_list = NULL; } void track_break_selection(gpointer data, gpointer user_data) { GtkTreePath *path = (GtkTreePath*)data; TrackBreak *track_break; guint list_pos; gpointer list_data; GtkTreeModel *model; GtkTreeIter iter; list_pos = gtk_tree_path_get_indices(path)[0]; if (list_pos == 0) { // Do not allow first break to be deleted return; } list_data = g_list_nth_data(track_break_list, list_pos); track_break = (TrackBreak *)list_data; track_break_list = g_list_remove(track_break_list, track_break); track_break_free_element(track_break, NULL); model = gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)); gtk_tree_model_get_iter(model, &iter, path); gtk_list_store_remove(GTK_LIST_STORE(model), &iter); /* DEBUG CODE START */ /* g_list_foreach(track_break_list, track_break_print_element, NULL); g_print("\n"); */ /* DEBUG CODE END */ gtk_tree_path_free(path); } void track_break_delete_entry() { GtkTreeSelection *selection; GtkTreeModel *model; GList *list; if (sample_filename == NULL) { return; } selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); list = gtk_tree_selection_get_selected_rows(selection, &model); g_list_foreach(list, track_break_selection, NULL); g_list_free(list); track_break_set_durations(); track_break_rename( FALSE); force_redraw(); } void track_break_setup_filename(gpointer data, gpointer user_data) { TrackBreak *track_break = (TrackBreak *)data; gchar *orig_filename = (gchar *)user_data; gchar fn[128]; gchar buf[128]; int index; int disc_num; static int prev_disc_num; static int track_num = 1; /* when not overwriting track names, only update not-yet-set names */ if( overwrite_track_names == FALSE) { // try and determine if the user has modified the filename if (track_break->filename != NULL) { size_t cut = 0; gboolean remove_from_start = FALSE; if (appconfig_get_use_etree_filename_suffix()) { // remove the dXtXX from the end cut = 5; } else { // remove the XX- from the beginning or -XX from the end cut = 3; remove_from_start = appconfig_get_prepend_file_number(); } int length = strlen(track_break->filename); int orig_length = strlen(orig_filename); if (length != orig_length + cut) { return; } if (memcmp(orig_filename, track_break->filename + (remove_from_start ? cut : 0), orig_length) != 0) { return; } } } index = g_list_index(track_break_list, track_break); index++; if (appconfig_get_use_etree_filename_suffix()) { int cd_length = atoi(appconfig_get_etree_cd_length()); disc_num = (track_break->offset / CD_BLOCKS_PER_SEC / 60) / cd_length; disc_num++; if (index == 1) { prev_disc_num = 0; } if (prev_disc_num != disc_num) { track_num = 1; } else { track_num++; } prev_disc_num = disc_num; sprintf(buf, "d%dt%02d", disc_num, track_num); } else { if (appconfig_get_prepend_file_number()) { sprintf(buf, "%02d%s", index, appconfig_get_etree_filename_suffix()); } else { sprintf(buf, "%s%02d", appconfig_get_etree_filename_suffix(), index); } } fn[0] = '\0'; if (!appconfig_get_use_etree_filename_suffix() && appconfig_get_prepend_file_number()) { strcat(fn, buf); strcat(fn, orig_filename); } else { strcat(fn, orig_filename); strcat(fn, buf); } g_free(track_break->filename); track_break->filename = g_strdup(fn); } void track_break_add_to_model(gpointer data, gpointer user_data) { GtkTreeIter iter; GtkTreePath *path; gchar path_str[8]; TrackBreak *track_break = (TrackBreak *)data; int index = g_list_index(track_break_list, track_break); sprintf(path_str, "%d", index); path = gtk_tree_path_new_from_string(path_str); /* DEBUG CODE START */ /* g_print("gtktreepath: %s\n", path_str); printf("list contents:\n"); g_list_foreach(track_break_list, print_element, NULL); */ /* DEBUG CODE END */ gtk_list_store_append(store, &iter); /* if (gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &sibling, path)) { gtk_list_store_insert_before(store, &iter, &sibling); } else { gtk_list_store_append(store, &iter); } */ gtk_list_store_set(store, &iter, COLUMN_WRITE, track_break->write, COLUMN_FILENAME, track_break->filename, COLUMN_TIME, track_break->time, COLUMN_DURATION, track_break->duration, COLUMN_OFFSET, track_break->offset, COLUMN_EDITABLE, track_break->editable, -1); gtk_tree_path_free(path); } guint track_break_find_offset() { GtkTreeSelection *selection; GtkTreeIter iter; GtkTreeModel *model; guint offset = 0; gchar *time; gchar *duration; gchar *filename; if (sample_filename == NULL) { return 0; } selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_model_get(model, &iter, COLUMN_FILENAME, &filename, COLUMN_TIME, &time, COLUMN_DURATION, &duration, COLUMN_OFFSET, &offset, -1); g_free(time); g_free(duration); g_free(filename); } return offset; /* *tb = (TrackBreak *) gtk_tree_selection_get_user_data(selection); cursor_data->is_equal = FALSE; cursor_data->marker = cursor_marker; printf("tb->offset: %s\n", tb->offset); */ } static void select_and_show_track_break(int index) { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview)); gtk_tree_selection_unselect_all(selection); GtkTreePath *path = gtk_tree_path_new_from_indices(index, -1); gtk_tree_selection_select_path(selection, path); gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview), path, NULL, FALSE, 0.f, 0.f); gtk_tree_path_free(path); } void track_break_add_entry() { TrackBreak *track_break = NULL; CursorData cursor_data; if (sample_filename == NULL) { return; } // check for duplicate track breaks cursor_data.is_equal = FALSE; cursor_data.marker = cursor_marker; g_list_foreach(track_break_list, track_break_compare_cursor_marker, &cursor_data); if (cursor_data.is_equal == TRUE) { return; } if (! (track_break = (TrackBreak *)g_malloc(sizeof(TrackBreak)))) { printf("couldn't malloc enough memory for track_break\n"); exit(1); } track_break->write = 1; track_break->offset = cursor_marker; track_break->editable = TRUE; offset_to_time(cursor_marker, track_break->time, TRUE); track_break->filename = NULL; track_break_list = g_list_insert_sorted(track_break_list, track_break, track_break_sort); track_break_set_durations(); track_break_rename( FALSE); select_and_show_track_break(g_list_index(track_break_list, track_break)); force_redraw(); } void track_break_add_offset( char* filename, gulong offset) { TrackBreak *track_break = NULL; if (sample_filename == NULL) { return; } if( offset > graphData.numSamples) { if( filename != NULL) { printf( "Offset for %s is too big, skipping.\n", filename); } return; } if( !(track_break = (TrackBreak *)g_malloc(sizeof(TrackBreak)))) { printf("couldn't malloc enough memory for track_break\n"); return; } track_break->editable = TRUE; track_break->offset = offset; offset_to_time( track_break->offset, track_break->time, FALSE); if( filename == NULL) { track_break->write = 0; track_break->filename = NULL; } else { if( filename == (void *)-1 ) { track_break->write = 1; track_break->filename = NULL; } else { track_break->write = 1; track_break->filename = g_strdup( filename); } } track_break_list = g_list_insert_sorted( track_break_list, track_break, track_break_sort); track_break_set_durations(); track_break_rename( FALSE); } void track_break_set_durations() { g_list_foreach(track_break_list, track_break_set_duration, NULL); gtk_list_store_clear(store); g_list_foreach(track_break_list, track_break_add_to_model, NULL); } void track_break_rename( gboolean overwrite) { if (sample_filename == NULL) { return; } /* do we have to overwrite already-set names or just NULL names? */ overwrite_track_names = overwrite; /* setup the filename */ gchar *str_ptr = g_path_get_basename(sample_filename); gchar *end = strrchr(str_ptr, '.'); if (end) { *end = '\0'; } g_list_foreach(track_break_list, track_break_setup_filename, str_ptr); gtk_list_store_clear(store); g_list_foreach(track_break_list, track_break_add_to_model, NULL); g_free(str_ptr); redraw(); /* DEBUG CODE START */ /* g_list_foreach(track_break_list, track_break_print_element, NULL); g_print("\n"); */ /* DEBUG CODE END */ } void track_break_write_toggled(GtkWidget *widget, gchar *path_str, gpointer user_data) { GtkTreeModel *model = (GtkTreeModel *)user_data; GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string(path_str); TrackBreak *track_break; guint list_pos; gpointer list_data; list_pos = atoi(path_str); list_data = g_list_nth_data(track_break_list, list_pos); track_break = (TrackBreak *)list_data; track_break->write = !track_break->write; /* DEBUG CODE START */ /* g_print("gtktreepath: %s\n", path_str); g_print("list_pos: %d\n", list_pos); g_print("track_break->offset: %d\n", track_break->offset); g_print("track_break->write: %d\n\n", track_break->write); */ /* DEBUG CODE END */ gtk_tree_model_get_iter(model, &iter, path); gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_WRITE, track_break->write, -1); gtk_tree_path_free(path); force_redraw(); } void track_break_filename_edited(GtkCellRendererText *cell, const gchar *path_str, const gchar *new_text, gpointer user_data) { GtkTreeModel *model = GTK_TREE_MODEL(user_data); GtkTreeIter iter; GtkTreePath *path = gtk_tree_path_new_from_string(path_str); TrackBreak *track_break; guint list_pos; gpointer list_data; list_pos = atoi(path_str); list_data = g_list_nth_data(track_break_list, list_pos); track_break = (TrackBreak *)list_data; track_break->filename = g_strdup(new_text); gtk_tree_model_get_iter(model, &iter, path); gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_FILENAME, track_break->filename, -1); gtk_tree_path_free(path); force_redraw(); } void track_break_start_time_edited(GtkCellRendererText *cell, const gchar *path_str, const gchar *new_text, gpointer user_data) { GtkTreePath *path = gtk_tree_path_new_from_string(path_str); TrackBreak *track_break; guint list_pos; gpointer list_data; list_pos = atoi(path_str); list_data = g_list_nth_data(track_break_list, list_pos); track_break = (TrackBreak *)list_data; printf("new time: %s\n", new_text); printf("old time: %s\n", track_break->time); /* track_break->filename = g_strdup(new_text); gtk_tree_model_get_iter(model, &iter, path); gtk_list_store_set(GTK_LIST_STORE(model), &iter, COLUMN_FILENAME, track_break->filename, -1); */ gtk_tree_path_free(path); force_redraw(); } /* *------------------------------------------------------------------------- * File Save Dialog Stuff *------------------------------------------------------------------------- */ gboolean file_write_progress_idle_func(gpointer data) { static GtkWidget *window; static GtkWidget *pbar; static GtkWidget *vbox; static GtkWidget *label; static GtkWidget *status_label; char *str_ptr; static int cur_file_displayed = 0; static double fraction; if (write_info.check_file_exists) { if (window != NULL) { gtk_widget_destroy(window); window = NULL; } write_info.sync_check_file_overwrite_to_write_progress = 1; write_info.check_file_exists = 0; overwritedialog_show( wavbreaker_get_main_window(), &write_info); return TRUE; } if (write_info.sync_check_file_overwrite_to_write_progress) { return TRUE; } if (window == NULL) { window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(window); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(main_window)); gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT); gdk_window_set_functions(GDK_WINDOW(gtk_widget_get_window(window)), GDK_FUNC_MOVE); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); gtk_window_set_title( GTK_WINDOW(window), _("Splitting wave file")); gchar *tmp_str = g_markup_printf_escaped("%s", gtk_window_get_title(GTK_WINDOW(window))); label = gtk_label_new( NULL); gtk_label_set_markup( GTK_LABEL(label), tmp_str); g_free(tmp_str); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); label = gtk_label_new( _("The selected track breaks are now written to disk. This can take some time.")); gtk_label_set_line_wrap( GTK_LABEL(label), TRUE); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); pbar = gtk_progress_bar_new(); gtk_box_pack_start(GTK_BOX(vbox), pbar, FALSE, TRUE, 5); status_label = gtk_label_new( NULL); g_object_set(G_OBJECT(status_label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_label_set_ellipsize( GTK_LABEL(status_label), PANGO_ELLIPSIZE_MIDDLE); gtk_box_pack_start(GTK_BOX(vbox), status_label, FALSE, TRUE, 5); gtk_widget_show_all(GTK_WIDGET(window)); cur_file_displayed = -1; } if (write_info.sync) { write_info.sync = 0; gtk_widget_destroy(window); window = NULL; gchar *tmp_str; if( write_info.num_files > 1) { tmp_str = g_strdup_printf(_("The file %s has been split into %d parts."), basename( sample_filename), write_info.num_files); } else { tmp_str = g_strdup_printf(_("The file %s has been split into one part."), basename( sample_filename)); } popupmessage_show( NULL, _("Operation successful"), tmp_str); g_free(tmp_str); file_write_progress_source_id = 0; return FALSE; } if (cur_file_displayed != write_info.cur_file) { str_ptr = basename( write_info.cur_filename); if( str_ptr == NULL) { str_ptr = write_info.cur_filename; } gchar *fn = g_markup_escape_text(str_ptr, -1); gchar *tmp = g_strdup_printf(_("Writing %s"), fn); g_free(fn); gchar *msg = g_markup_printf_escaped("%s", tmp); g_free(tmp); gtk_label_set_markup(GTK_LABEL(status_label), msg); g_free(msg); cur_file_displayed = write_info.cur_file; } fraction = 1.00*(write_info.cur_file-1+write_info.pct_done)/write_info.num_files; gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar), fraction); gchar *tmp_str; // FIXME: i18n plural forms if( write_info.num_files > 1) { tmp_str = g_strdup_printf(_("%d of %d parts written"), write_info.cur_file-1, write_info.num_files); } else { tmp_str = g_strdup_printf(_("%d of 1 part written"), write_info.cur_file-1); } gtk_progress_bar_set_text( GTK_PROGRESS_BAR(pbar), tmp_str); g_free(tmp_str); return TRUE; } gboolean file_play_progress_idle_func(gpointer data) { GtkAllocation allocation; gtk_widget_get_allocation(draw, &allocation); gint half_width = allocation.width / 2; gint offset = allocation.width * (1.0/PLAY_MARKER_SCROLL); gint x = play_marker - half_width; gint y = play_marker - pixmap_offset; gint z = allocation.width * (1.0 - 1.0/PLAY_MARKER_SCROLL); if (y > z && x > 0) { reset_sample_display(play_marker - offset + half_width); } else if (pixmap_offset > play_marker) { reset_sample_display(play_marker); } gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), pixmap_offset); gtk_widget_queue_draw(scrollbar); redraw(); update_status(FALSE); if (sample_is_playing()) { return TRUE; } else { set_play_icon(); play_progress_source_id = 0; return FALSE; } } /* *------------------------------------------------------------------------- * File Open Dialog Stuff *------------------------------------------------------------------------- */ gboolean file_open_progress_idle_func(gpointer data) { static GtkWidget *window; static GtkWidget *pbar; static GtkWidget *vbox; static GtkWidget *label; static char tmp_str[6144]; static char tmp_str2[6144]; static int current, size; if (window == NULL) { window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_realize(window); gtk_window_set_resizable(GTK_WINDOW(window), FALSE); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(main_window)); gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER_ON_PARENT); gdk_window_set_functions(GDK_WINDOW(gtk_widget_get_window(window)), GDK_FUNC_MOVE); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 10); gtk_window_set_title( GTK_WINDOW(window), _("Analyzing waveform")); tmp_str[0] = '\0'; strcat( tmp_str, ""); strcat( tmp_str, gtk_window_get_title( GTK_WINDOW( window))); strcat( tmp_str, ""); label = gtk_label_new( NULL); gtk_label_set_markup( GTK_LABEL(label), tmp_str); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); label = gtk_label_new( _("The waveform data of the selected file is being analyzed and processed. This can take some time.")); gtk_label_set_line_wrap( GTK_LABEL(label), TRUE); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); pbar = gtk_progress_bar_new(); gtk_box_pack_start(GTK_BOX(vbox), pbar, FALSE, TRUE, 5); sprintf( tmp_str, _("Analyzing %s"), basename( sample_filename)); gchar *str = g_markup_escape_text(tmp_str, -1); sprintf( tmp_str2, "%s", str); g_free(str); label = gtk_label_new( NULL); gtk_label_set_markup( GTK_LABEL(label), tmp_str2); g_object_set(G_OBJECT(label), "xalign", 0.0f, "yalign", 0.5f, NULL); gtk_label_set_ellipsize( GTK_LABEL(label), PANGO_ELLIPSIZE_END); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, TRUE, 5); gtk_widget_show_all(GTK_WIDGET(window)); } if (progress_pct >= 1.0) { progress_pct = 0; gtk_widget_destroy(window); window = NULL; /* --------------------------------------------------- */ /* Reset things because we have a new file */ /* --------------------------------------------------- */ gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), 0); gtk_adjustment_set_value(GTK_ADJUSTMENT(cursor_marker_spinner_adj), 0); gtk_adjustment_set_value(GTK_ADJUSTMENT(cursor_marker_min_spinner_adj), 0); gtk_adjustment_set_value(GTK_ADJUSTMENT(cursor_marker_sec_spinner_adj), 0); gtk_adjustment_set_value(GTK_ADJUSTMENT(cursor_marker_subsec_spinner_adj), 0); gtk_widget_queue_draw(scrollbar); /* TODO: Remove FIX !!!!!!!!!!! */ configure_event(draw, NULL, NULL); #if defined(WANT_MOODBAR) if (moodbarData) { moodbar_free(moodbarData); } moodbarData = moodbar_open(sample_filename); set_action_enabled("display_moodbar", moodbarData != NULL); set_action_enabled("generate_moodbar", moodbarData == NULL); #endif redraw(); /* --------------------------------------------------- */ file_open_progress_source_id = 0; return FALSE; } else { size = sample_stat.st_size/(1024*1024); current = size*progress_pct; sprintf( tmp_str, _("%d of %d MB analyzed"), current, size); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(pbar), progress_pct); gtk_progress_bar_set_text( GTK_PROGRESS_BAR(pbar), tmp_str); return TRUE; } } static void open_file() { if (sample_open_file(sample_filename, &graphData, &progress_pct) != 0) { char *message = sample_get_error_message(); popupmessage_show(main_window, _("Error opening file"), message); sample_filename = NULL; g_free(message); return; } set_action_enabled("add_break", TRUE); set_action_enabled("jump_cursor", TRUE); set_action_enabled("check_all", TRUE); set_action_enabled("check_none", TRUE); set_action_enabled("check_invert", TRUE); set_action_enabled("auto_rename", TRUE); set_action_enabled("remove_break", TRUE); set_action_enabled("jump_break", TRUE); set_action_enabled("export", TRUE); set_action_enabled("import", TRUE); #if defined(WANT_MOODBAR) set_action_enabled("display_moodbar", moodbarData != NULL); set_action_enabled("generate_moodbar", moodbarData == NULL); #endif gtk_widget_set_sensitive( play_button, TRUE); gtk_widget_set_sensitive( header_bar_save_button, TRUE); gtk_widget_set_sensitive( cursor_marker_spinner, TRUE); gtk_widget_set_sensitive( cursor_marker_min_spinner, TRUE); gtk_widget_set_sensitive( cursor_marker_sec_spinner, TRUE); gtk_widget_set_sensitive( cursor_marker_subsec_spinner, TRUE); gtk_widget_set_sensitive(button_seek_backward, TRUE); gtk_widget_set_sensitive(button_jump_to_time, TRUE); gtk_widget_set_sensitive(button_seek_forward, TRUE); gtk_widget_set_sensitive(button_auto_split, TRUE); gtk_widget_set_sensitive(button_add_break, TRUE); gtk_widget_set_sensitive(button_remove_break, TRUE); menu_stop(NULL, NULL); cursor_marker = 0; track_break_clear_list(); track_break_add_entry(); if (file_open_progress_source_id) { g_source_remove(file_open_progress_source_id); } file_open_progress_source_id = g_timeout_add(100, file_open_progress_idle_func, NULL); set_title( basename( sample_filename)); } static gboolean open_file_arg(gpointer data) { if (data) { set_sample_filename((char *)data); g_free(data); open_file(); } /* do not call this function again = return FALSE */ open_file_source_id = 0; return FALSE; } static void set_title( char* title) { char buf[1024]; if( title == NULL) { gtk_window_set_title( (GtkWindow*)main_window, APPNAME); gtk_header_bar_set_title(GTK_HEADER_BAR(header_bar), APPNAME); return; } sprintf( buf, "%s (%s)", APPNAME, title); gtk_window_set_title( (GtkWindow*)main_window, buf); gtk_header_bar_set_title(GTK_HEADER_BAR(header_bar), buf); } static void open_select_file() { GtkWidget *dialog; GtkFileFilter *filter_all; GtkFileFilter *filter_supported; filter_all = gtk_file_filter_new(); gtk_file_filter_set_name( filter_all, _("All files")); gtk_file_filter_add_pattern( filter_all, "*"); filter_supported = gtk_file_filter_new(); gtk_file_filter_set_name( filter_supported, _("Supported files")); gtk_file_filter_add_pattern( filter_supported, "*.wav"); #if defined(HAVE_MPG123) gtk_file_filter_add_pattern( filter_supported, "*.mp3"); #endif gtk_file_filter_add_pattern( filter_supported, "*.dat"); gtk_file_filter_add_pattern( filter_supported, "*.raw"); dialog = gtk_file_chooser_dialog_new(_("Open File"), GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_OPEN, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_all); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER(dialog), filter_supported); if (sample_filename != NULL) { char* filename = g_strdup(sample_filename); char* dir = dirname(filename); if (dir != NULL && dir[0] != '.') { gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog), dir); } g_free(filename); } if (gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename; char *dirname; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); set_sample_filename(filename); g_free(filename); dirname = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog)); saveas_set_dirname(dirname); g_free(dirname); gtk_widget_destroy(dialog); open_file(); } else { gtk_widget_destroy(dialog); } } void set_sample_filename(const char *f) { if (sample_filename != NULL) { g_free(sample_filename); sample_close_file(); } sample_filename = g_strdup(f); stat( sample_filename, &sample_stat); } /* *------------------------------------------------------------------------- * Sample Drawing Area Stuff *------------------------------------------------------------------------- */ static inline void blit_cairo_surface(cairo_t *cr, cairo_surface_t *surface, int width, int height) { if (!surface) { return; } cairo_set_source_surface(cr, surface, 0.f, 0.f); cairo_rectangle(cr, 0.f, 0.f, (float)width, (float)height); cairo_fill(cr); } static void force_redraw() { waveform_surface_invalidate(sample_surface); waveform_surface_invalidate(summary_surface); redraw(); } static void redraw() { static int redraw_done = 1; if( redraw_done) { /* Only redraw if the last operation finished already. */ redraw_done = 0; if (redraw_source_id) { g_source_remove(redraw_source_id); } redraw_source_id = g_idle_add(redraw_later, &redraw_done); } } static gboolean redraw_later( gpointer data) { int *redraw_done = (int*)data; struct WaveformSurfaceDrawContext ctx = { .widget = draw, .pixmap_offset = pixmap_offset, .track_break_list = track_break_list, .graphData = &graphData, .moodbarData = appconfig_get_show_moodbar() ? moodbarData : NULL, }; waveform_surface_draw(sample_surface, &ctx); gtk_widget_queue_draw(draw); ctx.widget = draw_summary; waveform_surface_draw(summary_surface, &ctx); gtk_widget_queue_draw(draw_summary); *redraw_done = 1; redraw_source_id = 0; return FALSE; } static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); int width = allocation.width; if (graphData.numSamples == 0) { pixmap_offset = 0; gtk_adjustment_set_page_size(adj, 1); gtk_adjustment_set_upper(adj, 1); gtk_adjustment_set_page_increment(adj, 1); } else if (width > graphData.numSamples) { pixmap_offset = 0; gtk_adjustment_set_page_size(adj, graphData.numSamples); gtk_adjustment_set_upper(adj, graphData.numSamples); gtk_adjustment_set_page_increment(adj, width / 2); } else { if (pixmap_offset + width > graphData.numSamples) { pixmap_offset = graphData.numSamples - width; } gtk_adjustment_set_page_size(adj, width); gtk_adjustment_set_upper(adj, graphData.numSamples); gtk_adjustment_set_page_increment(adj, width / 2); } gtk_adjustment_set_step_increment(adj, 10); gtk_adjustment_set_value(adj, pixmap_offset); gtk_adjustment_set_upper(cursor_marker_spinner_adj, graphData.numSamples - 1); struct WaveformSurfaceDrawContext ctx = { .widget = widget, .pixmap_offset = pixmap_offset, .track_break_list = track_break_list, .graphData = &graphData, .moodbarData = appconfig_get_show_moodbar() ? moodbarData : NULL, }; waveform_surface_draw(sample_surface, &ctx); return TRUE; } static gboolean draw_draw_event(GtkWidget *widget, cairo_t *cr, gpointer data) { GList *tbl; TrackBreak *tb_cur = NULL, *tb_first = NULL; TrackBreak **tbs; const int border = 3; int tbc = 0, i, border_left, border_right, text_height = 0, ellipsis_width = 0; gboolean label_truncated = FALSE; char tmp[1024]; cairo_text_extents_t te; GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); guint width = allocation.width, height = allocation.height; blit_cairo_surface(cr, sample_surface->surface, width, height); cairo_set_line_width( cr, 1); if( cursor_marker >= pixmap_offset && cursor_marker <= pixmap_offset + width) { /** * Draw RED cursor marker **/ float x = cursor_marker - pixmap_offset + 0.5f; cairo_set_source_rgba(cr, 1.f, 0.f, 0.f, 0.9f); cairo_move_to(cr, x, 0.f); cairo_line_to(cr, x, height); cairo_stroke(cr); static const float TRIANGLE_SIDE = 3.f; cairo_move_to(cr, x-TRIANGLE_SIDE, 0.f); cairo_line_to(cr, x+TRIANGLE_SIDE, 0.f); cairo_line_to(cr, x, 2.f*TRIANGLE_SIDE); cairo_move_to(cr, x-TRIANGLE_SIDE, height); cairo_line_to(cr, x+TRIANGLE_SIDE, height); cairo_line_to(cr, x, height-2.f*TRIANGLE_SIDE); cairo_fill(cr); } if (sample_is_playing()) { /** * Draw GREEN play marker **/ float x = play_marker - pixmap_offset + 0.5f; cairo_set_source_rgba(cr, 0.f, 0.7f, 0.f, 0.9f); cairo_move_to(cr, x, 0.f); cairo_line_to(cr, x, height); cairo_stroke(cr); } /** * Prepare text output (filename labels) **/ cairo_select_font_face( cr, "sans-serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size( cr, 10); cairo_text_extents( cr, "...", &te); ellipsis_width = te.width; /** * Find track breaks for which we need to draw labels **/ tb_cur = NULL; tbs = NULL;; for( tbl = track_break_list; tbl != NULL; tbl = g_list_next( tbl)) { tb_cur = g_list_nth_data( track_break_list, g_list_position( track_break_list, tbl)); if (tb_cur != NULL) { cairo_text_extents( cr, tb_cur->filename, &te); if( pixmap_offset <= tb_cur->offset) { if( tbs == NULL && tb_first != NULL) { tbs = (TrackBreak**)malloc( sizeof( TrackBreak*)); tbs[tbc] = tb_first; tbc++; } tbs = (TrackBreak**)realloc( tbs, (tbc+1)*sizeof( TrackBreak*)); tbs[tbc] = tb_cur; tbc++; if( te.height > text_height) { text_height = te.height; } } tb_first = tb_cur; } } if( tbs == NULL && tb_first != NULL) { tbs = (TrackBreak**)malloc( sizeof( TrackBreak*)); tbs[tbc] = tb_first; tbc++; text_height = te.height; } /** * Calculate label size (and if we need to draw it) and * finally draw the label with the right size and position **/ for( i=0; iwrite)) { continue; } border_left = (tbs[i]->offset > pixmap_offset)?(tbs[i]->offset - pixmap_offset):(0); border_right = (i+1 == tbc)?(width+100):(tbs[i+1]->offset - pixmap_offset); strcpy( tmp, tbs[i]->filename); cairo_text_extents( cr, tmp, &te); label_truncated = FALSE; while( border_left + te.width + ellipsis_width + border*2 > border_right - border*2 && strlen( tmp) > 1) { tmp[strlen( tmp)-1] = '\0'; cairo_text_extents( cr, tmp, &te); label_truncated = TRUE; } if( label_truncated) { strcat( tmp, "..."); cairo_text_extents( cr, tmp, &te); if( border_left + te.width + border*2 > border_right - border*2) { border_left -= (border_left + te.width + border*2) - (border_right - border*2); } } cairo_set_source_rgba(cr, 1.f, 1.f, 1.f, 0.8f); cairo_rectangle(cr, border_left, height - text_height - border*2, te.width + border*2, text_height + border*2); cairo_fill(cr); cairo_set_source_rgb(cr, 0.f, 0.f, 0.f); cairo_move_to(cr, border_left + border, height - (text_height+1)/2); cairo_show_text(cr, tmp); } if( tbs != NULL) { free( tbs); } return FALSE; } static gboolean draw_summary_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { struct WaveformSurfaceDrawContext ctx = { .widget = widget, .pixmap_offset = pixmap_offset, .track_break_list = track_break_list, .graphData = &graphData, .moodbarData = appconfig_get_show_moodbar() ? moodbarData : NULL, }; waveform_surface_draw(summary_surface, &ctx); return TRUE; } static gboolean draw_summary_draw_event(GtkWidget *widget, cairo_t *cr, gpointer user_data) { GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); guint width = allocation.width, height = allocation.height; gfloat summary_scale; summary_scale = (float)(graphData.numSamples) / (float)(width); /** * Draw shadow in summary pixmap to show current view **/ blit_cairo_surface(cr, summary_surface->surface, width, height); cairo_set_source_rgba( cr, 0, 0, 0, 0.3); cairo_rectangle( cr, 0, 0, pixmap_offset / summary_scale, height); cairo_fill( cr); cairo_rectangle( cr, (pixmap_offset+width) / summary_scale, 0, width - (pixmap_offset+width) / summary_scale, height); cairo_fill( cr); cairo_set_source_rgba( cr, 1, 1, 1, 0.6); cairo_set_line_width( cr, 1); cairo_move_to( cr, (int)(pixmap_offset / summary_scale) + 0.5, 0); cairo_line_to( cr, (int)(pixmap_offset / summary_scale) + 0.5, height); cairo_move_to( cr, (int)((pixmap_offset+width) / summary_scale) + 0.5, 0); cairo_line_to( cr, (int)((pixmap_offset+width) / summary_scale) + 0.5, height); cairo_stroke( cr); return FALSE; } static gboolean draw_summary_button_release(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { guint midpoint, width; int x_scale, x_scale_leftover, x_scale_mod; int leftover_count; if (sample_is_playing()) { return TRUE; } if (graphData.numSamples == 0) { return TRUE; } GtkAllocation allocation; gtk_widget_get_allocation(widget, &allocation); width = allocation.width; x_scale = graphData.numSamples / width; x_scale_leftover = graphData.numSamples % width; if (x_scale_leftover > 0) { x_scale_mod = width / x_scale_leftover; leftover_count = event->x / x_scale_mod; } else { x_scale_mod = 0; leftover_count = 0; } if (event->x < 0) { return TRUE; } midpoint = event->x * x_scale + leftover_count; reset_sample_display(midpoint); redraw(); return TRUE; } void reset_sample_display(guint midpoint) { GtkAllocation allocation; gtk_widget_get_allocation(draw, &allocation); int width = allocation.width; int start = midpoint - width / 2; if (graphData.numSamples == 0) { pixmap_offset = 0; } else if (width > graphData.numSamples) { pixmap_offset = 0; } else if (start + width > graphData.numSamples) { pixmap_offset = graphData.numSamples - width; } else { pixmap_offset = start; } if (pixmap_offset < 0) { pixmap_offset = 0; } gtk_adjustment_set_value(GTK_ADJUSTMENT(adj), pixmap_offset); gtk_widget_queue_draw(scrollbar); } /* *------------------------------------------------------------------------- * Scrollbar and Buttons *------------------------------------------------------------------------- */ static gboolean adj_value_changed(GtkAdjustment *adj, gpointer data) { if (sample_is_playing()) { return FALSE; } pixmap_offset = gtk_adjustment_get_value(adj); redraw(); return TRUE; } static void cursor_marker_time_spinners_changed(GtkAdjustment *adj, gpointer data) { gint min, sec, subsec; if (sample_is_playing()) { return; } min = gtk_adjustment_get_value(cursor_marker_min_spinner_adj); sec = gtk_adjustment_get_value(cursor_marker_sec_spinner_adj); subsec = gtk_adjustment_get_value(cursor_marker_subsec_spinner_adj); cursor_marker = time_to_offset (min, sec, subsec); gtk_spin_button_set_value (GTK_SPIN_BUTTON (cursor_marker_spinner), cursor_marker); if (gtk_widget_get_visible(jump_to_popover)) { reset_sample_display(cursor_marker); } redraw(); update_status(FALSE); } static void cursor_marker_spinner_changed(GtkAdjustment *adj, gpointer data) { if (sample_is_playing()) { return; } cursor_marker = gtk_adjustment_get_value(adj); /* printf("adj->value: %lu\n", adj->value); printf("cursor_marker: %lu\n", cursor_marker); printf("pixmap_offset: %lu\n", pixmap_offset); */ update_status(TRUE); redraw(); } static gboolean scroll_event( GtkWidget *widget, GdkEventScroll *event, gpointer data) { long step, upper, size; step = gtk_adjustment_get_page_increment(adj); upper = gtk_adjustment_get_upper(adj); size = gtk_adjustment_get_page_size(adj); if( widget == draw) { /* Scroll in more detail on the zoomed view */ step /= 2; } if( event->direction == GDK_SCROLL_UP || event->direction == GDK_SCROLL_LEFT) { if( pixmap_offset >= step) { pixmap_offset -= step; } else { pixmap_offset = 0; } } if( event->direction == GDK_SCROLL_DOWN || event->direction == GDK_SCROLL_RIGHT) { if( pixmap_offset <= upper-step-size) { pixmap_offset += step; } else { pixmap_offset = upper-size; } } gtk_adjustment_set_value( GTK_ADJUSTMENT(adj), pixmap_offset); gtk_widget_queue_draw( scrollbar); redraw(); update_status(FALSE); return TRUE; } static gboolean button_release(GtkWidget *widget, GdkEventButton *event, gpointer data) { gtk_widget_grab_focus(play_button); if (event->x + pixmap_offset > graphData.numSamples) { return TRUE; } if (sample_is_playing()) { return TRUE; } int w = gtk_widget_get_allocated_width(widget); int center = pixmap_offset + w/2; static const int MINIMUM_SCROLL_STEP = 10; static const int MAXIMUM_SCROLL_STEP = 50; if (event->x < 0) { // scroll left int offset = event->x; if (offset > -MINIMUM_SCROLL_STEP) { offset = -MINIMUM_SCROLL_STEP; } else if (offset < -MAXIMUM_SCROLL_STEP) { offset = -MAXIMUM_SCROLL_STEP; } reset_sample_display(center + offset); cursor_marker = pixmap_offset; } else if (event->x > w-1) { // scroll right int offset = event->x - (w-1); if (offset < MINIMUM_SCROLL_STEP) { offset = MINIMUM_SCROLL_STEP; } else if (offset > MAXIMUM_SCROLL_STEP) { offset = MAXIMUM_SCROLL_STEP; } reset_sample_display(center + offset); cursor_marker = pixmap_offset + w-1; } else { cursor_marker = pixmap_offset + event->x; } if (event->type == GDK_BUTTON_RELEASE && event->button == 3) { GMenu *menu_model = g_menu_new(); g_menu_append(menu_model, _("Add track break"), "win.add_break"); g_menu_append(menu_model, _("Remove track break"), "win.remove_break"); g_menu_append(menu_model, _("Jump to cursor marker"), "win.jump_cursor"); GtkMenu *menu = GTK_MENU(gtk_menu_new_from_model(G_MENU_MODEL(menu_model))); gtk_menu_attach_to_widget(menu, main_window, NULL); gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL); redraw(); return TRUE; } TrackBreak *nearest_track_break = NULL; int nearest_track_break_index = 0; int containing_track_break_index = 0; { GList *cur = track_break_list; int idx = 0; nearest_track_break = cur ? cur->data : NULL; while (cur) { TrackBreak *tb = cur->data; if (ABS((long)tb->offset - (long)cursor_marker) < ABS((long)nearest_track_break->offset - (long)cursor_marker)) { nearest_track_break = tb; nearest_track_break_index = idx; } if (tb->offset < cursor_marker) { containing_track_break_index = idx; } cur = cur->next; ++idx; } } static const long SNAP_DISTANCE_FRAMES = 20; if (nearest_track_break && ABS((long)cursor_marker - (long)nearest_track_break->offset) < SNAP_DISTANCE_FRAMES) { // snap cursor to track break cursor_marker = nearest_track_break->offset; containing_track_break_index = nearest_track_break_index; } select_and_show_track_break(containing_track_break_index); gtk_adjustment_set_value(cursor_marker_spinner_adj, cursor_marker); /* DEBUG CODE START */ /* printf("cursor_marker: %lu\n", cursor_marker); */ /* DEBUG CODE END */ update_status(FALSE); redraw(); return TRUE; } static void offset_to_duration(guint start_time, guint end_time, gchar *str) { guint duration = end_time - start_time; /* printf("start time: %d\n", start_time); printf("end time: %d\n", end_time); */ offset_to_time(duration, str, FALSE); } static guint time_to_offset(gint min, gint sec, gint subsec) { guint offset; offset = (min * CD_BLOCKS_PER_SEC * 60) + sec * CD_BLOCKS_PER_SEC + subsec; return offset; } static void offset_to_time(guint time, gchar *str, gboolean time_offset_update) { int min, sec, subsec; if (time > 0) { min = time / (CD_BLOCKS_PER_SEC * 60); sec = time % (CD_BLOCKS_PER_SEC * 60); subsec = sec % CD_BLOCKS_PER_SEC; sec = sec / CD_BLOCKS_PER_SEC; } else { min = sec = subsec = 0; } if (time_offset_update) { gtk_spin_button_set_value (GTK_SPIN_BUTTON (cursor_marker_min_spinner), min); gtk_spin_button_set_value (GTK_SPIN_BUTTON (cursor_marker_sec_spinner), sec); gtk_spin_button_set_value (GTK_SPIN_BUTTON (cursor_marker_subsec_spinner), subsec); } sprintf(str, "%d:%02d.%02d", min, sec, subsec); } static void update_status(gboolean update_time_offset) { char str[1024]; char strbuf[1024]; sprintf( str, _("Cursor")); strcat( str, ": "); offset_to_time(cursor_marker, strbuf, update_time_offset); strcat(str, strbuf); if (sample_is_playing()) { strcat( str, "\t"); strcat( str, _("Playing")); strcat( str, ": "); offset_to_time(play_marker, strbuf, update_time_offset); strcat(str, strbuf); } gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar), str); } static void menu_play(GtkWidget *widget, gpointer user_data) { if (sample_is_playing()) { menu_stop( NULL, NULL); update_status(FALSE); set_play_icon(); return; } play_marker = cursor_marker; switch (play_sample(cursor_marker, &play_marker)) { case 0: if (play_progress_source_id) { g_source_remove(play_progress_source_id); } play_progress_source_id = g_timeout_add(10, file_play_progress_idle_func, NULL); set_stop_icon(); break; case 1: printf("error in play_sample\n"); break; case 2: menu_stop( NULL, NULL); update_status(FALSE); set_play_icon(); // printf("already playing\n"); // menu_stop(NULL, NULL); // play_sample(cursor_marker, &play_marker); break; case 3: // printf("must open sample file to play\n"); break; } } static void set_stop_icon() { gtk_button_set_image(GTK_BUTTON(play_button), gtk_image_new_from_icon_name("media-playback-stop-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR)); } static void set_play_icon() { gtk_button_set_image(GTK_BUTTON(play_button), gtk_image_new_from_icon_name("media-playback-start-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR)); } static void menu_stop(GtkWidget *widget, gpointer user_data) { stop_sample(); } static void menu_jump_to(GtkWidget *widget, gpointer user_data) { gtk_popover_popup(GTK_POPOVER(jump_to_popover)); } static void menu_next_silence( GtkWidget* widget, gpointer user_data) { int i, c = SILENCE_MIN_LENGTH+1, v; int amp = graphData.minSampleAmp + (graphData.maxSampleAmp-graphData.minSampleAmp)*appconfig_get_silence_percentage()/100; for( i=cursor_marker+1; i0; i--) { v = graphData.data[i].max - graphData.data[i].min; if( v < amp) { c++; } else { c = 0; } if( c==SILENCE_MIN_LENGTH) { cursor_marker = i; jump_to_cursor_marker(NULL, NULL, NULL); update_status(FALSE); return; } } } static void menu_save(GSimpleAction *action, GVariant *parameter, gpointer user_data) { if( sample_filename == NULL) { return; } if( appconfig_get_use_outputdir()) { wavbreaker_write_files( appconfig_get_outputdir()); } else { wavbreaker_write_files( "."); } } static void menu_save_as(GSimpleAction *action, GVariant *parameter, gpointer user_data) { if( sample_filename == NULL) { return; } saveas_show(main_window); } void wavbreaker_write_files(char *dirname) { if (!sample_is_writing()) { sample_write_files(track_break_list, &write_info, dirname); file_write_progress_source_id = g_timeout_add(50, file_write_progress_idle_func, NULL); } } static void filter_changed (GtkFileChooser* chooser, gpointer user_data) { gchar *old_filename; gchar *base; gchar *dot; gchar *new_filename; GtkFileFilter *filter; filter = gtk_file_chooser_get_filter (chooser); if (!filter) { return; } old_filename = gtk_file_chooser_get_uri( chooser); base = basename( old_filename); new_filename = malloc( strlen(base) + 4); strcpy( new_filename, base); dot = g_strrstr( new_filename, "."); if ( !dot) { dot = new_filename + strlen(new_filename); } else { *dot = '\0'; } if( strcmp( gtk_file_filter_get_name( filter), _("Text files")) == 0) { strcat( new_filename, ".txt"); } else if( strcmp( gtk_file_filter_get_name( filter), _("TOC files")) == 0) { strcat( new_filename, ".toc"); } else if( strcmp( gtk_file_filter_get_name( filter), _("CUE files")) == 0) { strcat( new_filename, ".cue"); } gtk_file_chooser_set_current_name( chooser, new_filename); g_free( old_filename); free( new_filename); } static void menu_export(GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *dialog; GtkFileFilter *filter_text; GtkFileFilter *filter_toc; GtkFileFilter *filter_cue; gchar* filename = NULL; filename = g_strdup( sample_filename); strcpy( filename + strlen( filename) - 3, "txt"); filter_text = gtk_file_filter_new(); gtk_file_filter_set_name( filter_text, _("Text files")); gtk_file_filter_add_pattern( filter_text, "*.txt"); filter_toc = gtk_file_filter_new(); gtk_file_filter_set_name( filter_toc, _("TOC files")); gtk_file_filter_add_pattern( filter_toc, "*.toc"); filter_cue = gtk_file_filter_new(); gtk_file_filter_set_name( filter_cue, _("CUE files")); gtk_file_filter_add_pattern( filter_cue, "*.cue"); dialog = gtk_file_chooser_dialog_new(_("Export track breaks to file"), GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_SAVE, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Save"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_text); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_toc); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_cue); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER(dialog), filter_text); gtk_file_chooser_set_current_name( GTK_FILE_CHOOSER(dialog), basename( filename)); gtk_file_chooser_set_current_folder( GTK_FILE_CHOOSER(dialog), dirname( filename)); g_signal_connect ( GTK_FILE_CHOOSER(dialog), "notify::filter", G_CALLBACK( filter_changed), NULL); if (gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { track_breaks_export_to_file( gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog))); } g_free( filename); gtk_widget_destroy(dialog); } void menu_delete_track_break(GSimpleAction *action, GVariant *parameter, gpointer user_data) { track_break_delete_entry(); } void menu_import(GSimpleAction *action, GVariant *parameter, gpointer user_data) { GtkWidget *dialog; GtkFileFilter *filter_all; GtkFileFilter *filter_supported; gchar* filename = NULL; int rc; filename = g_strdup( sample_filename); strcpy( filename + strlen( filename) - 3, "txt"); filter_all = gtk_file_filter_new(); gtk_file_filter_set_name( filter_all, _("All files")); gtk_file_filter_add_pattern( filter_all, "*"); filter_supported = gtk_file_filter_new(); gtk_file_filter_set_name( filter_supported, _("Supported files")); gtk_file_filter_add_pattern( filter_supported, "*.txt"); gtk_file_filter_add_pattern( filter_supported, "*.toc"); gtk_file_filter_add_pattern( filter_supported, "*.cue"); dialog = gtk_file_chooser_dialog_new(_("Import track breaks from file"), GTK_WINDOW(main_window), GTK_FILE_CHOOSER_ACTION_OPEN, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_all); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_filter( GTK_FILE_CHOOSER(dialog), filter_supported); gtk_file_chooser_set_filename( GTK_FILE_CHOOSER(dialog), filename); if (gtk_dialog_run( GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { gchar const *selected = gtk_file_chooser_get_filename( GTK_FILE_CHOOSER(dialog)); if (g_str_has_suffix( selected, ".toc") || g_str_has_suffix( selected, ".TOC")) { rc = toc_read_file( selected, track_break_list); if( rc ) { popupmessage_show( main_window, _("Import failed"), _("There has been an error importing track breaks from the TOC file.")); } } else if (g_str_has_suffix( selected, ".cue") || g_str_has_suffix( selected, ".CUE")) { rc = cue_read_file( selected, track_break_list); if( rc ) { popupmessage_show( main_window, _("Import failed"), _("There has been an error importing track breaks from the CUE file.")); } } else { track_breaks_load_from_file( selected); } } g_free( filename); gtk_widget_destroy(dialog); force_redraw(); } void menu_add_track_break(GSimpleAction *action, GVariant *parameter, gpointer user_data) { track_break_add_entry(); } static void menu_open_file(GSimpleAction *action, GVariant *parameter, gpointer user_data) { open_select_file(); } static void menu_menu(GSimpleAction *action, GVariant *parameter, gpointer user_data) { gtk_popover_popup(GTK_POPOVER(menu_popover)); } #if defined(WANT_MOODBAR) void wavbreaker_update_moodbar_state() { if (moodbarData) { moodbar_free(moodbarData); } moodbarData = moodbar_open(sample_filename); set_action_enabled("display_moodbar", moodbarData != NULL); set_action_enabled("generate_moodbar", moodbarData == NULL); redraw(); } static void menu_view_moodbar(GSimpleAction *action, GVariant *parameter, gpointer user_data) { GVariant *state = g_action_get_state(G_ACTION(action)); gboolean new_value = !g_variant_get_boolean(state); g_variant_unref(state); g_action_change_state(G_ACTION(action), g_variant_new("b", new_value)); appconfig_set_show_moodbar(new_value); wavbreaker_update_moodbar_state(); } static void menu_moodbar(GSimpleAction *action, GVariant *parameter, gpointer user_data) { moodbar_generate(main_window, sample_filename); } #endif static void menu_about(GSimpleAction *action, GVariant *parameter, gpointer user_data) { about_show(main_window); } static void menu_config(GSimpleAction *action, GVariant *parameter, gpointer user_data) { appconfig_show(main_window); } static void menu_merge(GSimpleAction *action, GVariant *parameter, gpointer user_data) { guimerge_show(main_window); } static void menu_autosplit(gpointer callback_data, guint callback_action, GtkWidget *widget) { gtk_popover_popup(GTK_POPOVER(autosplit_popover)); } static void menu_rename(GSimpleAction *action, GVariant *parameter, gpointer user_data) { /* rename (AND overwrite) track breaks */ track_break_rename( TRUE); } static void save_window_sizes() { gint x, y, w, h; gdk_window_get_root_origin(GDK_WINDOW(gtk_widget_get_window(main_window)), &x, &y); gtk_window_get_size(GTK_WINDOW(main_window), &w, &h); /* g_print("w: %d\n", w); g_print("h: %d\n", h); */ appconfig_set_main_window_xpos(x); appconfig_set_main_window_ypos(y); appconfig_set_main_window_width(w); appconfig_set_main_window_height(h); appconfig_set_vpane1_position(gtk_paned_get_position(GTK_PANED(vpane1))); appconfig_set_vpane2_position(gtk_paned_get_position(GTK_PANED(vpane2))); } void wavbreaker_quit() { stop_sample(); if (file_write_progress_source_id) { g_source_remove(file_write_progress_source_id); file_write_progress_source_id = 0; } if (open_file_source_id) { g_source_remove(open_file_source_id); open_file_source_id = 0; } if (file_open_progress_source_id) { g_source_remove(file_open_progress_source_id); file_open_progress_source_id = 0; } if (redraw_source_id) { g_source_remove(redraw_source_id); redraw_source_id = 0; } if (play_progress_source_id) { g_source_remove(play_progress_source_id); play_progress_source_id = 0; } save_window_sizes(); gtk_widget_destroy(main_window); } static void check_really_quit() { if( sample_filename != NULL && g_list_length(track_break_list) != 1) { reallyquit_show(main_window); } else { wavbreaker_quit(); } } GtkWidget *wavbreaker_get_main_window() { return main_window; } /* *------------------------------------------------------------------------- * Main Window Events *------------------------------------------------------------------------- */ static gboolean delete_event(GtkWidget *widget, GdkEventAny *event, gpointer data) { //g_print("delete_event event occurred\n"); check_really_quit(); return TRUE; } static GtkWidget * make_time_offset_widget() { GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_pack_start( GTK_BOX( hbox), gtk_label_new( _("Time offset:")), FALSE, FALSE, 0); cursor_marker_min_spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 74.0, 0); cursor_marker_min_spinner = gtk_spin_button_new(cursor_marker_min_spinner_adj, 1.0, 0); gtk_widget_set_sensitive( cursor_marker_min_spinner, FALSE); gtk_box_pack_start(GTK_BOX(hbox), cursor_marker_min_spinner, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(cursor_marker_min_spinner_adj), "value-changed", G_CALLBACK(cursor_marker_time_spinners_changed), NULL); gtk_box_pack_start( GTK_BOX( hbox), gtk_label_new(":"), FALSE, FALSE, 0); cursor_marker_sec_spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 59.0, 1.0, 74.0, 0); cursor_marker_sec_spinner = gtk_spin_button_new(cursor_marker_sec_spinner_adj, 1.0, 0); gtk_widget_set_sensitive( cursor_marker_sec_spinner, FALSE); gtk_box_pack_start(GTK_BOX(hbox), cursor_marker_sec_spinner, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(cursor_marker_sec_spinner_adj), "value-changed", G_CALLBACK(cursor_marker_time_spinners_changed), NULL); gtk_box_pack_start( GTK_BOX( hbox), gtk_label_new("."), FALSE, FALSE, 0); cursor_marker_subsec_spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, CD_BLOCKS_PER_SEC-1, 1.0, 74.0, 0); cursor_marker_subsec_spinner = gtk_spin_button_new(cursor_marker_subsec_spinner_adj, 1.0, 0); gtk_widget_set_sensitive( cursor_marker_subsec_spinner, FALSE); gtk_box_pack_start(GTK_BOX(hbox), cursor_marker_subsec_spinner, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(cursor_marker_subsec_spinner_adj), "value-changed", G_CALLBACK(cursor_marker_time_spinners_changed), NULL); gtk_widget_show_all(hbox); return hbox; } static void do_startup(GApplication *application, gpointer user_data) { setlocale(LC_ALL, ""); bindtextdomain(PACKAGE, LOCALEDIR); bind_textdomain_codeset(PACKAGE, "UTF-8"); textdomain(PACKAGE); appconfig_init(); } static void menu_check_all(GSimpleAction *action, GVariant *parameter, gpointer user_data) { parts_check_cb(NULL, GINT_TO_POINTER(CHECK_ALL)); } static void menu_check_none(GSimpleAction *action, GVariant *parameter, gpointer user_data) { parts_check_cb(NULL, GINT_TO_POINTER(CHECK_NONE)); } static void menu_check_invert(GSimpleAction *action, GVariant *parameter, gpointer user_data) { parts_check_cb(NULL, GINT_TO_POINTER(CHECK_INVERT)); } static void do_activate(GApplication *app, gpointer user_data) { GtkWidget *vbox; GtkWidget *tbl_widget; GtkWidget *vpane_vbox; GtkWidget *list_vbox; GtkWidget *frame; GtkWidget *hbox; GtkWidget *button; sample_surface = waveform_surface_create_sample(); summary_surface = waveform_surface_create_summary(); main_window = gtk_application_window_new(GTK_APPLICATION(app)); GActionEntry entries[] = { { "open", menu_open_file, NULL, NULL, NULL, }, { "menu", menu_menu, NULL, NULL, NULL, }, // TODO: "save" is currently unused { "save", menu_save, NULL, NULL, NULL, }, { "save_to_folder", menu_save_as, NULL, NULL, NULL, }, { "export", menu_export, NULL, NULL, NULL, }, { "import", menu_import, NULL, NULL, NULL, }, { "add_break", menu_add_track_break, NULL, NULL, NULL, }, { "jump_cursor", jump_to_cursor_marker, NULL, NULL, NULL, }, #if defined(WANT_MOODBAR) { "display_moodbar", menu_view_moodbar, NULL, appconfig_get_show_moodbar()?"true":"false", NULL, }, { "generate_moodbar", menu_moodbar, NULL, NULL, NULL, }, #endif { "check_all", menu_check_all, NULL, NULL, NULL, }, { "check_none", menu_check_none, NULL, NULL, NULL, }, { "check_invert", menu_check_invert, NULL, NULL, NULL, }, { "auto_rename", menu_rename, NULL, NULL, NULL, }, { "remove_break", menu_delete_track_break, NULL, NULL, NULL, }, { "jump_break", jump_to_track_break, NULL, NULL, NULL, }, }; g_action_map_add_action_entries(G_ACTION_MAP(main_window), entries, G_N_ELEMENTS(entries), main_window); set_action_enabled("add_break", FALSE); set_action_enabled("jump_cursor", FALSE); set_action_enabled("check_all", FALSE); set_action_enabled("check_none", FALSE); set_action_enabled("check_invert", FALSE); set_action_enabled("auto_rename", FALSE); set_action_enabled("remove_break", FALSE); set_action_enabled("jump_break", FALSE); set_action_enabled("export", FALSE); set_action_enabled("import", FALSE); #if defined(WANT_MOODBAR) set_action_enabled("display_moodbar", FALSE); set_action_enabled("generate_moodbar", FALSE); #endif gtk_window_set_default_icon_name( PACKAGE); header_bar = gtk_header_bar_new(); gtk_header_bar_set_title(GTK_HEADER_BAR(header_bar), APPNAME); gtk_header_bar_set_show_close_button(GTK_HEADER_BAR(header_bar), TRUE); GtkWidget *open_button = gtk_button_new_from_icon_name("document-open-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(open_button, _("Open file")); gtk_actionable_set_action_name(GTK_ACTIONABLE(open_button), "win.open"); gtk_header_bar_pack_start(GTK_HEADER_BAR(header_bar), open_button); GtkWidget *menu_button = gtk_button_new_from_icon_name("open-menu-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(menu_button, _("Open menu")); gtk_actionable_set_action_name(GTK_ACTIONABLE(menu_button), "win.menu"); gtk_header_bar_pack_end(GTK_HEADER_BAR(header_bar), menu_button); GMenu *top_menu = g_menu_new(); #if defined(WANT_MOODBAR) GMenu *display_menu = g_menu_new(); g_menu_append(display_menu, _("Display moodbar"), "win.display_moodbar"); g_menu_append(display_menu, _("Generate moodbar"), "win.generate_moodbar"); g_menu_append_section(top_menu, NULL, G_MENU_MODEL(display_menu)); #endif GMenu *toc_menu = g_menu_new(); g_menu_append(toc_menu, _("Import track breaks"), "win.import"); g_menu_append(toc_menu, _("Export track breaks"), "win.export"); g_menu_append_section(top_menu, NULL, G_MENU_MODEL(toc_menu)); GMenu *tools_menu = g_menu_new(); g_menu_append(tools_menu, _("Merge wave files"), "app.guimerge"); g_menu_append_section(top_menu, NULL, G_MENU_MODEL(tools_menu)); GMenu *prefs_menu = g_menu_new(); g_menu_append(prefs_menu, _("Preferences"), "app.preferences"); g_menu_append_section(top_menu, NULL, G_MENU_MODEL(prefs_menu)); GMenu *about_menu = g_menu_new(); g_menu_append(about_menu, _("About"), "app.about"); g_menu_append_section(top_menu, NULL, G_MENU_MODEL(about_menu)); menu_popover = gtk_popover_new_from_model(menu_button, G_MENU_MODEL(top_menu)); gtk_popover_set_position(GTK_POPOVER(menu_popover), GTK_POS_BOTTOM); header_bar_save_button = GTK_WIDGET(gtk_button_new_from_icon_name("document-save-as-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR)); gtk_actionable_set_action_name(GTK_ACTIONABLE(header_bar_save_button), "win.save_to_folder"); gtk_widget_set_sensitive(header_bar_save_button, FALSE); gtk_widget_set_tooltip_text(header_bar_save_button, _("Save file parts")); gtk_header_bar_pack_start(GTK_HEADER_BAR(header_bar), header_bar_save_button); gtk_window_set_titlebar(GTK_WINDOW(main_window), header_bar); set_title( NULL); g_signal_connect(G_OBJECT(main_window), "delete_event", G_CALLBACK(delete_event), NULL); gtk_container_set_border_width(GTK_CONTAINER(main_window), 0); vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_container_add(GTK_CONTAINER(main_window), vbox); /* paned view */ vpane1 = gtk_paned_new(GTK_ORIENTATION_VERTICAL); gtk_box_pack_start(GTK_BOX(vbox), vpane1, TRUE, TRUE, 0); /* vbox for the vpane */ vpane_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); gtk_paned_pack1(GTK_PANED(vpane1), vpane_vbox, TRUE, TRUE); /* paned view */ vpane2 = gtk_paned_new(GTK_ORIENTATION_VERTICAL); gtk_box_pack_start(GTK_BOX(vpane_vbox), vpane2, TRUE, TRUE, 0); /* The summary_surface drawing area */ draw_summary = gtk_drawing_area_new(); g_signal_connect(G_OBJECT(draw_summary), "draw", G_CALLBACK(draw_summary_draw_event), NULL); g_signal_connect(G_OBJECT(draw_summary), "configure_event", G_CALLBACK(draw_summary_configure_event), NULL); g_signal_connect(G_OBJECT(draw_summary), "button_release_event", G_CALLBACK(draw_summary_button_release), NULL); g_signal_connect(G_OBJECT(draw_summary), "motion_notify_event", G_CALLBACK(draw_summary_button_release), NULL); g_signal_connect(G_OBJECT(draw_summary), "scroll-event", G_CALLBACK(scroll_event), NULL); gtk_widget_add_events(draw_summary, GDK_BUTTON_RELEASE_MASK); gtk_widget_add_events(draw_summary, GDK_BUTTON_PRESS_MASK); gtk_widget_add_events(draw_summary, GDK_BUTTON_MOTION_MASK); frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(frame), draw_summary); gtk_paned_add1(GTK_PANED(vpane2), frame); /* The sample_surface drawing area */ draw = gtk_drawing_area_new(); g_signal_connect(G_OBJECT(draw), "draw", G_CALLBACK(draw_draw_event), NULL); g_signal_connect(G_OBJECT(draw), "configure_event", G_CALLBACK(configure_event), NULL); g_signal_connect(G_OBJECT(draw), "button_release_event", G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT(draw), "motion_notify_event", G_CALLBACK(button_release), NULL); g_signal_connect(G_OBJECT(draw), "scroll-event", G_CALLBACK(scroll_event), NULL); gtk_widget_add_events(draw, GDK_BUTTON_RELEASE_MASK); gtk_widget_add_events(draw, GDK_BUTTON_PRESS_MASK); gtk_widget_add_events(draw, GDK_BUTTON_MOTION_MASK); frame = gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_IN); gtk_container_add(GTK_CONTAINER(frame), draw); gtk_paned_add2(GTK_PANED(vpane2), frame); // gtk_box_pack_start(GTK_BOX(vpane_vbox), draw, TRUE, TRUE, 5); /* Add scrollbar */ adj = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 100, 1, 10, 100)); g_signal_connect(G_OBJECT(adj), "value_changed", G_CALLBACK(adj_value_changed), NULL); scrollbar = gtk_scrollbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_ADJUSTMENT(adj)); gtk_box_pack_start(GTK_BOX(vpane_vbox), scrollbar, FALSE, TRUE, 0); /* vbox for the list */ list_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); gtk_container_set_border_width(GTK_CONTAINER(list_vbox), 5); gtk_paned_pack2(GTK_PANED(vpane1), list_vbox, FALSE, TRUE); /* Add cursor marker spinner and track break add and delete buttons */ hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 5); gtk_box_pack_start(GTK_BOX(list_vbox), hbox, FALSE, FALSE, 0); play_button = gtk_button_new_from_icon_name("media-playback-start-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_sensitive(play_button, FALSE); gtk_widget_set_tooltip_text(play_button, _("Toggle playback")); gtk_box_pack_start(GTK_BOX(hbox), play_button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(play_button), "clicked", G_CALLBACK(menu_play), NULL); gtk_box_pack_start( GTK_BOX( hbox), gtk_label_new( _("Cursor position:")), FALSE, FALSE, 0); cursor_marker_spinner_adj = (GtkAdjustment *) gtk_adjustment_new (0.0, 0.0, 1000.0, 1.0, 74.0, 0); cursor_marker_spinner = gtk_spin_button_new(cursor_marker_spinner_adj, 1.0, 0); gtk_widget_set_sensitive( cursor_marker_spinner, FALSE); gtk_box_pack_start(GTK_BOX(hbox), cursor_marker_spinner, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(cursor_marker_spinner_adj), "value-changed", G_CALLBACK(cursor_marker_spinner_changed), NULL); //gtk_box_pack_start(GTK_BOX(hbox), make_time_offset_widget(), FALSE, FALSE, 0); // Jump Around GtkWidget *bbox = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start(GTK_BOX(hbox), bbox, FALSE, FALSE, 0); gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_EXPAND); button = gtk_button_new_from_icon_name("media-seek-backward-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(button, _("Seek to previous silence")); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(menu_prev_silence), NULL); button_seek_backward = button; button = gtk_button_new_from_icon_name("preferences-system-time-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(button, _("Jump to time")); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(menu_jump_to), NULL); jump_to_popover = gtk_popover_new(button); gtk_popover_set_position(GTK_POPOVER(jump_to_popover), GTK_POS_BOTTOM); gtk_container_add(GTK_CONTAINER(jump_to_popover), make_time_offset_widget()); button_jump_to_time = button; button = gtk_button_new_from_icon_name("media-seek-forward-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(button, _("Seek to next silence")); gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(menu_next_silence), NULL); button_seek_forward = button; // Spacer gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(""), TRUE, TRUE, 0); button = gtk_button_new_from_icon_name("edit-cut-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_widget_set_tooltip_text(button, _("Auto-split by interval")); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(menu_autosplit), NULL); autosplit_popover = gtk_popover_new(button); gtk_popover_set_position(GTK_POPOVER(autosplit_popover), GTK_POS_BOTTOM); gtk_container_add(GTK_CONTAINER(autosplit_popover), autosplit_create(GTK_POPOVER(autosplit_popover))); button_auto_split = button; gtk_box_pack_start(GTK_BOX(hbox), gtk_separator_new(GTK_ORIENTATION_VERTICAL), FALSE, FALSE, 0); /* add track break button */ button = gtk_button_new_from_icon_name("list-add-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_actionable_set_action_name(GTK_ACTIONABLE(button), "win.add_break"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); button_add_break = button; /* delete track break button */ button = gtk_button_new_from_icon_name("list-remove-symbolic", GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_actionable_set_action_name(GTK_ACTIONABLE(button), "win.remove_break"); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, 0); button_remove_break = button; /* Set buttons to be disabled initially */ gtk_widget_set_sensitive(button_seek_forward, FALSE); gtk_widget_set_sensitive(button_jump_to_time, FALSE); gtk_widget_set_sensitive(button_seek_backward, FALSE); gtk_widget_set_sensitive(button_auto_split, FALSE); gtk_widget_set_sensitive(button_add_break, FALSE); gtk_widget_set_sensitive(button_remove_break, FALSE); /* Track Break List */ tbl_widget = track_break_create_list_gui(); gtk_box_pack_start(GTK_BOX(list_vbox), tbl_widget, TRUE, TRUE, 0); /* Finish up */ write_info.cur_filename = NULL; sample_init(); if (appconfig_get_main_window_xpos() > 0) { gtk_window_move (GTK_WINDOW (main_window), appconfig_get_main_window_xpos(), appconfig_get_main_window_ypos()); } if( appconfig_get_main_window_width() > 0) { gtk_window_resize(GTK_WINDOW(main_window), appconfig_get_main_window_width(), appconfig_get_main_window_height()); gtk_paned_set_position(GTK_PANED(vpane1), appconfig_get_vpane1_position()); gtk_paned_set_position(GTK_PANED(vpane2), appconfig_get_vpane2_position()); } gtk_widget_show_all( GTK_WIDGET(main_window)); if (user_data) { open_file_source_id = g_idle_add(open_file_arg, user_data); } } static void do_open(GApplication *application, gpointer files, gint n_files, gchar *hint, gpointer user_data) { GFile **gfiles = (GFile **)files; for (int i=0; iwrite) { fprintf(fp, "%lu=%s\n", track_break->offset, track_break->filename); } else { fprintf(fp, "%lu\n", track_break->offset); } } void track_break_write_cue( gpointer data, gpointer user_data) { struct WriteStatus* ws = (struct WriteStatus*)user_data; TrackBreak* track_break = (TrackBreak*)data; char* time; char* p; time = g_strdup( track_break->time); p = time; while (*p != '\0') { if (*p == '.') { *p = ':'; } ++p; } fprintf( ws->fp, "TRACK %02d AUDIO\n", ws->index); fprintf( ws->fp, "INDEX 01 %s\n", time); ws->index++; free( time); } int track_breaks_load_from_file( gchar const *filename) { FILE* fp; char tmp[1024]; char* ptr; char* fname; int c; fp = fopen( filename, "r"); if( !fp) { fprintf( stderr, "Error opening %s.\n", filename); return 1; } track_break_clear_list(); ptr = tmp; while( !feof( fp)) { c = fgetc( fp); if( c == EOF) break; if( c == '\n') { *ptr = '\0'; if( ptr != tmp && tmp[0] != ';') { fname = strchr( tmp, '='); if( fname == NULL) { //DEBUG: printf( "Empty cut at %d\n", atoi( tmp)); track_break_add_offset(NULL, atol(tmp)); } else { *(fname++) = '\0'; while( *fname == ' ') fname++; //DEBUG: printf( "Cut at %d for %s\n", atoi( tmp), fname); track_break_add_offset(fname, atol(tmp)); } } ptr = tmp; } else { *ptr = c; ptr++; if( ptr > tmp+1024) { fprintf( stderr, "Error parsing file.\n"); fclose( fp); return 1; } } } fclose( fp); force_redraw(); return 0; } /** @param str Time in MM:SS:FF format (where there are CD_BLOCKS_PER_SEC frames per second). * @return offset in frames. */ guint msf_time_to_offset( gchar *str ) { guint offset; int mm = 0, ss = 0, ff = 0; int consumed; consumed = sscanf(str, "%d:%d:%d", &mm, &ss, &ff); if (consumed != 3) { return 0; } offset = mm * CD_BLOCKS_PER_SEC * 60; offset += ss * CD_BLOCKS_PER_SEC; offset += ff; return offset; } wavbreaker-0.13/src/wavbreaker.h000066400000000000000000000034721356554132000166710ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2005 Timothy Robinson * Copyright (C) 2007 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef WAVBREAKER_H #define WAVBREAKER_H #include typedef struct TrackBreak_ TrackBreak; struct TrackBreak_ { gboolean write; gulong offset; gchar *filename; gchar time[128]; gchar duration[128]; gboolean editable; }; void wavbreaker_autosplit(long x); void track_break_rename(); void wavbreaker_write_files(char *dirname); GtkWidget *wavbreaker_get_main_window(); void track_break_add_offset(char *filename, gulong offset); void track_break_clear_list(); void wavbreaker_update_moodbar_state(); void wavbreaker_quit(); guint msf_time_to_offset( gchar *str ); extern char *sample_filename; enum { CHECK_ALL = 0, CHECK_NONE, CHECK_INVERT }; /** * When the play marker reaches (x-1)/x (where x is the * value of PLAY_MARKER_SCROLL), scroll the waveform so * that the play marker continues at position 1/x. * * i.e. play marker at 7/8 of width -> go to 1/8 of width **/ #define PLAY_MARKER_SCROLL 8 #endif /* WAVBREAKER_H */ wavbreaker-0.13/src/wavgen.c000066400000000000000000000113411356554132000160140ustar00rootroot00000000000000/* wavgen - Generate a test wave file for testing wavbreaker * Copyright (C) 2015 Thomas Perl * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #ifndef M_PI #define M_PI (3.14159265358979323846) #endif #include "wav.h" #include "sample.h" typedef void (*ampfreq_func_t)(float, float *, float *); static inline void ampfreq1(float pos, float *amp, float *freq) { pos *= 2 * M_PI; *amp = fabsf(cosf(pos * 13.f)); *freq = 440.f + 440.f * sinf(pos * 77.f); } typedef void (*generate_audio_func_t)(FILE *, SampleInfo *, void *); static void generate_ampfreq(FILE *fp, SampleInfo *si, void *user_data) { ampfreq_func_t f = (ampfreq_func_t)user_data; int samples = si->numBytes / si->channels; int i; for (i=0; isamplesPerSec)); int ch; for (ch=0; chchannels; ch++) { if (si->bitsPerSample == 8) { char buf = 127 + 127 * amp; fwrite(&buf, sizeof(buf), 1, fp); } else if (si->bitsPerSample == 16) { short buf = amp * 0x7fff; fwrite(&buf, sizeof(buf), 1, fp); } } } } typedef char (*oneliner_func_t)(int t); // http://countercomplex.blogspot.com/2011/10/algorithmic-symphonies-from-one-line-of.html static char oneliner(int t) { return t*(((t>>12)|(t>>8))&(63&(t>>4))); } static void generate_oneliner(FILE *fp, SampleInfo *si, void *user_data) { g_assert_cmpint(si->channels, ==, 1); g_assert_cmpint(si->bitsPerSample, ==, 8); g_assert_cmpint(si->samplesPerSec, ==, 8000); oneliner_func_t f = (oneliner_func_t)user_data; int t; for (t=0; tnumBytes; t++) { fputc(f(t), fp); } } int main(int argc, char *argv[]) { struct { char *name; int channels; int samplesPerSec; int bitsPerSample; int seconds; generate_audio_func_t generate_func; void *generate_func_user_data; } templates[] = { { "gen", 2, 44100, 16, 60, generate_ampfreq, &freq1 }, { "gen", 2, 44100, 8, 60, generate_ampfreq, &freq1 }, { "gen", 1, 44100, 16, 60, generate_ampfreq, &freq1 }, { "gen", 1, 44100, 8, 60, generate_ampfreq, &freq1 }, { "gen", 1, 22050, 8, 60, generate_ampfreq, &freq1 }, { "gen", 1, 11025, 8, 60, generate_ampfreq, &freq1 }, { "oneliner", 1, 8000, 8, 60, generate_oneliner, &oneliner }, { "gen_long", 2, 44100, 16, 60 * 3, generate_ampfreq, &freq1 }, }; int i; for (i=0; i #include #include #include "wav.h" #include "sample.h" int main(int argc, char *argv[]) { int i; if( argc < 2) { printf( "Usage: %s [file1.wav] [...]\n", basename( argv[0])); return 1; } for( i = 1; i < argc; i++) { SampleInfo sampleInfo; printf( "Header info for: %s\n", argv[i]); if( wav_read_header( argv[i], &sampleInfo, 1) != 0) { printf("%s", wav_get_error_message()); } printf("\n"); } return 0; } wavbreaker-0.13/src/wavmerge.c000066400000000000000000000043021356554132000163410ustar00rootroot00000000000000/* wavbreaker - A tool to split a wave file up into multiple wave. * Copyright (C) 2002-2006 Timothy Robinson * * 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 2 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include "sample.h" #include "wav.h" void usage() { printf("Must pass filenames of wave files to merge.\n"); printf("Usage: wavmerge [-o outfile] mergefiles...\n"); } int main(int argc, char *argv[]) { int ret; char *merge_filename; int num_files; char **filenames; if (argc > 1 && strcmp(argv[1], "-o") == 0) { if (argc < 5) { usage(); return 1; } merge_filename = g_strdup(argv[2]); num_files = argc - 3; filenames = &argv[3]; } else { if (argc < 3) { usage(); return 1; } merge_filename = g_strdup("merged.wav"); num_files = argc - 1; filenames = &argv[1]; } if (g_file_test(merge_filename, G_FILE_TEST_EXISTS)) { fprintf(stderr, "ERROR: The output file %s already exists.\n", merge_filename); return 2; } ret = wav_merge_files(merge_filename, num_files, filenames, DEFAULT_BUF_SIZE, NULL); if (ret != 0) { fprintf(stderr, "ERROR: The files are not of the same format.\n\n" "This means that the sample rate, bits per sample, etc. are different.\n" "Please use a tool, like sox, to convert the files to the same format and\n" "try again.\n" ); return 1; } g_free(merge_filename); return 0; }