pax_global_header00006660000000000000000000000064127630421730014517gustar00rootroot0000000000000052 comment=c8857ac2babcc392f04f1b9e38d65d7ab39ba1bf keepassx-2.0.3/000077500000000000000000000000001276304217300133445ustar00rootroot00000000000000keepassx-2.0.3/.gitattributes000066400000000000000000000000411276304217300162320ustar00rootroot00000000000000src/version.h.cmake export-subst keepassx-2.0.3/.gitignore000066400000000000000000000000301276304217300153250ustar00rootroot00000000000000CMakeLists.txt.* build/ keepassx-2.0.3/.travis.yml000066400000000000000000000020521276304217300154540ustar00rootroot00000000000000os: - linux - osx compiler: - gcc - clang language: cpp install: - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq update; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then sudo apt-get -qq install cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxtst-dev; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq cmake || brew install cmake; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq qt || brew install qt; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then brew ls | grep -wq libgcrypt || brew install libgcrypt; fi before_script: mkdir build && pushd build script: - cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_GUI_TESTS=ON .. - make - if [ "$TRAVIS_OS_NAME" = "linux" ]; then make test ARGS+="-E testgui --output-on-failure"; fi - if [ "$TRAVIS_OS_NAME" = "linux" ]; then xvfb-run -a --server-args="-screen 0 800x600x24" make test ARGS+="-R testgui --output-on-failure"; fi - if [ "$TRAVIS_OS_NAME" = "osx" ]; then make test ARGS+="--output-on-failure"; fi keepassx-2.0.3/.tx/000077500000000000000000000000001276304217300140555ustar00rootroot00000000000000keepassx-2.0.3/.tx/config000066400000000000000000000003011276304217300152370ustar00rootroot00000000000000[main] host = https://www.transifex.com [keepassx.keepassx_ents] source_file = share/translations/keepassx_en.ts file_filter = share/translations/keepassx_.ts source_lang = en type = QT keepassx-2.0.3/CHANGELOG000066400000000000000000000106061276304217300145610ustar00rootroot000000000000002.0.3 (2016-09-04) ========================= - Improved error reporting when reading / writing databases fails. [#450, #462] - Display an error message when opening a custom icon fails. - Detect custom icon format based on contents instead of the filename. [#512] - Keep symlink intact when saving databases. [#442]. - Fix a crash when deleting parent group of recycle bin. [#520] - Display a confirm dialog before moving an entry to the recycle bin. [#447] - Repair UUIDs of inconsistent history items. [#130] - Only include top-level windows in auto-type window list when using gnome-shell. - Update translations. 2.0.2 (2016-02-02) ========================= - Fix regression in database writer that caused it to strip certain special characters (characters from Unicode plane > 0). - Fix bug in repair function that caused it to strip non-ASCII characters. 2.0.1 (2016-01-31) ========================= - Flush temporary file before opening attachment. [#390] - Disable password generator when showing entry in history mode. [#422] - Strip invalid XML chars when writing databases. [#392] - Add repair function to fix databases with invalid XML chars. [#392] - Display custom icons scaled. [#322] - Allow opening databases that have no password and keyfile. [#391] - Fix crash when importing .kdb files with invalid icon ids. [#425] - Update translations. 2.0 (2015-12-06) ========================= - Improve UI of the search edit. - Clear clipboard when locking databases. [#342] - Enable Ctrl+M shortcut to minimize the window on all platforms. [#329] - Show a better message when trying to open an old database format. [#338] - Fix global auto-type behavior with some window managers. - Show global auto-type window on the active desktop. [#359] - Disable systray on OS X. [#326] - Restore main window when clicking on the OS X docker icon. [#326] 2.0 Beta 2 (2015-09-06) ========================= - Fix crash when locking with search UI open [#309] - Fix file locking on Mac OS X [#327] - Set default extension when saving a database [#79, #308] 2.0 Beta 1 (2015-07-18) ========================= - Remember entry column sizes [#159] - Add translations - Support opening attachments directly - Support cmd:// URLs [#244] - Protect opened databases with a file lock [#18] - Export to csv files [#57] - Add optional tray icon [#153] - Allow setting the default auto-type sequence for groups [#175] - Make the kdbx parser more lenient - Remove --password command line option [#285] 2.0 Alpha 6 (2014-04-12) ========================= - Add option to lock databases after user inactivity [#62] - Add compatibility with libgcrypt 1.6 [#129] - Display passwords in monospace font [#51] - Use an icon for the button that shows/masks passwords [#38] - Add an option to show passwords by default [#93] - Improve password generator design [#122] - On Linux link .kdbx files with KeePassX - Remember window size [#154] - Disallow global auto-typing when the database is locked 2.0 Alpha 5 (2013-12-20) ========================= - Support copying entries and groups using drag'n'drop [#74] - Open last used databases on startup [#36] - Made the kdbx file parser more robust - Only edit entries on doubleclick (not single) or with enter key - Allow removing multiple entries - Added option to minimize window when copying data to clipboard - Save password generator settings - Fixed auto-type producing wrong chars in some keyboard configurations [#116] - Added some more actions to the toolbar 2.0 Alpha 4 (2013-03-29) ========================= - Add random password generator [#52] - Merge the 'Description' tab into the 'Entry' tab [#59] - Fix crash when deleting history items [#56] - Fix crash on Mac OS X Mountain Lion during startup [#50] - Improved KeePassX application icon [#58] 2.0 Alpha 3 (2012-10-27) ========================= - Auto-Type on Linux / X11 - Database locking - Fix database corruption when changing key transformation rounds [#34] - Verify header data of kdbx files - Add menu entry to open URLs in the browser - Add menu entry to copy an entry attribute to clipboard 2.0 Alpha 2 (2012-07-02) ========================= - Import kdb (KeePass 1) files [#2] - Display history items [#23] - Implement history item limits [#16] - Group and entry icons can be set [#22] - Add keyboard shortcuts - Search in databases [#24] - Sortable entry view - Support building Mac OS X bundles 2.0 Alpha 1 (2012-05-07) ========================= - First release. keepassx-2.0.3/CMakeLists.txt000066400000000000000000000153631276304217300161140ustar00rootroot00000000000000# Copyright (C) 2010 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo Debug Debugfull Profile MinSizeRel." FORCE) endif() project(KeePassX) cmake_minimum_required(VERSION 2.6.4) set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) include(CheckCCompilerFlag) include(CheckCXXCompilerFlag) include(CheckCXXSourceCompiles) option(WITH_TESTS "Enable building of unit tests" ON) option(WITH_GUI_TESTS "Enable building of GUI tests" OFF) option(WITH_CXX11 "Build with the C++ 11 standard" ON) set(KEEPASSX_VERSION "2.0.3") set(KEEPASSX_VERSION_NUM "2.0.3") if("${CMAKE_C_COMPILER}" MATCHES "clang$" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_COMPILER_IS_CLANG 1) endif() if("${CMAKE_CXX_COMPILER}" MATCHES "clang(\\+\\+)?$" OR "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") set(CMAKE_COMPILER_IS_CLANGXX 1) endif() macro(add_gcc_compiler_cxxflags FLAGS) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_COMPILER_IS_CLANGXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAGS}") endif() endmacro(add_gcc_compiler_cxxflags) macro(add_gcc_compiler_cflags FLAGS) if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_CLANG) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAGS}") endif() endmacro(add_gcc_compiler_cflags) macro(add_gcc_compiler_flags FLAGS) add_gcc_compiler_cxxflags("${FLAGS}") add_gcc_compiler_cflags("${FLAGS}") endmacro(add_gcc_compiler_flags) add_definitions(-DQT_NO_KEYWORDS -DQT_NO_EXCEPTIONS -DQT_NO_STL -DQT_STRICT_ITERATORS -DQT_NO_CAST_TO_ASCII) add_gcc_compiler_flags("-fno-common -fstack-protector --param=ssp-buffer-size=4") add_gcc_compiler_flags("-Wall -Wextra -Wundef -Wpointer-arith -Wno-long-long") add_gcc_compiler_flags("-Wformat=2 -Wmissing-format-attribute") add_gcc_compiler_flags("-fvisibility=hidden") add_gcc_compiler_cxxflags("-fvisibility-inlines-hidden") add_gcc_compiler_cxxflags("-fno-exceptions -fno-rtti") add_gcc_compiler_cxxflags("-Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual") add_gcc_compiler_cflags("-Wchar-subscripts -Wwrite-strings") string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER) if (CMAKE_BUILD_TYPE_LOWER MATCHES (release|relwithdebinfo|minsizerel)) add_gcc_compiler_flags("-D_FORTIFY_SOURCE=2") endif() check_c_compiler_flag("-Werror=format-security -Werror=implicit-function-declaration" WERROR_C_AVAILABLE) check_cxx_compiler_flag("-Werror=format-security" WERROR_CXX_AVAILABLE) if(WERROR_C_AVAILABLE AND WERROR_CXX_AVAILABLE) add_gcc_compiler_flags("-Werror=format-security") add_gcc_compiler_cflags("-Werror=implicit-function-declaration") endif() if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wcast-align") endif() if(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wcast-align") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed -Wl,--no-undefined") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-z,relro") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-add-needed -Wl,--as-needed") set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,-z,relro") endif() if (WITH_CXX11) add_gcc_compiler_cxxflags("-std=c++0x") add_gcc_compiler_cflags("-ansi") if(APPLE) add_gcc_compiler_cxxflags("-stdlib=libc++") endif() else() add_gcc_compiler_flags("-ansi") endif() if(MINGW) set(CMAKE_RC_COMPILER_INIT windres) enable_language(RC) set(CMAKE_RC_COMPILE_OBJECT " -O coff -i -o ") endif() if(APPLE OR MINGW) set(PROGNAME KeePassX) else() set(PROGNAME keepassx) endif() if(APPLE AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") set(CMAKE_INSTALL_PREFIX "/Applications") endif() if(MINGW) set(BIN_INSTALL_DIR ".") set(PLUGIN_INSTALL_DIR ".") set(DATA_INSTALL_DIR "share") elseif(APPLE) set(BIN_INSTALL_DIR ".") set(PLUGIN_INSTALL_DIR ".") set(DATA_INSTALL_DIR "${PROGNAME}.app/Contents/Resources") else() include(GNUInstallDirs) set(BIN_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") set(PLUGIN_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}/keepassx") set(DATA_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/keepassx") endif() if(WITH_TESTS) enable_testing() endif(WITH_TESTS) set(QT_REQUIRED_MODULES QtCore QtGui QtTest) find_package(Qt4 4.6.0 REQUIRED ${QT_REQUIRED_MODULES}) include(${QT_USE_FILE}) # Debian sets the the build type to None for package builds. # Make sure we don't enable asserts there. set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_NONE QT_NO_DEBUG) find_package(Gcrypt REQUIRED) if(NOT (${GCRYPT_VERSION_STRING} VERSION_LESS "1.6.0")) message(STATUS "Gcrypt ${GCRYPT_VERSION_STRING} supports the SALSA20 cipher") set(GCRYPT_HAS_SALSA20 1) endif() find_package(ZLIB REQUIRED) check_cxx_source_compiles(" #include #if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1200) #error zlib 1.2.x or higher is required to use the gzip format #endif int main() { return 0; }" ZLIB_SUPPORTS_GZIP) if(NOT ZLIB_SUPPORTS_GZIP) message(FATAL_ERROR "zlib 1.2.x or higher is required to use the gzip format") endif() if(UNIX) check_cxx_source_compiles("#include int main() { prctl(PR_SET_DUMPABLE, 0); return 0; }" HAVE_PR_SET_DUMPABLE) check_cxx_source_compiles("#include int main() { struct rlimit limit; limit.rlim_cur = 0; limit.rlim_max = 0; setrlimit(RLIMIT_CORE, &limit); return 0; }" HAVE_RLIMIT_CORE) if(APPLE) check_cxx_source_compiles("#include #include int main() { ptrace(PT_DENY_ATTACH, 0, 0, 0); return 0; }" HAVE_PT_DENY_ATTACH) endif() endif() include_directories(SYSTEM ${GCRYPT_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) if(NOT (${CMAKE_VERSION} VERSION_LESS 2.8.3)) set(PRINT_SUMMARY ON) include(FeatureSummary) endif() add_subdirectory(src) add_subdirectory(share) add_subdirectory(utils) if(WITH_TESTS) add_subdirectory(tests) endif(WITH_TESTS) if(PRINT_SUMMARY) feature_summary(WHAT ALL) endif() keepassx-2.0.3/COPYING000066400000000000000000000200631276304217300144000ustar00rootroot00000000000000KeePassX - http://www.keepassx.org/ Copyright (C) 2010-2012 Felix Geyer 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 or (at your option) version 3 of the License. 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. -------------------------------------------------------------------- Format-Specification: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: KeePassX Upstream-Contact: Felix Geyer Source: http://www.keepassx.org/ Copyright: 2010-2012, Felix Geyer 2011-2012, Florian Geyer 2012, Tobias Tangemann 2007, Trolltech ASA 2012, Intel Corporation 2012, Nokia Corporation and/or its subsidiary(-ies) 2000-2008, Tom Sato 2013, Laszlo Papp 2013, David Faure License: GPL-2 or GPL-3 Files: cmake/GNUInstallDirs.cmake Copyright: 2011 Nikita Krupen'ko 2011 Kitware, Inc. License: BSD-3-clause Files: share/icons/application/*/apps/keepassx.png share/icons/application/scalable/apps/keepassx.svgz Copyright: 2006, Otto Salminen 2009, Miguelito Vieira 2011-2013, Felix Geyer 2012, Tobias Tangemann License: GPL-2 Files: share/icons/application/*/actions/auto-type.png share/icons/application/*/actions/database-change-key.png share/icons/application/*/actions/entry-clone.png share/icons/application/*/actions/entry-edit.png share/icons/application/*/actions/entry-new.png share/icons/application/*/actions/password-generate.png share/icons/database/C00_Password.png share/icons/database/C01_Package_Network.png share/icons/database/C02_MessageBox_Warning.png share/icons/database/C03_Server.png share/icons/database/C04_Klipper.png share/icons/database/C05_Edu_Languages.png share/icons/database/C06_KCMDF.png share/icons/database/C07_Kate.png share/icons/database/C08_Socket.png share/icons/database/C09_Identity.png share/icons/database/C10_Kontact.png share/icons/database/C11_Camera.png share/icons/database/C12_IRKickFlash.png share/icons/database/C13_KGPG_Key3.png share/icons/database/C14_Laptop_Power.png share/icons/database/C15_Scanner.png share/icons/database/C16_Mozilla_Firebird.png share/icons/database/C17_CDROM_Unmount.png share/icons/database/C18_Display.png share/icons/database/C19_Mail_Generic.png share/icons/database/C20_Misc.png share/icons/database/C21_KOrganizer.png share/icons/database/C22_ASCII.png share/icons/database/C23_Icons.png share/icons/database/C24_Connect_Established.png share/icons/database/C25_Folder_Mail.png share/icons/database/C26_FileSave.png share/icons/database/C27_NFS_Unmount.png share/icons/database/C28_QuickTime.png share/icons/database/C29_KGPG_Term.png share/icons/database/C30_Konsole.png share/icons/database/C31_FilePrint.png share/icons/database/C32_FSView.png share/icons/database/C33_Run.png share/icons/database/C34_Configure.png share/icons/database/C35_KRFB.png share/icons/database/C36_Ark.png share/icons/database/C37_KPercentage.png share/icons/database/C38_Samba_Unmount.png share/icons/database/C39_History.png share/icons/database/C40_Mail_Find.png share/icons/database/C41_VectorGfx.png share/icons/database/C42_KCMMemory.png share/icons/database/C43_EditTrash.png share/icons/database/C44_KNotes.png share/icons/database/C45_Cancel.png share/icons/database/C46_Help.png share/icons/database/C47_KPackage.png share/icons/database/C48_Folder.png share/icons/database/C49_Folder_Blue_Open.png share/icons/database/C50_Folder_Tar.png share/icons/database/C51_Decrypted.png share/icons/database/C52_Encrypted.png share/icons/database/C53_Apply.png share/icons/database/C54_Signature.png share/icons/database/C55_Thumbnail.png share/icons/database/C56_KAddressBook.png share/icons/database/C57_View_Text.png share/icons/database/C58_KGPG.png share/icons/database/C59_Package_Development.png share/icons/database/C60_KFM_Home.png share/icons/database/C61_Services.png Copyright: 2003-2004, David Vignoni License: LGPL-2.1 Comment: from Nuvola icon theme Files: share/icons/application/*/actions/entry-delete.png share/icons/application/*/actions/group-delete.png share/icons/application/*/actions/group-edit.png share/icons/application/*/actions/group-new.png Copyright: 2003-2004, David Vignoni 2012, Felix Geyer License: LGPL-2.1 Comment: based on Nuvola icon theme Files: share/icons/application/*/actions/application-exit.png share/icons/application/*/actions/configure.png share/icons/application/*/actions/dialog-close.png share/icons/application/*/actions/dialog-ok.png share/icons/application/*/actions/document-close.png share/icons/application/*/actions/document-edit.png share/icons/application/*/actions/document-encrypt.png share/icons/application/*/actions/document-new.png share/icons/application/*/actions/document-open.png share/icons/application/*/actions/document-save.png share/icons/application/*/actions/document-save-as.png share/icons/application/*/actions/edit-clear-locationbar-ltr.png share/icons/application/*/actions/edit-clear-locationbar-rtl.png share/icons/application/*/actions/password-copy.png share/icons/application/*/actions/password-show-*.png share/icons/application/*/actions/system-search.png share/icons/application/*/actions/username-copy.png share/icons/application/*/status/dialog-error.png share/icons/application/*/status/dialog-information.png share/icons/application/*/status/dialog-warning.png share/icons/svg/*.svgz Copyright: 2007, Nuno Pinheiro 2007, David Vignoni 2007, David Miller 2007, Johann Ollivier Lapeyre 2007, Kenneth Wimer 2007, Riccardo Iaconelli License: LGPL-3+ Comment: from Oxygen icon theme (http://www.oxygen-icons.org/) Files: share/icons/database/C62_Tux.png share/icons/database/C63_Feather.png share/icons/database/C64_Apple.png share/icons/database/C67_Certificate.png share/icons/database/C68_BlackBerry.png Copyright: Mairin Duffy Sarah Owens James Birkett Dominik Reichl License: CC0 Comment: C62_Tux.png from https://openclipart.org/detail/103855 C63_Feather.png from http://openclipart.org/detail/122017 C64_Apple.png based on http://openclipart.org/detail/24319 C67_Certificate.png based on https://openclipart.org/detail/16729 C68_BlackBerry.png from https://openclipart.org/detail/4465 Files: share/icons/database/C65_W.png share/icons/database/C66_Money.png Copyright: none License: public-domain Files: src/crypto/salsa20/* Copyright: none License: public-domain Files: src/streams/qtiocompressor.* src/streams/QtIOCompressor tests/modeltest.* Copyright: 2009-2012, Nokia Corporation and/or its subsidiary(-ies) License: LGPL-2.1 or GPL-3 Files: cmake/GetGitRevisionDescription.cmake* Copyright: 2009-2010, Iowa State University License: Boost-1.0 keepassx-2.0.3/INSTALL000066400000000000000000000010731276304217300143760ustar00rootroot00000000000000Building: ========= mkdir build cd build cmake [CMAKE PARAMETERS] .. make [-jX] Common cmake parameters: ======================== -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE= -DWITH_GUI_TESTS=ON Installing: =========== make install [DESTDIR=X] Create a bundle on Mac: make package Run tests: ========== make test [CTEST_OUTPUT_ON_FAILURE=1] [ARGS+=-jX] [ARGS+="-E testgui"] OS specific instructions: ========================= https://www.keepassx.org/dev/projects/keepassx/wiki/Install_instructions keepassx-2.0.3/LICENSE.BOOST-1.0000066400000000000000000000024721276304217300155370ustar00rootroot00000000000000Boost Software License - Version 1.0 - August 17th, 2003 Permission is hereby granted, free of charge, to any person or organization obtaining a copy of the software and accompanying documentation covered by this license (the "Software") to use, reproduce, display, distribute, execute, and transmit the Software, and to prepare derivative works of the Software, and to permit third-parties to whom the Software is furnished to do so, all subject to the following: The copyright notices in the Software and this entire statement, including the above license grant, this restriction and the following disclaimer, must be included in all copies of the Software, in whole or in part, and all derivative works of the Software, unless such copies or derivative works are solely in the form of machine-executable object code generated by a source language processor. 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. keepassx-2.0.3/LICENSE.BSD000066400000000000000000000024571276304217300147700ustar00rootroot00000000000000Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. keepassx-2.0.3/LICENSE.CC0000066400000000000000000000153601276304217300147220ustar00rootroot00000000000000Creative Commons CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. keepassx-2.0.3/LICENSE.GPL-2000066400000000000000000000431031276304217300151320ustar00rootroot00000000000000 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. keepassx-2.0.3/LICENSE.GPL-3000066400000000000000000001043741276304217300151430ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . keepassx-2.0.3/LICENSE.LGPL-2.1000066400000000000000000000636311276304217300154150ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser 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 Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! keepassx-2.0.3/LICENSE.LGPL-3000066400000000000000000000167431276304217300152610ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser 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 Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. keepassx-2.0.3/LICENSE.NOKIA-LGPL-EXCEPTION000066400000000000000000000021651276304217300173050ustar00rootroot00000000000000Nokia Qt LGPL Exception version 1.1 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library?s header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. keepassx-2.0.3/README.md000066400000000000000000000104511276304217300146240ustar00rootroot00000000000000# KeePassX ## About KeePassX is an application for people with extremely high demands on secure personal data management. It has a light interface, is cross platform and published under the terms of the GNU General Public License. KeePassX saves many different information e.g. user names, passwords, urls, attachments and comments in one single database. For a better management user-defined titles and icons can be specified for each single entry. Furthermore the entries are sorted in groups, which are customizable as well. The integrated search function allows to search in a single group or the complete database. KeePassX offers a little utility for secure password generation. The password generator is very customizable, fast and easy to use. Especially someone who generates passwords frequently will appreciate this feature. The complete database is always encrypted with the AES (aka Rijndael) encryption algorithm using a 256 bit key. Therefore the saved information can be considered as quite safe. KeePassX uses a database format that is compatible with [KeePass Password Safe](http://keepass.info/). This makes the use of that application even more favorable. ## Install KeePassX can be downloaded and installed using an assortment of installers available on the main [KeePassX website](http://www.keepassx.org). KeePassX can also be installed from the official repositories of many Linux repositories. If you wish to build KeePassX from source, rather than rely on the pre-compiled binaries, you may wish to read up on the _From Source_ section. ### Debian To install KeePassX from the Debian repository: ```bash sudo apt-get install keepassx ``` ### Red Hat Install KeePassX from the Red Hat (or CentOS) repository: ```bash sudo yum install keepassx ``` ### Windows / Mac OS X Download the installer from the KeePassX [download](https://www.keepassx.org/downloads) page. Once downloaded, double click on the file to execute the installer. ### From Source #### Build Dependencies The following tools must exist within your PATH: * make * cmake (>= 2.6.4) * g++ or clang++ The following libraries are required: * Qt 4 (>= 4.6) * libgcrypt * zlib * libxi, libxtst (optional for auto-type on X11) On Debian you can install them with: ```bash sudo apt-get install build-essential cmake libqt4-dev libgcrypt11-dev zlib1g-dev libxi-dev libxtst-dev ``` #### Build Steps To compile from source: ```bash mkdir build cd build cmake .. make [-jX] ``` You will have the compiled KeePassX binary inside the `./build/src/` directory. To install this binary execute the following: ```bash sudo make install ``` More detailed instructions available in the INSTALL file. ## Contribute Coordination of work between developers is handled through the [KeePassX development](https://www.keepassx.org/dev/) site. Requests for enhancements, or reports of bugs encountered, can also be reported through the KeePassX development site. However, members of the open-source community are encouraged to submit pull requests directly through GitHub. ### Clone Repository Clone the repository to a suitable location where you can extend and build this project. ```bash git clone https://github.com/keepassx/keepassx.git ``` **Note:** This will clone the entire contents of the repository at the HEAD revision. To update the project from within the project's folder you can run the following command: ```bash git pull ``` ### Feature Requests We're always looking for suggestions to improve our application. If you have a suggestion for improving an existing feature, or would like to suggest a completely new feature for KeePassX, please file a ticket on the [KeePassX development](https://www.keepassx.org/dev/) site. ### Bug Reports Our software isn't always perfect, but we strive to always improve our work. You may file bug reports on the [KeePassX development](https://www.keepassx.org/dev/) site. ### Pull Requests Along with our desire to hear your feedback and suggestions, we're also interested in accepting direct assistance in the form of code. Issue merge requests against our [GitHub repository](https://github.com/keepassx/keepassx). ### Translations Translations are managed on [Transifex](https://www.transifex.com/projects/p/keepassx/) which offers a web interface. Please join an existing language team or request a new one if there is none. keepassx-2.0.3/cmake/000077500000000000000000000000001276304217300144245ustar00rootroot00000000000000keepassx-2.0.3/cmake/FindGcrypt.cmake000066400000000000000000000030401276304217300174740ustar00rootroot00000000000000# Copyright (C) 2011 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . find_path(GCRYPT_INCLUDE_DIR gcrypt.h) find_library(GCRYPT_LIBRARIES gcrypt) mark_as_advanced(GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) if(GCRYPT_INCLUDE_DIR AND EXISTS "${GCRYPT_INCLUDE_DIR}/gcrypt.h") file(STRINGS "${GCRYPT_INCLUDE_DIR}/gcrypt.h" GCRYPT_H REGEX "^#define GCRYPT_VERSION \"[^\"]*\"$") string(REGEX REPLACE "^.*GCRYPT_VERSION \"([0-9]+).*$" "\\1" GCRYPT_VERSION_MAJOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_MINOR "${GCRYPT_H}") string(REGEX REPLACE "^.*GCRYPT_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" GCRYPT_VERSION_PATCH "${GCRYPT_H}") set(GCRYPT_VERSION_STRING "${GCRYPT_VERSION_MAJOR}.${GCRYPT_VERSION_MINOR}.${GCRYPT_VERSION_PATCH}") endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Gcrypt DEFAULT_MSG GCRYPT_LIBRARIES GCRYPT_INCLUDE_DIR) keepassx-2.0.3/cmake/GNUInstallDirs.cmake000066400000000000000000000163451276304217300202410ustar00rootroot00000000000000# - Define GNU standard installation directories # Provides install directory variables as defined for GNU software: # http://www.gnu.org/prep/standards/html_node/Directory-Variables.html # Inclusion of this module defines the following variables: # CMAKE_INSTALL_ - destination for files of a given type # CMAKE_INSTALL_FULL_ - corresponding absolute path # where is one of: # BINDIR - user executables (bin) # SBINDIR - system admin executables (sbin) # LIBEXECDIR - program executables (libexec) # SYSCONFDIR - read-only single-machine data (etc) # SHAREDSTATEDIR - modifiable architecture-independent data (com) # LOCALSTATEDIR - modifiable single-machine data (var) # LIBDIR - object code libraries (lib or lib64 or lib/ on Debian) # INCLUDEDIR - C header files (include) # OLDINCLUDEDIR - C header files for non-gcc (/usr/include) # DATAROOTDIR - read-only architecture-independent data root (share) # DATADIR - read-only architecture-independent data (DATAROOTDIR) # INFODIR - info documentation (DATAROOTDIR/info) # LOCALEDIR - locale-dependent data (DATAROOTDIR/locale) # MANDIR - man documentation (DATAROOTDIR/man) # DOCDIR - documentation root (DATAROOTDIR/doc/PROJECT_NAME) # Each CMAKE_INSTALL_ value may be passed to the DESTINATION options of # install() commands for the corresponding file type. If the includer does # not define a value the above-shown default will be used and the value will # appear in the cache for editing by the user. # Each CMAKE_INSTALL_FULL_ value contains an absolute path constructed # from the corresponding destination by prepending (if necessary) the value # of CMAKE_INSTALL_PREFIX. #============================================================================= # Copyright 2011 Nikita Krupen'ko # Copyright 2011 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distribute this file outside of CMake, substitute the full # License text for the above reference.) # Installation directories # if(NOT DEFINED CMAKE_INSTALL_BINDIR) set(CMAKE_INSTALL_BINDIR "bin" CACHE PATH "user executables (bin)") endif() if(NOT DEFINED CMAKE_INSTALL_SBINDIR) set(CMAKE_INSTALL_SBINDIR "sbin" CACHE PATH "system admin executables (sbin)") endif() if(NOT DEFINED CMAKE_INSTALL_LIBEXECDIR) set(CMAKE_INSTALL_LIBEXECDIR "libexec" CACHE PATH "program executables (libexec)") endif() if(NOT DEFINED CMAKE_INSTALL_SYSCONFDIR) set(CMAKE_INSTALL_SYSCONFDIR "etc" CACHE PATH "read-only single-machine data (etc)") endif() if(NOT DEFINED CMAKE_INSTALL_SHAREDSTATEDIR) set(CMAKE_INSTALL_SHAREDSTATEDIR "com" CACHE PATH "modifiable architecture-independent data (com)") endif() if(NOT DEFINED CMAKE_INSTALL_LOCALSTATEDIR) set(CMAKE_INSTALL_LOCALSTATEDIR "var" CACHE PATH "modifiable single-machine data (var)") endif() if(NOT DEFINED CMAKE_INSTALL_LIBDIR) set(_LIBDIR_DEFAULT "lib") # Override this default 'lib' with 'lib64' iff: # - we are on Linux system but NOT cross-compiling # - we are NOT on debian # - we are on a 64 bits system # reason is: amd64 ABI: http://www.x86-64.org/documentation/abi.pdf # For Debian with multiarch, use 'lib/${CMAKE_LIBRARY_ARCHITECTURE}' if # CMAKE_LIBRARY_ARCHITECTURE is set (which contains e.g. "i386-linux-gnu" # See http://wiki.debian.org/Multiarch if((CMAKE_SYSTEM_NAME MATCHES "Linux|kFreeBSD" OR CMAKE_SYSTEM_NAME STREQUAL "GNU") AND NOT CMAKE_CROSSCOMPILING) if (EXISTS "/etc/debian_version") # is this a debian system ? if(CMAKE_LIBRARY_ARCHITECTURE) set(_LIBDIR_DEFAULT "lib/${CMAKE_LIBRARY_ARCHITECTURE}") endif() else() # not debian, rely on CMAKE_SIZEOF_VOID_P: if(NOT DEFINED CMAKE_SIZEOF_VOID_P) message(AUTHOR_WARNING "Unable to determine default CMAKE_INSTALL_LIBDIR directory because no target architecture is known. " "Please enable at least one language before including GNUInstallDirs.") else() if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") set(_LIBDIR_DEFAULT "lib64") endif() endif() endif() endif() set(CMAKE_INSTALL_LIBDIR "${_LIBDIR_DEFAULT}" CACHE PATH "object code libraries (${_LIBDIR_DEFAULT})") endif() if(NOT DEFINED CMAKE_INSTALL_INCLUDEDIR) set(CMAKE_INSTALL_INCLUDEDIR "include" CACHE PATH "C header files (include)") endif() if(NOT DEFINED CMAKE_INSTALL_OLDINCLUDEDIR) set(CMAKE_INSTALL_OLDINCLUDEDIR "/usr/include" CACHE PATH "C header files for non-gcc (/usr/include)") endif() if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR) set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)") endif() #----------------------------------------------------------------------------- # Values whose defaults are relative to DATAROOTDIR. Store empty values in # the cache and store the defaults in local variables if the cache values are # not set explicitly. This auto-updates the defaults as DATAROOTDIR changes. if(NOT CMAKE_INSTALL_DATADIR) set(CMAKE_INSTALL_DATADIR "" CACHE PATH "read-only architecture-independent data (DATAROOTDIR)") set(CMAKE_INSTALL_DATADIR "${CMAKE_INSTALL_DATAROOTDIR}") endif() if(NOT CMAKE_INSTALL_INFODIR) set(CMAKE_INSTALL_INFODIR "" CACHE PATH "info documentation (DATAROOTDIR/info)") set(CMAKE_INSTALL_INFODIR "${CMAKE_INSTALL_DATAROOTDIR}/info") endif() if(NOT CMAKE_INSTALL_LOCALEDIR) set(CMAKE_INSTALL_LOCALEDIR "" CACHE PATH "locale-dependent data (DATAROOTDIR/locale)") set(CMAKE_INSTALL_LOCALEDIR "${CMAKE_INSTALL_DATAROOTDIR}/locale") endif() if(NOT CMAKE_INSTALL_MANDIR) set(CMAKE_INSTALL_MANDIR "" CACHE PATH "man documentation (DATAROOTDIR/man)") set(CMAKE_INSTALL_MANDIR "${CMAKE_INSTALL_DATAROOTDIR}/man") endif() if(NOT CMAKE_INSTALL_DOCDIR) set(CMAKE_INSTALL_DOCDIR "" CACHE PATH "documentation root (DATAROOTDIR/doc/PROJECT_NAME)") set(CMAKE_INSTALL_DOCDIR "${CMAKE_INSTALL_DATAROOTDIR}/doc/${PROJECT_NAME}") endif() #----------------------------------------------------------------------------- mark_as_advanced( CMAKE_INSTALL_BINDIR CMAKE_INSTALL_SBINDIR CMAKE_INSTALL_LIBEXECDIR CMAKE_INSTALL_SYSCONFDIR CMAKE_INSTALL_SHAREDSTATEDIR CMAKE_INSTALL_LOCALSTATEDIR CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR CMAKE_INSTALL_OLDINCLUDEDIR CMAKE_INSTALL_DATAROOTDIR CMAKE_INSTALL_DATADIR CMAKE_INSTALL_INFODIR CMAKE_INSTALL_LOCALEDIR CMAKE_INSTALL_MANDIR CMAKE_INSTALL_DOCDIR ) # Result directories # foreach(dir BINDIR SBINDIR LIBEXECDIR SYSCONFDIR SHAREDSTATEDIR LOCALSTATEDIR LIBDIR INCLUDEDIR OLDINCLUDEDIR DATAROOTDIR DATADIR INFODIR LOCALEDIR MANDIR DOCDIR ) if(NOT IS_ABSOLUTE ${CMAKE_INSTALL_${dir}}) set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_${dir}}") else() set(CMAKE_INSTALL_FULL_${dir} "${CMAKE_INSTALL_${dir}}") endif() endforeach() keepassx-2.0.3/cmake/GetGitRevisionDescription.cmake000066400000000000000000000100301276304217300225260ustar00rootroot00000000000000# - Returns a version string from Git # # These functions force a re-configure on each git commit so that you can # trust the values of the variables in your build system. # # get_git_head_revision( [ ...]) # # Returns the refspec and sha hash of the current head revision # # git_describe( [ ...]) # # Returns the results of git describe on the source tree, and adjusting # the output so that it tests false if an error occurs. # # git_get_exact_tag( [ ...]) # # Returns the results of git describe --exact-match on the source tree, # and adjusting the output so that it tests false if there was no exact # matching tag. # # Requires CMake 2.6 or newer (uses the 'function' command) # # Original Author: # 2009-2010 Ryan Pavlik # http://academic.cleardefinition.com # Iowa State University HCI Graduate Program/VRAC # # Copyright Iowa State University 2009-2010. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE.BOOST-1.0 or copy at # http://www.boost.org/LICENSE_1_0.txt) if(__get_git_revision_description) return() endif() set(__get_git_revision_description YES) # We must run the following at "include" time, not at function call time, # to find the path to this module rather than the path to a calling list file get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH) function(get_git_head_revision _refspecvar _hashvar) set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}") set(GIT_DIR "${GIT_PARENT_DIR}/.git") while(NOT EXISTS "${GIT_DIR}") # .git dir not found, search parent directories set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}") get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH) if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT) # We have reached the root directory, we are not in git set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) return() endif() set(GIT_DIR "${GIT_PARENT_DIR}/.git") endwhile() # check if this is a submodule if(NOT IS_DIRECTORY ${GIT_DIR}) file(READ ${GIT_DIR} submodule) string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule}) get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) endif() set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data") if(NOT EXISTS "${GIT_DATA}") file(MAKE_DIRECTORY "${GIT_DATA}") endif() if(NOT EXISTS "${GIT_DIR}/HEAD") return() endif() set(HEAD_FILE "${GIT_DATA}/HEAD") configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY) configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in" "${GIT_DATA}/grabRef.cmake" @ONLY) include("${GIT_DATA}/grabRef.cmake") set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE) set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE) endfunction() function(git_describe _var) if(NOT GIT_FOUND) find_package(Git QUIET) endif() get_git_head_revision(refspec hash) if(NOT GIT_FOUND) set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) return() endif() if(NOT hash) set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE) return() endif() # TODO sanitize #if((${ARGN}" MATCHES "&&") OR # (ARGN MATCHES "||") OR # (ARGN MATCHES "\\;")) # message("Please report the following error to the project!") # message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}") #endif() #message(STATUS "Arguments to execute_process: ${ARGN}") execute_process(COMMAND "${GIT_EXECUTABLE}" describe ${hash} ${ARGN} WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT res EQUAL 0) set(out "${out}-${res}-NOTFOUND") endif() set(${_var} "${out}" PARENT_SCOPE) endfunction() function(git_get_exact_tag _var) git_describe(out --exact-match ${ARGN}) set(${_var} "${out}" PARENT_SCOPE) endfunction() keepassx-2.0.3/cmake/GetGitRevisionDescription.cmake.in000066400000000000000000000024051276304217300231420ustar00rootroot00000000000000# # Internal file for GetGitRevisionDescription.cmake # # Requires CMake 2.6 or newer (uses the 'function' command) # # Original Author: # 2009-2010 Ryan Pavlik # http://academic.cleardefinition.com # Iowa State University HCI Graduate Program/VRAC # # Copyright Iowa State University 2009-2010. # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE.BOOST-1.0 or copy at # http://www.boost.org/LICENSE_1_0.txt) set(HEAD_HASH) file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024) string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) if(HEAD_CONTENTS MATCHES "ref") # named branch string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}") if(EXISTS "@GIT_DIR@/${HEAD_REF}") configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY) else() configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY) file(READ "@GIT_DATA@/packed-refs" PACKED_REFS) if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}") set(HEAD_HASH "${CMAKE_MATCH_1}") endif() endif() else() # detached HEAD configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY) endif() if(NOT HEAD_HASH) file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024) string(STRIP "${HEAD_HASH}" HEAD_HASH) endif() keepassx-2.0.3/share/000077500000000000000000000000001276304217300144465ustar00rootroot00000000000000keepassx-2.0.3/share/CMakeLists.txt000066400000000000000000000051461276304217300172140ustar00rootroot00000000000000# Copyright (C) 2011 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . add_subdirectory(translations) file(GLOB DATABASE_ICONS icons/database/*.png) install(FILES ${DATABASE_ICONS} DESTINATION ${DATA_INSTALL_DIR}/icons/database) if(UNIX AND NOT APPLE) install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor FILES_MATCHING PATTERN "keepassx.png" PATTERN "keepassx.svgz") install(DIRECTORY icons/application/ DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor FILES_MATCHING PATTERN "application-x-keepassx.png" PATTERN "application-x-keepassx.svgz") install(FILES linux/keepassx.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) install(FILES linux/keepassx.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/mime/packages) endif(UNIX AND NOT APPLE) if(APPLE) install(FILES macosx/keepassx.icns DESTINATION ${DATA_INSTALL_DIR}) endif() install(DIRECTORY icons/application/ DESTINATION ${DATA_INSTALL_DIR}/icons/application FILES_MATCHING PATTERN "*.png" PATTERN "*.svgz") add_custom_target(icons COMMAND png2icns macosx/keepassx.icns icons/application/16x16/apps/keepassx.png icons/application/32x32/apps/keepassx.png icons/application/48x48/apps/keepassx.png icons/application/128x128/apps/keepassx.png icons/application/256x256/apps/keepassx.png COMMAND icotool -c -o windows/keepassx.ico icons/application/16x16/apps/keepassx.png icons/application/24x24/apps/keepassx.png icons/application/32x32/apps/keepassx.png icons/application/48x48/apps/keepassx.png icons/application/64x64/apps/keepassx.png icons/application/128x128/apps/keepassx.png icons/application/256x256/apps/keepassx.png VERBATIM WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) keepassx-2.0.3/share/icons/000077500000000000000000000000001276304217300155615ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/000077500000000000000000000000001276304217300200645ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/128x128/000077500000000000000000000000001276304217300210215ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/128x128/apps/000077500000000000000000000000001276304217300217645ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/128x128/apps/keepassx.png000066400000000000000000000217231276304217300243220ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË#šIDATxÚìTW·ÇŸ½{ÔÄ^PDAŠ€‚Ø@ÅJ»±bÅ{Kì¬(ö^#±FcáÓ±7콂½¢ØöÛgÜ ÆûÍ™3wæ^0ës¿õÏ[o={gÿfæì}öÞçÿà«þ‡õ?ô ÍUõjj.j+êê*u µ…Žê€ª‡*ó€ŸÃÓ¢ª¡&£.£À . Æ£\Qi¾ðe:=#ݱQ¨8XI·Q³PuPé¿úŽO‡êˆºÇsš•ah‡Jû€T½×Ï  •uåý€”s|eÔn­J“& T®\š5k={ö„ &ÀòåËaÏž=péÒ%¸páÄÄÄÀ²eË`üøñУGhÚ´)ØÛÛ³Ÿ5„m(»¯XÏñÙP‹PEÎÈ!øøøÀìÙ³áÎ; ×nݺ3fÌ€ZµjAúôéµ@ðžÖ!Y¿`YçEÝé5‚+VÀÓ§OÁÒöèÑ#X¼x1øúújáªðW,ã|wÑʾzõêpèÐ!H)Û»w/8;;kY$:~À˜ó[¡Þð.r¹rå`ãÆöñãGi-Q´hQ5^¡š|@_2g<ïÂæÊ•Kz¿¿{÷RÛ^¿~ ãÆƒ,Y²ð øˆøó˜Ás~™2e¤•û—f‡†Â… «= Æ}@ƒ(±Jb«ñǃ¹ö2ñ9ì¿¶ Öœ˜ QG„ÿ„Á mAÐ5º6„ýæ C¶‡À¤½=`þ¡Ñðë©HøçæNHxû̵۷oƒ£££!_Pw¾'ê­ÒÅëÔ©“Yü§¯ÂîKÑ0ñ?=¡ýjh³ÚÚ’Ú­!­u‡ök«Jê°îsu^ïS÷õ…?¯n†o´G¯^½b9 ¨Ê_Pv~1Ô}¥ ZíÁË»¹8´^UZ¯tû¤UnÐf•»"í9ÈÕñWX|d,ŠÎS×èZ}&Jóë¡C‡<þDeÐ ZsÔ%XA/PóP9R€ÕJŸÅßß_º›Dsi#t\SB—»BKInz!@G‹Õ{S}i ²ÄÄDpssã]çY¨4¦€6) «¨’)àüšJßÖÖž?jöáãXrh ´Xê -–¹B(J€$€iHcçƒÈîÞ½«¸¡ÒÊÅAúZuN.ÜZº*nEç§A6ý»¹sç–6jÔìUâ ·³'„,­‚rU‚€°.sÿ ï>¼5;xð dÊ”IéúÆ 2È”^Úâ&”X‰‚ÖUT+¬ô7·oß®ž—} „à%è|”Ä‘Xcc: ×QQQ¼ëÛ€Ö@YQ™©¸%½)Ò”JœÊ–-ËR¢QΜ9yòª°ªx®(½÷Õ,ñý´¹5-®Á(€9¸[ ‚iõÇõÊÕÈ·¥yõùQyPß ™äÈxjú Þ¼y–²³gÏBxœG´ ½LÿFÚ´iáÌ™3 fÓ÷…ÀEU «t†‡b­?=Ôì?þà]Ûn¨"¨‚Bvüu`}ÈNŸ> ùòåã}ÐXF«œŸ“*rA®Ö­[ƒšm8µº .¤‚P$]á!_‡nî5Ãl¦Òu½Žª„**LdEeHYÈŽ?yòäáAp •× ]LoÆŒáÚµkÀ³Ø{GÑñ®@˜Yáa(þNßa¶àRŠUÉ6µ¿.¥ ézˆsqÏoªíð*†£‚‚ô:Èœô*H1ÈŽ9ÂvÝxCå6ÀÓßÉʵxöÿçÇ­¡ù€"Ár–šAÓi•áÛò9Ñ9ÉŸÉ´ (Cæt`ßø;h‡ ¨Ay`0¨Y@@€Ò5ÝK©ðJ”Í›üH(|Q[f”êp~nÔ;ÓjV~ųWwIΗ0…0… ÄL<ÂJC†,é þüRæqÆ ÒÆÎû÷ï¥5É’%K cÇŽI@ä/f:ªBpíñYµ›‹·OàG™Ý²ôÈ‘´HqÈöïßÙ³gçAð·¹C´Ö¦¿ÇÅÅE5ÙÓc]3h6ßY‚ÅfB°!Àÿ»¤gþ¤è#>>ÔìŸþaQû÷0µûÙp˜¼·'¨Ù÷߯t=G¢¼PiQ˜+é5`. ‰¯àØCI:nª›L‡áÖãšJ ²fÍʃ`*›l0ý?ÿü3ðlçùß é)ÔÀ;Eª+BP ü¦U…ó÷΀Ȱ—5_ð ØŒÊ¨uÛ—= yöÓ¶žè|'.€öð ¨ò©’wÑ¢E`Ä‚ƒƒ“¾GèEVŸ˜<ÃÂV¥ë·UeOý¹uPÐ ÁÄO4œîãÏÈÖ¯_¯Ö-ó›R÷,Ú>­ïÿ7ï^CÀ|whåă@psÅ«Jïo)ëiÄ&Mš”ô=|‡Ú*0h[ ðlË–-J×îl!Xœ²‚YôÀ@aQ(ƒÀ®ÜWÞ®^½Ò¥Kǃ`-* ×Lÿë¸Q²¯@#t>ð9óDˆÃÃ\E¤ˆ†ê ôÛÚµk“¾‡sh1E~XW»8zô¨Òu»ˆòE9Ë#}ü\A7fT‡«.Ȱ9‚mâð X‰J+ÛûODIZPòìø­ƒÐhޓӧ€®ð0ÿMÚtŸR±#6|øð¤ïR¢j>nª˜m_+Ù½{÷”®Ùšuà‚*…ʧwS2 ‘‚ƳjÀõ‡W@dø.Uë¤]  ä*^¼8?ì<¿™`a€ôÒg•?˜ŸŸ_Òw)é‘»{xåQ¬r’ëÃ¥'è;Y(Xš¶Š³é@75‚f‘µ0YtD6wî\5棜P —»»;ðlݱ…à?ÛI¾ð0wQé -âôÚÛ·o?Û:wiYŒ»…|ôöàY¡B…ûPnɹ\xܪ 8<$šÏ®wžˆãåÈÈH ÔÝË žÍÙ7pT†`®“¡ð°¸G¾¤úƒ}ûö{ü“p‘»…sùWà™“““Òµ C¹ÓžÀ·¨ìºöVü½( ‚ª!šãwŸÞ‘M›6Ms¹YóæÍùO”}¡!€‰@!$áaåÉ ËKé]ÍF‹7Ó(ÁãÔê ;ª*ÊF?dKöÏû‚1™9¦à¨ºÿì®Yᑨ­›gÑÇ—BÃHG‚ÀÉýá!Ê{x…Ï>G“&M4ÏÀ°•õ'~Þ¬ú}Nq©îW@(M:+—´+H<4ýǬìXd þœ-ƒ€Ð‘#`j1·>Ü";v¬:ÔÞͳ}—w08‹¹çýì³)R„íw¨ÖôM™2E1î3ØV¥Â˜¿Äíf¥Eà[Tcy:XÀ~Ó?^©R%xøð¡x‘¶g†qx(©ÕüððÅ}Ù¨Q£T`UG<;wï$4 ˜ü“!ÐÈ!h4Ý2fOÿ_SF<<< wïÞ,¼•vAgΜ íÚµÅïPÒ3Ÿ Â˜âÍË ùLTøVmª©k6rw„"€v&U‚Ö üáÑKq¯X¨ŽuaÝ3JöàE4˜å(€ÀXxèÒ¡„¡’ùLPP”³j…1`n"è’ß n*üY¢é=6cç$ãá!AÐvacxòJ Þ€¸«Ž¸… fWù ZZ4<,WßÁiÌw~æo2€÷[aqé[€g›7oæÌâÀD«Ã—JÊÕÕž={"‹øcœùLP† Ã¢fð,á ˆ¬OŸ>ŠròäÉÀ³›{€ ‚¹ú ðÂÊž,¹2hvþw¹04vÒTa¼òøTsÃæ¨FJ‹À$Ñvá+¥WµjUxñâ…x¥¾í'‹„‡5‚ŽKàùkñÓ·_M?¯4Ù‹g»Îm"8pÂC=9‚Ƹ&(êšÒgNÇu|¶|™À©U1YY™¸õl;£¥¿³å¯ÊE[†¯•>¨§§'¼|I­J*•¶ã·Ž4—ã …ç¾ùÎ;Ë?+«¬Q™ìñÏv•C -20#Dùþl.íJ@I¯üPÞ¯xö* Mg8š]fÞu½·jAH¶lÙ”‚j Ï*@ÔåMѪY³&$$$!³y¨~&~A×å-°ió¥‚öíÛ'}ÎjÕª©Nþ½µøÍ¬lò*0¯0w!Gîç—„ýþûï¼’°– ›AÙÔʬüP‰JÔ©S‡M±¶XÚ0ÐxxH„­h…’üÌm‚°. Ö;/Ü’ÝsqÔG}‘þ-dC ¨gâøE¡]ºtáu ‡ |PN¦ÛÁjøófëÔ­[—=n„ îo‚IŸ 蹪-¼~› ‚@ÓZeÖžq KA`¼ÂX#ãv‡é) @ò*‚D45m¸ ±mKo !òk¸ñð 賺=¼yûŒXÔŸ“ Þ t>Š@9 "+@°Äü.äËϘÛòš&¤5¡9PßI¡?… Eô¼ç[a[˜jöþÃ{¸®§ñð è·¶$¾Ó׸2ÿ¯ðÅÒíz(S€ ƒtv!OÝ;@OkØjši@;6²î ŒætÞ´@}P‚Ç  G­½ÃUkÿ5a‚-dí X×Þ¾Oslñ™à;Í@q °~x¨¯ ¹Ý*O¸óìšžæÐ¹¨`Ùû¿dÒCÌ  ‚ÀÀ@iBÅÐao!|UM9‚ê‚Ó è0x‡¿S‹-?uÑùLÀ‡@’ W‹»÷]Ùª§=<޵jjÒ–[Þf.xó„BBB4@½Vv´HŽ€i؆^ÒÓEÍVZ>S˜Ì‡@Z¥ÂXÁ²ÃzDÌ¥-àú(7^s¨:ó hÕª•´W³7øþî¾¼½EÂC¦‘Ã¥u†’­;²¼#ìÁ'ÂÉ«@ˆ!°`x8fG¼ÿø^ψ˜[t÷7CբŕÚÃõBÐCÛæÎá{+ùnKÛX ‚Ñ›ûK‡Ü¢­€:¿Ø3t@úááÀÍ¡4NVר鲻ßòÿ…d"Ò¡ÒÉÒ›ö½«C@Æ·EâiÌÖAI•6Xµ§Ø3ä$ wQÈ­ÁÄÝáðú]‚¨­œ×Sy Õ–B¿û—/þä#bŒBПkUKñþ°¨…ñiü¶¡°ùä:¨3ÅáÿƒAxhx Y Á’C¿ÈdœÚÿï¾ûŽw÷§ÐÝUEöîÏ)c±aÑhƒy°Ó²DöâÍ h¿0ÈxxHª5Yàó§Åð0`nuðt„‡ª0Fµ^î…s ¢5•Žã^‡ZK} JåW£ÄO¥Q€ ΃€uêŠìùëgÐn~€Á-dÒdc0‚æÕ€«/Âí'×aä–ž‚ðÐX…q©š»Ù5Ðj£Gæ9ÿ -̛Ъ߉7Ì:ÔÎä2dˆŒ•‚µŒj¬»ÂX;Ê‘A³9žØÅ <»õøÌûëh± –®-äfó\¤é$Ñ'iw<íócˆÍsþ[ÔJøÔ¦-_š ˜KéÑo5‚)<FŒ"{üò´˜ÓÐ"á¡)bxØ8²œÓÖÚÍi×]†m±¿Â”]C¡×Úè°¬>ÎóÉù.Ðv™„¯…1ÛûÀì}cñß®ÃJÞû`®Ý¿ŸûÎ'E‘óëТ¯ ÈC«þŒòG¿Õ ¦¡€¤yx™Tégp Y;fUƒ³8ÉĨQ¶“SÆ-66J”P­2ÞŠj’tç';?¯‰óÓ¦(A$çCkš uÿy<Ìò5Š!h8gÝ9_’aJMúP›§øµ‚|µœŸ]i8tJ†òÑÜÊ]‘Å=»Ífúp 0¢ü¦»ÂÉ[Gà‹1*ëƒ-ÔîúDÔdÚâõ¢_Y‘óùX‚E¼/Ú>Evïé¿VÇâáaýiUpÖáAøRìÔ©Sl¼œ¨|ü jÊ—jüäàycáyJÉ;—ó¾{Ô‰ìΓ[à?­¦¡ðPÏ/Žpøú@¦[CCCÙì"*†µ Ñêgú°¿a:…7ý»-öÜh{·$…z¹“ßùç§"™Q»;a2g†]»vÀðN= µ&8QŽÀ2áaô±•šŽz§E+·f­çl†Õê3üYi`PPäÈ‘CëññÛigÏ‹æü”§áÏ(ÎÏ*Xð¥Ú+ *’|–ã¢n'n…Zãu—Š!؈›F"»~ý:+VÌ\©£mÛ¶RŸâœ9sXK–4ÿÁƒRèvâÄ é}>þ|–Àa{#¬˜–ý¬9íb'Qat×»£ìé‘ÿmîä ,Çù©¹JsüÙpH‘¾}ïü*àÆšOQ–† öd{Øzj=ˆìÊ•+œŠ[«éeV}iÜ»ÝõÅå|Ó÷=Óqr(¹IéËá0HMdzÇÞ9 µ'¸‚Ûè ÃC‚`ûñça'ŽÑQmÖÔsÔZá× ÄŽª”ì®Ï‰Ê‚ÊÈq~ê@*Zé âiA%²ówc%绎²×Ѷrô4 Š!Àíãg·ˆ?×ùóP°`Akªƒ%s¼+ª…wEè]Ÿ+ù®ç<òSúPk•¾(N­?"»wêLp‡*è|APCªÄ°‚˜óÛ4eçðKÜé1ô˜oJíx^&Ž/&;ð)‡à®×%k8 ”NîZ±bˆìrüEðžX \F¢óQIŒV„ÀbÆâ&QeøóâNM1{Þ¼yE+÷'º'g¯EͤFÍ@ºÛëÐ;ޅº2¨¢äø¼¨œ´ÂÏÄ9Ò,ë/ã9Ÿ"²«÷¯€:ßyDy€9Xn ™r]ŠÑtžFÊ 55˜ª¦zP‘f Jßz£ªÑâ®­ì‹PÛv¹ãM÷q>ɺÙ>ײ`ÁÙ‡×Ðùžà4¼<@W€ŽÈ@{ŽÀ' þ¾²×è!Xw齎êJ:M䉙ã ÐÊ>‡Èñ–”¥œ?ç|‹ìæ£Pw¢—ä| €$l @`õ˜ÍùâÒ$,‘Ý~| |'ÕÇaå™’!¡Á¨Ï ÐÜB®‡ûGo4zÖuª %<èî/!Ïä x_h3xΈˆ‘Ý}rêO®•‡–c2 Á!U|pÓˆ†¥é,šÎ¡¤Ë¨Nô ¨‰rL.Ù¢ªNh÷E€ö Ïùl¢§ÈâžÞƒS¼ÁaH9|\xðÃC‹n!ûMwƒS·‚ÈbbbÔÁº@E›õihG¡¥ti¥ÿÀŸ+Hb“¦/ i@IÆ ‘=zñGøA¥A6Lz! ̳˜sÆ+ŒýgVƒ q± ²M›6©‚u@µ|Δù+L¡`Ö”‚Àçå9àÀ*}C“© ¡â@¨HÈ PCÅô]zlgìïà9¶’E*ŒÏòÄÞó ²èèhµC°ŽÈºwPeL È`m´: Ïù}ûö‘=}õšOkv?Ú€@Á`ó pFºlûéÍñ ã&³ØùGµ¥vÖ!…È EY’!H%Ðúñœß«W/qËWÂ3˜Ö*üXì$¡ó!(÷•yFlëÉ èüŠ©0n©íü£•+WªAp@ÖÎUU*¹£‡ °Rd r~/žó»uë&.}zý‚¦7Ûe¡* €©’ÂW†QÛtüW‚Àx…qóÙµ0›yD¶téRµº¿}(šäå@µ~ß&wôZ5ç‡ñœß©S'aïÿË7/!dfØö/Ë0€“# øÉ˜©S§J<"‹>ºÚüðAÀœÚØêuD†û"j‡`ýÕRÅ•’3…r‚0ú¦$$&@è¬`(߯ ”g Ú"ƒð|ðP†¤“:®^ß•ë¯0Ta,‡ x.;ÿè ‰¦z¨A° å§(ÊnÈ€3Jÿü6ɳudK(‡ÎG 0YŠ!Ð J*ä¼qC|W®þg‰ÅPCæÖÅf–; 2Ü'Q«%ØŽò¥"P[µþ~£Ò<Ž&€ ‡?µÝlú¢óQ|}h€T²dI©´[dËÿ^ ˆ ´C:¯¶µÝ‘á~‰[PÞT(Rö³#ßi¿À¢ òœ(…ÎO|—í£ÚAÙð2`ƒÒ8<ì£ùnwîˆïÊÅEY¬ ¹Õ‚xmj;ÿh̘1j  ýfüe´Tn@u[·aÆÂ9ÀïÞ¿ƒ.ó»HΗCÐW®ðP$Öp¯á$´ék@m·¨1<~õD6räHÞç>‡ò¢á÷” Êli›þáúõë '³ø°…aPºwi&ÈÐAïå: ÙÙÙI;"‹ŒùÅbCª~XÒçÿ<‘á¥ÏüUDÅ’Îýç„„zxlú‡ñ(¡ó{.î ¥z•B•æB`£‚ æ@`’½½=KádOæüO*­΢°Íœ–póá ,»-éŽ@^>ÔÉÑÑž€J®|©3§cÎ!x[áÂÙÀá«:iƒàßÀ¥{—Àsdu¡NôÇ´­ÎÊãz€ÚNúÖt·ûS…¥U©5Ë‹@àB¬©†½šGú@@dÝÏ8û“‚æHb³ˆôàAmd…ä[ÂVÀÚ†³ÔjãŽÒ­?½¿ûÐ;¼'ª©;) Õôµ]Òì†t·{’Óí(œ*MïT{z¿ÖUœs@jÙ²%•ÃYÉÄxÊÈi1ÐÒ¤8âêØc²»7Õœš'‘C üHõIõP¾äHoj¹ò"ç’㓦q¤ÕtaT úÿ¹ÑÏ.‡—t'lé3Si˜eH›Ò༠µúøã¨ötû“SjÒ¨†r'g¹’ªPÝœ3É‘öÎíɱåP¥Læï|C1¥V‹Ñœ7zZ,‡—Òô@U·éRœ¦æü“T˜Ú„áAN­„²%g–¥M‘Ò¤R¤’t7'‡E}OÌü&ów2ÓÌB3¿‚n¹à8¼@~ô»%Hz–àŒ@µö¨SôÈ÷§;¾ }áRä̲Gwæ4R>R^RRnÙž9[6'=)ÁÃw‚`µà8¼”ÀËZdJ p:¨Z—l,Ýù é‹:¢läÓ³èKç gf“)«‰²2ËîôŒò{2¥C¥@°VpÞ¿€,4ÐäÂ+6ýÊ"Z¸p¡ZŸü9T[™ó+'OÏJž)sd¥ç(‰ÓÓ((­_T´ø-¦2eÊ(.e¯€Â– ;­º!t|þ&Î/$Ÿ†Íq&GGs.”;TU‚`c*]£w¨æò<€¥9) )¬Ë”¡k¬Ô¯t‚@š.„A¶¤ÂuºDá®;ÊÆâ™@zœTDýsg“0EÑ‘$RPDPBŒ„¤Q£‰Àj\„#7㺷àÐÈÐÄ  p`âœÁËKZÒBœ1}÷Ýöµ·ôÿŸ9õÁsþß)¡‹ o‚ŠÁ÷¯sÔé××=V©Fþ§P®EV®šÌ¡¨wÃ=Íï‹·ýÖljÃú‘f¼ÐœYêôËÂÒWjèµH¿  ÈMÜuaxæ‘ìË0|‡àÓðfxO— ‡¯_}6:ŒÉ"'(3ƒO¸_yd+œq&Œ¹Êu …F·à¥É†‘ö€¦w9OÏ5½nP4‘ ~TiÌs§‰!Ú†ó€´%"¾mr³ç"dIn|di~ü&@#N”#a:Ž”F—&-8³DÚÇœ„®Ú4"ñx¤NY Ù8F(c†]¤Î¬ö£®QñíŽÊåS¶æ/˜ 4`…qUÀÀCMiÔ4ÑZ ‡Ž´‰³izIoíx¤FUà2 YÅí9æ_ S’ß®ëuñ±ùÚ¿Äñ&9þ õl(}Š`Õl‘vÖá7û¶páQb^”P¨cHA: ) D·${–¢ÔÚ #4šJÇie“|Îr ù mk×pƪIEND®B`‚keepassx-2.0.3/share/icons/application/128x128/mimetypes/000077500000000000000000000000001276304217300230355ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/128x128/mimetypes/application-x-keepassx.png000066400000000000000000000220161276304217300301350ustar00rootroot00000000000000‰PNG  IHDR€€Ã>aË#ÕIDATxìÒÁJÃ@Æq7)z©#¶¡oP Jûþ¯Ñdf½_d!Ý ©ÛlÁøsÈ~ÿ;qÿØE9ÀyÎp.@µ›]¡X¸ îa OÐÀ³»ºFß{©ï_Í.À¬á6°Sïîjvj£ï¾ÖÂÜÔðoâWìú÷×êÙÀ¨¡­à¨ë¤=†ÚV: ¾£1D_x fSL` Ñ$¤Æþ¯ëÙï4x×þ; ` Ôæ `/°ܹñíá3Žn›Ý%aÊ‚°×%XÁAp9‡/<øtƒ0CPfð+€¬Jp\§ÃS ~ŠSˆ~Äæ11æÅœSˆÎâoÆ»PÏxS àx ˜Ãƒ=ü_G±”iAX!@2¸ýr ÿIÞy@Uu¥oŘd&¦3f’É—¢FT@‚Ø{/Fì]£Æ˜1ö޽`TPì½(bﱈ½cADQ°£`!&Qú|çþçfß»÷åÜ#ãZæ]ëY+.÷žóþÎÞû-{ßÿ’Ó½ÝLNÆš5k0eÊ 8íÛµC5P®\94mÚ½zöÄÄ °|Ù2œŒ‰‘aÈ>N €£ó¸ÑÜýà•µƒ>´Ò£W¨¤ÄDÐá•+WÆo¼Á‹wX… ¡ˆŽŽ¯Íh-áðúÁ90p¾yÇgÃé½´öíÛ‡ *àµ×^ãg[ü1Æ‹_ÒÒôk¥ŒAPCà„¼zÇ¿”³ÓM*áüyçY:þõ×_Ç?ÿùOxyy¡^½zh֬ʗ/Â… #_¾|Y‚ðå_ L›":΀ùáÞØñ¦žž ñ3 èßo½õ–Òq1bbccñìÙ3de÷îÝCXXìáçç‡ãÇŽ9‚³ ^Ì/ÞYKéètAŽ8ó±­ÒÓ³TjJ ªT©"9éí·ßÆàÁƒqåʼ¬=~üëÖ­ƒ«««ô÷ßyç¬_»Ö0²P/ ‰Z£§Ûø©ÎÂÉšÓD=vLt†¤¸¸8|ýõ×VŽÉ“':tè€äädü·Œ£Æœ9sðüCšN~úé'^;ï‹ý{&N €ñ°nÞñfNç: ]»váƒ>°rˆ‹‹ ‡y¼*ãpÞ¥Ki4øöÛoÅ{d óý§ÞØñæžaG\ì}ôÑGVN¨Zµ*Ó¬ÈÊž<ËÀÉä}Ø¿a'‚1ýà „ìë…ÇÇ`}Ülì¾´wÓ¦MãÓ/¾?§ýžCàt˜ê³ïxµÃ uïî]iNîÚµ+þøã¨ì^ æÆLÝ?VWD»þh¿RÓ*tÐÔquiPß®ùS#¶·Åæø…ø=Ã>PÛ¶m³y¬·†€RCà\9ŸÄÆ?ŽÝÑљڽÔ•öì±èÐÁƒtØË9=#C¿AƒVÎÿ÷¿ÿ {vþöI ßÚm–—B›ðRh«©Ý Š:ßF?l¨Šˆs‹µ‘ã1Tv\»'ýë_ÿ\æËÇûd Ó <éÖ¯?¦•7o^ 0€Ó¬Ó%qÁ%þmføTOþÓgO0óà´Zæ‡Va~hVJ†`¥ ®R߈†¸œ•-_¾Üê3}õÕW„^|ÚyíN€H«0¼ÇÄÄà/ù _”mµjÕŠÓéžï·sÀÕ¹B†\¾›ˆ³7co£«÷.Ae*lƒ R:žbˆ×²eKËï–(Q¶¶'1ó½)#¤È Ù\¼ýᛘ?>ìY||<>ÿüs¼“ÿ-´Õ^'0.ú;ØÚŒ3¬j ;†«W¯rÈ]tYÜeƒ\Q.È åÇkúÉ 4Ušèmg7CeL±R'B0tèPÉñ?ƒ8u >¶64¢ Í#” Ábû®ZŒ.ŒŒ‹Yfú\ë~")¿_…hׯ_·º¶=z`ÿþýHLLäb0wЙŒsÍ„€hª @°ó\$T¶sçN)¿0zôh:];{Äß‘B¿¿!`ž/ ôQ€ÊÀœ jsÓF£·ug§ˆ×ò¼†Æ¡žVlMƒ­±ÿ@ÿÌl6aáê¼ɤ¦¦r!ètØËÕ°¨%ÊMåTÖ ˆ>•EEEI Ìô‰„ Y¶÷Þ{OM.F¢á\/|3×Û92ðjý9J—. Gm„ àç(ó]A+‚¢»ÂÖºwïnùÜ,Wsp6.޽ lq~è|ª‰ÀXWûLpC•IžØ{aTÁ°Î ‚ÐùÏ4Mœ8ѪÔkk3÷EÃ9^F(ÃÃ/Ëæ˸ŽÚ–-[2?GµR^๶müøñ–ÏÍ4úÏ‘‘ˆ=})·n±Ðé¢ÉùŽÐ¥ €A‚ª“Jâ@b4T¶aéc—åV®Ä{õêeù·J•*ÁÖFÿÜ f{|#@ . í…‡}™luÔØ]ÌÏQ è{R¢è×Ç÷ Ú’%K,Ÿ›×¶eófœ:yRœU•.#ƒ™@cÆ×!à(`½(!öÂáKû 2öë‹õu.¸fÏžÍOË¿1°µ«[€4˜£Càm|æý8­pÑ鈵hÑüËæ—JÈWï'@´íÛ·[ÍHàĉìRâö:N¹€Àu}àO$äÈ ¢Aµ`o½|* — 3ˆ l­Í⪨?ËËuxèð/ðï6 FF籪Éß÷mó…TB>“r¢±+I`úôé`aíÆ9:ßÒŸ¦£ë’v֌˂ê“}sõT¶téR=“&©“VC°µïÃi”TC0/k*ös±”«ùÄÚ3®ÜÝÜÜþ¬‰Œt•ª‡I÷Î@0)zažÙPÀÌfN€Eý"ØGÏ“!xò]µ²@PÆwÔÐ 8uíT¶`Áe_?{øm-pó÷¨7“h"\…‡œÏõѦgÏž¸vítcÚ–Cwþüù-Ÿá_(KÈwÞ„hbö’›S“AÌ8=bM^\…SuêÔs÷¶ö0ã:-l!A GS|{# ãü/Aàëë [ ‰º/ AíñîÈ“×ê}¸jç&éýó¾•B=¥ê!KÈì5T-)¦¿ÙZîÔØëÊáV¨/¿üR¼lÉR.œht˜ß4‚±ŽAP{J)Ä%Ÿ²×x)¾/SÈR÷Ϫ˜¨;£¤ÃÃ2?Æ›ù2çw{zëݼ¨ÜßEY=ì[ëß¿¿åµŸ}öÖkp#É FéN@–9Ì…s+•xC5j¤lÅúýñoh;7€8‚:¡þˆ¿ •1' ¾ïÑ£G!Úµ´$Ô!3€&q= †‡Ô ñÀÇnï3Ógõ~üùSÏ0£¤Ýòò““ak5kÖ´ü ®6nÜÈE £N-̲æ(VÆ ( Þ†hÊmV¿¦ßGë9  AÝ©¥‘r*û9´ÚZ·ð&v 0h¯©<ÐÞí¾@•!ÅÐt¾aÁ¹Û' sýb†“ÙT&‘ØÁ¶¶ uúôiüýï·‚€±9Û¡líþ£_Ðrv}‡ÃCBPZY\L=•±NP²dIü£Ullåñù¨3Ýóå!0[BZÊzl¬‹g/¬Î÷â=bIyëÖ­8sæ `- g@±#®Š©¶mÛ*!H{xO«¡×1 A9$ÝI°»OÏÖ˜‚·µjJ_P&ÃCã²Üa¼+q=l}â‚rñâÅ`ñ‹Å Û·os„àµ81Í™ŒgmwåtìØ/^¼›4¿¦3k;˜#pGʼnîh8½<Øg`dl5µ¦y¢6• GS‘©²ÐaÜgSž=·^q…/v.³m}ÅŠ`98))‰;Ù”£ ÒH}~lRApû·TL¯ápxH¾™QQ[à]ÊÒù¶ AÍPÔœêi !0#0j.=qc/lÍ-â=8p €|hÄ÷8GÀ0-^RŸ_·nÝÔÙ´_oá›iÕ+i̬ŒëiW”[½‚wŒÐò¨A4Õ2 ©² ÁªS³`kœßÅF¶ƒ±(´cǰW0%%EŸÿs[¼XP‘:`Tvó~2N­Â©À°„¬CÐxV$ß¿fåüÉ;F¡Úä¨Nt¦ZA`wQXßTx¨†`®^àdkß}÷Uö/00\ÒšB/]º$ÿ¹Š”<,A„ OŸ>PYò/×Ñ ´’Ã9BÐtN5Üúõh¡;Ç¢jH  ÉÃ>À~dðÒ%äÝÀý¶ÆU¾XÃðññÁ²eËøôë«ô§?W@±gŽ™:iþSÙ5mX¯7¥‚aŽ ¢Aó¹501jª— dBÍB`><\qb&8Ùw‰ ?—زyófp­tùòeñéϨ! íR³'‡A•]¹{ u&—s8<$•'eê?T °, 5-9<3ö¡á,?!<4AïõÍp:ù0TƤNÑ¢E­®¹}ûö,þ°"ÈÐs?Oxús'ûü¤fÏ‘#GBe—î\D­²Ž†‡2!ö!X~ttK{tóöOBÀœÒò¢²t[Õ;Öƒ¹•qHg—’x­üyåÊ•leö”©_}åϧ?÷@EFF2*eÃT–˜š€šÁ¥åòxójñ¡j‡¥ÿ‚ȸ՘³†oùÃêiÎ÷!h4×—ÕÄ€í±"f6.ß»€¬ŒÃz±bÅxmbó'ËÇ ™5eØÇ}ÒПë 6mÚ$5{²«Ve )ñ¨>©”cá¡Õz Ì? 3Æsî§§‰«z#ãª^J‰³XƦfüè|öpÞgÖOús(›=YÝSÙ¹›qÆLÈ‚Ù{'áUÓ¸Ìsè­aº¸โÜðÂ?Ÿ|Ñù|ús¦Gµ¸’nëü*;›|U'ú©ÃC¦E‡ÊX²Î®Ñ‰cÆŒ‘ö5Rì*æjŸ£Â¹sç8çëÛ¿Ä›ÿ](v‰7ÙCn‘RYȶqÆ%d‚IL—;’TÆ'ÖÛÛ›%e&cL9#[âÄO õøÿ8ä³a”y~Æú\ðqΟ«0‚ oß¾ÒéšCÝQbpM.„€Pt|4ânœFVöó™MšãÝM•ƒ~¬*ú0‰#Uöøóª•+±_Ë[ð”Ò[7oê'{ЉÆÎ§t‡ N§œS£Ûø´‹ÎçÖn•I:¬=ù%à6¨Ü5ý‚!YC@Œ,âôz 7GÃCŠ]EÊ®6mðÉ!psue-ƒ?BÀ(€#Êñ)µó9’PÜUåÄÕÀ,ĆÎób ÍySeÇ/ƒW` ¸,7Mî\²„à pÀ6ž\ML•ƒ·TBÀ¬¿,R„€çrc'¿÷àâ… Œ8ˆa e=Ä[K3’³¦N €AÄ–-R›cf•Å]ƒÏ’pé[E €ÁÇ!8sý´tº(ß“GÏÛûV°ð#‹L…‡„`öž`»-_L ‹×ëïïÏãÞp"&×4HAèÉ!;Nç“.‰)dŠk)çÀÎ(µu«Ôè9iÒ$¨,>9^s¾7Šô)œ €Aq5zd †‡v ØŽÅ2¬Ê–œgºÃxþ~5È<Úõ“O>¯›µÖ5øþŒ ¸(äÓÌ!^|Ò%‡ "4ï¯óŸ‹ašT¼ Ì÷«,áæyøzãëÞ…P¤wa€¦A2FP<«€9z•-Ü?Ët‡ñâƒÊ©ŒÙ@~q´´ßáÈ‘#z¿¿þU0ÒO _-+},ˆN €à é<_•]L¹ß@_îUˆ²A9<4@hļ ­ÌU6wï4Ó,;2Çîiáâ—f¹»»s# Ο;ÇĘV¦£¥ï Ô.:þ7]™GÅ9?ü¢'ýÂY"UYRjüýP¨G!êùè%»Áo¸J ÷†ÿM#½QZS™Q>(3ÚñÉq†èEÕ*›µ{²éãÇ@a¬kˆ‘ÛŸÑkt®4ÄóßtÑáº8mP„Åypð È+w® T ?¾ú± ö(Hl (,AP{BuÜùýŒÍŠ‹5Ç*›¶k¢iÖÄ,1|ÿ•+V02á¡O¬ð©–†x‹Ã§ßÏ¡áï:7”-¦¶ ó)‡ ¨T©¿¦‚– ¦I?3|Së¦ÂCêzÚå,ߟµö °XÄ邏…!ž?ëÒ®‹ÀPüü[µº%Ì€FÁ¬PAÐ;‚Êc+"åþ-в ¿7ˆ;q¤ž=öä«,8jÌÿoïîb¬ºª8€'mZÁªµD“‚ÖúÖ« ’`­¨Pˆ Z«¾èZSÆ”D">ðH$ñ#éÄõÝP”´D¡S´4¨4ÖTKš´…é¸~ô,³=î;w.÷NN†äŸv†{çìÿ­½öÚkí3¯ ãcjæú÷¥Â5~ªPáŒääÛuåâà󉙸֚^ .  Áª+gÏü㌯LDÎ žššr c{;Wm~õP‰]¿Ø>ßåáPØ÷È•€Ú@—¤ÏA¼Ï í4>×ú@àº^  -‚[·¿oöôã§¾vÕÑoÃP¾4¼©SÆÓ¶'ð³ýš¾ó³oÌKÓÍ-?)Õ€PWH·LDºG¤Ût²ç@¤6™¦ãZ·^¸7½@Šà–ûn(Ö¸gÁ®;24–(ÏV‚&¹{÷îöNž—Kðê©b;~zïåáPØüÒß`‚TD#¼$éIH©‰`çÏ󟘽ó‡ëg??zwýxƒÃ©æñirA$ËF6Ò!IO‹Oâe.uÃs‘Gøe\çÝkWuF-LôÅ‘þ(½v­²„ÌáJ{öì1¨K²EغmÅ,±jXúþýûU#^wŽA5¸c`‘>ÓÞÓW÷—'ŒN,Ý»w¯{`Í–‚ç Jâ¹z÷F$’Fîù^óXˆZðw}`Qà ¼tF%&)€öÑóÈ÷ad‡Eèp¸‚4«wø+cáÈtYzDƒjàY—kàýN—.±´÷ôU Ò&&‚ͳÌçî%­ÝϦ÷£´ñâ?ÿéÔ©g"…}{\ã5eôßIÈU;|¨¹FYB†|5øH·Ïn°X´ü>Ëaƒ®^ÖdpÍ¥ÈÎ¥W¾›¹,Ðw‰€×X¾|y{Oß:}"Ð⮩4GîßF²Bu ˆw/L 8~üÙ7ßxã–øþë/-ÉïœloØuëÖ-ƒÕ&ŸÛW:ÎʳˆP•Q5¢ÉÖÙHÏÝ·¼_?û»R<˲eËÚ{ú¾?¶tÁkñLÚÃÁSñ\¬þd³ýúàÁgoZ±âóñÝ7Yö•ó~'`pY‹#áËõµ×ªŒ'fµ>ò ’6Vt 4I&ÆÄ `5Ež€U"@<±téÒòœ0òs”S¡gP!>1m±pSð¼Ö™x¦¿ž9ÃêguàÀùˆC¾ß}K›ü. ë× f6zNÎÉ⶘Y>òLÙ^A’^ë¸ÐX¨¬]Ö4Ì <ˆïƒi'ƒ8Öͳ°p.ݽnz(›=öþSÔé°zä:xð|ùå¸îÛ¯\A_—Àš<”¹Xzu"äÛZÖ4"ȵ'ùYQ“äŽ×Iˆˆ€'I¦»Š6¡l{ϲøœŸGþß#ýù!îǸck\óíÒ½ò»ï ¢œ÷Æ A† 9ó‚Ï;•cÛ¶m>ëõò5dMŒ|ÈûGŠë™éÀ3èøõ¾#+„¼?…%”›yöqÈÿcÿ›Ã‡ÏGòWc|ßXxAü.ÇÎ˲iÜ©ž9ëpü*hAºÓç}Ï\)àã>¹Î$²Âý»>på¢tû÷âó¶{‡ÈðJæsñ‚\ĸä=r䪕+¿cûNc<œüŽ®2²™³Xƒh‰C Sôk©“ð»6F>ï{¦)Â7xiù“@yÿé <á•ó9¯@Ô„)Ê·•]‡üß=:ÇÑÜãú®’|cÞ}ÔÑjÀœÚÞØÓF Ÿ—°É}óI¹ý¹È‡ôÈòïº÷aÕÁ«‰Ösý.&!XñÂ¥¯>ðcÇfn[³fj8ùÝ@»Ë%ëÛ³Þ-ËæâLØ e ùÏŒˆö}B’_Ôåg©–ûQ‰Cˆ;ˆ8Õõ9ú…w¦½$ò?øàÌÚµk¿9>ù—ûõñƒ…)ˆ‘‘×ËêG «s ëò.nÙ6BÐïgŠ3E9`òOùáúgîX¿þ[6w†“ßuÔE0yŒõ×–ßöZ \«¨Öá ©×OâFË—ø`ÞäKŸ81óÉM›¾ãxs3ž‹“ß}\!”˜€žª kñÿYVíD0š€žž°ºöPòOù§¦§g>»eËÎÆò_9>ù]´³p]@yO5ëG|iýE±æ ù9°~±€òníßV-ó ß®ÞÌî¾{g1ç/.ÉïêB謖8W kó  ¬Õ#=~ž>mã†C "ŸËwdÜÌg6oÞa_sûý@]]´þtýÕ௰~ËÂtÿvìd Eó¾3ˆ|ÿ½°iÆ)¾ZÀ×st@IzmÙW üês?b%‡ûÂý[ZΙLmò§ã÷>òÈ…8HúkMnI›üþ `¸ SÈà/;rÒú3ú—àþ­d+y‚'ãó%ù?ôÏ\X½zõWš]½ëÚä÷Wcþ¯ä#½Ý“ßþjs&‚šŒ¦ÃXþ±æõî¼DA¾¿?§“ØÏ_aK·Û_Àøb[íÈþU¶g¥õ#¿±þ‹hʵ­é¥‚}ælü¾!ßÔ ’箦˜ãÚ’üŒ!‡üjà—¨Íýiýš5¬ý‹èŸûWœräðañA’oÿtô~*ÆèÈ/÷ó0yA”YíCž¬ÍýPÌý)Ü¿°­j¢Š%áSQ/pGŒÏ/+Éï£2__¢s¢¨  œ÷«iß&êG~“ûϵ¿ü¿„Žª!?Yß³|M›ç¢ýìvÕ»È/køz-€‹0¸]òëó=ð+Ý?ëo¿tÿ9÷§õ?Ð4mE$‚žˆ·›|BéVç…® ùÿwðgîoåý{ÓωžûÞ®]÷7‡4,«ôêõ^RšÌW¬Ž\ísÈùW€üÜö•ùãþ9Îûûb³£÷ª ù½À•Íç½³þãµ*mxÑ´›7Š*ž<±3÷x Qïw6ÊÔE·Ó÷ã¹?Ôôé- ,2I~ïÍFÆâfÞ[ôõút`sÏà¹6>xà­¥koêô_9 ¼¸q¯¶üiðºžá†Fè×7qâyþ6ùý@}*¸ºñðžáp•gN|ÿPŠ®è?òYKâû/€ô XÀ‚° €ü!+ÜjQ¡IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/000077500000000000000000000000001276304217300206515ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/16x16/actions/000077500000000000000000000000001276304217300223115ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/16x16/actions/application-exit.png000066400000000000000000000015121276304217300262700ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYsvv}Õ‚ÌtIME×  )xo×IDATxÚ’ÏkTWÇ?÷¾7o^f2“©$'‰u\4µ?Ôª ¡è*ÐEm.Ú•»Jv]A‹6]t‘béˆn\ˆ ¨Ø’tˆ!“¨313ãË̼_÷yxt!Ò…ç¾ûî÷s¿çpUk~þhïîÝ›­……}É[ `€w÷½{íÊô´÷je匪_ºt/5Eœ ʹTÎc°X$ÃôŒ·¶F$€°£Œ:@„Ïïß'ÜõØÿõEÜ|žÑóä6ƒ“ËaD\›»Ióé߀"[JÖT6óCàd‹±”‰1Í:ñFügÇ0Zƒ¶Ðbyç_éÃÐÜw²V pâ§ßÈ~rÇ+£þsÑ( Ey_Üø“‘Q[¼ò îòm ÿÞaø÷ï)æs Žñùµ[ª‡°¥„à78­2°Ù¯ð.’&øÑmÌÏß2àdÈ´š„Û ”P7ŽVŸ÷jõrNÇrÕÉ*jí…i¿–?¯ñÄ1^.ÕØi´é;–jÛuÛ-ï_7ATVÝ=óbu™wp"@Al ÐÐ[Y¦B$CõúâÂZµ·–V§;›[¿„¾_Mx¿PZ#¹*¯öâj‘R!˜‘:yIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/auto-type.png000066400000000000000000000016751276304217300247570ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<OIDAT-ÁËO\UÀáß¹çÜç<`†ÞÈ@mšTbRµ¶5Ú¤16è¢ 11¶1nŒ›&ºqåJ]ã¢ÿ€ߺ .lJƒA‰1>`¦MayHa˜;wæ^î‘&|Ÿ¸ñæ ¶Ü}nÿ÷+A£I2é’N'n^»<ñz[K–HÄâã>*ýöéÌàsIJL.\¸ÈÂÂ"ª©#qz™Ý¾ËÚæ:~{†\.W8=<`²yªq/éôéƯŒ30P¤T*£„€C}ˆmÛkê;»ç·DâÌ­ƒïÙßô™Ù\ ìþíÑÓò6ë{oµõuE'O¢º·ÏŠ#a|Èå¾u“õVìÆîž9s0Çýà_þ „YC¡õ“ý…žä Ïß´Ö< ´æYTÂh>sö"îó+7¿™¾çg^üúUS<60úáš?ç¶|ñø¯=ç ‘ö뾡µöïÔ¹sO[(´{†Z´¤‰i:zÄéÑQ2ËëœéçÑw×¼ÅÕ¥÷ýK—°Ã×óÄÞ^•;w¦?QùüCŽeY¤’IÑÒÕÅNûŸì’`°+ ‘-ö³ëþ‚ݨ áx´¶:´¶fH&÷p{P9Ž ( Q–‡”ELG‘8Œ0¤ÂCP‚îî>daÛ¶ÝàÈ¡RJˆDÂ%@šSI´20<Ý Á6‰M‰à؆e˜¦U.ÏëJe¿v€¯$©r™®­mʆ@iMSI²++ÔV×ùñ«ÏpuL*•BkMB‹Å÷êulhèĉ—®^ívƒ€‡k5´!Ùø}Žì`‘t&ÍrRÍ·óÃí©`vö§Ÿ¥”‡«««Ÿ«J¥òN6›axxäËóO<Õ­ ƒT.‡_­2ß’Óù“ƒ"ÙÕɘ瑶ï-„KKK¯8Ž]i6CTGG'/ÓÙÙ% ib[. •Â5 ‘´]Ò¦ÔÓ²±,S™ hT„¨ëׯáy ‚ F¡P ™LEJÙÚryzzû©Õj¤Ó)LSjŽi­Q‰D‚0 1ll¬¡ÔZk¢("Ž#¶·72¦^Èd2„aS‚cjrr­5RÊ[¥ÒüÙ8ŽM@kÞÜÜ:˜šš2#QjÇqe©TZ8ö?DeUÀ¬©6LIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/configure.png000066400000000000000000000011411276304217300247750ustar00rootroot00000000000000‰PNG  IHDRóÿa(IDATxÚR]L’a%sl16åÒ­«hó*4lSZ7qcZÈMµœ? •mEIÆ,~œ?aÆoÉ4ekº™¨Ì>ˆÁ¼*l+lZâU[Ð4´)M‰ÓÛÖ¥ßÙÎÍó<çì=;/ƒz{M¹¹èÔÛè›/ ~dô…®QYÇ¢%–UËŠ–—ãÙl+«+°XÍÛ5 y´ädq1-ƒkכ͉äW¤Ó›‡Cd$!—DÉÓ±¶–B,6¿Îd2¹ º?ÆtnÙ6¤ˆA*õýÎgCJeýá)ÏdÑ#SO×®:ýÃK‘ÙZn¶@}·ÉdþÀk†ÕÅO P5©>ì¦ßÿŠšê ¨[5•‰AQ^,..Àj5cÒ3‘áp8 ÿTæÉËñú(ãõ5Ä——pªü4U*¸''°ÿ µúöO×MNì×7Ô±‚ÁÀH$†ÇãA&³ ÊKmVœ«ø(./{Éårï‘31!sgf]{¡ÏG½³Ù,•Š0šË5Ì–'pO¸ß“Uá^må´i57žl]”_›ÍFm]-HM >¿ dÏ®õ†·l ŠH+¥M …'ä´~[¿Ó7=îBUu5®\½Œ!×à/‰ä¬öoÞ½A>S_7zûz`jÎVVÉìd|AÆ£z¿¦íNì¼´âOE,BÚø ¥w ÜžFE©IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/database-change-key.png000066400000000000000000000014061276304217300265750ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<˜IDATxÚbüÿÿ?% €X@D&c|h,à 6IƯžÿÿË+.ð÷ýK‰ï+çÜ ziow†…Ó–?{öìa °2R îNq ¯?±0<ØÆ``vAÑÔDà-›ÍZ¥Àðwÿÿüf€8ô?þÏÈÄÄôÿàÁC§€É6@K“Á‘GŒ™AÇæƒˆ–(£¨,ƒºú') +')6v&†¿ÿ1üÿ÷á/sq±1|ùòU d@ àæfàcøÇÀÀ)÷ƒÁÀô8PÄ ˆEž0Ü¿õ€A\^’á÷¯_ ÛÁýþÍÁðãÇï ½Ä"ž>e¸öÐÿ€Na`⟠¿~³3p 0üýó¬ùÐöÿÿ!øß¿¿`-6àÖ=†“/ÎŒ ?îÍyý‚áùŽ­ ?ÿ 2pñómý ÖŒŒA.€pçCÁú% g–2°=uïè{†'l´}âþýý‰b3È%×@\@LPâË…ó s^]ÁÄÅÀðë ƒŒ¥ƒ œ<ðßa6ÿÇp@1ÁâõÓ/†ÍwÎ2|gøûŸè•ß?¿3üúñ¬ ¤„Q½q@1!¥(1N~ c€ `Tƒ£ ìäÈNÿ÷(\@ €Àp@"àÍ«û ¯þB &œ¿ÐxGv6²+@ €À逈10¼ûýH±#‘‘Ÿ—‡AH€á';3ÐÿQ4òðp2033sô $‚cPðÿon†Œ ×þºùá¤sÛűq*ÈI°ÁÈÈÄpàÀsYYÙ ö[P0ˆãLf»sÞNåd '&'‚ô#¥Ù ÀÚa¤""¸IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-close.png000066400000000000000000000011351276304217300257400ustar00rootroot00000000000000‰PNG  IHDRóÿa$IDATxÚu“MkQ†5©)º(Š›‚%¥ ¡ ¢ › Yÿ€ºw.Dw.DÚlZ±h…BQW•jã¦jÁÆà¡ ‹t!NÍ ˜¤3ÉL2™I&_¯÷¼0!¹ð2wîÌóœs‡¹€Äˆ‡åÑ¥~ÿ^2±Ó‘ˆ³á÷oÏ]`ö¿ h&4M‡^*£\6`˜&*• ~§RˆOLàg,ui©e~kããÎs¢3R é:ò…Šx^* ‘a`-BâüYTÕ}|ÝÆ·»·PÙW‡±L”–4MtPBY̹ƒb±ˆ§#ø:9‚äY4LnEÇöõY|<9‚g‡È–檦h½Z­BUU¼CbŠðéfnUƒkiHÝ‹b'Lxy˜RÀû•°e¡V«áo>øÌ 6Oø`(»Ø[ŽB}E-»‹§}xBôC äÇA£Ñ@j}oÅ6¶Žûðùaç !òáŸêW‰.K% Ѷn6›½û÷««ØœžÆëÑQ¼;ÀV0ˆ‹DwwT øE«nµZ½¸®‹\.‡t:ÝK¡P`hÊóØ´mõz)h·Ûèt:)ëv»`Æ#p(«÷Á pxŸ‹b]ÁLz¢²§z?ÌÝe2üÉfñpe%ÎÜ ÁÀ꼦(Џºˆ-.~af`hû–eá—¨>·°à=‚aއaVº÷=Þè‡9Þã<<§$Ô—þ’Í}¿l7IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-edit.png000066400000000000000000000012401276304217300255550ustar00rootroot00000000000000‰PNG  IHDRóÿagIDATxÚ’]HSaÇÃJ RXTÆV$$1*£ØÅZ¦éMy!n4 ¤XQDîÚ>%/úB×C¡“µ>†ëkZ±³Ù²dÃÒmgÛ9›lºï;f±Ž<¼7ç÷û¿ÏsÞe…*'½w)]§,Ùÿ¥©ÞÏÔÖÚ¦rApK¨¹L ±q¿M÷2^–•½ý#Èår˜ž™A˜e‰FÅÀq¸xñD‚4‡ðH ú»6A*•âô¾åYÓº_‘€DòpŒ€q&˜äyð¤YÏyØzª PÈШ*…Ï$ «—¨ŠQs¦`2 ^J¥¸Ï€;¶+ R–cüÉZQKÎNQ$ 0M¥‰Óé4â¡çøa×@µ§»jÖÃÝ·Ÿ7A˜“¤W-1^€iêìì,ø°‘O­hnÚšj)Þô–⣭ÃÃÃTpˆ‚E‚$M.À7‰ÄXtGUضUk÷0ÖVX­VƒA*¨ AÈ_;ÍÏ€ÿv :4dir˜.W૵ƒƒ`dÜÅ):wŠŒñ݈]Ëå¸r¦¡xø ‡™LóÿÐô_Oñèª:Ÿ|îøF„l[p­ÛƒÁ‹Å—Ëoœ Ô"Ýï~†ÛÝ' k®Â´m3îö¡×ëÁ²,½zþ/µiµ/³R$˜úÀèP'^õ7Àùø0F^߃×ë…Ùl¦pþm´Ÿj÷’ï7PH$¸Õs -˜ò¿C6›¡9³p:4y–± 8À¿•™›Ç(3­Nkÿ›,® *)lVÔ……­X ü –å+ÿ•køIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-encrypt.png000066400000000000000000000007041276304217300263200ustar00rootroot00000000000000‰PNG  IHDRóÿa‹IDATxÚÕ‘?HQÇïŽhÑÜj)¬¤?478­ RÍAS­N–£Øu•Hrf™„“T—àQˆgÚàa¸(öo¨&¿ý.Âêú³õƒïñ{ß÷yïñ ²8ÎÙP(—$)áp8æôÞgÙÏ6·ÇãñL¹\†¦i(‹¨T*eY£µC ÷J¥èôªÛí^p¹\ó~¿ÿRUUÄb±¤ž1X³Ù샢(u³Ù<øÖ7™Lö@ ðT(õŒ‘`„®]‡ÃUš³ïú¬Çã9Íd2u=c$%xž×ßêóùät: =ó­@Åb£@9•J Â4®”1œG†q¸Úmo¢^’Ë}P·‡pŸÁîʾì¯Lá9oÇ͇œÄâtEnƒ…¶Å vÌ¡~;‰(?þƒÂ&Eà^—÷iŠÜýJÀàd!ówÁ™H£ô¯߸³Ø…Ø’ GB/rÑ!Ô. ¾‘ª™°mD'ÑCôDÑMX‰V¢…hÒ÷½i—„`Ö qIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-new.png000066400000000000000000000010051276304217300254200ustar00rootroot00000000000000‰PNG  IHDRóÿaÌIDATxÚ…“MkQ†-R’•¸²Y¥Kmºéÿ°[‰ýBé"XjKvYȬD ¥%ÒqQ¨Ð!Ù³ÊN1ØE;“™|μž{“™kÓx.—ç9÷ÜË×CÎó{óš2ñ“øÍÖÕÖhýóúúHۈĦiš¸5 ˜µêÍ&š–˶a·ZÈ–³H^&±SÙ¨]þ&¾'ú@¯¤àÖ¸[=Ž"ò5‚Í|\ ^\Äñô"zO?¥ V¯ƒ#`l1Øn·ÑétÒBø_Ñ;êKèØ˜Ã¶v»èõzè÷ûˆæ£XýDØàˆzù…ð$G “ù T0wì2,ÀÁ`€ápí—†•Ó<>š ’,X=%‡Î(% *xÖU‚£ÑãñXFû­!¦ÇÎ…AçtMß(å¿‚82Çḭ̈N&™étêG0öb^AÇq¼Ýù…ñÌÿv^]×õxs{3+X¼–{–e»Ì$½Ù/…«Õ* …~”Ëx{˜)2ó`A fäZ×u¹~spP!¢°+w_"/S*•Þßð#+Á3¸<¿€¢ ÃtÓ{{EÕ9(X’;~儚9˜¿-ÝL¡ ½ IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-open.png000066400000000000000000000012761276304217300256020ustar00rootroot00000000000000‰PNG  IHDRóÿa…IDATxÚu‘_H“QÆt“7AéEQ­‹4ƒ’°4SrF:ñB•@*/ÊZ:çæçÒ‘WQÑ…^dûcÎf*Ì” ’éfêÔÌ­×ZÃ?sŸÞï#æ ?ž÷œ÷}Ÿï;ç0)v™DÖHމ‰Ùɶ‹Yø÷¡È`3ž9 qÁùy CãpŒ ÿƒoíáþ>— ìMº¶?^¯ΑQ|¢îÞ÷Ð7¿Ñá‡Éკë&­N?úÜëxÔ1øše+ŸÒ" ã†ÁŸ0šœ‘&j_L¢Æ0ŽjBKð\BoñàbA9XN…:óW¨[ÆP%¡‘ .T7©! };=e½„BÕŠúv7™Lqê$յĽ¨}R¾7‰û³©Á’®7"EÙ…s·­Q¤DéVÒT=8|áX¾ÖBç™á®µD¤´Þ²§û§VoýœbL~ÇÐ#˜¦éì.hž» &-o™  µå„Š÷¤‚Ùô¢ê—ôާSYl¢ŠÅ%V²Øj¢ŠÅ&h-Û/ˆPN{bz¨—ÏìK>ÿ&1–ЧA¢WIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/document-save-as.png000066400000000000000000000014031276304217300261700ustar00rootroot00000000000000‰PNG  IHDRóÿaÊIDATxÚ’[H“aÇ»($4ÁÀ6Ó¥C7³©•®¯šmÎåVž1ç4&°˜S(.*bøËw>ÊHõ§¯^Þõä3Ø.1ƒJŠ¿Iä,40&0›’Yí,Åûý'.Oß8ZÜ%<»Oœ. u˜?÷NQáŒ'Ùh’ÆEFJV¬dôÇO¾yGñŠøîþ›Ç¾•@’ÍtE Ý'ƒ¹Þ\€IìO2$É_±¼¨˜ŸGúÍ“¾v¼½‰dZc Qs¡VAw“‘ªÚ#ج¶ñ‚…óPïàõûaj›:9Úx‚‘§[YåУR©¨ÛĵSjÒì%kpã°ç#fdÁüyöey ¾|Ëwy~€C{íh4*J§Ò߯ú ëØ±{?·û_H½bFÌKL$7;Gn:ozÖãªÎ–Â…ÖÉ<:7aö ´QÒ–,õõIˆY0g.9iÜoµq~0Z­ë‚@^´"(P…©Ä©Å¿ÏCÌÈ‚9qñ\<CWý4bfj0ꕼj dSI<‹…úúzˆÑF£Œ"ÍjCÌÈ‚MÎlºb™…0WÍóþ¬Ë @§Óát:ikk“ð-ÜÌèhlâÖêbfÉ‚ö3U<î½€ÉK÷q*7àçç‡ÙlÆåráv»%RLÉÒ,Š ¥[ìÛê˜Ø{­‘»´]DõæpÁÓQ(©©©¡®®n !Q:<‚ܬl"#ÔH‚ƒ»Vï±YïLÕÇi(++£¼¼ü¯„†L !ëœ x/{ðäñUÃËdVç#gñZÎ!–ÊAÓþð,uÄ€{ÁG¢ÛÓÐQºP\»£¢ÙVÑh)¨5:¨ÑɲÔ®y6ýÕÛ¨8bj-”«-ü:nâG¥R¹Î³Ôs3³Ø¸{_V~›ÒÙ~#ƒÛ‘ñb'‰ƒoež¥Ž˜qNãÎ­Ûøøå;rŸÿqPB–Ù/áÃþ!2Ÿ‘%,K1àt8°¾vóT¨#&Ç'°zÝw*Ôãcqíê —ÉdP,Q,P ô™Ëçó°™-0yŽ:b`ÔfÇ’ÇËÅãqxÜü'& vy¬ Vè&RG ˜&¸fç¸h4Š©‰IXMfÄb1Eº<,ظÏN1`.ÙípR1¼ƨՆ!i‘HDgÚ1Å¿__]ÃÈà0IÒ%É`ø}¡Á`¡Pè¿úûΓ>H’ÄŸé,þê¤ÉoM+aIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/edit-clear-locationbar-ltr.png000066400000000000000000000014311276304217300301210ustar00rootroot00000000000000‰PNG  IHDRóÿaàIDATxÚ¥ÒÝK“að³÷],um®ðk›àêüH›7kædß[Î2¿¶é$§âfXàÓ–!y•v£ëFò°$x%x#þfˆˆ¨,žùžžG¼( úÁËË{Þ‡sç<ðßb±E˜y=#êëëå=ž:¾±©on~À·´<ä›î7òƒÃ|x0Ä%“áú üU8‚îîƒ=Ðßß•·8¸äšL ç`vöÍíÎNÿ¤ÕfµZ-‘{uîˆÛíŠ8œöÑ@w×Äðð3S<þ¼Þ.ˆ$W%íímàr»Æý~ú|>2ôd†B …hô9{äwè«*¡´´„‡KX´Ú›ã6› —––'''dllŒ¸\.2==MNOOÉòòr’Îóó5CMMP^^þ+IaQ!äiò¢&“ ··· Rûûû‹ÅðððP@jssSðz½Än·cvNöä·ï_á\M T*_èõzt8dkk ™³³3d666„úúz¬­­<1VQ¡P¼€+ÀH$ày~"++‹ý ‘H™D"ÌÈÈjµZÁh4¢Á`Ìfs¢¸¸ ˜ÔÔT–dÎ;ØÙÙÁ££#ÜÛÛÃããcÜÝÝe•‘ž¤R)‘Éd˜’’òmúÁ¼¤SFÚ>a­¯­}F§××× ãñ¸ —Ë =‡b±ø-ˆá‚J­‚ôôô)]I1†Â‰ÕÕOÉ®€ŸØVÒÙå#+Wˆ×בTª”¬òd84¹¹¹"v(`+aW55wÑåv¶öìíëÁp?¶w´ ž†:¡¬¬”U~*—ÉΉƒËèú ªJoU«Õï322ærrræU*å<ÝÌ|fVæœF£YÔét­Ñhè¦8øWn·zz"ž?iii"øz]ÁétŠª«<í„£oÎl1s«™3Ü1pV›•¯¨¨øcåŸh¬@•õnY{IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/edit-clear-locationbar-rtl.png000066400000000000000000000011031276304217300301150ustar00rootroot00000000000000‰PNG  IHDR(-S5PLTEÿÿÿ:B:,2, =><=>;ccc01/$%$   !"!"""''&/0.111231777:::=>;???AAAAB?DECEEEGGGJJJJKHKKKMNKNNNNOMPPPSSSTTTVVUVWTXYVYYY[[[ddcdfbfhdhhhjjjjkgqqquuuyyyzzz„„„†††ŠŠŠŸŸŸ¬¬¬®®®²²±·¸·ÁÁÁÄÅÄÆÆÆÏÐÏÔÔÔÞÞÞáááçççéééêêêíííðððóóóôôôúúúûûûüüüuJ÷ªtRNS..??TTee¸ÊÊÔåååððøøýý ©¬š¥IDATxÚEÂ@C‹»{q·âŠ»;ÅÛÎýÀÀ\€Çßýl’`ÿÂW% äB]{>¦ƒ~ôëb¹bí³&C—š ­3ûÚ0à^ñA—[Ò¥|f9ð¬¥0ÐÄR ‚XÀ-Ã+ df·Ç›£×Ç¥b³a‰ÑŽo‡Æþv âߑޟÝV3Í]'nG;ÚH‘ê{TÙ‰!xJBýí7\r‚üøIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/entry-clone.png000066400000000000000000000015221276304217300252560ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<äIDATxÚbüÿÿ?% €˜(D±ÄÎÈÈð‡YE@ŒÇKIOÜUÛRÅüã›Ïïî\}qþîù§«þ~þ¶ž‹FF( @, ÂÍSv®L¯Ýw615v é¢ñbÏÕçG,ÖÛ¶áçƒPÅÀÐ1ÿƒ4ÿeøû¨ù9@±°9ï~2ósóÙ1¨«2¼yõŠáÒ§ œ¬œ ¹´¬“EÏýûÅÑýóÄ×@#nþüjçòW…ÄòWI“õ‚ ÷Ï3çÿýzóŽÁ'4ÉœE‹áüE †½79üÌæ3Ë|c`xÔË ´û5Ð$A-%±GçÛA¾ÿ@Hz!73$òÝ¿êêí .,ßß@Ó¼ÿ ÷ùñÜÆê)ÏÂÇòíýÈËYˆ…‹õ>ã?M›8..&†/Ÿ?3üøþ•áéÓ× ¢"Œ ‡÷»}8³ûz0Óß_û9¶?–cdøþè& GXnú A¾ÿ&&1¿ëìê= ÿÿþþþóóø 5? 4/Gîò½üÿõóýþûúˆY[Ûøé÷ï¿×¿}ûZãíÛ—J?~|gz÷î Њ Œ@—Џˆ–º’'oäëŸÿ¾~½òWQýó A¾ÿ,,4ÿÿÿóüüÿ¦òòö°ëëëóççëÊááåÎââæåööóÿÿþ %#Nëéë)ñõõ«úøˆY_ßèä¿@62¾úóçßžß¿ÿîüùó×¶/_¾­|ôèåü>(¼ÿè–bRRR@¯±jÝ»û`-£‚Ú+€byô胤¤"…1‚ B¤µÿþ¿}ûöcø³goXŸ>}9ïùóW@þ1&&¦ß À0 FJs#@Qœ™ v<(Úðüå­IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/entry-delete.png000066400000000000000000000014501276304217300254200ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®Îé pHYs  šœÍIDAT8Ë•’kHS†ß³s¦›ÛÎÖÚÊ4kiÚì± La‘¹&F¨IEˈ þ‡Aþé Ñ º`„] °‹f.-Ó•M³l¶4³Íáæ.îl;_?¢¨(¬ççÇ÷>¼||À$T*K&S´V­®ü>;.•Z{,–ø`ådy8 cˆ¾ª*:&‘”Ÿ,^›Èçû««iRAmzz…¿ªŠèéSqÈl&w~>QK‹ª©¡ËS¦ìùe¹˜ö'É1¦ü‹ÙLtîÑÙ³ä++£K2Ùnà¾/UHsÉUu…„·m½×]Þ±[ÍE¼wQV£ ìvŒut€¤RHÕj° EßÂ`öí^òl&¢ ô¦ûG­¡Õ3TûOÎ[ê5è ö²,õð< ä䈾 ¨>5µ’)’×h3 L΃ۡÖC-…S²–HGÿM;ⵚÑÞŽ0Ï3÷Æ&‰Fƒ¦ìì‹r†ÂYY [º@VW}J¾.à$&.ÝìIcƒ8hsõhzÔQ zöq"±oëèèéñ¸#/œf0=hh(Àñ+ µÊ-€q—¯¬Çu‚ÄNŽÄO³èÍ…E´S!ßû£Áïtb7 ¼¼ÏM“Ý+ØxX”˜¾ÿÿqÝT€b’ƒJ1#+kÀµïH†ý,2eîsdUyn=e`XÙ\ÒýáÅáeÄ” â|!öšG[Ãþšñ½ÁQk›?;Gœ+ÐPq] l/S`Êá]?ÿÿ?ãÒÿÿÑKŽÙ@ÆØ€X&&‡#UŠÿßžpüÿÿÍÿÿ¿§þ¿ ä¶Šð3ìީʰᨠƒßäÿ·õ/‘üñsPV ˆÙø:³Põë7ÿ7_=ü_œ—“AWJŠ™L¼À´ðŸ‘AQp#ƒ½óFo9‡ï·Øl>ú|hÍP‘b€bÅ 4á®¶C177ƒ7‡’ƒº¹/'0]HóŠ Ã¾iŒÖLzXùõÛ×Ù@Cþc 4Å1Aæ”2h¨8+ƒŸ£3CiL ƒâ¿ÿÌ Œ²’ ww 2teÜÎüøýÇ €b~T©Œ+,ü˜?>ùÇpæé†ó'¶2üü~¦†ù'>!Ño 7޳s>{þc@±€rÝ 6‚f(tÀ IÖ‡n>e8ôb=Ãæßß–~ûûåù«'ÌW€É@ŒÀg 7%A{èGêAIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/entry-new.png000066400000000000000000000017321276304217300247520ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<lIDATxÚbüÿÿ?% €A„7 ño þÄ€ø #Þ a†;LòZ ;¼ílœÿüÿûŸ™‘‰ñ÷/WoØõGðé€bÑ*æÇgËwf= åÆä ¦o ?8Øžþ{Ë´éÐNµ?@Ç‹Ôf& þÁÀ ö—áØY @Y& ‹ãÇïo,/ßd8É2àÁ§· Û¯ÝbøÎøéȹĬ µˆ“‰Ñ3¾Ìn¿˜¬dл_ß~þñú¡"ËW.Iö Ê&üÖ\Š?9޼¹Â°ùÑi†+¯ž2üxù“ï߯¿jĬ±K>ÞaàúÇÌöõ#ŸÒOËqŽB‘7/|{ùóïŸKL@oc,4ù2AÓÃH´Íd`Ò2‚< ~v Y‘Í òÿË .Åp{?C_öü÷_¿O f`80È@410B\R _†_@ö›¿Ž>¾Åpîü.ÆÏ7ÿ‰h˜}ä–ýÎpï »ÐãGßçËUP*bM\Ybø¡Ë÷=¸Ïàüû;Ãê_ŒŸ_?¿Ïr™ €)ÍÎxÃIÕ\ƆšIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/group-delete.png000066400000000000000000000011631276304217300254140ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®Îé pHYs  šœIDAT8Ë¥’AHTQ†¿›ïÍdEP‹r%䪈Z¸ &ÑÅ@‚e •ZÈ´pYÐB¤¨(!h.dH&0±VVQ 7†š>EÇÑ7ï½{ZÜVº0úár9þïžóß p€XZv-(솢¢ó“ng4ÚD¨'¶}-SWç߇rˆ¥e/…Êɪ*OÖ×µÓÒ"•jz W—[[EGÏ&b|šg—d¨u9=Ò´2Ê»¶677s}aáEàû­¯—\w·úL&,g34Jx=m PÍT_ÇÛÛ9Y[ "¬öô¨TêV³ëvYKYÈ,ƒ®7쥳_He>²66†Ø6v4Êtaá \׆XZ:‡ÍÌ{ifpP–KJd^)™)(L$"s¥¥âÄãr·¸øž°¸anz?kvOƒ¯!À™Ž¬¹y #‡Ní[À0¢Â aûQäŸÿÕOh0<ÉøÎ™´IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/group-edit.png000066400000000000000000000011401276304217300250720ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®Îé pHYs  šœIDAT8Ë¥’KHTQ€¿£7»EÂ`‹†„ˆj0rQ‰ÖF¨éq#…‰ f¡DÐJ¨eD.\ô ˆ‚D ‘³°+d %=ˆZ‘ † )‚™rœæéÌÜ{N‹sÕÉfaôÁáÎáÿÎþÿ  ËvYÈp{#ðÀçõO›¡øÙ‰ÁÚ‡`ÙªX¶vËÃÕfpcwxÈT=ãM2pw‹2ÞLþu?êqbŸ-ß[Q;ÀÁ®;4¯kQkÍý¢ÿéý¨ÈzA€ <ú¬%³œ¸ÑÍøš^V50‰ðáKÏ“#±=@<c1¸xuˆŠÔÝb}(Âñ@+–íäh× ’#±` X¶ºðD¿¹ákªú&êØ«Íjàë)Õq¦³¼FÛ €XZ_ôlBÏ% Ž„ÑÉw¤jÆvô·Ò×—¦ðý—_Îå¶· î y˜ÎC2Ó9xûñƒð§ëé½^ yÛ²%}î±Òø‘ñYÝt)!žúÆëOïi;›Õ¾“4[˜ÊÂL ¹90~zLåt'\ Žòs$AÔø(ºð+% ¤ óõÕmôŒñ (¥%Ž4(JÅ,¸J;R 2 ©\YJÿ×+¤#çƒA¯Ë3Ø„eò¯ ·÷¡?[Ý@Ý"ÃóÀ *f« ,õd‹ÁŠ€Ãÿòþà 8i'ª’IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/group-new.png000066400000000000000000000011311276304217300247360ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®Îé pHYs  šœþIDAT8Ë¥“?hQÇ?—»X•µbíb : Ä6§´ˆ  .ÒÅIœ'A\ZâŸ&’@¬‹ VEÄV¢µhµjS/i“ë]îòîÃ;kL*~áñÞãñýð}ï÷{ÃÌ´*?´ xH ý|Ef&ü›03!pXÑЭÙn<ùÔÎ sƒhæýBwWšc½4ÂC‹±èÔÄítþLðèÍu 0ÊË‘ Ð4!ŒMŸ=Èé›9?|u¬aNZÆÝ±{û]¸±(Ùðv.]Ͷ%IöÏQä)«¦ÞQ_›:Ó×€ÇÀ|U™ÃÜàæ³£ç˜ÝXå¹÷Œbe‰oŸ™µ<öìëeB?9Α¤Ô”aüƒš„„«Î–d [w‘¶%è†KñË4Ä;R1€R(»PqaÑ…ŠGö^Á-fæu‰¾žn¶nHPyYc ~–†6 vXVE—| }ÛOQœÜAîû–Ê:ñüez޲šð#J`9ªT×hà ƒM‰õxá¥æµôAÙQ›’ a¨ B‚/À LHðØ­€ªÓ” T}D)äo3¨u ®;13“ü«òC·€´ÄÝ@?еJ» ¼ ¿>†tD°Õ(|@ð¿ú Fùd(±‘ªIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/help-about.png000066400000000000000000000012731276304217300250620ustar00rootroot00000000000000‰PNG  IHDRóÿa‚IDATxÚ}“]H“aÇÏüZ%æeÔ…•`•m³Ìœ”„ˆaYfZ–¡›Óüh:E¥0»È•d†¥®ˆ–æÌ¦ÓˆÙSJ/2wUìJèÂÈÖ뿳wð®ùÀç¼ç9çÇy^Þ—,GÆ„0¡C޹M¶ çfk™ULÀòúåÍ›Ézó؉&ë÷ ÓÛ¥z³Emö…¬ëÖ C—}?€ ÿ ¶ç´èwtý¼e™ÆsÇWŒL¹`›tqü #³È¼fs'ê͉Ÿ <¹N‘ÓŽöáY4=AÕƒ)\1ò Æ=30½œCRÝ "Nß© “´«pKÐÁ†…ÊN´wÇ¡i‡Þô‹nA„cON<«y8 yšñGhRí6Ÿ@¡ëŽ/ëAžñ rn¼)æâßÂ’ÇR>—kÔz è@­Ù'PêœêJ Ò¯ŽþCþÍ1œ3Úýò)µVºÁ)öRÔù0 ú$^Hü½Õ qnH:K­÷ꊺF©]O ­­é…ª´ÏKù ”—­’ ¦j”Ÿ‡Y؇ Ù&§¶â m-÷^aÖE‰Í¾tÖd?ÁºÜ~ÌÏϋЩPV?è˜t´”ÒŠ)wùÞÁnAií ŒÇ “Ü=蜱rGżxžlEkÆ$O $E‰›Žt€Ž÷z¤fIRðÎ+Êè)JÝ,PIïE­[ Êì}Å ïAÅA—f½{Ñ„8ÅÀ·ú}‰¼d|p'Heâ{?cÙ4ï_@yà} ,¸æ¾§ÖO %vjâå{K>ËãÊeJˆ N¨øµZ]á TéÔ+üþÈ¢ò7³RÍjêh/ȳ®IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/password-copy.png000066400000000000000000000012361276304217300256330ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<IDAT8u“?k“QÆçÜ74m4´›´[… EhÑEPZªKéÐÑ)s‹TQ¤[¿„ƒàæ¤~‰ \:–@‹Qb[$©orßÇ!y“´Ñ‡{¹—çwžsÿˆ™ "׫ÕêÊÆÆÆçÜL­Vû¸»»û©Óédü?~HØÚÚÚ\__£ª”Ëe«×ë²°°`óóó†Ò­Ò-A`Åbq5ÈQkkkÕ0l³¼²Œª“‰Ò†ÌÎ͉ˆç0ͪzkzfçÎ)7æfi6›tÚíޚéöç9¬ïÀ9Gib窊ªˆàTzíôݘï_?=[ºsoªtu’ (€edfœ7óõ¸F¹rŸÅ»"TÕ …ªœžF'?HÃãÅ1ÆKc¤á ­³ï|«õi¯í9ºÐB‚¨¢:XËÅyõ¡QF½ý‘¸$°:øŸxøò÷dY&q’E1Þ{ðQL'¤Y†™õfFš¦ƒ–‹¸››¿œÿÉfn/•#@ìC¼7Üø5,KiµZxšÊ™afT*•GÞ{ Ãм÷DZ%IbišZ–e–$‰íïï›™Y§Ó¶Wï7 h·G]QÇööö¬ÝíÅËç€À̸H’Ä¢!a^ÝÌ,Š";88ˆ¶Ÿm¿ ¹N†¾ó,P¡ûWòã–K™ŸÍ,Êñ/n™1´ö‰µÈIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/password-generate.png000066400000000000000000000017671276304217300264640ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<‰IDATxÚbüÿÿ?% €˜(Ä"™µxø<ÕŒd¼5ÌLß=ûüþµ—§ï]|:ùçÏ#84ÿb€à¬±%´Ý]‘O^‚M€áÿÕÿﯨ6ÙÌç¾xñ#P¢ìß ‚™áˆ @`~ ºîÃ_A&> vFVF7 q]Òþ¯_³{3ýý”cdü÷hÂ?Æÿÿ~ýû`Ùë=—/¼K P nN—ø“ËͰbE²Ú•ÿÿB<ÿ¿=àýÿëïÿÿO€ø”~Ä@ñÿo¹ÿ¿YÁû¿@˜u@] úçWÑlv?>Ñ'¬?}c`ºèn†¿@‡¾¾ÅÀðô ƒ¸"ÃÉm O4 dod8þü-C@ xû•‰‘ƒ_‰ãÔ}5†7t8˜ß0qÝc`|xùý•Å/Ž\ºÃ0O¡£ ¸µ;×1}g`zÀÅðï@ 8ú7í»ƒ‡º¥ƒ° Ãï?ÿ^¼|Ë0sÏܽïÿïÍgv’ÿòï/³õémŸ¥˜r=fXºÕ!ø}ÁÎE 6€•Wøÿç/¾|d```caÒÿ|¬?{[yüytÿÛ –)ìf÷XoîRm‹a8{à/O*@ øóû'߆ [Wéëkêøø8hÄ^½úÀÀÍÍÇ,ÄÃÇóãç½7 ïo>½Åðÿ÷k†ËÇŸ2¨8‹0Hx*3)ýd¸p–‡ÁPð@]ÀÎΩªªÈð÷ï†53Ùßî=zòãýÅSwýU?2r‹0ñ2ò È2‹p30rÝ`°Ò¸~›õáW€p÷îýŽ/_¾Øˆ‹‹hsqqð}úôéÝ»wŸÞ|ð¬†ùÙû;æ®´K·\#ªÄ$ËtãÃFÆ/,ÏÙôùÐûj€ðñã§Êwï>0ܸqGœ™™Iðï߯þ30¾cäâ(ƒˆ<¿ƒ¨ž‚ò¡âMÍæe&Y·û¯LÒȖκsü〇++  óKFFÆ@úˆÏÍ4Ÿ}ܾ9{¹á׿¶}¾ýö×ë«ß»¯fÝ1úûûßc€æ0kÁ÷ЙIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/password-show-off.png000066400000000000000000000014171276304217300264120ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsnºnºÖÞ±tIMEÙ -¶TIDATxÚ¥SOHZqÿ>§cþG5Ì•µÃ 1ÝÅQÌÍÖ.1†Ý¼ÚÁC Ác ñ°ƒ“å¶K„`·J3œŒ9´Ã²º [‚¦àHË’§ö,cÊÛ÷÷Xðm—> ïçûù~>ß—<°, EÁÜÜ\OOϬ™¥¥¥O L©T­Vû‚ÁÁÁkÁ`0DkµˆÅbJ¥prrœ˜˜ðœàCx^Øív‰Åbù¹ººšÈd2£Åb±¤Óé®›L¦'CCCω„›ï¡pü~ÿ‘HÔ Cæv»W"‘È7@x½^ø .—ë)>$ÀƒÍfÓ9Ž~RóT>…BïI-€€Â=©ññqI,kb~~~º»»û¥P(Tâôô”©T*¯œNçë?Ã^(Š/@à+GÀs_Ç׫ժ¡Ùl²*•Šêt:Ðh4Xô‚:;;Û™œœ¼||\CeÓ8è ?q4ýŽQÝlÒ\k4@¥TB2™$ÿ±˜H÷¿U(hTt'os‹`ΟI³Õj”‡‡‡ÝÚ‚õµ5À—A¯×ƒÑh¤ŽŽŽº`[®îííí‚#`¦k``€Uâ´v» ››°²¼ Tiš#Õh4022BHzÑÈétúGàóù`qqÑŠ»R4M³è.™™Œ{Êår¨×ëÜQ¡¹`0=z„ç>' øS0d³Yš¨(íî²ccc\C×Q«ÕDù‘š²˜Ä[Ò¹\òùü>¦ðï½ßÁmœ*Ɔ¾¾>Öl6s‰àyOˆGõT*5ŠJJüSSS÷0ó‡­VëæÁÁo¡S.—+hÞÆììltff¦íñxàÒø Óì2_3´‹SIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/password-show-on.png000066400000000000000000000015061276304217300262530ustar00rootroot00000000000000‰PNG  IHDRóÿasRGB®ÎébKGDÿÿÿ ½§“ pHYsnºnºÖÞ±tIMEÙ ›ÞîáÆIDATxÚ¥“]H“aÇÿ¯®­½¸936¦6,¼‹@ ÅZk ¡&]t—Eå`7N04DÌÄÔÍv¡H^ÙEЇ­%¦¢)(%î¢áÇ…˜ûp~¼N—ù:?¶öö8V`7þàÀsqžÿ9ÿs88*à8E¡­­-›Çã]¬ÛívÚl6Öçó!33óÿ………Ç‹‹‹»———¯‘MÓP*•J¥¶òòrËADx²²2š$Î;ŽîÉÉI˲>±X¬ÌÉɹAâ¡Ýn¿D>ŸÀ!‘÷²±*ÖétoZ[['@¨©©Á_hµÚ4Ðh4§ ²ÿ±ø¸±±ÑBRRö¡d2•——G mPYYYDžlïì¤ðH’P$bÉ0ëëêꞃ`4«ärù`GGÇ׸@ÂôŵµµÃ333çÄ)'¸Œ3*Ìþ‚gæ—žžF)ärw‹ÕZ´¾¾þÓ`0Tôöö¶$nAX__?åñxTwî™°.Rc1 TÃÇ—  yaN¥R1¹¤HH¯×kúúú\q#MMM= 誫«°²-Á÷À.$KØmǨ'³óazpŸZZZJ7›Í.üX,æ!.@ÚJ'«â¤)°;»èûŒ‘woáúô_¶£Ø£EHM•¡´´” ƒYíííŽH\Àd2´rsnnŽò-ø9šc!¿p¯ükSª‘*Jð  ÅþƇ¯677?!Ùårí¯lmzzÚAlÜ*ÌW '§8¡ú6%:–:èC‘œƒ:7{{‘øÀIŸÏ78뤃 ÌÎÎbqqqy||ü³ÊD5*ñÙÝÀatÅ ýig¾k¤"ÑB¡Èmì lô÷÷ë677}¡äºábóíÆÖvŽßH!ÇôÛëõ2Dd¤««ëµÕjZ,™?¢ã8v{ÖIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/system-search.png000066400000000000000000000013631276304217300256110ustar00rootroot00000000000000‰PNG  IHDR(-SnPLTEÿÿÿÿÿÿ€€€€€€ÿÿÿˆˆˆ‘‘‘‘‘‘’’’’’’™™™’’’œœœxxxŸŸŸžžž‘‘‘ŸŸŸ£££¤¤¤°°°&&&¸¸¸ &&&¬¬¬¯¯¯¾¾¾'''"""$$$&&&'''(((***---1$1113334'5558,"886>+!K"LLLPPPT2T@4TTTW2WUT___```aaaeeefVHo_Po`PrqqttturpyhY|||~=‚B ‚„~|ŠZ6F ’eE’’’•c<–––˜gA›dª”´´´¹¹¹ËËËÎÎÎÞÞÞäääåååæææèèèëëëìììíííîîîïïïðððñññòòòóóó™*ƒj.tRNS :Vf€…‡ÀÄÊÌÌÎÎÏÏÐÖÜÝàáâçîïïïðððññúûýþ$óz%IDATxÚ=Œù7aFßb¨¯]ˆ¯(-LT4Ó2šm¦ET´XJ¶²EL3fþ{gtŽûÛ=Ï=Ì@#øGCÀϯ¡™¹‰tZý²ì_r’¦¿”^–%éë[ÜQbs*ýˆ¢ ÓÉ¡$+“kúìó㔾[•ÿUïÓ`m6¶Á¼n-#ÀãÇHŠÝßÝ;8LEîß1à—x;S¥8ŽªµãÏÐvŽ«'K¡P)YçrZºÕï%˜h”Iôú-Z –ZºXéPÁ Õ©Ó5 ¸³å‡»fØl7oŸÊY7¸òÇ7ƒ®oaÞ×\ä] ] Gã" £áyL*=à0¨ç@mpì:Õ/Î63lXyɾIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/actions/username-copy.png000066400000000000000000000013761276304217300256150ustar00rootroot00000000000000‰PNG  IHDRóÿasBIT|dˆ pHYs»»:ìãâtEXtSoftwarewww.inkscape.org›î<{IDAT8}“[KTa†ŸïÛSŽ6fšcYÎX`…H‚ÄNù £/#o"o»éÔEhQРꢃRÖ H!0¡‚¢ ÂÑKõ7H©]-û·„Ëœk‚jZµ²–žÓ]¼½™åÕܽ3H4ZEûáC´·\Ô°Žã´iR w>hòÝ€ù…9ª+W²‡’’D ““Sœ?w¡¡'‹\ÆÎøA¹C` ?ÍòñõkÜñq¦gf0ÖKÆdH&G Bc ÖÚìR©Ù¥ŽÖËŒ-á}"AÕ—/| GH{"†X]ŒÖÖ½LLLJ¥ð<••ðD„X,v¤¯ï’\¿|En÷õË7åÙ³çâû¾Xk%I&“""’N»ÒÛÛsp €x<Þæyž,¸®xž'™LF‚ cLN”–‘‘qÝ9Õ}ò‚ ¿HhŒk­ˆˆø¾/ccc~gWçE`I^§ŠÞyÏýJ~Íê4À ñóWø \Cñš^IEND®B`‚keepassx-2.0.3/share/icons/application/16x16/apps/000077500000000000000000000000001276304217300216145ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/16x16/apps/keepassx.png000066400000000000000000000014561276304217300241530ustar00rootroot00000000000000‰PNG  IHDRóÿaõIDATxÚ“{HÓQÇ÷r5lNmΕ:·¦RîåpSóÕCS·ù˜–&jÑò™ˆÑCË4PËGš¦eQ¤f"š”efbia•DEH„P–/jþÎíþĉú8ð»çÜó¹ßsçRB+:6/‹^n#åt2×0ŠñZjÊ­XÌ4§Ÿ’„Sá·½ˆØnˆ¼ãC( ¢ :“–1 Ò¨ÂÞwžÒb“5ËNÖ)Ófö?ÖB|[0±=G5ß¼c6õ™|˦qÞbÆ¢_ÛÛ¢A{Ú‚‘0?Žƒá&ÇѼËðP)¢gµcÎYÙ‹ùUÉ­Q³=±„•Øâ:–ȸšÖ »âPzG4‡Ø‘$`‡Õ׬^ÄÖhŒ8f=¯J‘8}r0 œ}d@â— þyâI*Ê{zeuÀEkÿ‹B£dnN—LôgBno·ñÛñ^™µ»)ûQQØw„®-¦^•1Çt¿Kžg£Ò¾ã¨ 'ô[Å/ŽÂÙW¹P9”Å/³ åÆnãéþ#P=œeI34-náÂØl¶wæùä™ E¨f°]*†Ú×%péM)\~{êÞ•AÝp\y_•]…³r¥ü>˜ºä—QÔX§¿a­*Ñ®ý]OˆhUƒ(ÈöוóÙÞ‡;îàoó‘ia–ƒ‹KæÛz‡-k?…Ô+a1 ²Ã$ ‚Iœ×cg-ŸS±@ÈýrSºwDje³Úw"ê¾ìêô™A8‰‡.&jx£Áõr¤kV"àW¶ÉÈv`5ÚºYŽè0„Ätù‚"E4I¥R‚–¸2‹† zÒ4)ÒDÁ4Ùvgž‚3zKM€˜n_'Š&p\¾Àš‚åsU–øÏÍò_e5FŽé¼Džœ3ÞäA€€j7r¨ÂæüÕçDZÞ· ¡¼1—Y°¨7ú¢ï\ gDºÏqÊ9ÂŽT ýï׸ÂÀ¾jÞi¦ø?[Jõè mØIEND®B`‚keepassx-2.0.3/share/icons/application/16x16/mimetypes/000077500000000000000000000000001276304217300226655ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/16x16/mimetypes/application-x-keepassx.png000066400000000000000000000013071276304217300277650ustar00rootroot00000000000000‰PNG  IHDRóÿaŽIDATxÚ“ÝO’aÆYËóþ¶PÛl¶yथ®%ÃчÄl3ƒJgµ¦I%*¹¾EMIç\KQ¾E6[ӹ͌ø‚B›0ô_@:èê}ØlcïØ:¸ž=×ý{î]÷ýpp„Ba›B¡Ðý¯Äbñ(‡Ã9Nj3­V»—H$p¤d2ùOápú™iÌÛmØÝÝÍÜ»Ýn0€Y:}p€M#ɘRŒ¼Ô&†&Pÿº 7úk0nñQŘLF”w£¶]€`0ˆt: ÉózÔêÎC¥kƒ|  †*ô÷Áçõ²zÃ4­ÔŽT`L7ŠP(„+½•Ì áöü€Þ0…&k êdWáóùØ€ýý}´½oÁ‹òI$/ëqo®Ýë­P•hÑJ¡\¸‹Îž§ØÚÚbHËÛÛÛÐê ùÞ« ƒ?Õt«1´ù ÃÞ^´¿½O‚=ê€ ˆ3mzTŒ‚o.Bõl1ʺóÑ®~ˆw5 ¼â¹BLB=¤BiG>.šŠP9~|ýT[ÎâŽê&"‘‚;;øýØØØ`Ö¾9qNÃÅ…©BðúòÑôâ:®=º„ÒΔöpQwû2fÌfX,Øíö48–=…¹)Tê Pöæ ÊO¢UÙœyéI·ŸÖça[²buu‡"‘è©ËPÞMh&_aÂò!³m±X V«þ€{ÌÙn³Ïç7“à0•QŠI™¦iD£Q¸\® àW €Ï àñx âÏ ÅdLLÒæ|][ÃÒâ"¾,/£¤¤¤‰xs~3c$“ ò'È:;N¬¬¬üár¹âË e2™éHR©”È,—Ë yyyEÄ“K®÷Éu—hHIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/000077500000000000000000000000001276304217300206435ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/22x22/actions/000077500000000000000000000000001276304217300223035ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/22x22/actions/dialog-close.png000066400000000000000000000022741276304217300253600ustar00rootroot00000000000000‰PNG  IHDRÄ´l;ƒIDATxÚ”LÔuÆŸƒó@ ŽØ¬t³\ü£-5ðK kKM’?( ÊV: s€«´éD-KÀMQçê@ì<ŽŸ‡‚ Z ¨3ÌiÍÒDžžù¥‹IÓÖ³=»Ý÷¾ß×çy?ï»Ã£´ðH^ÜÌCS€àM€/þ§L_£€½‚ÞØp—»;w[,L(ø$ äk`ÞrÀŒÿ¢8`ÐF`³€wÓ}|XÁ–mÛxÕfãU»—`Ml,³ýü¸ w®žÔª‹·Ì?ží©©ìÈÌäÕÜ!_ÉÈ`eT÷šÍT5¿lðoš PÒ£;:Ff[âF^ü&—’x99‘—6ÉIrb"/Êí ÷]É4“‰‚ÿ¼x¶_§g±FãQ«•çb—²ie4/gíeÓšel]öµq¼°:Ž-+bÙðq4/ìÜÉzUÒò1c¸Û¨¥0pwQÃo-ãJÀ“AxúÃYlÍN#{zx½¾’•ËÂøÃÊp¶|ö¶> eãŽöÜ»ÇÎÆF–̙ÚÐPf«’-@¾îJÌ׿™«‘êBƒXîÏŽÚSü[?.¥c?ËÞÇê”xA»Iéö¯]´Ïã©É“èðõå#u7Hîê6mÀ<3øý$/ÖEŒ`N˜/×”»àmΖ$~ê‚þÞu“‡Ã§²pì:‡?A‡Be_Å›!À@H–Í@õ€…µÁÆY&ž‰´0}º/[+Ëø nuurßœ`YX5ÊÎa`±TT¦ªŽÏ‘€èÛÖCK|Àº—Á¦Ù`ËBðÌð‹ Þ¼r¾ÙU·LšBÛtÐ}u!`Õ `™p·¬ž! Ú4eC`o%ÖaàùÀó”bÕ"Þ¬¯6¦¿6 ‘àÙ7T_ X>´L—×c!y \¨1è°èô—”b˜/¬´»wQ¿u²£ùŸ…þXjcÎ̬Ÿ«û_Uâ!8øs>0 Ò€d`ƒÓnKG€ÇÇê5~{z¡w-ZåOû/^k*uÁÛËm´Ïðd•ÀùƒÁ\€@z—ç¶:ÜUG´ Ž´ðúÙj´|Eë—C?ÐëÍͼûö-–,G‡:þÎd€wkÑçÉš;ðˆnÈ~\‹ÂkU%tFû³â-uùx.N‹•+—z³³>µk§²(DÏx Œû¾<À„^™u!0蜇M²à¹#5b€ú› V¼©þ#Àêwõ¥÷á`Ñd…ð2’=[x@ƒW Š?Ž<$gzê€aJ¯Qóüõ°Ò¾žTÊgÀ,³‘´ØXÚÍïãJë’qÁú ð~)p½F’,¥ßo–=e-(ÃC7%…¦‘@÷~à[+ð$´/¸Ôî5˜¤Ä¹Àí2(¡lƒ‘Î.É'5z!P§)ßàÛú0¸E:˜’|™®ÅªuX­F.J¶/æŠô4Ïþã?ú€²Œ1‡÷ú)Ù*{<,å_âÌA-r‹°IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/dialog-ok.png000066400000000000000000000013231276304217300246560ustar00rootroot00000000000000‰PNG  IHDRójœ €PLTEÿÿÿÿÿ@3++UMF7#G!H (H (L ,J(J*D#A#;';$7 %5/Ik5_4N7V-N7_*I+D(>4\'97a#5)9!As$=T)@`+Gl+Ht(Iv%FwAt^yœ 6I<\ˆ$J€8=?]‚(L{2Qz5Ry6Pl%>I6Pa%=D'@B.GJ7Tk8T_9Vt:T`;Vf@]gC]qHf†IhsJfƒOk•Pl~RmSr•Tq‹Ur›UtWs‰Ws™Xt‘Yw Zv“^z“^z™^{^{ž_w_y _z˜`|™a{¢a«d|›d€žd€ e e€šeƒf‚œf„°f„±f…¢hƒhƒ¢l† l‡¢m‡¦n‡žoˆ p“¶q‘¾s­t§t¨u©v©v’®w“«y•¯y™Ç¶€œ¶‚¤È…¢¹†£º‰¦¾‹§À•³Éž¸Ì¥ÄÙ¬®e7tRNS $'9@ELV^gpx}œž ¡¬´¾¿ÆÆÍÎÞáââäçéîîñôöùúûûüýþþ*:$/ËIDATxÚ½Î×[ðYE‘UFŠÊ¦’™ìŒ´Œ²?$Ò°•ŒÝÃçBÜûݜ眫kD‘ª6aY1i©°„$ïŽÇ%`¸,‰²Š¢¿¬F³üinœ¾÷{½ÎùÖl=ð·kž=ÂÉS³Ñ¨_Ð`æ, oNþ8TÎ#Ÿz:`ömÇxîZ}SJ¿|\nÌ ¬÷áLñ¶ZIÅŒ; ¿„vßÝs"èu°Htõ|-DLLøOìøþù2ïÂ2‰ûÏ‚¸#Öcr½#?œû æIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/document-encrypt.png000066400000000000000000000011341276304217300263100ustar00rootroot00000000000000‰PNG  IHDRÄ´l;#IDATxµÒÝkRqÇñŸžIƒ.º««êr»Š"ÆØMltDôDc ªËÊ›T$|8Ó™º£©wöàCù°ÄÔvV°ÍIE,zˆšÕÕÚùô9v7píœÖà}1¿øòë÷(lZ&“9^(Õju¥V«}+—Ëj0þÛû6æóù+LK¥R…BZ ТÑ(²Ù¬Æ×¦à\.7Âm×EÑb±Ø…H$Ò+Ër¯Çã÷ûý¿ôY¥R1 óë?ˆÇã xyãÌápŒñPUµa.‹m¯×«¥ÓiiãÌn·K.—k­^¯2 ó!›ýì6w:íR©S°Ûíî óÎmžËÌ_BW8›‡‰DW8™Lƒ—çÏàåt?î\݇èÅ>LŽ„?€Ô¥AdÜCPoÅÇ¥³hÍŒbKðj³Ÿ§mx•¶¢µ á±¢vM‚ê³a.hÃ3ņwùüX°¾2¶uø{K‡%¼¾):°ê—ðÐkÃã‰4¯[ KxW"l%|Îüµ"áím…ˆ3>}k fù-þ¿”°`ùž ,€U“ðâ”àÆB?7ÖaçqÑ×ÿn)&feùÀSEpcvá?À/’Âà) ÀŠ&7þr_›[úÂ6&Úy€s“O¦¶6¿ñö÷æŸÄv²Ýl/;ÀúÙ6ÄN°Sì4;Ɇ٠;ÄúØ~¶‡íb;˜õ7eÛ7V$3]IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/document-open.png000066400000000000000000000021451276304217300255700ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®ÎébKGDÿÿÿ ½§“ pHYs „ „ªâcytIMEÛ 5W’äåIDAT8Ë•”Ïk]EÇ?gfÞMlb B+-µ©`¡µl­‹ˆ¸êF)ìFAqá² ÛMÿq‘…jÄ•õ´](RiU(E¨Ájmª4±yILÞ}ïÝwçwÞKŠÔâáÎ=3ó=ßósFH62228???xîlàW`‘ÿaÏÛX»Õ²¹¹9›œœ¼ 치;tüóîÜòFƒfž÷ÆÊò2õùynÎÎ2==ÍîÝ»·¾òäà±»R=tâËO7?ñŠš™åF5òÜšynFÃêu»13c/\°©©)+;ûàÔ©ú˜¿pì4 •/Ü66Ö[çÀÌ@DpÎB ÙlâC੉‰áS~tñÓ?/mÚ±7Š)fH­®|üö3û@se Õ˜P̪¯Èj çðÞ#É·n`@&žÜ¦CŸ\¾Å¶GöpùÒ™üqÈ4VhÅmŒ» $ÆÞ{jYF–ed}} 2q`?ÏnWÎuŽ¼Ý¢±²D>_×/þ…‹EÄÌ‘»® Y_£££p–ÑßßÏú¡a^~é0÷~ÁÔ×ß²²8Gxxo e§­T¶ªñZ}½gp`€ÇÆ8wö,‹KKEA,KÌŒÍ[¶ðæsC¼~â"Ûîì€NQPäÍcIZ;3¢jN¨Õ2†7ŒÐ¿n€N§@ËHT%–òV›»v2ûêqÆ7£á33÷ÖÓoÐl7Y#*,çm¾¿<Í̳¨*ª†™¢€ªb¦˜*j5rõfƒVQð¢H8êG÷þVÎߪóî±×þU“qd+î«tífr[|[Ó_YÖg7®]û]ŽN}sýÑ]ã›bYŠUÚé÷z½A}±èiÞ (àÖø"¼ç§ïήüòçÃC÷SÆrµÏp*DÀ§’ÖôB)«ó8•tÙ&¨ Á J5¢ .mìõHbÒ1ð鿈µôÔ9 ú¬úN‰j3KŒ˜ p &fFÅJ4mOÚt€2T «sÁè2îC•¢VsK¾HjR­wt•@YU#fŃàïNŒŽVéútJ•² HÒÑ'y\ ˜ê¡ÔäsŽ fV8iÕJD3¨ ´ î(lMíõÚ4íÓ5¥ ‚ Ì]¿Iغqã;Âk¤+w÷æ}î¦Ò…ÕÒzX³­b}à*3„åFa/5DÍÀ 'OuÀ€L ô  }r­*€¤*»[ÖgŽúâr”ûïiµíˆwÕ lf£ f⮌†Î4µ˜ˆ™bÎW=åDÌSÃ,ïýhl1~Q]ëÃIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/document-save.png000066400000000000000000000014361276304217300255670ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsvv}Õ‚ÌtEXtSoftwarewww.inkscape.org›î<›IDATxÚµ•]kA†ßÝM‚oô&é—”šŠ½Åký¼‘Z?ÀoêMAHñ¨?£‚¿@èHHJAk‘‚Ûš¸™ÝYçÌÄa– Bßp朰sž}÷lvãåyŽ£P‰–×®oGQ4ë>î®lLZÇRJ´Ö[hži‚g™2èY°…JÃ3‰N§£ÁRæ°`šs¦€t‚–Ë>6>uqݼ09õR(–DÁñBsAŸÀó8ðpëâ<\©C097Yª…æ+„$·Æ±EǧK£M,Íðqs‡Ñ•Å)d2'¨q­X®c:`ÀªfI†Ëç¦`ÝšÕ¸Ú—Cçqj›QÈ8ÎmæØìüÀa´8{Ê‚5'wÁt BPiŸ>9É S;޹ ~vÓ\4ĹÀ°„§aV:r#dd̰\Çf¤Õûw0†ˆå:¶£[dpÔñø}@èÉû«—¯VQ«Õþëléöúýžîž4?O!0ýT8ç¶) C<}üiš¢Z­âÙ‹ç°r^z{{%ìïÛ~!²"8ã¼ÐÈ¢ˆš©va ¬CpN@ê‚€XX z« ¡ÃS®ƒ µ‘pnßhÔ_o4ðuç›só„”1c~©¤¿"IIÁâQQsì[¨,fjoLµvÜïõŠŽ}/¸÷3 [µ‰ ‚kÐʃ‡HyªoRO58@ë~ð;BÌbð4¯T°»»[w¶»oNÏÌ <Øo!‡ßn·QQíó/¥ Wß(M]3Æ °\Š(ٟ餻P—ÿïâ€IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/entry-delete.png000066400000000000000000000023551276304217300254170ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sRGB®Îé pHYs  šœ’IDAT8˵”klSeÇÿ§==§ëi× ÛJÛ•­£ÀØÅ­Cd@ŒŽD¹m0$ÆDÄÄ€"E¼-&Fƒ~OJ‚Á€fÑ%rMerÙmlCX·96ÌØH·ŽÖ­íJÏY{úøaJDÅX_ßçýåÿ>yó’ šãR>ÏÏ?zº ÀÿšÉTôdz:–Í=WZê;QTôÍ@—ŒGŠ‹$ºpš²²ü/Z­Åð’Ñèlr:G--ih 3ee߲Ɉ3´ÚÊT‡°Ûiéþý3¢;w¶¦ ÂúŲ\¿tß>5ôzÒÈ2“f·/W&#ΊFÏj:;7Ø9N@I e9ìŒææÚ…{÷²J—‹ÐÛ Ï¡Cá+'OV2H’çSS]µiim+Ö­c‘ŸD4 …Z òzÑY_SׯW¼ 4=x3]5ÛÚ«P•gD£ó€áþ?‰;%iÔ*Imæ[·žd‰HÒÀ†Ün¸»ºª÷g¸° Pì± ç¢íµ4Þù2zû)zµ,·cÃï.4AýûÜv`îwyyQŸZM†¡«u R«Ë5õà€û‰KYÅÞÝänK_¢ƒÚaÁœeyxüé|‹«ÜñÄ`£¯ìŽ5tõõ„)cíüùç4#R0 CA«…¬RQ¶Í¦4çä¬_84tN Õ@Ù–m¶£Ò½ tüÏpî<2j²€`Gú|;º4Α/¼3«ro•÷÷›ƒ¡qJ%ã5äK’´ÕÈó«3ôz6¦PÕlTÙÙÕŠ€®¤T÷ÙÊm8 IŠ£°†g K¬‹:ðج@¸­ {¨z€õOtmügª²9¡Ñf˜šƒTv@"Øwé T¬Í°GF [„ž`ÀƒDçCÅàniðå•PØ‹‹ |¯H] P@Š=©/Œ¸&ŽE5:Þj²<©j9¢x©{ú÷ùÛ®¨œ&»"´)ÈL7£Ò<¦5/À’–0v ¢L…!ÓŒ±V¿q÷¦§ýööã  IO-Àn2·uŸ,€—z@Ô _æ(2”IrO)}\‘5¹˜ù—Uü]@„nß[Ƙ¸EƒÍàçXeFi #Á„Á†®õbè¼Ôl²µy8Ž&/â˜dÿ2†ÏY(]Ã0XèÔªe¥ÓÿI _>>S Dv n"„¡@p¼76…Füßü ƒœìmìédIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/entry-edit.png000066400000000000000000000026611276304217300251020ustar00rootroot00000000000000‰PNG  IHDRÄ´l;gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<CIDATxÚbüÿÿ?-@1"s€˜Ê~W[ +ÁylRR3˜äÙý~›Þøïç¡™ Ç ²r ¹ÿ/¿â§Pú+Š¡Ö@¬ UùŸ‰×»z‚gò¥¿ì,ÇöëÎx»ªB(Ñ@pƒ]ÄùõHV ˆ¿ñ >V%Ä>PCA€I:ºÌiN¸·‹Ø an~†5û5 A2Ä"4€Xî„«CH± ØÂ`¤ÀúÇ`àf0»°@[â↟@W=ݲåö»Û“3@²Ä$$, . ª@Wòþ…òÿCåø€˜‡áØ@¨€´dYsŸ£çg â—@w?ù³}n.0ð€B €˜@áú “aQ‰fWÝÌ.óNøÆÀ`õ2`ãAÖ‚uqXTôx¶(˱3\ÃÀðåÕ?†e͹Mÿþ>8 Z€bˆ  Œ‘…þÒïþKþÿÿgóÿ·§Šþoo ú_b¦yÖ‘ÁÅìê ÙÅ–úƽŸÿÿ/¼øÿÓþÿÿ5¬{÷%˜af‚R@1DáÀ€«Sç=òj•öÿÛËõþÿ—”ëâ9ÿÿ¿ný?=Öæ‹3ƒ7ƒ?ƒºåÖù—Þþÿ¿âÂÿÿYkþÿ7Ž8 nyät2 €"€ŒT.–Ö'‹Uþw°œ d`¨¿6ß(Ä-@¼ðÿÿuÿ&¿ULê_~âÇÿÍWÿÿ˜òÿ¿^Ú»ÿ ,zÁè©d0@±°03†Å UHÛ}fàš÷ŸKFRJU@$}ˆ¿ñ{~EËD#¡0­üAv†ÎU ·î“áú²) .­Å–…ˆ¡Ç˜ãóÿË¢ÿÿ_aøÿ÷ïÿŸç•þÿÿÄþÿÿ?V ÅŠ@ìúÿÿ߀ÿ[æDýßæóÛšÿÿ™‚€N’_JÚœØÌ¹ €˜®^ùYshñ7`â``úõ™÷ÃçŸ Ÿ€©øï†Ï/0üþxŠá?§2ƒƒÖ+†­ üvÜcxXÇÌ? Àub}4ÈåÛÏÿçt}ýÇ%À6É$˜^4 þýÏÀöõ5Ã‡ë¬ «h0|üûáÏÕu ¦—–oÿÅðöŠ88mCÒ£<4§î† @LL6yzݯ†c+ÿ1ü‡eò@ü‘˜‹Šq3<¿uŽáß‹2†ÄÒ­ SÉd[*ŠƒÌPÿÍ¡ ZÉÅÄ Í]Ì毮ÎPìÅ`k L_/î20ÂÊÇÊÀÄ”åúÏðé§²Ãï +꿾߳ön)Ãï¹,Ps.ƒÊ`cÁ-€ 6½æ§ªÈPüêÃmq)9iy3YûxfPiÇÉÄðOD„—OœáÔ"V†ÅW¾{ý¶hÆ36 ül ÁÄR5ü?Rý j°Ì`ºU dJ" y¶¶ ž¡Ó¸>ã÷7—´8ç«" }ٮܿùÊ hð÷ù@ƒˆ ”û·@Ë6$ƒÙ %°,ûLSO~þ!tÿ†™[Šþéæ·'_~~}Læwì\¹uþ20jÁ €ÀÅ&Ðr† @|Z’±@-`DOB `øÎP¹d5ƒvßl¿M³¾r¿úéö[ ™O \Ì,v°’ €Ðõ‚«'}h‘΀TúB‹T(û'(©±0Të0½ûÀððÍG†ï?0ÌøóŸáÐ"`P#­*S€ñZÎŒ¢çIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/entry-new.png000066400000000000000000000031131276304217300247370ustar00rootroot00000000000000‰PNG  IHDRÄ´l;gAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÝIDATxÚbüÿÿ?-@1"sü€˜ˆÿñC ¾ËÈÈðÅP™—›ñÃOfv.î­J*2ö` G1BŒ¸wçÉáo¾z1°ÿýñÿ €bªÄü@üj°*Ë5¾|ð‚ᆲ Ã'Åï ÷¹E¬ ­•Ö±ü`øÉðá?#;ClW‹ÍÞµÅd¾ÜÄ@`ƒÙ€Øˆÿ€Å ÃYXê݆?ßÎ) þb`æþñ÷+ã3†o@ƒÿƒÕ0õs10qþøÇÀþ6ØêRF( õÿPËþ12AØÿüúÃú™á9Ã] ±¿X€†¾üþ‰áðã ÞÜùÏÀùÿÌ`€bñœ ͬ ¬,5ÿí‡7Ÿ¾}·ÞGAæCÜ ©Ÿ*?>1½b¸ÇðéïO†+ož1xt‡áở fd`ù¥ÂðŸ äžçÄ"‚0”INš{NãJ‡LÇ6ßM?°åæ¹kgî/ÿûí玿µZRŲú< g>Ýfxûõóϟ¸9˜¤ØU8Ù?üû¿ÿϳ//€ÆIË_h°³0•eÔ+;s(}gàä`ð2´gðÊ47º~ä¡QwþV—ç§žä¿Sç²SP0äâbøûè”ÿŒ ¬L_ŽúÆð]•‹áÓ£À¤ó­ä=€bÖ…D”itªôâŸß>þ\Þt屆úA.AnYQMY3C.•çKžI\»ñ,ôø§§ºªÒ*ò’ ßÿúœ‘áó× ··ß~ñýÞ[_&¦m 5 ÄŒ^#cÞ9©ìl›¼:¼÷ÌϲÇWAsˆÏñI†æµÞ!áߥ§ñnþ0aòÖ%W/?fâgøýåÃ…uWo~~ôÞ™ñ(,òˆEVŠu~R=·“Øs†ð GË;J6Úž¯€Rï˜v¾±&ƒ„ú3E™†FÇþl1û;cî®×ÎÎz…çÎÞ=ñþÉç``š{NR̃ˆEH€Ñ\P˜JÞ}g0öee3æ½ÃÆL·`E¬?¡†?b¸½á.éão7óCÎâ8à ¯E»·]Ø ”< Ì`)ø9$±³Èë¿;^ßüãcêÉ.Àø”mC’ (VY~2¼¿ü–áï B ül’&·N|zùë Ð+†¿?9nãeøÁTËý˜^02üÝú›¡¡¾ €#!™ÀÈ7y_lë~†¯ÿ 6óBó8|»ÍÈð‹OˆA@W”áÞ6†9ÅÏŽ?¼õ,˜c/â‡\Àû ´`¸ùÏ@`ƒ!¹ÌÝÉ“a©o*ƒ°¸ ÔÅÜP ¸€Üg ŸÞp1ðèˆ1ü}#̰¬êÛ§=«ï”°2üžÍ Í  ü9j0@1ÆA³-¨\„?C¾½Cª[$ïË âÀÒIh£(P0ÈõÌ EExEÄŽÏfeXÔ~É»ï 8Þ‚´ŸaÐ`€b´–lŒP ²e*Bì …_2Üáádgp—`òKcfUFY`ZaæcgxuR€aníë[WÎ<Íÿ Î @à¸tåA¨¡0ðÉ"`¨°ƒJXbe˜›0$e/bI~yÇÆÀ$+ÆÀñEœarÆ›¯'=Tag`x1h0@‹­@üZ|B“!8¼¡| ø †'ÀDYsþC÷¢L†+þ3ߣ¿Ÿ2üf¹Å`áÈŒ&#˜Ã^ÐobPœé±RÑùÉ Ëþüaèßva0>Þ½bØœ(ù_ôïÏ , ¼¬ö?üÜR @Œèu38ŸAÂj €² ;” *xÙ2Œ4Z>|bxôö#Ãõ_˦]‹€A@Œ´ªL ³|»©ÖáIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/password-copy.png000066400000000000000000000017061276304217300256270ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<CIDAT8••ÍoÜD‡ŸÛùØd7Ú¶U(Ý–§‚RÄ•þœEJùRE$ªzàDC.HpàÄ 5A>Ä!.@«Í:dí]{Çž—ƒ³Ž³I¼Ò+Ûãñ3¿ùÍ;%"(¥ШV«õÅÅÅWfffnº®;áûþú§«««ûü·ÀW%°n47–——¿Ãp¢Ýn “““ºV«ÙJ¥ò3žGÝÜÜ|877÷‘[nœŸŸc¢21Á—n*×uÔÎöëzvvö¹+Í&J)T®„|’y(@kM¥R”.ƒ§§§ŸÝÝÝåúõgp¥4Í«MªÕ¾ï“eYJ=D)$·à8Xk}¡^¯‹ë:8ŽFë<¯]»Š1†(ŠŠ¶é8h}„;f…ˆ¨Z­v쥣ccXkóé–Ô¶·Få|y÷Õæƒo>~¾Óñõˆç!ý¿QŽ‹(è˜è1Qðޏx¹y? >R¼ýkëåË™Ÿ¾ââŽc‚_HLŒØg¤Â¥1¡úÔ$þö*ßoýÆk·?+ å«Ê=¦PlG»29êÐh4˜ª_¢:ý$iÚ' |:Çì·Û´v¶±V ‹ÊàápOm¬U8JPÒÃÁK‹|&tPg‚R“×§ ”ËçXýþ_ÅZåyVœcÅÙŠÿ-Ôð®+ÝZq¶âóÀ§]Ë]\ÉÄ3iF’zq‚׋ñ¢.iÓíÅôâ„$1˜4ÃÊIx–eˆH‘…⃃ð⣽ƒ½4ûËëô¤:ÖŽÕ¸‘e†~w#¢n—°g1‰-€AI’¦)J)¢(Ò€¸?mþð^ò€O~ßã…խϕ֕b[—üTJ12:Zl„V«…çyLMMþÞ_º¿<,Ë×À‹a†QI¯×“$I¤ßï‹1FÒ4•,ËÄZ+""ÆY[[“v»-ÖZétäwßú¨‹ç‚1§‚ã8–••‰¢H:¹ýöÜwÀ…ïÔª^åÓjÕZ‹Rоésçý;_Ý»{ïu ¼ËúúúÆá)pnt»]ïÖ›·~\úbé =¨a5t˜>ÔÉwò ‹¾¥çrûÎ!´ü;áÌÉ1œ~IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/system-search.png000066400000000000000000000024631276304217300256050ustar00rootroot00000000000000‰PNG  IHDRójœ šPLTEÿÿÿvvvvvvvvvvvvvvvvvvvvvvvvwwwvvvvvvwwwvvv]]]bbbooommmUUUwwwyyyƒƒƒ~~~‚‚‚rrrzzz|||))))))}}}ˆˆˆ „„„ƒƒƒ‰‰‰ ”””””””””“““‰‰‰ŠŠŠ“““”””•••ššš™™™¯¯¯¯¯¯›››ŸŸŸ±±±µµµ®®®°°°666222>>>SSSŸŸŸOONUTS<73KKKPPP///000Q<)xp   !!!""""$'''***//&5 888<<<===AAABBBCCCDDDEEEF!HHHL( M) RRRSF;SSSTTTUUUWTRWWWX([[[^;!^^^_,_=#aaaeH/e_[eb`iSEn5oooqUErFu7www{F{{{|||}`E}eP~E~~~€€€………‡‡‡‰‰‰ŽŽŽ’c7”””™a6£pH§wQ¯¯¯³›…´´´¹¹¹¼¼¼¾¾¾¿¿¿ÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉËËËÌÌÌÍÍÍÐÐÐÒÒÒÔÔÔÕÕÕÖÖÖØØØÙÙÙÛÛÛÜÜÜßßßàààáááãããäääçççêêêëëëíííïïïñññòòòôôôõõõEÏetRNS  %',.55@FKKest{†ˆŽ•¨¨©ªª­±²³µ¶ººº½ÀÁÂËÏÓÔÖ××ÛÜÝßßßáâäåèèèéëìîîïððñòòóõöö÷øøøùùûûüýýþþþþþ¾ñ«ãIDATxÚUÐåW“ÇñKŒ†‚”4Ò - t Jww÷xhSºCé¥ÂÐ F‰#tÈcÿ ÏvÆáð}w?ï~îâ×¶·×ᇉ‰€°Óͳ0ˆˆÝ«¬£¥œîëëë7ºr–޲w*åÂ::g³ÿý= <½t•â±bÈï«ÿW—ÌŸ?Pe?æ± ù!ʾ@1ώϘ»æ‚<°ùÆ`üaì|?Úc|}.ÀE¡'ÆÇû´=oM-ÏmÚ—-5!Œñ>:½IPPI ´}¦Q^á1–ñ£R§ß-vZññYu.¾ R}e0–tšGH…aOõÂ2 IÈ|”‡$gõ£‰ä©þôn2¹;½ŠœøRžûÕÈåuÊB.R]ä.PÖ—#U9*íÕPÛ@,oÍIKËi-'b‡—4€¨uÜÒÊê(¡ 9/¯¹€0ºº²g- ÊáC%YùƒíÙeuueÙíƒùY%CáÊ`_Ô26\Ñ‘Iª­!evT µÅmeiãÆÇ÷U©ÅDbqjUϧÆÒJ[0Œ­ø0Þ•äf¦¯ÿÌ-©k¼o¶)ÖBg&GæÖb4K#fmndr&TpÉ›)Ñv–°‹NÙLŽ0Àà”L,ÔÅ›¸º…ƒ©n䂪iø6ô×IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/actions/username-copy.png000066400000000000000000000021341276304217300256000ustar00rootroot00000000000000‰PNG  IHDRÄ´l;sBIT|dˆ pHYsaaÁ0UútEXtSoftwarewww.inkscape.org›î<ÙIDAT8•Mh\UÇçÎL2™˜ŽILL'kKIKK¥*(±%-’nDèB‹¥uãJ¨­B?VE© U‚ bèB¤ #–‚Á‚¥¤‚LKíG¾šÆD“ÉÇÌËÌ›wß½.棓dj{àÀ{÷Þ÷{ÿs8ç±Ö "4ÑêjÔ[7´E;?t§Ïu1<ºY`ZÊÀ Øy®÷»ãç¿<ùêÄìbP¬%ÖPg9¯oŽe…:888ÚÕÕõY°|±¶¶6tóÒÏí×&þU¾ö‰T˜šMªs=§vôüp¥AòJÈ™7”RD"‘@–À±»òí§]Ä6m¡åÙmžfß¾ˆ‡V—ð"Ø| –ƒÇïÜÓa^~­# ÃQÀGªjxëͽ(%(¥ ^Á20ÀŽÛ­XƒòskPÚåÅ—^  ÷çåßÿÉrðjÅOlܢɌ•§Q(ßåÉ mˆR¨2p ¾ €Z F×úãÃÃt†€çà¦Dc(¥V»Hé9PðB•É*0Àؽ˜OÎâ.9üyã&®Ë«­/x¹ÚŠ9F„ÚÆu ß½GÍš5l|n¾ëPY“OAAiþ¨¬ú¼XË·ÄÖ­?vâx¤eûnBÏPW¿¯qÝŸÍÅ‹¿•—òŠX™÷ò¿²³cëž½¯'6onû&~%!w'&˜Ó.üôõM-ć8Õ}šýo¿K_߯+À¢Úwí:® eôóYGcŒÏ­[·ñ—\Ü™$ñxœLf c4SSStwÁ¡Cï=Pu!(?'û3)Äyonj'MC*E[Ûf´¯±Ö`­Áø>###\¾|åÿk­C¾ñÉfsdÝžÖLMO3>0€err×uqsù=O{d³.‰Äµ’Zß÷ÑZãy^±Ü¦R‹#ápÍÓ* ”Xk£áÆ_4ÍÎ09ù7‹k±„BAb±óóóÌÍÍáº.ZkDÇq`ƒ×¯mhm}j}MMíiµ­©¹©uøÎmµà昉>Îíß/®®"®¦±±ƒß¡³³€D"A("–JílïÙ0е¶(_»ÓétÚq›Éd¬ëº6—ËYÏó¬ÖÚú¾o1ÖZk=ϳ6™LZcŒM¥íÇŸ|ô#Po­å¡`Ïó*‚³Ù¬íïï·ŽãØTjÑ~x¤ë ¡È[Ýy:ªR‡cr^Ž£ÇŽ~ßóUÏûÀ\q%Ø^½z5^˜µ¥¥¥Ðá_é=Ó{Hk@V ÓPOþî.zélÙ{ùúxºlàþŒ²˜ñµ IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/mimetypes/000077500000000000000000000000001276304217300226575ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/22x22/mimetypes/application-x-keepassx.png000066400000000000000000000021001276304217300277470ustar00rootroot00000000000000‰PNG  IHDRÄ´l;IDATxÚ­Ô{LÕeÇqÿ`c ÿñë¿f©‰PÁæ\X\ D\¦ ሚ‚0”ãa’C¹hȈ‰EuDÅÅ!rGp¡ÔÒÆ¹”Üï—@ rÞ=Ïo²µœÖ:Ûg¿ß~¿}_ç9Ïó=ßuÀ:ñY/òáÿ—Å\†ýž?þŸ »—ÄKÓ'ÌLOc40ÎÌ0+c42÷"tt¥‰Âÿ /§>‹æþ½{Ì J¬—Ί°ñïÐì,¦¹9æeL&ªª~`ŸÚ¿B7nogwù6\nâî:¹€5à¥%"##qÜó›w¼Jii) óó,,,ÐÒÒ‚æb¾ßº±ÿ¦^gÜ*ò$ôW3cé|üQ¿:rHEp±7AežlñÛ €Oùþ†Ž½)Þ®ÞIâqŒŽŽš£ev%˜âŠ¢µáËZR}ˆ¾ÂÉZªsŸ¡Ó÷ÕiÓ}ÐüBN™ŽÁ2uW8’µ—ˆŒnç® ˆ‚díçD\"ñ—DäíçÈÅ@µ*¢o&é.Œ«•_£¾ÊùßÔœÍ8ÅíŸj׆å~öõõñeV*gJNÚK\íqëÔ\jŽ'ýa"—ôñ$Ô¨IÓÇ‘v?kÙWèïï· /Š=íéé!åZá7ˆºÄÉzš»*"ò÷óij !÷~YEŠîú‡zL&“ìeËðää$ÇÏÃó;Gv–9³«Ü…].¼—ä@Dô1R2’Ðæ¤S]SÁ``zzZÖ­/ ¸³³“wömÁ;ÇŸg¼uNx^“…o³û–+·7’››ËÄÄãccŒŒŒ(‡i4W‡ÛÛÚpØŒg®:áqÍßw<öº³M#žå¼…_Á»8Ø@ff&­­­477+ÿÀÞÞ^ ½¿"|HŒG®XmþVÞžòɺxZ="ö| .¡›pOs`[Òf6x½Bò… äçSWWGUeå¢p¬V„ªƒðÌsP`ט×Ù걑èµ²²ÆÆFBÂ0üç -]zZ~×Ó!fGG{;µ55f{{{wi­WT–óMÞ%‘4ªk«•Óžs`Lìe›Ø¦ììlµ3??Ï´X¢5‹ ÍvvvHgUXÈÈî×¹¹9åÔ‡‡‡Ñëõ ÜÕÕ¥ ƒýýr̶¶¶ÊJW…Í6™äà‘‘÷rÂ)ÈÐÐMMMdeeÑÝÝÍè‚‚³ÍŽeÈ"¼Ó øÉÔ”ÒN(.*’í(¯fkkkµ ›Írþ.Ãò^™ÍS““ô‰Vú¹¾ž—–”˜­¬¬–¾e@ârå2rp?{úTù‚‰ñqÚÅékµÚgUzõßÂëEü-ÄCäeKàrþ÷%]rÕ ýIEND®B`‚keepassx-2.0.3/share/icons/application/22x22/status/000077500000000000000000000000001276304217300221665ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/22x22/status/dialog-error.png000066400000000000000000000017141276304217300252650ustar00rootroot00000000000000‰PNG  IHDRÄ´l;“IDATxÚ½•]L“WÆËGû¶šÑ Ä ‰3QCro¼Ú &e$VÓª‰Êf³€˜TÃoŒÍæ…Ä0š}ZT‚¸-Ž”¯R)¾…µò¥µe ( â¦ç}û>ûŸÎ6múz¡‰;É/'ç9Ïÿéÿœ&çÕø(¤§5šŒkî}à5ï nZ·®Ð¹}»¯¹¨ˆ9vîTZKK•»v)7÷ìQnY,J›Õª´íÝËg¾æ:ßúZL&©1?ßÓ`4¤w:ô ätb–xÞҒĬÑBÒ>ÕŒ]½Š¾ºº`R0?ÊO&›ljRž]º„jÑ\Z*ñ¬x0¿§oׯŒ?¯<>w1Â. L3g2àÙ³××#”àåµßmÜáYIÁÕMd¨¶&2rêF‰Gd–––ðB1~ò$ÕÔD©®Æòì,–¦¦0^[‹ñ·þaª¥ŒÔà*½Çí‘a»£ÀÏÜn*+á+/ÇÒÌL\#pìüT#VT©ÛIôؾ’ï>5JËËHÓ.^MO'i‹´É?d³a°âÙ®|”Ä^«Y°X Z­(+£«x×x99 ¯ÙŒaòr¿÷à>ù¨Zp9‰]ÅEò½’ˆ„ŸðìÞ7*á‡B¸¿m&Èó€<Þâbt~±U*W ¶‘øsî'¬}õj¸Ö®…¸a¼›6áIw7$I‚,Ëq|/b´ £ùùpgeáŽ^–,ÙÔ‚ËHlÎÒ±Û‚€.2ºW¬ÀXc#Tq9‚y‡ÈËýmF•© Ñù©ŽýF¦ž•+1~å æççã Ò„z{“4oEþ ÿ=âÎ*P ÞObë*»K&ÏæÍx bnn.Šxù2F´ZÜÎÍEÐåŠëSýýFx üš-°ýjÁœý_ÇÄà–-x:1@CÒ‘åŒ (DwNBø³¯¾¼xªèõø¯T¶Ž Î0Šâ¦äi†ÍøüÒÎuâŒî7ø«®ÌïH:_:9‰ Ëåfgê°¿@%UªQ­»Ã;úYu·þ!SÝ~Ÿ4ãÕÈ“¬WˆŸòÉqY¿»p6Wý’ªoš‘\s#÷ðzE¿ðâm<R9÷ZÄ 731‘ÆŠ¶eþV¤CBe?â+ÌIåá¥+¥z`E_˜‰9Ñ ‰_þ à2‰ÝdÁ›BÊ_Þ‡èÒïWùe7ªZ‡q¦åD|ѳjF;EU¤™Lbwe±sl-B‹ºV§°!ÂÚbÎS©mÏ(Y.6¸&ªùïÓ¾‚Ïôx¸°`dîÁCìUi…úªø¤]yeu›ÄžŠIiRvm3'[Ë´¡P3áZ|ô>™\Wé±+§Cè?Îúó:0ç‹3'—‹§ÜäMðJ½j"½^™:xí@Ÿë’Ø#•ëÙØ‘­G`^—1·9±ÏG| ¬½•ö÷²£Pôo.Çság±1²ޱx%ñ2œ“´x#£ Ç ˜ŸŸÇ¿3³pü¨NIpThaÖzçh ho%h÷qçÇ&ñVy ùˆÍ *1ÊCïó™EµÂáð5LOOcôIP8×¶ u±j”‹sþ%`W­Iì*#ï\nò“œ…hÄ¡è6Pl'ÛMâˆÐá^¡.ö9Çy–׃|>¹ÊâLbg• y(&(è4è]„]E² ¦“ÑãEù’x ¶‘,úЊ»nìsNÌׂ¿ ®Çbñœe;éÍ# Ú îâ-èPléér¸ÆÂÄ¡/æÂ¿ISh«ÂwÕ·¹Éëig>(¢™Ï±Ã¸+IB\r‡à’w.ùÃ|¿‰|$w­ƒqf‹ü¼Å×&‘÷hà/’ûEP|Hþ#(åWPÆ(ç/ã‹uiŒÙ-²a֢شsEà:©ò (í)½ww×˺ çîû PëmÉ÷­Ü•{ÖþibÈ1ÊÎÆ#YeïÖmç—1e哺(y;uÑÚ?kÚÎ/ýº­WJ®Yã7Ï2|IÖšÿ~®Çm#;_IEND®B`‚keepassx-2.0.3/share/icons/application/22x22/status/dialog-warning.png000066400000000000000000000014271276304217300256020ustar00rootroot00000000000000‰PNG  IHDRÄ´l;ÞIDATxÚÅ•KHTQÇÏÜ[ºHZø(,53!Í…´¬M…dÔʲ¤ Ð.Ú…ö"Ú´|õ ¤É‰ rÄñ‘:>ÊGèh£é8“Žùtš™F;÷ÞÎB*ñU-~œ{>Î÷ûþœ³¸ À_áÿ‹¥¦ <¼OÌÞP±ÔÀ½š2 µ_‘¥z®lcÄ,\¨ŠöÂÚ›H/¨¶n±\Ç×H†ëÀˆ~ ±1>=_³>q3‹óéwù0¨†«[WG`,„ ‹ò¡Å®Y,Öò©ý2äbXµ%0W>†Ü{’á,D=oX›¸íjv‹è{˜îÂ\vCÏó)ñ  ë*¼º -,yÕbAÇuŠÎ}7O¹yšsñ5 7“Äé[ŽB¨æ:V'~Ç/TÇÉèÏ&ñ% ÿ¬O²`)Ê q*ðñЂ]´Lg­XìÕò}bçIJz†¤§ˆTØž¥a¬ô :@õ`à8Äž4xµœqEbQÏN{^o¥D@O,IS2&_$H:˜DûHyx´!ëØ‰åÅŒ©<Þ,´ØÈHJ˜ˆAgu0¾0³Ÿ 3]¡ð¨Ù¨÷b¡Še¹+ÂIäo‚…øBØ$‹ ò(õN2?ÄWÂÆÁ]AÇÎÿ^¬a¼«4x\èõËÆ¤ã*ŒdDÀz1 ²ƒäNª;ˆbšÁgÚW¡ÊFîñ\Ëuª£€1%É41K¸Hlç0š¾ c™çIÁ­IÑÀ6-IìQoi^hÞûì öÛËP ïÇQWy’ì)ßlXš8@+‹‡%-R¯¬Mlß"µDKD£BK@+A+ÝKkì?ùçý¶F`ª“}ÞIEND®B`‚keepassx-2.0.3/share/icons/application/24x24/000077500000000000000000000000001276304217300206475ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/24x24/apps/000077500000000000000000000000001276304217300216125ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/24x24/apps/keepassx.png000066400000000000000000000031541276304217300241460ustar00rootroot00000000000000‰PNG  IHDRàw=øsBIT|dˆ pHYsÇÇn0©tEXtSoftwarewww.inkscape.org›î<éIDATH‰•–LU÷Æ?ßsÎ凪÷æÎ[ôÂÆhJ” ¢M@¦n6â~Ô±F32GK§N²¥q«]¬:lìVR,Zæš Å®S3¥à…¸Ú¼Dª R „­AD…{¹¿Î»?øÑ[Û?Ö'9ÿ÷}Þ÷yŸçä(á«B)µÈ–±À‡@ pZDBŸ{÷«(¥â€WÒÓÓ7oܸ‘%K–Kkk+ œ9s¦(‘î™"ù¿`¶®ë=;wî¿ß/Ÿ wJýãræúŸ¥sè †RWW'V«ÕdN×)  (Ôg8("¯=0ý›»wï.ÜZþ5-ûp÷7¢k i MS$Îy”’e»èjû999×Ed™ˆŒ+ Ýív§;N¼^/yyy¸Ýîí"òÊTóì¥K—6577órS9WßCÓº¦0ÂðG^l)‘8ãxqÍ_Øþ‹TUUU¿Ôe·Û¹:ÜÊ_;1ꣾ¾žŒŒŒJ©g¦X]\\LÇ`3î¾K˜¦`šB`"ÄJ!g÷µ‘eþ”žOnr¾«–’’€ï1Ú´Wþý!§ÚÞâ7'·ñÑp ¤¥¥U*¥J€¥\lÇÁ4Á4…[mwɺ]×Éß”ÏÍwGè¾Bjj*ÑÑÑNÀªf `É7–ƒhøƒvÚA×N.\¸ RSS«ìùóç3âž™Þ4!&>’½{÷rûöm***ˆ›Éï0†a0wîÜHà! 8¶yóf2žà×O¾ˆ˜ 0ÈoOm§çþǸ\.µ`Á‚Èîîn’í ÄGõÇH^œÀ‰+o0?cób“¥¯¯ïàQ"‚RjVVÖŽsçÎq¡ëûÏÿ¥C”%‚—~ø* Ñß"""‚KýõT_ªøœ{t]Í\Ó lÕF®ùY·nÝUàÛÆTÊ•Rúúõë·={–`(Ȇ—ðüì<¹•½OUâ¹?ÆëÿÜ ¨iG+A™ŸY93q5¯"óû™ïãFXà¶+¥ô 6BS×;ËŒ<´†×Y­V8D‡¨©©YS;ÀD$ðe++¥t nªÎB€î†gáY£ä8ˆ($IEND®B`‚keepassx-2.0.3/share/icons/application/256x256/000077500000000000000000000000001276304217300210255ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/256x256/apps/000077500000000000000000000000001276304217300217705ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/256x256/apps/keepassx.png000066400000000000000000000503561276304217300243320ustar00rootroot00000000000000‰PNG  IHDR\r¨fPµIDATxÚìÝ xŽuð¶µ1‡6d9Ô^!öbËìÐ6çJJcà !Ô«ŠÒ‹‰2*‡™Ó$3sIÅÞ¨—B5‡ÈRâ56sÜ0æû~»¯tÏc<Ïý¿ïç°çùÿ\ŸëÊuu%Ïîÿ÷¹ÿÿßÿþßw$ÉE¹ü I2$ÉŽXÕ)‚R"ͧ崞¶RýB')‡Ñw´…2hÍ£)ÔŸBÉ×Õ?W’Ca•£64†’ékÊ'XIm¥÷i…’‡«ÿdH6Áò V4–6S!ÁÎÎR½@\þgäê€d,V%êGt–àà~§eô4yÉ$XnÔ–Rè"¡ŒÊ£9ÔB€$™ÁªGoÒQ‚“ÙK/’Ÿ I*Õ‚Òè:ÁÉÑ"ª'@rõLë .è*-¡‡dH.…NŸ¤»®Ñr  95V]Úp—ô¥)¦ò“ 9–½f˾}¹r刘˜Œ3‰‰‰˜;w.RRRžžŽÌÌLìÚµ ;vìÀæÍ›‘––†%K–à½÷ÞÔ)SðòË/ã©§žB@@<==mùô¹ÉÊг½x– É0¬ ZEFFâĉö™W_9‡Ÿó~À¶#ðñÞ$¼·m,¿xolî‡q{âÅõѺ¶†¥wÄè ]ñêg±x3³?¦o†ùß¼†ôý ðÍÿ>ÇÑül\ºZ{TVVêÕ«'¼0(@Ò5‰ 7½Øt¡ïtA¾úuÞÿæ ŒÊˆF¿Uaëÿ‘‰Õa°:ü&Ï~|gc?AÊwÓ°ëX&Î_¶]ÛòìÙ³hÛ¶­H\§8’ÞM>Ðjüøñ°EÍÿ +²ÞÅ+bv½‰ŒÕÀÁë›úò.áCä\8f“ºté"W¨ I3Vg*ÖúðŸÉ·î7â¥MØÓA `‰íÛ·ë8«ïgôY~EpÄ=q Z¢Ë´¦èðJÂÖEó˜û’Pm_lˆ'ÿˆI3ŒqŸöе[obÒr½.§ ¢&Ô€êP-ªN¾%¦^&kÎj]¹r:u «ô´ÿ½TD0§M›6ÐSãÖ÷¿1ø ^*›´»Ïn XT­SÑ¢Ÿµ·¯'=^'51tm uÏ,ˆ7piyXè4µ¡P ¢ÆôùS ªVÚ]€ €ú vÇŽEB ˆºØ1F, ëE;nÁ3‹‚A!à8íÁv£PíAeÐ «PÅ Çù£ÿÛz`pZkäüÑâ›™´ü¿£ÖJ-èŸT—j›Ü¨k.êžkѳگP';À÷s‚ƒƒu=Ú;2-F °k{ºÎh†Z>wúŒ”7öÔ©SGÙ#Áß›UÙ¯<:¼ ;;¢•›› >Éiéuº…:R$µ¢¦Ô Ä]@Uª\¢# ,ºH¨ïp‹ŠŠ KÔÑÆƒ?`‰Õ«WC´þóSÆÁ¯!Z‘ýÛƒñüwGׂ›‡Û-G‡††búô騳gr‡é"Û‘#G”CQù°ÔÛnµ›ú¢×Â`ñ®Àš] ‚Æ Órv§öNA%îjѽjGÀdà Î­ÂÃÃEB ÚÚ0Þ&˜Ãy¢²Î!RE×®`Pêè¾°¥@¸G@`Q°ÿœ¾yŽìéé‰áÇãøñãš‹SSSQ¿~ýÒïî+˜9AÂ!0wûXˆŸçÐô~AzŒZS+ ¤‡èò£*¦Ó µÎ;‡‘¸H‘6Ú÷Ÿcí=ÿû–)ƒŸ(X ìÓèñ~KÜ[¿ÒMŸC÷îÝqøðaÝ]£¤¤¤RïÊWöDô”@ÑÐuÀhÆ -½>÷RgjOaÔœè¦ÓõýmÜ5'ç)ÌÊN°÷‹M‡®\@²vjh{¶{²­wOMï’·ûÊ­¾‘•]ê >=¼Üñäd±˜±u8DkòäÉZ6²%УIS£‹Ê4À´à‚ Îؼys‘8KÁV €‰sêÖ­ ÑZñmž^ ~*u*@Öj’Æö ݤÞöóz«½Ü$//<òÈ­]‚ª^è½HhM@ø`Q®WhyHè]z‚Ú”˜Ô/1 ðUwÚ0åÄ¢ÿ&)ÿm^é¶ÍCò,Ù>ùy†ý EB ŸZX)¾"˜3qâDˆÔ™ÂÓˆKŽÀª!kð#Ä-býoúû¯\¹Òêw‰ªb: °IlÜ»S› "‘(RH4-Q¦Þ Dkm¦ÿ©©"aQ7œ)ȇuêÔ)4jÔH$ò¨©Áƒ¿¢…›„úLß›rcðÛ&RôïxtB#¸¹«ß‚cÆŒ-êàÁƒðñ¹µÅØâ™„îŽä‹ýÌæÍ›gé5ùu¥G)¢D7 ÕT7Ù'ô…Àô›C`@rwœ+<#*''G]lÑæ520ž ˜S»vmˆÖÈ{š Ñ΀uöPµÎsžx/ÞiÜzâÒÿÙ;ð¯´_%è‚n¨FQU¥JšDI, A$‘ØÄjù µ £‹± Õ![#¡±oE£C[ûgZªö–Ôj •Açžÿu®OÏ;OÞ¼ÏsNÎûQó–jöÑsQs.ÐVGV—þÏ#Û±cY__ß|¯Ãëe…0wß8’ ¤/Ò:¼5hoP½ óæ `B-·J`À’n¬•Šœ9s†*V¬(#³ ’°Ú²WªTI®œ”yŠ"“ëpIÀšò §7?”S®\9öìoUÆŸïµð(QDøâÐеá$H_ä}ØIg#ÐI ±„-ëAwïß!9}ú4yzzÊH T@ XßC™¬;ºŒ"“êHÀº3AGü³<ŠùýçîÝ»7Yôïwúz´ø¨¦ð·€_².DD>”þêl#ß à׃­€|e€ÃÀ¼<Zï);V¾|y ü^Àx@zÄÅÅ‘L>Ù0Œ FåP…8M<îåË—“Åqú^¨ò²°¶ýœJ2 “9TÔU5•sЋß]h¢‘À°/úPž °z;¾~ÊHà(' €U€ôX·nÔó—ùlñ‹IÀºò`õ–åuvÿÍO:uò½¥_zRXI{åq 6L¤W`(~.*f • @t˃Œ«ú³o*rôèQ*S¦ŒŒŽ‚2pìÑD4ç3Ó)‚/~­D+f\!Ö^øaµp«ÓªU+g¯‰ð•á¿®‹ ™Ì™3Çèûn'A¼Ào:6±F\’åAc¹z=xxŸTäСCô /ÈHàx^gñ{€<@®(^¼8ëz,š]é)bvüHÖHÀFgž)SÂvwPzôèáôu‰œü¶6¬Å«V¨‚}ÏýìP `7µG‚ÍÀ?ÞÒ‘€òÊã£Ô÷éÁoHE8À¯‹Šq<ëBUéÀŽ,ËdÅÁ9P€Þ±]y°(ßd\¾|™¬NTTT±& ÆÜ‘þ 4>šR ¿`†Ö=€EýÕPzøÛCR‘ï¾ûŽJ—.-#½ Tð3ðçY«s™ÄoŸ8¶+¶›ÿYûûï¿'EQ~)§ñ€jÂmÆÓÎo ‰ˆ4 í¢)Ö¯ò³æ À: Lö¢qk‡³c˜*²gÏ*Y²¤Œv’NÐÜÈŸ2dˆÜæÑê®\º°¾<ú©W¾ŸýÛo¿%EQÞœ£nLeá‰C©ÇæL|||Œ¾×ú€½ÞUøY“PŸ €!º)$˃\Öa~› °ç±gž‘êB» <­@”‘?;zôh’I§”&Ôš @+Û•ç䛔Ëzå[™œœ*Q‚ïK8‚YÂcÇP p÷Õà÷5gj‚*À“ß 4K?00¸˜L*r Lúæceغu+kL!!ÍàI‡ß}7`?këÄ:\î•€’Ãæä¿|Ó¨Q#²2«V­*ðu TMxö`üŽÁ *. Bœâ³Ì€ùø§s LY?†ÕÆUdÓ¦M¬í´„Öƒÿ÷»näÏ$''KMû…HÀÜò Ç“EÿûòM‘"lLA”_Æi9ª¦ðÒ‰[û*؈tÉX@]íµ`ó0ž 쨼BÌ%¿q<© žOù×C1Ö‚b` X÷ZÑÜ̽ŽÅï+&ëËƒèÆ›_ªS§N%+rëÖ-ÞÄ mâ¼…§ÞØdkô½õO͵à|§Í€z ÈW˜¦où„TeíÚµ¬N/!Tì®S€¿žgp)$PÜa¸\ü•–²eËRVV™‘#GºîÏRWx ñÈoÚ“L $Ò ÔE_6'Àì?»‹¿–¼´P(Y[Õm.¥¦¦’‡‡‡ì,BÒcûöíâ·È®ÿHáÀ`ÐÙ´þŒÀ[‘ôBTÒ(Æå>Ï‹¯>#8…˜7‘ɇ~hô=5GsØ ð¬ù~¥S 4°X@Òö©¤*+W®äPÌæÍ›å𙯠¬/6å´O#—uäÈÓºEDD¸|M¼ÚT00ŠÜ2„éÝ0µ-øªýËÈ‹_HÝy…Lf@Çâ¤(ìY½hѢʰdÉ͕ۙ\v—û÷â%= j‰Î::»;(»ê¾&¡ãj±Qäú0ý`¦æ>€¿`ºxVì[¬‘€ÊÊ€ü@0÷g¤* .d;×*/ÞÞúÎM8—@„MÏTò/x˜gPP›ü쮬X±B·‰R„ÉÄX! s6'»@9 À³$mùsØæŒ@ X”–Lª’’’ÂßD i‡÷0 @#»—› ¯áò÷Án) ¢Ú`HÞµÂ<ÙâN%à¼2`Zp<·™xîžË$`·ò` Xö] ©JRR’2 ôìÙ“d9»ž" ˜_,[½”Ëß Æ~³)À ¾Qôë×ÏÈkÁÎ)DãçÇ—€)>ášæ ù Ú‘–}5R•”³mY +,$UÁÐI%À‹/y8¸€ÝÏ|Sï÷Âö[zõêź:K„õœ7ožPÈÚØ×ÿîXôF$ Àl÷ê €úõpÀ|@:°1ÌkÖ¬!UIÞ6Ó–åÁ@ðåÁ¥¤* …ëH#“!+»0h$ W°Íâ—Þ4tû’•ëÞ{ï=Z¿~=›ö«—ôôt6\Tt2T±§ŠRGü|€S èo J_™g9À‰Þp%€üë6¦`_T%qk‚˃Œýð© .´J¯¼òŠÜ3í–Ñ6ËWRÖ_!™è…¼BUÖ·!22’íšOš4‰æÏŸO3fÌ >ø€ºwïN^^^Ò¯Cý>¯aáû3ä$ }X¤E¬¨2 ޾*½¢9cóA ˜S B·—uGV“ªLœ8QâMÇÅ+“/-düqʃþýØÈn˩ڸ,uC+ðn\R8“yBf„Ñ¿g.ˆ@ ð ƒ°K07nT·ûºa’ŽÌ.r ¬?ö©Êرce߀ìM šçwsp èm Úî ñëM_²tñ?_ñiŠ™_ À¹Œí@R-ÁpT¤5}”Èi~Œ>w±k±ª2eý[–ƒ¦xÓ¦ëHU>þøc™7!;n,šëÙ¿P¨F:°åâöøg”ãû¦òÔsÅ(2Þ›/þü0¼)8ô_­I&¸ jôï»[#pi€DÀñLsêb-¬?ýf¬I+6…¶ž\Oª‚º¾ðqèС$“Žs›˜+ÈK .U®ÿ¢©‹ÿ¹Wž¢¶Ó}¨+<Ð@\‰{F¹»-ø*%pˆƒ< Ž€µÈÚµk—2 L\;Ê–gšÅùÐöŸ6‘ª`A ýžëÕ«'7dý& Ø·<˜RÞ õ4eñ¿T³4EãïÝu‰?C…þ7ýKw™)!Rœ$B©R¥(--„õïÿÕ‡¶,ÇùÒ®Óê{høwŒ‹F¬=•h6žX£€ÑÊ*šv…Ø¿oUzòÙbŠ=Ÿþ[3ôeê¼Àº’@|Jûy©JÿþýÝz+03ç…ÎôÑJÀæåAý3íðw«ñ\E<Ô¹ö|û9Ö—°Ëb?À`TºåÁ÷ׄ¹{8è¿A/ÐAà:°sOp×`<¨L£V³ÏÉ\Íãß¡ïÎìRvõ0 ý~ÇŒC2°,Ê¥Â9¸+Ä­ÐIø5”èŠ?#wû |â¿\ûYj2¬:Å,öctùƒÐ/&¥q÷xð+ +hï¢#ž8HEp˜¢£êŒ6ëéÿÁÊÁ\–wæh1µ.8—¦J|úŒ š6mJ2IÙ“@ð—°s‡aöèÐxhuªÒ¨ =õ|qÜÃpq®âé¢T¾Ö³ä׫ û&Ñy>Š%ÀðCÆnÕ= µl]@;ž€¼%˜HepNT˜§Çæê)›î3bÅ@HÀVåAFKHàÐ…ý¤"8—®÷b³vä< Ѥ_;ÉÀ% `SÐæ†£ñ¿k=Õ›‚ÿ^“¡{oÐȆ×/ ÿ?lù#1d%`¨<ø—Ô|£}H2©P¡‚Ñu7Ä€¶ ¥Á®Àú ¯‹‚`“u?N*rsþ†-ëo·ò #$ÁŽ\TòØÃæÿEGG»«tCŒÁ+»r ̲V\–M!V(ýMÁEãH&Œ*²æƒÎ Î`!0×A† Ø\uÌÚW$<²´¯ÝʃŒV þt,ã)û„o×®]¾ß%FC±A¥²Ù€j@+,~ó$`Û¤ò`‚•ôÇH&‰‰‰"Ïÿ=A'at4˜HupExgÕÓSÕˆg6ûÐâÞv»BÌVŸN^Vó؃m¬'c…eÿþÂ=jÜ{p—:$¿«‘€|yÐþ†å%£#‘òàÇßv%Ùˆ<ÿ÷ÑÓo>”Oæ© ®JÜfcå ¹ XÔÓngáÓÒO¿W#»¼< eg,öîÝK*’¸}€„lÜaØÞ8,¹ùwᑆ2É ›öó‹@|<¸H-p]T•*U¢³gÏ’ŠÜ¹‡ú-èf£+ÄœÖ3Ñé«?ª‘ݽ{ **|Tؤõc‹ÿ-­L€˜&lêG²ÁUf£kë70ı¨×˜ @äm)(ÖÆéüùój$—K}æÅØè 1'bfc´å>EÖ‡/þ¸M§V3|€‹Ê€½¯«—€ÂMA.SדljÕªet]½´W%@P‚/hI_pKø^uÕªtéÒ%R‘œ{ÙÔ;¥“: sÚÌ  s7~¶~ñã_ [ÆR>”€õåAõSˆUÔK ~û0’ÍáÇEÖTŠÃ`¤fÐi/¬H=p[TÕªU£Ë—/“ŠdC=?²ÑNÛYt!󬥋ÆÖPÈt¶ø HàÏò  t[Ú€.ÜJ7ã¢XºóF ù7µ. õA–¨jÔ¨Áš\¨HÖÝÛÔ}nû6éåANûĦtéæy²"³¶}B-±øC àÏò b $î]¨¤Øø5ºŽöƒÞÏÿ¡šK@Õœm‚bªàØP$GP¬)ãµk×HE~½s‹º&·QXT'¨ÙÁtù׋dffoŸŒÅï |JÀúÃò0§2ÐcY#ºš-ÿˆ;nÜ8‘54 Äò@šç'w@ .… M@®¨j×®Mׯ_'¹•{“:'Eب<ȉNjq]dFæìŒ§–Ó¼’PFà1)Îß?…$î{¿ø¢á¦'Ù ¿¦þ :<ÿ¿êìùx¨i î J€µ<ÎÌÌ$É̹AÃlTätžBײ®;“²{µÀÂŽÐ @+?˃ $085’²ón“lâââDÖÍfí×'õÿJÚ@¨iî‰JÀ××—=ÿ¨ÈìkýY¨®sb憢WßUrGì™E-Øâ€ @F²WˆËò`ìò:óT¡Î|xzîvôŒtñõŸ]vVÿÅ@Qw €´y¢¨[·®²dײ®RûY-íÑaXC×ÏÃéFÎuR™Å{“¨y‚7€„Ô—ÁcRÜ{n3&Ó§OY+i Ïï§ÿøñ߆ÀÔ(àë àÁàFÖྨüýý)++‹Tä—ÛW¨ÝÌæ6*rz¤DÐÍܤ"K÷Íe‹¨”Àcv…X¾<¸üûYTˆ°=0\öéü3ĂЎ7á»ÿ®¾þƒ"îi ˆJ aÆ”M ‚Ý÷K9½™®sb絡[ã]˜|q`>5ŸÊ¾€|$ð8\!–ßøtËûì¤e!Â;BãЇ×þùí?PÔÌúïþƒ¢\&€D‡‚`7¡rssIE2n]¤ˆéA6ºBÌé½ =ÝF S&«.¢à©oo#© ÈKà1(]Óžró²¨0AM>’Ü“Žþ¶s¨ý³Í?ç‡øî¿‰à 0‚‚‚èÎ;¤"2ÏQø´@éò ú+Äœ> £Øa&‘¤ZÊ?—€ý˃¶¿B»,.ýz¦Ð­àüüüDÖÄ|ú¿Ë»ÿðÍ?íáŸG‹aÒ“Èû? u¸õׄ€&ÚgÿüŸþ|óÏbp€DÁÜwöËS‘S¿œ¤q lW ‚/ïI÷îß%Çl<¾‹Ý‡šÆ½Í0$„BIàÏ+Äøè램ب)ÛŽ1Bô½¿ô]&ÿ°º?ßùwúìÿ”³O¶‰ÈRÁ2@ÃLÖ8SEN^>NÁSümTäöEoÖþŒ-'¿¡`¾øÍô% \–H`Ú¶XSZÙ°aƒ@«/ƹßýð¿ 1¨¼ÀšŸþ\–ƒ —‘Zg³Ú*r<ã5›ìg£ò —Àð•}Ù'?¾ö³ÿŽ…/(o™3ÿaïÌ£{¼¶>¾îÕÒ·jxß·ªTME*2‡DÌó<¡Dˆ˜“© êRMU¤jªTBJBQ­¡1´1Tˆ³ÄÌ¥.½Þövßï:ëå<ëñä—œÓy’û|×úü‹Ùß眽÷ÙÛzB¬1µÇ–²¹ Äž¿W®\Y&ñ7äÙÑŸ'þ¼€«fèÇ[™^úÓ?7M$ –h°e*”‘sœ|¢$ʘ1cH•žßG-?v5Á„a|@!—gm ³ 'rи¤þŪ<èߔ޿«‡TЉ‰‘ þ4à¯Iúu>š{¿¨ªƒ755ÿ²ÚÄ_14H”R¥Ù»a.¦ë7ùòàŒÍï³-ÍÙ?z!…>ÜL]64ëbÜÿ=h~J$Ýzx K³fÍ’ þ;`4ðÓ<ôišFÀQwï]èèo~à@‹‰Jª´çÌOÔb¶³Ùz´zypÚwãè7lgÕí‡7hÕá¥4dE'Ó”G$v¦Ui )÷þe*LMœ8Q&øSÁÐtyÖêË“~v ¨ *ÿ棾mý‹©ü| H”ððpR¥”Ó;¨ùl§Â™0lòòà”£¥`ô§‚´Ëûèo?„R¯¥^/|Âð ­ñµŸŠ}‡Þí˯wGRZ&øQúà×düuI¿7xðó{?Ïú‹€ùM`9 Q"##I•vf&S³Yަ.¥åÁI‚è ‚_¡Ø5"ëFm8–C˜@ã|”?!öõ¢ÈMA´îØWtöfKZŠI~¦_Ÿ>}d‚ÿ°ø¿'põAmP'ýîýÅÏ8Ð_A Qf̘Aª´ýä–"5Ö/°G`âº@¶NüE(çï—h{æ·´dÏ'µ}2MÝ4ŠÆ¯H_w¡~±ÍŸ« ôXÒú}ÕŒ†¬lK!ßô£¨“p¬_D»³·Ò¹[™òÿny±¥·îîîÁÏøÆFð»€úÚŒ¿HÒ¯˜* Â’1ª´õÄwjLÀÄåÁ kèWl_6‰Pyø pîb~âmü»±¶\3iÓ¦M|žŸ8?‚þ<ÛÏïüÁÿ¦¶ÙG éWœ €½¾$JTT”ºÿðã¨éßLð„X½ „$ ¢Ç˜G`©`÷ýÉ“'ó‡=â¤?ÐóY¶Ÿ¿³àç]ÒO˜ß¾$ʼyóH•6]ËL $•Ç®À&YÊ_W¯^¥Ö­[‹=ç'M‡_Gàó¬ÔÇ~µm?Ïø$ýJ p —Á&@‚°Ù몴þHb‰)ŽZÕ[–¥ü¿úÑÑÑôÚk¯ý™àß|A7Ðxƒ¦ pÒ5£àÈø—4à@eÀV@¢,^¼˜TiÍ¡“@"”*UŠV¯^Mª´l÷6ʃæxBü^lg,N½¡,X.\ÈvÛw]¿~uV¨PAAà3RÁݑߋß÷y¦_󰇵÷ò&]©Ï ø-à&P‘0ÖÌ¡J1Ûç˜ö qïE­éæ/וM¹ñòòb?ÃÒ¥K³a­[·ne™ró‹çÞ°auíÚ•^zé%Uÿ;ˆÝlùë$û*òÞ~Þág+ág€ÈÜ$B½zõèÚµk¤B÷±ãoð—=Mû„ØÃE·úžTiîܹÏý<ßzë-6#33“̪ŒŒ ?~oéÕùmÝ÷-н ΀•{N:E*ô ;Ç& CðÛ3 MÀ8`ê Ãæ7¢ôËI•FŽY܃þ>A{Mà{éŽû¬®Ï3üü«Ÿ_¢Ï(ø-0zd€õrŸ8q‚ˆÍÈ þz8yΰgЙ@#¨ ˜gÂp§O:‘“N Äö6bcqúÿ{Á‡ ?êóÀ×”õ4Ùýšã~%}†_ô«o€Ðÿ€ã€D¨X±"9rDÙ4ÛÐÄ1äñ! ~&`î¤cÓÉÜãÊL`À€f ú€ƒ`1xtÓ$÷ZƒæF¯»çWáÏûü®_°¯¾eyUé€D(_¾<:tˆˆ­Ãú`M05Bð{CøHÊL=a¸ë‚&túz†²I:}ûö-ê€ÿ8 ÖÐô]@дÍ@cÐÐ0ðïùåõuý‚~õ-Ȩ<8H6®éÀо^ü¸v ~7& T0õ„áî_4£37N){<Ô«W¯ì¿«à X>Ã@_Ð t×Üï}@KÐxwàÌïøÆÏïù6Žû6¾ú–äÿ²ï Ê–-K{ö(©i³…‘ë¨átø…i¦ž0ÜcasÌÛÏRöú®[·nö®þ ¸.ƒ,p É Ì£A ‚~ —是½ß7À 8{žÜãG}ÏŽû"_}Ël•{‰ðꫯRJJŠ²àŸ¾!Á_ŸQÈ&`ú¤=¶  ·Ïª©¤¿ã‹>~Ë >äs Ê”)CÉÉÉÊ‚Ö÷ÓÉ}Z}†Þ ›@0ý„á>‹½éÊÝ jZ©?&oooYX ¦€pƃ±`$ Þ}uÁ¯¨S_øUAežÕ·ø÷|Ë >æ;lÍæÍ›I•ælþèið‹˜€Êò é' û.ñ¡œ{—I…=zD-Z´Mò-×ÿßc@ütë¶Zh‚ß¿Íç_|ùÀ7>î[P@ Ò`3 ^~ùeÚ¸q#©RÔ–Yä6•½˜ ¨/š~Âp¿¥m)÷ïŠf)<|HMš4‘M~ BAˆ&ñ7X·u§µvö¾.ø«Ú*çɾeâ[~6€Ío[¿~=©Ò¼ä(üx.“‚@ )hò Ã~_¶§ër•àöôô”}“ÿ…°ã¿fùFc>Ïx$WþM<¶ïù–Èíù['1D‚ P¥˜msyð ˜@•y& \ÖQÙÑû÷ïË®Øþ'˜¯I²€ÞôÛvmMæ |ËäÖ}'IÌògS`TiáÎr|—¡3[WVò‡hÐW]èöÛ¤B÷îÝ#øD àúƒžš+€pöF`<3ÿÀ· @è¯ A&øãããI•–üôÅÓà7 Ï'Ä@ù¢‘;w£Œ <³AzƒÎÀ4îÀÔ5@½t.Ÿe’@q2«¼bccI•bw-!—ør& _’åA`Ò¤CâÔ­»yó&ÙÛÛË>ð™ah <‹nû®~ ëã·  ð‚™Lð/Y²„T)~O, ~Œ @ ˜¿<¨Þ†Æ÷dËFUmê±³³“1‡  ½AÐ4 #¨Çü×^Ë-$Ê‚ H•öÅ? |Ndᙀ0ýbÅ&¸¢=P´n<77—êÔ©#c@x¹7M5 ºv¿~ŸÑ)À2  Ï‰Mª´ú@9Oy—œôR& _ÿ1åAFÐʾlQŠ±Ý ÷-c÷A˜þ* ¯ðõ\¶¯VPè3@¢DEE‘*­=”ˆà·€ªò ª óè@ö^ÀIÍçþç÷Òî3?RϽÍVdŒúÚ S~!ºtéa—ƒŒ Üã/è Úiºy>@Ü,(Ð@¢Ìž=›Tiýáµ,àaŠL@¼2°-c –®Ü½D]ç·*Ìò ´ ŒY5=ù)Û倲ûú‚5ù€¶ 9ðИ@-Ín~öê/¯%V@f„­™R¥éX°;M¶#'n6L@Yeˆ€¼.Þ>O]æ·0[yœ8;‘±U«V•ô9VSlšƒFÀ ؘ@¹‚˜€e@Ó ÂÖK©Ò¦cß!Èë³àEaȈ€¼ÎßʦNÑÍMô„˜›ÀûIô+©¨ÐéÓ§ ;dLà­y$䣫 Øš *¨ÄMÀ¸AÈjÎh2 AØZ)Uúáøf·=9òà/B5yeßÌ¢Žóšš­G€1aí0¶PE…Nž<)»Úû: z‚N¼Iˆ—m›o²M$Jhh()‚-™Xð‡Û1 h<øÕ÷H€¼Î\ϤöŸyÙH ‚_d„}Ä«(ÛŒ2&‚4&àmØ)ÈM bI4Âþ@¢“*í<¹¿ÃÓà0µåAP¯ÌkÔ~nc3=!~Ƥõ£°cá ©ÐÑ£G »dLà*Ôôxƒ&ù· ëzÂÀ¼@c‰2zôhR¥”ÌÉÁï0ÉŽ@¾&0…QˆåAP¯“9?SÛO=ÍÖ#À˜òíXú ‹VT(--*T¨ c—ÁPýÜM£P]PT)‰Ý‚*ƒ?üH„ádz\*´'k7‚¿‚¿CÀ ¹<È  (tâêQjó©‡)& ëM`êÆ¶pE…RSS©\¹r2&p ÝA‡|º_JŠ ¨ þ¡2Á ,ø÷ŸÙK®S¨€¯ºkD¢¡47Iä~¿ !‘ A·R—¶Þ‚V‡º¶u7ŠUÔ–òU¥--£¥”ŠÎ¸VU!î­=ßõ[Ç;{÷¤žsÖ/ONžçÙÖ§ùË’îožsö9¿½÷ÇÝpÓœ0ÌC`æ¶ ²B@ãâ„ÀQÈ—ùÞ€M*é‘››+vÃɨCgRÔ„p ë'X! ŽM¢¾:¹‹’f„™m<(¼µ}=Ä %Ž‹Ç±ñFBà0äëxo€=2\uƃFš?îé‘-vÂɨ#çS4š?ÒC@þxÐx\¸p<==‘ú˜tÑŸSÛ¡f ó>›&+ıñ8>ÞH„žÐIû½í§«Òd@oógÂ= =°Nì‚“QGÏO1¯GRÀ_4?”­LC¯Àª¿Ÿ'N$YµóØvj3=Ä4¯s ¿˜N²jÆ ây!pòØ{(Ä'6¨pHì~;àdÔñŸŽQìÄ(òG󀌶â3ŸÊ aÚ´i$«>;º bš†¹·wÍ"YµnÝ:qœ¼ØyUÎá¢ànéd ÊªÜÒ;ßÄî7uââ ŠŸ#š$„€ǃò@˜1cɪO¿ÿ›ôH–ËŠæ’¬Z½zµ8YÚ@ìnªG†#ø3ü¦ ú*¨¶p H¤¤$±óMFºtŠâ'Å’ÿh_AG˜g<(?„Ù³g“¬úø»hú`³=# ¬ør!ɪ•+WŠCf „ÀnÈ… E#^ª›‚âRÀìŸ×ü pHÄÄD±ëMFýû—SÂäxj‰Æ‡Ç„€Ÿ*L3”ÜüùóIVm>¸^„€YNæÞÛ³˜dÕ;ï¼c4vBg6ŒQÝt‡FZ—U*P±P ¤G\\ݸ!é ¸âÓ”89ZŠæ×fJnñbyͱñÀZS0Ì­Þ·Œd¾g@ØÙªcƃÀGu)àÌÞ`ŸL¨(¸¤Gtt´Øí&£Î]9Gm§´&¿B4=˜'ŒNä€zo²eòšãÃoV[{<Ú ¶ö›òvB.X`4>,hÏVŽÀ³ÐLý)À¬­æ÷€k@zDDDPII ɨ W/PòÔ¶h~ÁÒ`Ì6”Ú!°b…¼æX»ï= ! }<(|x@Þz8ÜG1…th Ñ ¾ìS@ö)€]€‰`;¡¡¡tõêU9K ®ýDÉÓ’Èw, 1‚éǃò@{wâªU«äÝ5ßûgS0Ìm<¸†dN 6¿ÂË ì¡†ê¦ Ô =‚‚‚¨¸¸XΨ’Ÿ)åö¢ù¡üÍÈŸ È…XjX{òʯ–šq<(lþnÉ*œDmô5â,ö) ˆ-qc™ò2€7¿ ”Y* @,p”Q—K/Sꛩä;R4>Ã@;¬84Ö ¼|ðÁ$«–-2åx°Ãœ0úøÈ’UxÔÚÈ÷{´‡8eOŠ›ê˳@:¥üüüÄâFU|£˜Ò¦§‘ÏHÐ !`‚ñ UÄ£¯}ôɪ%»æ™êbÛŽn"Y…“©<.Ü!‚Ý tç—|`Æd ,j eÔÕ›W)cFÆ£æ·0|…ª6üô°uÄK0›7o&Yõ§/f›íb¡Ã¼pÚñÏ¿‘¬*,,Ôó}. vÐ ¼¡9›°ûæ €M@ƒbQ£Œ*)+¡¬™Yä]àM>>zCÀüãAˆ×a·nÝJ²jþg3Mõ 1/ŽB²jøðáz¾Ï}!b!|ø}­q ÙàÐã`#‹œæ¿UBfuͯøÿ +L1´~p8C!«ælÓl¯ i¿ŸØN²*99ÙÒïñxv üàhÌnš:Î=†”}Jo—RÎ[•Æç|$‡€Ôñ ñ†+?‘%ŽÊ’QñçŸL6Û+ÄBúüúò”œg¯^½,ýþN†TH€0h ìy5ì6nÞ¹I¹sº’×oÁxÈ&N‰Å;ûŸÒ—?ì8¡í+#Nî¦+7‹+5@–¹k×.i!0}ëëf{…XȘ‰£ÏvY3¦°áà- ©ŽI€m@ÙÝ2ê6·û£æ/7|, By!?)š~¸xœLUò@prr¢Ý»w“„'ùNÛòS>#± ‡ ~iÍHƒÖþàé¥nÝ»M=æ÷d¯#*x<ƒCFþyá(¡ì"@œ¿wï^i!0é_1Ýx02DÓþ3{¬é,ÀÜí>n£ùó泆7òǃâx±ïÏ!”=€P¿~}úú믥…À„…¦¦BÖÂ:xv_EÀTH‡6©~À®`ã7Eƒ?Ž·•C j|}wæ¡l!®Ã =\]]éÀ$¡ÄvŸ×6˜n<˜:7”^\ÓÓÚ¨~Èn`þ ¢Á ‡€üÉ€X&òíéo e+p æÀU ÄfÝC‡¤¡Øó÷êúá¦]WÑ0 2 ­# €PáãÁ°q!´ÿ_ßÊÖ`2Ì… ÄŽý#Gä\ ÝÇÆß1¼dªñàпX5¢€ú­@GTr„Ž ¦}§þA( až‘]ÜÜÜèèÑ£’Bà®Z™ãA3€—#t€´ñ hMB^ ¢='÷ÊÆ@˜oäH·&MšH{ÚóTðþ Ê:Àì 2 ýŒ@ð+­h÷ñ"BÙCLR,€@z¸»»ÓÉ“'IFݹ‡^^3 2_!¶fd²hUNÔv€2ƃ­ÆЮc»eë0IÃB#';7oÞœ~üñGI!p›†ý¥ež0\ÙÐÈ:^æx0p¬?}þýg„²õø™5ýDæuXe@zxxxÐéÓ§IFݺWF/¬ê]iãÁ!«*<Þ€LHr€Ž9T‡€ÿè–´ýðvBÙIð¦&(ÆÃB ^ÄBÒ³gÏ’Œºy÷& YÙËú' [?¢ 'äODóo=´•Pö¯³¦ÿ¼¦ó„€——?^NܹAÏ¿›g†`` ZŽò£-ßn!Y5kÖ,ñÄ\eÀ㺖þxJ£ñÇÁ«0V1æÙóèëëK/^$Uzû: øs7­Âpå@ór º#*ঠšÓþM$«æÎ«üÛMo'Œgÿ Œ…Ñ0 FBbŽ‘MÏþþþtéÒ%’Q×o_£þË»XaŠÞL¾J/¦'ÓC‘Çîâw….îñS!ZC,kü@ðox<•¯^à ‘É9°é‘––FwïÞµ·˜Î Ž€XfÖý€â?¨'ì)vìØ!Ödhþ³P¨š¯÷ã¿‘µ›UÈeº¨tfr˜l»÷Yi í! !"!”5¾´€§¡94S< à~!ð'#!••E÷îÝs€É@4¿=ÀÎ;©nݺFšÿŒ„AìÚ»ä©~#g³FÍTd(Òi*˜TE ÓÚA2$A[h ѡРZ‚7k|wh nÐHùÚšÂÓà ¾Êß ‡8Hb!°ÔHäääÐýû÷í)²!â ´*@5{€¢¢"±Ï@ó_€‘0úBOè] dB:k\U³ m˜ÖL"“ÀÄ+â±ÑÅnê…B€_9߀+¸(_@Ch Í”¿ãó;!ð^¹¹¹ôàÁ{ €xÕÚì€Jª={öÖaiþŸ ú³ùzgèÈÆlÉÐ!^ݬŠHE„J8Æ„*BÁŠ Õ =?ðgÁ£œÆ¯ÎPœ”¯Îà À Ü•¿ï,øåÀ»@zåååѯ¿þj¯àaö¨ÕᬭÀ¾}ûÈÙÙÙHó_„ö[ŸÏ×ÛCõ˜5­hTE "€ñgZªø1¾ …7x) ß‚5}3h nÐ\¡>kúºPGQWáÎà T!ЪœxH¯üü|69Ê€¯7kT‡¶û÷ï'#Í  äAgÈ„Th ñá àÏšÖ›7+ã©ÒBŃy†yZu#ÏšBvmÿ”ªñŸd_j1µ¡kúšPC¥&Ô²(´§kô8p =|øÐ`†F´¬ PjÙZ>|˜°îÊHóC!ô†n i ñ !ðèÚ›5¼ûWÕ¬ÿõ”†åpUqQÔW_×óßö_] ‚ÚCàC ½† BG˜$jBm ±Þ k®Œ¾Z;š5'Hƒ$ˆƒ?ÖøÍ  kôêfeœËQïw8©<)ð†çM¯ÝøÕ4i‡@=ð-':ÃF ½† æ“@-¨ çl!Ž;FXoe¤ù¯ÁXUów€¶ á¾Ðš³ÆoÀš½^yÍúu£¶J-¦¦¢F9ÿD9ªYøI E9!a3^#FŒp€ @üÐm!Nœ8AXke¤ùKàUvÍŸ­jþ0ðwpƒ§Àœµ>†3µ,TÓ54Tgªi5¾Bàc ½Fí¸ XÉPêÁ¿€Cœ’»téRÓY¼x1a•‘æ/…× kþ4Uó€7<îЈÍ×´¯½…¨nP5Á‚†×úÁë 7 C`›Ñ{øšRTT”žÕ`ÙR¥Æ€ì-ÜÎÜ€ñÐò ‡]ók5Sh®à OBÖôš¿‘%{‚ÓÑôì-Â.°È fïh> lÖp˜dGnÂDè = ÒÙ ?­æo.PO5f«aü#¸6n…*'¾²#ÅÐ]û<ó¿ à® d'Ê` ôƒžÐ2ب/-h~~·½š £Yå’êçØcÃÍ,ø$ðw ;ñè Ä÷˜þD T=hžpÈÆÝ‚©ÐzAÈ„vЊÝð³¨ùu4º­‡¿'ðŸöîÜ7®*Šã8¢ˆï±'Þ=Þ=^glÇñØŽ×ñxKPÜ :$:h(УTt Ñ!*$*„’…è)‘øB$†¯Ä¿§gFcòö±…2 90 @µo¡PÁžàCÜÃ]akXDi ÈÝþíä·«¾ȸ ¼”Ç~@¡‚ý‚cìa ˜Â0’hG“4€K µp_£PþÄG¸‡aëÈ!‹q ¢§ÔÉ7gšÀð°‚”·±<–%|Ýæ Ài/G±tc¿Uàžÿc¼!“ÿl` ³˜À’è·º³Nþ¸ ¸¡"›ØÇ*Èßø‡ryÓAŸ Å€z -èB |…BøïÈ'½Gæ-¿9Lb½èD ®Ê£>Ùóû“?nÿ><)Ì›ÄáûxR5õ;ÞÃv«È½¤ûÿ¨5} ˜@’ÂÞÅ(\@Oñ¹Äfß‘Ûp^ôéCZÍží²wÃO/nîD#˜4‰Ã[xP¸€þ·8ÁkØÁ:–¼…D®"#yù¯/Õ£I¶š 3»øßàG<ÂOx\t*~~NNñ>“7û^7Gcm뀅<믑—|'ÜÜ&Ð> c9` yœà|‰‡ç\G§%zŒøïËû"»ØÂ*r2ù¥–d!1«ÔÀÙíçæ°ˆ[XG»r¾Üq„ã¢Ûÿƒcax÷ñª›½ˆYL†½èó¢OþR›€„öbcrþÀ–±†Mlc/ ŽnãN¯&¬#ãPy Í&™yOr7±Š% …‘Zòû I4Æ–?Î\´ S’bG1‰ 汈eiØBÛØÁ®ØÖn™ìˆmä%6{ÕÄfÏ`Ã:ùÃîøÛçüqx¦ TÉBÒ€f©£¤0Œ4¦Å ä°‚USG;Z?¡üzPÛFÞðš7œ×e,ⲘBCè“oEBk)J à’žltð†0† Ì ‹y,`9,a+¸åX•d¹­ˆeIÞµ±Ùš—ß0ù«ÏrÇ?næµai¨×›ƒ=Þ/`ÒOvSêhº ^Æ’‘S&¡yÁ$2g¥ŽÒF?’è²ßŠDþ’‚8M EösI¤0ˆŒa“˜Æ 2Èb¶hîœÍ*'wS2XzBŽ~ÏßìMþøÒ¿Ä&`ÃF5zܯ¥4&0åÔÑæC„ÕEÖÈ3Ê&4ÛW‰_ïwBašíäú6’_pG­æ$™^¤0€A a£+JãFºÌÆx‡d°ä„ó=¿Lþxß_bðsk%zÑ‹¤›íäåר÷ûã} Maµ$‡‘\3 K·­#­P~-X½Ž¤ešM*s‡É}LØPû•hÔ·‘üL—¸h3xh’lA«4…vt ÓÑet–ŸÀÛæ ÖUÍŽ'ù›€½FP‹ú€Zj“‚ÔM8¿|í"4¥YS™Ms£“u9ì+ÑèaðÀU9ƒW‡zs¼TSQsQB\ûe`x%¤Ó?(ãR<ùK1ܪ½ZÒ:*¥~BkÂ×äò“™IcvÓ ¢?ù¿Ð³Í 5ÚŠêEÃsP¯lâ®tiwâÇ“ÿ|®B–ê :*s-Xu!j• yµ“Þ›ø¥–BNOæ˜)T¨ Q}Nlân•íÒހŠ LMÀ¯'¿–‚ë¨æ,J¨‹P~*³ð~]¤…ä„o5ÄÇ›IEND®B`‚keepassx-2.0.3/share/icons/application/32x32/000077500000000000000000000000001276304217300206455ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/32x32/apps/000077500000000000000000000000001276304217300216105ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/32x32/apps/keepassx.png000066400000000000000000000040061276304217300241410ustar00rootroot00000000000000‰PNG  IHDR szzôÍIDATxÚ­—<Õ÷Ç/5Ê“m÷>v›.¹‰"Šr8&r°º~ægÈ-Ùõh ÉÜ]ÅJ$MdSëÇMB­šÙ–ÜëÑÖ]F·.yÔæWÌ&ÍLC9~¿îû}|ÏÙ9†¿zy<çqø~>Ÿç÷óý¼?ßßx.Pô "(åOá»þLížÇÀ ˆróæÍƒD"ADD„ìS[[›/`>#æ?wÊâ{{{ÔÕÕa||ÊáïwïÞ…­­-_ÜMø=7Jøœ9s™™‰±±1 Ž  ªí:Šþ—÷n¾ƒâºc¨n¯ÀÐè FGG‘–– n¬Ügqƒ¨O›å4ƒë½yyyà4vÝCìǾøëyl¾`ƒÐb1ÂJlñÖE[칈֞àdeeq㟉ù„š\ ÔÙÙ™ Uðððà¿>!,¦(wrr’Mqý£ÿÓ†°ÆÆkABŒ-Já—V£ñ§:ÙLÙÙÙqŸÚ„:wv#99“ÃÓ vË”7USSCkk+†Ÿ!¢Ø§E<+’I„„ÞJøDK·'’ðå9#BÂçô8¤hhh/LBKE ¥4a§ü°£è-ô<ëÆÈÈ|}}ùâÇÄA ÌØØœëÎÁ÷ä*øŸ²úUâÍÂvÈÓÓӃ¨l¾޾¾>w”E¼¬"~:v—Á>Í ¡§¼ñd ÃÃÃðòòâÄ"âý   pÿ+Þ'V)$6Äú÷V à|”³!8›if>¬IÇÛÛ›û»N¼¦"uþoxãÝe‡ÌvÚ}Ò_044wwwnôÑÂk„qÁë? éV’ðòóóçqo'|sÞ”I¬& ’?»$z188ˆuëÖqCìÚµ œÄÒ·áùþJ…„߇V2 }«? $$ùùù°¶¶†‘Ók-ãðÑ ðFÅýÜ!þÄVÄÓmÛ¶óèÉXŸíŒ7°„™LâísAx:Ø©T Ù#ᜫ>ã–ðb‰ü_%Ö³€™Ï¼bð",ƒôxÒJVž뎃ccc¾qâuùÊ^C<‹Žž0ü¡ç{’LH¤MHD„àÙÐS  ¼¼œOîÃ-×R!á¿JàEi…@ZýAByn*´Esw½¬ºæÎ˃¦¯*×¶3!§ýç6x];%‰¨ÂÍ€sç»*xæŠàJwëÎyr ^ Eyü7Ky3 <‰—&o0k‰ÁøøxpÚºÂý¨ƒLž%ÒÍS†[-7à~L„µGW`]¶\s&$¨l,Uìb±˜¸GØðÝjÓ½h¼ˆáÄÄDpš~l€ë; ‰ ‘úi<ÆÆÇ ÏOýñ ³ýƒ½§¢¢ºººò2ö&^!Ôg|Rޏuë8Wï–(Ê“÷–ðεW¬‰ÜÜ\dgg£ºº}}}¨©©ANNüýýA[÷8õUFˆùàÓ –#àÔ_ IšâTS•ò\“aŽÝ—#12:Œîîn˜™™qc9ãÂ~“ØAèsåƒO+@ñ †8ÎýŽz¬9(‚hŸ lRLa;I‘$’®Fcdl]]]011áNúˆ½„#±@xÞ³ µ$Wbhÿþýà|ÓñrïRXýÃŽi"Z öpϲ‡ã! .O…DréNŒŽ¢³³ô²âÎZ…þ^V½kU~S‚IIIà4<úö)ÖX¾g ,—È$>º]yjÛïÀ9ÃJQž,‘ZöwÙ‚ìè耡¡!wÚD8ÈWü´B*/½¦Ç°Ûgƒe»Œaž`Œ$a™´—j&ªªªÀ¹ÓV §Œ••!Hül7ÆI¢½½ÜyƒPvZSIpÄÄ@\\8-?¶À6YŒ¥q‹ao¤"qQàŽOœ8Îí‡U„ry¦_KÂ8ýð¡EOOG¹O/L%p%00œÖ®Vˆ÷Ša´ÃÆ;cé;Fxó #‚s°1/ÿ¾_ÎÂ… ¡®®Ž3g΀óuËMHÒ-¹<G*öÉ$š››1kÖ,i+ñâd•ó@Pvþµ†1†0Š5D`v½ŸbrX€K‚óUÓ$a%‰ÿ4W‚C§g¾>xiFŸL™À¢èEð9âƒ~i?Ÿd‡TºFŽŽ·Ó!HèÙD½R÷.fÄœ©4‰W‰×‰Jè ¿Ÿa¯×á~”ÚÏŽÞ¿ŸêEÄü3¥ÔR¥®º§IEND®B`‚keepassx-2.0.3/share/icons/application/32x32/mimetypes/000077500000000000000000000000001276304217300226615ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/32x32/mimetypes/application-x-keepassx.png000066400000000000000000000032421276304217300277610ustar00rootroot00000000000000‰PNG  IHDR szzôiIDATxÚÅ—YL”WÇÛ¾ùÔ4鋉Q)‹," ƒNe³QÄ}£2(Tj%\ZÒ*ÅÔ¦‘MqµHŠ­ÕZK+ U± bDÙ÷mfe±úï=‡|ub« 67ù?0Ü{Îïžsî¹÷{ À+Õ?~ãu¡7þ/½€766êŒH&£ñ©L&˜m­±Û³X, ˆ´¶´õ: ,£^¿¬ ÌϨ½­ Οǡ¬,\-+ƒ®¿Ÿ×„ÈŽ^ˆæ ÐÖÖf¢EÏDáéîÌfX¬$€±jÕ*xyyaóæÍHHH@HHìììpàÀGwO ´~l€v 9µrÈá”48ȺYQh4XFL¸ÛyeÑ¢{À)‹ŒŒÄ²¥K ‚ì‘­±:ÚÛM´83#®®®,7!¥R m_†„ã¡¡!6(“ÉP]]ÊÖ+Piž? ³±A£@ê•mÐj±eË$&&Ò|Ûj ³³ÓD;vqqaG’2ŸŸD.G†‡±ÿ~ÄÇÇ£Q[ å ”'åX—ç5Ù2(wbõ~O$ “ÙÄQª¬¬¤HÚ`&R õm8bò#ÐgìAZZæÍ›Çá FMM Ô…Û°ú˜Ö— od;§5§¡<,ÃíΫˆŽŽ†Z­†Ñ–"ìêê2S~%€À|ö¸`Ý‘ÅКz‘””„… búôéxüø1>Ì ÂÊ#2 ˆ%)î8wîh”——#`›=.ÜËÅÉ“'±víZÛº»»ÍrÊïýû÷ñkÍ%ø¨Ýà“àŠŽ-‡Î¬åÝL˜0Tù+±<Û ‘ãw'ÄÆÆÂe¦Bsåøùþ)dgg#,,l|×®]ƒ££#>|ˆK·/0„¯€ˆÈY‰‹Ž"Á w`I–C¬:*ãtÌýÜkŽz!LåƒÞ*lܸ‘Ž'Û†E¡•––2DCC~¬:‹9jW†Øp|µ¨ð\o¸‚Å™r,ÊôÀR+ˆ÷E$BNÈ‘Qú„=Lž<™mQjm ç’Š‹‹9ßMMMø¾²>±—Ò± Ai^˜ŸæŽðÜ Äý ÂŠlo¬8LQ#·<ƸIEEEA«Õ’½qE€522‚Ë—/3Dkk+4§D$\à' ’ÜD¥ÏG§¾ 4ÌÃ&ÔvßÁà#  ((ííí´û—¨­­…½½=nܸëõ¿ÃW=sö0TyJrÌ=aîܹX¿~=<<<0eÊìÝ»—v.õÛz(£“¹áÔ‰"trrB™¸`*Ê1çkxå Å7.ð!ˆDWD燋Vl†J¥bÇgΜ°C‡í=©ƒÚ QñQèKJJp«ñ&fïž Ï]NPˆÀÙ›Ø÷Ëá ±õ»X†Í\ñþþèèè`§ì|ÀÆ"ìêâ475q3***BUÓÇτ۸Ç9"ù'5êëëÑÛÛ‹ÜÒC¢G„>9ýG9 vl±À2*ÛüEß/,,Äí–ÛðÜ9NŸ¾çÏì"颚;ÞŒ38LJKÒáK¢(c5‘Á—×öíÛ¡×ë©usÏ0 ¶¡ÔŠ»Þ…ÝV;Èâï¶¢¢‚ÖÑù'XvžžžÎÎÇ kIÍD’4‡n9rFGTj½ü÷Cá|_jê—dÛfÑ@L’Cy¾¤Ýó{o€ª\[C}=7¡¹}))ñdw¼Fë]¿†wOgÜ` ïªxNY£€HNNŽ%›/Àfƒ,£ôÑA/fþ8¹wïÞŸ©IIªç9´åÓ¬ÿßÂÍ·™$)ÿV===OÄñì'À÷¿~œ¾)ôöKè-©ÉŒà•ê/NQùF/¾IEND®B`‚keepassx-2.0.3/share/icons/application/48x48/000077500000000000000000000000001276304217300206635ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/48x48/apps/000077500000000000000000000000001276304217300216265ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/48x48/apps/keepassx.png000066400000000000000000000061671276304217300241710ustar00rootroot00000000000000‰PNG  IHDR00Wù‡ >IDATxÚÍ™ \ÏWÇŸ.² 3÷\KéN7¬¡R©¨¤ó2›yôÌ¥¦Y¢4¡¿K¡‰Í†‘˜lšçcs}¶–Ë[tÑE÷ëçùþNçü_ÿ[µ×óò<¯÷«^äüÎûÎùžs~ý ÀK…Ò‘ð" D2ñ1ñ1¢­í½ÌŽ{™D5-Ü&â‰ÿKâ¤è ±±1€={ö ##ÉÉɈŒŒ„¢H)ñ¢ÝÿL€NÔxíµ×Xgëëë¡-<@hh¨¢È„ñK ¬Fqq1TÓØÔˆªºrhÊЭ[7ÅiÕï¥ PÞ&еkWìÝ»й–w__Iš½‹wÓ'àíoÆbÙ÷Ó±íü'øáÖ>”×–BäÉ“'ððð¿ÔžEÑá “8Þûˆñ­ì¼QK 33"å5¥‰DèWŽûÚoíuĬ}c0{ÿ&1ç@3‹zãjÞÏàaSÎÚÚZH|EèH( L!ÐJ´Bà³fÍ‚ÈõÇðÞ7ùÒ3÷80‰ð$;/Å¢¾±®yÔ®]ƒèÃD;BWl%ššŠ«W¯j‚ÍGCCCÑÀ»Z:ï/lII ¤UäcöW¼Û3¾°—K„É%Æ´(qè·ˆÄÄĈç_&z†’„ôЧN‚¶dee¡}ûöRMÄœ~R:±Y ¸ÓA»ì¹„“åaôÕ>l ÆùŒÁØ7í0ܽ7‚Sl˜À܃.¸Wœ#ŸJVVVBbaBè« T×Uã÷Ç×ÍÉ/˃ȱcÇÄP6o©tÞ„h͆ȑ#GЮ];!¢ 0›@DDDV{þ;l1ís;ö³`Æ PL&C3#ùTÊ-¹)'NœOøi¤QÀiµ9œãš%ÜHÂ[æŒÛù7 rðàAèëëK 5\ žÀáÇ!¶{ü¶ÛÒ(h–èkm‚gÏžA5¥¥¥èСfl·e§ï~ )EEEB ‰p!Œ5 Œ]=Nkš%\¹„ï&WÜ)¼‘}ûöAOOOj¬žð#ö¸xñ"¤ä?σ/Íå©ÛmhT%ì™D瞆¸wïTóðáCöyŘ3//'@¤_¿~BbÑCMàiiÆÅ[“„9“pQ˜ºyr‹î€‡etuu¥Æêø°"77R.Ýÿ>$à»Í~-Hô²è‚åË—C5QQQÍ;ø6[V™âO¾OOO!00•68tèD.Ü9 7.á¬"á¿eçB$-- :::¢Qœ9sR•äÂ;ÙšILe¶jv´:uê„;v ¼¼œAß³¿3j$/¯;.| sssñ¬0¢—$0–Ÿ•ªÁ¹?ÏÀ5n4œär‰iÉîx\ò<ì¡BbûöíÒD‚?Ç$|[$z[veÿFRŒ&ÚéÃ'ÁR¾GdÝÜ )UUUbÚJLa|ÆèÞ½;®_¿‘Ÿo‚[œ•ºD‚‚R&âIÙcˆlݺ•5¼hÑ"ˆDýS¶Ò(´ 1„uh?ô4ïãþ1ÄÝ›­•6ºW åܹs¢óe|G6U¬ãqzôèììlˆütãŸp]c)$äåuIÌØ>YiŸØ´iÛðDÒÎÊàµÅÞêZËëL…Q]_)[¶lg g¢›êNºŽ€©©)rrr r2縬¥\^¹ÄÌ^(,χjnågcÚ6xn­ a#$´–×¹„#ÎÞË‚ˆÖDgMÇ$½zõÂÍ›7!r"û{8¯¶P-¯$1 a©Þtæ)„È키¸b²Ì ›F3‰)ê4 š%fp‰õ§–@$==]ñ¦ÄwâW”8â€×»woܾ}"Ç;JÓh”F‰Y;§¢¤òîÜ„²+&n´Â¤$+’Í$¼”$´—×`’ˆ8ˆ’ª"H),,„‰‰‰ØE8Ý ½–tˆúôéƒ;wî@$óZœøH¸hðßê÷õ–xsƒ¥’ÄÔdGø¥8 ±G¨W¦öH;ŸˆÚ†ˆÐNtþ!áAô'^aý M"@ß¾}•vÌ#¿dÎ$&¬…7-•$¼7Ûãʃóô‰>îs›”ꪶG„11ß@w‡‹illDll¬è|%ñ1Œ0÷]NtÅ¡ÿþ¸ÿ>D]Þ¯q÷™²„§Ì—rbšš©?b»õ™?³Wöª¹{÷.\\\DçëˆO ¢+¡×ê;1E_)1pà@vN9pq²ÄÚæ=b<—˜´ÑçïžFÃ.WFFF¢óωÅÄHâU~Ói­€ð$ ±{÷n°ðs“Çzg^^ö.ñvš*k+À惟ŸkãòåË(((@uu5›ž§OŸfï†ÌÌ̯°×xÅ@t&ôEçÛ2ˆ*IIIÉ/{Š€M“0fÕHŒe§W!!Ö“Xðu8ªê*!2þüÖܽoQÄ(~`3Tœ6­ ¸òŃÄÄDˆ<χ¿ÌŸŽ€cÌH&A?µò*$í›M7½*>ÿ›0wî\ÅÎVw‰ ÄD0Ÿë}ˆÎŠS¦M¼Ö–X»v-DŠÊ ©óž°ýd8ìWŽh–XE±r ¸hX¼jêk„{k¡°1ÅÓùîÚ›WBWt¾M¾xؼ)®x†™¬W ‡Môp’Ñ,£,á¬I‚õGÞA-Ið©ø ±˜xŸ°Ô´PÛ$@±åŸ V®\ ‘’ŠbLKòUÔ0Œþx˜\ÂŽöœÝ‰Ì«l£‹ËŒn±¼.KŸº†ZHihh@PP(äg|3¢¡ÛfÊhþi°[‘Hie)¦'MŨåCa9LQ‚M¥¼’GPMâñÕ-–רŒ¨o¨“¿. OyÕHtd­à §ˆÀÒ¥K!ò¼ªŒ:ïó¥C`±l¨ªÓ‚!.4 ß}ªvÑG¡¾±RêêêOšyDÑ0lÕ Œ ,^¼"åÕåL Àð†`ä’!ê|“¿è³Ý³¢¢B.±&s…Zy+¿@Cc¤ÔÖÖ*ÞwÞ|Ah“Òƒ.\‘Šš ɦch„†ýà #äC›%"I‚‚‚ëÀøñãÙõO¼B_u4’—Wu‰U™KØÏH©©©Áĉ…Ä]†èBèjˆ 0oÞ<ˆTÕV!X ³¿ÆÅƒ™ÄpU‰åL‚¦’šÃÝÝí²Bbå‘%piA"î»åhâ’¸›››h'’_Üõµ¨¿Zœ! Á að¢Á\‚FKlø.9ÿ@N^37ˆ:¾ …€`òäÉìSÑš$ØÁ/!kD6nÜ(ÚH%úíZ-ýè \8ˆ¡(1”$­ƒ–( \kÊËË‹Ío ›ïQé‹Z<½Ò¡*°“èÿWÔ$âŽÄ)½ú£ŸW#::Z<ø'"Ž×vøúú²JCa•gÙ\B©¼jH#üeALzŒRçmll^t“ñËLJb$¨Ö‹_ð±)÷Ñ7óUÊ«F]mxRòQû?–“r""eeepppP|C|™ø7q‰s–Ø@L#\x™!$¥Ý—KÔ"ùäz|v<‰Y ^RÕ¾H`›ÐöÚÏÉÉI4|˜MLäK8ö|7B˜ðsÍ.QD $$„ov£*°›DhH}‘@ee%\]]E£¹ÄLŠy»Ƽ³]‰Î|Õç·¹Ž|!†ŠcJxx8“øo ¬ @¿Ya¿ÂÑÄ믿.¼O„æ¼Ó„GW•{uG>áD Án^-=~Ç&ž·¦5kÀŒ¸H@ ügÂø™éUÅëVÔ%ˆ߉&-Ïkäëi<ÑóEY'>Än„áKL%ü¤¯O™Ÿ™Œµž×µKt zó«â$þ þÕ—ð!¦oÖ|ë𢳟³]ù¹È”Y+cÊ纑ZçÛ.aÀÛéÎÛî%žÁ1áÿÖ…xåEGêÿ ”- ø<ƒ¹IEND®B`‚keepassx-2.0.3/share/icons/application/64x64/000077500000000000000000000000001276304217300206575ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/64x64/apps/000077500000000000000000000000001276304217300216225ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/64x64/apps/keepassx.png000066400000000000000000000104721276304217300241570ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞIDATxÚÕ›y\YûÇIÖ( ÃX%í›RÍddeWÆš-Ëad‰lC’<–²d ‘5Œ]cfü0¶‡ñØGöER”íó»Ü]§Î·û»ôÍó{½Ì5¯÷£o÷÷>ïûœss»ÿðÉBQ“ð ü‰aŒ?ÿ[ÍÿÆw|j 6áÆÍ$®0À"‚hü·@цø“@1ù7Ñâo'€Â8D@`bb///DEEaçÎ8}ú4îÝ»§pêÔ)ìØ±‘‘‘ðððP>[HÄnÂêo!€¢3‘%nÞÂÂ3fÌÀƒPÔ¸ÿ>¦M›† *Èžm>iãˆ÷LMM1lØ0 ø‰FYZZ¤\¹r…%˜1ãƒÀ?þ9’Ó® hz®n‚ž ÖÉD/ 6i—¼Ã3oCޱcÇÊ÷Û‘(O”"JãÅŠÙÙÙhÖ¬™|Ñ­DI7åU>ÿüsdeeAÄ›w¯²½º¯j‚½ KX¯–0@‡„ˆCƒ4&ȧOŸ*Žïõ2Q‡°$Ì£p( ðöö–%$¦ºȽ,66r¬?‹®+ÝÑ-Þ]%!p ($¡Ýtض©j + †œj¡{lc ¿\]9¦OŸ.ßë,¡C!##fffò°u *%u Hº°»'a¹‡Hš„#×öC„¸°»»»,aUa l9•@=4Çç¶>è²Ü ß j yCøêûú?~<´Å™3gPª”:ÍtÌ—0ç·Ã××WÜc*áEÔ Jë0ë—©ðŽ´GÓH|=ÓÍ¢Ðâ_N8|uDˆ1æââ"Kˆ#L$âg7n„ˆÔÌø/sC@œ›JBw èºÔ õmþ©OB–à3ÖÐIIIÊwôZîž/áÄ‚‡uùòeùþ +Â\¿€û 3 $´šíŠc7kæñÇagg'I %”|üöí[ˆXô[:/´IàI‘pêZLJ¾8qâ„ò½­'Úæ Ø|aD<{öL¾·¥„-QQ§€(ðåt;E‚·6 sãDòïª ‰µµµüE³‰‘þ䘖4–4f B€v ÎÝk+®¾X¼x±ò¾a¶ùé1îäO£L™2â¾~æ‰ÐB§€mg7Á‹Èš Qy¾™ã†S·ŽA ¥›7lØP–I Q£F#äç>èH´Kp—%ÐÈ“ºÿ~i¹^½zÊgzÒï’ s 9jÔ¨!îé /Ë+åwQoÞ¼+~_œ'!BSÂ×BÂ,´žëŽ3·O¨öè´Ñ‘%(öß½{S÷£ÃbW,!€~^ÆÂ Ô‹”±.GJJ Z¶l©|G5« ÒBIoØN¸•źu릌S9–YÈìUš±_’pîÎ)ÈqçÎÔ­[WCÂ7 bá‘tˆ%BÂR– #3x môìÙ>>>(_¾|^ÉÔ¢5V‹›ÿÔ9¬"\@èÖˆÜJs›,Aoz \í¤ËAÃR•yèÌA4þ§¾¦J{øéÀPÔ#î 'NÔœá߽ŤŸGé‘ è@Æl€œ7¯ò3ļCSÐyIuf` «š!úpR2nk+‰Ë«Ð÷¼ðiAXÉõ@£F()êÊ®(n¾ÁøÍÁz×r/%ŒÞ„W¯_‚C.˜Ò˜¾…“·Ž`ëùl:»¯îÀŸ÷OáõÛ\h 唉Joò¸ßB´$¬‰*\*Q¬“!¾È#¾°r()ÝÔkŒMª/=jbÄÆ¾x™›…ôôtŒ1B9sžüNyTgŠsºcG<(Ç’‹ÑëMB°uÈ.Ôx: WŠ+E å³³fÍ¥oA.A4!þIT’ÿ±܈ QåIHH€/^e"hEWNÚ·ÐBBŸåí‘öB£±Ê‰n*;½yóæ)]úâÅ‹ÊjŽ*ÑʦæÀÊÏè|Bžp—º­ù©WÇ_:Ï?îÕ§;4‰½Ä •½áþ“-šiùx m8=~·*/ŸAŽíÛ·‹ ùhk1‡J´"\ù‰×à_ù©Âè™þüù#çõ+ ŽïÆ?ÚÀmЦ„ð| EJƒVwEæ« È±eË”,YRÈ!ðÿ†LuçÜpù©¦(¹ÿhüܹs!Gî› ‰‚ëd!€°Õ+ÁÛ€„!kzàEN&ä y²{E„³k®c”6¶á‚"¯þ(Õj|.†®çIÖp ³ÖàN¼Ã¸Ä½— Ï2".}‰Ž1͵V˜e C×õR&T9Ö®]+¯ë³‰P÷us¹ÛC‘ÖÿãÍÛ7øaõ`8Ml' M· ÚA[<™~q] ®~XßGµF ¬#¿—EŒ"܉š|Úkj¬ƒ;À©S§ªÖýÁ Ãà0¾'4IP8‡iJè² -tEFöS굦GYBð†~xù:rPö‘%¼àãnWžýË+Ao ,,LÕø‘k†ÃnœìI@î’„€ùm¡/žf¥#piGÝé‘%ŒJäM’”… ¿8„p&ªsî/a¤uˆŽ¢U³nlÇZÁ.”Ð%øÇh 9r$öíÛ9ÒhÔsi{Ý[hÞ=ŽÙ<ˆ$ä@Ž˜˜YÂ3b ¯þª¥Jƒ\ ¸,.¢Úó‡® ë1 aC¨$LPIP  ³=”-[VõrÔ“©è¾¸­Á-tè–ÁÈ-$aöìÙ²„t¢/o|,‰’Æ8ÁQvTR(Ñ ÇÃjtC4 i˜'al{YÂÄ þÑmTèúÊKVGŽ©™Ð5ÖÏàzÂÖaªm05ÈÞ<)–)J/ø^RñSÕø°Ä04ÕV„¦+Y… çi@(ÇYG…3Rðí¢Ö·ÐaÛ†Sz 9ÂÃà Ÿý7ïEÀ8þEÕÀ”ÍSPD}4Ù _B£B<§¸!rçtÌüÀ®D³vG`ù‘¥Z0ÊKŒÇ‡žÝGÀÂVœtK˜²c¤R€‘£ZµjâÚ»;Þ˜ óx|Ù¡8Ô ®¯ !atžk’àæŠÿÜûô†Z@6ñ^¼4uòäIÈqÿé]ø/h¡;=²„ù‡f@ŽêÕ«‹ëïá›åG ˜”Æ´KpèŒó·ÏÂX7ˆmB2”—œä¸›~æ7×›Çýü½.I„³x ì¿'@’à8ÎgoòM/à/b2±U‘Àï Ÿ;§)óVZ2:Ä|­S¸-Côà“_^´¹8ŒuÀÉ'5ŸØÝ»RÖ ‡ˆ1D0±AH¨R¥ .\¸9n>ù ícš’`PÀ/„ëÿ‹›[»vL÷Û †É&&ýù¢3±Jü¼jÕªJI[Ž©×Ð.Ú[•C7ëИ‹ fÅpüÚq¬<¼R†ºýYÍÔõð¡rì-5ðq˜ŸòA泆WkDsœ·W/S]½zr$?¾ŽÄST?½Fa3qôú!}܈ϊ*`Bq^•MMM…Üøÿ%‰|þÖ’êC|Í õ$œ¸R[o².ÿ{‚¸Ö_|ëׯÈìåbÕ¢ ˜d¤åo{ìííåÆãîìEØõxK]‡w—µx£õ9Ms^¯—â|ýþݵ|=å/>’““‹+ ‰1Âø•÷ü  Ü”“““ÜøüÔ]¸¡¼ +Ë”aDƒÍ¤?Z(Áÿ/KØÈ×UÞ/¢‰±H÷Eó‡4Œë- “Óüä]¸(Y^Ôåm¨þZT-a3b2‹p1f¬Ì“ŒàùoEEÆØb„ Äzâ5#¸NøñŽÐ¢¨i°"OJAÄR"žSÓj"Y-±‚L´áÆ×&ÌU/¾„ <”œ9cÄê¹—UL<§×„£1…ñc–ü¥V„=ÏÔ.Zpf+qô¤2ýqJòPªÊ–¿Ó•÷áÄuàÍ5¾ª1½‘BLDŠ1sî:•ˆÊZ¨ÄXJµxuã?^‚)QŠbÁß]EA}Ü‹+ðçKÓÿµ³ -ˆý¼IEND®B`‚keepassx-2.0.3/share/icons/application/64x64/mimetypes/000077500000000000000000000000001276304217300226735ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/64x64/mimetypes/application-x-keepassx.png000066400000000000000000000100541276304217300277720ustar00rootroot00000000000000‰PNG  IHDR@@ªiqÞóIDATxìÒAËÂ0 àï<‹zTDÐßïa…ý§­iÆ"ô)3Vt“‚0´ðܶõÍ»ü1óWû0ä!9ÿc•U€œ‰˜‹ØŽÐJLs ˜•ey "¦¶íu&ú˜!yB:ÄúÕ&ô­ý¢(Šc]U¬\]ß8Çð÷¼¿Â ^¤îvÂæÓ¼R‚²Ë)`)œ@>ØÑA- ƒ– ßXˆï3ï£ïò‘Í*fì³ xö‡1 –Ð4 ¯fTÕ‘½ñ2Æ$óŸR3jubEAöE *j0¢EPÔˆkœ*Çɸ'J "qO4j ¢¢‚ÁeÔ ˆ‰ˆ €ˆ`Ô €â7÷k¸]/aœª‡_Õ©ï½{oŸ_wŸsºûU?§ååæbíÚµíï~ýúÁÄÄŽ|FŒÀ •™Éçü×QÂörê@KŽë{®y‡««uöÖø÷µk×àííÍK{饗ðî»ïâÕW_mò¾­­íó€0yÓ–z\ßÓ:Gu¦ QÚŽíÛñÆo熎5kÖàøñãâyTmm-Μ9ƒØØXLš4 ¯¼òаeË–±§›aLÍö´ÞY½súÈÌFI«¨¨@PPpüÍ7ßÄwß}‡çÑÅ‹agg'®suqá´a{´í jkjŒàt¼y‡õ©Œ½I'ÆŒ#`¨*¸“‹”ü݈ËúŸ¤LĆSó”·—ne£þi½ .DÛ¶mammÍȯƒ`4ZçËJKñYX‚ƒƒ1Ak&[ ªë……Í;]S#íÀÂyŽUj~Æ“‹0q‡+&ítŇ»ú!äë~˜òM„îi°Ïކ¢ô^!TEFFò>„!7>’mìíÐÐP~Ø¢½õÖ[ÈÉÉQ•Æ^£•——ãí·ßÃþÎ; .•Åôo¼1~› ‚·»@BØ­‡ð×}ž8^°T}}=\]]Ñ®];¤§§ã®24tŸeÚ¡nÖ§HM·nÝjÖ¶oß.†e·nÝp9/O:M«k´‰' Pû÷78qÿÑ]LÝõ>‚¶8cÜVga‚ a—+&+h¶¸HS÷º¡ 2Tžòf ssä_¾ŒJªqhæx€¹ò –´cÇ‘Âzôè+W®48^W'¬´´T9r$TE[ˆ€/ø•3‚ ÁEB¯üoåÝþ£0eÊt3û3|Ãm„%)Áx\_ŠS€PÃÃÃQ\TÄ)`<jD§= öx$"…áó”0$瀪ÄÄDáwÞAAApžµùæÍ›ECׯ_êRé9Œþ—#Æ$8é +¬½zŠA§Œ…¥9ÆD÷ÿ²TZZš¸ïàÁƒqY¬]Œ@ÕuFFy`àJk¸¯²Çj8¿ªЦMQÌ€þœ¯Ô×ç6Á³£„0–¶4@¹ÆÓ¦Mƒ”&ðõvë,lÌ\ŠóžÀ»t邳gÏ¢ª²ÒxAP“Òt|Ö{`@¸µ„à¹ÆI÷BU\\œ€Ð»wo14===ù¿,r–'ÏÁ¨M†¦¾j€Ðÿo&ˆ‡F²·;tÿ?àãƒ@•………†'Oâvy¹ñÈ”VS£0jƒú¯°†›€`# R $ç쇪˜˜Ñëfff"8šššBUÈVoøÅާ!xÌ5ëg‚.¦’™á~Í]PLÃ|ÎÁƒE@®i VVVèÙ³'ž>} *çæ YãÜÂjÂZ{ÎM‚ªuëÖÉ4Éà¨jÆ×ð3àƒ&âÁ¨h×¾-æÌ™Ã8"Š¥+Vàµ×^ƒ}À_DzœºÇ µOj@1°òþ‡BYY™ñh‹˜y󿉇|ôÑGÂ…âs¼ÚTñ`°!õr2T±ÆW!¨S 6-#ctÔ è2­7Ú´mÃù-EMþÁ[™E¥¨ŠµEûöí‘zô¨qh‹îîî¢!Ó§O‡ª_?£@04@X)!`HD_¤]9UìA^{úôiPÇòÂGéé‘_8ÀOA›†,±„Éà®èaè‡àž¿ÅYÖ Ù+@•””ˆû2ëœ8q¸SàÙJ®ªª nnnâ3g΄ª3…?aÐ* AÍ ïE8 ã×cPµgÏ‘¨ó7²1"¦/|b[€ K¬\1Q©sÊ~¥–Ö#FŒ@VVÓ%ÛÚ:h••• Pâ¡sçÎ…ªì‚LxBø3" È*H‡VE•×´y†oè«@p|5ôé±)„/2—A•ŸŸŸhKXXËpÖ¬=Z €„àââ"<þ|¨Ê¼šUöjz”†F:âtá)P7ª ¸iÞ²‡wtßœ Zúô(!pÝð ö¨]»v± ¢-III(..féÞúøFfGGGÑ€%K–@UÆ/'à¾Ò¾IzôXcƒaëœðãÏû06þ=x­³ÃÐõöb´ úôØaQRJïâªsçÎèСƒ¨2/\¸À)ʬõbÐnß¾ 9U¥åUœ·Ó¤GJL‘¶a«L ; a˜!1+ßÿ¼!‰Ã›…œè޽äžÛäëë+ž;kÖ,Î}Fö>?k}Œºr—fåÊ•Pu,/î„ Ó£¨u2¢ êqýc䔜šÜo±íôF¤^ùÅUxÚè8uþüyn„ˆç 8PT‡7oÞä*m}ñh¤occ#UGrÄÀpÛf! ùÜqiŸãyõäÉ®øXò ã®ÒÉ“'¥óú­ åi i‘  S]ÅýrøE Ò¥GBðŠì‹K%ç¡jöìÙ"˜Í˜1Û¶mûÜ+\´h†ŠN:‰ûwïÞÑÑÑœó¯íù @ añâÅ23 QwT `ãp¸~f…þË­téÑS>ÑýWú³ÜáQkúæ¬k×® Djj*Ëc<.ÓÙŽÖÀU•4­ã[ºt)/bFÇTTåñó2K¸„Y¡Ÿ‚6=r*øn€+·rå07nœ¸ßË/¿Ì5>‡:×¢‚,¸zU¬ö¸é¡ím;ùþc㦰|ùrÑX{{{Ñ#ÔÝê*lð…ã§pZj) ¸ªVX7…Иübâêí| ! @„lݺçÎÃ-w:Î4Çvèçgòs£M?«W¯æ—üX~6:WqÞ}›Ãa‰…„0!Þ¡ ã0õ«qý2H Œ6ºô8j£; +~Åâïï/îïää„£GްÈáv|ÓvÈa/œom‚Ü’¶´´µuïá=ÅùQ°[hûEæ‚á“¥woB«½gvjk™üc=E™Lq«¹¾ÿþHOKã‡è¤ÎyíQ~­ÑC‹ŠŠ’›¬vwïcl´?¬ç›Áv™Á\A€ÚØlz ˆ¢”Ë×å!9"绹áTFÏ'TÒqšÜ¿¬®&ãïÐyžÑq[‹;;ì êÁ£Šóc`ùqXÍ룃À©PÒ€UëwUÛ³téqP„-ã½”kŠeÕ7lØ0ÁÃÃÙÙÙ „„ {\¶6žc¨yü¨Éõ‡SRÄA‹úû¾ŠŸÇЪªhF¯uœ¹½gI˜º)µkAµ€¯Üà$ˆääd¨Ú˜!—ÐÚÕcåïÚëy §!kN:ο¹OÁe:Käzå{½^ áÃ/>TzªKU/­‰:þõ×_碆Q@ Qò¼ª¨#«téñY9ׯ_gýA§ùÊtLÇÅâ(??ÿwå{ÝŒ²-þG¼W hSâBñ¨N S6Œ”r®k1„Nìܹ“½ÈRŽÎkñËUë¯TJdO|ã©HƒX]j0~27EhÂq޾—››ËƒÚ}Ê÷:õ\€©ZÁ,Ál1~üøÿ´o.-NAÇê@"ø r¢âD¿Z.~!BÈ®.&³®kÈ8ž¼Ä!(ó ë7ta;N¦ÁÞÌ\" ’4õÿ×£«º*)P”•³Ò¡Å ‰]ú÷8Žù,Êò†@>À3ho9ÆBÜ"Ì9ƒ QS2‡a˜˜eÉKŠÉ›®FãE” ð,Q´Z-”äÖ@Q\“Ú‹‘´8“¸å3ôi_¯×7NÇIý»CÉ 3A8 ÃïÒ6ßÎl‰úÀ’™ñÊRBž0œ@9º9Üà ”+Ìõ*þÃÌùé*!¡V«ýu.ã0&Ê[(L‹ð"¾ƒå?Ê™ÙãËÃùä˜Ñá*Ε¦9¸2åo¹ÂÖS£v»Mà; ´P „$ ’#!Äy4›Mš#}{HËcÕé‹$¾‘LŸ_-dlwWô¾–Þ?Ȳ¸+1ƈ›) ‚5âW$&±|!x=×>†ÒïÓ÷óèÁœlEQ!ø×ÇÇ !í¾¼Ç-`„²“*+‘{vBö5«1ü%®!w&\æ¦[Û&öâ³60|†35±±j3oÚþ¤Û]6‡nð>û(j)œm@ûÿ±°K²h-OU  ±Ä7É3üÛÓÓ•„äc7x_TPú?ÄE€vqÔòß”€$ùCÀxüø~¯·’‡˜§¢g àwO€í ž2Ï‚7ÖÿjJZÊYú~Þñ|Ôï/å!æ –WË"À&ƒ >c}ò‹ZŸóY€³iFí àßGÑBöŽ(ø ð'ÃÎ!d}šš©ifpêˆq $B,ÿC¡îpÏ£g5¸Épb'PÀ[Ö'ùa}ÜŸøÇâéðîìl&Þt,€¼Ío_RìØO­ë4¯>ÃÁ`ó& §Ò+ÜRðå`o‚û˶اŸ'ö‰uµ>µ=koŸD—› ¾2T|="ûx9³¬Ÿ˜äg¬ÿKæ‚]5´±)›€RŠ>ÿ¹^kê+öPE{„+ûŸëŽr-åôä™ü3—+ùå(¬›ßÝÝ¡Ô|T‚p½˜k^×~¾*. ±ÇµS¢@üÅý§w/{~ÐÓ8íKÌþIEND®B`‚keepassx-2.0.3/share/icons/application/scalable/000077500000000000000000000000001276304217300216325ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/scalable/apps/000077500000000000000000000000001276304217300225755ustar00rootroot00000000000000keepassx-2.0.3/share/icons/application/scalable/apps/keepassx.svgz000066400000000000000000000075061276304217300253430ustar00rootroot00000000000000‹íZmoãÆþ~¿‚Õ}9£"µï/²}ÒC‚ Z4 ú1 %ÊfŽ’:¿üú>³KR”l§IÚ´)9‘³³»3³3ó̬tõÙöJ>M[Ö»ëÏØ,)v«z]în¯gß}ûEêfIÛå»u^Õ»âz¶«gŸ½sõ‡4MþÔyW¬“û²»K¾Ú}lWù¾HÞÝuÝ~¹XÜßßgeOÌêævq‘¤éû7o®ÚO· 6ݵËõêzÖsïM¸Ö«EQÛb×µ žñŬç]yW´où©XÕÛm½kô]ûvàlÖ›‘•„¸—ƒ{ïL,„HÁ‘¶».H'ó ×Kócl±ží'°,*(þª atÜ–Þãÿ‘{ dm}hVÅÓŠlWt‹ß~S–­»õ°Æ`å“OL¿Ë·E»ÏWE»è³³C¿/×ÝÝõLùŒ Æ™%wEy{× $k9¦”ÅýçõÃõŒ%,áLd\h¡ú'cÀQ®¯g°„€Óô².Ç}X&A˜Ò•ËdÆ“Æ;g&3×õŠ$¿ž},Š}Þ¶Y0ò¸B}èö‡îûâ¡+vq)(;Ñ< Óœì¨õ8¹xØ×M—>¬÷0¾BH&ž3<ž1¼“$WÛ¢Ë×y—}‡¡Ã`€‹-ÿöá‹ø†÷Õjù÷ºù˜=¿d׳Ù0ˆáõj‰“ÞæÝûr›ßäLÄá^-Ž'ÌÝ#"ÖjŠè'/Òzµ-‰sñMWVÕW´ò,Yœ­TvUñ>l‰½È½B‹‰FW‹Aåð6žÖš|ähÄûr·®ïÓÁ—à)~öl´÷=n„ž î!n{—ƒæ?£×pf¨F¾ß½=”뢫«¢Éwd © –='Ö7?«îù¦nÖE3®Ê´U]ÕÍõì­ ³„vh›ðþ&oaÜö®¾§}¯g›¼j§îöT×[,¬2oµp“Õižq骿‚‘a˜ãü¹Í0K¿@&“L94 RiZå$¾Üú^J²²YצbrzsCA~6Ôîò}JêÊmÊ.ÝæÍm¹K»zvžªbÓÓšè§Ä›²=¼Wg›?”Ûò©€AyïºWëbÓ“ÓƒIµÈ›/›|]Bá0~J’Bë1ä®Z \{¬  =§áL—o…0…—ԻÒ_Âo6›¶ˆ’‡‡q,h'á—<{œÅg/íed~#óç{-†;U §ãùsgS&…ûõì”G®§Ywÿ}Èßˉ{™ðÓ¡Ç8Ähø`§ƒOÀ÷ÒÄ~—´Æñ–È‘Áô\°ÈDT$IyTqU•û¿æ(ˆ‹^ØñˆL` )¼<„³xO„¸íÄvÃʯ¸Ç uUaæõ,¯îóÇë:/ïšEÄÛ<è%ÏòAõÀ!™Ð™°RBÃG¼:–y®ŒGÚxõ<ÓLIDÿ£ HÉ´UÜS¦Š }·+;„ä¡-šo­ÿ²ûŽÂlþ)«%4 ÐÄc…êë—™ðÂZ9W™cŒ'.ŽføuÕæì—È0kʇw|Îðµ…wbÎ =sÍçP‰ÎŒ¼ø—¬úŸ±ÿ 6Ø”UW4?¢{€¬À$- b ÂMñe~hÛ2ß}^~l¶[(>•(ÌcIç —œ9ß/}²Œ´ŽOB5î Êéáé6éž™ «z«˜ V_RaY&Œ~žr¢ÜHÆ/â¾ðúö”hú<¼©Š-e‰’¥•mySV47bSÕ÷ãxt§%êàwo.}qYìr §7ùêãmSvëe¾Z¶J£ñ7ù¶¬—ßÀŒ—éàêi<`ÀW¹)WñÀˆc–À¿¾NÖsÏÔ\ÙL*‰ .4Q”´:Y%pVkPÇ9¸­Tˆ\’µF§ABÜK%ž…°v*’3I•˜ÌkŽ Ì]Cða=͘òĈœ¯ðn”^¢ÂsM[zäEPdR:lõ…‚HÂ[ HÎ g4¢(H!<¤÷(Ä-'’SRkžü9Aû#Å\p:9í8¦šÌ©ÆD…­¥‚ -} @Ð “ŒÅ¥RY‡GëT R›žk²^o,)5Ô¶ÂO¶rÈ~­4ìGªá°æC ë"/@Aa˜Â"‚,dµÂ §& I‘KÒ Öµð5ŸX,GgHga'ZÙLV# ­”’tNÖy£l´#7F%J¤Áò.Zi‡ ¢YÁ½Ös‰RZ.H.á+ðzÕÚã¥Élj:"I-!Ñ$ü‰¸æRãT\06UíB8F¥¼v6Ie†"@ãüU&P–')=”ÓX[8i™ø—÷ÁM<ÖÁ½ Ìc<¶M¼LL€%<-fQ¯):HéR 'â´9áøZXâÚ0î&$ôó8ÇœC4l!£*†H ã˜7¤ „tÂÑÁ´dI«Â…ç.sBCºHÜb=†x „s1Öÿeè ˆb˜h²8¦æ°TA(2„©ñ/ìSòu‚S#'ìm 0XÚH§`]´mzŽ ”J±äiö@am‡ "!ÔñÊÃ@)‹°êŠ0Iz7­¦Wõn‡Ä]7)º·OywhŠPåÛldkªóQj¬ÎÿÚ6|Ñõ6â tν$1§üa”é+r %Rå%¬º8Ö¿cè¿CK¸ùkàã6^!É*PIË( Q CøRnC !Ô°ÆÐ¸Ä#ˆTÂ͆tÆF”<S1y ™JÎáµxêó‰&̲` [XfCâ±ÈÛƒœR w”‘Á¹Öˆq&HÈÚÈBë…œ1ˆáLË"U!éÁqÐl €]Q’6ÍI$ìi­Ax-©â·†Ò ùOÎ)+PÔ´ÁÀ`&ò§‚ZÌ@&£ëG“ @p:Ê$Ž'ÜGèœãÁ*²eÜg Rw·Âñ à@E]Ñm@Ö°6¡°ôÌëAc¯ ¡†ò$1Y‰ e¢Êæ3`:&GBkx‚ 5 IÀ;%¬*¤ÀäÔþï¹ÇäXª_P&Hœvôz @ÅE ;8m—pý ç•F‘“þ¸Òx^~5íeuA×¥Òàðx@ƒ99Æm¬yP8„*ŽŠ,:.kЋŽM¢zYp[ze2ê®~¢<î™Iý¶ÑMÍ9 Lr; "™Yt‰ó#M Âç]EBÕ¢vRHz;´Ò£6Ř`)NûCrÏ´‹"G‡Ì…]1n&Ô¸ ¤÷>Ö­.BAQl­©ˆêgðd‘2 «@Fu$0ÙíK€æýµgŒ£+!4€@h¤=7K™Hqˆ ñ…Cö@ºAÁ­çqo$xу2;G& "#­Hš£¢Ò0¹'ÌA/ƒ¸ã,…¶+Ê‚Nñ( J1Ê&8Ê 4ƒ˜À=FB ‚D¤BSb¼ÒIüâ…ZXá‰lƒœFý: °¦É4èPÐ9XZMôˆK–AZEÞ´$51è8Ð0±p…Óƒ#„v/ €í×C{‰œÌ—¥&³QÞ//.£q ™¼,êäÂéL°…&¢·§¶SQïm0U:š…ŒíÝ—…®×;Í PÑ?¼sè¿‚Á{LN-¶ŽPK8ä¥K²!Õp–® õ’èÍ©š¡¯1ÂÆ.íH±èÞB# l8@@@õ…=…³BA!vÀ‹U‘!ÆNz:+Ÿ’í(´¥caš.]¨ø@SšÑ $ëaUúÐü0:uLäpP›àÕ„ ìmÒϧåS-cx<[’|+BG ™¡:† `¾0‡ÒlÓ“ÖŠw68CõKÁð4lÄWñÒw¸@{~Ý}ñ³òùIžÔÒRk¸”õ!Q¢Ô36¤Iª„© @½©´I‚®œ×ïäs>Ub(a cnµá𬠩Dpº40T¬Pš´¨÷é=B,$?ò$´õszB  z l >¬^[ìEœ\ o!F€âqö -L@­@`#ÓÝ%œs¨®ß—#… ‰ÁÓ- Ý´(Ì¥` Gâˆ!ïÐu÷ëõî4î2È`¢AKå&'&‰,cl"C[Oe:Š@x`L*Ä´ÐäƒÂ“.'”ptÙg´Œ Pßá'$:^f˜—/3ξNAé  5BÎÒ›Bæ·Ó_]D—?ýê4oV³“0x¥Õëþ“Bf|¥x‚²ËP‚L‰?Ôå-QîU%>–j ß¤ë¼½Ë›…OŒ¶£ií4%Ð $ÝæiM¿ã9ÒéÇ8CA÷TzCüáºNÚúã =Æ6|S£7õóq%ꔨ§Dm¢ÃŸ'l™÷3]’ORÏNÉ`¦NgŒOÁÿÂ$EÀÒsŽã–ª³96tlaF(úáa®HÎå²îµ‹>ëPž@çxÑGÅ¢ˆ®y™óœš-2 º#i/Nsœî¥F(œT¿"çhh±¾¡Ûƨ†£‹d³ðïÿ‰å_s¼ꨯ9öY LÂEœ…ýÏl^þ»aÿR;¦ÍÅíðUëmü–Wô³÷oþGø *keepassx-2.0.3/share/icons/database/000077500000000000000000000000001276304217300173255ustar00rootroot00000000000000keepassx-2.0.3/share/icons/database/C00_Password.png000066400000000000000000000016651276304217300222470ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<GIDATxÚblU—gÀØ™þ1°|ÿËÀö÷¯¸äï&u—ï1[ü»µêØV†ïØþ3ÜeøÇ@, 8Àßߌ ìì 1*æ?šõƒ¿)ˆYþfPd2ýœÁ²cóY'V†/ uÄ4SóFÎñ¶IŸfk»|eeáýÏðî:;Ã…ãÿÿÇGý5eøùwûŽ+LÎÿ~#3 fbd`ddÓóúÚ£ïö…•åÐ.†G·äþ—Vp]|øüïÏòvn%¦í@»„ˆÙOA˜ Ž™™ ¬wJx§ËÆÒ T&òK€›Qå?Ÿ–»¨¿£ö§ûŠ›ç –Ï?‚}ÁuþÏŸŒ Žª¿eؘ¢ü ÌÎÄÀ§ÎÀàÕ¯ÁÅÀêÄÀðð É“_ÿßÿÇ𠀘Dd%…„Ä…Ä„ù”xîžæZ÷ð0¬¹¾~e`øÏ$4ňÕH‹2<𳑡qÛÏKïþ1t‹7ß?L Lÿ30gfàäúëæò+[Êô7Ãç;Œ l’òÀ0±j4c`F믵Óú<ývþ?CPð @±üÿþõŸãï{‹ ÷+-ß üxÍÈÀ-«ÀÀ"­ÄÀðèŒ_×^,ÛÉÐ3éÑYOºš·¼ @àtð÷/#Óÿÿ¶ï×9$½øù‰[\˜‰ñ/Ãç W®lÿÀðãë†î­^lÿÀXôÔbX”Ë¿ÀàûÇ`jïûn³[ük¡?ïþ3p³°ÿ›aEßÇû/þþ°ÿÁÿ]þ?yËÀ° ¨ù4rš †b;-ÓUuR/¾ÜfþÿíÐïxÿ_™Åý?B•ý'Û&c< €æäÉ^þr‹ùÿ÷› ÿaùÿzßÿb'žŸ@1@ÌÀÁÀŒW?@1ìŸ*üåÿ  Íÿ·6óü7ä¼ÃÇÂÜ Fx ÁˆåÛ;æGgY~~ca˜ºŠáíÙ÷ßÝ™ï2‚æ?A@ŒºRœ}Ìÿþ™þþÃøÿλß[~þûÛÅÄ W¨ üÏ€Û$€_´-‹·w0IEND®B`‚keepassx-2.0.3/share/icons/database/C01_Package_Network.png000066400000000000000000000022021276304217300234760ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbd`h``d`aøÏÀÄÀÀÄÄÃ'Ê_¢m$il&.#)ÁËöåûŸ—o<ûxòÐѯoìí`â9ÆÊþ•áç‡ý @ š¸ÍÜÀqýÝyÛýóýÇøýÿÓ¿_ÿ÷Þüö? dßvñÔ)Ìæ0Í ÄÌÀ`t³¹u¨ÑŽÖIº’Öz¿þüüÊðûß?†·_ß1<ýðŒáÇw ²¢ßŒ­åY> (šÝ:}Iõ÷—ëë@Ð!uk•Ý)õüZâÿ€š…¸9Äx9y^~zÁðâãs†Oß¿3¼ýôé÷KqùÏ ¯Y4u¾òëߟ7GˆIPH"_Ôò‡ÂËw/8Yu8Ù¥™Ø?1Q†Ç/63<}òì3‹LeYkn¦' Ê Û|ýA¾ÿýïñÿ/3\&"Dþûúþûû í'+M?2Sçì¸ÈߘäâÚõòí눙ý¿‚­œ‚ºšº&ƒŸq=+';0Qr²20p1?¯??/ƒ³^:?Û? Cñ#Ãã#?ÿÝ:¾j @123È[Ø'Vð)Ò`Wáp`xõ…á;Ðæ?@Wügd``ÆÍÎÀÀÅŒÿïÌ”Î\øÌàïuïóË#¦ÄüŸáß“×÷~ˆèk9Yø8Ë2ð ±10s00ˆr10ˆ±('ƒ4?ƒ…'ÃË—ÿr2k~=¹º²˜O‹±7oð’ÖIÇÿ=}ÿÿÿùwÿŸûzÿÿµ¯Ïþßÿõòÿ/`Žø Ä;O¼þ¯cWô¨¡ –èH ¿Ôþÿÿä~.7±÷*‘t—fSþÆÈ'ÄÊÀø›™Aú“ÃýÃïÿ­]1ýá÷·Ç   ¸ ÀäûÿïE˜8#ƒP§ €‡ðïß¿þÿ|ÿòÃï'»þ®Ê¿c@ƒ!~Üç‹¥IEND®B`‚keepassx-2.0.3/share/icons/database/C02_MessageBox_Warning.png000066400000000000000000000016511276304217300241640ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<;IDATxÚb\΀üg`PãÝúŸ……óÍÓç~@¡sØÔÓˆbü™‘™)Ϥ¡NŬ¥Qš‘•µø'Ëo : ¬üa`P—27wtfÓ3b33þÁÀ` 4„á ¦áø/³±²”¨„…ò0|ùÆÀðü%ƒšƒ;;[éW Ü74 @(.`€`.ib,i`ÄÀÀÍÍÀ " -"Æ  ¡ît™ë4 Å@,,,Ìiª>¾|ŒÜ øùÞÉÉ20°s0誨p²³±¦Íñ¢Œˆ‰H0Bm Éš…Iê00ˆ‹14ô÷3”wu1üÕÒbæâfP‘•ñýÂÀ` †ŸP @L°è…<g®º§Èv†‡÷ï3ܽvÉÌŒQ@Á˜Ÿƒ‡ƒ½ð;ÐM°@ x€ü.­«&¦ ÏÀ ,ò ƒª¢"ƒ’¬,#''ƒ•ƒÌׯ j‚ÞÀès‚y €˜þ@ã“•‡§PûÛ½kþÊË]%..Î -- IX.Î ¹Ä~2qsqå½Ât @1AãÝQFEÚ‹ÿíc†Ï*Z ¿…Àš ÌÍÍ!^eø›ÀÀðå ƒ2‡#P( ˆ ètV>¾L%&®ß| C~ÿúÍðÿß?iII9 @쟿3ø2üQÖdüþŸƒ=h@¼`+#/Èóå5Ã{ï0†/²Ê ?þþcøËÄÄÐ>u*Cco/Ão `%¥8ã®øõ‡A‘•Å èzW€bá,V`fùuÿïWÏþïÚôð?†oœ\ ™¦F †=Þ¾•áû ?˜˜¾>~Ìðèl  «„YY ˆq«ºâ7K%^Îo/^0üùù›á×f†ßþ1üúý˜~¸þøþÃg†?@M€šþüüt #аóÿþý Æ9\»„%ÅNþûç×/†¿@¿‚‚lþó÷Ãï¿ÿþ‚øÿ@ô_†¿ŒLÀhgÊýe~öûÏ €ld"IZ Y IEND®B`‚keepassx-2.0.3/share/icons/database/C03_Server.png000066400000000000000000000016221276304217300217070ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<$IDATxÚbüÿÿ? ØÙÙÉÿ ¿~ýf`gç•‘‘itrr çååa¹víú«çÏ_>¹wïþ™£Gõ|ûöõ!H@1€ €akkk##COOÏþŽŽÎ÷×®ÝüÿíÛÏÿß¿ÿâÿŸ>}û¿«kúnnÞ™0=Ä€¸¸¸²mlêýüE••UÀboß¾gøöíógï€.cb`ddc`ff‚é ¼½½»rsó¹>}úÎðæÍ;†?~1|úô•áõë ¿ÿee`cc)ýÓ@LÈpsó0½~ýáÏŸ_ JJR ?þfxüø5 3ƒ€'РÓázÅÿþe¸|ùÃ÷ïß,,tÀ¶qss½ÆÉÀÄÄ6è| ¡ €P `ddbàççºà7Ðß?|F ! ?35²²²€1P%\@¡ÀÄÄŒ5†W¯Þmûøñ+T3#ØVNNv>>^Áp7Šß¿ƒl¥6 ¢ÿ ÿþý»„yxxÀ†=xp6?ÀôŠÿþ10¾{÷hÈW ÿÿCüü‚Àh|ÂÐÛÛñoýúG¿ÿÒÓ@(¼yóúçï_ߨED~1~c`þÂÄðíÝw†}ûv1ÌŸ?ãɃ·ÚÊf]ô¦ €‘“2¿¿¸˜hº‘¡‘žšœ!륳—fÏî¿ôöíkW‘W‚‚ /_¾†ÏG°€BI––¦EÅ„¼^¾x&±xÊ҈ןýVQ’g`açºkcgÿÊÓÓ˜_ì888àzÅ ÀÌ´€‡——‘÷ƒÄû3nêw˜ÿ013¼ö·eÕZÆÉúýÁýû˜˜˜&•é t´ ãUÕ5>þbg¹þ’ADöƒ8Cö7}‘ ’Ž‘Bü¬ Š wV­ZÉJù =„::z«þÿû¯ ¾_š¿ßsùé~•àäf`Û‘ùëá_/8Yÿÿûûç˃÷W}ÿþ½¤ À Á)e=Þ¿†IEND®B`‚keepassx-2.0.3/share/icons/database/C04_Klipper.png000066400000000000000000000014671276304217300220570ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠébKGDÿÿÿ ½§“ pHYsHHFÉk>¢IDATxÚ¥“MhyÅ3™ùÏ$IW·º¥%V-Xq¥V\<‚ôäMÜÅ“zö¶ ‚žDYDÜî=úqY+âGUª55µ™h›6é|äcf’ÿ߃Ô‹ßùñxïÁOSJñ=2<ÏCJùM³ÐÐl HBtL&ƒ¦”bóÀÀêí¹¥¬LZBØ–!²¶)laˆ¤eˆnÛBBX Ã45®Ÿÿûò‘ro¡PøØà¯u\Úv|ß:6]Ðj+¦æ"ÂXµNK¶$kûSd»l~5º•ÏÐÐqßCX†ØçúÃwQ‚„i‘]”¤¯'Mêí8÷÷ïbüß0RÝ?®Ôø¹óSÃÁ›ÙHTÍ Žš õw¡Ð¨Õ “yʗαedÙ«ñÛJÿ£/ó0lг/@¢‹¤R©µ±„ACK1­ú(ú)ŒÓçð&vÚÆ³{‚Χ¦9„ˆ]!˺bÞÌ6©ÅàG:w§~àцcŒölbã™Ãl?ù 7•<Û x_WN;¬BìA;dÅ’ϧ|J¼,ÃÄ4$VskÇzGÖ`Ø‹³æÒÎ 'pÈÄ.šŠH™ w®Œö"ØÍ™ãÊØv§M~Z"ú: |p<¿ -L4Gı¤ABn0Ígq(Y¶Øìÿ< èÕ5¨½……qôÆ$¿æŠÜ»ûŠjªM˜oÀ\äªaN=¦Rê u*.­ù¬r'@…Œ,*sív‰¹Þ4¬4~nRYÈ5Gý?zùû§€k÷ÃÝË'÷q¥þtbþéØDeìñko¬t3Z¿óÐoÕÒTÁ}—Ï—§_çgJoò¹^uøÈÂ'˜,°bˆ%|E–|I­þ9LߣV_BÃýHÍtEXtSoftwareAdobe ImageReadyqÉe<IEND®B`‚keepassx-2.0.3/share/icons/database/C05_Edu_Languages.png000066400000000000000000000020541276304217300231460ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¾IDATxÚb¬óägvN†o_~3|üð™áÇï /¾~e8ó:–áåÏñ¿ ÞR©¢?üù»}Ûù»'÷¬«ûÿw×:€ba€‚¿þÉÿ^ŠšZáÿ8Þœ¹´MŠuñÂÿŠéµÑêuIA"ŒÜ@ÿX5½4´[êù—^Zy" €XþýûÇðïï.>î÷Ô²*U#+Væ¿ÏOí niç¬öÞBÉB„ñèMF ÿ@&¹D{rÜݧ_@,ì ¿ý°q Oª2õIfe`øÆÀðù'ƒ‘›=sÕ·ÑÕëN|aþäÆ )ÄÆÀÎtÐV ×ϽcøóãÕ?€bR7ÐeÐ42ˆÒ0Ðbeøq‡áyÉÀðö ƒ‰± £àû½¿¬»ý“¨‰ù/Г¿î¼Ë°²£òÍÏgûA¾ÿ ýÿ ûìûé×üúøÿúóýøüó ±¹»çÝЫ ôêåðüýþÿâÝËØúòӌĈeó¹‹ ?þÚ§¢¨Å­âËÄ#mÃÀÊÂÆðüö†÷g·0ܸqéá»;¢Þýÿö–Aˆõ}þ |€b™òõÃK†CbÏþŒãâüÅÊ t++û«+6<¸ÂpüÕ—# ÿ®@”s1ÅX €˜”™DüƒwYúÆIý`xÏð~QÃÛK.›üc`uðg×T»tôü1†?ÿ‚˜™â ˆÄ ¦6óÀƒíÿ¿áµ¿oþßn¯ù;7ãÿÑßþ¿ùÿòÿ•Ogÿ››Ý„Z ‰0†€bvI°Ÿgo¡ÇýÿÏ_af6Iv†??2|c}ÃðêûkÁÓÛÎ_ûÿïÿ4@,âl‚¯>bøüï+÷G ¬ì< LÌL ¿?|gøþïÃo¶O \’ L,<¬V¿>ü\Žn@±¼ýö–ñÅ¿Û Ìß^3p0s1°~g:µ~üýÎÀÀô•áõÏÀ¤þ—  –s;>Q2e–àe`ýÃÍÀúŸ ˜Z€0ýaøÃöáÓ—o §vÜþÿ÷ËŸ‹Ø  F`J ó¯á&( (ÁÎÀÎÁþýûçW¿núðïΚ''þýá”xƒn@12°÷ç/.Öd^fU&V&P¦cü÷çÿߟ_þ~üÿåÇQ`”ÍŠ½Ã怡Ó~bÛÎJIEND®B`‚keepassx-2.0.3/share/icons/database/C06_KCMDF.png000066400000000000000000000017041276304217300212710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<VIDATxÚbüÿÿ?% A¾ÿ’üþþÿÿÿd+''оîîâ¬ééQß {6 òö’ *îd°ÆöÄÖßøVÏîüððýA¾ÿCþþ œ?JJ|ôBÌ6†'0tA¾ÿþÇ´½äD Î@ùèÛýÿÏáô¹ÙÿóïÿYèïè¿ùþXɼÒüQ̈QH¾bvy¶ s4ì%$XþÿúËðà3;Ãîë~]Îò—‘A}Ú½ŸO/½íûÀÀPÔòä€E 0â~q0|xÊò·êÁƒ¿™X˜88YÞùÅð›èN&†?÷þ0\}üûPsL33'$Zþsùóïñó~øüÛFVõ ;ýw@ñý_–>¸Ãðás Pé]ä¼@ ‚P0ðIi 懲¹¤¯ÈCIúÿÝÿ20±nŠŠaËL„j€óù@Oó²ˆ0p²Ogd`ne:\¹ €)ÍÎõ"9¯¶#IEND®B`‚keepassx-2.0.3/share/icons/database/C07_Kate.png000066400000000000000000000021111276304217300213230ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÛIDATxÚbüÿÿ?% €X¸¸»î››+Ë«¨Hÿgúÿû?+ÓVÆ¿ÿY™ÿÿûÏÉÊÂøæÅÓïK6Líúý‹¯E”ãƒçë /€š/1@±‹ÿ–•Òãb´±QdTg`çd``ce`àâb _›×y¾VSmÃãGϯ‡³30dq33ÈÿúËP @,?¾üüü“™CàÉ÷' ÏO¼aP’UfàäáÚÎÀÀÉÁB >ÉúŒüUÓ³Oß÷K4—à}qéÒœ› A¾ÿS#@3=ùíæîüþüüúúüÜØúýÌ”_`ö "]XâÈÉ&A¾ÿùø÷Ïòëð5) ö"úèÝÕèåüü ÿòÿÙ’CXòCék´Ã+¾é ïˆå÷¿¯'¿½~˜ÊÈèÂÈÅÆÁðíÍ{i-nV Ûظy^\¾ÉÀp£›! X‘ADj–0¬íûËP5óÅíûbæ¿O}|õêû§7_Äee¸€š~|þÆ "&ÅÀöñ-ƒÄëy ¥š "JþœXÉ0±„ñÊTÆã@ÍÎ@ãN Óµ/>õäƒ2+‡ ƒ˜ ã?†¯oÞ2|ÜßÁ#ÁÀñq?ÃÛ½Wš¦óþ›zþ˪¿ ÿš€Ò@ ¸öïûWÎkïž½WþùC†‡oÿ2<½~ÁÑÉ‚ãZ7Ãå#¯.üËe¸)þçÓ_†éE0Í @L,Ìê ?1øñî5ÃïŸ ââü oßdX³qÃ_V¬`aXñ<’A=«‰ÁÙÓ†›Y9%Ó¿, þ¿ÙùéÕó??¿ÃýÛ·¾}ýÏpæ!/Kär†ð¶ ¦* f¬¼¼b6ÈÙ±“©qÇË5Çþü¿ùõÿÿ›ï~üôå×ÿ'_~ÿÿøçÿÿŸÿþÿÿ¤ï>|û_OÏjH## 0 >¹¿ÿ=výÑ‹«_Ä~|åg`ebcøÿŸ‘™‰áï? bf>!IIMÕk×/°ñðü@,LLÿÀyóáîžík×™ðò 303³0°3;0c°sp0°°°2°²²½÷‡áÉÓÇL ÿÿ0ýùˆ‘…Eê•¿ÿ½mafú¯ÈÄÈüŸ‘‰ èD ‹‰‰™˜YþýûÃòíÛ³­ÿÿÿî…@€.a>ÜIEND®B`‚keepassx-2.0.3/share/icons/database/C08_Socket.png000066400000000000000000000022341276304217300216760ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<.IDATxÚbdpÞÈÀðÿ?ß¿ lœ6²¢Vz¦:Š|ÌLLŒw¾ûvèÀ‘›WÏݘÁðêà|†_W@1€ °[ÇÀí½­!eÚÍog}ÿÿýï0Q¿€øú»ÿÿKç]þ#ª›¾IY;@108¬gàñÛQ•¿ôñßëoþüþé×ÿןÿýåÏÿ+O¿ÿ¿ôäûÿï~þ¿ýùÿÿšŸþ‹ê&êcƒiA¾ÿ(]>65šZ? ô÷üáì÷öùýïôûýùú æ(ãÒÊýö消ILŒ«Œóçƒÿ~2±]ÈÄðøÕg†ó·ž0|x÷Šá×· Ÿ>¼f8}ñÃÜyË=¹Ã hÅÀÀ¢r@A¾ÿ 7ùÝôÀä ÿžÌÕÔÕ ûýÿèîóÞæðããè/$' Sûõ⌈…›ƒïÒÑC —ÏœaxçéÁ ¯«ÄðCP™á+×G† 70bA¾ÿþüüÿþÿçáç½¶ÀØâô BUP#;EûDæ: k5ð£?ž3òûøûA¾ÿüýõøü %(ûáíýøëá˜Þ?ïÁ¿ºà;Üïcç<Äû0ˆ™]DÛKJÕXA[SžÁÆÑˆ™•‘hÀ—w ÞÓóByÿ3p¨Ê2pyŸ`øpžáè-C“Ë É&'„7œúÇA¾ÿåÇ­Šÿöû@;.  #çÐ!×Çåçüøùæ°û»,lTÚH.­´ýîÍïÿ¼A¾ÿùóí¶Ëµ¤£êæè%'%îÿôóïÝãæ!í6îÑ«½ÄÑüÿ§A¾ÿùèß¶ÔÐÓ))ñúüûÅ·ýþþ òÅÿæÊõï×÷ö¢A¾ÿþþøéիǺ¶íËÐÞ*ÖÚö ÖñòäÚ(åÑ ôó   ËòëšßÞÜïýýˆ‘]ƒ”$þ}e`øýÈ~ÏÁÀ.áÌšêl¿ }Åí ÉÆÎ👑á//Cß«Wwo}ýšT| € øÁ~æ—gøýé0›ÿ¥Vq`°Ýiþ˜Ð10\úÃÀ0(~ $ `Zlfù“ŠIEND®B`‚keepassx-2.0.3/share/icons/database/C09_Identity.png000066400000000000000000000015521276304217300222420ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<üIDATxÚbüÿÿ?% €˜(ÄX{ÅÈX]ù/Ð)ÿXþ302üc™Ë dÿc`fa’L ‡þÉ1HÍߌŒÇ/<}@,&¦rUUÑóþ00|~ÂÀðû Ÿ Ãf†×¯ß10111###³²23pqs1Ôöí• –Ÿ¿þüëý÷—áÇ«+ ̬l Ì_2ü}qšá§ÃÞ÷X™ÿ3°³³5²2°°02 ð1XYi3üüóï/@±üüó—Œÿ~¼g`øzŸUZ‹…‡áÛËS@üümþþÚÌÄ `Ìôˆñë×_€bùûç?3±r00ýyËðøØ*†¯_¿2p³¼aøÊðáöÝ«ÀÐøÍÀÆÆ ÖÈÄÄÌÀÏÏÅ ­%Ïðçï€bùõçÐõ¿Øy.~ÔdxqvÃÛ8Ô= Õ-”¹?3üýû¨™ì Pxpqƒ ä¿® ¦?ÿÜ|üá¿´5ƒ ˆçg=×j†7?¸þüûÔ̶™™„™˜†üÝï߈åП¾üa¸ò’AAAAAA€ŸáµÐ?†S—þ1ü¹÷‚AUNŒì@o°€cC@€›‡‹ì€bùûïÃo®¾ffxÂÏÀ`q÷Ï¥« ïýa¸ñžÁ]NžÁL—áÛ/Fh 2‚ÃãÏ¿? ¿~ÿc –o?ÿ1ðóþgPâ­çžsÛ20[+1¼¼ÏÁÀúþÃû÷׎~e&(V`4²€±?/ƒŒ?Ðëÿè–ï?18Ëþbàþò‹á7Ã?%!õ÷4uþ0ˆðÊ1½ ÿpTeÌ´6uضtÆÁûçOy3(e30üÿÈÀðlÃÏ'@­L`ˆä€o@Íÿ¿ý1W”çM°Qçñ´Õ’ÕTbbççdøý?ÞsÃw¦Mº’ߘþ È\~ÍÚø÷'Ãn˜ ˆ‘¿ò\ž©([j¨¡°š¬(Û·, < _¾ÿb`føÏ -ÌÁÀÍÂÈ ÈÍÄðùCHpâÅË'V100þ@ !s¯}þþç?ì¿ùþ÷±½ÿŸyþÿ÷ïÿÿÿüúñÿÿß_@‚¿`5Åm«30°ZÀ\@ÌOïþÔ´t÷ÒWfbxû÷"Ã{¾Ó Wß^cgÔeàaãdø tÇß?þýùÇÀÂÌÄÀ/,É´|õnžßßž­@Ìʾï¶^yÅ“ª«ÇÁó‚á*ƒ±˜ Ãkæ' §žŸexüþ=P#+ƒ §0Ãßÿÿc‘äe8zõ½ô‹{fõ æàM’^6:¢ñJüÚÌ‚Üü ⌒ lì¬ Ùž0¼b<Í0ÏZQoN`€þüù—›…á/»dž5Þ0üý| €˜íÿ.þåóKV!6.v&†“@xäÿ)inA†›wï0°¾•d`à`cøú [ÿ˜> ±1WeT5qÅ%@1 )pž[3ùˆ¼®¿¼¡2>à ¼Áx‡á×· O11ä:´1p ð2üøõ'Œ ¿ÿügdaxôžMøÔˆIÊY€Á0Uê°8›ü~ ÂŸ¯ô?)3èóê0ˆÊùL¬àèûþ…áË`Tþffø tMh‹˜ºC@±0±33ˆ) (_e<ʸùÀ†ûÞ0˜:¨2¼ç¼Èðüƒ)Çwn^V.&`Lã†ç?X„TLmA¾ÿ5 ÿ þ«ëÎ÷ú:Æs¡®sÿ Ð&3+Aùýäë÷ÙÝæÎÌÕþÐÍÍùàÓÍêüé̸ˆQš‡˜¬_ûÂð¨]×6qƒGR±¿“'ÑSgþ_:vòçí '^üxtý ÷‡þžª¼ Ä¿nÀësßþ|¦Ni`¨ós1üùVÀÈ¡ÿÿýÓ+Àè¥ýk@ü ’þØø'˜@Œ”fg€‹a!½ž+¶IEND®B`‚keepassx-2.0.3/share/icons/database/C11_Camera.png000066400000000000000000000016061276304217300216320ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?% €˜(A¾ÿ99ig :6 #ààãòææè¿òÿýüüûÿñóñï¿À£ŽA¾ÿ““ª÷LL;èèïííò ÞäåÐÛâ. þ  ôùÿêÝè~|h¨ˆIJJMVVˆA@€‹‰‰ˆYØYî?ɰýæO†Ï_ß2\¿z‚AGWžAXZ„áõ&†ÿ9®âb`cãTA¾ÿøøúÿ÷÷ùøøúûûûþþèìôF;*B:)%ôôòøùðàôú çüýûûˆ‰‘‘‚¡~ýÅÀÉÉÌ ¤ È`a¤Áðó'ÈP6†Ç@/ âb ¬,?Ì?@õLÿˆ ¤@ì?~ àdø ´§Ï_3ì?pœ¡««áüù+ >¾*be`ç`ºö+ØËŽFXR¥ &&&ffV†¿ÿ0°°²2ìÙ³ƒaÆ  ç΀Õüýû›•• è‚ß@õŒ 4€%^ÿýû”ør8êtt´LÍ,”ä~þú 4œ ¬†ìu€bAò<~²0°0þcpsuf°¶²à.Nn°Á?]ÇÂr3@ 9„ÿýû tçO_€†|geàççcøóû'P)(ŠYž?Œ1&vvN°Kˆ `Œ¼¼Ü ÜÜ\ÀÀã`àááÒ ¯_¿yˆ‹‹“_h/0à@QÍÄ )©6ˆÌÄrýúýŸŠŠ’œOŸ~šþìtvv†/~1þLp’@W¾fxôè>ÃׯŸ~£°°\??00`þÁA Šß¿ÿñw F`è3]LÖ,Ì XcúöíË¿çÏï. FJ³3@€é ž"IEND®B`‚keepassx-2.0.3/share/icons/database/C12_IRKickFlash.png000066400000000000000000000021241276304217300225310ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<æIDATxÚb¼,,ÌðŸþþe`ø÷Oäÿ¿áŒÌÌFŒ,,oÙÙ?‚¤þÿúÅ÷ÿ÷oa šs LL«€ø 30刅Lþÿ/f¼Â""²h€0#+ë?°¿¿ÿÿçϹ¿¯_«üýøq2P]/Pø H € üÿo ÔPÊ")¹h€3)/ïk  ÈŒ@òüÿôI‘‰“ó ã‡ëÿ¾|Y ti'#ã9€b:E€d³Ðj úÌß™EEO2³±Y333+þÿÿŸáßß¿?þ e|ûV è-]†ß¿×ü}ÿ¾hq&@ ˆ:ù2«¤¤ “€À)©7ìììþÌ Kþüý{¨ˆ…Åà/G4Ç> ­Â@=*@ï]þóúu4@A¾ÿ1¹ 6Å S t©¸¸éæÍÏþ..¹UGGÐôù­ÿýý:óóËïïGˆ‰‘›ûP³¿fæà°gçâZ°|ÏÞ—‡OO5—á¿jôõËÕÝÇŽ¥®Ü¿ÿ%×<&vv;`,½ºD„í @11±±}d†6 ßGf..Žß W/?.ìÁÆ\ï$ÌÃcÇÊÌ#ÉÀP¿÷Ä á?@9`ذ311}dbúží5@¼ÀÈÈÆÆÀú‹™™ñÓ¯ûßÝ»rêŽô9`4¼``¸Çöÿÿ/vv6FPzªc`Z & <Pó¿?øÑõ…›ÛÜÌÙéóa†Òi oöñ7 ÛÁÙù3 0œþ33ÿÆ?P(ˆï_Âÿ>|xóÿ˱_oÞcec“u²²bºé?ÃOA ¦¦gf¦¦ LŒŒrÀè;LbÀ¨ÍÈÄ$@L@[ÏýýôI˜ÒÞþûüYåïß)\œœ @ÍzÊ â2@Ìdsrq10åþ|ú¤LÚoÿ~ù¢ tÁy€b†èR`´èþ~ûö5Ð>ΰaõj!!9FFv S·¬[ÇðíéSÆÿü}÷îÐB]^€bÄ`&™ð÷í[…ÿ¯_Ÿ~xïÞÿý'N0póó‹j*)1( h€è™3gþ½yóÿÏ«W§ÿÕõLé Xf: ôÏyæ·o™×:ô÷)0|õ…„4ùùùÔ)Q˜Aó*PìÌÿ´„…™j›^ÿÒ@LH¹ñ×FÆ¿|À¨a`àä&Ù‡>|yõïß`xÿýû—óâë× lÌÌ šA ÀÈjñÀrÍjIEND®B`‚keepassx-2.0.3/share/icons/database/C13_KGPG_Key3.png000066400000000000000000000016621276304217300220710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<DIDATxÚbüÿÿ?% €X@Dxx:ãúùêbŠÂ1šrîê&òªo¿¸}n÷­=÷n¼¬@ÓÄÅó– LÐHŸ¯X7?)õ—"›èwç€÷¦fïŒ&W|{ÍþŸñóÿ¿ÿþýÿÏøŸ‘‘áÛçßï¿|ÿ¾¤ €à<ÿÁÏ,ðK“áû{F†Gϸž½Tbá=ÆÜ²ãK 33#жÿ˜YÞÝý۰æÝZ ¶€ ù¿VAF÷ï¾`ÐÓÑ`àåå``dbfx÷³–áÖXc…{ 20°°30¼Ò\\ ¿¿0½é °ººš´t´Ο9Ïðõë'WWK†Ã‡Ï0¼ÿðšáÕÙo+¶¿®ÿñúÇ}Ž¿Dßg8ÃÁÀ ÿ™áÈ 6àÇïWØXXÌ-ŒDDxüo úú ž`v®e{*pÁèáù ÿ={t›ãïO†ßîaýôìu€&Ó'Ïç¿~ý’•h60>|ø2ˆ2pp0²¸{ØE†&„_‘suøSÛHâ‡[ ~ô€AZRŒ-ÄÏ=ÏÆÌà4##£ Ì€b‚Ò¿?~™zæÌ¹#·nÝê_`@ò1((Hÿ:sæšÙ¡C§zvïÞìýûw ÚÚê2ü|<<ÃÁˆ‘<þ¿¿ÿ™ÝË—o“?}úÔ¥££+¨§§étëÖý˜7o>”¾}û‘åÍ›wÝ,,¬/€^ÛùàÛg°.€»(æ033ýÿöíçœ n…_¼xá7/ƒf PJˆ……ùÏ›7 _¼xÝù÷ïß[Gnë °Gî Ðo LLŒ þüÝýèÑó·nÝfPWW‘”’«Š1-ZÂŒ’¬ ÷®_?`bÄÀðöíç óç/Þúó烿;#Èt˜& €‚"Ã… Ç._>ÅðéÓ0¨þÏÇß':tâÆ»wŸÎ…þÁ4¿zõŒáß?0— €)ÍÎMY–ûÞçIEND®B`‚keepassx-2.0.3/share/icons/database/C14_Laptop_Power.png000066400000000000000000000016311276304217300230560ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<+IDATxÚbüÿÿ?% €˜(A¾ÿKLYüüü x($Qw  óöúùïóõôíêëëäÑæææËýýüÊîîíØùùöþððïÔÔÉl###ó2³°:üþûò÷?vAnA1yyE a}U>^ë?¿5\yµu뎵—.]èªÒ @Œ 0ðº€á?3‡Ôÿÿ¿™xx8ÿÿúõ—ãý»|¼¼<Ê Êjêòþþ¾êþüglnî<¾sçvß{÷®¾ p|ÿñ…áû÷Ïyù8ÿöÿñ¯?<Œÿsó01ss|ÿÉüèŻߋfÍZÓØÐð@JJ”!::Üh™H/@½ðÿÿ?†ÿÿþ0þüùÝWßH'UUCÛRDTR˜•ƒáÇÏ? ïßû£¨¤~ýýÛç"§N_gxÿî50Ì~²ôÄ€ÿØ89Äšm¬"‹íX$$9øù˜îûõ—áË–wltŸ¿øÂpùú†ãG/0ˆˆŠýé °~ò(©ë9—z¸3~úüŸáúŸ ÿ³3°íàäf`àæa``ge`áaxóNŽA@ÄÈ~ÓÔº €ÀÜ{úà‹˜üÏÇ_?—Óä*gx÷îÃ=¶>†¸ž<ºðÏvæ¿ ~}axöôƒ §2»œ±²0ĉŠ‚õ„`àb``Ófddc¦0¹M†»é: ¯X¶pˆh000E±°pWÙ¶¬,Œ bb"`½ÄHin Šs#@€7‡4ôxp+Ù€bÖÖ6c`ddd`aaex÷î͋זŒVVVdþðá#Ðeÿ˜™™äåå€j8ôŽ9tçÏŸ_W`³ºº!X3;;÷oŸ=ºûðúõ›¿TUµ\øùù?|øÄðùó7†¯_¿3())3½yóÞáÊ• ‹z¿€  f†Û·/1\ºtŒáÅ‹G ß¿fxõêéÑÛ·ïêèé™h iþöí;Ãÿÿ @—(r]¹rÅðõë‹@³“S0ðTLÍ$¥TÞ½}Áðöí«ÕÞôPUV’aø÷hð†O@—pqñ1 Š(\¹rñûߎ³¥¥;Ðùì ü B‚ _¾þfÐÓ3f0Ò7Pæ øÏ¯-ûâ Ãÿ_¿ÿÿšõh€0ãç/?¬îÞ½¶ €X@Îø÷ïß?~ýbdøõ󛸰@¯²¶qâk^sî÷˜Þ¼xÇÀþ••ûï–ŸŸ UY¢Â#¹¯\:Y @,°Ðüùã7{–iµ¸¶™Ô™Ÿ² çž10ü`yÏÀÆÉÄðá3ÃÕ{ÿd9Y²-TdÅÿ1°±sÊ (š~ÿþe¯­­4AÏÒXŸEJ‘ñÒ;†ïÏx9þ10p°0üfeaøùŸ‘Áך—¡6^ƒ—ëCCSï¿n IIáÕövþò¬_€ ßþ``àúÊÀÀÏÁÀð–‰á3+Ão&†x{.†â †÷ïß3äæWýZ¹rñÄÿÿÿÕÃåËÿƒÀï¿ÿþþýÿÿ³oÿþxòûÿ„3þÇoùÿ?pÑ÷ÿ«¾ªøûÿÆÕ«ÿœ<>}œó:@1Ìœ¹âëåË÷ÿúø lÐo?þûúýÿƒŸÿ¯:ýñÿÑÛÁâ‡ÿ¯¥eð¨Ç 9)—庬¬ÒWËWlü{ýúÝÿ?¾ÿjùDCW¬Xÿ_BBö|ú„éÿ¸¹ù6• aÓ @@ÄÈ ªªËÀÃÃÇ +« Je a1 ?QSSo ;;g(×âÐÌ`^w¨3¡ýÀXIEND®B`‚keepassx-2.0.3/share/icons/database/C16_Mozilla_Firebird.png000066400000000000000000000017521276304217300236660ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<|IDATxÚbüÿÿ?% €X@###†³Ã:G7;¹b/sqiNþço¿}ÞrðÑéÝÛOÌøs©d PÉO þ@ Ø\ w aÁÑ÷?^}ý÷ÿÇßÿÿüùÿÿãÿ_ù ޼û#ë¹h.P™È„a€dìÁªÙÇ>ý¿ñêïÿ‡ïþÿÿüûßÿËO¾ÿ?xãóÿ£w>ÿ¿üüÇÿÉGü5«\T.@LÈšY½¶i¨©ò6ñ²2ˆ?ÙÆ v¸áˆço?2|ûñáó× Ÿ¾cøýþ>ƒœs+—¸@±  ,–ÀÄÆÈzé3ƒÍýÕ ¬÷¶0¬zmÇð‰…Ÿ¨òдk÷_0ì:xž‘G‚QR×+ €P àçe3¿sù<ÿÿ÷ \ÿÎ3pÞþÃpåáZ†­/ ¾zÅðåË7†?ÿxExy9øtÕÅÆ¿¸ŸÜyÆ`þ!Ðw¼F ɺ?Þ±¤0l[<‰‹AO”ÁÀÕAˆó×·9ˆˆÿWëžþûù3÷å·Òòþå’çyÇ úÕŽáß'†¿ü›žK+2¼{úžá;0 DÕ8zÖ0¼0`xaïK€» gÞóÕ%.¿ _sr2¦10üÿÇð˯Xîë0ÈŸ¸Ï ÿèÃgƒï §TbÞþaxýè 탫n8¦íx;-iKèZæWÿ~YÏðŸ[’AP-Ì@ƒø~ýÿÁðÜG˜a½ç<†ãR bãm´Äÿxqs߀{˜™æð°±0Ißœ'ºF&£)Ãÿ¯ŸžÝeøé÷„aƒþ: k%†sçß2®øñéñj€‚â_ þÔ¯É"ÃùNà×î; ÂOT˜~^ûÃÀ¬ù•AÀü+Ã/ 5 foÿ4¯)eóï/϶õ< ˜ À¦üØiç÷iÃñ\gþ3œöà}›…ñu*ÓwµO[¿3,õ²üT8áãΟﮟÒ] òG@ü €P’ò¯ Z+ßNcýßœ(p……±(å+8çížï7Vr|Ú a; Vb^Pž Ž.WÜÀ»ÈŒbW V)ÖVåJÝxñþÜÙ'>|4áû÷CûÿÿÇðïß7 .F€bb†ÿÿ~~ÿë¨o ¾06^KÖÊJŠA@„ƒ™‰áÇO†_?ÄïÞ²ò[²ä¸Û‚…¯¦úx¨ˆáP#3@1èëÍgPSmŸ”²ûÃýGŸÿƒÀ÷Ÿÿÿ¿ÿòÿÿÛOÿÿ¿|ûÿÿ§/`áÿ?~üÿ?uÚ¥BBŽ‹ÀÎ@Ì|¾"Úâ;ê›mÅååxÞ¼e`øöáÏ_ @K~ÿ:Èþ ¤YX,,Äß¾—×=qü$К×Gˆ‰‹›­8"F[NZ†‡áÅ  “00üiÒ¯üo_>zóЀï=e`0w°cÒ5ð-a``’ &5u‘@ i†/@[mdúûóG†ËgžÞc`¸q ¨é>ÄзŸî>g`”bb°vòff‰ e~Y~v†/ @:ñ× ¢›@&ó{†? O8¸Þ“fø4ù?'Ð[¬ \\ ÊrŒœ\’ÖÄÄËÏΊ ™™¶iÚÔ—Ðûãèñ£ÿ$$^Ãæ38Òþ]ÃÁÍÎÀÊÆ.@L¿ýûr6H306€ìv†Ü6]5Æwï€| íŒÿ!a2å0”ÿý@L¾øð`¿€ñýö%+PRA‰áëiW§p&NÆÀPä…„(@Aøõ‹· ß¿½y @LGì>~áÌ'!¼@[¤ µu”´˜Þÿdd`—`bÑd„¥7 ³€Î=üï×ïçûˆéöݳ׬:ôKB„AQ1L(d–”2ƒ°ÄÕ ÛA)“›¨ùÈ]†ã‡–ãæ×j€bþ÷÷Óƒ{wŠHI››™‰1²²30|úÌÀðü Ð0Hà‚0 Ð@^>†›¿2Lj«ýùôé`rf8@ÌL@Uß<ÙqôèU•ï?$uÔÕäVýjâ:h ;0Ѐ éÈî» ý-õ?¯]›ÓôÐdˈ‘‰‰œ@¹‹•Õ¸ÜÌ̺ØÞÁMDYUŽQ@”˜2ÿ0<}ò–áèÁÃîYñàçS@ ‹¡ñÁ@p@qÃÁ®Ì—e>äç—²acãøûçïÿ/_^¿úõûÉ`H¬*|À ÿ„n€ë&ÀIEND®B`‚keepassx-2.0.3/share/icons/database/C18_Display.png000066400000000000000000000015701276304217300220560ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe< IDATxÚb\´hÑS#CC1†¿?ÿ30ügø$áÊùψÄB&&f†?ÿY˜zûú΋‘¡+Óþ‹XØØÀæ0@¨ÿ ½ÿ€lFFÿþýe``aüÅâaÍ ¢¬¬@,ÿÿüúwäÊC¦s?$äE¥¾}ýÏðûÃïß@ú7ß?@ˆÿü°ÿ203<»u”Á@åÃÿ¿Äòÿß?6vE!eyq†ÏŸ~ øñ“lÀ¯_0jÐMß_K2023]@, 72ùýûo†/_€ø/Ã/ í?AÒü Hÿþ aƒ\ðç;PìØK ½Ä ¯? [~#œþÊ»h3È@W~ÿªý p 0Ëhèþk‚Ø q††˜’û ²ˆ‘AZìiÿ"íÔ`/üBôĆ*$–ˆb?#ß¿@ÙöîC~B þ ÜŸˆÄ@, sþXL¬ ÀbøÏÄÆðè= y Aþ&‚Ÿ@ÎÏ?|ÿÉÄðã73$¡@±0S+ã?†›WN1¼~&Æðû8üúóLCâ’¿@C¾ÿøÏÀüí&‹%8™Ë?f¦@[ Å»À@ùI¬ÀÐùöõ+ÃÇO8€©S@Ÿ……ìÖÿ@ñp90¨©©½¼‚ A¾ÿôôôOììì ÿý  õöòïïîâà⯰°ý¯¯¯Ûˆ‘íÓ§OÖlll:@ëåÒÒÒD˜€Áü÷ï_p ðû÷ïšššžÝ¾s{ãÏ?å®ÕŸ qqqXTêêê²Íž=ûõ/`°øðŒÿ-cÿû h €à)QBB‚AvíÚu÷Â… l¿Aq5&¬¬¬Ì<&vi ØSX0É\µ1æâæžIEND®B`‚keepassx-2.0.3/share/icons/database/C19_Mail_Generic.png000066400000000000000000000021741276304217300227710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbtwŸÅÿþýcRQÛÆÆö^wÍšõͯ^ݘÃÎÎ÷çß?^^^!†ÿ?2|ÿÊÌðó×- ÚŸ@Œ Ä,%åÆðû÷_†oß~1pq±æfg[g¥¥9ñ›xùò/ìÁƒï?~™“‹‘ñßßL ÿ¾eøÿÿ/Ø€bVPð†ÚÎ ¨»44TŸÄWPfôõq100 úðñWȳçïžüüñòß¿€ü@ÌÊÊ> þügÐ×—\›“c«ÃÆÂÆðî ç ?02(+‰0zz:Š©ª¨…¿ÿÅûù³Ï¾ÿxz›‘‘h@1ËÊz2ð𰥦$[çÊʈ3¾zÔôÞï_ ß¿30¼öæõnNNF)}é÷Ÿ9CïÜÞÿæÿÿWg€*A¾ÿÿ!KK+‡-+"èçööþóóøêêðåçíçèíïîñææñ=@/W[JÉÉ¢dñïä˜ÿÿûˆECSr¦’‚¬ðžÝ?{ ´í=ÃÛ÷¾~ý —ÿ lì¬À@fdÐÒ×`HJÒeøô•‰ABZ_õãûýÀ0¸@,Ò’¶Ïßüa8|è*ÃÛ7XY™øø¸DD…89Ù~übdààcHJÔdfŠ10èêóܼÂíÄÀðõ@1«ª8g¤¥Zó9»(3¨¨K0ð003³3°±q1ügæfàáçaHŒUbPSä‡ 'ÃógŒŒ;vìFÃÛÄÌÄ(nemc§¥¢ÄÅ $ÏË`h Æ ­)t;ï?Ì ž®â Zü ß¾ƒ ° èÿõ‹ƒaß¾\Ÿ>]_@@dDÕ5ô¼””$¿|f`øû‘—ANއAO›ŸAD˜“áËWF†_@Ûü:hÈ?F†ãGîs>~|à(@1sr~“ˆÕ3Ñâøýd:PáwbF`à1£’ß š¿]À/ L'ï™™íßþ €˜¾~ûtãÊåË7^½ùÌðñ7ÐW@§¾ûÆÀðH¿Ò_€þ²10ƒƒá? ÃÇ÷¿N|ÂpóÚ]& ÿˆè8†‡÷Ÿïxÿ­¹‚/Ã`ãj`b‚¸æý³¯ ÷ï~|]R÷çϘ«A–³ƒƒ##ÐTî%†a††* rrÒüêꊞúú*<¬¬Ì ÌÌL Ÿ>ýäccãcÐÖÖ)úû÷¯é÷ïßwýÿÿ— €X~ÿþÅÍÄÄ óáÆ÷ï¿1ððp ºŠì-FF†à`^GGË6>>N†70¬^½åÑׯ¿&Ëß¿4$$$WŠŠ ‹‹‰ €mûùóãGï†}:“™AD„—AZZ˜AHˆìt!!a†Çïoܸ| @±A¥ŽŽ¦ž––Ô @î3,[¶âú»w¯ih蘙Yˆƒ\#'' 6`ݺÍ_æÏŸœ©§gø €˜¢&ˆˆˆ üªù—••áØ±“¿**2œ.]:=aß¾­Ë1£ª¡¡§.!!ÌÀÄÄÈð÷ï¦ÿÿYù´µ ÞÓ‡oYÞ½{ÏðäÉk†/_¾]ñ›AFF†MCC_'$$–AOÏèéß¿¿c¯^½òåÿF° ,-õY¦L™ÿáÇ>€b>uêÐê7o^~ÓÕ5²+†ƒ²²†ëçÏ_þJIIsñó ÆXZZØ)(H1ƒ¼òíÛ/†¿2,Z´à(@±xxø?VPPãáçça`aaÆÈPÌØÙY hjªwúô‰A\\”AJJ(÷èÒW ¯_†Ó5†«WÏí qq `„ƒþü%+ +Á.‘––GãÏŸ¿89Ù)ðÃܹ“ïž8q`ÑÓ§—˯_¿?,X0¹@\¼mÅë×o€Q÷–AQQ ˜°8ÊÔø›áógPØü`••F¡PÍ›gW¯^jy €X@Ä­[×W¶·Wpûöí÷ç¼¼Ú¥rròœß¿ÿb¸sçPþƒŽŽ>0a±2<¸çÿáÃ{fÂ2@±0“ ܹssˆ %’Ç(¨qrr1Ìœ9áàž=›ëÃÂz€Òìë×/«†ËF˜Ä’=Ãã • ,-mçqssÛC¥ø€X=;ó&c¿ÚgÉ+IEND®B`‚keepassx-2.0.3/share/icons/database/C21_KOrganizer.png000066400000000000000000000020611276304217300225120ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÃIDATxÚbüÿÿ?% €‘9ŠÁ6zÖZS4Mœ9}÷^ÁÆ©{%þ0qp0rÜzúc—É#†@e€n+@1žPàp4×ËýÏ/*±P’Gé²÷/aVa&†÷¿?3|Úr‡a²B6ƒ‚,ƒà¶•o;û×&÷¿gØÔ÷a:ãOFM€A¾ÿ2Œ†®ä-WÙÅqÃî»ýöÿ.= 1b Ú=µÌƒÉá×p 3+–á¦ïþA¾ÿÖ:ðý·ÿ’¹ÎÿñÝÿÿîÞüÿÔÛÞÿÛÛæÿ¶ÒÄÿãêñÿõóÿÿî÷ÿÿ¥’•þ0Q ºnåAú5y!×MA¾ÿ9óÿ#//2â*ñý •ÙˆÅè·(:ÖèÓÉÀAa#¯ÕÛÎàƒìA¾ÿ!úï+ ñ]B0Áè,öýú üäÄÌèÆï Îó¿®ńͬüþûÒ߈©÷éã§^Ÿ—ýu…áˇ Ï™™¾¼f`øô÷7ƒšˆók5]=FNžo`Í%¶ó:\¿ x@Ì@âŸÒg>'+V·7¼²@ÕÄX~r010³³2üûÆÏ°âü<†×—DB4ê~2 0Hé› m=xúõ¿7wÏÈ ¯4ù¾§è9ɱn»%É ¡ Çðåã†_œL B¼ ßï 3¸èF3ˆËÊ3|øú‹•—‰áëŠñ[o>î &[8ôî Û}æç^21½óáëoF†¯¼Ü¤•dX¸˜8¸¶Ÿ¸ÉКȡ¢ÆÎ@ÌÐõOö£³#gÐ/v6†+? ”$„IŽ‘á3#ÃÝç.ÜyÉpéò%†7÷1Xñap4å`8¿í'@±À’äÕ ÛnôÒ¡X_|ùŠó ?õþ1¼}}Ÿ›å)ƒ"÷Þ» ZO8¾a`xû…áÊä [}¿ @Èy¹QŠifÝ»äWùžÝzÄ ÂùžõÓçÿÏ|ÿ~áÖ¯Ïþ}{ë5ë§_ž¿þËðø'Ãi€BÉLÊ :všÌ39¸þ ^zôïåý÷ OßþaxTø( Œ\†@üˆ@éĈ–;YXˆå€d ?¡ aĦ2†ßÐ\ù À‚VjôÀ‚w*IEND®B`‚keepassx-2.0.3/share/icons/database/C22_ASCII.png000066400000000000000000000010601276304217300212660ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÂIDATxÚb¬ªª:íááaÌÀÀðÐ### Ÿ•••qïÞ½ß[ZZ ˆaÇŽ?þãÿþýûÿ÷ï_0þýû÷ÿû÷ïÿÿöíÛÿ+W®ü———?@,@ÿ@&ÿùó‡Ä¹DÃØ0 S³}ûvKKK+ÀâÄÕ×€ ‹³³³3033ÃÔÿ 1²K@æBWWW%%%†_¿~Õ²-ø0L͹sç^¼xvˆ@LÀÀAñ6WÀ ±oÞ¼Éðöí[xì²éè‡lÌ"{{{†Ÿ?‚åˆY16ƒÐÙ §Ãˆ ]®À9D;vŒáéÓ§ ,,,`9€bBö¶Àƒ‰ƒ¼¢Á©+ >@1 }tà ÄÅÅÁÑÄ„l6/ {åäÉ“ Ïž=ƒG#@±Œ ÿpqq1 {= @š`6spp00@±Æw `Fa@NÈI™odd¶lÿþý Ÿ?þ@ŒÜÜ܉RRRi@yVPæCÏÊèùš‰X^¾|ùõýû÷“ 2¡‘‚´/IEND®B`‚keepassx-2.0.3/share/icons/database/C23_Icons.png000066400000000000000000000014151276304217300215160ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ŸIDATxÚbüÿÿ?% €XÄt¢>)krüøñ›‘hØ¿¿ C÷áHdÉ?ŸÌg*ü÷‰ùÉå wˆÅÂ-’§¡Ñ—ñÇ›ß Ÿÿ²2übe`ø Tüó7à!¿€øÏ þÅ@>3P P~fÁ)€bùùíû†÷M„¿1œzô“áíwY°Š_ šC ø 5Ägbd`øñäØŸÿˆåï&†÷Ÿ¿1<ÿù†áÝGf†œ@§‚\ð¢ñTÓ(ÄÀĶàÐ?ÄÄÂø—á 3?ÃŽ;L /~ ýÇ Qü¢ø7ÔpAi @1ýüûŸ—•‘ÁAK˜Aœ÷?Ã÷ŸÿQ4"c˜F°a¿A.`` ¦?˜~}ePþËÀùï àõpÛ‘\ò HãO(†xá@±°Côå—? ëŽÞgxùW„I€ìLpÀA18F à –ÿÀgâaø ùËÃð÷/Z Áè?¯üƒâ` ÓÏ?L L_" Xä¸>1|ʃïÿP ƒèo¨ ˆ˜®¾|ýÆðòå+†OŸYþcº`C 9<@ÞêeøñˆÄÂÂø‡áÝN†ù'¿0üfe`âþÊð¨ê'0p@CxPÛÿÚÏß ôü— €Xx™™ŒDX´¸d€Î¦þ?Ï!éœþƒ J0 Û ì ¬¬L Ÿð0Tr02Ë“{×-æcàãøÃÀÄÄÑ2’R@ìÿ~bdò€lV`Zþ Ì4_ß¿` `"àìa`dÕÊü†çQŒ,þ’alf»_ ‹s¦rZe ™IEND®B`‚keepassx-2.0.3/share/icons/database/C24_Connect_Established.png000066400000000000000000000022031276304217300243400ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbü¿˜…aþ!F†¤Ù¿@€‹‹›áÛ·¯`6'ß× ùÿ1° 2´[F”°ñŠýÿ÷÷/;ã}§¿ *`jâääTøÿÿßï_>?þÇðÿÀCæO~†gA¾ÿx8þü˯üFàÍóáå׿Üôí/úüÚ¯ØÿïÀ3"ÔŽ²ðÚ•ÊTˆ…•õÿ²Ço?Ý_ÿÖ|¦[P˜ì+æG ߘäÿ~gøùåÃ{ û¿Ž7÷½û â–_€š0|}x–áÁÒcß9ÿ3¨ãÿõ¼´„ß>aædþÌÈÄðá'ÃΧ^ ï$\ 44€QÃÅðãÎ#¥ÿSäÃ…¦12üýùáû³o GÃwA¾ÿøäûÒëçýLúõþñõþñùíË÷KøúýôòñóêíãìÓþ ) è´ØøìÕï‚A¾ÿöâøl´wæ\bw¶·ý€¤ñhÅ5 íìðóîïì®±ööÖîüöÇäقˉýùý¼Œ9ÿ?<ýå×c5f&[LjpÞ¯ŸÞ2°Cúå‹ ÌlŒ gNî¿hÁúô•˜žŽËß×ßÎVŸ>ùéýÏ`\A¾ÿúÿë  ·¬¬–r»ÈÄôôòúåúøÊÉÏyFñsȌы¿å¶Côùˆñb)ƒûq`fúû—á÷†^]^^Þ_L,,W>ò‰,Û¿K/:ƒï«­¬`hèΓÛ?ý ê}JþÄÂÄðŸãÿ†ÿ@Í ÀÆÆº€‘”/˜~²±3¤ÞÊ`ûç™§š“àѦ3§š#`šA €Ðs#0MøÎÂÆvêƒþ˧ ¿$¸ù_νöéÄËôE þ!©0ìÁ7Ú²¥wIEND®B`‚keepassx-2.0.3/share/icons/database/C25_Folder_Mail.png000066400000000000000000000015131276304217300226210ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÝIDATxÚbd```bpÛú—ìòÖ’·øcÊC@15ÿÇ@â@y' æb(fbFdíd8ñÓÜÿ;½Ý·î%ä2€ðî+TÈx ùÿ€Œ-× †  ¡W†8™GAØ€W_®¿d`Xx‚ø&ÅM€†šüßÿ²l@ xù ¢ùE+¦¶gÏ>38ð€aãŠK Á±ê ¾>Ú œœœ ŒO¿ígXÈe@>Cï¿ ¡ýýÏðôÁ†»3È‹ð1Xši0\<ûŠáÀ‰× } ¶3„–ûÃÌw ˆ ¼þü—áéÍ' oï½bÐS“fH 7d•ad¨/ßÅžâÆðþ5Ð5‡&0<iTÍ Ò" @`^Ã@êó†Û{?0X›©2è¸É3ò㌉áùó_ ~ÿgª—æe°61d¸qá0HìÁa @L òͧÿ ìÏŠ¸îß~ưcó †G¿0¼}û“abç^†¼rW.Nn`ŠÈLwbxuáÃ7`W$¿30œùÀÁ¥%ÃÀ/ÀÍÀúï7Ãñ#þüùÏðéÃW~&pôr 10àb0TÕa8}ý:Ø6àÓ7F†ï|ª ;vŸb(Îra`úÏÌ à«ÊÀÎÎÀ£ÆÀÊÊ4ŒáÒÅÏ ³çd8 ò‡)Hë€Zàd÷å¿´ÿîÿgÏ|üÿùóÿÿß¾C’ô×/ÿÿïÙûüpô‚ÿ™ÿEâÿ3XN%Š @ @ €æ3˜q%##󤬬ùïþþùÿÿõë?ÿ—/»ò×É©üŸÊ} <ÐZ†M@< ˆA)&ˆùžB˜$`f–]ÔԸ罕UÖMnni†6 be b>¤ Æ@ŒXÒ,Ðç :@¬ÄO€øÆ•¥ ‘EûïHGIEND®B`‚keepassx-2.0.3/share/icons/database/C26_FileSave.png000066400000000000000000000016021276304217300221420ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?ÔüÕZŽš’\~1100üŠýûÏÀð4@ÿþazôƒ›åþ‰{¾>Œr éþ/øÿÿç_ßÿƒÀ/ þ ÄŸþüÿÿí„ÿ÷?¼ûúñÑæçÿ•/ƒ¸ (ƒ€AU«'ýÿ7[*ÄÄÐxv–ÉçµÜÙåÕkw…Ѱ¶A Ä!ŪDZ«Á?e>,ùq6àÿ¿¿ÿÿþcd``b;ô?#ÄÑ ê7Pà7ÐÀßLß@^>A.°~€ba€FF Œ@ElÌ@Hžªé8L@®† 8Œ@΀Ԗ`db‚2Clg`‚2ô7Pó¨£ÿ32102C¬ ¸ ˜€ªØ˜A¦þó™ 8ºÿ5ýyÿÿ¼÷h.'T@AÈûú›‘áØf†?ÿÿmF#Pçß¿ô†¿ /! ó_†??þ3|úÃÉÀ_€ÀÎòŸáÅw†3WYþ|ûvóŸ¿@Àð÷/$üZðî3‡3;?0FX Øf ¿cóç7† ˯ ââL _¿12üü F†Û~3äLâ`3æe`ægf€@Aèߟ@g²²üeùÇ0wí_S&s}6†ï@—qr22Óƒ¬0XÁ±Âj€bÅ÷_P4ãøÅëï ÓVq2p±ÿbÐPút67;#ÃÇO¿ÄDy^-û 4€j@A¼4õÐ ÉîÓÇï  Xöú ÃçïŒ ßYÿ3|ýò—ATˆ‘áÕ/F°«™ &ÄŒŒÌl| ßÙ˜˜™þ0´eƒã‹áËwë€Ñt30ДU¹î>adø VHLØ€ Û/6åã°üÿñóÿ}¯ž3ðp³]ŒFh"bFÙW Íï€p|afûÇÈxo參 Ê ÄK’ä€C4>Sg¸Œ%IEND®B`‚keepassx-2.0.3/share/icons/database/C27_NFS_Unmount.png000066400000000000000000000017761276304217300226340ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚb Nbàá៣¢¢' ÀÏÈÂÂøŸ‘‘‰‰ˆXX˜˜™™€˜Èfa|óæ3ã¡Cûž¬];/à÷ï_ˆ…‰‰ELLLÜOKK‡•¨‘‘¢‚YXY™ØØ˜888Þ¾ýÂðîÝ;ù]»’Þ½{•@,ŒŒ,Jüü< Å?~ü`ˆLH63 ùõëÐ & AAQ}  ÄÄÊÊb ,,̲éÿÿÿ@íÿþýƒà¿ÿñ_ þÏðçÏ? €®cb””d—R* NNn-..Æß¿ÿý;„Aþ‡¹b3˜ÀÇÇË #£ 4@ €XÄÅE5LL4À~ýõë'ØfKþýû ÄÿÀlþÆÿþ}gàåegPUUàbaa× EEYU--°ß¡ vòŸ?Á®ùóçœ ráß¿ ú/00ÙÔÕ•YxyùLˆERRTôçÏ ?þB²‰Lƒ(Ù€.dÚÎv''ƒ††:ƒ°°˜&@±ððpq£…áÛ·o@ÿ²€5ÂH‚d(„ÀbÆ P³??Ÿ@±°±±1rqqã÷-8Ê@d ƒŠª*Ã? —àšøý÷7† o˜˜Ù˜™˜YˆéåË·€&òò Ê4„èGn ÓY>}ü Ø¿@W0ýÏt>#Ãß¿^ýxÍðúõ;†¯_¾þ F33‡ òáÀÀcúï'ÐÉ@êÏ_9% !OÏþÛ·ü½uãÜ vV¶?LÌLLl¬ì¬lœ,?øqâä¡^€bdcã™,ÎÅÅÎfd¤«ÄÆÎ.üíûWÖ \%)±þumý_ö^|’o`hüäÇw,'Ož¾ÎÄÌþçïŸ_ßÿýûõ A¾ÿ LLI//-ß./4õõûþ(í 4 òÒêÒþRü +ÐÎÇýnnixòòó ÷÷ôˆ”Òäå¥>~|Ïräȱÿ÷>cúþí?ã·ט¬9ÿ0Ü»ô›a÷‹CÌŒÂ7ÿ?{t—é÷ïßê DÒ Š€b¦i`²”&ß _¾|Ñ»wïž10ÀȰ1¨© 3Ø<úÌðãΆ½@±W@Ì Ä'ø,f žñk0è#IEND®B`‚keepassx-2.0.3/share/icons/database/C28_QuickTime.png000066400000000000000000000016431276304217300223460ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<5IDATxÚb¬ªª:íááaÌÀÀðÐ### Ÿ‰‰‰ñÀß[ZZ ˆaÇŽ?þãÿþýûÿ÷ïßÿþüùÿëׯÿ?þ‹_¾|ù¿¼¼ü!€b*ø2¨€ÂüÏÀÊ$ÿþeøýû/#Ø ßþaøó÷X X=ÈÅÄÕ–ºlÀÕ{_n?ûÃðý÷?NV%1fuY  #Ð\°7@êA. ¸ ›~ÿþðæð;†ûß8ùØ€š™¸þ3ì¿ý™áÊÃw >f¼ ,Ì @CþÁ ` &Xà03ÿcØvê=ÃåÏ< ,ܬ 2<õ™A€‹‘áÈ€ÿW 0¦Á !~6 Ï 7þüdø%(Űòì[Ižo O>WH‚AЉáã»ßÀ€å"Ш×ìs€1Æ`¯ÇÇ ûç%ß¿o ‚rb …E„äD0ð°þcø Ô|÷ùW`$‚-a€byáׯ¿Àðcfð³b¸xç#ËgïØ|†?€1ôèI¦Ÿ ü\À…D€bEÇ¿~üb§:# A†Ÿ?3üø  ­ì, ß¾ýjädÝ` ÅH@±0333²°°0pqqAI•¬@@¼÷ˆÙ¹XØô/`æâädàb`Fc –sçÎ}·°°àøýû7,M@\IÖ0¿2@²+ÿúõ›˜™€Þúü €¹¹¹¥¤¤Ò€ò¬ Ì‡ž•ѳ8H ˆY^¿~ýõýû÷“ Zå·RÿôuIEND®B`‚keepassx-2.0.3/share/icons/database/C29_KGPG_Term.png000066400000000000000000000016011276304217300221650ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?% €X@D6cjhÃ$fQÆÿ>0±p ‹|¹užçù®Mwm6³q¼çãæd`aaÁÀ·nÝb &ò2 ®I RªLŒ;Wü[gè£$VïªÅÈÈdø÷×/†_¿~3üþŠÿþý v@] ©É`Ç4JX‘5¸TÌšKN’ƒSAÊ@µRù ƒ/333³1ÿøùóPk@ àâbàcøÃÀ  ñÙÑö­ P„áƒ}°«K’_š ˆÿÿþ1üÿÿH0òñ2Ú¤µ €À<{ÆpŸ‘A‹èªÿÿ™ØþÿÆð•‰™á1ÃK†Ÿ€Ò@ÈÈÈð¨èÒ½Û Ü`/Ø€›wN¿¾È %*´ø÷}†‡û_0\ùÃËÀýé8ãß ÿXXYÎ?Ï ø[”!HÁl@A xÊ»u%ƒI‚ƒ6'+ÃÁõffx¦ó…áÊÞ} @ß3°3r0üýøŸáéù‡ ±îI LŒàðg &(ñùÌ1†…®9@—}ûÏÊ nÀðç3ƒ*“>ƒÄo5†—÷1¼{ 7^VvvHx@1Áć ›œgø bÿÿóŸáúÝ[ –JÖ 2¼J j"š ¬ü l‚| <œ ÿ™€áMÄOQL bœü@Çdbdfø ´ìÂã[ ÷¾?gøÏÂÈ #¢Èð÷Çv ùya1 €À€Âó0¼Wÿ÷GDK!Í!ŠABAˆñï?† üÿ/8*ÿýûËÀŒ‹ç¯€  ˜?~ýgx L 8™~ýøú{qiÅô/J2ßX˜˜à‰ˆ™Äf&$&†ï?~ü Nb ¸˜ ñß/  ?32Ü9úöÖÏËò¯ÿùÆÀÎÊŠ–`|f°>€‚LC·–Obˆ¸sýÏä㻞$ƒ¤ÙØØX±d"fb‚„?@1Rš ËÂû>IUIEND®B`‚keepassx-2.0.3/share/icons/database/C30_Konsole.png000066400000000000000000000017001276304217300220500ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<RIDATxÚbŒ >ïëë©óÿ?Ãÿÿþ101110221Œf``„‰ #77'ÓÕk7¾µwö‹³£•þ—¯Ÿoß¾ÏÀÁÁÎðh ÀXŒ`H3È.NNsS}^yYéT€bÚôÿðÑӌϞ¿a`ecfø÷÷;Ð °mŒAðßÿ ÿþeøóû/ï_?T•XÙÙXp8Ç8@@DV´Üÿl[‹B,ý$óÜãYkÐZE)ùˆH™Aà f÷Ž1'Dk RŠ:óx®baeaeøøñ#ÃÓgOjkkäååòrsΞ=Ëð¨ùPÐjdÀÅÉ´”ì9€bbaeeøðá=ƒ¯¯/ØÖ;w2ü:ýåÛ· ?AáÒ ²ƒƒ¨`ÍÀøŸ €˜˜YX€ÁÿŸAPPˆá÷ïß ííí Çb••eèêîf a`i <&fp¸€ …2@1±Â4}îܹ oN^µf ƒŠ‘Û÷ïvïÞÍ•Å0qâD...Õ ìì`CÀ@119l@Éׯ^2$ÆÇ3¼~ý𡲍…¼àhýøõ+Ø+ØÙ™Y0ƒ  `(2üúñ‹ÁÔÕÁÍÆlò«—/øÄÄtºgÏfØ{äÃ?Í €ÈÈÆÊÀf30 3 ;+÷¢¢¢=zÄÐ ‡¯@ÿ6ÍšÅð @—€ÁŸ?@º†v @,@?00vùÄI† `ô1mú4Yè&`HƒÏg`ø L `€ø÷¯ßàä Š$€bafaf“dUSexÿî7ƒ¹¦ÐPf ¢?þ2|ùþ•áЀ_À@þõ僊¨0B8‰î/@±°³s3´571ä½a`†,##R€Pr&=`”óòò3ÅoPJe –Ûwï0póò‚Ó;X([B³,c!å/0øLx/_½`øþã+@1ÊÊHÏÚ¨ Tü›š@&@ôüòš5A,P¢c„8‘íí»÷; éÈ*zÖݨIEND®B`‚keepassx-2.0.3/share/icons/database/C31_FilePrint.png000066400000000000000000000017741276304217300223460ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ŽIDATxÚbôðˆf€ß¿3˜™Ì ñrÿüÿÿH12022‚h–-[vo9vìd4Û?˜€bùõë7”ùŸáÇ ||¼ÂFFz< XÀñãgD€j˜þ Äòÿÿ;ffn&&^VVF ¥þýûä3Ä¡˜,ÇÆÆõŸ……ƒáׯ÷@þ7€b‚(úÂÀÆ¢iŽ_0!4ƒäþ-àøýïßï?¬¬¿š¿ñ€b9åïß@ü–áíÛ›Âÿÿÿ’Á´ý/8,þÿÿ-õòå5™Ÿ?_ÕCĈè\N>>¾x99…@##KUi)qùï?~½õè†ß@%@ƒø#ƒ˜¨Q``ȱ¯_¾Ü~ðàᦟÞÍ  ©ºììü ]=†ïß¾0;“áÚÓ¯ lŒ L@›ÿ bbøõØ\‚Œ1QI²\¼|²wîÜtš?o†&@±˜››EZXš3üþù“áí·¯ â² ï9ù~üþÏðáç†Ï¿~ýÆÐf ¿d¿|`xôõ-ƒˆ´4ƒ©¡y@±()) °²00üøü“á˯ '¾ 3\»ÄÄpç=Ãç?ÿþý‡¦ þò5}gÐ``æàcPPVä –÷ï¿1>}úŽ—ýÃÇ? ës2Ü{xFF( ¡>þãbx«Áà ÀËÊðâÆÏ_~ý –wï>ý»zõ!ÐÏÀpgábÈPøÍðMŽáÛ_f 7 Ù.ädýËÀËô 芟 §.|eøþ“¨— €Xÿ~xôèúµS¹Y88ØX€Aǵ€ì—ÀT»äÃw_ÿ(UM†»wÿ –ïß?½”–üñã=ƒ˜¸ƒ½-//0¥ý'¥ÿÀTù˜™™€yåÃáÇÄa ##ÆðíÛ§wÄòàÁݹ7o^êãŠOcÐÒRdê*þ N`þ€ð_ þL¥¬ JJ:àDvçΕï÷îÝZ@ÌŠŠ çŒ³W¯Þe°··Òãããj&" ­ <ŒAÉ›••™aæÌyÛ÷íÛ]þõëûÅ PRãØÎÊÊiýñã‡/_¾|þ Ë  Üüÿ?( ÿ³A€••…™‰‰õÙë×?6spp2j臠¢³èzIEND®B`‚keepassx-2.0.3/share/icons/database/C32_FSView.png000066400000000000000000000016241276304217300216100ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<&IDATxÚbüÿÿ?% €X@Dlú¢’:ÊÜïßÿþÿû/Ã/ ÓÿÁôï¿ÿ~ýÒ@üóÃ?f6†ßŸ>2ÞZŸ×@`Ô- øDõu~ýúÏ🅠¬é/PáÏï~ýüËð‡•áTì÷  Á·ï`¸½Û €À<{úù¨Û/Fa¦/ ß?|f`b }Æ®$ÀÀÈÊÎÀøæ1ÿ‘‘‰•™ITœ¡xþg†_?þý °ÿYXD¤ØþõM`ø5yÃ/†·?2(L˜È ãáÊÀ°!å ÃÛï@ñ20Ô.c`ââêdü€rG„ahŠ÷¿£¸ÕAD*Š5vx)¿08.„B)p*&Y­ÇwWF|Äœ‡üš‚'€ÀüþÇæ~ùó‡á)ˆâ@,ý÷/8¤ÿ?|ÃÀø÷Ó¯ ÿ…þcî/HÐO5à?ß ¢¡Ñ ’ê ÌÌ JÀPµ¶gøÃÆÎÀì^Äð÷×w Í@Y¹þõï_`ÃlÀ_`¨²þd`¸¢þ…á¬ü7p´½ùöžÁGàƒæou†•Jé Ì@ ¿Õ0£"ü÷wÖ?@w221$ ˜áÖçÓ Çÿ®`øøåÕg÷Tää”D,ž<ÿÏÀÃÆÈðìÆoßþ3øÉþaøÏÄv@A €†ÁÏ?ÿ^~úÎðñÓO†×‚ãþ¦_¿Þe(P=Püþ]”‘á5H/@ ñð˜æ¼`/+ÐéLll ¿b>~aøþüÃï{÷~þþÍð è “e˜™58-€x3H/@]òíÍ›«lÀpøÏÂÆðýëO†Ÿ_~0üöKFèº ÿþýcøûãÃÏÄÞ¿cfýÿ_ñ=P lÀëk×7¾=~Äðmï.†×R² ÏŽdxyñü­w÷îÜøöúå^€‚"$>¿úðáæëOŸ ¿ûÆðèç—Ÿ?3¼üùãýûæºc¿9¹ö~zòèÁïÿÿO³ ?aºl;##˜óóׯ{oÞôûúë×£?nùþÿÿ^FÆ›_ß¼~É%-û_áÿ‡w Œ t5#¥Ù ÀÞŒt¼Ô°­ÆIEND®B`‚keepassx-2.0.3/share/icons/database/C34_Configure.png000066400000000000000000000017241276304217300223710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<fIDATxÚbôððd``øËÀÆÆU¦¤¤Q($$(ðáǯ7o^Yóñã»æ'ŒŒŒ ¸@±üÿÿŸáׯ¿ œœljîî¾jjZ ïÞ½çxóæYúÊ• lîܹæÉÊÊú—Ĭ­­SÂÍÍ“ôúõ³‰wïÞ—Uçççg”gPQÑ»páŒÌ¯_ßWƒ\r: fOOÿM‘‘IÖ·n]—ºuëZîƒwTÔÕ5ÔEEE€†ˆ2<~üTüÚµK›€Êßþýû†ÿýûÇðçÏ?€A¾ÿ  ""']]hO—ÙÙÓ½ååâ úúúûûûúúùùùøøøøõõööööˆåÝ»×ßß¾}Ë!--ËšZèõìÙ#/kk[–ÿ ¬¬Ì ¿ÿazÿþ½00¨€6þðè‚ÿ ?~ªab fNNve}cY “Å €¶sc…™áÓ§o êêjloß¾3¿zõÊi Ÿƒè Á¿€°03û…‡ºªªj‰IKKÍ´™hÃbYY1 kGžú]¿~åпŸ‚ ¹„‰‰‰ €˜¥¥¥>=þtÛ±ceîÝ»/tåÊÕ¿GŽeRUUgVR’GЕ ––Ö\À ¼råò^ KžÃl@1èëë2hii1ÈËË1] ***ìÈÇÇøôÅ‹wÿ‘Á»wÿ'$¤½äää´dbbdàà`c f q`”üÌff–w,,¬€j/]ºtþÈíÛ÷ýlmíyxy¹¾ÿ ô3ƒ‹‹÷³g/½Ï;{‚™™ñ1@Á …0€üý÷ï_ë)ÐÏïÝ{deeÇÅÀÀ —Ï ¼ îîn<<ñ¿víò!€ÂjÀŸ?Àb@/>;þì;wîÙÛ»rñññ0mgøüù'C\\4×Í›7ƒˆ‰`ddz‹ùÔ¦MküËÊò_|úôKÜ@&†{÷0<þâ@á5@G×­[”——ñŠ•• _""‚:´? €XˆÇ7o^ç•ðkç‡ï/]¾|1˜Áž”>y’m%ÃGIEND®B`‚keepassx-2.0.3/share/icons/database/C35_KRFB.png000066400000000000000000000022551276304217300211750ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<?IDATxÚbTSScø÷ﳡ““ë 3S#Qv6f6ff&Vf6&FFf&&F&& Ÿƒ›Ÿ©©¥qÏþ}[Ý€ €X¾}ûÆð÷ï_ ¬2žž~ªr²JŒíþpr3üffdøƒ¿ÿ1ü~ó•!&A]UÁ`ÿ>. þoÄÂÌÌ ÔÌÂðû÷ßS·nßüÊÃ)ƳjÏi! n~ :VV Úÿ _?3hÜýà&+ÏÇÀÀ¨ÆÂÊv €XÔ’Œ ß¿}ûøÑÓg¾|jªz ·¹äù88~ÿšÁÈðìãG+%q6N.­ÿ ÿ/ËÃ{×@^aøúõËaÁ›<|\j² ·o|b`åd``ûÍÀðhû ÿÍ'†~3ˆJ3 ë=yúh@11 i3°±€œ×_œç¿~Ï`n$ÆÀðóÃçï ŒÞ1°¼ËÀøÈæaxü—ƒáÇ?Y)I-ÅÄrO¦éï5EQ†sç¿~óÁ_5Yf¾Ï \< ÿy˜¸¹™˜þ2ü²¾|gàäáa—WR>~ú$ @±0üýÉ4œGŒïï¤Ð,WN)>æÏŸþ1hjñ0(Ëýb0ÐàgàgøÆ ÎËÆ ÆÇÇÀÅÄÍÀüë'Ãû/ßyàA¾ÿþOF Ń^%#,ì÷ñ÷ü•éäìèÈÑÒÐöÅèèõíîîïìììêÕÚÝãëëç´ôˆER–oN “Œ²¢(;Ãû¯¿n?ýÌð Ú~ýbØvéÃýýÇÿŸØÐ×*"!×ÅÍÅ-üåëç—ŒŒŒÀÈFý€A¾ÿ2u½ô52# L8ÓÇÈÔÔØüÿÿÓÛæâíùG4+ ûÔõ '.õÜÚÖõÌÇÀ®ÖÕÒsóôðòA¾ÿ-M‚À¹¿ò !Õáï··Éý 5@@(RF?4<8 #. 3102bÍÍÉˈ…•…÷»‚ª7Ã7V^)-3¥g߬Í~~ýÉÀÃüžáï·— ?ßs0°ýÆ'#ƒ‚­:ƒ¤‡øÂE³+A¾ÿH®btyQ!åêþýþû!ÞØëíÓI;#êêìÝÝÞÿÈÉÈö¸¸¶ÓÙÙÕˆˆ‘MÌBÜ1 âPJQº#0щSð‹G/&7Ô}`x{û±„¤$ÿƒ=~òèÖ«W¯.þû÷ë0.²@1Ó+ý[\NÏz²”®£7ã·¿oßrëéÝSU@Éý øE(å13³³ÿoFF&†ÿÀÀ0JtZ[“;IEND®B`‚keepassx-2.0.3/share/icons/database/C36_Ark.png000066400000000000000000000020661276304217300211670ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ÈIDATxÚbüÿÿ?Cxx8 °²²Zmß¿ÿ‹)S¦8qqñ=MHœÀpãúEqqA6†ëWŽ3\¾t˜áË— 8šW€a¢«¢¢„[ ­%ƒž³´××›~ðèi¶•I 3»#¢¹ûÑ{»Æ8ÁœàÌ·'й«&–Ö?| ˆàdcføñ“ñ¯PÞ¢E‹^½|Æ```¨ àµHXDPÈÒÎR”_PH”ÿó§¯×/]<’tü5€byaiž"ÃÙï& ï°„ ‰Ë¬üùã+#ƒŠ– ƒª† ã° ?¼ÿÁðîÝO†ï_öîê~³kG¯-@] Áù™!†ïÃö;‚,Ÿ¹õ¸¸ù¸ø¥¸8¹öoœûÿúgß_¼yýéóÇ×ÿ|óßÁ©NÝÄ$GäØÑE¥6àÏßÿáŒ2qAŠw™þ3>}öƒáÏ·+ oÏ3˜‰=fÿóâÿõ÷o¿ö¦áѾG_?½;÷[‘•™™M €ÀˆªhN6póedffPýý‡áÛû¿ ¿Þ}``—càå–fdàøÏÍð÷±)cÎò‰«.)D¼÷ ð °̼’Œ|Ì O/3°üþÌÀÇÂÆÀ (ÅÀÀôœá÷[ ²¿ ¼, _þ2 üÿÏÄ 8 °ÙŸո>20|ºÉÀðù)0A ajfáb`àe``çdøþ›híŸß üÏÀ„ 6€‘S–…S‡AðÐV FV! a@M|@¸¶ iv†¿Yþ031FX3È€ðÿ? Ðýr "@·qð20¼åt6Ïd3q3üÿò•áçÏ¿ÿxxx~ýúËø˜l@SçŒuæG®¸˜Zšòɳˆkýá÷Ï— ¯îýe¸sãÃås?þñÆÉ ³ómdg—eá`û šßŒNHvv"_?¿*`úûÙ<Øß×YRœ™‘_€‘áß-†·ï%^¾åeøòƒƒè’¿ÿ€Îe8}~Ê¿í»újì?¿ ÍêjW®ÜøwöüÑ¿ ?„Xž{ñÿäÉ£™™Ø^±°þca:šáÿ&ÆÿÌ_¾¾ûùøéµ-ÿþë °wî\çæçfxôð.Óö­ËZX˜Û>{ö‚ëÞ½k¾@é+ x@1€¼Ôl¬¡a¸SDDb50\ÄùùùÅ€rz@ÌÄ@H`2@þÉIEND®B`‚keepassx-2.0.3/share/icons/database/C37_KPercentage.png000066400000000000000000000021231276304217300226350ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<åIDATxÚbüÿÿ?% €Á¤ÚL3i-¹>}aS yÿÏ_xqöÅ¥#• »Ne2-ÌPP—NþÿïÃëצÿ½R´(þˆÿPó -óìÏöœ{ñÿñc ~ôâÿŽS/þë'xÅÀomÎ §äRqîóù/ÿï>÷꿤ïºK@ê@̲ €X¸¤¥ë Bä%$ÿ3œyÄÀÀ t“¹Ca¤†hÒq÷ &韉®’.6€JË_€ø!×;GDÌ¢lcÌ™ÿùϰðØßß÷ïÜ}ÿ‘áïï "‚¼¢bÃôy¿xUõªt–3œû$Ìp÷Ðåã/ -ž¾úÌ(( â 2 € .`ü¯ÏÇ/Èyð›8ƒ¾&÷†ÏO1è3œa0}Ê`lÂÁð÷å%†»GD¾ K3üa|à &&¥úøñ]€"/7§Ñ?qÆϾ3¼¾þ€aï¡7 o>`p‘9ÁÀ()ÁÀÄÎÍÀøŠ™á‹ÃwFFA>eeU VQ€»@BZÚÄÁAŸAIýó†O?þ2¨&ýcPcgxwóÃßWOíùÍÀªaÇÀÉþƒ‹•‘ASS›™™U €ÀÈÉÉj+Ë‹0(Ëÿeøÿ„30Zýgxû¶Žáí½« _ß¾a`v”eP‘—bø÷û'ƒžž377-@ ùøñ=Ã×o?€ÌÌL þücàQÒaàQef`øû ˆ~10±°1p°s2h¨«1 kØnnæÿÿÿ1|ü𨑅Äþòå Ð`1n6†.bÆ:Ðæ?ÿ0ü`øÎÀÉÅÁÀÎÆÎ €#2F„a`Š8tðÿ¿srup”Úhqº%û‚Þ‡«–¤:af ¼ÿ)1.AF-Áõ…v*ldìµå FP^pvöïæÿû÷ Ë7`ºö×_W%v^–µk¾ãbc~ÃÄÌÂòïï_vNöûî~;~t#@ “Ó`øðá=ƒ€W¨„´"ß¿×÷~‡ZÕ3ppóÔö¯<¦b²‚—I`ÖÌ›ÿbºóýç§?þüü@`´µÍTT¤DE…]\Ï -¸‰MŽŸááII†Çª± ÿ¿|–áÓ§/ LLŒ 0ÀÄÄÄ @W02°q22˜Jý``b’JA¾ÿ<ÿG<% *ÐÑÙ»»Ç"#**%óïþëþñîð Jµãò3A¾ÿ ûõòÞÝà+/-55-""ÒÖÞ³·ÀÚØ !ÿ øùøäáÝúü ˆå?#;Ã?†¿¿ÿ0üýóìdaaG#u†“Ûö0Ü–•c0±2b†+Ã÷oß~þü Ôó—á?@±üýúë³  ¿ š¦77P˜,€ÑõçèQs#seexXüÆ;''ƒŠª.÷…Ï ß?ü ¦oo~œøþ›™áÈ© ÷Üa™ð÷ü9†ÿ’’ Hš!€‘áñÃ{ GO_cøö—áÛËoˆéóó‹žÞûõïúk&†ïß^¹qáÐ%̺ºpmÿþý%:0ýóû†ë/ž=úÅðáÑ×ùÄÄÀÎ}àÔî—+_±h2¼{ùáö­{ ÷yxÀ¾}ûÁðõÛ7 £îß¿Çpûú†×ŸØÞÕÛöróV®­A¾ÿjûûóþÅÛÞÿ8- úüóò ×××ååæ ÝÚßâêøÔó •—ìÌîÞð_ 눙/”B¾|{ϰýÄ&YVYi!†/Ÿ>1üúôÒ?6†×Þü“bØyMšaêÌ›ßÞû”ÌÀòç!ÐS ÄÈ {èKf`ºåÒœl ÿ8ü$”¹â•XL¤D™9€®gxñúïÏ÷ÿ\xzçûB†Ÿ¾ã ÿÿ0D;|•fÖŒ&IEND®B`‚keepassx-2.0.3/share/icons/database/C40_Mail_Find.png000066400000000000000000000021651276304217300222670ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚb ZÀðõë_†ÿÿþþýÅ LL¬ ÿþ11|ûú[…“‹Ý[WG)ëÑ£;ŸwìhñûûïË3FFV 4ðÿ?Ä_¿~krpr‡ëéKE¹¹«¨ªªÉ2œ:¯ÈpöüʰÏN``à« d¿ÿeøóû¿ 7/o¼žž’‡•¼Š¹™;+Ãùk,$]Bs—/>¼êÿÿïÏ€îd ÓþüÃùÿ?£??_ª¶ŽB Š€¢<#ã†Ïß0œ¿ùƒ_–AFT‚!(ØKi×öe oßœmc`àd F7±uMS36u5†w¯¯1ܺ÷ŠáÛ?~ «˜^¿|ÃÀúð2ƒ —ƒƒ­ƒ‹kTÄÊåçç10üyA¾ÿ77WÁ9<843#! ñîÛÖàð1" !åñÖ̾/+&¶µÄæúúßÈA¾ÿ00XH+1##ñöû×Õäííèú6 ýþÿßâîúêÔGG;ÛÛÔÔĸˆYBÂý•²’Lˆ­“ Ã_f†O|² _~ÿgøö‡‘á3¿þ df6V†.2893üø##¶w÷áûÄôç÷¯ÃÇ\ßöõÍ/.6Vv& F íŒ ¿€i‚•‘A’‡AY’áëw†®I—–¯Üq†…ùçy€baaeúöðá«ùçN?òpqáºÿôƒ(Ç/aN6†o?Añ ´ÙB@C¯?{ðmÇž›ß¯ŸløÆÅ»÷Ýßϯˆéß?`ŠcØvðÀÝ¿ÿ°1r31|xp…A˜AFŠE€æüüÅpùìI™3ûÍz»dEÌÛí¯-þ~eA¾ÿ##MÿÿîîôúSEF'àÙßèæé þüèãã»±¬ c3ÖÐö ïìÏ5úíA¾ÿ%%NþÿýÝïîù: #··Ô庴ª½ðéÖóÖÐÎú½»¶ÐÅ«ª‘CüíCw+)úGåÁìíîöû̈…ƒ’¦98½|ùª²°¨éÄÓg××hkñ_yúøÛ‡ß8>ýùó…íÏß?Œ+×?züuË<Ùjcƒ>Ó Ç*Îý x^`dd¹äìŸ??ÏS+0ÊXXÙ~01ÿúÁ ”ûËÎÂðõãúCë~3ëþ9?[¯ÙX@¯T« €0r#333Ð &dƒárŒÀìýÿïšÛ~rý`¹Øûþ÷y€¿S{øYÛÃIEND®B`‚keepassx-2.0.3/share/icons/database/C41_VectorGfx.png000066400000000000000000000015531276304217300223550ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<ýIDATxÚb¬ªª:íááaÌÀÀðà€‘ˆA¢ È€‰‰‰ñÀß[ZZ ˆaÇŽ?þc~üøÿëóçÿÿ€ì¿ÿþÿóçÏÿ_¿~ýÿùó'XþòåËÿåååË? ™ TÀfmÙreËV>>%{{†ß?~€å`˜‡‡¬äb€bêK€ËÄÌÌðôÜ9^ii1†¿¿3ü‡ªAöX=ÜiÌìì Ïgø}äƒ4 ïӧþ00 1üûù¦ î €˜`ÄÔüêΆ@¤Îã¼}›mÙ2†Ÿ'O2üãà€&Tó$ €˜þ‚tÿúÅðþèQ†¯3Hx{3ü…þ—/ ¬@ƒ~_¿Îð ädAA†ÿ¼¼ @/Â4ƒ@±€ˆ¿ïÞ1|*ä·µe`WWgø*&ÆÀ³}; P\`æL†÷À@üÿÏÍÍÀllÌÀ \˜×ˆåÐF ¡  ..†ïŸ>1ü¿z•ñÂ`ò5s¶µ1€\ ¯€ê¾Í˜ÁÀ #+ˆuŒ¬¬ ÿôÏïßþg,0§]Àõö-ÃׇþA  ¦ÿ°ÀE×ß¿ ÿ~ü 45ý0 þYZ2¼up``•”d`Æ Øþ dÔO}}†ß0ll ŠŠ ß ê¶•ÃWWn a  ,DÿiF fJ0…‡3ܾvAøÞ=†¿rr ŸUU¾00ëè0ŠŠ2ü†Ë_kúˆ…™™™‘è.`‚½4D\E…áë¼y ßþy… èwA`Z`jú ÔÌdsrr‚2@±œ;wî»……Ço`€L…%kP’…4ÈÀŸïß3|ÚÂ?阙>þü €¹¹¹¥¤¤Ò€úX’ÿFH6gyýúõ×÷ïßO0©-¥|Ó>“IEND®B`‚keepassx-2.0.3/share/icons/database/C42_KCMMemory.png000066400000000000000000000016211276304217300222460ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<#IDATxÚbdpPb`øÍÊÀð‡™áß0`þËÀÀò“ H3ýa`dþ%Ä­Írê׃/ ¿v~³b`g|ÅÀ Tû €˜ðyÿþ‰°Ê1æÐ“Q–öPSfµc=Ìð÷¿<Ã?ˆ€bfP*ÙÎÑLÿ!®øÿ—‹IþÏqy}]-é7 J𠼿ÂÂï?> ús÷ÏZ†¿ Ÿ»ŒÿYþˆ3Ê~?®lh iöAŸAèÂg†/o>2üäex¦öŸù{ðßÛ?w¦ ÌøIâçu#Mû¿æ ,÷ß3üùñ•AŒ‹ƒáÃ3w¾÷ Â’ÿøžú&@¨aðŸˆÿó1ˆ;Ŧ$¬iÍ` ö èš¿¿ÄTøŽ+ýfyÄùõ.Ãý9/ßýõ5@¡º€åƒð·cŠêêÂE}¼Ï ý—‡AR†‡a—À7c îlOJ§ü÷ðâ¿0 k· <´ÿÿãcøtHVY]Ã…Ë‚Aèç_†õ_O1ìà¹ÅÀÏ.Ï`'}•Ášù9C~ÇÿwÏ.ÿêØ Ò @@kA~aøz\EA[Ó…ÛœóÝg†?_>3¸ñ¨0<ûùéç!ÖïWJ»þ½{vño4Pßn˜¯è‚b së'Ï+†?ÀtòÕ®} v’×ò&þyÿäÚßH`ï•ÚˆA€“M’Ñ–û!S”Áÿ„ƒÿ+–±ü—Òe} ]7 €A°30ð³*2Ú fØzì ÃÏXþ0(™˜1°ñ1þ¿¶ ¨ôÏÇû½ÄÂú ò×gøóì<à _ %i~†ÿ1ÈpfPäùÌðû/Ë¿_ Nœc`ócdã“ðjí °’Ü´åÅŽUbÐV`øóíÃýäåääd¤’¼Ø¸ù.=eg8ð•‘áÉïŸ ß|cé °Œÿÿ2¸i20Èñj1}ýŸáË'¶ÿ¿>`cøþ—áÕGQ†×wX®½b`xÎûáí‹' ÿýé °ÿ Ò†², Ÿ31Ü{ÏÆðéÝg†û0\yþ‘Kˆá?3 'ï{–·?€êzÁ` ° G°ùÌ ÀÐfe`àfüÂðíÿG!^V½ß^}ÿÍpÿÃÿÿ€þgd€€‚”`b‰32üýýáþÓ÷ Ù¾|ýÎÀÏø‹›(÷Ÿl³ ç†7Lÿ~ýû€ €˜ÀÖƒL °øÏðó/#ÃW>†¿XÞú¤YÙùùy¸8ÙÙÿMûÄØÿÿýedº‚™Âo¾0œ¹ý†AA€h*3Û¿^¿~ÍÀÂÊôÈ5 pì Écxðö;ç/¿^¼Æûïÿ ì,l ¿¾ÿbøúé;Ðe¬@ÿó2±0°±°€¬ €ÀÄý'ÿ<:ù÷&†Ÿÿ™ž}egx÷éë/L /¿°0|ÿú“—¨| ?˜Ä€†£í×—ß ½6`͔څ\ùÏÉÉÁÀ L0oÿ 3œ}%Èpæ¥ób L|Ê ¬ Ï¿²2ܽsá÷Ñþ ߬é p^`ddcbä×/5µwÌ“3p’¸úUŠ pL, Œ@?3üúÌðíõ}†—7üþrcó}†wç[€¢‹Azb« ÷_âŒ,ÿÜ8ø…l€¹YЉóßß?ÿýüüýß×·~½9 ½=@ÍÀÔ `*˜‡Lwt·IEND®B`‚keepassx-2.0.3/share/icons/database/C44_KNotes.png000066400000000000000000000016721276304217300216560ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<LIDATxÚbüÿÿ?% A¾ÿr›C a"©äçÞö6 ql=ÔüìæöõóõÝÚÿôôêò?!ÿÖýòèoÚÿA¾ÿG _6 k #ݰ8?÷ óàøñäöçê÷åìç êõêþ üàûíâðìüòÿãÿþÒA¾ÿ óôØ×ü0K€ ø åçöáýõáúðåûïêþðñþØãû Šä•ˆåÈë·ÏÃ9Øe~\»Îðä÷o&C-ö?˜>}ÈÄ’ \‚ Ì\š œ¢ß8¾210|gú¯°–åÏÄǦÄò^éçΊ:ÉÏn00Ø›1hæ§0°0=Ìðˆ1|âïPü Š?1|}ö–áãG†×Ä’b+ÊÅÓ4…AœI–›õ;ÃG°†_hô ¡?00°¼cøüò#ço oˆå+“ Ð&^Ö?@Eo¡~A5ý@Óüçó[†·/¿ÿÿüƒá@±0ssðýgùËÀÈðªø'’Í0Û¡š5ÿb†w ïžÿø÷õ?ÃC€bùÏÎÄÇÈüªñ’­0ÿÚ Ô Œ?†?@KþéßÞ?ýõ¨â9@±ügcâÊ i†ÜWˆ&æß@›ÿÙŒ@úËg†7¯~ÿzô%@±0°cìçÿHôÿ¯ 0Í ¿²9Þ‚•¿øÌrò;€ba`dF:ý—â’ß—üÆÆo@çÿÿÀðãÝ{–ËÏX~?fxq™•áìíßÏA¡@,ü"߀)î.([@Ãd0± `F'þû–åÓ_&†ó«~1äoüqóð†ÏÍý ¨ù“îŸ?+l‚ƒyÙãâÞ½ÈÀ#/Ï $&¦@ÌêÿÿßÿùჇò“'lŒ@732°1H=ÎöëâÅ ¡_¿"Üܸxƒ42|øÀðÿÔ)†3K–ü¼tèP!@1Û°³_~ôéÓ}¦×¯½ä^½beTÈb`À üô)“Œ¸8‹P3#Tó¿3g.lÜøçÄÑ£Eÿÿü™@Ìv<< ÿÿ¾òäÇ^¼ð’{öŒ…YDx \úú L @|û–áïÉ“ g¶oÿsêÂ…‚ÿNeº €˜m~g†6ß?—_üüyõçë×A’oß2³ abb`üó‡áÿÇ ßšÏîßÿ÷ü;Iÿþý›Ã Š! ÄÂÿõ+P€áPñ6¶ÿ¸¸þ}:óË‹ `ïÁ_ Pÿeaù´ìP „Aé €˜]YYþ‚láàð1–•]cõñ#÷W s?¾~Íðöþ}†@üèw&669fAÁ€×¯^=`€¦€b&†ÿìì^jjKí>}âý´ù?HˆùNjdæà`øtáO +ôää8¬­g323G‚Ô #;»Ÿ‰¦æ»·oy¿?zÄð›x€.{ÄÊúï#ã?%ff–?@çþâ_Àt «¢Â ôî웲‹†–Ö÷ïßyÞ¾Íð j3ÃNΟ¿ÏÆÐG–¿«pppÿºèPþ÷³g &&&ÜÀp› @L?¿~}ôèL&  Øà`x($ôçÜ·oÅÿý[tæú«ïß§>úúõ;'0Æ@Q ¿~1|ÿþ@1›}út𹂘˜/33Ãe~þ?g^½*ìTf Åÿ^yýéÓV..O99ÖÿÀ(>~ôè'çÏdz'ÛëoÞþÂÉiù†‹KøòãÇù€)Œ ”€NfE0 A¡þéýû˜˜<=xðàáõëñÌŒŒ' -½¤H^øIEND®B`‚keepassx-2.0.3/share/icons/database/C46_Help.png000066400000000000000000000022431276304217300213400ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<5IDATxÚbdÐÌÿ¾ÿâd`ftäÌ‘‘·äåþû÷?û7_¾?¿÷ìò篦2üù·•‘‰ùÓÿ¿ˆ¬È`øù[ŽS¯ßÕË(ÈÙ^‹‡›áó× ß00üþÇÄúâÕWë gîX_>xrï×§/r€šn€´3ƒ¨Èf9Yñµ¹ùžÎ!>* ß¾üexùðƒ P÷÷ ·î¾b`dae”—fà•QVzûìµ÷7o÷103¿A¾ÿG  loIH>4Ýáö÷ìé[>øúú* 8'ÂÎéëî÷ %íàÞ-üïò°A¾ÿ6AF0\:1îïåçô3$ ¡¾ñНï [Cìðöîêê1<<RA¾ÿ j+1%ÿüòõüÁÕîËÚô êðúÕàõ3& ëëñûûýêkˆETZÔîüK^†Ÿ2hŠþ†'#ÃËïÜ ¯Ÿþdxÿå7'ÓwU1†w_þ0|øô¨, ?Êù•CDH €Xxù¸ù^~øÏpäì† 69!FdgùÍàgÌÂài,Å !ÄÎ0où#†—þþùÎðæý;®< ,œ\lA¾ÿÿýÿýø÷ú¢Â÷1 ,cHòöý„§ã—²íóöùõ÷òþüøý ÿýˆåÛÇÏ_øþÿæf`úÇðïß/†³w€ñ탈ÃçïlŠ®2Üyø•‘õ/PÃO`‚û ÆL@¯þùôå@1½úê8Ë¯Ï ÜL ÷10°^jZpð#ÃG_˜3ü´áÏo`Ä“PٯׯïÓ—wŸ¦}zpAZ” ˜ä€Š~maùÇào)Èà®ÏÅæ,LL¿!†ÿÊÿùÉÀÎÍËð÷Í'†ßÞÏ ¦ÿÿ½âü:þ_ÄĸŠ2°þÿÇ`­Ãà§ÀÉ`¦ÁÇÀJ÷@›~å8¹Ø¹¾ß¸yŽá߯UA¾ÿ EûûòôÌõéìF$ õñòÎÚóÑßø ³ÝôöóøÎÑæüìèZ݈™Ý èG¦÷?ß}ÚñéÑ3%~n5> !†ÿ3œ¸òáÏFN FnÆ·Àd~þâÉßožF5Ÿ†@12ˆ¶A2$Ãÿï?¹ÞçÈgÖfÆ3(š}úúû׫7÷þ~x3óÿ¿¿Ëþ¿cªa€KÌ¢Zt›ŽIEND®B`‚keepassx-2.0.3/share/icons/database/C47_KPackage.png000066400000000000000000000017271276304217300221250ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<iIDATxÚbüÿÿ?Ã_géò?&ª,bþUÛ'qü¿ëï©P|ìÒ»íÿ­;õü‚´¾$ƒP-+Ã] žŽƒ¯~þùÍ@, @ðÐL­D©=L„á÷[†žk·Š¹Ä˜ÿ dz»Üù¡ñäô‹toIóo^}Yûýë×eL\¬/X` €A.ˆÒªÒíÚøêùmÆW·ï3È« 0ð))2(É30 30üdeøp÷ËÿwWž|~ãÁ©ÝçLl?ôqÈ6@Y@YÕÒÄû‚Ç3..–‹ êÜؘÿ1ÉI2Èé¨2Hë(2pÉ‹10pr00|âcXXûgæÔåAßþ½Û@`/ð){3¼`Pû/*ŸÀðòÍ#†Ï_.1þ;ÃÀòò2é“g„®2(h0pªD2Ü¿«Ï°âÐæ¿ j@­ÛlÀïß8™2Æ'*0üü­Äpê¨!Ó;> ?ßÜe`ý~šáÅ‹ Ž»1ˆ¾ `ض³ãóù“sþ®é ° ÿþÿgbádQàd06ácxñL‚áò9%†›g;~c`R”e`büÅðaó¹Ç@Í   @`|ýû Y`TÉȳƒ±‘ Ãêù_8ؘ~ÝÍÌÌÎ QQ @L`ýLL L@ÌÈ€ˆààÊ1þaøýûXÃ?EÄ„`22üû÷ÃEŒ L X €{‰‘¬èû÷ ?~ÿgøó Ècd{å×ï_×1B|ÊÀøÅ€ÀÅÉÁÊÁÆÅtöÐO†wo~0ˆI30°qþëøòîâb %@ÍŒh °OžŸxôíËã ÍÎê3*)Š3Ȫ03ˆ)ü†Ï/ ë8þ}ÇÊ +d@`~þüüåλƒŽ7î1ˆS’¶5T—±çQWÖa’æe`gáb`åz•R¬È8)KJ0|þüèßÏÀÐþÎÀÂÌ®%À''-bª§ oddÇü™õÃÙóëïÝ?k×/¯ÃÀá Ô @`BBBŸ›[œìWNNAn.QPð±±ñFÊHlà—YÔ Äðê0‹:vzRãAIEND®B`‚keepassx-2.0.3/share/icons/database/C48_Folder.png000066400000000000000000000010561276304217300216660ustar00rootroot00000000000000‰PNG  IHDRóÿa pHYs  šœgAMA±Ž|ûQ“ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅF¤IDATxÚbd```bpÛú—ìòÖ’·øcÊC@15ÿÇ@â@y' æb(fbFdíd8ñÓÜÿ;½Ý·î%ä2€ðî+TÈx ùÿ€Œ-× †  ¡W†8™GAØ€W_®¿d`èš²(à¶u?Ì€‡AÇnˆŸIÐ02 ° ^~†¼ÿ.„þ ôÝ þ û_~é@ú/PlÓ¬g ®‰R0·¸Ä PÞ}‡1Hó￾ÿ²ÿ@ø_30|ø÷Œ0@ xýjÀWHÐþÙ2jûO( âÿðî"LlÀ¨ Þ~ƒÄÈ©¿¡®ø µù÷_ÿóODx$¡&‚b<`CÀaÕü÷?D3H dÀ$lÀ§oH.øI¡  à¿(ü P˜i£ä*©`—÷* ¹ €@°±!;±‘ÚAñpˆ÷,c€hv¨aÄPîü *€b%*J@€ ™Ó.ñ^IEND®B`‚keepassx-2.0.3/share/icons/database/C49_Folder_Blue_Open.png000066400000000000000000000011271276304217300236160ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<éIDATxÚbd```bpÛú—ìòÖ’·ø7@ @Íÿ±8PÞ ˆ¹€˜ˆ™˜];@$Î=Ç4÷ÿN/F÷­{ ¹ €À|üáüÚÉÌ¡÷܃‚ €^â džâï {lÀ«/ ?þ00p°@Î=ÎÀ°{í6\^†¸êÕñ"† -3¬åÅ'„üÅgÍo6x1sâ:Fw†> u €À¼ü‚8yB¼ô(0n~ÿƒÒ@¼yö3·)dsôâ…ÏÞÍ@#÷mcXÐáÅðþ;T#Ðk?ô þþ‹áÍW†¦žm ÝÔò €À¼ºàêcýî+Âö_ 4È€Ï?rßà¶?âC6à5Ðß20¼¿°¡®Ä‹á5Ѐ M@ühÀ¿ÿö_ ž2 nûqãlÀ5 Í.BBäD¹âÔvýý7Ší‡ø@ i7ñb6ºâÂF˜í |íë˜í tÀ Ò @ ¤©ŒÛ« Ä‚]Þý@²ˆŸ@ `bC ¥0!ÚAÁ}ˆ‚œ XæÑìPÃðP®ýÓ ÄÊx”€¤­áThb€CIEND®B`‚keepassx-2.0.3/share/icons/database/C50_Folder_Tar.png000066400000000000000000000015411276304217300224640ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<óIDATxÚbd```bpÛú—ìòÖ’·øcÊC@15ÿÇ@â@y' æb(fbFdíd8ñÓÜÿ;½Ý·î%ä2€ðî+TÈx ùÿ€Œ-× †  ¡W†8™GAØ€W_®¿d`XxÅ PêÄÕ “´¸ ÐP“ÿû_¶1‚  °/?A4¿hªzÿí­ ¯Î/b`çdb`bafxùä§¢ƒ’E87Püé·ý ¹,bÀgˆe{—Ô0ýºÄ ¥ Ç llÎðõà!ì â ¿>=;Ïpcé*†Ã—¸¾ù̪æiq ˆ>Cœ¬Ê~—AÎÚ•è’ï Ìÿ}ÉÎÀÄ+ÊÀ¥aÄ ¡¬Ê !´—¡àè.`@yƒ4 Ø€×_ ~ýÏÂÊÀð¨éýcF&F.> aÜÀPúw` ±üj|ÍðèÎU6Wp˜Ø€7 ýþSœAH™á0Z^}|ÎÀð翦^a†¯~üü4øØÛ‰Æo0øË!ÊÀ ¨´ hÀ`âûñ‘h@§00°]ÂËTó“á×D\Ø€O@XY@‘ÊÏÀÀ¯ÀÀð -¶°½c`àz‹hÐ~†\Ÿ~#ö€b¥¬w ÀÄ!aÇðûHFŒAT’Ð>mçZÇñâ&>†?Lî?ºp§ø: ¢ JÛî.ÛÂp±ýÁßg·äþ¼¿/ÀË/ÈÄ#*ÁÀr¾ àóžß}ÅplÃÁÿ+çîývâèÎ@}K€x@Á2ˆæbP2–ã tµÔ2só´eæúÉt`ûñÏûŽÞ}tòÞ‡ë?þü»T³ d;0Ñý ° Ô6…œ^Aá"Ä èB Æ(Ë]âû@ü¨ ml ª._œiIEND®B`‚keepassx-2.0.3/share/icons/database/C51_Decrypted.png000066400000000000000000000017141276304217300223710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<^IDATxÚbüÿÿ?ƒ¿ üøñ‘››=ÒÀ@¯P^^I………ñáÃ;÷Ž;4õíÛ—s™™™ÿÁÔ9r„ €˜È0QQ‘ºÐ¥¦¦6&_¾|çýôé3·½½»~^^É,iiÙÞ¿ÿ"ka °Ì,¬`ÌÊÂaiiYóÿ?âÅó·>¼×pïÞº}}í+ØX¹¢£“s988£þÿòl@ øÏÌÁÀÀÄÂÀÆÁ%våúíƒ[wl™ùöÝ»”ßÿÙ.~þõçÚ÷R–¯XpLIQY]];éÏŸ? þ3ƒ  aÉzŠá#»4ÃÕoJ“><}5éï¿? bߤ9®2|çøÁp›‰ýëµûOö¿ýøÅJZNUîÈ™³²N¢ƒôرß÷Dxß «0ÝþóŸÌLÜ,¿Ù™þ10±±2¨q}ùÄü„ñõó ¿qûJ¿ÑÒäþú¨õ=@ ’—Ý®j ¤óïÏïß`ÿøÏÈÄÀÂòá?†¿?þS6aaca^Æ ¥ú]’EIyãýë¯n%õl€¢Ž¬±fH÷oì Þõ|ò–áýý› ÿþ|a–æe`ø Túã!#ò °3±Jê‚ôØ€ÿ¿¾ÿeøôœ™áÇ7†?ïØ?1\Ørˆ!¡ñÃ¯ß ³Jxll¤€0 ÿÃÀðëÃÿŸ¢àø ˆÿ~20ü| ”øÁÀð÷=0FÞ3¼¸û–áÃ3 y@ùç·¾30˜<ºh(0±1üÿÃŽ€Àð˜¸þ¼b ¿0a°±ä`púÈðè#`œÿ†ÈÎÿ!®øÿ¬ €Xà©ñ+Ä€’Ÿ>\ü ú4ûÓMQ#N Á p³ÙD @/€Ù@¿ÿЦ¯_„åòš¸±ÁÈÀ't:;#Â&HB ˆ €QÅÀŒc–ïÓX˜8…8Ù!Ò@o0üå!h;Ü6€à ’ÀPf¥kˆBFTðÆøv'Ø 6àáW8·‰(üùÍõ¡øÏJR.½®ÌÀ`ç6IEND®B`‚keepassx-2.0.3/share/icons/database/C52_Encrypted.png000066400000000000000000000015761276304217300224120ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚb¬ªª:íááaÌÀÀðÐ### Ÿ‰‰‰ñÀß[ZZ ˆaÇŽ?þÿþýÿçÏŸÿ¿~ýúÿóçO°ØåË—ÿËËË –@2¨€ÄÙ²ôÕ«× >|`àááafW±A. ¨~¸f O.\¸Äðúõ[NNN†‡3ðññ0èêêÏÈRòH=È%Ä„l ++í;ž¿úÀÀÅ#ÈðùÛ/>A†w¿3\¿õ€•“áÐVk 0 ¼~Îp÷↿ Ì ï?=aÐPUdxöò ã ®=aácàâk„@, Ó@àÇ·o oÎÏeÐx zNvžÿÙ3üøùšáç7†w§O3ü5-gàäâa€Å@±À¿¾eà`úÄ «­ÅÀÀòŸáÞý_ kŽÿfðÖâbP¿ÅÀðûÃÍg, ß¿~†#ÌëDFf†ÿÿ~1üÿøˆ‘ƒ‰áíÓo ýb0ã¾Î (}›á;ÐÉ”þƒÔ-ýÿ »àˆúôÎïO`¾Ðßû Æ¢¬ ‚L8±ÃÄ߀ЀA–þû ± €X@&Àß¿ Ey.]ÃÊ ¨õ‚¡@ý7+ 3Ð  ŠŸ ŒŸ˜þüþ D°+þ3Ð @ÈÀÿþã7Û÷˜Xù€i‚…™èç@ƒ¿2m``øò‰’æá@`/üýŒ8F&Éd†Ï­qÊ òT!8qýûý‹QLšA€—“á/0@A±’ fffF 399ظuœ$µ\àq Ìpƒþé7ÃߟÀØâ`§R`Êe –sçÎ}·°°àøýû7ØTPFø5€É¹Èøç¯Ÿ ÀÌÄðùóç_ÄÈÍÍ(%%•TËú¢HY=‹C2#Ëëׯ¿¾ÿ~@€ùⵊÅWÈ™IEND®B`‚keepassx-2.0.3/share/icons/database/C53_Apply.png000066400000000000000000000015631276304217300215370ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbüÿÿ?% ƒqp @ðÈ•~µ-“:,Ýׯ\Nf‡Ø6ÔZ:¦ÄxÕ±Õ˜ÒÿÇâ0ìÚü rˆ‰$ë@Žýý;A]YjW¤µ…•+ß?€"Ú WEÿ11Ìv·Ð›_ëé(sñÚóî¼J –ÿ ÿÁð ¨æ% ÿþü3ã㜟좥 ¡Ìбû<ñÓ2¹™6‹ïÕ_¿ÿÝüüøÃS½ÿþ³þøû'UNM°§ÂǘÓF\€¡|çy†]Ô3±³Ìb`üÇ@L|ÌÜŸ} ¸ÙVþþóO¬“Nÿküå`Xææ¨4uj˜§•¸$Cãžk »ö>ïgûÏÒÄÀ‰=€bzvçûL 1†ì@+kF.†uÿþ10þùýÏ•WœeWj°AHƒ«;ƒ8CïÁK Û¶¿\Åþ›¹œ)äA¾ÿ0æîôûdqIJ þÇ×âe"* avW:J"3øþóŸÉЮ­é¸úý]ü÷üúýùÿüA¾ÿ0!ðíî÷3W0<÷S6.*#îüé±ÔÓ±ªìÑòYìýýû ù A¾ÿ/"ÿýôûòï[/'0$ÿïýê¿ÝÖ®¥ñàÿíMàüüù ö ôˆYHC›õÇã/ŸÿYñ«~UâagaøôÿÃé'÷¶.ýþæ÷S–&ŽßWþ3ÿƒxšñ ÌôŒˆ‰ã;ç?¶ŸŒÏø¶ž>ýžá9ㆋ¯î3ì\úë˯Û\1ÌÌ §ñ%0€bbþËÎÂÿؽ>ÃýðÄíç GW1ÿú~Y ¨y'¡ @ÌjFÀ(ef`bdüÎôCìÍm‹×yë˜ÿLûÏö‡áóo†ÿ,À ö#†ÄHiv0P­!3•Žð#IEND®B`‚keepassx-2.0.3/share/icons/database/C54_Signature.png000066400000000000000000000014261276304217300224120ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<¨IDATxÚbüÿÿ?#c~ðˆÙ8xäSÌe&=8¿öÿ¼›þÿ @L\80;3ñ?fVVOI¿ÿ^áüùã‹ H'@±€]±-v²õ]#Ìð‹QèB~-Cw“•?ÿ=ç¼{d¿Ãgé:€  pÃ6†{量ÿæÓ·3_$*Å/¶{Q7Ÿ$Ù ¿>-© °~ÿÂÿñofy-Õ):&fÆÇ×ÌføýÿÐ7ª7¾~kb`ÛÍ@,¸‚íÏ&v~ñz]ˠЫ61¼ÿp h»Æ/†÷Ïsùï3üÿV@,0ÿÂÞÿ€¶‹±deEù×.Zy•áéÃÕ " ŸÞ”3ügÞËÀð° @`ö߇ègÄ4áË/>æÿ‘Ñ¢—ì þ14Ìãc8zúÙ†ÿ¼FC£lPÄ`ˆüúÇÀg¢Ê=½{F“• '7á•ßÒlï¼ø¾íí7v Îo(J5KX)3Ì^¾0ÕGÎ2™añìy ³ĦX>8”nÃð†ñÿC ª‡(a@Èp›©0LT«çó‡W—áãã] í]k¾ÿaXÇÉÁŒN‹á €˜Îù‘²Aº®™ ¢/æOèýwõþ‹ö×@ïí¼ L—¬Øc €à.Ðe ±rO`øù…a÷’Õ ½ó¯N _ü ´õ#0Ƙ±@`˜™ìíM5CÏ_ûÌ0³°îâÑ3Ï—~ùÏ0(õì:FÜÙ €Àr2N½÷àGBþ´®OßM”ågxöå#Q €À|úñÿÝîs¯j€I£”¨þ3 WõçʪçíIEND®B`‚keepassx-2.0.3/share/icons/database/C55_Thumbnail.png000066400000000000000000000016321276304217300223740ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<,IDATxÚbüÿÿ?CeeÕ]m!FF† >ÿû÷H3ˆýˆaâ Œ@1Æ .|œ6mš@±€”èèh)EGG3<¼{‡áߟ¿@iF°F @# a`bUPcX¶l±H €Àpp°ý;sæ*Sö¤# üò2 œì@ÍÌŒ ÿügøñáÇ'†/ï>¼fbø÷æ Ÿ89XÿôØ»~þúÉÀ¬jÁ i®Ï ÈÆÀÀÌÄÀðý7Ãû/ ¯^00ü~ðáýo&†Î1|ÿþè(°~€ò+ +ƒ¼è_u!Nf& “ÿÕ|ä``àÈ ƒ?@<ÿÍÀ €‚À„B\ ‚ *œÿxþýdxø—ƒáÍ/F†~1|dfàdeààç``dú # ˆ@´’‹Aõ/ƒ™Ð/vV†7Ÿ1œ»ñœáÑé# ?%l¸X™ÎgGX'@11@)ãÓˇ k'”0Ä šéÌ™³_ãâb ¥ lhâœnIEND®B`‚keepassx-2.0.3/share/icons/database/C56_KAddressBook.png000066400000000000000000000016721276304217300227710ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<LIDATxÚbüÿÿ?% €… ̾~øÉ (ÍËðäÉ3†Ÿ?~?ÊÆQñÈþó—AÁVjÿGó‹ÓÎ:1üÿuf@± ›ö¨X@€—áÛï_@C¿20ügd``þÏÀ'"žîúKô9Ó«Ë/–>?tß ¦ €˜ øûûƒ˜¸ƒ<Ð4S~]òM$5ÊoB®f9“ì]Ó2yKviv˜€bBõпÿþý:›(õ烅¡ÉÜ"×L‰?¿xl˜#t”Ô42¥‹xù|˜Xˆ #T aÊ(ÈÄ l –TïÍÍ"Íðøýgv1_žTE3Q6 OþiŒÌŒ²„a###Ã×ßþÿäíݧ)åÁ|åñ7†?ÿÞ~ÿ Æg«ˠä'!Ã*ÍÙ@ð@Eç¯ß¿?~ý”kohî¥í›«¤'áÂzóÉ/ ä_†@ƒ½'ÎÇÀ -¥Åðý Óÿ߯¾~A¾ÿÿÿ ÿRgcjo,G+H %ìõ ÙÞãèéã üöü øôŠ¯Ñ ÏÕÿöý}A¾ÿôÏq"+_cœéîüîðøð÷ó òùåëìí¤Ò¦¬’¯õþèúrìˆéë•OKs1¬ÿ€áÙç Ÿ€þgdøËÀÅúŸèt~1†Ÿß>2üþù—áüÛÓ æÍýÿ騫é@Í»A^ æw~o|)ñ7–Ms'¯8§Ã`ô1£‘…™—››…Máî‡ {NOa81u×ÙÿßþEƒ’ È€bfdgýöíÙÏû,lAÚ‡e™uÄ5X”ĸØظþ1ÜþzŸáØÛ- gnÏ`8=w÷‡ow¿$õ݃>@Á§¦DOУÿË7¦ÿ?ÿùþÿ•·þOXóߨÔàŸ´ßGv¦ý@e^èúˆ™# rR'VÓì×õ? ÷Ž^ýöüÒÓ›¿žþ]”á+Ør#@!+ 0õñJs‹ñ.dbgœ 1EÏlØ@€ µ-ŽkÓãIEND®B`‚keepassx-2.0.3/share/icons/database/C57_View_Text.png000066400000000000000000000015771276304217300224010ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbTU¯¼®gª¤òó÷ÿÿþ20üýÄÿ 4ˆÿÊÿó*•ûËÈÄøêÆÝÇÄbãa(ãPÊòðDÃ/þƒÀ?¡ø÷ˆÜß lÜ Œ+7ŠË»Oÿþíßó–áÓ‡ ÌL ÿ€6üÚDü‚ÿAÅX€/õ•™“áë׿ÿˆåãç¿ ñZŒ Z"`…ŒŒÿ¤“¬Á& E;/ÿbHÛü €Xþ021ðñp2¼}v›á艳 šZš fff ¯_¿f8pà Ã? §™€:þƒ ÐÐ_?0ë©1pqí`f –? L@¿ÿc`æâbcàââÛÃÌÌ (( ôÈE@þÿã_À@aeçføóí/H/@ øý烢’3@ý-$$ÈàââÈ€ \:ñ‘á?3#@±ü:ƒ‘‰™áÙ£û —®ÞbWP`ÐÔTgx÷î=ÃÅ‹—þ]Ç ”¿!Áúóç/uE   EL  fp0}üô•áé³ ‚‚`§þøñ‹áùóW þü*È+ÿÿÿcøþýƒ¸ ÃV  Ðb€bù4åç¯ß š†: š::`çýþý—AJJœ!**»ûýd¸yô3(> L@“Þ¾zÎp÷þc1qqyy9 >0Ü¿ìPÚø÷ïØ¿€–ÉŠñ]%4€™ €XþMafffxpÿ!ÃŽûÌÌMä>|øŒÆ# €®Eã? óÿ øþヅ¡&³°,(Ñ0ƒBøÎk޼ù~~ûÿÿ÷w ã/ÐÛÀLòëûÿ¿ß¾üÿùéÃÿ¯oßÿÿûîÙÿ{žýçpÝÿ €X8y8™ößgb¸ýæ-8ƒB¨ ìì¿ >ÐVDfúö ã?†;8~³±3Ë‹ÇÏ_mÜùŸãÓ7`¾¦´¿°tÿ¢ Äþ÷)sñ?P¦`bdøöò@1‚¢Œ`„“йæIEND®B`‚keepassx-2.0.3/share/icons/database/C58_KGPG.png000066400000000000000000000022051276304217300212010ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<IDATxÚbLàdhtób¬ä‘e`øõ•á?×ÿ_?Eÿ÷lx¿ãýï‘FRößþsz021ü¸÷òæûÏßžñáƒ@1TÈ1œü{áÿ·óŒÿÓMþníùÿÿîÿR?ÝŸzr¯™ôóáÕ½ÿïžœÿEcè77î~>&8 %Y&N íߨDÅ$ÿqòó3201:Y(°E&ÛúÅ•}b`øÊÏ ¤ÊÏ)-ΖU¼ì᧯ÿ'€  &Q1>†¿ ü²?š7¼cqLç À ««ÉÀÄðáÏ †OøМ/ 6ކŒ>–’…@½@… Äôá=Ã: ÷˜¾@hV†?@Cÿ}}Ôt›áÛC ß0üþñá߯Ÿ Jbl¢@EJÌ@ €˜^¼eø4‚Èûùhç°“ÿ¼~ " 4ìÛc†ÿ_Ÿ2üþùáç¯o ož\g¸|÷åW ¢@;A¾ÿõ÷6',:úóþó̩Ү¯ôÿøüû÷öíòãͺ»Þ‘°ô³ùÿ ŸûA¾ÿéúÅóaDD ðêejúî)‡&"ñáÇìÞÓäÜÙÏêÞ{ó@äÛÈ´òíA¾ÿ#8 Ó“ÿÿëÿà½ÿzhÿÊßÿÿÞñÿÿ¼Íáÿ»51ÿ°QTÿ¯ØúÿÙêÿÿÉÕÿÿ)5uÒˆ‰ hÀ»ÿ K¯]ÆÅ7F`Xh¨s30q10𱡪 ƒœ”ƒª¼ƒ£:+ƒ/—ƒK`¬#³t@±¨ãâç~.FH$¼ýú›á%0`¿ÆÇ›/ "~1üùö‹áêÛ¿ ·^ Â÷ìƒÌÓ‡ _¾ü`xüì ÃëïR þ01|øÏÄÀÈÄ*@LŸÑT»òÆ O~üg`eedøÂÈÉð¨ù!0Y<ûÂÌð(~ýýÌ þ³3üzãúõ7 ß?=ý @,j@Wÿd`p4Òca”ùÏÀüì?Ã…ý7~ò|fPTáexɧÂp¯õÃOv ÆßÜ ?>20<½ú’áØ‚ž_ÿþÜ^A¾ÿÖúÖ µ×,9+¶¿ø¾¼•ÄøÄÍÿ%0/ þÿþôðþõíåûîÜÆæþÎŽ¡ˆQ𫀉VL“Ÿu×Ýoÿ¿=ÿýÇ (ô;0–JÙ\Pe 4 Ì w l€Ä<™Ò2ÉIEND®B`‚keepassx-2.0.3/share/icons/database/C59_Package_Development.png000066400000000000000000000017311276304217300243520ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<kIDATxÚbTWWgFFF†ÿ2üúý[RLL¼ÞÊÚÆWUEM„•ùÇ¿nߺùøð‘ƒ3nÞ¸ÑÏÂÂVÄ,""füÿÿŸáï¿nÖ66;JÊ+¬­mx¿}ýÊÌÊÊÌTÃj`` ¬¡¡îööÍË'Ožlð d@±À4ÿùóGËÙÅuuFfŸˆˆ(Ãùsg=ÌpýÚÕ_¯_½|ÍÊÊö]LLŒ¨I—™™Ùæß¿;@zˆ¤ùû÷ï @[š­mmù€^`¸wï>ƒ°¨ 7ñ#GW}ÿñ=–@ ñ(Ÿ €˜EEE­×ùùù9Š‹‹1¾{÷Žá;ÇO xn1°~z!yæÞ»5@µ€øâ_0ˆ9))õ|yY¥Š¬Œ ã•«—–.]ñçïç·ŒVlm¬ätÕU¸î»hòìë¯y X@1‹‹‹'ZÛ:Š<ñ‚aÎì?:˜ñüÆåö¢ÕT¥t,„þ}–Ý~èÖw µGÑ  VV=wÏÇ~þþ€Ñ3¡@ÈΠÂË?}}šÊ¿ÿgëþÿ»=ÿž³Ê{ z-&F$ýÄÀÅÅ 4„UÈöb3Pƒ ÏŒùZÿþ?œýÿñÖšÿv2g@ÒÈúˆ‡‡›ƒUŒh/ ?+#ƒ£ ß¾Û3‚þÿ¾öÿõEÿí„3€œ„Õ>V1vQva&AÉ2{¹7ß÷Uýÿÿùøÿ;§þ·R’Ú S @Ìlll ÿþD€‰™—›H31“7ã—go¾së |±——gµpg0Ö·T:~ø´ÎË÷ïV†νüçO&Ì€bÿ€˜cš4£”…8ÿßlÌþüeà`Iþeøù‡ ¨Š“‰‰áÓ¦Ô²ç¯×ýf`Ø Ò @LÌŒŒ œ¬¬nê¬\¡²š¸Ôþ0|úô—áóï oücøøë?ýŸá#PÇ›_ÿ|%„˜øxgõr  f-6e.Þmfl"V©j ¼J< ?®cø÷ó7 Ð@/0mgaüv+ #ƒ ‹Àá÷_D?üÿ¿ €˜=¸¸&º2°ºëúI3ZÊ10pr3°±²0ü¾úá?Ä WšáÀð÷ß?)6VŽÿ̺g¿}?@LLÿ…?ùýAQœ™¨’‡ÃZ‘[E„á狟 _?½ðþ× ß³1üfæføÄÁÉà$#ÅfÂÅ5 A¾ÿÖýüÛÑRP2   õäå %ú ý#õëÞúórÌíð×÷÷ÊA¾ÿð°+  ?ìûÿÿ 70 :'ÔÍÑùÁÕáú $õµÐóç¥ónˆÉš—ƒÁ‰‡ƒó«ÃÔo—¬®,f˜vñ4Ã? o††© «¹Ò¤´ ø2l•Mc`b†(x€¡ @LNüœ _€‰æ 7ÿ_†¯ŠÏþx ”`øÿ÷/ƒµ 7ƒœ´ 0Ò¤´y¾1ĉ>a`bãaøËB Äôh+#+Ÿ ÃVN‘w ²ÿø¸yþ3s00¾»Ê Ëþ…ARÁMù/ƒ—ÄmF1pâ€bùõãÃߟþ|óY‘á50yüüà K.6Nq†Ü`6>p¢åÖãdøóü"ÃÛW`9 €Xv¿ýÌÌO«.MtW´fqQ0``2àº@÷<@Í\ ŸïÜd¸{î(Ñ]{ÿŸ^†D†¿ÿÿƒùÄþÔÃÈÀÍϲ™áÏ¿ |ŠÒA| F&Œ²ÌLÁß¡¶mgcb„X5䊿 ¼Ü ’â I>Q M3fQ )-US5i{>¶8 w xy¾üý ÓÆ@Lÿÿþcø÷ýÿ¿þ|ýÅÀÊÎÅÀÂÀ`/n§%ÂÀð›Yœ‡ÁR_èc}'n^†/_2üªÿýãصÄÂ'Æwü·¾´üOßÿýÿ—ý÷Ÿ|F’ÂNÊ@w>†Åw×(3VÖW_vòpr|bg`büËÊÂÈÍÁÊ̽ÿå^€b\c­ú&x‹0ƒŠ"Ã7~†ÿ@¯02ø— è/ Ã†20ŒL Œ@aö7 ÷6_cHÍØù €˜<~·ûö®kŽbŸ„¹Õš¿ôbo÷è‹ç@Èÿý‘å5Ã[ Ûúö0dTxrüÕ·"€b4xˆƒX—äæKGšÆ 0±±#í/(|a‘Œ2¶ ï_þe˜ÝýòÇÖ·{ß30$%žƒ9P 0‘0X[30KWúýÿ¢ÔÿÿG€X‚óþÿ{\婉Ä/ ÒäØ – á?€ NÆÿ ÿþ3äÿÇÀ4ò'P-7þŒÔ_?~çc`åTúb*(Öa“<ÐfM –¤&Â#e'ÏÆÀ¥ËÀ aÈðó>#Ãß/À€3c`Rcð´—àb`Œb@ÄrÓh*ãTvá5† ¿4ÃõgÒÓ}nÎÙÿéË•‡ RÚ ÚÖÆŒš‚\Èà ÂÛ ·„üþÿ¾÷ÿþdÕÿ&L ·@A£ÆÀ !ÄxæÚçÿÿ?Lùßê¥ÿlò0ýİHÌâå,…KÿOsþ+ÆÀ°($L‘ Æ @zjòÖtµß+ôþ³30¦ÃôC¨âR&FE†ÕÀtR“cb bn Öc`ˆWecØLNö05cÜj…NÅ«IEND®B`‚keepassx-2.0.3/share/icons/database/C62_Tux.png000066400000000000000000000011541276304217300212260ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNS"±LnQâi pHYs.#.#x¥?v IDATxÚu’Í‹RaÆÏý°Q³3Œáˆ3È[I3P‹aJ.„ˆà˜EÍÐÎ…-²6Q ‘ÿ-LRÔ‹†–·h3 Y [$Ùà\F¯Þ¯WÆ;=»sÞßsÞÎÁP6:ÖžÅãñR©DQT(ŠD"WKwô©/Òön·›çy­dY¶P(ìV*«o¶Ž\o‡Ã’$¥R)„MÓ‰D¢^¯'“I=ƒé#íßÎ{½ÞÁ`€2CA(—Ëv»ýð¡cF¤WËÜJîîFÙÈk9a¬p¿q›j|þòsóíõÊö¿†L&,Ë‹ƒnÇ0°Q¤sÅ®(\£Ñ˜fB٠ʋŢÁ`’$Ž{ßRÃ/Äï£Ñˆ¦i‹Å²¬FN .— Z­–zJ ÃMÓSC.—«ÕªÎ’(Šf³Y‡²AÒé48N˜%’$Ç1†@­V Ãà?ÒžªÕêÄÐét Ýn˲|šã8h6›@Ìo»î9·|>_>Ÿ7™LGÿ•¢(±XŒa˜h4ê÷û?Ù~N7}~çÃÆ|õÒRhxÝø£o.œ›í}ÿÕØ•ø'ë'NãËûhÝ£¡,+*uv²VQÆæ×Ÿ®½{|â–jK·ŽöUyŒFËâe‚ÀûÝ=U0â̵²Ùe4ì/'¿|•ŽòÖIEND®B`‚keepassx-2.0.3/share/icons/database/C63_Feather.png000066400000000000000000000007321276304217300220260ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNS"±LnQâi pHYs.#.#x¥?vzIDATxÚcTÚèÃ@¸ë²’ááC¢”ZÎc8vŒ¡¿ŸANŽ€†»v‹öîe˜>ýÇׯÒÒ NNø4Ü­b˜6á÷ï7OžðËË3èê*ŸÍ`©úG,î] ¿?»s‡_Q‘U[›ÁÊŠ» w_ú1<»þÿÿÿÇ×®I©ª²011˜›+ï a``ÀbÃÝ'ž Ïžýýû÷îÅ‹Rjj, þþÊgÒ!²è6Ü}ìÁðæõ¯Ÿ?ï]¾¬j`ÀÌÁÁ¬|«®EÃݾ ožûòåîµkÚ&&L<< ááʲ‘Õ 4\¼bÉðûùû·oݽ«gjÊ(.Ρ|8Í P ·d›~¬ðœíÝ›7úff êêÊ\KoÃô!ÔÓÿ|ÏÈøåógm##GGe®¥¸‚›…áŽûš›NNŒ22ê.. ÞÞðÁ©áÝíÛUUÍJK•ïV0œÙ„?±0~~ùòÊ’%Ñ*û‰L³L ÌÌÄ«f``y—‡CWööÑIEND®B`‚keepassx-2.0.3/share/icons/database/C64_Apple.png000066400000000000000000000010741276304217300215120ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNSÿÿ‰À/ pHYs.#.#x¥?vÜIDATxÚe‘¿nAÆçN>Špº€ä4 DCO‰S9…M î‚Dzž"†Î)œ"uüqKW $SÓ:àŽcÙ)–¶3Úb5ú~û}3 ´=ŸÏ‹…¹gg³Ù¼éhЖÝûÜ“Rzž'¥ ‚ ÿ¥ðüçùüÝ9¼.Kƒ€Ç_aú¾E´ÛmÇqþWŸ€—uûõv:®V«Á`€ˆ¥Ré%yž~?…aE‘ã8I’„aX«Õq·Û!âÙÙÙÝ·; Fýðóa< ×u‡C¥Rñ}ßu]!„R*—Ë!âõÕõÉa4‹EÇq—Ëåz½ÎçóišRJ ^¯çƒmÛ„BB\×µ,‹R –eeÌf³#À9gŒ)¥€1Æ9—R*¥´ÖZkÓ€r¹|¶Û­RʶmþçÜÀFÖjµŽ@£Ñ˜L&&’”Ò+ιÂȺ»Ç-]¼¿H’„RJ)5{DÄý~Ÿ¦)cLk “Ï"„Äq Zk!„ ÆËòôû}øñú§o>ÝB”R&•¼ žç GÃÓÇ™êt:q›HœóLmÛ¶Q¿.?\öz=ÎyÝn·Z­"b³Ù¼ÿ~Ÿiþ€K8ç…©IEND®B`‚keepassx-2.0.3/share/icons/database/C65_W.png000066400000000000000000000007261276304217300206630ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNSÿÿ‰À/ pHYs.#.#x¥?vvIDATxÚµÒ¿«yÇñ÷ýžsnùU(ƒÉ?p䌅’ÅpV¬bÁ*ƒRfÿ€A)ƒ åLvl¢Ô™6깃ÛýÞûíÛ· ß§g{>¯zžzÞá•úÅ‹õ2 \.»\.EQ<eYº®+Š¢(J&“1MÓívG"‘Åb …4M+‹Òív`0(ˆmÛN§˜N§ÇãQ×õëõ*H§Ó©V«‚ Èív À`0¤R©©TªÙlöû}AI$‡ÃáÒjµ€h4*È~¿Âáðý~dµZår¹gòœÏg¯× L&Aòù<`šæsZ«ÕÆãñ H½^âñ¸ ËåPUu³ÙbÆãñøضíp8˲z½žÏç …Âp8l4_±ß@R©$“ÉX,6›ÍMÓ ÃØívÛíVUU Ýn ’N§l6û=ó<Ïõûý—ËEù|ŒF£Óéô}õzýuî³ßþû·~×e ³èI¢áIEND®B`‚keepassx-2.0.3/share/icons/database/C66_Money.png000066400000000000000000000006531276304217300215440ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNSÿÿ‰À/`IDATxÚcøÏðµîkµ™nƒUЉ<ÿøüý÷÷ ·^Ý”eüÏðÎÙtuS÷¡î—_^"«Ð×ɳÎsPv€òáví¿»Ÿ¡‚Aµ[õÌ“3p'M96…¡‚¡u_+'M::‰AœGÜXÆ.˜m•m#oƒl! œõúëk†#L=6õýû÷pñ¹ÁsÕÄÔà\„ ê¢êFΦœ×6¾üò²m_Û­W·U£xúÖ«[> }n¿½,ZëâÖa¥çŸ×î®=tÿš6d=(à tkéÆkÅyÄ<<ÂÀÀ *¬z«ôº¦›zàî[SPœGüpæá@­@†ÛooÃ#¡aÅÅE&2&à^GI믭oÛ×öüãs÷ÀÝ Î.```È·ÎÇâéwl½±õÄ£¤qûímUaUqñR»R?m?„©TH­ø€Úí\LIEND®B`‚keepassx-2.0.3/share/icons/database/C67_Certificate.png000066400000000000000000000010041276304217300226670ustar00rootroot00000000000000‰PNG  IHDR‘h6tRNSÿÿ‰À/¹IDATxÚµ’½NTQE÷þιw.F‰ü!Ì`¢­±ó5ìm|[;K: c¡±D c$> &Ä ÈÏgî9ß¶0>…«ßÍÚ‹‚p §$®í¬í4»äB¤eAr‚$=»#,»_k/ÇoÇbžkÍôF£—Š2RÌÈ97 PÕe£fc°ÞBÝóòÄâÍ©ë½ôë0õ!!³®ëá`pœ†–c‚/\8_¶âÑÖ^`ˆff´á`ÔŒšª(-DÂä*‹V«¬²çíööÏž›¤E3‹ŽŽ~¦¤Ôäºó—/ªôúÑö‹gÕäÒìów!A‘Q¹2iÆ@ã퉿öFoßl¯oõ>~ø±úÞ Å( 3ÕYh_"(†1ÀrþÆ™¯Û'¿nWrA )X0F‹!†C(ÈÂXùþ^üôª|ðpùj{ðòñH{CíH2ZLžˆ`û÷LÐßÜܺ}rvéû­{Xìα¤ŒO7ŸŒ‡j¦5C˜¨“äA—”!WþÒÿ|günìÖ+‡éð¸IDJ8€,I-y“á’®+ÓÕ4ÿ{|§üÜgÞ6Ù2óIEND®B`‚keepassx-2.0.3/share/icons/database/C68_BlackBerry.png000066400000000000000000000010151276304217300224700ustar00rootroot00000000000000‰PNG  IHDRóÿa pHYs  šœ¿IDAT8Ë’±kSQÆçÞ÷^Iúš˜Ø¦)š„ÒB…v2®¢–..âàœYqwðpÐÁÉ@K7ÿµ]MqhqòÒ$Ò|1ɽ×ÁJx¸pá|üø¾sŽ0QµZíl0d´Ö Z­Æ‚ èÕëõ…ËzoÐl63£©TŠ­ÍM@h4¾Ç17ÂIý`qé*Ow£µ¿í;(¥ùòù€D€ˆðæÖmš¢°Î‘ÖšŒ§‰ã˜_§jàÌ:þXËrps!¤3_ô’ ,ÍÜÏ]!ïû|êtùm,óÝd€^¬Vøe-û§ŽãþØÙ¬šà ×mõèv›{" ¼³8g“ÇÃÞ?#»wBíá#D„ïvy|_[Kâ(ôYÜÞÂÂõò ×Ê+Ì Ü]_gÙ¹d™1¥—‡ýäõ«·8ç89mó|µO†Ék-QaŒ¡ÛíâœÃCE¤Óéÿ;$çJ)´Öÿr^ú'ΠT*!"är9²Ù,"B¹\ž¹Ê™—8ð<c Î9<Ï£×ë¡”JŽP,Ïóù|¦R©ŒãT«UDß÷Ï'õ‰ïš5P¯IEND®B`‚keepassx-2.0.3/share/icons/svg/000077500000000000000000000000001276304217300163605ustar00rootroot00000000000000keepassx-2.0.3/share/icons/svg/application-exit.svgz000066400000000000000000000144001276304217300225440ustar00rootroot00000000000000‹í}moI’æ÷ý:Í—1– Å{DzÚ³Àõ` x±‡ÛÜǃ,ѶvdIä¶Ý¿~+«Hf¥D˦-Ý/ô4D>•‘ñDTD2YUóÿ¼s¶÷ÓòêúôâüÙ>îï-Ï/NNÏ_=ÛÿÛ_ÿõ ÷÷®oŽÎOŽÎ.ΗÏöÏ/öÿåÏÿôÃÿ:8Øûñjyt³<Ù{wzózïßÏÿ~}|t¹Üûã뛛˧‡‡ïÞ½ƒÓW¯Ÿì ’×?½ú§½½½AíùõÓ“ãgû«ñ—o¯ÎÆq'LJ˳å›åùÍõ!î·áÇmøqU~úÓòøâÍ›‹óëQòüú³ÁW'/‡Ñ͘w2¢RÊ!ò!óÁ0âàúÃùÍÑûƒ^t°q›(#âáp¬ü¼QOߟ L|Ô˜ñè\ûÀþåðßF` ÀõÅÛ«ãåËAr ç˛ÿüõ/›ƒ'7'³iÖäwz»ˆœ½Y^_/¯×x•zrózHÎñãëåé«×7íóéɳýÁ??¬Õ?Ýä‚L‡ÖsΩýóÉò§åYÐ¥]?ÙÉÅñ‹£ëÁôÃ×o–‡'G?žþçû¯–ç‡?Yž¾¸>æ>;zq¶<<:¾f¹¾3ÃàÞ0ÃÑååÙéñQr°|zƒé?÷ö]¼½¹|{óÿ—ïo–ç“A;ªñð$·û –ï//®n^žž-¥»™}xu} —ç¯¶ÎøþärHƒ‚[~Xüópô‡“åËë:jŠOý¤ãáÐ_Ë£«»::9ΪÛ ë2M2Uêúæârõ¾{óálp¬‚ÇgWOÿ€ãëO#t1¤Ñé͇§ô§ý&sñòåõrHœÉü¦µJ²ìïvÚ¶Ž*Û&ÛßÙ42×?ÝQ¼û\žÁÁ![ýgv%¦­Ž =€~ññ_lÓ¿]-ÛFí‡}àwÌ.wÈ“ãñõ…y2èâèzIõßgh£íÚô¡X–ØßÁî—ËùâKÏ&–²Kã«×†ŸK¬ôP,¹‡îÀÒ‹—_QsÜÃwd‰†×®,5mùp,¹÷,mÓ繈û]´²…Ðí,õÞá6"î×–'ÛÂ÷p,©ìtƹ¹}q.©í˜K'/_ì|Æ5mñp,É.]>Pâ+Î8©]~—óÛ–ˆ_Ì’|YkK«ÁŒ³åñ0ÿÑÙ»£×û÷ÑH¸K² ÁÏ/§‘ZÜYÛî4’>X²©úþ®méKYRÍ\t5|8–Pw9%ãkš ânMð˜>Sm×ö`M°ìZÞ¿‚¥²kywþ –Êg”÷úéèlçÂ5n.<}}µ6Cþ°…Ï9ݽŠâÖl=~?X΀ŠaÒÐJ ¤&¹A_ÎÇ6tëØ«gûÊ`V4}¾ZYð·óÓ›a‹åíõòê¿ê6Åžÿíz¹u}9lüÇòæõÅ`ûà`õÿν::¿vLÞ<ÛstsuúþQŒhÿöé €…8¹oŠ„±<Âòhðáuo ïÄÉý^SŒRF¯Û§"…%Y„—'!ùòè¤ËeD1î3,qúùІvC·äC£¾Ñö`Ô+ê}Í] Û4ôl_ „R‘¯J$`šRÚX®(¨%º¶±À³Ï éã:¯~¯óÆóL€EK™94¡„4 ½óVS‹D:ç91Òô±Ïñ›úölØ–þãA€e`ñ\ o%Gîg§ó°Yw³¼Úi8‰¸Z¶6ôrùoGo¯¯OÎÿ÷ÙÛ:ݧ'l]ää/ËŸNnV{£œªJ·D¯ÁÕçˎɤo—)¾cDï‚^ 81Í'÷çÂWå){fÞÉÓ@,回~¿TRŠjÏi‹oË)ÿÎéÎË¡û8u‰Î+3JŠÜê‘Üù³eÔ€†B!!ï ;ºÊ½nkéÜv” âÞm«u¾o: †œ%í{ðð^ßí3죳%FŸîœ’E[Ç(Q€°x~æé¹ p#'.O¾-]ñméz\çCïu>±s‹ `ñëÜ2„q­[‰€^Jç–;d ûî—Мäù!âPÿŒÐ—ò °oè½0–‡í¶ì,ÎeAO>ƒ¯¨Y"Lñt©h¦•oJÛÓ%Â\é‚B†EoÑVRÓ¤_~8‚û÷íZ$ÜãÖ:™…øÛ&™ÐïI¶ ]òM2"ƒ1qzÚ0µ`~'I&,q/k*WŽPÔØ¨s‹Ð M;·¬€’±ZŸ.ĸÃZ÷+·,„“eËB8ƒ3òÞ- á”;[ßjY"œå :³#(2ºõ%SÃI»ý¿mck20BqfÒ‡¨Py„€8E‰°ûã)Lwâùh›ä\ Þ³I.ˆø`›äA,š‹bGKZ ¨ëð.Õ)„&:Œd %áOÿoûæ®Ý†y[„u;æîI‰vkÇÜ€C•»-s ç‡H-{”ZáȈE?‘[(q'·¾Ú%B}—”)Âå~ýcŸ^þŸ£›×kùõçûó·êXÂl®]¶¹Ú¯”ƒÆ³§ÃÅÕüí3‡ˆŸü©ý`y}suñ÷åÓóáZïÕûƒñjà§ä Å1u} ž§aO¯.ÞžŸÌÁÿ¾8=ïÑ7§ƒÓg§ÃŸ§ñ“£ë×GWWGVÚ:ýTúTl7 g\4üÇÞ¹³c.ØÀ¥ òÞNÀä.X20”°Ø‚,ÜÄ*HPHl˜ 0¢LdBJ²/Ô…5lC¨9–ùYÀ¹ø8) ZË‚ÐÁŠ–:”8,|V«AŒð–|Pv)±Ñ•kP16Vù|‚Þ°H- V AŒ &D¦i ‘sµ€Cdœ qÈV©%Z¸«ù  ]ÈÄ!Æ|)ÅxmQ_‚b!·9è1€HÞY HŠ:q( ÎÄ´Èç(\-Ю¢¾©‚ŽÀvw‚@È Þ芆mŒŠ¹xï€$Ká…D%> M å\ˆ@”"LÐ1 k7ጘÇh+C ©×Ü4C6ÝžÇ?ïÕWZ™Æb›èªdU¸šFRÁO%ZpdR·(,Rí-F6Ìü|»­áWpààˆ'¸¹U0€µ$-‚€’Bµ‚ºÊû`0Ýp¦ !¶‚™Rã+ºù„&Ÿ¿ù„@Z†×÷õË5“€[Ú‚ ˜¡¯6©I¡¨0/8Ý W,I):,Kf™‰?`]·Xcðt.ì Hå–27HÓBó‰= °¥wX&´¼¥,ñ”²f)>MTU/$À0=¥ Xç2“W„t'5†Ðd[¸vJ2€ÄÜz™ Œ4 ‚Š™x!ˆp”¬“6‡Ê ¯E,ë´Í÷R D1g5¬ÑÙÄ{òÃ@H+ÜBÕ)kQm·è7¬åI¯ Jeslœ Q½q0‚FlVˆ1eáÚ©i1ê´´h6°Å}.ßräù¶Üßþ)Úwµg‹&¿š,éfŸüq-î@bNìjREÌÍçXÁÅ-:Ì 0ñ­HºZáõ‚ Ûme! Bó‰ÃÀ4Ù;Ì!…KÞR–†.}¤TˆB8/€ l§L“ï 9‚úTÛ vžv:Ú)ÝÀvò7ñ®6‡ºšÔ|oõ§qÔ°FgïÈï ` U§¬EµMܢ߰–'½.Rp ë `…„9»ØÀÆV› +€$¡ÂµvjZŒ:--š lqoò]l>uðË–BåK–B¿ÿ ×øû}Ãü«ItßÄÝù•U÷|´/Ú°P™©gl}´ìønó¬ÝúÌÛ“ŸN—ïÚóg_m̼põx¨cgËÁËãe5qsèíéɲ;¶:pñ⿇Hm9Ò¢YmÜhCØz|(t'ïžíóíƒ?_\¼©6j0SêíÃ5UÕ5óÎÁAŸ!&ÓÛ’õÆoës°ÞNYpùþŽøÛ««:àìèÃr qü3æX÷çI®=Éy…5F—o.¯«÷õ™ß<ÃWàà€¶ñ ÿ0LJŠÿn8V·ŽÎ®—] WæÝ\½]Þö Š5v{ázlš`»ì»ÓóAæ`åhIÿÈ€µÛaø‘ƒ‡áÜä õÔ7G«³ësäæC}ÎöûëNñ §mÀ-”6ôCvaÙœwO»³¼9:9º9jçà‰µéÃóΟþß¿üëf©~|üôÿ]\ý½­:ꀣo®F™Õ¸“ã§µ¸Ýüùôͪúpóž1þÃa;Ð ®l @7íÕrzxù¶ç½ÿ{sZ…ÿëfXÈü{U2øÚáÊÐõš¡ù1|X{9~zu+‚Ó¶—gÏöŸ×üÛ£Ûñ}5,o.ß\œ,WgÎúøÉêóóöfûuQwî/Ûa=&´ ëÖ‰Ãáɲv¯ØXÿÛ7/JÀGZÔ•4aB®‹º~&20䨇ˆqA Z‚ÓÇOÁ*V?¯DÁúq#<›fÀ›†úáyS_?¢ãçœM“ ƒX6õƒP6ÓfdçÛÏýšey\ðICÔüjìñú5$àîÑw%ü†Ñÿ=ÊS”ÓÝ Êíië˜\LÿôÑÀ{þøox÷௠üM[H×ÿŸ†úu®=à“×Ä/üÝ$ÁA¥VRFÚÁI×{1œœ¤4xºQ BBt>ú`óv±9Üë©ÆyŒ9)çm01°³[§Œ $Ëܰ>Ÿ¹ÑàÕÌ4[7ùô¶)›ƒÍ°çs¸¹ñc7—›²FÎ~·edq¥-E™áŠöñJ¤ö ’°ßúœe‰«åíeI@A/ª‹.Eb¬XL^˜`XTjè!=$Ê ð’DcåcˆðДÂh«ù¸É‚¬ Iì‘sÄ“Uª-‚"jC±äaÂ;n­A*roÄ·Gûþá–*áêܳÇR°,ÈA½PÍgF m`}ÃÅqºßŠ%K‡S—ÊãŠ?¶ÆÓš?–,kþ˜Öü±­ùcZó·ÅÄÆß–L÷,$åžLwýåeúÍkÆVO"^XÍg¥ÅÁ °ÓÊäžzà·Yüæ<õ¹[›†AFÝ_- ÐÙ¦uha׆¡bÓªcº›ËV«ŽÐjÕ±›3n&Šú©)Y­uVl–:ê$Ôæå‹×1MWÞ7ƒøc³y†f›¾y¾u5Ã;,c¿²šxv`uó¬§j‰t^üf.Ef(9„f«õÄexésPW y„z²ÍÈû а+kÆ=%ð×PQ¦‚rPëÈ‚Ä3ÒïV”ûëÑÁ¼ µY>N/…“[Ê}ôþr–&¿®Ó¡?×ó ×'m—r»‚óêᦛ¯rê›orLd³bÓÓQ×5³­7lVÌ› ãz^­šÆ±œ7kVõÜAµ«æPT‹7} jµ¼a­”ÏÀÜLÜü¿·e:Ê=ÝZËwwŠìÚƒ^u;àÂ]­ÚöK=ùä$Œw® ¡ª$( à¤ñ¤¬6ÂÈ›$Ê®Hë0FÐu o ­ÀçÒ±‘nJtRÒŒiДÌèÞ°1™ÐÜf ‘:š†1mÌk6ëVXs­)h 4;¤Ùv‡½Ï½áî“¿ËœÝ!kïM<²;‰G LQCXÔEuØD§1ÍØ‰¤ ˜BŠÕ‘ ,‚…6Æ1Šáh¨)” ýqD]Yf h.“¸”‚R1W-$#FÈÖ„Ó!½°ÊÂǾCL{ЍIVÌ Ó˜áÊÈÆàÈ+ƒ*@n8ΩÌ‚EQ§àØË€ä°:g€)GN;„,D] ç—‹ƒˆªñ p*Ò_‚ìëKåúëS jH¯, (ŒŠÎ&ÎV§š:©S¯«0*%õ×;ÍA›´ë^ç`»B¶MÐ]ð èiB ×NM»0·ÓÒ®ám`»Úw&ß]òÜœê®Bnî· ŽK k„6éŽþîŠç¬NW‹k›¸Å¿a-U:eìcºÝºçÃC;Øèjt—ùUtµ'ý^ðêÏÃíßÿÖ`cåkeepassx-2.0.3/share/icons/svg/application-x-keepassx-16.svgz000066400000000000000000000342161276304217300241160ustar00rootroot00000000000000‹å}[w¹Öíûþ>|/Ý»¢û…¾|#@C Í—3Œã$†Ä¶~ý™Ke'XJhØdiؽq•ªT*ij]æRiýú¿Çû{£át6šŒ»&q­3&[£ñÎoמ?»Ó ×:³y¼Õß›Œ‡¿]O®ýïïÿùõÿôz[Óa>Üê|Íw;÷ÆïgƒþÁ°óÓî|~pccããÇÍhq²™Lw6~îôz¿ÿç?¿ÎŽv:xèxvckðÛµÅÕ‡Ó½tÕÖ`c¸7ÜŽç³ ÙÈk‹kg×è¹££á`²¿?ÏÒmãÙÿ,¯œnmŸ^Jø¨Ó2Ƹ!Ô†R=\Ñ›ŒçýãÞÊ}h׺û”be‹Ë.qÉã=¼x¶ ©ôô¡èéüwzõòD3›NÃmÜ6lÆÃùÆíg·O {¢Ùšo-ëXöò¹'žëúq8;膳åùk¶­ù.†\a„w‡£Ýùâ`´õÛ5¼rÂaì¼qŠÑh…‹õ¬ž7¡1iŒ:^û R§µlMԘ߮õöFŒãdÜ;žm5xà§•Z'‡óƒÃùÿχã¶¼ÇÊK¥âtSsöF§w&Óyo{´7lŸ¶1ß?ØX}äûáð ?›÷¤kÆ;_Þ{¼u€A‘²QöË“•ÂßÿÓéüº5Üž¥~£è¸N£c=ìOïNû[#@:]rþ”“Z..Æå³ùä íü@‘¾Ö™loφêÅùÉÞ°-ë &{“éÿÙÐß_Ò© Fx4?¹!¯u6Î׸îÆ@¿¸ñôiUÊ[í—xhÛc¿¨ú¬Ðœ»Ý{c½¦X÷p1Ünöð_ u¢ÎêŽB*%ŒY[÷PåP~MÝþ¬n¹¶ÊÁpðvð6×É¿nœÑÌÈ/!„:÷†<«¿÷±2Ã$&ypcw:„ØúŸ5àX":vgqô|<šC.Άӧ4Éÿ?Ÿ ÏŠŸMûãäÈþo×öûóéèø'LI)c°¡+ð÷ìb%Dkð–~Çà¥uîg4Qþv-¸ÆkOÏ=ÁQÔSÒ8ÀãXáÐ6Æ %©‡R¨FíÏàò+5¦¿÷mÝ¡£Ô=ÛvÈùúP©dpŒ¶|ôó„f¨ÀUèÙ>+Ù>_2ÅQ@„¸*÷šÎkã½¶<ê)ßí$~iÝŒ‘?_8:_ “5(h»ã⩞þ|9#V$Ër6 JÛ3—’k*¿œ›I+•úž¿h¾ öFû°$–?2Gµ./Ñ!Äž;ëºÿT׌'[ÃùÉÁ• fôw6¸¶ÚÁã1:x2í §GýùátxÚ©î( R8ÜïH©ºA5V¨\gÐ]À[-d§§½‰]×£UžmNáŽFD픥3Rkºšî¡Ó“¦š”’NieµC=@§*¤«„Ó¸J4"È®m|ÒÆŽh¤³Áu¥EKŒ±ÓÓ 0¬T7“°Ð8%8ú®‚>VʤæDa©\ð^h`±øpz“U¡»¢co¨¨DÛ®ãŒPÝžASLØ@ÐG`=48öº#}ƒ§IºÇ5ÐÚv”m05$Þ·§èá­s«#EÄyG]ðx}×v¬k¢>|ÖËŸNe1ôøÞ ˆ?}. þ…JWp=›O'ï‡üñÊ,ÛX"fqŒ{æÃi'a¹7ã÷Ád¯µ Ú"`föÏÝ›×.˜íÅ:Šs0ÜÞíÎf£þøæÞá´PÅl¾u{x4JN”F•Ÿ«†ÐÒ‹+¯Ô>û;jtgš§kõí}›ÆÁÜ0Êë…ì4RJ"`å1ŒíO¥‚–f©pTõÝBáÀì Ò“IšŽÁÅ êLá@𠙬ë^Š^÷bI·ÞÄZ'=CŒk¤ç™I¢¬³±.o¡]B4g¬«ãLiíýg‹¶éžºLí9ûê¬ö…21žÓÂö¾´/oj­Õ*¯töwÔ*R{I«\¨7Öª)ÁàL« î¤`[­âAd7@¶û ‚ò]X& ± i<è@–Cxͺ•f$l6 ]ØYIN;HVÈÓ„wº+…o`ˆ ׉±‰FÀ>‰˜bÜÑv¨.¨0Ý1}Pª[¡¬£#) Ùl´„ÝM€“|§#åÎ_íÏÏåòÒ8/†ó¢÷{‚j)©Îׇ’Э!èLk:è.ÈU%[+Ði(l­£j-Aã¡­M06Y‚8²eA±e”î&ݬ‚ÐÇøé€F ½i¥•¤1-JJ/i”0(F:ˆ]¸èïi¢JCLÐwµ Q©ƒÚ¼`_U 3]Ò‹A³“ÝŸ‘!M´“ Wœ¤+¬„„ÆèžQ$ªÊZWç[õ=\ _Ëèuê Õ+=þ_P÷ÆÊÐÓëd¬2$¤H {Õê_ÑêÝtH W’¹+HÈ‹*4äa² ÈÝ„úÇ£I¨a.¡ÎbbaJkòB/­Ùov±*¡o.£ÙÑ,ÑûRùž!Ù%Ŧh%ûzÍnèï¿ÑìnÛnÛËhG4X³Ksë2ÇHõ툧¹Ö¡µÛÖ¿¦‘°—s[:rµÈ@<ÛZExlf9·•Àc£]a?1lAÁ,úÖ÷$ãTÑRkßU„¬ÿï kØ|»j`6xgìZ#H÷= ízíòûÛÝ'¯µ‚QoÖ¾ Äxîe¾ 7%Zkg/”‘d­H ²N.¨+X">ØÖd[ 7ÚЛ‘É¢`O'“ÁYɸ¹¼çCm½PØèÁ@‡—£¤¹i$|ë?¸ÒHšËš+ÚÝIQ²¾„_*h'Õ— &8;¦ÔŠKð[´ª×&„%M)ˆÐµ–ë%©W ƒWb(üÏ AÀVŒÎª3jc#tŒ4g“µ¬ 'qù–+¥ƒó¥_BŸtx™Þ¶&^¦£.¢PE~ßZyQ½¢‚üÒf½ 3w®8ÃDµÁ†¹¶Ú"Ÿµ$P¨/ G¬{èJ„#3Y¾¾`^Y£\rDNËä ¯œ"¶Ñ@ #¤©ÚGº6¹@°+åZÐéØxoƒY¸hþ&æÉÓ°¤R ‚„ÝîÂzyk…)ûŽ˜Ÿßt©¢Œ=hÈ»¼ r—ñ¾r&¦‰æ"`¬õ½©5|q1B¾ ‡ÕZÑb›.ù=)4yÒƒäwëEýIþǹbk›¹¾Fýµm̽^޼Sñ¢!5Û[î+†TG-/ÒuUŠ Gò ÅØîÎì\ÌS#¨ZKXJí…<ç‹àb”viM £ \c§”zE‹í—îCRïrþ2!GùÐ`L)HÀ²–â›Æ.èæÕR:lT€ø"½~†×('AvI :y){áb5èV]‚ózÅ‘-ÿ]$Ò¥‰¶‚Rçô¡]Q„PyEèhN—'GëcþXg=눸[ Ý—âNËˉ»`}»Ï@y²—×RädTŠP¯/ùÁ˜@›òkLlšûõbB]Ì–ý Lè¬å"ô÷²\¾#&t>¨†BW5&.«þ(Lä\(XÔºP?D›g1alÕ˜¸˜1úA˜0!‹ ¢Ó¸aÂæí ›H™Š1á¹`Â~Z\éâ ]¤ WÛw!ÙÂllL粘p&¼(`«š1¡Ùؘþó¥©+]ìb"0.$jXc‚rüŠØñhÓ—K^Î £¨llÌøùJ•.¶ü0óÁƪ1ÁÅÆ”âóøôiKaØaB —Ç„U󘚋IAæ\K~<¦”SʪyLÃÅÆ”*ËcJÅÇ”ªÀcJU5i¸Ø˜ReyL©ùñ˜éß,&tÕ<¦ábcJå1¥áÇc¦¥„YL˜ªyLÃÆÆ4YS~<¦´S^¼hŒ5&ØØ˜6ËcJËÇ”®ÀcJW5iÙØ˜.ËcJÇÇ”®ÀcJ_5iÙØ˜>ËcJÏÇ”¾ÀcÊP5iÙØ˜!ËcÊÀÇ”¡ÀcÊP5iÙØ˜1ÏcF†Ýª\lL¥²<¦ÒüxL¥ <¦ÒU󘎋©t–ÇTš©LÇT¦jÓ±±1M–ÇT†©lÇT¶jÓ³±1m–ÇT–IÛ°ä1áªæ1=ÓeyLåøñ˜ÊxL嫿1=ÓgyLåùñ˜ÊxL嫿1=3dyLøñ˜*xLªæ1=3æyÌÈÇŒ%3VÍc.6¦YS ~<¦S‹ªyÌÀÅÆÔ"ËcjÉÇÔ²ÀcjY5¸Ø˜ZfyL­øñ˜º°O «æ1Sç¹mÍÛÖ%n[×Ím.6¦Î¯ÛÖ ×mëÒºm]÷ºíKìôýƒ0‘ß“D3Ü“D—ö$ÑuïIr‰$d?6 Ç®„ W7&ØØ˜. Ͼ„ _7&ØØ˜>‰À¡„‰P7&ØØ˜!‰È±„‰‹÷ˆfŒ‰”¾&bFðÄLQ7&®ÄƼà‰)RôM)ü˜AÉÜ”‹mËWKisF£ÔÊþÑ+;룿ö†?a •Lùw»ª‰¢¬ý9Ó'Ù_Fð[ñedaÅ—‘5¯ø2‚‹µkdvÅ—‘üV|UXñeTÍ+¾Ìê$¿ZL¨<&CLè&tÕ˜Wbí^B‹9¨)ãÒ‡ÌÇI©YÓ(YVK“R3t–µ˜ÄX9£l×QRR)‚˨1]˜2¿°ƒgaA¢15/HLš‡È2Ù‰Æð[hLaA¢±5/HL†K‘åahqjxKëM£í!B X-%‘eml´XÝuÈRJÃ`·]ÓŒ¸v1#±lvi¤±ü–FšBž1Ö¼4ÒH6†·Ë.4«L>L¸ÂÒHãj^iä•ÐÌ—XÑá‘Jª¥Ä‚µÐ(£TÁj)I,4Á­æŠY'±BŒÞGÕÕ ”‘Á‘峫4ç·JÓøÂ*Mãk^¥iØd„‚ŽËb"ð[¥iBa•¦ 5¯Ò4W“ê2ì¦@I±|„‰” SÅ…_¸Zšr4ŠF[»ª“׈¬ Òp e/3 ï3+d׋šÈo½¨‰…õ¢&Ö¼^Ô°ÉMeòñË0cKñ[w<æjrS]Î- 1}ј¡Û ôiÑÂ-<-¥ö4À_’XS!øŽ]È.#¥S1±ù€Œe±¥€Œ­; Ã&M–Íd,ÀŒ-dlå®ä;êp:’‹–¡¬n´)-³<_Jí‘ ®ž–%&K6ÎDç=‰,'œôQf¬,ʼžm~ä»UòÝ^œF›3<Ùdì²:K¾[Í|·º@¾[S5ù~5».#²bc ´oKeÅÆx:Jk¥¼DåqlmÉÈRóJK/!±´7Jx‘!ßÑ)Yt~ä»5òÝššÉw{5{s_JR…pÍÖMðÁ.êj)Á3ÄÆK±ú±Ó…ÐD£žЋVæ|€|lÈ2Œ ÙRlÈÖb“ÆÌæcC–alÈ–bC¶îØÐÕ¤1»„ÈÒ¾ñVx¢±“È’¢2mªB X-¥P‘itÔi“’`ƒtÆ%@ ïL&6dó±!Ë06dK±![wlˆMF5› Y†±![Š ÙºcCW“Qí"Ë:ÝÀC‘ ¦5ŠFúèÍÂÊZ-¥ÃÐXj_ÙÊ‚ ŒõÄ´Jr¬Êˆ¬|pÈ2 ÙRpÈÖb“ÜÍæƒCŽapÈ•‚C®îàÐÕ$w»¬È’Á-¡£mh7ɸ"²¥dtá0jkJËœ[‘¥”Zˆ,­…^/²\>8ä‡\)8äê±É3çòÁ!Ç08äJÁ!Wwpˆ-—½mL›McÉe kõ‚j]-%.Ë©ÆF/J"K5Ò™‘eœ—!æ¨V—9†Á!W ¹ªƒCŽm ÀÛhÅR£ ÛübØj)µÇ¡Ò¬æLX£Q-Ñ6oa²ÐÌ4ä~4äJ ¹º?b“yÏå?r ?r¥†\Ý ]Mæ½KŠ+£9­‰³ i#¥ gâjYJ‡š¾ôÄw•Å•QíR #‚2ÃY¸|dÈ1Œ ¹RdÈÕb“Ðå#CŽadÈ•"C®îÈÐÕ$¼„È’JÛ&x½X†*qB™EVK[šh™NVdéÆúŠ‚ÙÊG£Ñ'‘• 9†‘!WŠ ¹º#Clòº|dÈ1Œ ¹RdÈÕºš|„—YÁ4AË`ëo¢j$쨸hÀj)­³ôBÄ’•…1ÕXAº®„´3ÚŠœÈÊG†ÃÈ+E†\Ý‘!6©]>2äF†|)2äëŽ ]MjÄËXYžb?0¦–ˆ)’¬¬•Òä*ò W¿ä]#²¢ÔÂiG"KD«¤ÎpY>ò #C¾òUG†üÕl'q9' ‘:%TjwT Þ‚ì­…pZšvVΖœ€OÚ\P&xc‚ÌÀSæá)ÂS•à©j†§a“0Òç·”ó ·”ó¥-å|Ý[Ê]MÂÈKˆ,c-¥÷‹åa°ñ£Zˆ¬ÕÒ´?“k¤ò«_š¯u8ä‡|)8äë]MêÊËÐ+R¤¬­Ä‚Œ )”h‹•Ò$±"$˜×¥X6Yv¿ÑÉÈ‚|ËívâóÁ!Ï08äKÁ!_wpˆMMŸy†Á!_ ùºƒCW“Eó"Kù& ãÍéw¸¡ Z¨¸lÀY)‰,M&˜-n)'¥¬ )ž¤ .dýÂ|pÈ3 ùRpÈ×b“ÐÓçƒCžapÈ—‚C¾îàÐÕ$ô¼•›èäòZÙ&·Üídµ”Öà ß(úòñ"‘契 ‘EŸggDV>8ä‡|)8ä«ù«Év xjM:3˜ma¬llˆ~A[¬–‹¡Ó$ê¢@€¥×¶u‚É­ó1 Ï øÁ3ˆ<ƒ¨ž†MšÓ ²±Kx£ü0! ±Ë «Ž]^MšÓË8ª^§Ý:’Fu¾ÑJ‡Å'"«¥é«6Ù˜V¾”˜VoŒ0š‚CÞˆ¨3«-B>6ƆB)6êŽ ±I¸ò±¡À06J±¡Pwlˆ­‘¥`ÕkHˆ%m™UFžÒ§¥iñEh‚pÅÜð¤ñín'˜ÈJŸñB>8‡B)8ê±ÉýòÁ¡À08JÁ¡PupÈ^Mî×Kˆ,UQJ³\ #Z`ìr·“ÕRŠ…FÁÓ“%#K6R˜V‰iFÃ%Î0­! ƒC¡ U‡ìÕ¤¡]‡‰|p(0 …Rp(T²l’¿†|D&0ŒÈ„RD&T‘ W³Æa]KB!&B ¡fLØ«Iþº1¥ ‘_”.ÄB”.Äš£t–MÆÕ=D†±‡XŠ=Īcöj2®®iIÌÇ"ÃØC,ÅbÕ±Ë&ÏiÌ3þ‘!ãKŒ¬šñ·W“çt&òŒdÈøÇã«fü-›ä¢1O³G†4{,Ñì±jšÝ^MrÑu˜ÈÓì‘!ÍK4{¬›fg“Ò3æ¹íÈÛŽ%n;VÍmÇ«ÙimKò˜p 1áJ˜p5c²ɣI+0s]ìùÅ;¢/Ä;¢¯:Þq5y4×a"ÏmG†Üv,qÛ±nn›Mòʘç¶#Cn;–¸íX7·}5{V¯ÅDŽÛv‚·6å¹mVÍmk&<&ú1Çm;ÁÛF›òÜ6 «æ¶¹äiD?æ¸m±ã¶(pÛ(¬šÛ¾š<ë0‘å¶QÄŽÛ¦Ì LÔÍmsIŽˆ~ÌqÛ(bÇm£MynÛ‰š¹m´ž‰‰–ä1ab”0a+ÆD›ž&l.Þ"vñ´)ïpÂU︚Œ„ë0‘å¶QÄŽÛF›òÜ6 «æ¶¹¤t"Ëm£ˆ·6å¹m'jæ¶‚ &B!&B ¡jLD6˜ˆyLD†˜ˆ%LÄŠ1a-—¤wNŠ\ Eìb`hS>†Âªc`W“ôn&d.†"v10´)£ä|Uc‚‹)e6&¿˜T…˜TUÇÀ¸¬³B?fc`Ró‹I]ˆI]u ŒKz7ôc6&uìñc(¤‘½’MaªŽƒ]MŠ·u¸0Ù8˜4üâ`Òâ`ÒVã’W ý˜yHË/æ!m!æ!]Õ1«É«¶.óŽ_Ì#¥þÎbÂWó@ëLø<&pÁ„ÊcB1Ä„*aBUŒ È .6¦QÙx‡ÑüâFâFWïà’ëý˜å¶ CnÛ”¸mS7·Í%×ú1Ëm†Ü¶)qÛ¦fn›†™ &l–!&\ ®jL°Ù»È¸<&CLø&|Ř€î`ccúl Ìx~10 10ªŽ±ÉõcB6f¿˜ …˜‰UÇÀØäú113‘_ ÌÄB ÌŠªc`lrýX‘YÁ/fE!fEÕ106¹~¬ÌÆÀ¬ä³²³²ê›\?Vec`Vñ‹YUˆ¥Lðc‚‹iu6Þa5¿x‡Õ…x‡ÕUÇ;,“²æºØð‹wXSˆw¤ì{µbÂñÉgm^NX†r–䄭[N°±1m^N8†r•䄫XN ñlä„ËÆE­çµ¾µ¾ê¸(›\?´{k¶‹ùÅ;Ò&’YL„ªãlrýØwØÀ/Þac!ÞacÕñ6¹~hÇœló‹wØXˆw¤*ÆÓ‰l¼Ã ~ñ' ñ'«Žw°ÉóC_)f»˜_¼#},•ÇDÕñ6y~œÊÆ;œâïpªïpªâxÌ .ù©ÎcB3Ä„.aBWŒ ëØäù¡•¹.6üb`) œÅ„©:Æ&ÏËsÛŽ!·íJܶ«›Ûf“çÇå¹mÇÛv%nÛÕÍm³ÉóãòܶcÈm»·íêæ¶ÙäùqynÛ1ä¶]‰ÛvusÛlòü¸<·írÛ®Äm»º¹m6y~\žÛv ¹mWâ¶}ÝÜ6›Ïm{†Ü¶/qÛ¾fn­ç’›ÚË<&$CLÈ&TذŽMž¯²ñ¯øÅ;¼*Ä;¼ª Þ±×ëåÄ%öX?›ödzíÉto7èï Ò5.¡º‘Qkin1äd£tLw†¢×Љ # f´Ñ´ô–0´Rzi µoô#›Vî¥:4; Ö&ó,g›ì$îp.ˆ8.æ±Ïo§ân§âKÛ©øº·Sa“¢Èç·Sñ ·Sñ¥íT|ÍÛ©´RŽ&ò[…{†[…ûÒVá¾ê­Â=›E>¿U¸g¸U¸/mî«Þ*ܳIQäó[…{†[…ûÒVá¾ê­Â=›E>¿U¸g¸U¸/mîkÞ*Üy>ÔJÌc"2ÄDÁEaŘ@¸Ø˜Ad— ÁoÙ`…eƒAT°lÐzJE´–¸ØžÈrZè%­ ,pÛ•M€SƒYpZÑÚÆ+Iö7a(˜&(¾µ>N$–j¼HÓŸ0´RzyºÍ¯&WúMûWt[à·Ë9z.¿â…5¯xôl²+™¥V‚äG­U V‚ª˜ZA빘ÇAå1¡bB—0¡«Æ„fƒ Ç„fˆ S„©ÐlÌc“¥`ƒáGÁ[ `ƒ­š‚e“])Ø,,? 6Ø\Õ,›ìJ¨>‹ Ç‚ ®@Á_5ËÇÆôYº-x~t[ðº-øªé66Ù•BÈÓm!ÝJt[¨€n+`‚³_é†Èn‰ÚTøJ7Ī9+6Ù•¢È~¥;m*|¥W—÷Wˆ .6fÙ¯t£ä÷•n”…¯tãêÖ5µa­çbOD™Ç„bˆ U„ªl0¡²Ë‹£æ·¼8êÂò⸺u WL`ìc&¤{±/š›ÊÆ(ZÙ.ÞF €BêEÜ4F ZÇ“0t#]t‹Ï¤4M„²Xbè¬ô+Bº«y¡~DÓþUH7jv¬õ… ÚQXµˆc“*š,µ ?j%šµMÕÔ ›ÄPÑf©•hùQ+Ѩ•h«¦VØ$†Š.K­DÇZYUÒk\5µÂ&¹GôyjÅ3¤V|‰ZñUS+lCEŸw£C7:”ÜèPµÉ&1T y7:2t£cÉŽ¸ÑyºüE˜ˆ9Lx!ØamÊc…cr‚‰‰~Ì-D»eƒ^Èü²AV°lcï3tÛÅ6f‰Ó¦¼1‰Ó2•u NKJÛHÈ|ÙbH†ØÐ#KNKë×’-CZ)ý ºm5¥ÕhÚ¿¡Û€v«Û¬wy8£°8DóØ‹l¾±£VЦ<µ‚ª©.9­Ð9jE쨴)O­ °jj…KN+/LŽZA;jmÊS+(¬šZá’Ó ý˜£V¼°ì¨´)O­ °jj…KN+ôcÞv ÝhWr£]Õn4—œVèǼíºÑ¾äFûŠý´žîÈæ }øa¢o…cÂz.9­Ð¹/2QÄn9…|(¬à‹LŒ½ÍÐmëŽ,§…^2˜Ä*ÚDù(Œ–²¾‰rIh©Øh/Å’ÐR.42$ñštVú\Ûªxû¯·ëßm‘Ý'ƒè¶üg¤Ö¯I¹¹ ܸÆ„¯ &¤àGªHQ U¤¨šTá’ˆËK™%U$¿-Ц©"eÕ¤ —D\èÇ,©"ù}ö6HY÷g\q¡³¤Šä÷ÙÚT Ud Ÿ}0ÁÅ–Ù-PÄÏ–…-PXµÍ%ú1ë@K~[yYØÒ…8ÐY¢MÒ(óÀD6ÓŠb¢iÀ˺3 pÙ-ý˜Ûæ Eì¡My~ÂË2 XŸKÄu‰ïî „V”ö”ö]Ùˆ¨¼¶~Aimm϶ߕM!ñÔ„!c%%Ê"œ¦íwÏJ¿‚k+&âú/4í_Ñm’ßnL¶´ù¹­|ós.‰¸¼ yj%0¤VB‰Z S+h}à‚‰˜ÇDdˆ‰XÂD¬‘ &Tv7&ñÄ*ìÆäUÕ»1.‰¸ÐY VñÛ m*P°ªæÝ˜€ .¬’Y V)~¬R V©š)ØÀ%ú1KÁ*~™¼*d@aÍl\(X¥³t›â·¥‘W¦@·)S3ݸ$âB?fé6eøÑmÊè6e+ Ûò˜llL›ÛUEì–ˆ¡Mù]å½Z]Ø_!&ØØ˜.·õŠØñ˜hSžÇDaÍWy~ßç*_ø>WùŠ¿ÏõŠÒóÀD6ÓŠb¢i€Vc׋ ¸d³ò*›iEü–«B¦V°¼Ø¦dŽkCºß”ì5ʨ…²Šâ¦Áû Õò++\|¦`U£i{³øLAû !,öY)½|H7¬æáúMûW!]-ØQ°6e¿Ì…t)!%{8çE—D\ø,µ¢?jE˵¢eÕÔ —D\èÇ,µ¢ùmi„6¨­ª¦V¸$âB?f©­øQ+Z¨­«¦V¸$âB?f©­ùQ+Z¨­«¦V¸$âÂíY7Z~n´67Z›ªÝh.‰¸¼¶Y7Z[~n´¶7ZÛŠý´žîÈf@CL2  °bL@N°±1³™PÄoÙ .d@aË1ö™D\—ÈHRæ´”±Æ´œV0aù™F¸ &q×-†#¢§%¡„!ícã„§:-ý º­˜ˆë¿Ð´G·v«Ûl(%â U'â \qaàóÔJ`H­„µ«¦V¸$âB?æ©~¡Mjňª©.‰¸ÐYjÅ~ÔŠjňª©.‰¸¼‘YjÅH~ÔŠ‘jÅȪ©.‰¸¼QY7Ú(~n´)„tQXµÍ%—7:ëFÍÏ6ºàF]¥ÛŒæòE¦Ég0 3 ˜R¦óƒ3 P§kÛX×D6NÙH=GÖÓˆÂÚÏ´]ºÓÈèÄêv5+TÄ~>ÿ„öDkƒì úÛPz< +]£œÞu•lP‰N Å úrÄ¥¢ýÍŠä¡­vó€ÿpe?í4ß-eÁJ•~TµuRk cTþ1þ!%õùÖáÿuck¸=K¿f“­Ñþ»1îï·ŽFÃé©oûôüƒþÎ0õ=ÓvþµÎÛÉtk8]žuéÏòìbP0~Íj#¨šÓ"ñEÑl·¿5ùˆî]9ÿi2Ù§kãâÏê+cd”“N»öŸGåÁ6†ö+ç·&ƒÃ}ôLï°íäƒãÕ›§S*ÛëŸ ñ>éÜüq´5ßÅk¨@WïG;»óÓÃÙîäãΔzi>=®TF'{“јÓ–¥kG[ÃÙ—WÓéÞÛ·“ã/Š>ŽÆè‘Þi+èÔÏ —j³À}VxLYÎÄ—çihäjçÌÆýƒÞÎÞämï·kÛý½Ùšfì÷Gû£Oí4ÕÏßJã·hþb–ë„¥»øqg:Ù< ãžçóÑxPœŸàÞãºS:ÚÑpA}Ü,Žfžñ md+çNVÏ-QIZ‚°:Ü?øüÔ Uº`å„I''<f£·{Ë7ì Ç}<õÀâ zšˆ³ÉxïdY¾G§s, 9½ ן&c G}z0™ÚÞ ]Ú6RˆXhê¾tÌóï*„Æ€PS´¹¤°Þ¬T«ƒ—«Vtåjµ:4ôá‡4Ýž7 !mâvÖ\}º5Ù¯_Š˜t~8ïoõçýt×òózéùü:ÝÚ¾ñÏí;§úb0¸ñr2}ß¡óý·“C€ÿT?¡xkpƒqþûh¨Ü˜í\?Þ߃¬;-8w1Á/Õ5ŨNåÝùüàÆÆÆÁát¯™Lwp'þ·?¢+7žÎG{{÷¨æ¶¨i4ßþžÔþ\¶xcÑä¥ZZy£_7–¯œŽvÎæÕ^ÿí“ñ¯ÑÑpooÒ‘çÌäð`²5\Hª…†h…Öâ!ýùîRy®˜fÖ ÅôË6ÞâÔ¢ƒåŒÃùpzoÿÓÿ´¿TjЍ#u£µîZü¿3àAü¦cb¬±ÝD»s¡3è@OJ »7ºc«B”±Û“§-Ê:¾Û3²ÑЮ¸éB/a²vd›ÖG—ꨣ¥Ê,´r·§ µ§{ ÎHE7áLÄ™ • žÎT£Q ÝÿÇYÛñx*ª +xœê(×Ä D­¶€µ1v´i/ïö4)~úCÏRÂ¥w£†%•X™ö ÅŽúóÃé°5ÆNçBØ…î f³Ù ýÉû…Õ"iœD´ «%¥‚±* ˜ÃP —lƒM›“mœCÛò­D?m`kÍ­´˜l”ÃY2(¥1Îg'‰Ojè!A-u&p£%úèVG*òQœs"*ãè”…¿dNEç…éTº}g*Ìà)¸emV‡@'M#|´†NEõdÒ9ãhhõ¢–öLHõ¹WNÞê8ݤÕþrå¬Ãø*TéÓ9o‚ùФ2Ž`”n tM:Iá Õñ-nµ0S˜¼/N߃°;L߀—0 ¼…ÅûÄÐH§dô¨0Kd@7‰¸x èV™p2àY”£Áº S-©QÞ7ÎoÕÊ)t…\‚µ=µìâ[í)aÍsêà b:g”V>a±}ÀéˆþuÖ»+ƒ¬©Q$/œÖ鄆9VÏœCƧΩ§ðu’MCNü|6µ´&_)çR7uuc;ýaV·rÝÓ_‘þB  ˜â ¤sÜÜêe° ¯/I¸uÀÐQúÔ9í.ûoo)J©ŽÒãDû$ ùŠ2˜˜.‰^’ˆÒ uÀÒuÛʵ¶­ï 4Ä„ö6GÀhpĦìÔ“I»$NÛ‚péÊP©RôV+ŒSó-j&å`%És8`Î$% ‰1¡{VnÀ¿˜F­¼—T5ÎXé¼Ow ×1õÀâ).©… álQ%˜Ii@Tèt=-tD+èD‹%4nd«Ç´ötì£s‹vvÚѦƒØâ“Jšt³íKAµ/úhõúЖ+×>Ì+Vùé勦¸TˆOÃÝê¡¡R–c–.®Žxy‘:“Y+L ZÈ@+ qÉaÛ!› º Ú:é)ʨÆ0ýнìBMŠÉcÒžÁ §=ç!jÃE#Þ6t1'0‚²"ÿh›Nç„!M1È(¡[ѾM»ÍBõ¤.ujPâ. !¶}&½q²9„LgœŒ’æ ºÑwzË^NsW`ÉÅÕêygééT€Dî% RÁß[c®Š¬­q^d-…æ¡0™ /Œjï’¸pdyÅÖö2½—“–1žŒ±‹˜6u‡µ2ÁP=µP§ôצƒéCƒv¨¤£¡Ü¼ÕVãÒ2B¢ò>¤O×0`VŒ1Aj²jŒ‘˜Wx ®¦Þ#9§!ÏÎ8ȇ–ïuÚÞN8¢ï¸mż!Âx½í2H¶Ë%LŸl''Éž)Á`™žù9Óïž&¿] ɃFf‚˜ÆÜŽ ¡{¬qI*ÂpçNZÖlîÊ ¶ §**˜Ê‚d”®IBÚxèpÜ ëC§ChdžT‡[J$¢S+Ìt3ìÙÖ%Ý’¤K<«dq= ´t‹ " ‰Ähµb‹‚ѤX5Ü™ìm PK„µ0F’ì 6Àd%ÛêHÒ³¬ÉêBSqR·¦-i;Ôæ\šˆÁ$$Ê Ú#I\¢ÜÙCÛÕ† ¢Å‘A »nÐ ÌåvNjßZúÔ£zÙÉnåÔ*„¢óßf!ÏZ y½}»Þ ¾ÄÏ,xbe~Âôa´$©Õk!Aâ4®Á#¼ra0½†= 30pªé„è-üš®%º†1ÙÎz¥ƒ'Ç åŠnÀOí!…|GÛ†>E%u‡Ÿ 7Ÿô/¤q‚¢2d+‘›Em´ÊJj²¡U^ œF¤Y`%R¬gþX¾pŽƒqVÃZøåLTŒèï’ª1„žøRTäezk†¦¡>}2ÌÏnJ,E'1rèYaháñv¾=ZÐ)é*-©®UÖ—ˆƒ-Ïq0Þù…èZ˜£7ÿþç£xpwg²‰?ž>ßýãù~ݤÃÍ'·6_Ó¿Ûa#îÒ›>ºõôÅ“{·6wîmoî¾ÑÉãîÿóÇç¿ï©Gïeœ<׃çÇ~c¼¥â‰°Gƒƒ»û£Ã—ówûvúFL^<ÿà_NÞ”£­‡vv_üq÷ÖÁ¡¸5Ðâ®|9ö¯í›ÁÃãÎý£wãg/ïÜyq|ýùãáÉÁ»ÑþƒÑ]qçƒüûõôÕõÑ»WOG“½ƒ÷×ßï?Þ6¯7?}}ší†Çv|{c{`FoÂ3ón2îÛΓùtçöÛ£ý#³»7=˜>Û}výõõ§¯7ÅãÙæèýÑõÙË?ßïËO‡úéŸnú÷³‡/ôû¡×?ÍM¸þòæãOw†wÞß{zßèÎÍÑëÛ·>ÉÇ£ï>Ó{òhz¤ÆoÃÞÝ;o޶vÌáõÙäÍäÃ|cûá–sôîøãÎäý‹[/&ÿè—ƒ0Ú¸>=Ú»>Ú½=UÛÑ£~¼9~÷a|{örzÿúøäAÿöîÆÛ¸uýÝà™NÿÚxv}wÜzp¸÷·»o>^7G7ŸìŸ¼øûÏуƒÇ¯^„£øúÙ+ùøÉ?ñäõæóÍÇêþ4>ûGÌŽw'o·§·^í¿y||(Âãg““÷Ïú×§ïŽÝ›·?>4¯¶ß¨¿ÞœœìŽ>ŒÿŒÊ¿˜¾{8ùëÏÎÓþƒ£'ô‹?!½î½=ùølg2—:Œ'ûï^ìÆ7?<ß=~ùæù½ûïïÞþãÓèÁîÞëëý['zzïøÃ?;÷ÿ|¦¯nÞ /UçM_=}õâõÎÍ[w_=:¾åãÛ›¯ÕñÓçþзÕxl®¿;4rãÞæÃÛe<>ŒÇâÁчíá›ëüyËÞ™Øç[NžŒ6wÞßêü1¸³7·½Ÿž¼Ùéý‡qçúÖüädºq"Þì>—³—GÇóÃ[ýž>|òþæíÝ#3xûÏnØ?ÞòóðèC¸ÿèî§Îñï>ìßÿ½þzxsûý£“þt¼ý÷ôí«ãW/ìíáóÝ;›ÈGûGqözg¸¹ù²?>Ÿ~ps¿½ùøŸñ‡[ñÍýÛlÞ|Øyw}0{(åν÷=Ûû°Ù×ÿ¼v›ƒ¶>ÆG÷?ÜÿøáÏÇê`ðöÑáÈ¿¹ùdsçÑ›ÉÁ»›'Æ/îÄ“ƒ¿^êñ­?l=jëfçÅÖ»ÉÞÍÛÏß¾Ø óùÉÍÇ×§Cé7ídóðÍÉüÙ{ÿüøz|¼ÿFÝ{/Ÿý Ç^š¿öÆ›wß ^éà]§Óƒ?^?»t{x}c8|õ&>Ø9ÚÙT¯‡ûþÝõׇ¯žlÌï?ßß¼}kª†7Ÿß ï½yøñωV߈÷›Û¾zxp¯³5ÿËL§O^}xúìøÁÍ»ó££O·ý“;qеýôæëÙæÃW'áhãñßv¸ùpçÖý»ÿF=y°¹§Ý~ð·üäFòq’/ìÝéEW -†`ýèDmÙÖ^‚ ‰ AwR°ín vM„¼Ñ®hy×òýé†^{Ç9+C©o™>K†²4‰’JXL™5äEìÙŸW´Kn¤Ôë‚> Yž'É6Þx{8Ÿ¯ž{7oì c–gÓÁÞÿÜ0ËsŸÏÝÞV¶ÛŸNû'9¥!uz®µBìA²C A9“V- FX¿Ñ¦(–Âôô+|\ðÿÚ|ä%S«Ö*JÊ eäRQ6ÍA˜C–ð…ŸÐ=³.þ|ºFeç÷ÿüJ+F~ÿÏÿ?‡p†keepassx-2.0.3/share/icons/svg/application-x-keepassx.svgz000066400000000000000000000737561276304217300237060ustar00rootroot00000000000000‹Ô»×’«Ø–6zßOÁ©¾é¬•xW½wÿÁ F n:°á$xú3Q.[µVíÚæDœ?32¦ŸÃ|ãs*ÿúžU MI×gMý·_°7ô(©£&Îêëß~qìýGö¨‚:ʦNþöKÝüòþç?þúÿ|ü ] I =²áIuÑGA›@ÿu†öWy<o٧·¦»">~üŸÿø¿öÓ“Öý¯qô·_>µnÇ®|µŠ#$)“*©‡ÁÞ0ä—Om£¯m£uÞlJ¢¦ªšºu«ûÿüܲ‹Ó/M×E<ˆW Œã8ÅÿZ|ìçzž¿éÖõ£~8Š¢¨ûÔìO4ùõY‚ÿt ¯Ú/“I·àçKëÏo}3vQ’‚nÉ[ ÈÖÞ~©üˆ¾ÅCüyŒÏRþnÆïD_UÒ·A”ôÈçò_€ÚâáTŽ ß’ìz>½dñß~»Ái”ºÿ4å¯_l}#pÐèÓ8ß–“ì uGp¿üƤ¾Œ7Ѻ˜¿ý´m™E@MýñùqIº¦Ï–ä Ì»|3x3í8üoò’ú}8°oööª~uzûº±/½“gÛtÃÇ4+“÷I‘¡j‘og.’¤ úþù‘ÀßÚúúû¾Ï¸ºÁñ7ê÷uó׺ÿùúkœ¤ýKxëû*@áIк ΀]'jÊ2‰€ØƒòÌý»ä¿oLpñi0P?4-ðƹ{YŸ?‚šî×ÿL__ÿý*j€ž³aþûï_ &MûŒ~R*¨‚­ ÿÔè7Cbß É|ò¯È÷ø‰~¿Q–cþÄF£õû7ýñ>YŽûÝ>¿®ý¶×…ã E0/¨ûýœìúý»9ÿ„Ñ$MþH+o N CqßÊ%þÌØ ‘` öGc³Š“÷žÐ?¥ú(‰Â(ü©¿ñ_×<Ø/?Ö¨"¾ÓîŸ7‰?¡žëõGVñÍz~/Á¯•äw݆¤bÝÀ?`?{ÅÔ¯cûÅq”$8öÏlãçc3ßi÷Ï›Ä?¦ùö(ŽÅÿ­°$ÿͰ†¤ÿeã')ŒýûM’hàÏÀIáèO5MqôwVD¢¯¯«<%×ïƯè”J©?`±ø¿Íˆ^´ê×[—ö÷Ÿ?ò…£xbû…똱—$Ÿø§WðÃèUH+ˆ^?õqêl$pì“ÎZ•^;}òuk« ü×–û2þ×r¿ ”ƒmDÏ¿ýBƒeGóú÷ EIëK×bâႽSPK2o8C²$€¬îõF}݆ÝuÈeõ·_ª`è²çao4KâJ}ì…qÀ#Ͳ4ôöF0Ë’ô‡€èaƒ¢ø‡ûFÓˆcùÓ2ŠÊ¬53|~øIûUŸ›Ð(÷ j×Þßȶ®l›îc4vS0Œ]ò,>“ꉓan0GE}~½Þ¾ ä^ŽƼ½;Ä<Àp*! Èí ECá,^ˆ7bVQQ4I³x$Þhˆ}cXH Cw ' }ÃI”õ÷ÆCD)gÞ@dFÉÁâ?Å@„aØIpô–~c@0!0P„`É·uZ†xlRß¡å‹ãŠ[~¯õå‡(ýY˜ŸÞA»!éþ.¿7¢±Õƒ€‰ ƒ¹i` _ˆ7ìt-˜ßëq”&™Õ³¿d@ÎpõEƒirƾςzSŽ´†~ˆ·É”½è: ÛoK£óÉ?¾…ƾÁ¾¿"ï+ÿgöÊ`Ÿ÷J2@ŸÁ~³Y ,[ñ}·¶ŽÒÌ×Ýâo(NQè·¼ýŸÜ-„I¢ Iüx· ñ³Ýþ3F°,÷û¡õëwýò÷ýﳇ*޽<¬úbÂ(‚'ð)ôùFÒbÐG€CrVÈå8 ‡>R¿8ôx: qj-ÁP–"?k/”…>bäH71l-"pŠ Á8+¯FqöÕ ¥ Ðj4ìõưFq+M±ôŒ+!)Žƒ€óâ‡ã@ç• hD‚f>à ¯ÅqòµÀ ×q€² |dþ û¥X'ðï €Ï’ë À A24@„%W¼$Wle1ˆªÅVA¾¼›y³akú ðLà ‡À¨(ÖÉp+P (§WQ²``ûô»`é7Ø+û)ÿ%Æ®ü¯ÿü]îEüå7°âw× P}üBþÑùÅÿœ7¦üQ‘è›|!!òoÇ+þ±8¨ÿ¿‰cñ5!ú, xÕפûÁ\Hrÿ2\¸&B?çÓß³¢ÄÏðòßÁÚ^'5?`m œ{gm&ê¸aÚAÐ\(Ò¯5é÷5€´v¢ Z¬Z 3ŸTûùmeÁ°•›o,Æ’$öçYÚ?¢=§ÿõ`÷†ôÇ®‡’ÿrX'Xâ_çUtUÕ–IÐo™_Ã0Ü/?Ÿõ§Ëüý¬ ¤ýÞ¸SQö¦øÉJƒ`«g¯œ€òpï^q« È•­˜À¢+¦9ú0°5N½zü½~† e@ªó£×g DVŒ‚˜ý÷ÍôGG¥+çü#´ìÏHäÿj`èÿ2øÁF†õ± †ä¿°•<á C2Ç‚ì‰fñ¿¿öAª?ÚöŠùÿ†m!Ο™1úÕ;ÐãßÁóâÿè+O@¿ÉtPôkª€¢?'N_–Ò&]ß‚³)y'Ì_ßq’%¾Yô«†ˆ?6]vÍÖ\ˆ„~…õ¿¾½ŽiÿwÉ> Šß|_·.z-1üA¿¯|¾W~î÷…þ¯Ôÿo¿üv!?§=¿×Ï*þŸÅãó÷ŽxqœNpâïhþ 'M!üü„ðÛ³lœþã³ì¿"ë½ÎëékbTI—Ò¯¯Ï¥ŸÖõé¦ì«”Á0_ªÐßUõ· nÀ ¾)_š¦ZóO0IœùVó+ý À×0r÷×r06Ò e°oËã&×;Øã»÷¶Ïo;]·Ö•Áœ€í¼þ`ßÞ'®­¿¹Q\_û[ó¸v«†nüöŽn-üØ6Y½Nó^÷j;fqÒÿ¾õZü1 ›çïªY òñó*@NõûÊÏ‹b¾ Ÿ*WQ¿/Â_Ääsy_íÇkÙ„Aù³ETÁ3«²%‰ßóàïz®Êû]¿÷1(À–Ó ìW74?‹ä½þ·8²v~á<컦2º%i+†¬¾ˆ{wâç¼6ð‘ÕáWí¼¿ÍŸÞÖ›bÐTb߼Ο^?ñzP¶švRµ¿-úÆlñWƒo ÈWÁ§1_æ;e}–_d’Ôxûb(ëî?µXW¾ºeßÔåü¹þ³Ã~qÉ—˜ÖýÌÚ>-´MŸ½¿~¤Ù8·p觃¤W'’¢Én@ ™7N,ˆÞ ŸÂÈÏñÕ—`©ÏYÑ_‘ßCÇ«¼J† †àÕëó NcŸoÆþÚÅ靿vÿñ¢èW·é h-ÂfVýa×»èè×5LÃÿd0¸õÓ ð³*†}©ø®ñj¯±ºäýƒ?üdFUÙÚ±†¬,¥uäoPøÓHÙP&ÿóšèýñóŠ‘OKþŒ°ßìè¯Èç-¿Þ®_¿ ¸™ ÂaY6ßE³k׌mÕÄÉ'úD ÞÑèÓ$ïÇXïqáËuÎNã~¸O_쿟Ÿ¾_‡üö 俟›|M%þòùD‹ùÀ¾QàrQ,€Xæý¸Ã0Š¢è×i…³ \ƒ£¹õ¸˜iò> ØÍšy3IâöF®'~ôë䈼f‡¢qœãë)³ö!A †¯H”&×ó,–ÀÁįd C€aÖà÷ºˆ³‚¡@²Ï¬gk4˜†™>AbÖ4ÄW”€{53áë$8Hç_s¬ç¹ë´,Èêû KÅÀ$ŸV†½v½®&ÉסÉ14µˆ14¶Î bÈTP”pë&>|¤ÞØõDïÓQ6ñ>Ôû çòõôâ8ô;êöö÷¯Ãþèuà|gên€xcÿänà ¿Ú"1ö¥sò _Œ^uÊq–b±UÑìko K»^š€P Z,MMÓ«.ÀÉÖãÿUZà‰e93­‚AÑÕrˆ7 Ž ^7 )x$?°` LI}>$ÁL@ðŸN‰Ÿ^üÈÔ ¢(E@QŸ¾ð?¾ý]… ?pÁ?¼¦ø¿õ 拱÷Ê韖Ùm×ËËßÚ~"p¡¯“b€G4 \ ¼åÞÖÐØzB¼¾P@´·Pæ£Wÿ]ãå,”ÞN3 E]›zýšþ p€“Rô (Á’ëm!˜áÕ<Ø D ÃÐô áP€0hã˜wÈ£†NCP^8B9ÁêÀÈ Ü´Á7}©ûjĽÑÈ÷@!G9jE, u”ɵ/±"û ?ôØ  ,µ"*0’]Ñ÷K ¹ž}(}©{‰Døô„1Àqúåkë5»Š<¯‚ýVéÍükèÔÿÖdñãúòæUóßÞ‚þå—4°ØõçãØ7ú?pëõÖëKLAüé= ŸîièO÷4À—>ÝÓàpOÃ|¾§¡¾ÜÓPŸïièÞÓ¬ï H‘ëE ñ墆ü|QCþü¢†y]Ô° âÓE óº¨ùR°ÆRŒ ÖKmŠØ FeYÀØÂ+¶­ß ˆ½.{0Žå `(Ʋì +À‡PЇZML ,k5|œñ$€5£,¾r+Ñ@ì ˜þñU@þ’!X (€D’ „Ö'–b¸5F£œö[3Q”øgÍìË…ÝÏùÝ`^Úÿ:'Žqß$Ä×Ï=â¬oÉút1´6Þw€ÊþoÔ´3á½výœðZ=üð¼%W‰¬|gÀ¶ ‚å OüÝLY½"ß7c.x1l‚cØo™ï‹ïþÞE¾¹°¦ÖÔøs*øzùöähe¡¿¾“æ¶¾þ÷šÓøÊÎÝ| ÊáÚðàK³œÛι‚§¼¿$Fà/k¹‚•m¸>ÞFr½#xê-ðKÝ]E‹ðv­ƒ6‡xc;;0LxÁvÜ帴)Qó|Cœ«b1¾E•ß\sºTÎÕr±›Ÿ-ß݉'ʾýàù½EZ޹Îb02*ÇÏ.,ª`»ß´½Ç¥‚°Ý£¹áþÇRž²ííY\O.öCy Ã]/Ycêí£ýEàåTèF@úùÎvH:8ÌŽcu¢Iãš¹¬ÎoRÚç ~FHŠ1]§3G¹îÚa¢ô4.˜Wì…ëU8‰'á‘n2˶šw9í® ©Ó1+öåοëÓÙ€{)o¤/Ì<»59¥„éDIWŠxüt µjå­3\S1©'êG’PÜÎ. }î[¯¾?{èP+6aÓJJùÜRtÂY/ä{æoxiÛó›óñ@!´k!ûúe„íÇCѳä÷d(Ôs7ÈÚMß?oÇ ÄÀg‘L8Ç@Ùn·Jú(ŽðiÏÇWA¯ªpP–»Ü4y>Ï0aZ‡ SÉQ=+î%‚'̦ãà.ôÜ‚*ç6·Å¼ÇìÝ‹Yñ Ì#¯Îå}>½¶z©ÝŸó¹µ]sT 3ñm4±Ô‡ïr¨Þ£y:6˜Ô}â‹•+¹=Ýâd’B»ì ­ñ·ÝÂÒöª?ø’wë2¦ÈÉ¢‡V¬Šñ8ï(ÉN6 ×ÂÚîro¡¥«UW„ ”ZÏñ2§.ýäÌo÷F8 %#Ù$?óoyÂÌ ¾ž[á‚;ÕÈ¡ân4¹ew§wl©ûbda÷z©³Ô)xŠÉÛiÊ㘠Û┤ê"ygWƒW¥mzä¥ËkšëÖy¾ïj#Mô:NÀ‚Ú!ËA+=‰Ãåd{ö7NÊé²)†%­¹0½.ó4”Çï6« “ë ³Õáq@,N UK0Ÿ{3]H«>G—ºf¶ðe_tÚ}–иÓ1ÎTöÂx•´œ2Ö˜$í¤®¦ !;ûS°X°Î3<ßÚeL_f'ƒÔˆ5œ4²dCò¥©Åb+ÎóÁqçÓe}Áœ" ,èdГ¼Ð;”(˜½¥O{”d»¸dÃ,Ù‘aU„V+/;™­å¤>TÜð,.™6WA’pö$oYœ rV`\s·*ÆÉðx†9¦!ñ` ¥fc)§¤í¼®x‚½†QÎF 0”[5ã©ÚµQZ®Æ2÷fДèÜÈöä±w´ ÐùHP”gÓ‚¶?@lPçÍe¡[3^«#ðì?á`ðÒÝáµb3ê¼Ó.v6!Œnª¦8ó6¨¯Ø‚C»8¿Èä²ßCAyQ˜n²Ï¥²b«¦©ÛâSJ[Ÿ·ovVL¤J¢¹F"úÌ#&š…1b§ItÂNNOðS#p nÜûȃp­ªo‘åì òÝö´½laF\Ò 9é¹9N~z¡ÈéXÉNût³¤Û; §©C[Æ>L¯Æ.U³Øm13;ç9ÞØ©q¸¶‹–ô(ø¬ž¼gÂO¢ ןW=)-{wÄ÷ñ£nTïÈV2d•¦½9¤lr7íHi2Gˬmϧên×Ï’¥Q’È‚"··ì½±œˆ÷¹ºË °þí©01$š.grLX—Q^ã[ÅI~>Fƒy8¹?éh°Œ}Us“¡,醔ƒkyRªm·T‚ºlS!Žˆ a”uÌ®Øþ$Ò'íhþª‡êÀõ–õÚGxèliiýìvÄ{e1hr öÛh:ù^ÛÑëoQØ=sF9Ù,$”M;,ŠŸ=ŸÀõý.6jN¢p¤L‰T•‰†RÎî8;ç‡Rj¶¼ ÅÙœá¨Þµ\’de”·'%ËaráJžË§‰çFÓ'±Ø`|t½[íÞÄi4åËù@«;´Ôµ`³† !jZËV‰ûðÁ´=Þ@¬ñPäC¦|Úòî:Ð#×Ӌùé'u?;¨÷Pe6jÏĨ 禳 ޼jo5Êâ㾞Zâ|·#,Üdò­#½H[ƒP;™^[V¢åé•óS÷iœÔ¨UzþfÆ…)Sê%¹œ<@âÛXs¼™Enô=gÕeá »}ˆ`몧1·vw5¤íÈSÛÌÚ­Öã†S”.1HÊ»ßîÖ^If˜ R•º…iÙØÞ{B\Ñåbu£{¥­€±h[I zÓ¥üæ†÷åa N7>¶'‹8°±üFVo;6O®ÑI°{œ qF†“×>±+dJˆTòZ„:(Ù¶½ ì¾U‚LÞôóX„f/¸£8ÖϧûdïWíªyg3—ºY@BÄx²æmºôh×A0,Á•4®Õ•r‚¡PçÆÜÀG_YPÿb_si›=¨³ûíV“—2*õ3¼Õôä IÛ2y0»Z?]uO™H£Åû¤¤ö7ÏN_Ð Ë©ˆÖ RaԇתMC0i"+ù")/Ó<¹‘PæÝA~×—û†ÆCød£ÐŸw®ç¹÷œ‰J«Ö›hg<>Κ­Õ£iÃÓaæñXްÐ2õ6Ú ¹wÅæD#vvvn²#6êK>€ªxûÚºÐ^ÝR»TY(<»OJèÝ}ʺý³ä`Uœ\?#"Eµe5TÄ'¥vn·W^K÷mf,ê¹S;GV]<éÁÈŽâ’Xâˆôêe5lüÂx}¡“^dõôeÞ»Þ«nDݶ6N›FàZ<\ªØ·¦Ð ³f63Å’î“âi×QµVpEk ÏYÜóþa’²õ_^ÈÑ\WÈÎGS¤aVsîŽQ÷]€KuÚЦÜ(ÑãR/f]>¨qì[uQÍ]\Á¾#©À†Ð¢í¥¨Æ # 91Oj·&>ª¼%ÌQl]¼I(lØöqÈHà‹gUµ.ð‰ž½Rqn€ÆØ –A$g™òFƒøÆg9/Ï‹ONDf%s=»ˆ£q)›ÃÐå¨ ˆQ=ͱ¢ fNMjar¸*Ü©¬JÓóNÁIPè¡_´f$HyÁ—sϹpB‘¨‘yç1àí"§EÙ°iÁéðÄÂ&¾5„Ég¬jV"V!=~Ýš¢½ÄÔ¥ôì&N‰ÃzŸË½[ëûcuƒh3¿²w¯ž²WOysÓ“Î3ÄÈa\^ð°ÎÀ±JßôXÆ;‰*\tW‚âörDûÒ¶ ¶KëÚ… eYÄuqß'µIY8—W* ŽÈ2o ãxÕ 1 šçxšB¸Ð‚•HÆé V)ùäò \ê3­»ðùKì!ËPt`j@¨E$ŸIé§Î.¨¡¬Ä&pHÚŽn©”l“ÁÍœ.„{ÈjÏ­ y!è1‰·Yb±ëÕê•#ëÑ&œyLÂܤÄçcéHø–§÷”øœ˜ˆ™­ÒÁf¤–,ÑB´Ìi¥3|èÜYg¤¤ }n‡$V—J8±pW×7ÿ$B…Ltåm6Aì›+8lR»2©}nfæýÔ0d4"ÞedX>Ú†É1è9;Á1%Ç2)|dÜêÈšÇû–9òÔÚu²Üæšgb\®;rp¢øm³Íã¸d\1´Ñ£h—ñig1M<æÝ¥4d.6%¹e»XGÃC U\»{€šÍæ¾cŒ„Ã\Ÿ¨›ÓDÍeˆ1ÊfŠÄZå¯F=ª¶¨¹¢[êò¶Ne—'ÀÆ`±næÇ‡Àç|ä"7®ì‰3¶a §ÄóY¸;·¾¹fÝ4Á¼cúÝÖÌœPQðZçÐ kµRW.vnåEFì’ßm9¶¦;ÅU—r9MÙY î‰e"&@‰ýÖ=Õáu‘¥|W°x²‹8Z£#Ç `VòaÞ#!‰sÒçB¿ðÐC²s¡S»Û.%¢g§4bA¦ î[ˆÀ¦ÂfÔ"fÔ45bì(•SiŸf¼¿sºoõüa3Ò!ˆ‰w/[îΆû8'@îc)XMvíìFïN9uÞOyÑN\+L·Ìñ¹‰®›ëÄc €K†!gZ¬UÓ‚‰,óàmb‡ÊrL# ¯=NJYÖÈe²íÚI××a:ä&ê’7Ú—*G[Þ8Âî–ÝG S’»ÕøuÂ/±;7ªØd¡»2,Ž1TŒ’!aå+r^Q§ Q Ï©Æ_6vk?C.^¯.œ¡)D1äÍ8d¤×ädï^TÙµøÖß‹8[†9û÷Æ–“~ö§ »RI°›WÅó‘âN„ßÏ)£Y<"@Wxá çTã-ˆŠÖ§(‰;ðÁ« yWQYNØS'ë;¿~¤)@F3z¿ìu4Ýéìæ¹÷©ÙEï‰ ™”ºxiàmv¾6vÅy«~ö†íÕ®UoÇ€D¬(ÖN4bØOi;<®º%1ÖÌ£Öuünñ0irI4…*´èx5ÛQ +…Ä W2gÀÙtk¬ò›TŸ÷H>à1‰bâÇôÝŒöf7,}»ŸÑÛƒwõvñ D—‹'gÄRùñ$>È-ª2‰ñjÚPÏu;å· ˆVq>’B? NOuU÷äâF‡äÞ,åyè?S¶ÌnÆŠÊé13Ö*Íé~÷\&þølZ½-¼Î 5šäå1e̳¬æ”›Ž¨u¸5!ŠªÙ‘Ù "­ß/Žx ò67*| ‹h4Þ— †çbo¥ÃMÞmüÈŠwdL!I¢©Ã™BmÁÀ¢ ½ÆB7V|®a*†™Ç(TX—â>u€ñó CA|L‚@É)ç¢ “®ù¬ÎÈÜY6¼ƒ@T™ÏÖ‰&Z™|t‘û ¹c)Sz;Þ±sh³ö{OL±í~$Œ h ¡TN´;ÓU‹³KPڞ¦I=ŽZpÛeˆRÅñ¤ܴ帥˜¤qaábÈ’]ibö&Îm¹†bOâ‰'5~Ä‹‚\é%á©C,”k7ã˜ëK:? 30Jâ.óÝ‚Ô#§cß…wF–qË^…#Í‹uaµÄ&¼Qé„Ò2ožJ42Àº‡Ÿú£U›¬y7¡†QϰÚQâajÛçâªóÚL³{«rµ=X§ÔºpVÝ`t–‚¬‹½kÑ}B½¯ä–Ò4ŸÒуç¡öZ’ˆq†dìF¢ èˆ!YM·,Øú~Ö 1±aïJ› ­ë¤ƒ‰Ïõù’‹^àOÛŒ‚ã»È"Š¡¤ ´Nƒ…ð–xæ<£4q%ãôÜQé³–Y§õÜÚbQ¶k—ÇŽ¿o1 €–„þ7¶âWÞ4¦×íÊCºC¡úªš°å:Gêuòd¶uy~kß„´#±‚:æG',©Œ’Ä`ž¼t~ßošÁx¦$M¢Ê¨½I¼o“º’‡ÐèkXÍ¥énú×öú`«|‘š3X6žMu¬»17x Td[°ô¨µ¶K‡AµYj>®;ƒÖ~Ü`ÎÊÒ¥r˜÷K£#vÁ¯(Z£1gê¢ÅŽñKsçÜœ=¬·‰p¡FSâÔ‰8ñü‘Ì C™„.<ïÉ~ß©Cl˜®¯³›f}=C¤YúhÎ2ñ¤˜ »…0ÎÕ©NZz4Q¾ÚXSxbÞÔLZzMnìI¶4ÏóõŽ"c]›ïTRÇ ÑðëD·Ë¤¬±êºy˜zöÀ¯Lý¶KŽœ–!Š·™1™Ôaz²ÒóûÌÉw“s ÑYgÑBÓÎ/þå m¯[öbÆÊ5éUàá9z†&jö(Úú 4„˜ÈbFÛõu|×iË‹Û$ 7ƒ§Ò6bÓÑ9Ýç’½HKRÇÏ/%÷­ˆA²]¨:1 ñ¼àÊö²Ý§Ãj/ËÔjâ ÝÜs9‘2à–;×§ÄÀazç—åȺœ#¶%2Ýñµ49ϰ4qbZCØ“üýõÊG2!Dæ$‚øÄ(ª „CË5‡Ó*ßï€,Épß 0'&²»!mrÉHKvAÓó=˜Œ»íLtBݽ/ñ[ž9µFNϬ´€í´s¶C¼†“2=,Ý”R3ºòüM‰2sß—†Ñ-RÚesF’ø%»€Ôiª=÷7,d#¿½Ñ¾Ð"Ž×’·Z½˜]Èäü.åuî° ¨³GÁBOuÓ‘ƒØ’» U´Ø€BŒè uIè¨í,…Ò=k·Z‡Öcð3ºCc’×Ê6kÈÁ‹ {1` æí¥llï6ünCê[›„2Cè €ü@M+ê¼ ží'Çé¢KƒkíR 1ˆòV`ï jÖ’¤–ó gàš¼êOA±«s{QTKÃ&‘Gs•XÇi=!Z¡¤ V>.½å0Z“Çl‚>ÑéÚi3X²w0蛲boR‹u@Û žœ€„­ßµŒó8nô˜ÿ´ìC-Ù‚CF|@÷7-Ðf’)õ p'³?1jÒšz^·ù­@>*c™²ïiª(«-ðm™[¸ÜAÊ÷,Mö‘£ña¾ çÚm÷4 èx—l»»‘Ö”`¡MÙÎÓÂijFFãM"UºgÞ7·Íõ¨ðFR“ƒ\µB,̱ÔB[ðu23\¬Öóýõ[Úlw«&’6Ħ–!€O|&™µBp´YxtAá}»=ÏÅS èçÄn}2 ”®Ç[±D×~{:ñ×¾§Pš›&œíJ 0ÂN‰˜£ ¹cÂlhwÀ+0¦§°¥·¶¨^±] ~á™ÛÁ·Ž™‘—ª€bn³ Rû‘k\ò˜TúÎWsšEÊ«C:3 +ô•˜VÝ·€Rݹ¡,-  |ࣻªnÙ>⪉-†ÖZ7;Nµ÷ŒŸºG¢*õbÂH1tÛ¤nеŽÃѪƒ¬hárÆÝI£gѭĶ}FÅxPt“3Š&K^¿œÄ‰PáØ,ž”ž@þ¼xÂk(lÐâÓ;_bËôi^í­º¯Ñ"R€\²eM̪'0©éõô.ï"\n¡¸KÛæ^ì<UãTè’¡>­?IqýÌtTÉæ’Ò1/©µ]±ŽÙ,@'É/‹wΩAR>ÑÔÙ­t¸ï*x‚|b)êr²¿y¿‚$¿w7 Á‹ÅÁ4;ã”?SÓ ½q]BÏ0Vø”X´îБ¼ëFšÞGÆ2®ñ¶öÂ]¼ÊÑÎvl’Y\™P¬.«ö¡z¢cÎ<Þ›nTÃdÁsþD{»[?èÕq@˜ßò§ÍU‰ÔÜvo{:¢L;Æ“gÔÊ4]îùtŒ×—'(3 ¿®TÚ8 ›Ë}$̶eÔp@Œ[v¤»a7„gÌÐÝ!SÆ—¦|y8ÞÅ€CkfQ"0Qñ³XàmÓõ6?™Î'z‰o#%ëØµÒ·>ý˜-MF\TÏHWzh‹ÆJ›ÃÄi·Êç*ã £|‡Ã{€xÜ´½@íèªjÇI'ÛÓÁò4hsØ¢HÅx¬×‰û½}ëãx«‚< Ÿ´;ÑstÑîå¹#äxê¨Í;\á¯îæ!Q9’͘v/²±žžw&²ûçxÂxòÌ€„3êääÀÆ–l÷¥º®LH˦֧ôé ú5æô£íMµF<Ì< O÷ÆNXõ­×£±Dâ@9»ñ.?1%ªô²Å@¬<¸È¤‰58¾R”T6µ®ì”'!Ã]Šû÷*­gÑ"GIJNð®—4|X°g7†°ùJ‰ÓwDZ›iH0ð }ÂSêZ–çC Ž249»PZ<.(´šÛ#ÍD41NsÁ mÑBn}¨ä-srå…è6)+ZOwgSÔfÓž®Ï+vÔèáy>Y(]•¡†>:ÝÚØQ×=S¶~*ZUNfæZâi!7iÍ9üd¨®LL˜ÍxŒWTÝË0œKjîoÆ€i‡œ*_W’þX>bkíºï±Æ¸Å¿hI_éiˆ4N}Õ˜“FD¤D½´Þx4Ñô1Îü²ÊEo ’¹G\JQŒ÷PýCÂúI­Kíx.±îÐw —jw'ïa˜IÌÖKã›ÑñÌxÅ1FNtIÄb\SÑ);ÈZÉÉ /úLpÞ•-ñ4h »¦ž¶3± []úXÙÎ…Ô÷dzMÂê(Ïí­¼ì¢ˆP¬ù™›‰ÛAÖ½q‚ðGøÅÕÔ[I›"Õ?<Êžèc3§F*&leu½ \/Cúk‚ÄwDÓÈœŽ®à Å! ˜´½3Ç»²>Höl1+h<7Ïèåf/@4ûήâ”M×dAâ<$+ׂ= _XL-:„ö„âÖ–ö ͹€¶DÙÚ}¢UÀUñÃè²Y"Ï¢ ×ÛñeF¼~x\je{CO¹Áp# ÜC²ÊÊ7ÉÜ[l‘\”3ŸÉõ¬Ì°¦8‰óiýœUvÞ.½ãK°…Êš?=¼ZåŠÉ‡«Ý“9 •|e!α½T8j‹‡Åð&»=z ãåUkï£ÏlÒ‹>=p{¦Üª=cJ2ô í¦/¥%®.eÇ Á<¡•ñ·v›• o-.Ìϱd™èÌa™–!CØùàô~gŸ±õH§¸#!¯ ëvríý¬Á-‚%Z Ê!z}cS`zÁnïQÈó»sO©q[™“ DJù¼ÿ4J3*ÑV×v¬*¥*ƒ$ ×ö÷ C8 ©wØÀh‹§ÖÆL2<‡}éož›©æÒDÕPÿæ$^φ3®ÕVº¾XšCN\£e»´¶o=xzts{msÛõ ­Œ1/(b®Wé€ñvx 5Žª¼7׃«QM8ÝËNÄq§Hñ!"Ñ‹VŠKCD@ÄtË–½€,÷+µ.›>éJ¨‰×b>²nÞ ¬ªÕƒF9ç¬Ã­’é·WweC¤h ¿©ô"%a@%¼Lܯ¦!ZöqgoÄ,ñ¼f.ú»¢¾1šúMê6 úöRß¼ b6h_jCt¬–4²›iy1”9’šš!ßë×Ò§C’\Q£MX™žÍé$­¦coÌ4ñ“©aRv²¦;NL+aÞÀ·M\ ~éNk·â€®éüfçÃ1-‚=áŽÎ*s”ÖºI§Í=©£ëŽ™ñ’â³ ®Ý„°ò«¨nâ!X5È(@hÈJ‡é6aIÞí“1¾žÏRÜC¸ÑAî vpK2´_ºÏûùBqEµ—@s(úqV·ÙH¦J|$ç%@kO§k&i~NDÈ#·WJ³E›»¾>{:ÉÛS²¹L:ÒçNaLu{¾?uí.‹÷×gCë}ŒN[ðuã¨Çt,ÒÀíÝYž3•û–Û‹ãÈìæà±6.3‰ÃSÁìb’Õ#ÉöÝØU×£I\yY¼ž f£nԇסD¸ê§Õu"Ï;#H?àZJ[›>Leŧ¶%i´¾Gçð|_Ýl{M5Å.C…uR»ù&+/øâÁ•X©Ø£0¦ÓBsž)[K|g»=°§‡!ïÖ¬–N;›hû}’4SX‹êÁð½ï®wñ©†B:¼:ˆJùĘ%ï9ÿ cF=¥›pÔ ^rÍ'ýª‚¢~¤­6ø8Øf`¡~®0L2É4s^ä‡{k=¤ÞXè:ª+W¼Ò ‚9a ┎߯l­ó*7µX§ß@D<>Â+ à}¡A¡,Ô17„¨ƒüº¤Ý.ˆ°½w<ÍzÙîª9ÃÀÉœd&.Šhàô=sz†ì9Øö÷/«P‹-Œ²ŠÐ ”—Þ-0ʼnБîø#¦ðÀˆÛ¾©ŽÜåÈðÊG}*o3ò¹{¢þ%‡ï*H)å—=l†SOUœdHÛÚxmÍ\÷4<µÙM:Dé¸)®ä;8zòr?ÇzôŒ.ûc"øÌ#~p:Gù®@øºÛ¢+Ÿƒ€%œEš3GS†}e|x)a5°óíyoõ8#ÄÇþ±âôzI$“=EÓûA_H¬Œöå@åQ…{ôý\c³÷h³µ‡DP”ø!ÓY$óáv«„=”œW»Ça%…©^Ëûë6'>øÉ=‚<\ñ Ò¹庉yUkðÕ7³)¤ó~žXE÷úñr¿À•É¢­óŒÖKàégFœ”:µÃ©“a×Ù!;üS8$dCwjîðAG–u/ƒ+çÍ-…£j×r^v íÖVpqxRÅ>=Ìu‹k¦!mÕ=…7-P™Úçu†ôÃdØ)¡=Ù g¢o®Ê:¨Zr즪¦¶¯‚òµÀ„l¦¾U¡>:¯Š±qq_"Ú2&{~Üèå  «;T&ã… ²ã-Ó•VjóÖ2‚;[d¤_a¥x–”Fwù=lâ¨ÆÛÒëXñšôë…««A|Tåì%ÈKU9,yß÷7NKƒ³Qw#+cä¹ËM§‘L*(kÞŽµa‚G…«ó¨Žãç T\Hµ;W#}Ì>”[óÙ8Üol0V~R+@n£ÛtÛéD¬;}C·‡¨Öa[%Fz¿»< CVhyvZÈw€=ŽÀibQëÖöõIùaÞÑX^Ì1™³d",ý•jÃ_ïÕ}Ök±I"dgWOÁ²‚H ÒPh ±/¹P§çBFÛ÷¼PÚ†;™p¯ýþN°”™ÔÁ¼+}k\îŸô}­q#ºéùe`4™é Jêøz¼Ÿëçr©|ºÔc!2E`ðW­·kTÔúÖÁÝÖ¬4µ0ø~…_åã|8uµK´AMi¿ÊÔ=„Lea©±;M¼fó$»u“NRÏ>ž5›IaUSaHcÚWg>ãü7@VleìÝ´Rñ#u* (€mÖ›Ô\:ö´{—ACI©n;xží¸KÁÌVœÉTʯ'«Z}éé×Yó+ÁñõBG÷Ôm(oˆ¦41&ëßD9µjy¿y #÷pôþ\:y²QÆ»Ç˰Q!¿kþøò¬sõ´xKŸ臞@ê¶ÏXKÝÜ%³ /k…p^Ì2oÕTbˉ ;!V$™ŽÌv_î±öå!J[Ñ‹û¶oÓ>?Ê ÄÆ§=8ä¿þÿDÝØ<Â÷9½?\ ¹N·G‹ƒýÁÓDåžD·ž©m(-åhNE†Ð–‰…ÎÇâŒC¦äÍÙ{.å)x!H ïÖã2ˆŒiÕ±k„@T^í/Qˆ±Tv{uÙ½þ•c.ƒ ì+ZÎ"˜ð¡9j/nmݱ«³"ªdwçIæîÄ‘)7xA.S°‰ÄžŸ£à® ±ø¤ið­xÔön­¥('»pM±Ýú8Ӻϱá’ÕMyÅé;º¬Ÿ0B·|ß-Ý•ÚK†¼ nvA…-•ÅAª²ÙÝ×Êä.:Y÷bC®íÁ¡'e¨Èát°ìè’/O©lï}²ñ7{¸ÞŒ [ºi…tдì÷g´©¼ƒs:®˜ J_hY«nºY¬r š›A™ð%v댡]O™pÁ2÷¦o^2ÛéE;ÇÍìÝ÷„­ºÊíÓY\D‹´Ú*?œŠrú.h–3Mëpá§uÿÂiÞq¸ –j¼€ ‡FƒÙ"LÚ(½:Áq5•ÁÄ#s¤i´¢R˜eÙ™ø<‡U—f*¼]•r2N{ø³­V-Îþ¬Ü›óD¤MòˆÊÅ’f=æ.E¨Q+/t Pñö%ìÍ=“`IT3¢µÌHÝÞôþ^ɶ¼]ÿió€2ãVÐãÏž­‡mw€µŒ„’ÿÞ²ÜÉÁÃééŸz¥Ý°Å©Ö±&~7 ¯›è¸™^uéÑœœ$ûÐ4ÕÆ¶^.&êR>G4æÙµ±3´ÙÀäÞD5´¡ó_ÍK¸(ù|¾¥ÕZs˜'¦ÑªËž’^ÛŠµQhs†T€@Ò|„EÅ\!R¿ž©AügóÐÞ–m9Xöáìgœyž¡÷cX&l±0,?«h;gÓ+&”[µV¿×Ýn(ò¨ 4-ÓdJûDQl±#÷ïÆ»g'ѬmÁÛ^ïÔ©“_µydÚs÷¸é²}wû œ‘«Ž'aUtAKcú¤X}×öz74½2A^®ìÞ*äÇpE¦ÔÅ»£-8ˆÚÜøäÅg÷&éö£Þ épÜž`(RúM¶•^Ð^ïevìˆ]ÞRêó‘äŸÜHWí*iiÛ&€ªlr¶½ôÉýf Nø¹¿+‰€…-ìÚ¾T×U=[±ÜЦ[ÆöcsgR¯ÏKd«ë9ÖÝYNôT4°¾{?ëˆø®í£½ÉÛ¬ÜT®™ŠöÞb¥|}ùüc@2Ô¶D*\˜:^ç /{9ðú=¨$;;±Lg“Žj5–tZ?´¹Í\NyÑÀö#ÂÁôþzÎÆŠÃWÅ‘íÅß ÉqFƒº.ºGb™¯ Ã÷ѩɢ0±«v ­>Ë“ôÚ‚|¹ƒ˜ª.v2ëë+ÁªRžW\¡Ú“rLÐhóâ’q"¾ª³ –r¯žø—Õ¹˜`9¬÷è|ü‹S)”£X޳Ÿá>î™_V®$V=©ï:D—•zò_-õçTœƒ:¦øbWº£7<äkÅ"”@&›Wb«îö£¡Õ&Ân:G¡~ö¹õÚøl~¡"e(B]âö€X¾€> ªAy„.Âëvšï¹ŸÙ—S6œeå è\û»à6š–÷¢Q×KåÔ•+‡óUzbá™Ä¯|C]@U GŒø÷Q‘5K‚½Tç§øH9]—Z¹ôá~ý$'¥3Í+>ªûôyí jÚ¹Ù ~÷[(£¢Ø&Nø5½¾÷7Ï>3²’fqª½È9•/oPy wœN1Ž«nþ‹Ëñ£ VOÖêYîJ j­õÿ8ÞÁös>‹ä £ƒbqÚ—ð…§•ÞåB¦ºCP`Ui¡ê:¹9w«›K¹aŠˆ:ŒCl•ž {JhެOÞË ®{Y±Ï¾‹É“lJ#n¤¥xßrµóŸ#+æRa–'N¾ªæªÝëá(Ûã)‚pÖ ã‰bƒÊ¸Ý¡`mò}¥Û©õ82ÀÏ¢¸Ÿ«¦NÊ;,Q!b&ã Ä¥I‚©kÅ;×Ðåðj ù #0‹®¸Ýè—†¹é4ùvH§ÿ·½7kzSɶEÿ QO·Û¢oªî~P@ˆF ^vÐJˆFˆNÀ¯?3Ñ÷yÙ^kU³ÏÙçÆÝv8ŒR4ÙÌ9æ3S$M…Y%û—P WSó§T¦Uƒ['U°&ÕP-Y1MOØvjYB.¤¼P)£Ð´± _œq6ÝVPVø»6=@ª=ç‚ÊÏ ºÙ =nôÍÚ\«ï‘¼¥ ŽNûºô ®ÞaüÅ^åð>¡ì—qÖê¥ÕYç¾ËdíÎä‚Û¥Ân Ó–Ï;ÎfqzÅ1OmWî%š(Ñüð‚îîæ'^Á‹xv2 ×; É‰‰çÎUÎÈø!\1Í[Åir[Ÿîå4‹tSŽò€ñSË+O¹îì-aÞ ;æ—%¯'ÐíD A_/‰0ÛííÔ¿ö=IÙ}ð¬Îr­‚Ò¯Ýãn…Mà¦ÜÓD=äV?åU¿b^Ç®\ͲɩåÛ*NÊâ’Z¢J×Ç¡‘úõÊ?×ÀŽ(çͯ~QŒŽ©VVF¼bÑu¥™*‡Ù"ž~qüm9¦á*ª•ìÚ¬‰¬‰:ßóÛÓBºlyY¸˜RÀ*uÆßy¬ÝÝA°iSŠâµÚ¦2Þiõ™Ošæ¼~à±{¿ÑÝ|TÏï£îï…g¬ðˆzÆ·šã]Ø—ðÍ‹±Ý®+Ún`bO'œÔ¡¯übB¹¹XÊXù6±V/圛 óBssó… ºÿ¬Š/Å¡/xQ… ÛJÕ•îÎãþ=*¼\ÛBìöÜ-„ké»K;»È‹·rY¼žšìä¬—Ë ËE´- ïlëèGÞ‹9vvÏç…wìJ»ï…²G‹#ijÝ3öjÊß_»ØAêÎ'¿OõÁèRÂÑ×~CM£¾«‚dr¶<¾Çjó\¦"ÅU¹ÃW㾑Þ1ô´> öƒ–-Ç*óÚ}‚ÞÒÆÍ²ÛÁE¹¢õbw)Ë” ~‹_¯s˳øh‡z–ÝR¶ÆÂNœå=ǯXúÞd³ñFîE§Šè2L”kΖ˰²4v'-õÚÒ|Åôè o˜ª‹†Y¿øÝ+ ÷fys½œ>ùùàSÑjš(X/ô@÷çâ8wäYºSô«:ô/àtç o§ÑDMB ØIѦ— ³\%,fò O5UÅ$ÝóŸŠb~ŠQŠ9üÁËý’{kôùîžEêÚs.ÂîúY$ÀtY°Ð”6â¶L /ª9­®ªíiz0¯Õ¡ÀO ȃ)s3ß”Ãe° å^†ò˜ÛÒ”rŽò±Î°“tÐôQ©žëÕØ^?:Ïöûu$Ï.š}™ØÁn±Œýó†¨ËE6Žís¸0ô ¸} [\~Í¿^íU{Ü1E&´¹ŽÒ€ˆŸY" à[ÈŽWsív®çÚ2×jãœÍ„{ìšôeÀÔ4ýª«O²YH+²oØ1l©ƒ3ûB^>SÀ½ÚE|£&}YÕÈî¼[°Ž[ɤh1'ÔV¯;Õv4{½kѶn6ËÍÚ(è×2J±1±Rb¡DI›Úú˜¾î†½Ù¾*£¸ÌkR3;,»ÞÅKlnur–©7ãcx%ͽ³ åmƒÉÁ7ùƒÈŸç†ºn{&ä®Cj91šw™k§)Xý£ð\¬Î„CáÄëšcg›Ó Ù|u*ÊÍùN–âËpn°#²½€‚BûHU$Ã픟w"Wò[¯$×\ã˜w¬?”ȦOÆ,©ÄS}ÿr5¢Á"nè÷UÉ#¦´H¿Ø†ÊÑ‘©ÜàîOçémo ZcÃõ”üj·Õ" Çå1‰fFÉ×᜜¯‹?CïgÀXý¶Õ:(;“0ó­8Äœk¯ÃÜêÅCXÆòQ™ÔÆU½_®#.:7²›+ÏÊá‚L™p”ŸV=v¹i[·‰‹ìƒRÛ0òðºdN«0ºã…*KЇ)¶S ¹ªûFeL+×ÉãÅvÔa8¼Du®]êþ=xîV/”à$“hˆGë§U·H[ZµµÓ£Í{“^Ö‰6¥iknnׂs7¸¢¤%š("FJ’5NÛ‚óœ7–Hì‡4ZUÉÝÖóªqTÉ8.ºCsVÃÍL]¤i ¢ g¯îÖŒ${ÈÔ÷š¼9ºirxfÓðaËìÆ”dcÚŽ«²¥»L@ºªØå‚GQi3RpQL:àÇÕêf¶õp~vö±á’ß‹×4ƒÑžèDàʹ]„ë›óÔÃW[ETûå`HâHb\3ºG4óU²CÍÚßZÆ—Ú è.÷™«$Û éÕÍhÏ„sÆ•Ääá4¹ ­-@w¹·Ç}ÛK™;ðçB¦Cl¹Ú9=¬äÄ'htƒ ½oˆ˜”fOíé¸xŒM´ÓnC¿ÈP|ñµ«OegŠ&Ž•jàócÍŽËú5½‡­Ì¶BÚK»ìÌåEpÒµyΛQŸ_¯E¤gÿIÛ™bO5È4Ù2±±Ò¨ŒÌ(qM7Ô”Ï>?ôeºG 2|œŠ_¶¢–mÇ …QÎJ1"-õY¿Gz3hÌöæPë’¿Ì”â¥*ùæ˜ê4ßÛfaóÃe?¬üç¡w§§'#}¥Ð“¦¤¬/—K÷º«y tý mš²vØŽŸÐ'»è¹(›ÛÞ>ó2«”dOìö#®û‰E.õkäŽoTà§hý+2Œ£¶ØœÝ§%êá3Èܼçõ4£ÓŸJÍëÅxóð/CD­èÐãFTÐ9«‡¥O¸ÓÚÇù’Õ‚»éªç+µZ¤«µ-nFOæ°°ê³SÈ8郺ùýC“ÞÊÃö»²Rî€'ƒL¶C“7ͳko>„…‰’Kg?|äð»j¼±]·T¼Åk-R÷B¹ûyˆj9ôJ ØVEÆißñ®!Å"+øè]ºñØÒ }ÜÞ•(gtXdKB¬°…ˆüÆš0ÃÓ¤êÁÙhƒf)‰Ž}ÌDXKpoõ‡Ä¯îl¶ÍJr¿´3S3s¡|²ûvùfŽ‹×:Íà²-gæCjƒE"ÃPÌN+ùÝÌU¹xé î$Æ‹­Í'ð•&É$‡;Ñ^êÝÓhî6˜<;Ì÷â™Í*ÆÈêÛrÈ®‰xÞÛõÌ8×í=ž¦6æãmÐÑ«4×6»ýéÔKøNöʋȳ½ùÀ¦žK¢ÌøÙ~0¸´\ïù’ã6AÕ—UfK“ØbžÝ¢&c›ËÛgPíNd‰D¶ß Œ¿-¾8 ƒ‹+Ö´-âT'¶ 37¬ßä½ÃÏÏÒSìJ´ˆE9Œå\?eO/Œq4)ÿ ÖîŸ)©€íS ÇÜÇ2dåêòÊñä.žóv´¢rV)›£«W³ZëøŽìwÉñMzOÀXô «eTg á> üjvÞøØ™¹˜€írg©_>/Ãmg"ä\í×.¯,6¾]Ñšµn.½»Ÿ[ùáø–íWQ®W¬š‰í¤6Ö±»ñv{ªYܨ­]g݆]1²3ðmþ|'ŵV’«n;Kš˜ñæe%¦«» çžP&˜ìÜLÛÜs=s²Y7ç½îE)Jÿzm õ>[®oƒ=騡W£s¹êAüg5‰¯? ÖVÆ O°œ“}†f'˜N5äþÙ’Œ§@ -G‰ÃëQTLpÕ’4³­£ôCxÜMB¼-\“³¥u*”\r½Y©cŽžÀ\l¡ä2úR*CY¤Ñ$`ƒs¡ÂAÞƒvП.Ô:¹¯WIª°nLP±’œðý.Dv¶f:LÛS%úžSÜzQí˜@ÙIÆÒìè›ìGÊ4ùÇÔov]ô§Gc?»C_‹ŠU U±M)ó\›ÖÓuŠ%vú8Yk×l¹ €@]¹!>óªº^Éç}ÜZ*7ʼn—×~ñ‚°hÕêóÝ hZ³Ì–$â³ÀÒ’ÜEYU•^”«/”XÍãc\'KšIÊœÅW>ÁL $ÎíMú¬*f«‹Ó,b„廓5"{‹ë,ïÈÞ ¸’õ“¨„Üó…s§÷ÅBëŸÛ‘yÈí6‘QŽMTwZ&Д6Ãg” ‰­ÈÎèΚu÷b‰3튘íŠp¼Ð—ÙÆ¡^-ÀjNÒ¬å\6ÂRÀýËi&.éõC›ÞŒ%n( /µ –@݇Ç+!JrLÖ|ëën˜ë’î]×lïóB;ש:Õt½ŠE?ã®R\½P?­ª"œà.Œ]Ü%K€Ÿ(ƒ%N3‚ëUC=û¸ ÷É5¤ö s³XrÖD®‘³QÞ/Ús;G¨ŒÂ-}yÏ‹QM˜Ùº -óÉÓ o§o›,ð¦=æ¼¼?uŒ[¾pòœ/ùMÂ7j¡æˆ^Aɼf×wÜí+7¾Â¦ƒ‡išDHéI«6Ïï[+dg|Â¥Ç9ÖDÀ¿B2íÉšh[oB‘Õˆ~ß*£›•ù©R³üY“ù’]ör˜ì÷ÍŽVDVDãšD‰ÛECdCW4S¯˜©Qè³Ä¤–Çç…s¹²ä‡÷ òЋ?ÝqÅ©ïãMpŸçµŽÜ6ƒ¾»€¦è9`‚0+öVIö7ÅÞüf3ySõ0ââœ;5¥P¡d“µK®¦9»`Û&uïÌŒùµ#ã­!Ù¸üPù3urì;ÿªöU²V¡”Yw4½Ú¬ßÖ›ÔESµŽ“ »A"Ä£ÓQã,)ÇG·NÅëިζ[Õ¶ºíKox`ö9wj®*WItGËÒ++Wåq¸sûQŽ»ì¹¶fû$*l[¹w”FXûQl‹f7‡.N䱡oq …‹ŠàNÏ N1¥SªïOb-FÕe鈆„ÕùÆïA_¿f²" ûøâF£”Å*Hº£ÒçÚ¤^9¦Þ…ý£:†Ì-š9Ýmv_XE,ÈJ0ó» ŸR$hYÀqX²›û­6Ro ‚¥§ÂNV̾kå{Òë‘ìX_íCV2}îg¾‹ö0Ž ‹äDgûI ùúàqYÔ¬Yf@‹ü2.ì}‰@Ï:ß8KXû¸zÞ1/ °1ÊX!R¼lmç^‹‹psvÓ³ÜÂÕ ¨V„FÊŸ­tÏp¶Îhþª¹Ñé–¾›»j\¿`L(e 5ã”r¶ä¡àëF™B}Å9sì½Ø·ü™ ‰ÓÃ}­APؠ潤uâ]Ù[!0ÂâR> lOaІ"|WÌ;·Qþ*<­Ñ™M´•‡,Žr-ë^qæã໽uû4£ü½:€Šô¨è P0;®û…4‰ƒ`ŸÆ‘rž†—Öð—˜ÉÙ]W:éùòýf…i<‹ÕÇîT¤,ó #iÊ!µ _¯£í;Òd6G†’yæÅTäZ5nÝCsÑgÑܯâ]A+¶NTwp›3ßSn  ¨@Ü^¤s]:kÖX·á€Ü ¿5³JvÕz&»{MѾÂUáSò1‰Vgý¸Ô²ãeÈñ;áBø9(g®3¯vw†5^"öð,Ð06aa߬suîéjx« =V‘Þ(V|t„ÍÌWì€ ru£³Z”žäIep’zùKŠÍPm®à8>ǹǬÌüÃV6ÄȈZ|g¶”í8JÝØZIÖN¸| AW†‘]ì%TÆWÒâVÑž™Î½-ï°P/_â¶½ÅwÂ(‰žÖòªQÉB£«J‚ò¥?fQ÷Ò×3:ÈÐ\º¦ÛLЭ¼W‘‘FHbð”{ˆWP}ÎÎ|:û{Û¸•*¶gZXC¿®%êΪ×ÍTÈ—‡šuņæB®H2LjÞɦ_¸tUº¡*m¹ãe” YÚòêyf†اBí÷ÉlÎcç!?Îâ\€¸I”ÔSÜ$å%F‰Ûe€³lÄͧÎo X3SHíýX9èM>*Õ–>ïºùrôeì=ëqêSU :LìžNoã±hV¡Æ‹Q|4 ïu‹œú¸_¤l6ºÔ•çä‰E‘öæ¹¹¡ŒÁ˜8§…؆¯LNÔtõ¾"qY8»ÕX)32'Ô\¥}òŽÞȹÝaýÃÅU`/Šö.´Ãœ“Äà©6`'$ð^í¼=Áa@çéÍù‡±u‘ Èþ£Y<¸íY£žW¤Ÿ*Ûͺû6áë2~×gé$Ô5§B÷VA:Ãîjÿ ô,Ó™V-| féìFTK>_k¹É7·>Ü·+VàtÉžÉ븚ŸVWçPÕ ¹Òõ|[³t_úA†áÑÓ^ˆœÁK·­ˆu?ІÂ8pg€BÜl¼Íu;ß­îN}x®‚Ì ÷cùäjqÕʶkžNãÎÌ•íf[°˜ÙA¨?sÜŽßÇõn|¡è-)û{æáyr`5Ù|vza´u:+6¹)-³_‡'gfNeÈY*˜2XØAŽwy7ꎉŸÊ„Nñ2hññâ³C µOã!9íò=Q3& { ÷»±âÆš[p?.ž^0ŸÜÈ•÷ÑFVQÚ’ìÏz(NTrq÷ äÕëqð4¨ÓÌÂiýʾ=!´ØŽN†J´yÈ&qf°J»¾R4ƒ¸9Dm}W»YIíÆšn>Ë(]’E›e•RNaUŽÙãbœ‚ùUÍ“‡Ð8it¿Ô™caå¨*cÙ­Y’ »xYû³¹oäñZ#UÚ¿*ôzʃ¼C">ÊC³ºô\¸)Eõ^éT8Ô›?Þ:lŸu†ÐìÂ=ž÷usà´Ww›Ÿ–ó¡:Ë&ɲɅ³‹XÔ`æ}Ï¿p{²”»f{pPyÑò.2i×N¢á…]‘÷+À$Ç52\{Ôq6ø#?øiaÇ÷œ„ õmÏ’Q VpªÙéĦÀ^ùÒð:­¸÷$1ÉÉ­-Û=fK𽵆ï·mXxlI>œ• jÐŽÒɹ¢Œ}˜:}yÙëûžʉóg{ÏCHõ£³,¨XÝj3—ÔL&í69LxÿH´ž¨ç´N5»6’ ! "íÚ5 £ã¸u( a*ï%µ(ᩚ»˜Àq¹d}’Ì&q2"àÖ…:ÞÕ75.{ ©±N,±¼nχ]&Ì@c9dT~ß³4–ÍÇ ÚÀða\2çëxñ H&{4‡g`[¦¦‡«&ypa'•ú㦑œ¶f &áå-×Ór „_u‘²7½Ln‡S·Äæ¯Å+šè”z3GI ÛŒyã  ×t@™.xæ23ùùh'Ù7Ov¬Ó"³)©¨æ„]“-ÂlÃÒ@ìòÆ)ޤ|Ž’½kk­C»7:z­ÃÞxÊ£0hù°ægG.}0îf>+?%ëéÆä@pQ©MO³˜O„D_‚¦-Ì­v£|î8 É üŒð¡|ð\ÕÓ¨`Ý\’¢_…L¨9))%ñb#S_töV€¸ih .";bNÒ-¾B›]eˆXJä×÷DëXÜ-·¹°Â!Pï¯!`à¦TW5»M±!84›ÐŠÉ»'‘“¬C 6À,í¤§™K_F#QŸêE&w³Y5–åeÛ¼F€HÕA¹,MßxŸw÷vMéäœ[ƒ`Œ'ÑïÂìzIÔ!0‹‡à²ë‹Gs/héj~HÏR3fŒN,…d/¼‚…ÎÆKÇ_V«í+/ÒnÌò;peí 7nwh}Ðõ„®uˆ ¤Á;T>¹0­c÷sžÐâ$Qç\´“B€bصe×5Ƽ±wæ£[…ë~¬—»²ˆ¦ÕiÆÎ®Á]]œ:íXÝK¯éuy¥©¦ sÒšm?¼öt#ÃöñÈ«Ûcú:¦9{X;fµ¯–2òîꪙ<_šJñSw³Ç}ÝáâÆO9°2~nŽÕ:k(,3̓ˆ%Xaäîñôýç ÉýbÃâ~?ç´DêúªC,(œx‚ųƒ²‘g5ƒÖ#4¼­KÔêœx䪳ðy¹è!nfæ@`}Ü.[NÅ:À1Àò5IÃÔêÕ€‘ѺlEigŒ'ôê‹5S§µÈ?•8zp*z‰Çtf÷úÜús’5;ôºk%Ћ8\‡kÏâraß®`˜(¢!ífçÏ ³&|âg¾ÚfÛ‹}¨1¶–É™¼â­”rSWŸ·Xêã™Êå.Š}õÎYý0ïàðê%k†°[öèH™t’@ĕЯo†TÀè{Ü»b᥹òµ)WÖ|úúE\#ã•ÜîÁILXDw!íJ½ž Bõê´v¶"*õI‚œçÇ%³Âæš.ßÓ;¨òW³äM”“¨f.áÜæ¡«FöM‰H—‹éMB$åxÚrîHa§8}.ìL8øûé%0 {¬†QHæÜÎÒ²»è]ø¢Ä#;-劒,?ùm$÷ZºKžYHÝ.<¼öäÎíÉ[Ô-D6lÞH}ØŽŠˆ‡(9‰¢†2}ÆÌß\ò*õuAWÂø%:~PëÓd[7]ë¡G,G)OHãk Ú)ðmñZ0RÊ^ÐØÜc”ô5ÚáÄà Á)-‘k/M£&2ü¡ÞïóËÂ||ø+P¼ùq†Ž WžÌ¸£×éŠïæ³ÝØXûûŒÚúÀgÉ=صÛ>6GN¯+Àµ§j웺´lÉ]æˆ/8õŽK«ÆÃÆJFï½YÑl´J¶^¸„Û4èwn¸v/ZS[¥7ÂÎíÊr!1êŽk„x"¼ÆÞÝ<îõi½a0ûÖÚUÔ[k–›Wp׎Í:B¼~Ý^nUžý/¬¨8“f„íõªö+á°{ê‰è>¢ÆHéuÉUZRc%úÀ(;mÒ2Œžy6ÞTÛ1ãÕ¾ç©>h¨øõbBw’À+žTV‡º5 )¯x|¾7áÖ_ßXl®. ݈9Ùßœ›®Ò×2êгê¬í"R<ÌæP©±e”=—ÍH‚)}çv·ÈÌ] h¦Â°xs6icv"0³Zê v1=÷  Ì{u]ò2Q/-Þ¶‹ê /£ÚÓ7Ãõ0ÏØ}ž¨z¦à¢ -…ß9 M3Ú™–€C#g^0Õò@”š¸höçš7:!ò^<˜4eš,T›oú6¯ýÈH~¾Ì¤ã¶ïÌ”c‰ÂXüJ¸ýq·g%ËÈ·’J•¶˜ƒÚ½1¦œ„¹´½€·µy„+¡Ä–(M6¬ÜtêRáÒö.<4˜î™Q‹^•J–¿¥a@?ÏvÑiql(Þo©êúFuËs¾¿71oS…º¬Ý¸Jľu¢´ñ|Ü %¬ãMã0óz^—«×"ÐËÊ´xŸ+Y)Ÿ­¥YøÆSVüa©ß¼è,¤Æ °Õî^Ú‘Nî¢ùæöÈÛ¹sZ ‹Ô²m _6ååäJ¬K9þœá‘C5an›Æ…£=ƒ;Âuˆ‰)¨,!–Žl|†len‡'bÖÞ]†ùò¦Í^ãJIÊlÅÈßìãôúzw*€y:¿wÇ€eíZTŒ³oí©!»Ì²£Î¤­ÖŒÏM}‹Æ96ÏÔèê\¤TåýfÇþV®öÛ¦düuñ4"Ðw)o5’-nûyEã…„/jT°Ûзõ®Ïc÷äûxí¤Qñ¬jOÍXë6«œn6O«™Ë73x–å=!ýY¨žŠÍ†pưñw«Í°l1k¶ÎÃ7r$šU¼íKÌü¥õýt=Œê>nqý(q+Tù€fòÇóÉT³,óaÃVËbx={b ôFæKtÊ ¨ÀÊÚ•1Ç绕ém‡ˆN C†)Ô’O©¥›ªìmA*÷zj”È0ô¢í‰—b¤ìî½—BônCœÕ>!8yºz°eÀ:Š’2Î%X2qÉ”s–š wŽ~6ŸPrZ¸y#ÚÇšíÌ0·Î϶cñb¼Œ¯‡p.ö~^ìÍœ,1ÎÚ0h†?h_[W½Ì§@ëøLÃp䣬ܫ TÖDQézØÇ„\–æèÚ窫«†–6;‹ù±b$ãŽ{[ï†rÞE×ckH²DYfÍyùŒ£¾=Ïf[ïĆueIÙ*Mé‚b6–ûìR}ÍTЖYåÛ(¢?Ø×–Ù‡hþHŒpíP!î3¬ÝÄõ øS?Ëú”øÇ“ã_o™=•‘$Ò×,®¢jÚÌ‹ëjéÄØxÑ@'Ï ”Ö•ídÇA.ÒhiW@ÁÔÇC«_s*׎™ZÜâÑGÀOäÓ”rB\½\œŸè‹½ž‹»Hªa ¤K™€åsÍìéðÜÓ;qÉõ#Û«0z›±Ç£r¿ârîß„W¼NûY Y}à‹Åš{,Ñ…a¬ÁUÂùa€› sî$0¶g®Yd³¼1W³>^IKaHøÒ#Jâ¡1óå«êu©¤páÌ£ž’—ÖËx[wÍ_mãÄ>ƒYÍzÚVÏzýÐâaÔžuëÚÜ*MfF,·©öZƒ„¼ëJUã£÷´Øs¡DØè¨Zá+м ˆ…˜.¬’ &œGU/j2ŒßF™ÅÍnd¡“Û3{>È&(½Et“=Ùh»£*÷–®á*æØ< êµ8^ònOdÕÏhðñ*SVdl÷ãU;ÍÅL£­–­AlËÅlñ”M>èt —È™¾70i½ r5è!ø½â4±a怂Á+Ĉƒ~÷¸óëS—{žuñ#¹ôjº‹Û¡òßjˆNø:¦H9éîœÇ|¬—{¡¾_ûîV‹³j…o\Ù°ôÁjf¼Üùî“BnìÄÐ\%ðêïû«xCÓº­ˆÝ Ìך•ãG”fÊ¿±vpÁ ­«,¶s¢‹6¾>‡µ ”H’K5Ú§%ס|ïE§ÉÏ+Ê>5§Å¼h•+5Ã㾪a&•÷t–öFA}Mô½r~¬ê×fhp–Ï©_¶†jg<èÑ{iCŽiz«­o8¶ÚÙ'ñº´¬Û ·‹™¤‘8P|L—÷õýÐûÚqJÂ͹0Fëz¡œÓE}=©Î†§êQÉ+J3Âý(»Ë"a¦¦…fžß9‰ÕrÍð}PpÁùQ)ûÁȜ،…Pµ×¶qa[-ÕûyØ.ôÐ6Dy)´“sNúÄŒÒÒÓŠVÒÍî\j dJò¼cT/ÙÜ×#+æzÎúé}1ã¸×ƒ´´¯ê8§<:þIÜ6F&÷‡+â`4¼IˆÝ-¼R¶MnÊ1]‡¢àÍÎF‚]_#~8˜Žìá4˜÷kå^Ý㌧LQ;×\,R.̰‘:\µßáqÕ<îzrrÎt§`?bçõãK*-É}2%‡ËùÂè×Aê\-ÁÅeL½|‘²fåÈÄ—*ÕŸ•®æ¹4jôâó'kD=¡sÝÕ4° «F=·'¢} &ê瑽_]åOYpÊÔíã$ cÇ„ º–‰÷M<`~\$§‰¶‡Ó%Q'¯¥%ßï Ë‹È:qgkcêžÛâÖ.-è$ʼūi“ 6èb}ÍtÚ&uñ" Ñ/¾ЗþzA0%°ÚAdÇö Ôäv¹ö,¦i ¦·î‡`¶2–)oÝ-EoL7ÖÂU;ó^Ê ·2÷ú?Z8§=-0¿õ‹•z±‹çzù³TÒfàµ&Z&…šã}k§î€ÞÚ_ÂÝΔÕðÒ–…3;3S²Iù²q…R'ͼ‚¦uÓDUˆÍu+ÊI{„æÒ¢k)Ê?ÍÁÚw&qœö/é‰ÓòÆßŽaV]áœÉ8sUØy”;z‡Íý|V|cyyˆC¾UصqìKþª[u²ôǪk ¾lxžäœ¶ŠòÞ»g ®D^%Ö˜·×rvĸ^õÍ-“¶ðt½ò© =ÉÚ­08½;9;´#>ë÷¥mÚiO4ü­éØ™RVyº‰ÄæÐZ¤¬°ÙqØRëAϹêz^—çÊ催y+×SÍ®+T¥wˆè~È(í<ÌÄ«Q¶  Oíu?¹—öØ…w[îXš¨nª¹ÊÙ•³¢€cÓq2Kés±öA¬·g§¦­'«(5jñøb‰\ÛôTâsŒ\Æ.°C]@…p ¹Á š%ø Qó²2±úí´­Äâîƒ ^@ÎÙÖ¬Mê>4í^ øÖNŒ1gÐ>?£qiLP®twãέ9²ƒÍhcÝ>zÕ>·'ôÒ‰•yši=1¾mºýliœ¶ÅfýØØUÞ‰~ya,/}*Y¶!òƒ‰Êí°±HË?)‹:{ͤ¾†jRý2Tbñ^·y ;ã@œñ²ô¥.4îáE[þ"Í*JËÓÚº©GìFˆr°yþLi6ºzÎÖÖf2Ö\-øãºá Q">®êSaŒ@ÅãE#Å*d)T¢ ǺŽå±#«] tÁFh!¦ýWÝ=¼gÓÒõØgn»«3ve™E߇sìîÏ›­›Ü¦½æ qãÝmaÂFx«É -~cI– ÿ‚ýúñ竪îŒêø®T”ùØ —eÙo Åä—ïWMâ’,õ𯾒ÚÔmXüq+ìëÇÁoßOÿB|~+ˆï=á?®æ)ÿ¼”øòÛÅØ÷GývœÎ‘Ø\úþâóZüY«ïwù~ágMß׌?Þìú}sÖÿtŸÖŸ÷„ýOò?ÿ`ëÖÏme?ï÷¯í/ûŸÔÿ‘f?î6%ÿµ-ÿ†ù»Nù/Zªð?–úïY$õ/Ûätᣊ®Õ£-ÂÿÜVI8]ûƒÕå^S%ýÿC|£iš©/úûùá+‡¶'i‘A]C~£hŽfÿúã®Êè P‹¨b~Øß9óü(û¿øþ/Ö¤?ªÇÀ˜SôG>?±ýIŽÎ„Š 4Ïýq Øß×`LÊÿôÊò¿½U4¿ß³™åyñï?¹è/ÛšO«6›v6£êñãFçï¡Gw'iŠÿ¾ô÷jQ¿m  ÜU“`ìþ‚e4ñçŠüuóì?ßÎý½›û?Ý©ûs“mv •ðထ´¹üA²Úr^ø"‚Õ0É ï,–!Ÿ&øo"'ðìäá`cÉ ´‹ièmí’΂Â-á¶ÇxèxrƒoKü:úÊbô7Ч¬Š >‹` _Xô÷e´­ûWæKÐÈ©oÍÓàµä7¸;%0 w(ö½ºÈ²„ÈÀCžØ/hcv–cà,âÃòzÍàœÂÒ"9Bð ËA I’œš·ü8"yž(>AóhŽPwÀ1ê¤ñ/¿·mPO~[Ë´µ}å…‰—mÑQÑ@_ ýÅ|þ•ý¾ú¿<ª! L’Ч_ ºn.æª*A¢}à‘gÄ/t …}徉<êtmÏQ,ÚÍž$–ùB£«`Œ¾’Ì7:DE,ô=p ÝB0 PÄ gÁ€ hûz^ I° ™8ßh‚aE„üß8Q¤¨/p1CÒRÔÕ_¨oŒ@Q z8vªÿÖ®À/|ƒ„±ø^V$iVDvFÓ<˜#ÌíãE‚!ñ44“„6Ѥ(ˆŒ2A ‚ðî–Mðˆß0o;¢ZÀ2p½@¨LüÆ0à"†Â:Á€½R¨Dè0’ÿFðÂW0JŽE}ü 9˜ 2#ÿìZ C@§Ã¿|!¦?¿âËh‚¾j¢êm[ïcŽ$À± Kʯhäÿã/Ó—è³6‚Hÿl¯É‹Œ‹¬Àƒ¯¾ÁóûG`úÍ LC@¤æBó@é—?õoØ2 ò* ],þïˆ÷Û'Š àÀ²è¿‘ /0¨&„ƒ“(ˆú` ­¡ÁP¡ š% ý†3ðŒV@a”!ŽBÆ Ö‹0…h$i†á‘py1¸ÎÃÊÔ ¡ß€Ç#¢ ‚D`Ä1,:9É¢GŠAó€+ÂãáþO PÆË!0‘8ª…ÌQÓ†"h(Ë’dS|ƒCê øJ‘ï6 ¬@Â¥à \ÁÁàѵ¨¢àÃâTê@Ðñ¾óàPïïÞÉ0ö|dQï}t74ê+¸frt@ƒ–a¡ÿPSPÇ!0ÉPMhè]ÏÐ@PÖ ÜÁ³ü»2I0@|ž¤Q» wyš‡¦òp;4S¸>ËÿÐ*þ…ZEÂ7P2µ <ƉDŽáßýHrÏ@màö»‡À •ñ !ä òvhõt2x°°ô‘܈ã€RÁˆ ¨ˆfi¨*£ÁžÐY_hö{h„‡2 Û4Œ #²±BÒ(®Â2<‰` …8s&ãÀ¾ÀŒ‘™ˆ$Pj ¡4Eqˆ¶B ¥D”¶†.€[ˆèf€BƒH,ELgÁˆÜdø,ÅO¡”†.üP¨81DDŸ#QÐ ½IŠC„*Ä „È¡¶@%j‚MŠ`ü '9èU0aÀVÃP»w •¤á+r*™|Lxû∄(Ì¢¿à <,x+ŒrE€tñ¶¿sØ;`0jÈ?ú˜J·†¨ÃðStÎÁ FÁBääìEóµNÆèoy&mþ÷wú`«Ê½ì]ÒyUâÍOe¯‰¨ýTØ5Áí³¬‰úækR„ëÿF¼?yYr-þV7^Õ¼ Â(xT^“<Š7¤#ûõöÓ­³¨dÿZ£P\?K_*üµlºãwh|ß0LÝD÷Ïšêï~öÒ¯eõ¸VQ]£ÒÆÿû«J¸Ë×€úoYõŠÞ•-‚Û£ú¨­ïÕÑT¹ú–ÄÍß>?þýzü÷à‘Áù?®%н¿N\øoÇÁ½rü=÷ª‚ÛtJ—Ô‰ŸdèÚé0‹~QÆtQg×÷ïižÿú÷¨ðà믾¤oõ7/Ú¼EBý=б—'Ùð7ºñï_?ãÒ×÷—QÄIð0tÆÏzï÷a‰D Ï«˜ÂÒ`ï„ ·QP`(BçG> HÈù¨?£õïéoõ߉¥G}ðBˆM¨(Aê ˆƒà \áØ$½EDå8ô=áâ*zGK IbŽü]@¿XÀŒÞ@ÀI#Ž>°ƒEñ‰G¤=‚'ø d€GÒS „GQ(A"òƲ“Ôÿ~%B EÐýP1ù?0^|Àè+3,‡¨&˜´ì³Ng Bè}K¨<“§Ð=PlF²…à9Y>ëè/ˆA Á›" Üâ-°\ÀJ¢%W ‘BA‡a@6 â ) »ëHŒßaò ð êË©æâ·Ï2¨5ǾŸÎSÄ?ø‚‡8ö7ë¨B<ôÏ¿ P4‚ÇÐ"šâúhÇQèûI-h<ª1ê%DDh̻Ʉé¸.~w ´,Ÿø "DÛj ¡ /ìçþ§à3&Ì¡ðÂ#®”€†Ñ~[ Ü ‚"&Š$ èa`ÂÇ€}Ž××w•±áúú/ñ{U¿~ÔU˜Ú:…MÆ4ª8ú|Ï¿ù „‰±!B…† ÄD*4l40êÛd¶è#A¿ÛÎü‹õ~WŸwu~ìûÉ|¦B'“úa(‘$Oª¿à×ïC7äˆ)(óy(­M ê  Lyý®; l ’ lb¨åäá!L§@ÒøÍYÐip>ÒKü¡Œž´° ©âYÐ?Ó½á ò}À ëÛÉ*ùŸðù0|þß2ÿûBã?ŒeÌêß ÿ½pÆüÎ@ö{dKOáŒAòÉ60ëÏ:á>Š ßË( ï$’CR’hЦ&áÆ@xb¿HƒðŸA€GŽ`?¡ù7Vœn  È UðTøž‡ðT ðuQ|“Rˆ$5Á0^ž§,5Ýñ€Ц@¨€*LNY5~ŠÅßôA‚ä@ð=@ó?E3AƒR&P}J¸|6Í~y?[@y´w4('z¦*ŽÐèŤ)Çj‰Ÿ®¡ANÕý~šê]ù® A1ôoAI€¸@¿@i|Ô¸:|GåQ8fRœÈ lhéSJ H ?û@ ‰-ß Ž±¨k@~€,àÑݨ‹zp€’Gu@ ä󞀓x%0ø'-7Á>ÿq?ÐŽ’S7½o‹\ 4€"?nOM˜I¢¼óÑ&a‚ ‚ w¤é§ŒÄ3~ꪯ߻u¶aÙŒã”0BÝ À¼íC”YBþ1>»égö[‘¼†ú¢ êCDÚ ¶(À!¡ÂÑÄ¿ ²o ö[ t˜æ4×Á~°º)…E@(C®Ž&}W1à ø‰R§¨Æ¿ùÎן¯zŽXþ½Ò<‚EÄ6>ò„ïFqtJË"z £’ä4A VÂMNùÑ'×£Ûeé·{üî–Ä÷ói4‘•CŒ—f)C 9§ÑË2ÄoOø|ÀÿD¿ÿÞè÷_˜Vù9NS\<Çs,óDüw‚÷Spcia/ 8À‹StBÎñSlCzi5@MÀ$D@¿Q(!'ˆ,i,‰~+ ‚ƒ³ÔåYŽ8øøO¡9°I8D±U†²rÀ7§ˆ…ÜŸçÐ ƒòïÀ±§Ó¢ÉÛàT‘åáYèL’u‰N¤É÷Õ?•M€$…¸ h,  ¸ âÀ(ŸÈA‰ éï%Ä'š‹(/‹r_ \‹ á4 ý§Ø÷ûÀ€ïOù¬÷nÁT ‰DCܤ߀ a•‘˜ªQÎΧ9F X”ˆÚòSÉ4(ýʱô»HŠ?ÁÒÒýPûÐĸˆPÿã„áúúÓU…? Ñ÷Y&dÊ^õ9ËD‹õë,Ó?›¤üy©Ì$5ÞÉ ˆð/¢;!¢é.ŠþÂ@¸b ’ó¿¥48áç%6“ÙÿQþž€X€Šyçï‚®DÙWBI¤‹h±&øâ¯ŸŽ,…®A]G¡„ÿ{…ÒÏ;¥(E=‘¥Ãh `ðyôCÑÇéÈs¾ûyéW|?škºˆA¡óãÌïßóH#þr ?‰Ð銉î||ýy-…ýZ/þj~\ïñý›_V|üQ9Z¬ñ½S~YóA£Ü0ËòäèÂ?›ÒŸ¨?µœÏó‚âï‘MÌýmÑ ï¤ø¹4O `e ü÷7æ³ìWô5ôê›WUß×å|oÿñ¯ ~²âßéNû£e7ÿßhôƒGýùÿS“ø3úÅäþâq„L€É ˜d"I4‰ø…C F‚@*åF!4 Ô_ÿéJµßÞùOÐPþwèýVÌêS:§Àú1§Ï|Ìéƒ$ù˜Ó'þÁœ¾ø9§OŸÓç?çô™?™Ó'?çôÙ9}M½çô¹?ŸÓ§¦9}ññ÷œ>5Íé@„Gy:E°jÕ`še@ ƒd€¤O¹8Hà$CŠÓ4|ñG"yΓ̔è"Ñô30Ü š¿ …B‰’BígK”-MrÓÓ¹iqǤ7Ñè )’DîÄ“hF€Ay†EjŽCvËݜ料v‰,ê=}BÑà»@ëDú½b‡CvÅÝšéÙi*ZDUF×Êå ÉNJœJ8`ÓñG–ôZ|4ÿ—Oo@³éÊy¾u.hŠN"f*£ÐŒõô¤w³ßÓÕ ’€‹¥¦YmM"#Ê'P‹¸2ŒÍ$Ѭh”IÍ‚5r‚ˆMé£wê™D -PˆÏ"ÜO¤Þ™it€²ó"A¾çû§u$BµwB-aA“òh‚”GR]h–áÃ,H­Àù2ÍA‰o;AÉ/“Öf¦”õ;‹1Mù¿e°ø!ÆA„£þE3ôÇÚ†ws¦ø¸âG!)êÇA¾¯ùnòƒü£ÕV` â_Šß¨_Cµß6Íï"õœÿ7"õÍEŠ„ø¹ …DE"ÓH$·(ð7-mw…1£ÐbfŠ÷ôµ7ƒ?_N"þÓ5ù)Ó}ô÷gPšfŒD ,‹øüóÇ«¡iì÷ÕÐàß–=Nú©þ@?PÌ\§I1¡÷¬zƒ˜ÉçŠþ)žþ¿³ºƒÿþcF°®>Ðkeepassx-2.0.3/share/icons/svg/configure.svgz000066400000000000000000000423221276304217300212570ustar00rootroot00000000000000‹ìKsG’€ïó+¸ôeAóý­™ÃNìÆ6æ°öyK4%ÆPƒ€,i~ývÃ’€¦` €›…›¨Tgwv~•YE¢R?þõý›Û³_šûåÍbþò œŸ5ó«ÅìfþêåùÏ?ý×$ÎÏ–«é|6½]Ì›—çóÅù_ÿò§ÿc29ûÏûfºjfgïnV¯Ïþ>ÿ×òjzלýùõju÷âòòÝ»wåæcgYÜ¿ºüþl2iÏ\þòêOggg­ÚùòÅìêåùGù»·÷·k¹ÙÕesÛ¼iæ«å%¼<߈_mį:å7¿4W‹7oóåúÌùò»-áûÙu+½¹™w¼Â̼º$š´“å‡ùjú~Ò?µ½Ç]§\¶Ç6’ûI½xÛ’øÍ›YÝÖÞÒ¿kÿ|>áSGY.ÞÞ_5×í™M™7«Ë¿ýô·Ï'Pf«ÙÖe>Áïéí=‘ùôM³¼›^5ËËOýëóßÝÌV¯[g X|Ýܼz½Ú|¾™½»¦õ¡O—Ý>$Öêù\ÿ2³ÅÕÿM—í}_¾^¼i.ïnæíÜ/.§÷«w‹û]þãý‡WÍürõºu’ôåôjÕ^iùÅUZûÚ«\-æ×7¯ÞÞ7¥•ýwÿ¶oWwoWÿlÞ¯šù¯wÓrÙ‚´>¼>¯|&ô—ö ?ΚëeûïGÝ'dÈõ±öèçëßµFÞ5W£®lßàêC÷lú¢<;_ËõÐÝýó}ËíìÅ™Iûî”øð«tÿÀN™¯á®ëôoa²¸¿yuÓ²XË ë^Þ;§³zË8U9?»üh}ëÎÍôþ¿ï§³›voŸÑ?Âê±&¶>k¹ZÜ}’m)­>ܶtºÎÉÕâvqÿâ»)uí‡u×¢õÚ›Õ‡øÃùæœÅõõ²iýtmý–Öî Ö€ö÷×Ö@×öІ»µÑ†Çeßìƒ)±@iFm;ždžұÚö†$0$ä ]g׎†„z$ìÚÑ®„~0¥þ°noã¶¹j¯?½}7ý°<ÿmŒ†!‡`\¿ŽÄh¶Áx¤6Ø£aD5Œdµ0’)ÔÃH¦T # Y5wì”UôÇN]M‡dËHÂúu´G²ckÚ¡êŽvIv*Jh5P*áA©DÖs9v¢j$ÙI*’d'Ìå(«e æƒ@EÄ4ôXP¬CBWÏZ Ð5*±NJƒ´( :,ˆ©ª+ Jƒr0PŒ!¿3FA±__¹71Æ°Š®Å5§¾ˆBQÍ÷P¸âä·SGƒù(׋f ‚õÂ~§n°hfÕÊ‚ó'nºv$& ª·˜Ò¤¨5Ód¨à4‡•‚^mÅ)èVÏÙ½^`´jc–Ñ+æFÌÙ(¥Ú¤Ô”vHÙ® ”`EÓó#†ñï…ÓÀCx§µEH„U|§Ùè÷CvÜ­_]Ð5x7öØ»ÑÎ+{8„'½@rýPq]œZ/¡QrÅÑ#P£ cÈjEbJÚËÙYv:;cX óùÑ»^ d¨èãhõ|£¦SEŒ‘P c$UÄ)1zT‹%PqPGPEŒ*õ0ªÕĨ1Xâ >dÌâúu4%¦=WpüÆä˜B¿29¶ÆUK\]ÛÇÈ¢ŽBa;59,@ͺ¶‡VÜV†s à\¢¡ÙÕìêh—€ÜÇ%wâçŽ8?bh稜wª ²$\íìz–³ãÔê®Çþ¸¶+îÚCmƒù;œí¾ÙwÜ=WUÇWšvíØ‘Ã^1µ³Vüe­Vý]­ÚpÎÆ‡dn¦®M‰m!Éb;#ø:Ä×"Aƒ  XhwÚ9?&$wú†Ÿ4t%öQÛ™û©MôÝZó|ž¶íøÂQ1€PÅBU @¡D];šÒa”¨kGSBŒy½å:ù>SŠÝa1’¾öPºvD˜¥ Ýj]Ó“üqµ]û]Ñ–­kû­8 Ùl'ä80îA×öRB!¿¡ö‚»¯!Ç>ÛáwùdÓÄõ¾¤¯ï›vÕw_΄É [‡_}ìüy~³j7L½]6÷ÿÛZÙücþó²Ù(×燢¹5ž>´ÝæÅUÈi#L­°fÑ@ÞÓ–p åéÌ'‡ÇÍ·½ÍïKýt?/¯÷o^ž¯º··ÓUóç "ˆä ôï{ÄXJ"©ôx¥ga×/Õî¤Öõ‘}J\Œ_Áup‰Pï»´-\ѾsQT´ÓÒ¨FËPÝ¢‡ ) €d×.YêdµDfðÓò"zœUŒ^ˆŒF×"¨ÑãÅQ ŵ‡«õ4”Óâ’ßëÍtuó¾eu1ÁÂnÉÙLÐ/°˜Xµì¢=HPÐÍéK–VÃ÷c)Š~ ˜ú˜vT”Èd=ã%‹I>È‚Q,oZÈ"(Ok|c¼YIP§ÃÈ dö¢N_¶ÿèü´Öë a‹’±D3Aiã÷{Q‹©²6/ĸ…­»£éí°ØLú*” ?xá-(»à“\4×ìŠqÛäB ›ˆu`õ‚¡QòîÕûŽ—CEáMw»á:¤2lõ^qð­îN˜K nzï»­ï"ìrZâR—øÄ‹;˜¸Õ%Ž9!±í•‘Ê>Î…8$l¼È *#§Bà¢^'OªMœ‰uÄÄå™xeâVûG+dš>fâQ}”£%ŽP=s ƒ˜xõÌœ0f¯ž8]ÈFL¼râäâN4bâQû'YÀà0bÇê¿éTÍ1qªíãŽ#&^=sŠºÆ˜‰Ûøˆ?íN—~´â+³Ùèdx÷wºXKMïíZ@Œ”òÅ–µSöz[¶çiVŒRO ›¾9Ø™@¦}ØTBA7XwÊ^÷d¿=ØòÁæââ!ùгÈ6XwÊ^÷d¿=ØöÁ–’L ú60aÄëNÙëžì·;ƒM…Ìhýõì õì€.¨h²tï±0«b+@\P¹ÛÅážúqaÍ ‡±Ä!“|Ãv§ìuOvñ§"¨<:E`8bŠ€`¨¿ ]³³èƒ)DñpêïBW-ê§5žŽ2ž‹ö×Â"€÷‚„}ã±8¢¦?©ñÉñ¸ñr„ñ†%(¹g¹ yÔ,À#,X;}Ja$61òú«O7Ï1—€1Ç;A\‘$1òúÙÓHFìåÕ爈¢1bâT¸1ȈË3ðºÀëgNLç#ú>.”1âÌÉ'Xw2¨éˆ‘×Ožâ.#F^?yŠ³Ñ˜‘×OŸ©JN#F^;}j!V¢#—úéÓ…XmÄÈk§O+>bâõ³§{ ㈑ۨ‘ׯê‡.ã­ê‡®ÏUý*Â~®êWösU¿Š°Ÿ«úU„ý\Õ¯ja;toU?toU?toU?toU?t{®êW­ªº?Wõû†ªú¡û°ÿ(šæ¯5Š&»Çv]?DLáÑÖõC÷AÒÖã=ù8Voe?t·STà{ªj‚§E'A9|q»Ó£ 8ÊáK.ž%†rÅ#‰xÍòó‡ FIÔÈö]Mäüƒ¢´ üƒð<Ê i§~éÎ0séÎ0z.ݹ1Ê0y.Ýy-{.Ýy@-ʰx.Ýy.‡!KwN°(*º~ü’ƒ8ÙXjw†Óxkw†Ëˆkw†¦±8Bæ½tgx û_h¤&­ƒ• Qñþ7¬&Z@Ù"G[ +j3ǘ*ŒŒ”9UfNÅ"-mÄn.µÝœ‹›æˆÝÜj3ïºG̼v ÕB‘h<ÞÐ’PßÍ‘QrÄ¡%kgP+h,#vóêÔþŸ½³ÍqG‚èy ЉÌÈï Õý°#÷t£¸^Ôº5U34æª:ŸB‘Iº¦d—™¯î BŒŠð‘×ùZäÍlAâ½oVP3–Ëü¡²1r[/s¨råÆÌcùI £Ócc䫨’¨·É¾ TxýÌÂÝØXË‘W°gmŒü‚þÙU•¹±³\Ð?U³v–y-Geß9ø|5r¬ŸSع-YÌSscⱜ8Α¯ïžZ’%û"×õÝS"ÛbcäXŒÜȹØ}cä¶¹±$ëÆÈcùŒSGnŒ¼–«¼µ³m_ä¶þð¶Å ¾1rì|}’g›í›äÙï$Ïu°ëä¹ ¶ó;Ésl¼“<×Á¶w’çÒ0ËöØ7ɳ½öMòìà}“<;°o’g‡½“<—%yvÄ;Éó%yvœyÚRDô7”@"nŸ“<­Íû&yvžzÒ6ñ¾?7‚¶F\›äy©Ýdœ&CmÌi‡½J[{6cL)f&#›à–:\ÉÐ&˜Í«­6O ¸yšµ>îFvÈcÿ¨U0L!ÐÂIòÈÂN-ÀÚV{éTWOu/Ævyã¢< ãׯ~ýFƒÔµj8S”ãvéF¡êÚÂiT™¸ÔtxÂ8n—n>[¯Ý|ž…õ.JÅÇgf^ öâ#ÓÀ‚R¼C©aÝù×»ô|®ûÌá¢XŸWq\qÁ͆«šÕ¨&åN왺ölîBÚ`Æ™´¢aÑpà¸Rk ¡´LË!¬ÔíùÌ/‰Úçè̾vy¢bˆÚJ·ùL̵–uypöÃVÜÙ·ù°,²˜uXs"n,þü¿·ËÅßœzÞäê4è€S°ÚíÂhsHÖÆÑæâw´ùËaÝÂ;Úü7hÙ;Úüõ¬nHÅ;ÚüwpÕÉÑæÙ–?£Í«4m“hsHó¶ÑæÆ¾Ñæ¶“£ÍÙ¤ò_žm97ʯ‰!â?ÿæœCÂô9gÛ´tÛ”PH×zæ‚J·m™ƒy5ó¢dã:˜û¦Ì±š¹‘²†ÅÆ:·ÕÌ•B‚Y6f¾º‡ !KÒ7F¾¼…‚¼lc‘ /¹´6÷ÆÈqÅœ¨"¹1s[.ópµÒ}ÇD‰7òÕÈ/hŸb½±›c}µ*ÁÆÄ/èŸðlÛYåôÏgßùG¸e…­eu Rtå¾#‹®nŸ fƒÕÆÈq…±aû‹^Ñ?Ý57FËÅa¥Øy½‘/Fn«û§’—yÅÆÈ±y’ÃÀ½ïÈb¶ÞXÚ+bcäëÛ'‡ŠÚÆÆRˇDoIÏ}‘ûêöiäé©Çò%µ#v¹-G¸ºoŒ<–#/öàÞùúîi0®½ÔÀÃ6 àóå¯qÒw(e*âvåîLqòI[#,äïÝ<ªëé›2Ë=ö=öQØùjä±¹Rf¤ËÆÈk9r›ç¾È•—#¯¬Ô‰c1q'8|k‘ŸÚ=…¸T2Nkq‘ƒÒµº6FËp¦íŒ|u÷L’nð¾ïEªñbcQªŠî‰c=ñ¶Øx^±õ[O‹‘Çùjä«›§P´XoŒÜy1òÃîÕ­jcæX.s.-øÆÈ×÷O5”ǾC¢ÇjgIÒB6f^Ì,{ŸÝÆòÚÔíš²¯ÌëçD©òØXæ¶Zæ tU“™ÇúÙÜËD7v–z#_Œ×~LµŸÖjíüŠ1$Uw†Ž;“¨ªc0 £}qWÚaj1î¨ 6Ïï/àL¶³üü ¯Uî…í,“ã5œ zѪ¶z¡Sdò þ{Â#¾Æ¨®E-²µ¸;:)CÖ¢¾ÔEÄ.r¡°Òq)*¨¬s‘K› äŸj‚J^yè™$Jum3¼keèëéîPþv‡u¯2òÝø–8F‡ûÛ1NwŒÏ·c¬sŒï·cœƒZص¿`-ìæÓj<¸ä´Z!¨‹VM«}®ýø\;=ÈAÚ/"ƒ4KØì¸iÊéÌ1„Ø.2‚*23bÜMƒÚ2„‹šÝ⡚ÿóóÎ$©wKj†§„på¸Iœa “‰càB]³Ä-)Û³“˜R×,ñ£¶T:?IáW­Ëä$LlÑŒŠ?+r1ÔWÀ¡ÜÓzÛH´ÌtîVEì´ÞçÚ©öÓzƒ*U3õ¥ûæ%°N%ùøFf÷$sÏx4‚&-•Ô¡A¬ì:îÊM^¿-òóã¼D¥¾Êó•æ)ª+›Résrg‘keé”ÔÕŸŠ0i©©,ã^ì!Ï!„D"~\³L”;~£R•·KÅlm|"`“aÔ0ÿ[….C…E 7–¡Eˆw¸†ã¶ô™ºTÌÖ†3µ'Å"ÃÉÒÕóÛ]¨Bøøf¼L-ÕA–‘6ÄHSÓn§?RW‹9NäŒÌ<ÄìåZ‹9bKMê®äª”ì‚CÌN‚®½Ä\gŠ9,’M5Õ‡š‹ZÜJª9Ð5ÀÔ&ÐÑ”p­šš½à_©ÙKe’Q&i Ç,£0*Ö°YFϵSí´ušåU³)NÒÎùx ˜ƬC˜ÄBeˆP&´Æ=˜Iaú æhIÏþŠw«úÄ;ŒXݸ&Þ ‚«Ë„û¹ôc.ýE»ˆü"lu“c'I1N¬p¯ÃÞ]ºjÜU…4¬†YQ‹ Jå Ò@iÎÊ.R³fL¤-©:œuBý\û1Õ~bíM]þR+£‘­=’~([¹%c0µZ üqbeÙ†Ä1ÿ44ÿOÔx¢&vòâœýQ„\!“? ø L69ÕžsLøø¿¨Éã.($ã¸ÒêxÜ©ã&‰“§ jˆ“v¨ÖíÊ£XpŸÆ¤â\‡ÚHÑýcÞpa‰øq- 3w4 Œ;(›}=%R›ž,¦jI ™õž‹?žŠŸŽ`þ¨“¸•EÝ­ç© â*i½waB™"§õ>Ìų—pª ^2n”'CŽ1&Z£+~tJ5ÖCÉ•ZnÒÔ^i12Hüí;ØIhôWvš>Û‰¥™ôd'.$*-1Û‰ E¢0Û‰’”er<þµ©?Û SÀM}ˆQ–eèíRa'^j9Y`G¤=ô¨ÚZ·ÅOØ¥>žx5=ää³ç$1+ á"a›±Fê5c7¼ÂzÂþ\ü1/7r5„}] ÉÓz¥‰9Tç‘°›ܘûÖsíÇT;NÂ*iþò‡–B&€û“àv÷`²R9a[³„ìy‚~Dh©YÆHªN„ûá$‡¿Jp4#‹gdù0#tbÀ’Š3ó¶ò&_ùñ¹Î~ƒEP–á–J™ÜÇïÕÿÃÞ¹5Éu#‰ù¯T̼x‡PÞ/œØ}°6ìpÄîËîÃ>:Zd‹¢—b3šäh4¿Þ™¨j–º$¥¦hX$EÕw@"‘H$ÐÒRw|>WÿõÎÕY(áóÁú¯¦k~@] °“Íð‰9§ÒÉL7ª1ÝÊ@˜¡ ëT»ÑïäÊo«ûá\· 7MŒR·¤hÇ‚I,› ISÞ•l•šµe¨ ðßÁmßVõCÞ^H6 Ût„@‡&:L2{Ç“Èæ8“%¬è:Ott~âw´T2ðšwŠ0G{‘P×­¶wè › æ¢ý±+ÍèÛ#N!÷–Jà¦xnä1PÓøLéçe›ž•ýÿÊÈá“9ÖT­ã4ÒÐO`åŸhãƒî’˜¾¼Œ:M‡„„üãllÈ䧬™L噉¡iˆ?8–´‘š|Ö׳²M/–½-ËŠ ÊüëÅ@‚¹Á¦CHT>àjÓ§S§?€ox¯~Õû”ÓžÌ.qúþ Ð'˜öŸN±òY±E±ñÑ*ä‘Á3àø­S"LŸëCªS?–:‡§ÙF2\ÿqtj?5ó ΧcŒŒ ´NGÈ?›Žçe›^*ÛÓ1!5>À0%Àüòˆi°ÿb)'Ï6ú°6êŸ^6®_u|Z}Òg}>¨>õ³>TŸñYŸ¹&%}^“V§aüyày&Ÿ×ù‡Õççuþaõ©ýb¨{Jä†c"gÜ¡ŒLH§íQ_”Söß“Îã³ÎíµMé£ëœ rƒFˆ›Œ@ ÙØF*ɧ[ùεõ?xH¹+r •Øë77¯Ž…»ø$H©ð‡;~óõׯ¯÷áz—½~óý‹ë.þhÏ›ÛÇüº>.t³+üù›ï㟫פֿ.T‡?]ݘ¿Î«ƒ®®*ûâ¼ç¨(&çs=}pßa¨k:ÿù¢2ïk‚É+ùû˪½T^®ÍJ]¨öKÕ…¯–P탴ôÝ7Ïß\ÿL¡Úƒéˆß;õØäaf^O…1",,é’I™áǪV/Ö§åß«Ô÷/«iÏ¿$¼×(éƒáûë/n¾ûp/Ì”òs”ô•ÙÓ{µ=˜’ØÞ¯$ŽŸ1Nó×ÏÑ’ÀÏÐRÌ_ª¥¯Ÿ¿xs}ûwFOÝÄag¿SÛ××ÿëêíë×ϯ^þo×ëÞÿÂÕ•§ÿrý—çWožß¼œSÂ$ì3ñ¼vÎwºÖMúdÿy vó˜ÌGèùå-Ä)lt’-x¿hGd*ÃÕõïû¹2 ÚÙôP ¾æfš Q žA½Ø0wKß!Çp¢8Qú¥v”ÌÁŽpH¤àO›Q²Þ3£Ov1Ùò.¢9—P"zÔuD ¢Üæó–³Âpä€Ü0‡)¡É¯{!ñAL)ô£¸$ Kñ÷ØRø=[z€.åGé„ )¤½§O‰¡Où‘†É9ÕYß×¥ûÃôÉ®nèNy1I#Üp°‰óñæ·K%RCP6ËáÄž2þ0ÎLv£A†®~6ÙÝÚÏ0µÁH¡zžSÐá!ôã9…©þ§×_¿®{}óôù«ýÏã—Wß^?ýËóëïvºtöÕÕ©ÿ¯®ž]W¼³kºcçõà«›Û§×·ÇGVŸ³G+$š+ôƒ»o==‡ËÏ_sõôæ»}½þáÿÝÜ|»ã΄vïqûN‚Áqïá^_Ä!¾÷ðííí>Ð^\}½wªþÂUèõ77ß=»Êysûöú‡’Oož¼ývоmSzõ×–˜²¾úêæ¯g/¨·¾}þôúõå÷Ö³»üü»ç/w=úîùÓ7ßì½&§)ñÍõógßì)áÇJì5ˆÇ<ܵFÄG#úöúÍÕÓ«7Wws$ÈH8Îí§_?þ÷ùŸ'¿óäÉãÿ¼¹ý¯;W1 \}uóvoVËt¹§OÏYvõ柟»›Á¯ÿòì¿ÿõÛ»éœ~óý«ëw¯½½~}óööɰóæÍ«Ç_|ñêíí‹qsûlÉþûÛçSè‹ÿxóüÅ‹ÿ=+Y=kµztX§~Ì/ÇŽÖ·g'œlå\{/®¾º~ñOø×ùð€÷Mâæí«oož^/ñ£â^]½ù¦‹®mGùñÿõùóür·á请o_\?¾þËõË›§sßv{ó_×÷.ÿ·?Þxþ´ž·Õ<Æ¡ŒqäÓ¡î |¼7ïåÓwáÿ½yþòœîм¾}ñ|ÿë±ÙÓ«}æÞÞ^}ÿøåÍËëEÏÛ» uëî"Ò;w¸kóß™ÃÃ7ázør~åLÎ&8MêˆqÈÆàŠ;K0*ÉiÒ,°˜g#Ž)zO”ÜÁ‹arˆÒ‡Ûd†h!“±¤«OFaŠ4™+SÐd˜æÐ²jQ¬š|. šj^²‚rH”Tå)„Š!à&SÊ9¤Ò&<ÜU©Ãˆ…qgÂTº£2«Ÿáƒ8DtÓá"æ‡ÀÁ]È7…AÀLv0>Ú“ÊhQñ!F!J²XК™â–>"‰åCV¿À–d V kDS%ƒ¼Jy•ºþuGÐb!ܽ¤N«œ0ØÁF¨»5‰0ÄY®6ÄÀ5Z:R™§±ž˜Ædv’½›Üzlª- ƒLVP%6Ù]°½Ô•#â4ðhÄ5Ùî¸æ`4à-†¦SFÍÍ¢²S V-Fi“ Ç‘‰G±P9I“›”´`ÂQÚ0x2W‘#SÖb‰p”ŽA(iÂðÖl¯‚‘1½ ¥'I{H/†Uù”6’`Üþ}g2TU¤üƒ"ïL‡šOfšžÑF½ZTq³½¯£_n—ùvùé=QŸ|=;?z¿þ-M¿óã&ŽH HfïƒÖí4`¨2o9˜PûŒ!ëȦñ9íÂÃS¢hsÒœÈÔ=™»Y±,áûÔmhJ:nìc»4 d Mhd a¥órˆY@lâƒULùCELdN5Š©r°á„êÙǪŒ»0 ט¯ÊξŠéŒoÃCX6¤ ‰½{q%ä ¡ƒ¹óT¢$n+'«¢3O% ¶©0œ¡kÈp%Ý”‡kfÆTxàDÉMajϱ³. N´‰ „Ð ¬wŸSê<©2¹ïÒ@(”gXG ä4·ŸıT"œÃհϱR 9K …M¢ªÆµO×(724(©ŽÊPgy›Ä惃À/²Þ2#Õ9&&Gx½QŒ6ìšÝÙ§E†õ %¤R1I+"ÂVÈH s—ʰª6}¸‹É„D™šuœ(J… Å' '3+– ±qQHsŸÔÕØi2 ‘bÆJ1™qFÄd$æ-­\4™»ñ¦bâèyqJ®\'9ó6ÕdRû_"ŠIEE½-4=T&+„ÔFTÜ”kOLˆk#®eò–è:ß`Q%s0AÐÜL¢Š€S$X›ILï’<û>Ü3{£é¡Së¶êÖÂÁŒilÕH•М ttSÁêL$ ^êö…½qÄÏݵüôž®weÇÝ\ÿón©˜u°øûs¹÷{©vÏ¡' o82) ²z"‹ãÖ)£´<0Â-¤)•“ƒ(÷+ªÓ/ƒ -n®“I¨‘µçw4k\,ÒkÎ\¢îw1:C’êÁy sN‡Ù=Ëœ¦C' ¯Ô„ºE”CŒÄƒb14-*VjÔܨԂFÑp¢8–Gí$M­T‰³I®“S…¶dA ª“bšÝ ÜëàÁ”§C7Mvl‡®J6z„ÃJ†étÓ( v•gœº· … µ¼¹ v%M¼R¨¹ÃéÍAQsºƒk¬ÒºX˜´þÍ:Ѻ3›ÞÜÓÒxåZ!5§ G bv¦SRqóA;rÅ‹¬¹)’n\é+gž¤sLºbê‹*’,;J òm„ .(Bâ©:g! o‚ÆZ$‰ÍZ’ÂÍ'$bG¬{*ä8™A(ædjiÅB˜×m&rˆI]Ñ'#Œpiæ¡RbN`„ÔÂè,EѬ¦^"HÆKÓ±ù4|u/§¦âÑ®<5ˆ¨ «©OÓ”D ­ÔYÓDf`ðDYÅд>…ND¬Œ"f0×ÇÎ š {1Aê B4 “J &…ó:ŠF ÉÀDÜWÕ’íÈCÚ‘‹xÖ,³H ©®x¤ä…./7~9¸¾¼© þMîv{©øàþ"¨èŸ~³Û‹¨(+·Š ‚Ðö½fäLÛ˜‡©ÆNsÚ ‹î”ˆrø¤•îÙ„G¸Dâ„:X\³Ï×ÐCuÒ)¸IŽÀÈà¤öa,S8ÃjÄ’õP¾È¾\Tƒ5 f”dÍHp1fŸ½¦®Úµ™Çb ¸˜6«f7 Í¢îÎÑ,…µ˜¢{.f«œÝÕÒ”q1V*F䔋‰s1tå;iÓ‚` \Hˆ¡„ÍL¬˜ 'ž„=×€©š¯ÓDcÛȆˆÔ^„Ђ7‚á@•kmÈÑk•!%"šˆ(D izÔò%J,Úã<)ù\¾Ä0{ãA–ºù`Và‹lmFD¥ÿ§*)†ÖknLÓ£A$ Øî\’Õ÷räàRk}mF\e“в”|~pŠÖjJÀIzi2\ˆdÓ ß‘žÎ*‰þsãÞ_èšH%ñ7ëšÊ‡ø´r ž½; ‘”éÓ„H+þåP -‡%²N6îX{dÁ^É‹”Œ‚.ìZ(RÁ&s&ól&\Ì”rV½¨Ó¢<ó†lé•÷#ãÊ{úœ^ žé+ïª\w¥Ó!¶Ò¤öpËÎ{ ÐÊ{$:iö– •*ï‘lÞi@±>´ÚYÅ`‚+íaî %«áΕö¤Ð$Ï·VÚ#X&㬠´Òì±)°.oŠ9£_±‹ìËE-½)jh3aé’¤¸XP#c= +©)D37æf Ô(àˆˆCÂÁFMáX³€vIJHˆÅ‚¼X„2/iAÀh*¢ÒŒÅ¤˜&ÓBFØH,ð(Ì.]PRÂClÆ ‹p1’8ɲMÄF®“¡F"7Ã/ÆŠz&ÎÜ© D¥ vìFQL’¢6¨ËF8ˆ"ëÐzA¯$S8¨4b‹2wE*I Mœ~=]v¶üº!wŽ)É…Ú…‹¤l>DÈâ;¹u³¨+Ù9¦¾ì6¼ö%\9&MÂÊÂhºím.ˆÑ,,&s]I!#¤BdJ9¦§¬SzH¿Qzoзžh °ùd‘ì“)Nm¬$ƒKuÒÉœÁ8JZˆÌ&3 .–ˆ-m@œTÒF€2™‚.iÇÐ~£pp1K´% áé^K bÝ›w’–&IS£û¾³2TÝL5·«‘­% ™¥S¨¯ å°å½¤º˜Ö2ˆø6m„C9§ô=ÚCˆ‚$[_{Q˜æ4QÐV¹PæB7á²1öLÎB¦9šK£ÊŒÐ ´juMRæ*·-€eNîå|ÝHÉ‹¥ð -DªÕMM‹º†ËbÎÍ9ðÈDšu«å„iêÍ(Ñ‹)Rðbl]ÎZÝM“›J,æÒÒŽvdÑ,1åN‚›æQh¢ðb‘™ÜL½tÖ”ÜͰf–žÍRt!EÜN²&ŒE²‡5b;!µXÌ+n¼Dx8Udì5½Ôkbéñn¦²ÍmƒY›—;Õpœ4‡dpôPƒ¥NÈÍpcln:‹FìIÈÆ4"§Ö&Å¡F‘íQ¦w^ˆ¦!*ÕÁ‹JàLÎYm)t€‘FMÏ PÙxz¢3ÈI:) ºÐd&æÈ;cGeµKó°“uÇzåBKw6-ÙŠºâd‚H,ÍTÂ' ðdlÆ‚¸ÒÏìYT…"úª1MV“i2t‘N»¨wÖ‚Yû¾»«wú9±ÓÏ))~žŸb†qL?3¢uŸÑxv²x¥ŸÈw¤&Lj]u˜I§Ÿ°³Éâu›ÉQ¼ré:40â‚Î.fŸá#¥Ÿ×… þëøu~ލ¿¬üòyLÿ`yf'…{᳑«ç6‡Óeb%¾*ˆž3Vö0aÛêÚÀh2’€>94D,s(J‰M…¢»ÈDÌÈЋ±Ôj½ Ø Ê  ÃШhUëŸn ó” ÉY±hgþбLÉiEÐêv°‘––Ž}p˜ÜÞg8¤¬sÃÕ:ɨCu‘·ï${‡Ïáq¼Ýî¨Æ+|VŸá³EZ…Ï` ui£ÂgSëð™1¹Âg&öuÍ[³£]²Œ äËf&YÈ!9%JKE³Å y1Ç%k’ šQ3²fÄ.‹Å‘¡s¥U‹F¦4R^ Èx1£Bê~”Õ@lÊÞ,H½…¹,&(ÍXÒ¡Ü%1ByB!ÌL #Kk&¨rF㢮dÖÌ¢Øìi,æR:†-(á9#g1îä"ÕîDa­%GÙ¼Žg;X¬ãf5l‚†eç4áDÁ\³p˜_†Ø‘³äº)>£dÄt‰‹¬WTN±º½,‰FØ¡x°ÈŒœÉûØUÀ±B]U¦B£2ZTÐ%P ¡JNÄ‘®8¹ˆN$È,Ø¢ ê^¢"æÙ9y!­)Ý|2´*‡ª–+)ïaEÙ´o5+iÖ+†dHÅBüx¸«ÀTTUe2WVËÉ ú…îŒÅŒ¢¥™5A'TЊœÓI­"gL€Ô‹ns…Îl sÉ&5L[¡³Fðì&›X¬0 ±:‹A‡Îª$Û´&ˆ¾ë\!+úЬ3×̉\¦ñ¨3NÙ ‰ËÈX’’ iLda eßd rÓ7›iÅÍ$®í“³c)Æ,„‰ØyKöN ,ªQT”(Sjfà¬GÆÞÌ-¨' 6slj‚ÀØB£bŒ‚¥­¦aM=S)¤ŽG… ËÞZ¸5 Mi&‰Z,Ù<ó°fŠ’Gi_—,ºS£82un–åXÉ‚l\ ´ &P-ƆͲ¤/P®½7UÔL`ˆ5'&ŠaÙQ3*AoR˜YVМ”fs ‰“&üíÝn9r€_å WЪÔÿ6w¾õ;“d³00Ø5fgƒÄOŸf±%¹ÏiYÖèxletÆØŸØ"Y¬"«‹EíÐNÙ"HªNs 5xRË´A ’09Úiö"Öé4;‡:µÓLš¢ÃÓÈ*] «"7¿#ÛÎ`ÏØ ›2M ,mVêÚ%33M°½æm¬bº€ä&Ómfל04Ôr+ò‰¸sá£ß(\'ëîw fS#f™GmsšÅ=S*‰-gcFØ5+ÎÍifµ><€+ÔÍivåu+Ц633ãé4‡ꤡ3Ù_Ñg0õTÄlw^³YU{ÍNC›×ŒsûÊ9¨¦×lÄz$³ß´Ûlü’3‚Î3áÝçwŒ5_ߩߟ`N©‹ƒOßü+’ÃHÊœrüxÆQT¬óáSÃåæ!™ÿ—õ*¢þûã̹hTÃÅJ± V`t%˜Â .xs¥tÿµ¼ågÿ^KxŽÉgøîêÀÒtýìg­ý#©Š8¿›jô˜ÐŒžÎÂç?‹Š¿$ ŸJä2 ßT‰=ã÷OÊÞ†ûÙ[Õ–B¯)á÷h̵ /Õ$ Ø”X´‹UXÎ2:üSIgzkžþ•Ê~l(Oc;DmŒÆ›-†²´-’…´-ކ§£õ4â®¶$´ûÛI¢r9·ð_ÖÖâõ,^ B9™örN#2>`asÏ»§ÞQ){Äî¥ùs €ëæY3ÁùíŸB…7çK˜¤ Wúë™ ´_&-åKA†¹ê÷œäH›Ê‘õX Ñ”±êLm‚Ãâlvp@qD¹Òì0Mð)Ë.NnÓVïMîB§à;Ó6Lú-F¡ õ¯7Ð*³©ŠÇ7ž/Œ€µHÏOPáùÈXa OdiÇZ¡:ùóíÄ_l'yi'Nbáõ#›iô€%8_æ5l.>Öüø\¦§on ‰Ë›ÛØ#:—Âý>Û1šAM‘¬† d´Ìs!2ß¹Ã:d€YnÜðìwö[Ô^ýú©'3†®š%ôô¨º„]eTéÚƒ¹´í⟡Y¡ŠíˆH‹Ç(•y}§¹,¢à„•¹Ý¸aè +¤Uo7U ‹A•Í8›Eኊ‚Iy"Ò ’ŒHý0‰ uf|Fv@Ç CFkLÔÑ· çyÍZ¥Þ…ƒ¬²é¨å®¤:vn°qúA§ÔÊ´äÉãî/P«ëlT=?On¿­¥ «.¡Ò[P¤’V3XE}rG*¨î6ƒ™È1eR¯4!°²+’kš±ªjðÝŽ¾× ÉF+,@ª-ˆáE½eœÔãE‰Ü©7•Ê”‡ìÝFµt£áÙŒ1%'c‹dž:/iƒî¥šDÉ&`tßO†©]oÓˆ†…:QˆNfTj³‰4UøîÙ¶I%Ê7Ʈ͘³lc’ÖŒ"ðáisnŠÎXÍ™d°ôdñ;fÑÌÔ,êFëÝÀ°yM¸i.làª}ˆ"ïÎFTGJq˜[CÐ œÔb¢2H9| ¯\zóŠæ (µx(åý}Gdµô&±Æë§cH¾·/¼ŒÅä.ì^´²ÄôÒh"3³.Ò=Óm‹ÖÓ)­` =¥€šbäR½{ááG–ð[Cx~•,Q­ùIþŽ÷µ¦Ý|UÚ,‚¤ Ó]”ûóâHæ·_¤gÛ:T8ìûˆzBU•y¯,b¨½»^YÛ±\g©è§’™I Dž´äióNUSD=BïË1°GV´fR8qoø yÃr »EÅT:…A…dé"‘É\§Ppg‰E ¹Ó ðPó™ Z,V'SròXœÀD™Xûxœ¢†•+=ãÁÊ+þ„C7ïù¶™ß£Ùªeú¸q‹røÍ+Ðj (šgÌÁ:Ûûˆ’ô¾Q³ÞËCp5®yfZÍûI¶#¤ 2h@qVøÊ°: }€†?%¦&$boTÑœ÷(¦oWOEïö åÊ<œº3íRùÜØI 鋃ШY9Æ@RJ[ÿ0‹ýôþHG )‡>¥˜ÿñééå &Òïrí÷±"bzqÌK>|ú0˜Pi5˜¹IF—!E\8Ô&KJ¬(2ª.0¤¢EDölQ36ÌÉT¹·¨Xªt—ĪÛ{€?¤³J—ËÊô.$á]ŒD·g]½«`Ǩ­Z$^¡ØÌ¸v¦¨” =þ·~Ï “ª˜Lmt™ÀBMe2Ó°!šÊ”­Ã!E2XÐèz3‹²fVÅ^¢>VéüV™{ý9Véçߦ"*(¯÷´ 1Cš[-l@¥¥¼Ý<ÉLÅcÈISX6ЦZCˆÉ+›$òP¸2É-ó7€£)‚I‰x¿D#j/ôªƒÚuA®ºHzzÿ9tהƥ?þéh íïÜ+B˜gbø½Fµ }Z¿ÌäK‹÷7U¥¦ýtGëû åMu¦ nà…µÜ¨³eñ [H4­¤ã '¦J;ÓÀê—X]åQXÑý| ŒY¬Ñô¢ìÛ*𸰅ñbÕ%„¤òU®iœH§÷{œ`ÌÁ/KÿAäÝ™hû/Òî÷Ñ×@­ßâu.“ÿüð÷?¯5øëhïQ[ÿõçŸ~ýó?ßr@ú˜l”€ÔõæKͰG›ñéÃÇûéãÇë6å…Xz¦bAk LÜ^ßd†ðPk¸/ùæñ}IÒd~±´;¤±«átÀ(ì©uÇ-ÿƒH¼ó=wHϬ?Ýwý%®Ÿ€ UUÅ÷õ÷)Â1à.%d€]þ6ÙMn‰DBòžþïJ< íM¸wÂeM~¶pµ@]y/[A`tú`Zz6U&(’ór+( ÌѯÝ;îÀªÍÊÿ<ƒc]n‰H‰|!eý{×¼lÁñ¸aŽ÷#v!`_$;™»nv£öuÅ] ö?ó«Ôød¿mA~¡´¯Ù¼ s‘ÂÖœçÕüdÙ«´dë—æÞÔ®yêáù{Í–¯ò´ÈÛÑê·£ÕoG«ßŽV¿­~;Zýv´úíhõÛÑê·£ÕÏ>Z½,†ñ7Ì™ßzrWû»d#8°0ÙÐ$ £Oa¤¶R„@ ;q&K´WZLÊ'vHw·ìዜ^L qKÁæ$'„™/æ@(¬|Š‚P3ÅLisî Ø©/,pŠpë[ò=4mÑÖœ:…Ìœêv¦C%b<f¡$‹&–0·š‰Ëìb™ûQ·TÃòÛ]fõµ¹‡»ÄÙ7Mûÿ¨iÁeß]Ñ8‚ÇŸG£ ŠhWŽ*¼i⦉Š(¿·&¿æ×ÃP„¼)ÁJp0%<ž…™n|󊣯œŽb¥Ék8¬"@®9´"ÒWT‹mPÕäS8 ‹l7ˆ%×ÐR•HníÑ$µœÑNuu·ÅØj *R“ňˆ¼†:;{ˆuŽàˆíx1E^LÁÂåd*nEK(‡²ŸLÀ°oÝNÒâŽþyHÐ’yR…ROæ¥KN’Á‚ÞÖº²ìp'·YÜ}ý±DµÁV¦(·ÁzFÆ!{wH£“Ì[ QUÜFÌBÂmÄÌè–³×^D’Cd…fÚ åLŒ<½Ú°ËIƱ+W‡¦§¹k’÷Kp˜Ž Ä \„¸V„Hư¦YÌ—efdãyL‡Ù›†)Q(z$¶ð2óü"hu›¨¤|Hüˆruض–, A:)C±°Åeî5$nr†è|¹@¨Ž­²*{êè§£à'{'ŸÆþÉzæ¶Ït6UÝñb- M5iákô½ü‡” P•©^•ÕN¬¤©¼2L–Vã„à"%\u¥`˜XÔªM¬xÌÞÏõ³i–Ö0é#ÊLf+# DÓQ.*Y´×A­ôšOKbw‹’<åÄZʦmª˜™Ü{)4Ã^1×e‰¤;)ì™-‹d˹”©ªÐ‰ L³Lšm§JL˜[’‘Ú aP)wIdµLÐkš€e'»ŒÂå‚ùø"©ùc ;6€§»c?fwÞìéµÛÓ~Žt*~æôzýÐÞõç9 Nÿç\³ÿý¿þz¡Ø­Ë=3¥§N]×Ù]+=ª˜‹•l7'ƒ“Sïz1ªÓ)Ò]Jqä>>¬†Rчô]´ÚíSÀrç%ÁЃOE UXº0¤…xÖeÅG´’zêhØKÓFK¾J ê¦CÝA“0ÒGç3ÈœƒÔˆT\ a•JK‚³[q~&âôt;”È«Q¬ZgöÏ’®¶PЃ³ÌÚ©{ëš)Q—V7–¬x‹Àéeå|Yèo¿|øË‡¿þôóCʰCªtC!0aЬÌ]Ì…{Ñ‘êÔ; ˆ˜ƒõ=€¶Ÿziœ\(U£Ç/5UOÄÌAÞãg%aƒÍG 0¬F­"e67‰CW–^ZtÑÞƒ·KÙþi§ û!ú=uãXŽCtqÍSÛÐwsîA²ÞijŒ¥| \†øÊt°0ò¹¯f‹ß?˜½1©j§”Þ–ž¹"+ê«|nØ*µin÷èýë¿üý¿×ÿýó V¶keepassx-2.0.3/share/icons/svg/dialog-close.svgz000066400000000000000000000051051276304217300216360ustar00rootroot00000000000000‹íkoãÆñ{~…ªûrFÄվРÍ!A€ šýÐâJfC‘IYÒýúÎR¢—iòtgç‚"ô´œ™÷ìc¤Ûo›dòhó"ÎÒ»)Ax:±é2‹ât}7ýõ—ï=e˜Fa’¥önšfÓo¾þâöoA0ù6·ai£É>.&?¤¿Ëpk'oÊr»˜Ï÷û=ŠÏ@”åëùÍ$`fñ¸þb2™€Ø´XDË»é™~»Ë“Š.ZÎmb76-‹9Ad>õäKO¾tÂãG»Ì6›,-ª™iñ¦AœG+ öÊìYEDŒ1sLç”@Ç´ A{*èØ7•bŒç€ó”Fµ8$à‰g•©°Méàý-üšPP‘íò¥]ÁL‹R[Îßýòî `•QƒMí|Ǧ?"i¸±Å6\Úb^ëùû8* ¨®^l¼~(ý{ÝMÁ>Z½ÔâO9„;¡jžM_FöÑ&Ž •vmfQ¶¼ P}þkDó(|Œ£ùOy¶¶eϳÃqmÓ xLç夊s÷<\–À¬è0+QC¯ƒe’ùû¶ŠÙ®ÜîÊßì¡´éI'p÷Ö ]Í{¶ØÃ6ËË`'ö$pþbÛ8÷å –ÅYï9ÌHÂûÄÖ*Ï[ÊmÓu/ëC´…”0¸y¬‘_ö6²«>ϱro¼B r͆ù÷yÅPaV“µ1œyž³Š2Ûº±§v ÑSÎV«Â–å¬(‰=QË,ÉòÅ›Õ ÃóUÊ ûâò¸ _M'ó1i ãidXšƒÒnçm³‡¼ä¼»áa²Å“U%/r +Ï›¹[Ñ'ôú ü5KXbvP?»2ýW Õà…‘»)£ʹà„b¤ ÚÓR e•ò´Õ )a¸`à’+SD1JÚ)2 ½ì‹Ä`þøàƒ,ÖI‘ëã>”?mib E®ò’T_á%uõÆê%EÇ ¨zˉé5ªùRzëH¿uüÚ¨´ ê—7wÓMXæñá-ž‘Y@fx0ƒŒÑbF8FSsÓ*“€ixEZ%ZÑzRÒKê š;RŽÙ•eÞÍ(a„[š…‘xúRå8™K£ÃÒîWZŽE8-¹Rx,Â@CÇ6Ú{Ûñù•öÂøˆ0ÉNeÿ),Ú¦ "Éb¦ 1аA¯ïâÒ¾L ƒ,1.ëåã;à!j®Ø86I²ýGž.@Tgß+-)£kO^)'!ÙXø˜cº{®?¦ƒ4Õçˆë“ëåIúh^ÈG ™0Š9ÆÅ^é,/öZw-“xûSX>Ô¬ë÷ñ•«¦¤™lË8_&¶¦kܹó#\6ä´sx³„9†öbÜÎÜÊnL×/páNÐ:z{qß]ÕÍWÛ»÷åŠ8Í4˜`Œyþœô޾ù±ÃÀû¯òhÔ¼TÔN=¿ƒ¦¥ÍÇoš ¶§)ÂðFPVöûpWq˜þ#Ù9vã ½C£wö1ËsK¦cF›7ÈmšsRæSQŒ¨W0†"­±ÐF ZÂMÇ¢WhøÛóÀù@úQ £”ñÖiF ¤´”´Ø J´àí†ERcIÜ>þ¹º!”üy»!ŸÓxcÔÿ¯ñL‘¡´gøš³õøÍ1.1£dø!†B‘TœÌ1ˆrfÌÍÅAÿtƒíKa“ÛW.6Rèv!yê×ô'X‡ý©?ÝŸ¥&aißRð õ1pÒ‹Ÿc‘ô,ÂÈHe8ÆfÄ$ÉûL‚±û.°=ݯܷ•Ñcl÷þ Ãûð)ß¶áÚV·NÈìUõœ÷YÙ¼FÉêi¡Î·.ÿånÃ^Çõ ûñÅCe{8»_"ßgÙÆqå„SÂä%Ú­D¦ZÁ_ ¥FLJ%È%2Ê–» ”V°;UàöЙ¾ËsG„G vW6û8̓ú[tLù3õëÒ¨g(À!žC‚)”qÅC¶_ç.xe¾«ƒç…ssºF|{è—p»ÙžQ™KÁŽ ØfqZµ /}“=¸=Ïá‚ûûìpŸ“óvcË0 ËЧ^ QÓzó‹V‹¿ûÎw–‹ÿdùï>ýAxŸíÀÕœ3]´\¸Å1,¿Ž7áºú…À—‡Mr;÷ˆqyÜZ´Øæöôƒ‹¾ß¨À¿Mì&Í.ã$ùÁ iö{ægEë"ôvÀKmeõ¶¾pVÞÛänú£Ë­ é† Ûm7YdÏÙWã£:kÇm}«Ç7SœÂ°ÊäK˜Öj£4ºW˜*¢˜2õS5Qopõ\tT •g¿Û{~=¥>ð"Lqà =¯3ÛÁœ“FMà!¹ÚPð²Í“>¼†E!¬yi–Ú&´ê %"7&k*¯ûi]<5üFtÓZÎ)óGÅv_Š$z0®0qž»¸ql#@î?'Ä1ŸQ<ùûp3ø?Áæ½?ãý§²ç $¤¤˜ë†?ÿ&R "5À]N©?ùV_£o¸Í×mò´øÆ|þèÔßàóÇÆÁæ^¿T¯ã@[Ï7õ˜Ðä7úÛ€Ã>f†3ÞæÄ`¡ø,ðÃ^rsMÉLR„©œu‚0(ˆ(j„’ ˆN 5 È=žò ¥• #¤A]ã8ÓlÄÞ]]ŸûßǨ?ÚÝ+‰ö@Kz3’`Cy9žÇ>ﻑñ}õ`º½¿Ò¬Ù=¿ù°D z3å™DŠ N{ã§”üƒãç÷]Eë´@÷oýEoÚ»ˆDJ¦‰V×ïý©â[Í|ª¸¼qY¿_0»Lÿöv!Âð(3# >““o'œ#F0M(UÈ‘•ˆ&%ŸPŠ´á‚Hh©€ÙŒ b¨`b&ð¡LË —È]©1Ÿ §œ/ÛÃ`¶fK ’P£Ý­_RÖàH°B É[² ¦Èp P¯¥H*,óÖôÚý¾§ˆTª‡u“b-µÀ•IÕš:›ý(è‚Ê`Žà9À¹€MÊ_}ô[I’f‘u'³”m>½ßvõ—Tõšï»°øEƒE†õE‘ñO>˜œ0ܯþ”£«øAH2îQ“PFPL‡¡¦Åa*šÒ¨‚¶9p: %]è ÅêÓØŸE9ñ¿ƒüèŒòm?»,eô¯¨\•nUžÛ#\˜®Š_¹= 5 N·p†ÿØUù1keepassx-2.0.3/share/icons/svg/dialog-error.svgz000066400000000000000000000077221276304217300216710ustar00rootroot00000000000000‹í][o#7²~ϯÐѼdp$ª.,^œq8 v±@ œMpd©ek#K†$íüú­n]¨¶Úm©-yf³‘f îb±Šüø‘,69=Ÿþôx;i}Îæ‹ñlzÙFíV6̆ãéõeû—ŸÿÜ íÖbÙŸû“Ù4»lOgí?}ÿͧÿêv[?̳þ2¶ÆË›Ö_§¿.ý»¬õíÍrywÑë=<<˜ñZhfóëÞÇV·«9Ÿ¯¿iµZêvº¸.Ûký»ûù¤ÐzÙ$»Í¦ËE öÚI}Ô²+3ϳûù`e~0ØÕœGªšJòÀ…Æ{@=¢®jtOÓeÿ±;]|ØÉª¬ÊJÐÓ´¤y˜ÖÅãDax±0Eê®w…þNÿn3lfUבæÌÌ4[ö~üùÇmbÌp9Ü1³A^ͼÐÓþm¶¸ë²Eo#/ò?Œ‡Ëe…âö&_ß,ÓýxxÙÖúQq³q±%^%mlî&Y1˜'–øV64œ ®ú -vïfv›õ†ýÏãaïïO×Ù´·œßOí©ÕIÿj’õ”•ËûÅ^v­—fŽ•¯×Ýl>ŸÍ–÷·r¡f÷Ë»ûåÿgËlº*‰B’ðY%ù¶Â²ìñn6_vGãI¦(o¯T²»éu¥ÝÇá2ÑT¦?í¤¯ Ÿ†Ùh¡¿ëÊïl‘ IJ°¬?ÿ˼?kŸ*d»³É$h ÷'ý§Ï­rV!¡µQ5»XÎî6ºÚ˧‰¢ »jq6¿ø0~¾+D3%ÚxùtßµSžÙh´ÈÔ1$™z]ÛnõÞæ ª¼aµ7·õö©W®v%Œu(‘”QªòG¾ˆú*Ÿg€&jœÅ*Žw§ÃÀ`”¡ËöIwHؤ¬´kÒiú#_F±}ìŽb±¡38´7bÄw‘Ô|ÐDNcÚáΚ‚ȧÒÝ«Ý14ÒtW$8јöÝûQ â»õWˆÇö׫ì*kJ5Àw1@û¨zÉ•41б ê·i Áž¬Ãã»1ùýf`yG¦¡"RSÑ¢—ŠØú`1žŠh6Fß~ ãצ5Ÿ:Âôs|4 €ÇÏÖW8;‹'7óLŸ`|؇»†±ŒÖ%3xÙvh1ÚT»'•¢@±à“.UêªA•CdÚJ¯×Î~™Ž—úä~‘Íÿ¡ˆdŸþ²È¶Z‹»yÖþ-[ÞÌ´˜wýá^þŸçýéBŸfÜ^¶oûËùøñ[4Å`ô›îºHFÀ…`w.?&ôsƒýÉ)q@)á\v!@¼M<*vÖ@þ IútÙöl¬Š©MF…nºÍ•¼!ö²ûü²ÍÑÄüãŽ@½[2à3¸NWm“ž²nè8£Xò4V¢¤N×EÈèTTÜç µ@€ú)¿LkÅÌ ˆueZ{\@¦¤K•º* ÑXk#c€ßNÞs£Y;H—ÐDdc1¢”ÐôÎpp°„&*3AB MÆA´ÑÿÑDtµh¢=¬Ö'f°óÆ;Žÿfh2բɡ„S #€XÆ ‚!—¸™tËÜc™c<¬‘Î:©`ðu“ Æò¤BÎ#I>UGUÂ’fšWÄD¼œ¬›Z¨”AßIW]0<‚ tÕu`Ð{¶QçgbDˆ²Ã4}Ž¾Ìæ£¬uV7¸¡RÚ´0dSë—”ÒVÆF+5ÄÊ»`Œ)Teéß/ãþô&÷›’Õ—-ÅóÏãþr½í! ôä³l_¨´„^è|L¤úð†à«¡È;õÅþ ¢ÿ@ûÝFYBþír›ê¹}ÐB‰F'I:ªÔ•uSM-§õÒ9P0äƒõAvC&½Âàà3/Ekf<a4Îû:ÂI÷¼³að".®¶äH¶Þ¸ÀÎi§Býž_ªÅWÂøJÒZ|˺ _ö& óÇÅ©Í#'¶Ž-JEüä")ú)ˆªÐO¡TÊPO1Òâ)kÈRp`ë*F»P5‚¬\#w–ÑAD ¯U)œ¡Jî;T¢ñ ì³ñMðñëã#:WËG{ʽ‹‘dÍF ˆr²˜ÀµÊMËÏé˜öÈwøè­Á@²{ì»RwTÖM„´á¬À2Ùz`O×ÑÁàfÇŸ cb§‹Þ°Ø‘`"ygÀÚrW;„}ݹzk8²TÚe\¡ÏÚ¹QBmç:U (»Ø)º"¹¼~>ºåqA ƒC¢Ò¸@hB úIºT©«R¯b@w^Üì+¸I““Ö {ÚÛÒñì']ªÔÍ¥F,YÜ[ÅO½ü ÅÕöeù‹#†ŸÇÙCzqÃU[ü»þuVè Ô¨ø¬®fóa6ß$¹âSJZÇðéíy‰õ€Çl’i)™&À6é~<ÌJië„ÙÕ?µ+RR+çeÜzS™¾¸égʷ牿Íf œ5Ñ;q$Ï“SÇ/IŸª¤ÃÙàþV¤{¿âÃÝã^¾ûùáY.Dž¶2P÷a<Õ<ÝuE½ /(lªíÙ¾ ¡u’r lØ~›-ûÃþ²Ÿ˜½‘øöf*Ž.þ÷Ç?oW´ƒÁÅÿÍæ¿¦•j®Ð¿šÝkyŠõRBIyùt—© dvóâ ª—éŸÛqž©÷åx2ùkîdwåÝ[t³:NõЛM-‹»ëg8MúWÙä²ýSÞÆ-|Žâõ|vw;fkvnÒ‡¶nÓ^ùMy5¿}øa¼|7ÒR_|ˆÁ¨¸I‹z]ãÏg¿f›ÔõíŠÁÈF (Çúsa7²a_™7Ÿ÷Ÿ.¦³i¶‘&Ó«÷ òÛélÑÇrl¡E&x~î,ŠqÌÃÞ³ýe :ƒ ’ð©J8WUg„$IŸv¥­Þë¨bbQíj&™æöÎDR“nGÅxuiUSL` `[ˆh45th"I´­Ÿ’0•ò‡$ÜÔµ… pÀ°[k#>ÐŽè§JÌÒ˜žßÊ þ2¼@#Tœ­_ƒÎçRï<2´–^0CpaW¦¼‹6(nI*ÑD ¨£59rÞ†ˆÑ"¶¼/™ò¶Fˆ$¶%b؃8ÜÊò6´hÄzANÒœg,žsþ8ã"ËŒÄà|°ÿ~<%4D6R!±¡ˆ8ƒ·®ª¹*£áÍ”Dû;ªTêœuÁåRG>xe¹7(¢ÙrYÎ{K¹ÌY@”\ƒ ÚLR²( UžïJÁHŒ^BK¯˜1w458Kâ[ÄJZŒ“,· Ö0ðIšÛ5êØ»$-ˆÀCH~’,•Hm&©Cƒ‚W›+"Y›KÉWŽÙçšûùJÆÙŸó¹© ‡ÏIm1c “LUù‘h/`Z¿Önï•<)¥0íýóù§²0Lbˆ¬@¥€)IO¿FH£PjR åÎo)–H,&¬WOÖHÇz#‘}~/hÄ‘}V\R h\È5¶6"›üÖ±a«y;Þ»²ÀXpI%’Áàwmx1Xr“´Ra’¡TÞäNÈ„•¿r­*Ÿ'4yö+Ÿ1V6·9·u)x¡[dÓá®ðŸ³ñ4IOÇiúèøÅ‰FŽ™h”Uóß§ªÿÑìLƒ³w¯teÿé`íu寕ԯöÓÍú5ø‚#wOÀ@ŠÔb]°zô'lËjU`ClI01ÚT²²ìlags¯™\4,q+ò¬y|a% –kÆ©§¨ïJÖ4;·=ru­ÿÝ”žÑŸwÑ÷çjkeepassx-2.0.3/share/icons/svg/dialog-information.svgz000066400000000000000000000334641276304217300230670ustar00rootroot00000000000000‹ì}ÛrË‘í³÷WðÐ/VÌKåM¶<¡ím;13qlÏÌ›"A‰³)R‡¤nóõ§ ¨† ndƒÔ …ÀîììZ+³²²*]ø—÷¯N÷ÞN/.OÎÏžìàþÞôìðüèäìÅ“ýþã/ãØß»¼šœMNÏϦOöÏÎ÷ÿå?ýáÿŒÇ{žM/&Wç÷ž?ŸîýíôôÍåÕìÐ1 àhïïÿù×½?¿}~qµ÷§o^Œÿv¶³ƒÿ9¿çã=ĽŸßœœí)•ööÆãæ—o_ü´··×´ïìòñÙ%>ÙyuõúñÁÁáÅtruòvzxþêÕùÙ%œ_¼88»üí~[z)ÜœŸ\7郿OÞNÿr~ñ_ÓçxкâäóÌpµ`®^wt¸¼ðõ›‹ÓY[ަ§ÓWÓ³«Ëj‹VñwÓçp1½<sq8]vxØ–¼8:®¢ïÞÁ;™ Qf 0‰ñ凳«Éûñ*ú†¸Ï]ʈxМ«’7“züþôäì×ÎÆÌζïÞøÎëó£Jèâ̱7WNálzuðË?~Yž#]µÔ4J/'¯§+÷]œ›|òjzùzr8½9k8~5¹j.€Æ’ÿ»ªêüÍÕë7WϦﯦgs ™•ÙùéÙu°BëåÕ‡Óæ WV›ò|rÙˆ¼<5=8š¼=9:8ÿáÅôìàêâÍÙ¯ÂÓkºš rõærµmÓY ŸœND[¨9ø ô×g/>«ýýÑëÆ9™A?{úC=ýÇ?M/.tý™‰­9ܸütrñ׋ÉÑIÓËW´žŸžNgšœ¾›|¸\:àê%q­þòêüu#PÙ½>0nT41õ·ˆB6ýýìÐyã7'WÓï÷çòçÇÇ—Óæ.sךßâZR"|ïàªñSÕ´®:gªV± B‡ËŽèpÝî;¢£x¡ÐQ¼ÈÐtTÕz::#WÄ+j‘e TgË'å§åR€×5릭4ã]ð’tà%½9ÞãÙÏšt¦\ܯz@Àè€1{oöún¼´Ž·_óx© ¯ì /êƒáå°Øï uŸ%ƒÃq2Ëáá2ªf¾£³ÿþölo à… —-¸1•ÍœH¦–ŸÀé`£¥Ùº{/ÉÛ¦ÅZä€Rܽ8m37“:ÅëßMÍÍDÌð5I›ïÇÍï&Šh"½‹ådÞq_|<ðϳ“«ffø¦™ üýz¶òïgÿ¼œÎ'0ôd¹| b®Id:Í…¸9B|-”s^©wúÇÅäìò:_²ß¤ì'ï‡#i„£±$d†Ž¨àLÕ£ê]7 AÓÃ*+u«Un:ËaÆfÕ¼£ôP3q'M3¹ÒѯzËôP3ËíTÓð»uRMãÛ8©„ÓfÕw² åŽüig~Èr{ÄET¶ðÃUö¥z‚GV¤1w¤¥V™?þô›ß,h3Õ5ä{™|Γ*ô"ª ôÏëêÒlñ¼ó&ÍÞ¥¹S/ℎe“ޜ뽭¹Ê6æ"f§¥½’ 8¹ÚëZÂ2kÐ0/‰[Û 1üùñô¥Ç^³\Ë~ÑVíݪ³äìg«€IrA]»QníDv´Ù—i®÷ÎãëlýúñË‹i³ÞþÛÿþ·ýÛ/ÏØâYÇØ.¶Ka’ÂmŸ*¢ZcÀ'"܈88™çÌB;G_1íFSp 4ž ‰,!Ôãš©;lÊ|V@©Êüȇ'ûªà®’sN/žì—²Ì¡‚rH·)u›8PRX3jžé HeiÖâÀ…¨æ-Uf0<¥OÀ¶ŽN£ñÇÿWÿ“HŽJYñGuÀ"¢R§¤ é¦Y,b(Ì•™*23ÚÃŒmció¤Ìji•ôœ*S3T,éƒá±<1”¥?op‘"DH©¦/Ûì$%F®sþR–9=Uh0z¼› È]¯=ÌVÈlÄd-o—,R `JPfm¥g’ Ê¥ºG• ôàç»GqÈRxÄœ²íP‚JÈ@‰¥ú;sÔ®Se†¢&{¨)w‹ù ¦Î=1¿Ê †'±ÝÕÔu¡2F̈¨-“RAÈt«6- ¡íE>I°¨T‘¡8 ¶IÉA‰-³Ç¦JL‚´C›r7Çmð0„õú¨ ·Ø!éAÃÛ Q(.íÑ%Pxå62Î×¢M¹÷üyIŽ8•Ú¡°Å’IÈ¥+p•Š˜ì!ÆŽ˜"¹“šb€&%sGÔb5ñ`ÔTŸè¦†ÀHbgÄôîÀ‡"¦ÂúÔ*1ÍÒ¹{–¼™˜å´Z˜H2—ÓjcÐÀEäx.C,¸82—)Iœ¹˜z#;!" †Pz–-„"†H= ‚”ÐŒ6BEñâ+=øl| f¨½, j”÷lAíAÛ ,¡Þ‡¯€kIä|N´Žn°ÐÔ3ÃÎ MJÀé‰Tƒ“[¶ * Ìu@«2ÃÑã=ôðÒãN–ÙC!Pš ížè¡çá²Äê}Þ£àÅi§ôd=—+Vè}ôT[¥g¸ÈJØYs›Èª RJ+²:¦XŒƒs V“vduÜåÈAÔ‰/·ÁW@-¹a™+‹–ô"䄼 BOÉ>|–Ê÷lAéÁW¶Á—€Ö‡/ ÂíûGúîFꮤ>`€±l/:jB`Z+@‰‚f©S“*1”ñµÇøÛ„')PÈ´VüÒ82vgXÓnÃÒÝÓ:šT€#„Sg%‚ À(ÕŠ!`LíaÆÔ‘k©Ê´—²HdÀgRÐ{¸"‡#Áœ2þøYØTFÑ^GFðš”`-– xd%=àËý‚G@ÄÁATI·±¿ç–œ{±¨”€E a)¶ÍÓ¿¤€ˆZó(ÐjÓ™©5 €”ì 8-q(šˆ­O BêÙ%%™ %ÖØ‰‰¤‡{è‰;ÓÓâf„ ~ÊH#MFh¡®Ùâ¦(h`{U©Ä#¯õ×…Ä}d[=IŠaµ²dÕN°*1_ÄÈRy(,^z°<`è$/J•òp¬f^‘àyƒQÓgæòQ£@BžÑMJ Üz¨±/‡štÐÐÈì¤&$Côï¡&¾ j T’º©)PŠò}FktÄhÛ04ß:Bo£ÏVºÐÚÍ÷Vä°¤µØÙ7¶Ùiòù1âšê; öMÛŸ}¸ÞëûÝÖ’ßh÷³çfG[^îØn³ÏÞqtš8pmF hCZÖàõa~[å;Ú(Œ5îd²èÊ#v´¿/k⨭¢Ò]ð&wàÍr7¼ª(š.=Àíáözeò“]ðØÐn¼âõï¶ÎmØ‘¼ÖGWrRÇ1lƒ½îÒ¹ù˜ ÁdÖÚ×E ‰ë·ˆ“æGŽ?ʸRÔW˜D(Íýö¢ªéxVl³Ÿæ#IaУåÝ xše«îÀiaKà.- ª Î 2ªL·Qx“M]zwyž1Ôœž¼8û÷çÿÓœYÜlå ÏàesìåÒAß]½\üñaù*¦Å‡‹éÿ{sr1=úóû«éÙåÉùYCöË««×Î.artþ| ‡ç¯ž^úÛéé›Ë«‹ÉÕùÅ!àAÓGO¿~qü§Ç²Oqή~vR/zֈλH»å7Ž ¼Íô%,E²5«*äR'U Ö^&vðHDÚvâªDO×"wÍ9$#ºõ©ÉS¢u}Ö©Ï­p·¾‚ü3þ¼®/¶ŸI°b®©¼K¸—mLk™ÙÚk‹!L©Ö‚µÂx-Â]ãêúãéäjú;rDóxqåÛLGŸ†®óÓã ÌÖ­ï©=õ§²®Ï¶7ÝŸ¯þ´®*îbº‚Û˜®"*¶÷Œ‰jš÷¼&Â-ûv˜b[¼…·§î/³ŸuUeçëU´ßɽmÃ=‹´:‚’$Y%ß!ÂÍyI¾$`ª¥6@MeœºS™²Ý['2#ë@½××NדÍ9k­ „©ÛVŠCT‘@“8c4^~Âæs1À9¢BPÂÚ/‹ÔÀh­â‘¤µ÷ðRÀ4ÚéªÔÀ$™Šw“ÄÔ¹VYñÙ‘Èì]Û$H²ë‹›÷…áξ eOßLë½b²íßÕóÚ­ýNk£!ÒU3 )ø%×FCľÙÚh –Ÿ3©äŽj£¦…®6*©e'µQIµÄ’Æ_zmTR²6*Dü-×F-Ñ¿ßâ¨%殪£–Dßpy´&þŸ,N2ly´*Ö‡* FZ ÙQyT0ôáʣ¹“ò¨pîª<*œå€Mb'åQ±ÒéÒf´ëò¨˜æ[+|{“‘š|¶WªXî¨<ªâôPåQaÿ<^a×]—G…Ý®M*}:›no°òìë*x:;Tðtv~È‚'•|ø‚çð‘Áo­ÈRôÁŠ< [*E{=HTˆ«Gx,Ü¥ž¼õ2…ÛÄ…Yô¦i_ ó2  f“„Ÿ~Ó —x¸f*ê K(wÁPr¿¹Ý¥¡NI´ 6]ðÏOqÞ´öj\·&éÖô§?}¢‰>jZ‹¤Í±bI½s—‚g›Ì;ôÁµ¤ÇhÌš4ó¼h€êÎ#Sd×!„úrn¤²ŒB€EQuOØ µÐb›á5™Ã–LW|#ÍØÜ×5ÍoÛ× ‚Å£UP ¦´ÚÝ«P}¶¡@0:úíAÓ}6Ìm¡mÎA¡8²éXGXWö¡¢Ðڜҋµ÷ ", "ªÈxoÕÆ…"we㇇†ƒ@{H\éØ*×ö§›,ÜÿÚH3²Õå‘›-ŽÌGÈÅEÍ_Ÿ.•4GÖž‹ƒ$¨†¶¿¥À X¼n#€¼…VïÂÅ:ËØl¢þ6ï¬ÉÚÕdvÛžˆXç²ó¿kÿ®ñ8oˆY²“oâÛ·^Sjã}ögm»Ô¶ë]ÚÞI<ÑíÛ^@ô6Þêßö^:[wj½˜­´^ÔZ­gR¼B( Eâ.8¨ G>ûB‚EŒïš­ð0S•rëyÊö5ÉÜæeHë,Vv+åUÏ–‚›²¨|hZ®±U ¸±^\Óëw¤/Ìâ¡è«eĘD?aŽƒXõòNê¨çÍŸTy~:9üõ:ëÂÙó˜Êf½¸ëojv+K}×9™ s}×y`×â‹yôšÐñšÐÅlfM‰Ìyï‹“FÝPoЯúÈ 20fÌ2ªÐ§B“²càÓd­“+r"lU8À… ¥5M3„ n‘ŒÊ]vЩs|ñ .1ÂùîGÇ'§WÓ‹>üKlsQMµýæºé_'o./O&g?Ÿ¾™]ß­aÙ ~™¾=™\5Ó—Ù£?Z(ÜÛ5¦U­º|ìv~ë{³Zìê•ö:ð,\šO¢ìdV]$˜‹Õ±Ò j–ê"U¨N÷0Uù>];lw$)–`´ÑX Ô‹®ÒT,µq ‚bÑlÑ”JŽ–öT˜ˆoçù†^†ð|‚¤ÂHÑéø†n«Žxzòú?&W/¯¯X|îÏgR†M«_Ï/n~šsÿ¶7&QˆÂ£!ò÷tOl!GËO{¸GÍï˜Ò™‹Ýô‚uýÿ» ãüèäuóïñE¥—×­|ßsòzX*^;¹:TŽ_ÏÙàÕœ æU ×§ß\œþî·«–a”G³³ã*ܬ”œÿ:}|v~6ýøy<[ÂYž_÷—Æ'_œ¿9;jüŸó“³Õ£¯N#Ÿž4ÿ=.‹cG“Ë—“‹‹É‡Ù=ÚGçÉÍc ÷ÌŒÅÉ(Æ9˜ê¼>¥êêÃë†ÉÅáÜÙ.3lΓ5çYçu°·f˜z—æ33¨qb<êË!L!%¹'‡h ­ç÷Ç’}%,=`¦e˜øÅŒÙÆàI"Ö7fG²Óà™wP—+QxËÚn@ŠÉu’‘àˆ„¥Z{Uè¸-´°¶AqÎMˆ@Nîsj fn˜9¢°FåÑXÍ0m6ä=v?Jù¤æT0qK+æ:aˆ¶·jÃô%ŒU‘ã–È;ÕÄ!¶6.šá‹=÷ ²°óÝc„b±Ágp5™BQ§hï(Å™¢=·$P.QZb‘¼¿é¿qÁ¯yú_ßZž[Ll÷zÂÌ–é!"ÛË„ ÅëèQEîoô(èClû˜P\}Ñ2J…R Å›D‘P4ìÑŽF«áÓ7ÃNÖ"6³6ÜÒßfª •›â_Áäïdù³`–/vÈ»_ìÇ‚âf’âk]P¼OšLt7MG ‘ïvÞ°£ÉÎ=æ%Dù½ä%Äô#/Ù˜—Ë÷’—ë¼dƃÿÈK6“”?ò’Ð$ô#/Ù´„B"?–PnÁZì’5Ñ„Lž±V¼øC°6|¬ø#Þ›}79°ÅxsìY›¸ß ø#¨Þ‚5½/Ö$ Óü[`Ù`ÍÁBõãFÝ ©èÅÚ°(d«€§|¤ˆ4s‘¤D‘Àœ‘f h#"U ðX!MA©D.IK¦B•´U¡ã¶Ð’v÷»ÓÑ„Œ@JT7ëeLA‘ݸ—±*T»ÏµN¥ÒÄÀLÏ9cõ¯ÿßÞ·õÈ#k¾ï¯Hôy2V͸2Â3ÀWàÞ]`Ø}lTÛeŸcwUîîéþõG—”(e–²RYê{Úé © ¢"¾†(ŠâL7RT ÖoÜTJò‡J)e2©¥Äu6‰óW9@¡ùA±ôUN(QØ(æÑ…äåˆÀÌ) Fµç&Ï_‹ÎšsY‹^–e7ñÝhyº°q"¯8ANÂF›W#*gcß<ë©’+"£Ø(KJÉ+Ì”DòF3hÊFRhu[c°¬$8¢šƒ)bÏ£ÐFg~U¨¥—5O pmÍÌ#6ª€$ŒVB K,·^ãïÓµéíŠôKÍŸéôŒæ™8¾ì•è{+Îko.›Uç75(^ß¼~½`åùŠ7þäšþ$7þäJßnüïºñ'Wù“<ü"Wû²‡M .¢eøÁDFô Ròo¡ÌÝR²ô-,>AJôµÞb­ì‚ÉmÞۋ䔳šä½k›3$Lìøe\ËÅÆøMl‹#@öà?IÈú-¼+dü'‰Ù#¾E€wJ)~‹O‹O’~‹ï eÂÒ·Pfy(F–P&ìÛŽw‡2aög eÂü[(s·”rúÊœ %úÊœ %ù¶^  T³RÊ+HÉ\·R*G¬ nŒTK ÐÕù¨”2 óTJ(’FXRpF´µ¥$ yVJžþP)%òFJ„eâ¼Õ!›! ¨íÍÌdD€D9ô!íÍùA‘ôåúnI„óRZÃÞ²“§l­”ÊCrk¤”@5•¾ø$‡dÆÇ£€ žÄü¼­%s^gNCö$³{Jæø£6á”,E£EyŒD·ñÞö¤ÔXÇ@Oæƒ-»fÖßPŠ=óìDcŽ!öVKÁ¹¼9Álý‹uÞÔ¹nÐb”Vˆ_‚“ö#3›Jµd„lèQmT•)èÌdÙׯ¨‹“σ—Ýy Þuuì:«ã Adž‘dÐqÎàžeÐñ´ÎÛqAǪ‘Þ¡AÏ Í: 0‡š´£ Ц&›TOØií\‡¬£b·0ÏzDÃaS /ïl®ÓYDe¤# ÊÓÎ~ÿæòíÍßþZÖG]|¼|óËûË_'ýÿõýOo®~Ýö_ŒÉLßÝV¾û†LŸºxwY/᪫ԯYík5° Ç~~_¯ÒºúpYƒëõe ½¡àº>Øžú/´_„¹­ÉW×o.¯‡Sà„ÜnÅ^–µ¿¶ éPO~Ûþmýxqs9íýïWW5ð¢8ÈRØÚžìÑ~+´=áÕµÓ­`ö¸ü|}]ÛËöÃÅo—u?_½ÿåòÇ«ö>yLþéåÓ>cB½pî×F”Í»ä?_’½i„ôÓ»º#ÒTœR›R/?~ÚÔôiïšâí§zeßç›îí.þýxùùâÍÅç‹^šý1×|Èç§›Ç7o­s]öÃû×—7u³ññ߯~¾~}ù´Y-xÓºÆþÌ͈´wéizá¸Óy¯.ß~þ?×ïß½ÿ©ô®ù¶P߃¿^¿yûøÿ>ù·úÄéñÿ¿ºþ¯ÎšòÅW?×ükc}óúqãõ.>ÿíýÇ1ßßüòîþãã‡Úžú‚¶N³Ô°n>0¸¾¼i¯bøxÒ§z‹\¸º~W·«ÿ~|ß4øþïŸë¥–ÿÞð팵ïH½ôõõ—Ñ£]?êÜ ­ï{…Ö",.°Ñô“ÿáïo¯^_|þùúâ‡N݇¾nêÊJð2­i­¶z÷uüLtÒ™hæL±àLxÒ™pæLH{§Ö'î“<þœFÙ.ú0rýê·‹–Ìí]NY¢-™:TÌo´=¿C÷ñ½çwŸnV¾¹uïñÍþÞãó»•Ï·(g˜nWþù–Wª 3Y´V9Ú9 ;J`e×F†Ý*ùí§‹Æ6ÚiðvdÚÝÉ Ü8P¿Ám1Ü@kP–þEnò P (y jUD¤œ0*¢–ÔýÀµ2[¢@î¤óÝzº-¦î|ñèKÚ¼Bça0žã˜+UE=Ñ>éë²ÏïfœQÎ]û­{AËRö¡õ/KÌ@náѾ>ó+^&’}[ß¡a¹óåhKI]<ª­g".ƒÜT–˜ÊåY EÉ&ÈÁ,ÍÛ©Ì ’1ˈŠŠêDd’Œ<¢i@ÎdMãB4Š”ÙšeUÓʲ“XM#HBâ\Y ×uë–ªI[*¡ªDKãp×–ÆB™¦­I‘DëÖDÀ‚I+sðp1o®…“£be™L%oDÀBY¥ÐêÆˆ“Óˆ’=0W¦`†L¼Á5Q$Wêà$Ôt<9„¹b#Bv¦7P0ÊÑËQéV‰ÿ¾¹íö)a0n£Ÿ ~ef}<îJàžŒ[t÷y¯Ss®(«ªáhL4‡d¤VBÏZ›Z@·ßé MP´:¥ö!ëÛÆÂ¾Ñ¾—)%‡®i`8-:x²Vî*=ãíøèѪa·žãÑì)9ÿ9>²;ž4?FyÎMÎ-Ø"¨`®sÉ ›³O#,VþU84ÊÖÓLsC˦Ö‘Új¡Ù²ŽHØ´,DÌBM%BHžj9 ·í’Bb¤BkÚºC8¥„£šY!̳äc!–ó¤¾w¼£ip"Óz¶kj@l)¬Báæ¼€˜¼BÊ·ô:½FJÈ8©É N––b‡‚.p¼…@Êo//¾öÈNCmn$6›ŽÄ¦™±ÂNŽÚĘs¶ÄM’·#±†’hà)KDݺP-ARUŽÆ¤ØÐ(2§<­§"ŽÚµŽÀHR1C°SÓŸÌ¢(²˜”ž÷4Ǻµ9GQ19$Jl ÇÄÙ‰ÚÑ”ƒ¤L54Õ—Ý%eãŽÊ™©£QxWÓ”\;šhÊ{­‚»¡XÜD›¡Ãܸd¶[E>â‘—¿Öwng‹›vk‹Ó®>„¾pËEU_±Ñ!8s”ž÷4Íc£+Ô¯ÈèÊ¿{÷¹ôß>þxõ¡/úß?_ýrõÃÍû†vÕ6hÖ<½jn}³EÙ mÈÛçjïúFïPÛØ·ØôîJ³N—lûÔKJ]º-™®æ.Ó§>J©MûDúä÷MYXG’í­év”¹%ý}"%̶º[|Ð?~Wÿ?óÕûîs`”ø‡ßüÚʰ”- KØÊ†K©ôáçüÓÌçüÿ^°°M>àO©îûí\@É+UÍÊSV4Ç —tHzaNåX“¦ˆÚJ…ió¬I B¸Él›œ´¹® !goJ®/ª÷ :†]Í&»-¹¶hвÛ=wQô£Ý•tws€†5`iXûµ5(¯PdCN'½hz†*_4¿gS%Ĭ*‚±We'yUrµhâ6«PÚœƒ¸µ¹Ø#0÷‡ã|©248îM‹þh;9è3S3×±ô:nDu\ÍZÔ¼uÄTz5ËÝï,îö×–¤Ñ<:˜LçTùôÉÓçOmªJ[~* ¨’FÛTäMf[rmQ÷hòCfW2Tíw¼ºjÒ7”îSuK:®n=Ѥí6“ž±èþ͹IP""¼¼&BÉ#âÑós~žŸ½œhHx =‹žnø1Øý`ìƒý诏ȣQv(ï[ô,z¦]åî`;Îwé¾òóqåÛNùý¾ ’êÜ‘héÜ‹—(mšÒüÝ ˜4Ý0¥Šº !‰V]óª;j³ui›îj 5›³ÔÔ¶õˆ4ª¹k\Ø•s´g}Õ&mÕ4òæDAÚÔÿªî°É6œÚ´¥ôõÐë–mÃáx¨²kS¸ÖÝÙ^uéžz”N ¾¦ðBÛõÏšAÁ‰6]RÕ”ö,V—J©Ö5l’Ó6jÛl¶¯Óm¿×}4s<(Ì‹‚Âvû–À°¡{` WrþšçcÄÌa ü‹.,^´¿ ÃcÄNT*ûìV!$6M¢UKóؤ>W×›´Iߨ;j¹õن´Ú5iyªç×i8n÷íºƒÌØLÐQÀòè$PùPµÝNâNŽXÀµö+õró5ЕÀf¶ØÌ×[N§­AQ¥g¯kÂE„¹ÓºIU{Xfª˜y@ Å Þþ,íùqwþI×°NúN®§\ç¶™ŽÃÖØ–‘/K‡šæõ†žØä³•ý§¨î<å?ÕÁwk«›n¶}/ûOÍ/~h®­®P[ÜÁ;Båjúfu-ï\ù57e…üÁúàekÜöèÝmKeJ¿ÊŠ·w¾§´2—>]:ý¨»–ãÓ²aLW2z#´ e¡å½YìaRû›´ëNj‹}ÌËö7e–ç™á’NEÏç?³nÛÕœ-î¥2È543dªør]Ðöå]ƒWÔ¶a“f Œoþ¯Pš†ÒpÛ¾N“k[÷çÚ}àQ»ÇÔÛ}¢5ÿŸDÓ^ÝtË7ä´½:¤&Ü&'ßõÛúþ™®„ºÌJI­KwIW«ã7¤RÒnÚ©?µ ç’®ÒLf_ÂvJèû?î4O\bžŽ^LÓ™c°MÇ஄Jɱy‹ kÔT©jêÖÒEG÷Ÿ¸ŒXmâ®1s‰‰OKw³!Òä‡L_Ô¤9ç&7dš’®ªô¥e×rëkv'eeQ˜ô¸ÑâÉ[He²ÃÑ˼–3ÐÌ”Ç2´<ؼ'&_cþ18"@Zm¹ ÝJ“u·&CY—C`–.?Ê6å]îxÔ©ôR*KáÑŸuHÇAA§ƒ‚G  €"Nžï¬è ‚ 7鉨ë !Ÿ:V€jµu˜M~ÈìJ¤êæ/ëLŸ6ä®m¶C¦£oûj ç’£ÍÇqÍóéš—Yw ztÔÑB];JßD(3À<ØŒ)­’SARüÂvðÛÁ}l¥m¾;çÛ*½ËèX5™ÊbÔ"ƬâvÿAvE²l•÷‚?VÈd›>Í¢¸KöASÜ:¥Ú5m‡Ê¨sQMxjÕPy8JuÅ>ß6à¡]Gno1žmá¸Kví°?¬YöÙŽÓfÒ‘ÒÅWC¶Ÿ‡eìûî Y ¤1ji‰@˜ª.•º~W¢UWq³kWµlÊaݳ!ß•ì8VM3Žc®º¤©Ý¸«Õ÷б¿Ž¾»zÛû6û»Žö'œtfÔËiÿ;V»‹ë9–‹Ÿ g*¹"ÔW%¿jÆ»ƒï)ö˜oŸÔ@Ö¶ÉÑ)–É”²Ÿ7'0?1ÚNL,ê…àÌL Žg&P:1ND+zÒtí¦+ž*fÏUGìžž™UˆÀa @Ö 38S}D È)Xôƒµ+ª×mµõŽ f1å¼ ÉÇÔÞ^jÜçRI-šîiû¬¬"£ 2QEœòF!¢.É"ݬ_âhjªDc>*ÔX¤Û”éþU*žt•}rh6Ê3Kòg¬Iõ. Û @·)Ð5è6ºá!Ðjÿøÿ¢çKœGsoݦG;h1šE*šºMWÖ™¡Ãö!À<;‰¼`ûçëÌøaNGØá’ËÌÔqš™õ;0êÜ…{½ÿjÝ—¶uYhƒY¢ÚîX뿨Úö¬õ_Ò¨¶!í":3Ÿ²>Xö&Çãº\Ãùˆ'˶*–ý^X&uÞs.HîÊW„rŽ5¡ì¸*”ׂ²ë"(oIs ?"ÝÅH^m»!jÛŽQ Z»Aj«Q×o‡)Ú=KÒVWñ6UáªI]cÿ> =´@Zwá3–>ÉNyäl’„m+  mÊm­)ŽèœÙØ ZíÉ-†¬ñèÃNž‘  ÌÍýÅo f”7»´êè¸I}®®»WÔ&4´ì¦}¶/h«ºmRŸé`]J†®tÍJ/÷~ÐqpçÝýŽÏå8–¹PKe÷wUÈY9|˜Ï 0F‹Xáë !ÊHÝzÇþÈj¹‚KV'¹Üj•ASŽÔ=MXð0!%šÎûštîk‘´{\rËåp §ý÷¾ha¸(“†—Ý›3pBORÖ‰g AŒè}G©³L`ÏÛßôR3Î,.,ó,Ÿä³®¬ýí±êtx`ëwJ^–HQx<*AdÓ(. „¨È½T¹ ÷9e¬¶»tšl‘8*q@“üèþ:ô´ŽVÓ¡Ë™:ÔEÖƒ`90¢XObåÈÅz¦ujŠ$ÉyFòK.3f%FB¶d)\Ì"‡é<ļ-ª,Dœk‹¶ìõ‚,’ÆŠ EJTB|AV-÷«¥Òiöx»Y"gÀä\iw–ûdNëdN«dNçd^äTÙ! 5(‘bqªÀJRì±Ô¹C‹ÍÃ!¬šÄ¬"´54ëh q5M!Ÿ©)_drä ŽR†¿D€‘¤ØeÀL^ÕDÂi´ú‘£¬y5õ„ ûG$ ˜2¦ñ²Wv@âÒµ’@:é9ÊÌ⢘æc±¼dÑójáŽgŸVˆ&ΣçÕÔẚ:<Ÿ©©ƒÀ,éBû5Œž}­¦Õv¦Bt¤wÍËÔ!U"ÑDñA” ×RF$^K‘tö¹ïö-º=C È‘° ÜÈB–Û3%*aê¨Î—6xú ƒwP:3dÊ‹dŸ!2ZÄÙ[ ã„_ìIW‘}>Sö¾HöÓó¸WÈ’ñ«=Ó²g9Sö±@öE®ó²/¶ñ5È>Ö½ày7 ˜Êø«,23¡‡•€Ôx<þf`æô@áPˆ­6‹¯6k:/B©C@-8Ñ2…ˆ£GL"*‘F!ª«)Dóz ‰3B#…äàX¦ ¥ž}˜¬¦³ÕÔa~¦:x¤Ž€„nËÔáàžmÏ:ü¡¬#ójêȺš:òìíô]c7Ê¢ÉU¶?è×Oa£±›4¤Lô•_ÚÈí«Ü-D:säÖb , hZÖB„ÑŒ)<Ìc½A ÖbnXõw\mLEmhB­Ì@5¦D½â8Ô#ü _ÄþÜ^¾ØZ²¥ò”^ú!›ÙÁâ¸oâ%š;eî+(‰i”•Ô{u ‡è ÂB^*,§/ŸÉ>=ϰÃ% +OQ™~á¨|Ïž<ßû’ÒRA¿pú”öÙÐy! ë1A³•‡6_•¨Ÿû v £yßMy–—¾°§j‹Y^j³¬ž=}Oqã,+7¦ù÷ÕžçxºÏ‹û8|N¾oý¬g¢ÉŽ¡Ij ™$úê ÷åó—O÷e$éØ[ z„×ó§ûjšGSb>ÂËžì#Sd–WÎhó¼ž= ßçµxÈ|Y ÊÓ>?NùœTË´ÚW§ù ŽLyVmŒä³¼PYÓ>/åe³ºÛçu$à ¥%;šÆœ±1<3[4«NÊØ/y*áp‰À(RKQ^@.uîBî>W±¥Íç*fwáØÑ7Ÿ®//Þü¯ËÏÿqÕ¾Úúfì05öe¹ÜÂÛß>?o²ã>*)‘àœBJõÔ!ùSGæUÔ‘õ¯˜å•Ó|HÏâEìóBœçu„U öçû¬æEï˜ó, žø3Ïû¼æD‹p…g®?Ñt?[Ìà(G,2A#ÄÔоH›$ZË&IÖ³I²õl’|=›ä´žM2­f“,ëÙ$Û*6É~¦M. ·Æ„$eï,fàÌ©<Üܯ´Û 1²m gÅÖ$)%Ž*UìÙ„¢Úæ ˆD+Y¤ðZ)ºžEJ^Ï"%Ö³HÅõ,Ry5‹T]Ï"5¯b‘gZ$-²HÑay¹i`æbŽÂ`˜Ë®¥ÆQ[b•zc”J4yWÉ\³Î K¾á6ïRq™š­eÏæ³œ”Ìf¯ïéËôbT9ÍtÖŸ?MOžì3¢UЙå7UY–m4Y´àÓ 0{N¢“õ±!D FŠ „KÖPR™ç…Gö|þâå‹§û¼lž—Ð,ì_¼Àç¬|ž•ežåeÏã9íñ²yØsB_`Ž”l^ôná‹Do²‚Q2;ÏÇg½—) cŸ7 †ÄŽt´`ïSJçÑ  J™=à\ÆJç±£9Ÿ » "ƒºzÄ, ‚ÃùKô¨¾¢Gõ=ª¯çQ}E+zÔXÑ£Æ:5Îõ¨ù^d ˜pÞ€D”"qÓzÓjÓ*Ó¹Õ"ÆÛa$—˜:Ô’{<”3 \`:ˆk¼™Fˆr¦¤â’  ¢Äs’*5ÖT¬")Â9I ;”ß\½yÿ©þ÷ø§«7—ŸûtYKäuó»yýzúµùÈòݰ§yvp 3®P€9·äWHè^ArÖLÂI½ârVmI98¨R·¦qª‰Î¦•)'dÞ˜Kü2‡ˆlæAH‘¢§µ­AE=jj†K؆83*65='bÛ B¸iöÊ2 iݸ%RKc$ê([’Dï55 lNLäŠÄmwPpà ¤DÖô%KÍNŒCŒzJݰ©n£ÐAˆSÓNÁrN­ø]½‘•KbãºmCM¬j;X7­ $(W„ Á‰ò­jú}sû~îSŒpxzô—¦tÛ.ÿróùúê¿.k¨üt¹ËoÛo× EÛ†Éë‹O¯¯~þé͘øŸWïšR?¾¯¿Õñá}<–žöæâæ?.®¯/~Û£P;xŒ<çˆð¾°ô®Ï%hÇÖã/¿ ÊÙ- ÊÍ!iåbžE6¯6YaDÒB ÄHm%Qà| iÒN bDÑԀг–†‡q05ª)CGI…û¾â¯~ú¼½yÿûåc¤OÿøK{Ø5ê½þxñ¡£üÚ~‹¨' k VK3 i15]bÆôh †ìHºŸþüù=-`–£§ôlüy˜.Ïò¨»Ò·ßøíñóËÿ¼ø?oþ~yýþíí(ªT‹ïâúõXšå$ã¯Sl?¾¦ýÌK`êù»É•µ/â9Xj 8-j—³+¡ï]×­Úðo¿ä·Rr`T›ÝæÉ¦¯U2iƒõŸ 60>¥öëþã,Ÿo _Ý“q¼öy¯Ss®(«ªá£€ûÙM‡‰ËöwºO­¹/5‹ÂwÔÿºÞm@÷çË|f7úîï¿®Š‹Ù¯¯â“üY>:Aõâ•R#k¯,Õ©*¸šs®4v¹ 53„ckâN‘¢!æ,m˜fÀÜÐs(o2‚æ¤XåNé5¿ž4œ[©VÛ¬…†‘rîn0ËÑ6“yû½ØÐühϧ…ÑzÑø÷7¿¼ûÛƒFÆ'©Ïkeepassx-2.0.3/share/icons/svg/dialog-ok.svgz000066400000000000000000000067251276304217300211530ustar00rootroot00000000000000‹í[]“Û¸±}ϯà•_v*4_ÚMÝoR[µ©T%»•¼¹8"5£X#êRœ/ÿúÛÀ)ÒÉ;3.ûZž²Èƒ88ÝAê‡?Ý_¯’Û¼Ü.‹õùH0>Jòõ¼È–ëËóÑo¿þebGɶJ×Yº*Öùùh]Œþôã~ø¯É$ùs™§Už%wËê*ùyý~;O7yòÝUUmfÓéÝÝ[Ö +ÊËéY2™PÍííå’$!·ëíly>ªÍ×[–fÅEÎæÅõô¿ýÑÏ«ÕͶ*Óª(§‚3>ÅzÙ|WqsS®BûÙ|š¯òë|]m§‚‰¶ù<šÏ}§—·9¹¹.È)Õ$ßoZÆe¶ ë8ˆ;Œ„snÊa 0!‹Éöa]¥÷“nUÛPUàœO©,Zg5»_ƒíL(m{§YÛYä´ض¸)çù‚jælWÓ·¿¾ÝN8˪¬ÕL3iÑïþL®Óë|»IçùvÚà¾> !«®HD`ÃéU¾¼¼ªâù2;Ñø œ4îg;íq&‹š6ÛE¨þ˜å·ùÊtä€|^¬òÉE:Y7kr´Îïº~²bNý¦QeK’òå¤xϨ3º‹›jsS½Ëï«|ýè‚ÆÛ|(õv`·ü~S”Õd±\åûÞ6ëËAÛûlCSÀÔ`ñC,þ‘ÊÈòÅ–¾k>ý†*"=äiù×2Í–„í̺%àœÕÅÑß¼X­ò9ÍWººK¶¡ÑÐì¶*6þ86çjÄŽ"\,Ûœ*ó¶­Vù£õ„Z/ÊÙ›ÔfYοPAZV31J¦O8“œ‹gâtgœWF ¸×¦]zjtĞä¶Éç>k„’¶ªª(]S™ÚÜ·ª[Þ§ývóîþ|4Q<™%šûÿÅ Ñqë y°nèÃùÈðᆺœåòrIò–Ákódúrc7î {W O†ÉÇÃL¢ÔÝ(:¨ÖEøì…Æ÷‡C,JKCø}Þø71è ùð9)Iê–8Ÿã|¾ÇÒÑ$ IúDgühŽÄóÌRóÉøÕ¤Æ9E©q¯H£'iQ çŸH#ù’‘ÆÓ¼N#yS¯H£9…Æ9ä°ÀO iru‹sžóœÒÑÙk’¨ô)Zœ‹…tŸJ¢:íâ3·/ü£IÔüIÄSò¢K/æyþÉ$òÓâÙGøT|†õ«à_ôî²>ÿµL×ÛEQ^Ÿ®Óª\ÞÇ™UF cNÿâ™cÁJ.Æ9‹³]§à|ŽÑ€Ô»'LcÀ8FKAÓ(d´}«Ø½ßÖËŠvn¶yùO—ý÷õoÛ¼3%ÿþÛ/?¿}ïž¼G{ânŒó‹Åq°§oÑžòåäQ¾ÄS¦™£…õß/þCªlê—ùÿÞ,Ë<ûŸæÖ}{ÊÖRœ™vp?Ä“¸¹Ñq{£35Ι8AËÙærñ|ǶofWeNÛMoBß-c¿Þ‘y‹ˆv³‡ü´€9%Oæ~ZÎ* ÑŒŽÌL‘¯‰tuÊ5¢ÏzÿbÑéc×8cuNƒSÈ”4ʨˆ-V1kô\ š.ÈTpË@(Cy>B˸ÿà訴…°N[Z¢•B-Cí¤ƒeôíÏŽK3½ú¬ü*}ðZ­¡“!­cÜqkE7rɬ3\D[´%Tz‚{Üà1^ùÃUZåßñ1ž½,MF^\›.M’I@ÐH ãT—¤¾å#uΡ’ÏÉјt¤D«ó‰"¾^6l­8¶ÖtØqÂé„­S •#r»q+™PÎA'l­aÜr‡í¨Up|Ô Æ€@96Ì*a¹’ùÆjÖcèügN uÂ)#´°z<‘ÌHk¥qGFóËÒîeKÉy7[:ÇŒVºÙ“­‹èbÐvѵÄK"Ó[ŻӨ è±dNÓf<Œ£@Åm>ÑcÅœQ`±í4BzÔL â ”>®“¯EÙkÊà³oíg#^h㙇ðÿŽxßÿ2K§>àÑYŠÁ4—Vw—"D‘µÈAG[´% Õ)NͳôĵÊË“¶Š«HoÓù_Ó›ív™®ZÝøæžn0ÞófoóÛeZ5¬ëYŒ»KlOÞô±7/6•åá©Ä½Å·aJJ0®3•™•VÓJÄ4]w*5c¸Å£§òó ^Éç¾CxÖ%ºvD»±ø¢YV¢P‡²,*óíòö{âêeæOdÅM/Ó|¶«µâuÄÈÅØ2ãpgíg‚sÇ‚:#I9d«œ“IC–ik¤5] )É´”ÒŠŽ†‰U8Í#º´]ôl{÷†Ï!"mý´Ê×ÙIê¹.²œ ß»Ì×£vUJ4?íÞ úù:½Ì{ª î¤Ù“Ó3 LµwaýZ@tö¶`™Ô¨•Ř#í9X'¤íïІw~,Ø— ?e…3\?‚`^‚3÷Us&Å p&å>g\Zpûœ7Z9µÏ™U"Ø÷9“†UxIÎà)ÎÔKpf¾n¹à ÅW­3ì_¾¶çRÈÝiÏ¥ˆ ÿBn8ÚUðïg·Ëü.¾µ{‘îV7ºÌ†'¤´ŽZ„O]pQ”Y^6E:|:EõCÔø´_(‘¢ŠUNë¤9uÒ³°+ºYfy»¬)(Â#Å’È™ïãÎgƒåÛ«4+îh½_ø¡(h½†Ì:‹Ò¨ýb¿îÒØC†Ð¬˜ßø÷û'7ËÅÍ}¯ÞMYzƒUúm— U“r¶WÅÝe”œ®ˆþ}±ú²f²çøþÁcux¤–Qž–õ% ›ÞDô! ;iôðë¼J³´J£<Ä4,³Åìoÿ²‹öù|ö¯¢|ԤŠÅw¨SÛeó™_.§ÕK¿œó¿.ø#½äO*m :ÆAÛtš-óÇ_ ýà‚þ®—¾ÒôŸ=»kÆö›Óº£Mšˆã “f”áìro"WéE¾:ýâç1ûÓì—¨›z!ë-šò¬>„Ðl÷…„â6/«ânv»Ü./VÝ·*¢Z‚†îì;µøYÌ¿›´ºê½þ° Nfëbíß(*‹÷ùì ·b.]}: ùfwÆÆÀßXÑ€gaEÞÿS,×]”æ!/WKúšíªg)EeY¦íN´^¾xÌÚ3šÏïÞÄ{Ô³½Äï‡F¸lÁ„þ-QèÉpZ 2¡,$NP3@å´kÅ,—Ι,Ó’[0c4̨Þù/‰PÌÜÀXs¦¡cB£Á9ã l°"Û1 :uŽIm¤3c°ÁFS/@Lp%ÓpVá ¸?­_ÿ°f¤V£§UôÓ–¶'ó×õ·ÙkŬ;vöú[4Ÿgö¾oýL'¼ƒÖÕ;˜®@øw §áØ&r§@Ú˜o}›«A P™³P;×0{þÊì 3 Îö33X†\è1"ãR€"uJKiÖ¢ö˜N# Ò½aN[SWÖ¡.a…’ÁN *%ÐL)]°CëÉ3èœ!LÕŽñ•Q$P!3šºE…V:áAÍ7zhE9V’YÕ£ºÔ¢ÇŒ­[´å#@PŠPÁ· äð #‘œ¡1Ò<öÚqäÄ‚c¨Ê€q´ÜŠ ‡cŒ*¶àª¿AÞÌšˆ1µ$Ð0?wŠdƒ\ ¯?âã’_†d¥ìIÖ¹À·CT¬sA±¬KXP¬¶„5Šu6(–ê6‚%(V‘ÙN°ÎxÁ"ÔèÕiæ«E­R=”ɨT‚Zî”ê\Pª6cÙ(Õc¡f”)!ˆBapiEƒz,H”á5ŠchJÕ„5 í3öá 'œI<¼[$v`ZG±wVŒ't$Á¹Á%!8Þ×qßÊêoéé•ÓS?‹£…óuëÈ"Ö~!>wvŒþ ‹¡¨˜ ……àÈ”ôè&.¾¥±—Mc}!˰&Tæ˜Ë¡Ò_†ñˆ5ìGGÉ9~!}sÖZÝÛÇyÔÍâ^},’’¡HJ")éGR2II?’’½HJú‘” ER2IÉ~$%û‘” ER2IÉ~$%‘”ô#)‰‘”ôRßÁ÷´ùÐuœuò<ý®’2Ÿù®R ŽÏ¸o[[O¤p*¦™\â7&{Lö¾Ñc²—ûšU%Ø&5˜l°ÐWa´ªû  õµYš:ËÔl+ P³M¼?² ÁE`7ž÷ØÖm0 éÐ7oXÝ:aZ-M9k ”¤¨äh]=VåvUaÁa´Šq¨úa¨E? Á쇡êG!ºý(DÑ‹BÕAhEŸŠ¡÷ ‹‰`Zp|rZd¹ÞHçôÙ†¿ùïД’G%c•ô2±3É^&6.éeb•ô1•v1ÖI$ž†us¯ÐŒ< V³ß˜ZæÅÔ9mûÑŸØÕô§ÝoU÷»=:FWPŸ6qAN«UDDžžeí)±õ–É¥?_ô0ý–¾þdq| ¾Pkeepassx-2.0.3/share/icons/svg/dialog-warning.svgz000066400000000000000000000115661276304217300222060ustar00rootroot00000000000000‹í]moG’þ¾¿‚§ý²ÆI­®÷*%Þ.Á.Èá€Û]ÜÇ-ŽlmdR ©ØÎ¯¿îRá& ¥Ø²½8&fª«»«Ÿ~ªººgùöOïßÞL~j–«ëÅüå ¤|2iæ—‹ÙõüõË“üýÏg~2Y­§óÙôf1o^žÌ'úãï¾ý·³³ÉwËfºnf“w×ë7“¿Î\]No›Éެ׷ççïÞ½K×aZ,_Ÿ¿˜œ•š«Ÿ^ÿn2™”nç«‹ÙåË“þíÝò¦Õ›]ž77ÍÛf¾^C‚ó“^ý²W×¼JËfµ¸[^vÍ_^îj.gWEµ·äµJçÏÏŠÆÙêÃ|=}6_ý~§j1p¬*æœÏKY¯yœÖÅû›Ã/Ó–îö^ ¿-ÿÝWØ R7Ö«R³Ióf}þýß¿¿/<Ëi¶ží4³E¾63>óéÛfu;½lVç[y­_fs¶~S˜€ÞÞ¾i®_¿Y÷÷׳—'e|ØÞl»¿¸'PNÔmÛÜ-bIP |64[\¾š®ŠÙçoo›óÙô§ëÙù÷‹Ë»Ž‹÷^7óóõònþãyiÿfúê¦9/ü\ß­4TFXš]æ¾>{7]Î §S±ýç¡‹»õíÝú›÷ëfÞYUàé±êŠÛz÷ÂaÍûÛÅr}vu}ÓÔ.‡¶ïu;=Zùýì¶L9@B-ÿ°SþÇ¢ðí¬¹ZUÅnFê·¥¨0ª™.ÿ²œÎ® h­l·ÅËÅÍMsY¦tzónú¡ƒmÛΰ*qÎ]£µÙÕzq»¹®@¯?Ü”¡VáYiq±¼øýUùåüM+Zf]¯?\À7'}ÅÕÕª)wsÞ÷Zkg<™œÿ¶ÞòXo0Þß÷öíùpØF2{Œõ÷TÉâ‘0ÖßSa$‡g„ÃÆfJ¯ÀŸ #V6>¶·'ÈÏÉÆ¬b£5œúh³÷(>±³|4ˆŸDt|ˆÓK&€§rÉEáÌ?Et} Šã žüÈCÇ êñ1´ñ@g:Ôã;{>*2=ÊŸ/9ó©ÈÒ£xtoO ‹ aÏcV®Eš³åç[¤9>#Œò¸Õe&O]]8‹?ň§­.œõW—z$_=9aŒÞ¥ïíÉ c„=#ŒÏ–w‡Ñ3æÝaòŒ0 ÿV6¢èo'ãÑ Š´T'è#¤:AOLur~|ª4žê<~7ðŒLD~>‡F}N‡F>]éÙŽu\åu\íax\ª3{òFÚ…·ñc:ƒñÎ~uq©wÓ›GƒØv_¼Y6åpþ÷£´7eØ9Ç}ñåû—'JIÔ¼—~xyâ’‚´—^ê^ê._ž°§œ™Äî…¯7ü}9¯ÊéûÛ—'o§ëåõû?p<=ˉ‰Ä˜NsްSHŒ~z†I¸Õta/tðùõº[8À#på$b÷°|YîSt¿#@²ÄÈDŒ-HœH  H @Œ¢fš„DãȰý)¡ä,zJΊ(S%•ÚQÈØ#8ªu5Ôª°JŠL¨GÀê Ý É\PrA8 +3K¹ VÉâÜHDª§–"Pè«@Y?š›žbu6±%€õ‰gûÓâ¬~gÓC!EpæCÑ¡Wdv ÁMŽ™h#Ã`"&@;ôS J¬AÇ’õɹGO¡d°¸w¼þU¢„™Äû•¤UÏ’!zðú—0åÌ#¹ CÆO’Û˜++Ìm2?cnƒ‚ŸüÙG]†C.탓ÕK'ò}1È*D“ã0©@,BˆýŒ*²Ñ ©0K– É>e®Äẗa®ÄI…Ât8¬œ‚Âc¸ÝuL AbÃí.GÊòåï¢PòsÉ%Âwó¹ä¡)†›%qÈ´Ç$MŽŒÄÃÜ<'u ±‹BãOi 1šÒÁ@S5ž3Ð8ä‡ûp•SÎâj{›¨œ€Q‡›(‰Äèbûó"Îúù“(¢¬‡²~Ü?xŒúÓÁoƒÜeDéª* ROæÂè¨ü?г¨ÔŒ M]Ⱥ³FðSNèê ŵX8u^ž‚(üÅ—€2æƒ(ã~ •2 Úe”¢*ÖÃ:ª{5ª[ÓEìTå¨@ÆÙHkÂÀâÍžR"Ë`jõ&§PÉTàÖ"Jz*‰XLŸ)íbWÍÀ#yWa¦ý¼‹Iˆ•x$ïÊnYƒÆÂ!ñ§ ‡ÙTüp8$þ‚Â!‰7±Ÿ&hV$>ߨþ…Ç.‡Çþ÷Ó9E¸’Æ6MRÍÂqê‰  †šö X‰a/ãæ”‹8ÓNJJÌû§Üœ5x&AÌøyñ4ü¨x†ä<ÁP¹®—`AäPÑDôð¯Š&žÝà׉&™DÓi0,—Dá@8–cò,ža0,…„ʱ7,Ö!ÆGÎÒg òñ” ¯–r¨Y "I{VFu‹²$΂¿5!Îd# :€Û~BD™BÌa,!Òl:š…~’“(aú•„(|$!úTÙ;çƒÙ;gÝß#™ Žxb3£aæ>Ô»êõY{õ2†ä Ù²nn^žüPy2}_/w·o³fämùlˬ-p·Óõ›ß _Yì_'½*&o?joΆegË»›æ¢ù©™/f³ò^ãrñcsQÿ‡‡§üñbSÞñæ’cV‡­¼V)¶_Ëç³]á?×ó¡´@Ú,o®ËŸ ÞÊfÓâÄËåôÃÅ|1o6Ò¡½¥Rg]”ÜÇÕ‚ÌN”’ Ê)Hò¬.“ï&Úž†°S†°LÄ“#(ò)XbURšˆ%±Lä§¥””mòÃ4Y"ž†&`ôì¥MZ‹ƒNÓbb'3‘R?CÒà mízaEÆ âçO Çò'ªyI벘0³UeÇ,ܹq°J•iFw›H$s@is)2)¬,ŒB¯=!¸õE¥U­-¸Õ˜ÈK›’ÐÛô,çL:°c,È¿²ÐC8=x5Ü (¢ ^–8Ž ž!cf8ÀůoíÇê÷ˆ»10qµY¢+u7”\´H-eÊÌUIļÈ"q&¤p ò6àæ€.àš°À6à2Y ¸Œ¢!ƒ€KÙap‘P„È@:bû(YÆç¸×P¢RÛ 1€Òöì { h"0µ”V–YBzPºÈ­Á8( Z†]P =¬têA©M‡Qì-BmH{ˇŒ“Ú ÈÍô©¿Šðvd¶þðó·ß28ÿLɺ9 ÖÔ$«Rt‘š18s+u#ÁºíŬ¢Te ]ôQ=EL²Ùâ I·q•ÚP–n‹ë˜ƒ©Ý>š R'n›É¢ÙºÚ–ÕZ¶;€j­m ¨å;¨aÑô$ÆD\dXŒ‡bQ; ŠÀ*kùk)Bë]m%G!¬¯Ñú‡±ñnÃÕ¥ƒ†&&0çèÝÈ"K?¨Mmfî‡_W.+BgÚª[¼ „+¨¦íòåAYk 26K?Œ ÇÓw82}¿<׈‚‡³¢œR‡›t‰9ª"b»×4œÂý”¢”2†VY]È™ëH 1•‹¾Là‘=ªPH ÊB‘«¬¥«ÓêsÒðí½JRRFíj[¸W¬…»^Pºl7uf|WïÌ9T33“ä¶V({‡IðȰG²ÜE9¼]]ÿÜ\8%r5ˆÛ÷ßtòªs1¯Š7ä]{8ºÕ Ñ9ï0š ÎÔ>ÞÙ;Sãýxòên½~NÚ2’ßU«®¦o¯o>\üpýªY¶O¾&+ÉÑñ±g씢ع³dÈar>uc9º³ öÑè'Å…îÃ*´ed6arT™£¢[öÚZmˆÙò*|æ@ëŽ3"!9‰u2ƒ6"T7ç®Z"Û@ä° rìdP¤”B© r‹Œ«&פ¦ÞtÇzuÙ¢Wë"›€RßÜ&8ò°c¨Þ†®½­„˜úalêºÕ‘ÞG4«(ÜG2C¯8idåM c¤.YþÃànÄ…z/xúY3…æ=¿È)„UÀ>ãYsHî÷Jëñ˜î·Ø}šŽ’É©ýUCžx¶f_c¶B.ê0<À”2`•š²N4×+’6]‘ ìQeÙ%4N’;T'"N³šZN è)! ¤;-P)7Ö¨ý÷}Ar÷L²cBmPzë«,#¨z·rh WKƒˆ4ª7‘Jf«šÆ¤¤ÕßCÜú¾‹E‰„HOÕ“…Y=ÿi…Jì©(b+3¥N!ÒÊ\²ÛNíúŽv`únפœ˜9$zÓÛé¨Ñdl†F³’PÒö³¯Ÿ¿îõ³_ÑäÔ5aÍŠ$’»nnEÛ¢H亹 jõ¶w–x[ r®…]ƒÝM¥%ÞÞ[Þ©gy·IË}o›ZǨÁÙç«Õêò“’g<`RÀ~À<°S-Ý}úŒ§à“±|2’‚OöSðÉn >KÁ'#)ø¤OÁ'{)ød˜‚O¦à“‘|2LÁ'#)øäa >ÙIÁ7äŸ É?Ù!ÿd—ü“ù'òOvÉ?Ù#ÿ¤'_¯»éÉß÷¶­åÚ·8Jþuó~Mh~ì bwôl¿HXûZÏ#Dt»«Åމ.à­Ð 2UÂ;TYei·è³h@t›ì¬ÝRŽ&œ±.ål®¦¥MÆDYjboíëÉ)0„‹&&FrÖJˆ€ t/+µÛ:Ê´#tL!–ÍjƒÈfPùpª‘H;'³$Bƽy›ÌÙ‰Qº3€ì Õy™”»ÔY3Ù2ãÛý£Óȃ˜/ž9œ¨ a‚Îa%‰€f¨B„loEsã* “¨!ƪ?"¦.&E{Q¥m tLHfäÈ.Q @Œ®Ø=1s¸p±Õº ²S/dLž½­Š¡9bB²±Y£ ‡Þn›ãMs\MkH"k‘°t]¯œÍвlKp¯”©gl-E‰l0 ª&ʆ®ºÁÅû‡-ÎF-v¤d-WU @« `d.ƨJê÷¯¾.ÿבòºUùóFkÕ¼îdkeepassx-2.0.3/share/icons/svg/document-close.svgz000066400000000000000000000055731276304217300222260ustar00rootroot00000000000000‹ÅZmoã6þ|û+tî—]@b83¾¤I ´ÅZÜ×÷máØrâ«×lo²é¯¿!mEÖÊ´Ý${+!19$‡3ϼuñݧ³â¾^®¦‹ùå”õ|´Oç7—ƒßûGåÅj=œ‡³Å¼¾Ìƒï®Þ\ü½ªŠ–õp]‹‡éú¶øyþÇj4¼«‹··ëõÝùÙÙÃÚn‰j±¼9{WT•Œ\Ýß¼)ŠB¦¯Î¥r9Øð@©+j­Ï¤mðÔó´^çŸf2å¾¾B8K­;½ñd@FæùðC½ºŽêÕYC㻀 A0¯o¥Š>UoëéÍíº­ßOë‡ïŸ.ºÐ…‹¦a:¾ü2|¬—ï¡ì®ÅÙÕÅÙfþ« ±@=\þ´ާõ|½û .Á(2äuÃïQh QˆÆ ¶Ýðrà­bb¡é†i(“åà­ºÝil“ œß.ëÉåà›ÿüúËÏ?¾ï·m7Ûî¿Ï§kq¸‚þ¿£)þ9ÿ}UG5òÒsGlúLboYcW↖—˜òƒþ²";…CdniY‘ù€Èð "ÛŽÈfWd¯´Öü®È¶¥eEvDÆÓEކ³®È# wx²ñèQj€Šô“C/…BA1{Þ…µË Ña^FšˆÝ>¿-‡óÕd±üp9ø0\/§ŸÞjœwH¦ÔrK̓ÜX‚" N–X’Û¼{}©{À‹Ü Õ]ÇâL­·¨L]ÙRGurÙ’ÐÀéÙ2v§L¶¥)óJÙ²òFi¦“.+ò¤Bp°`ìØFr§[&,8°¯Ìë8V eâS™Ôs F'‰Þ ²«õânÏXç`uÕz³î¥–J Z,Ï¿ñ#-×·‰´Q¦ëÇsx°˜LVµÀ©Éì Xá¡®'§Ì±ûZ63Î銿’Ídr¬ü!D'“ëú%6“Ìa¯˜ðØ~>ƒ>ÍfÙø‹%þÁævKZë‚Ñ:¼(dÁV˜3Ì8/ (CZWæÐ –_P£Ùôî_Ãõm«}Ca°T¹t™.G³:vh"2}7´€Ç)´a¿”>v°«Ê†‰ðä~v{ÌÎ?.go¿éJ'½Ý»ock«×F‹FÆœs9W™ÓÝ+•Înǽ×ìƒû¿/0HŠÁÂÞtÅÙtE ²_)]‘:¼LÒõüˆ \…ã3<+]š¬3º  ¤+}HB3îǬÎ`™ÁWþäò(+>4‡©àد¼,p0TÑé‘pù­áëí ­ÔĦ´2E؉Z¶ŠØ1B'jÉxCù¨Eû6ç_aûxø1„ +¯ÓÎÈg…¬—ì-“=c&1¹çB„ $_hw¦¬µè-–•ÙjМžØ9kJPZäuäJ’"sÀÑ*C.À»ƒOׄ>ZßøÝ‡lÔʰßñ"«‚åv\Ç;増r¤ N½Ì‹_8›}è¾âPÍŽ*A+&'xî¨â¬²D>ØCª¸Œ*½ìûj«Zi¹ˆËº:•›³ò›@±»¹T Ü͆•–½iQèôÌÂÀ‹~±…^+G ¶¬ÚrL ,sãJKŠP;o6ðœÅW¢WoÞ¼éçŠö…EïuEÿeE } qT™«7Û®Xíj‚ÃþUJk&7Ýuv/OŸã Þ’y* ƨsŒ™ýhè0–N9ƘcìÃp2¢#Œƒ59Æ&ÇøšF£ñ‰Øågí665ÖácGYÆYãÕ£ Nø0cÔ!h­s¤¬'ód|„¹!äÊ1Ç,óta_œu#óêE±> VÿÜ`%—õbfwB°îáj ïü~èGG\ ÈZ0ܰß7Ë»T¼¹k}.tMÈ»T¼0'Kü•á5\*Çœ^"9”œ³˜_ÇÜ1Ïj¬¦KÈX×Ð?„ëÁõàúÇomä…çFž}InÉ hM~5cÇ'¡Ø`vEná‹Pö{Ç€]ä@?ºðúÐ9øúе’ýãÈ.tð\èœýÐe×w tMþU¡Kò·G£ýƒÑþ±h:|.tž²‹š÷CÏÏÎs–çÈ×G÷µÚaŽq6Ÿ¯‡£á1ÆÖQŽq6öF<²#slûi\†q€ìöóZîc«.çS~ÝŠ÷aƤsŒ9KNn{˜±Ì2vYÆãxfÌÖ…ãg'Î|¤^Üm-dŽR ­´ÑK,,( oJ]Œ¤…I é ¸¬’Ù¤bÀÄ {[üRHßDð.~HçC$¤î E«œÆ¦e\¬„Íü&Á×½Gk¹ÀZëÒù‚*« {"’")B`2øî)qD-‡ÎÚÚ`$R§sy¸M×g‡$±º®—›3•ö¸==´wƒíû,}¡Ÿsx:l‚·O°Á6»…M8s„­)6°I¥3ûŸÅ)©Ý? êϰO)¿ùâ‚KˆjDa) ³¥ŽåÔ$z)c´'Û!r³ˆ…áȒň„´±à FÁ·íŒÅg£Q³SHcƒ"²3ÚHE˜è€#~ Žìl€À.Áëu”BŠp(°Fšm¤apVÔ±¬ ££MÍ(‘D3'ù+GÊkFrÉ*¢P£qbƘ„–*½Td`b!3—ú3›p8Ñ&¸÷Ðìç"Ít75 Z³&ÃþºßÛ¬MÅÅà*ÞËÿh{ig /Ê*26HàáØ³¨lŽbÍ@ªÉ`A¨¼àR¥ßÆCw‚ÓF¾à„osGšˆ!…aFµ| 'Ö3e0I5³Q 4EÕP|Ï (ª…س¨\ޤö—Tsô,ÕètÕ,S²šqQ5¯]8©ÆÛˆå¤¤8u±I5¯¥âÓp¤ø#µ¿¤š×ÏRûªI¦q>ªT„4yJ¢ž `Rzl¯€SVýò¯ÞÒSûçU”'âÞUR°©¥pF–pÝQ¾[ëiºªP×m_ðÞÄ=ñÍSX²o¿È}Ð| Ð? ê/ŽbjÏÞ ‹¡‘´N c[l›  26—ÄBÓÆˆŒ­‚‘ :‰¯±b Qx}ui°QY‡”ýÛrÛ%)íKå=!R_ibïñ}u¢u !ôôë«i10æ&ph½Ë^§Üv!"ÅÌ¢šµµ´Ç¶ä©Ò9û‡ïŽ›˜À~YWï71*ðhÝ“îñ+—*Fîå Ýý2gBÎÙ*›¹ýÆÿç‹y-îåâz¿wˆ‹mÛ«ôÝý¹Mòy𮡘 x³©üœ›-­Å¹!Œ‡«Ûár9|LSöÐo>ÒÙ›W«`•F£ñÚ§±#Òª'*Lj¥W‚7S’2>` ^Ùà F12N˜!k´T)-§bz)ž¶¤ CN&fì˜e@…Ê[›^hÍ´¶YåÁXSFg'™L;Eh¸Õe¯~öì 6Ôä šq¦Ì,ã´Z9í<Âr§Xí'+ˆ€Dó¸" lv×o¬g]évÿÖÀoÎZKâåâZfŶ¶ÔRôE*$šOiih•Oýjå›=jg3€Ô„A‹Û‰ÎïºÎßúwì)_œ/çã]âÓyC͆G6 µß¼Ä@ø ˆ-ë‘èMX…}ˆ5èý\*ÕåÇY}^ß×óŸÑ=!Ül6«û›«ÿ‚WN1 5keepassx-2.0.3/share/icons/svg/document-edit.svgz000066400000000000000000001113361276304217300220410ustar00rootroot00000000000000‹ì}[sÜF–æs÷¯à²_Z¨ä¹_ävOô=:Â3±Ý=;ûä(±Š6Ç4©!)Kî_¿Š, A¨*TÑ’bY!Häå×'OdüæßÞ}uòÃòöîòæúËS,pz²¼>¿Y\^óåé?ÿñçYœžÜÝϯó«›ëå—§×7§ÿöÛ_þæÍf'Y^/oç÷7·/O~·¸yµ<ùëÕÕ›»û6é©@êäïÿù—“?½{}s{òWo¾™ýõú¤´‰ÿ¹*ó剀“ß¿¹¼Zœ(ŠÄ‹““Ù¬.âî‡o~yrrR×ïúîåõÝ—§ßÞß¿~yvv}WæMqåüæû³¿ÏXþùæöÿ,_a³ÓîŽË÷ßÐÖt£¢gOï[œ¯o|ýæöªÜÜ~s¶8?[^-¿_^ßßÕÅà¦øy'~~»œß_þ°¬‹ùþæú®¹³.ûW·‹‹µôÛ·oË[n…03πΈfµÄìîÇëûù»ÙÓ[k4Þw+ÀY}­“ÜNê廫Ëëï+Ó^Ý,½&Äëúßú†Ç„rwóæö|yQß¹,×Ëû³?þãë‹3(‹ûÅF6u¦wçó×Ë'å>&®ðš¿¼{=?_Þ=¦7÷o2Û„ËÅ—§_Í\Þ~½:{¹¸ÿ¶¾LÑž~»¼üæÛûîü‡ËåÛßß¼ûòNà)N/ÜÔ9_\ݼýòô‡Ë»ËWW«â–×óúpöj~þÝ7·7o®5ñ—oOžÞܶêeSÛºA¯o—wËÛV·?ðr]m(Lí¥ÇVm^{z×âæ¼Æ¡Î´>xÓ°n¶\\Þ—úþ«'øj~W žýó®Îîl1ÿárqöÇåÝw÷7¯Ïîê^ûêæÝÓboÞÜ¿~sÿõòÝýòzU~ {÷ ÚË«¢Ö‰O3X¶yvqyµ\UòìÛ›ï—g¯/¯kÌooêƒó»³›w?~³¼>«ï¸j€<›Ÿß×eÝ=mÐëëoÞ›÷»Åëši ï½øããÅßþf±¼¸{äBsŒ uêú†×5$¯—çM—|‚Úý ŸŠñâ'Oçõ×5Yf 'µ‚‚æ¿ØøñËÓö´×¡wý__ž: d°.vvs{ùÍeý¸’N´mÖFÐôôäì·¿ù~~ûÝòöI^w÷7çß5â¿»½½y‹[^¯šSç]ƒýåéüÍýM›p»¼ø¿ ãàñ쿺³þýµâÿñª†ê±¼|è"_Ô(¿žßÛˆ¬îkΘÕOWIuÊßNõ_ÿ;ùêD룙¶‡3¤¢ÉmêZô_'M]Á5É®f·o®ê‡ÿÃòúf±ø¢ÖÚ7ß-_þ Ú¿‡ÓYÛù_b×÷_¬à™ÕcÖíýËëzÌúâ!ÏZß_ßÕŠêû/O^. E^œÜÞÜÏï—¿Æ€+‰«ö*xÑ¢}¶Êo+ØÛ2'ßå0ýòò1"ÿà'ƒý÷É`ÿ}_° >-°ilÛë¯&ꓯöÕ'ø‰é“Ô'Ttà'“ü«}I.ñi‘¨]Ð겯Q€íýã6A+#T¬ùóAà ¼mim³/ç·¹/ª<Éøüæêª®ésõvþãÝ:—§·"×t¨IøúÉ£kfu7·ÝÃj’njÓ÷òþÇ—øØ%n..î–u)pÚÑ©‘4ÄÆvÙ#køiÖØÏÚWÏùi[~û›æ`~µ5í”çå··ËzŠö«§y1¯!{š-Qh{雇„^_Þ×s°7µ=þ÷ffðï×µiþDây¿Ÿßß^¾û5"• š_A2@©‹fs0 *†žø¢Íç¼& dÄt\¥Ô¤£b. mÊEOæ¢'sÛL¦œÄ0y€?}Š1Q䕤Ð|GбŒSd)‹óóüIÖ# !b{?Cºó é`B,x2C x$j¶ YŸ°P©¸H:Q,gôbUUlŸ?*êðë×ÂŒ±¡/OƒŠ„˜ÐJ†6d¶fë釰ëè²ñP˜Ø{Œ|ìí_Q'gYg;e _/hÃ|ÁhDÎ ° [5kŽÐŒ«æš)xeZÔA¹š5TBÙ OÉP£5{ ¢‚¤­é#QœÉ‰×ô¡Â¦N–;мcÈÈ3ÚE¡0AŽ+Òæ·ã˜Ã„ø³Ž9ž`ˆbz7愤P…RjJ¸DõaÌa"=EÈÇ)2_6¿‘¬±ŸuŸ"¤Ãñc((a!0‘Ê  U3áB jO !kÂD‘TF¢Ž0^Ø!"Ö„±âhé„á’®  Û†Iß?ê0mÔa:â¨3Þbà}º e²Ñ¾ÂíØ£ŒquÊp|ž‡ûÊ! ´ÌÌÆX÷‚&¶œq¥ÅÌÀs9“Š H0ÔéÔ Æ$D, dõ®ã°s7ÎuÇñ"Fä¶J¹èÉ\ôdnÛ¾¥©˜ ¸5^@cÐxq<–¡¦@¡›©+½ãiFMRhK…¨E‘¸š–dñìŒÄÂd²6^Ô gæÚvA)’¬Œ+êdv°]@ãýz ¶×39wëO©·˜ ñ|1>/”l§½:Ú.‡^6 ÂèÔiç :ßV]‚E¯ˆDuäÐÓ‘&o_m¯’_e d}T½ƒzɦ›yZÈœ­£ åAº§¬¦ÄõApqW¬ffE9464’s5‰µFJ-nIÞi$´Bè¬Ò åRP74’‹ ìàoÐ|#ƒ~1óy³ã}ý¾qÚ«ÜPß"ƒ>ñ]÷­z?÷(ðü”'ÍPþf«J(WXÄQÚ-*¢b¡’SIi¦Å”X¨ã:jqrp_s]£@¤…¯˜Ý“¹èÉܶNÓ|kêGò­iË·fxt¾ú0_á}%FC«°P¢Ö¤ÀâÐ&aAF9 b —ú“Õ ÂHëžUî&ÆHPLðqVÓ“¹èÉ´ó‹ØÅó–8—WWõ –Þ#™·Sóó…Ñqꖜփµ©F±iÇéÚÌ£ØòÙ÷¡Ã0«Ç•_þâ¿xhgWQ kÌŸÁ Îùùûý  'gÃ9Ó@Îo¿½¼_ö'N›€>äûq¨i> ¦åH3÷‚OÓñ9àkKü¯¿}õ×?~M_o Ñ;ìáÜÿ>„'˜uµ$ÜŸÿü§ßœ>ÁzuÌæøi62‚È~Ê{…[~=4CäÄ M),ÜáŠ@…E|mXQV[œR”Û™Í!šðvð.íÐ&ð“Ú‡é“Ú‡é¡j¨½ ö^(¹«¼6§‡ª;} î¾KÝm£îÒÕ= PWykÏÛÚ¯ŒŒ)µ÷¯‡,ÙÆbélQ Î¨@* ²60‘³¨†¨Êñ*û«œ+Íó›Ú«×é^ÿû«ÿ®+ØÊ,ÿçÍåírñ§Çå©w»¯â~T¦uùðdiðÓ…ÁëÖ>©„Ÿ¶ñòåëo.þ÷ò¢‡U[…¯/»’¿®W÷œ=ÞÔ´ììI®uÊ/©T‘ØáÓÖª]CèÓU«Hìò©êU$v;®b^ýÖ>l«ØoN 9T{ÁØ¥Ï\J8øÆ3€ ë¦Ì0 f×:¡çmZ~ÂMCMóáYó.¤óâ˜.]Ïñ]÷é‰Ô) E1tȱ±î±ˆƒ -gÍòÇg|ÆšîÏúŒ;›çðÏøi¾¨¶¶nÈJªlÚ8ŒDAuåÙéÉ\ôdjC(JZ òø²/•ô¨fTR“£õãC%AÝ©òb äZ!”ð1þŽ®‰ÃÔ¯‰«Wíò%?ÂY{˜âa&îaÊs÷&­6?¨þÂ,†Ÿ´Ë.Ýž³(#uVϺ»÷.Ö)ŠÃõø|u‘#ðõÙ‚‹û!}’irˆENü¸¨-ƒª,lè@XaAcc“»ÍWí0-Tæ¸õ°?Ñy0¨mL%Xסrvã¨W@Y¥\ôd.z2u3Š’Ž[B`¡DChè1C-êɱŀytŸ}šÜsD‘w§>®«›>W7}Ò®nú„]ÝtDW÷ñ{¿ÓÑz?®z¿èG;¤¹B«S‘åÌöRíõ–ËûåíVW¢L‚§õ}Ë¿ÌßÜÝ]ίõ¦¹$‡væ²øãò‡ËùýcNQ”5O3e^­X•|ÔG! v GÍîñ@<#0DÞÅ™Ýd…‹„u»ÀÄ d„wã SOËnd¡,H¬d{yFq4.)iÑ€¸.s†E@Ü$:ÅUˆÃ0r]ùr “LZ·°Úw-SÆø^‹ˆïrëãÐy­¼¤Jv£‰s#‹±ÆKsŽÑµ ‹9Ž/–ff^+Èhþ+Ìââa\1ÈPö{#D>ŠïP–ë&Ó°1=-h °Aj¥â°PQMn·¨@1Î ¯fhYˆÑ±²,¦`™“БqtPöE‡´xZÇΆ-¸æOO¦arAuâ-ÜÆX²ý«`X•Ç]È™ G:†@ÇŒŽ--18í-˜È“ÐÁm8òIè˜D#ѨŠ5Z1°0 )ISÇ0uÐHa&êÆ-Á@HÖõ Âˆ$ãË…ÂZp¨Ý9)ª¬^ÍH&áá[0öÖ*¾êô,HR Q;X2[™Ð5*BÅ)Œe¯a©‰Ò&¯zÕ*Õ&a¤£:G÷ÅH% ²lhÞ,îb3-4)f¹fN'3‚QGS\Îè&d@L®fV -½æVž†Ó¨nv!Ú§C,ñQ@™2B}þ:˜”e‚þÌÇpRž>†ï²‰™‡61ëö;ŸÎý|±ðmw̉ƴMÌ8=tÆ(Ç ÀhGÛØŒq<8àXpÐñàý·¸»½·?¸lß^Iý³ÝwæyžÏqç€Ê㙟/êNŠ;†˜p!ÛNÆ÷ÂIÂ|˜ Ó¹Y„4ðJÑ]6_):¾ŠªÄOâØ%2uÎ…’Ž ŒòhdÄÜG»]’zDÛëšcôfrN õQHVÇ ÞJ_…~ yh:½¿ƒ¦ï`wÏ/d)Ëm;hºmßA5ðŸm9i‹–,l»N¼¢Ý¿GÖã¯HŸ[,LÇZ¼<_.–¯vn±ùÂù=s«áò³¶­}÷iÈ«ù«Eo68§åÛ:ÍÆàŒW !»ÚÖi1'¥KNtøŽæõÄtÕm÷ø÷Š'`AíµÂ·˜0/¬ù–î"Ö/ÃÆËˆóÄÐ]g!é0¨|:!$Ñ07Puˆ¨>ØÕž?”’k¿ê¹_ìðñ‡…†S–ñéû5=R”IBóŸ/Ê$¡å(=Íogz:¶x|$'ÂÑä:N÷ãí$ô<’3—0&õÈÓG(f²¡Öðä) OP914-U`Mçaí‘9!:ÜTíA€GùºðøÃFn~»>lÒb䣼¤!Bž:Å.úrñªùí®/Û߮ú’0¦ÀIv$8)Ž*žˆ§Øƒ)GŠ˜r¬ˆ€©Ï?qpÕ=Çz]¶qI$‚ÜX­Å!1»ÍÚQÂÔ66k#kaVXG-í²Ùf—L ú0©¡Ù„=fÇw-0ݹ\y1VÂXÎ÷N`ðú,**ë8³È ÞÈq}™›/ÒõÁa$†‘&ÃX££Ü &HÎË·ˆ™·ˆI5Ë‚DÒ\ / D5ŠÂaG„Ñ #iÃ( Î"VqIFå¬ÉfÍÛ $wÔ–¢PP=ª™QAÔ µASíù>p1E\¾Óp±Š›aH¸@fft›B:™ÎoΩ¡9¾ž\¹„cJ…YXÉâÅÁ å!eaGÉÏŒP ‡¬™ÜtDD’”D-(àí J¯fbÅɱB*À™ñâ@d=8d¬ÃÑ! K‹fˆVñowâĹŠ!ˆúõ¦gû–‘N×ÿ‹Š&ºêCouaëzëh&ΟboE¦žD.¶ê­ONÖ"Š]wí½'í¿Kí¿oí½“=8óH‡™Gê¯^ 40 ŠDØfì,FI× ã}(éàV0â ˆ6}œ°B.ØÎ¸)05ØII ŒR(žaˆm¿5Ðp/àFØÁ˜Z4”Ö0jMTðh=™‹žÌÆG*¤†ñùâØdÁºVQ‚SÌ[<¡„0+VÈÅ#*ÕBnî5€j^"Èþg9?*$l³xAC¨$„"$¶ú$ž„~ö]$0cCϰö$2ªÔ‚B ÁLK@*Ê–{ÆID¤‚Oæ*ú>1U%ýÜø4}0å"ÒÆEH¸†É ƒ;V³ÐIìŸàä @(ÊŠŠ°@x3=ÒLi’’­²Öß&5ZˆR’M>ÉiA‚‚O˜ þ“è^0ÝãSì€èÃóCÖuÀ°®~Šæ~âQz 4mËÄ6&k0f³RßA£ñ!PAÇOÉÔÿ€2Ýá %‚¤Z̰¹ˆ>¼.0àToN­I6 {£b&ÄÆYF±`Ї~Ùºè ÕåÍÀÃ@úæLªªl NÞº×ìýt4¤j}@¡¥uÃaPqWî`t+’ÄÆ¾ã(¦¾Ë,¤ˆÒ¡H‚E\ÿúqDšÎF/aö¢;!æ#ˆi’Vaˆ¯ *·/‚¥C1²ˆŠêÆkF€âbcDOæ¢'sÌy§f £è±sà±AT)«sA7¢ª9`$®0ØÊÊQ’¨E`?ÑH˜Ý¨«VØXÃVhõd.z2½î=“Y§ЉT4Ä@«æÈ“Z(ÕA‚Ú¤ «P²‚UÄX”?b»Î‡ußœnQ8-í:¶<&, Å ˜IîhØy "NÚ0ìBìØ†¥Ù ż‹ufTÀÀ4ºéŽ•`#߈9%T;k«“™îbrO~ÜÜ"†N òX¥akI’ÿð ²K8» JGòfXaLÌG‡_Oæ¢'s[‹FVѨZÌ p¦¨T냙b •ÔÆ,Âéþ3,!ú€‡TT°Õ\JŽÜ A`æV5`Mû‹0·]”B>ËxÀÀçJ"4}N¢CÚg >€R„âá#.øåsá§%¥Uõ¢ÅÓÈàÁí¸HÞÔ—Ý +ÅÈ:Lvê†X(jÜ ±b%E2ĺêÃ[ˆõÉŒµ0{«9)ÔüÅâ,…Fí|0„…\ð¡U=™:Å‹¢+Šï½3Up‹8¡¸wü(âáëv¡•îA¸š)¸EȺ]hUHuJ»t›/ù‚íâÉí:2Ç¿êo J‡û” ¦‚€ŸŸÈœÀÏŸ È€ip»òjP„nø, J$ˆ3Ĩ0¬×µ÷„Î7…FÇ}”Dm±‚D­ïµ¸3<,½ Ai­OT3©¨¹I”¶‡±’=uF—}y%Y´Å±ãfAÆðn\Ç‚iæédÆiД –^ë“׉©Â˜1‰g³jžÒ.ü,Mˆü,MÿuBM2Pâ[ ˜û¡Ø-Tßr1¦*昡i¦ÁˆÛìR˜£Æé’¦Áȹý…éÎ@rê€3p4”Ù¸‡Ë`d:?ÊloOOÓ`j0+ök¨lß`Òæw@ß¡ïóÌÓB wYþ|pP@øhXóeó; O—ž±Ž·x<>ï@Ö#-ð9­ÅÙµxŸ@¬£ðÉp¿ÐÄã1ÿÉxJÓ¶ë±ÃÔ2ùÏä:Pz6Ú´¦w›‡»8ÆÏ×tfèâŒ]|,øôÜãosˆIŒ:-à1NbÈqâÕر¢[Ä„{ôO;˜0rßÎ"Ïì½û]dÂPM¥ç¤Q‘'~øCT&Íw¨¨XóçC_£BŠú’ɾ£‚öîm¿Dõ1yšURåq5G¸…d5ÃäBÒ†á .Ê.ûOæ T&»–?*ÔŒ¹‘°",F˜ÕŒ±„ …OÂŒ>#̨`<‚F®$ Ó¨&4‡Z•ƒ&¡Ç|‰¡^P»ÅciE=#»Åc*1…»/¤'"CQÇ_¦3 =`”™îA Z–0ÑH_Î&|#Ý@b "æö=9BÔp(Fr¶+¿ •¸N´¤¨/G1WkÝîRÄTM'¡fÇ|σà…U±C­©´Bf¬QCô)kИ ±û(³ ƒˆìYFL^‘„®ÄK&‡È$„d|Ÿ8Ñÿ÷h0¡ þã¢uˆtD *èlDëÉÔ)3¤èª1…0Á£;Ú°Q%ç-ÅÔº¥ ­€u}QJ’'o¡“ 6´3sj}„lD #€]Rh¢‚æqdÆ0ÎÌ')’¬Œkœ:™¦Âd¼Í²™ð6¤tövã ÓHlu2VÅÂÄ´"/‘"> 2;ê"/¨¢á]§¢žJdÁ…I:ÈÜŠC(ËÌ “ôŽY±Â „3*-LLí➄Ҩ†v6Ù[µxqìPÂ"JÜ©*‚ÄJZBˆ>”h›Dc(},«)´1ƒ“­šE1"RÔÊ‹º™8U%”¨¾XØPtÊ ÆVTŽ3-¹d¦ wLóâêlÔ1-ÂúšiÆ%‘}3vUâÇo ‡:˜hÕ˜YÍ’Š¥ORZ;ìw˜¾#¤ÿñ ”bÆùqî1 gÜÂ"1æî<ŸŸûâ|×ï‹B]‹=²K"J“Þ’ÀX‹ç0ǹîÚbrÚÏÁ‹£-&—)-kñ’—´´ŸTk´ÁƒoƒÐ¦~Š ¢›øG{݆°?¬8J$ZÒœvýĶvDê]’®Ì’®lÃðʹ¤Ìw÷Íë+MúæÍ\Â-úí°ñ2ì•¥•ý¬cB‡@ãÓ Õîhz¤3š´xz°t9";ñ!¢i¦‡=Ÿ× GÀŠI I$V3‰ð¦ÑŠgéÅ…Ì6œBÉ^2BWBÔ¢Z(R‹<²¤ÃéàÐb›Pu‰à®ÖD²›«+ï*íVÕÒÇÁ~Îvmêë`-];C°®¬â)_]¾þùý·ÍÇ6¹¥˜ÚO¿®»îÖœ1åc¬Sþv2³,HZœüádæP8Uêóö,¼¹TÄ™»,`¤'_­S(’]ëLº$.Ji¾™-’t…6gMY ÙÛÓæþ(’b+á(ÐüÉf~Ñ•Wßëú47wÕÝÈ) +% ¹i³áÿ:y:ÆtÚëâòêêå›Û«_÷-U~Ñ^ÝPuw÷·7ß-»A»=½½\Üû’O›|j¿¼½ys½ØLüï›Ëë§©ß×ûo¯.ëÿ½”Ç´ÅüîÛùííüÇ—×7×ËÍÔ•†}‰Â=3ãábÏîY¿Ñ¼¾Y,›·šw5qÿVºø‘GÏÖs7-<ÞÕk­x† ­H VïæÀX"ÌÖÕÁ¡X€=¿šåÁÏ?i¢'àÆóð’Ș ãâÉÙ5 ³cL@o=0kÍz@Bâéõ@XÈCg=L`ؼ`†4g«£>=-Ù $P@"¢Êzl!ö©"õ±k. G³$)Lõж)†…4A›DÑÂ!–Dr®SÿyçÒ«×máÿ¢1õbÝÞutߊí¼³À±Æ@‘‰SäçWÒº?ëèó9¥Ø` ¤ ŠßæÃE®Íu£‡Â­åöé—¯ž¬5ææ©G"»:—ê€IæÏž%Ø©¯~ézz½Ó—×ÃëÝo~fn^d^uq‹àAOÞ~NxÎ†ÆØÙ,«.Ï©N·º\CîÈa‡_.Ør0Gy-³ µ¥<­Œ²a![u³›ôªßºÕÓ3¼Pó¹öÍ«ÁsÍoÿùÿþo_ý^ÿÞ¸_8T—ÿο~7æõ^…’¾ßOûú zð‰;©Üïí‹/¿Êo¾|Ô›gϽW3åýþ’óÍ×_?ê"u¿¿ú%KOæ7ß¼Óß3“:ž¶Ä¾ä{¾s–2륇 ½­.¡zIqh\_Î@6oä*EaÅëKãjòlÉúã_ÿòçŸîIV›è/L£50É]ââ÷»*ý]¿G¾¢Óï÷ÇûýÙ—õêÿGýÕtßï¯>¸¿ù…Þæ~o_}ýõÏ“¯G.„ï“KõAøLÊ_ _%¦óÁeòà h^U Ãò Ô` ©¯\Êâô®éüZzñås¥Èã~G-_ø=ªÅ"ÕÞ¦}ª÷'bò›d Mö XGû¾¸v\`=æ+„Xù;âÚslÄ}ñ‡òoe <tî‚~¾ù¸µúÎblùL‰“­m¿ZâdkÞpÉo&CÀÆ”zñèí.ÔŠÇz‘žY{ã¸ýüõ²YÊóý¹å™ÏŸ¹ïã[}ìž›Ê(áÜzy~P^Ôw¥öé†ÞJ¿#´äo½Öa+ë®@q>s­ÃÖÔÏ]ë°5ý׫uȶ']âÓ""컵~Z8¾ÿ¿ãwìótÙðy¦ÝIMãçÎô´_19´5ô³¤ôµ†¦”¾ÖàFJߘ½?¥o,>SÚ·}€¢£R©ŸpA‡¿_¼þâý÷ÞÞÏ1Ã?@ª¿‹O«Ú[íž~ÛXÐOmÚŸk¿²}¿²N?a}x‘‡¦^S/^ý»þõÛ¿ÿío?~ûç/þûï¯ÿý=¼yÓï¿úá~üö§ÿò*WRÑÌ¿]€?ïÔkÞÚn~ùc^¶c>ÅË \#;Òï¿mSoßönÆ’@¼ƒ7%Á£UÆËQR`ÊÈeA¾Úrö¾ã¼üÅÉÑßìäøÿ‹É¹Vú&.õv›mƨ(ýÍ=É4…»ûÛû¡]äëÿêÅ»[‡ø'Û:ÄïmälïºÍÜo†.f©šé?;ejÄnÆnŒêã¡‹²¡ ï Ý™i©õ>Øù®Ï»VíÊØ´k_!a#jÕ[ÉÒGm®ÊñѼ§ÚkzžÔr5íÏ×r—ÔmHÞ3£ªÞ™U¥oæ_ÈÊ2ïw% &ù‰$ &ëÎÑij§¢?@>½«¨k\¼×KBÄ«‚?¼¬EŒ1Òû‡—½&íì\/i¨ðæ"©:ñž$+•?ËlK¿>·8˜ö P!Ú|wÛæÞ7S?GšÜ?ò›©Æê“ͽͽo¦RªQloù?¤ò:„æWÄ›vCÇæúZ§Ñ›è qtg>™¥ªY!o+ê\{iF„YÔª€+Åjã¸Wóô…®Z>_& Qc½Á”DŠç¼ÅtÓèÂd­°)÷æ$r_YðŽßã䟗“b¤ÃúâdT‰‹ÓÕèâT ©ýñœEU¥xØ&ý¬˜ÒaÒ”º¿ên}ºU§MG¸ªPFî`ê™g`jÿXLL %Ë›FŸrÕ©#UuMC9aÜÃTŸ“A2)sÑÝ4ú”‹N3\¥H7åìqâçàôëëºHµçb@Š»Òägª:í„{2V't‚¾‡IÏÔtZ+_謬-L=gjºQtqbÑ04ïÙÃTgj:A‹ç¬QD¦ç&ž©é4.Ú±(°ÈÖÞãägj:7d•éªG„û&=ôT§‹)[£ÊDmqª9ôTçÈP.£dŧ:RÙ™4²EWÂ3m“O=ÕÂ+r5Án×MN~è±.Bs.%d““ž©ìd`â«lÝ¢”sª®S”9}UÀËlRªéb ªÑ«å¾)M;›Ê\Y¨)ZíqªSSì •i¹ª –µ‰‰g쪑t›Uƒ Ÿ=L~¨²sEZ³W™dor:5>…vÐW¬brSΡ'»†4Ó×(T­š{˜êT3¦ÀHõEǤjìaâÁVL+áê‚XNîaòCc1‰j\]¥÷0\:ÅS«W$*¨µ…‰ÇVNq0»mu@¦}Rê®+”hÚbÀ]¥tÓÁ…SÜšµHt‡:÷8[8…Péò•¡¨l.;=TÕ)¼uq .½‰)æT]CMÓW 8¥¥{œêÔH̆ZK/¤•³É‰‡=rѕձ‡ÉOÕv ‘”^Ñ0kgïqÒS=vŠšñ\1ÚæGZ:Å5\tÄ”Gìa:µxJ J˜¹ÂµOà<µPX¢9:«]>{œN-ž’¨ÎòÕ 'uÓ±ÕSV£\T´¤·8Ùœ›Q^)ž‹Št£õ§:ÖcgÑ«Òi‘{˜Ž O1„MÕ¢ÀÝ,¹ÇÉOÅTh$keÃ9»VqÓC=v‰)[¥Ðîè=L:çc¶Xq¥CRJ79Õ¡.»"tbV4ÌeÄ÷0ñÐЊö‰Ycª]_”ú¹µÂè5¶¦0ãÚÜ㤧íâ®o8©Mm†;É©åSˆt梠U¥}ÒÁåSf„¹Š0϶=LÇVO!8b¶è˜êÊÜãtjxŠ#²+ˆ )á&=U×9Ƈ‹ÄxïÕ1Ì™s=vŒ[cÐè)Ûãtjñ”Á´Õê„ ]|O­ŠIã!M:-œÜãtlí”}BW)H5›=N§†§¤­|5A³òÜÂÔsª ³A‹ò5‰ª™=Ndž§JÜjQ@•ÌÚãtjí”À¸ª­$Æ<Ù{˜üPmW ±…¡çø&=ÕaW 1¸R1í±Å©æÐ|ò†¦QW4$«ö0Õ©çºB±*Ö(4]rOÕuŽ(­\åhIå¦CƒSÄÁNŸ5k3Ý£tllJa¦gu`ZY{˜rN=Ö):{˜ MÑ3be!3Ç}Ò±ESˆÉ°YÓ(‹ÚãtldJ¡’SA˜Ôâ'=ÔˆkÚƒ·›ë&Μz5yÂK{¥cÔÃ÷(Õ©&L‚jÑk c^–{œx¨ 3Q:+ªìÍ5wlɃK­Œztïq:50E‰êñ·W°xlîá=‡Ú0ÞVº’°T=JÇ^è3HIáŠÁd sO-÷ņTym®:?ô^òÂØèC›jl®:=õšƒ‚NY¯HZ¸mqªScSÄaʉ5 ÓRá§S/õ1´úÛM\X±Géà;}RÂ{å@ƒå{˜Ž­™bP·®•ŠvfoŠ“jÁø˜õ*3Rk S™ha­ ´¹rÒÁS$4{µa¬cWšN½ÐG¡®6+ˆqS±=L~ªS®î‹‚±HÛä¤ç^_Ç*땵 æ'š" ³ÖYQði‹ÞÃT§žë –ã¶ÆQÙÞ›âÄSÃ0 ïè^•è±–ÿåî^n,ˆA Š&d•øäŸX/:v¤p4’ǯ¯;'?zÚ$†þ2ÁʬÚ1]MS"Á²šW-·Ñ•SMS”Ž {¥0‘ŠÜ9ñhˆ™p)PÔÌvJyy}´½LhÛÔŽéjšBtD¾IÔhJìœîMÑ42=zÅäWÓXt}XSÂvN¼ú+&¡Q/ˆa¤pçt7NI‹x](ªôRÉï~°3 ˃lN¶)¨ööW keØÊÉæèY'¨L{­J»ï”®¶)6HÓÌW†‰ÐªS^樉DŽªLÎÎÉ^ë¬xY°ªPÛ1SÉèza¨ñ¬Y9é\=ìˆ ¾,0­:wNWãňG¾L¨±¥vLy÷GÌqÓ.šæŽéìÜ”ÆtŒ=W†îœôfˆ9ŠÒð|#l§­˜dŽv-ö‡Œ„æÎ‰W_Úšñ8h–é윎ö)CXˆûkEv‹úŽÉv.ˆ›7‚‰ÓÙÉ)¨Èz•ñÜ9ÅÌÑg­|9PÝ1bê¼Q˜«V옮æ)žÍä‹‚ITæÎÉÞìnž|™(Jxí˜ôêa§(7}td(-WL=WÏ:G”¹¿ tx‰íœ®Ö)éÖ×R¥îòê½Î@OÓŽ®©¶Óá•>êÕúÆ¡mb³sÒ£%&Ñ•¯ ¤(}ÅÄ«;}¢Ð]ѯj’¢;§«uŠƳûÍ Lª–Nyô^gŒÌ×DYÏ,™üîHÌ”~%†ÐwNWûwÐÚýÑÑÁX9ÕÕ¥>ŠÖ±~E¤eUï˜x÷ba5/ÿoœºtº:<¥³|£`dwNWû¼Uí£h!¹cº¨4Q#õÊÐSÃS^íST‘Zâ¯Ù>;§£}Š Xc|‘”¡ï˜®ö)˜2öŸ@—VïœüêÕŽ“²7‰Ñ“=ì •Ây$ªÉáŠ)æî+;ag>Ì;ªwN¼úCf Ó†o6â;§Ö|á ™—oœ|Î*FÐÞ:ÛÛvNG /£æµAÅ­vJg¨nI}l$ƒj;§³û}!îý¨è´ß9éÙ åJe¾6xƒ+¦¾¨h@3Bbe;§³~ =îþr ^¡±sʳ‡]OY<Ú¢Ù;&¿:³à29ÿ,ÓÌ“^Ýy@”kÆËBTwN¼:AEÑ,Æ£¢˜µcº¨XÃk&ß4¼KÇvNWéöO¢;§«~ ïxé°.•®*"(×îת”æÊ©æê7»B¥+_"%«wN¼yر¡åÆ7ŽeÖŽ)¿=Pã£aªÊmÇt¶OˆKØ«ÿ‰ÆôÎéê†ËìQ¡én;¥œ«Ê©*ör U.³sºÚ§ !”©W c—ï˜òè'»„U¤¾RTJæ’ɯuDIcSºtºÚ§A±èGAvŒÅÊ)æè½N Ñúj^½Sºš§d£ÅНVî¹cºZ§ˆ G*ßÌd‚;§«óS Ö)ù2Ñ”ÑÒÙñ)…™èxa(çWN~µN‰F¦$ÿ K¶ÔΉGSÌD…ß B86;¦<<,L-ø¦9Bß9]]ðSƒšSðÉb윎æ)ðè²ÇÙM_1ÙÕ<%bÊy=¨¤ç윮æ) 03óe •Ý;¦£uŠ&ÂòeÃÕµCºÚ¦¤ÂT5^|„Ú;§³Û}ˆQí|4TKجœtÎNNrìu¢%¶mŠòîâV c qÛ9åÝ£N‡U¯éÜVêG/v -‹W§ª×NI¯†˜DÓ½^6Bº§WNr¶M1ËìµcÊ]¸sâÑ{ Ó'©mæ;¦¼zت8|Q˜tê윮Æ)õ²W‚ÒŠŒÓÕá) o³|lÄ4w™¸ÍÜÖZÔWéÆÎéjB…SU‰–ð¨ÓÕ<Å1£¯CÓˆÓÙñ)aD½˜DæìœÎæ) ¯N}d¸X¯œújžgÄËÀtÑrÇtµO‰€Kf¼6$g{Úu^=í¦öFª;¦£}Šb„ö"0mj³cһϪ,øXPΈ¯œ8w‡@—‰Æ£ÁjÚtçÄ›‡Ý†eþrCwÛ1]ðC°3ô Q¢¢Ü9ùÕ¯v QÏy5`QÊwNzö«]ei=:ƧfÇTs5Ç HôøKAIŒéΉWsÌÀÌt¿4øXLíœòèÕ.!ňW#EgÇäw7•G3ùF1”õŸÓÕFE R&þªC³SÎÙ)Ð2>þzSÜ1ñêa7  ùÂÑ-UºsÊ«OÊ ]Ji CÙ;'?»»5C½_:22*wLzu›Ý€–¡/AU_1Å\½Ù9JYù¦ÆÊÓÑBÅÞÚñÚÐ4ºî˜òê¨0AUå+Cf·ÌŽél â`uØ#á#aºs:¨LÂÅŒ¯Ö™Þ+&¿¨„Ce†¯”Ø1ñné–î/C³°ÓÕ>e0fÆŽÌÝ)ùÕÓ b¥ojmé;'½zÖ)´¤õE ´ÊVL6Gº@¹y½ ÒXµSº§ø@IÏG'$}çtvzŠÁT«Þ*º˜;§£uŠÆŠúªAj¥í˜®Ö)¦ð‘ÉŽòáäÊI¯ŽOɶG¼ JEÃvNWǧrÜì±àáÜ1ŸB„OåkX«éÎéj¢ŠÔ}“б¢ïœ®ŽO)¨x¼ „g“+%™«)f"ÇÛžš;'^~e'Ö Z¥úÎ)v„›»¿,PÌu§äwÙYŽö«„·IÄÎIï®;èü™˜í»ÂPçj›B¸¸÷‹ù(sÇÄ»s1k"âqP¥åºsºÚ¦˜ƒYÊ—„ôh.Ž®öaCØöF13³SÒ«÷:Aº—¿ XÚž+§>Û¦4BÜç©8„µsº;>%ÊGÿ­™i;¦³qJ ¤˜¯ í•;'¿úÆN .’¯¥5¡;'=»ï ÆÒÞ¿ŒµRâÕ8E•­|ÓHË¡ïœx7ÄŒ¬˜ÇfÆ)æh±˜oïÓÙ:…àpâe¡•SµsºZ§D™á/R–+§:š§p‘ÉWŠ1«Š¯>:H„˜õËÅ5|ç”WÙ52'ý•ÁÔZgçäGß“FËìU¡ÔÃ{ÇtµOICtç‹Lr§”Wg§tÁÓ/ B¯^:­S´ iofj¶dºZ§X¡%•¯ˆHS.®Ö)1P-{l¤zV혮Æ)‰v>*ÔŠ¶cŠÃ»}<ÕæÕ &klçtµN1˺adæÎéhbƒr|t$Õé;&¿zØ5tTãe!ÆÛmçt5O™@=Þ”c+'Ÿ£?c&¤>îîÜb¢hC€×ðè¿1.[xò~‘úZ‘­¶cª£§8(’ñhp•°Ø9]íSBÕš/ mê;§£³SÜ`äßbšP|vLW øøðQQÉ]9Ù\=í ÑÁx˜–·ïœ®* I}ãÿ¸ÇÜ1ñêi—µ¨„{©ÇÎéêøºÊíu#D†¶sÒ›§ Ÿ¾T§w¯˜ôìø”‚Ex¼,hxÛŽ©î¾)/jÏ£À\Ó}çtµPXÄÄ+…d1fÇtu½:,ÆôÕ€Lî”ôj‹©Éy­°´2_1ÉýËÎÁNËGAfgÇŽélž¢hýE!CÕjçtu| ••þÆÁ±1ß9ùÙÿìÚ»ìÑ!AÜ1^îCͪWi¡­œdæð‹ò6ë×ai혮NO¨›Í›çˆ÷ŽéjŸ"Ëb?º5\wNgû”@e ŸŠ!Xœ“ž]Û*ã¡/Ùjf+¦>;>EÐaÃ7 ­ÓÓÑ@E³áBå+…'-{çt4P¡ )Õñ™ÓÕ@Åê&öЍŒÊÞ9éÕÓNC™7Nwïœêh BA«÷<&¢º=vLg¨ÜÝø’ˆÙ†Ú+&ÎÝ«Ýh×Äyꎩ®Æ˜‰1í~é`%i;§«}Š ŒÙ„Ó5jÇtv‚Š@LS_%:Ë%wNg •FéˆÿKÚj™¨HMT¬aâcoæÞY;¦ºúô á•S¯9ÌšÓÕDE%iþFQ–¶Sò³»±ô~C„†´ï˜Îî÷¤3ø²À°íÅί*RÈRË7/ÓS]2´×ÑPó¯æ˜›x­Èt×Ú9-T4ÝM{e°”Ø:éÑia›ìx“ÛN¤»Z¨h€nÖ¯ ÙÙ¦;§“…Êï寔*rçt´Pñ„§å£!ÂX¾Sº¨DBÒôuaœ™¶cÒ»Ó¤uø"ÑE‹“ÍS”`Dæë·‰õŽ©®u‚Në|9ÐRëÜ9]ÍSf=Ó šVÄÎéhŸb Ke¾v -kvLzõbgˆbÚëÙdså$Wü˜ƒN¯GÇL¥÷ΩŽn³KhŠë‹ÂdùŽéjŸRƒ¢ë‹†¸³jÇtu¿O%‚õF ©š³s:ºßgR-þ’ §W=AΜŸ¢(-×G#ºsºÚ§ô€õÚANjæ)R$ë‘cf옮ŽOq¸d¾rd1tét6O!º;ê#½Ø½rê9zØ)2§ùð1ÍÜ1ÕÝ›VÌ?+L}²vNg'¨8Z‚ñ²¡A«Ù9ùÑ3`móÊQ6¾S:Û§\Øý²1êÚºrª¹û³[* .Q;§:;º3”oˆj†ÙމWŸÙ’‘|ld05vN~õ3fCŠ¡¯VæôÎéhŸ2‘|åÔT®rîn)oW¯GE[÷Îéì‚AtI¼4ˆgvN<ûÈŽ.ÿúmé&¹cò«»DH–¿Vu|vNWûp„ñÆž•±râÑ@EÊ0ªÙ1] TÜáÑjLåΉWGcFºêuÂKMbçt3PÑ&šã|‘È4/Û1éÕuv ±¦?F¨½bŠ«}Š4Ä£üµ YôØ9íSšð´±— &'jÇÄ«£1 níõº‘Z“³sº¨L¡Ô»_7¬4létw~JØh¾ ¤S;VL>wÿ³óaöëÁ´tÛÎéj R„Åhÿ›Ê{¦vNG wt[æ E+ÇsÇtµPaÀt*_ZÌvJzõbç˜ÌøŸ™[ïœlîî²³ñxQ ”Xî˜êîÅÎÇŠ ™ˆÓÙ>Eƈ—…±žÐÓÝ*UÅÇAxFôNIïÎ 3Ž`Õò¢Wû”Rt³ûåÿ+TÎO ddñ AO7ß1]íS\Ñdê›FʰkçtµOÑDXô<!n['=c:j¦âÅ@Ò³b’«… ‰ÓyÑ`è´ïœêêiW˜¤÷£b2‚¶sâÑÓ.a™—†‘©ÖÓÕBe ÙQúH”XìœôjYø;Ck¶¯˜zæèv…ic¿qˆ$uÉt5Pá€ã®ÑÛ1]íS¢¡ê£/‘6;§£}Ê‚Îþ?;±£wL‡û±xe`f芩çêÊEuv¿)´¸hî÷ñ‚y¶ÿû·Í%vL¼»ºÕ¼k^DË•;'¿»ò€ÓÖ/“6;§£}Šº½õE"Ù³bª¹ü3"^ 2ÔºvNgü1Ùñ¨KsîœxófW N¥?:RÇÚwLg'¨(¢,_5ÚbdɤwoväÔ¼TdÎT¬œrÎî)²G'ÄvJuõ#&Q¦–ŽîàΉW‡…D"æM@Úé³sò£OÊ­nõj 3n¾cÒ«7;E8«^8ÜmÔVNœ»ÏìjBûU@*¬gçt4PÔúA¥4s§Ä«‡ Y/!%æ;§³óS2)öǽ;§£} šbþ(ð¬]1ÅÙý>„ªL¿jH ‡;§ººÍN1eá/ 2Úsçt±Où™Z-ëU‚ÓÖ¾cò«Ÿ1 Åà¼q¤Ò†;§³~c *‚ôp[9ùÑ@¥Ö­ñÚ¡nÍ%ÓÕ@E2|“`eõމWcLó‘¯ìÚ1ùѳnÐMŸWpSãŽIﶘVù’H‰²“îSD³ùhˆñêØ9ÕÙ‡’öÚ0í¥K&^m1æ9ù&àêFö)9Ð æ+Bsœ³sÒ£‡]#54_ è:K&=»àgÐÕ•ojå;§ºú¦<1]´—…®±ÓÑ>eE>,¤"wL~÷3fZT¼hT—D휮*t´púå@3Kuå$st4¦‚“æŽ.­±ÓÙ ?Ž´æ¼ÐR#wNW •JXvô+ƒj•õÎéj¡¢PŸŒ×Oˆ“^­1 F˼ihgJnœj®*’˜Òñןnø‰†»’OE !m;¦«TTPÖj¯#É“ßÝݪÁÉÇ@XäøÎé膟*°ƒóRQÔÈX1õ\=ìB ˆÉˆÙ9Ýñ“iòU “æºs:Z¨¨£\ÃÞ(TºÒvLW ´¹ðµÃÜi±sÒ»kXt>îÚ’+§:ºãGÂ|Q°’‰Ù1Ýñ3p­ S–úÎéj¢2ŽŠ~Ñh£Iíœüèi'ðhá ¤S¹cº:CEm>ý¦Ñf¾rÊ«K~œPwÇ»5bçtuÉOb:‡/ ’­á;&^=í ^1õÒ “ª¹sò»»ÊÓ£òÑÐ=iºsÒ³ít˜| U{ÇÄ«‘J Ôþ&a⮾s:»äÇ‘Þî/“ÊìÓÕ%?„ÑY¨èžÓÕH%êUñjÐâ”Ü9éÝÍZ¢óÆÁ_9ÅÕ)*·h}-šDï˜êîJ»ª¿2”Å$wN¼z·H…üïYHÝ9]ó}T_%ØFóÓÙ1*ŽPyièìI]9ùÙ=?Mf¾vؘ0wNG+K8§^Z»&vJW#•0„YðU"K´fçt5RCkçã€RÆØ1éÝï˜iYoen?‹ÛÕFÅn9¯•;¦«K~Zà™]—]:ñìx̲´W/ÏÈÒÕB… µzeQ·¥’^=è´ÒxÝ0¦­œôhŸÂ@ÜÝÛm1Dц¬o˜þÛ-?Z8Šâd} ã£"=ÝwJGó€ Û_‚ºcÊ«Ï즴7 ÑdÏŽéö¡>%¢;&½ú³"U¯ A“å½ðêu‚Öý&À z옮.ø¨·ñMBµ¶?Lyõ¤´Ué£!½Scçt5M‡’ô׃LcéÎIÏ~¾TW³7†”rÃT¼š¦¨Âim`NÅΩ¯>;p˜D=:(-¹d:Z¦¤@=Û^(zºFwL~ù®Žô7ƒŒ ±“Þ}cוì7Å}å4GË”0d‹úCq–L}õ]@ØŒÿ˨,®–)HÚc ܳzçt´L‘B‰º½¤;mÉtµL‘BŠ…¾LÄŠ©yõ#¦!©“¯*bâ;§«aŠ€ZÿÛ £Ì–éj™âcè¼tkétvÁÏ`²øbàéêÜ1éѯ˜QÍ|M´S]-S²a ÆëF*µsºš¦0ÿp§t•X:]MS j¤¿hLÐ"wLWÛ hJö«Û'{çtv¿O£³“ޝÚ9%v˜+¾,¤ÕDæ)lˆU¿(tV wLyõÎŽ(Ú‹AuÒfçäG»DUG¿1¸¥Yí˜ôê]@«2_Ô«%WNÁ»ÿÙ©«è«FRZkçÔgSLU­| 0;}ÉtµPaa¤FbZì“_- ©õŠ7‘Ø9éÑÓ®-e/UÁÉ“_-TLá¤êkG§ª÷Ωï^ÚUµêKEg¶úÎéh¢Ä$ëE 6µSò»ëìRBçå Eé¶sÒ»/†nñˆbø¬œŒg¿cvç±Ñž’½cê»—v¡!óØ ·TìœÎ.øI”öÌ£Â'‚;¦£Š%D˜ú&´”Ù1] Tt0ZoˆÌpÛ9éÙB%a>f/ UÏÎÓÕ?Duz<:rªÓwLW • ˆOØk¥QjçtµP‘‚˜³_¬œÛ_OG•h¸ØÌAYŒï˜„W_Ú%4‹þÊ1¬”¥Sß}ig1¯ ^iÞ;§£‰Š=fõ&ÁõÒÕBEUãþ¦ÐQjÜ9]-TŒ¨ÖËÂXµo˜’G•déÔ«'§¹c:;?…(:íMA´u딇ß„3^%,Y>;§«…Š#LT_¼DÃwLW #ÄœöŠ(oÚ¬œæj¡"V¼t¤¨ŒïœŽ*2è‹×7íœS^ýŽðò´×‚ñ±ÓÕBÅ“#õ¦jÛÓnŽ®÷éÄLº¾ Ò(¶cê«…J$†]|,¸F1wNW ¸3ÞD©;¦<úöÀ¡Z‘/NÕÈÓÕBÅ ™šñb”šÙ9]-T"æMÓ•Sñèa7kïÇ‚VˆÎŽéj¡’†ê(¾X^;§«… æ:ýZ!Òe¶s:š¨¤CZÒ_ÜLÕwLg·û ¤Ôõ ÑbãºrÊ«‰Š|\ôÑP9nK§«CTˆò2{©È¤Vï˜Î&*‚ÊLÓà0DwN~µÇ TÒûÕ G«rçt4QQENZ¾*DåÐWLÁ«Ã5a¯‘nQ;¦Ã…JX…½R¸KÅ윎*ª£èKE4Ý—LGíA䔾Rˆ†‘;'=üÒnZò¥"-{ùóä<Úc:ÆÊëÑ@f±vL}õ_»€ù¨>:B“á;§«ŠDiñ²¡2•K'?ÚcŒªù*á“V±c:¼åG‡â/5ÑËÒЮnù™€¹±Þ$"‡f;§>zÚœ3öÆA—èÒá5?&Rú:aÊ,ß9]óˆŠìוԩÓÑDe ùÏ.*ót®˜ôj¢â‰édþ_T\ÒwNW•4¨ÊèKƒ3¬wLW×übfæU#ÇB—L~õ°ŒfÙ+AˆµÏÎI¯ƒ.„VØËcùÇ“ðè¥BU˜ÏÔ\2õÕÿì5ñèð˜–Ü9åݳ­º_&XIêÎéh¢â…òŒ7¥•ÎNIïvmIp©¤oœ‚g •™ìWÒÔÉÓÕB%`:õÊáãìÚ)] T„¶ÖË@çsçtv†J#¥†/ EªÇÎéj ïDôŒrÅ4gÃL0NñéS_}|`ˆ’ÇXåÎéh¡…lz`‰«î˜®*ãHÊ_cŠEûŽéj ¢«òzi µ2VN}uËOaD¢_8!>;¦³ŠÁ²u^*¢JÂvNgEŽ’¯3;'?úÒ®Àéä ÂU'zǤWïìZÚöÊà™á¹r*^½³KDwÛcÁ3³–NGä´ÿ—vVb³cÊ»ïÊ#;ëµ¢Ò*—Ng C—Y½$¢D}Çt5PI¸UñUÚºüiÊ«ŠØVþ¢ ce¹s:;CEOEÀ¢úÎ)Ï>´SÏê—ƒÎvÓ“ßÝ|àî:/ ’ô˜ÓÕB¥aÕùrU-µrŠ«k~bUóʪѹcê«à å^ób Ú¾sÊ«oYþÒ`6;&?{ØÑÜù"ÀtËÜ1]¡âƒ¢V=*è̉•“_-T´¡6U¯6½-Tüf¡¢$CⱑҚºc:š¨( #;^|¤ºvNWg¨˜˜æKBL­lçt4QIƒXE<&ÆR¥WLv5Q±KI«©RßM•ô—Ž)±´ÓÑ@Å íN{LXXVî˜üî(h‰¾D›ÌÒI¯Î S$©úÒÐ5­³rR]àê`zÚk‡´VûŽéêš6<ùÏ(Zöìœòî¶rÍP¾ ”¥yíœüìJ»ª”~éðšòÞ1]ó3¨¬y5pŸŽX1 ¯v7 {4X’>;§«J"\%^:Â%ÆwLWw”dØ+A[+¹sº¨0*R¯iÝ’;§£… íiñXHÉ¡n˜œ¼zØ)¬˜ñZ î’½s:[¨B }*m‘Ù9]óÄz _ÊòÒÓÕ*T°Bø‚ {rǤW¿cĆ|å º­œæh "ƒÈi}0šh*îÍàã`Â#¸sÊ«o!úÚ‘2b³sò³ëÊ#¥çÕ`ѾcºZ¨d¢Û©¯ÎâÊ©Ï*Jš¾.¸i—ÎP̨ð‘ð {Ét¶Pq„¨õË‚š¸÷Îél¡ÈQ‰×†êæ,Ž*Nt×›DmÅT¼zÚ5„)õ:Q,ß9]]óÃD”v½°f4vNW×ü2«_+Z=ºwJW/xý ;ÆgçtuˆŠaÕþ¢1Ãv®œ’gוç_72T Ý1õÕ‰aóÑ~YhíŠØ9åÝÅCM{ÕPz¸îœüè»r‡rÜ_)¼|jvLW·üPÙÁ—t¶ÛÊ)Înù!FŒõJ!b½sê£Aæ`ÒÜ^8¢ÜÔvLW5¤TÙ ‚nÝ9ùÝ‘a,ê¼vxº‰ïœôì|L¯¾!Tš¹cr^=í Y)ùº@¥ôÒé욟3øè«nÛ1]MT ´ ¾nâvLgCWI½”:i;'½d¶¦ëc§F{ådGO´‰ùëw©/™®6*êÈvÉW‰r×Z:¢bð䨫¸šÚÎéh£ò/kSý;٤6*(ú ƒ±Ìcå¤W•H­ûÑàÉ&wN}ttƒQ¦o£5Q;¦Ã‹~X6ú(pñ®Ù9ùÝ"sl´_†dì˜î&*æó*Ña\ÞÙÉå*òg«Hm©Þ9õÕ¯˜‚¢3_7Ú;ÃwNGitùFQÞd*ép~ÜÝË­#1 DÑ„„ÿd埘 GÀS8˜ŸÔWäL½ ¼´š;§³CT á9öZ 1’¶q2^¢"( ¯—Ž(­™ÓÙ!*E*ßJ«ÒvNW •¸iø£ÂÚ²fçt´P¡aº½^3âìÓÙB%`•ª¯âÑ•+§¹Z¨°žáoÖB_:-Tt ªQŠˆäôŽ)¯ö˜‰îˆyí d;wN~õ×NSÌÇ@Šï˜Ž*b`ç¼)ŒkVJÍ«—˜ÉšztD™ˆîœúê'»†kļ mé;¦£Š*Ú‚ö²àÚÛV\ÏNPЦùذ´ôÙ9] "Š6j> hMãÎéêGC_'T…Ò;¦«…ŠÄZõMÃܘºsÒ«?vD9K‰3™•“œ,T>&ë׊, ñÓÕB%ÚI{UȘm-W •ô´Å+Ek¦öÎéê•€š_4»™;¦³k~ ãÊzThÓ£6Nʳ#Tœ}4ŒNwNG D¦ò±ÝK¦«k~FÀŠž—ƒ´d×Îéꚟ"‚eý8h nÿÛéѯv²,c ´U­˜†WÏv O'_&Ì$eétµPq…Z”>&Ø´%SŽÈêÑÇ•Nß1¢"P/›ÇФÎÎI¯^d8S|éÐ0“^9õÕDÅ¡Ö/ÍȘÓÕD%&>þ’OÛ9]óÓ`2^"E¢wLW ÂZøTÅrî”®*¡àLØëBÑÜtåT¼ûôÀÔÕŸŠ~÷½;§>úô ÁŸ×‰*«S^hcÛ‹AKeåÎɯ>+'*òû÷Dí襓ž}hBÏïoïÚ1%¯î=hT…ëkXP—Ng‡¨ 2&ó5Ñ&’³s:š¨ŒbÈñW‰n–åŽÉ¯ö˜ë|é-ÓÙ%?œÈ|,L1{çGg¨dA¼tÞbFꎩïþ؉ë‹B‡6sçtvÉO˜ãoˆl¶ÔÎéè ˆ°ó¥!ËÈØ1éÝWåÃ.{áHNWN~µPQ³¦ Ù¬Þ1õÑeåD”å¼I¸·‹î˜òê=f@MÅŸŠ@½ÕvNW&´JëM ‡–µs::B…‰öVÑp“)]1ÙÕ@%A1¨ñ˜Ü9õÕov‰ìQÝ7 Û9åÙ{LÓ˜|`mvLW •”Šö£@b2wLzwt¥ aªª+'=¨ø g:_89’;¦«Š¨aþÆ ÑÓ½sÊ«o*Ñ|,èˆ wN~ôh7¨áØ«@äl3CÕ»ïÊUgü"4ªlå$W%´Ýõµ£kʸsêÃG»IÙ—©Ú1åÝ_;íˆyeP1 îœüêÑn0œÔ— Åuç¤gøh½ ¸[ùIxvËc¦ûÓWRÓ;§«3TLÑi/TÏÒÓÕ*R2_̬«vL~5ÇL”†Åc@«SgçtuËO:È’~%ð1\9 žì Éd¾J„×Tí˜úê«òÁ$ãµCÅ¢rÇtv„JAYÝo E«ñÓÑ@E iUö"!ºcº¨ÑNæË‚hŒÇÊ©¯*ÖhõæKGËgçtuÉ#]B_$Ür§”WkLÅ(%ß8TÓX;'¿ûô@µÄ ·ž“-¨´î×qµX)ÕÕ>%Tr^+z<,wN}5Æl¤¨Äk‡Ð¬tçt´OÉ@‹F¼jx„Mö)Jø„÷‹†PLbç¤wkLFX<AÖd­œòh "Ds4ÿ“Al§ty€JŽÅ›A¨¸ëÎéê4ØúèÐÎf윎ö)KöËx}Çt¶O)¨§öë†v¦îœâjŸâ†,Ï|SµŠS1’#ùˆ.wLgó‡Uߦ[²vN~÷dÇ`òQQ3½sº:AE‘6Œ—ƒ.³‰“^ò“2f/ÒÙ©;§¾:zPíí¯nÙ;§<;Úe^&|ª¥vH~õ`7¨‹ÇÂtÒtçtv€Š#l:^†Q+'ãÙå­ –½T踅î˜Îæ)„«¤½l˜+»vNWûh‘õÆ #¹s:Ú§¸€á‚N+ÆŽéjŸb “ª|lŒ©­œôjŸâ·Ðy£˜ÑêÓÕ ?„²œoˆ)÷™S^=Ø)†™õ8H‰Tîœüê è5&_Ê,Ë“ÞÝg—lc)®˜„wvÎ~Šd*9ð Ú£Aª}¸sÊ£ßì9æý"%f¹cº¨¸¡;k¾õžºtÒ«G»FË_4Æ{„ §$ytíÁ T²_J²bÇÔWßÙ9R³íEõ2zçtvÅO!ÌÍ^ h¡í;§«;~BÏ~%(³4Û1-TÓ“ú&ꮾrš³TSmþFPîå¹sê£g;¢ŠUHíöÓÕDE¬v{Ù ˜K휮&*QÐ ö£‚^¬Ù9MT,`£Y„2jÉÔ¼z¶S˜ëeÂ$Fcçt5Qá ›ìW…±êÒÓÑDEÕöØHUmß1]¡2ªû÷9ÊÍSwN‡g¨D'û%áʶST´!f¢/ !iÜ)]]òc©äÅ—LW•PFôM€%™±sò³';fÎwYáÜ)éÝјÆêxc¨•SòîG»²¾dKˆïœúèG;b²Ì"UÔÓÙD¥MæãÀË=mçtxÇO¹F½*p«wNwwü¨Kö¢Yêºb ގ馢¯ Qbe;§«;~˜˜ˆé—tI.òì è Ò^*œ;&¿{Ù­ã¯ÖÙºtÒ»ÏÊCñF¡6Ùºrò»‰ 'Ã^&´U4vLgB;f^)Úƒª;§«K~d0±GÅ0Ômçt4Q‘F‡ª?&4ÆÂwLzuñABÓ'Þ ¼•¥+'ãÕñ˜Š–Œ|ED‡;§«‰ŠÃh1†®¤ÍŽél¢(WæKËÂ|çt5Q1A³Æ_&¤¤ƒ;'={“i鑯ž’9+&=;E…˜æS°Ý–N}5È,Œ[äëD´x,Ž&*Ìš—…àkÇtuŽŠ ²Ëê%áÖÊØ9MT Ê~©Ø! Ï ³"õÕ@¬ŒK¦«Š7\ºû 3¹s:[¨4"§ü áÞœÙ9-Tš` ß8¼s¬wJgg¨(²ÄÞ(\Ý{6LëJ$]õ¥c$•¶sººâÇ`cÕ/‰à¸î”òj‹)ðžÑW NXÚÎéêQxÌä Béí½sÒ³û쌔~¡È”–X1 ¯Þa*”ž|tdRÆwNgG¨(¬~ÜÝËÅ@DÑ„Z%þPù'æ…C`G Gž×êñ5dÛKÅhpfçt´O±„ÛÿÑ 3];¦«}J*ÂLýå )¹sºÚ§¨`Tó•Ã{$vL}uÅ£Ô<^ ¢YU;¦³;~i)|hQ“Ù9]ÍS‚h×àëFNÎöy:š§D@]Ó S%Ö;¦«yІÃzH™\>Nu5OéÆÈÔë†M/™Žîø‰D‹N¼&4T’;¦«uŠ)!þzÐf:;&¿:-, Òi/©¥æ;§£q .™þF=¡µbÊ«óS"¡£õJ@qëÜ1]mS¬Àìy MÍfç”GKLCט>:’”Z2]mS´Ár›WSß1]]ñÓJ¦?$»©+§8Z§¤ƒôÿ·©³}‡ÔWO:fT¾N¨gEïœOO1J¾qhgŒí˜Ž¦)$*ój`¥±sººàG¥/]U¡;¦«uJ2ÌæQPžµsò»ßøÚ%"-sét´NqbŠZ/™õ“]žÒŽD½4=,wNWës ‹þJ`mŒÚ9]]ð3βGÓÄzÇtµNQC†&_";'=|µ+Qløp–vÊ£w;‡0J_*Ô§¸SºZ§˜!sF_:T•â;§¼zØÙ•þèÐàtÖ)™`”Åk‡7uzǤwSLñ¬…â0mÅ$¼úÆn@uG…jK,úèY×P©˜Wƒ ŸÓÕ:% Ѫ|E“ÁÓÙÙ)¬z1 „ÕŽéèv¨ã1ÀœåvŸ&¯^ì*œy#Po•¥ÓÕ<%Î~L´DµîœŽæ)4xÙKÁŒIÛŽéìvb49¯âÆ“^}i§è(— ÏY1 þ³àšoéU¬Sßæ’ÁWÑ™S^=ìÆ¾´r¤wNW •€†Ù¼ LIq§t5P‰DYE¿Qh¸˜¯œúj "Ž k{mÐõ¥ÓÑõ>T0Zë¥@詳cÊ»# CŒù˜ð êŽéjŸ’Šª¾xšiïœôì7vV­úªN+_1¯vŽH“z=(×Ì¥ÓÕí>íaø+Cˆ:sç”G÷ T•|,t;&¿;³¯-ôð’Þ}cg1ýr0"&¶bJÞ½ÖiO¼!˜Ù;¦¾zÔ5:%õÃZ'–NWëd«Ûˆ¹zÚÎéh¢ƒ´¬~$˜MÑÓÑ:E)³GBs4¹rŠ«yŠzBâ¦m;¦«u Ñ¥oQ½}˜®Æ)IDTÔ££Geû4ùÕ³Ž(k±—ðV.ŽÖ)žpm ”epVJΫ·:ƒÔW„[혷):"|m0ÑÜ9åÑÐŽ‰’?ÄÔ ©“_=ë®aþŠˆ˜PÛ9mS¦}èP:WNÆ£  maúJPåš³c:»ÙÇÐaÌ×Z‡×Î)¯ÎÄHSâ們Jîœüè;CE_ª"l§t5NñGÄ..Ô•“òêû:¥g½,LÏôŽéîðÑ|#`ÅŒí˜òêY'˜òMÂDÈÚ9ùÝ›]±êÁÕLbÇtwvJM™¿Q”·8WL«BJú•¢Â»tçtv³OCB:Þ8¤ËÒwNyô°s¨Võ#ÑiVÜ1]mSBÑ©3¯ ãêå;'½z±#zÔûUÂ,ÜtãT<ºÚÇÝ%ób@‹Ù1žðiãëBô¸ÛÎéhž¢¸JÎë­¢gçäGKL¸¥¾4Lôtï˜ÎOqD”æ#¡Æ”Ó\]íÃÄ´t½IH›ØÒ©ÏN Óæô›AZµÔŽ)¯Þí ÕSör ,éØ9ùÕÓ.`ÉÐÇ@J”sçt4P1z棠z¤f¥Ô¼Ûb½_'$Š–;¦³»} |¨d휮*éq}•WëÜ1ùÝŒjú¦À êìœôê"»„Iþ#‹Â¸¼±Ͼ³£¥ÍK‡‘ô%ÓÕ>% j¬|Y°¨öÚ9ÞîAËW†“]d—¨¨ö׊ÌÐÞ)íS‘¥ýF1F+[9%¯NÅ,Híe€ZÜ9 T$Ö¦gé,™Î*5)¾28£·NGe@+rþ± S=;§«ÓSišõŠ0õ6[1ÅÙB¥Už¯Z3œÓÙé)ƒ–.íèÕ¥ÓÑí> P(úÊ®SÜ1ùÝ…£Ôz ¨†pétx~ŠrÊ_7hÙ+'çÑÓ.Pâ/áf½dê«§]!#Ò߯'Y;§«TÔ0áýºP"¶c:¨X¢Z_ èå¡;¤«ÓS¦ 2ZoQº=êìjž2…05TTk·îœúhŒÙ(«ò7‰Níãt5Oa [Ã^ J¦kvNWó”&ÂÄòµÁœ6ºs:š§ˆ£¦Û_\|2WLÊ«Ÿ ±|=0 ÎŽ©¯~yÐ`ZÕëBW†ÕÎéêrŸµ…/3;¦«}Š+¦&â¥Àzlfç¤W4z¢øš`„f¯œäj bȱ®—‰Ž¶´S_½Ú5ÌuÞ4j4uvLgç§8º3ÿý‘)½d:š§ô =:_8šÉŠ“^½Ø,4òEbJÍ|㔼:?…Š¿!ºXm;¥£uŠ)J²üõ Zzû0åÑ“ŽI*”‘Ì“ßVšúºQ:ºcÒ£%&aÕ—K¶ÍŠixõZ—ϲ—‰ÎQÑÓÕñ)‘01ñƒ‰LãÎ)΀vèDÇë„ÃcÇt5NB=¬^´¥%wNWãQ8ÅøPI‰SS$0&Ò¯ ^¾Uº:=E£nþÆ¡îRµs:Û¦(Ä:êUµÒ{çäg7”ÓmúM U2kǤW»@¸«?AÄì˜êònæc@J¤tçt´NQƒ°«^8Ä´ÊwLWë”&ÂJýw¡£K'¿úÂ.à#:¯1¹cººÜ‡ åSX¹Û )¯¦)J4ÃíµÂØÕµsº:;EãšöFPmâºsÊ£!¦¡B¤^¨1;¦³Ë}Á,}áP‘4ß9]mSÌYÞ¯-¤ØÊ)xvN˜)ãUÀUÃs§t2Mù™º¨ú‚hš¸ïœ®ÎN1EJ¹¾vPÙ;§«³SC«|™ Û’éêðqdHôkEéhqå伺ÉΑŒæ‹Dk[,Žæ))íÖ7 —ÉSÞ–š¯ ÑR\:ÍSÝþzà**µsº:Dt¹¿¨GfìœôèXÌ{´íÚì Sw;ïi3˜òlîœÎŽOI¸±ôeÁdؾsº:>¥Ñ5>o=IÛ)]-TD!æ“oRL÷ÓÕB%Ö5úÚâZ;§9Z¨È Ã%_5”¤sÇtvz 1L™—§êÎéj¢".O“*•Ø9ùÑ—vw-lÈTm™Î&*µ¬|åð4Q_9õÕDE£Sóºa£m±s:š¨h‚bõ*БÁÚ)] ÒD´ù¼vÐ<‚;'¿Úc:ª{ì©ÔLlç¤Gov„óãîÎVìÊ’3¿JѾiCèï˜y¸éÛ2ø„KEÉV— I©~zKJ ©¶Œm‚‚&„2WžÜÃGž³ÎÊýïˆn¥TD«O¬˜rîNvªœB^˜™”ÓÕ€ 7†sŒj]ýsºÚÝg`#êT ™(Ë“]­&`— ªWµÅÎéjSˆt cD*WL1Gç:›ŽQj8¥wLW*Á’$7T¨pì˜âj±°JºSšÓcét´¹;ZEƒ"Á*µc’Ã5 #S¨"Ü+'Ÿ»·ØD55£YÕbçtµ€Jƒu‚<áiæµSºšO±‚ˆÒ|ðVëÓÕ|J7ÒÌ‹’QÎeºs’»m[ÛG( ž¢½c²³ù…¥ªQ'"»vNuø¯˜æFY`VvÝ1ÅÑ0f»j(ãéš;¦«ù 4‡ µ Âgdç$WØ‚Q3£iTd®œôj>…Á­œT†¬i‹Sݽd×ÍÔ3ñšÓÙ* Õò&¨†ÈŽéh•qD[$ £¹«uÇ$W[”ªÊ†º*.¾r’¹º²Kd±8µ¢SÂfçTG';…¸”“7¢JCvLqµ^X :[)Áf;'»Û¥ÒÔ66›S.Ž™ªM^æÎÞ9]mòÃèJ¡lhÙÔì”®öøñ@•SB¥xét5 ¢ ÖNª@EçŠÉŽæS˜1éC‘°î°Ú)]- bŒ°ö Qpg´ïœâjóÖ@O¤R9”ujédGØá¡Hˆ¨hî˜äê\7˜hjGdr÷ÊI¯VPé‡ F3cÇTwï³ãd§ h¤ÈN)îþ S2lhÍ>¹c:Ûß'!–E9(w®Þ1ͦh£2j¨£Ó+&¹šMQAw–Q4xlÇTWËb6R3†„>ùs:šM‘ª4uC#Úk§t¶zJƒ…%( œ®;§«Ñød ¥ÂsÄbåÄG£)Æ`VOšAME.™ên©0-“¡TdZy휮VOñ†LVS؇EwNw˧”{u¢YsÇ$Wg;EkrS ’mYïBgî1M¤•Æ¡jæ;¦:ZS RN5eŸÞ)ÅÝÐ-w§:Ê@ZŠåŽ©î¶;hîtšÂ¸ª.âêÂΠ)Š03Õ“½dçhnq*GëLÌŽéjsŸjH•E l‚{ådW›ûL`WWvmm§ĘÉìœêî­ÂjÔi]2­ŸÒ`ž*AE¥-ìêÒŽ?ö—¨äÎIŽ sDu6µƒ¹¼vL6w«…[U£Fglçtµ€ Z¬†Æ1å¾SºšNIhL4y¢ºtvJWÓ)<î,š‚9Oí˜Î†S^Nå˜p1Y9é bÔÜ„<à.â³cºNñ‚EÕP4Ò5ÂvNqu]ǘÈTò‚wJÍÎÉîÞd9MaÔÊÒÕpŠ&Ê]‡Â0³|—¹º¬K˜W%M@83vLu4ˆYÈ šFµöäŽ)î–Å,AfiÖNÉ®®é:ZM^éÛ9ͦŒ¡'†ZžËh Ÿ¦ʳƒÒašÍK§º{±ÎJ²¨ÝÕ–;§8Ûì`:M( šÍe;¦«Ñ‹… cª{çt¸tJ&gÓÜÝv9Lž»­}DG‚\¡Ö²Tª£“]8:‚Êá.±sºšL‘AK Ã:9uÇdgo¯ëT6ÊDÉLÔŽI®ÎuŒ‰¡(„ùΩÏ&S¡-C•ë Ù9ÝM¦°K:µ#*K–LqueWhfU †3÷ÎÉ®6mepzM¡:l–Nröþºm C'×èJ©®SFÁ¥N娰0Û1­›’Lwf˜²ÊÎéf2Eº e6”jÑÚ)]M¦èÀZEh";'ùMš?…~†ÑÏ$¡ÿÅÛ÷Ÿ¾|ööù4¸Eé‰82Ô'Wgý¿ß}i*ÿ‡“þ·—/~ù×goú´£O_kp>üø§‘oà?ÿã/?ýîãÍÛ__>ÿ§ß½z÷Ýo}*ÿðã‹—/ŸþùõËßÿÝ7Žÿï?|ûÉ—G¿yûúÕ<úó«ŸŸüüɾøáíOOòiàývÞËÓׯþüóÿýÕ‹Ÿ¿ýÓ‹·Ï_¿|ñî¿§þiì‡go~zöúõ³_öòhôÕ?¾yþî‘ø8üåÈ~÷pzïtþå»'ÚKõ L0[E}÷Ç÷ÃŽ°©/£ïÇÞõðÐ þz°!ÚïùýãaáÀx…|6·è·GmâFïͬ=ñÕq™B9õÑØ÷ß>±¿|÷þŒ« nE90¯à‡‡§¥¿Œ>C*|FâËðÃàà *ÃãñX1´ƒ6úyt.Ì}<::õxGSvôpLƾtüS´ ™¦_o ú¿ï©ú«cú´Ñþêø?m´¿:Óü²ŸG"ß$ýˇ߲‡'á/Ÿ€õqìÍ«^üòîß»ßÚž¿ýõ—çoÞ=QÿêãóùŸž¬ýj¶¨˜¦™6°âyx­þ Þü^ÿ¤«;^ÉŠôŒ¤¨§p|vÚ¿½]9Õß”;lJ”Ê0RþÉi¿XZ1Åß“&Ò„‡Æ¡6Êý™i¿ö^9ý6oJ |½‹zÐü_Ü}[oG–æóö¯ÐôãÛÃi¢žh¢TPañfn‰:xÝãÏ–§Iª+kÒCunÅ€NeÚI²“¾‚¸)”»h3ƒ ë%ÙI_Qœ\Å©YBa²DÉN¤¯d—¢,-]•:IvB]…'"Pö²‘§0‹ê$Ùqu•ìÂÀ”¢š„+Fõ‘ì8úJv”nMˆUÒI®ã®b8¥£4gÀ"ê$×±ôÅ‚†5@ÄÀN&vL} ˜‹¼• {'¹ŽúŠƒ™5-È é$ÙQt—ìÍ[:ÐYö‘ìÈú:1GDÓ“°¬N²u6g@N³æ e&d;¢®²] p`TË€$1¥>²V_49ˆ:U3Lêeû‹Kk27#°Tñì$Ûawa¼L¼™GPÉ¥·±¦d¶@ð`îf;‹3ˆ*k+§ â>’Võ–ì2‹}䩨ú˜Úauvk3!KÕ·{.Q¬d‡e½-c&‘k³¶@±>’Vga\AʸZ X0›t‘í°úº·YŒÓÔ.Á\ȸl‡ÙÙ4o ä„ÙI¶Ë¾Â8p9S+ET’>²]Z_ÙΣܚd¥"w’íRúÚz`¡\-8“µ:ÉvÙ]§ jTÆÚG²‹êk¡€`TržÚ©3y'É.¢·)‹›·p .µè$ÙEgw7é™Aˆaõ‘ëBúÊuAZÜ2«©“\Ým3 q¦ÎÂä:¯îxòÌ–%Jœ}ä:®XªNÄje€ˆ¡ÕI®ó¾FâŠàUâ@­R:ÉuÞW§‚Jbk@IfÙG²sêŠ&!p1®æTâê$;ëo³¸³ZÓ7Uê%ÙYtŨ•DKârâ>²YoÙŽ$*›1 ‡R/ÙκÛ,N…> ž‰Ý;ÉvF}e»€’Dn%‘ÞG¶ëí¹ME³hÉP╽Lí´³**^ÕR 2½››vÚWOsMkZ€ááÑG¶S銦 È2õ– Œid;í)ŠÏzcŠ·BrKí$ÛI_aÜÔœ³¥ƒ'vrÓN¢¯lÇÀžUÛAfIt’íÄúÊvŽÙR!<{™ÛIg77 ´Ô¼E(J' ™B}±$àF^-Fº²$:Iv\½½„ŒÍZ1D0u³ÉÑÛ‚o`²Lƒ'a§>r÷·A…ĵi‚R"ö’ëXz[ŸC6*Lä:îlƒJ@IX´2ÐpÌNÖ1©ú¢‰Á)¥¹@ šô2±£Î6¨  eÓKÕêe7&õÅY ŠH›`b:÷‘ìHú2'Ì i*v3é$Ùõ¶S<Åš9°jb/;ììñ{d’æ ÆhU}äºÞÛtPDó– ¨IØË=;´¾¢“;· ¨ŽnÙa_A< DÔ³ƒjXvrË©+š¢€PQš„¡§v‘뢪³ *BŒÑÜÁ“¸ú˜ØEUôöäY 7'@NV1£Êº¢) 4Ä› ˜Uzv‘ë¢JúZœ2× %˜ÞÇÄ.ª¨·Ç­æ7ƒ¨‡q¹.ª³‡6) Ý[hˆq'©.£¯Tg`ÂžÍ XŒE:IuÙÙ£÷%ÉÚ²v÷Ñ4mNDY½Ìì´»ãÇ9µUz¸ô’ìTúJv â4¿~½¥d×Ù3›ˆÀj¢- PÓ<:IvÒÙ[°LX©U@¢E'ÉN¢¯dÇj͘H;YÅìì‘Msr–5 fÜK®éî&KŠrs†Dd‘N’t÷þ””"o¦PT\ÚG²ëë™Mòô mé Â)ÔI²ãîþ…ŸJ®j®`%,þåíÚ=“«<)vöþ”„Ê¢h) RìñôðaÃ:OÒ×  AL”Zˆ¦ºÀÓÃÇ ë4u¶ Âàæ-H( éáã†Už¤¤¯lÇnn- Ò +áéáã†už¨·‡ÊQS¨U‚&Ö<=xܰNÓm[= ¢è•Nr­ 1^iákÞ œ·v²pÜ!f¼=yw±9«ý°9ùþ‡á ¥…ÏM¸DÀâLušþ|òæâ‡±"kx]»©"±Lõ®Ú=Ëúý¶ -ÙüåøãùùÉñûoÞ}œZ4KØÅ…C¾˜ž_¼ùvóÓÉñÅÉéû±5‹KߦõWs³3qšL› Å$©kJµ#* e>,£”ƒ¹^gÛ1@¯¸¶]µ¾ƒ-Ðláõ»“?¾øáò:—e¡š}娫×Ð…†cÛ¾9}sòaøïùûÓ7›‹O6烸ù3Iše ' †ôþôýÌÊ|ÙFÚBò·g”@YAÒH”1ëÙ‹g䆶@ÉÀ9xª)`®´‹)TŠÔ³—K4ÈÝc@3fÔö£ /®ÑŵÒASŠ—mJt Zb/÷êôë•mz·™¼çÝóÁéóDZpt:ð}rñé9q ¥åÏ/ÎNÿkó|dqûûhòСŽ]£9 ýþüìôãû7Kð?OOÞï¢?ž žñîdøë¹^boŽÏ8>;;þ4]e‰ž¾}{¾jÙ¾j"Í®vi4‹X³Œ TüH‘J÷Fd¡Œ'ˆ ãÏwÇ›%vȆ‡ø?¡CT.Þ Îv”AÄ©–i-€Ê8Vƒ)ß Hüö`0V>~·Ôÿl¤Rý’È·Cj(Àé#3ò˨”–lë¼^Ö™‘:w ¸ÙŽA]Qª¡¦Ù—Luw•b¿•$̼¤5‹f|,‹f^µh+'“<Ȧwi¸•¾;w©B¤Šµ#2(Êé¶ÙÓØÌZŸbéƒûtÝð 8Uu©Q9úµ”@îª %U^/«ÜF,0f²EC(K¡¤XPd"ÏFž.ÆH€åãFB©xæ¹§W`Ä#yF­x¡šHÅçqŠÃû®®úNç¾{k[ío©‡õ÷ú‚5©ªsgʼnÝ)ÒHŒ-¦ˆŽ–¬rsìdAÁ¹fAYfŒô€¡Â€pC¼^¢ÔÇôZÌP§:Û®¢Eµ!@ÐíC€À[‡O•.œ 9j1}bT×´+¾6}‚J¡â+ÛÏ…Ñ/ÎVŸ«æx{xS¿o‚TBÔ«†»@$ ÕUÃ]!‘’·>º¬3#Ë:·Æ4cT™Xe`&¥ÍOÄFk³"zHVðºÃ€’è~+ ¬hDË•bd3ËÝ(A’H\Ë(á…è7ƒ„[=Rp§•…†bNqûŒYÆ@‹,ŠÛH*GcpBaÌÍ‘´‘IuTjä%n-ªLåÚÍŒT]ãÊhÉç=öqe´œ IâۡزΌ,묑¥ÜjDq?#’ÐäZÚP†’jÝÈ4êA¶“iXÄ"¸n‘¹=’™ÇŠ!i¥ä“ÎIMÁ· TÌ%iMPEÁŒâzŠ0åz‰úˆØ9HçJ´¨´– 4%·†T#°ˆ:„#HŒº¢#QM¯é(»bÂ Š„} “Û™P¿ç[鱆ÜJ«Cn"5M?ÀŽ÷{±šDb,ܘٳPôæ€Q9i'`byêM?–G[u–D„Õ¨æÈ³¿e ÈâžP%;åb@˜ÅPn¾µ²e¥[²ƒYU¤oÇ –„Ô„X³¨ºª|yï}Âtû´B(°Íd-G/—•)v–• $¬‘xÛ¸¨ ÊdÆ´„s.å\P {ör. ˜ùxú\t0±’]Yé¶½èy9`Î;à‹,°H݉qyb\^ÿå,š÷b,/Ú¾¹Ðn¾úôr77§¯Öy§•éçÏÞýëoo;Ô—»ëÖÔÅr5fDUå-‹Ö¿<@R)n—÷’Ý%§a»8PzHSöB£Á Ÿhv±º2JñðÑþúÊ(>Ö¸Š0Vâ±{XYÐg+X qz `×b•ÍQ´#†Ju&Ki^R<àA >oæAÓ*½îú¼êseP-ä\¬œ"šÎÈëeYÖY_÷»}‚ñ€˜w ØgƒÄ¹ÛÎ>ÍÓ>©±Ý3ôË.´'x«iøj±‚'Mj-f eV<â×cŠH ³Å-ȱ!‚„û»9ÛÙ¦³ã¶wîn†9©éÃýßœSÕ/v×õ¬1—ô(7T‰3v¥2’å0-°Â\mLª¾70TzéãŒÈ ”i1 e÷¼•Tæå°Yéž2u­v¤…#“ÞÓCn­\B‡><¿8ýpÝscIèÊE'³Dï¸×\ëh¸îéÙóá ó«?ŽÐ­¦VŒØêyúZKožwóº ¢&þÅÍ6&/¯±<Ĥ¿ãšá¹®‡½²²ã=z¬P”7®Aë¢ý•—ïýÕnŸ¬õÜ¡ƒò}mvC¹{·âô¹+Ât“ŽÃDãCèÀˆý†ŒQw×ø ¾Þ¼©Ã yóú-½­[ ™í¦ cÆíÒßNŸ[¥ïnk…y@g½ö7¶‘G´]"Z‰:´bžÐr/:¼’’ò.¼:ÊjL [áuµ!èª~xLÕ|TÒ—¢>'ž÷¡#ðÉèþŒtXÄ=è°¨§Ê–Ÿ3cÞÇYó©èÂÏ™@EîAŠ=•³ Ägt̼…OFG}ÎØArg!y²ÌBŠŸ‘&Û¯1SÜ]ã<¿wÔØ5ð!Ûø}Ä!‡Ýcº¡nO-9êóEK IÙ«òxäyŸÎk²÷ÄÄCd#„Ëøµ‡i_¶¦}Å“¸ü,»èó8}â uŸTÉQO–+9ês&KŽŠû1OÈH|^Fò~ŒäÓÌYv|¾ˆÉ‰Z÷`$Ñè©I4ù¬ŒX­)íôTŽ‘èT𦴝*(ž’vw¥ã¥õXKë†ì鱦ó!³ë8¿w×ùÁÓkÐÂÂzX‡“ð}üžDŸÌïIüiüþJÇ›³óƒ’'?m.yY@®2_p·¾¼9:=;ùþd¸-æúìù3eðñÃïõúðÏ_‡Vs‡\÷ÿ406@ÿÂßÿe8¾8{ùèðè@ÂÍÆ­ÜUZë×õ»XKËØo5•ew¼…öð'€·»ÿØô2 †ø|œwŽóü¸†=6!Q!k„ò£rôûŒ%–¹ò-‘ ’¹Øò–•¹¤Æ ’Hww–¬Ó²{›˜ËVî+¯‰XÙ´«aé$_¬Ý”&æŠÝË_½Ù¼=‚ÆÕÑÇ?nÞüt²ùyGƒŸOÞ¿9ýùèò>»g|±ïøåíud¾áíÇßo†]CÿõÅžCÛ(3=98wéÇ“á¹ìÓw›¡K_o‰WÎNÞìÃO_ýç@Ͼ#¯NÏÞlή®@;ðñ»ôé3Û³…·«þzu|¾Ùmü¯§§?Ž2Õó7 CÀ (áð‡†–x¸±Ù^*‡s}ï¡á\V½!ðãÙÙàGïŽ?m†–¿ÿúç6ÈýpúóHÛ¸Õøãæ š(>ŸÁ]YÓ‘£W¯NÙ]„ùQеuýe(}wvúãßÏ6¨þÍÅÅÉûï/sŽ©¿|OÙBs°ãð‡_v OKè|è«AÎPobŸ–Øe/!"½4ƒ›?ìÅ&Æ×U¨^£Û‹ =p‰½?~õn³ep‹ýtr~2€36ûÔoèßþð§7ÇoŽ/Ž/è²<¬¦üáüéýùóó·?¿æŸïN^o·Ң¸ÝÉ‚sš~,7&óâQ”ëâtæ_¿!–18M—ùjqÅeþqúñìõæ›q3ÏùÁ—œjp¿_nÞ^üûÔ¥×Äl/súábØô묶¦r­êÅñÙ÷›‹Kx”·‹ŒºÌÍ׿»!ÈMùûÿþ ë\ÙÜÊZ “ 1-|8Üãõ§EÎp3ÆÈãw[¿θؼؚÏwÓgÂߟþmqd®?»Ì¸Ýéøõ•”¹3ËËvŒð ÎjÝKòòc£ÿ‰áU+™ŽÍžò§³7oŸÿÇ·ß ûù^?ÿ?§gÿ5»ãˆ¿:ý81Ä«7¯Ÿ¿¯wòãÏ¿:ÿéûÿùËï†lwy`ª3†¨ùôYÀÙæ|tƒÁ©¸¸øðü«¯> »†áôìûá¼áÏ'ã _ýãbØM÷×QîìöÛv ¿®šöÕ¥—ÿÛþ°g÷æþïß^þõÛÆ?!ùú&bÔ¸zâV ÌòÖ!âLü<ØH¬ õMâÛáèbÕÑ­ö $£5I”.Y»’r]’Y®I2Ë_çŽ$ÆuIåº&)ëëï^È®$^•Db±&éyñâÛmÒuI!«’¾Õ?óŸkWÒ:ãŒUk’þüâ;þÎv%åº$[“ôÝ@Ów»V ¸.)˜W%MŸ]I3ãƒsì¸ÁmŽ‘‡9F=¶g˜˜Yìj3'ûûœÄÔÖm1¿Î;ò”.å­ô=—{æzÿß]‰±Þkâ²ÞÿãwWR=Vÿ­J2¡CÚd²*)U×ýä›ßðd¶"‰V…Ðà¶²+$V {žÊî7ìúçí¦z5#-QYlæE½~Û\:˜˜Ïx:ÁÄ}¿­Ðk·2dfa²+D· Í|Ü•!ƒ(²;²CLº-ˆ™Ê'¦˜ ûCAL—\óbcñÁ´„J‹”|#¹+$ïG D‹/hÑkZ‘¯yñ©|1™ùuî¦ä\ZˆÁ«’^䟳v%Ùº$Õ@úõ7_¿øú†¤õ4A¢±&é…½ðº+éwÒ‘­‚¾¾»Á½ÖÓ„ ñzp¿»’ÖWúÔÃ×w%­3nµ*éÛñ»+iq:ÀǪVÜc~’tíµ†Ë÷^ì{Q‡’»ÇåR©XJ;*(K~ “‰ò—ËÖ.ö”e¡n?òÇõÒçùæü<æü["fÑóS¯¬PTUÕ¡„HüÙË%Jè…1 )`å[(+Æ'\ˆÐ¸Ø$¤Å MeM®Ø>ߪ¥-‚E9#–^#&Ê#F€ÙÒ EvÁ x¹…VZ~…ŽÏª.Ÿûy0uäò€[é‚iåf<Ê@Å$oÄ4r¡@Ácaf!p.¤5b„È‹–>•æ&çø«eŒ&Ís¬9L4k"ùòç|}¢ºÑžEñ×ý¦"è©%|¨…°Ò—cÁ·ùɲ–﹜›³;Öc[.9LúpËŽë1刑·Ëò‹±xU޹žJT#û#bé[䪫hî*¿ê*š»Ê·]Å-m”»ýyÕU»mK¿>ÛµA}ljøæ³Õ ¦*2Øá¨E‚J©ÖX¤¼â AS|«¤¤A›%J8¡/n æH¶¼åòꓜpÈ¢ÐËsÏMåP$÷Y^–•Œ˜¥ê„±ÈØ,–‘xMâAÖˆe9ûˆqÅ  áøÕ8d.)DšM=… _Œå%X`N&6‰s,¼ÜáôfçZM}÷ý%ö=UÈìOûÞD ›#_zÕßûœyýÉzæšýuË|ñjƒý–ì>2hZ(Ö®3[ÉPaŠÃ>!®caúåã±QéÉõG·™Ã¿»n½hÕ…¢fÜÔ2d¡å­þZªÚJ'-uÖ2+&Ä[éX˜~ùt¬ÚxÆ6\,bÅ“ji7µL¼½/MæÔ£–‰ÑÊ&-mÔdÔ{FÆÿ…é—OÇ&-cêK¹/Mî­åïh75#¤…j7/ùâ&PÖ&¯|VŠ:¹< `%Øî%j TO¹å"¡àÍëî/5ÿêûa®´ðróÕ¬©FL8gÍëÒ F”´#i×â/owö¯s‚ØåRh×N =¥ig" * '‰ZÓ+˨Trñ*Ö2yVHTæÍ’U3&ªD˳™A8³ú€)03J³ v䩞šˆ5GP)ÛÆf†2Á%@”(Ÿ051óÄÈ©CËX¥9 ‹ËØð-4òf ˜”ÎSÔâti¦€Bâô,Ì=¤šTbNýZ#¨9‚Jn#fâ;iÌekŒÝïí{w÷«·{`sñìã»ÍóÍO›¡›ß¬¿…>üró=¯>^\üæ5Ó›ö?å¿ô×eÓ¤ØÞÜ©ië/38 m‡½Â`©ÅÒÆÅù!ÊXc*“‚…h̨(•̨º… ¨ `pM ’¸F”¡ÔØ|B…ƒFt÷:¿Þô<®ÚBëº%ùëçÏùôçf® “ÿC¶hæ€ÈT“¹:«Š73( ò|Vé9 cM'‘ÃTçªÌ°˜m½°³9‚ Ê³02Ñh‘àÊ”6b˜ÊÛ,ÎBÝFš ’0‹Z$… Îh ²ëˆ–ˆÄȲ2#ævÔè1¢^àŒ&Öæ†£Ø*0ç,náÀf‰< „dìJPN¢´PQ•Ù!œŒcŠPRÄÒ\4Òç£DÍ ¨yâ® ,1r$%"ÃxLŽIËL¶ù!'üíwÚDìh-Ð’f cĈÜ& “L&LL¥¶g£§O !UN YèxLG•Ymó”c×RZ¡h2ÝÛsµ#ç—Ÿ!N­NIiÝÕ‡nº³ÆNØ@T¤lÄH²µß,ʚ‹™Îh¥ˆÑ„Gnƒ‡ Ö&ŒŠjF%iFÝh@÷\mî‡ÛçuŽ‚_þ¿”ïÒ3çShûõÆ›u˜Š—}£äÊá0¡TktCH–hDªŽöÌŠ*XgÌÌä™1™OXãt6ƒ£* F愤ªçQ¢P—͵8%|Œ>R\ÊÍBG¡ˆ•²™QTn£e˜Ù1…ÛèݨtdutÏçî#–œhš³M4UlhµZº‹E¼êfn;ŠfÝ;Á[»&šÉÞÃVÔ¼Ò'æ¢!§ö³“­3|‘Ux;w' Ô¾ÂÀS--&þêaœ¥Û×Ô$z Ì ªXâ“!:VÕ‰i9nõèôFBÖÞ웃ÜK8Öÿáy €Í…8#Ïœ¨=“RnOœpÑ^(ÒcbåÙº°èÌÎp”ÇÂÊC'`á±ÐÌÈœX(³LN¤•ûÙÀ¯;ÍøØrxß7õ4Í”à6ÄÆ)ž9ÿ4"Â=B·q8̪Fšúþ›}U@ë˶ªÝdÅí}ØV¤®m¯·U•"NcïcôÇÑ—L]ß>ZÞILrþ¬S°ÅHÿ ¥Á%t|õ TûJ•`­â8ï¿5ðR’Բؒª}÷ûX|Ð.S§@GYšïäñóI”JÒ½.¶8íâëQz_ZÞ}äËs‡ƒóå¬ç+ß|li È ëÃJév•:àŸ³iý¿ètþûŒBOܾTûÇ¿o ã¿ÿù²¿&tlúå¯Ç) R— ÷ãчÇwGöŸáwx5•ý°á˜ð7• T½Dòe)TejznYPcôëb7ypå+C~¾ÎöÜhÙñ:_Ýzœš»u¼½@I¡²Çe®‰±*©g@||¸&ûA=`’ÙŒ«YÚáGí’*ŒUvï2Ã’¥!ÜUv©;ð nÄÀVŽ>Íd/ù4£ó¹Œ3¥‚u#ê=ééºZ~,Oþn“³_Ž4W;Vœ"ªÛŒÏ²bÕu™€ÎØÜHÄÓlÕuM³BÒp™ƒMdÅ^{M8ÐæŒˆpYUÃÀf°W\"”cÕ£¹tÖFÚɪÖíh[‹Ýµ’Šzb,C³v†¥ ˆS>Ú %Ä[64Uͳ™Ä-½7IÃrœæ zTÊhl$Ìû‰¦ª°»^²ºm\P[“õt®3+îßc¥øü^ëþWnÛfúS|ÐÌ[Û÷dekÊæ 0’Ú«VЍ§$ž˜#7OBgõ¸ÂÙuŸ3üš~‡„Lý®‚ª¥ß j6õ{)`7úÝÉéý"àg`Ä-uðBÉÅ™ýZÀ'e»jô»)ûUÿï?'ÂÞAXuu úAz ÎÚã5 œ /»!„¾ŽAH‰oXhB¥=¨õ6¿£¡ª5¨,Á3>Íèé˜ÂªÌ1ùý]k-]àéÓH¼³d~õjäÆTœÍ7öbä,Æò2 OSDÚÙØ‘•u;U¨î¼™Ô˃J¤ý÷qŸÇ»à¿ý¹Ÿ5}½Škeepassx-2.0.3/share/icons/svg/document-new.svgz000066400000000000000000000075551276304217300217140ustar00rootroot00000000000000‹í\]sÛ8²}žü ]Í˸F¢Ðø†cg+‘ãTª2w§nfvï[Š–([YTIôW~ývƒ¢@R‚<ò*³U[+%6ÐÐF“@rö—ÇÛYç>[®¦ùü¼ ëv²ù(Oç×çÝß»ìÛngU¤óq:ËçÙywžwÿòæÕÙÿôûÙ<[¦E¾<í¼çWYçãlv·*¼¨ÿíCçýã"__gw×ýóNâ…+û<í脱λ»élÜQ ¥=étú}ìbuýªÓéàøæ«Óùê¼{S‹ÓÁ`¾JRê.å·ƒÏé}v™/ÿž] pìƒnh1mZ,î–³$_^Æ£A6Ën³y±ÂêP¯> Õ²«d™­ò»å(óÍF£zÍåxª><$ÂWçÜ€ñç}¬Ñ_=Í‹ô±?_ýXkŠ*íjÊc, 5ÿX­ÓÇÙtþ5:_Zïgu7 *ARê:Á–Y2ÏŠÁÅo›Â>KÆÅ¸ƒ «QºÈýVBßû<½ÍV‹t”­•œÚ×Í ¼`:>ï~JŸ²å—2ÿ07XÌ­ÏÞdÓë›"äï§Ùûüñ¼Ë:¬ƒÂNU#òd–?œwï§«éÕ¬ì.›§˜ì_¥£¯×ËünŽÍ³‡N«1iuJ£E…8íÙò¾l^pº6K÷E•Võ"©~g÷Ù¬Ùvœ „ÆÄ^‡à,~Ûªw•®°Þà÷bÆéýt<¸ÈV_‹|1Xáú»Ê›}çwÅâ®ø’=Ù¼r&¢,ö]m„M€Ì/Ëþd:ËhŒûûÔàÉb~½ìq¼@ûâPRQ袎J]©ngðælPvýæ —Y–.?,Óñù Ckʵ‘ ‡¸BNC¿O3¤D}:Ò“cÆ^{QŽF9-žNÙëÍpòÉd•¡¬>@€ðÜ‹2; í6NÂ#רűt€]:È’Ú&uŠ÷O«÷~§7Ë ½õ;¦":ONT…×kÑïói.ùWÇgrãBiÕùm™ÎWèAoÏ»%gi‘ýÄYÂð#T¯¯4&)}RÆ×¹'Ê­Êx£ sZ%Np+5òÓ¦#:Û´XNb=èõ¡Çz}áç¬ê¤qwRë¡/¬ÀR£jcès‘(ÐÀÝf˜¡"Ôé[I€’‰¨Ûæ^€înÆ"±Ç\n¦EÖ6Öm“Gö¢ðêøˆE_ã E ´Ž›ƒŒ7n3,1ÂZж×I´!HçZ+ÞÓ"áJiËO–Pš–®[ @óàuÛ’*aN++ƒÖj"•/Ü Œs¬½€'Ö2e‰oÔŸkn£ÙtñkZÜ”mªÜsK¡ª§@‹.‚L—£Yæ‹ëÂòé¼+tw[þ¸[>ÂúŽïS})È8ײ|"rvŠAóO-ÛS ÍÉk* «lÓvÙÇ¢%cµítw¯­1¢ŠÍ¦"ω½Þ+Êþè,¹Óÿ‚E;¶Èýäd²µAFŒŒE¶À(¾VmüïíaKq ?ÀÃKÜ&À¥´õ½Ž³Ä¨úŽ'„NœeÆÔ‚5‰¡ˆK|÷}ê¾ 8Öû³v=i ‹Y¥1|Ÿdj‡ F¶½¾Ü‡5™(Æ^ºñQ"Í,‰¦ÀaÜ:~@ÔÖöCÛ^h²£Â¤ª¼Ý®Q*§lÄ(•ÓÏ8F;z‘Q|¾ÿ*bôf0XŠc ˜ƒ—ÚL˜xgBɦ…@œã KR:Ê( “3‚Ü´xyä%¹ãÇ‹¼@3)¹ˆG^ÔŸÜ÷(”c5íy}R&QÃPö²EVk\5¯~øá‡µe«Æ2ò_»Mz2™ŒF“íç—Öz‰#ã‚9èÁ%àÂ÷¹¥tþÿ_>}¼øÂ¿Dys&+èÙ` ÆÞååû·Ì—Nx›® pf8lÃÈ5ÌñIÉ¢û5&ÎH±“‰¢g1Ž"ij\[(¡tp'Q¢i7;–ZÀöê%ÕK5T-m¬VMmHrLm`¯6êˆÚ˜Ä³”Q$8¦.|¯.æP]tCY×…žá¯+£½äˆÚìWÆ}7…*DÂÛƒU°_¢A-ç†'€Hœ±† ÙcøÅœüò$BƒaRa ´À¯<©EÈÀx-6à‰`Ò„„K”²Ê‘³—u´7³‰ÌúºÇ^¢îQ´Ý8D\¸£Øøù‡„;ÐÀd¯•2NØ:‚% ê[ãCÈÄ(²’MvÔ›Ôëâ8KŒ®^Y .áˆç;ÂI{y¨?ÑŒ,tBõælóþŒNÌÆt Ù8æz˜ÎÇùC¿:¸¤ˆoWyuÎÉ8o–/Òëlu“bdm»hÂÑÙM |}7gE>Ëpªé6Ëéx—<¿ú2´«ä*_޳å¦hˆ}„„V«ýÇÐx*ñÄ6‘d6ÿ-ÏoýÛTn%7Ð,$‹Ó"±J;Ã[EOÞK`'•Ø–ï,À–Ü´Ðî–K:ÁœÑ‘sóäyu“?gä#î² …+¢c~ÈÅc[úÔ”f·‹uö@i†V6ŒÆ—ô¯ðlµ,õ‘æÙmV¤ã´H+.«¼  øŒNñ'˜*“³)ž±S.d©ÝS+#2kŸ¤ï:h÷-?^ ‰6RpâÞÐO½×ÏþÆÀ;:U_½¨Ë«­ðöS6)þºœ^Oçƒu7ù¢˜ÞN¿ùEû9+ ä5¨Z¤xU¡¨Ä„×”.å0ètû}`ŠCùõ?pYfˆÍ5VMêÈk.R44¾0m¥ÈÈS¤³µyc‹"®×À¥ÿxù<ÿ%”„ú8õ1KGÅ‚XnŽÅ$ оDÐN¡¸‚ÿD"Hµ,«VÊ^Æ9ý¿‹KIÓ«üÉ ›£ÓIÙßôÝݲù¯…œ BÕ)ž´¾6Õ%¡]ðÏí” >x^ò‘pËe=Lm†6¨Vù›W¯Z‘EåBtÔˆVÚ±J+Ryµ?dðÄð Í˜æ¢ù„¬Q« 1$°ZX×D²q$T&†„E÷¶ÄYÉiC²îíåP4‘x „21¤wb8¼hIÆ‘Œˆ"]È÷ü½k"Åç̹Òûá%¿TM$G’BÅ.‘¦Ë¦G2œG‘ü§‰T2~6h.ƒç†=la¸c¯ %”R¦©‰)9Ù=ç ´©â¶hßÚaOB…™{î´¶6>ÿøm!šø¬ -âóOß&’;Öü+ˆ")‡ŒI‰(’•2¾NÞmñ¤T ¢ €ËV4ALÔ°›Ï‚U£ð‚ðùç¾öû¿­·íw­7;i:`Ö4?”!Z.J4Aäš¡:Ï3ì ŠTì¿ý±ùñ_'Æ/#ŽALx#ÞGþË´}(-‰wÂ6AìËháÑ¢)^o¶_n6_mFŒµèä›[²;-Æ " í{ëšH*ޤMÔ‘¾}÷vø¶…döAÒĆj¨‡²‰´g›PÑ è~›ÎÝAI0àqçNß&Rœq {¶.ƒ_ÝDŠ3®´qQ¤ ú6‘bŒÃk̹Èò8[¤ÅMU“ÒZ¹rž0ÿK‡‹žë|Â_ “Ì‚îÌ[™€á>3¤ŒaeÆ*š;LÒK>GYeµÏJØÀRªg `[PMPCÌbR\•Än|;·þúÖ©+¾9ÉL”¿ŒF&ôiÝL£l‘-Ë‹lá=≇*¶_Ž¢¾ µ6ë—¤L(Rôú.qÊ !0)ÁA ÉKð60gô°‡~d´þùÓÛ÷ê¶ßlŸ„€õ]aÞ³H@È!©˜7†ªòCʶÉK¬ú8â%D|%©&ÊIÑ›IrRôzR°oE¸U²š”ö˜,ÍMݘ„<65|ëÊa`Ê–'ªD™špR:Ê‚Ýð†¶(™º)ó§ ^› “0/¶¤J3PõÀÖ{÷8F'Ö‘†òåÌ€t €ò”“ ´.ñ¬SNLYa˜ô2\s˜\ñÒG,’Y§¹&wuFi&7¢ÌɇÔ" `5‡”58mOîú¨çº’]ƒ3"¬§ø)K˜ï«^Ç.œrîÊõZ÷Vš•ì´d­½@ ¦NÐBî!×ÖâO¬@R{ Ê%e|JS) Ô— µ§5CpëU]BH2ór-E[K#¶µŒ¯Wgpf%jãµ”¥–Ö/Ñø“2>¥}j©¨ÅÚ]_ñ}µTm--{~.• †´´ uR^KEšÞ¥„~RƧ´/#-©…ŸK¿*Á½XË=š™¶fÀ ¦Z»Ëa[àX¢z~UvÍUA:¬Ø`›¨¶ÛpoÑÖ®¹ µ­QØê·•­4\SV¹Ð’ÅW9Z* Š–:$˜Õ˜V'á{ä {ä{ôúzüòú1bÉmëõ»ì‘›ìûïFï°‡ì’/܇ôYb••8ô†1ƒ„d(–À$}P(cRœàìÒ|[¡,Ð%Œ¸Ò•6mqzýϯ=ë@·ãƒçÍ%naqk –K$ÿù–ؾúaà{›±°bŸk¬èzE Ðu÷C²V.„ ×T ¼¥Yc%ÿ{݇-ÝÇ<Ÿgmß±*–ù×l—5JŠV×åå)ÿ©NŒÒÓTòÛ)~Mñש¬dãý—ËôÉwXI÷¹+#ÀüYîÊýÜU§CÙåO8ÅÅ ©ê†"Õ_¤t>ì5¬ÿS¨“°·†Ú˜F,èʧnz;°àØúYU+)jR£èÔÅ zfJ@9ãtÇp´=ë@ô8¦¸–L•1¼”BÙã&a† ЬªÄt»Ä £@†žƒÌoà*q y½&€L”ÒÒnðhï@y£_Mµ3‰8– ÉN¿Åm:îF¹i;‘êG6þ>/;@OÆŽ>º¾G\k«Xýñ‘„êjwˆþl‰ÖU‚™Î§šT@MÊø~©k#Ä¥ªÞ×qiAòýRh Ĥqƒ´šÑ0§Qßä³Ë»YvšÝgøì=Þã­´¬é­‚C¢š£tqêÿㄺðùt¤¶×s)B‰ý/ Úo ¶)X_=úÃ,eßYãÿZõAVî×—ýO¾ç³x¬yÿãb „ýåö,ý·ýã6·¿ê—¥PÞæ]Þ¯ „ü‚üvyúçåéK¾ù-­»þug¿üß,ž³âßVÿ0ÂŽýºa‚QE¾Wü¼œý?ÿåÖÛ4m+ Ã0tÏýyåß¶êwG{{àßUæ×ÙßJ¿½>Þ¿ÿ¶áO¿,Ã6§yqïÌéó<áß&†ÉÖì7ÇüÉé!÷/"¡»|ã4_ ?ÿºÿdku!Jÿú±Ê?eµþùó'ûýO÷ýÐ_?ü&d‘?Ìþñ¤ßýÛ ü Nÿ‚3C‘ð¯Kþ¤òï²!ý¡Ãïºßl?<þó0æýÏÅÐfùüË-ãúË#ócæõçâÓæØUC—Cã§¿uœ‡ûMº@Ãq–÷!ŸôG¼ÝûÚ8is(N×_péâ¶…ò@Hè¯Jûò¯ =²ñöÿÕÉó·“Ëz¶?îôYÆ6>o?ÜþÍÿùÖøÖãç$N›r¶>û]Ÿï?ýë½á_²¼X~lüƒi|¸§~lgyŽ³Ï­èýaÙ_Îàñó¿Õ.Ú6Oo×ÅíŸË½]ÖaüÓê?:ô¹Á~úóðPK~o†3öÇ»ýXýó}ú0ÿþùסᎦÏzþþ…ü €þsqÄ_‡üÄýó¿Iûè/ óÛñß3Ôdh„ü÷ìøW´E`Áð¿ÔùçÿÄÈ6Bÿûfü¥ÁMòW¥¡ðŸÉ;^ÿ»ÌHÞaýßgFòŽêÿšÿš•þÝ`û<úïOZ$&šú? úŸç,IÂÎ’“çðÿ&í¿1ÖPüïˆ5Æ2*ù/ÇúT¾¿QÚßk(ý/Öþ®Âÿúú/[éï,lNÂôÿYôÿf+ýw6˜þ;Ìø×.ö÷˜þï4#‚þgfãuÍçþo¶ß¯Ð÷wÕœßPý,7»ù“ÏÚÅã_ø‡?RëOãóæ¸_n<Üýþ§.^çÏñð/Ea(L ÿÿøùíGâ¡‘ÿùçKüÿ«.‚ÿ-êÂwEE¹UEqG1†þ§Ÿóþ·+þöÜK›Ú¸·–À?þAÍÿùzþ5ýÿõQâϦþ#øíÐ¥¾úÏzS mÉg÷°ú×’ÿ9øpS7»6_`Íu›s`œ‡ï'»ÙjrÒœçZàýa~ùA%¨¿9Dÿ¤7Ìü‰ôd}À­ÇüI¶Ðþ·›>]\æŽàߺ-‹×øw¿ÎCõ˜—ÿœÄKNâÿ15„³¬ã6‘ö,YŽuTVÝÙšeÝ9eÅ{ìoûþÖ…¬£üáðÿ;‡ýŸ‡ï,ûäYQdG`]•Øêž8D¢VqX–-Õ?HÿÍ‹+S‰¿ïͱ Ç~!‘Õ{¥z½î1‘¿O–Ø]TvÉ›rì^úRɾ5G}J|Ø«Þ+Ô„H/{–ëø~ð$$òü‰dUÔehÆþ%dG¼•0îkþï¯Ò¸ÝáH?YÇEê-Èø¡Ç•·&?6:ª >UQäædL œWÏ¡Pd* ‹G.^î7Žh¾fˆù!VÖßp‹µs–5dÿ~(Ó`Â4pr ž» tÑØ£R?Z™!¢š|5‡iŠ;þcW¥I£L|‰ö¢C†*m6¤920=4f’´î $±]2Q È-j>Vg-X¬dÜžŠ–¬¬Ï²S,e×0î“™+»‡537D@e®ÁüÖTÑßàÃèö[6%[!ÖÞ)êëÝ> b¿&quOÑÈ«i0.¨÷S·£õUõNqú"°èkèÕ§Oü:.kÎŒ+A@u65÷Q½VÅ|ËNáõÊ:-5¢~®YG\zÃSWí5vÝ`K+È]ñ×6Y×D˨=vÖ§Æ9ˆá8´ èuý³Y#弰콨<ú­”./*–]Ç8ÚÁ¾WÔöx™É+·®FŠp§7Ë¡H‘øïÚ3`þøBÖ§0 °6Â!Ò®„ ÅN³AL’_2*tȶvÒq˜X¦¬.Ú@Û%(y( ¬Ì™°; «<`ªíõrÜÖ\vàPFC¥’»œ@Ÿo‘|ùYq›ã÷t¿\‘’…âÁdÂÂÅ’5a§þ^S=ý|E‚Tâ)Ù¸h6iÌ ©g¶ ƒm/6±2Ù•¥-Ñ &y‹Ø_'sŒGtŠ”„{ëvÔµçßRDåHO‘ÅLfšáªÖ’ˆ& µ U8Ë5M4ºG„aq£éÄ1P/åSçU_ úxÇð ¼>oÑè\­$\¸ž­%wãòßøóy>ˆY‹ØÙع³çVy"æH©BÚãýáØEœ¢Ê £k#pW#rÊ\ q‚Ë œ¢TŠ(:ŽÒ÷MCù-L ®5üÑШBí¾>6÷c [è#ùW9†!+#Ѱ¯ƒQ:¶ ”µ<i¹Ì½ï¼æ/Íî·³Ùg#9l?^ ; _=ú£ÉÐÒêk’q\×m·]Ë9³i¶B‡S@ÝÍÑ”o~ó>ú‚­WÀ.ÚŠ«ìµÌIi³Oâ©é;§‹Î§-¤~¶T­–oH~½ÄÝ4*i-’—¸_ùÝUÜQKÜŽ«´vÖÆ˜2þlþók%SëW“:o•ß8qªôg7í×–‘¦¤„å¨Jµ”6‚ߪ„¿>“¡@ ¯Cžì?ˆ3Î…_±pÿ]Ž O¹# Å-:â™°º_dãóP4åí)(úfªëDw‚Ï8Ȳö Akç"´Í:Â>ÜU‚XÛ îN=œ²æñªÃÙÚ:íV¨vœIzs*ìò2üfУOÁ$ÙPrÐ.ë  ¢w{z&ÛOðº%¶âìîe³–«;a\n˜üö•ô& Yú”OYíHLyœÙ²åùi‡Ú¬yÍSÎ) ŒÞŸ^˜– LEø=‰IԾ릫i‹ÝÀ0ÅÙ++¤0TÊÃõ.Ax½Î,Ç]w&âY›ÜÙ»ÜB9æÎ@µÁ“6Ñu¡Ô²¬cL¼£SvöÝ`»ö˜½çœåxƒßu6IK‚cÊ‹„¢žŽÔ„S.ñÄô# °NFQ?³Ï'Syì#ÞÛD®ê»ÿâ4S×#LP¿ÂÄnd@9YsEßЄp!„Rå'Õ\VN…)Ÿza¼ñ©E¾Æu-wÄôŽh&t®‹!âeÐSóξqÚ²ôe„qKP Äõ-ø B…‚ìÁ~¯øûÆe»Aß@,Ö©d{ÖŠx —§/æC.ï²´ìagtWI0o Wð]¹ÚüfïœEY¶ ¹ ¾Í'hìJ3Kx$Ë£ Ó¾•rTÄÓd¢ƒ@‚„PZ÷BÚäµ¾Di]Q>‡ý ‹;Q¶FDM*vVØ9çcF ¯´Ù#kŸ€ŽÆ´'wV u ~.ÌŽk²—òÌ7lz¹èMKP;[6ѯÙC¬h;躴Åæg?¿(9•ñì•Òû ÖìûPÓþ1Á`…¡áZ¡.,¯|†^¶ŸhÌàŸ‘7È;T–îæè9_”5V' º‰C줦Hn»ïÔóN¬JC«ùE4æîx„ÛYTµÒÍÐΙ4ŸÔSa ö.ï2i¦0Êû’gôùEÛ`ŒôH©6(G3Aá6C¤Öv_+Lh>…`)®žX蹜7‚½Ö§æzÑ%B_PE}mA5ÆNÕ‰ÙàQöp•¬€T4íP‹•ðLÞ+Ú w&;;ãï0Sè¼Ì~hßþÆ—8Ï ÑE?‹ƒÌE_GvMòñLn,~÷ ÁßfK¢£p‘.͉Öçc€örBÀ4J GƾŸöýúlŽiÝû­sÆ< >;ìXg¤À1 ”u`UŒª)ísÊÖE°‡ÕÓÏ\`÷~ýœto¤ùM$l o¨è¯*”È`ªz‚9Åjë@ò½«Áó’*ÿù¢m ¦„Q¢§ma™äÛX ü,±«¦BDcd<(õÙèhyÿ¸É s‹òî¿í€/.Ûõ1j¶+?›0Æ0B}Á=Né[ÕuR0S]TáúŽå̾™E· P‡ÕÈTêt‘¿åëy»¾¾]AÆÜÄ£K± ¼”`ð<G!Ê( ÊâË*óTDñÄÓî*æ g6ŒÙR¡À=3çimA|=>–üÈ».ãìd\ÚÂñ±>v ÝdÞÄãhxÅ[is˜óö³Ô#?½Ç†h ` \¿Ìv3Õ‰NÞè ¶±*žëäW7 AÇ'Óu/`?ÒqÀ!ÃàˆÆŠ.¥1\¿,Ä&Ê)7=*ŽkćW ‡ÆR2^ôÁ/9®6¦2x¥ÿá9b@¨9Ã߇ЅÆgÎò°þC=ÁÇüD’½‹ ÍŽÒÂÑ´Dv: S«¤¡óé_\<'6†Âó<­,ÑhÏê†Ù78¯¾ŸtÉÂr(‡(âhG‡¼ Ö¤B Zî–!\$¼®‡i Rf'c$ᄹ”ö`4Ýb§÷c”_êìÞ u‡|º#¿º6…V 9Vâ‡aXÖ±h‹*„¬ô´Ghä«*Õ÷ íš)oaJ+m¶D“Ž~¢ôªaI!.¦¸¾Šùç§µŸìq,F`¡ªÈf‘õhw¾1cÙBnöÌEÖèÑà~¼²FÞDw"|Äü#›Žuu¢5]R1‡º¯§¬D,eçR26ûÔFÇ@¬¸íǾDV<0ÎfÑÖZ~¼Ö—±‚áõÅìfW[þyÐs²ß•yÎOrAÅ¿³yÜÝ—$0QÞáö®3•‚èFá6Ñ'G‰ ­ÿ¬Ä ‹Êž¾„ýNpŠÅ9ó°Cµi²S]˜$xösÁŒ©mf6…ü¥ËcæÜîg O¬ýe¥›9¼ré6žºÖü3 N+Ô÷·e{Z8ˆ=|61,—±zk½XÞUkuIðg"•&|Ã`äP ±¤Ø¶EÖ¼Ey=>qÇU߬¾7~ŠQü!÷_É4pj±m&.õñD„ðBô3&룳ÂZ€Žžz‰çý‹Y™XñØ û|Ò/µ¥:ƒåM~«˜·î¢{l-GG¼#agÜ.š¢½ß©°UçËÖ$N..™³$ a$JyÔÁIÔgÛÁrbz0Píñݳ»} =‚êÆÐ^²€¦¨&Íè €-a‚ÛoyGmÑ¡:·žôŽUiãöãÜ=~쥖Ëo|>°oÆ/=dYC^ži2-‚9xè{Ú×ý²³hﮚ"]Nuîçáž16Ò¶n¨tžqÎ[eB;Ü “y)ŒGÐà7¿G´†­y}KÒêÀÞ€®Ô:îišÚúFðlåÏÕõaqõë}û%Y2Pš]‚rÔ™~†Ê]Ûìâl<î;©CŠÅâs»ÜãA®V/çFÏGn8Lt$£Ò9¤î)e“çmcàAí±~=%YàQ¯ òÁœ"—Ê'¥ š¶™6ZKTþ«)«÷”ïú‰½&¹ Ì÷C‰ʨ6i·kîÛpßuÚŠïã;ÑÚÛ'¡¶ïÅ0 {CºD™^-)Q CE³0#)_¾˃q*Ɇ6ï|¦œ!­Kì#2IçWçT„|—âQ=…¨ ñVf,â(i=Øü.Ä¢5yÆ2 :oŽr"Èm^màŒß&x‹„³Þ.ÀzƒM¥ëZ|·k9Œ ªMz?xån×7¨`îò-Š3éí#X¼ŽñõŒ­h$õIY7 ÂÏ\1ú,*í”(F•¹ÔVeWª&x…ƒþì"Ü­ƒ±[?'ƒRµUòÙ˜h.8“îþìó4²&6Lßá0Êî%]Àì%ñ\÷"‘²ÿBßñÃ̲º2wê†|.s W&åìrkyÕJ/Þ@Y¡ §°Á»ßœ§â |€¦\‡·Í8òñ‚3ÔÁ/q-_fe§3ÐÉnèTûËâ2ÓšãÓ@»Ñ wQ4D±å f&s=å‡à—Jò,øh†CC¡•¤×Fr™e)) AÏvKÐŽo™°àãËUí»Uê2ËUB7¡(ñŒ/ÃÄ ,m÷moB#ª—”péª äÞ϶´¡©óL3„^ŽÊM‰m1Ò%Šd¿zAdå3ï² +ßQ1Iw ëšX>âÈœb(jÂeTmlz{dEY+ÙÞIÅ¢ì~ÏPËø Ž"­ý»£Biƒó.ŒÉÒ–Œ(¤k:;loY³ñs–åCÈKcOWogîàùÊ"¤í/ô2P¦²„¡¹ddÀ÷Å<3ƒú²¯E(<v“W-r¯æ÷ =ý‚pêÛ¾w„Iîó ¶›ÒB=æeË›ÈoPTBÁQ™Ý37?·°„<uúL®Î~ÌŠ·›ŸNE°×æ _’>Y·¥É”j¨7êTØÞ«²2Ê]g{Ïé¶}¯lŸPGl›}Z6ˆm,HÀ'<Ü›ˆ|¼g…‡ZRÃto¹\êq×_ÞÛŸæž0A«xèKè÷ãK’òw¨é‰wòñ‰œRX…‘X?¾>Ã>L%ú7|¿ù_¡*Ö{H=óè²î*ο¾u²írSµ•E¥ãÂël˜1órO×0XŽ–(|±òùÖÝújä™ÀSá‚è5m‘)æ‹­ÀÝiMÅKì©y¯teæfÖkÝžÇq«8-}O´ÑÉCmV0ž‚ä<ÅZ; ‡o&¿÷R›Š¾pöò¤bìzŒÃôIî4âo8Ê÷«gŽ,e°×~"v‘Äó#bº€·‚“_HµÞZˆö¶lÔf^ZÖhú—Õ8”GÉ%Û%‘í;¡mC vÚ\á©¥ý362Ü£„X«ì½Ž$ÀQàZÙ‰M^¢Š¸lVÅ üélÚt)Ö(¦›W— Žþûè1Ì쾜†z¥¹á_•yaÙk6ÞÈZ[b«m0‰É+1MIÉÓÙ÷ãùÙb ÇÃ^Qî”P•æa=ÆÊè(þ]‰Ým3âÎŒ/«gÎKä^é¶£l¢qîªQÙ*©(|¬Ë´‚”æGa{»Ì‘õºì-º$¥=‰HúÜÑäí܇Á£C=»î>ÎË jÞ¥¨£w}g½üj¢§ªbŨFȦ´Â¸ gêy†ýÞ+¢²°,¸‡wÉä³¼{¶ÜÈÇ!Ú\½¦¼kÚÇ>}ãíé¥/ódbN\ÇsDaíH´E»D!6î¯#\‰ Ø;ªÜìöÎH#ê÷|lnç.I@¤Ü×|Ê¿6XOÏêÄlå±×«;âà x„B¹ØòL°@çÀ½ý?Ÿ×|àÔëa h°`3]§Ô"^[U keÔ¾ÔÉøÇQwD-£X Û/„T°:úØx)]V>P' ¢ç[ƒ*¥Ø €JÃN„÷¤ISü›»‰Ÿeî¤ÏMHÈ䕸vŒh¥BÏ-¦«mí¨£‡ˆÎÆÞ¼´NMEíÔýÄÕD› ©W2ÝÓ ¾è5O#F745 æz?pê`i8‡œß$6­ñJ‘ÀVº¿†‡L׿|7ãÏi(˜}NN©Ù¼×:ofo´Âzò‚àrù(>ÜûX+)B'ùpw^ì}ºó&ƒÞ¨LY’ô"ê+Ôh…æv¬ÂÁzxs6H]úuë·6U{ÛG~‚)É#¦¨e®}ŸúÊѪž§+ï¿Y"‹Wt´=ßÑâ}Å:B)ÛÐÊÞ,ý!?ƒ‰\G/í7§-ˆbSA(q‹MèRD#\&Ry F’M[öýâ7ƒð€î›ÞZ|5ûöf©)ôÀˆµvÂ8)h¶ `aˆæ>çaèŠ`×ÞØ‰¥Õ]¦‚O‚ý@F ÀNzh–‘*Ÿo#ÜÞOÙ¥ Xâ&ÞÛéRk:«ÆcXÏ ¹Sx ÅÙ_¡’òñrƒ©‘%³Lsõ,˜¾17éRüÙßñ˸¾£)3^ï®&*Öƒ§! Ï7}¦£ÅËÂÝq,dÖ/5Ëݦ /Í~X’î}ðŸþ½+æ\(VéϵR CˆáÜɶ9ü©“èþZ™æÕú V;ååkÞm} ^Ó™Åhè€ü¸§˜Éùy»Y¢ßQÅ0P•!ÍòÊäp—CÓ2$4!²™j‘ 9\j)ÐJàÁ›õkqýÕ °túa«Ÿ&ÕÏ÷¾Ö3z~Í®h:ÖLyx„¿œ(ìi8aù»¯xÎØõ>#9-ÖÚÎî bC¾÷üÊØ©å'.ó6‚ä–*ÌŠ:¸-¹\Ïå[.™ Ñ¢Ò)X”ŠB~@ÈÊZÀ®ˆ·«/šßïhzZÄXA‡;yJ‘e"·fCXÕÈêSûÛ¥v¤o-Ô ­fÔ¾h÷ßï.pà³ȸzY¹ã:Ǭ%ïÃ=“ç§‘Þ–ñ#z‰ñ]#q^ªç¨<ÎFÍíËÞZrऑâže0ËÚ˜³ð<¸åö#½ñßîC4üù0:!l ën"djø<|«ìºéªTUÔ ©d´þx/CmgÍ@Å~w¼°¿çN×ò#~c¯ÏÚrûÀr—¨'E)ÌJ­Øj¸†‡ w´§BÒ¸Ö|dì`— OA¬ŠB@¬aÎå\¾©ŽùZ¤ÛM(GÊ‹ _ðû1«l7G´JÉ&¨}½“ö&CxÄó(ñ„ÏïfYPaìýŽžÉ¤E‡ªï&´ù˜y…C;R"C]šwYƒ&g­H<ÙÝÜ 4Ðò…›{EAK4w²P ÜÊË ¹ÓmîdÎb>¡HÒ‘!ºÈ0äúû¡ 5‰²ÈÐÁMƒîìöHxu•=vY·Ío„ãwŠ™f ¡ï}»°ZXBõ)Õuý–Lµº)Ùhâ.#$±DZŒ†uC~> ñé™qã’2¯ã-(2¶pœÀ+4xóãô\Ó¨Zì%~޳x™7ÁMÕUMäÂâã9RÎúQƒ`Û`aÂÇnîNMÉÃ]™rç¬Ñ«ò¾pT=-p_n¡ßÈ{]ð7]t§ÈœÝ3Šï†ÓðêyøYõ‚ö-åâ©êÞÒ3nsÒYXJrÕàíàngãϱTÂ2òdØÞtbGO?l<r=<òs®üÅñ¿{Œ(mˆô íž;ÊC؃Œv½hÁïÊ¡¸/zÄ5Ûoòk]†E0¤îJ×,¡ŠÛÆ¢/¹#{ûé7•‚„M¸Ã¤Dtâ 5¤÷ç…Ú‘ Ì—‚v.üvoÚ V鑞Y1Ÿ#a ‚±„tÀ¶,Ä¢ŒP‘‚ …¡Ÿ@kxVR Bh¤6 ,`¨½–a_~¹ò›JØLB@ðæ¯’ÓœP̽£ê6d{ùÛöž& Ì2 7a©Í‡FÔ .„kûBô°æÅ@Þ§®´¡ÓGÒY‚*—jE7Ø{LÈu¯í¨˜Õ=Å]8ûed„ÎÖ‰tË\ßý"!Yݬ2‘è¼ÉÉvªÉ×’'œM™ûxÃ¥µ0T/9+ÇçÙ„8eíOç ¶pò"Ó˜$—r2„Ž„[ŸèÆë‰jo ~`cYÂó5‡ó*hoðyLj| ïªR_À×É®¶lXyã¢Ð· '`!œûÁîüõ4<û³4hvqÍŒì”?2‹=>)Dc‘i=Ñâš‹.Íɦtë¦Zù'´ó+ß[%Ð.êÛ$B uUÉ ð°ïGµ vô¶š“ãÁ¢GøÍìò¸¦¹nèM•‘ä½YÐNZ-ÔÛÂ(7˜$À¼é)¬Š!<ÈâxìÕ||£kŸc*xï˃_m'2Q<¥µ\œ!–µôø‚œÃ bí‚æ]).èØËS/yØÊYÒMPvñ€{í¸ÑÃó´Y¸Äµ^ãèk}8GÞ1¨ãàþÔø|3?h" }Ðõ)y—:>íÍ1šÓy$“ãè!°òµ‡ ©<>dM~oºl°D•ÅVwIE°&>†ÁtQÇuGåm(î¢JÓ¥—}ŒóŽpáè&ê®KS.a»JÞC•7žîJjö7Õ'¢q©&ôY8( µ-…•÷”³K«P˜¸æÕ÷£Vó »ÖÖˆÀ¢v¶Ïõe›]cl¯Š27¬ö®6Ô“Öñù ¡&»+Ƴ­&»“ØÅ‹-6B¾4Rmç~9èN½Cx@ªpB$}Ý·é¡^°.*·¥Ü¿~Tú4ý ƒìŽÑôlë–QŽMs#Õ›îÃ*d”)PJ2B»{Ñ=:ÖïKNðþêÆDÃßê|G“âßBÀ9¨(Y!´ú®íY‚ÀWšæ¢ÇVèúÒ¶ŸtÀð‘ŽiàG’B †,­‰‡º½+°\nQ iwýp3hjgí_ÿ¤©´C°¹ê;2gÕd·,¯“òH5}è` ¨§˜*§®Ç¯°pŸðö9m‰¸Ìš*³Áï£úÖ) 'þüø›YƒT”, ùÕçÙi!M<¿5êi3SÍ9l¾‘ȾÊÚFª—Ó²£B!-ÝËéÊÉ-·ajë›ÏšŸ£erU5MBܤ‰¸úÙ-Q²~Ÿƒd;øNT()-î„YþÍ"2ïDz°5 +¤Z0@„1Åå ¹ÒA´• ô¸ õA—u›…ö…š¨5ceEå®ÏmÁu>W!8Þrñóü¼Ëøùbqcl(PïânŽo.ý”!>~ )ÕBUmÔÕôíå=v“hTñ°£¨z Ò_EÊ̱näïJC åõΰþ€BÖ~Ÿ!ý*¢ˆÓ¤¹ëÌ8¤™³rÎñ‡c$œ¨íMƒÅG`ô# ŸÈX*Ût"´¯±6´¬à„êÙRÔP¬—:ƒ|Y£‹ìx̶dsÊÓá…‚žŠÏÔéQ(Ça¤{÷æ•Û¶¿ðÜ%$|¹aH7ÁuÁF h/šE9Ž”´ ^ÞÀõª¯+Ha)HËTOŠÊÕ}ÍO¢Pé \öúœ@$¡ŽàU?"(y–éI+GºxÖ•"v°œ0VÿxHJï…ý ª Æ‹Ôôiº`o`¡ÒÜÞ#'nœÆ Õ6éÅö è…ÂVl UW2Ý…_ ²9ýot99ÀÒ—4¼êT|h’®ûyrè}Î+,þ¯¦RwY:Ý=áVã‹™¿ç8<¿¤+œ?À1áRá&ÀȨg¼e$”T%ªw|ŽäuÛêæ2ÑATÓ+)× qG×P·-±Q)°°!'g™À~’X=4x}"¨O$–ËÏÆð6‹$vz++žêœ[qw})RÝ󓇣óÝtÿð£a÷QÔJ®˜j„hzYu=€éÌ1ZÞ_ùB~XwUßHB[7¸œëíÙœ:ë›=ÂG×£8Z¿~üñõúT8”Ù&CÎ~ô¬0€s4V:ÐÑz;éeÐ¥gH›_)ß —Õ|x6©š½«=k Å×™:¤UWw-tÂæ6"CYÖšD €w¥[ˆázŸ°ë~8J]¤FÍŠOÊ·.™>ˆ8ú^B¸î&àh„RéšÝNú+Ÿšjß͵CVyú·7!Áø¶ìIÏÖô²`5„½'m؉¸Qr%,jÀE kg%¯ËVÏ…íÒk¬K/¾•€^wq¼‘k_ta“ú›îRŽ ˾aælu!Ý” è†ë w &¹à·‰Œª§ È…®Š«œï1ßûãe•Õ#æsÜÓý‚Åi{Šš%’"ñ(ƒ«”¸Á*®h„b·KQQ™s^. LªÓÙàüäÏ'V&Y$\½`i:½Ö†¥fu×¼[·M”yåÙó™ÉË~3”¹A Â:ʳ0NØ8ïÆ‘zƒ… 0íjK½ÇÑ›"-‘Ú>.|¯v²HE³I˜á Ç‚œ€ŠÙEeÞבXh«´‹îT!-7×¹îÍLb¨ÄLÞñ9–ìf¹•­ðzÌËG=¼È»/c‹ Û'7¸ó{¨k  91Ï:9õ}od.§èÑŽS_·  …v>¸edXçä¼vU±Tœuĺ Ðx­sÉÒxãçn!ñA'¸êlr?n£]”êU”`HwÄYŽD¿/AU#í©œoâoÈ<«ç QÒ¡þ ›þ%sôð p¹„›wtû¾–ÝÃ{^>x}ÈoÂв&n´2Ë÷²LØ­'Ê£sŽB+‹êfÒRaS,K¾ÑÈ£º ZŹؽꦪ’Gü¯hHš'¼5|w¢07„ˆ}ä£JæÞl{(ˆ‘⦯gû{ÓŽ{ò@oVHÆN§‚Ä®×ãäfºÆë$=våÏ«‡ #MØÎU;¡ú\ !1</ž¨é×ÝCdÑ›üËR{¬ÂÂÇÚjžj?EWMñKTÿ|«àCl_‹ºyÝ÷SÚ»¤0—Œ³zœ¾¾6?Ñ¥ª„N„6€‰£Ò4¹{Ù¾ñØ$F2kM»î¼FŒë›až-…/ÌžRÀùe•yséssë†$ þ8…ø|“óÆï¾(ôp§ ‰gàœï §wËœ ö¦læ‹_ôÀoqDÓI¿ Xåp~èÆç²í§0äÕÙ¥kùÂ<™*ÔùæÅÀ ±ù|$ÑÛ˜dûã)ìÊxÁ7eøQmá\ .kÅ€Ç~ ÂÜÌL9Ñ›ɿå’Ì]»sm2 -)¿äOw¯7æF+`ìÜ+?y8~Wg°•~YOn@v°™’e’`™ãì<>žªœ¶¸µØýœF)—¿T¬9zr–•¡ÂW„5û4©ì[šÏ›ßŽR©¦ø8A4[ÞØAMTe£,ç6Ú~Æ E 0ßZ<¨Œ`dTÿ@Gwœ«ªdíÛé×!Ìü*ÖÒf†Å(šF9¸ð®ç{{;¯ÓëäÕ­ÇrT¹ȳ²îâóýŒ©]h7¦ ,Ư,‰¦Rš(cµ¹zl–½sPx—ž/¢Õ‘â»sÃS١ΙX@8­ï÷NGŸþ¨ïü©«UEÎÂx嬅‹s´g;&¿´Lqb#ç4X8´“‹*LÓJá{ç_£ÿ%ЛÚ³µ¬~nß:U‡¿†µ!4±ü¯ ëY-|>Ë®~Ï(ú)…¼ë,JAR6øøYk¥êT˜Ôä@cð0Ç¿æ/Ýõç[ìQ³u¤>6pDg›À_ ]ïž gמ#³¢À¼+óì™~È‚bø®­/]6ö'~,€&¬ãþÆNE¨2âé}¯ñ¤íoV"ß*ýõãû)€v–+ýW.(ÈkLÇ/KÒQ€i¿M$ðD°Á—þ.uÏP–OaÂR‰Vj ˆNÞˆ®\# ñ·"‚e)<{¼wEFEÓÍùj3õ|3ÍMnSiBjVÈê"ÖÊt Â;ÂØÜºÞì˜N¢´CÅ&¿ÉJ –5悔«ÆÍÀŸW¿"÷ÍMŸEyn!í;Î ‚Ú*]pÆs‘nø|Ø«u¢Ç>K)F"—M"7ü4X†ã@Í﯋+w…6RÙÓÓ¦Tß ëcfwħû|g¢ ö{2HÌigÏ®&¡? ûã¿üÌCdL÷ÞñüWbv=ëÝ>øÉbÖ˜-Z@ðäª2ñ|EÞF¨¦äÊ›q07Ä€Í蘶ù{Ž_\¸H)¹U>v=2ði.”k>×&ŽPŸ$Àq™yäsd¼¸[܆‰¹ö`Û×B‰}_œ.ªÂÎÀ2xáB#p%TÇÛ¨£' ÅÃÍïêÅïi¼éŽ '±‚2™â‡)Mú“äÌNðJ'óœ+· ôVŽÎgã¹÷½7%1K”‡ƒÁÄŸÔkE3iúOôŠ)K•'ËT\ûÁQæ† 4ÞôzL/nÀþ…ñùø%›9´(ü+Òêõ…ï=ìùØ<Ø0Šg²Rɼ}G´’¯PíáóftÒ§}½Å×ÇÝÏ»Ô>ÏÉx¸¯ãA9f>v÷ó-‚…NpP1°Àé¢W_Ãr;`.} gMÙÿjð†œnâ[» ¹ãMMÂõ=E$¬Å9¨§»¡ôa Ù^úû Å–—âè}Ò?☥¹›g@sÀ‹2–µÁp£—ᬟ«Š¯­‚³›}[eƒ±ã3ñ)ûKÌh5x{³jDÝäÃs‚-¶ËÓ2ÃzãŠÎB톣á\ˆ¿Å£xMæJ æS¿ËÔëßöü»ôp[FàÅl¨8ÌðMö~Á×`‰[ uø/Þ7ŠÂxtìÁl@ŒüçqÕÉÃ=7þˆ²4íÇé|”1rôë¤ÂHÉóµ’hŽ'eÁîÚh¶ÑÌÛò½ÉÒ§e—”•BxŸ'N·!ÝF…3.¯E£">¯²%ñq¹oÅŽñíÒÔcô€=Dbç>Ùx,=ý"YVìYläk“SZG4=‘Içã;Aæ7¸s{=ýº _·x…ßqð,do 1¸û.í‘Ú"Ð f /­fŸ‹6)«Úvi9‰`!¹­Š”â>˼v¶Ìþæ”dË×j$Ï4ùTã˜5 F»a…‚€—î ¸χ`Õ\´£"nA¬€³Ü~ƒUîÇ¿$}mKý)ˆçe41a»]£û9פò°ú0ª}ˆ‹ëB—ÿ¤Äéùh]Û¼—¬8ˬrA + HW¥ñÜt0bL¹µ9Ñ`e> ¯:Ll×ÿ1¼zÝ´˜Ô¬G¦úN„ÆÔU:i”á„ÂA£Á›—“£)Âi0&ÞT"⑇Oƒðòq¼ï¹íø.¢2hËæÙ¦Tä4§·ßij[ûž—¼¼ãø®ºcµ,ÕÆÿIç­æ¬á[¡§À$%9˜h29g0áêûŸg›-v±>ͼc$ÑPÛLç¶åŸ7!±ÒÌ»³óSwÌXõ›A„qȶgr¥u¿lDc’ -{ª"í(¥\óy–{íÆTäE!k<Ÿ5šÆ™ª¦—˜ß Or„Öf[`zN€¸ÔO9¿<|Ug•¼ì ;µù0µPØærb®Ô~iyŠ¥Š!2ǵ,]†‘˜ >(jª:¶úº1QE^ñ¤y§4õ4ò˜B#ƒE#Þˆ Ù7K+8Æû‰ßÎ{WàLñ£2ƒÞö#¬«v~õöÒÛ"äÞ+âTÄ+^º_ r 6S¼ \2Jsm¦íÛÇrÞ]ˆ~$£uÝk³‚Ú‡eÁrñÝóiå¼íÐûÚ<£Ã7m“4Ì¥Ð@bÂvOëR.”cDìnñ[FÜm)nsèPûŸ{¦%PmJNz¦7-<Õ¾ì(§çœ<]k{L4Â[ ìF«`Û¸ÈT * UDıà€òù&p¹hߟ;NZìJgLæ éö2k‚…—…kEgV¸÷™7@Hv(£ayIÿA%VÕ´G|þéÆòw±I”}7BÏÃ…Ó“ãe$¶SÐ9±}‹¢”Ì®ùÕã»GG€*¯Ÿs^Xis˜7~¯îøºÕÃÂbº™vûÆ|”i i†¦8óß7Šaz4èMh>*äJ‡dbHô¨¾ ¤é~É*;â«yZ=9sEU•Ä££º±¡~|©Î9¬¨ÄtJ$êÝa'® ªf{|3шÛ;çRÈÅC½§Ð¥õ/•4¶w90ÿ¨A*"„•xÕ…)ô#]è{*‘<Ï$8¶ û’õÚz˜dàâvÀ¹À1¥neAMµjybï s íHB^åþà=#{E[‘·óÔ' ßÚž8ò†V'ž/ç±ÝY¦W˜è¡ÿ¤õ‹Åm·Ëbô$9‘åOo+‹j’€‹=6½Ã¡ +É §%ü=Öµ(HkõžbÔRx¦¼ö”“[…ž$ 9Á\ÿ$¯ë©ºË5°£w.1PŸ¡Á¹Ñïü@:U>ù«¡ÌhPñ³¢Ô—·­æÔR[I…ãè³Ãcˆ¯;CðSxÕÓÙH2Â×ù+»ždR@!•u½.Ž´? p+ãÛ~‘>/e3Э‰%‹|ˆ‡Dè+åüç'0L •9ç­Ý)«´e²¶¤rÔW‚ÌxˆÛ½dÁ€rÆI_o¶ÞÉâŠféB÷Zã$ö ˜r\†š˜¸»`,äwŽh쓸¡L~mÙÑâi’¬šïgæItðodÆÇV¸SY;(†ö¨H}ÜÆ•nâ"¥Sz‰)ü#Çhj‰\ Å·MÑøc' $›æ¡à¦·ïæCܱ£yÀzA¾<”—õˆ"g  EÆÃ똻Û.L–%gï˜[Z¼uhŒÓM\æØG™†V–Ãɉn®+À£º+Úú ÒM šŸjX€u’ú*’kh/á CG¯-Â8¾R¨‰{bë±ü°MïW,-XàÂÉ (Tje¾ÆçÚU›Õ/ïÌÃlkµýy] ûóÍ9–Ö{£îq(oÖg4üÁ.uO†waý ƒÆ Þy¿_ |EÌôh²b.ÙáÖšE_V÷†¯9¼'U£ð‘ˆîZN“Oz ü˜^®Qò‘›¼¨#™Ù(èù>Êrþ[Æ®riõs/«£-¤Óê[ø~Ĺïh°ï¹µº'¯sê<šÿx­høØVÅó[¨ÁÎ ©UÑáÄÐ’~ŒÜÞËñúEþõ§æÛR;£p áºüJµôl[æZ)Áûâà;0Vo˜=S¶(k;üñ ¡U‘Fi{š½1öJf-œSó!¯*ä3"`ÛnKÖëôÏXçQŠ.æaº‡})b÷¥þÆ{Õ¼ÞöáZ‹˜ö¤y:‰ÍÔÐê3ÖšìUüŠ1AÔt ïŽ*ÏÐÇ¥l·aÅ‘…7Îv¨‡ÞFõ+}Äp¼¥BØŽy:¬»³[5>œ+¹=H†‡7“éÈ$;Áì¬]Òžy@Œóp¹kOᣙÙÇqÄ’ÒÆ\5 Ó{ˆ‰ºUÕòmô‘ô'|õC£É‘%4Ó $ îu¶"TU®Œ5†j˪¹Tÿ—xEç7ßȌӫ¢cŽÑLr…¦ðà"jdž dð•1ÉÁÆ÷kdi§?álI'o­œ<!©3pcû«Û¬7iŽôk̬P¡4-´A3†®ií•ë¡kÚ AÔe·— %\$¾GWMŠÛ=¤Â®û'Sq3ÙåK¤*@ûXNúßΤm­ì—’í™]ÄŽ_‰~B G=RÏv…°O$Œq{f#_í#Å⟦]í{X•N¸ÚŒLW'OóWQcq_¬H†Ó^Þ˜ú\dCùw¨_S0bt+Š»Biˆ4Ñüš‡&‰\›æK p½ÜCºÖAi“<Ûc~K$c˜¸5:¡ Ñ>!ÜpSpd’ô¢¾ùü}·ÎÚ”Œò—ñ~áîy6tiî­¤ªÍ¦˜_suðù>u´ÉÇðÇOu⋊ûŽ,X>Ù£ÊWïFU1tÞ_¤šFNƒðúʰNÂVqé\H;¯ŸT¿–)Ank45fã»n{+Í¿Mt<¹åk*26OÓ¼´%(‰†nÍê*7`ý[ÓÜÂÌÀ¿&¢O+ê™è™oÓÔ@ ÖpH/‰ÊO3Ò6n!Íî ³d³çÝ*¡R)Å#£¸×/<‘•4Y8&ÍFCv­H©~:œ&ù”GABô«7'㬠kþÅK\(O0ÌPúd"ļûƒí€ºY`µU[M¤Á‚¼s-ΧD'…˜eã 4ypYB/6,ÖŒ-³|Å[š„]j×/}_k[ fõ€ç£#cÑer™ ñ@ãšâŠÄ]:ÿúzJ¥Ñ8oë¤÷)WhOk`’Å TùšæÞÈa²¥¯³ºžÆ”?¯dËïp2Å.ÞŒ%¨i ¤ñóúºš>”Ž[h­›7±”h¨¾62B~@cP•iŽÆßƒTó’J"ýdË›ª‘—n'¬ðºø°mIVáû^š,jÒ©y?ÔÅkŒÎœÁe-ºÊ_£@r":CçÅ[$Â…RËO¥l¯×ú¤v©üØí‡aŸV|ô ü¯íE-=r¿®ôÇy8IR~ò|8#Me Ä$é*ßom×Jxîå2£C¬‹äwZ§¹TÜÌÃ_:2ƒn(+¤ÎU¿¦45ïó÷Â!7¡û¡|ž\k8SüîsC&Ü×ö¢¾±l‹BŸßÝw8Éf¯?éÃñMà)ÔoRXÓò£lj¿€_Ì»öƒ€¯ªŸ6¶Å’ëöMõm,,·¶ñ2éö‹Å¾ôO˜9ixl =ÌêÏX+é‡f¤lJÿA ³z匴°7ÆÚ-|~Q5d¼ŠÐSµ™EEƒ@5¹tŽ×z,áŠÅ Á:ðS'1~H½àƤZÉ;ÂIxV¢8îo„¯„ý=B+hKãG¤¿ë7p®×Ãä쥠WD—Ã;„1ßÛ;Œå)Þíö,–¢í<ˆKEàQ‘jq¢s _z¤ühKnMÑ„2àè›4nœ¢ÞQ7ºå³Ÿ·6¨( ½k?ä$ cŒ’Æü.RŽ?¢·œ 4½"í³i9Eiަ?÷®"][³ƒ<é?ßн‘5´dò„ëoAáqêy©á±­#ÀCõøw¬JÚõóÉ |¢Œõ„2ýï쳸tŽæ~xWÜdÞ_Êy8ná ¿ÖÑ}ÊYê£sï¸ èc ¸ìYrŠÿ–u¯É3kЋ¥±y ç Éþ«”Túx¾½»µO‡ÜR¤õ%{ºî¬Fäèt-˜;Ú†`p¨€è@›!Ú_EÂMÕ¸Æo}_Œ^ (#Hëýî-W†}b\ÜAx&˜§í%pâD I†SÔS¼¤Q±Ôç*äÑøE`,5Ÿ­‘jwĬ"5óá_óEV\dö¢¹¤Â&ݰwˆÉ¸,œ–²€bôïï˜/¢m¢šO¶ƒ”î®eÈÔóMÜ&«ýz\t¤TÏ ä?’,É#”¤ùµEÓ!J¤£±Wm«|ÎÞ?Õj¶Bpr‰º>μóaÊI”k£‘íû‡øÑ) f^¡cj5áðÖ&û×gNånÔ‘µÌÓ|}R] >Ò’åðW|Fx8Ê!4¢_aD‰¤þíâA(eëÝ7¸ µ‡Ö¯¹dœ¦Ïä>Ùc’.ÐË™°/ óˈêQªjMJÛŸ©š_y ¡ñˆJ_/ ï6ÿ<壨ž;WÉ*eÝÔŽú>ìWÀ\ÖYýP~öð>sE­±—‰ d[¥Y¢Üs˜ï7#])<ì[Wbç«ç¶'BSÈÚ€©|ŸÊ!Z •˜‹HÁ»n|¿\³¹ìïskmÐÃ~‹qÈzDø™á/ž¬«v’Zaytó¦¼ÌwÎÄ0°FûÏÈŸηR ?ð0Q'†S™"Y”í½lÌæ}ê‘™š±U*˜MZn9ÿ(|Ð9m€¢œ>F€Û!-k€¡åÕ“Œò D„¿(F¿Y®â´'/ôŒ‹bpõMX¹ž¥¸í¤I]Í3SUŽ”žÃ#é?RðnT“ßè¢.}ÍÇ~%̸ÜX¼/²'϶ÑŸ`ú)Ó´±¬ÔáÍÏaC0„‹ŽU}´Û?á¤i˜@>^ÉIòÓgû4ƒ+$½À–yùS BEÅØ$°"AîóûÂÏ®¨’³Å‘y-bЃ’æºßÅžÓ` àioÙÔα߸~J~„ ±ì‡ ïU|xÝÔvb+uqVZ„òï`º õ(,€wLyâʵ§!ìä‡êäÆDßáé4V’F¸¯¹¦­;F3$M{E»~Õ²N/ƒ€ÙüÔç£e\(¬ûö\’Cý‹ à„¦nŒ(Jôð[ ¤ ‚¡wn\fï°p¯ùùâKSÁöj_Ô‚»öyfIê¿ «7Só±ñån'æÏP‡‘…•fÐÛ@iÉ‚e5"áׯ¿„z²•½Užóšñ¢=\_†wQ?*w¶`ôp B;EV¤ÜÕ<¤[Ñ IC#•Å»î"ùI}1ó¾Íï½û›Æ´'Iç ~_‰ZÛU¬ý×ù4¼•´æX‹q[ÀøT´iË={’¬ä¨Rp½¶[ñ3±Û9Y?T$]6"‡‚)Ëùh'\LõEC/ƒ¹’kÙ$åwfGófËáDË ÆÃ,ãP­ªßÔìŠ?~í×frŠ&£’OúçØ3ÖqhínÕñ1ÝeŽÄ}²é¢OíºHñ½#€ÎKF› Òè#6ë'Z«ÙY¤{ÒÃù[«ªÔ«l.hÇˬI˱^3ñK´¢?2RRFôÃ&úÚ_&@s‹lû£©ÃdëùTó!ÖÂ&ŶÕ0žªÚ¿äÔu²ûûÌáO’~PŸ Ø=ÑBÚPegÑÇBŒ"Ãç`Ù¿ÕrJ2¥-$Z¤¿DÞMÒ¯ñÆج¶D#éêãk‹é‰¬¢U0¾Û´5žëƒ=ƒÝÀ…Š%=f‰5×çTHJ„‹)™ºÈF&ež ã$p@<0ÔlöÈÆT]?ÀÐ ³ÃQeÙ±’x(-oæ_gý­»ÝÏ_¡—tÅÒLÄîNâàX’ÌæOÀí=ÖÚßj Ö‹9‘£JüÉ­%—|¼)³Ò‘5ˆÙõµ¾ÈMj©Ž•¸!VŸ‹±ãVš¯Û©5|sw_\4£^>»æ¼m~ÖÈ=ò"¦y¢ò y[[ýðŸJý¶–Ö÷[¨õÈeÇ5BIš¶ Úˆa|ø52ÛR’}¿J%KÓ“$=_Ù+f –Î’µÞð>,d¦­ÄJä›3/šë„ù{ü}ƒâá¤CzI€œï¾çÑgíÀÍÊ3þøLÜHý3…&žöm­Ò=ù&·iÂû +¬ê.ˆðZúD']1ܶ>è#­RÆí­‡'áèÕ–dmÍùË|ÒÄYr+íúš^øx’ÈVåÅ1þpP«‡ž¸”Šw¯) I@ñ·&Ù€§H P®‰_É+šùÄûócÞc ¶ÉôÙj·ê%úÖŒt¨ƒƒoœÀcm‚7üï;ÎÇ¢h¨¦²” º—µ3‹_}±sX?‹z­²ß“%’cfœ?vFÖ‡°%¦ÿäà0ö)+¢¡ÔJ0”>èOî>f1õÃõ{˜O Ú4Ÿ#…ðôÍ!îÏ8?¤ôi¹}çm*Ü2ÁýB€ pÛߺGB–%•Ü›§æÓ|¤ÖC37×?ö¥ô¡ñãâ(¦Êq –öqÞ”Ä6u#›aßk™žº›zBxîÇ4}¥Ƹ¤«ËakL„‰”¶Sù ?ÒsÎCŽNǸñÒi:„[=Œb¶<û”UŽø $=hÈ…On³¤ ¾‘8ûãK#è¸IÖ×[õ‚8ø« •VŠçf†³ª¡¸¿ðò@Ì©¨Ç{¼ÙkÖn¿ÑÂ3ó%ýðHó Èf¿²ðüíå"{oNÒΡÙ7™°þÓ2}}T.Tˆú™ f‚÷#Ì-$ g\Ÿl}„²=þ^ÐQЙVÝ #±¨|Ö^úö/þùÒ»f멱HÒŒI+¯¥!wËéš=6;t>ŠIr-éæ‹Û!`".=þNð£ÐIÿT°r»ö;.Ò…Mœó~ÇY¶Qö>ïZŸø aKŸQMÞ-k{^úUÆX0ì ×[šÒ±³FÔó´ˆA_âf6­’iÔû’õä™äü'›¯'ÂÙÎk¿%¶ô8ξù¸£°Æp,ÂÌÌšß4Ñ;ÙQÑšŠu1¿WîÂWþ;nzüª!‹dAçêŽØkéVB^’ çjZÏKÞ&ÍE`.O0ñ]ÂÕjf§¶Þ–­b07븹ý°Deù~‡G‡Qn ½¦9lóT²êº‚1¡PˆæÛ$i†§)§È• E 4ñòÜ„b¨h «0¥.4¿齌c²~EZ_ߙ̻t3´§½|­;Yd™Òäž8 üjƒ‘à)n*P­kCÃöÿ{^D‡ Ñêô˜_Ú'~RzÜ<·ÂÙqã³ÖÃ;ÝlïÜ–¨W¿5 ;l–á¿SPûé—àuoÈ¡ ª9è¿#U^«·Ú*†ÕiÁâ(ÜbŽœC…cZUi`Vl¼¬E’%>–''Á~ƒøÇÇ2!›zTüþÞÑ*§z0$ø÷¬þN1ºÕÒ´ØÂ¾³DhϽvŽ-=RI1hg-z’+Poˆ‘WÔõÂ9,wÄìÑ÷§Yg “Ì,é?¤ôŽO&eÃÄU€UUø´é¥g_Çä[O^ Gã­XkÎ ˜”‰o+Õ¾ " ùü·[e<’· d•ã«„¬ÉµøîìÎyÓ€@OÉý^5ÂfkDâ´_ŸbULDÈ9ÆÞߺÕ%ÞfZY¦2ók±›{DðÌÚý$YšóûœWFÖåÅÉ1Ió¯÷6g¡üfT,@6±–î€`·7è¬ÀSNÄKC˜o ¬—‘vVâÓƒ¼zæ`Ú‚iÉ·Ïkí’%»^ûòÄ‹QdjÔ_ =@ÕˆÍAë½pð.-¤I'¶t8Bσj# ýù­Dq ^:ìlÒ ÖS*Šá3i›ã¡±o©tÈBÂöBÕa¤5Ö½œ8)Rí[ÓÂ;OܧH|Uj×@Š7a´÷><öH6tv-ë­ƒj¼" בñ×tøX ¸Úð=zÎUÉõ 7¸ÐsÍgsˆÄ"c ¥Í;3¹£(~hþ½QcI/v^®6o2SŠ õš>s{ ç<þ*s…“‹³ªBª‰33z´Mb±9DfÃ^ÎwiñÓ/z4aLJÉsŒ¯2QÆbóXfÞúJac ø39½ Ã>äð{šM—¬¿XÚ5;l[TL»1¦ªuCœ˜ÄXÈßk*L‹Ž8µQù—X8Õp㜛r¼ñÍV£Mêv‚qÎqõŠFÊjIÀì”[´òpÐôSië%>$w÷‡†ð´l@¥aL ÎxšÛüÑCKý‡T>uni•ˆ2ž!Óæx€?8šºÌ'éc¢¬l [ÔR´JGPêˆþÙaiV˜Ç Í—‰y­°7˜ÈU¯Ê®®~ 4E7 qt„TXä3ÐP½[„iÂá¾zA\þ餛pÿ-+J)r~¿¬ê`nBÚ8Bÿn‡~ß HˆÆúî6Qú{âÜQÃ}í€RaÝgžÐ^õJ-D"¦Œja†èî¿…ÉÜ<ŸHF¦@°h9ΠѨKAÆ>ž÷µçtÎbpüÍÛ£¤Ö¤O\H#á<ž©ü“ä~Æ×þ„cüåº0RƒÇŠOtŸ–Zš£EöYض-Ô%+N`­Ln§ ,9³øàOzáÛSvÿ6#±‡ü÷øÛù K¯åÜ'»OÄ&KbˆßêÖ«â5_ßáôjh à¸õéqNþõæ@P¤) 8¶6:Áô„ÓÅcPÌC)áþ¥=Ä"™x³é¼''{¦”;È›ÉÇBô$R3CÏ“%&C[›¸üÜYŒ³ârÖ€ò'0Òï…[8þj8³òžsºéØòÖ‡ÌתùË`æøø4;€ý%j_ö«4,(Ã/—JT[ô‰\ôRòÆÿ¤EúÌ[‡^¥ƒÎÛ=¦&»V¸_õº»ªÁ9„1Ü=0’R7ÖƱ¾½˜³n[©·â ·#¹ð£YÓVYìD¦¸«§Ê“Ùí%Yaó¥SÙŽv¬àz­.ž ^ xâ³4i°ŸµFº1ã?Rº!×lÆÃâþEê…è(Ü}YˆlÆ{(Õ5¶5d1^Z=ÁrL}ç3µ¼_OÀ›¹úÒÈAý²ùM–ƒ=ž"…}{dppŠYîùL$´ê«4§Ÿƒˆ!èW¼©‚§B´v…ÕMc0Ÿ)ùèÓ¬-‚".º ‹’e!é¦fÊðÂÚœ»ð‘óÂõv@m)£²ô^rK@ Cã¿‚ÛÜ1ˆ?iŸµn\o/}=¶o˜Ïh6¤“’ÆpÀÐ3µÐ´Æ„CôãÜùBŽñJJøüæ§µ% U(ÄAÊ¥·ØPPÙN´ù"¿«Ó(ÒfŸø÷rUÏ}f¤iœuõvuœwH̾¯gàˆ°¢9<ˤ"oäôŽí/9|KÖn´H€Èîá5Ï[õN,MÁB† ¿ DÐÅ;ôÖt-ÙƒH<ç£ö0±?´îšÜtNõö8Kä x6xMÌ1öv¦AÎÐFÌBÚáS›X š”ŒD^ràÊCJQÍǾGçÜe '¤^òI G(Õ'ÜÒÃi½w#?óÁ׿Zàüæ_)Öbù´ á‘;^ž9–ËÛ ðO}Ý™Ë'T»¯*¦-™‹šV5mEk°ÙÐL¼Ú…ð·R%ÜQ}/dC|Œ½hy–2áC½ä¾ùåµ¶@î‹Ü¤‰'Ò6<ž²—_ºH(¨²lM;­d’ H¢5åÉ쳚7ÑŒÖ3×ìpôÐÃkhV;kaL†[m@%Oóñ«ˆ¤Ë<>Þ×Jø["òøéâ÷2KšÛVo٦Ļ1Rdžl+Oüð(3ÎÕèÖ˜íѤM`W \.Å¿Aøubþôä"ûÛ úV©³dNg˜B©ÛÓÉ"Dn}Ǹ_·º/ì“Ò9Äjy=© nsk@´ ê¸Iò÷~ÒDÓTÏq‚½vµÎvS£Å‘,ä“RÿªCwd‡ÖKÖ€ÆpXükSÏÐ27ÇŸ%·YLQHU£@…Љ`ÛCͼI€ÈE¦›‡DýKUq@,ç˜ wGTòЈ×7í>ñÚ·†§B2…"0¦èÜ·kU¹Ô9™)“næL‹²¹ðô6!.–Ç.#Äy$Gâ|!H3Ü;Ä¡þ÷þ”>*õ—¬U„î8³ ûºÛRÎâŸY†]0†Q©.·VµrJý2!Ì;Ó#¿³ºïèé§^MìäÕ¬t¼èã©”?•¬©HâÎÈZ]$+–ÚÇ,ðï L¬Ø®Yò‹À®L¥Y%”¸!犘|Õ/©J]’0[Šk¼îaðu-f= ~­!ÄÑ<;®žˆMe*bØÂ#Z`M!‚ù;)’¡…}~-Ñrì8¼8Ç5 ‘u“ëŒÏ"±p²˜F\N ßB»F‰«TŸq@-ÉrAÀ‡zñuk..M­ù…bV6s˜O6Y,¤’y;üƒ(͈ÎÑyü‰ UìÒ˜º& | FÌ”ˆWÏYXÆÒÑâHª/JÌjšû˜N‹Jvl’Ãô‘Ö!玈Ï^». ©V‡ð‚¤C£«±€K… }ë–¹çÙs‡½*¹DD^›Â¯5ÕÇß“’%5†V’oiÝí‰oP™›;Ÿ•¥ýH:dk¿Ÿ TOÏÞ^V§ºÁ¹Hé]íðT|® ÈÔ3“‘ÚÒ~ó·ß4WMN²ôßì’š›ûê´øž|i=Dg5‘Åê­ê%ª£kDð³=1ŠègF­¡ÿdì¿åv+ˆØeâ‚èªI1ç4ýmøÊIdM€üÑ™„¯]T—EI»BFkK'²T‹V0³jÁs>£Y”™Tšƒ°m„û¸¾_tœN)vIþalQ Ð2+tœ‚j/Ÿ{ ‹`‚CJt‡«À"=_¥ë@6RÀmÙÙ¶~˜yOþÖ J5¸ÃôùŒ‚€jú %ø,ƒv6x¿)eÓ@R„/&%â‰åO¯—aҟо5öíu¥úᣌŒnÛê‡t_6òA´vé_£fzõNâÝÔEÇ ³tqûÁžDB iÉÚy­4Î`{")é‹è¾PÈïRKl4³óÃÉß÷R-·º“¨+øgd÷©<¦Á]"àGá+Çép?ÎBðÕg.yÙž¯2¥¡<"Ja=úýM€A?ÈF§ù­°öŽ4HP|Âä ¡-$åqöcò‚ëÐÓ[ÀŒË¡Éì\ãPcp%‚˜ÑÂi[Rç¸ÄÀx«ñòâ¦"e¨V›P”žÐ¤Û ÈrÑÂ5Š!–ì§bм¢ÐcdOáÎ.ðf3ËHñºy˜–DAú=·!Óä¡=NWû¶“"*]Ë/Ü{ÔŸfy$SÍsäïðpŒG­øuÔì©p¦Þ;Äï¾q00E6ÿè_N¦—ÿåû©òŽ%m^7 9F†‡<üŠö|«'åaXZ«&†×@@Ó:¬¶F*­…?ª»STXS Ex€ÔÈ€¼D‡?S÷!™lë!I-‰kQtÌÎL‰x.>ˆ%dàŽÍ[$—zœ·=ògßNVû¸ü+÷7’s_ú5oeÏ ÌËf¤\¢e†Ö+áý:¿ Âo4Œ†ˆao&ìr[.fã"¤¼¯‡Oš"‡(À§ˆß·ûòòÏîçܪ|ˆzœïå^8Þ¿Må~Û$í‘,ý(%ÀÒ&¦Å¶aI¦ßÄ`—ŸåÐvMɺúâ¿ÊW­Õçó\HíÁ8baN½ƒLÁ7ˆž^_ 33&-hÜmþ{öV §rrýŸþ[UÏÎ¥ q“nFœPú#é¼ ð8ŽÁÉFÕdŽÒ)±gJþž¦/1ÿA«—1YìÀÀ¶ÓøœÛ˜"_ {1õÖNdÕ*U†‘R1ír³…™Çî· {=EÌÛŸV£c9¨Kùïþoÿ ¢Ö1 /)•©ØÁ`ut0µ›Æ·Æh·Ó 6£ö´.)iM?‡;6üõç¦À¢,?åÀ•2üãæüqRÚà@âr "Â# ëpÏg¤’®ã–Þ>m^m–…æ’8œøa"7qe7Ÿ*kmºÁßiÅñ³o§µt òÙÞ´µÈë"ÃCRßÑËëÚû„á‰â—£žû©Ú¢Ò!åøEůB*Ör¦iŸ×Õõ2ýb ÓO,ïY÷$0”,¢t.4Úô =Gͯ²nV‹ãÖTJ.$ä'Ÿ-¿J™ÝSŒ­ž»½A¨R?¤ÀhÍåp¯ïóÖHg‚3ôì ›½96ÆX¶|į([P.”ê¦%ÿU°;¹SZxÍ üÕD‰v€'½pp'BÊ>gvíçû¡1~wiNºÞÖªIÁŸ¦É©q©2Z™!ì²ýÁ}êþ•þJü¹»²J¿šhÙ ¹e•?ï@•ùF 6m­W·zo 4ü ©œ$BÅ”yK\ô‘Rþý{/Cj†>À·=é7kin´„Ëe-G©®¹jmÉûpœmì³þ·Î<">Æ:Æa8_O‹ÈçgZXΛ÷ 7 y’#Ë´%ÊÈ``‡v4f<2 Z™âèÃÏkï4IÚéï Œüßœ'»pÌx{Ö.ª=±ÓQfáº]B <¸nÅPæà“¼uà&Kï-¯œzã"f¾MYVZŒ& |㈹¤Ú÷;¦œªëgΦJüÆ ! Šûýrÿék:Q„(ò~ÃË —òÂ@‡]Eæ2Ãd¾xœƒ8f'¸q0Ñ–èÑ@A X p˜§¥ô# Ê„Á:€_éi¹…Œ§kÚEæÛ0‘› ¥Ý~v}÷Ê0µ¬à}«:S1“†ïçªíD4|NÐåWzüYüpUìÇhÔ÷‹SÍŽ¥TæÕ0«(¤xðr7GT„5ì“[¿ß#¸…Y†V$YK]þžüw`c‘'(3†ç &ís ä˜yJwR*ÊÓÑm >Ó¹5ˆê0.;½w¨,ýY\Ü~æ—‡ 17Ù ó|ÀùN72Д9]rAÓL©ê&ü:‘—ºj(§íôަRü!çáaÛª¬¿Š4.ž2+…`âxÊМ`c1—ûQÏý˜Qì0þ» ¾²‘PQ{ýñÊUI+‹p$ŒO!õîBÙOÐ(9]¾N}×9èzŸŸÔ­ Ÿ'“°Øo ^§nú`2nCwÁ¸næß;ª‡óS¤ÝhU…ÅÙÌ¥úð}û;‡±¨ž£ð®¾=*²n06Ô¾`Y½—#Á®ÛpØ*ÊúUÄ>šƒŸáñNØÌ¨W3ï–hÃê½›¶ŸÆÆš3]O£@„°E‡–2G~åë}ÏÆÍkhg«®àjý±ýù?ë {+"æKÿKºgùK:HsgQ¦ÙÉMoäÞ˜ȳZ¯t’~®V`,Mg¾ßòŸûvWÎåÌSŽö ØE–?GzWV—»D„ĹŠC^‡R/̦,PôèSŒd‚ð†'€5KCÎÄ´šg¯üQôíb™—C~-“…7crE\¢ª¨Þiœl'ózÝ+¹×†Ø€S/¯½ÌKãêìBŒöŠ©žmùƽ»§CÙüql½($kŒTdØXW¢ÙR&dñ·Ë6$ Q쬖oÉñÏëõ^Ûëý}þ#3N°IëŸ#==Fo·<%÷2æ[üä— ¯äȇy)ª¯'CvH66Y4¼Á[º¢ÎôeJ—Áבå]¤~__VϘ=,bŪ~e b€n?œòz©ë£—‚Em*wâÑGB ]¬·Çy…§IoM…>\=ðöòrì¼Sš\'§af—o¹(yâú B`úéðÅ9ß•9 Þ¼Ý =BèP㨧‘Áì‡xn9ìÒú$†¦rÔ#÷]˜ô¢'I+ï/¤Éϧ-{øÔcL]±½~½ÆuôôÉÊg‡£Ð “_„‰¡Þ届ÆY@UŒ_?¨EwˆðËáõü¤óVpS ¢ð«ÐS ’€’œ“Ètd"gžþ²¾^»q¡•`þ3çCèx} ÚoS­ÝŠ•q_àv¼ŸR¶È4ôþQ…kkµs.ñ¤Põ½á;+\]ï#³äBA`·º¾„"¯ŒÁ\¬ˆ]\c´å=—Ic–þa¸!vúu îzhr)ö¥*öº5—ØÁ/÷ÇÈâ—Sã¤ì«Én†"XøÛˆrŠ?¤›ÇùDÍ]()dÑÒëö‘,Z¢þ¾…òB¯•¼7¡Æ[¦-k»Š+ùÊ•µ.ÝË_ýRëQaàvbúälxolò´VîUäL›Mú£`fií(U¦mˆÆå‘à)Åb qv3À$šà¹ñÞ˜üIu4™YcÓ´Öa…âKOy4-+§{¥óü\}Ü[áŸä’µåðP'© ›¼Áu~È“‚Å~CuÃæä|¡ ÄC$]éå²Á[sÏô¹É¸_;NÐ×mÌ襲:f°Ç .häÕ7øåÜ—|`ZêÙ.N˜Ñ`s£2å ÊûìQ³]r ¡JÃß+I‘ê§|¹û¬,­³¦4œÜÔjÝe½©ìzuÄ‚åäÖ‚>ºŒM’æÞÜò{ä©7œ:½1Õà]^w1y«­Mß‘²%(.¿¾"Æ?fuBIo)P&n¹îæÛÈ%¢éý¼ GþÍ6“Ük“cŸµÄ6ëI×ò7¹³ÃàÈ…Š–t¾¼6óæS%ÛÔ2V"ª(@5-=¿î‹ÓySóNZú뇋hCZý½r\H×ߏu~9š°õµ)3<~m¼²¦è“Á_TÅ!FôÐ}³x"û ¹‰ â¡‡7Ê…Ê·)SÌ”|"!pæbÈíŠ4NËvZ]㋼œ>ç~rL›W©×ˆms|Ó0íÞOH¬±¤+²1;Â15ýMé>èÌúቖœ§¯ë„ß„ñ…¼V¯‚€ÂÆä7Círü\ûHys£òD£ð|Nd¼“÷{¶sˆ¦Õ¯E0°%òדLVëûSçé}ñgÃ:ï~ ¢þ7~·bÓ)UÏŽ¨[®~Ao‹ÎLßd¯eåSDwÊ“Ž:$¤Û“Såƒ8në¦ï™_ÍÁÃ+ç>ã(þYµÍ÷²Õ¶îC€-›L6W|=h<ʺ[äôT®C×”pŸ7>R­÷ª'qUz'øÃK¹¸Û—óÆSEAì[—êA(«`«½R{†»e—ž„vˆvßëW•“ªÅ+»×*,äV âQá^Ûä¸ÿÖã$T0°#p_~¹|™÷9$aåñ‚²ébý 4ý*ˆvqŸº×»`Õ.©—v)’‡þÚåÒB !I—åðE‹ظëfá,rÍTY ¡Ç¹º`©ˆLÈV¹ËÁcä&£FžGˆœ©›¤9ô­ÁÈë½>.öo>iM¯ E-f(‚¯Z)É¿Õ%UѬ—‹|Ó‘ý‡V§eW¶›O, ³‡xŠ…¦]—…OÓ¾JÄ yP?@G·«‘Pž+w–r)›ê²×]×O ~™Ìc+h“I†–O¼ÒO¯I1ðAdL5sX+Ñ}[bw¦ `ãù`Ó¨áÏÍtã®tô@ÁCgÙ¿2èEòLÏn¤ÐIF‡ßN¦x§ó­ºÆ£G>ý„‡V R,1‡´ M´pX>’‘+¬">@ø‡é_Reõ(FÓý¯°×•7KøâMŠúYèþ†…Ÿû j­qÆŠ<¿ë-¬iÂ90³I¢Óá»úÈ,ˆXmC ä:÷gOÍ÷.š(<,S& ’ž­§`úüªíx2MÈÍ9ܱÃÉä× êöÖ¢û‰w˜?¦_½ü µÈLçPøú*î@n’Æ$/š¬­L±$›Gþ-<-êú¥—\…DjÿjG1_%81ßýˆ*ú¸ú´yÑ•HK­ðžß`D1Sµ=yد—{À–¬ÿÒNÎ´Ž©ýêIÛbG·ÀĆˆnó¼0}˃4]î¨×½ã.Ò†´Ñb÷ºU+"‡›a³¥²ÒäçtNOa!™àý¢Š b7œØ@´pæÄ‡: ,[­?hæ…ÏÑßðŽdš=D\a•Ôy¹ö{Ö—oÐ1æ0?Q 8®{ô]Ü;òc¶1)HOÎô¸JB1é߆K‚y1í=誄ödE8UÄBX×°´á+ùEtøœ‘@›@Û2û'…SLÙ{¢‰::ÎóǽŒŸâðgÊší@¬p–k,@Fç^Ð6.xme\×_%ª¤êç!}[¨\rè!<ºÌà°Â¨ßDés•TÉöÃ×ý¡emRÂF›õ€²¬¬ÎD—°¶îAMyƒñâŠD1¨¿bÌP”£3i,ß¼† |qË›c­÷F®L²T¸I'…nÄ'Ôõâz‚û^VóØ»ã9V4†øµì´¤…NKEòl¡âêD ‡®¾Ð)P¼~Ò33mPX&ô´Ï’ò€–ÒõåXÞêt&ŽºDbwžEªƒD˜d`–çaUÒ•Ô¾ïó±Ä ÿ…™¢MAKßè›v“¯TS6_%g±¿-˜n?ýÃÅ×Õ«…ñbøTÐ4­¸‡|8„Å@¾²×ý»J›J÷ƒM´¨»†:¤µlf'j ÞÐú±^ç&øp`sÔªÙ )ÃlzANSp$(ÝðŠþ·#Pf®GJyg‡QL¾3€7ýVæ×‰”6h)k“Õkœþj¬?Ug‡ç1äÒsí†?"™x,DyOŒõE©;œ{nKÖI|Í>ðuf¡ìi‡ÐÈХ޸=±”–º!3WBæ”öÆ‹DË| TyR>„CõZO¾²Ä5û$‡ª;UÌú÷X ;FKþ®'df‘^Òs¨_% ÂÑ¥Ž“›”F~)ôýÛÿÛƒÒÆ½à9ßä!ôCD4x/Ku¿lñe1i\ÑþTŸZ çê®v2êê•" î?ð5ØOpªu–Ÿ±PsÏþýRÿöËì–Ý'ëMìŠàJÇÈ¿ür%SêæÌ8º]ThβîVñG<þÀÐêã¦íþâä*¢b’ñÉ€]Òm ç.ØÏöŸÊ ‘ÖóÓêl¹Ã‡Íµ¯ˆü’­"K½à` G® ÜQNY¢«RׯàøëGå|DŒCÃdsƒy§¨TºÑeaMkø5Ü#;x?DJ¯Œ¡¹á;ù”œŸl£¯ëöTÞkà~è )Ø%QB5‘ÂÇóêmK.<`O6zo!ÝéR¿„LdxÐôÔ·#ãùà€0’1qw¾H8IüN°±€ì- $A™¡%¨œz´^Â@},IÙ.ÇÉûéêmiˆnDS4œ—B/ΞP2ß1M êVB¬Ï6°DÏpÄ¢ÌxLã¤^ê>2Du#4Á‡~_ž:  tСŒÿ ;迃oGâÁ[šcX¹JÞò&´JÀ¿M–Bx­ý»a¼utQÌqt´º ´ïˆà!¨\ªêT'ÿ›ÈO2¯Â }ê­'(ç$Àk X4ãEH³d¶ û÷Õï¯ótñª£ˆøpµÑ7JG·‡¼²Ž!B2é?é)¾ÊiåTß—`ÀTæ¼Eà€µ§\CXVÈ­IC ^3bZ”–g¬‰4 -qÝÇNµ>R,EÊ]Cåþ7Xü!›( ??9øv•$ZíÓôrÖdŠÄl¶v×øñúµm¨f\ b…ŒQÄ·Ào¦ÌM¶uýõ5 åt"¡MFu%nþç'ãû£€ºBÖ˜Ô3Õê¬X‚\Yùø”ëöJÄzù{&s ù¸h‰ö檘‡{sàìôïÔ_ð5£´ skZÛH„Óo•×ß91?Ô]‹5¦4‹|t;ÄÒìºZì=ªNö÷C¤S€.Ï7ªW”5±?ÂÔ7ªv’÷FûÎ<%‡¿%è~û·~—ƒEEÒC\õZ0ÚÎI.HA•é‚°Uò¯C¦ °ïÏÁåßÈÙ]Ž6“æŒ:=*„MoÎR=4ÿe©'±·Ù¿ïRìÇíÑ L¥……èÖ݆‰ôÊÂÏ2ëIòÀ_'­€ÈcÊ:OÑ*Ü®’ ˜vjÄA*”4¾züóÃ/{¼£FÄEÃqé6“zshtÏÂýž°âÓj¼“m)|€¯Jýf¸ò¬hU;g³òï ikcZ ~âîK×ê ’¶{~olðž¤û1Ÿ\|âÃÖ¢¡ï²–_¯¾=øïžÊâ báDáΞû‹Y_ÝIÚ/¨&¯¿±6Òúìž¡ÒT“4^Ano#=z†bÐŽ1ÿú—tÄíTP£%°¨ß…–Ø/OipÅé5/nj//Jå:AXØÄç*ø lÆ| Ÿ2f 0(3ÿÆBTkÃ×éSé,`t4}Úɳ …ó¾ëã¯Sl¡þ±Ä‚W+Ù~óeûH8\¨ãÏú’b ÅükiÓÓüTd6ÆœÁ5º2\ÃÙà³â•àC 6ñK&=fWQi30=&ãsó÷ûÝfÒøa dH“>™ò¶b¢£a¯8eÜJ-ñ@Ö#Ö¿¼«±”µN%‡>¡Â•º)Ç\é‘݂ʚ(_&ÏæU•‹ ”4/M׫Ë_ÈDÞt¨§8ä!b_Σð/j QŸ­/xý+žô’ü7’•ênFðÖIð:¾¾wj­máú޹øQøèBKqÛÕùdáã·GÊž¿E÷IÅY=»ê¼>íÆ®oÔF˜Ãtaˆ‘6v`zØ!³@ÉjþŒý±úW|Š^ âíÊ“ð¡ü’è›þq¿œ˜Rz(ÈH”³Ã´tw`APí˜ ¤„…ÿ+kX£²ÿ}GÉ4ꢥîÖÑŽžºÔùÚc€WÜ@P™~‹VÞ€ýfŽ˜è«¡æ“í$ÍéÊÊÜÉóv›æ.ðWÚ˜Q³®Æ43Ýý"Bì}â¼ñAK5Õ8ukù~‚çÝ!|ÿB¼(Ý~.C¥ïÖ°¢Ì'ñf:ÍûY<áÉvÇo@¢M—,ß–P“ºrg+—~b­¼bë2#‹I"Õõj’¾%†{2Õ^YúɾRU2i]ò úM?/iiÛãéâÁuàŒÄØ¡Ðpx¿ên3x#nÃ5º*à=|¿¥GŽ^ÔÃÿ)ïÁb6F±LKÀÇy$ó© éÉçÌßÝH¶mškÚÀ~Ûê½Ñè7‰Q;_Ç>ß8À *¶ƒ Êú-^²[71C°¯5A/R3aü!üÍbbàM>ï‘#vÖÚãé·l"ÜÛӜ沠,w™öüåÈG3¿O€ŸÏnhyüû¥Q+–É/€Â·ñmÅÀÂa­xu2‹ˆ6{x "Î{»Pê´ãMuÉ)Lí_ôècÃÓ‰ÂEÿùOº A{Äg)ËíAí ¿øªC- À÷/-^¬Ô2ö‡²LÖp!éZ¹rÒø˜&VJz¦OÙÿfˆïÀ”C>¼=¯G|Þ„Õ  ú’¦¬Rlýuœ;Á¼šéRõäcº>ñoì’ú£‹ðvþÔ¹C&,¶¶êeY&tóBGíYî祈k‡¸fÿNl\S¢÷\RX¼æTÏv¿?å éVÐyº2)ƒÍ$‰ëÃ+xù@w Cç?£EDÐzNÖb‚Ô‰gféÖ·¿þô½ÊH¼`|+YEä!®W¯Ë¾é9#•å,±þD_‚°Y7šå„.¼W¬O×A­Až‚Ž¿Û°kX6MÉ:ù"—þX0f@PÐŒ54þF€£rKó×ÕWöwœJx^2pþüF¤ë¥MBNÔØˆÑäÂ~_ÖÇÉì¨o]dŽê~AŒß5©~–LcàÀª0LA+ Jï¦Ê­5 “§+¡,~ŸÏ‹ìs¾‚×nº.*…<[û$‰Z“Îîküf]l7ÿ}þµ„#\Äùb”j¦þ,:< á~"lÓ:Cô7ë& _ÔqÎßYØ`ñSé%ɦœ ÞÌ„+ÙD"¦Æx´ÐLE§t²Íöùe Œ\FÕ¥zfɾ›„”©çÞ´Š=G Ïž¹ÜÆý‚#¾O4¬„JÂÙž°5õãz&Äyd÷Ø^‹\dÒ•Õ¼¨MÇÃÉã¸l˜<š~5ð7׬߭ÆÚ»õ4ó}T¨,hÀ^ÓþÖô}ñàÕ^ŽçÊ×/¾¢jû%S‡©é;÷..“.vÄÉ9¢á%Þ:¡ãèüÅPeз öUL9Ë÷ZsÞ{îú(aÖ{¸§r9Ûëÿò’ûžu}×_ÈQ Ï!*³r âLàIm;ÓÇnOJ˜“ýû›p˜qYN­omY*ëƒ7¿õðU˜!ùh˜¡¨ïß|”GÂBàµô†£O™æÒ|×L{P}3”‘O9ÈQÏÊ“õ˾¢¹:Oº<4¨û6¨Öä/)z$ÆzH¸Ö’ûá6DÓžU´óAEü{š+OÎ6Äb<¾ŽŒý¯uÆûùB†ìÄ…9Gä4 û^n¢Ú¤yV2g¡Ü0ç‚ °ô·‘Çtˆ<Åèü+©‰šž®†¤ËGôHÚ¡p†ÍšF½/Óâ¦×nåã„21µöEjÙv' ªMV9HiÐ+סyð‡H•ETÙ¿ú¢JQ$3iDÕ”ü6z'nCÿå ÌÁÁ{~•ƒ4ÏD[Üšs€|²4 5xiÊŒû‰ø"oˆ‘á3°ú§m‡6»z®ÌÉJMÃj›€ò«Ãqá#%!­þ“—Öê%€Õ”ž*NÜcë$jz‘쥉7GJŒ2 ^©*Ô¹"Öé¶ëø@œ7_0Ìô‰£·Æç?õ–8é U0}¦²V8»!~fÉÇÛ‚èBûWJQ%˜ößg÷Ù|äßÊúÄTJþÅhnÄES0Lé’îŒåÛoÝM„,ÒRÉ·2 (¡™æÕcñ…²Ò‹É¤û[d¹Š¾X1-HXá­cý…8 Á\‰$éø÷Ø>˜3êer³×ûý5m ÂÉ´ðéâ6Ì|á´íá@t$&Šl×ÇEÆG!¯+gïÎãdæ |àVX€ª›rDÚ°/¦©æËÒeƒS`¹Vo'U:/5Ê2ßoxªºPT–/²¼?YTŒ ³IˆûrN«✌hâDm+Ò’K÷©[”Œ&os.‡¿±GëËPFo’Æun×Þ«¡] –ïFo8Þ_/fŽC¹OÍ[#ÊõfK|éúÂÆóV??/á…# š·W62uÂ힤o!å…W‡ £ûþÙTÑÖë¯oÙe¤‡á@¿òF±G?)À¥©Dâpœdè4†[þü®Ûß®‹Ϋc÷Š ý=·qf¤\ÐCHGˆGôä¶D…SüÝ×J5’—°ÚûᨽÞïÆ70, „,&`—v….V®Pä*ªÜÎô?/óu`…ˆ)oÔL}Š,8é{5úwd¶ö({ôæ]–­%‘ë»Y ÃO¶V„ûÒ˜±H› ^NŒK•rKµ »ÀQn¾_Ïä¿.k FĘ}eaºÂ•}Ü‘.zˆ®ì#RRÑŸ‘ ½‡©õKuƒ.ï< ‘gÎ7÷:ÏŒ¸š cŸCfçä{ŸÅK"2' n°½~’JÁ ¢ZåûwP+˜]5‘­§÷$G.¼à‘´õLW¿EŽ`2PêÕ+<Z”Ûè“©Ò•*Àü›.1~|Šƒ­èe´s§ÖïV'’tBå2ò³mtûø¶¯€=™ƒJ™ì!C‡GùŠu]oÏcýH°ô«ÒFúñ·Vžn¢€å‚þö­Úe9¦5¶ÇBP†ÕWÔÆÑ¦1:¥yD¾%XedNm—ŒÛWâkȇȮÚ·ö!ÎGiÜ(by}ºüœš(Y¯N*Ç'ÎX?˜}ÞF2¢éSú!TCL2Ù77Â(mÂ34§Æ}ÎvÌÖžˆ~`µíë2.&³jKtí¢+צqÕ»ÿÑ'òéÝìb‹iE…м6õšzÃýyÿ9²X÷sÀCyLgâóŽZí5·TœÚê;à9œÝ~<Ã|ZSM®#³Cö:EÑ}gï7SúzhŠ“zø_SÆgæá$ÂÂ¥ÿ=Ø*/իÖfƒ–3º9ZÓ[м«Ë,‘„4b:m5=0,ûýË4ñž˜©U—ˆ SIÀ_blư ™ú—Éi­'Û[øÁ!ÝÓ9'÷ÜÕ/X¶ %"?íb=ÙÆH©£?ùØN1ÌØðv,|·œ´Oº¥ëcœxuœÊu"m“˜\¯Gàÿ‚•£;’Ñ>Ã&"õ9á¨ß ñÒ:S¯Ç~É©ÛÆmù¸¬€l¤™B¶¹ŒcdhÔ¤ýDZ ÍkI2{AØÞ.ÇUŠü-ûù÷ôú «Ãõkºo™ñáœkb-#,”) 3î']ˆñÂJ=8ÞÈJTÒ#îûÞð÷ÚØÞgË2²™›€h‰ëW‹b3"D8´ÂÐ_-'Øç1dɤ½´$³K<ê?üNX¼¯/¶€Åù÷ãRÓ—9Q½oßçÆŸë%ü•¶S`”*”¬‡¿1†œÝ¡,ná14[­$”¶‘Áº¢Ay0-q(üC;Úê/ý›Ëü¡M­4¬ø!C0<Ï÷Kùµh±âlÁ¸^Á“Šˆµ®_Ô™™” Ñ}`/ú6Ü[¯SCáI‚å#6ï³Õ]u2 ?©œT^ ÖͨS¨ÐëÉ›~†-B:'â“Zi»²3‰ÝœýèéÐßj(:ea mrJý)S‚\Pœ@Y[$y y˜ã"q§‚Ä›-M¨ÙÔH©nÉÁÃõlÂ"ªŒ }2RÊÌÑu¾'š:Stè$´Zzýµ¯O;(¢x¢ëÅ›¼:CŽ¥¦© •6M`d*Ö \’Ôú«»˜åÄvß™/ûM…L®?isxYùò5G{ß9 ýè¸Å±ëý×꬘y8Nhtç3ÑÆ¿ãI¬ \шq´Ïßö8ú/n‰m úz€Ç´µ\ìÏYä…¼t¦ææƒœþÄŠ¤&[UŠŸ-޹å!)ƒC“‹m«ÔBJèGðDÁ b€PÈÞ²`+F/j“à'î­‡¤ÇÎÇ3[ú% *Ÿ›8:sv²!¯›K]´3$¶â"6)…¿ƒ¬©wc;p›Ÿ[.%,õé…&9äŒ!16'’¤ »®Ï¥ËF'ŒÄðBcW$,.UãüU÷êû¶U><Ë3-ððžè7Yƒ‹GY842ÖùLŠik[ÈEqR€c8œï“gë½K%¤÷ Ëå*É,:þ–\ü¯»­f,—Î:dر,÷'ao|Qˆ(e0|·ÝµôIò(Õ6uxx|ÛRú‘s¥^uûð†â¨#Î-ÿª#4x’ÍZÕÉ”¯añàC„’Xxn{RItE?ÑÀKÊ‘÷'YJ¹¿Òíð’ÞëïFFß¿õÁ¢;·ésËÆšÍöc¢;ë’²ÉL˦%ÝÍ,´(Í";‘Œ1—÷”ïhæÈýËÒa^ø­—9¿¼ ’x“–o‹ØVB—UÌ–&G5Á÷e,L­ë™QýMü›QXÃSÿEd,ä“_E—gÔæ8Õ¨¯ ,ëù*hàürW,¥gjðï…`šÂ“<ªè=rع£±QøÞ“à_ö÷ámÄ.B£ÎóUÜ=Œ4„ï8¿Ï’FKNÍ8Ö¼z㯬poxRÞ »O\ÉEÕ¤9"釚Wçç‹‹=´ûùdWà²+w8{ÈLõ¥dª§_§«Ìá¹܈£}ö¤·H¦®BÜR¤çø·åñôÈ1þƒbÎö¶ðÔ¾û(%ö ÛœÀ£•vÖîÿF© ­à]€&›e4R“øƒ]¥€ö˜†ñMDVÎblùn³í2_ëËkæI)dF*c™9/†lÞ°t_¢ o¦>Äç¤[3éx¬pŠmƒã$ÂÐ ÐÔÔNÝ—Ú ÚˆlÓiÝfô°^p}W¦Í |Òl”|é"KOÙAò¦±5Æayd‘QÔ˜{x„…JR¬Ûp<\?Ç꬈Ó>Tw†-3UßÕ­©Ò¤Ÿú¾³ª ˆþ›È½øÇ9yö£…@ÏÁâ±N­aNnÂ~bb%…Ë$8P*ébU$8¼•<ú"þp¤´Çû*-Âþ ÁGkã®v_Èl.I—&„5ä>Y»d‚«ðH÷¸m.¶NPZRÁ¬²Õ7òèÁC(Í@!Z š´"û«qAgòQnÎVÒžl¸`$©ËÙÀDNóØ {Ä›c«Þ…$ G?¨ánù¢wj´ù¢»ÿ–×õ7ÄÉíËyç~È„«'&”6+}2é·ìyîGõÑ7$sòO1ÝÃ5ž$[Ò›ÇÓNÓŽ)gëäu%õ«ÙŸ£3SJŽ×”5—¹mb!7C mÃÅ£}_FW„é“Fzìᮆ5zë_܈9TËŠÒiäXÓßúáb© £#û^r>=äq=íð,÷W·ôø³¬ítIÑçÅÐÅþEm®uNÏñÉïÙw9gˌ߄”_ÔÀv<' 䱩Ü߬ì%éw<Éë@÷kb±å`>ž©ŽzpÚZàUÅ0_°KL/l˜Ç ÃOPîð=^ðe~_~dÌhÆ8.à}¢´ó„‹ pýéžòRŒVðWæÀ ïŠ!^Ž‹ß_¢›—­¨U^áx¹¾¶ùH„8ÜF &Ô䨗JvŸe‰Ïáïëý™xÐx ¶Ì²GNñ7IŽBº ÕÅ,i?‚áÚñÉ žÜm8A¸­z$OÒÆ+*[?N¤`€ÉßeY¢;J2`ÅEFU²`cßpŠßòüäY8GX5¦É"$¢XÛF1$ƒËD® ìHçð–q²ˆ¶Þ—'òÀUÕ×ÅI û+Rt~ÒÞ°]xÞÜÅÍ•x•Ÿ3Ó4(ªÖýõ¸6VJr¿Ý:³„z¡ý¿Í8Ô ,a†ïÖ \Ä ¤ì·&9D•†j,Æ4\¬kq¡»;xdÒ+ã}‘WÞ·‹zÄ üÆìÒd–ëzy(RBZ7ùøKâÜX8”¸,§¯V|É‚Ï_åé¤)x ~¾":©ß?éë}¯.Ü|í#âÀHÿCBaÚ£ä:ý¿ÇÈÉõÈ-ˆJ¬½Ý*n •‘‘;wëñåB¢b`Õ,¹ž\©Þj¦8vý7 Q`¹ÃYÍÅákºFg‹ê†£+íçr÷}™ØËÔCÏ6Ó¼ô³¢|hVÓ1Q’Ù±+g:¸¿9åƒ pãõczm¦mý›PÜ“އcu1šÂG#'·Ä]¢´ÁrFͰ%›\hq]ŸÊDDKz‚†æÝ½ <þÞ:ÁìÏ¿|}½'¹³E½î‡j{ÑÏ9â}d˜?'+¨sha\ù<c;thšèr/gË0o[Å>ø²´¶ûÇ,ŵ‰jRáïèZ®†B /uÜôÎù€p ­™ú]%”Ý"‰¼5ypñµ¼ ãÖñŒ²Ô談+^˜É±Ñ†úöábV$­Þù¦}’#ï ôøÝ€ Ë*q •9Ë8̨Uˆ;UÃ6î3³sã™{VÁ¢«’ÊÿF0¸º½Ð˜yA•º3uµ .bïéÿ*“êFMëʽXq˜v˜¤ç”‹©aaba?+Ñ’Eæ¢#?º`¼lëâ"B ¡Ü ŸÀž0+cƒ+⯮â°&»ìÆ«­/b­’h}êÚo;Ç÷8Öˆ§þ68/PUì#ÿÔ'V©µef:ú Z:£X”cg/ÑL³<9†x¬ ì^Gñò¯ä,þ Îl:Dã[K Y°K/nÐÚÍvPê§…A´ž1HÂË÷6^ U¹†5KáðW#UOÏ‹em´~µ –>>ôBõÕHæð#¶@ªƒ0Î|’ÛÌcÀ8„¤Ážª¦=ã0¿La×Äú€UõLÓ‘yšp]ßT—{…7PT†ŸKoxw{ñZܦÛ7eEèàhê·,¯Ÿ›»÷äWâàlÿJì¯úG§‚òî@õVÅVlRsq9WCüJ² .ÖqLšéwÿPÑ¿ùs·ïÙ¶Ï‘vzD/fù/‹ÜúIcÓÚ„Éú•)†é<Fü{0ß3æV–~dÞ‡O—àõ¥s:|mõf~!R>•"6¦­Áý]µú¬æ:Ñ,¸±cåý9ߦ  I {}ÿ͈ãyfa¡×ñmhoÈ‚8Œ1&­g ]øçV¢×ŠóËÒ0€R<ž†?[ûbE®ôÀÒÌØ¼“ÿúOS9uè„eʉ?¬Ê,*MðÃHŒm?­)À[†G¼âvdÇÒEúÕ¾{\êVgƒ™Ê&­Sá4_áûW£ßoì’õœ›ýWcÇ­·nNCÛE'ê k”‰‹I4YnD®#š<Øà®)ZÇ.H¥ÌÀ<—ËC5'ß%_G™j©×•>þʇ’"a€9AxÍôSû·´«IÊ€OÈRoNToLáÁEYt?€؉ vÐýPd06ZÖÐ(þžC!íÜW¿g/²úÞ×ï;TÕÈ…hµxHXØõ•ÐcÁs}‰Ž?â=¦CkOK”@­ó‡7 «'OÞ~O”Å̬´Õ=î°¹³›#ˆÎ±‘4aa‹¢àâ ¹‡!knñ°n'0C§*Úq&õÊ‘&zžØøs 迺¹ÕR7êBó¯OÂÙ+Rs6zZÓç}1Þ"Ƚ7Oµ« fIë¼ô¤¤¥yV¡;”MeGdÃh[ÅsÍ—>ñá~„öc®oo~®èwçÄñ—<ÐþÛñJŠW¢aÙ4r›uFGª—€3ˆ†¹ûÑï÷o*¾²ë$êJ,úÿ÷õ¼ªC”•‡Ñvî_ÃÍ™fZ‚渨R—æêÙáÐôK:ËVß®~ÝÒ cÞêUö£çYÍqqåEf1…•¼ñ}ôçÐùî"®x)+fuP4¤áõxÕï–³Q¹ý¯™mGý8‚žó¥cïßD1ªºúÁ»û/õ÷8õs±¥ö¦~Å_r”½'“>ÂIÄ0]øêˆÕpÏšNJ|+Í»|8WÑ‘º;fæ™X „pE¦.|б/,o¾¾¾OfÍß¾Ä9) ˜äkR/r” õn‰vûˆ€HS„c—ÒóV%(b^?ûô[ˆê úù9{ç“9•ªÃôlµñzuüÄ//O–T‘LGX6côÜj Úó—!flñÆ¡é€7Oýа×Ñ›•N\ï9FÛLú¤…zHÎÍÔã q\A¤˜§´7P¹<ú(çÆ=Ò29•WØë„óà>á{1[R SX2Á:MLD+áÕ¥E¬Ë ØA§ s rµPºAÍýmoѯ+üT¼mf¢¥4ʃ)‚\)µùRÉàíÅ:—“ QZ˜”ùëÌ9².o‚/þ(Ê8~!¡ùã1cûëúà ѱÂ4„V&gm0c潤#Ãc;Là-·*„ã$­B©+Órß8QÉ¿Æ5nÀGo¡û_‡ì_EÿÕïœï6N ™õ¯Ëàª>=—³ÖïzE ÷ñýªÇ')HÖ¦ Ð<Ö7~ý´¯N‹¸Aúš4’òô˜0àÞ{?#&ÀŠ6RÕjí¿¹ÄŒ•)OFhg*=_dú&µôo§P¸©¨N[QÐ$C5òµÿÊ)66ú‰ g—:}îdälo{zxÍoæü¾He…äcÙaÿ@‹~7rÜ[c7úùÒ„þÇÑy+¹ QôWÈ ð.Ä'¼dx°Â|ýc_Õ[% 0Ó÷ÔÓM±Üý0TêÐ;úž»×œÊ´â¡k4ž”Q¦XìœM?'v7x°G`œW9z ?j±ñXÙej~ŒV‹ E—vñ•âò £è‡g÷Tªd/³HØ^…/dì6rR3‡®÷éC€¸)ÍÍ&½h¸áëÿš>@ ° Ëré®ÇšÂ4v]LŸk0m³çÎ%PשhíçO `߯äX´1v±¼ùäÆQË2%K$ø]œß–oÉûȺ‚Lì)J(ÿ˜­)Íäxõ*Ø3ê#kL§|„; ¬{šœÇ1ë¡ìت£9~ÙU^­’ºWõÑü9g<¿mq^j¢–¿Îܰ¬(;üu§¿¿©¹z½Å„Íq-‰ŸJ¨€î À!U²õæàÖÅ*J´N‰ø¾_¼'®ŒÓÑdžVüc9 œàï^qyzΖLi$ªEéMâ 6/zè§æüð—0þ©“ìÃ;ï’2ô tïM]ÞÇ£²«}…î í‚i¿Öáê×`Ê9þ*¦`ÔÀ>šÏ’ÏAtÚæ…ve_¼êž_>y®+mÌ$®cæäª‰XÍaTáranç4ëa—ÓÂ_{5;Ú}-3¥ßÁ‡QÍ…Fp°9 Mí²/ÂÇêÐ`r§¢eíë7S‡NÖ¤ó‹»úÔ·—dÉÙ$°³£FÃBŸõÒVÙ©ò æÁécÇ2A[•ø,y.U$s•ááZ¹bPçM‚¿b Ã_N1ó«šþÒvD55xf÷×rî–¬Åæ|ø!#ˬêºO";]é“è‘ÑÅ=;ø0#ù‘Ø[i{B|+4ð }ü ÆÝí]¼ñ±=0ùDi=ÈvP›ç)?J^eGx‹Þª–¤“.vIÚCæ- ]ÑPø÷Ô ÝxÈÖÎB b© 'B§6.Í”²ªßo›Rg[Þ‰æ$‰TÙhI³wù½!µ¸*Ê %ËDà4˜ƒå´Ë®’Ïà~iŠ3.áȆÕWÂÒÒ0±’-ùPŽhpéS“èñ«Ìò‡ßX€z¾Tì(ùGÐܦΕ¸êª3Ó0öJòl¦èÃׯ±™ìNãí½Á¿’ÈÛ—:mŸûöe)ûKfªþðp<‚Y§8Ö V»yrtçx«¥Ö§ëÂÝ|Ü.O*+|²^oË’'Ñç™®Õy|tÆÓ˜oe±•;¸˜¡“v­7L¬,ußwûK@æÐ©¢9<çkã Æ–TjZàä âP‡ˆû샷i¢—‰³ ÄZ0›}àÑBf6öB-V5]\"ÈC#ج/ÆúŠÙOÐz¢éÔ˜\”ÀãCç:DÆûZiu“–±bˆæ>7rl€$â|y"Gn:‡W°u6lR¯ú»s¨þþöraMZЉÙU3éB@tã‡ÍF%ãävéꚃA#¶³l ÁC`õì/ 7T§ÚgÉÉõÚ{8¹áÄ)zð.úiNä ljhFû´…Âà\Co¥…â¤þöK[«£I¥J$Šú„£íëliŽUV[ÉâîåÊÁKk+•æu¾w™TàÃ;\»^•5¤šFûŠ_£B7»û­®8ZM.yÕ(oÓßcC:Xø+“Gâׇz½¯¸[T±K&jÆ•g0ã+¥tÏ ÛG´†+GꯆFÇ‚ÞûVä¢KõWkCnËKSæ°tAŠŸ»aE¦ kçªAa6è„{Qâ¥Â>oü7=­¿2™,. qXlV¨+òõa'[¨ýå †GŸXyõ»®Š£•¤~éö7ünÂd¢ë󢹤FXºIóÄK>?ê‘)öPäÀqÌU¥'ó¯²õÌNšû6ïìz,›kÎk2oÈŒæú×G=–€0ö? ÕbøiQ”âÇ9ÒÁxŠï´•Ž·teÿ%|nÔòz+;Qƒ^ÞÛ…s+³@ZkRº0÷8ô‡¼ ËÕ”èÖÚZrG“kr¦L:½÷}¼‰jù®Ž'øÅü‡5ØWï*ôõ½ ®‹Ãíèy•^ €U ){pA®Ibqá¤wvþ¼-ö1‡> ô—ê`ì³W£jœ×04 ·¶½x0_/܉/6(> ˆ›[™|¦›×5æ@;ÛWl|¦5ñ ØãP²ªŠa8TÐ?ž…5àWʯg-ïÕ€%; ¥úÜdæ$ß “7Âyo¨fê†I'ªn“N¨òìk?:LtÇ´PùwÙ ê¯Bî^¼©ä]m¼Ô㕜Yï÷5çs hUôá®iW7ˆþ/£üÌŒ˜Q­Ùñ€‹÷Ñã¾"’·K.ì$û÷“®…:(¦¨Êä¶'H¤‚÷@k9 ÁMá„‹*ò±æö­y§ï w$9ã;];JßYž÷ûªùi[¢SÌÑÅ›øñDT—±€{yR€G{³ªž´Ê"¼ßzýWް\±Ûª^ÖÈQºÓé_^ºëo·¤ðˆë¦Ù„#^xÞ@>.eû1Öô.Pî™v5‹)[Kù8éGÔŠÓÂP\‡æÔƒUÜ̃‰¬Ìæù@Œ’ØàÀÁ›Þ-ù{$gé\`(œBœ qZxÏ“·ª 5eàð¼6€Ö¨š™Âõ°Üg›NJþëÀ´œ—ñiFWêàVQ7ÑLÇ¿è±319ên_LøCYV=°àK?ŽÈ°¡þw€zo#¥¤*Û3þúƒ ]ê®6¾Úkœ/Žm¢#›>G£ ×ëæW»¶Kœ®sº£uë](µ! ~]S–²ÌDŸ­\_™>¬ÐBt ï§\rËùXªïæ“‹L@IS\lÌÔçx¥©8 Hã&¥jkjÑìßvÕ¦úaNýaŒ¤yÏ¿f°[­<=×ÞäȲ”ê¢&«¦³CйǴc'E6®â%kÜÛ±o¨À*ÿ¯ka´Zc6þÑ|J׈^òå°XÖ…]£¥¿ã%Q ;GÂs]ú6q‹ûj.û ç=rÍr „sûä/{cM§áAK˜ôût3åÊbƒÊ ¥@£d›x¹˜#a²ê ô~>שÏéýåeþ5DäPú÷‘’Úh¹Ó(]ônìG!óF;µb¹OÈ(Â7oŽùXRÛ¼ÀISêíUhJ›sw´Ü¶³©8TÕ ?!GuzSé¸G˜y%W8¾÷ÜßhA« &÷:&…±[6<-Š#´Ç¿jäõ îÕMynÈʲ4ô¨=ÂP½6ŸU7ФKŽñïãÿ=ݼ¤_`¶)[WiûkNvúLľĊf´¤Ñë?dýÕi~¾s¥€d?ë9—{²I6Š:$¶ ˜æÞðB´'‚ñGÇ_FÂiÚøDäÇÄÅ§ÛÆ}„tC¸ã !« >/Ádûû•„Þ‡_¾Ñ~|‘­¨¤ „h3ÄÏr;Ñ¥Xƒ(QNË’²¸mÕt\òµ1€”yŸ«ýNè bûˆÀý{S—Ëí¨ƒþ•¸Þ®¥G{U)HÁÊQ%h„ÊÊ ÿª§ûBÓæÙ…ã¸K3£Êp\SíæŽZ÷©´^PôVÅüA¥8šª©„–øXŸ®xp ãÇ •QÁ˜À78¥ëty‡FýX«e4b{BKíQšT8YˆÒ¾Op«êâ£Õ]ώӟƤOÈfh˜T9'•R(ù»èküHhâFŽHÇ_Ãä‡ìò_®v½òâQìëçÌ>÷›OÔøßV¢`å¾E}ÂüRÛK0^Ë!D¶µ¶îIº¯¥Á¨ðºDgVUÛOH¾¿ì¨‘•”*’ŸPd@ý¨ž^ 3x¨RIÉåÅB¬Tº”õëÎÕd_ÖZ’…¥¤TF¶aZ¼K}µ8Ò-'öPÈÑOXSÔu:3ûý€ãìÄð„®øÎJ CA\cƒÁ«Ÿ…ˆ.Ô%¼&ª¼¢æ*€ H!3Ó|×–Løûõ¿Çh{¼âëp¦êAÄü±¤ß]]Û^Z¬XVíúúÜÑëX¯ê}E •T&qÞ'JÙüðˆ2,ÌFçÁ: ]êä`#2©Å ¬PXÑU«êêSm¾U×ûoŸ«$#2<€8Ú_-v5Ïê''Gh>@±z [X´öÅqTé r °EH…þÁøo÷ ͆,ó·áöŠÍþ{–uóŠXG­7ÆDížÌ~iÙʱ²Ìv(@íys4€´Š7’Mý"n+âC¶§è.aÕ$­óuÇÈO&ú6{¦¸$:Ôò‘‚18+߸P¼@IgãÈB`9ÈKÂæ»ñÐ6c™É]PcŠ•'®gÞ”!ÉÕl3¨RFøÜå´ÿµúcÿ2µÊ çÓµï9'e­ùº³+Þ´¤Ãðþ^caåšÚõ8Cªø$ˆšä©RÔ?¨Û$Çß–ÉG’Õ@¥,û+p{6@M왫b=iqü2„D©XKúí½Ë ,ÔO¨ˆÔÖŸÕ ‚¤ã½þµiýÔÂø-ž† üÉŽgÔ€¯“¶ÌÁ ôƒÂJµñ&Ý» ™Aéw Áö¹^T‡ÄÍU;1QW¶ÐÎâlI±±“²3ù¹bår—ÜÓs´•Ø"¢½¡ìsÇÿvZ¬gE‘ ίNl 4ú*þvÐaQ\ƒQ†c´¿n¨AП¾Tî®/«ûº¿`T(]’ÚV[E[Upó* Ö34úãQ@_EÀØ¢4…L,FH½¶ òÀg>3ÌØøIàJeëy_”T¬É"³a”¾š6gÂpæô­õïqÉË0bê ÿ"1ÇΊN¹M±_Ï'ê¼LˆnsgZìÍW„h)þ’=|#Îó\LDÞÎÔÅ"²ŒF5å1ãN”>§t‘Ì$‘†oÖ»ÛnF܆)øXoÀyÓá3ãÈÜ›¡ÌS3 Õâ\+©šƒi ÅAq—‚]d$ªí˜ÄD¦<í_Êoxÿ‘¥è—Ps‘Œ!ª¾~†±6Šå~€¸Œ‚ýœì!õ—Ò`—‘/ù¥n4‹×ÌmÀÒß¾NNAƒ&š§ì Õ\†‘ÀŸªtw^?AMÚ׿W ùDf²´y©ô…Hö3ý4žåë3É-«’'ªFÎUlŽMªT¨p(>ü¹â»uáÖu~â¿&¦Žè­ _ÉvŽÃ³Ì[Æhåmä÷æÆqP ËQW±Iѯ¢!„Q$ˆ7–ؽśڤV.zoˆ•,…‰I½K¦ë€¦å=:>WsÄüpE¦ ä⩯î7íöQº£'yÆæü¹žó‚D机ð’Ø[J Ÿ‹?jº¾3ã¯êŒq7…X:$~±w#¦—òØýœº¹Ô°u«R§A„@a‹Â/xKbÂÚH5°NܱÆÛÆsÑÙî‘fC¤ŠzX Y x°,ÏlìÃǯуš—¥,MÓ%÷û:ûû7íÆ¿ÔVå /CNª/ŠT¯pozÏLb´!ùà2ABB­F4MŽ5_Ö8Æöƒ‚E4ÍèAokÞ›—¤½ Œ|@Ê>´Ô‚ ­¼Ŭôž%uÞñ»¿%§?×_- aé¿ý7‰"jþp!žw* ܶ[iw^ñŸ?«îÚ¼R¶dÿžžXŒ1Z¦G2 ®„:éõþDÌmì™Ü»ªÕåÞˆB/ùH1œ.ºÅ ·üê”Ô”™êXEàdÌPÇ=ö¡²$=¿Ò/ذÎûÒw~á¾mØàóäýØ$îy/nCãq•j´;R<¶w|ðìß^ˆ•¸Ë1„½'tØz>QÂZûEÁ‚ E-k—Ç™=;g]?Ñ=“Û ¥cú" ´DY–QÊA+s¦—ðÙ0/-é÷zVñáEèo{üpnÞðÛ¡oi¨¿#²y‘-Gw¼š–u0a)‡lw@ =2æ‹^xTƒÕÙbîy²‡5I5¯ùŠ×> ~mh¼\°[Äàø X÷oiÅñA`Mw©ÒGòKÍûúÒÛ»£ë…è¬kS—üp$öœ¥+a•`Ð:ñ7‘k5kKf|Êæ~"nЍ¯û½ð‰hÛ<7x6`Z"ý ?¸üÄÙœÜ^údÓfqV©ÃšüÈ|´[~Á¿‡àñFÁ‹55H ÈzL3;¾©p«x%PvÒ²•º‘¤õÓH$ão¹^I7àŠ4@î2Q8ÃôùòŽâu?¤œ¿†ŸòZ§ŠùRh‹ôð¯©æœ;ƒf²]ÂYC­ðÜxa<¨¼ˆ’wõ½~õfJïØâS½8Io¶%ï$É»ûä%¾÷‚ÿ)}-C,— 8ÏŒïòŒPÒ¼­TDÏ“5¿^¿RîUÙ0‡Q[pGngå $e罌{-RY» Ô±Ó—¯ÁcºN¬•äM\YŽãx 86´=O¡Ç;U¡3ïÚa¨_v‹)Ê9¿bÂ-Uûý]ljçà;Åžr•Hß/Fݾã®sßì î&¬-’]B­ =ÚGoÝçöwlWó‘ÿ]¼hÖ8ð—òŽK1òGàyßÇà=ØBù,kÂáËÖAµBK,‹^j’_¥«é™ _ä³h ᮓÿ5-°Fv»ÞÐ>°€kÕýÕëî%lŪòSbIˆ¢\û˜«²¢c‰ášm…Éí°Ia÷Ö¯ÕJ‘ë¼J`sí¥ˆM8C5ßšz-U»ÒQ rõØÌ$X‰D„šÈ®zRçkš¹x;„¬±Q‰o¤¹¥ð91í0¥€)‘/íIi/~_LkÔÿk¥ÍT¢³úíÃØçÅì7Ü¡œ² ËJ8­+3 çßÑUäwkùÒ’»øW\”¨ÐÉ¡#m\ ß>ù¾á“09ü«-gÔô[ù#õ¼É‹@CàBT¥z¾×‹¬u†o¦Õ¹'îį¥˜údÀó<ñ™?Ó”WqôÈýòÄÚM#=\@ψ€ŠÂÔHÀ蓞 –™pl=È"p]R’]§U\„0‚•®kþM'ÔB¸+MÞ»Š¯Žß‰í;ͦÌ~iƒ‚Œà|ý7uiz»Šm¹a «Š´"½³eÞGÎR²Û)â™Âħ—4g›k’‰¥ýz3_®úA¾€Ü¯…BÍo®¶Ðgu^æ>ÜEËäÈ?œž}¨J{4 §À¯£4(}þ‹Á.÷M¹c ÉË0Éú`Þ†n¾`Àúþ=Þ¬-¼ŽyøR ÚŠ ›·8v〗Jòƒ´U²\[W‡Œ.!Ø” fï¿ •#á ÄÉqÎÑ•üDRoí’½bþž’ÏÛ‘ñ/]¶>$¼9–ºh¶º‘Áü£èê¡…³¼M$}Še¤5k»ý%Žð×HŽŽA­û“Äšöç~¥Co°˜/žaòɼý´èae€dq ýVþë%ÌC¬Ð¡8š¸Rwùðª&ÃÒk~—å¿ñÏmºJÊ–‘{µï ‘•êBÇÌÖž³ºö2£G‘Oˆ“aÈÙ3ºXÝ„èØ»ÉeûÕñë[«a&ÛUþÒ³eÙ뇹Ê46ŸÒãÝO¿H™EFECHÒüh¶"ˆ,ð‹‘s/Ç[10ok@~²:ÛýBXÿ ÖC÷ç‘™* c¢¡ž™˜’R·„™ Âyhû}êxVÂ^Ýç°;d¸èô…R鹩ò° Îhõ‚3²¿¢ØÀ“%ù`§üŒî‚º5 ðüKük!²œ ¾ÿiöyó¨v}øâ‚’¨,O­kxã{Hw¬ršÓ™¸U:³¶ÿ×eˆ…D쉜r&5 È ,÷;ÖûšïÈBMx®‘óèJöñðÖtú@öÄÕëoÕg8‹\ƒÇ;€Oª@¥BPY–õgØöi~,N½G›Ú}˜i­÷·z-ÞïdLvBˆêŒº4]1åR2ƒ^yùwW˜™n³ë*øråXþÛ­>¢²ÄºÿA˜1ùÜHzN4bqÐå·Ð Y‹x\,)ý˜ñGK+›’8•`‰R›ð±ûŽoÆBY°<–oÄÁèÒ}ZbwjëY¯7MÚ$ºÜT ›?Ÿ÷Oøý‘ 6´$s½¬n@­‘Ò˜×ÿöá¯.1 šÖu(„îãà˜b)nÂÌÚ9•ÅÀŠåüÜ…ÀË:(Y¸ jø ÓUjj\µÂ"5À ò¯“ë:„*µ9!ÇÊÒÕ±tìÆ#(jecÌÛuX†N{ /øI2­S®|ƒüªãXA•è-Z‹liy<­ï´jY”lÿ~™®~ÝÇ_ö~Ùàg%Ñ PIìTËÅ–+o±ä½âW€°ÃpŒÂUvÙ™§~è$ëéó½¿N›R_\1e¿øå {ñeM´AƒT<„’‡ßÍ·.w_PÁ8È€ÿl7ø÷´zùÀÌØÔ „€F¾\ŠáAº $nDHZ€gŸýt0C<%¨%p6åÆ ù‘R‚:7܉ێõ¨‡¨¡û˜8ç©{«n}Üh“Ûò“ߟ†M23#Ôþ„øø™#7ðiú‘¥’ _Óô 5TS†%Ì~¬Uuaœß¾ö¦[÷¸0^t_ §q;ží'ySË?}ÅsrëèYF¹×ËÊC”4¥?kÇ©Â2?ü’$­§M…{úbæ;$y‰µv¿ÆžÖ&÷1À·ÎÛFÄ÷^ú1L ä’¤Œ’Ÿî`PЀZЄ~g­ †˜pèâ~²‡ gÿÛ­-í©©ÌOhؤOjï# UQf‚’$l·53¤j>+Šä"Š• ŽT5Åy ÇÔñXSˆ…èYe,Åiõøø ÑxöÒ²…?D <6ªj-ÛƒX£%Á㯓yLN ö¶ürÝ@ÞÅİŸÍçQYùH¸N«gëz)d, ¡sÉW<òó;@¼ñË•Üë ÿmí£Y¦"¹í:›Ù¸Ñ-f€\àØm6ÛÐÅ`ê¯5‚ ¯)ßÎ<BN©¬|Ä€ìqÛ7D¤_!Àþ1(‘–¢Å;M6Ô¼v$†üóˆ­fÏôa¹S^ˆú R ÓAÞS­GKoa÷ Pþ/´[LÑzv¼Ä•ì[Î8-p]–Ç’k³~ó6¬~òøÆ9J‘@xâè/~ oUy£ö”®V¹£î E,K¥Å(g§abŸ)èvÍýª¬ ÒÖ,<)n>‹Ì/è€P›w0–©;Íq–k"oœ&Pzz+Ç!×-tá"þ +Ó³÷_—¥¾»W{H†Ð´Ñ5àöqäE½½‚bM>nòx³–+ä]PMk"ˆ9¤t (î<îŽr8 q¯þª  l&iÚ¿¬¢gÇ­Šo‚®M×ô±òÛ.ÞÔÝ(&¬ê÷Ênµ½Æ‰HKÏöù̪´ÿä‚„ÚÃïGO›”ð€’Èj?Wu,¥4np/‘6«ÿülk{dTƒ’Ùø4G–Ð`âJ×õ†`ôj<å@¹LúNUc߆&Ïi!efXy°v磫(&] ñ½?f`È=ïJúŸ»Ãò=prdJc:±ðŽN¼šUC@}È/è„u± xy‹÷üAk}¼ì4•0k¯™ÁTodŠûAM`ûdI _]<Õè^$Æí!Ûhíaް¢þÂ!ô©ÛØqŒÏ¥~„kòó+&S_±iËNFí¼BYV²À¼¿ær׫> E’ ¤FªUË{œ±rÙ‰·‰76z-òN¬XÉŠáß=e=wݘ@¦C`G6‡}\ÉÉ;÷êß)11‚þ.3ù‰k ?‡°K‘3ÄÔ 1åÕÔ–D MBúvDÚõÇdz–L±flX¯olC¶!K…îÀË3ˆàO¦ÕÁšŽãß~®äáȲäç:ò2y'z]¿¡U ”žI¿˜>ËÈfæNþ>oÉ–ÎŒÆÿmðb}ñˆgÜÁÕ¿ñ÷—€$ÓÂ_/—Α݄xkù‡Í]Äê& eÌc»ócÑìëöò¯Þ²Wè„Då\Bô·c79÷K?¢q™mÜD¡¿æ¢Ï9muwaiÝ£‚K§÷PǼØÞtH„êÞ‹ÂÅEdëœ××zûmצqñ‘ÊÒË%ôRù†¥È¬HÆK÷¿rNbéH¨ÖôDP¥Ÿßþõ„^Ãê8“±Eÿ‚™dr¯l«–þk>Ãù7¡va%És°µ¶~5š:j«>ÇüYùç›m¯äÅT;wÀ§ ´¢÷ÍaáÅ#`èÉ'¦Nm>»XUÏíÈ8Á"¥ôÀçñ…ñxR׆Äží̹:%¿†÷oÐrÔ=úÞ§UÑ™ÓóõÌÇŠo^mqöÁ‚VC3`Ü(:^† Î5Õ•®¿üÂõB²º9ëë#ËÏ…è^õ‹´—}Õ/î×ñ„a ‚m¾­&øþ(;è†À²,™bÃŒ>Ö'šNw­åuìË…|­Á !ÚNMØ75ë31´N;p™×]ØÞŠõ7 ªØO€…éÈ€,ð„ºëýQ”y´BÏÜV« “wiö—:?ÆôÛ¾ØÌ–h`µ™9EÞ]AìéÒôñÕ«¨õ 'ó”Xþ^æÆ³¯Ï´ßcœzQâR›8')Ö(x>9æÌ B ›—¸ õ¯ÿŸF¬÷0úßn­êå‘©À &æâ÷…¢Õ˜5á„îSâ1%2ÛôöIU‡ŒìR%è<7óCÓÐlhy$Tx忯 ý="@ûz“T³’5IM -•Ë*~N̈Tf ÿ ؿę¬â”ó ô²ÕG}¸ÙÇ–”ùŒëøDˆ·Û«yxïò›§™’@IŸ‘5­MÜD]÷·TëÆ¤$(/ÙèwñÀ>wräÃz·(Â.}ïúˆ!9´áD£’m´½w/31°ªbFíJ*„S `ý/¥¡ð#Ù<’g-%¡â¯ÓÊãrKMƒ};)›[›é£µqBŠþ󚆪ߜìEÔ¶ÿêƒG¯%Ìu³l%~Ö[ 1ðÅ,P+Ò ”²¥~«½³ŽÜæîR—~a#µ¬é~SÕâë<¯‡—a¿¯Ö ^Zˆw5NöDéÒh'k’ŸÜkäÜÅ>Òy”¦¿]zA_Üöp¯F¼ùôyµT_–÷ø_ósPþ,Ñ©YÑdXðcý«Î7¶ÑÁ°ௌ˜HK#ÔψP©;S»j?¶Âª8+©3õöÕâGâæ£u,czjÏÉ£KhŠR<ÐØo8R…€š¿«Açrî©¡›¯äQŠûYUCsñ!…|Dë£ø–÷¢MÐêNú#óø«ª‚› } \c¾ø°MžEY€ý“Ž ÖwT4ÏfÈãÜöBÄÒ>ÞhuQIÕD‹÷oPbá~/I¤‚ƒ·±ëo.z4_X L÷_i–µÆC KÍ÷–›Ý7­ ®Š£×ùËX6¢üÌꈘ٠gµ‚O¾ïñî­fóÜñtLz u˜/näÁ•Ã$°Eê¡e¾È™™œzÙ”nu¾»4xZÉ‹ÒuPþ¨`*ôuVkJæÅ½ÊXÑXV,’˜$°ûïK›}Ó`RÒ²S—´˜‘1ôrmÐ<­Y8 †.®¤(kÚ‡À ZÊ„íÝ#;V ;Ãá$v.T6Þë9r:éâR_ï=OæÕf:r\vÔÖ-À‡{Ϫn®5¿Ûoá÷[9f%çt¢ßH«ñHç·ˆI|ˆ\·¬ˆo¯Ér•7&ú«‹-±¢áè3¾„b¥ î×¶¦øp+³”0³¯£·ü%‘Ÿ¬¼|Ë¿T™¥›¾>Âéò5®ˆzõÛ=ûHö:/¹—€Œ¸>„¿\¯G¢ºäß•ØàëK_—ù29‚ñh“zx‹Gኖ·VoÁÖƒqëòÞáü–›¥úk‘þ;XXy¾‚eäçËl¸ò¯þj/åz€EØk)O^ ò&¶IÉFãˆ1¸ß«f0æöñUªœ¶/ÌhŠ(/׎®lq¡2œâBEŒb5Ä=w³…Ïš{KiÚ”jÕÂ2ë;‘3%ïBûoé5Elø=þç¿¢”–BþQß&;k‘/ò¬|ÈŸH»5z5’JÖuĤ×Õ§fSR+lþ\_áT&…ëÍúþùKeÕÀìÙµ2%²õ¶Q¤tgl÷Ö- È.Ê”/YG˜º¥øN_€q¬Ù+q¨ÏÜÒ¢«C¬J‡'V²ËD?S¥RWt|×"3hÕ, Å|Ç­ë¼£¹¢ÀÀg­‡ö”ˆ×ûR~ ƒS?¶@ÁÒµÈ6ªDW¼#žŸI}m‹ Ã$qêìíïÌ;/ø¢Fgùs PG¢PÝb¬ßÎÝÆF‡;OÈø«[×päZÄevÖB„ƒÿ¬Æíøœ³ü-ýÚ Hf¤L¼c5qî~ÝmŽ&×ä/dâØàûm´§Aã2#%rÔŸMTéðœ/ùÁ'¢]ŽÕ¡§O(Ýaô)$"­ ¸=?A¸ƒ`­ßg¼$úÚk¶3¤ÃÎŒÎqeÅ +M‰ˆ&"æßR‡ïS3E¤Iß+׌8iý ñfðg€{qT4âbëq#RvXÍÖ'ø?+2²þ ¡uá:Ö°F–™çQæZ ÒнH÷tÉDHÀ©yá=:}bu÷\×9ÈMÇàî…~Û¡."q¾n4h‡2úr8lje7T/o¼¯—aýxÒý*!wLPÀš£ça#O“½„XUúï¡úej ¶ x’óû‡”Ñ€´Ù÷óù©@® ÙËÇxô›ž¯µ ‡‹ Z¾Y¢NuIâhTZPDïôÛê(XPGÉfÐÂÌ-;?ÀbÉßíÐòÎæ“×™8 Ü÷sÔVÅ¢—†$6¤ÕFñ¿êSwjË•»GcàQþPˆfTE|–Ð/9Šoºâ¡?w;€ó—XÑ'`jÖ­«bÃQç`Ùéè%¡ÂžêKCé‹Fz뇩ì’ÍÍ&Ý3¤-Þ³›ûtòÝp>€¨ÛõêN/ÿúc wÃëýݘ^‹û4-œX>µA2ߣ'ûŠ#*xqÃmÄ¿fâ—Ñ‚ñüü笣WÇRö)xàl]0ØÉέ²b\ë¦ÃîLÜ‘’ÝìlXÊ ¹26;rç(ˆÕ˜¦,7èoiÐÕ©áÅÞ®YÇvV,CDžî¹EïbɲÔÊÇ´ï÷O³®:F­½e{Е UV ¸´Lyt¬iÇ(PU²ð²[öÔ7j7Ù÷œkzMâÏYÈí=BË˰ý5J0<¬º vKÔiêWúPê3¡Ièà8Ýè¦[íCsߨRÄ@21]cˆµ÷†zš~·zïõD)RÉR¸ìáùl¿¡4>’[ŠéK¶ÿ¨ÎM;¬‡?îœq¶-¸/Ò·­¨*)C Ú¦É+†Eum ¶ó¬ ÅfžP¤Š÷kŒ{ußÖÀŠ‚f%ü|Ç~F†œi¶Ç¤”˜eÐaX¸…†~GÔ±ðM5Ts´qâ¥þØ'ž“¹-œÕ—N¬TTÝ»±JŒÙcPôæµ8‰]Òj+m]s0–‡äÊ”ùýK8ŠÄ*\U^¾¸@+Ô’3¹ãáîô`1è&‚¹ÐIñWþZýo4¼¨÷¿¢!Ÿé=ÃØÙF7f£ì;qÂé™bfªÎá‹›—| ƒG£!ãñgíð¹b¬Ä±e÷þ²ÅÉs„nçéé¯Dê_¯kcæXª>>A|¼K¾5f Ì Œ‰Ÿ¢7ªoPÂ܇§2Ðî^Ð*°¥å™'©ª÷Êó£ßÔ>wYäT>“¥j©ªQ×—êOÒSSz+,Ã4™~zºõΟ^yÃ,¹Ód»k›–å­÷›Ú/ ®{sÙ…ïÊï6eíèÍ„©Ý¡fž%Zï\}Ô¡ 1øå z¹Î„ùâœÞ^¢XÑŸ-y$ãÔ W\ ’fçìGó6N0Ó®aHÙš"VRHÈd>Ö3%΋å…ÍËÈä1£®/‚V~Â-,óàÿl+zïã'ÎÀ‡¤Fg_&môÁ&fâüû{Êâa‚tb||ø,Ï éçVüc<ÝÏ0'˜CÆPab‰í´„˜£+µƒó‹™¸£æ(°0Ã]|¾Ú‡J_3ê^J-ÅIÇY•7xVø1æÏ$œìfÆYwS%ôóü\-çu8,ÙiÎ<î×±&A*ªG{®R;º0•ÖFûë2ð.8OУgÍS—*»~I¹6P°Wx—þLÜ~3ØþXð¥¤D%×÷ ”)Ц=¹Ä™2Ö'ú¬Ÿ·w´¼ÿ¦Ó¥WˆS4%ÊÕòü‘?šõÕj{å[ˆs‚r.iñˆÉë%ÄÌöž‘¦í_–Œ¹v(ÑKîº ÈJ#ýÂŒT±„¯ýd‹I”áPw×zщ΅YKÝ{jûÕ¬•ùü`Z«y§³§gpî˧æ@p¼ÇÂÜ_ xó+ hGv%%­µ›ŠtçêÚó5¶Òú±¸Ù¨We×§ ¥ ¬Ëʬ©?nh“œr?©PbÔß.¶£jgQqöŒfÙ´ñ9U¥–mÙ:E‡ z•ó¸Øù`е¥¼%KNr±T‹¨±{TÖ¢ØF¡öóŒûe¢ë¢å9Ùfåî…Çýù1÷JãøhXª‘Ž$¨1¢»>þbcƒÓ/z7%ľ…õ¡.X|{9S‹½&¬ 0$ðRŒ¿Öe?~[ï¶#jVÒ¿Í ¹AàqO­~ÍÌoöˆWT8©3+„¦î°Ö“$’6à1útQO]‘J5'ގР½\>Š‘A^P›r!¤…òÈæqè[B+IWNë4@Ot̸(ˆ§ò Æú*UÀ·ø#IÜËzvZ2Óï”x'"NöC2$öŒ0ÿ ïœ]ezh?Ècc„Eh‡~‹gM–uƒä+&Lº‹ ÛöA‰ÈußHÖ¹é ‘3þ¶8¥Ò”·‚uïñ‰Ÿ`ŽY÷?ŽÎcÇQ  ¿ÂÙÀ‘`rÎp#c’M_¿ÌJ+4òxmèªzÏî®êt¦§Ñ(«Mé!‚a%AÄÍŽµ;äo¦¼Ü”R¤®ÉŒâË:?—ù j—tdÎhçšTjzòºÉþ±ðEr±µ%}¦ Y e2KßÀ¬Ú±òÖ ‡Ñù[\6ôÀ¹¯§èÔøÌHu&òíß”/¬Ã+“©Œ·"cž€¦Å3ž¿jÏÁg9¾Î ¯V)|-œu7_½ÙIÔüز벮#>=º•žhä_/LÖ nuË'å}¦«Ÿ%Q)dצ¨…²”?d¨Nóµîjžš,Î+É…ª!q0è…‡"üy\ù6ŸLr¤óï ²åÛêŽ%Z‰³%iðˆ˜e_ŸÛãBß`jçס¢C8=«”hÄÜùj>úó2¶îÀƒ#_—òF½3ó<-(^#†%saP9ÎZZIJjj®mˆ´ Ý¡³Æ¡_Êáóiï§×ÖÌtÖÐ.'&6(ÑLS;™£ 5sßwÆHËpÈÍÔC.lÉœ4S”Ç€Ž÷!>^ZŽTõØJe loî)˜Þ“ÏE—·¤±mêáØL_jÒ98é¯.1€ïCôÙOÅÑ8È1 n!FV]ëýõï.H×7Ïç\œ¼áeåÄ;CTð‰Ô=Hý;ºú  o‚­ ¬t¿¤8妶 K5˜¡kD+NØa%6|4aCñC~ ,‰g­•%"lRA0§”¢uÍ꫃ð7BgSÝ^êx{ ô¦Àí‚;oÖúÃÏû.*Éû9’¢½ƒ¦ý­Ž¯NïÝXVâF¿ÃŒ [ pîk÷è9 ®Ÿ¬äM×›+ž4Vôk;B»;­2í}ûrsÐ#ÞíÈÏÔuÈÒº¤ïql÷‡”e­ýæÀÆÖ^In&n”ª<~yñ#ÂõmÜ.tjø¼%G8TËij­ÞÑš]: <ü"óÔöUh’Ø‹C eAô-ܹ¨·K˧5 ’OçÉ=ÃMˆçÇ£?EõøPý¬{\®ò³x’RŽgØ][ÀèLø.¦2‘úꪶÆaÞ9ïò°…  ûÙÏ]á  )¨ù³)ñK‰Œ^¡{$nZ1ˆà×¶cê®”ý Њ›¥ ßf¾ø¤Ç]¡¨«tŸËÞSË™Îë’7*_ãîGcS“e{óüe=w§+¿ø}u¶±$瓱B~R·ÐV¤z­B8ÁG/o4y^–H£ž¾^‹V=V¥áE…\ù,˜D%ÇšŸÈªZ~ïßèb\ÒÅqƒŸ…5…l~n­“›¤i!{l,BGS^êÀ}/,ÍôÇaŸÊ_q¦¡ü$lzAM`î:4Ç9($ dP ¿—}Ñ­áª\騱[jè{¬f‹¾-*re—ƒÿÑÔÏqQ%fóPè6æ©û©› ø2›iJ¨6 Y*˜µÐkºRQ Ÿå’ÕÆ”VÎæbóUú+‹å-†Ï¹éê={Ó E Büë;›زORØZz}7f?øƒë‡ÏЭüÄQ%©/÷I"„¨÷¦Gñ%ÎH<ìYÞÚ¯}Rïd4N?Û:‰åúE˜ÿ\¤ãD…õNz9 Aih¨!öùÑ'/¶™×=iøhRc”na ÉŸ;hsO‘ÖÍ2 UZ’þ²í(Š(ƒ¦kè1ä ¹K²iÇ_ª^U8ºÿÅËý¹ŒéS—ð1É Àðá®››7ç³ÓhÙS¶uÎ}¢w~!¬×uí¢¶äå[xô£Ú™BŒÑw#êoz·9N®H0c" óöµ¥~~F[œÀR($»µ.nVÂ’”jŠÐ×—bŸ³1 h:‘¾'EHÓC¦!ôÝô}\‚`w#þ– oÕaŽœø|Á´Ä!ÿÚçDÓt• R!rÃPÐË ¥ŽŽ½VŠY¨´ºôðT^)mP¶?+aX1Ò–7êQ ë¤¦-ÂßQZº¾x7?‚þÅýOç×¶ÅY_ Ï[à{*ƒó7q…R]‚£ùÔê œšŸß-ù½Õ¬$ ve3ï1²™íŒ)ìr¹ŠçiH" +h k›@Ø0×~Z ­CØù|áÀÅ47e²ÙÊé¦~b1ôD\îÔñÿ^–´9ZùB“Pú9ç`ý΃ÅÁNhÚæb«õU±»Ø] Ò¨ó€ÑªŸƒ³$¨IÞèÄ‹<¡ÿܦ’ê>e³ùrº`nà;÷¢8 wŸ27º¾6Gû,&A³èÎo’œ>a˜‡_–·ˆ[Çgº£¾õÙíQ©ãg–|.û Ú6ÙA\ \äMÿ}Å¥|I² p¾ýnN"\-mÉ«\Q,mpbÑåS•ð•VÁöˆÚ¥É«CAŠ#ß‘Ä/I 3Þ:ŽÂß‘ï²(Æ )kÚ7°¥A«w­­ÑFnJ¶Uyg*÷Cy¶J6£_v¿°#í„<,cÐÒoLKvuà \ý´Ç{« ð;ŽNöå•A„]«Õ·ÂPsWqxò–Ozb°ÆEå|ükfXf:Û˜ï]Je°Š%|ñäW6yI I©ÞµQ »ÐîËÅ¿è~¬„ÃÎ#BÖ¾’X+yÔ5mzºÚ‡ß\*ò™ãy6 b–«(ç¥l½XY€­xœ _¯\’ÛuZ0GÿÝéî[]2P jG§¬ü‘x’'¦ËˆÅop””¹›_ ;ÕL3Fs'`eJíÚ¯Àl$øŒÝ„¥µé="–F/:HîÒWö†™u{_+v˜#®½DD.¾þByl?Xý·Ì±Åù à±zà…á.Çx/¤ù¨¶×Ë#ÆÝ²Lç™ WžCèKÜ÷ú™££øï‰N³=I ú»-¿_ù¦µ·õ+Zm«œô:º±Cæ³ÛàC"Rè•aÍÞ¼9<Ø~·š¡öÙöXšãIe¥Rj¿óP~íØ$c[µXS¬íK?þUI»Å—Öóu––賆ëá¥|qÆšåë½-=á.óÕY‹z—!{G¥Ùaɶ¸Eý¸2Éî¯# c3-Õq~Iè…4þ*ù/ìRá[‚ÔZDÅÝ|«.²†\Àd¹}6” ý’– À$û÷µÓ’Æ€Ò(§øHÈàÞºŒ£çt)IêÒ%XMw4aí kIO´€…ŽO5ÛÔçm ¡­ZψÿÊbcüè®Cvº/ð¼·{®k™ðÒµ{=ë÷³hØ {¾\·¾.©¼I’9½ç’2îÝÒp÷ Ù2(=u©KÚÑèu¦pi‰}H}°;ûPˆEe’†ï:Ý­–YI8êê•úz¨‡¢Ü·cÀ'^» «/hXØd/7ødç1oPLy"|úŒrØ|‡l›ÎæÚÞ87þ pè0ƒR5Óâìæ¦v©%Ù…§êÂ4¨5á#6˜{fE,ÑVvš6ç>èKˆ>·H[8Æ6h¤·0ã´º ð·ú›‡'-'_|éxW•ÐåLÛ\ø4_ãC›ËuºJ´.èU\ªÒ}ßÈϾ¸Æü‰vZ¥Mi"ô°ý‘:€qe»8Ío#J/ñêqé®Ä#•\¨$R8˜¿¦æô‘ji÷2nùSawT„HH”ëöò>ÙuZ²ØÞÞ€± ¿—Ù e¸q]–úеÇýƒåsààŠ5Tt#&Æ,³‰,èIJÐ|ÿ:ôPˆ‚¡Í²”3nÂùSÀa{x‚'›R˜3tŽ&ãÆ¾%Eú”“` œ} ú.~z®“ÕK÷8ôJ1ÍÖEåwÈËUθE.ƿɭ•ncì‘«ØsSͱ¡µR'#JLÖÿ=ZÁo°úÛ³’ï+8PQ`¼&^l]?ºw¡m¡eÌ¡ƒc¢ÅH§µEüâKÞz²!d‚¢µëkdåT(3G’ Ãù…­|0”„·ó£}¼xƒ%½Ê䵊ì³Þ)*¥ý„78Ï¥oŸ¸ƒC×n¤ždŠ9-<çß6„ÊÁâûs„®[Ž/ßÀÂH{æ…jšÁ(ÌÌ™þN×d0v ó~2zº5³zïɪ`4 ÍøßÀ-Äß Eü^ÇÍI†‹b~€½î½“"}¿…tû,¦#2ðôÞÆ"!KqXäãS `"¥ç‰†G_ðMñī붵œ ,äñù|òúÏ¥'ÝF=¢»ý¦èênn¦I’ã ã‹_mUtí£Û|µc¸ ®o{°kŠQA…|¢šzc§Á‹—‘沫š¾ˆhêÚ2ŸÛ…mbYHBG4îž…Ñ…&*Óùœ›*«¨jéϧû»L˜Å+n›[ݳ´×Êû~C^¥¯N“K5ÿ}¸,n7±rl\ú¿iOoéàxDm©íÙÒ7Ò_1š©Øy‹gA¥ |0¸­ƒ¢‹½M+]°KIÞÌÝêƒõƒC:çòë›Y–)7€C–§¸Ü|tÜ)ábøb7šÇî[§ü‚+Wü–¤×PoãP­ñþeÆU DRm‡#=«Ÿ‰@;&Á‡&½ìKhdÝ±Ó cđ޴ Ã%lµ_6ýúŸP‡²ása“<Ê<¤k‹n¯ZrëÌlŸ†§y^Ê÷“ÿÿ¾ª‘f½dwKó§4ÈîgÍœHª Z ;¥Ü‚‚JÕnøœïò ™ææãöƒøR¶³`º(­Ø¢ovÇ|ùªp[tÉð•H¬Í–¶¹Êë…™™ \¦ƒrUÓA÷gUÕ2¿-'sòvè*M„*ÈÑb+z²äŒFHÑ„m.ð (Æ‹:ijfÊË'WÆõ½¿jI‘ÑÝ <äÝ<˜ÇÞž†Ó_~‘i›üë)5WZ=oò5h4æ›sí·Î©UD4Ý™0dmÿKAä´ –3I¶w-’æ >¿§¡Xô‚Œ±â{˜½¥¶bê§_ ²š1ã Fë'®‚ ý€z?=TƒWml^4Â庫Xa þµ5}Xµœ«W")'äk‚´`2µàÈÛ¦¨ëؘ/ü2]§PÂH T>==1!ß–$a̧ªÈÞüÿ€!ûú üŽH<ÿ8wš¬ TïrW·8ú Ã/ŠúmÆìƒê ŽË‰ÎèÚœ/Ä$ê&;–ÙJi»æ1QØZ+l²¶l5˜Ø¦`ÃvT+HÓÂö?U´¢Ã`i¬¼›Qûò§#Çc·ü ÿè§ñ8‹ÐËìp¬Ï¾C0ßÔå7X"=ÝÊÛדuSÖe‘mþ‡n–v<rï%KÒ¬g¼ª5·ÿ·Š}w9¿—þíh7HâoßV7´}ÌîêŠê|t½4êVðÊ'Õúý :iLº8…Ö'1þýÞ|r¬ JßVÈ4ßܨÁä²$‚¼úzÂ)\I÷yMQ[7ÂξÑ6?ð[nš+rÜt3"!‚Bš¨É”æØFÖÎ~":Ý\tó+F- ©Ìôeï£à{K–1þíâ4 kĨvï T׬oââ|¶N0)¿‰^þ^n5 íñ]]J“=¢®J>Æ ü– |îÜÏ1Ýæí¥Ü±@³LfÏ¢ùßøoƒ¿Â$¾±ÎêŽø)ì¾0Ëýå_:<9Åh¶·Õ¾°úùÉÁÊõ>pÇS2OA%V‹<«³ç™%EÜúƒ‚­P–™5ž'®9½eß¼Ù÷üWgîmvÍwË8HÂ_‚+LQbÍ–éê0—U*Âwß´Üú]I€KöGoÌê^&’¢ø£SÅcÙäÉïŒ4¹³£úkª,,’O­Dæ0±œ¼`ÆøyÂ5<5:ņŸaMqµç»;ws^6 ltwqRº=ñcIßFoíüÂãÖ0¬ïòXñÜͤ_{krnÉO¢õ 3[æA˜}' D'§×–Èrѱx\ÆG&¢(»Ál Yè© –݃Œt}ž(¿ 7Vœr Ì‘ïG5ÿlÐÀ¡¶°ô܃‰Ò†9@…ly~ã°'Œ(^Œz@ªV9°:c¡ª^ü³°ÚØ—þ>ýÃüújöÔ¾ÝÍG…ß?úfÂEDêhß»ÎÙö"ñFÙíôÂ>A®Ô€-!‡Ø– @«å¼¼o0…¿`f¼Ÿ4ùV€wOFU׬(x™tß„¾o\<*}v©aÌÑ,a†ó)ËÃý5Þcb/¥Ùx³|q;œfâøê¿ýáò‘±tÓµ—(¡tW8Aýž•÷=íPS¾çxÀULeÛàg|–GÌ޻̜¿„¡âœC:w ÓÊ;KkM”š$ÄÜ_7+Š|ž§ƒ6”Í£Â(è`é Ï¿EySª„ù¹ÁiQf"÷ Œ¢ÓßÙõ¦©iã!ØöAüRcÎ9öÐwžKÆeÌÃ#†ÙÑãÑ@kX¼òž¾WO\:ÝüÛ ïÀTÀo›½šÖòˆJ™%ŸýcÉÑxφˆ cð*C‡ ÐÇ9ûk(þÉl¢¶ Ä}Kº?Ÿoì4¥a÷£JÙ§?Û$Œ›”åÖôÕ}sìÞæ¹ “çpKG¸X²¹;ðTWZ¤çòÝê½,QþžV½CÙÙ9”ð-ݳÉO™<÷V¨× R¾Ut'åmàJôHEè#¨k$¦¢©ù¤#‘…5¾x úZSÙb—–±„Û§Š¶—‹b¢H׊ADßåÇK¤)ʉ9E3áùøm½<÷ È`Þ"Ùfái‚îx<Ë"ýЉ (ƒUÓòw6z(t¨ó,ü˜Kò–H´šåƒ^&/R!:bê…yf#" cì]¸D<©†š>¯¶ÿ"m2æ‰üfŠÂ/³â²’ ,›6¥ ï^y+Úæ¦@¾”$KÀ*Á·Ý2eÍY3­°ú¿šx Íü!^QæQDB®#ž4¯< ³Ÿqÿ†á×ÕÉ<ŠkƒnI½VhñibûÜ2@9Ñ‹4½½Ì[Ä­û–ùVN*Ô# wu¦ºEß“ Ùg2³¿0Š3f%ºûÙ4ž¸ c½œòدI€áÖÆ9è;“µ…ÄbÛå…µîékêÖô‘É®±¤½zýr”Öfü,ÑŽlêrù×&õc[®Õ ð’QwÀsn ýÍm­¶˜F>ø%“âB'ý7ÐÞ^PX²)dK«äëVLB~|\§f©Æ¡çc*lnP𥘀>úÀÇßsš¥´?\+ÆRbX‚&QÂúe_.é!êX$æìÂpYø)’‰pÑ/ñ­ÿ>Xüë{ ÊiPÁ²:îÄ›Fs}\^Ó…ré; ¾fì çUÊ FÁãŠçÊ}ÿã²›g={ùÞÇ(¼Ôd& ¬jÁÑ@B‹ßFtÇv«³›²*f„Ô*]íí`²j¼úGWopÂŽ£™#ÔÆYD¶Å_w”@t5WzQþðž° «6éݙUùÁŸáÓ!êI9¯ÉÈÔãþÝhV»I‰#/Ò×Î-Ÿî®/ ‡;½S=~pùü`»ÁýØ7WTýJ”Íx4žÒà½zñgž–¡ãóÿŽŸœPÁè³2~´áL^Ê߀Yd…"Ÿë¯çO-¼ÑŒ\²#¶ÙZªª_»ö–£üABæÜPHzJ ŽîxYQ/I×ÿÆ fÓž@w4U´±#aPüˆMNÑʲ˜‰õi.×þšÍæ¨ôã$¡’[›ÞÂö·ÕqÏM~|AÄÑP€@Ø·&ë2ù3¡¿¶ºÔƒgéD׿ú ªœ)A鄚¯·&’júåØ5IŸH&¬OÛ¤_‰¶õ˜ÚÁ7V 쯯ú>úÇîÿ{ÜO&AÔ Í 6©§ë=Ñd<˜Î¼Ïö]IpT™È ²Yò%ž¬Ž»ÃËòy¿@ò©,.3ZPÛÈ™ªñÚÊ¡…oU=pý^vBÄçþÒÒzWWL×ÎYWöâÓ@êt¹x›˜gööQCHRaÔ²Ï;±äýÕ≠q?‚‹òšËµ„?‰åÝË»„˜LPÞI>%>Oãqé§ Òí›&ŽÉ'4 ”£öj’bìý«P sòäwsÅ-Ý̬™‡„Ù—HrºÞ±d©Ù‚…õ½DìGÊ—)sˬ£ˆuù\11’gdðHôÑzÜ’@f„Ye˜)¦ëoüK,Ès†ŠèÑ çôNÓ ¿cï= †ŒÝ¨ÓfØ}pŒZVÙêÒÑ}.qƒÕ›Vn¤á9ïà ²ëmÍ”ýBÚÚÜ=š¥·wù:†õâì³ÉÚ¢50 ‚+¯½C¥†ó·Äfmrb1ÄJÿ*aX ®1j <þfÖûž¦dι LéùÁèwSëÜ‚XãN ˜¯ 7ƒ(ã†þj¤¤tàî€ã,Ê\pÀò8æaú;\Ðżß(ÇL?üˆh1Y;÷yLÉüíµYl>Aˆ ccƒzæCljcJtñäóÓû'ž€ÅrVû§àp”Ÿ‚ƒl4Iè -%§˜2‚¬ú-º š œ mt$|…]~×~Û£¼ë×ÒѼ|ØÔÚÒmriæŒI:%<'ÌŸÄ;Ê´²UûwÒ¼~Ë`•vg¶_b^’ +}µ!5œ¹…Œ9|:3öõÜÍ4£?å¥.EÉC šb«mÜ&/ ›ˆÐùUVÚC’â¿Íà!ˆ‰Œc}WUÅï§ñZ+"£?Œ*Ë—êîûó³yœÈòHË“¨ò9w ÇÅtªe`8NÌb»0«që/6ekyRŠ¡M”5F¥3üʼ¢ƒ¬ý#K©ì,udvneoýÏÎZôÓm¸2X­XlÎjM›åÂ{wÔ™3ªö|¨á’d³|ê€÷|ÐØ7M–†7Ý OÝ ™d„­˜aÈœ¹36»¼GÆ«…±=ünÃû¦ÃÑ_–P÷ô‚/Ô5Vhá&R²qó§$R?P»ÔQ©,\+iŒYÑi\ž`dŸÂwõlj*®±ì­Ýô.’£8Åd£HDÂ/`_‘JÖ&l$jS¬]4"ï&²/·Ð.ž+öM1Ê„ÒgŽAD]êžÌF\oÎ<,Úbþfq~[ÍB÷º2o Âeµe„pÍÇ&p4G¿h^Â1UOÇ40r}…þUÒ±LRþég„¹˜É±[í-Éj=‡ñZƒVÈ(ðw:TQ'uI¹%¾.¢ëWþ’èñäã“P©uT%\b=¤‚) ßpl’Ì òè ùƒHbG«²ö)ÈV/t3*:žš¢räÆ@ú³ô§WÕ ÑôÆ>oÖÃ¥ã*v¤jhPîïè>ÃØV6¹mù÷7'ƒ6kbÔh!-ð™öñ^+¾~>¶âdL„«UgAæÆŠ©#$[ùoKe°ü‹ßq´¤ñaT=Õ´äÑ{ Šs˜…äÝïÛ›AåÒù׉jªt6¯fïu-TTf:ݦA±øßW¬ À>i³~ü`Q–¦í[‘»Ç’.}âÎË‚°zgFè(½ûí9Eç|_W Sô IP“ÑéBõ†"éU1Ö@kòÀZ}%cBê_°tZÈÂãŠÚ£ñ¹$…¥ü;§Å¾õ­ã¿³Kâ |8&:xöYÁ•uα¥3~ž ³Ã?õ6é»U EËS÷7 µù‡Î»ÀÊßÊ¡çG"2EWã´èã_‹%J!€…’þf>yO´üÕû­èS©8¿;wV~‡9µ.Gߪª›«3E—¤Õ0ÇÔ1ÕeÉ`|Gâól>Ö¸D²àX‹¯/(±ßí–ø^:xŽ›oð©öo»ôhÑ;,ûÔóuªît=÷Îs{½ŸßKŒ'{r
€&åg¯h2_ ÎÝ–ˆÅ‰ëUªŠ17V,ο äožH„lxSåXÓW‘ú@¬Bd©Wîf vìÉdÐÂðßI ¬ˆ° >bŒQ1 ™ôyò/“ᇤVJã®íAÓáæ…ÎÆxqÄÕîxÒ֜ķ…žØî̧ÿí//pÁÓ‘ÊùF»í¨‚B_>Ä'Aí¿þv#P‚¯ø>(Ÿã·:>F\šp~fÍ6À¡üQZ£ÏCyD…òt9´F³Z8²2ÜÌßi=Qú­Ÿ£@PÁoâ‚8+w[ƒš1d‹;¶RÍ“3 ?“C[}˜èË:êÄÙÎ& ïBü{¥`Ú0€¼f¹èŠâƘN­_3jÁO<Å?6e ÇÕ½>ë¿^ŸGêFKiF>ê‡VG¢#¢×xV=~0U*ó1Kñõ®Òw;×µ§wÌEæ·ï.Ï ‹’•÷:þl?L[Zíñ<ô—£—Ö>ÓùYž²ÝX¼àV<àÈâ0ã¹hNx¦$B@õ: ryRålz‘ 3nõÂñ~ÄuµM3ûf¶Ïõ°äÅõŸ¥ùù- ‹MñèˆÊÃY‚„¬¾:[)FÇ î_å§âÒ rÐ. †h6&½ `+3»Èƒ#›E`jzq&L ³öhPütÙæÍr4Š’Ã•àÆÒY0^ KúâYú*Žº‰ ¦ÊqŒ“4éÜ %gYÒ—Ó¦R3iJYŽû¢ã¡SšI=®¹:d¿ó OÔÍ·Ä•—ÉF£Oš û©Ç9ÔànÎ¿Þ “³ÖHC5ç¸ÀwÆÜE¬EÏCTA?åîs ~aúv¸öÑŸg¬©ü!ªtsCúçføuTÃn·S —’VY`sQ¹h4xwdƒ8GÊêGøÐî<ŽÌ㺷Àcñ¥¼0¯&˜Ýóf3§t/µ±fáþZhLÚ£áß[॑Ô>×µH. œ,“Øé‘/Í>´n. qyS¦•¨3?œÖ•ngÔw8šƒ©žŠÕZ‘ôБ~ :Ÿ á4Þ¢”Ë+:É­üƒËж©Ç[:*êÅ:¸˜_ònY4Äóªö¯¹Š›ØdžÊ€Pëßôœ/.Ø…¦~]9£}¬ƒÌ{áWA:GÄã+´%èÄrÿ­{Uèå’k¼š™dæ)oR­'Œ8š¼ØñÎ4K÷Õ?·ŸYô{(î&jùäõ#x—í$¯oƒzÖÊöB)cíiü(,M1¶íïÿ¬Îo%¦ ëûîUDKK¥èžš¶²Ëß@!Mù9Çœ Ü»™¼ÒM¦°ù4ÏßÙçµ-­õRœ%Âb]"žjTÎ×°öÖ#SÑ ‡è‚ùšÎ½´ú¹‘Áß¿è÷úeþò6×MH‡R¦­k\$¥~H;ÙÞ$ö‡¡@A²F/\bŸôWˆƒ†D˯]Wt£–ºqíðàj®TEÊJ)laìdÃ`?~D}9#Uãï:;(jÁ}„ "{Ì~å1wÈ«›[3R/Îk+2Î㤂+]-EqkÚ»×42k±Jä^”HÀÁñ]7-Jéäœò×4C”ÒL¹í_š–ò~3i }>sÞ~/ßÛ^ãµnÅÁ)=írºhepÍ–ˆ†ã:{š×»ðضmv•ôÁç],ë4ÿm~âù!Zæ7Ññ±?)š¯Œ1á$ªÞ÷î}Üo$ÿêB üu«ŽÚ!’FNÒ¾çs¬„Ø-à 2Ægïôs|›ÚÉïÚbìñ”Y£Ú®_É›…Уµ±¤£ì¿=’çAß7ò6f¦Ac¶7„F_»Äiºh–µ[ü4#}Ð3së¹Y»|3|ÿö­±ÒG¼ynlŽ¾Ï£*èíP kѬÂ]bcÌÞ—û¶ ¨]zhíñÂÚì¼áçâH„5£p´3hB÷TËnbU0þŽt'£N7ćšTòíú<È’ÕJ`öZ‡,ÑŽq·Q;Ñ éË…ü]ZIÿ$w3 iOZ"ºî1a)c‹ñð[é鉀ãÉdÚ‡nººß4ÿ%h2’´,Ù¯ 똗ÓÅbý÷‰3Y ƱR›ûý)ִ郶Œ~&:K×½KÒÕZ—?èŽKoÖÒú@†Û7¢0è¤à°Ñܪ¥¿]ý%MX€§ íßX>bYÑ_ïƒï¨yI ÚÓËà¸m¢ZA‘Êa<ṞÔ!aŒ•?Éÿƒyhí7}ð¿ šn©¹äƒìâ\È"²íùø.w6Q>Ñ›»ùæ¡4õ¹¿Ã¦›M•Â93±• «º¦%¥2t ÁÇÎh~t6ù èˉãø‡:zíÊDDâ>€Â4;`ç¸JÈ@ŒÌX‡u˜³š4³*¯ ¨ºõ˜PÍ‘Ž¼Ñ~/ù«Ò[:ØÐ4ËÉËe 8ý-6È*.ûãܘ!PÖ“™%ñ§_›wê]bÈa Xøú­¥¿gíÜñPìbX!C$ÈÍØ^«Â,³É·Ö&‡­‰ ¸öo ý‰êÝCOù^Á¾*Guß'ÜÝ'Ë ëÔŠþ¢€êWG:†¹Ù’ŒD|¼BITá'™bþUÄçB¿LÔ?š ø°O¨á—•6X9’MžÅÚ oï¡ð9^{8/ÞýÖM;g* »(éºÅø— Ik¾‚ïOµÈ$w’†ÕH!» \ÑY7÷ÊÒ… ÷´Kš_Ù5Óü¾ù+Ék€©JŸ«®UxYT‰eТéàø [O4Æ«£jÁG  œ^08é¾ÏÒŠQKCI½/¸A¯*ðÄ}Ì)•×.dõêm[iýÄa½÷_Õµ®d¿Ï ¥c•eŠ‘pv'¨ܬ¿PÅ×t!ççðAþ¦gõb^AªhdëYô·™K¶á#85Z`ßoÞB‘Ï·²¹¾”‚¿Üý7iúAaEI+[bù[Gs¾7Ó8‰‡J¾¾ãLšÇþ=&us¨7Ùуæ[km¤>ëÀÖœ„sÈòX¶äkÛüúœÆ£õ:XMƒ= ÈNS:õ ãõ‹_ Îñ¬=úïËĺ‚Í©kn2°OD>šWyŒ:æå±úÔ•ðÜ4'Ûo¬žtèWIqH}¸^‰ñ hÀ’¢Yš“f*Ûƒ$°åƒïV¿{aöú¸N4§R·½,¦wÎ_5¾òAUIHª˜žwà%ÓiÈ0¦É†ÏýÍ4óUPØý¤ÀÚÁ#°M}Ø·_Ãöüæ2¢#¿\ˆÒ~4h¦Vë·P¨–¹Èv?‘NkΫ¸Ï:+ 2†­•iT„G¾%ÿŽ’ûHöý0ÚœGMö¤.,à6&»éRYyiýu9/;Ó3‰¾žÀÍo@OêWöV×Û<ð·ìéêx›ã®ë½ý£79T=ïØ#uì"ÕSl¡‹dš6ä:Oˆäb1Ý=aÙ®Bw¥”š2ðÇd;žË¼€4ÐÙø‰1ÒMOïü—¶J.dh(!¾–Í©@¥.ú>ãàˆXÈPñŽ›K7¨/PXÑ2xFícWu—¤ìH8føÉ«gªƒ‘¨*ÎLCÈ6²v½|B»X¦õòö„ož—Í?ýª‡ædómþõuuQ8ÿZôJ˜êp6ܙܓ± Ã@û‹ž•'•(½Þl·¶VwÆ™.l{ð¤õ/zG'oƒ€± “–Õk§Œ„ýõ¥ýʬbè & >)ðÉ[Kà ³ÀY;ã¡ê÷<öCÀáããç.Ú.¸.£ø®O`L§+£X0 šâ%eðMxô×Ó:¾W¡„¡ãø”Ûû§”ø6¬Gc¢%E…ÂHX¢msË{¼(Eìu°OBð“&³½dG½N‚â'ZÓ:-wÎbIñò qö:£;"ÀýœãåñÛ™ƒƒ Á£!ðº“'Ùé‡k· ‘Üs Éo[©XfÀ[x¡HWa±ñût‹ÙgæŒR¹ª„v¥D^5ß_÷86pΪ]R>–ڣі‡uÒ¬óP­àâØó×P~n¼ˆÂ"º$ñ2l±iì/±­27?¨oýÀõÙü ÷­03R)eEl#U…þNÙ±ø Exp樓åžĬô² m%fâ üîçj¶(‡ö“ð"ÉÖ‹l\(4˜phœC¶¡ zÎÒu::p¥úHó­;(Êã*Ýé„°k'SS®‚WvåS;@(ΘÏÛ›Olú¥У^vŸÎøyóÊKÿÍ ITª°'DÓ˜‰Rƒâô-j5Ðßù\ã1HØqþ`é }?÷áÝöêKá72©»;¡Y `éÚµ|ö…^†yÍëb ’¤Ì&½ÑcØè”­5õaÂ)ûÐÉòªÍÞ΃ƒíxŠàõ E¤psP>›šÖü!3Uüׯx¼JãÜð'ìÖð…Š@:X«Eã9Âjí×½ 6.wÜ%è覀¾G>:ž¸Ò§ÏálmôÁ¢µ’ÖXÝ>½|ôPßÔ‡Ýì±hã+¯öHEýêºv°blXdŽ,F†hØó‘*bSÁ Hsó`iUå͸‰·ó9è&&å‡ßϽÆWÈF®iÕîÅв± g gžÝ«'XŽù—$’K!¬g…_úƒ%Îíž»¿±K¸LŸ»xB]Ý‚~g)žê×ü:$³Á{ʨïöõëP‹«ö¡î‡™òN QŠEêm_^d¿ôT]NµIHíýÒ}Ww¢9xêorèAã¾äüÁ—úœ]•¿µ|ÊZGÆìBnôEMÔ¢%7€³P(Ç ãí~”õ³…m‘©™azð€º êmôõ¥Š¾/m;>ù`ü¼Ê"¯Rþqu ‰]Éîâµ[.%i½$±t”†‡ÓåYÚõ¢çIeË 0¿VˆQ }iŸM' ÚX}ÀÚ³­-_j½‘82¥Fî­vîËý5ÔêR¶…ïTnÉlSQKvmpÃ3¶A°6J[‹zˆl–År®ÃßMþØ÷ísTäh[|zŒzD¬âà¿\5™ßDÔ!1ìÅI\­“)¥d—ïЛ»¬\cå:I=†ài(f·ƒ‡ˆ¾0÷šj|¢j+Ñý}[š›VJ <€hwõ´êââZ¥Š}¬W™A)¤úw¿TÚXhÕ`£üø‚¾“(~[a‰{a\]cçWTü/=:ŒSØylxAÞÎRǧ-Q_VŸo;æ*A۲ʚôzš~=Åz²[ŠÎ^ñªÒÚô×[}„ÐCJ=Áx5ìïžq¾ìËDê¥â?Õ‘*œù h`IgÍL±æsÏ6}sáH%O’74‰}D%úë”Ð<ŽÖn‹qú_6Q(+§”^8€ŠÂWǃ¬[ÇOÙ_û´e?Ú7ã`*Y‡ÞàÑ4ñϯ›_S×WAª]ÃF‰Î¬ÆþO¯c 똘Ê~\Gh1²R2t„”13çêy†äMìýC>t›‹Aì÷¼SÓ(~¥Kºü:æ³ð7êw6ƒLñ_h|þ:îBLÙa¢Ð¶Ž­îßnSBA¤V,Ï‚ ó’§r*„K$D[Þ¦‹Ý~].uzóõ›DI}EêZ@àÍhÃõŒ?}é:_«$5ý'Hnz¢Ü8©vòÏÅ>!plµÍ4?.vŸ»S¹ÍPz›bˆ ’bè}YC´$åZ_²•Ô»´Ì7Õtä®|}åXi£àШÿÈ ÆA ¯4åÂvŠ”+šnX4¿©¶g ªkêm-aIfó;ŠÕ©@„G#˜7DÔ[x Úz³”aíÃAtäùþ!aôñ7I DÎû†j£tŠW¯ß†ßC4T¨÷w¤nÕ³aQµhntÖíc†|íÑ–vóhê«ÌyÝðÅ91 Ç­ó®eÚþkÏÈ@½µ×ÒÍÝõ©— Œç¿¾îßšˆ²7cà4À0\cB]#¥Q=Ž4R‘nÒž‹¶þÉâ{A`H”^j"ÊÇ…;JzWƒ³/˜õVþkIåĬÉ\/ ¥0“ÖMèå·Ã<äTv­<¿‰¨ :^3ø §»Õ5ÙÀ0¨úa+znØ]"õ•{ ³àdüÖ ìÛSF±?ü@ˆ¼À¬' =@¥L¯Øµ©¾Ï*þM A>tå…ǶL¤ÉM% uöÖ,ÆûÅþ{‰C%›“lRv8÷«¤Ø×  })I»2JÔX‘nžü9‚"Alìt÷§ŽØò'W˜®v·G,_ü GìÈšÁÑ›š¾>]q²Yïät0ÃØ´çm/¯ ŸïVÍò¦æ$Q“'ñecqf²„ûÎxco÷[ ‹G¤q†j®S½‹õˆûIPX·ýgELóÊÃã–¯(³ûöªú­wzê-¼\I§®¿n×ËvàJŠêk]dùÆjë ó MdÓÂê'OX§ "OÑÈzܼ…6úñ}ý!­{ÐLú#ÞñÛ_>4iX3J6jýN.ÜØàø-…1¥ŠóÇfçoãÔ3Ì!Ãpåc,ßÊ»Ûfñ;MÎ"m½ ò‡ûÍüSÌ‘Òl¼ta,„Ëá(6õ)"Ää[W‚û°OM2Õc)&Ów7>JÑÂx5âž!Þ€èÑK¦ö¸¿ï Z3ïæœH6rÄôe@TÃ,‹³&°ìןˆVD œø{lD׿'‹¼pÈ;máv÷Kðˆ—iYXhŒ^Rríï¾cßî,4³»´CÚf¼øXÔuG*¢% wËjºÃîA4mZ|@Çĸ.ª¿Ë·¢$™_ã¾¾ñ_®JÄÚhV–Íö:ïˆ +Z‹9ÿŽçØø5^ú|†~Þn:.Æ’ýÙ\¢Ö\ѳ7,§’üï'H±Ÿ R>¨Ðò÷>ßHz±ÕÃXÖh‡câ‚¡¤$ð’—ó:^ü­žVÜ\qåÃ^ñ_¦ üƒ®}&•ŽCîøúvà,æM’@¨¶+ åäÞg“¦Ñ¶^³ê _ËZ²ªg®Ðœn‰\=‰W…'ùáƒáJz$´Ýf UA¡:ëó[v7foòÑ·ä¢P1U÷Ó´Jnn:]ë¢Ûto.Œˆô–Nü>Sà"¯º?¹¥¨~’k€wÎbZZcÅ¥ N’wo¢ §üÝ™ÁÖ÷MaÖ§Úhÿ½,¬×?PyÇÃif˜²8bt°€Žõf‡ÛêqI ÷¼ÄïéGª|þz—ÅcòO\ÀÈÕ4—ãZñ(¹ë6–ëó|Ìu´Žhš© .ßYnH޾þÛs’Ë¿ +§[p¹%wƒÎaHˆ§]KX¸‚ à‹ŒÐ$päªwSä&ˆ7ðÙ D Ió›–Íûa×QfïBî÷¦f‚‹÷Yq;HóØ'ßž嫬‘·‹HýY—ªnRMÏ2ɨy_Pcˆdzˆ\~~lõ”öõ”¹oJD˰@ÙÍäÖõ#ù@gî°Û•/£×Êœú÷ú‡6øÕë΃–ÂÎׇ‘xòúÌ{y Då#"E&ISXIÁ©A6+&£[Evõ‰Ù'GV3 è{ùm#Éüù.`G zìÝç°EuÆŸH°a“Iˆ6Ê=³¬¿¡D Ø­i(šž„þ€‚qSŽn$ÝI©QsÒ‹˜@ "YDtÃéNöKN¸³Mß?)XÿÆå{?Ñ fW“Ì8ê³ø$À«Šñ¥ïdÖÝ¥¸ÇøO ÝÈcE `ø sߟ¥®©ôçeÊþħ§¥hÁ*ö߿ȸñ*+(ã=þM£“Ñ(­óä0#gh’8 ¼ª~¿ƒŸ3 Q¶\/Sv–èˆwF±r0D˜üýù¦=‹˜måFc|Y;Ñߣ%²‡DÈgƒ*]ŒãUN‹ROA…á”íÍÆí×ÁÞ×d­CÜ}%¯/Π ­¬Edä7úò8|'ìäK½X}Y±›©ø¬¹ög««CÒén“Ÿâ†Çßû•<±¿÷q6p{¬ÎîXrÆ‹Ý$d»f¬1J’{ŒO}D g…bª4vY*¨ø8ϳ3?„2™ ‰x¤YÁÐü$®ÞøõSaP‰””Ï;LöFú6Ÿ½¼vô)^ZŒ0¡%"Mf¢€üÚtýl1œåoqz{0`î«_¯?ίôºÝ½ai~Ý[}‹°¶¾8f±’\I>•ÚÑ›(4õº9¦<)¸2â)öífào¹¨\Ê÷)‚‚pÛUÞ¦#»Oš×D¿kt…ô-²éõ½J3‡Üt]G`Dö±â⫈]éBÝÙõùGÑ+¼‹÷ !@:¯x#ûEJŸÀ1üª>ð®fσm ƒ_§'âóc_œ4sã °Ž’·-Š^V'LŠ%¢ù;«‚ö³Óæõ,ŽIï8³=ÿ•&6C¤àö;ôµÊ§"nµDAHkA¶Ùã²ù‚«GS32üwF Ähv ÑðT>à­s"dﱇ›þÝ?HšhÐf‘™ÓbÛ6¯ß‡¦€_»×gÝðcVh¸Üb?ÂA…Þ¥îr¬¶VÓkŽÈ¿IÜ)_Ƶ4Ýö/ÏÒ_ȸe„ºKð¢›W½ü<@—v6ÛÙc-²‰ Åh-0}ð½ŸûxŠh½mXJ¨ædc#±,¯¤²:ò×ò·š©/:ºR`É]€…ß,[ÅÎM¦[ËÜÆC ÍÚ£bëµUÙqÝ¥i¹mR¼ÿ}`õ­bÚB¾ÂZWrÒÑÄ1Çå€"ÝØ=ÝúÑ4ôÝ ã(jš¹×íȯŸá­Ä®þ?¬èm…ý˜S•W”+ÊEfÜP©Ü—lÁä±k"º® -RGñDðqì;–êÎ#ÿcä$Ïj²‹+†a)‘è»”þÎéÿ_êð¥ZæùJÈüs‘M§]å[‡Î§Ÿ _æ¤8¤'~ã0öý³‚P'Üo|ïÅ6Õï©ÀÏ*/¹åÒ§ü…M^,3µã6 Ýh|ØÚoù9)[ã/ h~7/4_¢a­¤:ËÛ8<ìƒe²çiÄΙ°\`Ì䆦 —µEú жÆÿrçP`íéà/­BŒ±lÉú5îf'âr÷~!PüÉe‚‚‚bFÙ_â¦nÐ’H@ߨç\»¨þÕÍÅÄÏpØûö«ÞÛB”7ÁÔ81&k•—ÿî¦y¹›¦…]ÁnêÞÖñ'8꾤„]Ï„m}ÎìÁ ˆhgA4‡q¾¾z~jîN¹Ö³Ê<_³øïEÒ‹‡Çõ,|7wÐV{€0do”ÛBçÔL9 Ö¨G£ùúÕÐħ¼7!=fŸºîÚ¾O_Ý¿&¦Öb|ò{ô€ êÈâ‡TTÀùﹳæÊ‚p$éxˆÕ)ûÙÚåö_ð¿±+E$ùEY¨VøCžPY©Ô®ÿ7ø{¸ýÀ‡®¬Yãr?uÈëPöÝG(ÛÀÑ}ŒØ>4ØÒn¹Ÿî»¿,ÁË™šž$ð!.C?C8£›…¡ˆ z)m96Þ‡Á²’é Ï]rû™.˜?‘öeUvIY:’,‚²* Œa9cµ7d×ialðóHáCg+Ry&°p#ø±Ï€o¨èO><¡{Õ}ˆQïÇÍœsÊNX6>÷D—0E–)¥¶þu;Ô7ÈÉ¿¦a<ׇú) wuå„Á¥ ¼úUÆÍ¨aþ-ßbºÁÛÝvä® ¨¿·<–(ÿifº—t¶™ ¹¦+øï½ä`Õ‹OÏX”ñúÚ>šmRÄŸ¨Ý2S¦¿þS¹‹º<Kbþ<•¾¶QŒvžñ–%ˆ=ÏLíÎ"h-ù QIU·®/‹Ãøæ©3¾qÜ\£½q’GÖ ,'ðÁœ_„¸o½wUo’ú¥•œ²uFc f˦^ãTºø£/”j"Ë5Û.EÔ••t“îË3hHD&Z-5|>6õXQíÒìÑW{~'‡CêæîM»Ro5 ¤]œuív1s§"Œ`«Z¦¡wsY—Ö|ຂô—[BüÔ ¼Ï‹æ·˜SÆÕ’Qgúà4¹¥×IStmMýÛGÛѮпËTòö}aAÞ\ò²uk°»¬Ÿ™Aº[ßÕ1RðXçdé¶Óô …S¿%¼gŒ¡Üg™ŽGEí½~v¾Ð>Ç—ýì3I•ìl‡¦”jÚ Xjt§]ÞG àYb€:±Â‚DL=¶Íг3ƒäÖe¥è,Mˆ.œ]²6BS|b¸¡$ ¤d…æs•jœ| ±’]Ï[B€´h–Œ¨¤ÔÉ2]¡÷œÓrðŠ“iõmôQÞ®‰X¶W…ÿÿuòŒðTÒ:à{+?ü¸¶`ì"¥ÉDCî¼ÝTÓ Y8Ñã1 4]rîÆ1¤|>Hm-1kKÒ‰Rf/ýL pG¾ :Ø[ÇV G0˜±TjÞô-gl§þ¤2‚§£98¾ƒœUQžZgô!·Š¨-Ü®oºçód®G]*‚ÇT|øï'W…¿øwaŸ•ƒÏ?¸å×þê"+Ž“ÀFŠ~K½ý”:kíž=óˆtä¥ÞûcSjãÿÞe†áN…Ôö–FƆHj}g[FOûw¥@z4Ã.Óë ÎBPýCŽ^EbpdFm|.žrVÉ«òA¢¨£3†OèIk{%7†ÐgX¤µŸÞü@«–³rGK¿¤îîí}^óð”^ zê_ùÅ2¡|o¿lVÊÀY‚ˆ´êW¤Ü°8 ²7éÈÀ›> ùØ΋Lýá33…½_~ ¼âäøÍ·þõ0ÚØÝK’sŒo±Ïˆý>»·­/眓y‹?Å·ÔñXÙahÒ¿CÙ¯‡éF»Ç`t|"ßwh@”TOCÑã,+útŠeÃËãCÏù¦¹É$ýŸ?y\fßÍ/—Š×·Ôw¢ùæø¨c¾Ša^içuÎ¥øý†C àõ’½ì»µˆ~àvqtú®ØyÄ’Ûû¨k‡_óÙ›æë[ˆã¦ó¿£_Œ‚èʦ7d¸¨»ßü¾«¦2‡ö ‘¤JdÍ´RJöZN°Ù7 ÊœAe(œi¨4PPÂ'›•ÄßM>ð7°½ë—[XOòàóxÄ[Ï'9#ô¸ª#÷ 0%¯x¾ÆýŠ¥Žm&øÕˆß =†¥@*ùSÔÁºÁ_¼M%<ù‚k×&T%ÞMéžú` êç}ý}8Ïð¼ó»p ûNi8Íù鯳Ôæy*¢œ›Ýl:«¤‘Æ<Õ8—ÓXñï¨A³'즞ÍÀD{¬ ËÙä)q¡­ÙØOfýÈSý^´¦€‰ØKR×ü]ðWÖÔP¸èG­Ò}½_Â$>$é×OÌC‘Ô“4’éøÙˆD1Ž×ü¿–?œ;ýÃÑR½pEæô†&(€¥Ù¤Ä/š‘—=Šzc&\nè˜Î·Før¯”ež Õ}ð“©ŽI6ôY&æ¤Øåî×l½µš/MM@ð¦¯M§`†í©ú¸,?§ŒÆ”sÓlizB…7hÎ. y÷•˰„9²ýÈ–üI ¾úèëùéi½jè¼\¬sì¢Àq&Œ.™Â áóÛžÔ3TLÑn2$pȬÆCyõby‡ï%ŸX·0º\"P~„yŒ*u=ñHQ¥|ve¨~þ²9UÝðбQj†"9㊼ëwrÈÞûØÀ+5Ò¤ wÑgÔ`.:çQtMÎåKÂYèá— ØÆ.(·i%ƒbþQ ðˆnœ±/ö³j(,á= Q¥A‰5 ã µøD ›ƒú»¡'d¹¨à_å¾àl¤&9Q‰ŠH ú“|¹õ»zòÆõü‹˜wªkPû°M®êƒƒÃ~@“@÷Íö8íÏ d]¢½¶l6¤j{”-fxúâé@Esaµz «dÚö’éŽP?Šy½©ǡܯDÉ4•o7Â}žrR tÅ[Ï6Ô2Ì$‚—[RÞݤò NWe~"Ìù,KÄï@? –w7ä/$ÜöúV¯ƒP$â'F¢´{Ù3µc‹ˆLHëüý]f뇑}Ë=Á¬×ڋמ¬på¯áÐBé8¯¾íYH Âû¬B†¸óx)ûxlR>vȆºš³Ò]ÝCøh#bWW‡½ÒâNÁF1k³OÁYrPÊ©ý=Š!x§°íðqq w /[[¿]G1õ}NóE;[++–/;=U šy/^‹ÄD±™,ó÷“ž ©ôY3…ó}öî’Û{|'2Ë—ë †à“FÇ£Ïý¢‡ÑôKRÅïèq=6=ÿ^½£û{Ï,v‹/VºðÔËߤÀh¡_Û*”gH/ù4“¨˜§z’š7hŒ!h³Ðj_4æŠÓÂ×ñ¥Kà³=!Üv¿áö”Þ:»kŠÌNÉÿZÅ"ºÿ÷êÖ*’¢Îž¥ÃE1»Fržœ|ÜX¶RLN‹µÐVùœÌ»Ò¾ßcîë©¡`Áô‡*QbH³ý |§[ð»¢~èÿk"ןN´W\-O­µI†<+yܳŒ7LˆqN/Ós Bpüþ"±ë7âÓ¶rðM}Ù¾²ã¾ºñ"¥ä˜;vìƒ/ÎZ¬#þ=xH@<¿|ñ˾ªå£_«.ÍÑ!Ÿ ¾Û7„sɰ4 ®¢N»iv¼4Þ´·ö†>ë¾<âÃÈšá$ºf0¢„;#Ή‘«CQÊ5»Îé·BIuQÞþu%KüY¹ì·6–“e·(˹ovù•¾­P ð»ÆÚ!`¢·â^ëÜ:x½J´ú;%Écð³GÓöôrâó…Íû0I´› '®k{z ù„÷f[¼ú©Ñ‹Ãb P»ÑÀëÞ!û`švEìOT%:œå»ÜWY¦7wùšhxÉýÔÉcdèÉ÷Ígœà]bxäèõ˜*^ÂïµÍœ[_ª944)R* P)5a¡’d …>T&ŸsøÔò2†×תqØßa×Q—;{?e½7ZùMþÞ¢‡h@o?޲!ÝÞ_‡U=ÇÅŹ}àâ_ŽLº)ÝŸ1Wø ¬Š÷k.-9o‚ÿKV²¿&G~lõЇ1ïx¨KÚ½9ä¯ ‚$l÷è¶d}0üßp°¢¿×†y_j>sžº[}ÔK‹½8(ìø9 àMP÷‹ ×0¢ÆCç2ØßmòÏ {l¬ÛìÑzýüwO™?$Ù·ºf ±D£ÅO§Xת+ÀÔl‹#e'j[ ÑB<;õ„7±´í›‰S$±5O¸=Õí‘ZüÖDÎÃE‚“’FûÔ Æk¾%˶N ÏÅÅdÄN-©Øò€3ÐŒ¬¤ç7á/Pßú'æÃ¿Á}°£ýVY 0dÿc!ê8ã<èq+ð€WØÞÍq(ü Ùk5™¬ ÷ýwû”1”ªöªnH_ëÀfUiÌGWs)ÅÝ/!ÚÛµ>§À"0iï¦@é)°”yV|­”ÍOB…óù#’¸³‡‹Ž¸~Ë÷‹;†ïN2[åc¡.oÐ#s382xù=\eL èyÆ‹[BçÖ«­Š!{€÷(`(ý©-%";Âóá™êˀ̋‹¼ §+ÙÂPïâ})xท´j#æUžjà‹ vÉ 6ž5ÔQÆëŠ8EY¼±-„£ñKyòñ_kà€ç>å´YšÐ­¼QXîS¦êóò‚`2ËK:¿IX~Ì•iÁo=2—GV1-nÁ¸óqúï•x¯ª˜]oÏAô¤ýÛÌ=]9ßðã>Ÿ)vƒOù絟–.é¢þõÖ/U ñÂN«W¶tà|“Îø¼£ý£eq±ñuòöÎÚ°€¡,9íT#B=D}œ™Ï†gg¬ËË0vŸAó“©|êÊ!ðß Ênã{=`ƒª†Sñò>ÖÍBp4þŽ59£——õ×j|xHVvûøsÄq×½ÒÑXQC+ɯ—·_ …ä%IYH!vý"zïÍ·9CèH0 à¨ÜüþÈË׈ékÐK"$Ieo—Û1šLYk­û»¥P0ÔF¿vèî>6÷Æiq HäJ|?…jí$¸åä5r>É÷º#‡énÞ¤yÿ‚WnG/cz hDÙÙ+Ñm++~EÎçAyöN®ý¥û0°V{ùVa<2¾èÈQè}¬ 3¡Y›;B?Ž.‹:ì…¸¬ª°bÉsM‚L=<~õíPšZZf @&f¢>lí‹¥¦’™_³•ËéŠÇOE¢LÄ>Ë«äÅö5›!½Íò _ýÜ}Å1{–˜:ÄóÄ@b@¼bçÞ‚Ç oﳺßãÎ;¹Š~¥¥Ù¿Cà›¦­:/ÜAî÷ÏÇÞ_*’Ó£¡åB˜‰ @ødsEk?6mçzãï5/£¯žQ±®~Ë—‚‚ªâ`ͤ?ø€™¿5¯úuï}{íf…¯ÕAt°·s%üå]¿œ¶ð‘ÉÇ‹ìCµ¼¥»ôîGYgôó‹…›³Lup5ì`lPÖ´gR³Ùl 4f¸D÷^ÆŠüÒöU¥m­îl@üìNN; ÂfTh7^×É@¹KJ8Ðó4r=w%r‰|î$Ïû/šS”·8—ãŽ[¸i è&¯úýíoÂ6ï`us)èeüãÃ3y3¬ÓŽIÁ8bšß€*~øê!”l)I[ÌvcŒ¹Ù˜½zûT„<°í¼ K!I‡žáAõ†8æ Î/Y@˜Å·ÖE`©&´ÛÉWaî±mÊ‘¤ù.JZ8 ¼d1ãð[î· Ž-?%T«}L;L6‹É~ùÙÅz¤ª¨¹5ð+D-oR¨Y„µÈÚàë&ï–;”\Š·ÕŒEwF^¡Ÿþf¶WçßñSZ;gDÀ”o°ûÊ÷‘„EÎ{-Ê—{îåüšŒu$ÚAŠÌ?[þÖh¦)` ?àKÁXȬoða>6Š:1OùC¸6צÝ{ ¨DGû93:ÏÆ«âFÚ\ñņ‰ÈóTŠ6¹µŸ€½£•à««÷÷\‡| µ„ù¼êõ³‹rmGp™ue#š|g Ú†õàè³|õ|Ε%©Ó³–•Q@}o™ 4¿uîÆ's:A½{=©wµ  Z5º§ÚD©HÌû×@o.þ†$&TnafÖ±C,²õ.{Å‹TV<[KÒp¦qá|#F­n”ç×%4¥Ì·õ#‰ñë:ÞúÛì=Üu x²XùÝBÁƒeîƒÄdKñ ù×;B~\%„²õ$ñfAÛ¡Ò1ر;¿¦²ÒèõUþëÁ¢µLŒl}úô¢Þµ<åÕ¶¿ý+5SÞÙæÃTIµ>Xêï$)Aƒ¥| ¡Êv{6•¦á:Ëb‹ÓM¼$Ë û¸ºDí é:·XÈÅ \PÀ$x¹'îëRÕagJI†¡ÇøÎ 'Dÿú»císÆf‘€Œ&ç6=8“Š Sy7sd U5ÿöqêª×#$¿šRì! [ì^v7CG{\¢“⋾C²‰`ƒ~%q€Ê:OÖÇë2*C×¥Gžv¥FbžH#§ÿð·©Qá?˜öi¡%ñ£tpë²ÄêTŠ®ž?Ïgl»½q8 SO4ó/0:‹Yo«„sð~Ø;Ì?¾VVìRª†Ü[ª8·^V VÇ qÐE’h¡—¸°ò£=:õ[‰¿ drëOZ‰¨ÏN¡žô–à 3è#´uý;6ÆÒ·`wçøý×1¥îº@n‡ýlƒ÷hÞݘÍ;~šì7-Æùz½ø‚Ä¿·ö®éu?3™ñ8[ªÇRx¼ùH³†[-;t2%]9Ð 1+Õ¯³²Ê6g’ªì¿>øKKßÅpúÓ•_CÍpö‰Øô¢µ6àAû¹•V\îÑVƒx‡”?t tÆ>o3¡Uee~l+ Á'Ó@ûáMK‚“á‰5~çղ휪|‹Àf ‰.iùüxsºÿ²Ü$³6dQ­2?­öö‘áŽ"ÖzÕ|Ù˜æD[‰ð!(“à8·42=_˜É!=+Ïsó}¹»v [¤¸}'ª_Û¡e!^ͱb3ÃX6´Ç+˜ûÛc†±ÚÅѶ=Æû(Àq'ÙàqžæÚŒñ ™ÐOAÜøÚ5=uÙæ“¥7Ù7Kü¸.Á©®®´áq~ôP¿°eÕŒ,ËpáYC\+wPjã½s(¯”´¼tRãWŸ ã[*n¦¼T ÂÿÚBíc1À3êõW¢$¼55üò:$1 ¯½E+›‰V‡š}aMž—{ýä÷ήI"…M>ß ý“ ƒß X8¶8 ·#³⯠Ä5[Jb5Å¿ï«Ô2©¼Žˆè uÑŠÇþ¾#ûûJòÇ6‰fr__ÉÇgü}{ιŒCÈß¼³ÈÆ=%sSÐ DõD]åÇ‘[à}ÇvQÑ®%)5¹Ä:Ý’mº»IzLá+/½é‚–¤A5sT#±ÑÚ¶nÁšw’¥Y²,$ŒÞ’y.ý³5ò»*.ËÐcçƒÅóÌïÄq’÷}ÕgË„‰P0ùê‰ÒJ/¾$u7AÚþµeRÜMF…¥ÁJ©|tì ðêfðâ0ŒŠI]FCŠE“1¸ZãÎÐŒ‹ÿ×y“Ïó• Âußpïç¿ú+¬åÄî°¡hÁÍ>$Ú”O,†Nø$¾ß¨9^­e ,ÐÍ_û}#Šà4e˜wOf˜Œ4é©&É\ÂûÓ%‚DËÎI§O`S«M¹C²ZáïG¬‹e²V¡eúŠÏ´Ï-'^$_»NùcLõ]échjqâã²Onük/Mtfš‰QÀ ×c5>ÁuBG2Ïs—mŸ­Vó¥íø‰0=ûEÉ϶堈'7áHV02³eù.Ëéøû~Û B€š ´ã0˜Ìá\PâÑó7ý8Z9iõ×~kjƒ!vw¡Ÿ-tÒ™½—óS-Ò¬ýÄ\·–0G:P5a¤1–à¥ùøÌsð13QÛõ²mq)_l_ß/¨bœ<¡gw3)¢Ÿ˜ eª°Ò)Jã·PÀG ¯ðô=áy­#öÝ ^Ä¡íU9à´gŠÑãÜaù¯5»EªA“Ù5ôvÿ1ØØ _ xÈTÞ#½á{!ûŽ[d á®¹ bçíÔ_u!õ³¶ZªüC›eÌõíŽïªDäßñטDfŽƒ÷ }ÆcÑ35eŸ·ìcm¶q3Qú²É¯E"Tð²rL©ð¼Ï•õÜ*VŸÚ𽱊f]{d=•my=E|Šê£è=s÷—t±ô”ÛÍî¾¼uý5üF‰ío6!o’]ó$·äó ·ßåÚßßúìTíÍ2ï*ÆÇv–¬cgŸsr±ïº|D›À¶èü…£2¾>_`vWënF’0SÉö ƒMòa·È^… ù8 öëÉzº’Ûkÿ™cLŽûE¯IÆ™ßlÛ;ÄЉâ#E‡Õï·Í[!¤ÆÑ`oÚ U åðÜ|uFnnæa§Aj,2„só6—›¼oDó’TZÂýÈÓ+­Þƒ]uÀ&ïÚS¾Q (ÌEÆ1é×kºÇÊàq]ë%±e·,±\ôùi¡kãŽheº×ƒ{áošó®Ë#úé£Q+Íu}(…c[Î^)jù‡õÖâù¯î‘ð\ò.¾ ‰çŸ·§{FY€z¹½¡’jdo‹™f$Á[lŠá{ÿ¿«þÕó¨Ôc¯ü×-"Ó¨ýrIÊügºàõC}ë“ï$•) ƒ¸W‰ÏU|ˆ¾þÙ(,Œíˆ›_w¥ý=L–‰Y¨Ë‰V¾5ÚU¾›ÒÌvÚ]wYšÁß[*…Pç¸RQTÊÌÆ÷ÄËëƒ' XY ÂÜ\ÛY·ÌŒ&ª@LYeìçç¸[âq(‚]ڢػ÷˜ót-ÑŸ5;…†á`é‚;Š Ñ~ d9E%œ•‰à“W[5­7ƒ4غ`éÚߟÕ‚¥2Ï 5 ?âûeµHÉu€ÿó5»\žÓ¢Ø˜×hh‚óàÉX¬õ#1UóÙΗ"TÖCòjúï›HæºK÷2áGüž&cÒf}­×çu¬<žNj™á@(?UKHV.»¸9ú{ò>ýc=µ¤©òvîŠs^½×÷ _ZËû:xʳ(@YÃãÓ±ëS=ÍéJ_Ñ/.t…ïý‹ÈÑN\U¸S›Ùµf˜·Â*VѲ¯ßi­Þµs©ñôé  ƒ”?õ¶½gOEüNXRiLû¶Í¦¬o2Zì'‹K‚ZŽyú¬“u-¿p^°è½†Á6øx• ‚¸¼ï·úöCRzåU¯î­¹ª+ ßô‘£ÑÙ‚âÍ>¶þûÍí=6W‚ -îo>?fiYw±æpÝ ØÖG€0 k{åVœ²‚õëɹáâヌ ó‘s2œ›2âk¹#q¢Uú­÷õk&-^;üÄ­g$-h#@„Ž_-R¨@ÜõÜ\ú„bwµ3WtóŠFá⌆3þ&v‰ÍScE">½®f¡5ÌÙ¼#ÂBÝ¡íÁ¾£þêÅ­I6õwnsÍûŒZþ©iX¢yJr›’Û.íG5þ£îÍ–E’uáûóüµoö1*“yêÞ}Ì@ˆIŒ‰áæ7@Ì“˜Äðô‡UÙÕ9Ôªª¬îêmû¬´4( Â=Üýû<Âe{IXU­Œ”J2nÕ»öB.sкÀ#슺muË1jo‘:«¤<_ÑçsÜ>)cLi[¿_÷Ћüþ'nârò÷¢«{Ök1ú4غ˜ÜjBC:dœ;\µ>­ßû»ÉEDkv«<&lî[0û«ê§HÍvÙ“d-Ì40Ä…Þü×]«¤UEìálb^Ðr0‘ÉÍÆƒoÕƒ8BΓ艡eCwdŸn|Û0ß\ìŽlor`y¤Ã:“ÄŽL÷G%ã*7ïXCXâéqZ¬Æk݇ø4PÃY¥ËBÐÚ,ª<¤Mí¼ã۬ɲ¸·\@I3£ «h—WO˜yÍao£è)É[›ÖǘÑók´FBÞo¦<‘y;Ð<°˜„­Û[Z÷šÔZw³"G¶²4™ñšM@Þtd™Œ´6YûÜ z‰öB&,¹°n•½ÎÔés¶ÞÞÏÜßBJ%¤a/•€=³Ý«dî\e©'gL-`HÊÃh]j†Áç4ýƒÜüfèɱ9bÑrjÝY?¦v?a<;7!èê“×ÊY¹YBC@ÏV’»ñ”p)A~~ÝOÞË¢‘g 'ˆÍM³)–ëé<º]ïé½%ŸVV7¢1XÏñÄD,;¬/·bêyB­Z²ô–Æq†àê!‹æ¬·º:8î&ô¥ 6OWË•‰u7«ÑÞŸ8þŒl!¸½§·§Â¸Îm¤uÒó (KLÍ S}¢¯iš;rƒèB!ˆJ˜¾£â9ÐÃ92Ђ}Û©q„•”­&9Y9í²]Ô™i_puMëR]‰WÏ‚MìÜSÛ5ŠGÊ»›æ$õªîçÐÚœÑÚkäùL!>³õØ$f±MXH¡ HŸ?ììtw”ܳ¥£BšÂ9öî{ƒl,‹8 7ádŒV9•´–üa…7„Áž0颳4ê'URÐ BÁ¦Ø5R/ÃÅ,Nm6›Þ ŠÊ$#Übr¬x{Œñ¼‡gƒÓÕÜ ¡ózO ™M’ÌóxŒìYšÜiDu'5 qÞžÑ Ùå {±ä¡ºàèâîÈ3÷Q¶½_^$ZÊ“ª׳û‚,§(k^i‰G<ÌN ؘVí‹~ÄSíX²ž¸Ñäþ<³\UŽÙK-]&ØAæ}¢“âú%…ÓêqûšÔ ¨_¯yûd!deAï*çÅDÖØ¸ë'a»E.bx ¹¬#ú6ÇÓé%ùÍk´Ïi#’pí䈻Ük.iÓiЃr¦†ÜEOD+n’†´ä!õþrÊ€g°j6÷Êk†Z’‡õÚ+&A½7uPH½ë&ÞÀcy©ƒíâ¹)@³÷LÛc2ž¬}°bö>=o›—’(~‡OÖæ’aîëüÓh­yŽo©j CÓfnÛ$©Ê0P‘Øn€qГԭ"ùJÄ O}[DµmŒ5ß©à|d¬wSö\‰Gréyeý2½Öú–®?ao1£…J{¥:²a| ^±Ò^Àý™1M)ÏêáNÅäp÷enÕú°}ÚËèœxÒ³½/Y\\ȨŠí¬’¤X‹Ë<–819à˜±'sãÈq—9Æ;‡„pÌSº&<ý0K6úW3=W°½™Åñj°F›ªŸJ å« =rp’ó5‰Ž,ýɘ"—‡`è92¸)E¹Úë)Dzƒ*.Ͳί~ê'=¬M½x{L£ôÜ–µXëz– f¤H|xtù<ù­·ÓÔZ Uˆ ìÖC²JZû ãÆGÂ`,¡fŒµÐ! 4½,äÔM†v–àyB²s}šq~ŽÚ“Ðr{21Ò¼ 4@)–D¯=mò”žs§”ím­Ö K¤GIfJ+&¢ÑGñ~cÕ³~^ûÞî—µì%êÝiÒNÌëìkBš=Gá §ª}±×iÈÁA{øÔYTsw,4y—s/õî †vÞ§«Ø I£jÖk~Ù\I²›w]/·›‚p`åµÜÅÀÍÄŠ¹ƒN`âtzz?•ƒxãopñ*†ËH·räT}I`ï¯,w0`Ö Ö•~ÂÏÍ­¹Å‘¹%I¥}p3ŠæÔÚ¯g³!ÆKV{¦L‘,c¯yeç¡g[¶\拹‚cÞ:=Wm@Ô‰ ;]B%¨Û˜Ö–ºZ^–Ü.¯RWÄ#ÔÃVoTŒïrCéEB[ó¾‹v‡ÃŠd»xH\’µ§ìÜr¤ˆFàõrýl8c¹Ò°ÊUO~i£!"刡¨l^EÛ[•v£?æâX#¤ŸÀz×*ã¦äÞ Ã^Y², ÍK!5}•MƒÝLïf7C3×Ê‚e÷ö^[ŽVZLÂNXÛ¹À ¿w€uR/ލLÚkeÄÊròìc¸æoo;¾KJ_žþè¥YO…et£b” ¦½ÝšõtÏ]\¤{ì[4ZévÓ†¥»Ö˜¹„¹ö'Dîéêņ¬WWÇ99LqÞbÆÑç9Î,+ÔùŠi÷mUuð‡ UÝ ûÆÏCJ-Z<ÃM­ÌÓ\/ DçáG4é/°i[6™åë›äÐ{˜:}§å{Uè\Á l%óÓip{£8+[ïìoÛ³‰w\åBSEjZu:¢ηq<‡ l‘wÆ?Y”1ŒÝø¨Ç€jëÀ[W Y¢W¡¼!»3²ËÝ]:kU®¶ 6¼r•J’‹y^ª@Ü(ùܬÍ#@æ±uÈ °ÝÈT úð2(Ä!èH»éŽT1»w6ÌF¥æ®BfA,Hî—âj“Õën›wT@ø\t[J†÷{©@äŒO竆筂Ä}œ²ÆE¦¬FwŠªP {wá¡p®Ì«tƒlGeBѺÃï•VIµè"×§Ê6B­&á¤F U¾H:_­®J/‘[âµBºWùlEzØmP1hÝì,íØ§%á,$ÝržkUmÚ4§X…ÃÈõ³›¢IÒ¹ø¡=?ƒd àt“²m:“©·0²Èê­*lvÔûDã·†‡=Þ.·ÑmKb÷Ž”*[˜Õé:[rYpW}õ*7¹Ænõ³¬¥]½ÍçÁ…7DO§rG”F%DŸÞ«NeµpZm÷êTêU´«>7®"s‚jqœÃsAÜ4J‰ªKå7CuŸŠs¿^;» ÷+Þ=/ÝTìvQ mÉœ=°TÛM¿iuÀŠÃ]í)ú ~~A|Óa{¹QÕ {úëŠÁ†£qŒq›—ÛµAÏ×x“oŒ[—izL¥‡µ–ç—\Úü :뙥3㙥¶r«‘„;¬c0fL:HÒídÛ³ùŠè'Φ"‰^\ŸU³í¾ª0By[X‚ž1Õ߀þðóßö·à/ׯ‹Çß~(š0K˜/NæI‘åÓß~@É/›.ÅcÊ? ÿóÓùÿ‚žá4%Cû÷úh“p‡ðQ$íô¿¾èãëop˜¢ø?ÿþ¿Æ©{~=¢·38LÙ{—¦c2}=øqÚêäSëqWwÃ_þ#Lb*¡þúÓ©îÑbÚþÿõþEoïÝ"Љ„üæq††1EÿúÞ˜>Â8ñöúá9šþCý?ÈK±¯ûGÞíÁp%Pìý^É_ïõs+æ]dPÅH„úmeÓpH=˜oGúû½Â4úN¯Èowqœ|ÛÙ_¿0ůMìïgãºxšá”ÿ|ëŸom1ûa“Á>n–ímL~øÒbn‰ÑþÙV‡$ž~1ÌÏVB6€àè_Ó¢®ÿòA  öÓÁC§¡«’¿´]›|3qo7?º#étB„?ü/ÅÄ׎íþ Ž|ÄH¡¿8=|ÓlØÞŽ?+ógéÿ~|ˆp¸ù?ÔÓVc>“¿SScþÛa½„Ûø•þ>]rØáçnŽ>?¾‚` Ž#Øg³ýYÈ0JÑ4ýù‹í§ 0œ&ßû¬–Ÿ%G>’ …ÂÔçØõ“­|(Ú£çgW‡Sѵ> ä˜ìñ*rŸg2MÄpÇ"l¹z¾˜ˆßîmÚ|ò*~ºý›·P0M„ÿf:¿îá+ü/èÓ¨ÞWï?´GÈg©ÿ1°:Œ’úç&ÿ¤ì\´ÏÃÞÿöCÛ MXÿBŒŸcùÒ€ŠýÛ\WÙÐÍíC~Ã/¾nºGòõyJÚ¯.ûÛv7qr8ê3/â_Sɯ@ÉïMÎz\Wý%’ôo?üÇ7 CäWúÍ×ÄQ)ûûÉß+rØ ú…÷mÇ †¦¾ñ¶ý¶Ùq‚Á¾mösŸÎ¶czÌÄß~˜Þ>S™ü'ü#ñ‘FhäÖ׿ACo°ü›¿’ý ÇûIrGò/½)&зVT×ÿ´C¿©ùZ;Ø×Ê!é(‰ ÌWÊÁ¾¶ ;¢#IýÒ&þçëùMßúr¾?y ~HŠbø7:"?Œ0߸Î/Úþä?Ä JþëºjÂi(ÖÿD>Ò€ý#|üC~ü€N ÃEü÷hÅSƒü•‰¯£cäÇTѯTGßø†~Äéïö½ˆûÏÃÿÏßÂ?~Ð" !?í3üÓ“_Ã?ò%H†þB°ðžÃVVpÜèÏÇôcâüà_rÒw :Tù}þ‡Töc:H(ú+Œ‰$iâ+•É †3 Ž½Ç˜h’ahšú7ñ ÅaŒþ=¥ý*z³Æ°þSÝŠ"¯”üu8‰Vv|hc)ì‹‹âC¥è»Q„ùÙÒwÛ¦ï¶G¤>2‡eãÌwÄ!ô#ƒA§øŒÿûúö¿…h!¿ʾȓ¢q £òÀĉ÷xüUD{Cû27øPàð|äÐíO(ð£ÔG‚:¢ ‰ýøáSG¬Bpúߌ¿£FùƒRR6…òß /þuûneÿR¿£(‚ÒÇÿoñóŸŽGÆ÷o‰]‡£Cþvè:bçc¾Bý6§¢¾áTó‘Æ”ùzfì#vÌì7”ü-³(õ‘&0#þu_ú’}2Ø¡\Fé?eú)ü‹Øñ Iœ8’)øshý8l¡©/¤üéä0áÃÞÁFô ÞØÁ4þ|ûÂŽ±¼q¡o¿…FüÚ×;fà_[\}g] }´ÿźÚçkÞ[yýÇR…Ð~c¡ñ;ûƒßëï[îõ©?þ@ÿÞ¢ßw늤±ÄÐUúÓß?««ƒ§}€ÿ®ÞëïûuEÒÔüÏÓA~øýE{’ ?P¿£w%c¥~©Øß_J>xЇ÷Ço19¤Ò˜þ£‹É߯+ÿ@ý»"äÿr8ßkW(ùýCvEÑ0LEÿ´]¡osü§é ¦üc`8ýÏû ÿA|¯¿? +ý@þiº"¨?Ù‰ƒÓÄ?«)‚úc6E&0L‡ÿ¬žêÏ‹T0E`¾g{ñÃ?±ÁøˆÃä_Ü`|„aô'o0~`þÐ’ǃüÅãûÿÎã‡ïÙï#ø}PøÎ}ÆøˆW¿Øgüt€iôÝŽiDüñ­Æ÷/†Ÿª¾^! ?¾%õ_/&àôGò0äsÓŸ¨Ÿ¶ýàÏüým‘â üëüñ Ý ‰£Ä‘°~üIÍ•| ~üû‚¾üÜ Fü€¡)Ã)úGÁ?’Ç`°ï]MøÒ¿Ya!(ò ?ûÍ|Ã?|ÿW9öï¤Üß7ÐOˡțc}±°üi¹ùÛ•U˜þˆcØg›ù´€M|%ô×cÁhòûDþDÖÿûDþeŽ÷+ùà›ˆÈGŠÆQ~'Ë|?5ý€þ[ð?ÎÉ¥„9œŒüxâO^õé#B#Ÿ\ìS›Ã¯> GRŠ MþÈ ok$†þ .F!ÈaîÏt±ÿ×Õý[Ô ß§ì#»Äÿ_VöOÐ@ãÔÏBÂäg!è/ðƒFñ?à7ü )ägü€ÿ ü )â‹ ï÷ôýçáÇï¬iRŸE{môÛÔ÷WYß]‘ý~]ýrIø{ü!ÛüWç;õó‹%ÿw·ÞßSø@—äo9Ô¿ê“ÿê&ÃA|äp!ŒzÛã9X*üi‡;Üú°÷ã#vóÅèã#J0I’Ì[¡0„`ðϦ÷îÖÒ[ˆÀ˜ M©ï·qDÅM¡ßÄú#MÃ_l"¾…ê˜/â Gèoú&ŽaE¿³ ÷áR¦Ñy[ý=ôû•¹ÑØ­/©Ü›Õ}½¯þË6ïYÿ›8íoÛÛ{ÛU~õ÷Ðô£©OŸèC?ð1—4¿‡<¿€“ôk8ù.ÌyÏ’hæ;ã–ðmÑÄ·•ï—_|]£ñ~EÇæûDþi9ñ¿7X][ó+u8ï×ì¼[ßó~Qп%fÿËâÿ¢ ë›R­÷˹¾*ùz¿>ì‹ø;…f_Pžÿÿ¶&ïÛ½÷«û¾.|¿`ð;ãä§5»Uä÷ +Yù~™æ·Õœÿ4 #èïM?mª|¿Ø_oœþ~Åï/îü+µÃ_—À£Tø—¼Ÿ¿ûõªßß,þ¦ÊøÃ—¿Eùº2ùW6Gÿþ+”Ÿ¯úûáoÏÛÏ?g!~¹Œ~S(<†íãÿŠ© Ÿï‘˜qêâê­}´þóSÃÿýY…ÿ߇€„MŒ#0%ë4 ðºWñH@´Â$?7p>}?~Œ»øðá«›¨Eœ´cò ’c¶_ÉaMÓµ#p<Ñüf_^ôÓ/{>ëò‹_ð|>ùþ}>ÿ.è×å\ßüzèÛß}aép ÿòÓ ò™dÂ1!ñ!¦„p–µì*P®˱–ÌÊ [²,¡ dzìù8÷}ÿïmÈZÒ§›ÿ97ûåÍ–½žØó™µ,žµe`óã‹õÌA´ÅJ˲™ü©÷/þ¸,N‡Ü[qì :³gùh)§nǹó鸳À.g`—›È±1Ç.Ù]ÈXO±ä«pò[Ù¹ù çýŒ]³Ê¶îw÷"HàXøyäAó@s?¼¿ B´ÎÇ ´CÌoÿ2í˜Kxkd¬oä£#ím—#y»Ð’ùóU>Ÿ·3+—çR«Î7«r@ƒ5A”"öÏðóñz/ãÖ8-“”Ó&²ìrˆÍžÎ–veyšÐíD¶ÃUŒ÷-”©¢ú-YÓ Í±ï¤'øölGXx”ÓÆ(Â?þ z•–°ù<”‡édlÉh\ÌžýàKv¦"ÔK@íñD…^ˆ?ä»é01ª)æ5Ä–€;oˆ|W,vëÑñíæ#SàEg”GÿB¹,­™ŒM»å.H en‡Ü€Ò„±ªOqÇ¥Nþ=2b³™íU½\ ‰DAÉ%SUÊ‘+/QxŽX%€Ôúª= e–%蔥eˆŸLü*^@B$÷û¤Ì¤mÚɦd&[Z%­ÛEy*kÇ’ m™ÉPÖyxA¿Æbe=g<µ ¿ãÛuó@tô!ïrU¥O[g§H¾Þ2¿=7†ŽÓ檊ÔbŠÍÉÔEu]œ(ó1Võ´} ÎÀY8 ¢ò'àfú±ÚA]Ëǥȱ(é3Í8!ûIlgîЧ’± Ÿ¸p¹š'Ú}H‡_,§Î¾ký­Z7åñXÂܾ•=“î$6<•¢î\Pê:èU¨QõíºY—²š–ùÍéÌT7ï3•/Ii^ænp„(3<‚PéüXv Ò^ʾÎ'¨2êL÷–®Ý{:µ´®\ó1¼øê¸ Ò°ôšCÕÛCá=FÒ-r_Gi¥Ù¬}{h*éއ¥´½HlwKsÌé[¦ÊŠSß"y¸DwÄU›³VXç]<"´Y2jÛóÛÛd³'q}í~Eq ÷€h0(¸Å»z'Óp°²»zÇö‡ü»4³&ÜåäwÂâ•:­¡Õ˜6>§*áršºMߊk˜Üªû;õ' MKgŠÔ¿^úu\SDœ“®Uå‹‚7Ses mÛcˈ;r‘`ü¶¢Õ£©‚ñ©\öN[•µݺ* UÕb6ž”uÃÞ(ŸÐW~¡Tq”±Ç¾>Ÿ¦»,95_nzts}ËSå@â÷f9I£»W:|Z ´1 ð¬‰pˆ°H¾D±ý ½à„»ˆò 2O°®:ö&­ ùŠ”Ž\$P”†¿X -]`ªnÕlqíZ`•žšLEG8ŠW»“§¬˜p“;-ñ²G¸$D#ѹąyð# Fmª7Å0ºÝ“ q'´“pP $c3 à‚A§1ǧ®™ïLs|{?ø%‹i¬3´CÜ^œÖŧ^†O´¤ˆ[㘨}I^ %KˆÌ‘Ž$ž<0Ð —XÝ g4b¨…`¨”ÀY®ª‚§½VŠJ¬u“Š2ÉÛ|­Ð‹Ât+¼³ÖØJFØp9cbÚ~÷ð>%Iw~Ôˆy´…ÛZn{â¢?)™[¼]-3ÍÜí|EP ѩ⹽:sÒ¢a„‹£TŒ(÷öæš>tê‹߃¸RÖŠF%j¹«þe¶ ƒŸý;’¼¤µëYpÖÌ}e¤†M)iÊޞؼëKÛ x /š]naÅLrزÞF¶C^4º¶kõ@3£-IÆBU5ízʆ‡I³9ÚmáÌü¯EÝ•zyR 0æ¬4ÅHÀ+Z¾]?>Ã^Ž‚Ú+˜Îû9´]M?N–#©&[PâOGÂËi`9n?<¿8ÌT%šÈáJ0{Ò v¯´Ž¨uÑ©Eu}†„l¢µ²^…-Êep®Ã#Á+¼{MƒNRNÀ§e¿Æ:s‰Gú=PSkD½?ÌíÊä{ —:óòÀ_œƒJáZ„qË›?ØÁ (ëQíÁË×!œ:>“O½¬'ÃÔº~8Ÿbƒ¼=§)[ÝYƒP-¸L»à$‚Žœ4æÁÓÆ±ÍŒݼ#öWzz@(Ÿ2Ù™Wâ¾Þu\¡ „±IåQŸpã].‰//ÂOºD\Da\üFköŒ`< —ðE ¹R=¼„EY6¥¹á_UáVf®èÙ¸Dã¥òã¶ôŒÇQO»®ñ¾0-©0‹S¹Ÿ…iäÏâÖ-+Ž2WgTç taù…³ =ORý¸<ê+ ¢!íˆá M…o#³àŠèÄ'æåW­˜¶ºÁË)êèKo!ölZè4Öéê'[;Ü( Ù¤çÖJ…ÔÞA¥Xo•ãöÒÃ`Ž¡þ”£6Ìó·d€næ=R˜î¾^!ïMX8Àѱ^(«MVä6=‡ºØFõX7ß)Æ‹.ìºZN“¨ôÅYñ7dš—R3@ §Ó§$¥®±GxIó©ó½+y»8 ×Z»Ï@ ¤|F€ì©G(ÜÀº” Á.SŽñU‘ò†d«‘nãv0Ø}º*¶ìgèJðdo³›?C+oÎΡ*åb[™ñY7}%”ü-ò&´þé%Ô s_`&sÑaJ™eU^íÁ/ñÇ;}Mf 2k¼,ÑÖÉË5:¸øü}ª9 Ö’GüQØ+¸EhOmň€i” @Ž ï÷¸m/P1[¤4ž§rZï^Þl$Å1U`zÊURJ±‰ÆN°«ÑÒׄg—v*6ºÕâ„§?=„83]õ–ûéöyK0Û9ŸôÙ½îB~¿Þh)þ)Ðý<²Lôª P¼fØ^R>¢0"îfê 5´¸v4ÁÜ(yí«îðÑUÅW=]žŠi‹×Ê1Œo0<.›ðÊË2Ê5˜É÷K,qmÞxÌ<2‹fì +S}{å£J§Ém•^޳¨óv7sHªðiS,(.ÚåÜÖÈ’ˆ,p‰,}±ÒЧE\ñ¸ÙÓÁM˜ã@6“(pyèþU7f7Ü/…!^’¦yœ:lclÚÀñg¹.@<‹'g´µ:IΤõ³Ål°t·\ñê\fD©‹àò¦×³.÷tä¡\‡òy›ú{~d!èóÊ4Í嘗øÙá¦qDe„VÓ®€/âž:ÊIGz”ZZÆïn%ìkcÆ8Aïb˜ÏL®¤öm戕 ä4MôV¾ñµ¢#Îp°¶ ®àe¸¢ÉA†fŸÂÈÑ´@6* S“  ƒ‡´7.¢à„Všt:hi < Þòƒfä<ñ4©aQÛQÄZ?-r‡Xò)h< ƒßIxšS$${lŒù=fSÊ…‘`P·Ó…¼ËS¼å¨µ8Õí’þ°ü|Ÿ%Z‚ÄP /šf먌2ï³ÂÕ|BÏSžÇê2£MÕÏ£3©µú1½Š÷HjeÍVâ<®˜dßeì¾µye×uD0óeIÔÓG‹6›‡iãìsS¿ç–tÖIªÃº°Œ¶BÍ%?õ/ØëqJoêÛëK1äæè:S#˜…ûwGyÙ/vÅkò>PÙq“‡vðîbOÚäÁÙ¢#™Nœµ…뜛)_wÉdnã4øJöÊ:]‚–'uŽâ|Å<ÀŒ'jz.q›ª#øc:m“íHÂâòËyµc4>@¡wøY'4ãdÜž×&Ü:s-êžla?sˆð5hl€ew¾ÀtܼšÓYIÎÑ °ZfJeÊ $‘¨WKÜøòK ߆Au<ר“í;“¢¸•†`üü€å;Çkjì G`ya¾,}Àn¬›Š™G÷—£y;ÙSf Égý~À:¶ô;/u ¯¾tÄ63Ý*‡{õrcáù:ïöz¡[)Çm¦‡•ÀÛïz:Q¡@V¡¹ Þqæ§ë@õ:¦÷²”`€k9HYi"dWJ}2h\?”§1º@~¿UYîõÉ¢nØ­+W÷.RÈSZ> ‹Yr¯Š{Mýœ¾.¯gl¾95¿v†ÙƒÒERÏÀðdŒ zÖS=’ñõ`O`‹k4£•— ”ÕÅe†g&jîùÖ§þ©‰µóš_ù òñZd bÍh]Ù|Ä(%¹kÚØwêIŠ/ָ׮õ|U®w&¬é˜\+ÐÍíL*ž¦ô5ï㪹y©ÓËz’¸>Hs„ïóyj}qG§aîêƒÍi$z®ò•2Ž<Îõ‹ÕÝCôšæ8ÚHAˆJC¦LÒ"å•{ó;õÚ¸þ4VÄŽñY eS&¯•ŽÆþˆ31a/×6qAí±ÁÁú±çwOÑ~Qã2KF\'ß“R¼ßP/¼èG™k݈¦ Pº0e– ÄÓˆ3–ùܹèAM£‰µ›É£Á°1c™&wÄÇP,g°„XyFYî°7ˆ¨êLõé§t p2€ûî^Õm½ þ‹®ü iÝ@ÿºPå3p‘«¸,Ê››²½”ÚóA”%:µR<ðfÛ$«;¹Xª‹¥èŒ#/7øZø~ž²›ž›qåÀLÅ7¢í[ùr3¸‡n ᦠ Ãl†Û)¢Øì 3½>mâ…¿gRtMOPu«‚BI»g\y’ã Qªñêc1xe}e ^^\^{µTfžF E†?N™þúˆëe^*_ JÀ&œAšürÞµ®¥«Êä¡h|+eÇÄ娇Ù2G~nJ`9(jµ Øó2H΢Œ`·Ùá_$½±vM“1UQjåØÒ¾ò,ײEe[Oèºö&¶¨54õ¶ô Äf–t ðWûHD çšã¾•0Ý6ß_8«7Ç»÷Ã÷¯ä'èE¨÷¶H²B÷ªZ‹Š;‘P‹¢0JÀåmù +˜ü|?èû‘ÿ¥²dx]Ĩ‡ÎÊÉÃäu76¶TmbQaÝ1ÞØ*æùpGU:ÐךHïç H†cìÆK!·îSD÷~ôs2šÌÓRå'á‚]çO¬+CÝP j©šÃó9çœ_×+Z©ä*W hW^°®çRY5ëTõ÷Ö‰M*xÁ›#¤Ï6¢Ÿ¡ß‚!HÐáF'îíÙÔ“£?YJc÷ƒýgØF"çýxN¾ Ùðm!eœ©Yß•G¥¨/VáÐÊ 6Y‘hmj<µàq5´ ÕªA¿ÖF)ƒÔÒuÂx`9À>ÍaÚó’ÖÀÑ'¯=‰‹t§Dm6®Ó˜;Íi ­áU$8úž/¹Ußíó¥N¤S'Ôô} µîP‰B¬‘µNCà“çjÑ õ“@¥aVM’®=øêâ§;+Ó¥X-í¼:Kaðy÷ÖÃôæÅ)¨“é3þPñÄ/gv4™Jã\+3LbâDô}ä‡/DpTÖëâî¹sˆá¯™Êm*Ó'X ±,XÓèäåçæÐqxÆ‹UÖíÌÝâyAÙHáìI¡“ £ð:ýRŠ•®©éì8Æm7ç`¤zë„ÓEP‡†.Ï:n?-êÚt÷²íº¿æSOœlŠZ[ûÒ6Æíž÷tŸ—](iùÒ„>Î1ÎmÁºn~»´ÒYY\ü#dr€ž˜-VâzXˆ2ä·>iªú²ô¯°D[zl³$ê™ Wñ‘X38›g3C!6l÷ÕŸ7]*[$ì˜'<Ñ{ËÃël7ö¹D̽ þNÝ÷Vã-ß0Sº,åd?qð <|*íl¶Å<˜¢ƒkó?l)Wpì´°4˜²UÀûØ nsžwS®•w¡ñÂ’,|.ˆœ¡ä#æ=åcÞhèu>¡Hf³âŠZ\=Ê5”bwÊ43âSÜzEº¹Û ð–%V|ùˆŒnÑÝ %“è¡ÆT¹.-ùé gkf¼´ŒuInäeÃåHV *'2^b·Üé)‚7-éžvÀ+rø$˜Ý»àÔ*À Rq9x$ÖOáD¯ÏiF¼Üº‹H—úp€ñÁç$Ì<'G—X¯¼Ë> ³Þj5߃Ž8"¸˜]Ò‚Ûá;V ßw¸Ùö æ†ny¤Ûj¹. ‚šmŽê-ÑÜrs¿3.Îðè„&~Ù¥§ôùR·Á=¤èòàû E®ö6uâhYˆÍ%ïàoÆ™Ås:˜¯^0:@›³Ÿ‰&4±G–~¯nOw¶¥f¦Ç)#"i—Íðf–¿<—n ³·©÷Tc™ûÁNEOùûÅ{{2)à`V:J·ËÖ­ÕmN\µ§6X£Ê9Å"»ç=s±öY>ð«ˆ{ˆÛ$YUZƒ5D˜{Ó«ÒU'5`TÍm_ /ë$R¬ g蹬uñMWwÚ½¨… B3Sƒ:òÁ§4Ûäe|– Nåë°}5ecÔsª ¹üšîY»î…=X 쪂ÌFJ/º—9\45e—ÛîöÊɇ'­˜ v¥“ë°DØH춤¯à,1.[)/¯‹:ƒ¼ìJ/Új¼°ãÙ2š5H >¹~Ìón°IÝYóÇž”n¼=úùñzáG9¥Ú=×ø¤·õÊB•ª®Vriùa”ÒlãÂÜ ÖyM;ëËø¾Jº‹íKeF†ú’‘r‹{cF Àöª¯g,nžæÏÞU´)MÃ;–8ïy Ÿñ˜oS<¸ËÚ¥›¶9\xòÏÃ}‚ )>…ãA¦ž,ùXh@×'Ç€éƒs“6uÚÚ# ^pW4fž»×”Dθ{ÕxôêÑ[ü4N" Ž êΠz¶˜ôö l–¤€¡×SÑz‹¤©d´»zr *,âì ͳuÚT=Ì_Éâ$Ÿ<b•M_úë£ÏŸeYŒ†6HÁÂÞÎÉ‹®Ç4 tt·ä³ïÊR?’\çp›CãÌ'>0™|5ÑK!î…’Ï,13=3&š®¢Ô·³ŸŠÅFmö­}UѹÑpæ~lÖv=šnìÍa2—+ˆ u†:BsÄ@äòs…Y&Fž\%.'½¼öªÞ*¶»_«›NÕÄÕ[F׸×î^²w¤1Pà7+ð[ŽØÓ+Žõlµr ¶ˆË­{±.YÚÓʱqlæí‘ 7æI çÔʵhÆ%r¸¯llô„F™ŽÁ4“$²!½Ëjª3'<[•{ívp¸ ¹ï(c¸ ^0ftCGŽ‘u~^"ÓZ<›Z¶6P4ª§òJA³}½ž¯5@†ùÍH,ÛZ%òV{‹®E%x†vñz ñE!ñ“PA¶®œ‰êó‹=F½Šî=%µwîØ~{i˜°àºrã1ô|z5Q¶‹Öð~•ˆ±v¿$¾'³Ó¬*¨”7g(§n蓊FHiWoÜjÞJJ—ñÀ|m ]Š—ðö|¶ê Œ±w [»Õ¨Rƒ †Ya¥%Sö'•áFÁü޾‡1U¶…U…ˆ­ìè&1ˆå!@ðˆ1 Ì6ncwªòuØGá˜&”£;éÆù7Ø» 2Û mÆB4ór[.¤9‹kç¯q]3<:%‡¿½9 @ùg{oèŒj´ËÛ¦GÛ ×á$qhC ¤¯ Ã"*PoM9逻èKꀚÝp}ià4Miæ6*a€›N"¨O)Æ4³ÝëÃ9éQÄ÷é@;ÛH×%ªwQù’Ä4ñÌÐî‘ÞíðdKKÀ/¢jê¯ÇÓõ ý»ójü|d ùNɶ}¯É™ò#%{êé¹óÇ'$°Dœ>5cÓºd»¤r§Æ3JßWOt!ð̘üºq›NPç —Í±u-¯±Û¹X·ô¦ \Wy“W Ÿ/×'eM…ìºó ó=þôáê@jJìŽÈ”X[‰î¹óR€5oiž{q#í!Þ4â-³46Û™Ùšk€Säm½?ò¢óSúnHû‰ÊKZÆ®¶TØRCŠö<¦8À@àLüúÌ$? éfŽÌàJ⫉ûŸŒ9 3"\h³åÖlå÷AÛN0âÇÍÒ.=]Ã’mgñ6ÝÈkR6™} >ëÊ w±![ój‘G*ñ3˜I†¨ÄJ+HëDÖ 5'XA H™-œÿz{ WÙC:zÎä§ñÛçµÑ§]¶f!eøœ¬d hÈ÷ï4ù[gD)ÊûZlbPÇšÜ*ìu÷äH%L&" ø`ó{Æ)–Nœ5ofd¾ÝçÙë{L\Ò%g~,õ‹BÔŽÂÕmzv°å £†x)'O´¦ÒkÔ¼ìK»¬ñiÓ™KHˆe«¼½ ®l)nÇÙ#"4¿ÕVP¡óþÛ/Ä'ó#«Œ„N§· U%Sv"¬YÚpÆ…)ÕdÏ8#ÁëZù8e,W?¥lj%éCa¢DHHZ#nº¢óIuITñ€ò‚¹Œað×Ûà¯xàs˜X+RgÏã;O½™Ïn:i;…F¸‘Z. áÜ[vwŸ.KcîÕ/ìÙx B;W ÈBÝŸÌh>¯ÝIÏÚ(Òj¤„%ák;é½I©Æ‘j%…o&{²t¦|@3“p¨­£ÑäI&sÀÁ^…l¤ìÓ™hˆÖ ‹®þ Ô»ÃUÕ~Po*ë‰(iõ”¶â|¤<£\c"sú+?I!Óõ²äO ¸k\JÚaS®·z»ßêæÌTZz¦l²pvx{?¸îµjD¨ìаHé]]s¼ªÙ 6’JTmà¼Â­â!vp¹ƒI\\¤‰J«pô>]¬µõTqp¹*§ô˜·4‘† tº Î.?¯æliÕf]¢Þ²T˜N¥ƒt)] ²$_Gº¬±Di ÅæGœ‰Ï`IšÆ4AÃ5GÙ¡(n§2ݦÇeqµí°p~mz?ùœÆ*ýzœC%)ÖÛ#Õ'Ÿ±©Ê¿³°›inl+.1gfF*1ay’½K)'îcŸj-ìîÔƒ¹M7So*m¾å”>c¥³×I o´Š+ U#b\ë¼7=Xü¹ÆžÐ]xR=m&÷l€ Pî[‹p€Xâø@xÙžî Žï²'šò‹WÝ•\³2Õž‰]&=.}!3û:$®rLOs7mömì —ãê¤ÕWÀF°Ë‘J¹W>ÐÅ0É!ížÀ§š{ÛB¹ÃÆ®cl¬¥vfêðvMóÈIõŸµ´Â.¥QÔG²%.Ͱ À$=×#ƒXÛ¤ÁgÜ}Ûµ›Žœ5¸;~–MÙ%¾¿Eúƒ4½%ƒì‚Ñô`ªèò†–=«ê`ªGþqAY¨Ñwíu²læ6TÒÈ-šv6"L9Õ;Ø)GŽlD¨.ªGŒË£,N¬ ‹¹â`JîæžÝhkœÏGµ¨Ñ5MHE÷¶–ªlîMûžæÅlZt“1eÄæqµø÷Ó\Áݦ%£¡ÐݑѶ=7Qa_ŒT<®ÔûJ šo67ºEŸ¥wpÉ^nÍ3RpOk’îë+åqJ3–÷¶©[– ð‰¦¹à2§ª:Öu¡2@u'-пÄÏØ½‚Dóš(L‘ƒÚ­Í³\bP i6mwdÐÔš?•4e¦V{yXæ ëìüHÊ([cEÚ}ºÔõK›ª†—?r… h©›)Ð.÷Єê eîÞå1>&M­°x«™ÕHIzD."ÞÚä±Hå×KsŸ+u”ɇÖ=$°û—…²¦«Y?ûìÓô]>Ææfµk%䜘05·ÕÛ^CÕàC0ö¶,Ç1@¼UW^›1ˆ¦×µ4~½H†¢Ì à†Ä—VgÆ»Mñ35|ª]„Ƹø}.³%Bð.Gï ÍÚÕHßù’(í Š’ÌíÅ¡Ái Š=å-gÜOÃp=Âø ÝÏéÁ±!W>‚»þô¸¸È¼€>(>š=åTeå©Ê±ç$-v$Ѩä`kš· ¤ÞÒ˜BUK¼\A5éæ=°v…|Öô6Ÿ¾¥AÀ)ÂÐ4úl.R lHð‹c$Éõ‘Ÿ/®Ö" 6æ¦Ó©„oîÏRÑ,‡#ªeß @Ò ÕLe«5é—ÁŒtˆOtƒx*¡›tgÊxM¥uÕâ¥ñNÒ¡[â4ž¸NÙŒ!M—)0 ùÚiå8RPfxô€kT&ÜüŒƾt¯•ÈËô@ŠH¢âƒ¸,åÖƒHD­î­¼®%DTPtÍâ–ÖxtŒ=FLwÑ8~Xù¶IJ/©Y¸yãi¬ßi:eb!ÓÜÒ"®mÚ•&鄿AèG‰Â&¬£e[Ðíñ4dµÝ_Án%ÀÉž» Ý­ŒÏ·'ÅÓò„Ñ·ˆ69I,þÆWc¡Ù •n®p­œÒ_gY§ÓOprŸóžOFÞÂùAB±Fåg¹ãÖbn‡®Ž\&X‰¼¿EÙÔ#c©ªª¦q®d LMÈJXÆ5¯$…/uoE 冄bV\L¯€ÂVk<Ò«<$†C‰»:¦±êÜ£‹%­Ãÿåè¼¢(xr„‡o„Þ{Ïé—Ùlƒ º¿_%hxú€æ^8‚èbÁæSƒE£¬'0Ð1†CËy+—KoóIõÀÕu{s½ýR‹Ufm³Æ×Ùõ†ÔßÇ>•7~¿U‰¡¾Om?qäxº,è•QwÛ3XªYêq_>J+¬)PÁ%l{í a¯DLZ;‘̯8`ã"—·ut,Êõ/0d VåNSNJD‚;VÌZX8d;MÌÁy4{¤ðK_½UÒ{õÛëåwô0Þ)‡â{) ð1§gÆ!’b|Oˆ»þËë–^(§ÀÎ÷“ ãj;ÇL´°ï Û$aÌÁ Wûî§UýË€öA–¥ÛžzØwcH˜¤I ¹‘ºÌÅÖz(šœ~Ï—Ì㉠¿%<„¸©‘dÂ>ïÙÚàq;ÔîX¨¡ûx¦ïCb¼ ÷|*7¤+yœX‡|0çûîÞæØFÎÅòw«&Fòµ¬­CYæÜô­œà,H'Âí2x^8Uä„„­œœzkëuìñzB¦ÞÛ0\û"ã| ÆÌ!®V}X±,‘Èœï´\þÇT9œE²¬Èæ÷[ð›í¤¤~÷èGd P ÏÆº=©gê/êCa­xq…×v°Ì³Ñ>Sʇ -Žlô¸/9õÝJŒÚ¿ )Ù_j§Ã0]8E}øêÆ/оøqye°‰[9íŠ÷ŽãFƤaPMÑ€N°>ú,!Ý€C=Ó|Ld7æår)×a•Òñ7fG^£¤°£rF\†¹š—3eM‘M@³-‡b(œ9®³¥5hÉæ ŸV!È £ö×A€éMvã_Uöù EìyÌÖ š$ÓwmêlVg=èÁ}Žm$Nþ4þ|¥Òr<†’ÛÊŒ-rýzé°o,¡5hÐà>Ý®–Ø»,µÉâ*íûÆŽò þ^Qß$oÔ 1eu^ŠAÙèÂ"ëëPÈó´ZòÊ$g©¦“il÷£'!sD¤'÷| ,Ct³ÔJfp¿ç¥’˳n§-Afúø;¯‡ºªÈŽ8ÆÎÈýü$”ØL˜Â_JéFîN,&œãòH3öÅºíª ‰0k°ù @w’à½ÎCuàÃ-öÓ¼B&¸ëtr*§QoRqK’×ŧâL[¤~7¯(¡ú”ÔAÌø[#|úŸò3¨¤x‡ 21©ïÝK]>×·ƒ;YGµ¿{i#ÐÏíwEì1WÅ 1¤MÔ¨EšE3[ggŸ¹ZäåcÒbn‘ CüÐ%Ü| )£Lè¾uÓ eÁÁÞ.è¢êò?;ì0ÈŒÆÆB>dÞÙ¨™;[nòB(;É·Á˜ÓÚí¨˜“ø1Ó(fÒNFª­ÅWQêÊëÑæ˜&…ù‰óõøÝiËžÈA‚D1ÅÃJ¬ÈiÚÏ W’$Ÿs=q­Éò†zÙqo¶5Û¾ËRR÷N»¦ço¾=,:OR¾r÷þü¶Ÿý½Œ±Ž¿Ýz¾![‘j€¸Jó Ÿ½«ôÐj ^É”¿iN…8‘új±ùÞLë`¡à‰žVñòŒõöœ¹áH˜èûŠM ˜ÖßoH¦³Oþò»4¥,‰™PNÛW~ÖlEÄNI$+4RF¹B±(ü4­$vtÞ=z;ŽëùÂcW>@ëQ‘ºÄg¤Ý/x˜ìã: ™ ö`Û×|î_Vþ _xc|óTGÛå+£ËÃùÛÉžôbõß4>ºã¼âˆÀ7OÑÛ'íá$)µb¬Ôˆ¬†»G‹ÍÜ•¥²Yÿ}o¾üGIŒá^þ``ò»"©8íÀ¹#_LùÃÐ%ÛVB?¨P!ѦÕcrs¯ì¿(—;ÑÌõF^Õ«$Ì^[¸¾ÑÓšÀæÀ†–] ¤€Œçm‘Rº¥]щUûý ßÊ9®'j?פ¿ïù&m£NÞ‡Sí¹Œ3Ð æ•÷ÊwXž ˜ ÏÄCòvõµÁ—{æÁ‹Îø¨I°þ¦x©QjÉa†ušCzÞ±B‘é&òA>Ô_3ûq 4çk±}^BÓÖz®ú³*pþÝúïÉۇѷe:èk>>5ããUÑßBJ)þÏ=ì* ®éÕ¨‘UÚówþŒGŒöÄÔ÷‡œ{û†Ï Û—þÕÖºî»È6=ìñÑ/Øê#~¢+ "6·c}#Ë´KEî‹ññ‘«Þw¿kãÎ0M’~œ®wÁg¿NÊ .h~^}¼–ɰ¸È™C6Œjªõõ£N GYøÜox‹£óv~²aÛ­ùˆ-DÈùz£Ô óajà½ôÔ—`¡gÐ5”6¶3TnmÁp:™Ï}‚Œ9j0û™õdwb®n±v¶±4 %w ÐW·/í™XÌS1ª_µf>‹:É«XVaÚ1o™¥¤ì|Ь¶·ÔÚ3R´¤{ÕãOWå8ÆỳᡛÏc…³ËqX¶:ˆ€™Ãc {<°ÊþmIÚ-S½Éæe4P~ºCÃ/øò2<ª ùm Ô©—Çå÷ W%øåzH][œ¯ÃäŒ|C Ãà Hâw&Ñì?:Ò†ÔZ¬ 3wÄ–ãbö= ¯ÜV“’öðT? Á¡ÊÊó8J¯„‚A¥ÀÇˉÑ^‰?ÆîTÀÂKCÕÀúk©lw_C§yXø-mZ Y¤_ÆôóšhvjÏuã¯{žûªÙfËmTÓëÄdŽío‚”9y¾“»«äwHUXóëAÄ¡O×gq…}¿Dgã-:,Cý(äL÷Ž&íÆT$1­x6é ƒ³eÅÌ‘°åžìŠ9Õ_XŸY„™)¢Â8•dúðUžeürVìÔ§ÃÒqŠMŒ ¦ìQç¥g –¨¦b*<ßpLôdl>a‚ø ¤kÚ;´C: ª²àqM$ ýä1ΤN&‡†‚B“oöïî7$}Z(Á+<Ù|gz*…ç ÖE¿ß{µ¾ À±I¥óòèéŠflcF‘$‹Gìu©„uÄëU‹ŠÈÏ—µJmyèêï¶Wó3Z„šˆ|Ë#Ô4*jG'rÎX’À9²X™o·ÑRêïG{lŸZÁ*—1¸òoq½30Z‚E߆Ü>Ùï'ÿ`ïÕ‡@ê´±wýæ4–Õ;V¡ò\EwÂV+‘¹pÕ‘ƒŒ?À,IØþmºLŽb‘`Î$, É߀j>îî¾ÞD¸á0}çe^Þ‚6AycPŠÇ¦Ø(¹Œ¸í~H£ågšUaÕlhOåा "µJ€ŸmÝöÕU'á&²žÒ¡cq‘}vÑ<†Õ5P°OÞE\ð“ËRäOc\Ÿ¶Ï‚̆)fPb!i2«ÊÕÔëO H¶a–š’ÁÆ›¨Ÿ‹žùUÜç4CÁx¼>ýÖ"¥+‘HƒìjJ10è÷ë~“äË3øÞ®K(T—áÇ×ëÖƒM>Mô4ú¼ª–èò\­¸$ç>Ÿã<‡OHošDâ¼à!HXoŒuÛ8î8oz¾V7âïÝã9ìü ’ß6H’Í/5¾s’å¾rO 8Ùì’V\U7@Cı –=þ’ÒÊöiMGÙy¬å·Ð»ñÖÖžížy'é—ó­Ø®ð }#±KG3Û;~åÛi©pãA8B¾¼Î–É À¥ÜËr­|ãC^«"oEé“»(êCJG{aG¨Ä›}3᪦õIJ?ÆÏ̸~X‘Ì&©kµr™Xjé^®ñ{µÛȰ¿/Ò3z°úÍÎù*Ó¡!”¦êL£Xè×#‡õHë.¼¾6_*r ›9.["­¶éš§åm€¾e³ù~¯ÕþU>¬X–ID'$¥K8Oøú4¡ý'iâ$ÈäÀ@rÄ6Oo>P"DjoéS„oüÛÐüê2þß÷ÄÈ V¼ü,oF|ª}ÞlPIÎ)~†ÖñØp€× ú]€¸™Š­Ã¬Ð?M¥)¨$Cž{TÈV‘Ï$ç~ßQÜ`W2aŠ`ʇ¸IT‘6,¾¼0€¾vx¦…‰{ïiÄxƒ)ìgâCù*qš®?áó?0N¸óU¦»;ÎÝŽ.3vÜœÉÈõ“ç…lµõ^!¬wnš²¼Ïiæ4¤É`ÁÜ_íñ »ƒK„à +œ†À|”mLy‚Æ(õ‰Å0#ì:°žúʇlaHø¤¾$Év)ƒ»ÒiYR>ž¹ Ç¢ÉÒÑÒíPÓ»PhS«ùÝùÉÕær#ßþÊžá:|µÐßZçȤC»g|йñ/2W¢MXxÒ ‘ÒŽ= «Ü»É-‘)A`ã•#Äx¹¶;äB¨êGEø¨éqþçZr»p ®Ù3=¿L©„7½Äf  ¯üîp‡ž¡³ $8Yâ“ÐþHÛ£#´¸Ñt¹Oˆmî°Ê†ýÇ\S×£'ÅKœpzëPÚt÷$œo‘å. Ùqúd8#ãÄPU’(/%1F¨­ÑD{Í)³¿ˆEåJŒ}ý“º®§ê®¯‰%³ñ±‰øõî~¦Òéâ™È½‚R³F¥÷‚ÒÁ±ë¨Z¤²Ÿ&Mæ®kL®€… ¾l,)ŒÁUg-+ˆPe¯ôzÌ$‡:m;C¿Gà,ú”>Æ»Žó¢|AN' ]Z4” y“‰0WÂûÏŽ`ä ò.¡ß §6E¼4”ðôG†¬<¤õžÓ_òæÉ\ÛD<U·Édf:½vc§-%*]Š¿›hÎÔg ìÿ7öøµ¦3ÄH§EqV`ÏÊÏGŠlá½ÿ)¬-&p‰þªqÎ/¤ŒaV¼EšÕVíd6÷ cü±!w8GóO“ ÑÛ‰AH±¬BÁÕhˆúMÞ‘«{Àz¿l~(/íUIgð‡æ©/Cö]7q±4>;”Á̶ќ0 !JViž6rZ8§F¦¾Þœ|O¬êËû—¬ú¯ð±‚EØ è*Mý%^Aà%©gaEWB~Czäm=CNèבxEòŒý¾p|*8C‘-ѹ´åjw3Q€Y®¾%±1[¸8>w¼”Ro«ƒÑrQaö›® €á–¬;þ•þri~–ê½åøûžÇ\4¥®~¬a#â˯J,ç!F»Q1š• ¾o$\Â]bö~@Ãú»Ù&Ž%GBÝ!®²eWñ5ÄËòô§¯*'û%åV}]4¹¼@욤}çfEÕàÀ%³þ®ÁÓ¸~ãhÏïò/Ø¿‘–gœˆÄ|ÍÊÓ’ž\Ö†7Ì´M£íáÅäšë ÙÍÇöÖ \Ó9—Ñu*t(¬ÄLGßݺŒŠû`fUy4rN¹$•;ÅŸQíõŠeUE,~‘QÒdz?§cì2g(0ÛP3Dǹo¼ãû(ikMš¢éO=‰-@¨â1².ü”?ŽÆ c¹d=¥ ccBÇþkNˆ«ý.¯„gBOG}'ëΗ7[ù’Ê–…µ\·;‚.O¶'9"@7ÎZ´·/Îö(¾ègÒ,6å„c±°3ÉÉÞ®øôÊ»ó² ÑÊí´ì‹IäM>Â>6€asïž‹6ÓrF#ø‡†É9#äѧ¿Må: ƒlk¡Gäب8øÒŒª'P‹q'¬¦ƒ.LnÞxÜ‹Å=E¤ äbîìȧÇCá@Â6ŸÛå½&sñj}q:÷é]ñà÷i–+óg¼û’lÈ3.Œj–Ây¬¢Nzßk†`,½Röï¡Ô"õ RÎýTñÑØ)îðš@°OªyäÁ2òû .C:†JS§ëvÊÈÙÜû­ã]CrHÖdeU÷k”ZOžÅG¯-`ºy×Ö;¯¶aô{*Áù¬Ž?Ø¥mqOt!Ö½0h¸à P¶û5ÃWÈŽO&«ÖœßJ·™Ën_bÿ±ú×ÏÍÍìz| ûR’øÝ?M/–0~+u–W¡Â®´ tB¦™ð)¢¯zéÕ ó/»eld’ò“û~ȉ°wÛG€—)qŸÌz­dúØZF!VàçˆIÀؽÊðáP²o(?BnïåzݬìÝ©ûNäÆªüL~¿ÂB7ÌäØÖRª?ââáûg.^?y–bÓözøÃ˜b!iƒ2ööÊ: •6pFO‡d>¼ªRÏŒ€M³Îig0»¹LƒÆ<œìÃtûüäÛæêmeFÓK%aúcóLY‰©Wg¤×é+ßYšµ@Ôr!ïKOѧ3üÔ¢YûGfÁ<›¾:\f´ü–và ä\\i<ì»u-:Ü+¾=Híû‡7ãé¨8=Á´™“Ž}@Œ÷p¥mŽwÕEQÈQòÊ^`0[€I†]V+òi~è!!5è© NúÚ›Aã#¦ hb@H&kÜkU,ËL* ÕçEÿÒÝŸñJî>ÝH ¡1‹j`®YJ–òÀYÒ©,©ßGÁdˆÖ©&“ÖxälNFo)Ý 2óH O?Qϵ¹¸Œñ[ê œ#Á¢]ׯ†èµ¯&åëkP§µWýEýß'QA˶ƒ—Õ–1åi_ü=Ô/Çi1ÛÅ¿baJ4ÿÂé5õu~Ioœ.-ÈUàëeÒ6.ÊXÔÙ!S¬Eb6HâöàÒhˆ>Æ<ù„ðýMá“Ëò‹þdÓ‡hÜ¥.X+.“ ò`ûYÚ·Iæ-”¦O-$˜_ñÕïýyêhûPOÀŸ~jTÚ6dƲÑ4¡$jMÃÐi{QZº5" w´À2ŠkÉ'S.o‚~òB\î [€üZëZÄEwÕt _X›èžxú¯±ø ¹zºî% IËä¯o—ì(¯b–¿[cê[œXx¯Cæ4±¼šÈΨÁýÔI÷Œh÷‡ü’éì´B}ågÊj¯ W'v‰F ÔRÍŸŽxáI¯Jœ¬óÈÌû0eí™Øµ …öÙ 8‰iê)œ‚˜WgæYB×´Gs”«¦(sô `ÞýÆ6@[m°„š²)GÊä@Á½f A÷] £JNŠy0š<¸,#¢™6gE¶U¼¢5‰ƒ6qª—±-•£E$»xÀóÕ¡9 5t÷ yQIá_&ûøFB'áùs6^—Ñè>ן£)Ë5P*†'Ã&K^gyÓ‰p^ñšÝA/§ª“¬ý{¢žŸ²\H MÚ+Þnàðï»f'áš%Vc™GÛÕ¦á F“m…”æwf,Kl„ëcË{¤gO<ÌÆbäË6í‹”døë!7.ŸlÕ$ÙïX½äl%ð6º¥dkŸ˜ýwê?ä£X-j+e"”IHYu]uÈÇ-6ö-XXBÖt _+";P›tiYƒù÷ˆAº~É™¼Ó™ +äe81'¾.!(AGV4øð®—®Hº|êÞŽ~ñ c¡3cqE¯b¯µˆOÄ`™,'$2˜i­x—êúz-µËÅÛiÞ¤ûŒê£í/äùœ€ßÛ¦þ¤(©ß•õ÷æÍ$Ô%„‹bzº VÁ^¯…ô¾×—\r™e¿Õs<Éäüf È~E¥ ¾ÜëÂÒ½ ̈™GnÒðx?^kõ8›ï$ w™©ß×JôaWÛŽM£Ï¿¿D0*Vg<öáú–i24ê× ¬ëÙQÔ•ŸÃ¯¾Îƒ€¯iï&r¤‚o·Uó,(Ö¦öRùöÍ‹¤®ð]Oœx©l<Ì«÷P©6åV¨®j÷Fs«|e¬¼°7Dú-¾÷°ìSALÅ@è©ÚÔ¦Ã^¤ëL>‡•o=æ`Á¢˜ä\ø©Ž“Þ”‘óC\.Ôâ'Ó¼w·ÂÇGÆþ.¡å.Ôƒ…¹“É~í=ÿõ:˜š¼ôòðr—4§{%‚H£ÍiÎ|ΛփøDž)g7<{æe„êÎØJcIüÿ@ߨóÃv®¶2Nø´6¿’¶Ðà0ÚæMŠ8D(eNDžð äí^ åå)nŸ¹äŽÛËÍ k°üqèy¢ =nù9ºóËâîýöMÃ8SGO¼þn(0=^Û‘—ë2T UIê_õ|s Ÿ(k?Rfü=û,*Ü£~ ÞT÷EE€·—:‡ŽÛ¸*,U¸s¡œ…1¸÷†k€1üÔ/wc¶’ äÿÛ¿Ú×èYè…¬Z;‚ŽóOF®ìüUJ"¿=ßÙ¾•Ïüœ'Õ%R[²l=¬…Ôh ‘ËÙ;\U–dq(‡˜Ÿ6™7K6{IÁuYÍ}!.ÖÈ{”ÉdŒnûþ¾ºØ¼øƒô,0Kx2Ü àÄÉŸ,‡NÓOñRfÉÑï+WsÁH®ßk-Wß’Ò’Ò­‡­Uò¡ÕIÖœˆ«|ÃÞ!ÅÃ<ózªE2ûßc¾È¦+!^J¾Û†¥Ï·p«íæãñᯥäjš!ŸÜ)ægË©ÆõÞäu‹¨¡F^¹.ð>;ÿÔÊU\sÑÍdúz»Ó& oY,µN5ÄŽøÑª,f]Ò16ºxøAÃPÝë=%Ê×ÚÀÙV(I¶38\õ1® ¤%Jÿvq( ”°¢Mt5î@Í¡wKæüRÞG“gqŸÜ1qû3Љt. ²Ë”ÉòIªr‰ Ûž¥š]Y¡4ù„J]/oWÿì=õ­:Þw*ãENÛõW¹bàû°]?ö²Ïr@ùAÚÃ{O%½D^*©cV~Htð沟OJ}å¸÷°OUJ­¯ë‹uµ™Nòk$Î,õóTÙ`¨Ì^dÞUí+8øáëõËíï[o~ì7¸œGï þàÉÁ}µVÖJ, oáÀÔ—EdlK¸íföx¸ÐÈ”ïàa¡n' Mq(×yéNÛØ!=a‹œ³«<ßJöV…_ÓgŒ JJò4Ü EL=+3Ê~S&þ©Cp|Éë/tìÅàòsJ5ÉQÓÊ£$}Düéž•hJ¨v<Êwð–D$ºB\àý2×tlWÌþËÁ9Ñ{¡3zŽ-Jþ3OùX–ƒ¥…¯~›F!|x,Ú“Ýþ ÇuÍVò~òJy˲Ÿ¼xÇgXäX ù6,‘gOŠ%a£È½É¹ÏÏ ?Û¼ŒÏG¦%@Šëë&ò-cÀ À“ÎvèMè#¿þú õWÄÒ‰Îß‚a鹂¸ #Á,õ÷`ºõhìo˜úèÊ7OOC¸Ñ<5¨• ?ý3hœ,?0Œð^ó/L_6Œù¤H’tª~í弌/“„jÅzWç“e| .Ûú|$ ÆÏcÀû‘º¶²’$3ý¾°4HC$Ëlü0OÞaã^. Ó%–Šmå&½èÿ:ç™Æ5hì”›`%Ö+ä¢ë»¼œ[¨’Ç&\¡ýþªÒ-™˜b A€Šœ¨ÚPyŒ¢Ë'Áw„­“"ÕÙæÄ!ù<ÁÏ+Ö*§Œô]üºï:„ׂÑ]{6ožŠ¶¥ãNŠ“]Mþ]¯õVýTj7^1‚7Ê—ƒ(h)J681ß!cu1ÐËd¯øšWYÝÏô¨ ®è@‚°ÔäaShžì±²z¤ŒŸ;Nº)O¥Z š“Ô÷` "¤«‚L¼F<,I/½1g ø¤øn£ùjì®Q2> VàÅ«0e®¾÷½"f°-îKRŒãÓåÂü宿góñŒbõOÿ8XúöÙ`¥ž˜½àùÛ>Z¾µÉå'ãm ‹çÓ´GšécÁŠÄ‹ñßÍу@¼ïõ)[8fã‡|ðTn ²Ã*€Fb rËÆº-nzw΂å5íeùƒýÌ'šßîKéú|¼—ñCœ¿ÇOÂÄ7d#õÒŠÀñÕÎtPïå¬TwTlÛpжr÷,¯tEçí=GÆ¡7)5¥E0Ì£³cã)5n~Öª­@é±#b‡y"ª™¢²2½„dmØ”&“ÓìY_,ü#Ã%ÜKNg 9¬¢;’8ù˜† Àj7Ê;h ¯5bFª Ñüü¾uSá™Ñ;Øö| ŠiÜa¶D£a}½O•¢%8ã± dT§‰4OŒÐÝáŽt˜@õg¸Az¸š¢¸võ…íMÂ+äí¿ûn·sÏ‚‰Á<@š ¹íÉI Š]ýx£GÁz³/f?b”‘ªFïÌž3ÙÇë"-\E‡ØÍXª‹Zå†n9™ï#íù0nX ëu»0½wÀ‡êeÓךæ_“Ý=ÕJ‡¼ÈqÚú™,}RY—Æ8ü§Ò_ûÚ0Æc3½™â~­C„PŠaìœ1#³~õfŠLާŸZ*òø˜¤çkwElÎ1i¼T+ÞÀ‡LŒÛ±róÖAS³—¿oP:ܤO.9“è:¡–|Îù}ÓâŒÞ>Õr÷ÌA®‹¤§»øžÂÊPë8â]ŠåvùgD|Í]¬ƒ£¡šß¦:˜3)öÛÙ#ŽâÑi Å9>š —/ú”…sÔZ8Õ'2u#÷ñ ¥ž-‹‹gýþ =qÿW¨Þ½$($ùß=É&<†"ŠpEî… êÖ£÷çÛº‡lâñ½Vß²“™C^RÊ¥¾qôtU^ñ¿ß8ŸŘ@9Ý“tX1¢Ÿiôê~!75?{·é×¢øU fu¿sç&dy[f»wöC—pÈõ!£$Kƒ €þøÝÆÃÊÇ®?Ân ²‘E“2$Ÿ±9¤í™ç‡ô.)ÖÏ´Žù·ˆq?á\7Âð(ȶå‚'¨ßõ[n<4ýfâG¾œ<4~\}Ft1,¿¹y:‡`ÉR“|C‡åˆ¥HNã›xbpnÇõ«»8LxŒýR_h9{Xc$-̤õÎ^ø‘DØwwªqt<†UOË%¿åÃ(V#pOYeˆ‚¿ƒ‚  ùàñ6[þÅÀ'”&xé$ÕñrâF£]t±Ô é\­`Òt0æ|.ÄÜ’~zcçƒ7wMú­à÷îžZ/yÀ#É~¿tòKÏ/“ÈÈ#xÙ˜y—á*æüçÈŒåI¹@%«g5X1Þ 0?Sœ^p9¼Óå Êæ<ø{AGΤzyϬ̡ÊeÚ[á;{´ûÒ}­ÆÓ"‰bX/”AOþV’+°:lr™¬7U‹âê›Íß1 yré `?Á·ñFGã]Âêýuˆ(Of.vÏ›ˆÒt¥mø•1 ,Á¶>³ çx^òÑjÁ8 0_g4 m`g…hçi“½1Gõdíšê4q)Fü,ráN×£pŽûÚn™+üŽÒO6l(¬³<‡°»¤À'‰ÖA6T²G‘澘ߩw‚‰Á+Û[äúŽ?ZÀ!é¯ý®ÔéÉZ@^œöç +ÆÈz[YGÝ“$`/O1õfCƵrâÆ¦Zçµd±oÚòSóæÈÒöÆ-FòkœâÞ±>¿RѾ_ÑÄØ@Ì%‹°(€¡Ÿ›´›gê…¢9{YfA”×[rX’ò^æ1Úû[•—×!´Kßí/[ªV‘8¶°øGg½2Y£ºµª2uüaÿ¿ëEL3£OóKºØ O‡ëçTx'ª¿äÁ.UO$«ã=ó€;2uÚ§@qƒ-Ó6}"õݸD¯% —†èú`þ©òZ¼%×)(O–ñ–2„ä]:’²L~VÉEó’Çiìc pò2ì׈¼m rè'ÅïÏ.J²¢K×ñÁòï)F÷O³u=²±Ï$“ús®­ëÈOT†r:iƒžÔT+bf%}½pË\)}òý©DÎí™8µ æi£âQ]1iaMßMréǵ„âWÌ3x#UºûFušRs.“ aç~?áÓ. *ërˆÆ eLUÔ’6nã½±G §äöW…péRýBiÜ®w¾¨"fÀaÄÓ¿oÃnãoR½(…ÝìæŸ<Óf@÷“¢rê¡@kÚ`Ÿ÷ŠÐ¾¼(>FyÚ;oug¦ÇoVÃ"äb{nþv&“æØl)±téûù©ËeƇ“øßrã!¯šx˜±aUž³õýZÚxN¯×6?z`³ªB/€snüP-ä2Ð&fÞ䙲˜Ø‘WìP«Å¾;wpodš‡ñ’~ãâ¶·ŸRQM÷ i~ÁŒ €†ã6«¿·Ac*$¡,Ðq´c…J'Ç\óUý·wÒÅøB{š‡by‘Nl»^×'jå®(ê*SWPègI»sA½ p¬ëªy;—µà•¥_çý™“£|Qµ…cÿÍeU¿¨8It½ÉHMƒ¢éÓ¤ý’Û¾¦x¾ùÉÛÊæÄls#c´Ì™@ʵ”$Ãú]—,¾MzðT^ ”G²użú€Üs#ôå­¸oG©Þ˜POC—Ë7tŽ»Z$Hú쨯®kæ¶&ò¡ˆ1׉]µ¦™TXûr£8OôOňD×8¸¡ÞûšT_É Ò28<ö(.p7=í샮½<–•ð×xøXö¸V “x&ΟeÁwo V872Ýç2¥ÝÐzY˜×ˆ[I|ù*òêÆŸ®¦) ®‹P*‡¼'êK¢AØÆ%]éÊÄgïV¾ÉïÿÛŠššˆ—]ìMÊ+OÊàßé0Ä=ƒ¤d.D»Jòßç–îïkÔkß½øH{Ù©•J˜–³š™’ÿ¾ÿnL~[àêùd<°9‚yÃóv€†mÒ2tÑ´-…4Ý {æ=€ã„à â/1±:yt! Åóx–ò.+Ý„/Ý GøË% q {“uçJžÂYfî’8¿ßܦɵ9ÍO`)-~cr,>+ãº@y¹âëSvÿ7#q‡òwùÛ}#s§ÅÔÅ›OFGaˆßö«tߨàäªàùåq^Ù;«'iÊ{[jƒd;™üiPìC)Áöa<ĦØhu˜¬£FgÇ„?¨•Ÿ¨§…oH¢'àwô@˜ým ¬òò3w6Ï’Ï8Êa6åý…Û8ìœÚYÇ»íx¬,õëÃÖkÑóìe²S´>Ãõ`wIú‡û¨5*ðëKÇš#ùd&y õc/¼“MŒ7=ÿ~´ënËÿ) l ˆáߣh-psé`ëš‹=«¦!ÝjÍÏ`=â›ߺ=®¥ÍT‚Dý`Šª|;YQ¹ln5®e¾–ó^åˆçûC™Ü{©¶C¬à莄nèkÕ?ÖâîE¹äªü}ÙˆbEí÷PËG5Ö%à0A#Æ2L#²‰ž‰×#x_]:Õk.»©Üv±GèiJÜÖHý^µŠ­?“ ÅF{Ö¸»ˆ€~)X zÄèWPÞ ‰Ó)S²>‡µ†PȇwŽâ`^p$ßôD›þCX«{ç>Òc^°Ü.¨Ï¹j–¶ÑÉßP¢© ñ[߈?¶€Oz;,·—¼À[~ÌEg8™òIËCÐcè³ôÀrbÖ‚ò£Ìý@®ùî Ú„7LãÒ¹„ª4â"ÅÜÙ\ ‹H ®§‚‹útQŸÅ­UyuNüs}ÍÈ|v`œûÍâºD@N¾o¤àJ°ª»Ç&’`f̆m/% d›€k=!ª}xÍó–'½c[W±€åƒ ‘LNÞ’,w±ç¾ Òé{ òûæûÀ†®Ô­[ïb±²Â?žLA—2L‚½‚7õ³‘¦W–€­ ¡¸úRX±ù±­ÀѺ99â‰ý/~ǹ+Ú#÷¦üpZçÝÈn=øZ_3œÝÂ+ÁR*žãBø'䎄'f†ÅÇ“£½÷VªÐÝè@¾'Ó¿½ „FŸ{ºýÈí–Œ6)ñÛë3DøºµmæH¦SéIŒ¸„ø%ÊìÑW¨å$Έí0ÿ¢‰aèŽçEgi+ƒkÇZBEÌFµÚËÃp—1 ÎÚt9üãÐÏÔ²7/œ¿ÚlžËe­B¹ØJ`ÓAþfY„苌·IƇ.£9ŸCÚß-YþÔ‡Æ@ ¸>áàt±×bœ6)4ŠÀ˜jðŸ¶Ñ”Âඈۉ·lÚáƒãg„°ñ‘2´?0DÜ'rdÞY’²bà›®$²Á²å{ƒ„0ÿߟ҅…ñRô’4\wr`ßð"gDЉFüó!Ë ý AX„Ú—_ÊJxµz™§íý,ï;<@æÀéW¹™H× þ^ÌñTJŸjZ— ñgh/_$ÍçÊÇlðïL,_¯Iöó À®Œcµ^d”¼!÷ Y˜zU/¹L¾i54_{íÃ0àë Ì~ ~© ÄÕ==¾ÉUcK²_ƒ#\ê$·Ò£J„_…œá„á­ðdxðîé/ÿÞÚ¶jÎt÷‡fÎK Ì_§H†æ·é5+‚åØqxqŽj òë&ןEbá:e1°4/¾…vW-¨>Ͻ;ŒÒ¶$ËŸÔ‹/kÛpqijÍ YÙLaö{hØd±J¦õð¢4#:Goäñ'2T±Kczè)ð!@Œ˜1x®ž²°ŒÅ£Å‘TŸ3”˜Ô4÷1äìX-$‡é7".CÎ Ÿ½v]*R­áI‡Fÿ«VÆ.6ôµ›Cäž&϶ª`¤>Ú~­±>þ~)™Sch¥ ù–ÖÝžø •¹¹}²²Ô ‚ I‡lmß% zFöö²:Õ ÎEJïj‡§âs•G@˜ŒÔ–ö›¿ý¦¹jr¢¥ï“Kjn>l‹ÐÂ{ôÅå˜q Ôö‡ÈVoU/A½]#‚Ýö„(¢Ÿµ„þÃØËí±Ë*ÄyÁU“bÊ4ÝW|áD²&@w:ðµ ê<ˉç32ºÞº¦Ê€ê”|•ôæ§Ì>Çù$If"pk$´={jø¿ÀŸñ¢ÿnÌê§¶ß(N٠Ѻj kŸîõuÃ)ŽäªTýrµ ?GOP=?—º±¹B<+-„³œ7G1J>x %& È/ºSmi”M&£¥¥I¬+˜Xµøp>£Y”™Tšƒ°"m„û¸¾_tœNÉv‰OüÃØ¢ )d–Ðq2ª½|î ]b¢;8\éù*]R°’úÜæmëç3ïáoÍ T“‡;ÜHŸÏ(¨¦Z„/À2˜a#`ƒ€·kS6 D™ÿb<_"žPîz=?&Ýùö­±o¯+Uåedt ØZ?I÷e# ¢µsÿúi6 Wï$ÞL]p¼0[@·ŸØ“ˆˆ!ÎY;m¡•Æl$%>á"º/2„»ÔÀû™Ù‹Ùqrÿ^ªåVwuïFvŸòÃ0 îá?š_9N‡Ûq¼¯>sÉËžàùwœ)åQ2ëùÐþl Ú!§·ÌØ;Ò ^ö “3ø¶åÇÙÑ ®COo3.‡&o°sCÁ…bF ¤ñÐB!Mó1Í]ÉŸQ¶“U¨Xç;oÎÂTNdÎð•³ÊÊŒãŽi–*8p³¤o1¦Ç»ë¿C*µ» ýõõ¢¨eeœÔV¥’ùnQmœ$Y3B±§ñŨ{§‹ió%r?º:¼&’?ÃÅÐs󌈸¯ŸRË|èI ³2gë1i]S²}PÝp]Ä[daš’›8ƒ’¸”TðóOO|só'CáG¼^ò´u]Ø®jBD'j€U}= pëÂ8šŽók)ÕºôIEÒ2É›-¾ïÎKµ'åg|zˆÎAhžµ³´þ×]r*ùåʾ½NîÞ[YvK9ow™ý[ ÚQ¥QÛVoÛnM7ž±YGð0¾¥ÖoY°š%‰añEÈe}Î΂3¡#&{(9ÊT£¬Iã"ãI¬Æó‹‹”¡ZmB@A| I·g ¤¢…ê'„X²²Ax…#{p„;»À˜Õ,#Ùë^äi`Zé÷\‡L“†ö8]íÛŽ² wígæÞ?ý©!~’~dªyŽôž\'áQ+|5{ê…œ±wÁñûo L‘Õ?ú—€éå?}TyÇ’öG7 )F†'yøíùVOîåaXZ«&†'®€þKë°Z{©´VTwǨ°ÆŠð©‘y ÎçL9܇8d´­'Ij©@\³¬cvfŠÄs©ð‰X|6î¯y ä\ƒó¶Ÿ³oG«}\þ•û+ɹ/ýšÖ²gPæÀ%3’/Á2Cë•|ü:¿ Âo4gŒ†ˆak&ìr[.fã"¤¼ ¯%Í•È! ð)â÷í¾¼€…ü³Û[•A¯‚ó=ß3÷ñoS¾ß6I{$K?J °´‰i±mØ¿$Óob°Ke>´@S²®¾ø^ùªµøŸ<çS{0Ž˜ŸRï Sð ¢§××üÄü’4î6ß߀½VÃ)Ÿ\ÿ§ÇZÕS„s)ƒEܨ›Ç—þt^PxÇàd?ÕdŽÒ)±gJîÏ­ÏñGA«—1þ²Øu£ñ)·1E¾"öbêµɪ•«: #¹bÚ%ä& 3!Ýn özŠ˜Ö?­F)ÆrP—òßýßþAY­c@ŸS*S¡ƒÁê è`l>7oÑn§lFíi]bÒš~wl¸÷ç*Â$=åÀ•üãæÜ91mp q9`ç#2ëpÏg¤¢®¿5½}Ú¼Û, Í%q:8ñÃDnâÊîO*/µéÝŠãfßNk逤³½ik–"ÖE†/ö I}C/¯kï‹çÄï'ŽznWµY¥=BÌð‹ _™”­ù.LÓ>¯«ëyÜc ÓO,îI÷D0-¢t.4Zõ =š_eݤÇ­©˜\HHŸÍ{¥ ̆n)ÆVÏ·½A¨RÒƒ~ÀÏšÊá^Þç­;‘Îg:éÙ6ySlübÉò¿¢l^¾PªC8Œç\1ª`sr§´ðš+ø« "í½ppGBÌ”3 »Vù*4öÙ\Ú“®·µj”ñçÖ¤Ô¸T ­ÌvÙƒVpŸº÷Ò_ˆ?w—q¯i€– š›Iyªôi´À`ÓÖzu‹÷¦@ïÊI"TH™·ÈEŠ˜~Þû{R³0tð |ËÑ“~³”æÊC@‹¸TÖR”ꚫ֖´ ÇÙÆ>ëëìÀ#BQëø Ãùzîˆ|þlC KYxüÂ0C¥È2m‘22Ø  Œ†‚–@¢8úðóÚ;M’vú»#Ÿòdã oÏÚEµ;yâ¯Û%´ÀƒëV%>É[n²ôÞÒ©7n!‚Ñá`æÛ”eE¡Åhÿi!Uû~Ç”SuýäÀÙX ß4D^v¿_®ó•¾¦SþT€òØ(ï7þ,(\UÛñ3êûÅ©fÇR*óê@˜•eR8>R7ET„5ìíßïܼb–¡‰Ö\—ûÀ ‹4(8^ž0¬8Oà0iŸk ÇtÈS¼“R–Ÿn[ð™Î­AT‡qñØé½CyîÏ’àâV™^&LÄÜd7pÌókä;Ý€¦Ìé’ƒšÆ`JUWþø,#yù¨«†RÚŽïh,…9[yÙ+Ò¸>”YÉãÇS†æ³é¼\E”û1£ØaüwA|%"¡¢ö:[ñÊEN+‹pDŒO>õîBÞNÐ(9]ºN}Ó9èzÊ.vKGÂç Æ$ÌöÛ‚—±Œ@~ëÐ]°.«ùwFõp*EÚý â±À¢ª°8›¸T¾oã0õÃóÇ¿«o†²¤ƒ+üj›±Ç¬ÞóΈ°ë6¶²¼< ŠØG3c0ï3¼ãׯsêÕÌ»EÚ°z驪uרXsb¦ëiˆ¶èÐRâȯ¤°žÑ÷lܼ†vr°ê ®Öÿµ»¿[ì-ˆÏýžðtÏ~.ñ ÍE™B`G7½‘{e~@žÕz¥“ôsµci:óýö£Ü·»p.÷Äœ_ÊÑ>»cÂ’Bp¤weu¹‰¤Aˆœ+;äuÈõÌì4e€¬GJñ#äcxmÙƒRÿbêŠíåë…0®£§OV>;õ€®˜ô"ìLõ.U4Ϊbüú@-¢¸C€ø=‡—“®€WÓ^›¨í–¯Œó;Øv;¹Èsl‘hèÝQ¹cüÖrçâ±På½á;Ë_ýà!³è@¾oµš¶ÂGý ¸Xóû¨ÂhÓ}†Ie–áa¸_d+jçÜõÐä’ïK™ïUk,‘_NÇHÂSc'ì+ñn˜{ÛR‚?¤›EÙÏ›9¼P’OÃeЬMZ¤þ~…r·Ý7¡D[ª.k» +ùÊäµ*œË[díRª‘—`à¶#úä,xo,ò4Väæ › ú+cFaî(U$­ úå’à)FBqVóƒIÜÏUÞu¢½1>'ÕÓd¤9ŽMÓZ%Š/åúд¬œVrïø¹z¸»Âè•i 0Š^3>:×{ç#Læû U ›ý€8ûDðx耤K­XX֫Ι<÷*Ûö‡ª­WÛð÷zô«œF^Cƒ×(缤S×rpÀô›ùÀ>'SÌ ´?ÌÛÇ7(4\_q‚”\s÷YšjoNI0Ÿ¡VšJZSZÕj ;Kñ ¬9}ô)› $ͽ¹åöÈ÷wjôÆ”?÷rû‹ÉzXi=hªGÊ\äd¢¸ìªìó„Õ ±E-¸ÅÈ?x@ž¸åº›º‘J@“û¹ Gþõ6k“"5…6í‘IS³7¹³¿Ÿ-åZ ˜âùrÛÔO…lS_‰°¤Å0µìº/N“¥MÉzù×’P¯_.¤uqõöÒv M{ççÖ{ÅhÀfmQFä?xüÚ>òš ƒ¿¨’Ct 1¬Óh"?¾ ¿ü@o oC¢˜)þ†¼ï ÌEÓçI”í´:z¼ì!ã:)¢«Ð*IJ8¾i˜vî§$tV_’Ù˜ᘇšþºtŸ:³F¸‚)eÉë:á7¡×Ûj¥ïâC¿1î~þ¯r¸Ï\ûHYs£òT#ÿ|Od¼ã÷{¶2ˆ¦•Ú$Ø>×c&«YwÊ<½¯ÏÙ°ö{˜üpèÆzË7R´ôX€ªåªô6éÔð öZVA:t§\ñà¨C¤Aº=9E:ˆã6oúž?«ñsñÒ¾Ï(Œêƒ#˶©/Ki«!Ø|±Èxs„׃ƣ¤9yFOÅúë›âQîûÆGªu_Õä"ŽBïÄçpcFÊïöe¿ñÀdëÖÄê§”9ü`³½k†ûe— íí¼ÿv®_eF*r­ì^)0Ÿ™LG‰sxe‘ãÞ­ÇI( o…à¾t™ÔÌûüÅ:afÑ‚²É¢ûhú!-”¬*ä¾Õ ÅVÎ*}\-íRèÅúÛ¦(&’ó‘@:,‡/˜7ÀÆ]7 §¡c$ò’«=ÉíÐxSá?ˆÀl™9<†N<ªäyÈ™8q’Au†îÐhÕq±ýI+zý-j2¿Üñ²%‚ü; º Jšu3áÓôäð¥•iÙåíÆæÓóÜ(Áß<…\U¯Ëħi_Eb†\h˜t §ÛUú™{¦ntKl^¸Ô¤Õýâýf]ÐkŸJ(Ε; © åFÙ뮪§†|¯Â 扴AŒ$CˆË7Z±S…ëEÒy¯ÿ>~¨OsX+ÒC[ý0Äê ^ÆÆ7òŦQÅŸ‡éD}ùÓÐeÿ–A/¢k¸V#Æ€F2ü¶SÙ=íZ0« ùì† Ì ù‰‘ÈâÆ7áÂaÙH†¿ ø¿ÌðKs@1šºÜZט|7 êqd®y|ïƒªÔÆKò¬×›_“„3ÒgLf»Çwå‘Y1ÿ¶ ¢cßß=1Þ»@¨& `‰ 1ÞŸPt--“磶ãEH4!5çïŽlN"kÛ¯6Ú]ó¾î {B¿rùøj‘™öÏ_îi«°™Aê“´¨’º2ùo.ùwài^U/­àJl$’@ý·vä§!Æ«'¦Þ€(ï£M›^±¸„á ïÙíz1e;‡õz9lJZ—ôRªöLå•m—ˆÞ<éºÍó í¤ébGÝþõ¡º0¤…æ»Û¯¨DXÚÜ {›%¥*= · ÈEh«á„¢ù3#¾ÔÁP`ѪÃA3/|ÿšwÄÓì" + È˱޳¶Ôþð‹0›éžâ¸þÑwaïü—³…‰~ròpªEe²²qˆÿN¸$˜ÓÞ£ŽÞ¨B¨ Éüyd¨,äüj¿~K¼â.¤ƒgŽøêZ¦þÄ?žÌí|JßMTáqž÷Ò;ÙËáï”6Û˜Á,UX€ŒÆ½ m\ðÊL¹~¨_&ÅŠ¨hç!Ö-T,ô]¤pPbT7QÚ\Æe¼u¸í8ÊQºÞƬ·éÈËʺÁL”a~ñkëÔ”5ØGX‘0µW„é²¼bt b ƒÅÛ—Ö /nyÓB¤¶ÂÞH¥A2·1 ðXèF|M˯§¸ÿe6O¼;žiÕˆc€_ËN[H’k´ø·Hž-BTXí0¤áÀÑÁ:ù²;LZj$ ÊË„žÖY|PºzªËZN…QIìNƒ3O4â,Áâ<ÌR¼âÊó¼Odû‘ü©a&oÐÔv†¦Ý¤+QåÍSÈYn¦ÛïðÅpáu J®¿˜O«<š”\ƒCÀ‚/]éëî®Â¢’=Á`Í«ã®`  h5Ù‰ý7´~Í×¹ñì[µªȆòo6\?#õ¿.8"”lxIÿ;×g®FJ~§‡žOž 3€;u ËóëD 4åµI«¿cœþÖXËÞ Îã—‰ÏØýü%â‰ÅM<56@&¥|­`¸-^'á5{@mÏüðMØU¾‘TKl¡>±„û_j¬„òÌ)î ¦ñ@©üX>„CõZÏOi kúygʈ˵úXu+B‹Ï7XSŽO<¹ÄgP])þøÑÄŽbƒ›”FºªÿÎÿÀ i£’^ðìÓdÔ!"ê7M4¯hñe1iÁú–ßJrûê¯vÒ«ò• î=ðõ³žâTª4;#>'zûž½%ìïöŠô–Ý#«MèsÿJÆÐ»¼b%CìçT?ú]iÎ ÓþVðG<þÀÐêõã¦íþæÂäȽ¬`=’~â û¸ß@ÎY°Îä÷Τ‡„HóùÓjl±Ã‡Åµ¯¬É¿­"Kµà`G¦ñO€ÜQN^Âkx¬kc°þö£r"Dn°™Î¼Ôõ*Ùè"7ü¦Õ½ ¼"¥ÀWFÐÜ|l+þœoO¢¯ªö}TÚ+à~è ÎÙ%–%ƒ'ójm‰üÃ7zoÝkþ¢þ|‘pò¢PO°¾€ì-ò$A©¢(ŸZ¸^üúš¢¼]¶ Ó5ðêÒv.ˆnDSø4œü Ì._0õ˜Äö+"æwû±ÄÀpÄ"ÏxDã¤Vh½62Dy#4‡v_®òCè  ÿkvîÓß …ãcª¶nf&pÈYû)1¾•ýÏKV%1€'ÜÜë û˜GFG‡«³P~ûÉüóK‡*{ÅÎþ:ò“Ì+wzk1ÊÙ1ðúñP$è²þ"ÄY4ZŸ×¼ûö×y:x™ aH|¹’Úè¥ÃÛE^iÏ!ô„ _Å´rŠç‰0`ÈsÖ"°ÏZÓN®,Éd†V¤®ú¯±5ÌŽKÏ3R†–¨"»\)Cù® bÿk,þÍWàQà3?|;¾B­úm)mRYd¶ ÛN«o¼¯pum[ùŠU¼P"cùÑÍ6S~ÌM¶UU{*HR²!߯£‹:¢·òçe'ãy#:|T˜80åj¯XŒ\iñ䔪öŠ…jù{'q ù¤h‘öæ*™‡k³áôôîÄ[ð5¥õ¤ 2sZÛP€“ºÌªzŽAÌ 4‡p#•)Œ<1U«jø{Šþ½Àè ‹ój%eNlGÚFUv\àîh½ÑùCIA·ø}·×Õ»è,ÌãâÊׂÑVFr~*Lï­œÕ6™€À¾?÷óFÎþ²Õ™4fÔPÑ',z³—ò¡ùš¥coÓ¿¥XOÚ£A‰JrÑÌ» bñ•"„—¦æcòÀßN8Z‘'”õ®¬–¸Uu"ÏV¢G~Â4¾ZÔyAÍï°pA·ºÍƸÚl]Ç3wê–=Zi€w7Y¦üññU®Þ W¼³‘}µlçtvABꮀ67¦Uá§îjºR~ i9g}c?ï÷!éaÌ&‡Ÿú°4Àƒh¨^–ô²ë5´Ç§ÞIxA,ËÜ9p_r1ª«?IëUäõ×ÖF|X—=‚3›rÇËϬíbÄGÏP Ú1æßþ% qzTiÌ«w®ÆÖKÃ\ñ.¹æÅI¬åE)B‡#ó›ðv½lñUÇ ^®d[gÊ!8Pÿ9«o@ @ŠóoK›ú3ŒoI¦cÄé\£É¿ëw6ø,»øhˆMŸ%Ÿ°++´á®Oð9‰¹®ëm&õ[>@Š4Éã”·= »Ã“Ç­Pcd`5Ö#­þ8*K™ëTpèS*\¡RÄ.Ù/¨¤ Òe|Øl¢Êb1€‚þˆÓõÊÁ¢ ˜Ðå~Y€X—ý(ü‹úQ‹ à<ÜV¼þ-ž}ô½7’ÊnúºÿÖHð:ê¾÷j®%mâúޏèQøðB aÛ•ù¦Á“·GJŸ¿yÿM„Y9ûò¼¾íÆ®oÔB˜Ãp`ˆ7öÇ <:‘!@ f‚¢Ùü1Û±Z-¼|Y+ya„vù1|(»Dú¦;®Ëˆ)¡9 Rz¦æüX+"~9RÀÀòù[Ö°r¿QÖx ©è.ªeøï´5éìþzÀ×ò AÓAýÇÆù»ÑæÀfe ã)FRÊÊ=X’µ ËDÄâ³°ûÝgæñȹ¹åÇUÖ1Õ8—Øli'÷Å‘nþ~µÈ1v€~uê³›?ÈŸGE ¡'AðÒ™­_´d: Ñ W¦tJûŽÁKÓK¯¨àÞíöÖ3v,xK]!ÝÅ£0f¯Úaé|z£Uo‡|1FSÊ·á¼Ò×ÍÕÎ å“9ègúeOŽ+²'[H­„¯Íº518ò@}vDÐâ¯?qýk›(p#U:tñ  uÝX(%´—È<>Rr8ô3+¼©bV°9}s\`Í!œ|à­ºyp˜k"µüLŸ‡|wvÊÅ<ôÙx{I—Ʊ²i˜ŽDgiT9“X>·¼Ç5€én÷@8.>éÇPˆ…ÀVªEiCŒ ³º[²\£@>–,0æõ)…C~Îü=]€iË¢¹¦õ­·¥Üƒ^ë•]ÛNø­#ƒÊÈòý‚/ª·pINÕD }ÀžÚøƒ@Í„þ·á¯ëoú@ð¹Gb ÙUø±æMݲ ð`Ms’}Éœ2eÚ³—óC¾ªQ?B|¿»®ŠHè†p×%a+ñÏÜ3yámúù…ƒJv«x|ýéØîÁù[aÞÛ…R¦oÊKJpŸx"`b}?ù€>1<™(\ðž¤{ú©ø,E±=¨í×§,…@}ðÝÅ‚¬Fë‘jÊv(ëÂd碦+'ŽOhbÅx`ÚÐwåý¯‡øNLQ2äÃÛs}=âó&Ì•—8¥Õ/ÁÖ®çœ þ(©&–ÓՉבCj.ÂÛÙ)sLXdnåË4ÐÏ þ Ú!°Üß[5R qŒá[¸*‡ï¹ ° yÍ©œ-ìÔ\Cšåt–¬LÂ`3IâÚïå¿< ˆz¡óó_Ð"BçAW`>3ë1AªØ5ÒdÚn8xm/SÏÏŒWyˆëÄ•ëÒyùÓ œîû€Âr¦P}Ú ,Ö g)¦s÷iÓuP«Ÿ% ­#d·svý–MUF²ŠkäÒžˆF *š²:’Du¨¨>Ê·X2»úŠáŽÏ æÎÎkºZÚ8à• UÊ­÷e~-LêÖæ(ïÄx}“hgÁ4:¬2Á´’ ø`ªØZƒ0aºbÊü¬ãó}ñ‘}æ—ÿÚ çË…¹-“gkä!RkÜ[ý“oõnÖ„vƒàï Ï¿-áržPù…’*I'¢"\'Àý¨3D×éX5qð¢Žs®g~ƒ…o©t(Rúsg&XÉx$1TÆõ¡…fJ:¡ãm¶ÎšÕ1rYE«™%_ønbªœ{Ò öL!}.*p™…{9GÔO5¬rÌY.¿5Õ“z&Ć?È:ȤÉ>ªºa›Œ‡“ÇqY0y4êão®Yë­ÂÚ{x 4S?*Tä4`­z†©ÇôÕ¸ÿj/ÛuO¹örâSR•õ’¨ÃPµ{ç—Aç;b§ŒÒðm=ßsôvTšTç4ïþ¾ gznkÌûÀ]_ù ÌZ,`÷|&¥{ÕàõGt޳ơOæÇÚ q¢a™ÁÝÚ»?þÚµ„û5Ï9‹Í]ֱğ—z5ÝsÕý¢Y›þæÔ?ZÁi(]ajRІsÑòßâ'lsäÂþÛ "}@(‹w)• 0göq²àÆä8/ ¢«K# Ñï¥õáQÝŽ•oÌó"Hõ‹˜Ã~®‘`ÆI=r1Á¦—Æ;íh¡n)` zºKâmOÈ—¦Ä EasFâ¥èŒ-îXÊ‹I£hUÒäX]Ÿ¯$ævH «:Â×|$øMG2'&Ь;¿.X¢PA¶h[å‘&ïN®@‹92Õà0»~Bp ÊÊzÜÜoìÜH‰dåfηŸGùŠŸ‰nuùDwõþj‚]Iü¯WñêˆâŸ@“‡äì[þf¡Ç,qÇè-h^„ªU/38 ŒûN¿é¨qáìsósÉa¦/‘ó }iõÌAµÉt1ñ»ßÇü–ßdLªCÄVæ~ˆ£òîõG#p÷†çw8@úß®E¿ªYŽ™,…/ôWÖö—L[íP™ phb™™—ã<â¸ñ:iQ¢ %ž²VIí EqıÀ©÷Êá¡xp§8|Òân#µ ˜îÕ(pýÕ”ß)¯àGÖçIتóaqm„Ùz5ï/bN öÊ(AÒ>×^È‘ÿžI”FfâG)ÿ!ÕíLf8û=.`Vˆ÷º›p˜qXN©nuYJó‹7Ýzx ÌŸð7C?¢Òë¿þ(„À JáþŽ!aVŒŸ ã]1íA ͯ˜>!ùT¼å,]I»¬_-«ýØå¡Bý÷¹@Õ6üÀ¨Ëë3(by„óùPV/–6ûÓéó8øK!e<K½‡¡0†Ý°ÒYÑ6ÒÚüìÙÏ~J²­3}ó$ ¤8+léßêÓÏcîEJ_L$!”Ç‘8͉›ÍÈrKC{j¢U®^k³|c²Šº¬+nUûj\·,ÐV¸Ø4M{Ÿy¿?¡ª¶úö¾ åÈ'ˆ#T÷ò$½tG˜àt÷vòµ™¼Ì—,ʧè&ß-?ÛæšŒw|& 5WáôвÞM6z.÷)£’q9×çTÖ-O‡”á ”2òï Ѽ߀˜³È²ÀÁ Ý 4ùkó{J3sÆ?ø)AõZ0„¹i3vë-¦Gp“¿ù2wÆÔ¼ zÆ_J=¢ÒɹâÙÁ©°ÜQ¤1îk·3p’„¸÷6ÃïZM 2és®jüiߨ| läS­ñ¹Äð‘ó!áJï‡ÛU=>¬¬ž*êàßÛ„L~<[w9ôÇç¿õ¯LgD ã(nv2Åü»á—âoÛ×8ô05úýÚxÒs¡Dm ?Š4l+®?þmlÿÖݦö¯Ì´êz¡dÉDZÄl]Sw÷û®¶ MWÅx9G:·Ê$a ó"oJB"®M±ùYNöýXÓëɸºõ¸–çü]K™´¼Ô[Ò]5k›ö¨ Þ(à“ä׸þ0ŠnOYu°9O)bžN:¤ù­¤¹‡üµ®+aÐu©F ü×Ë;UZGtÏÄS7 H®æ/ ˾­ïBœ0t‡¼\'Z|‡‡)¿}a$Xffá‚Å®I”zÌ,££¯;œ0¦ó T9`öêóiW2ŒÕ2ëZHHõdPe»±‰ fö¬ª’EZÓ¸ ,0~àÅñQ¡Íµ>}9³–˜ý€H5B3ÜúÕ¦¸ùe»á[ô"¯Ö‰wÓõôï1—–ÌgÞšSnúˆ6©.R9ÙOÑw†Ÿû8Ä Ñ9å<©ÉAo)½Eèw-S0ÓlŠwî‚/xyÚÏ \aæ&ƒŠô«‚Ÿ<,þq}.ú¨>šè`ž6„Eé7¶–$Smœ¬9è%\Ù%ññG<°JUaï-Ü ¿çÿŽä "K©cüÖ}å 0¢ûÔÙˈàdm uå¾äQpXâÕ¹ˆ &›\êJGD‚$Æðú@8$~ ×ñ#¤wt,Tpö˜ø³¼EÚ ¡AnäZM°~¾¿ŠsIO}I©Û·7š3*2ⱦÊDP%ú#ô#Áp…õ@íà­Fa’»f¿( 89öh ÿå,Bâ¬&S²òŠùáƒ}lõû}×EùÿtÑj§Ç´8µNÛÕu]i¸bÉæ´ÐM €Ñ»~ε+N‚!e“©¥_bÑŸ\GF^mžÑ~¾_zâüœ!R’?« .'V,Ò¸r³B™3—o˜s@X†[Éc:„ÅhŸW\-4?<]- Iè‘´Má ›64º5Óâ†Ûnåá„<1•Z#•ä„»ö! ¬ V>HiÐ+Ó yð‡HäEPØ¿õE¥,‹FܪÊÙ­vÔÞËF™ƒƒ÷ì*þiž±º ™9gù(d¡çŠÿ(Ò”ê÷SñyÖ#óIÁòŸ¶êìh™<Ç+5ýVSßxô³ÚÑ6 ºþ^‹1"ŠÓÞûì¿›Œ\ã™érñy1ê†ëO‘Ää>“@²$;czÖ[sb> U†”³­ð Dh¦y Xt¡l#Bä¥F–÷7 ó1Æa6Pà<Ӭ~QF†4q¢–ªñ¥yÔ-ˆz“µH¿¿¶GëK—eFkâÆ±oÇÚË_.8&,ÝÖpo½˜pò}ªîRŽ;›ÂKÓ6š·êAøy :)hÞ^é¤KÔ ·{œ¼ùäÿzwgQy[­ÝвËHÃ^éÆŒl^œƒKSÙ±Èá8ÉÐI·Ÿ³^·¿³.~pV»Píï¹Rý™Ê›ûrDHT.—É' á˜/ÃÜ]þPgíöa¯l8•1ô5åö½cZC_ÛIN(À¸›úÒbè"Æ´Ýz4Îë~ob6 øôÚÊ3Ðnù§Y¬iÄÎT”¤¬IsúŽ^ãá|iļC±†rzÒþ–¢$h&6ÈŒ £±½é6Ði+p3%öq}ÃÀ{çÁIB¿´Ry‰´^ê?Íô3í²gF=`¢øk§No8Æã»!$é矛FfXñˆLdnˆ46{ð3™SbÆk¤!ÄG´ø6™ü=TJ5¢›å°2xÁ¨¾Þïo`š@p̨0 ³ÐÇ[·)ÇU>!kU+åj2ѳ‘Q8j…wа²îa|36A„â¿Ôp±Á€6ÜÛ[’Iž1ÃêÍ^gwÉKU‚V  ¿¶Ç@Íï¡ ØÆ¥]áÎÁŠ YñÛž^Â÷e¼,0ù‰G‘9'ÖW£Õ#³µG1 o4ƒè¢hí0[ß2ç ~ÜZæïKeÆzý˜JÁ  .Zf{ýQÓŸ%–Žm ÷8C|.¸à‘4eåLì×°¹Œ`üÓ¡Ä­Vy44{1³ÐÇ©’•KÀøë.1~=ŠƒÍð¥·s¯TïV™'’´mB¥"ôÒ¯¥÷ûä¶šÇç &}HA× bôqgËÈ¿W«4Tªón6ƒùfiÜZ[jGE¯dSć£è>aL/ƒg*_‘¦iíy¬_ñ–a•ÛP;þŽ•§›Ð'€G¹ ¿óV­¢“¯YcÎ˿Փ•ÆV§1<Åyá…OK°òÈðœÒ.)·¯D­K‡À®?thõKœÒ81GÒ>ztñ=UA4_½–¶5Nœ¾~1ë¼õdÞ#Å4ø §oáPé0ɤu¦aÒg`L_•ûží­5>üÀjY×ɧ\DÊFÙèX/D“¯MåÊ÷ÐÑ'òœôbóiEù’¼6åšÝé\óó=ÒHó2ÀE?˜ÆDç¶êkn©(±”·ÏñR07šõö? óm %¾ŽÔ Øëç¾ßLái‰¯Êvââ›2¾ó.Q$L\ >݃­ÒR¾zli&Ðo9½ŸÃ5I°ÍúªHc‘O’0¢“VÕ|Ý´Þ]ª ÷ÄL9¨8ôØ0…¼%Âf 󇈩ºTJ*-ÞÞ|Ttâ¾ïÍç^ËýniŠ@s-2põjBhF„~-ÿ®ƒ–bl €sƒ²`’A\âÙ!õ~'̧-Ez÷ãbÓŸ—1Q½oõóàÏõÆŸ+i'_/(^ož8£ÿ2Bp~E~óO yÒj)¢´…üÌ+ü©ÂL  þÐŽ6‡ËFÿú2iC-t3zÈ Îóý’»Ög5’íÍ×ˬˆX«êE©A)=øÖ¢m¿{‹¢u "(8I°xÄæ}¶š£L†îÅ¥H+ÁÚ ö2UZõ%?†—b ŸÌ±ðøoC‹ m•Vj ‘“±ßÝC ú;ŠN˜…ŸxHì‚CoJe?ãeÛ@ÖÈÐ<Ìq‘¸]BÂÍ&Tlª¤XµäÏŵtÂ",õ})aæð:ßM¶!Øôj%¾s„®­ëÛΊȮŽhZþ&¯^—"±i*EÅM削4E¥ª53íÈzãe½©€É´Ç6ÇßG’¿„tÍá>ô¶¨• 0 Vµw­Æ ©ûˆã„†w6mÔý°‰•?™W4¤…C­³ÛžD_ã¦Ð¶ §ùÈqLÛYIÀvö"-ä¥17?d'–Çi±È,ülqÌ)áHšl[Å’_;JÿC œÃ æó…ì- ñº°Bø¢6~êÞ|è@|â|´1³I 5I€Pñ<ÄÑžÓ“ >Ú±9ÔEÛ¿Ø’Ä"Å ;ÈŠzq7¶·ñ½¥BÄ^h’CÎ"c‚ éA 2±ëú^šôhẗ̇o¬’„…¥lì¿Õ½Ú¾m¥ÏÅDL <¼'xMÚà“QNõ”µ¿“lúÚæR…œèãX Î9çyäÙºïBèýÂ2©ŒS“Žê‚‹þín€ËÄó…þRìX–û³7¾ÈD˜0¾ÛþZ†’$?(Vu¸xt[bò•2¹Z5ëpùQ…œSü­ŽP%à1›µ¬~$S¼^„yD?"äØÄ3Ë 2§Kú©†(Ùp’…˜y+Ý^þG´ƒ{índôô ®Ýé¬8H›[öÐ×t¶ÎœY=”gZ2LñÆhf¡qÞ>߉xŒ¸l <[5&_^¦øn½Œùåú¡À›¸Ô-b™1]”[ÕøõK_˜JÓR½üëø×£°‚§¡F$,øÄ,¼ò>K©Í¶ËQ[XÒlò•ÓÀYsW$&g¢Þ Á4¹+uTÖ0à°sG#=÷ÜÇà_Výð6bå^e ‡Ù*ì.Fê ò8»Ï⌦”Q¤ºÕö¹ÒܹáI~ÿî>q~ƒæpˆ¤ÿqt[nAýö,È–äœ"íȈ$rúz3ö±W#3 Ý]ï>T]%@ ÜûùâáÛ}¿³+ð¸•?Ü=d§úR3í£_·¯¬ß3üH|£}þÈ/‰J{C3Ÿ¥)Éið¯1ÊÃÌijþcÅÜùlái˜CÿVK¼ ÛœÀ£UnÖï·ÿ¹`ìàU€—e ZSÄc»J"0 㛌ìœÃ¹òÕfÛeÁë+kö‘S"ÈÌTÁ3k^LØ>¿¥ÿ’Ux³õ >/ßb˜ÉǃÂ)¾ý¤˜ Pþ„~2MMô}i½¨è6í‘Þoæ€?ôeÚÜÀ;ÍFÙ—/ò£Ïm~ ß/õ]¯&&f¹h'H^ ¾Æ¢Œ:J:{ãaF±)Þo®ïcuWÔmWw†£°Õ€ÜÕ­kòdïú¾«ªLˆù«ÈÁÂÃGnžÁR´?ðãâñX§]kZ“—pïX‚8Yå3Yd”K¦˜A ŽÏJC¿yJÞã}•qÿžgôq7Æ^¿/t¶–¤OÒþå>U{TBhÈÈÿÐ6Û'(/©hUYŠ<ñàq(ÃB!V‰º¼¢;Üx ;ù?g+åG.8EJöc#·yð‚ÁŸàˆÏ±]ïb0£ÔH¿|±;5Û|1¼ÿÍ놃ŸßÒæÇöå?義„¯'6”7;}”ô[ßÑCô )àœüS AoÀ ] ²#ÍôӴAÊ;u]I 7û³a v AÙý #mÏeîX¸N*Í/†¶ß%`ÃPf_„é##þø¾F-z_ÂŒyLdŘ4ríé¯ýp±T¬ †Ñ‘}/%Ÿžy(b`\ãÿò–>ËÉI—{þÐ,SÐXì_ôÐçÚàœ˜ü{•s¶ÌÄMÊùEÿ¸^àE”:Ö_ª ÷/‡®¤ü^ ãaMl®üY3ÕÑÎA[‹‚¦šŒxäã¿ù!nyt@½Ã×x!—=úCùVp³ã¸@ö‰ÖÏ)*Àó§{ÊK)N0DeÁ®:¬/¾*–„q‚¾]bX—£jU^áxy¾¾ùh„ºüA 6Ô•hKnŸ”È‘/üzOh>¦¶Ì²'œ/ŠÅt«‹]>”iv$˷㣠ž|Ç5¼(Þv=R'å­o7RqÀî²,±£X°â#³*9°qn$%ne~tÉQN‹ªÉ(Ö·Q ©à²Ð«À'2x¢eÝ,bì×õ‘à*Íêëÿ%)º¼·âŸÏÜÇæ*²*Ïži Óêáz¨““Üï%¯†Žð,¡A¬%ÿ¯3=K˜;„7( "å£û­Ë.Y¥¡K1ƒëZ\fèí.YÌÊ~¾(…·Èïߢqˆ¸q§´Øåºà€4‰RöM=|I²‹ç‚‘—íÕJ,Y9\žnš‚æç+jPÆÍ “±Þ÷ê!Í×)p2ÞHœòß08®?‘Ü`:é{Œ¼Rü‚jä:èЭ¶X™µó·1>$+Ѭ’X¤ãKíÖ2ÕuêÇy3 –ð;«¹8|ÝP‘â±ÇÙb†éªâÊø¹Òa ‡-ý‰`ØÙfú'ý¬(7«¸dÉì:•;ü_òŸðãõcfm¦mý«PÞ$›Ž‡k÷1–"G#'¿Ä]’¼!JFÃr%[Rèq]ŸêDF%=‹~Í«‡!"þŸuB¸Î¿|…_“Ò;¬*I‡Q¿jƒ™gþâ{°pNvPçÙ"„¢Êyªæv 0Œ 2å^ζiÝŽ†¿‰ei%öYŽk ÓåÂß±µ\M•amÜŒÞ}ƒH ¯•ú}%–&Ó¢‰²5yðñµÀ¦yDÆü²ÔªÇWÀ¸ÅsцÆöæcN¢ìÙ…a|Чî ü» ¶]6¦ð žñ¸Yk÷šŽoü{æææc]ÜY‹¡É?þ/ÁàÎÂàÖUÚÎÖÕòóP»xmìp°ø—™T¿qzZWæ¤ `Ûß$?»\JM—šïìDO…Žüèƒñrì‹H=„r›0}–Y›X‘y‡=9e?^m}‘? Ð+™1¦¾ý¶s|c~´nCòÓ¤!òOcâT^[Že§c¢¥7‹µ£]'‹™a›ý ä—ãè‡s€ýÓÓ‚Ò•¼-œÁ™M‡d~ëo©/1° nâÅ Z§ÙZ{·ˆÕ3ÉDùÚÆK¥+Ï´g9üýåHÕÓs±¬ö¯j0p«âéáf¬fº°‡qZ¤yæ¿ ¹­L58R 8ÐÕ´çRæ—%®ñšx’[°jËòftGáC¯ë›2ê¬ÈJjÃRÒóèÍÏÝ^‚·éöM9 :E$úõKQÖ÷Íß{Ò•8;] €ÃUwLêR!¨ì.ToUlÇ=—{ñ5$¬ÇóqRÇ”% õ¡0åôü;Âû¤m”ýP¥ù 9ê¸Ã­idõ,F˜sèpócQëÞ2s 4".–ƒO _Œ~xöô„*y?ýja,^â«¥l™¿ÈØÔy‘}V±Ýª¢mU±‚à>âìÕË4E5«o.›Py¬"ªÙn•˜…€¨ÈwúÝßtô‹_Çü¾Û×H¨â8çȸj³ò§b'¿¾Óز7q²»2ÅqE&ÒŒ»Çæ{ÆòÊ1O˜÷‘Ó#céÝžX[£Yîqˆ´O§¨ƒfkòºköÕ|/Y?öœ²?ûÛò ƒ¥Hl¯ï¿q‚À.߆ùü² cœMëHá™JìZ a9@&à)¦ÎÖ¹8‰/?`ie\Þ+çOS%u™„cËI8ìÊ**]ôÃHŠ?­ià³üžàÿwAw<]䮆ˆýçna÷(S©b1ÞIó»Ø¿ã.s—ígç8Ü_¹'n£õrøµ}tb.¶F™´XdÓSõ[äGô:¢i!‚ 離u‚²0Ú ¬s¹>˜îæ»ì[-õº2Ç_úPR$,0'¨ [~êtK»š‘¬þpðY²ô&X=˜SxðQÝÁ œÄ{èYýPdý|õ¬a0â5‡bÚ{ð°ç qÆ>Ô¯;Դȃ­xœ°p+œ08“ãÁó|É^8â=fB{OKŒÄì÷/ÑNºý Ÿh›¹ÐV÷¸#ÖÎýuŽ {WÂGÊBÄ-Š‚K0•ì¹a¥Ãy|;õ3” ºbœ`Ũ|˜²Xð󑮣«›[+ ³.tÿz'¼³¢5ï`§à1sÞûYĽ×âèvÕÂ*C IZFàT¦Ç¸Tq%.,¶U?žÓÞ[ü!~Ìí-ÌóêÝ8þR6|{AMQñJ43,›Fi³Þì)í õ±07?êŽðþªâ«»AažÜ#’ _Ïkªø‹²ò0ÛÞû;ps¦™ž`9!iô¥{Fv¸LÁRÉd`ÙªàË3®[¾sÌ[£Ê:f.ÐÕOYW9ù3¾Žáüõ>dx¨']êŠÛ=ýÒðzBóûå‡;ªjüþw˜mÇü8‚÷å·ã¯n¢YM[ý`н½ Bã5NÃ\l©³i_©KŽ2pöd’Â'p’1¾¶Rõ»gÝ d¡æUÂÁWL¤í®•},<C¤¢R9(hŠ8ÏÛ@¨¯ï³ ³æ¯ _ ¼lòµh˜R»[²ÝÞ 14é:¥ü U†"îDþ=È\!i?)0Î÷9¸ïÌ}PªÓ³ÕÇ îåY7¾²<*©¡™™±bÅØ¹Õ@´ç'!£"KÎøòÅȼ´‘Dꇦ³ŽŸÙ\™ôÈ•ýžc´Í”OÙØÍù™~ü¨JW)þQÛ¨<{"çÆ?¡er«Oá¬!€ûDlÜÅnIñ›Â’ÕIþ0r"[™¨.õ(bCa‘ À&UI¤˜[¯m€„Ò ªþ¯{‹q-xá§Òí°#§QLäÉ©“(—FÇè,ö¹œÜ\Hò¦ìßÉœ#ëó&øODyG÷#e,ógn§>Rrí0M#±•“»6 ˜±ó^2‘ùáz\l¯*Äã¤ìB­+Ëö^Y)]ã™7àc·Ø¿¯+<øW1ù;ç«SáüëúˆHUŸ‘ËYw½¢Pž¦}¸zr7·Ï<¾àzìxYE³6]€æAßîô¯ÁH„IùºüùhËk(û7B71v1œ¥ò÷­¶mI¶Hp:¿÷5_íÈÚâ•8c”Ÿc²…—4½†«SÁŽV·Yb*å"üMƧËq“HÀ†-ª¿†ß1¹±Ê©URwª1XûûŒ'mÖç·À¢j–‰íçeú¿îô÷/u#רטpØ!®%1¬ø hìS%[nn\¬"Eû”ˆŸ&pžØ»¶?„–¢v¼3¬Žðo«Ø<='È Jº4Õ&oòFžà“ZÓà?ü©“ì½–·I™F†_º÷ªÎÚñ¨ìâ\Ûëo9ÂÒ_ÝRà™zS0òñ€>šÏ¼ž‹”ÃñÍÂ,â uˆç×çu. eN/ÜÀ¬ÑU±ö¿‡Yý…Ë>€ÙÛ)ÆÃ®wsð3|mÀ×Ìàtm4O¤qû!­Z `ï²OYúå\„աïŒæ¥«5ºÞÙ7fè*¬o/_%ë¼€Œ êg2ÆmA_d{ ËC‚è0‚É×;æZ¨Ä'ÉsÉ"™ª €ka‹^64ñÿŠ%ô9Åô^õ£ÛÕdïY~îCì_˹,›É¹ |E¶UÕu—DNºP&Qmˆ zîøxÆW(1·Òt„¨)ð }xcïæ.4|hL>_ZŽW¿Ñ76Mc>„J^eGp‹Þ¢–¯wê»,X°Ø%­Hàô™7ÓTEI@ñ1©¸k¥¶o‡C¶7š[%8é*upi"•Eýx;¤:9òF|Ï‘*+%éÎ&?f¯Om¶ŠrDdɶ8{zÃ`¹r†«$ìßħ´Ä —pdÅê+¡ iþÒ±’Íy_›!K|q)¬_è±WV¹#þ/6" ž®Ç*¶¤¼»ãüغ[]uf}zŒ¹’<›û1:‡@Ø¿ýijžþ•D^¼<Ðq ïû#KYèh,Y©º?:àá#KíoÆÝîâ‘)xWќӵr&mósªò5ųò±è›ˆ»,DÛ²ÐËÂbl˜ÉÍ8´é•¹·‹‹š.]"^‡Nô°U_´ý³OÐz¤ötüZl”ÀÃãÎ ˆLíZ(u•æ¡bŽˆbÛYÆGqºÌ<‘#7‚Ë_[¶H¡þm,j<‚¿ .¬Ks±¿0§%k:Iˆnüp˜¨¤ß¹Sº†þÆ Û&…àÞ·;f‚5ÈæÙrr½tÞŽn0²ŠákE7N‰< Á0ßá…ýÊFapª!M)¾8É¿óÒößAçuték«Ò‹ DcÄÑF8Še”Æ–WqwrõÆK{-•¯pj_wU äÞl³\&™}_Ð2!…únâh±ØD¨QΡ~ÇŠ´0ÿW&9ŽÄßꌮboQÅ.™¨iWžÀН”4<+hÑöi¶È¿5óF÷±#«¿ZrS^º2͘ 3RìJìþ…™2í­z…^¡àïY‰ç ß?œ¹'nzÚe2œGâ XíQä÷ßÙLnÂ1=’ceàÔß^K)I-Î/ø­üd¢ûáDkNÍ ÛQóÄKÂ|dŠ9Ù¿­E¥F믲õÄŒº«Ywv=ÈæZÓ’L+2¡¹ñûƒK@{ÄÇ©E¿ëQ”â¾Ç¾¥ƒö”Ï»© ¼¡*ç/ ¼QÛëììDMjÖÖ gz†ô2.û¦Tam±ó6mWW¢[ojÉ5M®_K4fÒéi÷¡Õü[Þÿ)¦_Ü/þ¶xWa,ÚÚ»r,ös´¡sä…*5C£Röع~³ 'Ý{3¨P³™CÆÞœ‚Ð_ªƒ¹M^ªq^ÃPÜú*p  ®½ÄãábÄäv&Ÿéêµ_kô¡ƒ™œ+6ÃqI<öXôUUój%”ìr‹y/@úØA¢!¬§A5]ét$ë&iù*Ï~ΣÃTOµt• ªþ*än…F&ZµrRkWrfݧÉ)ŸJ@¯¢½ÆMyhý+^F~2+¢E´'wÂ}6Þ3ˆ»ŠH4—xœß^ÌßWº6úF1EUF·ñX^z)xÔ‰¹”ÓàÝNبz=hî<¦5o•Bóó·$ûbbþÆkC©âÐóóùO«êÈ2ù5Ñ1f©B#vŽhê2gðb.OŠ|ðhnF5’F™yM3ê¿r„å‚Ýv%ØKïÖøQHÏsÒØ§%ùG\WÝ!Þâ…ç”ÁC)믯¸ˆ¶G­@ÙgÙÕ ¦¬ ùÁÑÈðX¢öQœâûâ:ôwÝÛÅM?6‘‘™¼z=&FI°gáõÞ Í¹6¼&éœa(œ‹Mqœ9ϓת t¥gãy!ŒñŒY}'7‚r›*¥Iù¯Ó|^fø\¨} ­¢v¤è–ÓèÁ™ø5nWŒøã²ìºg@Á8ŽÈt n?@ÃÏ×TR‚•õYFýÁø¶; W€ò¾ïŽMb «1EoÔ×9¬Ÿ*¶M›¼ÛöÝ›ØZ¡¬äŠ|ñë³”¡Gâ®å"dÆÐ3|7ðÐÒܧ?å’Ï©~«7Œ.æÓ>y&ßââas"ÃCHS±ï‘<Æ-RÕ—Ô¦˜¿ãªßjÇÞuH›ÉW›öï `·Z÷xz.žÊRª‹úU}['øôû@;v’äáà*^2æýwû† ¬úüU blŒRkÌÁCýCªâ’‘ !?‹eƒ˜%š»{úì,‰šßXªçŸçÒ5°…ˆkt8×÷ò°½?è‘k†!ÔŸrøóÚ3 û¶ð5Ý¢'( “ö°HW¿¨œ 4HŽ…—³5 &{ ñ…´çÿµês{y™ Y”úN;Ò—>Øî¸Ji_çQHó¼ÑV­úXî’Wá«7E_ù˜SǺÀQWêU(t% üõ}·”Ü4“¥¼Éê‹ì|ŽÔªRp÷.ŽÐÓòz Á mùg¥x½‚¾¹×Ò)ŒÝ†¿âiQ3üUë|]%À½ú[ž+22†ƒ =j0æ TÂúabÕ"é’cü÷𿇘¶—t3LÁéJ"­ÍÉÎ1‚XQtÖ½4x](Aö_V~'ñ-=|u“‘³¸%«ä èû…ͦ»7<>å‰`¼sè°W`ÄŸ‘®OD~È .Â/Ü|ÝGHW„=žr0 àÓìÎg»’À ¹ùmÇ)ЊL ‚VS çû]ŠÍÓˆå”,‰ƒ;vMÅ%W›=HZ÷¹HÐ~B?€›Gî]#/—ÝÐ7~|®Äõ6=}ô8âèƒj†YT7ía÷A{;_A»c¿i§¯kéîIÓ `1ë:'ŠyûgîA‰_HÊ©×Í ë û톕1ÉßKÒ•XIkêâjÈÆªáªè™5_Úͳѡ¿LÊѯ(àjÒ#ñ³€TÌBÝŒÎóNt¶zeá3nX„7•"lËó·‰{ˆî5ÒßiX7ë‡fïÌßa÷ýUb9–=5FT6zó[7þÔî¨o?¿ôw²Óså¼ä>x!žqÌ{øQg§*Å‹·sÔA  ²²ƒ¿êé¡(ëlƒaòÝù;¡#Êp\“ÍêzVzÇ+F£bŸ^%YЬɄ’¸Ø¯¸CæÎð•‘,A[ÀÏ?¥ët¹7…~b½–шé=åõGiú—ºã¯Bô‘F;Áµª‹P¯ÛŽ#Þ8N…_‹T@.yÕ0MÁ/•}§@¢’ )ÿ6þñßø+G¯÷g ’Ùä¿\ízá$Ä#™Ã÷—ðÌÂ{ˆ­'jüo+Q0r×LŠ¢>áöÔñŒÓsŸu©í{”îkîý œ!QÙUÕºóiÂu—‚ú«’R¥EòŠL£Õ3j~µ2)™£¢˜• Rç²î\M¶y©%™ŸKR¥e¦ÄëAê«Á)”jh8Y±Ç5€,õ„5E]Æ“¶²}޳ƒ‹çÛâ7) ùqõ&§†3]¨ JxMTyEN•:AV¦ÜO?güß·ÿF9Ã_Ç{¬‹˜?Húëqáj›æÒc•À²j³Q!¼#áX®J»"…L*‹8ï%®Äégz¥r_ƒNÓZÙ†è•T€âùvÀ/è¢WuV+d¬Õ¥ýs•dD†{ÐçÇ3Ŧ¦ñYírrÖ£$c”°EK÷WG•~ ›k„äQðY#ß{y[QÑú¾Ê\3ÝNq˜w&Ù°´Ü|£ˆ}ÔÆ×ÉÍ“™%Û9V–Ùã g:ÎL ­â·†d£ïÄmG\Àt$Õ&Œšø } wŒì2Ñ5Ù³Ä%±7 †‹ŒÆùÆùòàxR:¿o™÷m?ÇyNØšAx3·ÍÄXf±ôµÄÊ—3ÿ–Á‹æ«É¡ùA%Íà™eÚþZý1™Zå ùý;lm@c@ÅQYj®nгlép#¼»—˜_ÅDëQ»§_*>ò¢.yªuÕý&Çß‘ÉG’|ÕD¥,û+p{~šØ2W5ÅzÔãX0ùD©¿°žt«¶É Ì×O¨ˆÔæ>»æyÉÀWjùkÓÖüð-ž fÇ3jÀ‹á¤l«w}ã`û Rü›n­ß‚ŠLà´ˆ¿†—@¶Hü½êwLadÆ– ´18S’LüN™éõ‹y¹bårçÜ3r´‘yØ&"ZQæ™ñ¿Ó…6ãÙGQ$ý{ˆ—wlö*'‹Lè°Iö‹‘¦cÔgYQ“8" 5îTî¶.»ý¹ß`T(]’ÚTkEÙ•s* Ö4|†£€~ 1Eiñ™X z­+äÏz¦é¡ð“êÁ…Ì–ó¾H©X’Yf|Âl(¾MNÁÄkó¹‡9/ƒˆ®3ü‡øæ¿tÌ’ùé\>’gïe@´«;Qbg ¢§¸ {øJœç9[ˆÁkïÇP³ÈÐ:ù- GésKסé$ÒñÕÖÚõ¦ÅµýÐÖ€·FÏŠ{åÞežšé¯@-Î¥’ªÉç@ìw.˜YF¢Ú‰_˜H—§³§,¨ÁÛþ*ÅO }GotkeìÇÜbmzu¸¶ÖgÌwlX?oú­'^pMÛ„ññ‘®gûc¾JGð*ŸèãÑ_%+°W¸ÐÔÊ¡°’G.é¿„Öˆ.¿#X‰›uƒ7ç qPÎö2ù1¤"µÊGÚöó‘ñ‹sÓßTXo½0oÂ%"wÙP¹z¸f 8-xl.®ËpÛ8Ÿ›] ’;_ñÚ¬NÓ•+ç‡tšI0‘iöß+uD*OpÍÿöþ 89Ó[“3 Ž’ ?¢iÿÀK:êƒÅùNlèñGË~禮~'µ®ãævzûlñÄûX¤¾ghT¥ˆr$vM¶&XÛ'fø’™º†7xD¾HÒ¾èÂÅ¡9·v"MT]ý cù*¶qùÛ9:½/‚òÅ.3íYPWŠÁkú6aéï\'H¥ ƒA#ő΅=.Èÿ«t{ ;¯&°ÅÚ$a„`CY—J]ˆä<˧ð,_žEnÛ5ŸH%xþ ¨õVÆ]Õãn 12tH2,0÷WL/åÁ [™ÂM­&ëͯ…$3 Ú™ƒ2çéÞ®|ÌÏ“b_`‘Tø½0/ÄøãÓ“1úØ^1Ði64VõYuuÉ~m¥NýtÂ)f…›ñæ…ñËWªed%^WŽÎf‹tz©¨‡•=ƒÃpôÊ<ãØ¿†_xýW°•Y§(ªd÷ß{ÓnÑwcÑù~.µQY@BÅË”SŸ,Ä‹|©W°};ÏJbôûâüË] ôÑu9Ö?²ÎÒÎÇ/D7˜Œê¦æ¼iNš«`ÁèHYHI-ÈÛÑ€PÐÂñðOÌJÞè˜WB o-Öº{Vr*¼þjQðs÷ë~I‘SÈxÞ>V™g×ÍNÛóŠÿø¬ºkëJ™’ù{{bÓ|Dë™AI¸ú~ c0º±Ö¡£s流Õ# =\*rY Å|·Ñ- €Ñß²Ð*©%ÓÕŸC`žõ‘-²÷˜Ç•%éù“vÅZ3èÊÏ{ç Ws`“ËíÁ$öù,î@à ±•j´½¥xhîøà˜¿³.#±×Ûä·Ž0`WT¨éD {éfóWµíM&ælßËF÷ôZ{=}<æGÄ‚’HÛ6KÙodÖò.ë§¹y}:#«¸à" ÍBÖÍ¿\Ä´¨&õõo@V/räèŽ˶:(å€Iàh GÆ>¢Uo·G6[[žlAý"¿ÂtŦ°õ=d\+/>ÛÌÑøW|œ Xwš´àxÏ3–;×ï×{É/uï÷‘4㣳®-Cú±å Uñ‹ƒo¾÷ñµT“>gfX~ï'⦈*ÜÚÌ%¢ãplï9€e‹T„¸üÄÙüµ ÆèPVqVé›9tù‘ù:iVü/ÁIBCÁ‹uÕO È~ ™Z*Üj¯¢Êö±´Ì_¥n$i>i$¾â_¹…BÒö¸"õ;äN0u ÞÁ’œñ È÷_ÃOy©SÅÊ&|#økªÙçF£™ì”ð_ÖPÃ?ϼ•QrîÃP¿k¯WKÒb›E,Yôâ$½™j蕼•$ïîAÔ¶‚Û••Š®–!†ÍxœcúãrŒPòÕìTDOξ{§?)÷ªÖj ˜ÅÈÕ¿#7³²W’ÒóNƽ©ìMêøÝ•BïÑm«ðöÂðò*. ˲=Ü“,8ž§Pß·w¾U…Ê>[Ûô}-8 ¦(ç$Ä„[ªŽö[†‘ã|à7Æžrù•ìK¿Dí¶áîgþà î&Œ#¾Ú„\jpŽÎ¾Ï57lë‘ÿM¼(Æ<ðæòx–M±×Nàöë¾Þ{l ùa ³ldÃ7Ä<¥.9øUºÆ‘ž9ÿCÂYÿî2~~– ÖȲ—&Ícp½º£¿zÝ„-XUþoJ,ñQ”ëá sUFäs,1ÝÂG³µ°Ø ¶H,b5ÃüÙ ’Š\àUª“ë‚"úñî«éÖÕk®š…ŠRµÉ3!>("»êQ®qbãõ೯ƒJÜW:[ žÓKÈ÷ùQž”vâO ³þ_+mÒ¡Ô_Ä8µ(æhpÓ›„rʼ,+Á¸,ôØŸ3|GWñDÕ®K,€Y^¼nu_ë“À”tzå•¶z‰üwÝ—.kp&½<]»Û‘ãæ"ˆÚ‹åÝgÕ¯ä;~V1¨ÙQÇìéFºE¥Tþæ{OÞþ}@kÿ½Met©JÝ1®M^ª4ÙXtAJ[XŠ(€õÏ}ã×ó+&p'ŒCdæ@òxýÖ†+m¹÷âz¹Ç&Õ¢åŒ÷…;RϽ4¥ž>p@¥Wªç÷z‘½LðÍÃÔ^‘{âžOì I×' žçÑ‹ÏÂØ-K^ÄÁ{m—'ÖnÁ zOød&¯F³A¦‹Ž?(•ž H•ÇËà´^Ïx1!›Å&žÌIˆò3º“÷ëÆ„‚ó/ñ¯^åTpÝ®‡ÌóáAm»@`ý’¨lO­kÐð- ü;VYÍ©L\+çó×¥ùD순|&jB;Èð »Ë}Mwd£<ÕÈy´%ó0¼=ž {âÀâu7ŒœE®ÉáoLJ&U R!È,˺3hº4?æG§´Á!·L7¶öÃíN·;’à£ú‹fÝùº¡X¼r)™I-œ¼ß¦@–ûÝ \9–ÿN+(¤ ±l;ÁË>=$á¤çø•,Ž|ê ? t|Ö sJ=0þhiå« @ê÷1øØ}Ç7m£ Xó/batnÃ’˜\;Æë,‹²ˆ6÷xh§0Ôv>$º#ãhN¦"ì¶GííÓ˜–ÿøð×N—è]‰L{ŽZò÷!8º˜‹›°²fJeñ `Å|†wÁs²J6n:.`†JŽ_W­°Hõ1¨üëdÀ¸oB•šœcenëX:6óµr0Zsß M¥ÐÜ(Yv„)W¾BŸªãXA•(Œf½ÁM¦´=ŽR í1ÚkYôõý~nÁr‹hCo L0\^è¨/ìTËÙ‘+o¶å•¹b/@øM³…­œ²µNã0^ŒgL÷&œ© ­\Ñe7J¸‚´GʤÀÇT<%z®nCn ‚± ÿa7ø÷¶zazøÖ „€f>_ŠéA¯$nDHº¼Î.û+è`xJsàLʲ¿¤ ¶¿· ûQ%Qÿ`â”§vì-†ºÑ*)ŽýIö>MçEO4_CÆâãgÜ@øí†BTH*>ºnd¨©Z2,a΃VÕñ âüþèոDžq¢ûp‘ÆÍp6a¢‘óc~ºŠcåæmd ä^'+# ¥1Ýí ' Û ¹9IOß$oä%öÒî_g\¾ùg}|m½u@>ž`ÃAÀTÁ¢@.IÊ }ÒíË›$´PZÐ~ÖoŠ ‹În˜=žpúüÚ¥á¢-µ”é «¦Î6ÀPe(IüzÛ P~ªÁ³# Hn ‚&™`_ª®¼à¿E<Ô$ÂCzVC²z=ü¦Ö ‚ã±½”lã#PŒ*€Çµ¼ãAŒÙ¼À㯓uŒï,œuÞsÃD´b¤™pýp¨¬„nPþâ9†QòCû}ð>Žä'ùù‹ß@¼ró•ÜK/ÿí£ºzí¹ã¾WëëF·TX>rC»:Ì—*zË–.¼R$ynYëT#:X¥²ó²‡¶oˆHB€Ý(‘ž¢…–&+j] 3}>b«;µFXþ.ø/D£WI…ƒ)¿@ï±6¢¹³±[Tšû í6]4žS#‚¸p½sË«ûoGçùA2sù.¿¼ ª]4œ%•ñù'Žîñ¼Uå <Ø‘†Z¯ u'(bâUÚ´r¶:&v‰™‚nû½…Ê!}É‚“d—1œenF{„\½ƒ¶-ãý=ÎRb,Dû€ãŠ"@šrrÝ@!âÙ™‘i]–B|s¯æLþÛDW;Ç‘õ*øÅ’„nò°YÃòÆ«–=ÄPw·GÙ…¸UUP&’4í„«¨éíVÅ/A—oûíbe_/Î2övFýtÊN}Âõ­Æ‰^¶‘mÓ™Ui漄:ýoGGY$ÿ%‘ÑwW}ÛJiölï^"e!vî½ 6µ3ЪIÊû_6>žJøbâBÕ©A0z}=å@ÙLúÕ×¹ MžÛBÊÌ´siÏGWQLº@ów›ž~my[¾ ÿ¹; ×'ûJIßÇbÌGGÞБS³ª÷ÉðõßA]¬<^¯Ù{þBK}NšJ˜½Õto©Š70<ÉîÐcŒF°yYR¡ÇÁë…qfsÈZ{Ø›_ÐÏÌ"Ôi8Øq Ï£~„küäWL$–±`=Ý”­Œ:y…2ŒÎg€yÍå.¡> E’ $²TÛ{ÈX¹œä 7‰7| ?šåX°’ƒ¿#zÊrn†$0öt‹ðÀ†¬oæ¡’“-6Vè´”iÞÐÊL~âÈM,ÁRôîcr‚èòúòä–ôâùT{‹”û’ñÙ2>pĺɰi ¿ØùÌ÷U*T ^žIøxÒÖTïÛ¹‡³ ÃðÐ'7ÁâÞ‘pí}£š(=‹Üö˜:Ëèó¬Ìíµ‡šdóskEÃÿ¶x±â™·5æ>ì H2Åÿ%ð²ùOaß²›šž‡Lî"v;)cfÓž¡M1Âíå?£a®àÕû⣿{¸Åº·X~" —™¯Û‚(ô×\ô¹0«¢áÎ ex¤àê«FD nÈ_lôjÞçµÄµÑüšåûuñÌÒË%ŒRù¥<Œ)ÂŽðâ|ððì;F]’³×z=6³á¼·-¶¤ûX…ƒ±­Ó0t:LoŠj¾lu “!c"›Nqà‹¼V‡!{œ¼0¥b|åKKçgv $ÃÆ¦Û_9'±|Kè;öíñ‰ J7i<þóøNÇê8“±Ùø™d±B‹òŽ]Cý5HŸàü— ¨SØIò\l©í½FÓ·Ú¨Ï5w;Ù*$]mìŸlRŠÑ}/CO.±¼`lòÉåÁªzf¶}Å )¥7oQGuù²ß1­Õ#W«äW¯í½ž£ŸÁ£îm\X#_ÎÜ|P|õj›ýÃZx ,Ÿv haxîý8×USTBÃ>;ÂvB²º¾!”åçA´B-¼œÃ償úÃ?uÆ’0vzžÈf(UjîÍzæ^«sƱMR ™…Hjú\{ÞÆmEÀHžsªî ú«³0-C„üD42X¼¿ãƒùK,‘iÈîQ ^r~^¶|ÀÁèoæÁÒ‚´žqa„x›³X‡§•¿<Í”JºìUSúÈŽäuÿJµþZ¤å%íÌ3“[$¶Ö 3wûx_ ^}ŒT1(ÙJ}0mó¸2}»*&Ô©¤‚?y6þRŠO$»‘÷â@_Pñ×iå¡ßVS[OÒa—ïêMœ¼ÄÏó3Uù«QÇù«=\KXËj;Jì¶&(Ðó ä›)J™Ò¸ÕN‚™·Üäî\—ŸÂAjY9Òí&«ùcpœ\¦£]l+<7çêœ>Þ¥J³íHv¹Ó_SÖ#uCs©Øõñ½:¡qéóÓRlïá_+ÜË9°ÆËÅ¥®Þ:Ž‚-7ª­t`Ùì¨í[ò;Ï®n¶±~ë¾€°¦)gB/¯)”Nôé5ÜÑÉz-kÖDįÓe¹Ê« ÝÕÆ¶XQpŒ4Âï:öne•fuu¤É¿²ËFQÁó¯üK•™Ûñ÷A¸#æQ}§þÚ'bÉVç%;ãòxElÀ?¶3"QóßB¬ðõ£®Ë,– a—Îùô…dÛÜc¢ç"b¶ˆÝxÅ´ïí½Š£ ÖžÁšãô Ã±C¢¥ig("¨5bu|€zÞ<Ô²Ë| cÿ8û¯^÷>c¿/NYîþ%ù<²Î}å8Þ»Ý`ôj¥8Ož{i¹¿¡¹¢?áס1–¯Ÿb_ÐæÈ¶" ¸2‹ÑMԸȯ± x‰OΤææ÷0 Ë¤¯FÏu‹…‘¸†/²#âKôrvã]c›TP¬dIùWà_%‘åÐÒ¢Á(Ž¥3Ýÿ{Á‹,X×i¹’¿ ZYÝè¼g9‹úß$Á±g–J×(Êá±ÑŽ@×C54/to9ô2ƒ ƒå‹ø›ä?iE‰Åe§¯UŒáS„\y(h·Óo_ßjJö|ˆrZj!ÇZ è;ôŽÐ6+ˆû¯ëó´kçã´vÿ ƒ¿Ý¯¼ê¿ò¤»6E¾eè¢ö½þøtæéà‡¦/ßvQ¸JnÈrÊÌ%ùžš®¬©µC9±° X0|¤úÍ’Ãwa~:Õ| W݈裾\Œµ·Ñ£ëù 'ú¤Àý¼+S«mà¦GuL JýnRÓf„¼U¶¥ÏjV¯mctûèßw²4ì÷íü6­»”Ã}jÕZ” ±¼IOB“S­GCa|(LK–Ò+¯ßPÑHîÕ„ÐÍæúÚÞf7Ùr ¦ •_^ÉE³Þ µ'ZS%å hõ¥+3 &BÞ,7yÞ8«Ð þצj;rúü‚æ¨_V”h)£˜Ò¦ƒNe¢G…|üS“+Н©¸;üË=E ³œËÌéÑ ñ<ÿ6¢ÖÏ ßÊ#QkS¸ùZõ_¸´NÈþÀ®Sª©Ãh¶MezS¿÷~ AnÝ|ÃzÂ÷±¡;RëÄòÞ5˜e†»‡ö¬-#½ôÇš±|àä»B¼gªQ›ãJÏZ—­Ù ¡ÚGeùYNŒ¯u”å8z ªäƒ®¿’NÁµ´ð©¶Z]#2W€çO^×§iˆ™)­©Áßù×ô)ù&‡$kUÎ"Ñe¹þ4 uÿæ¼üh?:z¢IÿCw+ù›U­À†e‰ömÂsfɺ g2Gkó¿µG™¢ÿþ¢âô벫íGÝ¥jgQßoçëÙ@›fïh¥ª0¬ÝØŸ2!ê—ú=œú±5 6Vl¤®ÕÎ òPñŽa)#ôµ-‚“Ä~Qoïg5xÍ×:+ÉA.@—JB{K™y{wŸYî=)ã¯oÝ‹#×.".{p"Ã'·#9gåÓ„‘ÏH“ÇjãÜ-Þ}…6÷ª_(¥é…ï·ÕŸc ÈL”ÄQ?~¶QC¢ãó‹ù>ãòœ=CBë]@ÒÛ±€»côL€;ÖIøwÉËa®oÃõÆbÜ™)À9®iyaå ¯C"’HÕ§1áû4l yúʽ&œt§·ˆ3¨g¥àDm M¸ÔÜ„4Ö±Ý þß™:Іx:Ø ›2({­GyDÒ?}2rðûñ7úý0ád(>™ø¾w›‰Áƒˆ~ú±."÷>~:‡3ær8nZ뾨.[t¼Ÿ/Ñr~<éÔ˜»'&Š(`­Ðóp‘'‰)AN¬ý÷¦úa:øÄsÊïeo ç¼ÈË$V*mï¿ÓX Fƒì1j/T/ªNúJC>Z/oÃë`œ©Ô1jªû—s‰µ¸9i¼rp¶h äg~gã9ÞÅÁbÐM s¡_!ÆÅJ\ÃO:'A tû_Óä«Ï0vöé¹(«ç^ü}TÚš€óS,róRMqôÂÑt,y¼ÀY7~®+sl3è¶>yŽÂݪ8Õ(ÂK¼6fÎä6 " .å6B˜J;²¾ü7ÕQsƒræ~ž*Aw¡U`·¬Ê@Ö´@¬;1ojŸ‡2õÚŸI„ÒŒB3¨ëC½O2 [~ˆV`š,’Çžns¿bõb–Ê{•»ïÚŽ¬·NíŒ×€é\ya§Þ†Ã¦®¢¥"?vÌ¢ÝÎuG f”¾¦×‰l˜¯Ï¯䪓þaÉS2.AkpÅ"íœûÔ¼,Äv;R·×+i$” Ÿ™¥ÁçÅò”dþ@Á$«H0Â*Oº…^Ÿë¤ú>%Y‰D!$¿LV´iëmR)Í¿¿wYLOŒÏ.Ÿ•$ÃÊÉ~L`†%Æàs(*|Yb»#'æô*Üèü`6îiÊE, eðA×ÉgÃb÷ÐèkFýKíä,8§ Æ`Àê0Ù„óÝ.9‡ânª÷LÕÿ†Eƒ,|ˆÎ hÆ[«Â§šÑÅ®_Þ¬¯¨Ù+>ŽË|î{³Ø÷#± ¨D«t·*EÓò¥™²Ö'û¬Ï;-âÞt±¼UbãTCMËH <äfC­§·úéFÄ9A=—¢~Љ( ³é3òêߢ£`¾ÛFj**ƒ@×ÙdXÛ©&5ðµ³ PC®” H®Ž‡¶ûŽH?] ²6fð¨í×±Nò?‚éלÞ^œÑ¹/IÇàt3žƒyx¸Xð¶@ýzˆìÊkJ^;¿èÁ7ç߸jfÒæÖ Ù6ûX(a}Vamó¡¡MŽ+ÊO ¡Á¨¿SlGÛÏ’êX¯e3¦ç¥ò(µlËFÐ:nØÌÓâVG„©ÎVðŽ"{ùÅR=v¢ÖPeŽ`ŸÆÆ/°nÑF×EšóëÚ­¿×÷Ç R4&Çñé4²ÔKQ9’ ÄJïîøËC~©þj VÖǺ`I*¦“Þ†°¾€1‡—z2øµKøñÛ’·›R³Züf¨´ûÛ›×Ì$(x³G¶¢ÂI=šÙ ô7'a3ÏSy® £O ´i5[ð²íˆ-:¨”£žD„ú‚‹!#V&¶ÊâÐzY¾*Ú¬¡z²cÉ¥Qöm>`f®r |êO=‘Ľ¬ç`ä3­„žK8M¸ÉØó «dÔ+vUè±OǦKÑýÔOL6}ƒ”+#lzH û^‰¨A”îý’s3¢bÂmñRJ£©`ÿúÞÿ²?Á sîÁdß š­­Ö¡®b.´¥J”J¹,º›j¢ay¬©Ÿêr¡ÎC3ïd¯ÅVi Yèÿ¦|aï8¾ •.Xèq+*h^Q¼°á壿yø¬' 4y‰ìµ*4â%Ówy‡ñ-X¼L/½¸.ç:Ò3`zå‰F$1Õ`1¸7R Ó|…Î!·µe#V5 þ KFy¨ûpW÷ÔähõȬ”šŽÂÁè-=¼àÏïÕ¢ýd’#_¾«Eg8ÖdÞ!”bÀ#`Ž#_wÀǡŶÞw@eðÞœV£IËêå.{̺¦žz]šˆgFT‘†eKeÑ%Î9Fĺzo}Œôݱ·¥¡ÚÊù÷žÉ½[˜¢c|^Î\Pa.˜¡T‰fôÂÄ‚UÖñP†m …|ØQ¥%ëæ"ªîC~¼´žèF¹F™Tìoþ)˜Á“Ïe_p”©ïÚñ–¸Â\[Ê;xå¯.±€ ÿÆäµG¦Ë“uPS[ÜC¬ªû΋ÍÏOR® ´n­Î¥:+(jÄKÖð™2Hÿ;º*ÆG07Á5VûJžK󯂵íØ·’ 'ܸ‘;!™Ž¸£…±XÒZÕûvó1Áø!‰s¹é®mº“³kp¿âž.Æûð¦ó¾«F ¾ž¢b4 SÄößÍ õùˆƒ…5nE¥|Ü€w_¿€Y"úúªZÙ o{óÎI¾ý@÷`4¶µ‹w¨v3áÃùÚ¦ 9ƽß8öKw(Ç9ú)kƒšŠü6Ïü$×x< ü ÒG¤ëÓùCìµðy+’€ð¨×ó6·ÚˆÉV\&=ü¢ ôþÑhV¸/•ÊcdQò©ü¹èWðSÖWoYžÞ“{ †»/Gªæñ¡öY÷¸Ú”gõ$¥/°»u €5Ù& }Lg="G4œtcKãrðÄúp¥5ûºÏ]á¡(«èåµk)©%Ö[cÞHÚõr”Àä¶S¾Rü ÐJY—£¡Ðe?øl¦C¥é[x ¯+Ĺçm¼TKDbícÝÑýhlnsÜÛäƒpÝΟ7Ô|„^€¾¸š\‡÷*8©(¿âÐ7ÁÂç"½X/©1{«q *cGi(Tˆ9©Ë’Ë mývÕ[eExÆÂÚ·Ó’ “B‡°)Ú/E„™É䆌ͶËßl? úÐ… é,òùùvl©œ¼ÏYÿ× &Ú>A–ûĵ0Ó‘Ëïµ ÐF+Â-‹Ü™²ÃNoÞŠM>ÿwž€Z›Ÿ7/Y½+“ç#¶g|~ÒðÑåÖ¤ÜÒÈP_4–7M97K©€ÒmL…ëþCQD Ó@±©Ÿ¢Únú1è†|¬Â3Ã^ÿžË˜?uùóPœŒîºùe÷^?Æ- xʶi0e(@ÌOX ‡¼®Ÿl¬e-J~4?¶’STRDÿÎbßÙÓ™šS)&ðà^{–·eõÕùFŠÛÒn#E{ ¨¡IïöÒÜs±im/1YÖüi }öK’ìãîä量{}\R'^¯ƒ@0#óˆ,¼öÌ{EÉ<_u‡4ˆÚq½ÕŽÖ'ÏÝÍ®ô Ú|fG]ÐjTÝ׆ÀQ7¬ò¤UDÃ#‰L“2ŒUú;ÊbcRÏ´·ÿì—d~ðð5„­ëpQñn¥ç%oº˜¢ó;ó/‰ƒrS—¢£{µú œ†ŸžŸ=ûŠ’n7 E?m·ï)qÙýLiìòùFH! 'ê+gŸAز·÷¼Æ€p+ò…ʃ«yé0 (T»Wó]¥rȸ:èÓÿ½,ywôê…f±òõÎÑùž‡ƒƒÔõÝÅ5Ùp?y¸V¤Ó—cô° ÈfÐP‚ÉKW=zBÿ¹l£´ïXBÖÝêù‚ùQü‹~à0þ…´½3õøqy&ä0ÙÕô¾¿1+™†eüeømzæ?4t^?—$}z- /ÕáDßg?P7 —;¯Ô¡µÅ@®Å!.ôŸÝˤ«g\ #ë ÅòÞ{'ES]0]‹É¼‰öGÔ.CÝ<Ò¤ùL~™H½Øé~Ðq’þŽ|—C³AüHY׋Àzԣ߭±%;µkÅÞ”ƒ­ÝåíØ¦¸¬y¹ï•›/d-X‹™‘÷ÎötDcGäÑÞÁÍ×x¼·‰¿ÓääÈ ŽìÚœw/-U—…g¢z23‹u>ª–Ó_3ú0¹ÎJ®‚Mª )PÕ%¦d¤ßE1ìB‡¬V´@2冀2;ÙÞÂ9Ù£®y÷ÐÓÕ?üæÓIÈÏ£™X”r|C ¸ Ü`¤Ú ìÕ“àlø"KIÊnßhÁžBq0}Q_ P‰ZOç¢þRx…R'fªˆ#ìp’ÕÒù³ÿ>öš…aŒáOÀ)x”þß s‘è5 3–·vðˆXžL”I3äd!Â춋׆ö„¤Œ¨Õ'\é€{ÎûS—؆â«Ü<ðÂò—g‰+e?ªm¥íúˆñ°®óyæ•FàÓÔç‡ ÿ¹¾vÁš(þ}¢“ÃÜ@‘£÷Ýןz3@ˆºûö‘¾×Nf›üÔ£ÊÅïð!%ê¸åŽïDöï­`l¼~w¬Ýñ¤²Úiýý òúaM} ·rKsn¨|²9²~O/ã-´E^£ÏnGR{ò‚uë'3ã/›¬je3†k‡Pƒ£1ܸ€ÎXýª}\™â~äQ©×ú´Žß,b'káût,*ÞÊh§ù{è´UÑQ+˜­wÈ•’6£Cã8‹âþ>–Ǫƒ&¤+ÂÆ å\“5ïñm+×Im[-Y$ê8T“r`‚¿+fõüÓLi&,àªKq¨àÀ…A,‹ Ôq6ȇkÍå÷6;†oŠ“‰ˆ²ñ‡ú~ ½¶‰¢™ ¬uâ~‘wbŽlU:x¦5%ð&*Ðf ÊG@Ž^dÐͱ‚®œéS9süa-R¿¨[72»â–­oI_RC÷GŠõi0°µ%:Ýä°€8ƒ(”~ÌVÛ'ŒJsJOèÉZó fÇôÓ¶Òº=N±áÌ/“Pi+Ç—åôàÖ󇳈Ü@û)MÓ*­= ³Æ¸ñÝûÜ„A$.¸ Ct'„Ø´ær6©¤bî m»’’ÓY9, T4lÂ)'ÜÕþΘРú×ÄÄ,õ@NG=X Ê“’©€ßÎeoÞ š¢/SõÅöp϶¡rÖüD«X™ôÔS¹ÏCÁUÆiÍ2‚„*Wé'ÅEÄô=j0Mx…—¼M8ð}džסÿµ‹y?‹†K0™p—Ë÷;àãSšHQì<—”õï.RÆû r‰«‚Šå0óû”ûÙŸ×Ø‹2GwpXu6ë„a0mÐéÙâ£mÈ,zÔ7@å? >Ñ@þTX'¡qåHÈ]oðÉÎSÙ¡˜öDøüšÔ¸ûŒØ.S,5´‹8?ý p0‹Ö ÛáÝî¦JOq«@·UEhÔ¬z&$l±÷ÂÉXflÜ<ïÞ}0—”¼n™qpL]Ðz’šÜ'О‰´Þ¦ÀË2R•¦wÂEÕ­crµ¢òvJe¾­Ò*ëoûUȯµgÓÑ=˜¿mhíôûÐçˆJôˆ#„Ñlã€ìaîuŠÚaßzÂÝîaJï ¶Ÿea¥øt¿+Ï­ñ­¶¾Åx{z’!g¯.Ùüµ#|93®át™0¢KNøOe؆ddgôŽšÈµÚßÚÌ÷ÊvWâ5á¹bv_¢ÅQ¬k€Ó ‘Êôohµæä*´r ˆ‹?Æ1Bœ?1>21HCt³õ®AË—œå,]¿®á¨ñ¥©9:¸•Ž„y‚!5¥™jl¡Wé©)?¹Iö¬å¿?±eªÚ_À­vh< `}½ªåÛoý!‚móÒÀ¦ÇÙÞÚÉÙ÷²!“\ªKò¾ax¡~”­Êч‰ š2Õ¶D] ª>ø!wé[²t”ڱÞGÈèK®­3ÉÓ¡˜ ©ÖåÃW¹WƆóéÊ_ìJW{»åªE]Ê tfNÂ,rHøZ‚°.êa 1J yÏY²‹¶i€ý”tg)¨‡Ö*wÔH׬ÍLsþèÜ‚\«6¼ð rèù[ã)ÇÂ¥e‘(î¼ 5•œižåM ]àF)‹šåþޏÜÿg͈ç;Ž;3ûøÍ—¥Ü9bC»[Ø_¤ÝB¬œã.¥š6×Ñ©öî‹}–töÓ>3¸bSÇûØNϯ9ÿY‹9µ”mT^,DÕË?Gi ÚxD>èðÇ}%}ÍÓƒC~»{}© Zzw,yå®G†yhÐÐ,ÅÒ;˜ñF;ŒG¸èÇáßF@àæÁñIËÙ_Á×t=ó¾”^ÝÇz1öz¾–l+º$׺rß7òu/>†£©|¢Ñ[™ 3î¿” `|ݯ^÷݉:È‚vZ‡+ (­”$K4®¹‘w¢;ƽN{ùTØ*Cd&Úuå;ƒ¹m^‹ÔÝEÀZÑ/iwhïüPä!ôBÝé÷ÂJ…=ppÃ::¹c×ÅFVô¤”h>ú-(FÁØå8Ú›véüê^ à°ûB :—ÖØ3öŽ.ŠÓνMyÕ›a\¼ ö®~z®[€ i=ß»E¿Ù¦a -øßÀ-$Ü!Mþ\Ï/YËr¿€_ûNš Ã2ݳêØ(ÀGd0­3FbŽæg°*§§@=ÀD)Ï­¬€’ðMH‘9 ûVÏP‘j„„BL=yýë3³é¢1ÜaW½æîn¶Ë²ãŒ3ëƒ_}S ý£ÛBóÃhp“|+%D{°k…ªIC¥ G|¦»vçæÑš¾kPPöúÓ s•ÑÜwU¡t+ׯŠ!R¤èü_'OڨʔKi뜦ëu¸œþ÷²-`‘¯´ïnýWäo£¾o sóºRi…ÏÃýSuû™SbÓúþ›ö$*/ fì*ý›«ýe§Â c؆[ötT¹Àƒû6ª†ùõycšvÉ%إ߼°÷èQÞy Â&²±5ëGpÌ ÓœÖ{ˆN?Zúľº€–©/štXQòwcðFóš :Z´Ý™îoa]DdÍ~xʳúÙtS |h2(>„Aµ7Ÿ0FùÄø€4^ÒÞ†u÷Þãð›°FuB)íJ@Û‡ríÉ4k霅2ð¼,k->ùÿïó§é¶Kõ÷¼|Jƒê¿¶(‰,n†¨§±S)ý9ªè\Æ×)ÖO¨ ¿w¥—¶Ÿ;|A¥ê幪Wƒ»²ÏD¨éDæì°¾ŒÝPtxÚ.Ì.àÁ>öv œËë0Ø„Êû,ȧÔ\y}¼[hqÀ`°Ð^Ú°÷~‰Þ$D7œKµîß¹DÍ+b=³l'ùkU Ï‚(ðù9¥r¬“Þã¬ý¼Wó{þF¢ê;z²½ÒñzccT /Ð|ÏÕàMŸÚ× Mp½ýô l°ÿÚš>¬Z/ YÇHÎ+ EŽJ”×R̶½"u?âµ`›ÊUXçë”jKú™…ªg`f6ºŠ"MåÜT…(ˆø Œ9ò; ?D„ǹólóP 럾§É ¿IòÞLÃ^¨ à´žè"Põßn §Èîöv Î2zQ7Å?g9¤xsUNê¦;2àÛèy‘iæc2³ÓÞÉ ïb–Ÿ j ;Ã4 !¹q×®u1ÂC¾d³·ï­6‡)Oé{Ób{€µ¹0­7ÙþfÖä¯dXA‹ *·UðžÍbâ…nÝI"6Ñvű.NÎصL™ÆµFå³`oHÀÌu'Y®§;QžWnøj’=á+S\AKBPã>ÎG‰§áÏ güežÖã,Ò[åÆûå¼~?H¡º¶þDkbæ{}‡f¶íÚ¶®ª+|ñÉÏãÚMGB}ÙšuÛYFd³•Î~7ù=\Þ—4?ãGYúy÷ Àý;å~ú†šBr‘}kxRz+¾¢A™²!Í¡íIclx‹{HM­E›²èÄl÷)­öKl©*2(èäNñFùÏsr@hˆֹn ­¾û‚ŸÊòóRSÓnX‘4ÊFmV¢ ϵŠ~ 3Ù–jXȉŒˆ¡ ;´ß;‰>·âXÓß.N r&Œîo 5 ç“ù¸Pl3,`š!ìrPŠë­GŒû%>›Oj@´M-1ÇÔ€Ÿz´×}ØË9åû²“ÚJ GƒPÅîr FøIÿ6øklZÛ¢ÿ0‡}süoùaâ“׬nžÄÚç+DO(·küÀ@« =”جê¢/A`×4q›H^²AQ\ÎtžKùö,ª¡}sâò6oy»ÜVþà!'%_š“ÌYÛ7a¾htD>hù9ô½²WìÞØÍ¿l$GñG§"GÀ²)³ï™hhvGó×TYZ•ÞˆÂcS5#aÖúÒ5>5:ÇÆ¯åÌió+þ2,eÝu°5ìüÅ+ùþÄ£(BoYoç'¬î\Ë…¾€UÏÝÌÞÛÛ™½[ ³ä@È.Öe”–Ћc1©™Ü3U­Oëô(dåÖ*Z¬±ˆÅŠ{T€‰iÏÖ*㧆—A~…yJìpÔÏfEÄÇ÷÷pùÄ:¦í»)+(3TNÐßgå}N76´Äñ Û¸®„…P”Ñ‘rw¤ ~³ç7cé´ä‘Áßã¼ ÎÎ1:d—•î I)ÿ×ÍŠ¦žÇ Uûh0:8k¾% ÀËOUß4‚jqyîpž$´©ïFÑùïìz 3ô¼Ëéí¿QþÐS/%öÐw™kÁìÃ#†¹ÉãÑ@o9‚&.’_žof>“ïþé%1²5ðÓd×[J™Ð9»–Kx¬%šþŠ1áâ¼jë0á ´ÆÕóÎ÷µ´ðäÀ¶QÛGâ¾3\Æ×'õºÚrß“N»g¸¸ŒŽ»R”Îü1C{DûÜA †©s¼•#^5€üðTWZ•çòÝú½®I)Λ9 ÜâZ,*÷b s¡.oçé×Ò¡S '}¾jôÈeè%ége¶¦;e„”§P•3‘}œ¹î±Ë(8§Žö—b²›)׆A$Ÿõ+(”iÊË%Ͱñùøm»>÷ (`Á¡¸n‚¼(óJ‰(ª£Móú{vf, ¨÷,ü”ÏÊžÈXtºõ…^¶ Ó1:aÄeá"2 bÜÝ€¸B<©†ž_dÿþ }6•™*²Õ á—ÝðHݨÖ]ŸÓPpo‚ŒU}÷GS P+Š#aºþD…¶•œONÜ|‰oKc·¼2)šÈ¨m³Ž,#¦øZ÷w¿C›}Àó«ù.Ø9ñžµ[ƒV¯.uϽ´c”}°Êó;(‚UÞ‡O]îõ¬Codå¯ÁÖ÷äs wãla¿/Œæ­EKî÷b[OÜÅÇ‚q çöí2`¼i‰ÞƒÍ¹RæpýJb½††.†915tŽòkÈo‰Òö2KXÆSmS­ÿÚ¤¾\GέùA'*êxÉT¸û½ÓWó$Dßlvb\jÓìý‰ 1ˆ*Gµ¥bíµòa݆ͨWˆ›ô¢ôÒ4B ÔãB*@€-ýŠ>41Ç; qqÉ‹œ ÇkÃ8:B,G2ZÚ>ÙàŠ£ž3CrÉ­,_į*› o”ù’ïÉéðïÅ¿¾²š¿#:Z7ÏŸÛê®—/¦T¯ïÁ€¯»âeS ˆÕð´øú7J‘ÿqÙ-p»~îCª ·ÙYÇ"ˆ›Vò 0RÑJ®ãØo}ñsNǬ˜Þ”«¿=LÕ-qe¾L#‚3vÝ’ .Î!ª+‡£’«»ò‹GqÆ,l^Æ2å?ÿ$Þ"éÚ~¯ÑOÚ#g«Ðû{£Eëg5Ž8‚Ì(|¿ôˆpú?M"ÌA„Ñʃ^ÿå^üÒ(Pó­Q®\ÐzJC@¾å¯FNÏÿ^¥¡’õ.êôÑf„·¥»*"E^×_ÏŸVÑ‚Z‹#uXÕY›¦ÉŸ!ªIù !{î(¤< eDÇpÎK6kJÀÍ¿1¨ÅüË ¸§-Ňàx64S ïI$ÊA³žp}‘°vˆ2ÁÄÆ'6.Ÿ„,'EóŒè] ?òí÷..àµyOpƒu¸s‡nŒ¬ëÐÚwÖð·“È ÿ;[•Ej'Ùzµ¾DìÊ©òБñ…6´®À'Üì5Çud¼/pi6ųFdP"ðb9hhHÕ(ý—©‚Q›}Æ kè·ÞÖ mÒw ×µ³gõÍ*/ꤸ€w L/òÌÚ£m›0-ZÀú·Íyþ¶Ô\-9Þ±¶;û(ø8Ñ9åëS&šIÁáñ¶ríêUtVä1 $cz¾ ]õ©§`PúˆMÎ;Ñ«¶Ú™óê.?þšÍ–¨òå©Q{—EiÿÛêø+ma"!âèh@"ÜÛPM•úÚÐ_[]úÁ³|fZ{ûDMÉÖ rBÝ'Ø2E·,óò*ìš•W¢ΫN]*ld×yLí:'~äGÏ‘ùr¿ÿ=nŽ'L êÅæF»òŽçKœ*#ÌdųNe®ÈDP¨æ¸¼®Ÿ× d¯Æá «ZèoZ…^7#?ü¢ñåfDzþ^R^;bs¥L{á¼s¤GÊ`ª•hcýn°—Û@–K“Q¼ÄÌQd*¥ïÙ’|T0|¾'ÂY®ï·úS›ê;â§Ä—y:­ï9JL÷fA„M¥c €$(ç&ïhƒ–¢Y÷÷Ñh=ê³ûòžïvÑ-c&î%S¼iöQª8z1ƒ`å|.ûRêeKÑÒ³Û$c@[?WLNÔ }´w GVY6FªùúÿE+2¥¼¥#fò@Â9‹y>ãwˆ#bùÑ4L&c7€ûŽ‚€QÇ©{S9†×%ï°~3Út¼8‹E~æÁ8Ëߘqvÿ—,Š\¡Éƒq{ࣼ„\¶õh Œ¨ä«Û;€¡ÚÀ…[a-»µy¹Z*bc¾4®ßY- 3ëÃÀÐ ïÜǦÍòL`ô³Ë¹sîQjð'-WÛQ±Ÿñ{3‡é_?·R\?XÓå+µ9Ë÷»Ø…qË$;%«=x8à´H ±2M@šÿ © •7ʳó?FζÁž[³ûÆÉ¾Hí'Q+òalJRÐ,Bè8qL¢!Ca¿ò9Xªíô{U<Ž stP½„f³£õ£ä4['ÓŠ²À ÁÒ'G&4Øý§?ê»%§˜IΈ aÛÇt©µ[ ¤˜\Vðœe°|oêióÆ5ýßIóVTÁ&Îâwaˆ}):¬½›iá¯TÌò…}qäs7óRD¿Ç#Z[ËJ€@-Í5û´ÏAw a ›ªõ‡¢¤›ÁC’3ÇÞCÓT߯!½ŒH¬y|1!è¢\›ûý>_{À‡‡ªNŒ:˺P²ðQpZmÑ ;†ãÄ"÷+»Y·Ir9תȓR,c¦)ñhs\àP—½”T;š/UI(íÇÑGá–N!švÖ£¯aÇMuÀfÃR{Ñ[Æ®W!¸“Á^Pý-D™¯Y±¨§ ä‚al¥a¼ª2ŠÌ0>u7f³ vR–¥Jö.¸â oVÖ ð³ÿ ï›Ï$,£ï™„/Ô·6èá&rªó˧$Ò_иôIkܨŒÝÐyZG`ÕÆúÙµtÚb…hœšÜÌO9OóªÙE‘„‚Ià·E2m)L¸HÒçX¿D9ÌÔ»Þc·z®Ø'Çhf©[y‘Mex2q‰¼}8ŒÃþÍâüô†ƒþÚ(‚9Š×ÍU·›ÀÑý e §t;óÈVÈõ‘ÞbÒ(Ç:+åë½ ìÅΞÛ¢¢êí§[{ŒF¥¢ÀßéPyB½ÜËíV„¶J®oýÍ’Ç“cmB§·IWp… ÷ÍEgøŒc³bPèA"x”"É1œœÎaLüÎÙHuÞÊÄÔ)«£Óih:Oí,d>K&›If{‰\€+ÇUý¦cpHBù¿£û,ë:Åì÷ •Ÿï’Æm™Õ¢•²ÂgþNÇøÚðíõr5¯x`"Þœêøë8 ²7V͘ eÜ«[*£ß!Âç@ȺàQnDõSÏkýrâ/9ªy‡])!1|?o;*¡R9ÿ:QÍÉ•Í×J'ua2}4‡ÿ}Ä Ü“6ûñëÁyÞ‹š:<–tÙèwAÅXX±§½ýGhÏ9ªïC^‘J{X1'¤@%4ÍÖ`JÍ<J "f6ÍÚ"£+#g µL åMÂÊé$ 7J{Š í+z?Uü#ýì“Â(È •ÔqZU°ìü­JÀœ¡EP`¹Z³—QnMµ¨>Ø_×ô,ǽ„v[&ù Ø b“/MÊwÆn–›ˆ­õQŸ4´Ê*w£X^€“þ†è3[øû÷Ú¬ngÓ >æ=–ìe‘ñ8ùúI`þ'HoùÀhî×d–Ô´¶*H-kTð±†Uz_® ¦â§Ú.·ê<’q.=o­süže†¯åÛ”ÏéÍlÜè½L³ÆÚ Š•. ƒÿKä`¿a{™²æÌ:‰DÈÁÔRÍïøÖUPÝm£Ë¶vI ·×ÞDä@Žq¡ë:/Hê;SSfwF[wEm(ss´€¸`w0ç—Gê] þºŒÀ‡»ø%Q„£ÒøLwµÓ)õ(ߥüØ]ÿà;ª± ·¶c@xÛÃ)Ú†CÆBìAÐ ™ñQ\œ¡ôÒ(™x„`ŠŒa¤R5(ÆõÁc6 þ>ª6`𥦤µþ;§Å‘…¦f„¶éßÙ%ù^<›÷¬àÆ9—Ô1Ù°,¤Åžz›½‡MŽe'Ð" õå‹)‡È)Eí0Ë#“Y‡fši^Íé¯Å­ÀJ+³ Ÿ¼';ယï½Siøp8#Ѿ‡=÷>Ïܺ®E»o²Õå͸¤ô1·uÍbÂ@áËb?Ö¸DqàÔÊ$)HZ?G×ÞG„§¦î½šß§ß£z´HŒëw„&ݦY繓âós… ÔàQN5ЦÂLf›dq~ÎØrd,Íü ÑuŒµø©ápA$\P¸"“ŠQ¤ë©e¾¡Ì‘ؤÄѯÒ/V츓- •>³9 áBÂZ“fA* Ô#^6?ÁIm´Á_ûƒ¦ã-Hƒ‹ ò„ëÃñ¤­%³ˆO JoàFf°Ÿ ü·¿¼ÒÀÏ'ºFö£‰*s}EŠEmHþíF ¥Ð<ðߨ½&LØÛô˜peÆ……³oØ'eK^å *0õ|0nœ,^RñÄ©pO°§õd廽Ž÷‚¾3¥EýÓ,eúx*Pj; EMÈ¥E,Jå<­™m¥ÉÚt(ìê¤ËÙ•¸ØÊŠÐ–§˜vÍÙ>CßcÄCÚŽ!sÍË~é„È&WX½»ÖC™æpã7¸ŽB&ú |z%Ü÷ë§›ÚQ£0“ž9ÓŒá¢Ý‘PáïÕ½7gý;§ùk¡–" "ìÌÖƒÀ|‹1HaDezЋ'Š™Câ½»‡Þ—`¼&ôŒ Þݾ‹w  Z5HøbP!5Wï‡5„ü%÷*j]"uýq2É7ƒ¹'d½@y6ÂN|‘5iÀˆfÏDÑýØ*Þß÷ µäZÖ”q:²zOKT†ÎëUºµ÷Ú;4¬±Xý©WZ„Ø’e……“ÔyÇ™¹þbo@½´ø ÕÌD” Ã?)ý’9˜w, nE)û²¼³öƒS[¶¬^ ³@ MYã1Bí_¯Ïö¯×ç‘ûÉZÛIˆ†±3P脘-ÞÇMÀL/LW*À~ÌR&Å&û¥ms`/ª‚5‡² ,ÉTýµékÿbÆÚç¡ß½ŒþA˜!,Êœ ˜Î$¿O•Ç/e{Æ -“"úh·ì ,³¦äò‹êØioW^¶j›}þÇÒy,9«ÄPøUس X’ƒÉ`ÒŽŒ‰&‡§¿Ì_·j–¶Ëî–ŽÎÇtK3Ì hžõ°”ÅõŸ&Ù} F›âÑUú³9Ì4<"X}uþŽRŒŽܽŠoÉ%ég C+ ÑlDz,ÂV ¥vžùG:KÀTwâL˜¤íÑ ômÓÍ›•pd‡+À¥S¸–üHgñÑPiÐM5ßÜE8I“ÎÍPJšÆ]ñxÚD®'M-Ša_t×µèI.õ4•Ùé/Í>´v÷/ p(ÓŠß3?>­-ÜN©±?êƒ)ŸŠUZw_С~õ:Ÿ*áÔÞ¢Ë+<É­?—æM]Š< ·|”Ô‹up)»”ݲhÒωç[1ì_s7¶É,Q±ÒÇäœ/Îßźz]£}­ƒÌ:áWQ>Ä£+°eh¥bóƽJô2Ùµ¿^ÅL ó”7¹ÒcÆMYl‡RÍz‡ˆpuÏös ‹Ž‡ên’–M^w1¢wÙN|ñúÖ¿ÏJ݇P(Xs‡?ˆKMó»¥?ªû42S÷†5 ÝÑ’BÍÛ§¦­ìò7PHSÎñg÷n&+u“Ém>É2!ý¾¶¥±^ª³„X¤ËÄS€Ò ko<2‘Ü™pˆÖ,_ݺ—VÝ70¸ð ¯_úYsÝDŸt(uÚÚÚE2IîúĸãM ±?J¤hôÂÅöIªH4\#Zvíºª•Ük‹ûW´Å[b¡´ðÇf!ÆN6 vÃWÒ—3|kü]¥@ ¸PNøR‡9â¯8æyµsCbFâEYeE~Êy|O˜”¥ «%(nmX}wšF¦ VJÜkƒb9…|88ž «ºA #™œ³Vÿš€¦ˆZ˜1¡Ô’ýK’ÂWI|ùû³f¼>îÜtÿ»¨uËNíh—Ó%+u€k¶$„0×Ù“¬ÚҶm³M©¸ó¿B¾¬ÓüwøuŠæÇÑ2¿‰ŽŽý‘h¾4†˜“©jß[á¸$u±þºUG íI#'i_„ó=VBj—~ã»·ú=ÆØ¦vr\Œ=žòQ#køB›u™¬^=\kK>*Àþ;#y4 ˆ`ÌLFlgˆµ¾¶±S·á¬h·ô­$ü¢gêøÖ³Y»è)¾]cì‡ü•nž£%ñyU ŰͪÜ%ÕÆ\Á}¹óOµ ­<^üB›Õüœ±¸¦޶MèÞ[äÒ›XU B¿+GÎ)¨Ó9ñ¥¦7)¸dÉr%0}­}ë1Ç8ˆ[¿[É èË…>»¼’Ÿ“ÜMŸv¦=nˆð>Ú‡„ådˆ,ÆÃo1 §'ŽGÉ´/ݨty 4ÿeh2â¤(ØÑ…uÌËèÖ #©ú{¢ÀLÖÁ‚Q¤Væ¾@w‡ª5múß -£›IU§NÑÒuï’õw¥+_tÇeÁ„µ¤:þþaà·²ØhfUòß©þ‚€&ÌÇ“òæo,±¬è¯û€BX¿äíè¥wÜ&~[~’êa<鹞Ô!cŒ•=âÁßÅ< ´ö›>øŸ5M·T\üEviÎ Ùöì@>.wÖa6Ñ›»}ÌC­«sŒÃ¦ëMâ:3± ûvMKNèA ‚Ðìhmò±¢/'Š"! tôÚÕ‰¥½ÅivÀÖqÕ€…±ë0çwâÓ̪¾¾Ž ï­ÃÄruD@@ü½”ñMoIoCÓ¬Ä/;P,ìáä·Ø «ºìs#†@YOa–Øcœn­…Ä»¤€Ã0ÿè·–üžØ¹£/ Ú7İbŠÈ›²Vij“‚Öć­I5¸vÂg >Õ¹‡žðŠoŽjÛOsw?,ƒ¬S#}#:ˆøu¤e˜›-Ùˆ¥GàUJ¦òOœªæ_E|úe¢Ÿ£ÞðÇv1Õÿ2¢µ’+²ÎÒHë•mâ=Ô¾ÇkæÅ»Ý´3¦”±‹’¯[Š~‰7æËo‹@r'iøX²sÊ•œus¯4YÈ`OÚ¸þm=mÀoÌ&X_=L•ú\¶Ê+Ò›XÍëŽFØzj¤¡2¶Te>HxÈàô‚Áy¤».MJæ]j¼è]À5z%PŽÇîCN‰²¶«—‚m%Õ“‡ÕÞo׺âÞGþžAÊǪ(#ãìNPq³þBå£éBÎÏá/ „> ›Ll”V‹yù‰ª‘ÍÇHýð Çz.Øšað¬äÄ÷õ4šWV‰½dاf>èPUL }~2ÏNDË–\¡ØªÑÏû¡á+ýÔšbG/=Rwb CiW/q$ÈøììwTÍ·ÒÉi±Ýê†,›ú]aº- /^éCôë01OU_ Váf±[ÆÏ¬òßž ªW‰¯`¡&1'Çu²_Ñ€n¨MrdaüÓvk<…ª›†ã™›Jª_cì:‘[ÿ0ø¶þ%q²xV~0`[+~ñ‹mÕü·ž¤Ò.ñÏû(\¦¤ù€Eš[Ž2é÷MÛgúÖ¥¬ÿúˆq+£bð’ŠTVƺq3²i|áÖû+ŸïlmφðAVÇ„ßÐ5Cxä“_9Nê˜oWòVùO—éùJp ²WùYÅþDQ±@§«“„ØunÖú;Sô!– /ÒŸ: 0NM†Ùß8fÝ7øl+ ‰ë ÙÿÓî¿IÓVE´Ò%˜¿uÄ1ç{3“x\ÉøqœiC³ÀÇczo%P¡>Ö|k ± ßOØšsnRË|e›ã‡Óx´Z{«®±Ç²“ÇNõB‚hñ+§Ò9žØ£ÿþ™X•°Ùb uÍu vI(Gý*ŽAçϬ8ö^ŸÚžëúd»µ‚“>eœr¬WlŒ> XÊAÔK}ÒLi{ 6¼?Aù»ûf¯¯ë„s"·ÛËÒazçìáUá+ï—¥œ‚äÓ³¼: Æ4yÀøp3ÍðtUv?)°‚vððmSï÷ÚíÖ 9ÇLAtä—‰aRÀÍÔjý ý E&±íDäÓš³²î³J ƒŒ`«@•àoÈ¿«$Æ>]×6'Fa>Ò…E"ÜDd;]oVYšÏƺœ—žÉ‡£'r³èqõJ…÷`›þ–=éo2Üu=aÑ¿zAåó‹=R÷È6|{ª"´q‘LÝ\뉡’/¦»Ç,Û–@à®”ZQþlËs©ç“:?I† F¾éIÈ~I£fbŠ2òÑÒ9©ÄE…3ò…Œ7Þróqé5¹å ƒ§Ô>´e{é~„c߬p¦<™*£Ô4Ät#+×Ë&´í‰eZ/oùúù»lþ!èWÕ× ˜‚ù××Ô%ñükÑK¨A¢Ãi§J;XLÊ. í/zV)Q;½Þnm-ï”?R]Üvÿ‘õ½Ã“·AÀØÄIK«µUÂ~’úÒŒneV)ðz“ |t‹` Kä…Fc£ÌÍ÷oA?pýkÖ?È>V‰œ°¶‘o…þnÙ±øó}ExpåžkÄ¬ä² ­df¢ ÷s5‚ñÕCûÉx‘dã…6.æL84Î![ŸûÎô §É:-¸R]¨yŒÖeƒQ™IîtBص“‰©”HΫ»z( € ¥ÌNgˆKÍÍÇ6ýÒrèA/»KæZú ¼úÒsLå[Üc¢®ÍX­@ióêíËèï|Äx’vœ?XºD…gÿñÞm¯ºT~Ã&u»ÏÔiO(9³•Ø$i­îÒêR)ƒ²ÇŒü˜d~2©«3 i`ÉÜ|ùtƒ^†yó¤#’¤Œ}У[è„­Þêã [¤hK$‹«2ZS8¾÷—ã)‚×c-j?¹€›ƒ²XÔ¤â™)£¿®xmÇãß¡ÐÏ‚À à7>Q!èAk~Ñh ±JFÛyÍ©…Ëœ#sÈ :šá Ÿž'î_½ôkÓXøùË7üa6ñ5’~#‘ºüZùh¡¶®«^#ÑÂg^m‘’Ú«ª²±b,XdŽÔz†¨;Øõ2dA§HcqaiVåE¿‰ý;è:"åÇ¿Ÿk…Ï…\Ãü¾'ýö99R8óì^5ÀrÄ¿< – a]3ØèÛ·s®ÞÂNÁ4üîü uuñÛ•¥xª³ëŒo)½º¿¯½AM®DØÇu?™) ÷b%Ÿ¤ÖòäIö WÕä$VëD€ÔæÑ/Ís4Ç'ꃧþ&‡”N1ÎKÎû²R¿³)³O§OYkèíñ˜€•˵6©±z@´äøpúråX¡¿Ÿ2ÿ–à›§jª.ܡނº }mTÞ¶…eE'ïw—•)’geÂ?TÇØÕè*Q9ÅTæK[_Ci¸;ž¥­^Ë[žTæ¾ÐSðk†UgчHÛt8iТÀrÛ)°Fë=mÔ|#QhHµÜšß±-ÖWW¹¨CY&¾R™)ÿ °y ¢’¬JçºÓ—N0ê=çUZ, >Š d\¾ü±®Ëï(ÉÞ2ùäèµÊYÅÆ÷L5˜} ª€èöâ$®ÒÈ„RÒ˳éÅ™f®63¤àxŠØåàáÑ&æž“7«ï™hþþ[š>VH ÜoÐjªaÉSÔÁ!Åߥ*¶‘V¦:¥êßýjPaha¡ù ëÅÏ´u‹W"ß—Ü×\¿šÆÎMT¼îmÆÎ-<<'o{ª¢Ó’¨.³Í–sÿ[²Êô|åoízŠ;ßOô`=XŠŽnþ*“Êðæ[}„ÐE -‰Àhíߨß=ãlZ§Ô Å{ª#•ÛãAÐ*À’ Ù,Î<š™`õïslØoè3áH$W’4ŽŽuéD%üë”P?DkÕÈÅØû_6P(+'”–Û€ŠÂ—Çc#X§Šž²?·É—ý½·”ƒ©(`mZø€G]G»WÕ{]UWNªMÍzެFÞ®U±Þ‘Õ Li=Ô˜Œ¬ "EÄŒ™Žº®.¹{À€œúbë3®ÔЋ›´bqs€›m< £^c1Èý…Æï¯ã.Ä & ߯m©ëÖLpB(ˆô‹3§‚¬à©Œ à PÄR‡‰ib³^—C^+‰§HÍx#\p-åOOºÎ×,IuûË’ž(×OêÛuÙïbŸ8–ÊbjÈŠŠ]‡Ãj”Cþ¦¨=›bˆ’¢k=ù¼ã„ûz’¥$îõN=CMzîÊæW†eá»lõyÁØÃOà™¦ØJbF“«z*k4¡ 0‡ÖbÑ–d6»ÃHrDx4‚ù@Dµòžo–Ò͵;ˆ†#Í8xrøyŒXØé¬O±ä_Ì0]®N‹˜ž¸ GäýÈŠÁÑ›6.9Ù¨Vr8€a,Zƒ³ï7š^%Ö뻟¯šf_˜ãXŸÄ—õÉÉnýƒ}œ­&—ôIý ÔL£Zkç£0/ën†L½ ÅárÓ&Ê캼Êv©ú•Z/fÒþ†×_·ëi9p%Aõ5O²|c•ù„ù€Æ²abÕ“§@¤Ñ;AƒÈS4Ò·:w¢õ¶ÿ\gH«´ƒþ‰wô1û— o¬î% ó}µúÄ®/pô‘‚ˆRÅñg1€ý7qhæa¸ô0–ÿÊ«óM£OŸ>DZZNeï7²_>†J½ðÒå‘L‡M ØÐ&ˆ g^~Îã}*’)P¤˜T«¾_ø0AsýU‹kЏ«¢G+ï‡þ¶ Þõ¸c, XÏÃÆ€è3MÎ4Àb°½=‘wÆxxpâþÙ®Œ_ÔçYn“wR?N„[à7}§Aþf´‚*‘ký´ ûqF¡éÛ% `D“‡…Ms$"Z°p3ͺ Ùìê‡ÃB ù´ Œk²®ü»|+J’Ÿzîi ¿qe,Vúwbey¯—×y@¤SXþ5™óïxŽ5€›þÒzÿ×µãòø¦ãb`,^ŸÍ%*ͦÁ=[Ý´KÉÛ~~‚í‚Hyàû€¦¿çù@ÒЋ-eöVÐÇHJ yy0o¢ýÅßêiFõÕWÖ­%¿19åtå1‰trÃW· §oB•Ub('·¿°7mi«Îð5ÍU'«ZêõéÈÕ’x™»˜Ì$a¢GLKÐmTP ª±.0~dga¦þ&ï­qk''…ЍªFÿÛð§äd†Ý|tYüÆæ‰‘ÖÔˆý7øö!òª³Ë_Šj¹xåCYf’ÓþxüöŒØSȧعÕ!ÔÊ¿rÒžMH1 ·c.ü{]ÍD8جc|PrÓ,,)Vçù˜ëøÚ¢a$8m£ ÝnÞǵãË7Б“Å¿œ‚;õNã0$À“æK˜¸‚ à‹ ÑØ·å²uä&ˆ°Eì"¹ôöê/›µÝª¡ÌÚÜþ¡F‚‹ÖQqËO²È#?!žÅΕfÏ[y¨î楪‹TÑã@€LH @|ûjÖæT éÃC#—?¿-ŸÒ>Ÿ2·%D8u”ÞLf^0”täë;óEØñï"£þ=~Ç¡E†~v›ó ¥ ñ´®'ž¼>³VžQùHК‰“Vp¨‘ÅŒÈðV‘U}böÉ‘Ù}úžö¥'™?îV„Á ï~‡%¨Ýï"Áu*!ï^n™iÞ»"§¢¡pxú úM8º¬ÿu'¥zŒAË#%ˆdÑ †;^/9æÎoìÞ `í—ïõDK˜µ_u<â¨ÇâƒÏb F—¶’isâá»8¡ËŠÀðæ|~SUQÉî¦Êú8‰_KKá„•<ì}öP¿ñ2Í)ýÓÿM£“Ñ0©²ø0Bgh’8 ¬,÷ýàÇhÔ†­׊„%:ä?žÏ †o»gX£ˆYf¦×úÆZ±öéMá]$D~ Tjbˆè¯bhX”z 2À( Ç lkÔN;wÖ:ÇsàÎ+†xm²'heÎC+'·pãqÜßìäSÝH}™‘“ê‰ø¬ùû«ËCÒèf‘⺕Ç?ë?±àûç8kø{Ìöj›rÊ‹UÇäwNY½—$çèŸúˆêö ET¡¯²”S'ð³ŸßÎì$¥,2èñH³Ö‚þöâ¨üà×Ö#†Â ))¿O2˜ìöôm<{y­èS¼Þ¦ˆÔEm€þä×¢‰èo‰à4ûˆÃÇ… ³É`½jÞ9¯ÔªïêvS½7õ#ÂïùÅ1“gJüà°x­~S¯›cŠ“‚K="Ϫ;þ‹Ê¤lÂÎ!·\Åmزó¤yE´Ó1‡W@ß"›\ÛUä$óÜ=²ö%Ï›"6…5gÓf?E+ñ&Z„é¬äõt•6†#øU1¼ï1\Åž[C?OÄgÇ:ÙIêÇ` %/K¾(,O˜ äí­¬¦ ïÝJê׳8½šàȶü& lŠHþí5(è½K ¹ ~O B ˜²Œž¸÷ÓÒg®uÅÈðß)£Ù%@ƒSù·Æ‰ˆŸ~ú®ÛOûXÒø -&™Ú_Lb¿õkÿѰ×ê¬jÞ· ¦[l{Ø/ѻЎ}ÏåðCòÅ/wÊ—~Muó½Ëõüd§Qgò_týª¦Ý4ieÓ•=æ<­‘PWô¯ &O~ÖsíO­–KÕ, b$–e¢™T¦\CþZþ–#µ¨­)9ƑܘøÍ‘™¯Ü`8•Ìí4`hú=J¶òAð=+ ÒÏ«4L·EŠ÷¿,·2¢ !àKìëHvÒ8f;| P¤9§S=š†~¡ïÅ÷Û˜|‚kVäç_÷Q"GÛÀ+ºKn=c`ªò 3E¹È”ëJ•ÛÈ/?¸¦ ¢iªðEª0>Š<ÛT±ç÷>Bv?~V“¹s1|ƒ¥X¢ïBú;§ÿ¿2ÔÕáS9ãí.zçÐ#‹«Êm::|$<™“¢€ø…ÃØÏnúF8[t¯ùÒåþTàg•§Ì´IéWìAåSÇ @e;õD·?ï–ïVüNÊzóµ›=4»ëšMa·ˆf\žÅ­Ÿ‡ ÖÁG2Ùò4b¥µÌûX&0F|CÃôÓüEZ? —ÚÛ¸³Ë±ïiã/-Œ1-ÝŽú1kÜÍÄå¬íD ø“ËÕÅô²7E/L] )–|€¾Q×¾VQý;ª“3ˆ¿î°Öe/?ËuB˜ÕþPÛ&¿K7Ûï¦y¹†‰Áfh>æñ8l¾¤˜Ï˜ý"Ú˜ZãáÊ>AÔ‡~ž¾Z~¨ïF¹æ³L{>§Ñ߃¤÷ëí.,l‹Óuè«\@èÒÊ-}5j$¿©G£ùÚ+hà“^ë€îÓ_ÕweÝÓ—7äͱñþb9|òkøÔ–Å ¨¨€cÛrgÅ9aKÒñ8V¦¬gk§Û{ÁÿÆ~ÌCƆ²P¥ð‡< ²RªMûoñv8mÇŽÌiíp»ÚeU »“æ!”¥ãèÚ‡l›toØ|ßr;Üw{™‚›14)ýµYõ2(âŠÔjêµ!Ó›÷Tî¼*Å”˜?Æ¢’×Ò‹áÊ3î4ù‘ë‰Õ˜ä!_S>[TÕ©ªËä0¾¾EêŒn7æp­íø‘5(‹|lÎOBÔ~c­†'gVo’Ú“RNØ*¥±r£ õiQ¯~(üÆÑJÕ¡éß&A|Ô”™tâfã4 B-'Žê¶££E=f”F›$}ôÕš ýâïpHUß­a•ê­¾´Š£ö¾ÌX©#ز’ièS_æ%ï;Ž mâtKˆ—¸¾û{ÑüqjÇØ š2j?œ&—äê i¯¥®öµ÷°Íáý»Lu0,kÝægõ%ÿ K3;«IÛ‘é¤ûë9F .k߀,ÝÖC1uËP8µOÁ=b å<Ët<*j­Õ³óùûwüpÙKƒTRñ*ÁV`˜ÁA©†UƒÅ›nÞy“µ!¸¦è£v¤° Q¶éš}6†ï`U”ŠÆ‚ЀhÂÙÄs-Ôù/‚kJò_Šgh$L˜µðR)@ÀÙ@µ³–†ÕM_ a0"©xSxûÓ–Œ±@žúÊî;ïÎö”hó3VEaxøÚÌ ãp3¿¹Ó´uó|žÌµ¨C…°þ@Å߯(¾J¬o¼Éû» ópV>_pÉ®õÕ„fž…äí’¸ë)5æ‚›-{f!iË K}x®ˆìó»"0DžK’@/ìPȲ|\N¥RÌ¡¨4ܶö—×ÃmaÚÉR¡ßæO¹GËøUz ‘WáÁÇ/p¥ù{Å7†êÐŽ3,òµž/oü ƒU‹Q¹Ã©gu×6«xxHÇ^ ZŽj›ˆì‘L(ÛíõLé8KỼû)lÄN‚¬E:R°Bĺ >òüó"¯ûLn­—¯(>öñÖ6£õÕ¹$9Ãø/öë±ý·ºËü²Ï1—è—oÅ;™íº:ù;”ýz<]oµŒöOä{6͈’hIÀ Z”¦y› B>-xqüè1[ÞNýÐ|u QTÁlçWtÃ(ˆ.-ø@ºƒ:ëͯ«Êa*s¼K$d©i½ø_)$k.ØhëeN¿ÔÎÐÕFê((æãE‚ âï&¸÷l-ý¼qëJ.ËÄœ»° Üì ‘Ã&Ñš+ðö¤¡ö >åÁðÞÃ)Á÷T=\–§ôúqÃht4=¡ÂëH8¦…|ÚÚÌdXÂlÙzdKþÅPÛm¸¹^ršŸI » :/kl+ϱC ½‰‡Àùì¶õ Ct› 2Êþ±¡¶<»‘ÜÉÝv ú/æ%/‡…”º0Ž^¥®')ªÏÃ*ua}ÂË^§ª ^2ÊAßÇÃ@¡œryÖ´+ Ùdëþ,à• ©‡›ð׿a.<Ç^{tMÎäKÂYèñ/¾¿ô_øN]J Eü£àÞ8c]$ì"gYSXÌ»У2Jƒ«ëúA¿£þ (¬êf¢‚oÊ}ÁiO r¬7’ô7&ùrªOÓ1ôàö5êz1ÎPUàûÇÖ™ªu6¦wë ÝÖËCÚ¿È:Ä÷ZÒQ—ÊåQ¶ˆáé‹§}U‰Ôò%Ì’aYSªÙ"@íóúP_‡2¯%ÃP¶¦‡Û,á$_hò$žßà `*¼tX’òi†÷!à¹eêŘ²DÜø ´½`ºwMîáü°×V¾BÕã‰zßÓšª ›‡dLšçþw™ ¬ì™Î ¶`5Wn4·d‰+ €/”ôãìY®‰|AxUHW/d ÊÃYWgcTš«y>ZˆØTåaÍ´øD³aÄZìSp¦Ì”bøîbÈ>Þ(ì·û9¸‰ÛÐÆVæ~ s/&žÇ½=‘ÆÎ¯™æÓÆO•‚†C^ó×$1adÄÓ¸ý’³1$1ü6­‡`ÜÑgï.ù{÷ŸXæ"ùâòa>Áàÿ’ðxô¹´ ö8Q¼†€ê±èqû{ôÞõÎn]P°ÈÉ7¬ð5á©—û Àh®›eæ Ê3¤ÿêATŒÓ]IÍj4öû´Xè ÞñEIîiøÔ$ð[žþ6{w»JkžÍ5„F£d­bÍû{tkæq^¥ÏÒᢘEM = ÙON>4–ÎS%ÃdN´Yü;u¯¤m׈Û\5L˜þQÊ@ i|7â‘m¸¯É+G»ì_¹ö´Ãµ¿¢rzj­E²0äšñCÏ6Ðÿœ &ú1¹ /È0¤ À~ÛC±è«âÑ–rðuuYž²âžºð"¥d˜Ó7ìc^œ9™G´?ö€x~Úqc_åôÓòͬ £·É'ˆïoëÂ9ŠdPè:WR§U×+^èÚ[Ý €Åš˜/ލÀ0²b8$¯Qô0æÎ³#äjPÔ€²·UeôG¡¤*/nïºâ)úÍ\z‡SéÓɲK˜fÜ–žDv%3}|Ä®6Wè%¿ç*Ó›ö_¯-ÿFIrïïVoxÏþ‚nFü6ظƒD›z⺲†WÎOx/–É«¿ ½8,zjÓëxÕÚ¤½r?ìý¾BvUI {Ú¦û*Šäæ.ï-ên|?uòÆz2Àùð)'¸—z=°@E3{í{1Ư'Uè)%ž*£J²:þµ—UÆaO${O÷S?ìø %×Éùæ Ç…¶»ºÉ¨šÄ¥8êÓQAË–C”ÜÿÑV} 7ivúÌgÌ¢ÊwftÑ¢m%e¹Ì¯3þÍY¡¾Ôj4 ò|ß\ Kf†"¤ÿòZ¸L™в”—˜ÎÌ×·Ì»ô1¼GCÉ®~))Ùþ›Ï”2/.tœ.eCÝ‹÷$ÿ1Ç­ô.bœå¡6T° N°ð´¦Ž"š{PÄ)Êäõe"œÕ‰=>@æÉÇ­}žûå”ýM“˜þ ñÇ…é>eª:/×–!Ó¬ ³›$à&oˆig®ôíïCï:1=º0‹I~ úõÃæfâ3«bz}\Ñâïî/#÷üèÌø€úT<&_u>á{œïï¬sHõž¨7÷DÄ}vR¾Òå }{‹}ëx[#ÚGË¢|á«øãž•nC™rÒ¨zˆºˆú™Çg£ÏÓK×WA³“);|êÊ!ðß Êfá¼î°NUˆÇ©húób"8šÇšì^‹ŠËük5Þ=NVvÚèwDQS ­ÒÐX^A3ÉÏ—»^5…dwq‘Kví!½¶ÆÇ!´'˜PpT®÷?ç彉aÓé)⸴ŒË, ‚˜·L™s¥y«©P0ô ÷o×Ümd¬µqFTÛžÑOYÁg¾0ÌÞy,×QuJ ‚+3–µÕM+cLïŒ^t’«$f0•äx< Sæ™!-”66iÙd/ã~E|üÅ<–Kñ󪹑à/'Ï‘Ÿñq¶V Ù wý!{÷_™¾ôá1E=RËöZŠÎ·4£Whÿ+ÏÞñµ¾4/:Öü^ž™ëŒOòDE¸?ÓO h|ƒõ¢?[“E v¡ŸfÕCX±à¹:F†î7mù Ô[ Ìwjv@*¦¢Ö-ß;Ju)3{½ÓéˆÇ.Š"Q$Œb¿éUðâ÷5½úõ´¯vl6ñGt>ÅÞ¹)&6ñüb Ö!^±2w£š·6ÅýÍÎVaÜc'·Rá^˜ok?¾®¿%Cg¹ÓiÂýÙ=ì³Q¡l. MÂÄH¤Â/³0œÛ¾Fh+Ój›üÌYnZJEšº/UÅÆê¤|Œ™·Ô¯êu¯?my­f¯ÙF'´³€}Å&¼ñŽW KðH‡äáyú£ŽJ^’UzÀ°iQÖî½ÃØ00w2–I¡n¯š=|ŒõóÃÖTª"=€¥F}Æt‡GLnØ· ·aðz0lcN¶Ò †ýúrºß,Ü“~þØ6ùGx3ô ËS•ï׌àÆÄßjg´ "üoD…ïÂké+wgJ1ºî›œÏU "ÛɲvC3Šr'û²~ –÷:ñ«úlíM¸ÀBâŸ,o.Ý”8<•ݼ±÷1¼{0 ™zïP%ÅO=„‚õS%þæ£Uë}fÔEA…>å,+/h]ÎRHüW÷¿ü@³ãKfòÌyXª¬ïà)@kd¥‹rÄI¶ŠÒ;žÒˆ±y€-Ö[†:[ §] Ôrí““|DÒ=;›H U5–~¨é®~Õ“0çé×ßœøóå%“¢e6"ÑYžg_h‡¿™íåùwü”~Ÿ#"`Êæ¯ž²=’0É©oÍyñrε_ƒ>÷äDÛHžzÇ#`“Àß4 Á|) Õ 2ÌGz^ÅÆ)ÿÇâ¾Ió*PÛ–ÄvLõFàÓþ*¹ž6f|²`"t]•¢ nn`mhÅß4õÞι˖à3¿W5ÿVQ®¬.Ò¦È#ä-ß©–n>vž¤fÞëLT¦ü³jè•æPÏRýïªéN‘¨¤ÿêã5Ùý–“w´£Lá¦\g^.úG72Sí³ŽÜîßB]£Œ(¥ÒÔgf*o_0à-¶QF޵Qe+ Ps“Ë‚ùsâw"Ö(«§¾mŸ4#Ǽ‘²ƒÆ½—·|WŒµjÿB›“>qÜÆí¼:;\òÉi†) ºŸÌϵ%>¤%•d^½ N‘Îó(¯÷Å|_öŠv¤’ÇõÔ?\ÆJÓ®ŸÖ_zÞ¨ÍG­[R¶G•v"?þ~·+hC ѾàJ‘U¥.µ4¡G-4ªÞD?~Xë-ð}¿–Ûýš&(»Á;à¬,;——>mƬë.j³iß²»rÌgêÆÝö×µÌÊG넸ßðòy4·¦õ~ÖAŸÅ«å3®@(Ižµ,õúë{ˤ ±U™ÌiûÕ궤ÖT‚&¼ËÞ9Õ:LDbìØ¿zc>Ù8ð7$1¦23Ò†í"‘­VÙÍŸX¤ÒüÙZ’†Ó7þ¯Ö#Ô¬áZy^.¡ e|Ì$úͱÝy_¬5X5 ²XÙo!çÁ"ó@b°¤h€“üë!?T ¡l5H¼‘ÓVJh¿¤÷WìNûÍPf½> Êo.,šóÁ”@ÏV§GOê]ÉCV.ëÇ»#áíe< •T«ƒ¥þN’4XÈG¨lS›‘‹`CaèŽ=M–8ÜÄK2 M€«‰ÕV—®ó8p‹¡Ñ…œÀŒý—ãÒQì¼.UíV¦æÐ¡dzÀw| œ½ëïBŒ¹bÌq˜I2ŸËðØ™D”P芻¦˜#e@¨¬ø‡SW5¹½•| `Ød×¢¹:\£Oôl’ ôJ‰TÖ~°:^—^êš&=ò´ (Å0óD9Üø¿7LðcÓ~_hн0™;ܼL±<•¼©ü'‡ûßó™ûˆV?l&™™âøÌ$Öo£JQ©Šøžù¨}˘³ñ¶[}+È~Þ»(Ù©Pu¹5U±n¼ÞX)˜Q1ÄAS¡K¢n|àÂDÈöhÔ>ÈøÖž´Q-nM›FÐCjiiÚO,Œ©-þêŒÑç¯cJÕ4¾üíÖóëzãnút\ñÓ`·$ïÇëõâsßî÷§¢GÔùHh<îˆÇÙBý;–ÂãõOßh·T²MÇÝQÐ¥ ÍóP©v¥––1’TiýõÁ—XZºø&‚“]Söšáôú°á†s¥#Àcíǯ4ãr‹~ßo“ònCNÙçý“ï²(Ÿeú4ødh=~Ó”à¸{b_AÄ~}Ùª|‹Àb ±&½³ñasºÝXî’‚Q鲨–©—”ë÷‘á†ïBÖ|U|)Y˜fÄ·á!|(•à(î—$R- ^˜Ê=*ÏïæÛbu¬6IqÙª¿Ý—„h6ú’Mu}ZÐ/aîoÆü6(Ž~¿Gßb?8î8í\Î};Ä{ôû¨“ hW'ºÖ·–8l}ôñÔì‡%v®‰qª©Êw÷ÝU/lšßzš¦¸ð¬!.¾ƒ+(}£µ±)/•¤¸4òÍÏÞ:>|#ýGÊo¦¸TÂÿÚBß1À3lµW¬Ä¼9Ôüô::Ä0 «ÜEK‹‰jV»Š}a%l<+ÖêÕÉŸ•ãX êl¼Az— ƒ_ X8297=ý½÷\NfIÖ…ÿŸ« ÖŽ/âL š._µÖÌD`„^xþìÀ{Â\ý—Õr è´ kï9zÇ@wÓ•åžÊÌÊz2;gšb7ò,ë‚tQ¥ú´æídNÔ:ù«¨~Ä0Ñ{dzKò)Ø«%Ò¡uáa*ÀÎлWÞi3FýHç;«di>Þx¬‡<÷¸TÆÉÚÃ"y¦tŸ_ûóø&’íF£eo"Ö¦5U_Ö–“ý`£7Ûù ÷z3Ñ„¿ØtÆa”ª¦úÙl2czpsÍ$2±Xi.L¼¦·ó!tM¬Øií2©d57#Õé4¼b›­ØïwÝm?P®%«3ì-yÃ¥dk]ŠFƒüØSª÷5-SüqÃ÷óiGÛ€cÛíì´µI¥ºþªHÆpYqm\ÚõSûn„ªÏÌ›AïvË›÷;¬{~Í?øpWîÆjÙµúÞ-§KÞMß›í±>¦¹}0|jf¸ O7[0Nw»04©å'”n¦·*,Vzò¾îš»rn>J.L²Mæò­Iµ´,g»d=ÍKeo4ÜÐö À³Ù8ëEîÕtÜPGxýÕûH—Óm­4¬G<‡kisg–gÑÑ‚¶gõXµÚ ½t/?ltãAœË†Ããd°–Ї{’5Ê­…·éR³™ƒ©J„&4¥›yŠz=“ýc-9ì§pµÒ¬„WþAuAŠ*M£~cYŸeŠ­ø¸ýŒ?6´zÿB}v¿›¦+3ÖŽî§q+ֻ˔ÆÝ¼§Üª& »].½Ëù½S²-÷ñBg\Îí6&¬u4«EëK<™P¨ñà˜:™Or2Dåãtžnt³ãVqþPî·#÷ž]bQÞÊÇÆèá©Mg©¬4)S-í\-Ö WĶTßí³ã ën&¤ë È êrsêÉ*­¤Ê+–+™-µî=õ8(sÁzµˆŒû¥T<5 Þ}!a>õöàΎ/<ôÍ4/wBÁlÍËd—6>Yܯ»åÚ2ú”šOÓÙV¥ÞÞ'<¤¸™åEe¿­V¹‡:K4šÑûl¸Y k¡p/(*e³Iw…z°a÷Õ²¨ïÓÊß™nª©üãx =¤' M{âÁòCyÙµf›òS‘±Jx G4P+zg­é6"éUªS%¼xß~$U.äP -+.r9°¬kâj°ÞÔÛ“iÝS¸_õ6Oý΄‡ÅºòæjŒ“‡R3ÕÜåjª›¨˜Q(º'ëMü^ûɫոƒÜåcùö$Ý\–ðò>2/?xâ­oï áV¬õFh¦X çë:©ÐZo8n\ù'Rv— õĤÞˆ‡ìÄÿDºY³‰FëI“då'ÝdÝëÙ JÊ õ˜Ã”ÙEš!Ñ­Îqn¾ŽÆRÉæ¶ž?ÅP¤TÞŽyh;H?µ•ôZ1ö4ÔÙd§ÍNÑ[]ôPi6ámÏ®ðXÍ¢`f«¥ìNÖY6T+–daŸ Ekãæ†Fs¢TH¦Êù^~2o1×zÔ|¬{<•šƒJ3ô‹ßW=Û)¿/,bÑâvpQ8ól4+4šÍMw»l§W÷᥉ù ßdùŒ7Ôȴ‘fe= ­§ôzõx¿‹&—[Ü\ÐÕ,ïÙ¯Qs²Ê¦r*-jë~}˜^ÈmÙ_óîâ­Îh¡‰×z“ˆ>ªÓÃ0V¦ÍÊÔÌ‹O›ÐÊ;I—áü¢1ôd[’~ˆ²R`ð˜™7£éý:–ó·3ñd8Œ–Ùz·5\ÃzR ×Z›@±%£áP?¶øSQ#¬ºâ$( k€ê^òÇæ¥u¨?/ô+‘JwÊ÷=Ô~'ÄcQ–*ã¢ôÆsí]d-"j¸* @µñçêëA{“ƒZø7µôSŨ§ÒÊ5b¡ùl¯<_ë–@í[Œ“Ëu}"IÜ5Sñh|EÇ÷éQ¹ËºÍ]0¬âY0ÉË•Á¤ŸZuZÃQ,Û fÌ£¼Û@ 1êçK‘ü£™ƒfÙÂ÷ár›D)æJ5±#¸ˆ6½éî!^Ì­É]$½NUÙ:ØÅ­rRz'Æœ]O-ÈGÕ yË&Þí&Ý/ú½µØªvHeŸ5JóT’]íÃ6œ?­ZR¹Äjó§œY«mÈê!hz Â3!…L‰ô²á‡m²xß›¯‡«y"œÎ†+b™~ıº¨ÏîCÉ\?&sc™<<Òö:¶Í.wëpꃢ—,¶VÙÈÔóã¬òÇ6rZ]dæ#™ñ>6ù$¸.¢ø}®×.703Òè$YODc¡Z¸0ÙE½÷QËmU¶\då㨶ȀÁ?“A5&º´a'ÜHÌö±Z¾Ûå‚‹IŒƒôC±“—Ó‰j­@c± óU;§Þ$÷îh2žZ¤f¥ÝÎ3ˆ«JM§:ïrVø½ÐÕÍyš­ÂXñÖ·,—1è6o{èÈM³‹ÑÈÆbûVɽíÉFïoçJå´ÇßÛy³Õri’mç¸0 ãí¦´y¬Ïr‰öd\ïhVøe¯› 0\=úŸÒ•¹ª ÒÃ|3<éFT0 cn°h›!‘kx:½r%¸_Öh; v&WÕ¹™*ýÁ0Vð/«íØ.8ìÈ5kjú¸LË´_ áû@²•©O*õj1U’žÙ½ˆç[ùäªhd³°Õ*?J…#Ô¿äœw²jÄSCÚdGͧ~z0OFžR¬5IzÒ_|ÔA Ù‰wx¿Îx@3­r÷!‘­whµ¢QJÐM<P¶Ù_{“¼#wL¿Ì²í6‰iŒ¤ÊÉ徺ï´Qìi£‰Ib\(ä÷ˆ·õt¬Îd7‹Þr<÷6"Ñu°öÔG|Ÿo´ÇuYÞî·‹7YËNœBë«û~¹¸ ƙݪ’5è™'æñI¥Û"R­+ÝÕ¤™í­ùæÁ»O&wÞÝc¶Ô¹ Õe4Û ‹Ð¼9%ûëùnU\ýO›à¸äIàR'§òÓX˜®*8RÝ,7›L,I¶Ãf(Öm‹Ý6€™xû­ z×›V.9k„»[Þ»OvýÇeªV LÚÁa4èa£¬—KÍ>ZuÊÞ4XÁu>–¬/Ä’¯žÒ㪧‚k¼›ÄhàišÍ®üU‹Pk@ºÅb6œ)ûª•Qv™X˜žNßß4§½u2ëí äz85 {A4b,·gC ¶Œ­–Q¿ G£íÌýà‰×;ÅQ¶3p­8Bþþ6¶ÇÒÓJ1ËÅg¤7S†V»Ýd›-ûX¬Uaóݽö”(?TãJ´ë«n%@óå§É´94+…ÉLÔ£*ìÓ´”P°Ê.¤œëtXÅDuºÝàûÖ:`™!iøo¬‹ ÖiP\K5Ôm®óbLOR Œ'ÛælÙßM«^O TÃɺVê™O™ñ<쇩ñPɦЙÀdŠj´O&UsHÀâ·Žúw ªÌ«ßGÐdœxjF£ô ğp!3k®’ÚuÓëEVZ!Ô —qôŸ¥Ìy[©å¦Ú{ìRíìz“ª ÝöDÅ×]!É*›z[!žÍîQÑ/{~ì÷‡S–ptÝ(ø[°@û½SS( @ìa7âÁøCh?E»Dr­&O9Ïc9›K ÙÓ<à7 ÅH6µO‰0”Êgþy2]íµê¹]a™ÛÐlÖ),š÷ÑrZk¡f€ì"é3^ Ã8 • ½‚ÙÝLE]  ”ª•…jzÍx”J¦ e3*5, cÛAFa‘eMïœeåÖ/»of4#¨…|@ÜÓZäE`ÛH&"Á¦ÙŸyû¡IÝ;ޥNj‡L#4hwY¹¿*º}Mc¼Þ-af{W­r¬M+5™Væ•T]íb±ìý$› ²ÁЧ lŸ¢‚æèõç‹t…±M¯žÜP¼)ïѬWÅI)ñÄñ ¾J>dïËOþ\¡?…&¬Õ\¬ O¾ëí #²­6Âb²*ÑäûÙ} 8,+|›È>Ïz§þli%²$ºÉŠà|Ó1;ÃV©9ñTÆ?ß>ö&3å‰ÔñHº^J+ÍЧÍé|Ùe”©<ðÍviÖ«yÙk®BO±êøi™¿ïŒ£ÜyœÆÁDiT02[cP9<ÙŠË›Dw±š öO…A-¼\{‡ã]ù1œÊ$Fo>ˆ¶k£ýxTëÇrrŸÎÒ±¹$Fµ]¢Rîxd ÔMí™UfȃV(­fÅ]¥·ŒUkÕ)]åve^ïUÓáYfüÏ–š¦jìϤ½½TÅÝ*–|X,D#:Ùy2 žtÊÃFü‘5ÛaeçØp·S¹uIÔîÁb-eã•r,Œz±Ùc :è<ös[m®·"‘e´ØT©úÃäQLùXU=£-ä7Þý¬˜€;¢RYŒ%Ñä‹R5ܦæõÉ,¿YBa^É!ŽK›n³Ÿàa3¿÷Ûíþ¶ŸØÕZ›f;ô@ÍT1 ÈQŠUå¾Î"ÐOm;,[Ù33ó§ñj¶õNŠÙþÆNÖ¶]2}ßzø{ÛTc1G “Ü?¶`ezâÕUfÕ(Óø¢¶˜y­øÐlóÛP¯¹ £µasŒzÕNuJ×GÙt_Ó4Æf»Í¶¿ÖµM×T±F´U‘sO¿·^U'•½Û>ÖÑ"°›ûãQo,5™Õ›ã*ª×–ÿxÙLÕ ¬;‰MÆ_»xš‹T*‘ö>8ïtƒÕίr¹@ ùU–ðl‘)ÿÂß!íÆÓ¾3îuØb¶ž> &Åíp;$íXƒb®V¡jHÜj4ÂÕ©?SS¹Ñ:}¿ÏósÏSn³àJIò|;ûøèXl]H÷°¹£b¸ßä·«EÏ»Hµªâ>šì•—ýTu3[$îç±yy­çëõÒê1:ïo8ó,“ÙѶ—Ø•MÔî+ÛD­²ÏF"°V>öÑZ¹ªâ}m‰˜¦éN)4XD‹á¢Ùê/K‘)–Ádz¿äžýü1 8Û­œ™³'èO²»f#»k·‡™y­˜éC“üÓl¼C™§xr®Ô­E›•ñS÷~1LƒÍ:‘Ýy"…lqšî%Û©JnP#’#¡Dý¡6š4ej3nžr‘Z1ñ4H?DÁL×'éq’„§=D°ÜÄð$[Ú±MªdÖ‡ÂÏÏ[ÔðQåaÜ€‰˜©UæñÑlÌl¥™ gáͤ1F¬ñØX>ì*C™ß ;ÓeuÙÏn ¹¥?ò޶^3½Ûa7ü AöÔí52ñx<2~zà)„Ÿã1)f+Åüx1^6(2˜ê¼ùxc+£íúÄlò…„Ùï§ž\(™(DÓ}Õ™§@æa]Æ×ÕÚ²¾íélÇ¥XŠáØÔßLÌmÍcët[=T:3T{mÕÇÅâx*õÊyÊhÚÚ·Še®³+.;〜N2ë`[=ÎC(>—ç@=Põ …û~ÏÁ @ÌrY ¢x³!Ý~rýHR¥Ý6™fžêbˆÒåú|oÒ{dž2š «àjËà<‚Ø´BMæ 3›Ïå…?;Hy-¯"ñz¥•MË’Œ—†ýt°†E8×^Ï cšßIÀÁæÃn^é–æn77÷4n³T2*V› Ç…)ëGî‹Ëå}ÝkæxIUC9‘®³¦IŠáÆœx†»©·8Fºíô°ß¡}a¹ˆ—Ãýi)vŸö’“1÷ŽÃop˜ä|“½<%#¬(â÷ãí¸UCëå¤Àký|¹‘}è{µy=±x`PÑ¥,wöhØ ì§ù`mí'¢“…Õ5RóvkÍH¬¼j¢ ¼UI<ù¸ÏgK8‚½hy"âæ¾Ôk$=J­`ÒÕý” ³âÐ, r‹6µL".ÁªIúÃ~²ŸßGjÕ}Ù\ô êiP®u÷8ÎâK<šÒÒ05Œ¢e䑵Úã,GFÉ6 '‚±qD&Ãýö´š>>Ìc|×®L"ýzù1~Ÿ_ö;0nkC…Çþb¾Û™f¹ øcE4X¯GM¦V»T¡¿À Oß—;¸Ýž–)´Ç¾wïåuoÄ»*ƺ»Õ=ïT6* ¤'ÉX(X¦çíTx Ôë0‹‰bßÇ»]»Y.¡A2ÐÏCë\|Ð>¦÷Ñt ÕŠñ)ŽfƒQlŸ,®ïes‡ÒÕ`ÆI-Ó W†¡Áp[›zBÛ|ù±0L>FóÃy/óU!ÿ(º\×ïû¬˜‘(N;q=P˳‡BéñqšÖ÷t:KLWý}¾?ŠL†f¦½îöçžÍpWLS£Z º(%çB‚0Mß?ùÃ]SÖ'‰¢>‘Yu»%f¦ ªLq½©“}j‘îm›»xQE›¹ÄjÕZ Ê ŒÖÁýS|/¢…í}@v3³n'ÿP¡v0ZÇ"³&1P’Š¡|~}jÈ™×»Î>Ä¢•æèþ!™ÊççÃ!aÚ±äŸ!¿_ ÿåùÃãÿ÷ÿñÀß?ý³újÕ^L^¾¾|³¾ÀßË×¢>Yv¦‹ñ¿þ×W‹þöÿš†É¹‰Bw¦)§˜(yç;ø|øÄù?^_Ùoýë—×2ލO¾ÝÙŽú“៽E»ó¯?þkYŸ´þ»Ñ_ë3ÿñd¸lÖgí?›ÓѨÝ\ýëúhSß-ßëóià÷£6È„ Ødøîý£˜ûÄ÷ ïh×ÑE½ÕoOV‡…ß¡\ýüÅÿ~yâŸËÕtöúôó õx ó‘?ÞoL;e~n\[®v£öóó>xÿtñçµívÿe]š‚ÆÑ_íþD½Ué<á3Ï”‡®/Ïüë`¬·ÎÕI¨}Ccî£âúÖìXnZ“ȃApqkž+ï;[“¡ošŒtÊʼnLŒuÓ˜Œùðõy®<×i×V­- µ¹]c^Úùÿ¤¡ßZI@¯(bßœ—7ç–>(È~ÓØä‚š>ê£ê³ÑbŸ«ñgš´eš¶ãá’;÷ t®ÁLƒi2]úœýtÐãԧÜ`È'Õüb?4ÿûtì¾Ü(Nú«å¿þX/Û‹<”ÚÎLŠËöûŒþõ‡ORÃ415ß—µ¾L$1”ïÕÚb¸Š‰ÁGX½?Œßf'åŸÑwîÐOk2>¢à7’Ý!jj Ô?ìÙe#iÓë¯Úƒàµ¡­ ¥l{û².=SžiSó)vP Mgwú#P“;ùùŠ H(Ÿ‚ž%ž¯?ŸÎ¦£úª?øžß#aù ¾·s§­¯—Ë~}­Dzß!Ô†©¤n?õ­×ÿëlHi2©Wóϵ7ÿ³X/ßš£þ,[_õ[àõ :Ðßx½q~€¿U°Ù_4GíãŠ=_ƒ7B·(Ÿ:x±ûׯ"2aº\oÂuu¸Ö5·ÿúƒP=æ¥:zÁöü ð8?MPýÑŸëÅèÿþ×ñ€ÙÄ?þÒw߇òᯧ­þ þû§ï|ü펖ôX¤·;;ëÎ{'½6õµz Væ8€Ò5HÞéœ ù¥K-V浊Ÿ-³K <»ÔGúùÄ>ßb8¥0S”‘#”%„JšB!2¦!bò¾ –”Ê+¡ÿ´¿‰Ž¦Ã‘}f×µ?`© aB7’+ësýR†°µêœ]ÈÐI鿸ýW›9Ï‚w]O`Ÿð¡¯®dÿÕètNfÁÙµ J¤>mH“Þ“>DLþÿ¼Þ6MÙ¼¤·™â&´½üro›fã¢áêá%¿­·1€Ñzö'Z6ô)Øh>žSqÙváУÈÇŽô› ³Þnv:Mۿלu€d†>ïÓÆ—œ^;Ëœfƒ„(FÑÝÛ¸¨¸A¨Äß f0“Pú£9+¨Á¹ êÃÊf"ƒ#X¦ì™gá*’“ !|ýÊ õúmäühºLÒð!~Iy6cé2mÊCÝå\Õ-ËAq¥ø¨ ÀÎ3L…;ê®Â%‰ ÐA ».;wÖhAÆ%‚Ý1e n*ö+Gè™…˜âÀ á0c^†Ã÷k0¦âå+bÌà‚Ë£Ö†UNQ­Ûõ “úIa¢£Éá#Ì0cÊÖ_s)Ž6¹j·.P ® |°LkŒ‚:—ŠB\6ß D•õwQÉòÈ/u¦`Z¯“¿ÐôÕåWªVëÄ{}®iµy¿uíeöžÏ£µ—¹rä}eíå¾sÕ_\{õôÁÌ’#þÁSæÉc<ó¬žÁˆˆ |j½œâ Ï4–©ô¾ÞÝÁWè>"u‡ˆ0äQ"z.¾”ïGFL ò™_v¿_¼Cyzh9HO2°:Ï{ƒb¦„)”óht»+E ò|ÑL*,ägûSHÿ»¼äs&§&²­_„€Ò„y,ÓAU”忦èVGÿs©õ€Ö D—ÿ“ž\4é_gæå“^ÿ²>úؤ ÐM ö²8¿^ìh7¤ÁMóÈ-ÚÙjå]‘lž}ªùá)û¶%†)´IîÞ?ù3ˆ4©w–½·¡¥aÙr§x7â”Ù7|ô³Q,\Ÿß{…µÁLn^¤ôœ™wP¹ÎÓÚÁ¦2•Ëi®‹ûT²˜‚a†øÑ€¤f-Ìpu4 ˜$&L½£QyúhóÜ£öC½NvÊAåðÅ„8Røë#JÁ ''ê’¤ëMž _ü™®.:Sð‰êÙ”mtªRnE|ì3wÿ¥Ký¯…0X­w/Ÿ|ç販nu 9°D\«mNv«[ÈçÛ*ççû—œh¯-ûÉdÃ1Y_u¥] gáæ<2±óxwŸ¯ëÿ 0*T ÏŠ<ô·~/”^ôêKÀTœµ«N‘OºˆWt¨ÿѕمûžMôGŒùË_}É@en¶{¾2PÏûÿ…_µ…ñå…Ÿ_iÍyá—7[øñánÀùY§þ7/üß;N)ùÝ*ôžË¯ŽTq³‘JÉçCùN7ãþßP=oKaû˜„Ÿªê·Çªy;sêÐX²«æÕ@ÿƒÆê´š*Ž–ÌÏ-*ö3;òW¼ü2«J¸Ù!ýš]EÜ„'ý VtUð—Á•Y¦Ñ¯‚ë±ý?®‡ÞR›È}׆ÿÂÖq}9<¬¿þŽLf¾WY_ùäŒÀZþ½g¡ttè3Ùµ^»ßíéÁ€ýÔ›~kÕÓñR:øß4?ž2Ò%€Xè >ØÐãg`Œ.¦ÃöŸ“é¤}0ât?ÝçC»>Šª78Ұ®k­s»Rì ¥·Å˜i^ýÿÑËêåNJtE“^µœ^ðâËü>¿¼þÏôúè¶ß´P®Œ\ýòŠ‚w = ´Wbÿ÷.¡ÿÑ8z¹i"~â¬ÓÅo¾È(Áêw‘ôÿíóüÂEPúc—¼ù²ú»ôÜŽÒï PûQcHޏ5x|ÈЃ‡‹¶kÚ_¸ó 3)ˆ›a4«¯z+ößè¿f†›Bäà´iÇ:¬ †tè™Åˆa"yp2®yö÷zº`Î ¢úlœó^|z4Nÿ]ÝùèÛ‘ Šªÿ9î·²Óþd•?*ôªª\õÂ#²Šoyå'm±þFûñÀþpÌ/;ý¼›øShüMêÂ/Ç…üÏô]þê¦ÃÑ¢Ÿ0¹\ÆÓ~}óò³9v:Óÿ×[ßìøU—À/;nåøÔð¿wtþG¯ì9©Ÿ öó|ÏÊò++û¹âþö+û/"ç¯âæmPó“¹õ¿1/Þ„`Ûãoô§.(fºðvº=C®‹»5±ñÖ3|r§ÜGÇf/G‡S‚<2½óÄ{G$}o sLÕùk‘¦~< e€1 Ý;ì0Ôâ5\Ä@\QÎvó­çMIà³:nŽç2‰Äר‰—|‹ Žé=‘ TÒµôžvô¦Pð5.­«jDj$ÓçÁ FákvL.¯¼˜9ÔÈÄò µ¹ )(Fö‡O_‰2lú>S“Ï­kív³ý‘Óå:šêèë}ö Ûpß9òXTûÎí»~†¼¼Ã:ì[, §}&EaÞš˜½èÍð•J.ÑÅâŒãð Q&ºÚŒ¶ÈØ׍޹¶ù,Ò fÆ`™ ë=0êùиô²ƒí/còÓ9÷ €ë)ʉÈgÚÊäêÀIùÀ©ÂTDœÁoŽò]@ÿðf¸ü™3AÈœ‘æ×2%¿€&LIüŽ%éÙ=†R¸ ¬ƒ8ÂpEÂW`T„ÄûnLMJyhÞH ½6ÃwAô¢¥!ýú#̃µ»› ¨¯ëÂaÉWž™J»·uSJͽ­nXn(°Gä‡V>·C¿¡#¸ýl™ýdÝ^êËæ7¬Æ ‘oÈ8¯a®–k—V”'¾+ õvV1¹vþ½® /ß|X:Š>bHX¥(:²(zçá]oÐf¨‚†{¼ k—86 NŸkž­1f;³¢ˆA;`œË*}Ñ­áñË­yZ¼õÚ+´â³zµó|¬PÔ[dð” S署}±Ú~•â^•>«› íÚ#äleéuÅÚ(Ò犣ÔSJÏ·ñuÄçõig@=(ìS^àŠ’³6tNÂ`\S»ÃÄ/5zÏI‰„õ—³¿ží~ÓäMY¿LSz=H¬ <ô<½=>{L° @ŽÙ­¦èµ¼=G»½VØÃÁw À„3&l–ðú[íÎÒúô®ÔÇíÖS¿½ù?ob7êo7«wÛVß‚þåS×»kÞn=¬øý¥Ï¯]@½×‹&´Zoµšýé÷ÏÀL5¦‹.¼þ3îëùó+Þ¸.ä`Qzyi5jÿÛ*óùãk-ü/Õx;#ó^Ëú_ÛÀúÖý0tFõFkRÏqÏ ÌtÓõl óáþxoÙ#TX½«„ÖÇQ}ÕÖ9u¦`)b$_ó‘™ì—rŸö”ÉSR ëëb=²V¬=õÙÌ2ôå"øYL0óÁ ´&Í…fóŽå£éÒ3ò˜wÔ*ÊŸ=z‘“éÒà ƒemÞQX¡¡Øz¬qëIƒ1D<Úÿ ö¼µ!©`[Ão@'ÒߨÚ#0™µaíÑÖ&9Ñ/€Ÿsô²)B´ƒ›cSi{ß„éí«Þå“TXåúä3—¶Š÷Yåc¡]Tš˜À}]%Ÿ®ü?T•Êç ›Ï?`»kWÇPaúþ‹ýbXË¿:HJpÎêÖ®ò¥õgùÍßWîÃñ`÷÷_.#hõo?àU9×Äœqe¾ÔŽ “pùÞÂÀ‚>7’0ÃÐ::tŠÈ¢ °"é$ð$ô&ÜT\˜:ÉÓ±2¦ðè¤`\ê‘!˜`øí;,Ï4«çq‚"ôSLAgÀLl½G÷#}ý~4Ì×a@¤åµáÒ”Dw¬É0zý©vÚ¼üTŸÜ” F/³ªg…ü`¦ ¡nз´ŸçÃHÐs@;huz[ÝhLïÖ k:Xb˜Ö¾ èIET'z&’X2è_ï3ºpÕ^L Vôº)ü׳kñù-ÏŸá%¶åÅ›1ŸÀfóp—çRÌzŸ”øLŸýŠØ¼S ¹=PS§{§>¢î,Ï…å³3¡o¹† ÂøsçXSûà'¦>”«ûÁÀ‡îÐŽ4æÑO:tµºüe‹¨œ£Ëh~ŽïúbØIFá‹aZ§Ó &Qô¦9Á•ðQúrdµ‡ C‰zn(U¢ô¬c„¥=žzß@!  &Uòí L½aÿ ÇQ„RÌÑÁ ù«Ïé•ÐðqØÀ"³ Y“Bcñ þ²Ê¤s$¬}ha2"îôö>l÷èå!éQð] vK.2©þ¿ç_ fá©b&Ó«æ°ôà Äaæb¦7—ái®Qøe=¶ŽÏ#*-q|˜ÃTHXOØË’íñf`>Ü;·2€È»ruŠ:ôløâõFÿ-ßÿ÷Â^Å QÀzi?õþNÂÒlÂ:$^yA:ŸyèS¯Ç\«f0‰þÓZšùÒ=zL˜‚_Æ„¾ »T™ÊcZJÂKŸÀÚÿòø‹Nª”"¬eP@m‘Þ!1è/k¡OO}PÖÒ©—b®„¥‡púò"ƒa¡•,ÐÊ”DVüÃY%ë¹SùÙh²«;õ¹?_þ•±î'#Ž[:êñpëeØ|WÕ?,ΪþÔ±L‰3,˜/¶ ˜Åßßê/gð«?û=¬ÎM”÷hC ú;~MlõúÂTeHï¢qÐÒLÝä(ݧü‹tûþì¿ë³Ù/KxèÑ;™}L ê™úË!ŽçÂÉöFxx2çŽó*ëA¿W·ÎAô“`GSä Íõ¿þaÁ&¾]•0•Øm•°0³éQH&=™›`+œG§ª‘ ʵ:ð‚Ÿ •k·õëÈ€`¦—¬³|ëõ;P>@c…ädNRÓ~‰?P&¾­XûÚ‰}Å´x•-ЭXçq*¸;!Üt‰+¡^jK¥]K€îp&±Ê‚cZŸåLÞ eÙ \Úwn 퇱ÏYÀß ~4}%PPÍc„ÐAª@… €z¶d7­ÓIàøÅuÒ§’G'Š@éÑyAŹQþÍ舩¹CÄä:¢†~˜k\³íp>¨Ýw•z5ö ÌX¹ÉÁú!Õ–ŠK!¾ûœ„z­­²k Á¸½jõ#Øg2Cb°õîÕW%f¶Ø ðûiìsð·qB€yã'°þ?.ANF)½iNN=^¬ËJnÅÄžs¦.ÉÃýÃ>† SšòÁCò¶? Yá0× û»J½û@ w*h:VdàÄ09û@ŸƒL¯ueví é¹Ý?ˆ|ÐwÚ#+éÔnQ,©-ðéðÏ_>Gù~# ¤k܉¸y¸/¥w¯A}‹‘Ý÷$=à ¼²NF72ÉÁ©p­ó MS!ÙwÍ3¢ 2Sí'BÀ«NœPP7j?š‘Kƒ×¡Ô«q¤.0F 6·…6Dê½=æRˆï>G¡^j‹m ¡ßE>"ˆA„>ÿC˜B˜ö:Ÿ:Ì¡ñ[Ðç,àoã4kìÃR”2~¤)À °¸¸e°kìӼÊ~Àsk×4þoŸõ’híËr12“|˜lP9[ðƒ{n½}Å^~ †ôSÜÔ;;k!„¡)Hn~ŽB½Ô–Ø¢XÊ¿ëíÂjë„ñ;i‚ñs Û¢ï¿ïísð·‘šÀµ·I¥w:Ü…ZK¢ àƒ¨¢Ôɵ·O™™ŠÈ£½¤¡LM½óãè‡%~Ùt ˜¸Ö ?«€¾Þséîs*öjô1Üøû$×ê§$–°®2ú7Øëpêµ¶¶>dRŸÚÏÀ7¨21HnêÓOŠÙÛ½Z:{pþ9üs’ð×wzMêÞ=†Û÷eîA­è¶•rê°È›œœ²PèP1~n¤;ÂVÄ6 BÕGuj'Ïí:¿Ýü‚¯Æ@-‡Ûã ØFÊ4-¼:ôúo : õVÝsþ`ë&XI¿»ëꇡ@™§w‚ë †v|A¸ßßõpð×CCÏ—^»C õ%|ÄüªwGMÍt蛿AÜïz`}”T¢#ä‚èˆòߨñÕ”nŠ í#°B2üq‹*g«r`eºÜöp*öjü1Üí1`nHŽ´JÊ]ƒð÷n|8õZ[۬Й8ÆŸÜó`¥ À…ô¡Hd¯âÃC©¿¶ãë Þ¯£„ÂÈ-JP…õqTt´G 5ôôá7­“û=löìÏdGuÂ:ú ãG>¤„ÝY«`0R@ôÑÑ•³W3˾­XÈGœØ>°„ëÃW ápÑíæË÷ƺ؊ôZSûxG„~ÆðEÏí/¾#ÐƒŠ±;†t˜º ö^?íç¬^7âý6BQ¿Ñ¨Z’ê >¤³=h?ù!BPPÈÉ Õ=¨Ò‰Á{q•ôù2)åQ•ˆâÖGc¾ ôa‚Ö¯Þ&™äBÉï|„j–Mª(hˆ€•Í>F¹PMÀb;˜¢ØëÛ)Y>›ïR¥4U%Õ!%úĨ>ˆ÷k°çJ¨×ÚÚ®BÑŸ1ví)½?£)ͦ:@ÁaÄû9c×€¿ìD=º)Õ™ =Úïদ±¿i•Üâ¹NÌ@)GÇU2™A’ßæì³!ís³Ž‚úK$M]¨›­©Kw4uÝëû¸˜QÔjª–Ö¯°!‘p À߉}ŽB½ÖÖÖÔÕL÷¿‹}˜¾@ ÃK`ưOüœ±ëNÀß ybî^RC5Õ‘µË4Á¸Äæ ÷z¡JÔe•4§®dš\ý¨N„i®Nöm~>{ì…=bŸ´=EEaUýöR]@Ÿ:{:þ3”Á ¡Ö~'šÄåOv¸êµ¶¶G;Äÿôùˆ>+ ¿“HihqØéÕÌþ¿Ž}ŸHøëHOã/E f ƒ0¬Ž#]?n~꽸NÚU)åñÙ½sóKè§7±e2MS{Š~‹·y½ç_ç®ÔëÑc' ¶j‚&`êˆé’¿ú9 õZÛsÑŸ/÷ÈÏÄ8Ûb c¬Ü:‚†±BöÎ ÚÏE8»ï÷1‚œÄ7_ì0Bˆ‰Žöh}fÎ ÷8(¦®±#€mÎÔÑy^E¸¸Pßv¦Í~fÅ»{„Ê$QAåÔ g6wź@>ê„¿¶ž5Š Œ‰ö¬ Àa.ÈßÀäuꥶ̞^ä¯üäÓQ· z ’ƒšª¸“¿s{\þ1ðs–ð÷±âà×µ¢©£[Ôñ90Î-ÂKrÃ?¨“kL' ÁØgä¸NXçÅPgíÍoÆ?ÎAÅÄ Ý!J5;';U4Î3y½G¿¿Xø'œ`Øj8˜&ù@¦÷ÑÜî¹|'þ9 õZ[{?V¿¬ù!í¢´¬J‰9qÄ?uåÏYÂßÇ å+tZv¯žIX§ñ¹aˆéZÿ#TÚ½[éXÏž_ÿnücòÅ¥Zó`øc0™Î=e; ‰éRÿs*özü; ¸jÔ«‘I5ÇÆ.)µ¾ÿ„z©-²×ÿÿ*?Û@j…"ª;.á"ÂÒ–ÉOËv†Gõ§]œäû}œ®ýcú4L%td'2¥4W&¹!—ÔÉõŽšÿ›Gk3Í?¡³®ýB¨ ˜Ù:™‰>HoÄéfÏCj4D4>Q:×/ú`Ÿ£P¯µuXŒ´«ŸÀ>Œ±aJøNêL›œ:°Yp¿¿åá,à¯#u­%!“:Añ™•4¥A°)oéø;¤ê¹®JL¹BŸkzˆïã²rˆ9Ñz§I´ƒ]*­UŸ˜YÔ´ßð Ž —Ëb¯Ç¾CNËa™HçÒ:‡, “_<ÕáJ¨×ÚÚ9",–d{ð[ŽúͶ} ÉËß_¯€s4ÖϲQkÆ-ÆtfQ¥·gÐþ‹¿üä|ƳÎKz3ýw]z3âôàò[v³ÃÔdoÙÍŽ®nóú펿.>Ü^|¸ÿÖŒíílºXé<¿mòè_ø{ÓqÛߌý£é°>êïÛÆlÒuøé¶5ëk†§×ïÞžyí䓦ü(áÇX€ÇõǦy¦™>mPX|õ™ÚƒƒR]ƒú(mé•ú•!C†9nûÐE•CLWD)rfÐðóãëFUÓ¨úOžTË8Nõð^9lõÒQ’ó—ºéÅþ [ÝQ >“_öW:YRoUWºçf0Ͻw&¡á¹[ï‘WôªøO÷#¾ž; ‚('”ZiUM Î0(×ôã&¬hðé“A’ÝQŽtêg.îÑùGW'Kmî )øÇ, Ç+~}ÕÞ¾'¡µòÿãƒ;Í$§,štyü"ýK©ƒÈßúyµœÕ'§­9¬|K@»?Ålû×ó7}Úp1®ž¯<ÕýúdutmcõíŸé¨õú³E{Õì½=du³þžèÔÇýÑîÏàb½ìyòÍE¶òäW­¿|¯¨é{~ϬÝìwúM+SúÉÓžT»Õ_‡Þi¼4—Ôytù­¾ ™}rVÉÔ©ÿôëf|ùÜM7Óé[lÇ£?u2=xÓlÑ^¶OÇÊäëóä0‚æ¤Õ‘éªÙ/}hx-²°îäÏÁz¹êwvi[ã%C䟳ÿï¯Í¢¿êOº>‰îÏÑ·j¼ülÒìM.WõÅê¯ 'ÚQç–í æÜ§/9«#&—"Öaa©s:òÜ í.¼æ¸óÞ¯C{SxðÖp-o@ÄAÕc‚“£{¯Æ°N0¯Ž€øyäa°Atb££;kåÙ¶Ü8ÿô¿‹÷\…l}Q?­€¾JtàÑûo`ýÛ~g|øè_)¦&/¶§‰4nYü:seäNïæɈ-ëÁs’ûÑÓ¿n¤¼E¢ß9ª-<:Èñk³—º8˜TG[ °DÀÔ䯹>|ç_X+M÷AøqÔ#–ꄾ“ÿ@(iª·S§Ü„¦ƒ%Kb1èX‰7¸A1;I/Á©éSŽ)?|N T.˾Þ\Äô99 gÉ»D'±’áYJ…änwk\¾^¨—úRé³ß¼×™?|¿ Š:ù6‘¦wB<šœÚ» uòŸyLtò @|çèC/C¤9Q•<àO£ó„8È÷cpè,ã-r…|ÁdÖ‘vT cÊ|Š”‘"ˆE0o¸Ýl¥ñK¹t)2j%`ã¹f¢1¿3ãˆ-8é°ÖüÓôÏæ‰ßÊ8bïM´rŽø¸c€¶»Ò¯†F+íˆO}’yä< !͉h †¸¡]ltê­ÆÂÇl:ùˆƒFö3&4’–KÞ ¦ù”LÓ^cÔùG|·ˆÃq”ñ)H|Ê=„“ ÞqLj ¥ÁðM­h†ä ›G„(ê`漿f’ž=–õÝ64BHouHbEÛžIDboCëT$Žá/.‹¾u2ß'¤üç­UÁáóóf‚rèß„vêµ¾Ìg¥’ø˜½ÛîG QH}ÎJ鬦Î&ᄈ ÎÜB[tñ™I¾VæÂØq"* N‰yKA»NUâû9†MöŠ5DÀ¢w>Í!ÅÒDB“©è³‡öâ©Üdq%á-2–œ4¿ŠþIR#ÈchÆ’#0„WÂÒ‰oÊä€,Îq“]T+‰™¡0EGV3±’K³³œùnÏ33É™É_OÏ*.8†ÕRs‰CR+Ì:øLÚ§(m°è|Ÿ‘y¹(ûú(mD˜#M‘w1ÕâÒD:OˆÒGœ~Ñ`v#ÓkmÁÞtÈ'C”¯ŸÀBªÏà3AÉ@ÄÀD!ûgÀÄ!„ü§ÀÐYÄ[¤09ô_ L›Å\~ 5Ô§Ê9"7­LÃs„ÕŠn˜©ãC+`1B¿/u-$i¦ 0˱Î!Gè#ô™>ý`;°ù'¶²»¢] !'Ž¡‘6È£Ýs`wêò”2ƒcówY­¯–éµ¶‰:Ÿ‰Ï!=ðO !#R»wLuÇ)t«bŽh(˜ÃføO¡¡³ˆ·Hjrj)_ ŒTÁœ9‚ Æuê›n©hKϽj(LlÅGc¡¦;Q&ùNŠWõ ®ƒR¦¹õQBy{£3›ØŸŠÐ¹M|ŽÙÓ]–í ö}’Øîð`®ôv£Å«%ˆ¡¿½jè(Ókm©½ÛPg8ù¡; Ñqqâ\ÞIÍj¡(qÀBw¶•ü)0t–ñIN|ôßëEÀŽÓâx' ƒ NoœçÄw.ÇÝeµÂ˜ƒTò¹k6,©Äw&ø´$ÐÍ´?Y‡¼ #GKuâã¤×H:¢Ë²¯‡CŒÏ3Û@3jè8ÀfŸq˾ýxè,Ôk}±Ûë옘¿ŒˆëýpëÀ¡ š Œl§¤Oä'£³Ý‰x‹ì'î=‡R§ˆû³§¬0JoÉ©é^ç•’éSDÇ›CŠ`M+÷}g÷ì1 „7¤vÞÁˆW‰s Pì£mt ”Ã…þ»Šv†Ôù¤Š ðhvx,̙뀟oÄB'‘^êÊ@¯pHKÃäS±ƒÉ@fšÜ B4ÿé„„Ü<ˆÜý-$tñyP|g©£/ ¥mDÍc¯!c‹ tKKó/<21Ò8paƒLí+"ßIˆmƒG:–Ca®÷°VBÁ'6Ø~CY§Cñ}šÔEÙ.ÀPpŸ“ vZƒƒâè­ fóo`);ÊôZ[i–RçDq2EA™……]s&€ÆÏLå”Oál¢8‹x‹´(§§9.GCd ¥­Ç#4Ôìú7¯Ñ‰Q¾‚†Hšé¨V¦ÒÇqðÏï¡èÌ`‘ãc…ö1°M§FñÝÍy½ÍýõßVøõpHLyêöphmSŸ”¡ŒRòw€C{‘^*«ÎÛs—N´¯ ¯ÁÊÀLé,$°œK§< ýþŠ£„·H“âÞœ0>@æ1 ¢>z£LvCF=£¿4¤ˆÁ9¥Gš!ÓSùmÇõB\¬4UTiê-39ÍÌ!¤ƒ·žHÐAœ¬S—e»€B‰ƒíBYt<®Jçe2u¸rÉ;öá5N2½ÖÀÎÞeH”“OîGÂk¬ßJP°ò%3L)¨SÆ(Eð0Š;o‘6å”)ðâèMÑc~H/'MvH±[n¡hò"×hÈMbH[ÿ0% ˜Üòç·PˆbJ»,ñÒé*a¹:™wÔäö'Qtú”OÎ.»+ûz4Ô4CNGQìBY¸4À$Õ9 ƒry{4t”éµ¶`iÚÅ×¼ðdÿŒjh{ÌCÇ3#Í/p§+Xçmó‡¾Ðd߀òËYÈ›°d»§¸a’X ' Qóe2‚n™EÔ¢É>Ù+¿œñ ŒeL`"V +j0EÑ·YËö´[¦T†"LŸW0r=±–5M¶½—J³dÿ@Ñ×C¢fÉvsEIÃ4âw ƒYÊ8þXv’饶TÚonYÙ¿ ˆ„ KmßëmpdšZÝ·• [œVv–ñ& ÙîO±ižL¢$=ŠG¡R‡˜cBoZ-õJX ƨƒä(xˆ2bÄð·éˆD ÌÛé¸Á 0Ð>î+[Ù¶:¢E‘í–ÃÁ¡è«ñТÈvÅà £˜ÔT¦æ‘âo@‘í(Ôk}•ý2eQdÿ2),Ø ¨uö T_Ì…}Ø¡E‘} DGoB‘í^?Ô,ê\‰ƒ¤l8°4¤ò†›)E¶{º†…Á%2<ˆÔ„ßSÄ!e€RÊ"„‰‡aÁá'4G¶mºe‹#Ûeʧ¢¯ÆC‹$Û "²:™˜ižP0[Mò78­ì(Ôk}™ý2e‘dÿ2%¬€ Š5wqt~a¿Ÿb‘dß‚½ÁQÆ›d»×5ƒ(P‡£ÍWü†ND‹$Û="*`ÀØqVi¦ƒ³uþ¶Ÿ·˜‰ö.3JîŒ ú,G¶ížŠÅ‘ýE_ˆG¶4Ûi¿¢z+Cç·" jÞ¥z©1vpeX4Ù¿LhÃt$©”â”0êíFŢɾÑì(âMh²ÝÚp¬c)99ŠYÖa•Œ‹ÚÌMö²!èdêXE¦Î²$¿ïdŠs?UéÔNоêÄ4³8²m5D‹#Ûq‹ÙUÉWáE‘íÄ$aËCAe“]“ 2Ö¶¿»—“L/µµNØ´…ÅýËê¡>Œ°ºcLŸ0eÂ>Û¢Çþ¹`WÞ„Û}rN}SÎŽ6S¨âÕ¹®oZ-uzDïòjqÖsc»Q¨Ωa†35‡<Œ³Ûƒ¡£P¯õuȯ÷LýËš!TVƒ Óp#´ªló0¿Pcß@7tò6ÔØî¹õfŠâ˜ ‹‚ÖËL…n˜2à™Û½Ö+¸ ¨ˆŽO.ÃY±ù [ÌP6’öÜ+ù$ÉÞ3/¶1½$ΗÝ}5&>“b»E¢ñGXø# Jèß`‹ÙQ¨· XyÔ¿³¥"ˆåÑ’w !ƒAÝíµD‹ûA7Ž2Þ†ÛýîS`«›Ì:°ÝÔ`¶±¿P-¥Oê“›ÌÔ{!ÅÏSb“ë`w¬w6`r“ž¥Ävb¢FnMf§¢¯ÆD‹ÛÍŒ ­a¶Xê*ƒÉCÿyö…z­¯Ã¦ŠE‰ýÛY¥@ígHšôŽ ¨‰¤'ö,Jì[„Ý8ÊxNl÷&&EÊà„gå¦ħn‰ˆšû ÕbÔм‡Ç{EG¥~c—s¤ÔsÐÄ(âg)±fÞQÀÛ·í r<¦bà‘Á1šr™âns[}kÔ“P¯õ%Á¡'ö¢Ý!0Ô ˜¢LÞa°H¥ÞræÄþýÌÎ"Þ„ûD“ºü¬¯æ¤ æ‘"…@6 Ç·<µ§I±O‚/¯ŸÄôãa˜JìNíQ¢ÏÊR¬sH¨Óð_‹Û~\✠À]Ñ.ˆ sC|¨;ôslª;¥wC.-÷ï<Àì(Ôk}…å&ÅþÝS{BGE07´U* A¶§TžI±Î^v'âMH±Ý“éƒEE¹GÛËDZ< ø–§ö4)öÉöòŵÒû šõø¨VLï…ɳðßNôë¥Ä`•!¶+’g9±¨¨U2—E»@CNÜÛH¸?Ö *70rKÌýL_"½Ö•9é…G‘¾¿‚„Jy€ÚuGAËGz7È™û÷õBgoBˆíú¤¯N~E;ÎGOôñN„n¹•b1b»çëÑúº”üø¬žÐ.RJ ‚bjޤυÚX„ض6!¶[Zû’]à rGå WÁ¬…Áá–“û;™Dz­«# ¥c”óaëIhr®î˜ÀÌ.âÀã É°ŸÔÆYÄ›pa»F X5Iúñ™©³µ›7ôZDØ_¨“Λ$жë=!%ÉÙÄïߌ‚PŠ¡”•ÔSéSíäDù°ˆ°íG5’ÎA6îŠvAvˆMWÖ13õþ›Ò IˆÉ`ª¸¥ãþNëØQ¨×úbûm~‹Û^éú_¡`†D iÒ}fÀ€&öÑ× öïc¡³ˆ7¡Ávm#SaCÀà8Ä øn("éM¹_©yJàpy²jæh?HélÈÿ÷«ŽO”júy¢YÐYl'úiî2c”cÑ.ÐJ7£|ˆƒR®‡k~Ãuø·ú „z©/3)&[3„?C™äŽ*ÍÑ,•ÃÆ‰fÂþ¹Óy®$¼ ¶k~/„õÁdt¼Ã@õJ‘yÓ”\º÷",4mÙÿ§@–‡èRp‚ ‰¹VÏ7ðiXŃí›HP·¹DŠv…ÂùHŒì&cˆÜYÙjˆé–û;±ÐQ¨×úJ',T¦CØÊÏ`¡žŠúЛÅ*@©´¾¶x°o`%;Šxl÷š¡¦RÇáx&,¡œ«[p8ƒÎ†ìdjâß@C¬-2bŵ±ŠÕYl{'½¦Áv™/Ê©èëÑÐbÁv<°òÀ¢*5ð€IŠÝ’q/:õR_ä¤jìßM%%5SBÞQ š[©aíÅã7Hå,âM˜°ÝkQ`IæqRB©ud·Ì3¯‰°¿P)ä…ÓcÕÐäúÐø…<óÔ¤†©ƒü‚ŠSÆe!RøZ<Øß^² (”Ø ½K X Rpl˜”¸4Õ¿ dz­­S&QM‚ý3”^¶tûJÓÑ &î¸N-qÊ è 6‘E¼ ¶ë æ>6å‘gqS»n‰ƒÔüBšɤ!@ý;Bw†±Î¤+~!9ŠÖÇ0&Vbca(ÎO&¦Àv ž6I\}=j!§]»[D ÎbFÒ09¾=:ÊôZ[|vùL,÷ëN‘BìÎú„ÒQïÜÚuÄú0¤"†Äòã!h}ð\Ž0›2-‹¢;ýI€ÂC5 È”A!’iBAXðOZ×âœð[‹÷Bó}nÿè6~Dð7!™ÏÎʉîÐópøÇ!"€²``PcÑxèìšX\<Ř÷sVíMq‚_ 7±óß™_­½T†N¥Èqí93&ÍýRõŸéºÑïÔÿ„+Û™µ_ƒ‚ Ä”êSHo!é™Ë)´ÈÁ–Â1ÐL¯µ……仢¢>Ìèw9´w|‡2$;U"5/¸}ŽæÑvd wQî5]rP¢õqT_µÿ¯Ï¢1¡C1¬YriNyð?"“œžU{»ú¾ò(Sö>‡ëËÃBÀT69ºƒõIÇQšc¶o?’ˆ‘³ì§våéìs0³ïtˆ6× ò 5ÿø÷Ë¥÷×½Üå’½cŒm!Ü0á ;1”þ;Ü«÷w/•€±í0en’SÕ×ÖÏsÄa<çä:+ 2¹¡óˆ; Ã…ŸÎr=¼bWÐO ÔÂbÿú)¡O—T)¬3XÓÕºš—7ª4‰!”@øNQn@yg6‹¾6Ø>ÑXD‡ávΕpVÍ0j ‰ñ¸@R¨'çp «»ÿó­gïD®¤t: ©’ÔŸM+|öˆéë"jÙ>¯*9¢Ê|Ñ›ƒ&á†Àò”àkƒðœrùF¦Í¨Â V.zçPF:P€šôý¢k;à—ôà•bD³Ï!vT+Iš!átRýBõžýN­Îh÷Ÿ‘r¼*ÒÏǬŸ•IŸ¢B÷1–w0!aVù‹»öî¤z×ð¿+à÷ã|ƒúT ÕAf ,ñÿ³÷¶»r$ǵè«.`Õ9ùù1²øÇþuq.®á g8u8ä€äKçéo¬ì®½»º*£»²«*7`öˆìý‘Ý•+#2"ÖšõtÄÒ8*øÒÐU˺Oø|ÄNU²3™¦…Y†ªŒ¨a—"ׯ÷òk—m#n܃qüFjo\2¡Lê,&ÄÜáfýa{º§ÍÛîÜ4s¼ 6öôf…7µó®Ÿ3 ç|wœ œ\AHc2y•BV¤CØ’Â.Ùœi„ÒˆfXC¢Ðq ÀÆ«¤ç¨Àþz¥ 8yïdX½ðú+óèîˆFN—Ï#_ Œ%2xSþ¸)¯0ÿp$jÅ—@ïüÃAFq"[Þ6ÚÑ|¨Ä^µ5|ϱ0ÿæ÷ŸýúO¿ýúþãOõwæ¼AÊf7Æïþó'z¯õ埧²¾O|ôÓúø:€ê/Ÿ?|úþËç_?ý8¾úó‡oï¿|üÀÿó½_{ÝŒ—~|÷õÏï¾|a¼+›ðåb¿òÝ—ûòîÇï?½ì{ÞMözÇñžãÛtõÂßÌ?ý–¢¢ëï17ßó§Ë¯ýO¾ñÛòë×÷_þ {ÿ??ýÇ×÷WßW`|b¿¹ôb$›ùõÛç_^¿ÿüx¿/þöú —w_;ýðùãç/ßÿî_ÿõü³Ö“ïúüÓO_ßL{«äû«üË¿TV1W«üãwSG«—Aódž|n‚B$ëퟛž÷q:æNl÷à–»û .=;ŽÂÙÓ»ô„ÏvAÙ&Â#ôú¤­J_?åõõI[ÿ”^­’[Ô Õ·ª}pcx´¢‡ì½ÿï¨þA@õ‡ª?P¯—}¦ ùIOÖx;2Êÿ‚2sÑ»!`**ê|OzW)ƒ»ä7K ÊÅZ§¥&8åÕi2ŽÌVròuDZ’è,‘v?ä•M*È]O¼"ŽˆµÑ[jº𸼰"ºl‰âp²^—vMt-Z•Iß6‹œU¡ë×.¥ø{/çY¿v[ңŠïÍ툎ŸÄ¸ù5ã1ìj2ꪢ}GúXD´)@Tó8ÈëiÊ¡®„¦šG¢lbeh׌ˆV£µ)Ó¤Ç0:pyRêØ9Y”¡—(jòÊ„ ÒÄ•W”À®±;Zû@nTv3rƒ³*tµ¼ÈBKw/k¯ÆÃ³,´Ì5èIÑqRê‰Í0w0ÇÊB¯¶it7ŸR•tâ, ½Ï4MjB“ý=^M¶Î:Qt¡ë]»¡¡hb]h·T| 78ˆàÓO† CbS‰Sînqè?»ÖØ-“”5¼&nQaZwK7¡#¢3YÙ`ÃÀQ*)~s–d¡…—ŒÜGÞ´òj8,ªÐña÷2ôX>|\â(Õr¢[›Ù7EúI£³Toí/’ÐÇBá‰ÿ«B¦LC V‘Mu9—¢]—›Ù e»B7GP%Àçn¦U4Í/‡'¡°B/©¹<è0Æê8 #¤’ÓvtÝu@ 9+ΠÅÈ¿+ÝV§Š t¨NZEh#23¶-¾‹$tK²Ì'©²ÚE˜‘¼ ºUEaK<ºøk…æð"½›ÂÕòÅR6íf¤bÔõ Ã"ÝáîP4± ô©2‡.¹I“Hל ¡#óD„nzLÚ9º¡h̸ôÕ:nF=!Üà‘á˜!Z¹²$}[ü)’ÐÕÛÃ" EµWb…nÁž€k¤”’ƒQ%ߪ=¸% ŠF]üuºÎ \d¡÷¹®¡MÀNÄ܆rNu扢 ½óD‹]D¡›K§˜%>§Ïõ®' O…n†øÆkÑE4‰z#§ÏYǼ¥(tC¥œá¬Q–FÈÕ±°hB‹òM+¯FÂ" í[P‡²ƒ89Ø‘go WÎ'Q6Hz){€!Îïäc )ÏIi=[>+B_G‘,ì$Ý|Â’`ÛÃ-jÄV}{¢`MexçLqÞD -†Í¸xXPF„æ8þv>/+B§jr–„n¬.K«¯FÅ‹(ôUè ØMlA ¨È:ÕÝbÔ‹Ç’#T¡wÓ@]NH#üñÓ¡sŠV(/QèãƒDÙÄ.šÐÍõ”8q ާ&è¡Ñ–bGÉ¿" =¬yÔ+²  ‰Ór Ê‹ÚQ`v‰¿c#do+™Eº.Æ^¡E†²¶µW#b‘„–R÷jk %¢/b¡i+.oÚn#Ø4zKõ*W„®—o÷C§3$S‚²ñü›zŒx–ƒÞ¢¬ÉÄ.jÐÍ!¢µžw•›FR‰¼ÂNê(sUÄ gt¼—–óùVt:9Æá€æ'fËa«ZË`ä džÞ›E1èjÆ\Ä ¡PZº 9Y©Ê]­äf° $pA¸€VŒ7PM‘lÝu‹3Xç¾DhAïSL1ÊáÏÅâ×,£<¨™2Ã+×B º>áº_c‹]Ô ý,µ¼Ø{U&YÎ,]âGÌù4é<ôΪ\o5è%ÊÆ‡œòŒ|6ê0åñæÝ`ƒÞTõÏ»œ_¶] 1¹†“‹dvElÓ€XˆfÔ PƒÄ6y[ÞÓ»jXz}+6Ô ³8õ9Ù$¯†zWM EAÀ1x:ŠÚbÔè0gÊ‚£§¢Ã*ÚĨ²æDiˆ¹h†s }ÜWä¥ÁÄ.zÐÍÈapɬŸ GðViLúvõŠiyòÊz­´»).MÊ“¶¤ò®€ùÌ‘(Š˜ž÷^’A%>ÊëdÞ„{±ÛÖnDBß!±]ÄT¯ÏÂ:*™ØÌ[¢hÔè0 \ŒP…>ÙÒ ÚÎÚ¢¥pG:ìªôÒbdaè%©—ÇÀƒ2 qš1Ÿu^­î)õahÛê3‰“Œ¼A9&Úìö°K©C%GŠ˜Eahaãe™K»må<„0´”¹× 'ô”²E(*êÇj®7jtØ zÝP‡ö§Ì!heAÇ1$“5B‘¹èCwˆe»Dûæh }ÊäüMó2p:"4¢›a>Y«\¼¦(¼‰ŽDdÄÊ—Ä•8*YDHD×SfHDg±¾Ü´ôzD„D´Ä^WÃF Åx&ï{€(5ú[ÈÙ«o‡ÓBõv@tÈí9‘+Ï^e#H¾âúÍn€(ÚØE$ºySA9yR\Î&ÞH *E#zV\~Ø©Dh¶ ÓvlÞ &ļ٬žp±z -R 7S¿‚F´„Qï²9´-Þˆ>ÌiÔEðá–M4¸®‹…¸Àh~8"ŠF]†Ltg:Ñ#¢§XÔ—Cáªö9H—ˆPŠÞU°ÅÆ.ZÑÍEâ‡ÄšÛ[ÄÀQ9×± ±hE7}°÷gfÚpƒzºÏ‹cb†D©†`³÷–cšÇ"qYsiüª—Û²Û–n@Ä®o¥çŸJ¶XÅYÔ¸C”lÝM’‚wÖ׿á!]ÒÑÈ''„;DˆEï×–ÝhcµèæË6Šzž1—;«mϪ ԢÒBêc€hâ^xç>.}éµ Ì›S~ÞÉe3ŒÎ{‚´¶Œçd‰‘üîšÏ8þ«Á S¢}ÄÚ¤”†ìÊ­y˜×®Š¿~ùø¿ƒ2»/J)†“ýýÙÓ#ÂQéˆ}1JŸWQ¸8öH1zÏ‹·× ~~2¡í=ÆWLÿöõ—wŸæoêçOßN_ý¾¿üõçá+üV~ùùÝÇó+ÿûÝ—ï>}›¼ö_åCþþ??üqü±/ï¿ýðç—o*Ÿ•?çoøéÝÏ>þíûÿû˯_ÿü›ÿáˇ_¾ýæß¿ýø‡Óˆ¢§óïùåý~úðûo>š}÷oþŸ÷?~øõçé38.ïXÂgš®_~ñ—ö›g¯¼A ßÕ(éwx//ÿéãçÿúÿ>~ùPþúóÇïùg~àßõË—÷_ßùßÓxsü~‡&3ù|}ënzï¯_ºy÷aõ‰Oµ?}úþ/¿~ýöá§¿ý9Éé¼5¿7–þ¯?ü×—ß>|úÓéçÏ?rœñåôí?/?öé‡?þòý×oï¾|ûÛnò ÿó×÷Ÿx1ùƒ½|“¤¸`U;Œa¸4< ïÿÄ¿dúù½¾Îo8î<þxrW8ŠÆ£©nϘ‚Æ}Gp“¯€†ñtKYOê–s•”oôUþVd9œ.@ÿøÝ«‰g7þßw_ÞÍÀ«ÍOçé„ËñƒôÇò.‰«ì“JƒñÜqªîÆ!ÄË¿8uWœ ýל²ú\íN¼h«¤gúšŒì"®²P}~1÷5D¨¤ÓlË)N®ù„ *E]«Ž’¡Ógr„x·ºçBŽßÌ;‡4€µ#¥pÝÈ.ÇÔ»%‰þL‚”½ÆUE¿xˆïÌJq+…I‡^“64Ÿ §Ú6lÕÇÐùÝãˆ×{ľ‰³†-ÈïÔk>Pßi䌓–^Ùõr$ï!À1›âïx”q’Mo}ªó«åzé8LÊ$Fë8™ÂpSÑÝé!E&ÚØEx§™7ãÄišá‡ÃMÆßÙ#ÅŸ}ì-¼ÓLt2 çPfÚpáH q+ýw‰±ÑX§ˆ)t¨Õé'Yß©^=íF­ iéÕhX´wZØÕ9ÂÇ C“AÛ‘7ÏMFþæêÍóY{gŸÆ„*Ö heó"T¾È$Yzçxr$ÙÄ>Ò;íÀá×Ý$: BdÆõ–Þiz9&R–CÄI…‘ÄÈh³m'I>pJÆaÚ`L‚˜¿í/Ò;ÕÉ"½#N{6­¼ ‹ôNâ4GðÕ™ Õ/s`'“Q£¿Âð{Qß9–*îä]„fšKCäÈ…2¹;ò;àP¶±‹þN{|H(°CӾ㨑_ìé•YnzÜ+>²ˆQ}J“¬Góä μߴCŒætR>.¨¼a̺¨ï4jMHK¯Ä"¾Ó"Ef|>³B‘£òhß]œhÔÅ_«ëáaß9ZŽ,ee ô¹ˆr>/«ïÐ)õ¸?Íì¢ÀóÄ bäÓ2š\/gF¯ö{ºeõëÀƒÃt¼)Ŭ¿zŸpÄ3êW¸µŒ&Ú%ž*qmàiŒ…•WCb‘ß‘ºÆjèãrTÁC Ñ'(©ûF+¶DDɦ‹·Ð*¯½E|g¯j[i,jx†ŒÞûXת-ú;ÐP¶±‹O»ä„Ã@0{4͘cDWHÏæÕ"ÁÓî–×Ò™n:ÛÄBæ³ëFáÑŽRÔ°¥’¾$öâN žÆ;DiñÕˆXdx¢Ho\Ûêvdþ8̨©H6þæz7ÿY„Ç ‰éN°J†OR‰7G=N<+ñìG Òhd1žöЬ‹FiŠSb¥ ÏÐÏR<íB^“âüy*1`Ôü#€‘Ï4s>¡8¾ IÎJ<ÕÒÊYˆ§±Ò,¬½Ï:<-¨è4,„F¬…؃qo!Rlzq7Ösç"ÂOáèôÙZB6iàÿÀ0"×MŒ§Ô¥ûF´²‹ÏŠÞ¬²§)~8£¬¦Ð[Œç‰þ_4ÉõäR h¯LÈGdÏuŠa‰gÙ\÷j<‚Ã0ܶôjX,b¡gÒú„S:Ù®Ôqäi'u^ù™r‚rWLGÇá\BåKãg Ðãö]¸ÓضtYT¼Êâkùýçhê¬ó’Dš’M£·$©5Fw´Z£wé4Ä [D”{G‹çx0”mì"ÅÓ †D`8Í•I;}Ê]Õ“oçZZÏÀÐs~¤ývÒµ‘¥Î@²É«˜ôŒÏJ¥‹ìQ+wÝ–X(Ù4zëê*èðØ£943h“ÐT(ži„sâé ]+ÛØGˆ§7@È­rœu„ vUž0¼ÛÙA1A%£§…sgˆ~Þ8ï-A¼ŠÚè^@D[ú¯«ö¤»t³¥×#"¤xZhÖOZì$ìÀÍ™7À'[5zl"Mhñä£õƒÁwæ$?sü•“Éõs‘ãé!O&ÚØEާ=0œâÉ^=b¥;Û)}ÇzJÑãi¿>LZÙ”¦˜È;CYŽí—TÁ¶¾>¥G¨8TËQϘ ÇSOÎ Ç#±*4.Ý€‰>‰£3U%°˜TÐà{Šú dÌ’MoI×kþE‰çàrJD?)A÷ ×üœÐž]”x:h“É6vQâiFC@D “¦7mÙ*²]»‹Oóõa6^1"ÐôR”8v2!!Zh\øˆoä¿-O@‰GHÏ¢o-¦HK7 a”Ywªwu¿»rT ZK:›Þ 6Þ&I»6ï5Î\GòÏÙhàÓ9-S ÃÓ!6”mì¢ÃÓ̳ž27hh8´Š¶ãä^ÑáiÖ%ËÆ”tÙLÑän;² ’ô%i-…7“o{ÜÎ2<Õ*gÏ9æ«é_ü¦ óßB‚gþ&\XŽVt¦Õ=Ž2¯…ƇO9iµ—ßç亦?¹ce0ôg<ç0.¿¿žªb#¨Öûòö"Ýmì£Ý.uAYcÜ´ï͹2]*wa‡pîÜÓlHlš'ïé4ö`؃ðYØŒdJ ¾ƒ¶rмû ÆÕø¹Y®7XjIH¥¥×wzk¥ÉÙ*ÃဓlFT>™·ÀX/õzvj¤V"µÛ…„48>°ËùÌA“³u*¢|<+³lbàfDÄ=5WE=ͤٛ®nåv¥&ï•ÓòdLÌ£²uˆ;ˆ+Gm9¿ p\Ô^JáÆ¯R+O½°òj,,À-o ØÎpT©#ÊŠý°nÑè©À]Ħb6Äq q†îsR(±Ö¹˜‹øï~ãm&vÿ]ʦ‚‹s¤N“î_¨y¦”tÇé°¢ýû„’ƒ ?ÙvÊ/ÅQR ðþ0è!©Œiumœ²ü«–´S•: ˆÿ6…ÂÒ«q°ˆÿÞÉ®—QG[¥1x ­æ8áÈaˆ“F_©~2áß}˜öêÒ@”5ÙG³Y¥À¦,ük÷•m4²òïlVöqý"B¯áPˆ¦½M¦ã0DÑþmy0pªÀÀ0ñÊYÞV!_d­2¡™qàì0·QH‘þ­réßF4”–^ ‡EúWì ©)Y£Ÿ§èíbxÎnáBðp@ºøk—‹må«Eú× ‰œË;ç­+2ãF{S‹òo)tÑÄ.ª¿í¸Ág¥²œKN~"GàÓ´#÷hQým36.¨HüÞLÜÒÄ[Ñ$S„BøqM™fe¢ú+HnÛ;¼RM+¯FâúÛRÈŠKïΚ㦙ñoK4ºøëôÉT?–"ü»Ï¬lkL`KCpl>´Çeáßx(ÚØEø÷ Å3™3ãb¶1RoÝß'¼r }&Ùr ÊzCdË¡PûG4eĤ˜o›T‹îo5>,ª¿€(-½‹êo“dZÔ¨V ÂòÔ* ´%"ŠFþæS¨òœe÷Ñêà†O8ã³e¸±ŠÃ[¦ Jbí;b¢ddÑß'©œ9iÖfÊLÇ¡£C­¯_Ϩ¼[ú”í “ÜöyK6¸É‹td·ÉYõ·JîvVý5RË|Ûâ«qñ,û+ÑC×1¨06¤‚AÈÊo Tzq8ÖkþEø7Ûoã3Ÿæ˜%NP³¶Îºwý=¾ÝF4±âïWn‰KrÓ EÅOë¨aT$óŒgêa¿8(0óÓ‚o(B·l]¬e°ä®õLgQèX’üu‚È¥–ÙîÚ–^ ‰Eò7H—šÕÎ (‰ˆÕe|Ï@DɦÑ]„Сø{lêlRT&5:Œ×Y¦Šäïñ™³lbÍßæ^›r‘èò´+…SNåù?½}³[tõÚOy÷‰coiñ¦hën›UÄužI£ä·øEðWØv6ŸôöK7€á¤›mEM7z¥ƒG#;•ckugÓ:³`Óèm½û¬÷»OU¥Ng½Å@Á¶¨HcÕíË‚}ûQî‰6vQûm—tc4Ì”ì MÖÊe£ž^-\Ž>ìÔ{²×“ªŠ!§ˆ_Ü_®Ã%J*‘ï9ÅÏÌ‚À%ÃL])§¨ý¶q2‹k¯ïĆܯtŸYå·Ó\:Ö 9U'Ç·@º'5úOTW(Š¿ëºÌ;ëhðl5C»¯_#Éßš²]$›Á5·ˆQkðà½Ïž}ˆgÉ_jv ¬CAOE;ðbðDûÓÔ;dÁB_Ö€¬evƒ_4yÙ`Ä‘¶•18±¨†=”£q‚rŽWó&t.E£FIRbŽ{eËu¨ a„0 R¶R„ˆjB½Wr?<ì¢úÛ $¾>ÞLëóbת¿Í´ÌÞ¦9rB9»Ùía•¢‹#*wÐÇ „“$¸«u;ĵ 1_³c¯@(؄ⅈy*F’M£·~™næüeHÿúzw£dUä„”Þf@#èv@ùw¿:s£]”›ÃSNìAš6íùL@ÄÐUãÒ<ÁSŸ½W)sì>-RM³Ùô² &D «áÄ•Sÿ°ˆ á u^6p`¶…ˆâÚë¿-€hÀúE®²ÓÛÀCÁ¤ÑW+‰º9}´ˆ‘÷h³1‰C/ÎãHus{6f7ÚØEð7¶_¶£È‘”a#Ÿ£V“îX^.Š¿í*Fš/=‰z‡‡Ä ¿Ù Š %®‡ h¢â,_†â¯ . .Íí—nCŸÄ‚J y0ÿD&YPØY6VÇ70‹F]ü%‰bš¿«\Rb—=ZíI³'N{!a†æoî s)ÙEô·9a FwÓ–b@©roÍßvtÒr=½=,†ŽöÏ–½&£‚Óå¢*s2c¶â¯®ë‡AòWêúk[º ccÔª~𠇧Äq˜ÎŠR~`(Ù4z›x7Ôߌ¬w"¶©ãLŒ—4Ôó‡I9Š`ÉßfÙÈ.š¿ÍÑ!B¦y®ÌRÍ~^¹ÉýZ4tиt7L_ ¤ÚïzíÓ%_59ñÖ£Í_AäR1Em\{= Ñß&•K“^RSÄê´ ®Ó£.-$ÌPý݇å¦ÞÎÕE¨y—TðAÜ+¢¿Yð~-7’]DÛë˜fð¤'á!?(*t-.Cò·YȸtÉ'¦%"pdè)íßoc#­Ô3PÙp3‚=(þV UŠâok·M}å,L¶)Uö^«¬!Dõœ»kzP(5úËgTQš¿õ^–]°Ð†“uÛr鬯Ûçw$>l´±‹âo3ÚäT6æ†ä& ä}ÏèFís§UôÑMg³m*\ü”–¢SÄÌy>WR˜%fPü­R sÑöK¯DodØö@–Æx“Á À'«§pàdJ“Q£¿¶Úz¡â®çË;hþB)Ñø¬ã0vM…ºö—ŸÙEô—®¾ðwÑߪ{‹þ^¿·+?Øg|:Fô7ôqîPÑß^ªÍ‡Šþnð”n-úùˆÈäÓå+—Œ×ð‹‰5É_z@ò÷êVçFò7[ކ‚‰¯?… ·Ö9„é¯zÑüÿ-4çoÂù ã¤Í®µÙÒü½ŠM7ÓüiÊü]ó÷®æ¯å,ÓÚ†“òÎCmêaÍ_}Oó÷yަ毽ú©¹æïKÜèOn7òìàgênœ=¼ü«0Û9Ž|Ý´SÉÆj&}QUI»6·XÙGWe‰$ñbïë©^c9R°’ĆíõÑÚ)Sv—wžGƒs.'Üä’3Ú –¼ŠNûjŸÖåÙ™©ÅÌ.Oˆ[¢WƒõæªU¹¨µ`ßMar3a²U6YêçVÞYbGzÐ+Ê*8&×Ï&xå<Çûξǜt~™²šc-Ž vÈùMb@×avÿ\tœ…²”wî±#5,¾þÆÊ;tGzçj£¼bJƒ÷Ì3ð&ºcà×uq¸ˆ9W/¡‹øÎnÌÂËc3t#çÐ:Nd¨Þ£PÔwökQh´±‹üάÿaü'9? 7Õ|âÀLOš›ºÈï,ñ>=æ–7™!M5ø³TEòsoT´)#²M¶hò?f¨XxªŸE€'ÝSàiX{5( žtMs€83áwÛR29 ÑcðMFçúiU¤xÆD‡Ë Hyàl]iþØïHñ¸ý†àÛlì¢ÅÓRq*­tv~ÂÃ[@ßæÜQ¢±ˆñäÓ’¬ÆƒŽ…ŒÏÆå‰c‘wG¶éTÌ{Á œü&éE=žj¯B‘ã‘z—^ ŠEçŽ.Ù2úxp‰¹DCÖüˆÏ6+45ú+ðE“g7u²e¸‰à„%MàÜà0—7Z]¤ñ¬É³_ãV£‘}4yž@„*$=¹`ñœT[«SoQžv´O¸Ú ;åKr&Øäâ–ô•–swåI¥0(`߯‹(Oµ¼ˆòP#*Jk¯Å¢Ês‡=nN×LFó–1Ú‚Á²µ«vKT”­ºxlu} ­èòì3ÿY¿°K¸Í"3´¥ú$|QåÙ¤ÅÀ.š<æ‰ëÄøù²q‚"ŽSˆž~ÙëÉ’µnÁ—B˜v¥ERû.*%n}ŸÈKéT죊–nG?‹(O5q.¢<­—‰õ•Wƒaå‘ì¨ÞÚ[ìJ=q\örfɦ‹·NKº .ïÔËZÅbœ!K~ÓMð!Õi…‹ îQ^ì¢È³ÄGþ l 1—ý˜vö>73‡½]Ýz&cŽŒ†Á†›æ~Ž l0qiârc44¹°ä†øå™2`ä©~Aqð³eáÕXXäxšÊ*Vã}b’2Ö,_»Ú¦ÑÛ\×ÏZ<»INÔpFgøSö–O6\½¦rÖâÙ•e½ÅÈ>Z<í¸Áñún '9Šâøªc±ù¬ÅÓôF :É8u }dÖÙ-‰Ö«¨„;ûÀ¨DYEŸümsÿY‹§^´x¶_|5(žµxîO,#gr •IäŽÕ([mÓ‹»±~R•xΕÙè’IH¡úègQâé‘-K&vQây"]µI¢›:³Ié9üY„xÚã^rÄäxäÉ?oó"SâÖ鲎ŠBòç`ŠÏ{››!ž* ž–^‡g!žè­q4>hÙ¼…’ŠhÔè/¨~{X´xîJ´Ñ«ÌÁ­È!)]/ª1ž9³lc5ž%ÅÆ{oP+wVß¾bže–žn=S?GñDq“¤Ù“Všô˜hô€°ùŒŽVù8»¯*z<©>ZyÚ¢DqñTt¦é‘*eíY$-fÞ1o!Jýuõä¹hòìF/LVÓ7.òã‡S¢¨’)Ô¨E–üŽ &¹ÁHüj »Èñ,ÍÃËïIf†öh£t§x(üEÒ½åxš½2ÚZTȧUsŽuH[ªñpdBîeìšó0NÓÑÁ‹6Z’Ï hš7C§Î5±¸Ü¶ôúælˆñHw™“ýqm¯ÍA*[ÁY{öaa(qÏiøÕ6ÞFI"ÉÓ5ùÿ@øXËÄþÎ;EÉ ÂµEˆ§®Œ±Ê&vÑá ³ÄGa#BÑ8Д:ÎBÞJOô]»ñ4{•œåïLÓÆJH DÞûƒ!¤Ì’YáÑR>–eŠ¢ÆÅð0Û{\IKØÒ!Z@ö <ÝáP2iôU¤¾×v?ÙÚE¨1ˆJ|pnðœ¬N@Cðì*IÖ`bý%m†ÇòI‡ÎŒ8NqUÞ‰6Cýf,4ž³äâãA¢ .ù-Yã*pÄï‡r)ñ¶Ãèt´³ÂrÑß©Ó5‚ŽB’Šm\z=B~‡šòä¢î@vDÆfþžî`(5:lOâ'ãväY_DHˆXN“R!Žó! •å"Âs|x(›ØGƒ§ý‚c]cÃä‚-ht­Møw»Hð,JÖ>èVB«ÍµS¼ï‹#® ½ù¡Fg‡Ž™ë‘y>É…Ø<±¡´x"útO´v{ŒæHœO$ÆPö'ŸÞ ŠF]ü%‰c<»‰Ö._ü†üà‚S!jsO‚çøøP4±‹O;š¨Ûõ¤ÏÆrŒ‘²µÇRŠO;Zƒ¦Ð›Ée°lò› éÕ!‰8/³|VsZÆf¦k@Ñà‘¤oü]ɉ†¥Ð0ÊÚ5౞³Åp‰ò>™ciÖ×5ú›¤e"#|j膘òóL´²OýjsG4Lì¢À3k±y CT>OÙ±lälÙ$ÓUrB?s`W9å)Æ»¬B6î4ä7Í/ Ižãì™<#xdýíW^…ßiƒ«‚‹.v8e­"‘Ûb¡`ÔÅ_#©3B}'íÔrXm^±¤ˆ‚É8jQã¯wý]åwLì"¿£Ûñ0ãþ“Óý)¢}ßQì™,C‚gIŸñ1¯Ræ@ûI%%Œåͦô„NŽC|â§ÅhËI{žÍé Aø*ÉšÙK7 b²MÑ!ç£SXáP¬óNêµØ4z+kžz©b—G ´wqà˜Vygëü EçøBŠhaõæ*Ÿ—œ1Lb(  ¾zÖQ¼^ ƒ}¸¦ A…̱û¤Ž’-+óf _B› ô™ÀàÐg›ê;N–ßÙaíõPR¡;zd‹í,Ñ*K®p%xtæIÛbÓè­­Bá…#{¯L¹:êõTŽY ôÆ•+u1Á@p¨ï§ÝÝdd' õÙ%ÛãÓ½1+bÇ&¥”èᬠ®cxX8²¼Wp—yEç— c8€å˦ ¬ã,‚Lã¬'¸Ðf Œ…8;ÊWŒ-‹¯ÆÅBœm›xNœÒ»`iò©õ¢sÓÀQ°iô—NáuvØi¦¹Š9™·)‘©PÛ`S½}&ÏÞ± Ýheöìü„Ίш¯n˜ ¦üØáŽŒ`…=ûƒž´@vÒªñ¡cܬU±Oj$ҜĬœ¶³¡¾B -T> …¶Oiªól ¶#«â™{Ûà:Öâ¨ÿkÖGr¦ßöõ*ö™€›Dxj4`5Rž)¸cS•æ„Ù#ê-@)Â^{àt`›U/NÇ“ ÖR¨¸ãÑPBÆå˜M˜kTYga,¦°q§Âϲ•]¹ó3í>Ä G¢i);fåCׄ»0rçgª5™„£ÉIÂM|(X—ò*6 É>…!D§²ÏævNnAþ¹°rçVéiùÕ Yx¹îèù-OÁ w¤‰Ž n2jô5Øà9XšlF¥€“§A­%€7÷ž¬cVvaç¦'n~`»i¦Ó2Ð…LV÷DHðs?åñ·š '5kx›xŸ¸’42J4$甎z¹t² ìø¥ß®µ ]_½™\¾=E¡(lY3$¡Æ¨ß€ÔŸdÓè/*øõ~pt‡:}ªËP(Œ†AUl{Fg Q· ÁµÛ\µle²îüÌ2ƒ}°Ó²ÆÉä€ÙêЛ¯ÛÎÓìÇ‹èxדûƒ“u8x:b¼:8Æ'Ï ²÷~ÆiÆî,1¢:w’šo etˆCZØÈœ.ÊG”‡À™>ymßÀˆµhÔèq,7áÕwÌÝ;)]Uɾl‘oÕ˜ ÷ÊD¡RS˜»÷œ£i²±u÷3”ÿ.óƒ2mƒ4œWs8L=)xÀݽÐ곂’,*Ki:dJíÆëÍÂF j1û!A·>8·Èßí¤è$˜Â¸ùò àØP¥«“Í`ÿÐÁ%Ž`ƒBÅø €£hÔè1IMâ…É; މ·jB—!Ÿ{伩 E*oIÉz7p”lìÂåíž`ò2:€§fRÃ8‘U•¢ ·n½6†|Ѿœ8–5Ÿfн:€•Góc¢9½ˆ˜b3Yß–I Ÿ·ÐçSø¼åzHãò è˜íd”u%έœMiˆZqdúO`ËFûRÿ­’•F샹½ ÒŽÁùÁj§t9ñêöyñZt·´Z²± ·÷ü<ü€iÅ9õÍtaâ°‹¨gN vïgËÄ BšÌ_C$Ó¦Hû§ÔÄ…âÝç‡lI9“ÜlüüÞAâ³5iRtÜlùGp|7a#ŸDŠcäh‡Œ¦èhöÇFѨÑc{’¸z@ò¦ù6 ÕàC?ÞÅ_ âLóíwœ¾n3² Ñ÷AÅã7s k;É?¡¡jSß¼º0}?AÙë1Ù©ŒC7<…xÄ}cF ²ŽP HÊù0ç”ö^L«Aö-3‡5.ߎ>±©-„ߎ#3¶@±¤8Ûà(uñ˜´|rQ:ÙƒÓjãtR&gåÂõPé·Äµ¶8ŠFv¡ýöOÜ:òÍP?uYùLì:†4É*WûÁÔ6åv<_0mGKQG§dèüø%ŸÍgÊ9ÆÅ›•Ê:Ù>öÍ€¿ñï³딋tÃËx(jÆþ‘ æIû.ÄèËã®],¼Åô+Ï}¸‹hµh¨Ìù±øý5>œRêqW—qÀè’òÇh¼€9¯*å ¸º¥|{ùõŒþ0úô;€î¥äøðŸ¾™NüsoÀ™äÜ\áÈ®ïÀŒ^$3â ¶¯s:z‰Î( €Õ‡˜5v°Ùd¥“9’V§Á¦Ñ_>^Ìb}›!“ÍýjIäcÖ†l‡SŒà÷³+J°©“Ð îñ$z´,¾æ£¹Z²üõã»oïÿádAÛ‚iªw…º°ëLLw({×Gð þæÛû¿~ÛnEOÙAùúùÓá\?3x]Z7Âõ!Uýõ£È…´xÏR[’ø¶80ÀËÿœŽçßþñòâë/¼|=$º&£¯¾›žóg†¯ƒ?×W¼ßýé1s9ŠâcÜègOó‡ì¹vùþpwk„Ãt¹¢°l:@54JOÎú"J~‹e›raýc{ѲS´®_´ìIËG4¼ª‹ÓÉ÷›eùZrqÕPò3ì@œn‚k~ûúÜã·Ü”¹·1ÂÓ·ÌÞ±hP4AÅd"&c ñIyÌ»skRýšwõspÍòì%¡jõš¤ ØÂ’-˜™¼£Æ'/Þ{ò^hÇó¶dOc4or”> !D¥£Kó6èçG\ý …gt’¶]ÛDÍ}šd ׎1늹9‰0WÍ.‡% Iü¸gciâ—I`w»º‡nÎ è(¿Rƒ|WWcŒÂÏóäçSAœÛzJƒ1»q(s lx›U¯éÁ²†qã¸ýd/^ Á´dÈh}ƒ”ù| 4–ÎÖú54’-~6-k?ð&È|þ1ÈP€,©Óó[ÿÈŒ ²Ì ½~¹—_Xï`¼@«ÛC5YãíÈD1þ˹¬L&ÎfB°`¢ÈÕjçUw¸k°±‹Â[b¼*æú;·Þ–Ðæwsé8t.êŽ-rÝͬÔù°[&—rí¤ÔIм×7ÓµyyBø,ŠiÖDL~•UŽziF0íÏùjý|á|Jœ¬h[{ýE>ÐÖÜẚl“ÑŒ\:û ;’WÆy‘ßdÔëñ!«Úí¦M²7ÔŒæiHœEhÊ¡.–´Û•°ÁÆ.‚vK\yA¤MŠnRÞ/``ÿ:ª’5»f@tUHq:mò`Jy»Ö:(éˆmެ8úäèkÖW”ì$ñ8ºK%½~åÕhx±»£E²<†ÓKÅö9Ø‘”qáX¦ýõFsšS…Ã"bGÇÂ!?³>rç±á”é¢a·+}tƒ‰]$ìt;pxh•òÆš‡öŠÈûÞví ¯3Gî¹{ù#“Üf½uPB¡ßkNÎŒexšVP~åëª)n¯»G…º~åÕpX´ëÚ€Òà1ªMQéÖù¶mÁ°nÓè-Õ?“¢[·ê2Î0dc‡”0,™êöE²®^LÙ »¨Õ-©¥?„'xGqæ?i Nçl¢ç mѪkÎþOÑ@FpêUÌ´åcŒH'  † ÿª!4ãëcdE¥ŽÄA‰¦¥Wã`ѨÓ-Irp„tÀÛ ‚¦cêÖuquUÂü¢O·Ïtm jlæ­èCŒãTî~î¨Óåã/e»ˆÓå%mºoØŒ2–Ÿ±kèÈh5p!t”)ÚtÔŒˆ¸2 Öê=«œÖ›JwÖ.ï‚ë#‡gå¶’ôm¦(ÓIbpá”!QZ{5&YºØ?œ/©ì1(‰&,5uqØéSô°Ü^t,5¼Á“áð$ ÉiL#ܤ;>B”Mì"G7#ªz:ŒE)Å…kèà½ÆÏ âÆž^-«4?äU!©Â·N¼ò¼tÌ›‘ ÔAÉQ¾T3fZiva_„èîÈЉ#mk¯Ä¢B×#Æä‘e8˜AVqºñ )¢Q£¿¹»ŸõçŽÆÃÌù(¦+’…¤O¦zÆ|Ÿ;¾’"ÛØIyn©-çAHôÊzT\o Q;Š'iϺsͱ/* þz¶¡@¢AÃpØŒÕT‚%Æd‡8Íy¯œŸisž5ç’´ù’“‰ûÚV_ ŠgÁ9±Ò]G °·]ò†á „‰¢Q/ó£W-ý±¹c+Ì® +eí ªS´B…¹(Íuè¹Mì"3×QAKLÓK7Ìû¹+iyE§°$Åù˜[Þ)«½™ð´Ä÷ÚQaæ4B•9Jþ"Ÿœ4c…+sUn"0׉ÒÒ«!±ÈËÝOZîmñ—ì„R7Å›‘yÓ†ɨÑ_1]+㮯©ŽDh1tû!CØ,˜z˜xÖ•;>L”,ì¢)×K1`0²›)l¤Š·H½å|3ºt¾Ĉ‰CÍOÌ–úíµ® Ê•»``ÄÎH!þ&)®…»zê K¯EH¿Iè\…N¦.9*8»µµäc›b¢dÔÅ_£O±.æ Ý·ƒãDÚ¸qfˆ…dݦ;²o¾Cê,ÚØEö­9É4˜j7á”ue ¯#éW‘|›“÷<œ:ƒ§§ ¥\¹E ãüßúnŒS!”b/[âôü*‚oVKº¹ñFX»“™nª=.à×L9¢¦k|áꈢQ£¿üÜ B˜„Åc«+Æ{Þ¡Ö¸!³ÍŒÈñ×Yé­Cçhc¡7Ûš8_Æó¤1á(µ:õ¼M—Qjzh{†‚‡˜IÈmÐzÃ!*rÎÁ+;ËÏ òV—NQ#"JK¯GD5µÞx£8:5 >8`=’ÿ¼É¨Ñ_{¢åÍ…»>·÷õã‡Þ×Ýt—?!hòè/|ó1ne“3ªA&âä—™ìÊ—õΛP—?·›piË]qФñôu×Ùtõâ¸ã¦¯þõz žÕ¸¯þùåæË_n¾þòF¾ÿë/Ÿ¿|;±Ùï?½û™½ùîÏŸ~ÿÝùù»Ÿÿ×»þÏ{õ˧? ?ú×ùÀÆ%é×ÿíå{ÆzöfÞZxëAI9§þ[­Þ&gço¨;O_õq\}×ÏöêõŒJ)ìû“yÈ5Cgõ$·ðÈ„åç+Nä™tÎú¢ù¤Ó̱òº]pÏ–Oéêh|ñÎÚòCfÉÇhÍdùšb—5SÁ6À~,ía/úWs—¾ôÚ æ¯ÕÆš”µ¶^ÆlŒƒ' YݘÈBQïš7þ«ÁœS¢Á%§R !2Zz´†¹ÄK±ñ×/ÿáw_ÞýøáÝÇÃÿ¼ÿôÍóžòïoÌžŽ‚9ùÚu÷ELáØ)Fq¾ùä´ÉØuõVõ¢¥P?¾v£Dm좥Òìúñaº‹D`˜¦©êljœéx‹PÄš'4 …ˆrrWìsiP^¤†Þš œ ³FŸÉQf3´ªd„EKáŠèw³µ×‡ÌÐRˆ-\©ÜNy¢Á@mÕwà-B“Q‡}ª÷#-½O©©ÊH ÖOþ{J4˲˜B¨íÆš+ÚØEL¡]¿'-IàÙNhWîêU¾Ö6ZËu‘2çÏÑOçwˆÏ2 “ý¹.Ðée2† ‰³UšIYžåO͘(-¾‹¢BËxwÆ•M2™Ñ¼•ŽìàýÍ‹â™å«EOA¸·Ü‡ýtÁø!¤ªXŽg‰”Mì"¨Ð¬<ÀxŽ‘éµj°¡ÐwlG*z ¹™7—]'š›=qÌ?€îÂp8y»ñ¾Óœéòé²$¨@Õ‚FQT0bfÛ⫱h*d醷NµST ÀGgµ¨´ÛÿG0jt˜@5Ry?Š®Â±<‘' ¸IØ&„bÞS½ö^”öëFj3±‹¶B3IäÉ@$›ÃÌÉüF×ç§xÎÚ ÍùÁNଣú}bÑYèÀ)ÛØEh¡]’€@§ý¤8 Z sî9Þ¥ÛÌ,î´W‘Ï®IŽ+ƒú¶Úx_™q*i—Ãg' &ßl½¢´°¨’8~ÙÉ,¶‹¯ïÖ†ÖI-AUb2òLÑvd€Ô ØdÔèp<%=í'V©»QJž†5š&„KÑZدÂÒda¥…f@dBôzLQJÊ:ã{R`@ia6¼ò8·xT¤sœ2¦CšÓ¦íê+Ãwà7Eãâ™w sòH(-Ô™g ´àŤ¹mí8 2µhÏ$Ï_‰™ Ë9¤ß—®dÓè.IÄ$Ejáhš4þ{âÝ0ÎÜ2Lµò~ó|m6öQ[h×%p8A“TÊÉt,®­×ˆÉ@œ\#zN“Löáþ Ÿí” •šžk>%ÔV옂FÿFQ4jô×ÖgùŠÜ±â„'«Q 2`ÿÕø«3k$ôŒé€‰²•]4šy¸µŸÈ²kJ§H +EraÞkù°WÁæÍNE¹A¤ž¼>@Ÿ0D,…@·†gÌ\ˆ‚¿3¹Ò¶v$ú$‡«UÒÚLŠBÆ}G¬|ÂöGDÁ¤‹³Tºê{Aéh]ç8¬Í(…ÄQ-ÇýBÎ µ…9³ldµ…Ô ž´ ˜ŠœS:ªN‚®nqZÙ|;ê3HÄoÒfÎ%U”7#Á©£RҸ˱€K‰ƒ3F"'`Âæ‹þ¤‰‘ÆÅ 1†“D=QƒÔ]Ȩêæâé7‰’M£·IÄĬÑGz0(ÚKNÊ{ŒÎ"(æ.ª\²]Ôr»Ü3d¸gy3o*Ëwôªˆ-´#}öH›Íô‚4€òÁnG‚#¡’»ä®E ”%±…:çCQ[H;,¾!·ÐÂ¥‹¤ý’£:> 8“y4¢Q!·PÅ"·°Ï8_½·Å€½‰6¢8˜ è-„ýz´Ûl좷`g-‰÷ß`Æ!{; ¨<=§ž²\P\ˆímEœ=fÆÕIæL…ÑÍäh³ï¹Ô|‹NœÅ‰P\tä+¼Æ¥ 1ñÓÕÔèNÐn€]!€Sô `¢hÔè0V¦~É…tlSbD„b¢ÛL|äÕ™ÁŠâÂ~\‰MvÑ[0Í•Y‡æ}oĬÉ+r Pìé–}B£›ŸüpN’¯Ý2Q%çD~.U$ŽÓYa~iUäê7‰ 6jL›…¥×ã!¸ˆZj+):e²EmR0ª?ŠFþÚê15ª-ÔóÒä ú…Mtl¼WQœö–[X —ÿ»ÞÂÁz §ëß¼òs}Æ£c¨s‡*.l FÐôª¸ ß¢ä?’ä¿–âY0uâ‚y@q!Õº".Š ;i”iþ88š·îŽj‹ã`LÂHKÚGoáxOra×Qï#»h.,zÃv“^ßž ¿¸²–Bš¦ÛÉ«Ìa]Ç[„¢¸`šÝ:YŽ–nèt)2¤8¿ådcÌIç—º yS(8Æñ1,³òv6Csaq hür¸?ìݰøúÀ¢ éUÚÕ>y5$§|r¦ìP¶Q8t¶q½Q‡}´l‹êÂnô‹€c)q´Ï–¥¨³Ð¸^Dvön0±‹æÂ’8ÁCàa"GñF…&zðê{±§WùÖºåý2Ñ”%Ø0¥ÑfmšuTrŽÓ¾sÅÇ%lò-$Í…\å¿(š î#PÃâ«!±h.¤;ãÞ‹è“Èqîйç@>UB‡Þ(5:œO‹ŒËåËEuaŸÆ¤*Þè2GBfˆl}têÄuó8BÚ•=²ÁÆ.ª ¾=8MŒiªúZ˜ÒRÒû4‹êÂsúCN¥¨b9L†z7Éè-ehj¨”PMY"þ¦p«™ZD´°ï’¹fÿØjíÕ€X4œt»ZÅÐÕºdAb™²Æ«¹°Þ¨ÑaäŠæÂNøÚœL„ D^GýœÞ]8e»¨.,*¶<˜cËøînè¸9 bßtÇzS‘]˜·%=îWŽìB SV ”0}µžmŒŠ1d~[˜¾ ºg¬@Eva±`ür¸f¼ÚlñÕ¸Xtîê."ÇSpÑà Ž"t«$Ζ°(uñ×jaЪè.äݨÒ!'zE¼IÍ`4•k»z[RÑ]8þ:Q´°‹ìBûµ›)¼.LjÕuK™:ªÙ…æÐ÷äÑcmš\&rÔ¨2%}@挡yk ‡#”µâÀmQw¡zcUdh‡µWãa‘]°-€Ðk³F3Ž'«åI[oÔÅa§!\Py?ŠîÂÕI}HœhÁv‡:kBó_eÝ…ã/e»È.è%õçG1ѨÒÍu"C}¢¨;¥á…y[Òã~1,F²~&:þy“ó–Ê d ŒLžJ»$.°<Ýn¾¢¼ Ð5#èfk¯FÅ"½ Õð³>ñS‚"]4ûƒ¢hÔèo>-áÊ—ÏÚ ÇVXNÐX#C‰‡O¹òÈ‹ôBX”Œì#½›«,'š”í .rT™§¾ŽÅEM‰Gq]‹ÎL¢E8>(=LÔ“)ØdùwÍnóÏâ éŽøBnL ¥åWCãY{¡ †¢ Å*ô$ÇÊ[¯7êÅáx2²øÂ~º4Ëý.Þ*¨¤¸ÔÐ9º:6ñ…]Õ\×[ØE{¡9\$àÐ6A’W“íÙí…Eñ±‡Üâ8^kOiZi•Zš0íÖƒ©ú¢¦ª?6³ ºh/To‹ôI!ZÛÒ«ñ°(/ ™«}/.*6ȃj%*Ú´G°it—N¡Zf)Ê ÇfÏ3Z”sØeÌß XX„Ž¿OM좻Ð|Ÿhpsè­›¤˜ D»>t,°Õj÷ŠÓ¢DÉOÄÁZç×¶®:c Ökg)¤¹Þ Tª×øEuÁì°x:#³UK¼×æ=‚:O©¥i¬oZw–ŒvÒD>tÂn3Žd5hã"ÿ1~8¹3O-£8šAü†î‚ßuʱÁÆ.º aÖ´2G³åä1úG6OòfÎ$”÷ºòŒÛ‰dæZ·œÓÀ×Ö ”6‹ù˜¤H‡q .‡l!…Åx]€ C1é4ë †ð‚¤yÂ[S·n[|}Ç6„ô† ×}òjiôÇSFSA/ÌK#¹Ú¦ÑÝ(ȦÙ…«ÏåLÄ•?:ˆ-‡¸C\ë“,¼°+iZƒ‰]”–hu‚k1Þ¥§ŒÂEW§ä v*‚ÊÃëI)-äbÚ’0­IÁ•”“3NÛÙ8ÇC(( xÌuÙf‹7àap×¼‡±'d ˆ$ã¬&l«Âö†x(Ú4ºËð/ÀÇ½ä «XAßL AL9ùêTßYxÁÕáz7<mì"¼°È ôvd¯8•¼™~‹- ]#ÄäŸ|‹ —¹a$oЄ¹Z¡JŒrÂYXyÎÛpŠò‚ yåI«qí@ÌB’ÇÁU,À)˜É‚Êñ`.ŒÕ6îzá±(/Ô°=1jƒ‹ï‡Äy›Î±>æ|^د¤ÒfbÝ…f8LèÖÈù–H+gد®^Ù“iÆÃAŒì¦ ŒÑXå C°;z(I“ÁL«9‡“Œ› à!d|Šk¯ÇCè.4ćFC=ES)DåcêŠ6ÞÚSý ª û4ßToçt” F²5GaœçKhè¬ÔB¾Û ¢hcÉ…øÄ][ŒÊ’u“Q`†v1^ÓŠvQ]0KZ¹EÚ­4çËÄy4[jÖnñ’V63Hƒs¨:ã(„êÂ"µïøåp]cßlñDôé[ÚúxUЉ{2üˆ4wÿlˆˆ¢MoIŸ|Þ J§ÌžCYþ²"1 Û$Ì­ÝW¯ƒï…‰²]dbsŒˆ›5ç‚™RŒGŽ2HûŽÝˆEvaQˆæ1·Pk¶ÙOŠEÁ9\-ôo#òó¡’ ÅÇ&¿É‹² ²ê‚o+ªˆk7 b '-as~\éݲŌ"þûUD›FwÓiñRåò嬯مD§"‡·Žá†3Râ HV]H»Ê.4ØØEuA7W Ÿ–“47…Dètוa\ëS¶³ˇýW‘!3-9Λ=‹G`"ïƒt2âpçòLHº ©ÚXtÄîì¶µ×c"dDˆ*þxe]„–‡úƒ£»oZlº¸‹¹z`<øSÚMŸko,J@ÉÄ4„ Ò*…B3Tö›Zi3±‹èBh†—HQ¾U:ÕœMgNÀººåçm–_ O4q†4)¬„ úƒíš³ë©+¸%øM­€g“ÃŒ+’ õ)Ú¢¹ÐØx#,݇ÉÊ,8µ—9u§T@ÝhU\XmÓè®î!· ŒïRVI "!aÈ:)µpèr—¢Š``±…ÙôÞ£ÎìÈ88I—“åÚØëž.Z ©½pî²ÖOCÃÈ ïR0û—Tå„LŽA‚ÓüÜÐlÓAmÁ×oAiDF°¶Å׃!HˆÄjwx0)ÉÏH‚×ÇË®¶it×Ögš/dÚ¼ßöI™ë|[Pu¡íà9HÉÉVh.tÚiÇVÄ6+»ði‡ëi¯ÕüYÖª½Ÿ`#˜5 DÇVÀ©½ Õý¸c‡Óqg"‡ÄñˆÉflCG‘†ìÁoçP Õæ}X%°j_7šn¶üz|,´Úb¥ÊÃ…–Èä8jÍžUÊôfùD£.ût¢:MQ!ÖÖóÈòqŸ‘ó£Vn4gÈ2±6 ã†{Á£dbbí|ʳëa I¶4!Æ 8’ö ,ÔS˵kÛgh0–£=Móà»4àþÙŸ$,eEÚåÁðW•ñî ½¶ÐSøµÓ©‘NVZ~58‚m[rª ‘vô3h…A[p=ÎÒÉU(¶ÓѬ8>(­ËØnGœ2êB²ívTºn3² Ëv˜O}<#Î*c²™ÜÅy‚œ•Õo Ñvlçµ8™óñ5¥ÅñÖ©ìý!ta‡ä¨mg·3®¾B¶îÑmG¹òÒ¶þj€,„ÛV¦/«‚‘g|v ”Žœé²Mñ „¢Q£Ë$_…s[*pìƒÎ(Üø=WÙò.³nÛS>ž⎙}ˆ·ŸI2 îwÓÛG6TyÎÑ:6tæíx͵ºÚ3²ªÜO<ãÍAŽµÚ¶EI§q׃‡t”Q9˜9ųÁEVµ3¤o;1tk\~5Höíx}çö8ñoV>¸³%œöç+2-6]¶¸þ¨`…Û]†s ™0i¡c0ˆÂ|’9¸© ÷+»ðp›ùÈË q4g&3óÂ/¦l:æÙ…ŠûzE§òæ¦w=Ú¤h‘eë+H/óg?69ÆÛ&‘BÅîqgY»mùÕøXظ}Û$§Zɦ\ áÜÖø7@Ç-uñØiÞUU€<óqÎ=ËÈCd4g° ìY×{½ #·?Ùý8tÍìÂÊÍgY{™Æ1B†Â4Ô2¹;w”´*¼ÜôD¦Í[H²4Í´óy`n³þÆ:HAœÞ‘á(Åpvïòÿ³ãg¸BfîÔZ¥V_…™;ž|Kš~BJeπž•ÂbK„”lÎ'W¿†•V…'*9“íBÚýÌE«uÒ]ÓÎpï½2É.RLmnkôÛ{M­ë¸ÈÛ-,…¹;7^GŠË¯ÉÂÝí›0Ò' 'Qù€WÚ¿ 5@Á¦Ñ_*™êûað~›lÛ¨4å5§x·IðXø»O¦ƒ·ddoz¢k2{#Mˆ]Aðg½¶ÝY¼Ÿˆ!3{¦­LAsú©Ý ?Tô"Å–ÿfÓ2·¡Ü6Üm¶|6:æ6)Z>fs†b+N+Zµ¸¶GѨÑcTðm½•¿py_œ1BCÆ}ò€ë¾dxÛÊlÞYâÖÝkŽF¶² Ÿwž#äÃóÈ(F²yd™”v]US ¡÷BKä£~Ep­ûà&%(S†¯m<‚{"2.…€–e£ís4‚ú]áôòMdÛúëûÅAêMbݨ2¼ÚlH #ŠåTŸs•þ¤¢M£¿±ÜnTßÏg÷Ní>u0Á$Ã:¸o sltô±GÙÈ.ÌÞaž[?<›Œ†ñ¬ÓTíÀX캮T¶„Û×ìaÄgص_Ž3)Ƥx½wJü”@†Å̶™96–J€žDl­zõÕôÞ"HW™ÁÐc”@ù`mVÖY£i±iô—q±Ö‚ïpÚG#°J|ã, Á¦Ás6`²õ2ÃwîÀD!ÚØ…áÛfåë‡ñÃg¾Ó6‡áTã;Þ8Šoý„[9ž»°&ni«p3r,rÀÍG&h> ÆØæý=…ã;Õe¥ Ëw%K—oÆlÑ1-at ‡CW£› ¡ÈJ+ßø–=’M£ÃžcF™éûh®ï\zîЕD™TȦ^¹.Tß¾ƒŒhc®o}j&·eôpü˜é›¾èÒ»žÌ ûÖ×[kýB%2e7á¦@‘)§÷‡FYF>\ Ö9Á³¸lß¡.¢Zø¾S#2J«¯Fð}7åÒ'ã“"ܰ!6)[‰Ç7FÙ¨Ñc{òB4ÖãÐ )‹[¦!¹¤¢ÉAˆAü݃³G6² ó7o²fB؈ùÂÛæÀHÃ3±'©#¨¿È)ö+f#ñ?ز8?Æ™\(Å€\2p7F3ÑÈ.àþ ¡˜Äa§!Óó»ú•–†¯õ+Thó´ÕÝeë%: c#ªýÅЬ켋§€ ½tgðVÎ[aõhŒaRë{œP1¨Î H¼f´ô§—L½Må’·únd=é 9=ÈÜuäp²ê“˜QCé¬CF-Ù…<´³=BiŠ8}£).ò“µíÍîÛýÊh}6ts‰ÊñBöÎ4‚™­Dƒ¾Ÿ›qf \˜è-TàÔ4J˯GF›– ‘2”72*¼k´må$ß“.Þ‚ âmÕ·#p¶zpÈHÖ)NR<´²E¡> :pI v·æÑÈ.„àñ‰æ”\²»©ã†¨Râ”´«_ Œ§æ{‚ÀÄÉÎÄ/hmò±¶?'¸×žŸ1Ÿ½Ê¤IÁ…YÞ ne:³¶å 1ÙÉ´Òã}2É+ !¢ ”Pþý™ÁE›F}¹Á¯¾Pg9Åcµœsåú. ¡Hø èÇ€<ŸtÝÂݺwD+»„ëk•εí;¤UàÈ`” ñ=õ@Åd®uÆ×ú•!é§7ä‰1So7#4ÐÃu'ô 3&Mg\0…(Üb½$L^Œ××_ MJ-¡£gpæ ”˜zס•³|ËɦÑ_[¢ö¹ -æCiÂ÷&Êß,ã¯èmBÑ51cÐèw£c\LÞ+«d,Û6ào‘ã"Ï«ãGl¼Jb¿œM Ñyô$P‡Vôe‰>&Þ¢ú‹™è½­-åÀáüXüþ |Dߺ74Á(”ÚD^€œ×Ñ”âÿõ¹4ŽDƒ¶üúÎ~}Ú> ´×Wŧâb,öJ¶µå 8³››£Þ±8ˆe¤D@DtNGï1(b4oZý <ËÎÒà Ê]>’'¢Á¦Ñ_>]ÌâÎm3d²·¯,qF%m\¡®Hæ”ïàQXÅ ëxkýM‹¯ùh®–,ýøîÛû°A8ïÊCŽœ‡Ù¥CÉ[ÐÁ“ú›oïÿúm»%=åëôôŠè¡uˆ¹4m¤ë$®ú»'‘ é–îâ–4Šß5ØåGû¶Ôà°SÃoÿxyñõ×]¾é«L­²ÌÉ‚tXóÂ±Êøs}¿ûÝŸ2ÖQT>›d”(\p jÉÏ­öÞñ¿‹1Â)º<¼hçO0Fˆ”†ˆ–èpÛŠYö‡&,V?®w—,ûCÒ(X¿'AíìC΃Añ1æ ãæš=ròKõ³ÅEß<~ÜGø ¿Ï=wwƒÛ=l;ýø>06rjCÁ ‘ŸŽºgÍTîÒŠT _ýÜ_´ñÃrvŒÃTç=MsQéLÒ5̃)]홣3‚û<Ÿcð}ž?Gž'FAhŒ9tsññ`|ë|T+ãÀz«^³Ú¬O ²TCV Åù–ÅŸN 8üâ$3Îd‚©™ÿòÌŒ0b—%ŠW/÷ò ë=‹#ºÒÖc¸W¶ñ ,t> ™c{ŠºÎØrAÑ]F˶¨‹\_¨_Þ¹À¶—»6M†ó³ÕJs,Ö“² ˜½@Yu×ÄM1‡I¡!e«@æº%£_²üûFL 2Í“ù-q @šT2fáÂDÀ©è+Û|ñõwñ±P$‹³SPÅωC"^³ü.9+¶Â–Wä'ûpüüåûßýë¿þÖÓïúüÓO_ß”Ÿ“{ë\{Õuþå_*똫uþñ»©»Õ[¥ùÃC>=ÊñãƒQòퟞžúq¤G Y±ûî>±K‘£«»ÎÇŸÇÙƒ¼ô°Ï6DÙ1“ôúÀ­X_ŸB¯ÎqÓð°^­“'ë<üÄn ±Þ]_‡¬€Xûà&áXs†í½ÿﱓÔAŸ“óÝ Ö竼ºÎ¶{•çì¦L›¬ñvdØÿ…f²`²àƒÔ|ÒßI|hWQˆ#»äBi‰©²˜ëï4õøÀVá[¯SÂÝh$ݱ˽¤DK$îy…RU¾iÀrÛRN,dm^žþK>|mJkh´=$,ÓìZ;\Æ>żh‡ÕÛ£ Ö‘o6Éhˆ¦'æ—aGV:ѱ ç뺺#«ö¹î}&jhPNöœè ò 9†úDd‘ëÖ;«@4XÙE±Û4c"”‹ÉMàÄŽ\ìØÀYäºõ¢>Úc~¯xóè))qF#YŒK÷§Û£J Ÿ7¼m&•âl$²¨uW‰)‹V÷=œ†¥W£bQê–†ªøc£V®ð;íê o%£Fs}æ ¨t{A½pTt=ãaˆϰÁÖåÊJ·Ä ·(ŠFvQénލ õZÎH !+Ÿ9%íê-J=<æ”!&é)™¹ç‘~³ñ:*eky¿PBrŸf gunY›ûžÎú¥WãaæNw4*ØcŠü9ñ߈ j­+n‹‡u›Fw©>¶_$¹í~’Ü‹HcÉóND×f"ÃÇ)²"÷ñ`(›ØE{²ñQä0èÛ S‰˜˜Ò,CÝ„n³SŽ0¹1‹½žaSÙJêZ(/ ‚4ÈT:u¸m»èpgy¼§mùÕ˜Xt¸EÊþðO*—rB<ÆQ+ùÖ õ-AQ4êâ°ÕEÀ²ò†î¸Öª7uü‰ºH–ÎÝý‘~Y„{¿Áð6û(p7£¢7QyŸó@2g62à÷tËB~F™ñ¨_.YŒCO)3²‹Êº·T½©ÝéñÙIÁZ¹ÄLi®ñlýÉËúÛ;¬½‹úv¾£x³•é”ñÐÌÓÁŠ7ëº8Œ¦¼ÚÛq–Þ®žì‰^ã¾Ç&b&å §²ð¶ë,ÊFö‘ÝN핃z,ø['n’Éq±¨n/°?êXtNfÊ?©£JžÒ•†¤K­Ã­Lž]çÕm’6 Ñ ®ÆåWCc‘Ý-ItÎüÛ­ æÌŒWûC£hÔèp®0žE·õÁy´×¤Ð–w8]Õ‘ê\BgÉm¿«Rbƒ‘ÿ?{ïÚ#IŽ\‰þ•†„4€;›ïGµviqw? w¡Áþ€šîìî’ê…¬jM·~ýµCÏ †;-ÂáÎÄ]åÓYù¢™;yhFšÓGp»ù\Ñäk•dJ1”sã;R MjÛ~U)ñFlô”L“%6z´×øµ;އc£¢¿€¸ÍH RbX2%@m;Ô¯¡ObÛ×ddÆß Ž“Ö6ßYRG"ʰ’ÍDá ”ÿöDެQ/.‡1òRÛÇ¢£ó‘Ò Zœ…¼Â)É\EO:ÛûéÝ´ÙØGd{E&ñ挖Q©È<=e2øÐ‘œ7‹lߎ/Çh[P y¯Á”qÄUtÓ›5`D'nZ´ÌgmY¿ŒÎÛºñ¨‘~38fíÀ^Õ b *Jû/ne÷­(ýØ*ƨÙcš}Õ+‹l›c±;{ ô6(þ¨‘7±Ävs-‹×ŠVP²eë“5¸Àp5³ÀvjO©i¶ã57KèX”:­j¶>ºFlEù¸ÏªHÙmZ*ÜçÆéê9Øf (Ûo€EÃ3óÖ/€“å˜!3´£IÒzôØ[iƨÙ_ÃuÿBZ;ìG[Ž“Õßþ…zK fÌÁI¨­8S?lÌÊÚn_íØ#»kÇ5vïüÁ¦å{iœÒ²sVJ{ËjË5°[¼ áB´.”œå‚–ñq$ Ó€2³yíE¢‰>ó“&¡¬£lMK Òð#Tµ#ÃÈQmÉ4¶ ¿½¦¢Ú@—ëä›IG¥?°V—±âb“Q³¿áФö>705¼¡tN襨dqJž¹É‚Úû1¶™ØEN[-“ÍÑCÕÁ)\äš)É™®âˆÓnÆDÈ*SÙ¸yŠ(Ö1 ç{IiX>‹n)LêRÖöªNm¯2WÛÇo€DoØü¹†>™„Vš3P5è¦âÝnÔì/ͼºòÄ´Ý>ùs q´3'Äñ”ÄyoŠÓ>>Pämì"¦½¸w¹= }Ëã7ˆèy-eÇ é¬¤½&ßp‹OIM€X""X]iº?Rð«I"­’ŒÕÂ/jA²Š¶©ž(fmÙŠ‡Ìà p˜¤®Hh¯cD o"¥©Æ¡×N«¡½Ý¨Ùcò·Z&5´ÕN·-5´µ7BÒ¢ C”1à #lí]H î³²‹Ž¶o†ÅѰÇ2V šq]Zé…¾Õ%¬šâDWHÁ"êœtN^ k° mÇè׫8ÚkŠ ÛÇÞŽŠо"×° ? ê¸À?Sx%˜È5ûËEïÏÞ§ç¯5¹…ÓãZBEÑi&B[­¬³ˆï…†¬‰]d³Wªûn%¢vÑñTò ‡O¶ãKVÍn†ÃˆMJyY\%`¤té84)ˆ ¨ Ôâ ¡(4³ƒ‡Öµì½mÝYØUô‰AB.§vzxJ½‚¼™5êä°c{]ÜOûp=úò ®w;$î­±ÜQ"ä² sÖ¹[ˆÈÙE.{Mùð&ôP7±â©žÒ “TǾ¿¬•mפ²oòŠV*o¼2ÂǰZö`LtF‰¤%Ä£è3Ú·Vµ²9L ×…²Æn@Ä@ÉO$ZAŸ`0³¢†!´óªÔzÉóHHdš=Ž([¯>Tj‚Šà¨Î)i Wª¥bQ1éñŒ>î0Pdm좕ÝzîF hrÒ\‚¢MB¹¨{ž&B);5GŠ”ï!q¶å½‘;„\:SöpJ^¡:®’\ê1K[¯PÌ2Ù‘åâo{;*B%Û7Ý9ç4•,ÉËF:³Ç¢"cÔÉcˆ;2Ä[|ûHP$osQ%d~(Îu2T©O2Ùû±ˆµÙØE%;®©¥Þ6‚ „òŠ…²O-ƒéÈ5Ÿ5²í²úÖ‹#J£×¶¼dqJ =úa”óL+šï9/ºò«¿—Lñ”ÿ|¾øöóÅ÷_žäÓïŸ?=Éî§o?;ßÿúéÃÓ÷?ýÛ‡ïßú÷·ïßýç“øüñæWÿéó;€÷çÿxù™ùU/žæ¥…—䔺ô_Ïn~LgO/g\‰öh³öÐ7p^dºùÍÞã(ªiaxý4ª›ÜSn’ž5+ÓÆ¯O²0Ú>Îi›se\8–¿®WÜÓùM%µô„ô¡Ö| ZjG¾@•íÒªôQ¥GÖÖ1”›²xðÒǵo}« ³j î~/oTèPÖkt²¥öàöqîRÑÿœŽô©B+TtƒK”«J›( V¥¨~I¦™müíùý?ü=´Þ¾QœˆÁòOf—»„q^áÿÅ~H’žÅJ9-”÷…JfT "gk  ¿Q/Ó7TÿúåóÛ˧úéã×ñ Áß›ðù÷¦á;ô,Ÿ?¼}?}å?Þ>¿{ûñkñµ¿å×ü毟Þÿ4ÿÚóÓ×}ù¡üº\þ˜~àç·Þ½ÿãÍ??ÿöå×ïþòãó»Ï_¿ûËן~g§¿óùéÇw?¿ûñí×wŸ>.~ú»yúéÝoÊY¸| §'†.ñó'öÝw/þRðv1ûòŠ˜~æ¬Áã{<ÌÓç?¿ÿô·ýôéå­üþáýú¥é}~~úòôüeÔ9ÿ¼)+{^ɦgþ¥‹§£GÚÖ~ùøæß~ûòõÝÏü€Ìdœç¥ÝûáoÏï¾¾ûøËøáÓOj<_ÿzúµ?þúéùÍ—¯oŸ¿þpãª+Þð?}yúHƒñ/öôC|œ\‚4-®m”ÊÅ}”oþyzO¿ÐŸ)ßà·¯C'Rè@w†¥(G:Ÿ//àD!½uÁ›â{3¨Ñ4š Tʪ”²ÄdSñ?òžl!C™Mþñûo&Nnüï·Ïo—Nà«Qf¢>ýM¥?牸&ábvqñÖPÀhæVÅÓ¿L4z* JRÆgM5«>i¸œ_=<¾ºÁÈ..~Ÿðdî7ˆ¨ðŸ*x•´ND¹z(w6;ÔNÝOu`Ê&£¡•›¥dƒ‹×¦‡Û±ªÍÊ.ó#ÝÃVì%è%‘M¦—J; ²ÈOX¼ÜNX¬„wQµ\6вyd-Ç éQԕˆP·ª€ÊP,e¥ßNX\~ûá ¤~BÃRÌÍ$ ƒzŒ¯€Ž5êä±ÅÉWõåd±°°…·”ÖæÎKé-Ó•å~öì˜o3²‹Úo§Ü0ÒáKñ´x(Âwõ+­KßÌ@Žz¨³~i+\¢Å~ @g¶ö"Y{)¤å~RJ$ þð}HÃoFÇ,ùÙþý*Õ[pd‡D¤©”F¾‘ Ö¨ÙãÄñ¼dÙ}pðh¬½,ƒ÷3ý®ˆ ©žû솎¬‘]dL{ìHÓ…ÒÞ¤J‰ë­bšvQþIíœÌ¨îJŽ‚¦s¿´ ´1ˆ]> Ús Ó H†V‘‹ùR&À­Î見ÔùaÃoFÇI¨‰l)é t´’€ˆ"Y0¦6òPt䌚=FbZEǬ$™ÐltQŒæ¤BÔÂcêý¢Y(úxtdì"´Ò.z+ˆŒŠÂ©œ»èÕ¸·K²Ð±ã¨\‚.IÙL=)ÇÝ9¢·Ä2<ÉR@Œ†n–r|›TÓè›Á1+yÖ’AT$‡h\§$å5ðÐ1&¼Õ2Ÿ)VžÆ$t°¬¸–” 1Ò~/BpöŠë!ÆÙE (µkÍRZ*@[ÔzEˆy€÷§§_Y¦ªcOà“‘ÂÈÇ5Ó3G~6_\RØ–9ÝŠà ”€ê]Y ˆÕ‡ß ŒY H58Bø kÑ—Pd¥_o1kÔÉc3E…•'’õ€ÌNÝR5ÜQJèÚB¥ÖS⪃á8Q޽À‘7²‹ ½#§¶¸ŽÑªì,òŽvÖ;vÖg= {O8 %imtÉ5b"¨‰âZ“àƒáÑ¢â2߈h«„ök¢3†<¬†YÈ6ò³Ão†Ç,Ô¦3Ž8߉0$âøæ\ȰFͧ,*Py"“&§G¶ >*%¤³àÂÔNØ`™àqÒâÂÛÝ’µ²(P¸C=Ç BŒèõ%BJ+]wY ×ý#xÍePg¼Ÿ'ˆ”Òºt,ªBlWÀ9µ[žQ#/ÍM»jgÀfœ„ôYÈ´(`c¤ œ;²i É¨—CŽ›+Ï$+¦¦j—;Øé<ÙǼð˜këI¨F²6v‘ºHTLÂ%U²3y´¬[s®/ÖE(Üá—#/„]2BAðè€[™¨qwGÛiµW¸løí !Ë^›×ÀHÓ"Ñ”fAÒµ3¯!Y£fun¯¨>#Çtô±cîü &Ø!ˆ¦È0!CHˆÃðýtÕX+»h ée9øÍÇs'q^lÈ‘"È|W6dh Ýqlæ%Uyì)\VËŽ¨¿Ây á’Œ«jB R¬/¸‡ ߀jÏpÁÑpÄçéÐW_xkÔÉc'ó¡wõ‰¸ÈVÊ삆"_Jë¼7ÂIÅ=BTHõ¸–á­ì¢*¤Û#H´SXŠ  ¥ÝQw }97úmA#•-­ÁÙp9rD·€W™²]SÆ!—! ”…8Q¯`Û¯e¸áð1\# ªAÄ{\ ù‚˜rZ´¯Y£f#{1£³dòÁêBYC8yOÀ«# PÚ±™°ÍÈ.òBíbå£õùµ¼@GÈõ9ÝS˜×ä.ÿf¿œ²9»Ž%:‚ƒB=Ž¡‡ƒ'sJo ¤„vaUaÈ1*°ÐRÙ5;üvt„Èbëë@dçDÖ2—pö5 #cÔÉc…ÙÇHj@eèhtT†–Z4Ö ^Ò—Uœ¨†/›ô+êa­ì¢4t‡R¯FKEð²Ä•/º§,%´†ü² èf¿(½ J•§¼!A†t)17hfàöXJŠcý"z„Ø­³LrC­—×Üð øËPdC èCCp¸&ÙrX!8?¾ª‡3jöزGÃYrh'³òäòÌ”ÒÑ+ëC`–%‡8þɽБµ±‹äÐ7.’3Úùâî:èºîžìŽYt(¶ÇŽJ¢Í3^('E¥Ö±YŠ]IaPN&a\X•â·À½ÄÎ6¿³ðP6Fgýv"†«t|ÊC¬Q³Çäo5°?II¦åñÚC) ¥q›¤5®„ÿ|ú]¤‡Î[XÿK{ˆñ`oí!]¼ˆ/÷¯ŽQ:¿~>Ô½Cõ‡Îùé}‰‡*ÉG¸ùh "œÞ:CÐ/QæºQˆæè-Dç±ô¥‘ŒFè³Ýê÷©ÌXùsjü­ "¾¼õÿ‹-ÃiÚb³]„è¼ða*DçGg‹§ÿ_:D•˜ÅzŠÂSô‘Aů„ÃÍ:D꺑Ká W©E4ñ)UµˆV  ‚UIÑè3¢X…öÿä3á——õ ôõVãÖÊ(ÉxMÑ.ºM ÊbíøVr L¡‰]ÖâW’hîˆà%p_Z=êbãå1Á‹n EeÈùD\µT jÊ4¾™ Cun­>ÏO“AÕ’?‹”–yì·èüd(l|Q¾‘Khzhj~÷P!àÊÆ•À¥å¤›®û?)䜗¦îúê42*pÏ„V/„Ñ­E?2E&Êcò\?*cJN)K ‡Rë4Ø4ûë+-šmvKûÜ$(%×¶Yac4‹cåy"ë²AP®¹¢ÕÓ2ø–7³º*I±NÔ4¤è; éòPÖ  ²NÁyú6ùÇñ‚QÖ26‰Sјðš©e´öO7üõÂ(g<½Áµª¼õ!%ªôC´(¤´îò´Í`­ž‰z¾ü½Ó÷=%E–½:Ψ}NòŒFsJ„þtcÖrþN"aÐaÐÞ_õjKÌÞÆ0©_-RY7HÑÂÓÎÄÁböHµx•X"œ,ßöErmÈi0m|›‡¤…H1AH d¸HïÚ‰ßðª#ázt. â ­ÂJ9ê}óÎUÄÜö6‡™yòö™§éÍ Ê¼‡€ûb­ãe#|žy–­Èß<®šçw ·}ºS@DÏ[©Œ– ä=Ú+“ï1Ë¼Õæƒø9Œ×”n «¥‚Ê(-oi(ÂÂ+ÛÈq6r™ÆXaí¤ø9E%<½ªâðHCŸ’¾öm^4ççÚè‡åð‹rÙåÙdöË[Ô‡»üÊyÁyh~tZ®JkÌøÄT4ÅŸÊ"§M‰Êäý¶1µØô--Xçük$q*ÖáÉ ¦†˜(ª$3&eÖµ¬€ë7EV ³fÛcG¿;-ШøÖ‘ †~ VÑÞ 1ßn#׫´·øò'͘j•;'t•»é”Ð|3'Qjš~ §ð!«ih€ä^ Ú‹ƒ½¦œ½«2òv»#ÇU8¯ÎžÏj…§|'šà.w“±Èì"ŒW:’ouÌåÐÓ¸²:ÄÐØv°L´¿½ÐÑyé¼rè"EÿÑ¢²—V¢ÐKq»¼‡¦p˜«®RL7 ¿½8°ËK”kå›%”±GA[Ët˜d:ó¥Å¦oÛHª×|gYä½h j¨AO##™)X4”ÊòªÈr_zéí6öE¾ƒ÷Â'eŠÎ­¨¢HÒ…Ž„XYy]˜ê6¿ f}°E/IHˆþ‘±f›Àw‘zæ•ôg.‘1‹"ëzCZE>¯ }Ôè›1k"ûk$ªë ¥ˆÝÐgZÒ|d?Z“Q³Ç‰+÷ΚÈi?ÕÏuØ‘F8JÝÍ@a®pQê:ÃtÖDÞ³á¢ÍÈ.šÈrÑnq3„ ©5é²YxIáhÇn´¬ˆ|O05-Ú» ·L*9ùHîý6Å$t’¹Y–¾®½ºY¹ ŒYY5#3øfdÌzÈWîçªáYŠÂ;œÆOZsSÜccFƨÙcÇíZY9ì'û¹ :–Öi4ÎÇ!Q ‚RDÖ{2½´YÙGYµ£ˆA|¥b)Œ› êØo‘‘å’ñV¿tò"@¼´ðËA–®RÞ?µ ·–‚“évcU™QOËŠÈŠ;l}3–‹FHhÄžƒˆ’W©ãycVEªÙ-‹#¥Tò¨*iq¢÷ÇF•4eèRÔùLúbþê|UZŸßÚ³×&ƒo†Æ¬‰ÌÑ)T1H{+Œ• T\š¾|°.Év£NþÄ…U`ÌŠÈÇF‰¡Þ6RªJ[>!:Ó¢›õý¾bñ FvÑC^×|» ?ÐÒ­1Å5L$¼ý›²ò ¿ôÍ~A˜~°¸…‰½:&=Rë³µI‚¦hr –¦4~IЙå×+¬æïóõ¿ƒoÆÅ,†Ì)TAH))H\¥öþ@M’&£fiîU'-äÝ”×A'à”\jK C;’u`œ„÷£l2± ²º-á¢ö¸¨ ?´ } «Bv7Âb"XŒ%¬$WQ¶q*â\f` B»…TÓI™†HÛí4;þf`œ›î`N¬e¶ÃXá㑬WMF½82qFå‰dùãÝÄ×kbŒÇ™—t™º ª`êYý˜3p·ÂÖÈ.òDz½“¨d/i”ý‚’¸ãítV?NçÄ[ýR ¨ó²W8械F«‡I’0¥3Î ‰Þe¢$”— ˜YÙDNfWB¾•e”n38f äÆjœcÓð†D¡ÓÁÈÛš=¦ˆƒQ`U†½ÿÝå‚:xZj* ©WAéPµ¬q’@NûJ 7ÙEùžâ,ggu8&ë2qOx„ò ÝþÍ~9^I]$ÔIáœÑû'Ô*@PTG°N¡&,èö' d^Yž0µmøpÌurWŠÅ+•2—|øÌÙ ,ýÿ+GΨÙcÃ^M*Èv?ÂT§¥›qÇúPv€¨·§mG «ôÁ'^ÙîŽM6vQ@¶Ëk6þŠŠº" §xªÌ>’‚›ž%ßYyå õV·4Äx\YÉnƒ¦€X§GÒºH¡·?­½˜h2è0ŒFk‚&Zw`ã 0yUÿØsäÐ?æ œÇß^ò äÀÆÅRùfˆRRQüž#4Jî­ÇR¥n¶iö—rR®µ(+ kzv€FpÀù¨è½Ókg„ì ¬ö¥JÝlb ä°Ê"} ‚|ãÄ´È|.zS¨ýÜŽA \Å‚3#¬oåk}$.r6ÍþNµÕçLqÔq*R€ˆ×fåLkµ«gÓYý8qòÌ{á"kdùc·*| €è”„OÖGrÞYÔ3¸žÚLYýxBú&¿œFm•,"a¯PæH èþȨ@¦@álщ¶¬ÚÉêÇÑp [’£ºÆ Ý0|2&È]Q?^G!mq|a§6jÓ˜Ô?›f™rƬ|l÷Ó­[ƒœ‘"‘BnH2‰DØÇ#„ ÃCµ.^1²‹îñÙÙ†£F…GŒª¼ÈÍl§&öŒÁgWÅJoó‹æ<‡¾ˆC B› )ZWA&t¥çVo¡µ_DŒ õòŠè1¯4Ü6üv\„æqd+$ôo¥§ÈÕ[šêþ#kÓì¯.y’/Ÿ‡‘ÅÁþGŒ=𵊶üäÓ½ã= ½›lì¢v¼Ræ}ëY\>Jå.!?:éT…é·¬lvÊ'½Wò¢tÝH;>Ré¸vÀ  Û *‡£¾¥¼eCøì0v$fšž+2ž«a*ê ÚaYdÜÁ*ž›m:ùëd…Uuþ>žÇ>;¸ÔHôiˆFA©Û0w.8NúxDäLì¢nìÚ*)¿²Æ–•ÅÉ”µë³º±=›zýòh… Þ”G¦2â,)€‰ç!Y”ƒàϲV'‹KÇÐì@Ý8¾ƒ-Û½]A $Ñx›!pgú߸p&ÍÞRÈìdeã½Hv*ˆ=Š$•"ÌÑ Ç×t-Ãt±*²6v‘5n¿p•‡–‹te£¥üYw­ÒɲÆwø…9/=S|ʰ(ü5¤ÏV%!õ„Kš6Ñ%½zV5fe;¥/²´‡¿³¬±nÆ(¢ÐWwéÀ*›N+Éj¾CÕ˜«Üv"ˆq€å%)™«hh|ÀÈÙEÒ86‡VZÒBü[ÜMD &éÔSµŠÆ+eë·ž x%œveý¢W©Rêaõ‹ÌG2™4¹±~MÏXs‹/ÊôÞ·Þ€‹Q/bC9Œ1"”ÃØÒߘÍ?´D‡±iö—ö,U/»ÏjÆj ‰ â8åDHZ{JV5a õ¶—,f¼_ÓK“…]¤Œ[o¡AÁ£’¼:QÐFšz^¶€8©ÃM íW…S^ mh-Pœ#-ô( í¢i±ì bÌ4HgcÛ(r£oĬaÜpÑ¢Œ6 Id-£úçÏœI³³ë²øîÌÝ}4Û˜3šSCf3ÐÞWÁp&ïîA6ÆÙ…½Û·÷›  ba Hu'E1=Û£'öîeì{;…ÅïΔµ´½ šöG4H+cE°‡ûÊâÖgq¤önÍéOBjlaNÛðÛa1˜kÐuZ/g„J-aZ ”R¾‚.Ψ“Ç–ü½Âß-¦ŽHAPîOy¿·´hm`ÈÆ2·÷<]l3³ ‡÷T×N)Š~•.pÄ…$(Çðï¡3…÷JÐx3Dð"Ê` ܧMM8¯Ýê)Yh¥(JÛÔEÂ*‡·¯ãcæðŽlòÚ8üf|Ì$ÞŽ-ªs5P>6ú,*aõŠDm ƨÙcÌ>žÄ{¯*ðØ)´ØÅ$Å4õâÅLâmv,ên3² ‰÷L ÖS@•´/H ö"hß“¨6Óxßp²ìo´)Š“Ü_ß@KKIm’–ÖŸV”Ô.(ÿ2‹7S"—y¼ÃUy±†á7ƒcæñÖìõx‡,¥°ø¯u¶zœcU“fo]^P•§‘9¼ýN7/5ÌQçvÎÅ!P2Èì+ÞHjY»x§öà ±• WŽR dE,þ¿.¥›ù»)žÆJ_^[aBJ$Õõ ”J[„¯nÉ­phU­`Ìüݦ¹á7ãb&ðæ!ºB 2’ÁeC ÍeWä˜GFÖ¨“Ç'¶ŽŽ™ÂÛ¬ýBSF©$h`ÁD¯´æ9¼{h¿ðFöáð.”¶Ïe:SsÁêj”0Æô,ïžH¼ÛÉu@óä²(ÛpIþqm/œÆ@ qÑЉV«Þ±®0’)¼ËÛ2öflÌ Þ–=û¬ŸíI4ËJP#´{âŒQ'ͤ:[y"™ÃÛLÉht¤—Á ÞQJg¬×xgoÛ!¡æìÂâmÚqQkȧÏêDûir²cBY¼]{D¬o“.Ê4÷ÂP&{€ò‹&l ¢}*"7— 0³xÛúqcfñ¾RÎØ6üftÌ<Þ¡‰Ç ³Zææ;•ÀƒÖZ?ôHtdš=NyUUžÈDä}tàhP{ìé_„<´åIëê÷1—·ë rÀ[Ù‡Î[ÞhùÖ%Gý"IÑBׇÎ[Ýs%£æ“‹®Ä~ïˆ8uÔ`u³2A1ˆh§þ§·­S\M¤Þ®‘š‘5`3JN¤ÞEì*")D’‘œÐQÈ'ÑdÔ‹ËadzÚ3­wY.rH†U>sƒGœ…ÏêNÄä‡'Øœ]ˆ½S»fŠ¡ù¤¼¸´¶^$o:–9NÄÞí UÑ@ë§ "s§ˆWk‘Û£“kE–F{«„u‹üzâõ®ŸoeZïÔxgÍ¿3­7OoQÏfj«‚‡!1³—ôGGÖ¨ÙcÇi;f^ï½wªÚ|Z Os: ÁÇLƒÈÓz÷8{dmìÂê½ÒF}s=qÂ9+Ë6j Â|«; ïrg7¢õ‰å¹3.²6ÍþZÒ1£ÎÖ‡"ãhv"}êO­€zcõÄëÍ)xíÅëÍÙ…×[®µÞ #E1êR%+:ÈÜžðjoÙÎØˆþÏO$óíRÑÈt€æAÄUÌò¦ ø íé‰Û›‰Aí[ãFnøíønoWhߌF–²WIÁtž¥Iµ²Œ?!Y›f5+ vÉF-…×Éâ’ÝçM¨wÈdvï>¬•]ø½};Š(„³2”´5IÖöôË‚ì YÐAÀƒ¸±$¤LÐa¦˜rt¤gŠ .é—y×8¾¹¬,ߺõ¼‘¾m,VÚí*‘¢uuVp"5×=Y›Nþ:Éo\Ôr‡Ò| eÕÊh7¸DÉ«÷†¹ˆÓ·.ŠSS…aÍìÂö½"Ò|»|Š!¬·%Û·ƒðMŒçµ€]ؾC³ŽàHé¤PŠ^Yqd@i•ôЊÙé¿‚6Noèp‹º‰îû Û·mÍ­¹áÐ1ø"?¹‰¼SB´êmQ!Ðÿ*†3iövŠ7ªO#É"Ž>ÁÆ@G‚ ©ßÉ|ß=òjÞÈ.„ßwĸ’NJ*S"#eÕÊö,nÌ„ßw >E´|Œ3%2Їƒ;àÔу‡bz@“4u.;d2ã·f7~»VíinøíȘ ¿[âFµb#Œ¦ì>´?›Nþ*ɱNd¾oÅd¬;`c w­S²ƒË\*)0·Ô™îûxf[ÖÄ.dß¡¨€ÛzÞè@nKs¬@K«©kKu¦ûíǨèí 6Ê¢0‰òk0ÈBFÜˆÓæiÀúpᵤ•@›zÖÂïæ„š¾£¾Â=^+• ¨ ×Bª!²?ã7kÓì/n™ç‘4[³GùŽ—™zÎÁát¼BøŽ—žfMìÂøÝ‹ lBÍpÉY㢄=oaÀ´¤šÏ“ J}¯é½i{„’ ­7iL~¦mG™Å)#H¿MÆýÚäδ߭«œÛaÑf½”åi(RF“Àìœ ê‹¬M³¿:7,íX©*rݽUI¹!¦ƒB>X EîFDˆ¿ì·QP¨)Ü Y ¢5eÜ@4üVžoí8(‡'Šóõ«¨.^¢ù‹•®,A=‡ªUCé¥LsâOçè $¥ÎÖõçû È*,ƒ7ßzQ²ÿgj÷/íÏ !?oÀßBïÖ ï´¹xÞZlá®0ñ•«3 Ùõ ,¸ÂÁÃ6óaé#ƒµè QR)€ªò* g­Œ‰^¸hŽäŸm°iö—6—õ»ÍbmŸY¢i›UF &&tÔÆÅ©$¨Ñ£m"ñxåÍ4 ¾åÕœ ™?}ÿöëÓ?ÄLÈâ¤BЩ\¢]˜npÑ]/SÂDýîëÓï_7¢u‰;¤Ø<"Úß(ÁWš2…\©‘Î+Œ«½°ÉWc˜Êˆ¸ó4ÉÓf „¥`zIe‚¥úw>}ñÛß;}ßGW–?TFirHú é1âx—>üYþý/7Ù› ®'§¥f½Ð2¬ÙÝ·½®×ïm ³“úÜX£I´7@\*¤–fÒ—H”ÉC'íÕ!ó*‘m0ÖŨMÉ’ÒFŶu²~=³î&ø"í‡CÞ•q¸üà™çV[ªö6†™yru›X7ˆlÚ‡4DÂÜ \šš© ©Î°¾}â]3Ï<ŽÕ}û˜8Û6Vg¸4¶äÅÛ0ñÖëmW;dç6§LsO_B[8’c)PóËÛ‡û&£º63™ áÜÈó{J7*”m)⬒ã{„ö¤?°èp¾¦—uÈØ¢\>v¯obSÇ£Çß~A½aÏÐ`Qôu˜+Êp¬¾Óf›¾íS¡&b}[\>%(«[Ýyâ•›ë“"ML'}o2ç'«!Ïö_R‹:¼.­XÑ&ˆEè'GJè}ªÖž6ÝX¾AË®gò¤ù_!JÔ¢G?i)T®Êò=_FìÊAÖ`d—-Ç,®ngsí5âš’6ÍòîÖu¾óŽרÕnsË+áT*‰2¼òÐO kG­ŽOR½Ìúí\FpÙé<HT—Ñ"<Ï;Ný¬>ß*\\m¼m»¹B\[,“Ùlí ÎEƒ²ö˜ƒÕ¶u–ñj«œXß°˜µ×Z ñ.‹ÄV ¼ Œ; y#»h­®i ÞÑd²(Ô )`Ët[^²ÒêšõM^…”* ËvÀ@@¥}¤ L—¼‰Bšê¿@¹¯YpëgÕP¿ÁÌ:«×kß Š“ÊêÂÚuÊí†âÚ¼%¬ÝnÔìpU½ã%‹¬î&y°Š7‘&®¶^…!Ê TˆõXö$±º«þtƒ]Vå*çõmøÍ ™ŠêçÞ:ëTÇv—¬°jW¥oóË¡TQ™‚|,(:$õHA˜4E/¼szê©.^æÀYbu½Fîôý¬…pMê aøÍÈ8I¬^уY!ëh‰X‡¶¾ö ‘3jvØqçìYe5íG彊;6&‘@>>$°¨$ë/YfuÏÂî6#»è¬ÚÕ#Λ@] ‰âߢ›8_cG§;‚cÖY½#h4(ԌޗÜVѾ–ôþਥG£9â6‹úÿ´8»Í:«ëuQó÷ý•‚ÄÆá7ƒcÖYåȪ@”5Ҁ$27¹FCŠŽœQ'5Óò’5V9èÙåŒÑ²§#J*‘¼º"±ÊIyívÄÈÙØEaµý€Ñ¡MTé‚=BI§CÇT:««®i«Þ敊ÂJ§”6©GŠOWB¶ˆs=‰ gš´u]vUduUF`$««¶A";øfHÌòªWŠ*'yW¥fÐg²µéæ±§‹u›NÞâ0•Sv4Sš}$ âd$Y;U&;ë—PYXõø ÎÀ.¢ªkÊ(7Á†s4+TL¥Ô´ÒBë{Kª¶{… u^z÷ÇtX ) ~d=V’ §ûƒ°vq¦ŸU™- ª^«Ok|3f9Õ+RÓëÈ£õTí&H ë^Ãe gÔìoªSELRªš!ðÚ-H]\R7 º5º NRª\éón˜ÈZÙGJ5´gÏÎ9‘’¼È2¡2© ýû:Ö(ovL+Ä„2•Øh…JÒ<ŒJ‡ƒ§\¥ŠÃ=ô¯™Eÿí$¤ÊÉGžõ°qðÍØxQmÆG\Þ9Àt2"`ot“Q/>‡z¸˜5Tw”š^¿Ó–R4¨DíéÕæ2:K¨îÉÀØfd Õݨ›/((À²Î˜ò:ŠõQWO¿JÈ­Yt„Ê´)¢á`¤PޏŽÒ Òaciµf!Ó™5T«ac–PåJcÇÞ Y@5²7ãõ”Ò3!£m¦jx ÀÈ5{ì2yPõ‰(Ž{—"«iâzi‡é½;ÍܹdýÔãƒFÞÄ.ò©¶=¢ „ñ Î9ƒ¤e&6îY,ùÔæKö˜iõT),Mû‡Ðô’i„|ºgÑYQößNs§õ™­{ž×8t&4ˆ6-º©È£0Íú­—>­ÑaŒš=6 ûdSwSzÁÇÉäoÿB­¥õN¥ÁAù1EFÉ «¦î*šºÝÄ.ª©q•Ð:p´8ègAЮL š›®§ŠTS×orJ:úAJa@¯¡9ÿPÆEKAÆË¢‹>DJY‡Ñ(I‰Yæ‚Õ´eªèWT9KE ÉT{•жaøí¥ÜL½*˜z¶N¾Y¢TVhDI9ª6œ?[lšý œ–­u¹þHHÄ€OÑÆ2ÚÖ{*'½T½¯ôv»¦ÊemßðAËŠ¦˜¿(ä–QhúbWY@Ž5ì[܂ړ ²¼T÷A WêÀ”¾xa“L©ÑÒ#|ºÌœ³\*# èyFìÆ¡Ñ›+ÔUô1NÑ&”¢Õ$Ú)± ‰œQ³Çëd4§ï³'í*ÞØg¼Ñ¸ÔðŒn¤Rw»Úna¡Ô5É‚›€#˜Œ‡Ev‰ûõtè˜3g™Ô5‘Ô›œÒ~ )IRžr§Ð0ê’"r©¥‘TÃň œ‰ì tÛ𠈘 9Ã…«UðÑÑ|<ØÂ’ ˜ýÀÖ–&£f'…ÞÚHê>Ô5¼u ¼ßF=D²žð†¹‚ΩÛ^ ÈÙE"Õ¬RXß!#î’eH¤ì«70B µõD`T`ëôF–->„ŒÆ&ÚYrúêpÕ³‚ŒGet”«Ñ8ôvT„4*W.YƒŸà“P0¯9›fo!ÿQçBɲ¨Ç‰†r¶£´à¸V¨?åT£Y¶ØÝÎY»h¢¶¢Jèvpö¢ÂÙ@ï¼í£‹$jëi€B¯¢;'ÌNQ¤h\|¤®Uí4ÏÓH‘Z¤áH®ÒÓ<5Äc¬mŸ+Ò“*'~˜¨˜ù«Tà^ YT ð·@2âúöϧ_)åËxÓ”ùãr ®­¸3~gÐ(–ξ5¯»³ªok®üêïç‹0¯¸ó>_|ûùâû/òé÷ÏŸž¿ŽdøÓÇ·ÈŸïýôáéûŸþíÃ÷ï?ýûÛ÷ïþóI|þø ó«¿ÿôù¹?ÿÇËÏÌ/{ñ8/-¼ô 3p—þk)W“ÑËjøü™óÙk@‡@(^ÃÆW{OJÄè‘G=ê&÷Ð=Œ³2müú, ç÷’‡z¾|Ä…gùëzÅ?_UaðÉ=ð0Ò‡Zs2ès}ªcß ÊviUú¨(‘KçyÂ7)±›ô —>®}ë[9˜U„‡p“WŸ|é¹QÖ°‚ô¶4ÁºÓЗ–J‚è(Y•˜rU7Dí„×Þ(‚MòÓ‘ÚlãoÏïÿáïŸßþôîíûÿ…ÿ<}üjcð£ÿÓ…ÙåVaœWec#T΂ ¥u((+Ž­¤ƒ$ÓYþ‰?†ßŒS üË;ÿúåóÛ˧úéã×ñ à›ðù÷¦á;ô,Ÿ?¼}?}å?Þ>¿{ûñkñµ¿å÷ü毟Þÿ4ÿÚóÓ×}ù¡üº\þ˜~àç·Þ½ÿãÍ??ÿöå×ïþòãó»Ï_¿ûËן~g §¿óùéÇw?¿ûñí×wŸ>.~ú»yúéÝo.¦áâ!œ<ÏØwß½øûßÿ.\L¿ü€¢²…¢ï÷x”§Ï~ÿéoÿúéÓË;ùýÃû7ô;?Òßúüüôåéù?ʘsþyƒJ·˜+/O^ɦGþ¥‹‡£GÚ×~ùøæß~ûòõÝÏü€´dœç¥ÝûáoÏï¾¾ûøËøáÓOl<_ÿzúµ?þúéùÍ—¯oŸ¿þpã¢+^ð?}yúHƒñïõôC|¤’ÅTž¢RÊ;c:!¾úóôž~¡?S¾Ào_§'ŽÛò?_Ý–¢úè|¼€“‡:yð¦øÞ jN £]*ày>w!&›Šoü‘7eÒ©äê¿ÿfâäÆÿ~ûüvé¾j¦ ¨o¿EéÏy®‰µ˜Ý¨r¼5”³›¹'ñô/°à@¥ÂÎ࣭ÖäœÔZâ¨wm{n0³‹^‹_c<™û-R¨0&­ªH«É/#¤WµÌo@Þç ºÖn>jÙ''#ê*„ òššÜ¯@¡ÍÈ.³C.ªûomu”–J[ô;¡͛гß)Ëù¨fz¨1˸”Š2…œ·B¥{÷®xM‰²ˆÆ»zIÉÉe¯!ô|V¥ìæo{¾p«mìí/óÑ-Êz§ä†Î²WʆeÎûâY£NÛ8šê‹Éz>©^=¿ .f´V!èÁ/¤K¾^Ìšõ|œíŒ¼•]}š)*G-)Ý´¦l¥\’9;ÞÐeEÝÌ2j«…µÚ%­„¶ÂÅ g÷$þÉ ÑaM—Ëo’ô©V,dEŸ³Ó G½³¢ä ©AõFĨå¤{¥Œ°ÈÙ4»›˜í*Ëù„}ªYëx"KcB4:6È~Ë úÔi’÷ÃDÖÆ>‚>íÑ¢ÎwŒI–à¡-.mÇ®,èÓ,ê¤ cs¡¢œ‚p*îOήƒ&ô5N Ð[‹R«r>ÕËñI̧B‰{3&NZ>- Jutž¶ ¬{%½mµã¡ È5;ì VžG–ò‰uÔÙƒD´~°’V«Ž¦^È•¥|ì~­ Fv‘òqÍ l£§p7&ã‹Â'c=šfz)e)×Ì":‚ „ÖŽ.ŠŒJ,wÇE£ÐGñîÀ‰,£º¬çÊJ>œxÎù±ÙÃ†Þ ‹“ŠWDQÍV)d0J‡,xå¥k5ã¡4cÓÉ]M³Ž×ðÑÇR†’}±m¥"éêµ\YÄGÖ Ü y#»¨ø¤;Ncæ“ñEe<”Œñ¾#(fŸv¬·Ú'cY¥fSn• +øg÷pú)`SÇ™N^Vüg%ŸTm³ÉB>¡M»‚|3,f%6•¯AŽÂÊFOrWцF;‰‹¬Q'‡ SõŸ¥|â±Ò#ŸËv0N JSÊÍ,æ“:äм‘]}ìÊuÜ­n\Š\3óÚÞz>ª=RtZç+÷ìµ§÷&Ãj~ô`TL.MWÑSÎæ–§úYÑÇWϯ² O›P8;öfPÌ‚>Mzè(ñVN¢Wè|ÇŠ¬Q³¿i\½Ëßž}ÌÁ)4¥íÙlCÁnÖ'&Zœ}Ò~•ÿVöQô‘‹Vù ¸è™T’²% ¿¯ca íŽ90ÌÇXÒÎk?•Ýp6 Ú¢·‚¦Š¾ì˜}R'IŸÆ‘}3:N’>œ‚F‰\Ž!t–¿rÖ·ÚñXxdŒzq8ԩ沞;ºHÇ ù’Òˆ +YÏ\Fg=³%q£‘]ô|Rû¥­¡ð \$EÒ©­Ðô]ýrwùå¼H…%4ª T.ËÝÿæ…²XŠNhýeÁ¤EWâ¤çS•HÈz>Q#3ôfXÌr>¶©FÇ‚¢&Ò×!{åÛáù±'ŒŒQ³ÃS³ *¦$\4i°. çsé’µ|ŽW8c-ì"åÓ¬‘8ªH˜.S)§MSF(‚ÔÕ-Ê2ÛÏ´šÎLË‹$Š È×DZ‰02„Çç{ ´ÏV-Îö³–O]^µqšU®h»} "âxÆ(Äd¼ò¦ùêç¡7ÑœQ³Ã†áE…–ÏÁ”Ä>ЇËÁaR{EÌGÏ5ÇÛØEÍÇ´êÞŒa"*BÄ™ÆÂ7]Ô|–˜x«[ÑxôŽ—!"å<"˜äWÉ]íb‡ê‹ðÒ„!84 º…Xxô©“ù@ΧṀz{!7Ä|\%º¦ÌÝ+=€ :x$$65;ÆXç6€œÏ±|sùì_Eeý }D«pfÃhŽg¹bd=Ÿf–vˆ:XBвù)z!éÏö–ó Í è‘!ÉäË‚E|‘vÒXçв’æhíI=Pó‰ŒjŒWçGÅ»}¯ß?ôôi^$OYð"*újLdš¦M€‰Ã^*¸U¸qΜàFQ9Bƒ•>y#»(úè³;§­ðA¸N¨‹4S)/|Ôç̹]D}š½ Ê-A!:³vXôà@Q‚ê À$Ê,ª…³ªÏªNùéÛIŽFµ‘-±£7à"D}¸{–ikAÈTÁ í+ [âlšÝ¥yWgŸƒ OÚ§2§Š8Jzseã`<$=s%}ì~}òFv‘ôi:£ æ>tT» ú,›vnöKª€²‘ÑÚŒ‹û¶[g¥Hbi²hB¦Åâ§F•ˆ`’ôIl'tÓØÛ1’>±Ñe#‚3Á’¨ƒy¨È[5»¬¹ ²>ÇÊáŽÁh‘ä·)K”òx^ÕGïwÑÒfcYŸVvó1Ú(4MŒ¢áÏQ¤i1u¼xΪ>±Yæ,&'íêe7³WKŒˆÌü!šbµ$—¤œPõqŒRd}8$j¼¡êÓ‚‰|RzP†b2OÉHDäl:¹ë$S5}ÂÁqb„8_B¦#·ÉsGŠõ鈼‘]T}d«”ö˜åS£½`†P Å/÷t+žwvl¥Æùa*Ü|Á¦ÇuûÕÉœë%;¤˜/‚—Át}˜$-XþÆ·mìL þ<[Ü‘úëFÎT‘ν†3EÖ¨ÙaŠ0º$Ö9QkJiiÞ€nÞ° ˜Øì~GPäŒì"í£›oŸSHHžËVaÄ”5™Þâ>÷`¢_äÎʃ¯æEÇD7寄À´ö´ökò>õö‰¬ï¹v’ÆÁ·£"ô}¸£Í*þàv7g© õ”dEz ÈuòWåÓ‚êãðv ß´x«ÁçÕ 5Xçuä~\ݾý*r8»Hü´ßG ó!Qþ]€‡5õÉôÖøi¿<ŠêA_¨ü(°xxw&*EiZÂý/n<äò<1‹üÔIJÈOjS€äo€Ä¨Yµ¡jé‹£ÞÑÌ’±BÕJðøÐzΨÙ_;j^ãçàÓDëÀU,M˜Ì0ˆe‰†·b¿zÖÈ.?¾¹ ÇQ:á½ EDe2A¶Œ=¯žÁ„ÔªæFyg>Õ(Ir‚¾±¿È-в…4<AOs±ô ò“ê5Šà?Š\ÊÚ8øvLc‘än{ªµ/\E:‚~öX¥Í+HžY£f‡õhkoæ$ôSo~¼ÌíqF€ 4·B*àN÷ϧßÙEçgE”æ¿T~ŽWùé¥sˆÊ}¼;Tå'ôj:VæÇÜïå£U~(®Åá¨ñ†PÓ¢,u%&ge~ì 2?u‘Ÿ ƒÐ:ž±ÊàùœÛs²òŸÎD~âÿ"?‹‡pÒ§·Dl³È=«j~˜ÊO\L•ÿRù¹¨@ù495@CQIÊ)6¨üHwMæ§Ôäy•2?éì×XËIEÞÙ\2'JÀ, cRIPŠ¡þ…‰Î\“úqn_~î;»¨¹¬«À|uVjQ»°NDé‹kÚ¬D2¡çÝt–s1ËâÌ Ž¡”/É¢b'ÄvÈG’è„D»èKÿ­—´ïÒönœÂ¥rC ÈÍjÚ¸Öô\’¬sµdE—À’×4Ž¿=ËΚ.¬¼L¹`Î-Û»¥1 æˆ^·æûýÑ V|¶¨Ž¨7jNÂ. í‚“÷¦YLŠ–¾pÒÛú dVv‘窸‡Á$ofi—•Rï›ÑL}Éé >ú¢tÑtì•Îâ.v•ã6Ç8áŒ/ñ\HJ+óHu— LQ*¼ñCt |Vîò¾:«»¨:Hfy—p•Sgûè›12ë»$¶s»ŠFè$ð4¿ô½){,?mƒU³Ï‰viFi»Ñ3ø³ DF„¢w;hʬƒÑÑñ*/û*F¶ÙEæe_çFò…S¦ÄG At´=ů²Î‹^eï¾Ñ1'…6îâN>‚™0ø‡õÖÊâpþ ~H¯K½¸+b/檬AÃð›2«½¤¶(RCß2ÏFe…–)ËVÛ`Õì3½œ±Z×3)¾ìTîXÚÜѺíNXúzaOV|á Ü !Y#»(¾„UɨóQƒHK—’Q„ÿ"Ò îØ“%_¤×èjoõÌPp,KåT0 $€Hh-yLšD¤ø—QJV}Ñõ2ë¾—‡ß ‘Yù%±uU0‚n³‡ö4Y‚ÚZùòlΨ“ÇZŽ*Õɳü‹?!“§œŽ1K«“ÒýÃÐ¥íwÉZÙEÆ/{·œÙQFSçIró`R©cMxV€‰vMRýfÏ@@iíEÿ`ÉÙ‡52‡Î mM„>½Y—ÔWYÆ¦Š‘YæºÀtÃø›12ËÀÝ’‡öÒ(S"ôW¬o³êä´‘yª<”,c>ŒT’ÈG£ÊPÞZ#³ŒbøÓö‹#9#»ˆÁÈ{âH°vÑ>Z §à´Õ™Ð‘É6 ¬ëdÝêAdˆŠ0}Tþ¡ªŒšèdb@vOΪ"Œå™œ­aÕX Ø ’Y‡:-pd Žœ5´bbTdo ¯!”d­šVù'&q˜óëÒ£P¤0´ýåòNo˜¢ñIF3&Œ™}äaT¸'èR–Òk©ÊCÉŠ §;r9N1é®M j–²+%(zV™qŽ•í€*J@¤YRL 1PȪÏó}­«*1 lËI%&¹±—2áp.Ió²FÖÝ£%cÕ‹×atšÑEˆùðòà \+8(‹ƒN âµb\—Ë›º‰}”bÒwÛ §Ö”q—ÑÂi•zVA*FÝ’R!uð…c÷‰N\ÝDzZ€:äàËsÉ,ã9Y©ò¹åÇߌY0F5¦Ü’ŒŒ­!Ц0îXɘ«fŸ]NÕªÏD™Ñ™Ã €(MAk;XÚeR²NU‘•c¸v ýêX+»¨Ç¨;N&£ÕBEBÊâŽ#'Q§ŽÚÔY?æð!L(…q@l%Ýw7„R"hÃG/”QKŒL¹Àµzî•d<›æ6߀‘F7¥[Jm “M WR2ÂÙŸÝbÓì¯q0^­…ˆŒ·ûõh;-ÝŒ<4…CPvÀu$exÒXÊbA&£y³£´V“}ddVyp³ñWµµÐoN™BÑ¡=‚BÙïzòVd!™åÂÍŽ9iè•:¬cT™ùô¡mÚ.z'ýÜ œ|ð„I¸è¬ C @vr¥MJ2‰ÑˆÏb2–O²ÛÆß^C9™ÈŽËåÌgÚéteû^Ò²=´U{»Q³Ç”Ÿ2Å?YQF3ø³ >â×LƒvAh bV•kZwÕ”i0²‹¤L0«Ì>·!‰ö¬O¥ü ºå½2=I, *åi”·Y+J¨œ±Ó¬#”÷ûÐLÂik–Z[.åªìê ÷ȱ%G«Ó8~Bz3òÚ_50‰½òÑ ‰% @í‹§7˜`@’±² ϸ_žÙmÀ’@KÈ•”>£Îr])"3Ñø]dE”g eÊcÖÑM úawÙ JO(míàÓy¿à?ËLãñ Óx³^ 7üfÌL㺑ü,¢é‘Â÷ÁðO›×A~ÆY5ûì2Onå™d¦ñ½n³ëðc=.ߣr;¹ ¡~©ÆuŠHÖÊ.\ãõß&!—.²ÒD ˆOdjOÇHLï FÑ[¼ §‚òxwŒ´Â|2úÒ2‘\XpÆdªqZfÕ|.s›ÆH’3Hf®ñÐ’ ¨t>º˜åŠŤ¯!Ýf­:ùœ‹ä}•—.³ïukÃIDa¬Œm¾ak2Ù¸ëÂÉÙ…k\Ý#|h¤%@¼äÑ ¬½¹ÆïRtÄë±Ö–´g V§÷ø°‹FA)JríƒÅIºŒS2Õ8ÇïíÇ+×ÚMÃoFÈÌ4nÛÒk#@ìbÈz”†½Ö3Öª“Ϲg¦ ™h|¯šñ:öÐÄÔ£ší³”GòLã¶KÉZÙ…jÜ܃$– 2œKÑ£ýýÌÁ»ÞTãn4wHÖàÌÉG[x¦(¶‚Lû™² N¼Œ¥­Ô-d£2×8E’ÕÊñÌ5Îß•4Ž¿%'ªñ6Y/!Z 1nþ KØ ’œQ³Ç)·-TžÈÄ3nŽ–Ð&øñ€ŸDð£¨:wîÄ3ÞEA›7³ÏøJõø˜Ô“ª(³Æ™¶¤ø¡c$9ÑŒ«ÑÜqŽ`M œ¼¨ýTd­¦?~NÊD8E)‡ÏB{aA€6ñŒ3-nϸk%ˆä Ø ”Íxhcè€DQ}f¬z ñ$kÕ‹ÓP<©Þ­e’ñ½(~˜ 'qB¦ç„›TÛêÜ.õ¸¼á¬ìÃ4>ú{î8Œé‚j|ô"FÛõò&S§{Î%AÅ‘tÉ¢KÀKÙ‚E¾·ƒ‹P#´ ¢ŸÌ5n8]©ŠV²‡ ¿&3×8ÏYY/¸¡uâ#aÑà’0ä5\Þ°VÍ>ãò¦ZLž¹Æi›;üŠ[ASD£“Å"abš3×8!y—;nÎÌ.dãn´wHaÉ„,É"„ž]Q\ãnÉñ¶áòÞh!ƒ)ÓVè”â7ÜÒ@Ã:Áz´“—u&™lÜ3·zªÆãÚ\Ço@I£ rã-—É YÚ¥!8+”W­šµ½â欚}Ƶ¾d(âРytÏ y#"Mkú4E¡¢ õë›L9Nsh¿¼»ÑÌ.¬ã 7¥prsƒJPr¡5ê¨3ã`GœÌ´ãzL‹ƒ×Û=sQèË¢rƒòÐôÀ´»Þ7M@-Ãâà4´;Ò²j9óŽ3Eå §p† 'ÛÆß^UÞq7Fî Ú#¡óD~ŒJ®U â¡ÛœQ³Ë_˼ㆹ!Ù&q›–ôAÂy£˜ÎDÐŽïšq7Ù…v|EOûvú0‚ ÚJaÜFÙ![«ÚÀ‹…U¾¬•TôêbPîb4mD2AS$'ÑC®ÝÁ*ßÔ‰Ñ@;ÞÎ‹Æ ß€Þ}x[(ȼ”ÖRD뤠Üë5ðZ°FÍCvÁ3¬ÇeÊÇàc€ÞNÄyjÓÕ|Ý@O¶µkeÚqsD‚ù Úqv cìÉ« Þñ™ðÛ©Pí_òŽS\é…#è}˜®ƒP¨ÓDˆâÔaIlcÎïTŠ>hðpLàµH-¬‘ÞS*’¤ƒ4¡B3ûù#Ñ‘5jvÙæ ³*騕*í]À1% AR†sA‹ãŒ”Š 8Ç9#»PŽËvÆq­.ôtc%’’Æ÷f—íJš0Ú½EéÏH!C^R°¢—ØZè²Npzѱ9ÇM/PŽÇÑ4’¢qãoÇGŽó݈5$¢¸•¶£`Ü@0El©UÂû‘ðÈ5{¬3]Lõ‰I¡™>X”ÁS4¦a·qIlÿ<é¸Ý±ò§ÍÈ.¤ãþŽ+ ñ¢†PÔÓEÓ•S×Ê¢v³Ô„ ‚‚ƒâÔ@hH«Õ¾–G>#TB+–„0¹\T”dÒq3†zô˜YÇyJ‹¶ñðÑÆ‚…év(Šýº.R4!’ZÙGâ#kÔÉc‡6ÃÕNƒùbnæ>CLô­`šÈI‘?<ç¸fj7÷“¬alìB9nï@Ê1„öw¼o1õ¬ŠÌ”ã+Ú·;æ@÷VRŽÓºÀUT°û£9#“Б’Œà¥ \ç²M;sŽSö\'&é¸å[›†o@Çà õò ê0á•´Õ؆ Áô+ Ecš=Ί #|’,)ãNèHù*:ûðëeã™qœvߤ‘Œ]Çik?wLòØV—è…2漺¡ 㸽Cî09BJÔ ˆOGê:T: ^‡³ü´ho˔㚹˜ã¸ã+|Ú†ßŽŽ™p| Mð¢ðÉ¡Ö µº™úü¡ðÈurY!xÔõДãêhxt^ ¯¬Fí…1ôryÎq3ªš œ•]XÇÃ=8ž¾`s°PÊÙÞ´ãáM/“È ÚñrçÒj½vêþ`ˆ”¤8úõ–¢H6¸ÅxÇsyÇyuÙá 2‚Û¾!…ñÞS$1mi=°R¼É¨Ùc^¬ã”àìÓzX<J‡²(}GeÑÐŽ§QvH°Y+»ðŽË;´¯@ å/xÇQC±åy‘`âqu˜#Eø´™í”(Z >¬æM¾ºŽ º£¡Í&Ñb\à#ˆÇM²u"o !Ùá·ã#—b“¨—óFDÚ’Ì´Òk÷ JY£f'Aâ¥!+¥èC®ÖGó™òg:(Ôí^‚/ÅÊ0xDÔ´H})„ÕIP'¯ÉºŸƒf‰íТO˜Æ1)Ÿ¬úåS®à‡ë°ðİNÙÜÚ[édä%´¿ŠÝÚµòª­jPÓìøÓ9NŒPL¥àJºS ™ª£V ô|kfÉàŒ襟<è´îc}<Nï1ˆ”ÎÎ'ñèõ åÓY+x˘èÒÕyÝÙ®`ÁT^ª9¯=ZÅÆÈ@”Ì’ˆ ;B†)%¦ŸX™Àûõ»4Ø4ûKûŒZŘ6CŠþÍZFƈ Z+”õK­³;FÆ$æô?nËk}Ë»92úþí×§C&zIR`/C¸tyæ`pÎä똫ß}}úýëÇ´Òîc&ˆž"$ÀA”‚qçe%Õ?_XEWÓÚFmLO»±”4&Ú~õò2Ð`Éš¿ûóé‹ßþàéû>ºó¥Ú@Șéèa }œ_}ÿËmæúHèd%%ZH_ùåL»o¯¥ÈcíÖews˜]Õz-W\7ÉHþ@3u´}Rá/¡`Z-çÜK÷ÏÝ†Í F25+ «4z4ÁiM“ dºä®Ø°dè¯Aãê° gs–b‘Á& ¹<˜½oºQÞ< h 3åêqûªAÚ8¨Òi‚CZp/MÕKþðú yúE¦&`û˜´¦H[ Ó¦hçÞº¸ôj×í¼÷æ”jï£Ò‚"{2ÄE,‚=ÕêaU ™9ÆX9T¦˜ÚiŠÕìYàO!u@-¬“ÜiÆ)ÅùYÉa˜üRÚz•ÎÝò eF§»üʉBÁqtžøæ³|jBŸÂQŠA5r]ã%e’fe²í–)´Yõ-W°£\»8klÒ/ãÉE+R˜ ¡‰"âú$Lå¯lª Ïϧ3øÝ™MGFÚ Zg¢\þõÌÌ0¢!zåèéÆ_þf½‰pÆW÷h2Ö³ Í…ôü]œÔÂy_'€9é.rô7[ÔEÏ®tY\;äÖ¸®8¼§àWw<¼ÏÀVÊþ®ù6mH°þ(C¨åý#%ž¢NÉ͸à$Åj ŸB…‰ €G”4®¥ÈJú >ÓøøÑ·ŸØ‡L¿Ì]®ª \§”àÓ!€ñ¸ØtR¿Å˜o;À†°UGÊç˜púÇ轞"?Pª(¼4n±!j]°ø¿¡ð™þúÓ§ß¾ü÷¿ûòôþçúšÖL^óZùû¿þ잤<ýsÌ‹âM ™c˜¿øú·Oï>¾yþôÛÇŸæ¯~x÷õéùý;úÏ;íÛú<}á§·_~}ûüL(˜×åˉ þäÛçÿõüö§wO_ €–—>_‚´éßúü$åEqkîügÔÅÏürú³ÿç㻯ôX~ûòôü2ìéÿýø¾<ý\†÷Âz¼èúùóËÏüã—¯Ÿ>ûéwð5úÉ0ž[ñòÄñÝñÇOï?=¿ùûÿù?ÿŸ’²ø©O?ÿüå)Í€"ÝÆI4~£P²j¡U…<öaðÈ[ÙE&\-KØn‘à@U CAf¤c‚ÌDW·Ê ¸Ù-tDX] kŸ‹ÑÓ#K~+ð¤).É7%Ñ; U–—Y#<1<˜Y#œ"ȶ ›5`3>f‘pÛ`×Ó =ñ‘ ëìk¸«aš]FIa«c’ .ß½ ?žö= Oc“°>11ä$Þ嶆7³“L¸]ÿlÀIK‰6ý¡Kœ”Æ…ŽH9é„Ç;Âȳ”€/w¯Ð«é¸ÕÖh¥BHeÍ–…Ï$c=–œtÂù[’F 6cåI'üªPx—4ºz$pIÑæ[My,X2F½ø²ØUå¡d™p»ŸLx%“•Pî5Ò (p§¼–¹ØÎ:á¦Ç oepyGºí(òò2–8iQLCGæ·¬n–䘷gÛÚ ´.•Ìê*Ðõ*](xu•´Ÿ:½¸8Íá²^\2i„ëÖ|›~3DfpÇsT°(*ŠÛ¼¢‘l3R?“fo]f”ª> …·+f½œÆz׎6=ŠÒ„󊹭™ÄÁêîWõÚÙE|…Wýö¢§-°TÄZ‚¾„!e'²:¸¿ã¢ÞÆ•CV0öIš;ûG’ýÜ‹iHÁkÕå…@OÜ"ÔilGnôp4jÔöš6ø*ige ÙñÅØjÈ#ᑳivØŒ““Sa·»% >NVûט,íwÉ»8¸Ü­lëg‘YÜí«9Ñ`dMpWÉuóG_–ÛP¥ ‚l*yÕÁÞ`¼’±«g¡à.Ûêˆ=ƒ.ÊÆGˆ(™äW7îv“ÒËŒ>Dý0Z´ò†èÜØåÜâ2;+‚k†ŠàñªàmÃðÛ«Æ!ž <–ëåÌeˆÆù0„WÚkÛbÔì2%ב{=<=»±¯ƒOpNo´(cEUs]“5ÁõŽ×5VvW«Äê7!I hÖv¥v¶Ê]àæíéfàš.ÏM~%%eËjH›„¡½õ‘ʈ  sÚ‰– \“¼¥ôÇ1%ãYœ§·l¾ ¡΃u ‹,}#ѧÇzU8’?§Å¦ÙaðÏ2jíÁ°ÕØ» #ÅÂ'ÜQ”ÞÑæï«­‡“ ¸·;ÞÓ4šÙEܯÊÃÞ#ZÀc–óÕ]•y ®Ûa?E³„Ç­ g©êXç¤'|Љ"eÉYÜ]‘lNÛ8|>B\_Su\ÕçK-Ã$mXÑ+ê¸Ù¦Ùa;rÑ#$Ám`J wHJ)‚ðÉûðÈÃ\dgUp½¯èm‹•]dÁÁל‰â2Å¢hPG•ñ±·,øºšïn¡D_¨ùZ›òaw3u€Š2Šˆ Wáš$¨¥¬ªòyþVç·¢š®ª:n~;ó~Œ„hñÁ)¥¼†ÁQlFÛ?«{ fgµãM£™]„Á媀Ígu äNe5Œ£¯Å º*—AܬpÞìí_Fnpõ8‚?æÜŸž8¥)‚KÒ¬ª‚“ƒŒìíD\Á‰…5Б8åæI4êÑš´Â*íà ˜ãƒ9V¹¬Áª“ÓPOFº²†þŒTÆ ŒÉìß=Ü!$´Á î±D²VvQ_騹Jh*ï]mI'¬Ã/÷ô+=›ýBûµTÅ= á£6=®å°R>ëÏ*=¤H[2û5qpÇd°E¹ïÆoÀÈàq¤ÅR¡ÖÐȰsj5 MœR®VNÖ‡B$gÔì2¦óv’D òÑQ¤2zÊ`5½Wx^ ÜŸÿG"$ce‰p}ÇM¶¶a‘fƒcYKÓ‘µ" „ûpGp¬“]äÙʃ´ÂÇ®i¼4S¢KxLkP/jí²@¸óõ®ì¬~E^ müí …p¾+›#wÊiSrBjí_CÉZuò9÷]×Ï"¡®ÏUúŽ)ö„P$„è• £4‡‘&GOîjx+»h„ë;°|ëUçXb 2ùϲDxZŠßîåšI©‚·BåØÊ‘´sŠp—¬A¿«–Q$Âו.Nß´KÈÖÃHnüŒŒ4ÉB[©ÀCªµ C2¹y«•®ò±å>œU³Óãy•pevꦩWÒh#œM`”&à ¨õ™pÝã4’·²‹Lø=õ>”tDðCŸƒ‰qZ-cÏ mð7¹Ô^ðCQ”ð K-SôEFV)Eql0) ”wÈU/{ŠkÄMŠ Þ‡ßŽ‘ Z²©) º/L´ó*m^A¦ÍÙ4; çZ¢=‹9&ýòþÝOuOÍé㇊E°.mä3uw¢—ŠÃf”ô˜3Y…óú2à´eþ¸\k«ïŒÁW°}[€}ý¼øÊ¯þ^ãÿQþóùâÛÏßy–O¿þôüu$ß>¾ý@þ|ÿë§Oßÿôo¾ÿéßß¾÷ŸOâóÇ_˜_ýý§ÏïP¿Èýù?^~f~Ý‹Çyiá¥ôí³’ ì¿.(îçÇdôòš©Zšµ×0µ.¸ñü÷6¾Ü{¼R”z¥½~:×@f$€Í ¼feâøõyP,ûøGdþûqá[þº^ñPçוÔÒA­ó/©57ƒ&<éå¥RÙ2­J/UJpem9ãt) )/½\ûÖ·24«Æó{«f7oT&QÖkÄÃ)Û ÑiG@/ýö<úT¡/+:Ô0Xa³Óƒz@X9ÐÈFþöüþþšoß¿(mÄ€ê ù§ ËË]ø\¡{¶k@”õ,ú2­£,5GídÝÎ ¿Q–pšöòê¿~ùüöãòá~úøuüBhø&|þý‡é_ø=ÒçoßO_ù·ÏïÞ~üZ|íoùu¿ùë§÷?Í¿öüôõÇ__~(¿5—?¦øùí‡wïÿxóÏÏ¿}ùõ»¿üøüîó×ïþòõ§ÆUÇéï|~úñÝÏï~|ûõݧ‹Ÿþî_ž~z÷Û‡r6®<ˆé©aÒS;Ÿ¦/Ó·/¦a~Bó°èˆýôôùÏï?ýí_?}zy5¿xÿ†~ëGúkŸŸŸ¾<=ÿì½ï®äHråù*‚ Hƒíîæ[³ ;óqXÌÔ¨S­ÒTW5²J»­yúµc‘y=H·zô‹Y•tVfÖ¥yyhænv~ÿOÞÿ>¡‰È~¤¯->kº¾€¿õð î ¿êþôóïÿå_ýíÇú·@år¹>©¿·.üoÿðÿ~ýñ·þÓåÏ¿ü‘¯—ßþûí?ûùÿù—¯¿ÿõ·¾þö/>Õ×üŸ~ýò3_LÿvoéIöB\•&.Ö§1æn¸&ýÃõ›øò'þ)õ—øý÷ù3÷BüÃì}ÐVô>}ìŒÇ?7±Šœ(†k&Í]ä¤Ê ÅÔ %Pn—4¹øúGJý0{ÎÀœ<ãÿñwßü.åÿúáëË…àw ýWt3¹ý‡|GýAîÇ5’ f?=qyO÷!ÊÛ¿‰×üþ ¾p]ñ„d“«ÚþÛ]aÙÄËÊPâ·¿ËEËeÑÌÉ&[õ^GÎ@r2þÝõ’Îö©ÏØÿ ÕOÄ/×'÷IP½ôaVâr›”7`ÅäÙgNq>Þ$,`ÉPñ£‘Gé Û+Lã¯Ö½aŽ1í‹ÎnÙ g¼"rš¢øÙ¥åp$Gé ñ(^жƒÜyýí;5 ¥>='£-)N‘ÂÌ߸—ÝÔmÅMa¶¹—-È#þ‚NVɈíG~5ù‰ŸY®B¢2%È#ݽê8=5Î!Уø†ýIJÇ`õ$¼3|—F3è û“ þXoÓÛTøáˆéxä9ø@x¦„MH[¦‚<*—ÐÜÏä‘n:ÒyýÍ*)È#}V¬)H˜aô†“O®fgèÌýì® î+.R"5>A¹³y‰<úÜJ™¸‚›M6éÄ£r`ãXg”cˆGoÀÓ`¯f³u•Ëœ  Âq’*oÐÊKqÝäjãÚÜ„ʤpò©$æ“,ªªmïhf‰'81ãRÑ`ëÚ¸€³GG"Ayí9tñI×yùÍ2)ä#uÜÞýKeÎ&ÁDhyö'ºEuu[1ˆ´m'/aÕ\ÛÔžŽCJž`Çá=¿þtöÑ…Ô£Â>òoœÚX5ÌT“/œE‡JèÆ,ô#ÿýˆÃý¹F°ÛBsI~¿„¶Dç®§&©Ä™œ÷íµB?‚F6‘‚?òú¼_›5RèGIüQ;‰Rž1ù1eCsà¿râ¤VWP÷5ã\†š2yÅ‘4œ¬”qŽÄODà É‚²5@+µ8ÇÒ%.:ö7ˆŠÏ\v×ãñ8eãFæ“WRx#Sf¹$Ö|kåÒDÁœ —x aw°„N¢Oã•€T.¦iry% E}°µ/‚Ízy% ¹.;+ÜÓ0nŽ–z#ÙY.ÛA}[r’yÆg"$~üìéý@ÛGäY†HÎ’ÛR‚@ª4Ϋ½µ0‡0Âçܘnâ;¢6°)Ì΄‘çÜAJo$–Å–9°ÒÔ«ü^°±œqÐM!͆ӹ)qæX¢R…‚äÛ&BAzâÓÜwùÍ2)¤ÎcgivŽºxê'ìÎ)Û}ko-ªûšƒæ+,$.¿O®¾ù-Ï&¼o(—™s6åG`Hi SS‹r %ZÞ•|ÂaU%ì]¼MCzç 'eÙz}ÀRŒ¨2¸Èà®$³JCJO`H©—ó¡\½C }"I‡yìï²É„ôg°°×‚º­8àæ[3¸ÿ…\mþœ£ŽœÊÌY’3Ë©o$¥\8HÚÐqò¨F9„ƒäÞH!ƒ‡WÚÃî#Å9p14…ŒymÀæõuáŒÉ×õ5›6¦3ä±þ3þ ¨ð!¬ƒƒ¤VqÉ÷Ïh—ïÈ$öC];‘h6Áá¨Ø%Îj]ú öjT÷Eg­»àJB:½Ææ°®å+¯DF; É`|¨AÁ Ù7°ƒw¨±ënAXEå‘]‚A2ýÞõ6ÀÇå¡À.p² ÷zü4Ü/_ëZâÚ8Ã+aIø-¢ö$ HVŸ?ì»üv}$ñÑïL!#™[5[“É%ž8‚ØÕmÕÖHŸuóS‰˜³?›¥ †#ú7'ø›M%i€XOúŸXbkQ¡ ™7Î2È¡“8V-Éó9;º._“l^W„¥‹«; Ó‰Ó…ˆÃ1ÅÙ[šr3ż<É+»\ARç¢û®Þ¡@ u–ذ%ÅZ†«3ÿÖ‰f?]AÝWìE[šŸggØv8{ÒX˜ë?GÎŽ1 vŒ~жå’{CGÈq¹Jµø_gÊ)Ü‚„—Ó;>èu›k[])3BÉ9ÜÌØÉšðwYÅù'ø£Ô‹?Ò.¿]áºäT¥nwÓ8Ë©Dñ¿sm1Ÿ!}Ô‚º¯ØI_Èú'rç)àJ’}/Ê“74û,^À¸ý7‡àâýÿwü‘²‚£ñG¾Í_î;«:T>ä^§.ïTúÑG–ß¹_â©ô£»ŽÝËÜ~Ä ÊœaqÉâÐôº²¡ÒøUüý¨rî{ Eʳ+Á|¿ §_fŸ|¢ê§}£áéÛ7ÿ¿2ühù9\?40‘øCûøÛ/ÁèãÞÏ~ð£Jµøøÿ}Ô$7NGÑ=…g ¹ ô#ì?¡™ç?øçSâ® e“~´¢pP¶”8·6þ•KélæÜÖqÉ5Å`9) áñÏš’’°,SØÆu Elj/æ¡)ñË£êÍq¦H9gTÙ/·¢µ¶að-‰†AU¹”µ}ô1Q>n|‹4Dט\ •k¯kÝñ=”›7W :~ ~(× î8¥¨ý>!-Ÿ€IUŒß;æCÉ|Dþö`ç”öCø¢þœ<å?¤(=À•Åóq^þÐO`Á1— ì(BŽ½Ç¸2§)6òSâG›Œ›ß³':Ó1¼#¦ûz#ˆ«Ur_$Õãý=”ìçèmv|KÁMЗ¸hçJ¤Ÿö’“ž&u]Ë÷³þrô}.MŽø…Jy<ì'4[fR†½qÃþ Þúû]Ô‡báÜî²Ú~Q Mü©_5&SÑŒš?¾Š+°ÌóKcͦ«uQ.I]"Ç/¼5ãã<áÁÅB¿åÙß~âíoÄÌC‘Úº–”€d§ Ýʤ¿±¦ùþS,¶‡qÑ"~’~mzù½w®kxŽòr—W•d=&[`æù‘¤‚.Ž´0—‡Æª=Ê›oà.+©¼òÞnJ˜É:ÿŸ{¤D¡ï¹‰MÍÕËf›fgCp׬³K%/{£Þ»Cã|ðèp”ûÏùÚ±ØjHh>à·AtV™}~<•»ÐW&ãoßϯzÕî i#ú›/›,Wɤ«ŽÚªŒ`ÃM˜oêUƒ—ûëX6ðï?¿†ùE’JârÒÏÞ…¸÷ áxò œ£V“\Bõa~LÊÁǤÈ/Ü«-'ë‘l;z/×–bÃV;Ó§•X'<}Ø¢ÅÊàÚU趤»Š—2²Ž(O G.’ö«÷Ñ5[½pâ _¬”'kr˜3…k‰¾¨¾W^ê§ÝÌ¡ªçòŠ3œƒº`I¹Òc×j‰¢9J5Ìè·êÍ×»–°>Ø`¥ ; Æû¼tTh‰Î÷sͲ!Ó.øíG’bC~Ç}kž¨Ç8Þá9™â_ ›ü3ŽsÊNttÆ9÷½Ò—ñºsÆ7b¨=`ȉmñãV&²Ÿ9?ċàï«ÔKãZÛÀŠëxSB“ å‡1p†œ½[4àÝBJßTØêco}—ßÞtö}¦„Ñc®Œå£}¶ö3˜jA}­”öL¢€œÝé ç`9u®Ø‰Ë^¼k'ÇÙ(MÕ‡‰¤äˆs~ÃÝ:”ÌšŸk!l'ðÈ(ŠsYÎ;¿¼0L6YÏ:ùqaØŸ#bÝ<^!Mâã0§‡À´ qví¦Í.úzÚábá_gKèÔ*ØæwY1[V ª±ÍÌ=ûTÜž¥yC–°«í¼¡‰ÿuvƆLJPÀÍ9µ b!7Û^(©výÍÂ(俤#¶„Èy®KLšgjTro{j£Ò}µÀÀ(´Xƒ}Šc¦ÜÚ\&Ã=´cðÂçŒN»v|îâܪ½ä^³e)èVk¸Ó<ô‰»lN ±Ù¼‘ Ãýa6%WÎ)òãà¬=A=HØ I[‚[‰M;—Bl^?»¼ÿy”óÖÝ/¿Y…Øúx(BŠ›bð'úò¨u[±3š…ðšýÙáî—s ¡Å[ãm;^s²ñ¨F9ÖlÞ`Ú§Tædùù($رdh B ¬ù u¶~v–SýjaûòžN¨©6¨‹Á,®å˜éñà k¶×lÏZsÒGû®¿Y"…Öœú$ÒŠatÎIðñ6›ÞHvÕH5ªÛš‰K3…j/Àæp6Õ>ÂÁG†¬+ÛöJ^sQÆñI5È!¸æô÷='x†ESÛöqU–RÏfלÞ¾Åqkñ7\wÚ3hQ˜NF¢sœ¥/÷þ…Ö¬X‚ «9õVØÚå7+¤°šõî„6¾Î ÅJ$Éŧ8™Q£º¯¹\bh7_YÍQió:H"ùÕ‹s˜ó†å¤m×ÚWR3I-Ì1 æò|“ØÅû*ãò˜A)n¤íÿ•ÓìßX€iü2+õ6BÁ¼ºK»ÿ+J6çãü$ò-“Ý¢µñÊiÎí#ì+¦Ù:Ý{«/‚ÍZyå4—>N³3QzȆWKo(;‹¥Õ·Eã Ñ|™ ©¹˜³±öˆ—¥{)¦Ëî§YWukQŽÁ4›72J®¸ ­·ï0Eé(ÅÇ6Âi–‘ƒî•yxm= U/.Àt7¤º}l†7nòSà×@æqgRHÍ”5°1`çq¶výÍJ)¨f Ð÷h’·à}–)dÂ_ùe·Ó}ÁAZ­šˆ%q˜³ân­9ÏüA ~üCj<3z“q¾1ötÒÂ’àCzæ\šy•éâøzoB9Á¼ƒad2§'üåÇ/ðÀgŽ|f=_ë¼þöVqšõžŸ¶`ÌGƒÓPé=`ß× P‹ê¾f¾ÿÖ'un­ªNÙî;D$sÂiSŒyâÀYí}{CRÍv„HªA!4§~(l6SmF^¿aƒ)ià¡Í•ÑÞPIãaææëÎH4øïãš4í¬’äËlRœ’ó3e~ ×(ÍIɼ¬š=v]½C"#=iBjí,(æÒ©ígËyûg°pÕ‚º¯„ð5ŸÛŸ§ãêë¦òO7åáïw.Þh)@š‹Ö½y˜@êa¡4‡7ö©6ÕÈ¢Ðw‡"ÑÏÙ~ΞÓ}½;àíaPš=ÏÙ‹fÆQ1&‚CQº~„Ó¬Åw CªãL3½¡!Ø~ |§|ÔâÔƒÓ·b‡®Ký=t»ÐC‘íà¤d«…Ùƒ[(jÜì̺8¹4šöø†pš}/…T»þvu§9÷ÕØ1ÒìC.Ä‘”O¢ŽJL÷õ:­Í@Íù ~Ÿ¶îXGs,ÉNÄžó9h„=r‡ÏtF9„ќҲ)æõÍ:Êœ)>p쓟 fdöHs|gV<®†ì9Js`é߈GÛ,EÆÄéy˜ùºKн÷Úì¯0š»¤ÊÕ;ÄQ ´³™¦‘‹p 2i’­{cÒ‰]>}QÝÖt+@šêñQÐu!Íü¨¦Éó×KÆ[ÑÌ)±WÂiïö0ŸÊk‚[#N@‡.,WÛo›!öHœ\ÝæyáÅ sŽã2qjb²SÂ~ Ä‹ H`šÍºiÚý/ˆÁúþ×ïÉ$ö£]œfxæX aJfNÛ|§yÆ®"©u_ræ+ÄÀ4Ÿ~FƒST¯ü¥†’T‰¤Ù_̈»äHó;§½”̢¾pRé=¿aG2öHìúéÓmHa%°®(a¿álM âµÄMÞñÈÿ·ÊiöO@Íú®_çõ· ¤€šõÆõ¶…|«g°&!öš¯í«ZT·EÛë¾BóC‰^¸ÏUHC„öÍÌ¿d—”2˜fÄ!U¢‚iΗ¼˜c~ý,“¥FÙ_J™©ÀuzèÊüšwÑë + Ä†ë"г5æ”BÛx†OpŠp”X#5¯û]ßþ<¿qF£\½C"3°›])¤ƒï¨çûcŠ£ÁØÙÕ}Íü ³O`ÍöìJT“ˆâd1ÝWRVN²j6#Pöz”CP͹¿ -\pP Ã4¦Ì1ð]2t]î­CDc«6ñ»KSös…T:m€–ˆd§\Ìs\6“Öl”,R œz³HíòÛ%Ò‹£M_ºVp:Fi*ܼ؛Îî›C*AÝW즛©¹Sì+€5g~ëEÎÏÒä0Sdæþ·ÿæXóG_§‡5++8Öœ«/bã—ûΪÎ5ÇQãSaÍ®BŸŸù%ž kþ8ÜÕ½ÌÝaÍÑD~÷çì&ÇÏe»’ªK-Xs¸ä`ÍՄѬÙGXoÚFÕ•C4‡>ø4â§}ƒ5'~4¾}óÿ+Ú—ŸÃõC–6Úøñžz Ö\Ÿ»ÁšW>ÿk~kö8ºmœ(¹ ¬ft3=a5ºÇ?ŸÕì®ãMTó·ÄRj‘äbÀ÷tŸž¼ýÛ…ÅfÎÄ%ÃD¬ðÙ¥Pž k²äûƒÚ]Ža×\ÌšéÃ-äïIDËk‘àUª œªW Ä”ïÀ_ÂöPCÜ>~‹†p~ ÂúÏ"ÃËÁöÅrYÂ3ÆQ ;`¢¿+Ò!w ^èËE`s|r£XgÜlM=à)ü[;Ò­^ G~àñêºøí`r¬'6×çw;Žô§‚™§»¢DÃÙ§†”L†ÙÈD2Roâ¢/éŠáf oïgƒräžR޶°}³£ OˆÕÏ̇H‚3söŸ"P¢s}O:¢º-Z`ÜŠ÷‰Ž¼²_|ˆZ–aU0ôÄÏ®Ïm Ü•t¤Ex˜RêQAÑrÂÿu=½»ó³Y†«¯ ]YiøM¿º²Ây4Ñã±'¬Dq·c¿¶P…˜g¾ƒ‚ 3zÖÖhG ÖChGùcº¾Ûõ7+¥2ßjZ0MQ¢Œ?²`ƒÛíò™TÔ¾¨î«.ÅÀKðGþ°ò£•¬‡mã0(:çL[(…çš9¥æÒ[™—€Û§TëIà;'3°‹LHåbßy XYíÃÚr˜É$·6ý³VF˹ _kÂælg™„äÚ)‹ ÌS ûŽËo–JA žœ’—ÙãY´=¿‚ƒ/'û÷Eu_3r~ÂbŒpÏJÏ,ç2e"¬&ç6:óJBŠCtR‹r ébßI¼ð6uÎÕddñô´ÓËדù5ÇÑ8y@¼ZX€Å^tnOÒǺLñ3DsÁ¶`2eá8*,¤Ò6ÝR¨vàv `³N É<# ¯+RÆvUäm '[!ŸØnÛÕmÍΈAxã3R>h AÙýÃMLÅOÍLYšÛºªgýÄ=J-Ê!<$Ø ¾±•çÜCÍâ…k„£XŽm É­šØ¿º°Œ=(S›Øƒ2YJ>c‹2p eòüÒqÁ>f+DJí²NxHî)í£ãò›ERxHNÍkÛ[8C/%"’2Ûh{{÷Ý Ô¢º­™0X­ãìé"éX~J*ðà—n…õ!<¤Úä<™Tã‚DŠï¨$¡…¸¤z;ZÆZ70&Ò[y2eþÚ@­Šn›ø%—WOOvÖÉÌBÅ'ŒÄ¢P‘”éV¡"•§¤ŽËoÖI¡"ùgöÌëŠ$þLT²›X«gØMœØwÛÕ}ÍEÈ…Ïä EâwùÙÇÞ˜®çïœX2¿ôml§“W*ÒÁ|Íž0ÇP‘ì*¢ýe¥ôPÊ»Nƒœ9¹G9W,RZõ±ui “ð6?Hežcbå8C*ùϲVÑœ|^Œš_¹HJNyã"õîPjlË+ÉöåD.ý9¹÷Ð%;ÛN´è êÛ’“ôè7>“+é8ÞG댤8ì•ñ’—š¶}”#P¤tà kg”C HoÞ6噼y<N³%2…R Hñt–frþá4Bɘ=­ƒ”Ì—r.Mçb!¸U&’bÙ,H$Ò Sú.¿Y%¯H¤¾ýIl›ì²ÐÈžŠýç8ZT÷5c’I1l.R<È ÝuƒdxêNÙÏÆX:‰´µï r©¼Õ?‡”\Ÿv` 's2ÐàJEºø7TÒ$š}zÐÿ0_LÚ‹ÔêÌñaæjÃMÑF$.ŸB‡fÅ™TÀHOè]×ïPIÂüˆ&Øíœ€ƒB~#LÑÁՋ̹l¤Ž¨îk&y¶Zm¥à#i›o:gÂ]}(ñ?ÖO8 ³9õB |‘o7›_IÅëNÚæDR^5'•ðŸÖ8·r\oØÊœôâ1¦`é-e]zoa¥pu]{fùǵB»‘ˆaßcàºö6u^¸ çüí` jù:ñ˜¹ú]¶1ƒºIóç‡ôÉIwßå··™¤ï“Vˇ@öð9£-“ÇÙ»'»¦lê¾blû·=S@G¢|Bn]{XlàFâ‘<{X¯ëx¤p¬iJO”CøHÑ.Ä/+ ß3ñÃT¥lF~×]YX;ÁyyaÁÀºÜÕ]“Ž4»=„m‘âä<À#Nà|æX³8à#…öð‘ÊSÛ”íWïPÈHÕÛêu1 ”fϹ[æl¶ÌcPãR ê¾â ,ÍO$Ña@MéᬿSs;®aM(ÏøHv„@êQÁ#­ûÓ½(#®ÌÎ?B6óœyÅCùq #áÿúW29=X ’áߌ~-qÛY ú5£qSÀ(œ va]<Òµ1¹y“—gvNthdqÍõu9Š»dò|žaÎp.Cn{P÷{•C,„¤ƒºÊ›êÃIË\lâ‰æÀ"¯H$IIÙ,=L"Õ ‡ ’ÖI/éÿ7g—k‰,|ÓPöi¤ñlN¨¿ÈæÏÅ ’ª;ÊaMêbpÇgÁs™›½ “LU;¿b¡n1  ¸Ê[ ÷¥êå·ë#I¡¯ÌæB+qšVÊ”,¿x]ïОú¨Åt_°“Y E ɨÎ{ÇlD?GÄ ë=µŒ$«øq»JŒcI«˜ö×Ò¬„ÉÄlÉqR_ÂÈ€¤¼}qa^_É£•ôÑ¥=)í y²­Ê>O%Ø9–ü÷»2q#$½/±3€}ôùbŸ9“®oøeþÌYmÜ Üì³?±“¼+¨ÛŠƒQÄ`$…³kìã’@80†«VÑŒ›…‘4â”F r!i ÷šŽp–ÈjÿˆéMi¶&¥8ta¸û løÙ†\Ÿd;PyÉ‡Ýæ¶ÛÅØS Sä×h œ³®’4þ0IYm²é¼|‡>¦g(’–Çõ ™§è GkÏÅ#mŽé¾Þ,ÅKóó4ôÉG4Ée¾y ÿ²œ•†HÁ#igHÇ©£äÌ•‚»Ý¶3Ûâ. ì vâ;i&ãÊc(æFëszvàÓÂfÕsñXìÑ'k°¹ ‰Mßg01ׂº­Yü¡}[3ÅÅœÄ ï\Íä›gæ…CŒÊœœÅ¡~;F'œºFAzœcœÌ…}Ã,(ô‹>lü›ãö ‹™¹˜é¼±6¦•}0UsJjOMc§ñüŠ Fé­*âgž5+Xq4ǾÙ!lMñ4÷(nzô)Û2ûRM¿O!ô ø®ª©Fu[5I;eûK_ó8@6ËQæožåˆ“¹Š’kе¹¯ú ÏÓM=Ð!Þæ´6úýº¶Dƒ¿›¶61n’¨›ânÖ†¿7¬ 3¨Ù>¬-`/×Ó ºÉ™Ìa„ïb˜ÿ•ÇÎ"ñ7—t³}·‡ ØÃ>X­ÂfÝó$†ì U¬ÐSrž\r8ÌOŸ!ÛT£º¯ºÜlŸËÕçœ*çÔ³„ÓÍ9P³#Ñ%)³ŽW§ó ÀÏÊ©E:ÆìÜTF¯ÛÓ²’!»›$à¥4°çèjwn«¹Ûí$hçÃâ¸t52‚vôŒócýLÞ-ì×®†ç^ºöŸÁ>•j›Õójzžžp}¡J\ðϘ°Ä»û3û¢ú¶llPÄvÞ)Öç©:Æ<© É'l<ÅéBèóÌýÂlçÁXÝÚŽÔ aTÀ•ÉñÓY|±Ï¤˜ “Øf´îvØ —gÞl}!lVN1B÷½GC) %Ì;94ç?ƒpªQÝW£!Õ„ÙŠõéGC\Î.føŸ/!ŠnÂ>mC;j C,Ñ‘v¾‘—¹B|·ÄÚË™·© ¬×Åý͵Á™’yhâ÷$sF+’1³‰…&J ÀŠ¥né¾õíÃ!wí̽ -„Ý$+ûy}‡×BýâTc¢ìç€`>nªQÝWF£LNÂ=J³ÒºÙžÚ.\&ÔÀkàìM»éýf^ùGŸ7]®Æ9Ä!½¬1_¢)&-é]0NR:ri¨Ýc¡…ßk!…:Žüü Ó“d1ÇÌ7^°Þ{·˜1‡MzaÍÔÒëc‡ÝBØÞò«ôð$ñmugÁTåPÆ ·Õ>8bŽ)x2Þçu_ "oÙ¸9<:¬{çÀïÜ‘\8¬§µ1ú×—àm—6-å¬ÃÄÝhámµ‚Ï2i"9V*v™TŠ»iPLœ˜„’~,ÞB‡b¦('R=G<®ý‰CôÆð +œÙ…ÙÓ}ÅùYÖ_ÌCûÆIz ÷S "‰a¯yb·î±U0B/µ8‡8®_[ú“°R€•~Ćó}”ÓpÏu_1™6ë¥OœUù¹ œ9û3\×1¡˜9•ø½3³î-ñÄu¹‰â(lP<ÄÞüR a»\ÂyÝVÝÙ›¤ÉÏ¥`ƒo8J'¶u„t[¯À²© çu[¥ÜçôÁ|Ét—ÀKpùÎëèƒj$×?¤Æ9Ä{=­u&¾~ÂwLvu)î3ºø ¤÷Àz=½&¤…l¨Å2ØŒ -·[˥ˆàÌ%SàgÑÅ™ßïqÁ„ùº•ý¤æžÅŽQ7Ìì ¡C,³„Ò×>äêæwûDgʹ׼s×þ!-¨ûš½ ´ÓPÎQƒåmD̳ñùÚÓ8.s5Á,~TÃ¥ç3vSSnf:d}NŽ1D—‚õ#³KUÙŠ™²ù¼ŸÜ Sùúˆ‡®˜0.y¸bšœ°{ê¦à!Ý6,SÙå­ÐºÕaRåŸtít†°]1á*•;¹â)ÂÅÀõ"ð×bº âwí!Ò‚º¯ÙIµ½¶¹Ò ?ÉÄ€·Å†I~å’ÅìÀ%ð‹MÀ|žùÞLâlMIÒÞùú• EÇNøÿDçq¥d \«p%œfš¸l²mè ¦ôñæBõcù,A>Jý·@¯ÍÁf]ÂVcµ“½Þ!_IF yfÉÿÐ8$òbâÌ7‘Õfe¾ÏÕÈgð›öm.ñT Ì¡®ïüšp9;[Tæ€ÃÑ·>ƒ«›<&Äí9ÂÂÆn;IÝñ„l$"“¼ÇŒ‹5ÖBm±;3S‰\¢: £ gŽ,öu_3ßrVpÃ{ÅR=êƒq3gî8ÀDpr_X‹y}Ð,‰Åì=?ó3é aË·ôá¢òËŸ~øíËß]Џ×Ÿ…f&;K$¶kr¸uÿæ·/ýmÏ«úPpc·7?¶_Õʵ,’aU³¥mþø*¬@17vmšåÛ¸Ä8YÉgòÒžGκéoÿpûíï?ñö7b5  u-R@7¦ ñ‡Êÿ|tÜûÝŸ^‹8§È¥* úl«~%õzï5|=3}õ#Ü3 å•›õ R2)d¢Û„~õÁ‘6úoâ®+Ž©»vxd³C§HÌ06\VŠ+YÏÓÓÚõ\¿nò˜ÿ³ #ÅåeêýÞ­dÃàôh”ûÐ<ÏQ¿GÄY §a\%]ðýÄXVoB_m\½}3<½¨ÜWìòŽòÂJ旆ż(ßwÿ%ñ,z©øþJ–âë^DñŠnr– X~;/¶ß»+¯›{Ÿ$Få^}(ú>¦èœzãÕGÅçï©gÞðÊ{‰·VŽ·N/>°2Ç*\l]Sà@,Ř´ÝKŠkù7ª¢(Ïö¹?äî×Áùk¾z±Ù¡66vJ¯ :³q¡/ªï5…oŒw: TOå-k9•1ÙEޤ`cÇ.6m’tÞe4õ„©Î®÷¹þÛÅDÀÛ ArÄÒ¬ðwñ²äÜ%ÅIÇÌüö#¯Þ¥ëŸæMn)gª˜õîîÁqÿ· Qž](p}3MxëMir¬±ƒµMG”C¨„VQ1°¶­Ža@Ë™CÕ¿Çõ‰ï¢¶6|›V]h_\YH\ ‘+)Ð]mû”Ñgo€•€éjQ2É+&Ð+ýaÇI¤æ F yãT;Dâ‚›ê;ˆ¤¡0ÒöJŒoTÜü"ãŠÛÕ¦48žBgóžxÀ¦NáõƒMÁÌ9§-}ŽW<`^|úö7¨ºÑw‹`³R^Ù€E·¤iË'³‡œ8k>ö†²¯V*A}[3ß„Yá[ HÇQõ,Ï.¸8G’S޶ x¤ÇBg”Cˆ€+¾ü¯Ÿp@ËM¬€1ÓH9 ´X`toœÝxòœH™ÚÈÑy;[ãÒñ›“pgžùîàçÐó;ué %,@×®é„è{·•«oIÁ¦¾‚;¹Ù$ü~Æ|Q¿ZïZpkAÝẄo;ѰăPMñA¯* ¢Ég¸îYåðæŠÿó#$RrûoÅwàõÞŸhçLd«\Ò;ÐÐRhp(à?¿Îš~qeåºáZõ5Á9Èð½s¶d’éMÎä 'µÞÛÅù€`ÿ”ªN ¶{[R»~‡H’}Þ¾ªGÞÌ{ÆÂÉ›ñüÛ+3T§‹¤Ô}Å$ ­žQÐþÒÞ3øç÷÷Àkâä%L™ë=Öùö¦¤°þ47±Œg:‚ú[gáÉ?þ‰Žä˜¸°¶TéßW|ψÅÕÈ…¥‹]7 {ieü–Gç‹­Ým¹M,“eO›.ωø·g/™)Gœ ò{†E0M)[9£ÒBùËŠå EÍÝ:/¿½‡„?óŒ(ðáyù‰çw’sÖM©Xt¬žy¼ÝÓ}½IðËÍÏÝ«þ8\ÕºôÐMðqâ×'5”S›+Ü/k”Ýæ¶_^õF}IHbâ2»ðR£àgZX_\Whxd¿´..195 :…´‰àNUvK!Û…ÍÀX|æ)-©qEvÛÃP?óÔkûÕ;Ô1 ŒµC‰¹™s¶ˆ™?#Ì¢ÎQŸ=åQ ê¾bì26w!¯Ft^…‡ß~É…¨écª_i§É£åœ_Xg“¼¦#ü6]è£õ0ópf4ÌÏ÷ë>°–K}4à°ä°'B ¡PÖØ›B9 þê¢KYH~NƒjئtæÚå;²¸‹¡.‰´1B’›¸L‡ýÛ¹ô€Í1ÝìÕ¿rj]y¬õðÊ µ‚'”3mÁ÷™c­°{¢ïóÔ¯ÖEŒaÕ‡„ ÿÁútùþ½+P£•1CãnˆmŠ6s—äØ4T°†ísëþ ÷¿/AïFì»þv}³/ë|ê–]¬›”’çHÐcó)Rê¾hŠ)Ä02°FlóCÉÌ¥qí1Eì X_¹Î-"t—!%¶är_~c«γ&?4ó½úÈÈeÁŽ”ú+ì’€bó½ãÆÏ6î‰ìkmfËeüň3¸bhak&̾¢l@Ù—‚~ŽÝ@‡Búg€Õ¦YÂ4kF  s'ú5¶ÔmÅÓ ^_ÔPx‡ècñ~n§d9÷-QÛ„\Ÿ=–ÐæZŸYNؼœk™Pæl*þ³s®ú44‡Œ t+¤½¶×ÇO\+ÎÉ—ý¦Ûåm˜“!ä(üBõyé$LÎÚw¸ðd:%R»~‡D¦x‰ô Ð#Ï¥Vðd9‡©‹ð)DR‹ê¾è¬úËÒgdôµÔ'9A}8îë|;DwñƒDR s¢Ï®M_UÉ´(µË3—W4ÐÌB}Ñ/Ç7è$=–Ú¶ÀÌ"æŽj<Úﯥ®Áˆ‹[Åó‘’IÎçÕóãÎËoWI ùR_¥ s½{Mk ÎÏ…MuDu[3+`2,úêC9§Ý‡£-8þ˜œ/\ꬣù|8p¦/Ê!`¾76#3…ÙÙ\ ¤‰¥¿Ð@;4¡ò™u(ßkëÊh4xtŒÄA[úøÃckqZâ1/½ÜŒ’ÏiðuùŠ>XÓuùÌ®2G|]Š„l¼›JÈ,I¶×·rOyÔbº¯—ï=§}50‰8ÊÊ¢ÝECnŽÅÙ4yŽœZñC»‚ø‚²Uz\³æŸ3ý™V䊣d«J›ø&"g> É _~c32 ?™jH›¨ÌѦ³Íœ-“µœ¢Sp‹§Ð ¾¹]ÇÁȩ膺}—ß.^`ÇOÐΫbœ£á;~üÖµŽN4±è ê¾b¯¥V?äÍ뜔vì_úñ¿´—J·þá.HÕC°NÐðüÒs޳™Éã€É&œÿáößTè· ^ŸG#ÿ<>kOß—„ °ùÃÝ@÷ñ7ï_ý»ýø4^{¬?üëׇ?þúðçß>Ë/ýË/_»pà_~þáϼžßýó/þò»?þËŸ÷Ó/ÿ㇟~üŸ_æ¿üü'å?ýëÿò#—µÿoßþÎýÛ^|œ>®€ÿøƒ¬ß³ò1‘[~ de"úƒ%凯ƒ åo»¿ØwVdYB"Nó¿pÉõÊâl¸b«h妉ë÷&có˜å9/¸-“K“ßw+ tòM»\ŸsòÙµU&g«Æ’s¿D+‘9[¯ÒŒÌ”µ' ÀÇ–«\û£ïígÞVÏÝËÔQgßf¬ä}zÏ8–öà>5ØYæ÷ÿÒb&+1uBЉ…å´’§Kÿúõ§¿û_øã?üô_ñ?_~þÍ粘ùû‡Èëq¹|ñ©™Sß@Qyacêa" ²}š,vs2ÍmÙ¨B¥?ÎÔC s©"fÿŽ?œìUúTm`r®‘Y;pcVPñ9ÌH¡õTõ.xé™>…TQ";˜2EO³1•ÇÔ ¤Š¨ìüT‘\·=œrýí‰5HÉw9±[Pü¬aÍ‹)~‚iu5¨Û’}Ö„Ta4öá1^ì1Ï‘ßÓvrÙͰÛooÍ ª"jnÈÇ™±«aAUø7Ä„ó¿9”Dµ‘'YÙÛ2pÒH`”ÞYYÎ Ææz{;˜;ÁÐÃþ`(M©pBxø»â*|»QxÉu{z(lÖI!VôÍ«“ÅahŠaÊÆc#¤7=eR ê¾bàRš[´B¬(ÚñÐA¶G æk#Svvƣŭbºh®#ÚiQAV¼ôñÆÁ ŽªZ›ŒØ(ì…bE o:yB¹+•þsr9'.ìv›X׌‡<ìÙ”<¸ŠÞ'ïÛ2)à ;ÂIS r·Â\>l+næ;ÀÀÉçzj½8Ô#ñï¸ se-[VcGÓOpvÁÏÁq&ë”è¼{´õp…³í£,!W”^·aíú›5RÀI?Ëj2"¬å(9¥pBaã¿ÓÊž"©Gu[4†­Ú-½B®p§oMúÂïù”hâü—;Æöq¿+´žÖãv&Õ(‡€+â;xŸ@~Ž‘LÕåYMBpyäÂø¥74ç 6Ö&Êžò¾ £ŠÑ/Úú‰9k° Â+µBÅÇ8IÝr¨3€Í*)Ø ŸûŒ†ÅÞB$y6‘>ƒ)»ÔmɼT3Ñj…uÍf6å'LÈß8M0@ …×£c+JQqëaáVÐ;%w$Â,Õ}õ\­ÚÈÚЕ•‹)oèdŒç7žì†ÅÓysM2¦LCjiy@ ì ÅäCØz·fçå7ˤ +¬ªØmf- C‘8ìè›Ïpx£Åt_oá<²ù »‚+ÒQ.qŠúð»Ïr–Ëê—‰ d’Wr…#Noô8Ç +è-•´\qS Ash¸v`.yWä°Ø ’­•õ »3yv6¤µ#“ÝUïÎæ`{Xã*¹"˜ö Á•\¤²[*Û1l–Ê+»Bwˆo»ûbïìs›8Z×ÈžZ©ÅômÁ|¶7E„[ÎÆ Q&œÆÅ0¹À_}ÎÊ9·p+¢2p -R‹r·Â½Qs{ä\ٔʙ×3çÍ#]ÙÁ­ï ‹Œ›C6¡v‹pÔÌgœr~ Mˆ˜yá÷)¿P¶ß­ˆOÀE?Zî `³F º‚º¶& ªåJŽ«ÿn±ÞõøF ê¾bÕUSÈöläû~v”ù—Þø9¥Ô>¼¹‚+†uÕ(Ç€+ÊId¸¸fAü(%äýL˜„º2¾AßjrŠ+;®hQ êqÂ!·?…Å–™+ÖÅñ€+¢i×u‚®è¥Eª×ïÐH²OplÍòÖ[þ,q .Î9t$íZskAÝWLèEkŠ]Q:½iû±9~óÅbýÄ2Ä5_{[RÀfÄ »ãnÅ;t.«)> ²_0ëëŒñC]ÙY=œ[n#¼¼²ÌúPRD^,ìÂá;ì0V²¿Hß­‹i@p+bÑŒ‡ù5ºQgÛ{ÊA®¨ðœ5§î&»4%@š³;S"»‚º/9g¬Ð}|à<ò˜žrÅöÜa?sk=º5”³W¤æÃz”CØoL³'ŸçG⬅»?Y?pKRб_#Sñs‰¾f2Õ¥’N@ûX&ã‚›rœ¦/ù1/ùf )ì Oîý…ŒœQµæoû ¼qò5š©|ëa5¨û’ƒîÆ"ü -K;F"K¾‰åR¯pšD¢Ý˜FX~èaŽXø7<‘XèE2ò[ d;)ü ZŽ¿Îv3K•ä²Ê÷ã+*•ÌU¥À±-díʰðÚSXļñ£]¿C%‹{Ò´ÙÒ£’ G8 4'cιé‰é¾^¯›³§âsŽX8f‹›ŒKÖqÅ ‹rà^dg”cá WMlFúhëŽk—D!‡ú³[Îx÷&×Iiv%U›¬b¥Æ yBsœ …®5 iY<„@Xp&Ùæaaõ­È¾ëoH ,tÒx³¤åÿülÑÈ¿„—H=ªûš”©ÍÏ„ójm2ú˜½È”çè£ËSðv¸&é ìH(µõ8‡@,l©] ’Œ\S,<—"&§0rC zËTÙc¶ÒWi¤ç<’²·'˜“/¨6ÜdW|¯>› Ç")³Û±(½íÚõ;TÒçg)mS2¨‚ƒ+L€Ÿ]é4ÛØU%µ nKrê‹t¶J²¦sçC™‘ŒÝ*µ60…†ä’j˜C09¿Cƒ¡‘¥‡É€S¿2šcáÍ; ‹ägÎ$ëÖ‹mÊS`ã>{ìtå©ãLÅ.ë9€,ŒÒ€' ‹˜õÖŸ¾:T2EáiŠÝ>±2;ž¦âÝì“ý [’jP÷%g¨¤’êƒדih&‘ZT`ŸŠ*“8´öÑû‘*©D9„cÁE?Y‘ߥ‹ŠÛ¾)ÒÀéí+Çâ ÒˤCÅ];\X8\¸r‚M»çlE*^Á¶ÆLKR‚ñè`k'+ Yä'7}l—I ,¢š×*‚D·â ®}>U»ÔmÅYd%Õ…;÷“rž]ˆ“Mv.öþÿ|‘Ô‚±¸Þrã>‡Ê(ahÑÈr$‹dúËí§Àìk&§T™s†3¨‘?CC“ÄŸMËD$ õ“±Øyf£]¾C3ßdz yK‹òL04åŒÑ–Ôëk¹§<*!Ý—Ëï.«5þ€d‘‹">Çk *KߘPlÒ„dᜲéŒrÈÂÆe ùË=2\q猕'¦s XFžÚÀàÉÓ=MÓP&×,Ìíç’¦°$ÂZ‡STæóâ9”…‡¹Si×ß.‘ðcÒñ•Í6›8mÏüâý$½?ZP÷ƒT¡:“ó_м$`Y~ï…à0J‰is"ÿáößò°r”‡Y(+8fñq–fówûΚÎÁY|¤‡Ÿº¼SqÉuç~‰§â,ÌçäYP^>7y'Û•l]åYðøÏ"·1n<‹¤£¿9œYB!~é_“VXÖ¤˜&yoXkŠ›Ð·BüDÇg@‹ƒGØ{âB´X™Ñ¹…o?ø”·(q¡zØ}ÀÑVáÜoà9–ð,ìúpþ‹+Cqi]¨ ¡( í9™ îãÑð†'GÅÚ8%G³w9/Ò7ð,Ä@´•ÑhñÂ{GÛ³k-òSã¸Ì÷P(²ìåœ&þ˜'¢†{bº-6y¦}Ê(< íˆè•ôØèdÓDŸ;S”¾zÁYhi¤åšEzCI‚ 3%Ÿê € ¢‡„fQìòtîõ•yx•äb$$~·¶ú¶B¡!Äà)‹ÃsÉ]‰Â²(ŠË‡°,è¹RG›%RXÙ«³¢-9²)p ãbáH ÌhÓ¹#ìÛƒº/¹à¨¹M+4‹tºHÆ<–ô2¹’æÄI5é0 wä€fg˜Chþ-1 ~Ž©ˆ‰i\Îv ‘]hæ9d±·x€ÐwMÙÓ ©¥R'í°ot…ÿRtm£³0ŠL ÌÂû§Fl–IYPz³XW$š •8eJ@§Ø¡Ã]AÝ—€djÚ! Ì"hÔ¾.@™XGÆûÉcß%SžÐ,Ò±8‹ž0‡ð,ʺåkzo1òùÁ7ˆ³®œÊHb!ZÄ•þú×WÆ‘-Uï(‘ÃäØ~MQm¡ò>͆L˜J€©JrGþB´(¡­”B´î©Y{G›•Rúd}K“.è>0…ÿe*6Ý¢=•Rê¶fg0'Ö,»iQ´Ž[× h`tçù+ǯ²:ÓâȾ¨Î(‡0-ÞÛÁ˰…©9ÊœK°÷&…iaWã^[väJŒ¡Ê(ƒµs Ùì‰Gkm Â¥:†2YK~¦L‹@-L;a¦E?Úíú›eR˜ΪóšMEâºËç8oá¸õ Ên-¦Û‚ÉÑÔHAZT/òS42šq¢U&Šüö3Á´-ˆi1doRrѬ4G½®%\:çRu€Cx^êЕtG­¡Ö_[Yvœ÷›˜j¢¦“lÉ{zµ7T ^þœ¬¸)®õ}x|hAÚco¨'Óš]—߬‘´0]§7kf¿¼ ühYε îˆê¾æÖQó%v¥Z„³º“± œ'È¿ÛG87¨…F':P(µ8Ç@-ø­×¯')'q ­«SƒSÒìÚ#]±ôÆŽBvŽ•²vÿp žŠœBœ!”|)¡T‘Ô’‘v…Z ›^¹ÑÁ¸uOy»!lVË+Ó‚ú2J€ˆ8·7&š³ï¶´ÛY.•¨¾-:]¬¢—¶w‚Sõ2À ×s]4Á[»`¾N'[h›ǵ©Q![Ä7%: õ…‡#ïcÊàF¶lA+cû¯¯,°@ø’jK3¿éNÐJq `­›r@ ù…-8ÈAÁËlô\®óú›…RÀœôlQ†2§b#Ç‘fÌg8ÉQBº/7ÒÚ<î¬E>h(©)=T€¾óDç³)^HáZÄÇÝz˜CÀî Áüs´¶Ô.IÖ‹ÔÀÉváZ„w¶]ƒé3ÔÎ&”ãœLÙ“¸»®P®`¸·ø /·2³B=f“W¬EÑØ?Ž‹&RatH$YØ$õH$zߣÞÁ¶¿“ôDR ê¾dºž¡5Híí Ô¶Ý=ðL·®Ìz`ÖŽÄ—g~-Ø´'Û"äL¼–˜øí"ôz¾QœÉ6s0yÙÀ ¶i–Ž`[Ý-½3€ííå`[ýؽzd>DsdÏ-Gµ4üëS§7·u_rÁNqÖ÷¡þ~ÎPIXk¢ì&‡ù ï¼b¹ ¶kÒä´ÅJCЫZR€®æz£öHB¶Ì©äÀa[„å†ëËë >¢uߤåÚ*PÚ¯Ôn+–ã€A-œ¥K »M°-rÒ•hÑôö̤#€‰Œ„“Â'¾íkjdËìáT8‰ct½VM; ¤Ò}¹üFðŠ; ÀV™Žj±*<œÒ¸½¸I~QR{†û µ°Jl=È!L‹²êCùš†x´‰_5“»âg²%L´°¦_õmðÄiqÝ×äBœ©¸]}ˆú”¹¾-H ÌŒs­±ÈP€´(J‚¢EE+ÙíúÛõH‹¨Ž&¶¤($ޱ„€@¬ù Ÿ=êAÝWì.Ú$€á8wÍué1”æÄqOѹٺðgQ†è£ä–EJ~ÕÏüźàçd›ÈÑR—ÒÀ±D¡YX»êúÚÂø ?W²ï WUü>ÙeÑP§Ð¥lü„ã.å–D4 ,ŠUÒG ,(÷ÖÖZò³‡gÜÈU%rŽSxÖV"âCýò¨u[q0_HÈDë®kõƒoÌÌä2)‡4@YPP_ëQ!YT~M›…¤|S·Ú0‡`hä! P´îÑþÚˆòÌßN½±šö›ânãˆmŠ…oC ’ñ›4²R­¡,²–Bò›Ï5oë¼~‡F¦ìÆüøªaÒ¢•3cj”s©hÛƒº/9cŽFù~Š-óa$‹–üØÙÆ09~ß.ýžp,²æz F¶ƒ‚±0aÕ‚øE‰„Ûß7µD«ÝH‰Æ¢`ï d¡¥>¤I\fûNH$cá?ãZ+ÜòØ)‹ÚmɱpO1×ß®‘ÀXd},²-G4;›p6b@Ô ð ö!Õ nK†i@RޱÁ±ÈšqÄ!Í>>Ζ¢É“ƒÕ[â·¾²Ð@‡5û¨AYð'Ñ¿cgÀˆôÚ`gW(Y¸7 mk9.oêó'K0x0»Í!*61Âiަ2|xÊòH&=!Y˜§6í×ïÈì®mIÛÕÈr:osöIÄɺ뵴ܵÓG ê¾d/­Í¤ˆMû¹{‘)DÎ^à4Ï1Õ#¶»Æe¡íÖè£9„d‘V8/ INÄ·J°õ¨vL3¦2F2#áí”KÿkqfŽ)ûªÐ&WfþæÌž¨Ÿ†Bq>ÛRâ$ðJJa± …· 3®NÑ÷fkl—Hø0Qè9­~4ñÛ€ãÈ^èŒÃR é¾\‡9íÖÛëæHÎO=z˜¹Â3üöw8ã_%ßÄýÜ<É”0[£:Ä”H%Ì.äT>.ÓÎdó~¨4Å_‚k`.Ý=çð(¸×¬ÊѤq-ÏiiJ¦ø–ƒo¤©Tg ›%SŒËæ–ûx?36ZÏÁ¤9›ô9lÔ´¨îË–÷D[5Ž'('«&(\³%'›i.h|ÓíËÝ•%rºnêŽ10gáì'"XL'¢®ND`”\xž¯ ØðŽë$—\œD“«ü ÍøA8Á ¶{…Lš(•ÑÚÇãñ07ZÛ˜˜ËËqÿ6˦¸˜'lÞuçÁòSL¼b̈þ vjjT·e;ì Ä¶lŠ“9aêýd¿ Ø%N’ဋ ݄﷤“:a@º©Ç9ÄÍÜÊ@\¯´p‰x*UÇ$†oÅÌ?}äÒœl-È7òœc½£é’ ÚìÖi©ì&¢ä‹ÑN¹ø¹¤´ÖCóüÔÒ¼ˆ¬îÂfÑOs_mÝmÙ;Œ©ä¦bÜ Þí‰çä}QÝVMðÕí-Í«³y…b>E2Ñù`L íú˜Î#®&¨xO“£4óã§I¦8¡_l´Õâ…Þ#RDbY3mwÞ 4Ù¸š¡¿×x”ììù¯ÖCä>ÍdÈž°µéÐíS|™R,sry©˜b‡.s Í[ýÖ¨ÎHö…С˜„->«Êwûà]`>æ)¡ˆÁ}`£Ô}ÍhHeÓÁžè°?ÙqÃÍ®DX³îg§èb‹^àI<ÀsCsˆ3z¹Ø7 ĉ_na öFîkŠ5új¯æëK+iN¦ö3¾8ô—ä´›b¶‡qRà;Å™2M·èœ†3ºŽoôúœa¯:¼-1xÉ]îmÞ –Êç †I¶dâñyWP÷5'ÙQÜG=ÞëÚØö1np%$*“çQlŸœ‹9úõÄñt­T‚bŽ׎I^¿ŽüÓª!çÂ+,ü³‡û£§ Åw¬— «"¦ã?®-s=³;âˆ?@µ§vœã9ÃËV¬fÄ‘Ðu»i!tˆ%\ÒŸwÓ6Âì3~™’ø^ÄO –jP÷5‹Tj( é•ögÛc\"çx<›¤"w€w­|\γ*ÒÂb—Ž{x±ùº¨¸4»dÆ aè–Cxò#†é0¢xÃó2yô„Õï~ÅÈ©ÖvEhÍq‚müCÃÌ0Mǰ"—å±Ùj¯:Ô² Eñ ¨i$m<.±2‹AŠ^ ÷]‹´ î‹–­ÉvSƒx§»Ëé¾n‘ÔM\AÍüýÅ‘îéþУò¾0‡ø§›Ë;(¯„”à«,ø¹XŠq¨A°uhðo˜»%@º|m\ç’c9Á$8@—ùS¡)G;–í¥I°Rf· q˜¨çnµTCè°ÀtF*ñÌD梷”€Ñäf“\/¢|OµTƒº¯#“ª‘3``O‡M¸âX~Bœ(»9ÙIwS÷Õ¦óy—Z˜CüÔù‰ËoÔ¬Þ°ì?t-bwëñ8Ô.N¹RdóʰeLàdûr‚QÆÄ¬ ³1~éÚí坨rÀU½Þ½Ý-„½ôâ‡Ó·s™9Ó÷©â'ÒgŽwu[sÀ0d ZzÉŸ;¿÷.ãˆÏO|G–ueïÖêN:JO—K-Ê!Ö꾺·Sl«¿©mŒÀ. !æÑæê8qì¯ÅC]Õ%uá,+eV©¸Åób¸ I™ä$m™]&'ÇÞÊ“õg ˜}!t¨eŠr¦Ø£–¬Ùs&Ü”ø[!Cþ8¬«AÝלeïX·Xçƒ(øù˜M v Àg«œŠÃcÝWíÌ'Še;Ê!&ëQiûÅÒ¡HsµXò{–ÓË2rã6ëõ8Þv±„s]ÝEt_rˆ!œpÐSø=Tr),Uî¦Åðø¬»‹âÆ!Fë¡çR a»ZÂjÇø==èlÄ%±0qÙ‹þ·O –ZP·5ÃkT=å;Š(sµÙÃcjqÃß;E7]XèÉ+•8ÌÖ©êœ9¯o9Äl]¦`º…,JîôptŒ{ȹÏת“o¦…Ð!–ÙÉÄU×1çn&gþƒäN½V»óhAÝ×ìå` ½WßuÐÏ.Ä ì&“Ÿ6[² ¿ÆëüŽKèj˜C¬× pªoô¹Ì÷Lx0-b5|S ]š<œ¦ßXÞ¢'6¤\í2äÂÙ–1ûÙo(-<k˳³œÂ¯ù¯Ó%)ÓâÀŽ›½sçR‹a»`ÂH*_ôAòfÇŽAóg„Ñg¼\žå›Ô»‚º¯ÙIz¿vÒ³Ò ?ÉÄ€·Å†I~å’ÅìÀÅy‹£SŒ²P–Ó±%¥†uqãJ…ó6Žp¯8GvW²è$ËWòü–$—Ë2oè &ôˆñæ:ï¥#éÓDù¨õß"E‡pº4,~Wƒµ“½Þ#ÿQ4.È‘#K®dYÇoÛ¤Ñ÷Áù>´›ü†/¼Lg¶‡öýÏ€_ ÞRýrü6tѾõ\Ýãm%s‡~ ×v8ì}\3‘IÞcÊyä–|hÛÑÄwBà¿qªOzGL÷ó›ÇÊï^¡Tú÷X‚SÚžx ‡æåäAè¸Q:5áêŽÿK»G°å+úpMùåO?üöåï.»ü39þñ1.šÇì¹äQÀp×þÍo_þúÛ~õ¡ØJSÞ¿f(žKÍÄ·—4ä' Í^(rVëÃÖ5#¿ ¼%ø;å{}éÆã”œ¸ýö÷yû1Sµ­µ.†R©¡ÅVHÁ?­œ÷§¿‹i%ç ßoÙsÌqe2ð½÷/p6Ü ;¤¼j¯´ÀWƒrø:38³E”ìb„Sž«:Ll¿‰_¸®<:8!k›ân¿.¦{0VÏ÷–ËiÏ¡óù¹øô,ûú~aŸã\œIn‚;'W K+©÷îÅ«3ÑéÑ(7¢i®F$É›ˆï ¿ÃµÛÐc$~Çûðùeå.ÌXíí«R¶³K˜*š€úîÁ$~/ß_ÉRzÝ+¡ÅûÌ¢¹K´rÖðÞ}i/i}”qDŒÊÝ*5ëÙ¹tÜò;‰‹øI7׉n.OǺË[w¹ŸVw`eþ8åCƒ±,MŽlíåD¨Î\Ï®&JïY÷¸'î×±ùkºŠý|˜¡°…a9âí‰õD_Tß+ 1ë]xÆÕSy‹…ŸI7Db›]$„RNý<õrÂ'æÛ[¯ÿv1a1<@žÇ£G=Ø•A––äÜ%Å<½Ö9²ýŠß~&5^òõ6¨cj]Gò§ìŠ”§à°«kÚ&67a=hlî嘆ðýj§ï“òb2'©F9󞈎ÃÚk9ô÷lEžP,–ªgÙÃÇ”²ÛŒ‡AW_)á.ÁäT`zÍwƒwbé x~+b)äé¶—ÈiyÖUÒÀö]ÿ$þÓY‡S?„àœŸ}Œ05h§ræ\Ç–`¾¿X5ó«ÛÚü2Ì!}K¯ÿr!ÃÙZö&LžkKL,çF¨Úgüñ÷œ`óÿòË¿þú¿ÿí¯_~ú§ö§t}|äQ¹?6ÿá¿ÿSøbÌí_/òtüž¯l·9ÝZö/¿üøóï¿þò¯?ÿñþ»þñ·/_ú‘ÿç÷þþ{ßÕÛoüñ‡_ÿù‡¯_Yåý¶É‚ùÃ×ÿúõ‡?þøåçoªÀÏ™ûø,òÓÈÿî>n½ü›åÜ/Íáãß±çO·ûß~þñ7þXþõ×/_ÿoìËÿùóûõˇ¿'j_°àä¾Ê¡þúÛ/ùþß\ÿ+üÿ]·”¿ýø‡·O~ùÇ_~úåëïÿÃù/ÿÇ2¦ú[¿üÓ?ýúETç~·<»R©¬JšWúÏÿ¹q%ûáJÿñwõ¢›TË[(¼xE~`lÀ ýþ÷Ð ÷þ}<‰*ËÊ·žÃ§wîÚÍD¡B[¼~g.néµÛ~ñhȳ£ÜOßo»í·ì÷{‘R5+£^Évܲ®Tªw܆;wOÉõ$.=’ë^|\üÌUS,Þûÿ?J®2¶ó’ úÀ!¹¾ÈÃÉ’û¡"ÒÚ“Þ4úÌÎr~wnÿ†æG!T.Ríl gOj¤à%¿õÄ9¤nÊöÃMù}‡I"öÏœsÑÖ=TØaMa¨52ê'·J}{qa3¡¶ãË ¾ãö4”ÅØo÷ ÿŽ/ 6Kz&禘ÃÌ í^+…TVç°¥"}–©/‚¾J*fuüøÐÜCñð^ˆ¹Ø)J“gçß¶õa§Mq¬»=ƾª@˜¸ˆ?jQ’âW'$vSwœ¥“Z”C8ìv¥1ÿe-I™5?'÷0Fîç)ļ …ÝT­[—f-Œ³«dÖÁ¥t‚L„~ÃLeÎ)Ñcc¡PØs»å[ìá)âmûÕ7+¤ØÞæÓТP 4Z9³O³I¾7=R ê¾b¸ö7'=¾î+§ÈSrIǃâóäN~¢k›Ô |=:ßæøú:œèE!q¬Á×ù–ƒº70ðzXõÁq]„uO•öÛgØ\îu^¨IT)œ³š<%¤s&,ö¯ÔuK+Ìu÷ôH·ãú›5RˆëY¡jê‘÷³Ã9Õ” šÝÜ™Ûò]AÝ—4+a­»#Yë-õqœÿzË9Z 8b ØTIa­ûcID=Q­›jß}«œØçRyl…Ù G–„³ß úÇT“/y±…¿¾d²¤¨âTàüê£yÜJÆ:³f£¶0ÖACÐJܾ6ë¤ Ö‹QGá[’dÑîB!DŽ„_É«¯“jP·%;#ÜÑæ®àÕ3¥kïø%~:S1a æ0¹m"lu;B'Õ Ç€ÕÍ*G÷ÅÍ;X´OÕ¼x0™ßµü¹2‡Ö‡ôΆkñs0T¿<š[)ÇÝ,éÚ2•° ú °šSƒV÷ëMú÷¿€ÑÏN™Ô®¿Y'…ªŽŽ÷ž @@òœ‰}èF ç’‡¶u[2]w|ɨ^ÎN'¥†%ëÃDhʳ!e§Nª]ÞaB©Ç9§ž/ñ A¡q‚ëÂ;ñof[Â4§»†5nç‹KƒÉX¨Ý£p®“}ص®!Uð äàg[–'BS¿¶Y4oõ„ö ÔÖÂfµšzô]g8dQˆe²â»Œßüg8jP÷%Ëyë#¹rÔ /OÖK~ †’<ëPæÏ =£¨{mõ@¹TÂÃPwoœv°˜°,úºJu‰«ÔD#óÊ+A½Îª¶‹%?¬ŒõÚ‚Œŵ¢joµtüÊá²—¥Šf—Ó‚™x%¨')Ú·:êzã\g ›åòÊO/OÜáÛÚäçâ6Lb ¶ÜÔ·E§KVÐCOwÊ™ò1U8&0“+`ÃåàûÊN×vT«ÃÕ0Ç ÓÑ£ðÆ1¯­ß•+Ð&ÅÔ°'9imAs y½‡U”³µÉ’CS&¿èÎhŠ“–T&.‡ùfqÀ*èt#Æ{­[èt÷Ìc©/„Í‚)èôT"n¨|ò 9Õ®U·vïZŽkAÝ×Ì·¡]½¸ýlYºãÀé«Bä ?´¼Hø©”¢î6}Ħ¥ãbú;4od UµJ9Áš+Œ&¦—5žÒËK+·ÝØê@Ø£u%¬Ýù{ŸÃ¾ {†%º™RY1]ˆ÷í»Ü!„í@‡L ­¸ç <Ú8“3Æq …o–îS¦=ER ê¾b€ÎJOGzÂãŸ[äßÿí–ƒG}ÍJωq ö¦¥ ÒCuö{€ogG˜CHéœ`¯áÙäÿDMà!˜ =4ÈϦd›ÊЕqÝãW I_ZY2i–éÅje R›h·ÜÎãòíAÌ1eÊqºà?žC)~J>Â=-i–d…a­eIX¥z ÞÂö®sÒý3:Û‡‡æ{$×þãí”BäûÍŸ)•]AÝWœ•·?÷¡r1=E'qÆ`S²\ÖrÜ¥DåtG0éšáÐa2©G9„“^[to” ŸÈËø('6ù¹üÇ#W “k<ã—ÿ2ª7€¥ S²[>ÙÔ(Ê\zPD¯NÀ BXÞÂH¿òb›wy´âe§õ{w†Ð!“‘ªa©×Éó§2ËÉ[˜SèÅiî©’ZL÷õL¶´'§€G»{º< .¥nd¹î‹‘‚&“À£I'õ0‡àÑW:Ï_*¢’•–˜è¡ Í=÷ç’!Ç¥FÆ<¾÷ÝÚ¿·F–p¨ÌÄ`—¾#£SÖ$Œ½‹±3‚‰¦—éÊ%)9$c“e7ü\`Æö îkæÅ, §$k‡èdñg#>OœŽE/jˆ‡é¤æ,z\‰~UQXW¢}BF„r`ŸPÑÝ*ã÷µeÁË.R®²dPA)÷De4 ^´ìE¼üùZÑ©5&zð YHt¯Cu;Ø®“ ¢ë›“-A,B‚-&G-$é\ zGT÷5ë¹>xèZE{ˆH·µäí8KËÁ•'4t<ñî s ÝTóœ[÷ð,ÀÆVgÁ@9‹™O†þ†L¦gËemm+Ë ßÚµóå½·&Sࢃ³9ë8Ë+.¬@¡¯±}½œ÷?å uDС“>_‚¾KÚ’$NEç”È[Ž„S·hí'(ºÕ nKp–ooM‚‚®MR"“‰òÌe¬Å5§Áäµ­IPЩê–8M'õ8‡pÐmÑþ:ŸJ¬N:¸Ü˜©XšL£&öNc0ð0îÒsÊ{‚*"åL™);•TZu` ¯e+ÉWõÒn×ïÉ„ŠEw j RÈ|ƒðo™u»ô’Ø÷ÔH%¤ûz3ìÛ€J°Ï­NÉ •lbñ €7¨"YÜdë6ï sþ<÷g\9ààו¤Ù†ìFsƒ}^ÞH%sI(¸Î¥,1ünŒšDÅk½[fbŒ[¸è|ž•#n`ϱy¹ÿõ·K$¨ç0 é‘H.g9' õˆ‹°hb'!sOÔbº­x­Üñ<ÓAŒí&P}J"79뱆Ôt ¼1ÏiĦ¤æêy^1Äx¹¹äjÒÛ’cõO4ÐZM˜ç¾2ßݺ2~…%bµ‘PÐ$JÙœp€S²ŸÓÕ‚fÇ?gÉÓNYlf›7yËGµg²ïú2)8m‡´ÙsÃ:Ä?N.ªGîͶ›d0 dGÂ/`í¹”óíAÝ—ìÐëÓ*ºï`)­èþõ§ÿñK{­tûçîºT= ë€%ǯ¿\(—ÉGq¢8Óo×»>•Fþy|*מÁV ÂŘ5Ä÷ǰrÊ¿?‚õïþµöàÿ·ú_¿>üñׇ?ÿöY~ùë_~ùúÛ…#ÿòóæýîŸùó—ßýñ_þü»Ÿ~ù?üôãÿü2ÿåç?)ÿé_ÿø—a®¨ýøûöwî_÷âó|Œðqh¤ñõú]å£ÿ˜È-?PØ×®khí{ÀœCª¤`ó·ûΪ, [­‹îËž´@®¬`Z¹qâú–ªI¢S—ç¼0ŽM^,M~ß­,ÐÉ·Uìr}ÿ_{_»ãHŽ$ù*‰]°HÑ$ŸU{ÜÝûs,vž »*»;wë YÙ=3ûôgæÊ¥J)) ‡ËÙíJEJ g4º“îfÔ?Ãkerö@éá–hÕ2gëVÚRØ”±ÙÌ¢U|>nåØŸ^3ԼݦP¡ÆÂvž©‚b}ïÅ΋$7 €zcñ¿à2~µ,äÊxCNÌðtLñÙÕÆßŸ>ýË?S×âþÓ‹¦GNXÿ¶ñO†×«†„h©œ°· A½Ø=$–=î6ö‚w 6»êÛøÉÌÄ}S¶ö埿»ÿrül¿~yÞ~¾Kßþþ¾Å¿à‰>}¾ÿÔ_ùãþéñþËsuíoÚÝï~þúéãîcOÏ~{y“vZПþ ¿Ü~üôwÿóé÷ï¿ÝýõÃÓã·ç»¿>|¿Ýê¶ÿžoyüpÿüøõËÑ»ïþòðññ÷Ï£ñè9è3KJÈÍþp{i/þ|0 õeC©ŠÃ~â~ÿåÓ׿ýûׯ/=ó÷ÏŸÞácðußž¾?<ýQ{¥»÷KŸVt$£úúø­Yôü÷/ôÍÞb¡ûõË»ÿøýûóã/ÿxÏøeÛOÔwÖ…ÿöþoOÏ_~Ý~þúîÇÓöùçác_>üöõéÝ÷çû§ç÷gοª—ÿÇ÷‡/¸Y»s‡7µ}—ìH ‘ò&ê(f• ê;âáW|K݉¯×ñÈ{¶ï? Þ´2ÊHÛ XEFŠ¢TÛa\p¸PL-ê„‘|)_K¡ýCjŸàqký¯?½šÙ7åßîŸî«Ât,Ù1*ŸÄˆú³ŽÇ1µ©Ôz.[ߘ¾ìj.‡WJ#hذ ©t^l™¬ðôrr¥]¾È{‘¡«æÄJÞè¥z0ùÒ¦)"c«âK—MöS¹/ºÞåÆ<[Ï}À2â'Jþ’ ü”®ÒU‹·ºÊ8)UyÏl>kÍÇP’qÇÛ²fŠ„*+Q¹}9å ë‘S‰{1ýVßEŠ»1–\rQKÏ Ü£”[j+5™¦T[)VÒ)3aþ® Å•Ò ™Úije —=–kÖõtßúœM£†6{n›Ùéó•WŠWK¼æ¼ãŽdèËucg¢oTq©ÆYn/±tÂÎUT–êƒìÙ vIH®Q§ÞÚ0ªLZ[f‰›ÜËOÚVW©ÅÜ…â/vØàÅ`K~“LöðÂÆd–Èo1Y+¤BK, ZÈûÜ2a6`ªÖR®xÍÎÇ&`wç1YLÉ%%Âú€Ù4j׿¢¹c u•ÈÀn˜"$9*Ånœ¡Ü›Øéz.\*Íxéj€Ù¶sÅ%Rm,÷üno[g˜yžY‘ÎTE—¸v/—ÜóL'Ã,¯×jG B»M~F”§ÇN¬É kí˜ì’i ЍîR>AºÐ„ÙˆÙ+/ðw'ÁÉÃWÀÉéZjÊE³eԮͪý5íbªø’©ª‚o‚˜ ٓωi Adº²K¥—Ê–2¿·Ì–™«h/ÅJÇl.¦dÃMDDnû˜â"|çRüÚâKR¥ÉÏnšDN_+”JÁ¼}ògq‰2òðîЖ΋9<¥Wý¥ÜŠÈU)hÑÅM˜ —*ÀO3…L[Ü\¹ lÉ]´f©-—Ä˶UC«ÑMÊɯ^ƒ©z.·ÙÆ$³ ¥X¦/¥K)øiúgUab¬²‚<|ÛÎU„˜JE6ŸÕÔ#.ñ¹b5õ”Nñ6ä5›¦ra#‰gç7-g Dk%&ëˆ"ñb™gÓ€ei;˜Ùd¸wF¤~¨Ä¤û“CÝEõê–é7M˜™*ÆdOT{MnÂÕl,u¡Õäð#Ð?7Ú,½9¹o¢zL¢Ô´7ELêÀI²™õ¦­pɵ™Ú"(WC̶«2Õ4Asa%Rz¢$sÀ*_€5d]³id@~‹sâ¹O-5e³ë8õ¯Ï-Ö…þÐ%eüTÉ·¼Ld"ª6I©–™01U) ¥š§Ü—0oRqå‡8öiØ´k±î M‡ä½"“TI"7L¬…Æ=NœO¾ábö’L¶Ê#¸!b¶ ]G”‰=¶\9’×ÁW>„LãM\±º¡—e oJˆÀ‰ì‚±‡˜i0†n‚™,á.bF|dÊ2=ÜîYTÆ®É*°ÌˆÙ¨Ùë29= ™QÎPk"¢l‚]jÊE·26½49©o=I- ²L©™ãuÈÜ8*Œùsžs°qXÞë2mWÙÊlš¹Š.ae¹+æI¶]ªëf£ï¬—5ÏÊU–‰.ͶBðèj'SRgMºÁQy ¥Ë’e“È+ÒÑ9¬Š2y=·›çe²UÄÅL˜–*Ê”«×9þkø Êæ—÷ĕQ»6÷?“a€ª2iRÇmÑÒÅЇ¥# ¾2B©¶.S[åz©E-3בfRV¿å "žxpÕQ¹ ^±âüŠQ¹ª3É›¢rÉ#[´=)ñ&ÉEÌBà&"¬½GÇ ªÎ”·ÅJ9 mJ»ˆv™ S¬ff,IÇn¦B£9å?ÂÙOÓ¨]›™ŒÙT£)7U®B8±æ`2aÉ(Õè ‘¦Rå6ߌq mç**Mq,Ëûl&¼èL†*gkt†ñܪMKº‘¹˜½Ð¸HÅÕMC&ñéú$^,þF"9\a±g:¢°² AnÚÉT&©bˆ‹™0?:M²u‹èPa –*êÇéþr²·DÌEFíÚ¼ÃÃɧâ9[´Ì×aŽ&[½MžrfHãäGÅšÌ:€Ù4sµ&_í:Ï&XN]±û|vfU¶?Š5å±­³éþ¬ïS“÷[K'6Â¥¸>Xró0›X6™bªÁEäªÖ”›ŒTkÊ'”äš°,#cO¬ÏKXZ˜Þ‹eÙg•ýÈÎ¥€d¿iԮьf[¼µÔlJÛ–lûu¸Qm`¿$1¡…–I«#¯˜¼¾ÌÌU4›|µ?TT ÃÔj$»˜cÙßæ[E¶©®çžÛ²lŽá’Œ˜6X¹CªÕrd•…ï‚åõX@-sIhl©x“T)!3ab§ù)K°IËi$šTĹܲÚg‰M»{ dÜÚ†üñÖüX )@iŠrˆÇä*ÞDÄ\/Ûv®¢Þä+f¨¹1«Ó¹ƒlE‡8–ˆ¹ª.‰íçæÈiÖùm+p«R­MÂì’Å…WÆË7Ýö¼în/U©¹;æ†TÛ…xÙ2a>^RĉiP­´ÐFäK¥Š’a ³x~ Äl[µkµ*D&Ÿ‹PÜÊßZ4³¸Óe“7ÁRÁ±äµ4¥œÜ:˜Ù¶s-'?-¦`F4èwu*¦g©L⦓I-'?V+~ËH°êLLoLgY'xƒ LÄÿѽ³þ]1ùXSÍ{MGi)(Åm:±g¸Ð„ˆI9'˜»LøŽËpLÆÁ8t¸ü胶­ZÌ<ù\BÖì Î[#®‹á®3© ƶö0©êd·¹aãõ¼Ì¦«¨:ÕkÇl1M2FVç"ÌxF8ëÖ$㧪Scí:¿]ÅSI¼"cÊ—üMd‚‘.[=e]»q^(ëIJéažüÉSé…&,ÀËÔÓ'-B&'/¢§6@ì0}„=̶U»Vçmnnb:Õ¼¼ð+á¥+C´kh{nâ%žšJ}WÄË–«(uà‹+šm|‘ÎÙ4’.û¶q¸#+º½Ah”éõlxqÒE,X(©-âË@têjcCy”ž¸­Ã\%¿ý¦X»bV(šWwƒß[N=âWvšÝ‚¬[ý;çß’”¦Ä5¿ðØävL>7B¹¾•­E%zFó!îˆÙÇ*î°Ùqÿ³´x¢Î ;”öèöak †~Þ§O`ËRNuîm•†¡Ê1ºu4Ñ'öN¹ížãÞ7õþêSŒÜ^Éö^|ZÊÒ²”òk¶Q¯ñ„ŸÈcXÈkUÍÉÁç¹?$pæÕ­§²îX4QZ MÖk¥½,±àÍф͑l €Ÿ©½òq÷OAÎëù'ßÐü[¾|©lK™|¤æškjÞ¤Æmg,wûÓ±m0Ì,F °P§IjÅ z¼"ëÍ#W¹ÎcEɃõv/ïd‚«•3!Tî:#ܹ ìò3wÆhÏkZÆRKZ¬ša7…- c×RŒM%›òÂØMˆ6 < !!˜/$…Δ(G }\YD£Ý鵇™ö¤¤Ö槨Š}•EglŧÈsLk.FÝ0 W9¸ÎÛŒõÕ ÞsÖâ¥J[3¢-mmÛŒ -˜ ˜ªl}j?z œ„ÛWŽMI~oY)²È¨¡Í®gßkëZ—[û•Û¬ASÚÄ”:t°›V6PQë:õþfpÙ²rIk›ÆZÏF”â;Äà|Ö$¹FÈ6qöv›¦a”&;*={^ì+Ü.IUM]ȱC,`ÇŽ. •Ñ`ÔoŠ–¨¨¢µÆNsO¤Þ-4`6Rªžuiò5LA’>ó#©·lÄeÃs»EF -MV-ëXqëÝ (Ûv®¢e¶ã*ƒg  2ÚQÁ2Œµ~Õ¦eé^Þ4¬ Å—zÁ—.E̱ëc%ž`ç0V6%9²¨¸ãTÆ šã5ç©–uh’¼.4`6Vª’u¬ò¢Î&`Š>z„¼ ™‹KÜK¢eÓ¨]›1Ë4XöRÖ×Ìj ùݼ‰/X­ Óg;½u¾®Œõ3ב±¶Ûq©çsÑ’‚66 e¤¬éWö*Önù¡Õ–ô¡¡°Í2í<»pQ…Á)·®`€O¨b¸IÇ¥RªaÝ–•Ï<+·MÑ•…6̆Ë^ÂÚ4¹m¦)˜tƒ0á·¬RÆë£eè—&'¥ ™e¥„u¾’ Átk””«!Û$Ó{–ª_VA˦•«ÈW-š^Œ(E‚ÔiC"†u,kŠe©zuaÎÌòÝ…h»,)´Í¸Î‹s7ƒHà›lŠóxÈɳª€µä¶<²aB¤[ –-fƒ¥*X/= UB7NüذlÙ´k1|‘F œÊW‡j÷&çàXáßø² Áòx¶–”¯æz{{°l›¹Š|u®ŠYgB é@jž€ä¢,Î+:–ª]ÍŒ¾#ÒÄs[FéQJ¬[ÆºÌ îb¤‰Ó8…OÂY&oKÏå°¬W®¶Ó9Cª[mäÄ6á2 ¥&êLd?w.ÌàJÎÁ”b;oÃaÙ4j×fQ°iVKêVûkª°gƒ$áÇz²×h´!¼5ñ¤lu­×sÆÄf®¢Zí·#g ;û[EN}B:FO u"“sYUUÐõ[±cDçµËSþ(×G;6Âa†ÿpA¶Äc0q˜†¹`<¸„QR˜ÒoÊ&G5ø8Ñ™zÕôÑòñÔ«®Ix.eÂü\têU³?NÐ%¾N™WK<\ZK«MN€$ò 1{![âl›v-FìÚ®„R¹jWÇß)-–Àˆ—:ƒ¾oè R­Ú^›Yv¶‘«hU§ ­ê³Ð„y”Yèbí¡‰Kˆ¿Ñ¶ÕŪÃXü}vÓBîÄ¡ƒª¦!Î’lóÅö*§a*Ya…i]S"Ùʱ,Õª“ÖÁLóh5ú÷@eUWZ•Lª0.ðÄÙäÔù˜n¸U¹Ä¦]‹û ߯3I¢Û#·u)]D3|ŽQ%M½wa²Ä±—ª.Üö¿^"ú2;WѪ®éœæB ¼CÉ•OiKf Ū¢ªUÇŽvÎm˪Ð=®nZdåwJ+Ûi@UVN<ÌEVÐÉÆç¼ÍÒTy¡RµÍí­ÊE,ÀÊÂ$½}Vô³q)øÔ™R,qɆ.;Yß­lÚ´k±oå ©Jµ¯²õn”ˆh;/pò7>Ào#^·Eª¥IÉu- l›¹ŠFµÈr׫¼¡H}ò C“´¦WIú×\ùSs[Ƴn ¥r*…ld‚ôê0I©+XecmŠÔX9Vò´qû3¹Éqn³î­\Á†ùHI…ê|"Ñs•œtßnaHŽðõÝúNeˤ]{òL7ÄŨ×y¢)òž^<ª‹%v%–tBšºT{Ý·Bʶ™«(SsCïˆ8ãìí<¸X¦øúH'ZÖ¢™k¶Ì›Jélf»"ùs®ä½BòrsIQ—©=B*…ª‡À1c{tö­²Ô±¥ßIæ"Y¼GÙ¸ÿŒTf¢²#%ú>‘–hQ€Y$›6 -Fyh(øLò•¾§à‡Š.XðüFR Äº4Îr¨F­aÀtÚçµP²iæ*bÔL“Ô;LõvÕ»”ÅtR|Xµaª¼ÜLXÍb²µ;éXåŠ^ß4L(–§Î%‘`ÿ(¬£µ 5áá8O^©mšßËlX•)nû@t¾ï昰h<|7.^An+­:פ]{á*6‰…T‰ÚUEÅ·AÊHƒ­ ”Ýtòy/Dí«DÂÛAeËÎU„¨“rÕ.ÆJzx©…3æ˜3²fì-ÊE0’#t>Xš®À²+I’ ñbT—-œŠOT¡ãj”Ø2z꺪&„v—2a>Rª uM86#̵ºöSì\*7ÌZbÓÐd«cc—’*Ô¥:u¼IŠFqpp'6<-6äÆÑ7E¨%6•_¯–#Ô´sêÌý¼Å‡1wžÊ_¤8Ì-I«f Q„š{x‹W@E?,üUüms&i„»XQãtüÛgŸ”@&éœÕ vš¹09γêu.Ü¥lY°+³ÛÖêxçgä`¶!10¼}Wâm¨gÛ´k13;¡(1¼N›5·Îж‹ÑÁ%˜§,±žÎgnéUðqšÒÌJظ +ëÆ÷)òó•˜×f®B)Ø|ˆ%çs“™Àƒ¿úg«"öÖËŠç8=ºj.nâî`h’¶Qº0CnPõ­ëÜwërŒù(ª#û¹k•ªvù¤òÆÜûÏÉ$ýi÷v îå'oBÙ„;1¼_”s­eÔÐfÏ˨6¾C©ÏMµéu¨L¥ ÿÛØŒhɧ4Íæ«ÔçA¥LnO~Þ6tòóRf³ù1"€1Š©¶ò¬“Žd¸nÕ¦1ioÄ©<¿žeG>ÕwÁâ]È7 ©ŒÉuÀÛ$KÕ–ãJF¥?š*:9Ö½²/4Aj¡ ³SéÏà åŠI¢3HíäÝ&¹€ˆ×ÿ¼¾M£vmæ0œÖééÏó¶¥[sF!‡5Ð÷E‚ÒÙäít:¥ KEp;J¡¦«P “Kâ Ä;– p0÷a%‘CjÅÌs%AOor{qjN!ﺔ‹qKjПQ¶Ö{Ä|X•ðœÝa¨§4èy;.b6¼#Ûƒ4°‹™01•½VžAßC5ª(Fa1ÅðE9…ZFíÚt†5ØŽÑwܘ±2`ârån°þw)3} ÞS¡S¥îöˆÙ¶s&ôR•åÎfß¡#&Qª¨ÕÄ(6™·-•=½‰=꾂qUÖ¹“TÊõãqa. Ì,›TL—Mp‡§;J„nZ4ÛJ„^óv^̄و©Lè©Úª;œ²á½4šw·Ì¯\bÓÐb§jÖ-ÄT&tÒ{ÝV¼ñ<¶ <¦rû[öí´NéVÊÛv®C‡~ Z5§¯t.™ƒêJ¯‰ØÕ Ñ+Õùâ$ñ¹¢ÍO}®x¹Â–tC ÚlJ¤´·•QFô¬>ää`wQ%ǯ`ÂlÌTNt_%_Ìj°]Éd…K ½’—¢÷E726 -–^xrS9Ñc“ò*ˆ‰ûRf.¤ wŸ3»Ú¬è¾Y±~5ÄlÛ¹ +:ãò厘^"±Õ©•ÌhŬ˜?¤¬èáMû˜ž©hE•F  C÷•K ‹O€U ‘‰a“„[r¸G¦¤èǓɖJŠ~2Ùr‘³ÑRYÑÓBÉ[&6&Ï¢BfÀ:Ìž/2j׿2̯‰§ÒÓ¢K•çv#ÀÔTQ8ÈdˆÌƇ铟ž=¬£#Ñ6tjtóÙ[@f"dЗÁ–@ªžUÛ–T‘æ-2>;¢fªY4LéHp Ðô€,¸³“’™‡NfOîU%qz¼gÑr­…›™-#fgÏžNhLNƒ”¤BHQY Ûð8šM£^†üß‰ç¢ é}Òʵm ý¾ÚÁ/ƵmÔõ(Oz^ÇÙlÛ¹ Sz+?ÿœ$cÅ ¾öÈ >ÅÙÕ©Ò·æ-F6’g¨T‹‚ã¢É7ÎSfFMÌ¡óÁóp+Sº"N u¥—凿-f£¦¥û…‡æO#·‰”ÈùG8jµksPñÍÆS±¢D7ÞÐ ჋v#ÖuA\ 0ɕަs¿Þ PËÌU¸ÒC¥r9;ÉÈÛ®s@mLg²—“Œ”,=¼éÈœ¼;9{[—B:×YŸ.—ºÞÈðñ¹ ±Ü;<"7¢[ µñ_zU]Ì„x©¤ÅaQx„ɺ åy)î†>‹ŒÚµY4m¶Í—··®ð‰Âšw n*ƒ™N$Ë´È£¦—U86Nع cz©|í¹õÕ‰i!T©‹[¦œZýŠˆ©¤éî-"ÙÀ™„×PæÖ9\õÀÛëÛ€ÁbŠÝD‡UÉÇã,iò¦÷þãäP'%ßb2ঠóÙÉ›®›KH‰lT+ñÄ.èç×'%jÚ´ksÒÀFy&ºßZa«Ÿ#é\Pºs‰Óó*M+WaNo) þ²`¼ìCŠ`=6T]µe ¤:†œË!b…¼Ž±ŠÇ· ñ8Æ¿p‰¹K>…M–Ô•—fŒ;]TCbr¤G«‡± ¹Ó[&,€Ë(ÊVÖ2fŠ--»%X‚d¢ëƒeÓ¦]‹ƒ²Mna*wzlÔ\…—Ȳ` !èõãJ^É+ÜŒ•¨eå*ÄéRÕ‰ÎaÞîpÙÖ3 pµjËú"ÝåÔtÙ0 Lj§™Ò§ÑéÅTœ@LM¬&aý³ÇaÊœ®ü_“㼘“"8 MX•Å©›ÛÊ ¢*äM-&lRЦ¯¿áÖå›v-öý¦_,¦†›“[Ã}á©óÃ%L—“÷ôé^ó£n–m3W¡O7º+±Xi>rdæn~ãJ—hðªmsŽÌÜ–9ÊwI¬ $)•k½¾,TPÌó2˜xLyIuU*˜éV+ê›ê M˜—$PªF½¶Êš·lŠ]±q©œù!³mÔ®ÕNÕÛ4êmÙÙ«ì^øÃ™Ý>¤.D9Á¢Þ+NÜÞÁlÚ¹ z| “[f}äaº¢$&î…´bZ‘Ò¨çí´4rtÏù`ŸA¨¦]Ì (‚u19Sí¡PÍ阫Ûû¡”gr ûx°{1à¥Ï*/çïÜß®ò¬Zõ7dàXbÓÐâ`tA›VN"™º»9™:ul'c'"2]é£lêî@ìðV`Ù6t>u_ÎU± ˜l)§ S‚éJÎ~U͉ÈûyžBª:w@{)ºC•®O{é%øÎVà@V°~œO]ÉS&zò<33aX¦¨Ì°ÜºHN¹´Á0abB¸!÷Æ“víÍæñä)Fí뤬O#í|GbaÜß6›º¯Ôßo”-3W!S“[I¹/‰^ªƒ(ÜzÙ§Ñ]…L]w[–#e€™RE(b-üåâ ¶-I%-)[ÀTì0zŽÊí”NݵhÔM=¨_sqæ#¥Ò©ŸPÁ˜Žw»`ô4%Æ.'ù„Ìš6 -¶=£Æ4=)ÙÔùL¦“s®‚²ãæ›dц¦™’©Wìˆ7 À[V®B¥ž4o¹– FŒH¨)ж©¥<‘Í[Bð– °2;¥v_¢ùh(A ®l˜Ó•‹YÊÇyÉ#ž–M»Ó¥o©ôMx[¿ÒÛHjBüêrB#rl¨ôN½\µšg™™«ª›·ˆô‘Î'‘ +¶v)T/«pªÛ·lW†ÌФ:sÈFøôöbe㬉Ü-¥ˆw鲕#§…œê¢«ÁôɲªWÛ—²a>Tz•¬qKÜJ)Y`:P [{®ŽÍ/dÀœÚ»¥þúéþùá_‰“I¬P„;hÍÑI—ðD½U¯Ä!{÷üð÷çËÝÓ‡b·û:Ño¾'§&é†Nov¦ìwâäwW6‰yÂý#œô¡øgñq:ʶ~Ò¦úópùõû†wÄúl‹×g?u/ÊîàG,\¥®ðg?Yë§_Ïë,k™0ù« "uîx¨½mÙuÔ5W·§±ÂjùÏùVIÆCå>‹e?'91¿œ3§ïªsÆT›¥o¾+ëwŒñÁR[Æu9żpâÄ z”ñÛŠ(ñÄ#h¿Y“Þ6ɸ3××6§1 .k’%E«•¸çß GÊ©Ò'BÅÆÉþüápò®:k~°7ßµ¤Ð園S$E’í²1˜jWºåó¿.Äjíœ~‹ Ï„Œªßí¥¦¨V\ÅÆÆhMš6=ê““fÄ1Zq\å3™’lgSžvvÜ+ëŠ/°r•\³ç?Mëæc•§í Y†‚]%U$×WAÔÌ–%é!k-fIºdй䖯LEßÁ‘ë‹A4ïqL#7´TÅU#ןàõYhÂl¤ì5rý)ÁÇQPJ©t±XÏÝ‚KK-¹$R6Ú59è¦ýd™¾Jä–¦˜â5°rË`/xÇŒ6Øb¦ vT"·T;·BËv®"‘ë'´xÎ Pšác6ªx g9·¶Dn©èæ6MLì˜s\5™Î—ËñýN£Uò¾óž~ þs˜è¬¹Yápr¨Û¨™’M–¡e&ÌL•ÈZ·>œ(ÞÀÂ0»)®} KM¹$b6Ú옣4~«@.±è:üèS8M'ÞÉ&ú€!~RWš ‘×Ë–‘«H㎔´œ“žy½Fê£2€IpIV$RYÜ‘ð³Jg²ƒcV5,d„¤Vn~û»àÓYn‹bE;œ‚*Šs*Š{¢Tg™³1R%q'Î{Nmz=‹-ކäÎÈ€M£†ëž,+'ž‰JâÚfõU|JÉLÖ¶›¾p0ûéªFĽ²àÎ|Wפ9ó°ÃIç%Ô<¸B Uñqm)\÷Œ´L‰Ÿkf9ä,ùbLèÓÅ$>=C)¤Vñǧ*„ÛŒëT×-Ý¡l0"U7·kK&Ð(Š%îRxŇá§iÔ®ÅE«º's»¨ËTƒGÝБ,ð(Ôð#{ \_åäÜ%[v®£€›Æ¨Ðg %æQ”Xå„@Å¿"§P¯€«ÜˆoË z”5Y¥cÞœ‘K àN‚W¡Bf]<#„x‡Iÿ½îxúæË¤ªçº˜³Ñr¿M•û4œ‚°h…à”H¹¼Ô˜‹"f˨—V§ÕÚ¨}+Ûkq¡Ož–¸Øç%o$qHãØ[…oSÅq³C¦™«èÞºJŸm&¦PűdL¤ R,F‘+~Åà[eoC¥&:÷PavCUy–.KçàoÞ"ú†[RŒÌ'ø.rt¸Ú«Þ6ˆÐUô6žÌQ]pÿÙX©’·¹…§'Ìux±ÉT—]Û=ÒiµksP¥É-J•¼m'_%?ˆt/ºØç»\ãoKº6ߨ]›9'qTØ–õþ×ñ$'È:R"†ì6T“•1ìjÒ9ã¨×1E7àçÔÚœ¤|m©8ün†”m;WQ¯uo9Ɖ”ƒFsêbè„åÖc$®Ú2ô‰×.¦$”}ÒY¶K<ùÂ%eÆ&€Š¡\ Bášà¨™rì±P¼¶uŒCíÚ\Ëî¿(S¬â•ó1Éq† ¡øúâàÿ’@Ù4j×b-skù“¥Þ…¸Lš!’t«¾ “…'8­s¦+ÂdËÎU´kýqráù Žãm—ŒÖr¬yÖ-ÆTeijAÒ1Þö5LJ #].i²RvxM`=Œ;:J¥nm#%OUkí¶M§¹Ð€ù(IÕÚ²%ãßš‹¬ÜV‡q¶MC{­ê&O?èõ ùÆ!7:´³)”„&P Vü$õd¯Yk®˜Y¾ÐÊU4kãò¬êŒù˜CU‡ãLÁEcVd¿P¹Ú0ªÃ{ÞF‚70¨>»·d, 1\¬b±‘‹ãK'‘G'ÅPþøh€jµ¥-Í©¤Ée,@H¥£nÓMáQ ¹i&ùº5ð.\t?H6Úµ™êÓ)ÔªµÍ`ö*(‰î,öeCW-ß US­ZUÞÉef®¢U+oÈ2±sL¥Të9„¬ kÛ$‚J˃môOg’ÉÕ¶$æ.›lÆK.ÉGïÎÙRºà5²¨T;®ƒºû{OR~棤×óÁ%~$:³ÍpÄÅW¬ü“M£v-î¹u¦|ÉA)¤Tä$‡ôýÓ㇇éÖÊðó~JÕT¥YßbñóÉ¿ RÍÒ—ûõ“ÒèÏᤛ‚{ä AX·O’ý:ݾànÖWÿ¾?+uî¿|:øóÓÁß_æÃß¿}}zÞÂô‡/÷ŸÑ¢Ÿ~ûúùá§ÿñù§O_ÿóþÓã=tß¾üÚøèß?~{dêNëëÿñòž]‡=ÐC [À´l_·ß3ò˜dä !KÜËÊÙë–9¤*÷uv÷¾¥U€Í-\‰‡­=«äFçŒ œ8>ÒBË:ís^5+M>j›^w#-tÚ]Å7Ð9ýkfrµ^Øm{ѪeÎÖ­äú€–ŒMgŸÏãVŽýé5AÍkÙâžS½¸¡mÅЗ"ë£x(\kP>8 †k¸Ùœñ«e%Wëä:c7”“<ÂZ¯6þþôé_þùéþããý§ÿ;<ûœx•ÿt`x½t`éµZ¶¹ç`S?cÏI‰Ìù9¿,ôƒ¤OJl¨¾ŽŸÌ}ú¾úçïßî¿?Û¯_ž·ß‡ïÒ·¿¿ï_ñ/x¢OŸï?õWþ¸z¼ÿò\]û›ö÷»Ÿ¿~ú¸ûØÓÃó‡ß^Þ¤ô§Ã/÷Ÿ?ýãÝÿ|úýûowýðôøíùî¯Ïßow°ºí¿çÛÇÇ_?Ü??~ýrô<||üýs=CÿÈàv;<²ýÁûÒ^üù`êÊÖè2ÿÄÇ9üþ˧¯û÷¯__úåïŸ?½Ã§>àÛ¾==|xú£vKwï§öG¢¯OßšEÿÒAÐì-Vº_¿¼ûß¿??þò÷ _¶ýD}g]øoïÿöôøüøå×íç¯á€öåÃo_ŸÞ}¾z~æô«:ù|ø‚›µûvxSÛ{ Ô0ÑÊܱz~ןûžxø_SwâëukkuéLNbè ¥×•ñçÇoÛo÷l’.Œ|ýoxéLÈ~/á[^Çþh©/K(ŒÛ â¥GwØtÁF­¢˜LHn¿6Ýøõãã7ü?:àãÃó?¾=|ÿïÿôáÃ÷ïß?ô?cžý‡¯_¾ w¾>m?üþôÇýóïO!"-¥ì_ÆÕÏwVŸmþýÙPPÄø;D`9 ®FŒùîÃË3±2z½däÎwð9ŠeA ób¹K›-eYïL—¬}c²Þ»;ñ˜ä)êÖÁË/_†Ø_ï¨îšø+ÖñCÞD_p%I¯`ó‚¯á'x&’ñ‰„»â«òf›ð‰ÝIc²xŠg¸B€»rÇJ6¾}³Á­øÃ{9µmüÅóV‘‡;Y‹ ÖÙNoE®+ï=_{’}Ü1ÅòÖä´H¯ [ùŠèOàÿÜÁ ݤоÐÒ‘Nn÷ ÿëØeÜ ùCÄ#/¡¹ŒáåóÃSï¿õ¿#–—?í»Îõ(Zúó½ÿÏ÷—ßß>ÖDªªkxJ‘]Av)<Õw|žùaë{'ÖÛX]qyÇéckÿz§À+Á02L·*˜>|€Kœ½j\Š„ìúkøÀnóiÖI’Äã›ܲìn(wü{ѯ!bpPƒßЫwúíÃ=ú¯rxðMwƒñ{/Õ[°ïH[laqF‹0L,™¿vhbÆlz„Ù÷S£ÜÄ~J‡×ˆãI*‡ 6Hᜎêþa1›Ô±1³•ï±Y0ðgø$œ&ºa‚ë¤5ÁÑ×>±¹ÖÄûé^Œ^Ðydz»x3‹éÖ_I£ÜÜRÖ9 \u¼’²ío†iî0“bV+M ´wõA߃6`ra5 ƒeÚ4Í÷³Ó`vóeJýK_ør¸D½Ä!DÒ^3>˜Ò73ëßû™ªÓ·céêßžûïÃkÊë—oößesÿÚ¥þ 5¼ïç-¥K…ÙfK–nƒ¯s‰³;YÒbä.RXÍß ©Šñ“x0N$"à$&+´ò{'»'ÉJžPlz½Âb×ómÌX¼Ÿc‹ƒ¯7VçÖÞ…ÝÔÚîÍ- vE8 vŒ³ÂKð¢#«À¶ôý?wÃW+,fÏ‘Þw9¸‚ɤck©a…'êà×?‰‘aA±:H F8Ǩ1 Çv×]FE,i‡w'5ÐFÌÐ~Fh‹tìoF“]ÿ‡¾Ð‹äêJ?)GÀxòÖ²gp&Aü| ž€{õ$Æðú­ãÎQÊœoxTN”K ž¹Ït’Átï§"ÞÒº”" ÀÜ1Kã2õó8F¹‹`†p³§Üa´R q”â(,KÏ t% ÜÁH‡H!è DšÅR\K®úD.Áâ1Õ=®d7RŸ &ÁË•H‚Ó‡…™"HyºçGÝå¹k«ºmßß¾”–˜;Ç9zi 3Íj¾q4©ŸPâ &¤NŸLæ2¸ÇÄ)Õ%ÏD#QÈ(,’‡kÏ•Ü[d"#×:x™ž‰KJì/àY"j%Jõ³Ï®çŠÈs S_ÝÀ(6ö «Û}‡îXñí¬,ñ¦Ÿ’Ø¡\Ó{8EËà%Q+ÇqÆ3OÃ,\ØÐ¿ÀK8-8AG ñQ™£Ã,“”çCTÞŠÑu̘~ê="NÁrFN¢lu,mx½à»h ÔQIÃ#\a}@|ÄF¨Á{’âÑð8‡'œö.M0E…÷O/ûnÁù­?Úu›t‡~#ÂCøB)¾ŸÚÙ ð/¶fr_o7¶âËØJo[XkŠ\ÚÍNý”ú¥–ƒŒ%T8Ä:82ȼPžÀŠz-tÁ÷™py¢ºµCP¢‹¢¸QG`DQ™¯‡ƒ«.V.ØÉcm‚ïAxq¥¨ÇhþHºW~oT°¦£"¦wÄç~A•8@Á„†|–!ã›GÌkä6~¨³px‰' ÍpgÀõø´ËVNÞ{ì„ÓbfÔ‡, ºÙ9ý…ƒHõ-¬Éöt<ÍHOàM ŒèOŽVL,™X›RܤÜ@Jì1Ãwœ˜ÆÞaÂãLºèÃe¸Ã¢º‚õÌTÆs&± ‘7ƒ¤ \.G÷.sÚ`áÂ*L×ñmÚ^ºïƒƒcñEð 1ê5Z’Dø´…•{èɽkø‚Ìïb¸àÅgð Â0Ý3¨á#F|E‹á¸æ÷.1b·7˜a–pÊyøe@,áÖ¢™sa2mD~p€¿ŒÐ ÍõÑrš¢•X*ˆ®‰[›Á—R?ØEGdqôýzs½D=°’ƒ!S ¾ÃÃÆìác„Åaákd„K±b&]6Ò±«â#§/bÑØæýÁ6µ{„ÕD¶©áÕ x…Þ»KË£‹!¯›ˆƒúP±¨I˜cÃÒ“ªq¯·úÂa >Ùdê±Ã=‹ãßC‹ŽRÁº@ßÒ,ð 0ppFÆ%ºÉ”ø„c;„Ÿ–p"\y3lê$9Àg!RÙD†{N·vb¤Ž.Vw)êv`iVo°~¨ß{ÂuAJáËä*µêûrSF¥âáL¾^™œœ*õDÈÃDø_w“È:¸p ×Ä‘BZ˜ï«Ü.Îo<"­¿%ôñ¬<›Œh2Ãuâ¶–³Ì­¬_ßí°ÆÖL{¹õd‡§óÜã‹ 0âñãˆG&¸‹ÀĀ‘1;`Ëñ¸aŽ'šÙ¹Xþ-kv0¢¸¡ý-ð}FoL†PN Æ #Âr~,éð'€ÉXŽp m†_³Õ“ Ÿ$1þÝ¢Àë‚Ñëtƒ1šaˆÁ×vt„³tHÁŸ²ôm€PA c Ðåˆ 3Í"et š^. ÷’†ÔÁ¯wêäbQá>¦žì'¦J‘*`òt<§®°ÅpKX…0 ÂíÀSrQ²¸îNXÉ §÷ŠLÉpU¢ž5"« øÈ¾·xB»ïØüä^¯Ø>êßîœò‚…ŒÔrè£Neœ9Îvï[×|çŽG›ÑN&-£øØûºh¸ã¾º X§Ñ“pT÷A74Œ‹ s ‹:2x€½':0ç×p!ˆßf“ÜQÞÖ§LZ@sGö;£Ãàˆº½r Ê<Ô’AŽl*¢û9²,<Œ|†x{,żO Å‚÷ÈÚ¥´aùÎs¬rƒÏÜ1›Àƒ5‹ác G\”8»ØóXÑ-që.¸ßpÉ9ñµ@&àP`É]›ˆ-2SõÞqæ<]kèüãípâÕÓ¶ÀXÌ 8~w–Cœ2¸ÀõÂ×̇нø7ð&ð-u{?Œ×ù!Ü#êAXÇ€é²ð½ØPà L~{ kÐÝýå_Æ*T’î]<´kfTa¶Eú¾±ºi‚®AÀuÛ§fdÏ}Zni¸aKR njÙa“Ñݽ|`;|bÞ¾Äy“c4oNE;'Ã'í;n² ÊF En ¬Rèe9ÇÉÀê6ž>ÏzÛvP³ž…A¿ÓᎰL_3#*ã¸ãj©²hôLMJOUý›áŽDÍð² Þ±Õ#ÏwÜ^‘ÝuÂZòîçߟŸ÷¯ýÇ×Ç/ï>?ÂaÚ]ÕŸñÏ;¿»vØ™Û÷ß»zÒ%ÇÜ/¬T|ØÇ)Dûý~|.LñW8Poð|á;ï%Û+ ¦ž»Øð\SŸ_ÚŸp°ÐM741ƒþQWô¨Ž”ל”¹Ë¯áïºÓ‡%)g¥J¼l“ïB˜8ÜBЃž½[qñ´” î7¤€ý^7n*úëp[ÝáF8¯·®îþ}w/I^x^ÇÏ'ëØ¨ÿÞÿ¼v×H/õ]bÐþ\w ·â­‡RÚgö£½µOg£½E9KÍøSb0ÁâÏ‚ýE@ëÃŽ7H\˜©\‚šCì\¿ÉÁòu¾GqøÞÐ÷陾 ±5ð´‰ "³’^¯|º£d£‡·Ä”5Bj¡OãôH ~ŠÁêƒE'u™é'èdWíÔ¾â€a´ZÐ3;ïàd7q^ŸäžÂ;T×§ÇÓÝ«-öŒñÀƒcï÷Y^&B„ËøaaΆö3¦BɈ=èÛò9Ó§5ÃiŠÊ7áÿ6†ÃÿCã1sÓÎôâ¸~gßé7`q}[Ÿ.Ú|³ÑûpˆÔÕÓ¶\CÕKáD¸„<áîa¾ëoÃãñáÔ“Ô.wéEÈÆ}‚þËa[¶êзÁÄœžË¾ ¼`xˆàBdødš¸=1=‹I"Y8bv?ûOÝ•ÓC­mçò2îñD¦sÞ”‡n~é?Ll“9éûOm2à®ûoØ÷Çræ°fö“/sÕ~¢“iáqï K±Åq¸ï<¸”Î2Jï»K­Ûë:?$àÃQ7aÄñ„ žt#ƒï‡'"¢  ¹9•+8Nš€·’uï§·×óÑæú‰ÉÔœ¢/yŸ5½ó ™_>Âîwf?/²ÏoÔ >|}êÓú÷S%‡¯ùôðŒ`Ë|ÏÇ/¿î®þíëÓÇÃkú/ÖáÇGÎ~ÿ§ç§÷?úúá?·ßž¾þúôðý;¯>ÿ|^6æÏ÷ßÔ¸ï¿=þòün÷òýžSÑuðKÞøú Û÷JÞýóÇð‹û%®‡Ü,òðìªÕ¯vÑÞ¾úO,†ú§?¿?þüø‰Ö_?=¼¯³óÞýãá‰ÉŠ/ør¶?ßøÏ_Ÿ¾þþåã»û~ÿü;“<«ÔѿⱵóFùŽSØl%Ú@߯iu)å‰P⾪!1ÝB{J#`Ëý ÷ É]5ñ¤'îC®êôw¯Çñ¾_~OÛr¿µ?Ë!>B …hUñ7bê´~hvŽ]²¥ŸþýÿsÞ›Ý|ϺÆÝì¤_5ËýBn. Ëzè:ž%ÉòÀ”ý|W8nL"«­Aí÷ý fn÷boí¥Ž c¨ËqÑóPF‘FÜË=0Ëá䬰Әåè8ï”;¨™Œ§%¦ÖðŸ¡t2G‰mŸåÕlÇzt89Ãüý9?ÄfÌ:b˜ÊiýËE€œjÈ0qÆÿâù0]K&ZñjaÖ çï<Ðc†bÿ{´©_”ú,ž~½£ ï¸>íåz'‡Á £†bòD ï2»¼ Ý1Ÿësbh”k#ÜÑý]Rf@i*IOÌíÇ$š>[2ô›“}zRÐŒ™Á’-O˓Մ.¾‰[ÏýÙ©è— ã§Æ‚˜åúÃÝÄþuëá¼l|àÞ绿u :'½Ñ~’¼;×Ü ¯ž`‡ 7b€O‡5W"À¥æðKÜõàQœê2¼â TŒ:+wž½Ä~Æôÿ¡Sâ¼hêNÐ&iÇ~ëÓàô3qú%6³<É6V×\a¦xœ^º1˜Š—Ýkio¶ì-³…[b©Õö8t˜ìFcᔌnZK.Æ„ ‡IŒ“Ì ÈMò‘Ú¨ÿx“òÜ.ñºÑ‰‚C¦¿b5Ã7÷O[âEv`¸&¦ŠÈÙ£uÙö¼·Ñ‡~±m”ïS~×Ñ#gŠÃ+F±­}dvòÇì[{eÙ/5È}ýæžZËPz$©]=WHœöz±.-}Òú`LÖÂŽXAw\ÿõ§ïàŸÿ ã”b]keepassx-2.0.3/share/icons/svg/document-save-as.svgz000066400000000000000000001731751276304217300224640ustar00rootroot00000000000000‹Ô][oYr~ϯP´/c¤UªûE³Þ™A‚$»ÈcÀ‘([YYDzÆÞ_ŸfKr³e®–¶Evš´`ê:·ïÔ©Ë9Eê÷ÿøñýõѯó»åÕâæõ1ÍoÎW7o_ÿéÿ|’ÇGËÕìæbv½¸™¿>¾Yÿãþî÷rrôÓÝ|¶š_ývµzwô¯7^žÏnçG?¼[­nÏNOûí7¸z Ââîíé«£““¶æò×·wttÔv{³<»8}üÀûáîºã»8?_ÏßÏoVËS:=îÙÏ{öóuçW¿ÎÏïß/n–]Í›åï6˜ï..[î~0¿IÇDUuŠ|Ê|Òrœ,?ݬfO†UÛ1n«ÊˆxÚ>ë9wã:ûxÝ"ñWÓ=Ýì½Eÿ¶ýù\á‘ËŇ»óùe[s7óÕéÏüùóÄ‹ÕÅF3àú¬ÈÍìý|y;;Ÿ/Oé]ý«‹×Çí¸+<¶öYHäþÑc¥ÍGjÿp1ÿu~Ý1üvu±z×JgW|7¿zûnÕ—b7èëbqþËlÙýôÝâýüôöꦭ{·8ýyqþ¡“Œ–t¾<]ÝÍ~™]¿[,ngoKFŒÓ·óç‹›Sòä_4Úθmôâ¡•“åì×ùÉl ídÿ2œÑâÃêöÃêæWó›û1¶€õèÝ?îê}&˜¼]Ü­N.¯®ç]§OgÒññÓÛùÍi[ãzöËõütv¾jûZž·7o·¶ýñâ¶•f°­?õÿÐ>ÿýûùjv1[ÍÖ¼÷küH‰Ž¡ei7ÄÙþüÏëRW>??ûïÅÝŸ»b÷Z3Ì~Y|h±«óÀwq~Ö åûÙêWïgoçkéÿ‡VÚ?0¯>ÝÎ[ ٻù½toSí¿÷WëJ§ÿµºº¾þ×u'ÇG§ŸÇyú0ЖÐûy´…ÇYv¥‹ùå²`]²ÇÉ·»p>»û—»ÙÅU }GÛDõ|q}=?o'>»þmöiÙAþØÎ°*' Ürµ¸í'»\}ºnç¸&ž´M.îÎ~‡ÝëÇŽ´h·c;Ó3úñ¸¯³¸¼\ÎÛž±£õÝ®kp’h‹Å÷u‡Ûº£¿Ò·Ý="=œùV$Ÿ #¾¨˜­ßß F}?P ……E»†I/˜×W–ž’ö€ÑW¦3-­'ÝíŽSÈ âd_ƒÓe÷úvœœ¾[°¾F ü ^\—¡ÖátR—¡ɨ”ƒ!•v@$£2‰dÈÁvwTôHîÞÝ·#ER‰¤I‰—2(Rv( (¤âû‚Äeéû­Dì«ÔãúýíˆuêîûºC—õÛ¾±ê=á°CáˆÃÙáx1Á¦¯A)gë÷7£D_‡Ò¹¯ßßèù SNØHüP OHòp†AHñp0bæÁ`ĈńQäp0ŠF9  ôƒYÀ<  :শˆƒÁhQ„Ñ’£úát£Æ!u£FõÃÁ¨yH^Ì-$¢Ãù3$[Qr9ʶÁŽ¿!ØóJZ¿<¤#EöbËóu7x>¿¨o6ðQ;,fl]þë3?¿¤Ë/ƶS‡öRòð•bpî6—o Kð6Cèp¦Wè¦Wø•]èW Äsžñ/߬ìÂwnJÞ*Ü"ZaâÏ˸žkéì»dÜ~±²}pÍð܃ëWuë¿xùì[·EîikuI'gïîæm’Ìï¶HÏs,ÖËÁÛâŸn®Vm6̇åüî¿Ö%ÿ~ó§åü ®?ÞÍn–ë„€6÷`¶º»úøƒYU¤7ؾ,9©6`Í¢æD3Ä-^õƒ§×Ç'ʾ±LŸZ2•T¦õ̼¹%S–nî»6_c5¿ÛŶi ¬0—x ÷‰/@Je$}¯]…(7ÔÏü}f ƒ• f 𿔨nlêËù¿Ì>,—W³›ºþÐ x·!wRzñóü׫٪Ëka¨ô,Ò'ò7ì@T7¯ýïGôP:¿¾ºýÙêÝcýÇò³2ÑõñÈ)ˆÙOí®ö{ª÷tØÍÙ~l‡p}vÓæ¤u¿mì­åênñçy¯»âI·"mm©îÅôµl·xÝ->Ü\lÿwqu3¤¾¿jç|}Õþw¦´‹ÙòÝìînö©Ê&µÛ×-'=û1>z=aAÂŽ< H ë…¹32«N­öâÈ žø(r½Ðy«iøý®å' ‘ÒÜ$êÉkþ¸Xåõ–ž]¿¨ÞÁÊý° Áì'u¾:"šfOmG® ª…ÜS/·ò^nå½{},¹ƒÞR°@ãô&€]‹Uæ'Ñœ0Tª3ѺDæ%Å͉b‚cš4'©Œfüj7-úmÊi¨:mª£³”Vô¼î Œ-ºc_RDDÏIQ ¤È)ÙRä‘$T½¼lå½ÜäH‘*!êÂD@R)n$À@wÉùI+8èä.Þ¸Vªøîrób zx©rÛRþª‚¦{ÍÜ&ïýðte˜êÕvmÝkÏ Um‡ÒјU•ÏiêŽ;" k—Å<‰íè§£e2cÚ$ç}A((ï "aGoîKfÞUïŠ&V2lË!=Ã>wÚSÞ´4çñ§–X`‘: ãf]±ïÿMGè‡÷SWîÇÞ·¹1»¾÷žôf 6y¢nïE)¶X•ýy³Bñ¬7Kµo–âÑ›5tTyêÌ&;¥Ù,†róž™·3sÇ€"üC‚ž:¹¤Xžú¥—‹¤œTO¼\fÏBÑ/¼\5‰ÄØ‹MV£zÞ&IÈ›ô¨)ígJD¤¦éÏOI©¶Li_ÛJÕŸ=”6H¸ { ü¤†‘Z £šdûÄRãöêjýëõl5ÿ!-«<ÅàzÕ"¸GÌ<ŸÅ,t€a:ËÌØƒ6˜y+óš* fò’¸Q€6þê%4¹=Õ4,b\[zÙECJªµEÑHhríaSvJ¯Ròù=i~H×מ ìIÅ š$.×—\D2z'w+ïå·w}T]c‹i EÅÍzÉP9'ÆœŸHƒ@¬ŽºöˆALCB…dÍCÆPnõTP½]·ûH"q=•SF6³Ü"§¬hD¼A-æ·çÕþÿÄh^üb>š1ª<ødŒÂ¤´®L8Õ¢ ‡R ÔW [Ä÷‡±z>‡q æš:˜dT &™Ú7™³ã]V¥[ gBŽj²‘€ ËØqGïÕN>ëÛñÀNk€cz=qÞQA ±z^ÞÊÛR)¼ãÍé³`ÿÂÃw´d•m>ùS»ë¬XUÛŽ±Y“ªj?Þp–#=¯Ð‚ó€ Ež=º”]R¹ë“=D帡A¶²^nc½ë¬Hªªí¤3Ù¢A(K¡\›WPd"φ <]Œ["A•ó½ñUB©š\Œ=ÅS¨&Rñ¼aÔÿ# JÝ ÷—^}ü¼úÑ­þáäx¯Ö3Ÿ…»t8QTÀ’°'Åî%ýœ¶ò^yû©"¨gØWÌlL¬œ¸!(BM³CÞ$0îeK"[9Ùߊ§ˆyËžIHˆýÅöd¿¾'‰ ®(5Xàƒ ã^=+’g=+Rž‹J•qèÀµR§Šá¹(18ÛбB‡¨¤=þ`‡lðEN?¨xOÛI(ÃþÆf*Ýã>U={eÔapýxO?¼B N¡´Üá‚hÜKüþj(²‚¤!aPƬõmŠCÚ• œƒ;Ns¥!M¡R¤ŽÞlRƒÜ=ZjÆ=Õ¶S7Zø©§nô•šR¼9¦4@× MÚ›­sÚ~©ƒÔ‘{i9YÓ_¯íŸô_Ær³¸˜¯¿ÑcÙJÌýë —BLöì¥Óðôz¨ˆП¨†tå d®òÂ&‚ Å$›\;mBœ‘ú"ʈ¿¸ô!–T'û2"d /~šØ„ÅÙWqQZxí爫æ3êŽCx?Âñ¼„å ˧6. W긧$ý'|Ÿÿp=±æ(é>˜ª 0¦áScž T\ƒ‰÷Ì/¶«ÈC‘´Û]}é„Ñ5…šJpÃÄz52žEC<9 ¸Bd¨9”¡?Ô Åkhϼ@‰!ÝÜš$H/¬Py h€™Qe@wÃʬ€N¨@{æýª nÎÝù5 Ò¾-{PEÚaǧ*Ë;¾g>„€&ˆ‰R¢©.£ã)»ìøpˆb+ÚaÇ÷Ìû”2¡²(š)vPÛeÇAa*ç;¾g>€„JA%W5®`%,cZ¼£)Þìß%¡^€¤M:¨p l“Šw´{s­¾O…¤yc EÅ¥cã);*ºý¹Vß(dŠrã ‰È"£º£)ÞŸkõ]€šC³4Q@nÆ5¶ Û Ð½¹VßíÕ«Q4¦ÀDê£Ã¹£EÚŸgõ}>S€ +5èE1: 5eψÀj¢M ¦yŒ­A•&lâ)Å©1Ž”Ññ”)›xJçÔ¦ÐÃ…FÇÓ¦lá© DÓ´q‚ ÊÝÂkLÚÂ#¸³[c šR¤£ãYS6ñ¬ Vë_­À)sl@&Å—‚º³6Ž@!Š£G&“6ñ ÎÕX‚ˆ»ÅèxÚ¤£xu°D¬ÆÈT“F4&Å‹Bˆ–7Πˆ„>º ­)Ûx#§&ÌˆÂÆÆÓiÒa|dYiã–é::ž2í(^DR›THÒ’ÑM¼Û”M|qP¥Dn£ãÓ>¨w`T­Æ(<ÆÇ³¦}N/€n¬ «ÓèQ|Д-<+‹US i^å£ã)“ŽâÙ@ÅPšRpg+P›´‰ç‚´°h\¡*8|l1å»x$+¡ÆØÈƒFdz&mâÉÁÍJšH/6ФiGñÎÞ–Œ~×™2é“ú‚’dmœ5í|zñkÌUyl@iâÉv˜AÙX@±›ÉØ”dÊ1< DéOLLçÑñ´i[x”¢l4ÁRµrt@cÚ õ N) ¢‰®AkÒA|@IX4e á˜£[$¦Iñh€lMX¨0èÄ“í˜ÄµÑí<ê±5(Û”M¼"&K“ ,ì4:œÓεC26kŠ!‚)et@kÒ>ÜÈ«‰­,‰±5¨Ð”M|h©y ä(9:œÓε“Ç첿6žFÓ¶ñ TèÙd#±¨Lý›oH¢òÁ«WýòØ&ýÝvh VM*—ŽçÄÓí ÌY­Ñ7UК¶'p1®Æ ¨Äutê4i_PIlMP’YŽŽ§L;£Á«ÄBµJP›ºçD¬¦ 1ttï1é8^!<;´D‰st8'žo§âD8Ëè&>hÚ—ñAZ]Â2V9ŽƇL:£žA1œ31¬Ñáœxº€›7á@\j1: ÿn;CålÁÕ™|t ZÿÐQ“Ae¬cÙ4õŒz åjB3Ykt@§ŸnåÖ¸AV*Žžž6éŒú.gjJ@•dt<§o'hÞ‚æè€Ö´ƒxƈh4Á\ÈF’Š&ý¡9)ãîîØ‚Ùdt<§pGIäÚX[ Øè€Ú´m|B–ª7&Ž(6¶ ­˜r_™ÅÞ”B!QéèxN;áÎD•u ¨Sí„Ò¤ÃxcÀ”¼ãƒÙÆŽ; eâh®L¼1Ž Ñáœx¾]k27F`©â9: 1íÆ;ˆ:Uc˜.”£kК¸‰çÀ¨&’Ä”ÆÆ“&žoÇ€œf+”a˜Œ¨LÚÄCpƘ„e­BiÒ_o†lÞ¤!©åèxN;ß΄̬тÌÐÑv¾0ua' ûØ*”§ýõvBÔx"êèxNþÉš1Jã RD£j“¶ñ@éV V®A9¦nâ•¢ƒ3\1jtÜ\lÿwqu3¤¾¿ZÍﮯÚÿÎô‘v1[¾›ÝÝÍ>u½lR——ËyË dä~dýŽ?}ܸ{S©ÂôœŶóÇ<ŸÓ{«õ¯×³Õü‡¡‡µ?!7ÖòWel˜TvûUáÍV@Jqúà刴¸+¼­t‘BÆìѤ{¼ç®ï¶áQŽ4Kí2p°Ïún)Z"gú±Ä´»îòn+M¤–Ét¾ ¡Ãîòî¶s UM¼ ±öé³¾{ìDXÝþr$Ñ6¼ë»/5ÃWN¯Š»ÂûF@š {Y’i–<+¼¯ˆDAçä›VZØ]âc%"QLÑ¿C°Ê¹+|ÄÎÔ‹…—-ƒqž>j§i ‹ác 'ó®ï1;S Ì@¼ <ì{lxd)5h<¤¨NÎÝŸ… 5Ñ.:æÖw}Ï ª$ߘLMïŸKsvmêñ0’e8,|® 5¤8ù`RŒ°Ã>¹9)жG•²bÛ]âkƒ$7”ãMÉœw#|ÅN^ j¯G Ù–w‰¯ ‘,âUJ;'gøÚ ©R™ñ†Ræ}–øâÒÓŒñAŬÌû.ñ½AR…$K핊W°ë®ñ½a’ºx¥ùk—fWæYã{ƒ¤pÉ*7”ÔöŽ»Æ÷Ê %éãM£í®ñÍÆ\•Ƈ¤bž´ÛÙ×29×Ðè˳ô³!’µx‘õ˜¢Pð®ðS;ïáÌÇ„vÜ~f'ÄWyðeH"spøáRUÄGãMK€Áº <–^Ǫ1ù@QËÂ]áW6LK¥Í—V°ü.ðX©E}²ßP:áw…Çì|áMSë˜Â]âÁ+½Zº¿† ­³ïOÛ ^%ÒÃ_§”¢òp†çÒlƒ ç„Åô9+6@b ³Û^•8¦çpŠîo31¯J*XŠ»Â§íÜA¡°|“'‹g…Ï•º]ˆGµ½r©ˆp¿K|nˆä%Pt>Ž0ݽïŸKu;M3¾.éh‹>k|.­²ÖÆC &‡/Û¹49»ß@LCÁ»Ä×Ê“$÷Š×!L­ê³Â×H ñDû«e«ñ®ð5;Ëé+ÑõÉ»0w…/. Ïœ—òJ³À÷JDr™Š°W&ŽŒà]à;v–ZTç—ó8,|×Òð §ñ>éÓFã,ñ=;óÊ£eõL]¦"ó.ñ;G ,Ÿ©‰ŽÆaâgÃ$3Ñê¶×!lÎð³õ‡éÊ7.VÎð[kЊ|emq—ø™O¨¢Ùo Ýló³Äw&ê³ÝðÚ¤ šu—x¬TíTÔªúJ+•y—øÅ %­óPâÍœ9k<H2¸ `õ0bÔá’BˆñJï¾K<6HÊ‘27¾iaȳÄÓv!¶ø*d,A»Kµv Ë Ð^¹ÀØq—øÔÙéuvÓø˜Rpí»Æ§®,ÿ6†×CIy·RŸ¶BRK ¯F´ ¯»Æ[ìüÅ\¡á¯KJ#Pw· “ÔÅÒ&_BjÆËÎo³óïQË´Uð®ñ¶Bef‚#í–vØx·¥gñˆßn¼bàg÷’ZÜ'ñ’â^fw‰÷ÚI€f=P",‡w‰÷¥;…k¿ é!¢ÎïÜ™X¦GÄ#d†Ö}—øXÙlW-ãƒÉT’v—øˆKhb†¯)ÌNï³ÄGmÒ‘ñzDÕ5ý.ñ1;½Îh÷xh©ªÄÜ%>¸s§'’ö*$Ûü›»{½aa¼Ð ñ6Þ±JÍü`…Hé×Ü=~–ø\9·éˆÄk¤"ü.ñ¹2IšùcÈL{Ì]â³–Ò€ýgÊŽHœ>±3R,Ì•Q÷¨»ÄçR¬W·=¤˜Qµï_+óv)ãæõªE»Üp–øŠøE·Î|í¬ºK|ÕÎ|˜ÁúeÊMë®ðµ4Ü áŒ×PÛæ,ñ+É áb6àƒ ÍÐw…ß nд®ŠuWøäJÐ<ZŒ…è³Â÷H:BmÆ¥Ô¹+|cçºkÛKɶ»Â7·^øíRãÉ:+lgi.ˆ‡‘05í»ÄÇʹ]KUZ=¸$´y˜øXÚIì d2tê,ñÿ Å_–ÀàÉ»ÆÇIR©‰“¶±æ]ãw’ CïzU˜ðgçÊG’J[Ù¤m,í.ñŒÎ-M¨£u˜xÖÒVÇÃHBáq–x.€Sã ͆ßžÜyœž–õ²dÚüð=|ë H#‰z;¯ߺB€ª~9ÂRÌYà[k©‚&lÞ@z¬lÎúÞŠk¹G¿*AÂ˯úÞºrhÁdóÂL+œ¾meCÖdz2_©8Ægî o±³Hƒò%Äsw…· ‘ay÷C ºÒû.ñ†/¦z=Œ¸%oKëH=@¼j ©:K¼ÛÖh˜z=¸xÐÇîïK‡v€¥?¨´ú0ñ¾rhiïŽ7%(ò,ñŽ¥ê}7G“†v—xçÎ5ë7!Ù¦ä]ãc¥%©¤a¯Tig…Ø9™ <´´j¦ß>jçu¯ÌŠ7-s9º¶;½Ñ­ù2%Ã8 |¬ìÇŽ§ãB¯,Ü>—öcÇhý˜b–§Ï¥o$*Õ^»TØ4ÏŸµsÏ EÇCfs×øÄÎÅ\vG=@¬g8wOn¯RnÕ¯)n÷³Æ—íü‚ZgÍë–ŠéËWñµ2ýÝb®Í×.ÁÄ6¾jg¦n*Á¶¹k|­„µh&ýU 5­y×øÈ•¬6¼1§·ß5¾7Lš’ÎF<˜T¥á,ñ;É ™ôzí’iy—ø®ìZsv½jñlDß%¾±³sL/ŸW!N2p–øæÎ¨ká±éî •jsˆÓÜÞ´p’6w…ßImHQLØë’ sÔYâQ;9‘ž|±­¾K$˵F:¬*îß\ª9n˜}Ilô޳Àc)lJ³•(wÃ]á±BRIª³K¢’v—xlD&¬_©(£lÎ,5ú¤Ã\¬Ô"î%‘Ú;ñÆÄ2Ô?[a«é>¯R¦µyVø‰,`g)_À8zXøYºE ­äë5¤Î]âWRÐV‘oB*ºÙg‰îÔž";òUJeÔÜž e¬8&λÂ3vš÷ãþJeÆ~–x.MÚU¿(K͆Ý%ž+Q«%¦œy£b»L<7H2sg>¦°¦ïFÛÚÎv‚eu¿¡¦÷YâGW>’\f|MqóÇݽÞ0 „0^è„xðþ‹Ujvà+DU¿äì»ÄbƒøÓÊo˜>Uc®?Ú;ñ´°|41kM?Kü(w.>4P/KŠCøYáÇ–Ö‘˜åù:$š6}VxÛÉ)èB<†Xrw‰·¥ôo`ÆBÌŒw‰·Þ ¯UfÙƒ‰ÅÏ o+ ©x©ÅcK 'ë®ðn;MÜH_§0U3ïï±Ó{ªòGÂÕïï+"… ‹ñJÅÛ™u—xï(G³^4#w‰÷¥\»)Z=˜T‹³ÆÇ I%áT¼$8l|ÄN,Ò}U*ÐYw¥`»Ì,{héªJ;küNfCˆ§}¡"^æ™w­Ž¤ò¨W&¦ å]ãÓ–Æ™Ò#,¥õYãs©Hö#>Ä9~—øÄÎü¢! ¯!¨ì»Ägïtú16:ΟÜ^¤ñX¢è¦Ý~'´¡…>¯JÜüò1=–JûºÆí1¤Öœõy Ñúýº¹Ï]àÑ; 46V¯T¨á»¾ƒK•h‘F%{Òê¬ðµ2þbÚðX™Ç]á+vN•¡©ñz¤Ýmî _ØùmµÉ×KSð¬ðµrÔ2:õºÅ§&ê.ðµTF1ÖC tPuWø¶¥då0øcÉT]¾ˆï ’ÒaÉ×-LÕ]á;g p(_¦´šëaâ×RÌ#_«d³ªÎßKûHc†W!Ñ£‰»ÄÏRŒPº[<Œ´Š»ÄÏIÑdÇ3U©™®³Äv~ ^h0KÎÜ%~z©‘>†Ô‰»ÄÏ I.Nj¿4´5ÏÏ ’Ô$r/)Æèè»Æs…$•è{ÕÂI¿¼2Gì,ûxõ%9ag‰gï ëœyeÒ‘4»k|¬Å!ýbmjyÖøØ )\R™ùÆÄ|Ðv×ø´¥‚¶‰W-ÞhË»Æç†I‘‚$ýÁ$hyÖø\! 2™Ó-Ÿ½ó@ÃMíµK–zù]ã“;ÔBÑo(Ͳ°³ÆÃvžg…e½*ádTß5±S Mâq$*~×x`ç¬~PîÕ*ÚYã±#4R>Ê×*hM»Æcåä®ÄYo\jÆ”w¯¥Þ>ó@1VÏ_KÁvÔQ{“ÂR ï_KùßZàÏQò®ðÕ;Éaê®öP’ çYà‹;9Ù`?PÂØnwï\hóÆdÂvøŽ«¹êJl™uœ¾WŽíFºÉ~U2^]vWøîƒz·b=@\s.Ô÷†Ižâc¨GŠ1÷ÈrV’„J¬’ýhÂ(ÖÜ5~b§9šÕá-T­»Æv>â«Xõ˜’°>lü,}$MµÇ•ЍÀ]ãg)nuz`oR`w§í¬+ýJ¥Üá~Öx®€—¤‡û+zZÇ]ã‰âSÚ_¶„²ïÏ¥»4E'õdåYãÉEîJV¼l™èQ^5¾Tmg‚±5_[ÀpÕøRˆeŒG¿„d©;Ž_ªØ¹ŒJú£‹VÇðªñ¥º4ÝÐöCÊP¸j|©r©Eìxã2Z¦¸a æÃH—ûäYás«Ý< >šÔäLß>c§Í«‡oR¦[Qw…Oì|u*Fñ˜’],ž5>{çîÀ›’4¯¼KüNrC‰¬_·Xw‰ÇJ-Dì‡ ã,ñ;É )–l{ ±F3ïì,":ÆóÍHšFØ]â±A’Ršcx h@ý¬ðXÊb¦ç3UA ê.ñe;7Ç1ý²E©®y—øZj¦hµÌW-‘éÓg‰/ì|ÅCMóuˆÒ½ì.ñµ!R¶ÐÈymÒé¸K|q'¬¥àݯS4Ìó,ñ;Ñ #f¥þHñ ï¹K|ÇN}ôoBÌ଻Ä÷I‚д‡Í8´Ðew‰gï ßÌt㉖Öô]ãÉ᛫W)^qUxS[zåÀB¨Ô°³Â›ÆND½uæ¼r1uMžÞt©(©c-:w…7í¥ãް×!]Sγ›rg Þl&Þ˜¤e•ŸÞlɤŽ¿JI lÎo$åˆi6KlT‡w7ìOK7.–=ÝwßÉm陯ëFqÖxÛ iZÊ©õX’nfv×x·¿Ð2µ~TÑà.ñ¾BÅ-/SØC¿KüNl=¯[&ÜÒïï½3–T×)5‘ƒ»Ä;·>ãÛâeK¸NÙYâÖÚy«¬Þ¤ôÐQw‰’RÌM㙪X´ù]ãc)J(Ë1o jgÞ™%jú±Íê»ÄÇÒEÒ°Ë_†€ƒá]âW‚TE•”“y–øŒ—z'&ÞPÐl=L|b©ý4&ìeI§5q—øì„e²yCQwò.ñ;Á -˜K¦ˆÆ]ãa;5©ÞxÇ]â±B’ɯ Ý,ÇYâ±4Žà5¥]s—xôñUöZE=i‡‰wNêSxí’ˆ.œ%¾lgÉ«1¯Sh—‰¯¥,¡v¶¿i-Ôaã ;aWÌü~¡“U^g¯ ’ÐâÏÔ9?îîíVb „hC#ÄË€ûoìJÝø …•²'»ã®ñµ¸Ê™ô×%E·»Æ÷†INñV~Õ}¬àYâ;v¶oæ÷Ƥš}WøÞ ·Ó˜øÏb¿+|/uR˜wæCH3‘sVøàÎB,ݵï ?¶³}cQ>#¦ ›»ÂÏROªÇSh ÆYâgƒ¤01ϲG›^w‰Ÿ¥c»@w…Ö]â‡;%4å¨xãBm?|kn%¸¡(Éò~iK^¾5Ç•$Vö<ŒÀq¹hθA’©$`|lIÏnž%ž$¥ §Õ]ƦwçIp™0Ö£‰5#ïïjK}ñîɇC7qÕx×¥ ðžö|eÒXŸ5Þu)pÕôWõ >xÖxד¬)¥ãýÚ¥©qÕxW.ýžÁ²GJª»ÎYãÝVWKÔÛìM‹‡v×x[Ùn0áXÚkˆ™Rû¬ñ;Ñ &í4<ªÐ›Î»ÆÛR,}š-GÌ]ã;×¼Ú“þPÖ ?k¼/u÷uÞŒdÇ îï±3úÐLÔ+Šw…õ]â}ƒ$@ÒUãõH#9u–xï¯Îëym¢`öÜ%Þ7DÒ‘ ÎJjRí®ða;ë7:íýLU<˜vVøˆÙÜX ÞŒ”GGÝ%>°³`ðú2«ÙɹK|lä%I¤¿Q騨8K|¬œÛ¥Œ홺”“¸K|®4RƒÉW ”Õ]ãsä.*MÎ Ÿ+ A`®ù2Äé¹+|öÒ>èŒ×£ "<ì®ð¹4I¢uá1dAž¶siÎ&h¯ZlH÷»Â#vN™DrsVùK Ã9v—øÄÎàcàá/C²ÂÍÏŸ½t­Sõ]äöʾk|rÃx•D'Rìð»Æcåà.Ä8¯L¢bjÎØéùüU‹12ì®ñØ IC<Æú¡¤­+ó®ñè'¾8†W¡Ùái<¸SÈ^/[fØÁ»Æ¯D7DIt2Þ¨tçÄÜ5¾¶>“PýÚ¤-²û,ñµ²ɲ®‡ÖŒå]â«wòÔÐz ©+î_Këv_tÃŒh¶ÓÏß¶3›Ã˜æk—êæô]â{e”’jÞ%æÑw‰ï­ƒ»1å#%’ì8k|÷ÎÅc*Ü^—„[WÜ5¾¹iÙ´×!–Áâ]ãw²RúÝQfvœ5~bg©>2Õ^‡@G}î?$Eˆ’#“‘É»ÆO/Uû`ÚRœ®†³ÆwΙԇ|¢• ¿kPŒeg‰çŠH¥å×Dc­z˜xöÎB“‘¯U,BÑw‰çÖxÀ󱊡]%>uéà.Mµ^À»g‰O—úR¤¿Rio#ÏŸºb$Ã4B24'®ŸÚ;‘–ášþèâ ã®ñ©\j›CÍ«‘ˆé̳ħÙNØ@´B¢¦¢Ïo"ÁÄÆ7)åð¨»Ä¯„7°%@ÖÈÐÑs—xë i"à¯C´­ú.ñÆ âM@š=¸tMÛaâÝ–âE²•¯F²]w÷Ø9Yîú#ÄÓQ8k¼/’hŠx™R‡ß5Þ·îÊS@¯©»ÂûÊrƒ‹ze>BÆaÚg…߉n LNó¢n^~WøˆÔÉÎW)1Z]w…ìÜCSó±Ú;+|l€d-æSõÚħmpWøØ )FŠVõh &ï¿Þ`&ô¾L!³ÆçIAEƃ‹ûhÞ%>±ÖR5/GÔºw‰ÏÞ9XV¯šW.i–³ÄçÒ±]z5FPÕZw‰ÇŠH#aó²DÁȹKwçÒà.]Í^¹D©eœ5ž±3gBóÄÁÓÆsåx¥ô7%jmͻƳwÖÇ(›z•ÂÁ4ÏÏ%’*“õP2^}—øRÛ ¬šˆ7%eγė.¥ õ¸×¡vVøÒ¥óvžãùÚ% }VøÒÞ©Q0ãUȰ sVøÒ ‘²%ÔgÞ¨”çܰ-ÛIKÔƒýÚÅ+ès—øè†I­âpjÝ%~%»!)Õˆ| ÁTã®ñ¶TLá1î³@ã®ñÆî©É´zC2ü°ñ¾a’CTù¥,ƒ½k¼Çή³¬gMb2y—xÇNcZê<¶0Z+ïï+$¹tç±¥Š>K¼s§ wž)Y̘»Ä‡íä±AÓæa¤Õ~—øˆõÖË”fúÔYá·¢ªÚìÁ¤¶¸K|,E®iö:¤a}—øàÒ´µüA¥*98K|nˆ¤*$­^Q&\5 wvn«W¿,iT ïÞiúÈôâC ¼&q–x,nh4øÒU}—øZÊ\5(úU ;}—øŠ¥"'ãeË$=q–øZ)%5Í_§ L³î_+«¤g2_·$iZw/î\ìT3à5%ɤŸ5¾mç3~P|9 Þ%¾cgïL›W*dÅ]â{%àN…V].N³Ä÷ÒáЯZLÕ5îßÜ9² õ´—#Ó£yWøY:^já¯TAï³ÂOì,ãCLÉ\þŠŸ¥†se3ÿ¼éaâgƒ¤tA«Å—çÜ%~¸ÇÖö›&5OÛiNI#ãͲRý®ñ\Š·@ûK“ž®±³Æsƒ$ qÍz ¡¶"ïÏÞéQzûcKsùH=—H²0÷7.P(y•øV[ %¯GgÙYâ[— eÛ«ìÑѰà#^–u–øÑ•J °<B¦­y–øÑ ’2 Î+ŠUµÙYãÇVvIòì|9ÒÓš}×x[Z&5"ñâ©uÖxÃNS'§á¯Z¦‹êw·^ê:îéz¤˜GvÜ5Þ––Ieiõ’‚0‚g÷’ìO{¢^C¬à]ã=v^¡ÅzL îï&yȤ–¿qáD[ž5Þ{g.¢Vƒ—dôä]ã;Í’Þ–õ Ršíw‰Û ž2ƒøîv†›ã,ñ±2¸SQE=@2º¦ï KùßÊJ<– «ç.ð;é Ÿ±|bá? |pçb'ÏT¥"Ãs‹¦‘_5oœ¸+üJzƒšŒyõëp|â¬ð‰¿'Û3^A€œ¨»Ägï êÍ”ózDKAÜ5>¹Ô]êñ ÕE;k<6Hre©¿l2™wÇÊ&IeÕ/GR[=îìd0²-UºtPg‰GïÜòj¦Íëíôá]â±!Ršd ûeH„Óü.ñeKoP ï×%Ãã,ñ;‰lª™|LÑ ï_+"AÚÍë!$u&q—øê˜zÛTÀT?K|­ˆ4°ùʤŠì¼K|¯ÌíL²½^Œ'5î ß"õØ!eô¹+|/”¬ÉõòÀ]á»wøAf¾¤TšOß¾7Hr—™{YRŽž%~V¾‘æÛw¼a9ý0ñ³ÒL¡â1Í7µÃ]ã;»Nšx¢ã¡yÖøY:m×S3-£¡6wîl>BÕóµ ªÒîÏ¥*ÙD`^µÐ19g‰çŠH#fA{IñÌrÞ%ž"FØC ­Ôï Ï ‘¦…ã˜ÇÕúqw¯7 à €²¯;`ÿÅ*5;ðƒ¢¤_mã;Ø]ág¤Må«oôá²øÑJØYö)=œn7kÁ PG—Ñ©»)õ£ØÉ"úÁd˜ ?+ühmIu›—-H›Ž³Ä®R3•/G, w›hf'·’ž=Ôð®»Æ[lmÔƒö¦…:èºk¼­˜”Âdá Áð8k¼ÕNÛ\7º?7ªïo³3æ:–/CU>w÷ “T¥ªð0’ÁÌ>K¼ÇÎ,S:2¿mО´»Ä;–öéÇ ÔÌ»ÄûÒ*)|"¿+¥Î³ÄûJàjÈÉ—ôðö»Ä‡í4»MñUJ«û]à#vÞÏn'_š´a‚g…•%Äs¬_µÀz¦î µsA!ì×#ÓÚíw…Ù‰K㛬ó¬ð¹t’Tݯ[¼,}î Ÿ$¥KxG½n¡ÕpîŸØ)úø£ ˆÉ:k|ÖN:¨FV¼Vi.Æç,å x#FFa}—xØÎߘÀK éQ~–xÄεøÑ®zM‰2×¼K<°³êŒló‡ÒÔp—x,‘dè‰Ç¬š³ÄcvŠÑ0Š|ãÂ`ñ0ñ\!‰’ÊŠ×&›˜»Æs)¡VoZ´ÀY㉺ãìÒ|tÑHÌÜ5ž$yJ‡E=˜´÷Dß5ž³s‡F¿ p¥ÑpVøZɶkÑBÚ+Šœ¾+|­€”B$ñÐÂ-ï _"…K3 o ÕH÷³Â×Ê%Ù‘n­|pÑ Íº+üNnƒJ(º[ÆÂÚî ß+&¥xû¼ ©JŸ8K|ÇV³d"[,á5w‰oìœÅ[åäc‰Y ë.ñ[¹ ä4RbÜȳÄ÷ìd]uwÖ›F¡û.ñ³!R¨h(ù*„…´¼Kül˜¤%J  ã ó¬ñ³BÒ2ëu0´¾KüÔN`uY…=¨9jw‰Ÿ’(Z­_k ¦áG‰/UÛÉHdÖ£ç*ñ¥;Åh…°—-ª«Â—*v>x£†½,ÖœM¨/ÕÚ‰@ ê!d¦g‰/ÕÙYÅgþzÄ}ظJ|©-Õ$9 |2pÖœ%Þbg£ž=Ó¸Uæ]â ;ÓLMo>ŽX™7ïoKÍ}È$_D»zŸ5ÞVJ)F´mð’ÒϻĻí”ó*Ý^—L€ô»ÂûÊ8%èß%îtTœÞWl§„ƈŠ+4æ¬ñKÃ7ÕÆGÍv‹»ÆÇ I!Pe>¸„iúaãW‚¢lÚk“L¶ùYãc©¶/³"ߨX3ïŸKÍ}6fù@ɉ¿k|ÆV²ˆ%^… ,*ΟØÉ.zóUHúéx;ËZÚh‚ù<Žä€ãwÏÙ9‹çT㕉9ëð:¶3,bFÕ w‰ÇŠH”VX=–$ܪï¥0!…3ß´¸›{Ÿ% "YS"júÁE+Ø}—xÌÎÙGvã刪ïOÛy?ÇèþH¡EFŸž±“u âÑÅÍÛæ®ð\¶ƒ¤º÷CKiXÆ]á·‚2z4w2Ï ÏÙ©P( ã¢ôtܾl笳¦&(m5ä]ã+vŠÑZ=ç%%:ô°ñµt’”`Ϋ‘î_µó<‰¶zÓÇÔaâkv’ZrþšBDñ¬ð½·ªx ¡qÒî ß+ ¥PYxMé w…ï¥p»dŒ=šxð³Â÷ŠH-©óLC´4y—ø•؆PAãeIÑ:p—ø±­ö7&3ܳÄÏÒ©@«‡í1&~°³¯ÌÉÌW#¤1ì.ñ³4Ñ/G<Æ g‰ŸÙyAÖBÇÄYá}%µ#Žùh´kæYá]c§-<¾úR»*¼+–boL½_AʉÃóô¾ÚLt¼R :Ï ï:;—M#R2ÐUW÷ÐÕÞ@lœuXxÛ)J2†x­¢ÞævWøÜ†L¸¿¢D³ÎoµóÔ:2_–ÐÔÒïo³s?!F/CSƒ»Ä»í$µŒ³ì±¥Ê?k¼ÇÎót3ò ³Y¸k¼cÃø« ¼2©IEÜ5~'¸!…áÁ—%ð"Ïï"…‰QÛ^¦¤‘‡…•ÑU§½Q1oGÜ~'¶adܽ^†3vøØêHrD¼™rO¿ |ÔN‚éL½±,Í»¾ï„6@BÝëë6¢ÏŸ¶|H±Ó_•ÄhºÝ>—ªÍIâÑèÖ¹ |.#E[çk—.¯¸+|n [o(ð"îŸ õH9ÒL²Ìâ.ðØÉTý‚DgÇÒ–]Ó*\ªÒªï,}ð¦U/Cº•´»ÂceËŽ¢¯Grˆ¬³Âc%jÕEéL¹ßž¶sá8ûÇÝÝFÃ0mÈtS쿱vzЇZ2y±-‘(<ššì»ÄwìD h#óuŠj!zÊT*C}îO[ZADf¿RqÍ*Þ%ž±3ÌÄHÚëÂ-ó,ñ¬ âMföÍȾk<—6’Æöš¢Ó§ßIm‰q¯‡‘ägÝ"É¢ýµJ[gåYãCcçñ¸ÄËVÀîºmW¬•²q«Æ‡bçéCÑîoBØŠ³Æ‡®“ ƒˆ~5’:Ã9k|˜í„/Z{¾¦Ì¢Ïo"!ňî×&PØ]â­vâ€=ñ袕~—x["©ú›’Ñ´ì³Äw’Ãh6õàÒ£é¼K¼oˆT&nfù*%¨°Ãįä6XIz½ sä]á½v„GUÕ«”1ÌÜÞ—ZdÕ |CéBïï+ ¥DNûC 0ƒ8 üJjCSš“ñجFÞ>b'V$Í#YTÄ]ࣖz£Ó”TÐy–øØ†‘*-<˜XÕhß5>¸Ô{Êœ|éÒ*îŸ+g¤ŸÒzU2PÚYâ3–ž=¨]*îÊÄ]âsC¤õÆ›+|b§cNsì5¥4£ç,ð¹ôŠõœ•š¤ç]àkã„´ñ`Bg[ܾb'ïß;Ë^›tiUœ¾jgƒF¡ì¯³o:î_ØI+3õWëå]ákƒ¤pA»Gο+|o€¤ MMñ˜äܾ—¢VÕ.ìîËÏð];•’Öáx i5TŸ¾±TXaxÓ’¥ÕsWøæÎH‡Í¼é.ܶ3xÆä«…+“v.È R°T»+x÷è8K|êI©B‹´W#¦N›«Ä§nˆä!ª–ÏÔE+ g…OÝÉF E{Ó¢ãÕw…OÅÎÛqƒ3!ÚéW‰OåN6h“Y!ÍÔî³Ä§ÙÒ5“uû£K: v—xÛÊ*›GˆÅ»Â[íT||¤ÀË;î¿’Ù@“ðp‰ Ùw‰·¥…$™yT Œ×YáÝvfEÆ4ø;ò°ð ¬û%ź' ïµS‹VLæCK¡µû,ñŽÊ+-{„èd‘w‰wî„׿¤Æ35I›»ÄdžIî’‘˜×€Y¯!åÕ=g‰oîd3Á'â!$s‡‰‡-}ñZ:¯UˆTÄ]ãKµh•Uo íCÚYãQ;kŒšy¤¤k·Ý5+$µÌtÎs-µ»Æcé”4]šoZµÃÇøY ÉH±è±ÇWç]ãg‰$D¹½ ™fß5~–öduÆÞ¤´î ? iH¶G¼J™ŒV¿+üpçú·‡Jƒ×]àiKéa…W% Íè³Àse¼„V…—-®ÙUwçŠG.„ñÑÄìó®ï\I·KiZ×+ŠE†ÞžKµ}ÙYýº„¥yVøÒ ‘B%›ÎG•RSͳėnM€§F¼1©½»_º4Ú0>ÈÊ Ýx–øÒ¥–¤tbC”šVg/åÎÞq[F=ªhMÀ¯_¶rk7ÂIú¸Ú•v×x[ªIb¸½™†[Ý%Þ6Hòo¤¡^•˜c´ÏoKk²¥šxÕ‚òžºK¼­ˆ¤RÈé—.ͨæ]â}é”ä‰ÎW-Þv—xá›nj>”˜)‹w‰÷’(åVõÚ…™Ö}×xÇÎßUþÆD¡q–xçμrOL¼6ñ1¤ß%>l-hÀë[¡ç®ð±!’§”g¾ii˜Îµ•|“Ù/!D–â.ð±à‘‚FØÅš~øàð+7¾l*rÎ Ÿ AE'³KšVšw…Ï¥.Y¨Ž¿*±qö]á³vfEB;(Ps÷³Âç H!IKmâªuWøäÎ-=Ú›¯C¬Ãiw…/Û™½Ñ$âU ºªû¬ðµ’—ÄäÌCËÐGqWøZIrñføczb_+óß-îc| Žçœ5¾–H*ÀçO’gYß5¾mça®Ã"^©Ð³Ýïß±ÓmaΗߌƒúYã»–vŽÓzÞ¸Ð'í°ñ{åÑÂCÊx\žµkîLƒÝçA%*ÛpVxØNT …^›LTOÞ±S¡Ðš1¯)–…¸ Ž è‰³À÷Nd¤:ó5¤»qøÖ•Å šoBô<ë{ë H!Öý:e¨yøß¶”ümÃìW*–Åê³Â[,Ѝ©=†L¢Òï oµô Úó&¤‚ê~WxÛ ) Öã|l™ðÒ>K¼m¤šgêR5mw‰÷¥G¤Ò]4w‰÷Ø)Dƒ5ó•ŠS›~–x¯¥;PÀûµ‰¹GßÞ7@òyçÖבÜñ¯bhŸ 4+uÿWÉðÃZ¶ƒ»À>æmAë+Q$C’“u>}† ä\Bo½‹ÎP°5­ÃÓ§«þÝ¿®¾¦D¤ BÛº€×ž³×£»3G¹97–¼MZøÍíÐ,#s]Â›Í |P\F%‰³;Ö%¼ÅœQвjŒfjD麄7Ì!¼ [ 8¹T&ÖE¼Í@’;UfÄp¥ä÷ºŒw™3š%=ªÈÅ”uYÄû”©¨P#Œ8{aÀ{Ì\|3%¢t]Àû¤·õY²Žê\x!}ú”©ˆ[¢‡ƒ"³ÙÖÅ{ȼg)| Éá².ÞcÌÉË;F;¥¦¥/Ë÷ˆ9'‚ 2<)"–áçœÖªâÙÄ•å².àcÒ‰v™#™,´Ø–%|Nzyl‡g(qwk®Køœtè·ŠˆŒ*b‘B®KøŒ9}Ð25ad’†\–ð9H!TnÙ#ƒ˜ë>{ÎBÐîêQN]X˜ð9»·£Òz4“–ª,KxL™C2rr»’>%Ö<¦ð„|´¤ñÂ|Ç Y‘¤† €Ä9eùŽž£ÏÐð)Ôêe¾.ß§œÕ€"nÖá ˶uù^“vƶ‰èÈ V˨e_“N³›bS/=_S"¤¢P‡NœWžƒ¯Hr%.… Uغ!|ËœÍÆaí2 !ª½.â{Ò:;g`Ju‹X—ñsvsv)F%i‡-&½<Ö´#‚ª\lá0>fíHbIád&ŒuÃøÀœ-Ü‘U:ʉ»l]ÂÇ ‰‘¥ †'ÁC°.àsPæ9‚ÉÄkYÀ§Íé¶‚cˆuå3í3pL!¿¿›SÄ×Å{NÚ Ëi£…DËâ={Ž>£ófŒ Yx"¾0§Æ£S0:ÉEÍf|õ¬->2ÉQá¶.ã{ “šÜÛmT“cÝ(¾mÎbЧ,Òv[9Šï˜ÓeQÆH!åv[—ð9ç.ÂÊsÈ="Ö%|÷¤aziö&uTú²„/žôf$/.Ýi²ðâ‹mΦcwÆð ñôU _$M@à÷ºˆ×˜Õ©éQLV×u¯3ÔB\U£Bºe ¯=isB–Å¥=Scå(Þ¦©ÉŽ‘L%ªQë"ÞlÎá‹Ú]9Bˆ͵,â-æœ{SÁe#’Xñ6%HJ2K`¤S¸Ác]Ä[Ï9e@$¼G*AÝÕ—e¼Ï@„DJ¶sñnź.ã}ÒLR§a”Pi+Žâ}Ö9B’ž£˜`V²,á3ÚϤ›Œhróf¬KxŸ¤ 6W !¥DÖ%|ÈœC0´£Œ –e6éX¦2îÑEá*²p3€ÄJ-U:²ˆá±.ác’ Ú©”, ø˜Á£Ö:¼É½ºu]À§Ì©ïî–U$Ö ¬ ø´€1ZbdQ'CkYÂç¤ID¼„Êa&ë>§IjaNÕuùž3ˆÄMÊÎ6`żnIñ‡Z a¥`g_ð˜t¨²;´Òan}Ô÷Ý£Y)ÕX㘲ÌÃ4O®z©1±ê¥âÑÚùÒ¼MTQZwU3óÝEe|wQ½ú)^ÆË½ÜOTuQõ9òÞ ”qò U3ݸµ•-ŸÝÌk;uø„w”ðËWúò”BR°›@Ž…=áÁOʵ% VqÜÆu§lê:-[9ž›>–aéwPâ+?—ýçfj¤ƒ£O•$,ó®Ú€è=ÍËz´žEô]*®ÆÅÏ}{É'T\M>^qµ-<Ïîñ„›lŸ¢äa™`?^Ú­—½×&ÇsÓGÓ„Æ]ÀŸ¼]Ïï« ¾[ûæ¯^¾ì½ÜN5’¦LŒlZfõÙMÛ{G6·™q; |Lk¿\̦yõ_å¯;£½ÆA¬Ø]ttfÞ×GrÍIP~Ú(iÆvˆôLÆ™…Õ›¿"©+—í:ñÎÝ<ÿ $8öЬ~vݹ“Wüýøã±{_²¶¾¹“Ã\½N’»s͇µœâ°k¾jR†]úªfú*¬¾{qÌ~VOè~˜oÔ!ßä?†oôé|c~à›“¡úæã‡÷Ÿ7޹ÇÄ¡…SVìÎiœ% )bwÇ᥺¹4ØH© üôzüðVL𨤰kt7¸­w® “Þ5º;‰ Yn,¾Úi͘`fñ)‹s¯ôNÅjýÝ“ÕΙ¥ß^|cé¹³¿µ*!É$²wÝFp0ê`]”·ï”«•^e'ö¬„“ 1øªŠöiZQðc!O«†¼OÿKÞ•íÈq+Ù÷ùŠŸF@u öe^õÚ?¡¥mxpï•!Û×Ë×Of²ªsëMYº*U†‹'™\‚qL’úôñç_ºÿ:_ùñî·¿~¹ëÞüpú{ÖÅÿþùÿ³ê]É›KsûK²¿ñ‚Hb;$v4y’D¦]zHeô@EdDйgÛBÌPÖ2BÆå1-–XÇJûT_F–DKvï'hIª·Ì ƒ,uZ^Žõu¯ç©=ÃËcs'%%޵t¿ogo¿šq½˜%_i‚ûû‚í¦¶Á´w§ýEôdçÃ÷ìü¥L¨„ X³¨ŸPe€¸Åv–°d9û„ê‰Á$—g7‘Û—ïñ÷^þî‹ÈãÚhKmÛwÊ>¿S†øË¥ÄwüŽßoú¦«´ôE)AD+Lü‡›¯/Ù Cþ`ÉO÷ÖÞ[Ù+tÂ’ò[Ó aôg-‡ñ»§îäŽï|Ñîíß@Á”(\ãaݰ‡wû ,– Ÿ—·qÇÑ |~tâûßÑ;{…_ãЭ&·ëð+µgÅ(h_sß)Æ7·ïT5Ÿ•’~¹”>¼û?¼BJjüåRjµ½XJg;Ä'\ôÄ>Gö6!PE"w?‹!™Üçö\ ˆk~n ‹jqnPÝe‚>˜÷ó¤ØåÌí¬âœ?väÜOœ aÆr:Á—èj‡f0Mª:܃9/ÿò& "Y,WTeÒ<¦É€°çù74ªR’³ž0e‹'•SpGiZõ‚”b"?Ü$83Ù!ÀÂ]ƒ„XÆÜ=NqR›ë¯28… ­.>r¥ÌQS—yºÎÛôW@Ñ3Ï{hÒ*ŸT_áo«J׊£W¨ªÌ¢Þ?(ªT „…UüîFæú©‰ÌsýeHTb™ë/[Ê<~@ V:§8C\Ÿ§~âtL]^­&lÁ5'‚EÓLœ@¦–qVçŠöŒvîÈUÀV¥ %í··˜º5©:“ Ò! <½ƒ¥«ãÒÂ.9—­HJÕ\¶¤ %&3ÙŽyÏ)[Kö§e›»ªj1&ª*RÖ«*¦xïZ PBKùòT(Ž’™<ÎsD×¹@Á;|Ê]-3‡èYµUPž”¨â+6¾ÜCR˜åÜõ:søÂV(8ŧÝ󞓺EØž¤nÝInŒP ®Ä!;ty`äÝöêD„ÌÚ?Éìé;@%}9ùp™O>×âýq™·¡ë¼¼5Àʨü¬ì]ÌOkÜžtã”ÌìGvöŒ+&ÊAª$Uçæ+¢,1Ÿy¤dÍ­—Ô°*—Ĉy/ö´(÷¤aÂ<eIi¯¾†XÆÒ^œšÝãóÈà +¨›¹Í¥« Zi>Ÿ!$‘¡–ÏÄ« !<Ÿ1ˆ[°Ÿ—mTžñû²MÒ„m"²K'zÐÕ²bE5ÅÀì´pµ¦@T*9f9XT–-©›Œ(ÏêiŸ’l¿ ‰‘R޲ä0V­á®+Tì(™$/¢¢$ª˜GE *ó¨h÷ÇuÞæX ‚Õ©ä?+bÞј¡ËI”!Ät`g*él_Ò•3®IÀº§€µ¬HG {ö:L%ÀŠJ ˜X†þDÜ/þ}¼ûñ×á׸GäÝ?ï>þûç»?þk.ì?~þ×ÇOÜœ®ÍKl%¯sœ.ÙÄÔeŽ_Þýt×màèru |èáq²g’“/ùé÷Ÿ»M+Ÿþq×É÷Ã]_îøèsWÕƒO>½ÿ¿N1~öþÓçwŸïk¢ÅƒaÙ´ÓþŽú¶´eçáAS¡÷ïîÕáÔwÎ_þe×m{ù£Öoµøýn)п?}ꔑÀ%JÝ—{=cvà ”ÕîþGJzd û¦;>ò°{_(VÅþþùsg+7ÿx÷×]'Ë_ÿýÓ´+ÃPÿúpg†g7ïßúóøüè"Æ NªÞíqêÆüÏ¿zlfí=ÀeÅ÷èl–è_st>'Z[N·+7ŸÛVõÀÕæo.äÞÍÖ®¬Ö“ÉÝâÍ•M.㌚ˆ%ËÂF ¢ªTëˆÇ,Áxòqà¯6‡/vme¶K9‚©È1OààD8Ó,ï5ø·W]ÖvÓ½t'ݸ‰ÊÕŒ›ËÄÔïÒÎéì~”O¶ÇÄ:ýEÑýb„ ô.€Èœ=Ú2þýÃLáS3±”¥–µäçßÿq÷¿wÿ¾ëz÷ñq½£_þ\êÝûßûm¥vƒ¦½DkÄÜÖ»1ÞIûÒVŸòŸ»áªúæ¥c<ûÑF5&¿Öãë«ñ]j˜þðÅ\‹öå;= ¿Ä#Ù7³Ñ³ ˆ²²Û!If,È]ŠüPàlªÒýD¬ÞÈNG9¦ŽG9\±¢ú±¼?ÊA¬=L9¢}e`%.”¸å17󖢸?¾ÑÒ§ƒC²ÀHÒµK8¨Ré!'õuÊ1ëâßK×K^›4äU‡<¼Úß×׆™-¡-̼$¹óþ^ ‰%ÕIvC²zö0!Ct¸<?VȯÇIâÙqž·à7Ý8u,:té~›8b¾yn½7Aá )ÔÜíë¦)‚)Où„otë÷(m¶ù|$|9ÑÉDǹÇtzAÀ¢†bã¹+V ÅQúSðYUF0õŒËÄ8â™K݈RÔµ*©‡ZGè]› 9+XŠéA!oñDñœ¿ØNçn$Ø—±Ö•`QÆ2¶AÎâÒ™@ʴɘ¸€’§Ùš‘ÇÃX³)ƒ„u\ä œ4)P&3¦)œ}" (([BçHN)2ï_?å$±’yYƒ%*‘žÉÀy¾íÀ‹T›¿“Zr¬ÿvJZ!ŒÓ¶e޽k¡ÛµlNÌ»ÖÞÇà ±T ´ÝÄùç:쟙:0ÙÓS‡…Ci¾Ù3à8®¥-Å­^Ènt‰âVŠ7Ë$ìàˆêÇ D(-³íZ,"h¡Ùÿ&‚"®.÷íd0ô îå–Ó8P²/¨YfQ)wûÚÆtoÎ#4X“7óA✔Ë9ÖÙÂ’I“Z\’P"œ96v±U9-¬K¡G-©F Ü3B:ÈÒÈj%½uœô”B¾\#ØË„Ø…Õ–óÞïCE‰Apv”¼6cdŒ`£i9—59ÚeÚñU‚bQïÀ à¬Jqв`oP¨÷o&Éø¦;Võ cËfå$Tì)Gh¨´‘ðþU­¢èAaÔjq9!Ñ(¼Q:ŒÄäØXñlV¦|„+bªñMVÏ>ŸdFµ|”}ù^8"™[”x„œ€,FÌ ÙFÇ×ßÎ@ Ì£(=ŠzHŠOb‹ˆ|ò)U#Ø|K¨Ž qZùÌØq ƒIëÊ%(iã?{]„„j¨$TxP §àÒcc|ì1ƒÙjŠèÄ ÔbªY Ïu3ÈØFèv­Öÿ÷àŽ±5f•¨ZÓF¬~(ˆ““*äÚC§W‰NBxÛ£L$¤}ÆàA]R+„F™2‚ŠTÅt@„WàÛ4EË6šYÔ*.°´t²ŸÛ è”yV¹Öch8‚ÓŠJ=ÅgÍIEÖe³£´r0$U­ Ue Pb€Ú ÇÄvOÍŽ^øeÚ*U7>Å€ˆ‡-l|‘Y ³½¬ZÛ-q¢CBPn³¿íA]‚kÝh*óè¸cFbö¨{ ×€YV 9£ˆq•4ñOQËœ¡d•Ç2ƒË¸?ÙÍÔÄ53*ËSÌøkÿ÷á¿o]6ÖЋ^6f¢ìŽnRR­†4q£OK8y AµàcŠP‹efh…Pÿ¶¶âÛâ0:[‡Qkˆ e2VŽ9[™„":{?@K|^Oæ-º¡­íoGlÞÅVI“¶† ©Û…ÄÖÚh¶Kà€`nL!yŒ ÞóÿX¾f!ØË? ½\÷žT/ÅÃ@0lìº$#`8‰ô¢D]¦—ÙÇäZÒáW#E@¡@9 L]¨1Eˆ²’› øAðá÷Gô!!çõ¨ª&02‰5Ý3“„ºL/³Éµ7¬\¢m#,Pf—ásݘr‚l|­êJämâffl2`É™ÙcÚ8aå¯?Š?熟XxÔŠi¿D0«õkHº%ˆNÃMÙ‚¸G ѰzL°ªÇ\ÒmÀìÔ­,­V¢‘1åcÖØ¯ïKW^>"c¿}ñ9g_ç_iw«ù…ŸnM=N¤ ¸RFˆZWÆ Ðfd' ì´Ô=B.ŧR‘:( ¯s¬ü„´ |IŒP›½Wp  ¸“ôرðH Ó­A§´øØž#¢®¥Ãj¡3 ÝèóPBXK e¤‚¨¡VH„P(ßcé*1)y„ÆêoOàØÆ·÷ýè1+ã ±¯=F9I+MˆgRÊ€(Ó –Øÿñ8Y“1º’"§æÔ8Â÷¥Ñ¨Ç:Gàv­=kÇèìÏ-’SÕ“‹ä¬ E‚v¸11Ä|zµ|ù÷EÛÍ–\ê‰3Úf0‰¤C" ưŸD ˆÒ‘GP *L†Ã…dD2A,P´±8Ñ@F–mae‘¦å;o8/š!…'õ7²"ž¶óvÝö×}´!N¡´üv=ß+|ªž}U+5(]ªAR² Ì£8%ÝCŠ€”Ög"`Rš" .C2bD¹Ô…ö{Ðòà¶t׈Æmì̓QP¦Ìmì%lDnWí}”êû§Ê”avÔËaÁM{ô’.z×°pÐŒî»nË”¢†”ñ!µ%å˜h‹}‚°ÅoGfnÊŽCî–Tìÿ×€S¢½>¤È MÇO)KF;¡Õa>O>Ô:M¹ô´ÔÛ.5Ð’®c‰§6vs6Äõ¾So[¢µ÷¾8ê ûšR'H]ó³oØû¼Ü¿Žˆ8ÙQ¢ˆéæËã UU¬óÝ^`䢼"`¯Ç,]"‚BòqK÷âKÙ`ò¼Á?ÚK,ý¶¶mãÔlçÖðGLÓO¼¼‡¸´Ž Vêæ˜sñúzÉÓŸP‰gìÇ2/Ïz–b™7§:kNׯ¿x‡=±³Cµv7GOp0´R>à›,oé3ŸËIùåB8ík®ÚÁëe+^}%Ç!Ѝ€æ«GˆPë„"¤/A,HYgU >œ’`”±Ì kÐýq´¦µŒÀª+k3#ÎGµ¡2,¼ŽJ“äíª~~[1—g<®6•~*åCPIË}›b‘ε N HcY6¼¤hº{“ Ðéuü¾i¾É_6ßÄùßW°YÍâO¯u3˜R…A˜\¨ÅKâºÞ†à Í€°ÝŠmp(*y¨Ñ"LæšOut-{½d}wf þtŸíÂí žó’ÏÛA&#Í !´sw;(4)¶y¤ƒ#ƒŸiôËí ~Ø r…†pá„/еo+¡0«úlúR€i¤Ï1ÂvRNÒºè1PÜÁ)ƒ¢˜LÇÀˆØ‚w÷F‰àRŒ¾ðˆ!N¶“7R¬^¯qe“Ó$µË¶ÚÁ™{’/B)Iä²3ÌNH|ÉÊ¡žÌ;iJòjVNÒ«cå$¥ ·Û¦%‹ªÌõ•Á(Iv·„ ÒÅôÔ@P¤v Ó”bƒ!È¥ÇiÏ{#lgÊKF®¶›7ÚÀÊr}¬,ÎÊL›}‘ C‡Íf§â’ê»û"/±X„)Fê¶—3bÙ`WHÊBn¶=L ‡ ’˜-íŠfžazJ ºÓ,ÁÈM÷ Óx +s]Ÿ%p\¸%Ôö@”8e6‰40Ä0û ‹F|á´,´Ý•°„,ÈÓÒ”ê!‚zࢠÂàJ¾—/’ ¤Ìru“S¦ ·Û@TÉfºÐ!IqN6(NóÅ 9@Ü9ö Òd 'Ór2Å…[Bm_2ªE#žñƒ#ïo U’¤¼šHˆÓ^ašÒK°ï|ÍȈ}ùI!]k/o¤X™®•éÂYYwX¾ö¢¤)+ˆJjíÓMæmPRJÙÍÅëͯ“1.Üj‡û š"ºø°_v†•S®BÑyÒ!$¢ö Òl %£]¡!Èe‚É»Œ’Õy±XXê_a½é‡`ûêµ 3᜔ X#ØÏ)+ q>¤ˆ$íæŒ^OÊXumsS¬¸p;ØaíZ‘s¹®#äBû“²AXࢠ€B¶[ˆæ8ëú8ëÂ9Ù÷8 ’PH” N® Ï3,fq-XÉ€Ýe·(Ím‹%Ð÷¾`@’ξp‰¢šû¹£ ¬œ×ÇÊyá¬ì;¬^G€8ÒrvXTçØ[!d&‹F$ë^Î(hƒ\!+ç…³rÈö%#SPò¨ÅÍ(SÝzšˆ\óFp€»ängAb +']Ÿ%D]¸%Äš*“®6Å™3Ñ#.| vXÀŽWR^.1yÙþÞÈÀ˜Íx¡žL²—7Ê ´vuÓÓ¸pVÎÖ¯E€#=f±²2æ9¾hV¹‹­ŽÇ¥1ê^aZnaå¸BVöºpKˆíš$;Ëb›‘úY5Ìe# \*w; ’µÁ<¾û£iÎKZP ÞÍÕZöë£e¿pZ®–°3 2çGÓÚ¥Ù\|Ž`ÙÊ=vC}¼Û9Ù² vp…¬luᆻÄi¬²X5ÂB¯3|Ô$/\B9¸1îöq¿¶°²ÅZ‚]´%îq‡ˆƒ*-¾=¦;—}…U#“ ƒÖ°5€cyÁ‘ íѲ•Š/<¢'ò^çd 7°²ÑÕÍNµ.Ü vXÀö„ÄÂ\î‹£®ýÍ@!E‘lu­—)Ç^×n!e½BRÖ 'e¢]¾î»ÙâRLCá:ÃFx†$QõÕaeËÜ)N3’-– ßù¢Q!D"ÛÂ'2 ;íåŽh-ëõѲ\8-SìàŒ°¢§YËã ¬€űØö¨ ²›+ª×[\!'Ë…s2Óö -dÆœÅZ~;°ðÕÙ4…psÞ+Hã-”,r…†@n¶Ã>#qó™¶dZ|…#® ‚–¯… 2sæ‹2Cù •ÈmÁÉl¬L²›3Ú@ÊW75å çdÙañº,Šsæ‹\#8÷“„ ei b¹Wˆ&[H™¯”™.Ül‡Ãi D†¼XRàÌŠ:#0q,ÏE%$¦Ó^ašÄK ïýì`àpÄZMÏÂLe7w´–éúh™.œ–u‡åk ΰÅQÊŠ°âýi9@Ë*v îL±—3RÙ`WÈÊDn¶CœVÀ¬Ë+g“ÅJö·ƒ„²R[ŸMë°ÚmÍH·2ÖõÆ…ÂöKD²Xf–lÁñ5Φᅳ²í±€­`^‹ÁY,ë<÷WX¬ DËk/odXåêf§Hn{\ÍÀh1 •“!½tw;ˆjËQ+Rf%ÚmÍÈ^OÊQuu¤Uqá†°Ç ØŠä´PW)+±ý A!Q‚huj]¹Äö Óœ¶XÂ÷~¶3˜èÚ9á~›ýÕ¬UׯÊQuá¬ì¶‹3J4¦å¿eÊRûÇÊ™ìËO9I ÎµŸ3Š×ÛA^!+g\¸!Ôö0ÍD#ç† vC(­¬…1283ï¶f[H9í A.ÛB¶ÇiX²ÓÐ ¿Â?´•táC`;, „+Õbz:årµpÕÕ]è¡f´›3Ú@ÊQW79¸p;¨í®È\Ptq\ÜÝ#jÿHÙ!K…mu(¨J÷ Òr )Ç’r\8)§ìp„ÁX}¾(@"XϰÍèÿÉ;·Ûìz÷² @œ†CÿíëØÿÕgV$ǼR2<‹Á Ah‹ÚV•­=tªK+œá¯g`gR8s¯AäBÊj=V¨ïQ9.§rMd`i;çòuŠèòùN¹Š ¡™Û4)ËrÌ2j9ÐÁƒPŽË¡ÜØJšÜµ¬‹§H—}1Ñ46íÞ9]ÀT—Ö'PyOèË…0 RNª¶¸ ZYÈ_ðŒp9•»<#¥Jý9Tfê*¾h•á‰ÊmÑQCÅ(øÊÀs§¸›ÉÁÒÓdy¡› ×'oo])ØÆš´à(ãA({_®„˜ìƒ";uÝ]R//&ûªŒu¢B0‹©ÐÙà>P‚ç_÷Œ˜´Ò2öìBŒ•#9À²¿‡e¿Ë2à_›RJv¬6³ç<–íÛk»&¤‡MÕ"Á „²õå:ÈÈÙ"+õ59¡!ósa‚ VëÔ)T:¦º49a²åƒBÀÝBP¹´ŸªÛ£¸Ã/XFv9”ÕNí;Ìb} äÂb_ôÊÒfºî‹uëT5Ò*›<÷qª}¹f°SXrù„4sgÿ"Þ´kù ’¤ìšS=šž@Y_ƒ²‚Sî‚Mä_yJ,IðE™¦ó–Q)A²×w§VÄî>Ö¦™ýïà¿ÂþüÑ´¢jĺ/îdl+Gö¯TVÐA¿G府Ê> ¢EÊÒX“£Ô}^Fʱ¡ªÇ&û~å²…€Ë…€ØY£^»)1kûÚ3Rp]NeŸ¸àhó很‹}2UnSר^¦·ÄX5: rõs_§}9”1”fÜËʆ¸>9¥eÂëŠfRŒ©. 'Tî©Ü¸\ í‹—è2EgÎy%ÔéYØ%1KMõiÈ%üýKûJ,]¾ÔĤì,+GXîç°,|9–cÀÁö¢lYŽ€+´R¿è”£LÚ(+ÒÆüë°Vð{LÆå2ÀÀdß\¥?‹¶P–WÍOö“ØÅ±¬* —©.-˜,œ*¡/WÂ@„ˆ;eÄÏ)Bƒ´L+¿÷ŒD.‡rÊÈž¬k·.ßñ™nýÅ‘!6,m S1#§ªQ`Yì¹SÁå:˜ð¯‹Á¾r¤ë$1[웺^^c« yÂdyÉÒ—ë`&@¤Ì*§?ŒQø$s¶Û-·X/×b™jÓJ” =ÍAë*B4q[ŽØue}Êz9”k"ÛÉ=-–…q6„ã ûºš¾=ñ†a¬å¤²öåBèÉ~³Tÿ˜ãD:>ÙMc óAÒ¥>Õ¥õ •MÞSÂí{QmqFIbXîÔ:ü<#»ËÏȨÁ-?{Z#x×'!ƒRÁ‹gb³¹bt@eËç¾N­/—Á€} ÷Οöµ“«Nô]ÖQ[v»òÔ\?ùÊþ ”ýn('$ˆˆ»eÄSñÉAªþ«Y,ÑêÓ’q¢„¿~5­™$*Û¶,t—nŒ•£,û{Xö¾¼ 8Ø$‰øauSsP‹*H`.ºÉ &SµHäße€¡ŒË¡,6òÎHKN5—Dà‹£iæn½~#3u–MݶN92ð òr%äÀ¥}Pþ“FŠÎŽ_ðŒp9•eÀÁn!U·ÅØ‰æø ÎMáÉáËÿÊSÅH¨òÜÇi\e°¯a$ Á(‰HÄqFBÆf¼žôeB«5izåxÊ‘—+!¶A‚À½~B*Xt^FÕÁ¶Oö]el$µOtÐß1ªl‰Ø¶«¼Ç l;€r¾å¼Ê6`_‡‘yC×q‹ç7oàƒÔ‘Ø,£vL#ÃdræåBÈË(ªáË«8+~0ØovF.?BI$B¦º4;¡rö{J(¹[ >!ªf¬‹õ ÑßpŒêr*» D«9EVý* I¹»|QŒØÀìÛ:„H²M#? rṯÓÊËu#¥¨Ëc;&ƒæ2`JTôÖ£ ÄrªGó$׃HîË‘ XIr“ª%Ý@Õ¾ØÑL¥èŽÅ:mbpŽui°%ôßÀ õêí„£tzO•#@¹ßƒr_eäH¿XúÏ5„¦0C⋈Á0õŽ-6æ)cŨtð••/§rÈÀ\?©Áˆ%séoòC²¿ï°0­©&- ¬l — ‹iA‚à\®ZR¾·Œ”/§r `‡S‹[®¶]¥rÏS¹Èݚ׊Ø$šÑcÕèß©¬ü\Ò¦ÊåPÎ÷:“Z¢{±N!•ä&t“Äc»öïS]ZžPY¤²àr% $ˆ€©;lqOLËk^ AìZÜ›%=Õ§ež(!ßCBß,„LôiE"ƾ<õp·’ºàÛÆtjñЧQ ìß?TžÓÚå:hÓÒ‰½·6Í=C}~œ–ĥὈQÉ+¦nƒ”àŠ÷>4/WÂÄž,È#óRHLCæ•MžÍæÛÒ>¼bè6HIȉþúìrnAnQ:ð(Ÿ*Gq€e{Ëv9–c O+!w„.ûÅèüp¿IYÛ®rcµ(dð ”-/×ÁÀš¬;qYƲ%åÉõ…ƒ­pIÛ¾ 4¢1Õ¦å ”íÁÁ²ËÝJHyöÙ’ n¿0OóË©œx‚-d©iËÍ.á*ÎOÎ"˜Ád[Œª.Õ±jt€eÇs_§ž—ë L£ ÕTÎ †¨Ïë “2ºß®Ó¹ Ž%uBeʸœÊe[ûJV!X»%ùÅñºÈÔ•!ÄæSZá@ øë°C)RÀ½Ù¶BúX9:À2ÞÃ2.Çr 8ØÆV*?Jˆ¥ã‹ëÖEí ß? iSµ¨å@B9.‡rÛÀlŸ©šÝ—ÈRbóL.ªc{㢠í÷ “Ã.Bμ{ŒJ]z;Ê2~Á3ŠË¡Ü=à%•«ý¼'$dZ­Ÿ\*ò0_šNžšS–‘ò”ã½'Øy7“•ìëjÍøÁät²2ž‡²Se ±ŸpÌ–êÑ”O œB9q¹r ]­©Á. ”9B?PB+9‡ñz—‚©1vQ¶”ûD ù×ß1©t_ÏB·ÙT9’,ç{X®Ë±,6`% ClɼaV)/F (GÅv¡ÄS}¬ þ]õ • — a`UÖ˜º¡¹,ò1Ð,_˜FÅi¢[®kVOõirBåÊ•Ðw+A'¢‹¬L}i&{Uþ‚iÔ—cYì2Êàîeî¨Í†ù!AìUZ›kÔÌ©j¤Xn{îó´q¹ lê*×¥™!$?I"e«­Wv¯Î©6MO¨ÜR¹/§² ¤=¢©¡kœŽds &XË¢FP¢§ú4;H°0–¿þÎÈ(Ô½zgdÖ:Uî"?GeãË©l¶6YhÚ’ˈòüd¦©¢QÛÑ®JÃX-ê¼ÇdãË™ì"FaÖÛL3BÒ¾XÒÌbÝ2D¸;§š4?a²È{B»\!"LÜZ¶F“v+ü{ËÈär({XFA–Ëß ‰ÓñÁ$§(Üy­EE¡=VŒ ü^®—ÉåLÆDÔcSX”/·l̽ûƒ<#¡pÝ·Ö5­0Õ£áÊú ”õr(#‘ü o_é°£¢n­Í1²L®©. y"üõó ÂVñ-ÎHZ*ƪÑ•õ=*ëåTŽ™[Eì%Ë êFË1äAÐTËÍ´ÊR3ŒB½ÌD²Ùå2À@æÄ¦‰åé¯03ÇHv*Ŷš=֤Š“ *!/WÂ@‚„ʰX§L¢P•_pŒìr(ç€}LH_g̤ _dÁ·xÉ–üÛõòÎäÈ’¢lÉâ¿csné6¢:B-þá'OdAb66c”Tvyîmêv¹ ÌkJOùå,Šjîy ‰3›}9ÙdÝ.S=Zž@Ù„²çåJ˜HÀNbÎX66ÒÁü…a¤T"‹œ2Ñc» %'Bè¿>cÔT"í¶ØvA•c{²u@e¼Ge\NåÂH°Úþ8M²R©übK6Ûk_’­dͱZ”2xÉÈËu0‚$«ÚSYñI|G¹o– 0Õ¤õ “Ñï !än!´ ¬‚(¥£·ËuÉ]¿áÅåPîÿÚ™´ÄuYKs¸Æ¼L.°X¨\ TS«FT<÷8¼\3î5¸2×´öÈ2™œ2 J+·×ivê”ed|BåxÊy7•òCšI%Ø–$xE°ë'_4CÙd!‚’IÆP›fŒ!¤ýõ,#òRUIÝKÑ’ó=$g^^ˆ¼k8™y×zˆ=µ:¾È„·oH0U‰Dtð ‘ër"‹ ôhM’-º\P)—Öü€È Ì”ØÎ˜FUMõh&'H.{P ¸\ 9dĤ ÷õx´~eƨ.Dz Ø×á„ð–eÈÔ´j~¸äöõmPÔ‘°©j¤X®~îyÚ—SY'®7*…‰çrmTÚL?ï ÓÚ2]]}ªMÓ*÷ƒTn\®„Hœ5âv,« ^,_¬)+{lCFBaÎ6Õ§iŸáϧ_;©Eëú§HÍsÌ4²*÷sTv¾œÊ6‘~­ZkôYhÖËâL\l±A™£ÆJÑAœ—ó{HvÆå2È#¡ÐàŸS§”ˆÄ'g­µ#mÑAS¢Ò§š4;`²s>¨„¾[ .» J‘¾¥À"8¾·Œ\.‡²Øæ”?ä㲯ªÃ[·#û‘a=UüËbÏ=N—ë`À¾†‹f¯7w[-l¾SvJ›‹SkªIó*˃T–Ë© iÓ*¢cmÓÌâ£Ø8<¶(#‡£§5Øô¯‡_#©˜Ñ²`ÙÉÂÑSåXÖ÷°¬—cá×A̺ØÌ©Žüä)·7,ƒ©a!T=r^JÆYëWujç´©&ÍO˜,2Yp¹2D¢H?¦‡¾ÈÀ–fãÚî`˜êÒ¼O„Ý2*2îîuc¼ÈÃæ†Œp@eyÊz9•1`_S[,ÿÖc›§r21Òe? ÐY:æ_äzA„²âr!äÀQs©¯YÕÎŒ/§5Y˜/¶•‘+çØ‡}œ@YóA!ôÝB¹UTáK3:<~Ã1²Ë©þµ*¡¼jÙÈ©J¿ð¯+,3ÿÚ(ÜrÌ¿Ž*›=÷:5\®ƒs÷ÚX(ªR·š%íã:@RˆkÇòDJ“óŒâ„Êö •ír*ç@„˜Â˜}‹3-›'B4Ez7¶]å K;‚Ë_3Rò†ÔR¢)Ü|¬å•ý=*ûåTÎ ÿ:©P?;4IA4¿8Ñ’¶Mnv+F} ƒ¡ì—C¹d v– mW£àh—/Î[—@bB¡0gäuBeÈ{J€]®„‘4‚×2f0QýÓ—c¹&l£ŽŠXÖdÕb_œ3æLÛöÅ«¬j¬`ùÜó—S¹' l¦ì`ì—)Êý‹Ü+ï[¢4jÓú„Êñ •Ã.WÂP‚ˆ r¹³ Ï/â6e¾A©£¢§µÎ%à¯Ç±Rà›}XÀܪl`9ÞÃrÜeð„ƒ-Õµ5•Kô7ZD¹VĤbë)×±^È©œv¹&Dš$÷:•¾\e€ÊZÞ)Õ)_œ ãÜf½€´žêÒì„Êú •Õ.WB8زqTsý ì±É«Ð¾½O½sÌÁn—%üýl&õÔØ:v ,¦Ê‘`Yßò^ŽeÇ€id$é?J†RÁå‹ÓuBqèRŒ‚àÊsÅ(ÿ_ö •Í.ÂÄEY¦.^ú´"ïôÒ/¨ ˜Æ®Æ0çžêÓpBeÃJÈ»•€‰‹² O·\>ÿJT{ÿ‚kd—cv™!±Ìd¹=>ˆž5§n)"Í•:VŒ¨ìòÜëÔ/‡2& lPÖq—JíÑõA~(R$°9¸åžcŸöãÊþ ”ýr(‡|Üв$¹Tð”ì, „¬c_÷'Jøë3Ø qÙìC%cI+GXÆ{XÆåXމ…#ÖB ee5>x2•ˆö6æa]:f¥èàA*ãr*§ ´iNRÿÈ;—ÜZbˆîñ+>ûߨÇž=Ó‘ïàJIqL5ʹ|Ô,•˜7œàÖ¶ü†$8SmZž@ýžB.ÂÄMÙ Hf,í”6ð žQ\N圸)[„ _ ÌøbìÖeºQi{¬(ž{œÆåL®û:”²c9_g”þâmšÎ,ûa[×ëÑê„Éñ “S.Â@&;YqæòÝ1ºñA$"XÄèÔÞæSMZõÒþü˜QPŠÁ¶LzÏ™ªF}å|Êy9”{¾NB™b™Ñug– ,ÄmÒûyØT-jÈàA&—\®ƒXÚW²ÄZµ%>¹­\Âiû¾tFÉØ”QŸ@¹ìA%àf%4ó@$¿;1¸×A ³úèòò? #'欟 ‚Qxz÷T.‚®#ÆL0L”mæ*W?÷8m¹\æ5˜š «c¤„Û5S©Ar»¢éž9óØÌ'Dî‰Ü—YòCRÈ3*—#iû¢I ¥ˆhÛ“ÕÂS†š´f±%ä_12Êî¬ÞÖd[ SÕHÜÏ!9ùr$Ë€w]Eåâ±Ì¿«ºûOSa’H«ýz^eŽÕ¢ƒL¯ä÷ œ|9”õ<>Ä$™ÕËP§irXÙP®²ñÀ©M œœ*¡/WFn8©µ\²±´”_pŒR.DzØ×­TfékK[UŸÌ;¶sFX{îy*—SÙddƈ¥uI´ì|Ó(ÊDóÅoÍÑSMš0Yd²ôå:À@›ÄѨu™˜%ó¯Ó g‘mâñ©&Íò@*Ü0Š$(GÆVŒTBæŠÑ’õ=$ëåHö ÷º©L±N™2ÌçK‘géš³™Fh(¦Š‘Ûd²öåBˆ)#Côj†U¾Ø—0ÎZ¨¬älYS=šŸPÙä=%˜]®„èÒœRRlù”ó7#»ËÇÈ$õç߀©Ø¾ˆUË¢Ì0èÖ¦¸µU#`Ùò¹ç©]NeL“ ’*[Ž*ƒØ9æuMf®º> ’2\bªMà •ýA*ûåTÆyxˆq,Ø·øFÎ7j RvÞFþ´¦ú´!üõôk$u§´îc—*s¦QPÙߣ²_NåÀÈZZugmsêÅ'cF–Ækòp“uäX-Êÿ—d2ìrô€g”\îËR´\¾@rWxǶ®^ÎSMZž0xPy·ÒF¶Òºª¶šÑêù –.‡re_*–ˆì/vd…ÕmµŒœ² 9V¨òÜã4ìr Ø×(ê2¶5oHÊT¾ýÕ.7ÙÎZÃ9Õ¤Õ •ãA*ÇåT.H2b‚KÄ:oç!=O„bÒD¯Dè ±’±oû…%üùðë¢ÖŒu3­›ÊCu¬`9ßÃr^Žå¿†’·B~bÙ)½¾X“eWho92%%=UŒZtð •ór*÷@|„2»b™¸cOÉ’Œ éÛ|AJ°Mõi}Båì÷”Pr¹räL‹™,kè´ô_pêr,÷„…]䦪‹k¤ ­ùfäÂXþ ‚¬ÁS[²ÂL.<÷6­»‘,<`_k’TX/àlHÉ<’#ÈCkŸÄ/óêÑ„O\"¹år% ˆXP3Ë‘ý„pƼœB*Ý"©·N}Úî%ôßO¿vÒb‰­Cˆî©r$Xî÷°Ü—cYüëP’n·%Y ÆúÉM ¥eíÎÛº§Š‘à@ïQ¹X.Â@~H2iiÉâp‹±±›ÆÂ±öiÕ„àŒ©>M¨\l*w+A'⯓:²î¦e¤ü‚eT|9–uâzcƒµ·9Šù•q+{oGÛD!5UŒôÿ©\ü\Öf‰\.ƒs÷Ú8¨$µ×V¹} ÊûÒ[´nZL±3ôÊò ”år(› ôiMáeµº, À¾0*a›iÔ3ÌN”Þ4uÀtòuêX9²,Ë{XÖ˱l6šÂDb 42û€ÊF)‹­Eí1V‹úÿe BY/‡²Ë@—¦ÄæüC©$ÑÝ,§ ‹+!q2ûT›æ'PÖ|P }¹f°ÓYmyžj# ¿àÙåTö;œYOÄvXÙ Ñs¥è€É°çÞ¦¸É)#óŽ©©µZF®RòÅ%StÇv¹-:Õ¢å ‘ñ ‘Ñ— kiFVa?"€œ5S¾È¿n3[xÀTc¡³šy „øóù×F°`mK–s#y@åxÊq9•K#&<3\¤¿À.eëØvãªÇjQÙ „rôå:ÀÀ&ˆPˆÉ¢‰þb- ž,º½™µÇfŒê„É)ï !ír!ôÈ—}xz¯ñ!êù¼sÉ­,莨ýo¬Çñµq$Ç;ˆôRSŠß8™†ºʘp¯“ %‹aä¬êqâ¨r ðùdœ¡S¥H®zîeZ¸\1’c$±LÚ ƒ’Q82bÔæ¼(NÆ*c†vÜ"¹/G2&²CŒ8²{YKIdPB“t{~ £pžº±o,;BˆçˆpyžWöÄ"H³¯B"²CŒÀélK“V„lž:R”½áÙ5žÓän@^FBHÏÅ«`«t;ñý UßU”H¶©Ùë„mðNy!.B Ì^3%‡þB2±‰žùŽ–ö™¼Ö–©YÇÜêP=Þ1ÉÅ´?ó¦ÕY5VŠ6ˆŒ×ˆœÌw¹xâ+¨3ÔÖ]}ÖÖ#I³]a¾–¢&ó©¨Ùâÿöì’ù9"'s\.„‰ÏhIÁʽZkH?ð6Í¢d/ý¦ºµ[L%ªÿ?”“¹T.WÂÄÙ 6®øa)$…ká|¼c²\Že‘‘xGA-¡ËU"|fòºQ¹Fè4¡Cƪ‘l`Yì¹ç©Äå:˜ø”ÆÄY¾B`Òê8á›VuI-]š§ØP“V²ÃdyÉ‚Ëu€6ÍI‘ºviÚ}NÞ°üè e.Q­T6„ ~ðš©"Juù”ŒK¦Š‘n YßC²^Žd°®-É™ËxtjpÙÔ´…êa+gŒÕ¢ÚÐÁƒLV\. Ì: EF×F óL8êÓ'–ÍÝ)Ûa²É{B0»[f3óŽŽ%²BÔ ¿àÙåP¶²’ÔÂ]ËO`Ú¥=e&Ïn×¥ ª0VŒ6 lõÜãÔp¹0rÄäZŠª gF¯£þö묩Íw˜ì2Ù/g²O\e²(¯%”7 ¥rdòZÅ2>¢ à1ÇÈcG ñ×#'t ç'ܱ˜³ÇÊÑ•ý=*ûåTö÷ÚTýçåNŠì9‘4ëÁ-ëQP£¦JQÈÿ« dr\Îä°ÃHI;ÛÖ).í8Àd!QLjɼZ¦š´ØarăJ¨Ë•0ŸL™,cêURœ¿`ÅåPŽ ûÚ‰[,W—YÜŒE’·)ôÓ*{ƪQn`9å¹Çi^NåÜw¯ƒ¢Ôcµ t\턆ñj¥µŒ5i¹Cå|ÊY—+a ƒAÌ]þ_ÍUóJ(ª,(>qV¡6f%v„€?n µtågÄCÃħªQmP¹Þ£r]Nåšð¯›À?“Ç¡Ü~Æ/jËüè8‹ÛT%ªØÁƒD®º\¹!ÔÁøAä ò̬8!„R8t‘bRëXÕ‘ ï ¡ån!´ FF†Jÿa)4UrÿÆJZ_Näp¯ádfHÒl‰#G‘ŸÍDx#§JQo ¹ã¹wi×å*p®ÍȳxM8픟ˆnÑ‚´.=²’˜éØHï ¹D2.G2&ÎÇ*[¯Ý»Uz^Bx|&ð;%0Õ¢Á6tûãfQ&yƒ­–§¨³®±e¼e\eÔȰ#ªL–ýI«Æ|-r*¯rý„yihæX1†Þc²ðÝLnˆß·"¶H[ü¢æäìBhÉ’ï•0Mç©þæ * ÛƒJˆË•0s<6áKòxe…Ÿ7Œ„ëòŸ`"ôºÈ„]_ÇÜ…ç§~ÁÔ\•ß4åö±ZôÿP~.aSär&ËÄõXP$w¬ä,K×#›8\µ¿#I]0õE¿e‡Éò “%.WÂÄùX'f«^––:5lÞ;í¦Rõ^þˆe ¦<£–ÚQBýù#' £>r*S0VŽ6°,ïaY/DzÊȰcõÓ3¹KZœ¾68»}–q¸£{ªmÄy‰>HeË…ž‘QIh-·‰J!¥'¦~ -¾ˆ±( USmšî@YëA!àr!`È2j‰%~Ž£Âê<#»œÊ6q?ÖÈØlIåµô²C™jƺ¾ „T8§j‘m0Ùì¹·©Åå*˜0¯™Ì,¨ ¨B]pÄ1òÊÒÏŠ.Ã0Ö¢Ù’íA$.Â@pH ¡KzÙ$61õ‹ I dÖgº ›k¬IsÙP‚ÿùÜë&‰ÖïÜ¥)jªù•ý=*ûåTöû:D«k)FbÞBørkF|ÎTKm¬Õ†¤²ãr!L$‡•JÉúŠ¬Ì”TÓF²j2զŕCÞSBØÝJˆäkSªâ%’&ú –Q\Žå˜ð¯“²#kùö«ˆÐ˜Ÿy¹4s}ÞÖ=V6°õÜó4p¹0cĤ;LÛuv÷<”;©ÅcýŽEÕ6Õ¥å”óA(çåPNXLjÖòÇUTpbÌ(Út}žjRKŒ´îŒ%Ä_3&Q|¢Ý,Xc¬mP9ߣr^Nåœp°A\…ZàÉ.óX‘ø$À‹ ÆjÑFœ—ÔƒP®Ë¡\6Ò¥12rÉ4/†žX/G™}ŸÈ°±eÚarŃB¨Ë…0 RF@ûÏ×iQ˜¨þÆ”Q]å0°CH4Ú—¡¤GŽë;,õ3ò¨=6fÔPnyîmÚ—3¹Üërëöõ…™‡ÑAWÚRAšRc-Zï0¹dr×åB¨‘/ûî¾0’1.$¥Ü?YŸŽÌšêÒ;Jx!ùZÁ¾ÞQ-J3—©r„ *ã=*ãr*cÀ¾Ö&·O1pÖ*°D!Óœ›2BlÈàA(ãr(c >¤A¢.±®—Dõ‘S¾ÉA%Æ #ì ùÁL/½<Ó <‘âXØrÒºáþ ~‘²]þLD_+AÝe “R0`óæu\ÚÖ&Íð©Yðÿ3Yù¹œMåº\á×L^Püøˆ#„:2j'"¤€æò>.ªÊšš1o@YùA(ËåPpŒŒD2kÙØ€Wò‘£öŠîOw‡z uiÛP‚üõøk€‚Íeý@9VdƒÊò•år*Ë€{íI,m¹&ñ§GY’-SÉu]\)è±Z„ <e½Ê:¢F­…å¾>“÷( ŒZ?ã4‰¹äT›¦;PV{P q¹b`$I!ÜËùL‡dâL#½Ë:à_C(¥aËöXšÃ竚 …Æ2é ›«FXV<÷<µË©l23ð­½îkdxœÈ¿f åªÏw}¥Áv¨lRÙâr%ÄÀ.H“»ên×¢5'/cEE–é9Õ§Yí¡þü^šr¬£^ª„ö±j´Ae{Ê~9•}ÀÀ® ª0üx6¹v"PY(Ë3¿ŸrR`SÅh#ÔKýA({\.„hÓŒÒ!µ¤µK£È H½Ÿ”ìj›jÒ|‡É^ê—ë#ßö«»ÖÙÐHåß3ŠË™ûþµq©°/Ã@•a˜\L†`ùÞ7 ªE±ä°çž¦—Ë F‚Œ<õ§ ŠÚ ðù6¹¨Ðöù¦ê©©-v"9p¹²C, •*ËWœÔ`‰#é×îZý™}•„Ž}ØOÙPBÊŸ_KKj]C#ËUCnP9ߣr^Nåœ8Þ„ðŽ%_‹81Ïl¡ñ9c ó±bT:xʉ˅0¢‰øN¦’6®y(E†ªt`@Œí‚Ô”KÞBÙÝB¨‰ø&K,H˜xÆ/XFu9•k"ü:ÈCR–eqÏ6‰þµRG0>qJðt«FT®zîuZ¸\îuµgÛbí¨1÷$ÐëŒQSªsO5i½å~Ê}9”ÛÚ4¥Ng_òfSÙ€#4¥5%dZC¦Ú´Ž%üõðk$µ§Ëja;Ei`¬mP¹ß£r_NåÆH¿…gþpvþ‘wn¹µå âU<æ?±þŽÝ_×ìHŽgp¤¤X¦6J®Y_l¦1iï¯S7J¯1Ëè ÑKûA(÷åPnXLSrz ’èÐ/.š‰‰oŸ4»yìÃ~Ÿ0¹ñ òr!L„_ yn9›Òeá¿àõåLî¨ENHm,ƒ¿¡o•Q”ð ì#UCŽ‘2ó¿CÙø¹˜Mã›™¬Ì<à^£(4x®`˜ð¼ª)ÌÑ[Ÿ\&<Ó¢)30Ùø=&çåBÈ‘Mn¶X² Ô$õ“ó™ÙÁ¹eÛ 7Ï4iÊÌ}"„¿ž}]Fžð5X­‹:`SÅH˜,ï1Y.g²L˜×I µ5U-:*ä‹ Y5éÔ-»$5¦j‘à@2Yòr!äÈRšjW¯Ù׊¨yã ®²-^, SMšœ@Yú=%¨Ü­H¿nŠ YÂíšD¿`™^Že¸ÝÈäýó3NPpDõ'£¿µT#¦©b¤TV<÷:Õ¼\æu¡EkIæÍOî²hYåÿFþÆT“¦'LÖ™l—3Ùd`/­©€ÅS0­Àmš·í_õ; S]šÙÌþüZš’³jl1“0eŸªFve{Êv9”m"üÚ(à¡Ë¼£‰Jø£Pãðý–¯¡m¬õ„²_e¿N&áXn³€¬öÁ^šRx®:@:d¬Ió(»=(\. Ì5¥ÚÏï™H’îêßpŒür*{8FIí̽ܬC–(æ‹‘Q›–æö#àÉsÕè€ÊÞϽNq9”1s»‘£­~ø›B™ÕÑ_ Wp³–aÄZ‘S]N¨Œ© \®„‰ø&ÓLYˆà¦Æþ…B³x—#¢¥¦ú4ä‰þzø5‚< º'#¬æÊÑ–ñ–ãr,Ç€]FŽŸ³¿LÙjó³¿J¢…¶í„¤kæT-:ˆô²xÊËu0âFèª^ba+PñÅSkÉå‚“”ÇØ*Hœ09òA!ôåBˆi¦ð¶ZodYç/xFy7”ÅH)¥$×=˜{}¬&æºü&o®©‘GGþ;”Óž{›&.—AÏØ×Pñuà1\_@Y¥Š×·i»ÚÔ.ˆ‡@9„röÝJˆómc¥ óX¾h*4¿èÒÂDË6ÈTjjÎÈJ(ùë›iJ\öm3ÍK$ÇÊÑ–ë=,×åXްŒ˜„ÁË}œ"µÀQFNÉ)¶W˜vúT-J9ÁƒP®Ë¡œ» å$?Ÿ§éÔ!ŸŒ¥(V!XÃSmZž@¹å=%´]®„ubN‘%Ü®ÍØcΨ/§rö@5JR-`½-žä_•¡![Š‹¡Ç<£: rçsÓ¾Êe¥ZkHu«°ÌwÊL®žî› O•©&­ ìü”ír%äH›íýC iä.Ÿ$Î&I¤@·EQcå˜êÓªO”€?¿›ÆT·-ß‘ÀT9:Èýu~ËΗc¹mæÆ¾‡årÉ4MÊõ‹)ø,Kï-72U‹ÿ.yÊb—ë`"ͨI[L—£PÕ¬qtQpªÉvÁ½¡SmZŸ@Yð òj%€öAÒ©Ôe[¹¸ ß[F.}ùŸ`ÀÀ–¦´Pü@§¹KÛ¼e”TIÛ*[Œ =‚¨¬òÜãTírL¤%{c=çÈødÜ.‘Ú¾ü%ö[MŸ@Y„²^e‘6-ˆÁð5~Ë8Í?öjBHö>ìÔéSžÄN”ð×°# ¹®¦yRڦʑ`ÙÞò]Že™È3 ²j“ÅÀδLû$e°U5·»mà+F} ƒ©l—SYòŒ¤ZC¥\ Á)຾OAY¢S¦ô„ÊÖï)Áår% …R¶»-wµ¢º­~Á5ò˱¬FFÉŒXîd~UI.\nÛU€TS«FXv<÷<õË©lç¶±Puæ:ôXh™wO™<,›…‹°žêÒìÊþ ”!— a Ï(@®š+”39æ… äí̶½ ˜#eªO³Øw²HÛòíŒà)cž‘Ÿ@9ìA!àr! ¤ˆT“£Ü×0ÐùÏ(.§2Îlc£¯\}æ6ù"òT(½ µíë*Dkªá€ÊÑϽNór(cÀ¿Ö¤BÅÏV¹)5:ì‹%Í,öõªo4¥´èT—†*çƒTN\®„‰‘&óH_¢>¤8ãJ@P*§êv!R0Ö§…œ(!ÿú¤‘X#k»­ìlcžQP9ߣr]Nå0°)²+~¬Î$i´Ê K¸èv7Í]ÛÆJQþ» êA&.×A,§1¡3bYNS‡}2e$ ^ÇN›:S-Zž¹òAôÝ2H2rj˲Q¬ïøè/Gr¸×…;û²8£éÁø"cP Ò “„Š+FHn{îeÚ¸\ Ø ®[G໅癜AUÕm)HÌæü¢:r?å¾Êe=¨ÞËê«hÌ+¡A­­½gìÃ}ªI;ÉõË_÷‹œàâ¨-RªÂªÇÊÑ¿cü–Á—c¹z 9•…ËφV)]êƒN¹(“5* uI÷T-j9Á{P_åq'ÀË :kxéüóÔH$­m{4CÆÚ´>²È{J»\ 9° ’dèÖeÈȤ¹û{Ïr9•»†Œ˜Ô³uYLëètýâHNùž€]JÀ”ƒ|€eÉç^§r7•ƒük3 ‰\ÓŒØ*b^ fU]ƒRðØ•¢à&ëƒLV»\ù!š¤ÍR?þ]“Ú\¥ç-£¤ˆ=»A]Sù!Á}¢„¿€ÝNlî,[5²ä1;äÊú”õr(Ë„m¤YèÅàäÌ/¨œ b¶Ìí«ª„JO£ƒP/؃T6»\ñ!É$X’ࣉÑúy$Ʊ@YÈ4Ǿ쇜@Ùð òn!è@v;E§õú¿‘e»œÊ:``·R©K/–‘°(×'.œÎºÝU†—ŒU#= ²Ës¯S·Ëu3¹jÌì˺Fµ;ä‹9ªåËYa3ô„Êþ •ýr*› „ÎeZær–B"û"“²"v9:¦Ú4³!üõìL¤*+edªÙ•ñ•q9•mÀÀî¤tp/6³•ú­ruºÖ~FœcŨtð ”q9”]<#%(‹¯ d,?ðŒ”\¶ë pÕT›æ'TF¿§„Ë•€9#£vY—ƒ•­¿`ÅåXöÛAͺÞÃ/ž¯FÕnl±’Ìp«FX<÷<Ë©Œ[‹ªËe5°‘-ú•AìU¹9¸–šjÓpBåxÊy9•³iFá"²´SÊ0«ùF­H4Ëö ƒ®ô±ûÈ%ä_OÀ®"´‡Û¶œæ°±rt€å|Ëy9–C\#¥®Ô\ᙜ9?öˆ¦v[ßA‰°1 ;ì@R¹är! dˆ”P7T–‹øÎ=Oå2R›ïév0î©>-N¨\ö p¹bDÐ&ÚKd;£Üå\£ºË9àaƒI<ò–C‰3òEô/›°Êå"æ1UòËÕÏ=O[.×Á„ƒí¤-âËM§Lè:HDdn«¢QÂ=Õ¦å •ûA*7.WÂDŠHP–y-ïÓ4)óy%¥*¼·áS7m™jÔJN”ðç#°Aκ'¬%e)M>Ö–û9,_Žåš8âÈ”È^¢ÅZužÊdÅö¦cöA°Wð{LÆå2ˆÀ6!«ÿÈ;—#IbˆzDüñß±=ê¶B¡‘}èä‰,H\ké”%D2Nn€øl+‹…cªIë $çƒBè»…Ð:°V„Ô–e»^þWÓ—3¹'B°À²0PÚÆG£°`¶Ï•sHvŒ£ (CŸ{šÂ/—A8FLn¡½Nÿ2£0ÄàÏÜ¥¦ëT‡–¼Ãd<ÈdÜÍäd9´ßªéë°ºÄ8£"•Fù'¾ŠÇ.¦%û†=Ψ©½{]”¥tg+FL–÷˜,~y)š8ߨ䬡?KQ’*ÃD`Ãõr Ø¦Š°¡ƒ™,—3::ËÊë¼FXxœÂÛ?BðÖœ MìPYñžT/WBŽ´i©?#/rå߸šz9•Ñ3qFlKœ‘*P81ñ3ùL<YUÔT1’ *k>÷:ÕË¡,:’Æo†ðe‡‹ÁtJiþ^2…†bªI“&ÛƒL6½\9f¤TZߌÁP;Ò¦E›à3ñ×%9Õ¥IïÁÿzšQ"Ðýü•(ÄT5Ò (Û{P¶Ë¡¬î5H<°ptéì…ÒXuýšäZŽ©Z´êþ “]/×AŒ%¡ŒsiÒ<¥£NìgZBÝ?—Û€˜jÒtÊî*!ïV‚aàPQ‘BÓ–Œd uô/XF~9•m"Û©ÚÒ>ß”³q` ÁH#ú3ècèT5² ,ž{†^®ƒ Vcæ®Å½–0ÍyTI×v]È 2Ö¥Ù•ãA*ÇåTöýüe#-³Ÿ« LÍïÓV D}æ ªÆBgÓuG=ÛƒZ* Ï¨ÛØ§ª‘oP9ߣr^NeÏ‘1#-ÍX:XqÌS9„’½ñ½´Ÿ•…±bÔ:xÊy9”#cF)Õ¹ltw§Xœˆ‚÷–äµMSòF™F±Cåì÷”P¸\ >e”d)ê‹­ ÉÁù ¦Q]ŽåÈ‘9£ÈàeúW‰¹Ùç-ì" êƒeÔÜÌclP¹ü¹×i]圸à¨dÄÒÏr÷Ч²àÏFŽQ³blÎ(w \B¹q¹| s–ɹmYÑIàœ\LÍ?«ÊÌ‘cƒF™Jè¿€ ²·Ï§5¤Œ•£ ,÷{Xî˱\Ø^d%’ëÐcUuœ˜4jaA"½˜eÎÁ.ÝÐÁ{TNÆåBð™0#M®åKŽYwõ‘-Ⲻ§’TŒ­ƒÔ•“õA%øåJÀ.s©. å’ú ¦QòåXîlaâ°Ò¥[vcƒžØ”­rð÷HŽ7‹MU£þ,'?—´™Àå:0°Í)¸Û°LàHÔfCYüs>P=tìÛ~ïPR~¹&°Aš­ËFˆ@8íÌó4e‚²SFëT Q1v„=Ð((ÛÕֹǤ“©#ŽÅTÆ{T–»©\<á` Âÿ I› r%eU¦~lï¹[ûµì•ò ”Å/B´iEÎöƒÉMÂ`?sh¿Tê3wjË¡­°ƒdÉeÐwË:°›–Tª)k¾Aµô/Fz9’1`_S»§/·¹$%N¬äp¨ÄzзÉ!,cÅhɪÏ=Mõr"cÀ¼Î$QΟ9ðN¢Ú,'ÆŒP –åYRžëÐd‡Éú “õr&‹MéÏï™éä¥qͤèO’Nc=šø† ýÌ~+—¯TN@0VŽ6¨lïQÙ.§² ˜×Òäj¹øE@±ç‰Zd‘ȯyö«EŠ <e»Ê: ‚&åT]¿µX„Éõr">“ø")=Õ¥é”ï)Áõr%äÀQÄB—ËÖx¸×ÅäšlõéÓ2Ýrêe¤ýÿHpîeäy·l"@$ID¸V"xŸØÙwB„t}nksDN=ŒL7TÐïá p¹ &ìë¤LôÏÀS£¬ïÉj δ…IFæ6õ0²9¯Ð•à—+¡g¾¥yv/;|ÅVâ¿ð1-.‡²L_—’$k,Ãv ©_ö“Ê ò iè\5ò ,Ç{s^‰Ëu00} AóZ‹B4çÝŠ`J±Êr³Ð©Íw œB9ýr!L\p 2îÔåÿÚÊšu"QŠ9Cõ£FÇÜ·´ÀŽþúðu(5§4(%ÄbªÅ”ó=(×åPŽáëHjHèâô‡DàÀÛ䢕Ëo0 «±Z´ñI¹drùå:˜½N'6Zæ3DòÀ€K’ÀÂär‚v×T“–;P®|P }·r`üZŠÌ=tõ²*˜ý‚eÔ—S9}äP‘”byB23rÞ¿.#éôOÚg!£ÇŠÑ•û½A¯öËe0à^w“°x­ûúîÞväu*íÖ‹œÀ=–Å_µå~Ê}9”K,#¡ÐŒX•Ð ÉÉÜ‘Ï}Ù¯I¯â??~Í­Âk¦—‘±‡U£ÿ§rñsT.¾œÊ5‘”(øºŸÙh™§rIEcýB)cŨ±¡ƒ÷ \|9”[.ƒ€Úò£lƒ84½\a$÷bž %lnþºw¨ ¼§èåJÈ`5£óeÂ¥3Må¼eT¸œÊÝÅÈ b?;„ 2Í<Ð+9Âó³¡ÙQ:u¤yƒÊÈç^§¸ÊÍöµ7Y¹,‡ØÛ’óH˜G–)#$)cj¤yÉò ’E/×A¬‚(©„c eÉ>’ušÂÚŸ9 „ 5iͽ#ÿëCF Ž¥Sn‚k×T5“å=&ËåLÆ€{mF`Y·f:ë“‹Êò3ùLéa˜ªEðÿ—>Èd½œÉÈ…ý"˜äÚ'«Zʉï™MÒX…àL(ïžêѰeõ•w+A0°—ÆoÄò†¬h×_0Œôr(Ë@zH;qˆÇ§dpç‰EJÌõÝ‘-3ŒùE²eÃsoSÓËe~‘P”¦¬¶Ôä.g’9*âËdnsŒd‡Éö “ír&+VA„„ÙuI?Ët‰>ñ]lšõ±­X!5Õ¦©î(¡ÿ¸eäA\ÖáË?¡IT1fé–ý=,ûåXÖ2JjqùQŒ<©˜Áqdôé‹o¥T&êcŨ7tð •ýr*ÛDzHR+Ô–òN¨ÌSÙƒØÒs]L+rqÕ©>Ív¨ìýž—+aâz#(Ê˪r©w÷/˜Fq9–mÀÁV&B×[Bá'"„P1Úü³‡Pàò±j´åðçž§q9•}ß¿Vesæ'h¥q€Ê©ä‘Ìß{ÑÑ:Õ¦ù•ãA*'.WÂ@€HyÈò%äÚ1O„$uÿÒdQSšç†RÿºkÔŒ>Ýr¨v•£ ,ç{XÎ˱)Fmƺü[YMë@³œÄÆÅ±ü¥t«1×(tCR¹p¹&°ƒRݰD –w»±OSÑñ±®TJsªO‹*—>¨¿\ "UÎZƒ½ Õ™¿àÕåXN ¸FM- –ÁAšeóX.P{ÛZ¢Hk,[­sƒÊÕϽN—Ë`ÂÀvR±ø9_¤ÆíGraˆˆi$¶©.-w ÜB¹ýr%ôÀrZP”Ôz!”#O|ÝJSôB¥¢r±ÂŽò¯ç* ìŸÜUdfL•£ÚÀr?‡åæË±\>²–iRëm3 N|ËQ±ê5u5 ÈT1ÚÈõj~ÊÍ~¹2°%,¾ÆÎVÀ:N¼OÅ#$–§52¦ú´Þ rs>¨„¾[ ="’F‘\X‡Q™zÞ4j\Žå°°ÃÈCØÖ;*Yg˜%êûAÉsÕhËÐçž§ðËu0``‹“#³×›¾í8på=‹¢:d}0±(y‡ÊxʸšÊ`Ö‘éJYÖ‘¢ydè©uUV®3˜}C ò×S°3Èùyçr$I Q’?þ;¶çQÝVh"4ò <‘‰ÖœÁ"ñ+GX–÷°,~y1êmÙ"+Q]\#«„Ù‰Q£ÖÇGfÃT16tð •år*CÔ„Àë±}V9¸éˆrýŒã+÷Ô~;PV¼'ÕË…“FFéë}kw È/˜Fz9•1aa+i…bMsi³¦Q7ijg}·ÊŦª‘lPYó¹×©^eÑý´$e–Õ3bg9‘íÅ„(ûŽ;•ƒ1դɔíA(›^.„‘j2dÛ:®®*qÀ=uR–E $ªíSmšôŽü¯O5™*Ã>Çö‘¨š*GºAe{Êv9•UG<#`ùªÜ$]Rqd;-Óê[‹RY{ªmd{µ?e×Ëu–Q›÷VªH¢ÄdžÉ M\“iFM5iºÃd÷…w Á0r¬ˆ¥;—ˆØN˜×/XF~9”mÀ¿ö¢”Œøœ‡ˆÏ[F ˜³úBe%ëPLU#Û rà¹Çièå:ÈËȂϙ?ÖÈÓ­û¾C cMšíP9¤r\NeŸHµpÇòEÓM½æ•PAÙ%Ÿ­”Êd›êÓ\w”ÐÝ32‚ Öû$÷©räXÎ÷°œ—cÙ'î8‚ÒL~Ô¢"ÖJ¶#›²Âì‹ J)Õe¬õ† dr^ÎäÀ@ Q#«Ömc>’ ’e ’#IÛͧš´ØArö{B(\.XMs‚kÇg*Ž;~c5­.gräÀ­}P¢–IõΘ‡r9'§|¦Œ$‹Ñ”ËŸ{šÖåLÎ÷ڄܸ×Éßâ”8‘ââäj!Ÿ>™ÅcªCË&׃Ln\.„‰ ì$ [G›9{5Eˆ®¯SOjÛÉÜPBÿõ ì‚:·}V£P2VŽ6¨ÜïQ¹/§r ¸×UTåKv[vÛ‰‰ÇNëŒOþp[sN£Ò -‰KúV²Ÿ?œ–Ì—S¹üëEŠË’(å©'B»(D2¾gr<9Uú¿©œÌ¯…m&—ë`¾‚ÊÏkQFYìóP.2T–êaIb,̨w Œ¡ ¿\ù!žÔ.&kFry[0O•€ÊuÜ.Èà9å±£„¿íNæœëbZ' SžxƒÊxÊr7•Áv+ÁöËI*•Ž#g}=£ós.JTÃÆŠQþ¿äA*‹_.„ò@õ*`r9ÃrÁA€BPSYFÀ“%ÔAß­ `«b·7eû/XFz9”1à_#‰ÅÃÔ ¦R¯î‹iìaåò+FLV}îmª—#ù×M^ì¹|}7iÑHåÔË…«iEÈ [v4K”Odm `Ùß3E"…©>Íw¨œþ òn%:5P”õÏ÷)“Àë\£¼Ë¡#qü¡"k6Ò4O´ð¬X‡Dà1UŒbƒÊ…ç^§¥—Ë GJ‘ 8–ˆAWsh••$Dy°@™HOui±åzÊu9”s"B$©U\×(øjŽ#‡Š ÙŸ”³1Ë(uG=þ±*/Pn¡fEN£Ü€r¿å¾Ê9à_{zÂ×›ii.}dê1˰@9˜˜Uu¬õ†dr_ÎäÂ@“¦´É’œÐn‚8Ñ¥e;j¥rPp¨LuiµCås½À¸\ "”Üù AY¿1h¾Ë5``wS³e¯ã@ˆ29eª&_½-±bôÿTûk¯SðåPîì02OÅ2gÄ¥'âŒZ Þ¹Z§ÚäfìS]Zo@ü ”Ë•à !Lª•µliJ~àyjTl¢Ÿ“¾@L5i2€þõ!£¢âÄÚ­3U5ËX)Ú@2ÞC2îF²ð€wÝFªÚ²^PÑh`¾1 ÃZ–OIAŽ©5YaÝÐÁƒD\.9RÄ0Ëu$Nºæ´"vdË‚%°ð”]$¼ƒdÑuà—ë ì"! ¬÷ݓԿàÉåLFÖÒB¹”Œl©8Å‚W«|rÕ¬ÔÇŠ6˜,ýÜÛTq¹œëR‚„æâ\‡0ÜœØ7ÇwÚ>~-Øa²>Èd½œÉ˜¿fò^¦…‹sðMPjíŸKª­=–7+‚%ä{Dè»… ñ!B^f½ïH·Ô—ª¢å+)Ω‡‘øÿ?Œ ÏÉÀôräÀÈÉY|™î «#¹Ë*–½H1ššyÌ»é ˜¿÷0²Ë;eÅÀ†¬×ÏëîBV“#ŸÑB ß™Kê1÷ZuG }öº’¸šM¿WA\5¦Ê‘nPÙߣ²_NeÍÀY¥jK[>¥•¹ä‰uý¢ÐPÿœ(jѨ±bÔ:xÊ~9•mÀ¿V#K–ÍÀNN9â_ØÌ>#—žÅ1Õ¦Ù•½ßSBàr% 8Øš”•Ë „:C~a]q9–-G"g£#b‰LÈ*åÜZ—b”2W‹rÊõÞvãr Ø×RÔÖkl…Á2NX§]®“«UjªIË&÷ƒLn¿\ ت”eŒe__3¤z^ B^±(ÁŠs!RØQBþqÏ(TµÜ?·»ªmªÕ–û9, _Žåò©Ç µJ_þ­™;€å$ MÖ#EEhÓ+Fùß:~ÊÂ~¹z$ä‘-M«?DÝëD9GˆÖ'õ7Jµ¦ú´Þ ²p>¨„¾[ ­#!fºôSHq·óž‘àr,·xFMá [O±gìÄmkÖ’häÒ‚±j´eèsÏSøå:˜ð¯,LêÇ¿5(½Ò{Þ;mrN”~NÚª°OQÞ¡2¤2²¤<Y±¯×FÝÌAȹTW*)egNå<*û†ý2ƒD þ™òP«œ«FT–÷¨,~y-p°+H"?J•ð<ñE³M2ã“lå¬6U‹€ <Èd¹œÉˆÉ&éì\¡ ?±¥)T&O9·`Ê3Rì@YñžT/WÂÄG¦lU]ê¶txç/xFz9•1à`+“…X,QnybU¶‹Ük‹ÐLèvŸªF²å÷‚½D/§² ø×„T•uI“9\Ox§Rù¼sË‘%èŽ<÷¿±ùnûc¤k²%·×P Å«$Ôì^S]šžPÙ¤²ár%ä€g””œËô¯&,jžAÁmûyq×Ê©FMûD þçM#'a¶9ðt›3p€e{Ëv9–1``#¨Ä:—…Ö Ó/VeAìé{¹¨ÉT1:ˆöRÊŽË…0"âLÝõ3h0Œ"E¥çÝÓ o‡ê®FfÈTŸ†*»?¨„¼[ &#ZÇ‚aŠ_pür,Û€‡LÒ-±ô’=ea!b1@ž)c¦‘P9ä¹×iàr Ä`éQÖË|´ æ¡FZíØu ȱlØ ”ãA(ÇåPvèÓ„dUB€ í_$Â'Ebß‘sMÕ©>Íq¢„þëëiE0uíåyÖ$ÎiSåȰœïa9/DzçÀzšÑ²œ&Ôm"óPnjQ3_T*K±RÔ*xÉy9“cæŠcz.cðFQ¡óL.ª6Å2ê te›êÒâ„ÉÙï)¡är% ĈDBrrI©ù˨.‡r Ø ’Ü¢\˜Øûƒ¥œêǺ*+„v‘±jt€åòç§u9•s"Û¨¹¬–;ÆRŸ¬ä˜1¯q›äìáS=Zž@¹„rËåBð}%ãXs‡¤U柧ٔ\¥¶çÁ³÷ØœQæúϧ`!»dù¤É¹4ÇÊÑ•û=*÷åT.I4j­Åà´bÎOzåTå¶”£­©bT8ÐÁ{TËåBð™D#ç¬åJ‹ ¬>ÉNˆ(Ä§™Fu@e0T‚_®„™lSë^ìSu«þ…lðåXnÙNSbI=uT†4X,ݶ]ÊéÐÖ©jÔÿŽeðs›¹\>P‹š0_;Ú µœï•A“uD•+™jÓú„Êò •Å/WÂDv ?íSa£ŒŠþäJ‹q©oƒFfÕS1"Ær¢„ü뮑º7û–8ÉV=µ,k|€eyËz7–,ì.s¬SY(þä!eëÀ]àSmšõ‰ü¯[FN¬Á¡›u˜ÍÀT5ò*Ç{TŽË©ìîµ%¥Šùbp²—”~‚íÅµÍæå•û=*÷åTÎ ÿÚÈÄÕ*wd–Ì#%—Böö4óô±bÔ:xÊ}9•k B$’ª¤r[w7ýâpš!Y±õŠVj>Õ¦Õ •Œö2–Ë•àsFBY¶„ˆ:¾·ŒŒ/‡r Ø)$(÷Ÿ63Sh‡ÍCÙÉÒ#ÖÁ)Û-ÇjÑ¿CÙø¹´MãË™Üöu0¹scY³l`žÉÂNÞ"ëÃÀ¨1¶˜ÖL6~É"—+a"ÔÛ5vSż„©`ZÛ|«ÖØ:HçþØ~˜sÏ”gëX9:À²¼‡e¹ËÎG‹L´Ö€P™)ÈíÄx{÷”eäŒ<e•ËuàÛ Emé[nB4¾8ë+T%Ö±¼ œÊD§RgO ¬xP ~¹z QYxç’fÑ4ûÓH/§²œØ`'­Œ­Eˆ`®oZ í>†'B¦ª‘`Yû¹×)är Ø× {ér¢EÚ¾ˆpqò²”ÜöD2¶ âre<eøåBè‘u+ ] Ì\Ý>®„L‚¨Ûò(ªRw1Z[ÄT—æ'PNyO ‰Ë•#F­îËY_!„Çol§ååTöðŒ@œXŸñÝ!˜÷¯™\à½Uî sŒâʙϽMór&*QQ"øG%ê$)ã“Ý4ÎæÜF<4Ñ1գŠ“ëA&.WÂ@„ˆ6•Zæ’oàe°ˆP+Ô!ÔÞbSmZô‰þzv€LškÁ² y·Øy€åzËu9–#–QªD-ç¢Vbóã¿A\î¾è ›¤-ÆŠÑA®—õƒTn\.„ðŒŒØ5—ÏïÂýÅwP›—n—Š8ÄÆÆŒòÊí !ïBMd`;yhÔò¾’;û,£¾œÊ5``»R°ü(FidY]Ì<6U÷ å$÷ªœ*FõïPv~.lÓ—Ë`À½¶"A,‘˜Ì/¼S¡Lh.R,êðû¬_Lv~ÉΗ3¹eÀ2Jri`µ8‹ë“×i¶sl“øVn˜êÒ'JèVÓÚ¸7[TyÌÀî(Ë{P–Ë¡Ü Ø V‰µSÖ`0>Y7í5ø7•2Íj¬õ„²Ü åà™‘@–Ôa˜·NÝɸV )ÂlêjZ𠓥߂ÊåBH)!‘Z#&fpÏ¿N fûȇLµiÁùï@P<÷0R¿\Ó×A!«q ¤z~áVXyû®×ЩœÇ9ÐA>ȃ¾[‚‡‘R)w-CÒ’•ó8%°|i” (™z‰<Œ ï ¸\þu:¡ÝtÝ3άï?¥9.§²ôLÌcK¬ÃvÖ_;vVà‹ x)Žì-E¦•³§€€ƒïúþàËÈqy1š¸¢ rUÆÒÑfuýGÞ¹äVƒ@tGˆÁþ7ÖãØ³67’ãDz)Ž© …Ñ#$yç"„&œ:M;yE<¨Ü­w«/9:bÞª¿àÛE_þ ŒÀ·Ä­—«ÊÙÝy,3™Ûxt,ö7ý€ÊùÞ´]Úå2˜ paVÓÅ¿6‡ŠÏÛN¥á±Ê€IPeS²Ÿ@9„r^嘇Puüì• †WB9q‹±l¹·š6gÜ…(á¯ÏÀƒÉE$Ö£iL f*Gq€e¼‡e\ŽåÀy1Цlk_ަ…UI}ò:U®ð­aÏr®±bÔ:xʸœÊ)›ÊBƹäüû4 ·nÃ^ZY1Õ§å •Ñï)¡är%ÄHÀ]1‹¯&gÊ~Á4ªË±œ¶* Ò×SûZlä4YogIÙ‘:VŒ¨\ñÜë´.‡2üëib=JÔð/V4+Ùk½mM©. 'P®¡Ü—Cg4³ÉÞ?¡¬”úE¼@êmû¸”ÊTŸ(¡íÏ'yo-‚QzçX1:€r¿å¾Ê5à_»‘çf#ã éÆ+”Ðe¾oCtGN•¢²¼Çäd¹\1pÑ7¨ÙD—ë,`UÁ¼DÈÃz»¥Êa5–›PHN¶…— aâˆf‘Û²XBΖò ëÉ—S¹üëCz‰ qhÌ7NZ©ûMï[Vîÿ§rr¿ö:M‘Ëu0‘á¢ÄÉÞËgÇHaà“ó,pÚ†a%>Õ¥õ •åA*K\®„™#šª¬²|wÔ°¬˜W‚0E®nE±õؘXN„€¿î‰Ø–µ öT5PYÞ£²ÞMepŒ6óÍß4öübÌèE©…®±b„ÿ×>eË…0°£ ¥wYÌS–vÖ/n¦94Û·^Sö!'PV<(„¾[2䂤cM[0~Ã2²Ë¡,þµ©Iá‡m—d¢ìÔ¢ 0 Ïm/(9»ÆŠÑ”Íž{œZ\®ƒsûÚ8 ¬Ûmñæ¶l °osŒÐ„ž@Ù„²]eˆqêHÑ%¯ÝÔ òɧ}ñ®UŽNÚ1Õ¦i(Áå¯gJ ¥gl-Kd•£,û{Xö˱¬þu$U|u™9«?xž*Yq%–ŠRµ©bdr ƒ©ì—SÙlÀ3JR-ز³áiíøBR­‚íi¨ŽõivBå÷”v¹0ðq?È"º×ûr–Æö ®Q\Že›p°‹B\céÄ„íƒA£"G÷vÌÔ©ÁžSÕȰxîy—SÙg’ÈÃå´Ë…0!RLÆœ¹f|; â0ŽX¨Ô6“©>ÍûD =ˆFQ¢¼öM]<¯†8 r¾G弜Ê1à`gW9–0@ƒ'ô›)fÛëÔ>VŒr½Rv¹0ðq_(¹ª·å4S–O.í]¨ìT›4Š*#TîVBÊ€iÔÄfñ LXÆ/˜F¸Ë9aaej.½r0Ï{F2OÔÒ+k 1æå•Kž{–].ƒ™;šÅ*?=£$³B~rQÖ`l!Øåìcë yåzÊu9”q"b”âº|Éiòªü n³I£}ó+”: ˜êÓ`'Jøë!ØÅ$šàýÈv"c¬áËý–ûr,cÀÁ6¥pKYþ[Yà^Ÿdÿ ;¯ájL†+F} ƒ©Ü—S¹dä‚`V®[9NŸ,iehõ*!Öæ˜êÒê„É&{år „ˆ´“YÖ‰;ÀÐß[FàË¡\¶æKGájøâLNj7çv€‹EǪÑÿCü\Ü&ør&÷€}íIÁ™ë GÕ”ž§²pk¢·kN5i}@eðƒT¹\ !"HJ…c]£ì“h¯—^ˆ á[i(Aþzv$§a1îÔÈL9ÆÊÑ–å=,ËÝX.–UY¦jý±“%+ÑùשP²åÂdP¹õ”aTl"xÉ*—«` B$š´ º8§)Þó–‘{¶®Rl é±)£â$«=¨„¸\ ØÚ$ÒÚKÔG©¶þ†e¤—3YìkUcËþU.–˜¯FBÒmª[Ú¦eA¦ª‘`Yû¹·©Éå:˜°¯A@-#•©_¬¦Â曇Þ&C=ZÉ •íA*[\®„èҒС¶.+ ¤æ¬¾MÁ«T÷T£¦r¢üu˨ˆ¥µ-¶eèT9Ò,Û{Xö˱¬1³›Ö‘¾Ìª§ŠÑ,+UK³mÓ¿­î5VŒðÿ:pûû{²&R–Ûá0ó+섆JáòP©²‰ø %m¯\ ìJxÅ/øq9lÀ=m#õ¨}„R#:¾8o­€6 ×¥«Ñž{E\®ƒïEý™ ’NðÔAäÝa¶®‰ £mªAð*ǃTŽË©ìñLb±žF—bžNRêÍ4Éð©Áã@ ùט;(YÝÖ;ï N—+GXÎ÷°œ—cÙ'ÌS¹cùoáª_Üy Å>wÚ‘iS¥(ä@29/grØ@—V•Œå˾@Yô‹ÀS+Vïí‰ )ñ©.-N˜ yO °Ë•€‘—Pÿ¹’ÓF‰„þ‚e„Ë™=PŒ˜šÍj‹õRõš/F iNŽÅ2b²‚ޏä•çÞ¦¸Ê9`_;(ò, %/μƒšÁ¾Ýš—Pû¦œ'P®¡\v¹0¤cÔòÊÙ¤žßì*¤lS‚*‹NõiÙ'JøëñËÂN](Ù~„6Óž*G8Àr½‡åº˰‘­¨ˆ–Ÿç­ƒ ’_ÄzÁ£2¶?”SÅè Q ý •ûr*‹QEÅÖ´ŸïÓŒZk}$ KŽ}ÚÇ •;TîVB äW˜Sr‡¬f¿”ªý‚kÔ—c¹,lq¤`1šKÍü‹O9E©±4*Ls°ëÿ©\ü\Îc±].ƒ‰óL&‚Õ4bͨúâKŽ–²Ê–]ÑÍ=fÕ”‹ßƒrñåPîôŠ`JIÔ:g$&¦_lʦ™#7¿"!:`Ñv¢„þ릑yêê&µeÁW@YÞƒ²\å_v¦òîXVŠ5²E¿¸ ’Ò[)J¥b+D} ‚‰,w¹y"zY©ëç÷0Éú"|Ùk_tIó”aÔ|Bdé÷” r¹bÀ0*rêò‚lNý{]¥vùo€‘j”a¾¦i‰”Ì'ˆ45Ô,÷&E6V°¬ñÜãT/§²L„/ utézë²-ä“ÄYNÛŽ†5ÇXrEË ”õA(›\.„ì KòÇz\³Õ¿XL+Ñèe'ª…<•£Ó‚!Ø_Ï®H§Š`ï-c¯ ]cÕèÊö”ír(« Ô"#×´µµei1[!Ö¡«cTÔ•áSÅHí@BÙår! ä‡H“Fh®CFÎåÑt ·í^ˆÃ4¦š4=²ÛƒBˆË…p bÌ…ÐåßÕÁ^ú –‘_Ne0°3H‹ÍÌÂÖòÅw oÆöGÔʧª‘PÙû¹×iÈå:ˆ‘`5É€/µH\mÞ3&·–Xt¤ÊS]šP9¤rÄåJè‘!#æ²^ž§%*ÄÛ!ÉE­|Q(ÚǾí·Ë‰ž_vOl×þ[„1UŽüËñ–ór,û€íMa¦?[P˜t¾5¢Â·D¥ŽÁZ„ÿ—A>åŒËu0 R¯´õ‚‡»ã:(WVʾ'Æ5զŠ”*¡ïVB Dˆ$#Ëÿ«Ifõ/˜F¸œÊ1à`W“T{­ƒêŒûÂÁîßò¯CÁ>V‹  {îmЏ\ù×Ñ!ÿÊ»ºÞ6®$û¾¿‚ȼŒ€vMú®ÅÌï^`ÿ‚Çq²2‰a;ƒÿúå½M™"›’­•’X1iCìÃûÕU§¾ú¶Zð³ ²©õkü•¢‚ĹTP0¤«F‹‡Ääü cr>ñ˜óükÕ–8Ú Â”¸Ä™%(¹•øc•iá°„Âÿ’Q‰HŸ)I¦Õñhîèa¹¾¾°\þÄQ?ÜiRµŠŸ:#¦ò6ü°¬c}vþ0~J‹®ÇrF‰ØÁW•ë‰GåÔ‡WiÔÒÕgÛ-–ÈÇÊEÍöKwýq?V–‰Ê¯ÏZŸ¸%ä#lî7µµmÊ)ôoq›Qû×@?ÎmF’~¾©,œ¡ö«<ø×].”)Évýº”;¿ºä´ŸxL.}¸'Ò Uæ:±ƒ"ä¯ñÔß2bK­³ÍAUåúX5Z= $7}!¹YŸ¸!äë4w*tœÅîæ®Ç7„"vlŸAÒê¶±_ýCð'gýË÷óÇ›—ïÿ÷?.6ÖþÓwóõÔ8¿WìïLhhn)&-˜ížï ä`±#fLâKT›YŽˆK™a÷â&–È*c{Îvv2º'WÙq d?V+•éMìù®*µìˆµSÚ\•¤BÇqÏNBÊi’£—SIyŒf"=ÆiK>žóÉl+òb+˜»½´’z¢,>Îû”FiOÀBTï¬H+¢@H´jñ#´/”Xq> ;× ,tÎ`7fݬd ·YóóÓÎ!iv2['Ž 9B/ŽK>‚ÏOOm‚§˜3\’Þ‡ÉÅÕË 3Si¹¶¾q|ö­òmä•l‡ž±wo’0Loò´TLû&w•XP…îÎv†cƒ,­²?.áˆÉ{o²÷¶“ÏãP(0é| o&¶Ò7®éëQuÆ_îÖãŒGèÅV:[ Ç–ÂÞÞ~Ja!WêÙMO)<¡ …¸¡ðÄŽ,<κYÉ…cKáVœQX]O)<¡ …¸¡ðÏ)景~üáͳ7/‡„'‹Æñÿì¥Ø|6»ƒwS×)ö'ž¯S–ý®›kÞµZËúYŠWÛT¼˜7׬¶W}pòœ œ>-æô ˆ³ÅëF-r¹~ãêâzî^ù¿·'~I2[ém…¬=ÐO9¶áÑ^þøÑ±À·8¶‹Ž°¹z<¼£4%s‘(ø‰n¶ðÔN+7÷‰’”ªÓbËb¥HoáÊŒÔY¤.ªÎóÿ§:»§êâLuLª¨ õ/O‡`\+Û»#7“¢¢/hÝ'€+Ï×—Ç "§qÜü,‚ ¹x•Å1‚“c7Pd0ö»*—>©\Ð4Óubf‹Q IQ^µÁ^;ÄÒ”ìi=>CH!£>^›#Q£óhÙ’¬=2»,EÞ&èðœíp‚hЍL]’º^¾‘ñ'uµñ>e4SI‹ú]ÔþÍlÄ•ÙÝuϼýðÚðóÖöçe9×)}1iã“+U•»…‚ui²Vé‰6yµÙ5ªƒ£) 5!í•Y E^šç\·ysåÚ:óyøö—_ÿçë¾ÞŸò··«oþu®Ö¿ÿòþýF«S‘Ÿã€•3¯nÍ·Ÿ´ÚkötÌðµ7ŠO)ØL™¬‹Ic÷|€QPóÅ’¼½Êwm”µX»îº‰öXTbV9ü+©uÔâN"{ÌHDXE=%Xf;sU_‚É´2{ µ+ïQ³fÇÄÌ%m`ÅY{ Ô>Ì,„ ¢¡cáIÖìˆÅ‹¸P!»Vb©ÐÅX¡]yDj/ÖÔÅû¾ÕCl5@CxæÀûjz7}Þ‡‹O$Þ+ꪮÔšuLïdÞÒ5ÑLö†#ê•>1‡.Óyá+óXd€[Ù]¤£ô}èx9‡ÂÏ4gäŒn_å”ÖëYºšˆ­Ù+dž¥±ˆLLÊm›ÐΰÒöf_ÜȽÀ±G+Éf¶8ˆ3Âí#AµRAÊõš éµô˜Xy¶¬X„És”ÇŠ•V‚˜†ÇŠfFæÄB˜1 ’ZîÛ¿_>O6º~þMQiÜj±0EÂ3eyÆá!Ëø:TkÞfwuó6™gbf§l¨›´¸}ûëÆFâ"ÑÛßá*âTöÞÖ”}]Ýãn|YuÎe½h¹µÅІk´.Ï@©æ=ê} ¡Jc©µ~ã<Ûø*!¤”Æ’d!’16²,ÉÚѹ0uÂ)‡¬g*¤{}ní·î}û^Þüºžå–ͯëñoÙüR£È Ýn~y‡~>ŸŒfûòeíu•õöº~~óú§¿}óþí/¯·c¼þi/ß qd¸o¿÷þåÛ½à;fÿü+j&OV+>ª >ÁáûZÀ´ŸU©¨Üf~&ÊÖgûà ®<±øc-»­¿¶×í­ºò›;½Ê*{x3pI.L<Ãàã#Ì%Ù—êËL”,›íž×‘/dU±Í‡RÀ³oêRµ5%) pOTØQ;cGÄÀÖ…ØiQ«â°_Õl÷ fú!JݵG/ÌtŸ ÄîyЗ~ùøÃ»wﶆ ºÝ,‹ Yfi˜ëf5“Yg,®xª®›Õ ±¹¹Óæ˜+¤Å^³¯PX«0"±n © lÖŸ3‡p¬›ì\2·uÚI«ÖåHkCw-$¬'æÁØ5¨34u@œóÑ”o,ÖT5‹Ûf‚kz/V„6ÍÑÌÛ: ñ¨Äè¬æCCÓ]¯y{ëPZ’å’ÀîE³¸ú‚·¿//¹®þUu+…+Ãã¼¥ý°3QÙ’XܨÀ]uØÅ¤ôºãkQ×W¡n¹x’uV϶ã^¨8ÍïU+³VXÕZ+¨‰ê¬JÌôB­à¤aé§÷Ô³Qpc{O=(¹8·>IÊv‘í-õ*쟟EøÃr»/­ªûôùÊ=ßmMØç¤pR+óÒ 9øáìæÃÁÿ\üùúýêãúà«77ß¼ùá‡àìÞ—Wß¾ùúàèh³çõ_¾ýÙÁÁÁ¦Ú‹ëãÍÆÛÃÙ?ÈmQFÄ7›ßÿVr¿RÇ?žoª|¬,UÕ›Û_g¥?7o¾Ã²Í«ïÖ×Wï××o>Û§ý€M† '76›œ·›Ögß~¸ÙnŸ¼=Ü´”µÙúåÉúôz²ÞÙ§-»ýaóÓ¦…ëÕÕo®V'gë‹›Éö¹ØòN’»£Ýîv}sùqú¾->Y¦Bz¸µ_ß|:_ßýtôþòüòêøçxû÷‹[ÓåæDÏn>Ól—ËÓÓëõæD6nñfÚü¯ ©þVÛ/ß,Ïû† #vÄQO7^õº0é>0½"G¡I7ŽŠJÙ STÚëÁ•Ѧئ°×ëtQûÔöº0É>0É«Â$Ý`¢²]0M…âÕ`šj«gÀ‰·ô…ñJÙ¯]$Å8}^ ¯Œ¼6„p™>ö%ñŽî%ñj”.ՌхiŒhF¹š>/„íÀè½OŸWŒ¡„ÄwbD’¯ÆRBŠÍ¸\0s'FXøzaq;ŒDvc$öŠItÃ(pw_ Ì×ãì ìÆÙ±#‹z=Œ,©Fê»ùHãùH£©únŒ4_#£nÑní'y=ŒåWRR>Z+Ø>1Y;=݃w¦•Oðýú¤^HOw †ÖïOétŸÊ€m¯ú^*X€ýª£]¡ù‰­å5Cs¡Ý. ôŠR(ÜN )t7……ïƯyÅ|Œ(wH¡¾×ÒÕ>n+¢&¾×ÀRŸ®Õþhe{Õêšá¹Ï¹Æýô?zùê‹õ™éíáQ„²û¶)Ÿ6f* ¨œqÈüxᙲ ”éð©\‚mùvž÷øÃÕúôíáÏqÈÏå¾½7þáâìf3Ãüýõúêÿ¦ÉÞÿ½øÃõú'¥~µº¸>½¼úîíáw«›«³¿b0«Šô›ƒ%! ¡Ö,Gš nñõÂÓ³ó›õÕü\î,¢zß¶Ù 2ƒ• æ ‘ NQn¨rožÍ@)•‘lѸ-æ2›9]ÿfõýõõÙêâ?Ï¿¿ZúÏò7Q]vÑ“ÿZÿålus;ÎPéY ÿصXe}㈡R‰¦-‚4/)GJŽi2ŽR!ÍxÒ ´guiÂø»]úVe¬,è9}z§¸B"%ûÂ\ ’„já ¨„¨3Wxì§ó<å D±ŸN½˜+TŠÛ­N` »äúˆÇQ:¹ëp¬Tñé¢ïA‹ËìùÇm©ÍߦØoˆ@ÂÆy€'±|s LfLssÞmå݆‚HØÁ»»-3Ÿv¿Ût0±’å±Ò3ì¾Ò¹åÝÆæà¼0~³1X¤.ÌÄ8¯çõ¿› ³æ}3mÏÚ¾=æìì¶µoMïÁæ¯(üãÄñ÷)œî¸ûû«ó¯:S}ý8ŸoùuFæöZ,N€QU¹—ïŽíŠÒ—±]C¹ù,¶[^Æv(ÂOwT{uZ¡xÍàÎÐPåqšžßj‰ñ ˆcö,ýi‡¤œTƒ8 R,O;|D $èYJ !O(ˆ°Õs”`gÀKñ¼p”ꉑš¦?§Å;}Þ Š„½.TË¡L £š.¼ýÈR£žrwµýÂUÿçÝýfúz¾ºYeU~+K$ŠÁ5¹öNLÐY`Âì¤3`- _í _¾¼¶äñ©+JN ¡¦Ù^9\Æçåp™Ÿè ÈVNö¼¸¾Ñ5%öå5Íû‹ZËkº;;&TÆ¡‹ ADœ*–Ù1bp¶eÈ€Qùä´'éž‘§¼hª€Ø!îåÛÅÏóíÒ'}[(þԔ#U=[O ¬ $ ʘ5¥£"ÐÐfV2p¾-)`®´´)TŠÔÁ»¹5ÈÝcc͸³ÚãÖÙ¾ÙZgu¥ƒ¦ÏÛ”è4·½{ôœÏŠã#·™LÙîÏ“•ËÔ7q ¥e‹¸Ù‹d¿}Ù¯‰Ðtk[ÊAÈ\åÉd7Ó^]šÉ^˜îPLrà¤ÿBœ‘ºGB‚ÒÂëaB‹3Õé‘ÌëTþá= Ä2+¿¤~fr›CžHHÌ*|ùLq>ô…kÈÒ5RŸô‰ÜÓ'bOŸØOÀP Ó—ƒ^`LÃ| _™@Å‹Qï¼ðÓ–íól ¾\Ћ@Ф·®¿Ý:bt@M¡Q n˜Xûé='Wˆ,ð2‡2ôàx¹£Ì„g…ŸÆ«¨^Änn# Ò +öÅ+ÀÌ(—x1 »a-ñbV@'Ô^³Â;ð’Nx)ƒ›sŒp ¡@úúùÝ1ÐPYvwÇYá'áRÜ×½Ê^ýÄDi„hªË?ÓÃ!Š-cwwœÞ—4‹2¡²(F ˆ»ÿ3Ý1 SYwwÇYáxY'ÿ’‚J®®`%,Ýð*ŽNþåèA:ÒA…SèëVÑDqµRÇ€”"¦PT\Ú,š(iMpA¦(gHDiM”´Š&Ì!ÈYF›qõŠ&JZ±=1¤Å0&RoL”´"û 0a¥Q‰^ÝÄQª“{!«‰Ž$@Móh&ŽÚ‰ì)Åi˜G J7qTé„W8§Ž @ê¦jàªÑ4NDYÝ´Q£•6"¸³Û0M)Òn⨭È^¬¦¯V`„”ÙM:¥ î¬Ã(DQ›‰£I+qTÈp®a "îÝÄѬU^ÕÁ±†©f;u´è„—(„hùpE$ôfêh­Ø^ÄÈi„€QX7uô^l_e¥Ã,Óµ›8º´9*HêH…$-é&ŽÞ*´O‚"PJäÖM½Ù³£j # ð°nÚèÕ .@7ÖáèêÔmä­æhYÁX¬F1¤yU»´jH+¼ T e”‚;[I7q k…WAZX W¨ o&ŽÑŠì‘ ¬„†°‘uÇè5Gëàf%#Ä‹»©cR'¼ÄÀ9Їh I4SÇlÅöTP’¬Ã„Y¼º©c¶b{50aÏa,ÆÒN3šÝ!Ç„î#4ĸ™8fµ"/+ªaêaìÝ´±Zq½ ™ë…LÏnÚX½²öâÃÌ*=›IcY«$¡Y '@”ì&­¤Q@ˆ1†;xu“ƪNþ„Š2< ={eU‘šeUEÔsƒjX6ÇDlEö¥ÀŽÄ#ŠØ½—6&¢µ ½Ñ|$jöʪ&b+²7d’á ÆhÕlؘˆ­¸>ÄSl˜«&r/mL¤^´˜A9, ØÍ¤™6’´šAˆ"Ò .LLçnÚHÖJPŠrh‚¥je7q¤h…ƒSÊp@4±fÚHÕŠ¼JÂb”†cr7qäV3´h€l#,T˜º‰#K+¼˜Äuh‚R"F3qä^÷^"&ËHvê¦Ük‚VŒÍF1D0¥tÓF®Vy 7òQ •%ÑL¥UdŸJj>"¼]R5QZq½x8æH…tòl7pk…{V c@Ž’nÚ(Ñì^B5çé`ʼnÒM¥:áÅ ˆ)> AÈ-µ›86{ˆ– ËÔoc/ÔÈn#G•VâH`®iC 0<<º©£öb{¯)™.ÖM5Záe h#J¼’š©£v[§$‘G D$E»)G£Vê˜@…ž# ;Î9š4[€$*ïƒU¥nsŽfÍò„j%1R¸œÚåU­Ûk9« MpS¥vcÇfOѸ×p*qõfêèÔJ *‰mD%™e7uti–‡ö*ñAH Vý«nÍÔ‘±F bh7uô^Ë¡)„çmìU¢Äí«^Ýà÷Zá,íÄ1zMÒiñȬrì6tŒ^«¡1(†Ó0ƒÃê¦Ñ‹ë¬Ø|„q©E7mŒ^ëã*çWgòfÚÕìQ ¢‘Ae¬Ý´1©ÙݪÊ5B3Y«›6f»r¢Ü†d¥"7ÓÆ´ViÂ.g% ˆJí&³Ù#p ù!'Ìnâ˜Õ*˜0`Œˆ¡ æBÆÍıZEö¦ e\#,˜Mº©cµb{"H"×alý&«WÚ>!KÕ‡ ¤#Š5SÇŠfC¡Ìb¥PHTÚM«×rh ¢Ê:áåTAÜL ©^˜’wCÇ`6í¥Ž„½Øž¡L|˜GP3q¤vo¬rMæa–*žÍÄ‘0Ze&Dj˜¦ e/q$¬fâÈQ#’Ä”š‰#Q+²gä4®P†aÒMIš½/48"†˜„e5G²Nì†l>ÒÔ²›:R¯U„ÌlhAfhH7u¤j…Ws‘R@!co¦ŽÜk‰ !€ˆÚM¹Û+«Ìe8†Q7ulö$m¥[ '@¬’fâÈÑM•â­pŨnâÈÕ,¯ªìe#Â,ª›6J¯uíB”e‚ ÑU©™6Št[G[ÅiXBa²D7m”V\o å.:Ì ì›6J´ÒÆCuÅ€NÕ.­*Ýn¿Tañan‰ªÝÄQ[±½(˜jÆÈ‚DQï&Ž*­ÄÑÁ…°F)°c·´ªZ³5_¤‚x„@¹Q´8j4[,ÔÕÍG°:a;qÔj·­K K0 \, ýþüìãïV7æçóÙÆ†n‡SÁÛ¢·Å6›r¿=8âgµáˆßLf“Š­u²hÆ]Ñ22\ˆs*ùnn&4( £[³ `?nâ›­uQ› gÙ¢]ÂÀè<³½{üÄþz0qJ / ûâ.€”sëÔgÐ*²™y2Þ7¬ ÜÔæ¶@à4œ:³–ƒâtÐ¥µ¸Ìb^QÅ}EÛ6Ílïfí¯˜·4Ü…—ˆüiM‘Ë6Ý4—í¿?h.ÎÔ·õÌyÒ¿N?sÉ÷î3ûõͧóõÛÃËM/9»ùtL¿8=;??þþêü«mÚ±¾¾ýùh[úúæêòÏëã‹Ë‹õý÷£ÎNn>#ÐgÃtœ÷«ÇW—ß_œÌº<»XZ¿;»Y_ŸmþëgÛÉêúÃêêjõiQËd½<=½^oJÙ½yÛ²mç|ó¹'î$7ã©-éßx´âüŶçÃBÂôÑÄÍôõ|u³þêHèÞ_ŽHÁµÙÛâØš=Ä’L4Ê-¨Ó°g‚«×/"5¶Ýj2¤ÎŒ0v]=œIªÉXZ9KmƒÛ{׿ޯªÉØ!{FïÛÇ4Gd¬šŒ­µÖŸ¹“|Ã`‹b4¶Z%Άg½ƒõÄéÙØ ÍËëwaê ˜ŽbÝ@ ùm<ºM 7Äp Õ ÃMÞÃê’TÃqJì±Ñç<ÞÂâz£ÕpÔJÕ‹²»»zÓ¶I4ÄpˆMËÆu×m²"W ÇÑ*Å)óCð[ÄD®Žj‰ì7n9Å1µBõ<-§#ߦ-wºÕt\­ù¼i=“õ@kßÜRÓQ+U´vþt ¯ 1µRõ›ñú-öÃÒ«ÅÖÞ¾ ð]Zy­^*Ô†xåóØæçG11jßý8vå[r4bÇOF¾.ëëÆ©Ñª´^ku,ŽR·ªcl¾£yôœœ'Uw‰µéÀCÚúqRF±P½5Oô>жƒ•b6ÄÚÃÛç…99O«§Ì£3ßžÝÆöªá(ªçV•oÛÆo:Äp¤Ú m€xsÆa'ÔläˆÍÓóõÚÇ3ov¬Ž„Ž4oߺe{Ëõ7Rív·öÞ¤e (fcºÖΞvQe 0(fczIÙx–(ô»3¢NËÆ‹Ô˯‡³Í=R Çtˆ]ÈylKîúˆá˜Nµ@кÈ74¿(-S,Ræ=¬‡°ðÚ”Ó1JìI¨Šï¾ /5C+.»Œ¾ØÇ°º1j=އØÿOhYj:†ÚhbïÒîŽÛj:¦Ôrg[7õúl˜…Ó1KìE;p>ïÒ¼r"ÔtL­Zû¶êc<ŒÅÍF¨é(ªwV¸¸7gà@LǤZ+°óf 5©¦c…Xã^;ñ6íª£†£V¨^µÕ¬ãÖ~=#†£X- Ýx{†ÃÔl,­ÚË1ön¼ËâÔl,ŠÙ@áÍØÇOÌÆ±­×ùE?´]’C5[« §,k6Þ¤MUeªáØ#6 ýü¶aìÌ\1jLÁ·c[µj:¶V\v[¬ï½;tŸœŽb»‰äîÃYxùQ G­.ÚpËœz[Æö™U³q´F¡eßæ›6çzPÍÆØPÕéÛù-ö¹s³q¨f#¯Ï&§³Ôh\­}¦*Þ„åuÕhÜ›'5ÛiƒÈR³Q«‡6aNì=”e¼Ôp\ˆ•Â'æ…§aª[ Ç¥Ø%t]E¿ð0‡—ޱ4ŸÝx[Æ=½s#J,JˆÎ‡4‚3¥†#´Vû´[¿~(«‰ÃjIU~Ë}8ÛåFªáŠU«öfÜÛ°ó5/”p¤›ÇÌ>¸­ÓÙb8ŠuÑŽ­GáÝX.PÓñ´r Ón.æ,æn¨¦ãA¬/”uõÓÑ™»b8žV9l"ƒkÜ žŽZ!´5¶YÇ7eˆ>†Ž,±“ã…óÿµê Ôlë¢ ‹@?ИÞ<5 ±ƒPE\>¶eVµšŒÔzŸM»\¿Úzå„åZϳmèÞy·vží+Fcy‰½8÷fÌ›)FcùHј–¨àÛ´Ý‚Züi5Ñ–›{ö>Ò@ÌŽŽå›îÕÜ‹·i½Œ1+BJÇ3y óéÓ1´Êqh™qïÎræj8jÅÐÖÙæ_¸[“¾j8Ä2&îõŽ–ã,1C«ç ;àÓ9Skk¿µxKC·ãÔhÌ˽ŒâãÚysÅdÌ;7ޝ÷ãXÎF¨É˜jÉ„>ÆÜ5SnZÂ\ó]Ûìú˜ŒZí³8c„óÍZDF®šŒb!´cÇÙ|hKO¢Õh¬+TºžÇ4¿k1 R£„ܸÍ7ku75‹jy yû0†ÙÑ;4vˆÐ>úl2à³±µÞfÝoÏEPƵ!¡›y¯aq~{j4¶Ö`ã|Þ'UyÅhl­ð’ú‹Ð>š£÷VÍÆÑ*»€oiìí\5kÄBÚ·ºÞÂÜÓ;Õp,ˆŽ«Í¬wk3Ó1‹RÕÐm¼f¼)ë¼TñCjõ:ÛªÆ[7´£R ÇÖ*À„5#ò±ìn³N ǵI{Éy½Ö[ÕP³±!V®ZÜ;·óÌ5[-¬*g7Ú"è¾b8ŽVENÛeä¼Yó ¨á8Zõ—´Œí~;ßžQÃqF¬Æ$ûº “á#fã¨=Ñz%ë- ôSÃQ+‡¶Ò"|pcVÍÆ ±€ ïØy 9p5b6еÑÒŠ‘ý°ÔªÙ¨•Cëgôe=Ðæ@?5bÿ+Ó7^ÃHnˆÙ¸”²‘V¼Ë·isÙ5j—ªÀå O‹LO5¡V~ÙȺ‡2fuS GhÈ£ç¾mCOSÎF­Ú€]ÜÞ,/­f#(fcäì¼-«IÃQ«¶Ïªbëæ·ë­†ã•TÁD¶¦Þùnx«áx#ÖÊq¿7méÅ1O«çlº|Þ‚dQMÇ£ÚpUìÅCZ{Å–šŽ”›šuóîÌ—Sj:jµÑ†½ºwg¸aªáÈËh¯äÆ›µô#J GB Ƕ¡ÞÝÖÈ«’b£{‰ <†¡„Ž#–DKklÕ·¨ži1ÇK Çi£3ë--£X5>b3&î:ò-,|sÔt‡XÌD;m,!¦ã8ÅtìÆ½mõFjá8bµ½qù˜vÎ)ªáR[{¬×æ‡c‡_­Ž1J8f˜ç ߎcS Ç€ØïÚíˆwm=µ%‡cP,T¨roÞÐP= 53¤ ˜ÊþéHË {ÄtL­Ìª²ðÌÝ‹ 1Ð…"ÄÏ€÷_¬Ro ¯U¼^x3hÓ™,5S­×þ6|aðB©á˜+ ]DZéÛZ1“RŽaL<„¸·j8VˆrtïÖÛ³ 5«”pÄзi½>Tñ u\n»ñníºü †£Vm•½| ÛØlªéXZ-9ehï}6q1ÓQlŒv혃ë*[MÇÖÚŸŠ·e ®·šŽ ©órÛaÄkÚ2½JLÇ^±ãÊ`¿i«ˆ.9[-´ª1µoÂÖIO5!Õ‘ƒ°&&^—…;²ÄpD©e¢µ!LŒé>5¡ÖmÈwn³éj8bÕb˜Ø•oÃ’;;b8ŠÍÑÒ˜xán9U©fãhu_¶ÕyÜ›²¾j¨Ñ8ZO´´Î‰zt› 5GëÎ>͹3¯Ë5WëÎ~Œ•·ïÚ65µÒh#Ìs{ÞÀ*µj8.ÄÎ뢲ޕE•ψá¸+ö×ëÒ}ߤÕTCÍÆÕªõaEÏ¿áð†šRçE‹êœ‡³X_‡ŽWbÝKq½ýVÍ®VÃñ´«`ééõúìHªáxZ/´0/L>Àb8žZ„Iò"ÒÜ<5©õßÞmñvmâ¢C G–Ømƒaôs¨áHˆ½gcêíY¯o–ŽTÛ}I¯w´Φ¤ØieGã5ì&Rí½q´fh÷ Õ‹×eKpZŒÆË¢-Ûæõá{b4ŽCméxŽ[› ÄiÉ8®õ8›†ËØö&RLÆq­ÆËµ½¾¥±;°b6N„ÔgcØÍu?¸å^Þ‰Ù%6õÂXçëµì»•³1 eã‘3oÇvÐ9j8†ÖÂÛoÏ2šj8†Ö•}ÙÜn=Œ•×j8fÈu—xâmZóB Ç,±àÞÝè|ë6~;j8jMÐæÚäL½ƒ-âH5SkÚXgd=†ÍÆn¨á˜;¯ð‹yWÖNŠéXZKía³ñàÆšêP³±J¬•ðºöíØ¸w§±Ø^t£Þ]8b4jÍÏvÛxU¿nëÊÜU£±(U»Î‚7õv‰ÆªÑØRµaŒyl‹h=[íy–N7i¨¸¡Ž ±'¡õz[¶Û§¦c¯Ø<{ÏÞ®ÅÜñÄtlJéè† ÌZFm¦šŽ±òÓ¸7c¨½'Ghõ^ŽEúðMZ±÷ÔtĦ^›ñèVœ89¡µørÌ»™môŽ¡šŽ*÷åÖ˜Øwa—ÌI1Gk9lz¶Þ†«†ã”Øj¯n&Þ¤u‡W«á8ÛÉÁÃXölŽ£ÕÆDÞCY’¬UÃq(V½Ò±°í䮚«N¸–ŒŒwc¼fœ˜b#´m¾Wñv¹PÃqµíÓª³ùxuŽQÃq¥žhéÖ¬} ó&Äl\Ší‹¾å%çsj4^ˆµ—$ØñØï)ªÙx%–¾4{“gÎñm1R?¯²XÞ¾;CÎú¨ÙxZµvë;ï`¾é¹j6žTµGY÷i‘„¯ŽÔÚ—àæ•ˆ‡´ë½]5Å‚hÝ*÷öŒ9½§¦#µº/Ûê6ùv¬÷ªRLGª¥UíŽßë3–gŸšŽZI´KÛ‹Ú7°Ì® 1×¥Ê}‡-âîíØUÔ”–Žë%u­Z1³´E¦\GκTµÇš·o¿+ó”‹«Z×êÈqkß7aÓµZ:®k=ÑÒæ&ë]ØÔzQLÇ ­jß6œy—V‘é­†ch5ä¸Ý:ù–îäˆá{sŒ¾À;7NߥŽ!Uì×-Q˜‡±Û»U³1´ŠýÏ=ÝÊË©fcjÅ—¤M·óMÚLwªÑ˜%¶9ΗÞgl©fcBÊÆ´í$Þ¶1·KÍÆ\±íÍÎxã6SS³1)¶'4ƒoÛ¶ƒE5K«ÚÃ*:ë ­û:R G±1Ú²ëñ{svöQÓ± öáçηi™ç5kÅÒ—ªÉxC««Tñ(uZ°Š­Ç¶I4ålìP»õÊõ|XëÚ`ªÙØ%e#­{zËöÂWÍF­)ZÒvbñ.¬gA5[.¬êÚû5­36Õdlеª^xæ#-pŠÑˆºS=Câ{p$–j6¢Ä. ±Q³¢ g# 6ȱpÄ»²Ü¸n1±b½Ð{ýŽF`¯Õp„Ú‚œìÛ‡³sO—Ãq¤ª}­ ûÛ:«KŒF­ Z?‹òqlçœT£q´¶ã”µ³ëMZ{¡Fã¬eôy{6@‰Ñ8TKB›ø¶½0§Ôh\µ]hëŒxëVÈŒU³qµÊ=¬=‰GX¡b8.¤>³ÃØóàæ,Ä©á(–B[6›oÓUj8®ZµŸœÞwaÑ婆£Ü mtæ=´ÝøPÍF­ÚvKÂùp¶Ás9O«ÚÓÊÑ|3æ±í'†£ÖíŽU ú]j†£†ãQ,}i{ªÚÐ…S³‘!Ú{ÞÛ0¯é¤˜,±ÜËÚË|p»KßTÑj½8èâ·«Ê{6Ôp¤Ö*4X8ïÞ¹EmÈáHJ—[d²Ûˆ¹õ8ç¡„c¦Ec¾\Uï1ÏKêÃ1­7‚ohI°Åp<‡ŽkáÓ_£j»×‰áx¾bŽŒŠ~ ‹XïÃñœb·Ð^˜×cÃ#RËÆÓšŸŒ=ÙoËj·j6FIÙHÃê±,š·PÃ1 ö_¸‹‡²ˆ —ޱb«ãœ=ñuC5ƒb+Çs<êq­Ž×£fc†Z¨}ø¶íÞ-†£Øí™/&Óˆô”ÃQ,‡¶ì8¬7n¹É5sÅÒ½xÞóölYÃ1ÕvãÜ0æ!  G©éXZÕ~¬’Žw°Fr:–V€I:óݦ°=b:–ÚrœîžxXÛ™éPÓQ+Š¶Ê²ã›ÐΉìVÓ±¤Ê}ºÅdÍ›°ð†SLDZ!Çêp<œqœ±j:¶Z\Õ‡cY,úR džXS oaQ˜^1{Åv´“u0.¶ÔhlJ}Ñzsì2ÔhD(ÑkœÊ{3–‘r—ªP‹/Ù¹ŒÇ2>§&#´²ªÆˆõ¯xedžX)aq1oÜè• 1¡¶.¡¨wn½×1j6Š¥Ð¶…/òÁ 1‘¥fã”Ø-!¼½Þžmfœ˜±©—õ¸~K‹Õl­Fûµó›·kys5j4ŽÖ´³ãqÚà‡17Ô–V ÇnFðÁqµZ/i[Ñ|»†ÃͨٸZá%nH8_·­GºŽz#´‘ÕoÝz93j8®Z£ýEàMYíyC ÇSۗЙQg›„C G­Ú„ysë…»ÍÝŽާUìÃr°ùvѼSÃñ¤ª}„ |,èWb8¥Ž+-Iß×a€¯·Žb1´aÕwxM ÖÖªéÈË´¯½‹7k¼N¹A±Ú´¼œ} 5¯B G®ØÐž£"ÊÎL5I±Ô^Œç»°Šª=-é!õžMcß•ÕârÅh¤V-Ö7õŽVµ¼£‘±¥ªå»ûŽÖwÓТ‘¾b‰Ð9d¼9óœd‹ÙH­ ZŒ÷u›ßÈu©2´¢Kܰ“ó@«Ü`‹É¨5?‹6æÆš—5b3WÙx ëõj9cÅöÆŽxánÜÊ£1(õœMKTãÍYÁS£1Cl&a9W0ß¦šŽ©•JØ6ă';KLÇ„T¯WY2ûÓvÀ<5SªÚ_Ø:oh=㚎I±ãú1w/6Ä @Š?“vt=¸…hÅÛI_¿;« NˆéXZWökÛõ‹¾ìRÓQ+ƒÖÏŽçùvì¨TÓ±Ôr cûîMØV3BLÇÒ[—€ÎXlx´šŽE±@ûvv¿ ‹¬Ñ³|Ät<ˆ}8Îpæ±­«§ã©ý·¿Ù¬wnS55OmÚí!Þµ!ª¢ÄtdHéæ,ì·ÉD¦šŽÔÚ}9ÖY™oܘ[j:bLl¾^«ôŠéHµ–œÇ~÷ªä´šŽ¤ØäÞ4§^¯]í9µt÷kaÚÅÜ·ó¥ÒqÜKl;!.k_Ãz<Z:Ž;Äkšù˜æ³uÔÒqÜÕiÅ}h;ºR:Ž;ÕV÷‚[ïÒÎ'œZ:Ž‹…ÑŽ1úð†Ä$Ôt ­–œ°#0gðFPLG±YZZpŠïh7Uwj:†Z`UeÇ÷Žv1«†ch­ÈYKŸÁãÚÕe¤Ž©¶8]Ýn‹¶Ž©ÖnCλ´8Ï–Ã1¡„ãÑ*ù°–ÜÃ1W¬ƒ‰Íɇ°¸Ê5“b…·ýfì8Ý£¦c…Z/<ûqìÌÓQk”6ÛêK`ª›õQ³±¤jýœÍÖÖ·E%VÍÆZ±&øå¯Øûbb6ÅÈ!ýp¶“y­fcËÅ6Áǰ¹¾[5»Är&röø®ív#fcCê˱ÍqŽÇ¶ÞáPMÇ^±G4LïÆ:rZ ǦŽcQˆ}» D‰á¨5G»0Opμ0,5µÒhÙÍDzX,[ G@lú%qÙïÎ:¼*Äp„Vfmyš<ÕlŶ°;û…»a£†ã„ØZ]×¾^szz‹á(6GÛ¶ÝoÖª;oÕpˆ}9ÂÃûm™3sB ÇÑŠ1Yc÷6l¯:!†ãP,ÿr»oÛ¼"[ Ç %ï,b<iÙ•{j8nIávAÇ»²$G ÇÕŠ¬*CyÇÙwé5«îŠõ—lÔò¡ éS³q©ö%T$Æ<úªÅl¼ËsDÎäk˜gG‡ŽZq´=œÝwiÜ+5b&ì·eáÙ1o¥N+ ñÖ57£†ã©íÈ!Ç÷[]FC G†Ø¶Ð‰Î~l‹YĉáH­K{7Ò‡³ÌÜ5 ±1íE^?¬1 j8r¥’&Êîvñ.ÌÇçVLGR¬º.æM[UN‰ÙZi´wv<ÄC^!fcx‰­Ví¾7iáéM-ÃÕöÚoêaÍËOÎÆðUCÛªx[¶s“³1œbͪwõ.¬£gRËÆµKû9^¾ikâÔtÔJ¤í³ð^>ŽÅ¹Õt ˆéÈè¬wiÑ{»b:Š ÑžíÝâmçPÓ1(U¾Ö&éó8Ö¡¦c†Ô5ôÙ„Ç>ºy †cj]ÚÓ2úðº{L9ÅiaØ‹z»v•Ñ©†c®XƒIÓ³Þ¶ÍUÄpLÊ}:nÔëµJ¿ 5K-³*fbÞµí11j8–V¹o‹ ¯îµ‘b:–ÚÊ„žÄ½ƒUmy¨éXRÕ>ˆ¹}ÃrV Ç¢ØÜÞq'_—‡£ŽZS´îæÎÅC&ÉVñKªzÁ’¸zGÃr]džZ S]Åë±íXB Ç^±å„^÷Žæ™¤Žby´k¸Çnˆ…šŽ)×ÚsñPvq 1¡µ×>ìÈ«7°]NB G¨u_¢xKÛtÇ©áˆÃq¦+Þºy6C GPì^µ…·iÚŽb³ Ó¨{ÛÆØÖÃqÔ–&lróõÙú`ÔtHÅrÀØýý¼®grÔtÔ ¤ÅZFE½ð0ôm©é8j Ñx×ùvl˜•!¦ãj…VÑr_ˆ §¨†ãjý·_#Øß ÷^5WnAŽ×ÕÿÆ—K1ÅÆhË"·û¡lÙèS³Q+ÖÓx7|(‹ÎôU³ñ´BLÜ¢&ïñ,Ü'fã©­µÇìÅcƒÅRÃñ´–_†EöÄ#ŒË5oÅ Š|€e:|Äp<Š­ŸÄÔ»4ú¦Þ,¥r†ÖœÜdz¦Þ,µÞhÝ8½÷p†„\(GPë‰Ö­àãZgïR Gj­Csã­ÇcÚÅmRMGJ•{¤]ç1,–Õb:¦‡Zžcfóa,°Kˆé˜®Ö~¹·ÙoÂ6€X1Óբłùf¾[hjé˜Rƒ´±´ñË}†ñöÓ1µâh—6ʼnGZ{¦Ÿ˜ŽZÑÆ<7âÝZV!¦ch½Ñ†ñ¢ã-,Â髦£V­‡m2ðèÆ\&Õt µÐ*æ-׉:1ƒbËh7›ù0V±ŽTÓ1C¬gbè÷¥†c–Ø=´wcÞÐr§bÅpL­GZX§{½=[4oÔpÌûꋽ·aöžŽ©õJ{ÖÅ{GkozˆÙX!vì·¹/Ü-‹j6V)Ù8´‹:¼;›¬­Qñ¤ª}‡r¾uŽÜæ‰áXZ-9cMt¾sÛššRñ(uñÕvYŒž6IB ÇÖ*÷gs¸~CóÂĈé¨5H»cGçcX‚€š­Uëaˆô~]–ÌÅ©ÙØ+¶w9i¨Ê 1[íÒž±ƒÇ²K©f#Bl”#®oÖâÈL5¡•PËÂÌ›0÷`¦˜€Ø #…7kw{j:b¥…Î*±óF ªé©r´»¼¥1¼pb:Nˆ}h'/ç! ¾ã§¦ã¨uÛ3¶øx–ÍPÓq v­zƒ¼·e¸Iœ˜Ž³R:†—û¦ w¡¦ãhE¶í^Íë³ËÈM5W«ÜÓ*Üã!íàØÓqKl¥PeE?”{j:.ÄvWtßÃÙ1¯ ¦ã®”Žm‡¹y,ëI—{uÔ›¤]Ü»±‹æœާÕãÖ7Äc<¯Ôl<­Ô*Øn÷½-£c‹b6jÍÑÆYDô<†uƒ·j6jÒr¬ ]ïÎrz6¥Î«-oʼzb62¤Ž+ívk^Ój8²¤pl«Œ®Ç°ÜÄœšŽÔ )¤Ñ}ðnlb)¦#µ:rÜÆ»æ¡¬'æNMGR¬e¢ —oݼϑb:–k½Ò–ï~å¾&f©¥ci ÒúÚ¢ÉwaSK9Ë¡V¾XÄÛµ­E—˜ŽåZåþŒî{oÎë³Z:–k™Ð²î l;Ù!fc…ÚB´Ë‹}Ûv$[ÆÐªõ4N^<º•×ΉÑúçµÆžŒwes=j4ÆŠµ«:s÷1­À%Õh ©ZmÞÃz–œ¬£QkŠöÎ.ñ«ËC©á˜Z ÑÒ ¼|s橦cjmD+Öã lªbVLG­1Ú‚mzÖÛ³Ú‰Z5“j9Н|ÍŪéX!u^i;ãóÖm¢ÈÓ±J츘h¾]Kvö¨éXRÕgÅæ7û2ûÇÜØ8Ã0lÈôQûo,@¶ ¶`ä<·ÖÕñÔj´8ÞŽ1è[b8–VŠÉXMßÑ—(5µi3ŒÃ¸·e…J/5»¤>Óà3ùšÆJ^ˆáØ{„>då벞ÊH5{ÅÒÚÏ“óMîåôªéØ”ÒÑ­±Í‡6·RLG„ÔÏ«,xUoÂjêæÔtD‰-‡>òÍZ°ºBMGH]÷^–u±c;Ýb:j Ò^Ùðo`ǽª#(–¹×9[¯×î¸E5GªJ[cµÍzç¶ÛW'¦£Ö m¤³oÃ6ªwÕpÔ ¤%¬'vÎ8wÑj8Î*áˆ5'|ÞÂfÁ)1G­!監½3ïM¦Žbà ¸ð~›6»¼UÃqKê¼ÊÚ#÷a,Ò«V Džؾ½»p>ÒªÉ-5wÅfÑèÈx;V;¥¦ãRl™ön1Þ–E‡b:^ˆÍ 5üëî=vo©éx%Ö°ZÝoËàçyj:žÔu_eh>ž]W7Åt¼U[ÕŽÛxhK¦ÔtÔʤ­1Ï#ß”ù4+Õtd¨å0M;_ÓÈ=ˆáÈ{™ˆç-85¡†#µ.{š3úÛ=ë.‡#¥nû Ë!ú­[T9V Gª­MØBöãÇñ=ÄV;ÜçÍr×!†c»ÖJ´²qt¾qÛÜ µtl‡ÔqÁºÂû¡¬ËûJLÇ‹¤u«ôÎÇ´Yj:¶S-™soΪn»µpì±ÑÐø>”ÕÜÔªáR—=Â|×6‰¬QÃ1´ª´krÞÁމ=1µFi³Œ(äÛ2ߘ•Ã1(…cȈ‡´ÛÃ1Cl›¶÷:ßœõ¦ÄtÌë`Ú*æ#,;1PÓ1!ö)ÄpÔCÙ'RMÇ”[’3ñØæÜˆÙ˜Z%Ú4Ïé~„]"|Õl,­ŽÚõ-hž‘“j6V‰W’ÛoÚê|vÄl,ˆÍ¾€íý¸ß@¨ÙXZ9k‘7ó6,oã fciÕhφ1óÆ"®ÅtÔš¤0f_·•€šŽZ‰´ÃT×CZæy«áØlŸª¹×g»(1[ªD‹0Ï™{“Ö½PÃQ,’6¬sg˜Y5bí½U÷zÌÁêÃ%†cfÎ[j8B«#Ç ÛÛ/ÜÃ(5!uÝÇ7§þŽ—“Óûß«r†oÖr85GkfÚNæ<Ðzñ–AL‰á˜Z¯ömÅ»|WÆò–³1µR«Ú²òÛ1Ñ8fªá˜Z·ýX½ÚæzW ÇÒz´oKÆ“S‡œVñ´rÒ<˜ý°~ƒRñÔnû¬‹x,ë[ ÇZ©ã*»œšÇ4ÃQÓQ,’¶mnaHlšŽ­ÕyÖ¸‰7a¤˜Ž­•ZvI‡°^VšŽ ±Ð½Îé|VåÓ§¦ckuä„Íu~9•=b86ÅqH¼ëÁ±Ôp„Öeß6`í›3\Ì@ G¨å˜ €¯]õØb8b‰¡S“ù0fÕp„VGN[]y<¦ ®2Ôp„Ôußg>Qñ޶žW!¦ã„TѱÌ×Qi•!§ãhmD[ËŠÛ·aî;z«£V¤íá;·l²FLÇY±/mÏ­}‹iSÓq(öPØYÞe8=7Äö~}Öô¹ÓqKìe"bmň†šŽ ±†Õ*ö;7Z Ç]±ÕãÇ>ŽUôb8.¥p„Ý¡â5 IO9/ÄVÎçÝ"§N Ç+±Ñ½šB¾uƒ{]Šá¨5Hëg;žýÖ­2§†£X"mš;§ÊàáWj:Å^ =‹ù†6µÌÓQkeñ&­Æ£KMG–XvºØo` êH­*-mXÌwcK1¹Jǵm˜¸yÓÆÃ-Õt$ÕêBÝœ‡±ËY5ÇCl§ÐÌU½ÛžHjá8®¶5a/sÞÁ5ÇÕ:r²/ûmZ ²VÌÆñ•:/X`XoÊŽ?-ǵ^í×ÊóîÛdŸÜ¹K¤ó,îÛ´œbžޡՒӿuoÝI1C+È„6‹êÇ2Ü,ätÔJ¤,ë2h……šŽA±dŽëŽyGºRMÇÔªÑÂÜù-(.§c–XYhbïÃ꺩†cB,À·£ý×XëÓb8æŠ50mÿǵǪá(Iv¬ìǶvŽb[_à÷p¶¬ÃQk’¶iÎë¶eçšµIÇÙˆ‡°6J ÇR[‰VdÄÛ²ED­ŽE)ǰ>ùà6Ó<¨á¨•Hën$cÞЮҽÕpìÛ¸w>mž1\1[ª#mñí¬"%§ckÝögQáñf ôQÓ±µ‚LÚbx8‹šuˆéˆKE›ÙÞwi•È5Qb&ÞÃ|}6 æ©éH鏿9ûzl1sÃZ5Úµî>Œ!çj8BkIÎÚbÁDzõšY5Gm'ZÀ±oÚ¸uX1§Ô¶÷&Y¯×®™ 5Gë²okïÈ·m¨ð5G«H»–löÛµ&ÃGLǡجGoiM6SMÇ ±OÇÃðõY¡¢¨†ã–XÑ1ÙqoÜÍ)1µæhÓ1;iI?/5wÕf9‡7káž^j8®Ômïcðìx}v{Þb6^ˆÖxT¾qCsÕl¼+:¢ŽùØÖUÐûr<µŒBç²ÿyáj8jÍÑvÖ£Þ¥Í%OÇ£ØÎ—pß•±é%‡#Cl›vYïÎÐÓžb:ŠÍѺEaóuØÞÎ…šŽZ‰´^–ÞóXF_G«áÈ[¦]ÌÍǵ&N®]UlŒv,*2ߥÁᤎ롶á‹d½=’b8®«ÅVmÎÄcj­…ã:”p,·¨M¾ƒEŒ˜ëZë/Ø»ïÚ8ÍR³q]-µ î3oÒšéjsŽ¡t\lÛ:Æ#m{ÜCÍÆ(±QŽ æ;˜¸§Fc@,3[mÍí“1V¬WõxÉÇ0ªÔdÔŠ£% ¹ÑïÎ2xH5S«÷2,rߦѣR ÆT‹0Ùœ|»V[Ó£æbBì¨fnÖÊÛ£Õ`L­Zåðmç&[ ƤԯkŒ“³°ÀdÊÉX!%cÚÅÍ ¾‰Vƒ±J¬zÖ™·c³K1 bï©îÛ¶‹[¶¥µõ²,3ïÊ’é5‹rµÆs÷b#A ´¡ñ3àþ§ —p£o“®æ›´›ã„˜­õ4 C1âí.¡gckµ]Ò|Ûùö¬b¨áغPMëFÔÛ´Íæ@ Ç^±={•}ñÎ͑ާ¦cSJǰX>–aX,5¡UîÇ¢vû-í¼à#¦#Jê±–(ìÃYoßQMGHUû-›ºª7aœÀœšŽ*÷㕨DZôª(1¡õ: bðжˆ¸PÓqBIGÒ¦úz¹ãd¨é8Zå~­¶¹oÒ‚¡¦ã@í^õ†xæsÑ¥¦ãHUû‚EUðá wÑ­¦ãPlIûeñϺ/SMÇÕ 0q«>ÇkXúM@MÇ-)ËÚ·ïBúªé¸Ò‘V鱯Ï2°Qb:jMІ۴c^¯å:›j:®Vµ?âð«ŠóQÓñBl¢ý²ïʲ Ùb:^‰Å{mEçcXøí¤šŽ±GúoÛnj:ÞJéx£ê][sº)¦ãi]ܯá|¶ˆžVÓ‘!uõE‹ç¡­³‡¥¦#Kì0´yßr/z·Ü»#µ¶ÚŸUðÂÝ¢ýätäŠ-0áë­x 5I±w4ô9ÏâfÔžOk„–aQœ~—VÝj8žkåUå\ßÛ´ˆ]¹4Çs­¦œ²Éiȉ-Ok†öÂÀÉz(»¥ާF‹²sðÞÐbf#Ät¼©›BØdo¿>Û[ïÓ1ÔîíÕxhËöíQÓ1 )Ä[䛵ۡ§šŽ±bá½··óH‹¬ÞÓ1Ôîí':æ5 Õt” £?Šy ‹aj:f‰Å9f ç±­¢Ó1µîíË®}ò]¯6ZMG©4Ú`˜ÇÒšµ×j:&¥¾×Znô¼ÿŸÔ›b8VHáH»C}ãB•‘PñJ ÇusÇ<ÀºvnÕl,©bïeÎi<ŽagOŒF±QZZÞE¿+‹ÊCªÑXZyUcLt½p·©®T£±¥Š}­-úË÷š@b6vIÙv‘³oÇÀË+5[«Ø‡q³ë è«QñWìZ5ÂyoÏ|„˜ŽM±Ä—Ïzp«Ùa¨éˆ ¶wŽçë58›­¦#Jêàèv…Ù×gíëYb:bK˜¸Qn;~5±bà ˎ{ÛæÛyTÃZkrº°ûº¬*)†£Ø$­ÛEå¾¥9YYj8N‰­}qïæc›_¡¨†ãhU{Øfä<”µß5Äpœ[¯ÊàæƒØžj8ŽV±?¸|6Cn«á¸R 9Ö›óöì²é%fãjÝÙŸ;õP6Á<9W­Ö7çú!Ìs² fãj­M;t÷kÚtä­˜«•W•vW¯Ç&1G5Oë§ý}·Ï¯Ï8É”ÃñJ Çv˺å;šÇV@LǃØN¡¬¹z[æ—å­¦ã©õãìÍÝãÚyyœšŽG±kèrÏ~›†™1©XÕ(Ü›5&®O G–ØÉ1¢¯iÙ=I5)UíA«â¡1žb6Rª!çÖx‰{,s„œbQ´kÞ>oËòpraŽôkUëØ&]mCõ¦háÎ7it®ÜvU:ÄV˜pP÷ÆéFŠÙH_)aí|}†^iáH§Ø Ç’Û¯iQp¹Ýã ­õ—c}|€µWÞªé%w­Š‰Ç³qâVLÇ€”ŽmÓ³x„¡¦²ÔtŒKæ¸ÃݛϪ=5ƒb&éŒ~]ÖØMŠé˜¡¤£»í.h]Ó}j8ÊåÑv¢û»÷:v¨á˜P»Ue.ÆœíÝb8¦V?¬’Õ_/ôzŽŽ©µ­Œ3=i•—j8VˆEÛgpçmÛy¦Ubÿ\w9ó:ì¬Q³±´~Ùò÷ö qäªÙX+ÖÛ[ÄÜ;ÏïRÌÆ¢Øú¥NÆ<¶M!®Õll­~œµº{w–T³±µžhÓ*¯öÝÙÄr(¦ck…VÁj’ù& öªéØ+¶ÞË«·Þ¹zŽMµ±Ð<ÔŽ81b‰Ž^Ídmªáˆs¤ßî»±ÚHo5±³PõE>œÍ„Äp„ÖZû³À±Þ´eõ.ÕpÅR&@G?¦MÍŽŽ£UîÇÚgë]Ø"XÓqJìèˆòØÇ3¿ ¦ãhí¾të[ï7i^ RMÇY©ïÕvµa—Ç:1G뉶ͿîKŸ˜€šZq´y拎·0ì OÍÆÕ*ömƒ<œMc¢Ål\Hµ/¥ÝtඇÎT³qWªxÑî|û!Í»¼WÍÆ¥Øo‰rܽ9cT\ˆÙx!öS"/ù¶l·“¥†ãiû²óF¿9‹F.Õp<ˆ½9Æ6ûÍZDqV G¹!ÚÚŠ3j8¥p„Ý]ïcÙÔâN Gj-Èqóò™·e³èh1µ¦h}ÍØ3­¦#!vŒî}WpâÔp¤V`UØÆV<¸M1I)Ç|Ï¿=Úà!µp\×J£Ý±F÷>ºÅD µp\÷‹™XT¼>ó*ìJÙ¸®5E˱¯x½ÆYªmV]w©bŸe(Ô>”‘;%†ãºSì䨋Éw´LÎA ÇõPÛjŸ˜weDÎR G±0ZÚycÈØn5R¡n7yó†y#¦c¨e˜ {æ­.=OMÇ Xv¯_¯Çn‘­†c†X—OÆ»5fRÌF­!Ú«Éoh¯[j4¦V©oëì­·cð]@Æ\±ï…ʼ·issb4&¥9Ú’sý8æ‰ÚQ£±¤z/çìîoÓr¼cÕl,­“¶f²ß…ÍTÅŠá(6E{¶Nä»4ޔӱVìMh6rÛÎk3Ôt,­~ÚoÖÐ ¹ƒc«íÇaNÝ#¬£ýJMG­0Úh[Ÿ¬Ç°ÍI5b»öj‡û–6Ä,Ålìk…N/æcYVݬšM±HŽ z½qËÛÍR³j鄞1ñvìfËÕlD© %æ`…Š^5±† fܽ)à §#´«Î·iì¬ 1¡¶§¸È‡°ìbœŽRQ´ÙkÃ`>ÐÎ{nÕpœ’Â1 ¿7°êbÇÄ̽ ;pI5g•p\ZœÇ½^[zÔp¹uh‡¼wc¹Ý17Äî%ƹxtË+n«é¨F{nÞŽ×kÌñÃq!õ¹Òª*ñæ ¥Ãqµ"LÜ.êø0Ö{W­†ãjµã¸5á|LïîÔp¼;9F¥ç[ØNïœާ¶Õ~àÞe,R Ç“ªösVŽÀÛ°äœšŽ·bQÇ×I<ŽÅŽËuä¥>W™³:^—ÍEfªéÈÒ±mg/<­± šŽ”*÷NËYÜí.ºBLGBìsEeò‘VC¯SÓ‘RÕ¾Úx™÷®Ì±zGGjU{bv¿`{GŽŽáZ 9°«Û|(óFõˆá.Uì¶³Se`2K Çp­ a‡E½^›ŽÈÕÂ1´Æh£ 79n37×b8†Sì­}ø.,'õ:r"¤ª}”e3ã- ˆÑ%ÖÚ›Ýì·a>‹¦¡õÃ>mÇ·¬˜’£1´öã¬ew}Ëãº.Åd ªe9²oh{Swj2j%Ñ"ív+ßµ;‘j4¦Ö2´1ì} «Ú¨Ã1µúqŠ>ñX6ÞÌQÃ1µV_®õ5úclŽI±“ba;¸1+ÄÖŽ'Põ0–/ªéX%ö„Ö{1oÒ¼/£Ôt,­r_÷釴 ïTÓ±´L`>7ñ.¬{.RMÇ¢”ŽmÝ[ýèËœVÓ±ÕBL‚ý0Ö¬«ÓQkŠ6iSÑx[†ÚRÓ±µ«ÂvòæmYç¹;» aÚP„¸Œ¡ÿÆæcšp «o’€ŒÈ‰Öê¿„"ïÍYæRLÇ>±7Ç9.Ã"‡zgG„Xz\Ääã¢0£†#´ªýØ:‚oh ®ŽP Mpäô»µÌÈ\5A©Ù„±*Þ>¤9kvÕpĉ]D÷.^Ÿù+Fã„ØŸëb2ߌMTתÑ8%up\õ&-#7NÍÆØbûöÌ}X£Wt‰Ù(7EÛ ðMØeδš£Õ|9F ëæ“P³‘Z 94¯Æ6x3b:R«#§l=û^Õ–ëéH­Žœ²Æô=žÕ †#)ös ößkÄQ Gj­0qëKäÛ±AqÔl\¹4´rÇ›²‰¹5·ÄV÷Žñvlk°³qÕrzêâMX@ªÙ¸ZÅ~­½ê^x™Ó{ÔpÜ“ê0qCÕÔk'¶ †ã…Xî¸só]ØÝMŸާöeOLðæ{9b÷„sÝýx6S!†ãQìœ]^µ¯Ï².5OëÓ~lûFl]‰Ù˜J6â,qÿïU›Þ­ecºV`­²þfUzVˆÙ˜µ€ðÜGs ׫š®ÃÕÖ£[!°­ecú‰ ¾„W?´uaI13´’/Ããñ—C9Ck;!­ëoÝ<72Äl¢mÃUæãXuMS ÇÐj½<‹­î×´ N5ãÄZ{ëüðºlêxÃ1C Ç´Ëa¼Y#cj:f‰edÄÌ»´éBMÇ„”ŽgAÃxí(1“bsBSYóš†äŒŽ)Uì+,Æ7^·uÌÈÙXZ/´iî9ñÎ-r%fc•XÒÞe&_—w¡Fciµ^¦U¢êõÙ1³SÆÒŠÇ) ¿ãÛ³hz‹É(6A +Ïä¿›¨U£±CŠÆ2Îv>Òê¼3Ôllµå„3ƒ7iÀ®Ÿ­ve_ÛoÓ–É’³±å:/ƒƒwcHÔhl­çÙ3&:š%F#´nìÝÐQûP†FÔhD‰Ýyíë!ìàªÑ­^œ3†“¯Ëv}&Äl„V/Θ_]½=ë4Õl„VZšOz½Ã1SÍÆÑ Kë%ø.ìè}#†ã”Ø@¨»ß´%éqj8jí¡í¶»Û}H«Ë¾QÃq(…c›÷^=øŸª†ãœØâËÁÄ<–]Ý\©áH©jïa…{sÆ¡O©éH­õ%4.:ÞÑÆÃƒb:J:^Úq²ÎúX•j:R­Ï~Ò£ÓrnõnU©¶¬j&›cÁ;/1Wk}ÉXŸ3_·Ýfä©é¸R÷„ygä»°ÞŽPÃq!¶ø²è·ià[ Ç¥Ôѱ͋Ým·Ã„Ž«Õz¹V³ˆG7ty®Žjs/ìž·ôN Ç+±5ÇW}ñvÌèVÃñ …cX1"ië]=j:ņ7†ñæÌwôt¡]«ÍÄãZß’j:–ËUû¨É7nÓh1ËKìm†Ç×c‡bˆéX®ÔáÑ ±™%¦c9źU“ù¶ì¦Ê)¦cù)阴eÕ<¬µïÞjéXbéK1ÙoΊ5j8†T±g[gÞ„¡è 5bY{Ùqõ.ÍÑ^)†cPìÕäå[ØzGŽqb&±xL›õÎSÃ1µòqÂ2"ú¡­Îj8j ѬkÉ–³1!f#à¡mƒ»j4¦Ú®*Ïà½=°pb4¦V:N[õN>Ž‘»,5K*÷rÎæ¶ëÝX†­FciÅã„udóÝZãœ%FciÅãÀ¦cøî¬—§†cie¡­>†°>j:Ö©í_ºÞ~6ÅsŠé¨5E‹±\8`K¿PñµÒqÜp>xç–é×Tñ¥ª=ÖÖsø¶-§ b66Åöqxo¼9ƒwÍªÑØZí84zö>ºaû²Õh„T­oÚ8Ža—7Qb4¢ÄRhsñ&là@©Ù­V{šÓoþý%;¥F#¨Dc•!Âóá,fÊOÌFhm/IãdþÇ ª”³q´b/ϼ¼óÍYÖö­š£…æ‘|L»™‘{n­ûµ˜J¾+bÔhŠmãTðíXÃ1«fãœØ1{*vß®ÍÀ—b62ÄZ½xµýP–ë 5©Õ‹“ÆFå›20ÚCÍFBnìåïÖj'N Gjõâ„-‡ý6„`/ŽÖZÒ¦ý0ÖÓI¨á¸¡„cŽ•î…»U †ãj½ÏŽíMöãØf/WMÇU[L¸WUg^ÓÑj:.•tŒ¶@w<žy.FMG­Ú ƒx›V6Õt<­ÎKX{Õ>†-²»Ôt<©rß´J0×Àf¤˜Ž1“=÷6-¼rÔp<­bÆnæ»´ÅÖ¦Žwb…u¹|]ÆÌšÒ±]ë…Öí¢:ÖÂóbÅpl­=´YæýÂÓ³±]ªØÇoÇ|#fc»V¦ýÙðvË|:£Äpl?±p¯¹k¼+›kŸñC+0alc&ߥu 1C./±ïh~ÄÉÙË…:ïÝ9¥†chm& «¬ÌZÕÝŽqbOÚ¾»ûέ¸ 53ÄÒK6¼î7Õr6fIÙ¸FÄÌ볘ÙV³1!õ镆ëëÇ1p|F ǤXŠvÀïh¾;5óÄ¢ãzÛë…‡uV¬Ž¥õD›ÖÕÜ74ò§¦c•XêxfÇ=”Ír¨†c©E¡ÕÁñHËëÊÃQl„6­ãâþ~/윎%Uì;Ûµ/Ü-ÙC5;Ä‚B'‚|¤¡j¯Äpl­ÚµiÏ|t[TŽŽ )Û€<¾ƒåy¡ÕtlªrpÇôeVLG­)Z¤ œ÷H›%j:Š-£¥yúä;ÎÏCMGH•{´Ý$÷õvbVLG@l×1ç’¯a?–šŽÐêÈ CŒ×7lËé­|ڜϛ´½9B Ç )Ûj#ò]Ù0Û¡†ã”ØQˆ—‰waltS ÇZx\çÜCØyu¨á8”::†m\î3«†ãœÔ+Zs«˺·)‡#µ:rÂÚáûÆíØÎÓ‘%–:îhà-mrïBMGj}Û·]a÷ÝY§Ï„šŽÔ*÷c»Óû6,Òá!¦#µZrh;ð~;Fzè7¤.VÏ¢fã]YlzžšŽ«VîYÈx]¶s³)¦ãB¬½×wãmÛDPÎÆÕj¶/ëɪ‡¶íO5÷ÄNŽSeè`BŒÆÓjÈY«,ð6ô®Q£ñ´Ú/a_¥÷j4žV­O;ƽ ËŠ˜“ñ´rÚæbðpÕår6ÞIÙØÖÓ˜7°ó‚·˜ð²Ñ­çòÞ¹Áýµp„—Xpo¶W½ îËÍ9µšíÝ6—ýx¶œŒÃ®UîÝ:û®ÌÏ; ¥#ü¤®%Â&ºðÎͱÅÓRåkí¶/ÿ<´A‡šŽ¡Õ »Êx½¶Ã ˆá:9þ³x€Er}Ôp *áÜ›cDÎB Ç8±EÇ`ï¼N›+̉á˜Z/´nÙœ~Ë™9³Ä¶LÌœ÷#,§†cj•û3doÒ®;fÄtLŠ´È·aNß*5óÄÚ gkëMXn°S Ç ½¹ÐÄß;Î[1«¤rÚÛÝodžáK5 rÝóšvl8Õh,Jå´ŸqXñx–KNŠÆ³@ƽ#Q½j6¶T­§›o7ÞÁæÞj6¶ÚÆ*ºo>ÀbóFÌÆ†ØƒvùÔã=2SÍÆÖªõe}Ñù&,ݧ¡fcŸØ*'çÞ”ÅT^ˆÙ­Ä„6ïc=À8ÀŒšÐú²‡ÕöGÞ™-DZÜhø]ä[ƒíÇ¢º™˜ßÎ+Ð5¢M‹'$Ûzû!µ„Ø´ÌnË´n^°»Xͬú+_.H ›*¹ÇZj±+d‚±å¸Ñ8W¶÷68îÚC+Éf­CQìӽިfíQeMé¬ÐÜFÇܵB+œ®îá±HÛ6r\¶‰VY]mèËJ­Ø6:&¶mC ͦ6ëÐutÌZ6OØ‚¢ nóuÞ89Ëœ½|ÌšJØ©µµ+_•±ºuQ*·#;¶±±|“^jœÞ”Ã(_†ÆÂ²Àª­. AÅ62֮޽³)&h”MKÛÈX³l½Q§¬©ƒ%-Ü–±±uY,¡±Qã6ÕˆmhìUýú wB³Tyé646–OÉ/Æ>cËØ¸k­&{[)%ØRu—%¢W;ÁyÒÃuG7éeÆ.5F=<êѽŒ³Í'¢t(ƒUѺƒMl0Ô¢iŒÇ¼,·±qj•^É^ڔΣÛF3ËBІ5ŒÆØÛÍuS¶¹]VbŠÊ¹ZX†Æ”U¶àɰ¡i.‹Ú…Æ\¶¶AYœ™ã¾ )»úõÃZ"Aí<>ËȘ²ËØ;kŠ'epĶQcª.‹#¤=‘a rÕ·íÎ¥qî(„mc£bYHUuɦv†˜-c£Ö*¹Š5Û†&¹Ý ¹ Ž:Ër´‹£IÅèÔmp4]"â54ÆâåéËàh»g•Ks‚ l#9¶ ކm“^U–”Êjæ¹V«äÎB5¸ÐâËÐh³Ì zf2iœÃC¦¶¡Ñ·y]ÊDUqy"sÝW± ­Pêd ‰¨el\¶}ÜÞS4ÂSh[ÇF¯el4UphgÖ68ú*sÁ P§LÉ,£cìÊT圭CÝê&¶ ޱ«gßÜÕÁYrÖ¡1°l”]¤"œ…¶ehŒmyK<Ũ•'÷9©fìê×7Ë(†¢™#¾ ŒÐe`̶ ªá¨t±+”}pt h‚ÓÒ3¶‘XÒË«T)’,6¢V±±¸[†rX:;t±-*N¦ƒRØa-¾¹-EÕ 2©Œef,·±1}YÂKSU¥nÕ®\ÆÆÄ²®W»¹œ]Ó+·±qWþY(wx%X娯Æ\eíµx¦‡:xZQÛØXº,:}h„­Ít—eŸuŽÒÊÏ^ª©Ø†ÆÚeë‹ UA£¬é²ŒµË§YÓ TÅ’UÛÈX«,½Ã T‹öØFÆ^µ8[Í2bÅÏñedl_U»‚ÇU<æ‰Þ†ÆÆ¶L½âVa¨,\kìUÖͰ(§I® Y·ÖØ»–f¥­œ ³òuÃÆÑeûÏàJ¥ ¨ÙlƒãlóÄ „•pZ8°ŒŽƒe„¦­¨“màûæT—eŸmFô±FOÙ68ήõYçñ<Þ»ÐX¢«ÐèÙ p…”`KÖ9]Ž˜œ§ºÖ­6–`Ùጠ©Àæ¹Í§¤–E•HG„[UzKvõë…Å]¦XmÊgKu‡á5Ÿôšqm,c£ú&¹D¹}bhŒ¥ ZÛØ¨X5GÖ‰¡h6—߆FÝåuéÜbJgI)íelÔ]ž8ÉS6F¥¬Ýѽ Ž»2Ϫ²F¢(›£ÒÛàh«¬=ŒÃ¦Š ìn–ÛàhX•þ¬Ù¢-¨œ¥Ó"·ÁqWæYWŠ'A9Ý`½Ž¶ËGØjå–4Ã2:º.ÛÂQåÔÃè6:ú®l„ÉÑ¡RîòéÜFGǺìȤ0Žr©mtôZ6íQ‚sLyÄ6:ú,‹êU3žÃslƒcè²Ý ")MÑlÖŽmCÇØ5i/,ðH‚qTVÇ68–­8ªµ4!XZ1º ŽQ›ôšf5M§Æ”–.ƒcìš¶WóV°º´ø68B—¥oTérJg辉UlKQåÖ(¸;Ô±ŒŽÀ2WèM#»«Ôº¡#jÙž=d·QË´oc#v¥-qöÔjŠä h-Ccê*4‚«=’ p•Þ†Æ]©g§y¬ÔÅbûââT®2õ6@¿äRe`ܵ{Ö›¥‘N£¬jÕØÆ]©g!Œ8U°ULÎ64–. 5žÖhJp&гŒåËVnC5Ëö„ª"†Ò¸,Âbc•µ/eÕÖÏkŽá-¶ŽáË‚ÇMzQ+·Õ¶‘c¬‹— I-\î­ÛصÊx%O‰+a8b5V/îOú|ÚåïÏûðáêüÝ_ÿvúƒ/þÍjl^|;ãÃíëÿ¹üËÕùíÕÍ»W/„¥j{pÎD.ν|yqs}}yqûêÅùõ_Ï?~øv™ÿõùª¾|ºáüúñ3¾øÛ\†§=¸]||õBM¸-ý[Ýÿê… *ì}{óÝðæàPçþ:¬%5ùx}ùêÅÍ]{¹ºýøRXÛ1^øåîn¯_þN>½>}8ûz’þòáöýÍŸ._¾»ywùåýÙ§Ûºÿþ×÷-öNЗïo~{÷úáÁ?Þ\½;<úç«;]¯¯î~½Œ¯Ç^Ÿx{þþýùǃRîÞ¼yóáòîLV|9üíÊ<­¯ãÄ煽ϫþ£ž×±Þl«ü 5PyÊHhUGý[:³š‡½Øƒîkt[5û«OvT[UNfKÕ³w'@Bg§M7=î90V}8TÓ<ì24OΗ´ª(@ÌiÜÝÎñç‡Ïs8gÚõ`T =|¼ñèñr{†Å‘§'ÞdÎ3GTÒºš„„|bDÉ(ÛL¸X”G« ‡5¡)#sß;÷î¨ ‹wàXÈÅÂ^±Rø±Pf,RžB=:ï“tÍxZ ïÓR·CïÞ…›Ô7 |¸½ùõÐößq“yŒÎÏ9»3è7ï_þîͧ×/÷‡¾1éÁW>£ëŽwx´0Õ¾0ùNa¡xxÓÿ¤F÷c!O_öå¹·÷³h„ðzº°‹9RØsjdcvL#‹§/[>½žE#˧ ƒÞÿüDÜ GÛš[ý¼¶æ6ËÚš§ùQÒð—ÍÙpË+­¶¦¶&ìüyꃥ1kñúâbþŽÎœü?{WÓ#¹dïû+ú¸²ñý1×ÞË5÷½ úËsÌ fíÅ®ý¦¤Ì’¨¢*³Ke£ÚVÀ“¯$RŠG2‚ÁLAäj”÷¢µÔND"¥Ú•þ?­V³þByÍ…»Û´jO§÷b–uþ•ñÃ-õÆò@?ÅÙ_¼ ‡zcD'~’6–»Í`KÖmM!¬Z•ý ƒEOøSÖ|UþÔ0†ŒÔåÔɹÊ$?}~U‹âwNkÐo@ßKÿfÔ‰þ&Ôm ‚už¦Õˆ‚ï 8,› ÄÞÅ|¾ØP€ÔÛ=Öýãï?ý ¬"¸1OÔ*;Ô*‚Kòmjo8EùR¯¤%ð^ô1¼/XI窪ÛmÞ’“øsœÿ»§Í¨Œ;Ûô×jsZw#ßÑfÞX|ýúi¦qoHÖ×Ñ´ÊÚA,%¸Ì[é\zÆ „=«ZAý¿þüðŸÿÑŒ™ý(ï=­ø¤ Hœ7ÇÉ NC>Ê×x•arƒÉ”Otß(!)EDºÝ$Ýš>ñïZø‹gÝÑÞ™À­~üúõ>¡ãŽönŠÊî¿òè4Žv|ˆ€—¥¶»³æE«í&f(âx.Vä¾³½"(÷ïÑÞÎëñÅ lafë/ûó;VÔÌ<Õ»ïX°Lõ\bQðáD ä¾€tœôÝÃò2¶B@5ÎÔ1MÆ9£¢4 ¸D?œQNÒZ ¢ž‘~"*07ós°t:·4£ó3}˜ÁùÙÍÔâAêÝCc‚_Fã·AŸˆ×vþ ™&cÊG?çäºînÓNø·J:!ÀŒ¨ª¼'õäv–h„²{¶[³%Õœåæâ6«¡ ”éÙñbu×x¡ÐW‹Û̪"}Œß,9éD–À§÷šLÀ‘w…W¢(¤ÖXP$T­±T Kª5 PƳÖb¹ov¡¸ÏZ÷¾]"‹Åú„K–¢·»ôóÅíÛ ‚'ú³/‡õ‚©sç˃…fÊ“ ¬6l2ÐÀxrEȼž%Žë>â8ðUC-B‡ ;áwúÎzÖ¼÷‚Hb;%žgà÷ Id:”‡ÒÐZ"h ˆÌ:ù½©„+™!ãòXVK¬s£Ci¨£Kb,÷'hIªO'àðO—õåÜÞùö¼>Ïxóü¸‹šçVΟšï».ºé>~þ×ßþý ç%?ü\Ê›jio`¨½c„ï0FN}+±ƒ%Ë›‰„ X³hˆ2@Üâ%É^ä·“+ÈíÆúí“—¿ÎNŠÇÎÆ^?§‚ðvNÅ­5.åüé•r*n-põ³–ÞCˆh…‰ßÕê­ô©OVvW«î¡žwµšo¬?£ß‘ y3Ïá+õ×Jôoß¡E0% ·¾ÐrW³ø‚f]joS7†êGüH함 Ý—¼÷ú6¼=å Úo˜sˆñÖrUó¦ÔðFÊíÇÏñåóëØHïilŸìË×ÿ{ø4ÕZžÓ²„"b æ¨–AT•jøtZ !˜Šó þßr¦Y&]À1gŒÙ/Ðù2¢€b×ëU?}cÂû¿µ§¼¢d¨éÆ©sJý‡·~Ô«ys]Ó›,NŠOñ`³®×Ôä'bDN\~Àó‡Làæãøg"_~¢>1aàPF@dÎ/Ö«íZÕ0Z¶L/–²¶üTü×Ïûú§¯ÿóõïÿøòe› úçÿ®¹øôóO?=¡b´þ=–{‘!«ù0™®æO#úM#JaLj/{¯Í®×ÿÚfSÕM³ˆ²žò,ˆ˜± Ÿ y*p6Uy7Š*¥'¢ëŽÀÂÇ JpÅŠ¬ý¸!@äL¹@? f+qY Ä8–ÌÍ|*Q\7.å«ü? Œ$]ϵ%¨Ré)íék^ï—õtDƒæÿ­‚á·LFöôš>ó¬à%Éyä-M,©wK˜’Õs€ ¢$eîW2Ãöÿ©'¡ È)4E‚®Žc—ÞÿóãàðF.•JÄ|â\$Vl¾hÏÁkú÷˜ëeÂq ì‡áë€@‘‹Š-5v¾läÊÊ"lßêÁSnŒ™·§pöí+Z¤)k3 SX4qW±ZhwÍàÒÞ@†iüŒÙµ°ov'á$¾ÿüã—Ï_ã-NQ dßbê(ÕH}jjõòÆÔYÁRL7L]¹°1Ø+gnYÙÔ3~o6,ÊXwg„à,.m:)R¦-æPò´'f$¬ož#ˆâÆѤßZ¬/Á¾j1HØÙzÂ8bÇ€K™Ì˜–p…€¢ œ zÙ¾º–È|¸ýz%‰•´uŒöÚ茌A‘sY‚Eªµwã²b\¶ÿ0%S%ŒËgŸëœßnn}†:¶y>Z8Q8¤‘æÍXÉ~XGï¼ÝC·ãx±T ´·ñõ;¦m¯Fã'8¢ú´JËvÇ3B¥Ly!y._{â 5ýpqÎÕãÜâÔçç¹tÁ„áœ;àür—&g`¬bõþ‚hIµ¼Ü3BÎ¥‘ÕÚnEb>+w\Å´u7S/d7ú»™Rlv3TMÊŽRƒQ12fp€ˆÑt€œË&9&SgÚåVbQ?ƒAÁY#”âdÁ>A¡>Ü™$óîX5€ŒÓeVN¹ÅžrÆF  oÕ*ŠF­ ²" Çà $:¥‘7"Ê#1¹<¬xNã#Lù)Žã©æ;Y=‡ë$3jºŽr¨ß —@$ó¸0»BN@3f…l}t¾ýCZ`^LéQ4@R|5[DÄüÀ×1RÕ¼%¸„ê # åx;.!b0™^e‰”Lü7·‹P„ ]Â)x€üò0 >¿±‚Ù ]:¢O SM•pÛ7ƒŒm†žvë_ÞS*²Æ²‘uC›:#Ö™Éâä¤S ¹Èå>"0¹°‘ÀDB:\=ÈXzh-Öéof߬ÓjèïD§>‘1Æ»‡¡ÈN"çbùºØ^<;v ß”;ܘBò§~âÏþ¥vl!Øý{÷ø~ ÊI˜Óbˆû¨QVòhÂíaý»g´gâüØø¤ ŒLbSÏ3ž‹åëb{ñ\ìØ0ñbCBev÷®æ’ä4[ £M` ºÒˆù™›ŒXrf˜N`Ûú;{c¢Å÷.]ß¾ºmqv Ìš,>–®D§1t`¶ PC4¬“0¬0—t1»<KkªÑȘ¦úçÖzSEÅÁâä×t~AÐKXcÀ•2C¤0]Bàʸ¦øè „]ÅÐrp)¾ÖŠt††6Ÿ‘‡+‰ôa€Œ+¸FPÜIìRy$†.Êc5ײøü<D!\ë|ÇP#Ñøc˜•6•Æ:RATfhˆÚ B(”±tH•XÔtžýÉ ì‰/Ù ÎQ-»4?CgRŽ6 Ì NI0 ¥ 0)-—aÝ1c#‡¹ætú<2I< nC…Xa¾îcut†[J]<Ä<ìLqfÿöœ²¤ï:ÁU8h;'É Œ\”WIZUźÈ@@L_&D€#"úìµ5Ò%"($·GºoÙÛkF"¬qÓCLÓ¯»?>€Ê\P+us¾²½½£¿aú ÃXú¶†‰q+˜áÕ‹ÛॸµÛlí6‚½Û·§÷—9ä¤ h¥|Â'9 Äz§•‰ý»±2Ž{Lóô M=òŠ"¤¯A,Hyz©®ƒÀyBŒ2Ö×èSÐ}­€¶•X¿Ê6ß•aáu¡!ȳ†Ü!~S#Ô›)¤|O¸ }wòúŠ×ínS¼í6Ä"kå6$ 9xvà%E˼U‚B |µƒ+I[qyÆ&Gã½ßùù•D”ç–„JrJar¡i!®ÁKT”|¼’€£¨d‰1¨§ O‹ ›bCF0±¨3˜¹.&ƒ°é¹øa,Œð@l‹ÆÓ…‡ÞS±×5Ä$Gic¸¹Ä> ØQ.Pó¡áä:  ‹‡:¦“9YeCp: ”Uó±®Jõðk“32ç36‡èZ TqQ·âÜîXÇüTãíOì׺ïٱƙ˜êá.¿ép·uýõÞyDH X¤N¤nzKqbCorÿÊb°ý[hý£fó÷NÎsê<«‚s]Ãé6ç—“ÐÌÆ‰nN­JsNuó{†\Q¢²üUÄT б…¦³PHL•÷_ë¹Y”BJ¾¯^³ÍAxpÄ«p`eÆK Š€)µKì €þˆ0™k~E%±ä€°ÝŠ»ØË9ÈúpðúSQ&#5ã ´³KAlS þ<ŠvLEÄ#£‹Фغ$Ô䘌:$x³ª7>¹ÓH»!i tÌF”AQ¬ Œ<€ˆ-zA1^ê’´ŽÙ¨çBœ¬.Åè]jqLF½ÈÈ€=ÉW Iä²D;8°c.êp áÉÜF§$Î}äÅ!IUZw2"pQ•–£$é’`{H8ÖiÝøÔ@P¤š5”FŸƒØÁë´®dàJaí@ÀépX—„^Y☌žr È€fEMtj .©ÝȈivÌE½eZ€‘º5‹Xt9È1õ"#‡ ju»*(Íìr`{“Q‡K0rÓÖ!hàÆd´Ç+s³Q‡vPâ”&220Ä0ë’P{Hˆc:ê…F²r –¦T=d‡[æCÂîq ®ä«‚z u úu—Q%k(P²¤èr`;88äëî!@Üyµ¡iPœæ]öød:ôë®;(P´vGÓ™¸?j ‡€½IˆÓj‰’¤Ü#Ai ‡‚Ý#ÁÒµ‘íÌHгËÁ¯L‡~½±«L”Ô8eQI­.¶ƒ‚C½îQ  ¤Ô®Ñ*9ݤËÁŽ=e<Ôë 4Etµ¯_)â] ö¸d<ÔëéQ  \…¢=ŒöpÈ×] ¬Î+­±Ô»Èùº»JC`&lrk÷I°áP¯·i"m`D¨€ÄI]^î”±ñzÃ)‡#çZ­résP;88´ë€BV«-å°ÀìQà;|2Ö¡]oì¤åÊ'WgtI=$òu×)°»´«´Á,®. ¶‡„C¿îzQÍV1 Igï’°Ã+ç!_÷8ˆq¤utXT}—P;88Ôë. äÁ«Ü $ëKFA;88Äë®WVPò¨Õ~f”©R—ƒ=^9ùºG¸K¶gA¹0º$Ø»ë•P™žfz™s$ÄâP°».¡À•”×¢“—uIØá–ãP°»Á“IšÙÈÀ˜Í¸ÇAÒ»Çp¤G³Xv CÆìr ;88ìÓiŒºÚѬrër`{¡`oäÛ%;Ë*ÍH ½K¯쇄½q2Í¥ÒÖ 5Lê’P{H84ì®[Pꬖ-œ»n¹v¸e?4ì™E „ÆÕç@vppHØ=b47×j±lå}l‡‚½±L‹`••j„…^Ôå`W¶CÂî‘PnÜ&X8xáÆ@¨=$öÆ—«‰ ÒjC-ݹ+XÒ{#4âXŸE@päÂ> ;ܲv×%p"¯WËV*Þ¥ÀvPp(Ø= ™ùº«œ°2=ùÎYrãþ@¨êuƒ"°¨ölZ1¸Fpö8ÚÁÁ!^od`‹aäJ¼2”èr°Ç)ó¡^wI` 2äÕ:™3+ªK‚í!áЯ»‘QBb:­¨ˆ‰Ã»$Äè°7ÂÓ0[mí3p8b$ìpËtè×Ýð4€8ÃV+ªž*íàà¯7~—©ÍÀв  ²ƒƒC½îŽƒf]ãl²XI—ÛãõzãlšZ7$$”•ZtIØã”ñЯ7¾K'‹¥uÊlÁA]j ‡‚½!žš„×jà,–]`;¼òñŽýè”@´VZhv9Øá•ŸpÜÚØg´6Å%ÒÙK»ìØS>~ÁqË+³e{NvÜ)GÕ!`oü¼¸"9­8²ë’P{H8ìSûÊ%Ö (AÝÈÈi ‡„½19a¬¿ žÄD¹K‹½rÔñCû[³Q¢1­Ë”¥<ºØË98~iëg4Õ¹luj?“]úÄË98~i¿Ë;ˆF¶ã@@mcìñÊyØÝɈÁ™™WâiiõWÊA{88ì­s²X²Z¥¡ªv9=öÖ¼»R­ööÑÓ‰º$؇pØßjÖ:„€p–°Ã)Ç¡_o¤W¸ è꼸»GôBíàà¯7EUiðj!K…»rEîqÊqè×]ŒÕÛ —‰`ír {88ôë“ÊRêÜ’à`%ž]l ‡€ÝÝÑ$`d©µGPĪ. ;¼²vw p)Æ*:5¯ÔèrP;88ôëÍ´H [DsŽ.E;88äëè”+WÇѨRºìñÊþÿìÇ‘13¢ð&ÿÄö<,º|®ÄÐ¥y£æüõã!§Ò¬?¦¡ðœeç¯.ÌìҮʜ‘#„X@°Ø#† þ¾*#T˜¥ ¡l§¯G}-à^žíªl6†²#-œ¾ž°AhµºÓ0 ç‘,œ¾3™ÁQÚ%Õæs`›<8=A( n˜5ÕG›PÖØ'0¯ö²ÏŒ–5B¨ „3د Øi_ÀãI E,ë ì—¯ (ïòTƒG²`p{bÀêÒ¶™z©Îlàôõ£UY’µN(5§Á&“åôõÄ@œ©¼ã7&‹Bm œ¿~UW•^Ib¦ „Øñvi"ÞK\”d„°e9=>¦9Tök•×ÈÀ Î_?`!Eû1QE,•ùôõÄ€•£Í®ÌÁ&”ùüõã[¤AÞÁ'DûA~e6ŒûM$Uµ`E©Žäw·Ãq†  ‚bÑOB–yŽ~Me6¼šÇ×r*mi¤î\#ƒX0¸kÚ£Ô+Xò{MSà°BÔÏ n·õÌ€©¬·óä9t“Ê× ò „ÌÊ6…œ1}Ε ƒó×òŠ"öêW)!ØÂ9£G"¸›hÛòN¤$>BX¤òµÉ¾ OC‹¼½*—°òÌ  îeÿ±E3D°7"æÈÀèwu¯i£· (3´6?„Sud°Iå òzÙ'Mâöˆ@ŠóA° „«z|íŠBüÎõ2ƒ ´Bl \Ñ Q‘Ü7S UêaË7\íU`ÕW[³qÎUFþ{(ž¿C™!-¤/ìò*È‚Áéëña_À0û—ˆ R3G‹L¦›9ûÚˆâJ톀Jj3„Ø@8ýðváþ}D(NáŒBm œÁ~ø å*n§*U„XÄòÍãB"ZôH@G±‘,œÀžT‚¹£ö—ª Ø‚ÀÙëG§²¦fõA:ˆâ3ƒM&ßš¢×BŠd××.hi#„Ú@8=BPN¤!«Tb‚´€À'°'^€%ma—:¹Í¡|+çPVP ñÖ0Žb®62°ƒÓ×Bk„4çБA,œ½!‘¾¿FéFT>2ؤò-·!˜U²öÞ44óQžÖ&•¯d„$èÖçÛ±”ëA6Na'A  «-õ0­ŒÂ"–å öèŒ PZ©W¥ãœµHå듸jÅ×_+(³ jÁàôõÄ P¹ŠÊsœ€¸ e==†²V™µn œ!lBù&ˆ<ïÊIìý2F¶pû1 ^©ÊÚ>YòŒ’Â"–õö(,(Ìýà °£E*ßhµ×1ps¡æ+ÈD‰'´xT¶ó×:#*#oÓ—1ÉÝF›P¶Øã¡"¥Ú(Q•ÊÂ&”oìì| ÜL¿ ÀVQ>Bˆ „SØãï)³Jó^è$#ƒZ$ ìñ Xª}θºN x‘Ê7Žÿ¥N‰ì“ÊDä²`púzÔV,E (‚12Ø„²Ÿ¿~ì1ü÷_ĆÄ#‚M$ßž¢×˾2‰´ÿ¢,GÑBm œÀ~tfjq3FEîY„rœ¿~ <-û÷ˆ !U#ƒE(ßÇ—2*Gµ>„œÕÂF¶`pöú¡Œ<Ë´•zI’qŒ 6©§¯G Dî_wZ@¨h3„M*ßrëׂ–,´Þ-F<†²Ò‚AžÀž°‚GæBPª*©œç¯í DÒ>F(†¨#[08}ýøUX+¶Cã˜A,œ¼~\ÒÈHâs ÂÒkDP›88{ý˜à¢B™­eŸYh~J³M&×éëQ aXÛˆàå„>B „ó׎T¡Õ¯ÊΚ5BX„r¾~Œã'‰¯®ðyè ‹ƒó×± &ÔF º°– jÁàôõ#•ËмœµÐ²šø"•Ï_? \Ä…³—þºQŽ dÃàüõøgä@æm{ ¸XÐÁ6N`O\¡H%º·Ë`¬Âï©ÌxþzL„âðj=ûªR8„Z08}ý RäUMe¨M ‚~g@§¯G}m áÑÛXŒÔG›T¦ó×C¨riòTA85G¶pû5ÎÈ’¾»AP9çTŽØ@8…ý˜oG$¨­èQ]UI¶‰„S؆ñàüV=Z@¥©ûÈ@~gÀg°'¡€Zÿîiªá¬#[08=1(MGkk)0ÙµF›@à3دÿSøB°Ó|jáö£iß4=Û3‚F¡ŒVúôÖ[¿Fé˜zö“ Xd1BXIJœÂõ)ª9·þÀD2ã‘-œÂ~4+;YXëgä²A,œÀ~¬DÀ”ðÖE©92Ø„²œÁ~ü±{Y3ØlJ!„  „SتG¢h`î®#„•>ÕsØãI à¶³‹0c„°He=…ýhŒÊJæ¾AÄ„F±`pûQíUÄü‰åp@#ÖùÔ‚Á ìÇî:î+ ‚ŒÇ@HÚÂìG驤“õneа!lRÙNa'ËE[%¼Gðœiç°;Æ%-´ŸÖaËv ûQì’üÝâh€T>2¨ƒ3د_#·ïÁJÑF]´@pþzBPY¨Ú¶úR’Ĉ`“É~þúQãÂlT­žÓ²|„`'°Ê3¸-O‰Bl œÂQ@*ò€ˆ@8‹G‹LöØQÐàྩH]F]ÁH 篗´âðï%MARÔkd°xTŽÓׯŽQ-”2ÜÊF›PŽó×e¨ÔBÝùqbáö!Ê©W=¢ Ê¡6Î`?ºÓ¬Jä ,bL¢E$œÀžH¡‘´I.ˆLÉ#ƒE,çùëÇ‚ þ&Bxª¥ lÁàôõCVGëNC³BlR9Ï_?ÆJ!Gvi”B^e>›T®SØ+(2ç>N‡¢p ¡ „sØ5p2¯>zÖ¤hd°xX<‡ýª3)nûΪ9„ßSYðö(, Ä[|0 yjŒ bÁà öciW†XÒdbÏA-œ¿ž”€‹Ô¿'M÷¹/Š•6ypû1C«¢õhF" 6™L'°7,Néó6«Øt„`g°7Ã%„ µù$,B™N`O <¡Âù;Ù+ÁUqFP §¯'Qàâ©mC‹¨VéÄÀhÁàìõ£kŸCþm*r%blB™O_?Ø´´çQ¹ŒláüõÃIæBBçÈ 6 Î_?ÆQQz¿*2͉°He>}ýX‹€šÔ6+—ÎÎiAàÜõÃÙEò·SÙŒƒ%Fò;9w=1Hk¥¿„ˆè#ƒM$ËÉëGS”sTõ؉Ä6Bˆ „³×#H±¦Nˆ™Fµpþú¡íÈ-´µƒˆPåx‚‘púú1ú·R„Ú,ø"M,RYÏ^O„ 4¾F‘àYXó1°ƒ“×ãÆ.©ú–À[FêÈ`ÊzöúÑ©ŒÞÚB QFµapúú½ó6’ †`F,h‘bo/oè<\ÄÐÅn;™Þü³±‹YA(ž@X ­]œÊξ¦s›BƒTöÕ×€Ëi-áJÈÀ Ö^?~*IîÝ ÙVøäÁÊk„ÀóhÕï€Á‡ &¡ìk¯ʈØæÀw”bÐa°ºS9bú3zY¨ A$çÊkÉvT­ë^/žRA¬¼~Drˆ»_Êìamˆó€ÁºkÄÀúp6ßkAʸ%!ƒI"×ÊëÇÓ¨ªKVøÉLÁ'Ö^¿î¦äö³‘Â¥„!„œ@XýšñÖw}‹ŠJ„0ˆåZ}xŽôïJ ?ÖÞ‚ð€ÁêëGW([^;4¹U¥!ƒÁ“r¯½~Ìx41±«¾+T 2˜¤r¯¾†ôP›_ VÄAN¬¾†EF|BôjS²Ð€zaý5´vuD-ùš"-Š (aõ5b q¢Eêè’eÁÿSÙhíõ#•)êgy‘$àë®æô½›ÚIŽH‡ ™l´þƒ>é•v?)KGâ8è „Ø‚œHû™¯A O ¬Á†ì$_‰~Â\©!„A(ó ìÇ’ýÈо.§Õa-¬¿†ÚN±dß›d[42ȃÕ×oQQÊ÷UÙNzy:d0Ie^ýøK«ˆŽû/Mõ‘ÊÎ+°“ŒÌÍÆ&¸¹a:€ k°a,ÛѸ xž"òfa˲û±­«“H.yšbž ä€Á lÄÀé´+Ý‹L©­Ý!ƒ0Xýè¡ Ë{¬Zdˆ Á“@X „œjËû~jÑáÁ$”uöc…¦z][O”R„àë°«3Ùüª¿öLg|©¬«°#Íùúùi+O|zÀ` öã7­ÜÛ®õ8•¡¸ >yÀ`öÃWdRÜëqB3³!ƒI*ÛìǬM/о·ÖQ3„à«°_ûˆÜ®^e!"I!'Öa?ZÓ\¥ùÞˆðlFÈA,Û*ìÇ;‚Zp]ÿθC°xÀ` 6bÐ~¢Eå*ÿµ"å€ ïʾ2È£®^×dµ$5œÊ5Ie_ƒý€ Áü1wÇ"ÒBÈ „UØyFMÚ÷Ž—T ¡'Öa?–hŠ{ß“½¬RBhDÂ*lÄ@ë°²|¯§u,©U ƒA,Ç*ìÇ{š„H^‹)‚©Ü!0Xƒ ä!3ú0h>VÖ–Á$•c6„àG™¸.a‘l’!ôÂ:ìçר+¯¡RÊ͉RÙˆ'Vb?ÔŠ­Ÿ÷;!„A,ç:ìG©‘·]ÖH9\ 2ðƒUØPaÇÉÔëa™ƒB2ȃ5ØŸvÿÙéËYLR9Wa?®FÂ.|¥2Eà5cž@X‡ Õ]!‰ŸT.QiAj%6< rš(êšaÆž –kö£Æ¢ËB®:ï„r`ý5<}Œây‚‚0X}ýØšf¬ý³À‘H2ž¤ÁúkøS‡YMîî´,c aɽû!´íÞšæ"Žø„Á lh+ôXDú=F¤ÌÜ „A*÷úëÇ.S‹’¾'{yD)dЫ¯˜ËZôþ±ECsª<`°ö2Ȭ×ì_RöVÈ`ÊN«¯c»«ø*qiq Á'Ö_?æm¦;Ç5_­LZBÈ „ØPÛéq‹ø©þusˆàÿ¡ì´öúq1rMÍO ä!É$A Œ V^?>EZR×_š‹„ ôÿ xÝ5b vÚ(õº)e¥B“Læ•×¶(fÿ0È:A!åAN¬¿~L¸suŽëO™›” Bè „Ø‚Աо·"(u7„àajßq›r¬+ „A*Û ìÇ¿ry…}¡—³$d+° šÔdr­hI w‡ zÀ`ý5d@Ç[? ôEôvÅ“@X }E/ç¼Ö[;G@“Tö5Øð$èqfª«Ì(\YBð „UØ0–õtTÄÕ'+–Î ! bÙ×`?úÅ«´~BS&fÐk°a"ÐÉòßÕeP5¬À~4É:§Þs´È‰!ƒI*Çì×öÈ»âN+,!Ÿ@X…ýØÑÒQÑ׸ÍôRS!'Öa?ôi¹ÿv†ºãHÄr¬Â† ø¸Häý¸_ÆÑ€¬Á†‰§H[®-,ÉÁà]9×`?F'pXð5:AX=2˜¤r®Â†ê4IæuÊ2Å!„œ@X‡ !ø‰æ{¤±dÐë°íÊ.iòs3*rE˜‰° žƒ8"Z~u§yhvBƒT®5Ø…Qäžß²~2ÌM 0Xýè“Um¹§/›xâc0ÉäZ ÏçºúA,%çAO ¬Á~,Wæh¾k°»Ãžá „UØ×Iá«›[ƒB¤r¯Á†[ååŒø(1dà+°­²–~mh©ò2† rÀ`ýõãû}""1ƒI*÷ lAû¨2}î§^ÇÓ«APž@XƒýÚ2Nžuu#¸Jàÿ´Éh¯ UØŸfÉ›„À^Ù ÿ ZýZ)+¬ŸDè<”ìˆð€ÁúëGÁ¹ÖµQ–C4"ЂÕ×'„.½Ö¦•±@>‰ƒõ×BÖi/âkªT·´âƒ¼û1ó4«X/{Úåî!ôÂìGÅU—^¯jÔ!è •y öc¿5I—|ä *Ê‚ tÀ`6Œe;î•÷Õ(¹:2ðƒõ×Z/÷Ô¾ZÆYC)!ƒI*Ë ì‡¸«`â{‡£¨‰C=°ûq?µÎ¯Áî>Vå SÙxaöCX¸—ƽ(G,% „A,ËlÈ@w¦}‚œrãlÈÀ V`#ÇMè[ìÅGÍ2Èÿ3Ðõ×PÜÑé¢ÒëIÓ:­0ƒI*ëìÇÇ(Ô¨¯TvW Fœ'Va#íÇÒ4¯7MŽjkA'Vb?"AÕÓ¯J#'j Á‘°û1F¤©Rî^Y§ˆ`ʶ!0?Y׌»”Ó] ô€Á ì‡À.³ÌK`G2ô1 e[ƒýüUöækK•º+„ «°a ðѯkÐ`;1„àë°a$ÈQâÔkŒ³±cƒXöU؈Aé&É>YY#¡ Ö`?Ê\´Kü–§Å,$¬ÀF Ò—P^ošE,Á$•} 6„ÇíúUn;nÚ ø„ÁlÄ@ã8gÆõ Må!äB¬Â~Ž= »B™8œ2„r¬Àþcï<Ž,ˆA(˜‘ oòOlÏÇËr%†.͵0ÂÂ$,]šÆÜ2\08=LWó´²¾ŽŸ£‚¶xàìõ´×W(¸nN3À–nâàôuò8À½<¦Y¦zË`É~þºc`òR’¿™œOÍSµ…'°‡™üâiøýÙsäÞæ"”ýüu›þ4˜´TžÊÉ g¯§õ `ʵa’1[º`pòz’×ijõS$€æ-ƒM(ÇÙë¡_Ü-0Ënå@pŽBn œ¾nO‚rÁàüõ0G'00Ëfk…0jÏAâ‚ÁùëöàsϰRpâèÜ2ؤ²ŸÀÊ+ ¸Œp usi!èÂìaK 3–^Mç‚/ Ä9ì¡c\˜ˆŠ5¢TŠ–Á"•ãv{ìq*hYÍ"Ú@Àó×C§2†q–8HÅ@nð‚Áéë©!X¢,£hè& Î_ )T­,ÙwEpk!l"9O`·yÀ$é»Gža¸H !7Î`7 „¬º‚°= ¸ˆå<=´‹c¦p­¦ Ú2àƒó×Ó‚÷äÌZ€ÍÎ-]08}=Lâ§ À¢íAZ‹T8ÝAˆ|jàVÚ¢Á†Qn œÀî ˆ¿tW,Ôͱ= „g°‡I: @ù³!‡”ZÿOå€ó×ÃÎ:$ÅÏeYíAH¶ tÁàôõБè”õ®œ2¤2ùÿàÙëáSäÈ¿í–Ô2Ø„2ž¿:L‚£lo 2ÕÖž2n œÂ¤QšZ•FáÊf-Þ@8‡=Ä2§ÓÏç(M™Zºˆ„SØÍgŒXë+˜¹E°He:Ý! x)fVÛAxº¥q.œ¿6" |8=´ÌÄŽlB™N`·Á8€” l…€ðo œÁÊà]€¸üžRª…¶táö0TJ̈Êôe ±Â"–ù öPoŒQFˆÀŠá ä‚Á ìáI“QMJÍ#º´‰ ¸`pþºcøØãg¶jPô 6©Ìg°Ûƒà³n‹ L´–nœÁFéb¹#Xº¶|ANaÎHÈ­Þ\!­‡°He9ƒ=L¸#*ÊH)¼Õ† §¯ÛÇ4yaRª9!ÄZ¼`pöºµú@ȲNH•èÏnâàôuÁôRØO«²Yd a“Éz»ƒÀüŒ“´žf!7Î`·[¤”MIslO‚/bYO`UðäˆQæQ«µ xÁàüuÇ@ð¡›f]˜<<*».œ¾n‰˜•ý₌-ƒM*Ûùëaܦ&—›²°[ !7N`óŒÔ)ñ^¸;·º"pá öpSKQ—°ÐFŒÔBXIJÀŒÐï³2¿4Ó–.œÀî¤>R«÷4 Di,^•ýüuËÀ_X˜–&M Ê>6¡ì篆òe þ5Ì;‰§°;*O‚ÙË+¡1g 7ÎaOÃ%LÊ*ÍTVê!è"Na/šŠhYk\ˆ4½e°Hå8ƒ=ÈÓ$(ZGÏ  N`õvVnŽí·ˆ`“Êq{ ÆŸ½iäìÒBà „SØã‡g¤ú(œ[ºap »c ù$¬@ðç–„ÑBX¤ržÁŠÅJ§¬ûcwjä‚Á ì6•ù¡²SYÚ•ÈÂÞ1@\08=´ä`QiÉq ’Á&“óüuÇÀ♤GÓ‘ÃÑBÐ „؆˜ÉþI[‹wå„3Ømí©>Mu+Y¬eðÿPN8=ìMãt–‚xèÒ&á‚Áùë¡Ö ’Kå© XË€ N_eðÌ‚^nÊ,A-ÝäÁùëa¨”™—¶( ÕÂ&”ñöp’̹Vž²¤G !7Î`]ûiù»ªHÛƒÀ‹TÆó×Ãr”П5ïfl-^ 8{=\ÒD¢ü¹©9¶ tÁàìõ`+’9­ô¦º§´ 6™L§¯[øœð§äÑÜ¡ÏdÎ „ó×–‡ÆÊõASÚ@Ü08Ý1 |!¤Y„$Z‹P¦Ó×Ã:Y,ÒÎMA¹e  g¯‡Ú CB­ãNÕ˜­eàÿgÀ'¯[þ€fmz"FË`“É|úz¸¤‘‰è'䉤Z«í7Î_O¡¬&VÊNܲ‡À'°;OÅÔK7ˆƒ€` A‘pþºõ×ñ¿#Dì™E µ ±,§¯‡î@!(¾_€©õç  Î^O+‚€K¥—·úÚ6©,ç¯[ôAµ´*£Kb¶xá öð ð{GP¦À–nœÁ¾FnaeÉ»j†rË`ÊzþºE O-¦z¹šH‹ Î^oiN͆!ì?EŽ g¯‡ÅunJe‡¦˜‹h‹`“ÈzúºÕvü8Œ?RŸ¹÷ç@7Î_·y/ÈBJ¡W2#r ÁìöÐ% ¢ß’Çä§læ/RÙÎ_ ÆQU¬X;ìïh g¯‡ÖÀH†:;8­eÀ '¯Û#|†Œev¡¹öÇ@7qpòz¸ PriKSq@j!l2ÙÏ^û*.Y§‡xh !7N_O•¿èX„‘‘´ rÊ~òzxIc(We“§éÙà3×Ã#ÔRi‡Ï`b  g®ÿØ;“# bz¤à†òß±}·}–/6dhj:¥Žì( Ë}}PjÄ-ƒI$׺ëG…yÔÝĈh!`aíõC¹Q~B®²ŽO¬½nB"S\®B}ço :Qk¯;šQ—³…‘¶ 0`°òºc|—¬ ͰÁäó«®«8¤÷û%̨–Áä& ë®™äòm›¥CÊÒ"ð ‚u×Ék)¾4µeë®§Y‘ßæ8Æ*Õ2À V]·‰ŒSá¢÷®>IµµvIÿŽä ZsÝ1:æjwÕl¥«iË@ V\?拜„êöEë ê~ƒhÕõ£Ô®Lý{Ÿœ'ÈR¸…k¯Û?¤”Ÿ‰SÄq“D0°úúqÈy•.g2S ±Ìk¯ÛƒPål÷èu!ƒ[:`°òú1äE‘v1 #YÞ"ð‚uׂâcÁziÓÌJÎÁ$“yÝu{ ìBî4w©j`Â`Ýõã›]_v¬ ÑA@µ×-9JÉ׳âéž"-ƒA$˺ëÆ1"Â5ôâ”ý9ðƒ•×<(¡ðkSßQêÖ2ȃ•×ããá•wÃ&ÔªE€I¬½~|&§"ëž´sgA'™¬«¯_㎠ò«²‚E-0X}Ý1à8ÅTy1P©”j! BY×^·àÇ‘y_ê[T™´ rÀ`åõã=÷oQ¦- ¬»~ ;VäOqK1¬C`“L¶u×§£ž–WÓ¬ƒS¸… +¯DA@u^ kx Á'V_?Ê“(î'QÅ-„A*ÛêëG”ˆå·O-ŽGsË«¯;â§WϬ9kGÀ÷ɾîúÑ*(¥w¥”· &™ìk¯[cDG-‹¿ø°ÐBð „Õ×í0®áëLÎ>“='Ö_?Š©Xãv§lF}$` 믟ʖ ¾àK­2ŠA,Çêë×KÊ)æ÷¨C tÀ`õu{ü„×õh# JÖ2˜¤r¬¿î À\.†¢ÌBN ¬À~Ôy¹è÷ äÉHZ˜0Xý˜p×fð—«ŸpÉA*ç ìG›èÛ<9Ne-Xyý(Ð1bÓcTý!ðƒu×ÉŠr‚|ø±ˆHoL9W^wÒáqu ª%AZ“PÎد/¨]ÛâiHÕ–O¬Àn+½ôeŸ<ˆ<®,’-„œ@XƒÝAp>,^v}"$g e€A ¬¿~L<ŠxÅݱiÐ~3­¡\«¯+û¦Uv?H¡jÎ-0X{ÝæŽ§ßç 2´E0ÉäZ{ý°×fêve2Ô9¼…«¯]§†ø^ã N˜Â¬…€ „ØÎªÆ÷¯‘€¬M Rë¯[uZ‡Üôç׈A‘-0X}Ý&•ýIeZ>@°òú!NYŒýÞ‘Mö¬–Á$”±öºƒ»Ýoù¬E€ ‚•×­9µ¨ëõ¢uÁ¬KL*½„Ö^?^‡˜ñÕ&% @[ÿd¡•×-:ny/ø´gà+¯;JÇò-áƒ|ŒÚrÀ`ÝuÇ@òdFê}™)€DË“@X{ýx‚ù–8° B'©Ì«¯ äåb~Í•¥Wµtaýu §"î}'5î R™W_?Š+ˆKã®âó°–A¬½nAŽÃZàS…CZ0XyÝ1=%‰KÚÑѤjCY&¡,k¯;Y‡Õ8îOÒZ:°úú±%+`ªëõLG …à+°=:Á½v¢B ÖCIJ¬¿î¸h\µ ‰Ä#0`°û5ñè%uo!„›KÇ`Ðé%ºûq¯'àþkäB™-ƒI*ëìBÕ1¹ºíŠ…½gàk°;™G#,®rK%óBN ¬Âî ˆ“ý(lr³‰°û1n—éúI„¬cRèØ •möë*'ø|"-z:`°þºc=aà¼*ȹP-I&ÛúëGËcd–ÞkbYh!ä ìÇÕ~Vå=ðè!”-L¬À~íë “]#.®}&û “}ýuË@ŽŠË5é¥pbièÁÚëÇš²…|OAž2¬Eàë®WÊòmL@žD…kË`ɾòúÑ™€ ùBâÄÞBÀÂÚëÇè/ä§ýÚL²:Á±úºƒPzÈÍõžp)aá •cíõã* nåW¿ êÞ2ðƒµ×gL= ÷‘ºô rÀ`åu{ä€Ý?y@'¹”²E€I¬¼~œa°þú½39Ž  G÷á¿czKÄ2¤ÚɆbb?=›T)>3ˆ ƒó×V°à²6øë,Æ9B¨E œ¿~M¸d~‘%„i ê”ñÿ¡,xúzüRNpvìÓhB˜#Y08{ýøPN!üöI¸¨Õˆ`‘É‚g¯‹ U(}aŸ…‚G±apöúÑmGX¨ý|f”cŒjáüõ!¡¼ÝnÐ0eŸÐ"“éìõã~&K¯UóòtÈ‚ÁÉëGýxRpße¡šlÁàÜõc)¹²z÷5›§Ž 6¡L'¯ð$nÔ6‘0SFµpöz‚ žN­Û®€¨L'L |þúUû[^áàèž5BXÄ2Ÿ¾ž8‚;{ŸüegÏ-œ½ž¤ƒq¶¾Ù(bÄÁÉëwå¯úÏ}¢”Œ‘Amâàìõ#“ÓÌ©}) §Md“Érúúõ¬_nß÷L,ȆÁéëGͦ £öÁ_EžA¡,§¯nêÜ…˜\G±`púúuËW¬~JàYðÁ  Î^O ÐÛi6d‰‰nBYÏ_þºÀªÙ gp בlœ¿~Tù0°ªÊš!ØÂ ì ‚”"V;Zg‘Ä6BX¤²ž¿~00 ôNž¡ N_ ÐKò£í"²|4§¶xT¶³×#äôhÃX¨i#ƒM*Ûéë ‚!GP Ô‚m œÀ~ü72/Ê~‘‚#1G±p ûÑ@n.ù-œuP7f!Ô"Î`?ú¤ÔÕ¾³¿äQ<ÚS_IJŸÀ~œÐTŽhuRÄi5#‚ó×wj•Y­ì4ÝÒG›Löó×ã‚¥º´Ge)tŠBl œÀ~Ì_»–d/┚!ÔÂìÇÛ~PRôEÕ ¨-^ÓâöÈA “z±‰òˆ Î_¿üµ1iŸx 7Ì‘A-œ¾žx*Ke¦L”‰oÓâüõ£‰?]ÔÛ‹fZ:ÇA6N`Û ”Ü>Ó\ˆl†` yû±™¦I ¦êaËy{TF„†í@N‹ÛÌ  Î_?Æ+„+¾ý! Ac*-œ½ž¤¹ÓA(”SyŒ d“§¯ØhâÖÆŒ‚Ø›P®ó×>)Ä jÝv%‚ª#„Ø@8ƒ=AÈæ4ë·ÅCÍb„°Hå:ƒý(q+jÊÆNꂤ‚ó×5ptþ©^.&¤‘,œ¾~èkÓàïV‚²Æœ›Ò_Åóׯ4/­ï„‹€*¥Ïbá öcOVÑ{Í£jáö£_-Ú/#DH1• ¢÷Wñ öëÆ¾ºD»dB©<2ƒØÞ§6)¡5"°ÿ# Ó×£¾.à"áÖÄoÌ92Ø„2¿~œCP-ûBHp !Ô ì1’Õ¬-+'¦ØÀÀ6 Î`O ¨ Äù+O D•JF²H„د£Êâ.ýÄ»ÅÌ`‘Ê|þú¡Nµ¬)r Ï‘A,œ¾0 †÷;¦aÁ¥#ƒM(óùë1”ÐдwJ †Œˆ6Î`¿†½*ô§çÑœ¢F²p {üF¨´’&î¬<ØF‹X–3ØgeÉj;B"dd '°Gê†Ñ¡˜9Fµ`pþzôvì–½dRyþVæM*Ë ì BDsï!wSÖ‚l œÁž 8C”þ‹ò¬’!Ø‚žÃ~”ˆ¢y;£™(F>BXIJžÂ~\EÖÖ쥄©22¨ƒ3ØãwAVDŸzLv+š-œÁ~lsé[ûêj#ÙäÁìÇÏSeŽÊŠè#„M(Û)ì¢ÿü3ÒRD!ÄÂ9ìQŸ&QÚ¹Sµ!,RÙNaO ܩک" –‰Ò‚Áì‰8PEp{ÓôRÈ‚Á ì‘BÖoݦXPŒ6¡ì'°Ç<0 únŒ+ˆ‡°bá ö(î ÔRµwé8Ñ¡6NaßÊNšÑíi áhOm‘Ê~û±¯ÌFÜ!4sd '°'–þýV.ör,ž•ãüõÄÀ ‚ЏmiF¢ 6©'°©,ê?ý”èe#„Ú@8ƒý8‹àAÆ­9ƒy‚à´p ûq[YQú ¶!{äÈ@‰pûñ­ìQù½óÀe#‚E(çùëÇÝ4U.i w¦Ä#ƒX08}ý¨þµ ÷¶œÆj2Ø$rž½žhA…ZÿL&4´‰AІÁÙë1ŠLûž,“iùA6N_OÌÀUQÛ:‡úã/a‘Éuúzdà`éÑ?ÑŒ¨xD '¯µ ˜åÒGà«edP ç®KQ$Ò|‘ƒóü•œ›P®“×1H2­¶ƒLì2B „³×=YCÿ>¥•Aqñ<ñ¸éõ2<}ý¨”J—¬˦¤–#„ÿDzáÙëÇõÀWú~§1„ÒŒ Î]©LPIU½„<çÅ´¢ƒS×"3±hã×È®É#ÙäÁÉëÇ/£B£/¢’Â&”éôõ8ß VÅmÈH¨°j„ç¯G¬ñ…àåÊ#„E,Ó ìGK¹µZ/†ÔG¶#-œÀ~,h:yô6#”ô,œ¾08R´×LDfÎÁ&“ùôõcÖŽ )?J”©F±p{‚Pì•ÑF+üU€íXg°ÿ$øAEi‚@‹PæØPæHëÚ#©L²`pþúñ¨L}70 Q"Förúzôvd­Þ Í‹G›T–ó×c*GÿDp AÔ†Á ì‘‚WHu!,9A`Ú@8ƒýh_NVª¦Œ‰q† ‹D8ý¸«lš½ÄC‘G‹TÖóׯb5DÔ¶…¥j42ˆƒÓ×!0ë9Ìá©#ƒM*ëùë ‚&DHD;KA5‚РìÇ#5—v>‘Íg²ap{Le†(7j.dAb#„E*ÛìÇRT¨a5y*ÉZ<2ˆƒØ3š†ÁÞ~U(' jÁàüõ茌‘´¯E™™ŒÞN7¡l'°/9d˜Ùg•Bk„ g°=:¥Ôº—Ð2æDP[@ðSØãâ…½@ÄRc„°ˆe?ƒý8¤®ü}Ü/pÔ‚Áì‰'d¥R7ØE<10Z08ýØæHù3쥙12M œÁ~ô<ºQûF`4‘!lR9Na?,*£m&G báöc9MÃí«î¬ÔUF‹XŽSØH¨ Ž 51pZ08ƒ=1`‡0—ÞóXª4'‚Ë‚Áì‰ATS;ó®X^3ƒM*ç)ìW» V»]Çd(:Bˆ „sØ+p!þBP@KU!ÔÂIì©Çwð‘ÃÍG±ˆå<‡ýªr!Qoæ…g²`p {TØ \DÚ.EûÌ`ñ°\g°›²ž„õó¸ï12ؤrÂ~\ɉÍöû4„Rt„Pç°ç*\ß1—„`¶ùU3iá$öË‘ŒÑÊ™™G²ˆ„sØG‹jÝ¿$ÅL#‚ÿ§²ãì7áÎ@ÜØF±@pþú1ƒ-i’íK™9|d°ÈdÇØueÖ>zêàD42(Ú08=1¨ ©¾2.NF4B „3Ø£2R 'jsð)¥83Xd2¿þcïLŽ$ˆA è‘‚âÆÇöÝôY¾Ø1S­äzyGÝÆÈÕ‰´e«¯¶ÂÔ¥îö_"d5`°öúÑx*a×ñ@97‚&™Œµ×Cû%vw`³W‹@&V^?öñg’ñåì„ i-@àµ×­³“f¤uʪR[ƒLæ•׃”c$ßMP‚µ jÀ`Ýõó¨r’Þ+°a„ì«®ߦ$$~÷À‹»ö dë®?+ »>Nne-„I*ËÚëÇ/!„ü{L6 •· bÂ`õõk)ûµÎHH´©,k¯;žG3=¯ŽG¨²hÇ€1`°öú±Ž_~U¦$Z2`°òúqÊâ‚ë$Bp‘µ&™¬k¯[r²\òwÇ ?þ‹baõõ£á±’ã~¥y)£eP«¯¿ì ¿JÊpGµòT¡¬«¯£ lŽë‚£qEI‹@V_·E~LÒ> ŠO(IŸ2¨(ÛÚë¶»%R)®7š—gË`’ɶúúq¹pök>SbÖB¨ „õ×É#Ðkñ/»ÚPVL ¬À~¬õÊÒП¢r´… ƒHXÝ10VÂ÷Ê»q/CË`˾úúQC ¢ÊK_³«„¶ bÀ`õu›Ê|LÁ~-_V·¶ÓI*ûú뇮TýN!ÐaHôß§† „ØöŠLö9,Ž™0XýpFUJöI?Åéà •cöãw )áךäÚ2ˆƒõ×Kû‘‘¸WY!Z5`°þúÕ\ÁYq)W«w |ʱ»}¦É±BÝ«à­8-™@X…ÝBˆ£Áb×[™ƒœ¢…`¹ûÑgäátuÿÊ!z÷}˹ ûËȰÛW0Ù"¨‚Ø‚’£ ÜÏ4ª¤j!0`°þºczŠø0°“ê”Ö2I¬Àî £ÒkB‡ÔC˜„r­Á~Œ*] ÍŽ±Šöbaö£”#ŠàŸ+9ɦ-„A,×ì–AMæŸëÖ™Ù"$ V`?Vzñe°ù£Z2`°ûµÌH‚òªä¨VeÏ`ÊAk°;'á¿ZØÑBˆ „UØUðD)rí§qH¡&Öaw˜¹¦\¯eSRH¡þËA«°Gr¬ˆõš”Í4Z2`°ûq>ЩÊ>‰:p g`ÿg€Øób.v­Ú,±µ &©Œ5دïÓ(¹BL¡-ƒš0X…ÝJ#;á%üóyÜB&Öa·‰Çïc¦å'ÊD{ƒTÆ*ìÇÂS†Û‡AòáREÏ`ʼûa°­âêÿ™Ò2ˆƒØ£¾×j5¯Ã²À$’yõõ£ïTá¿%áì ë¯Sš)|Oígqµ dÂ`ýuÇ@é”YØuÑ—’ƒ½…0ˆdY}ÝšÓ:&¾FrÈ…]Z1`°öúQKc¡À‡)â–A ¬¼î0ŽçÕe„,ôx’ɲòúÙe$ôv,Åû<`™@X{ÝBð£ øUTªZ6€ «¯ÛTŽÃãz(“P𴩬k¯ÛD¨c¢qù" É¢EP+¯òeéwƒ‹Á€Áºë†£ŽPˆÜuWiÈ$V^?˜ƒëê¶3$Ü[“P¶µ×m(û«ËuØš ´baõõãa×À¸If a˶û±}™™)ïH°rí(V_?n‹“û}Pî\Ù"‚µ×¢~ z"Ý­Z“LöÕ×m&ëQWÓkZ¼@ÚBˆ „õׯZšEÕ5˜–¤ÉÖB¨ „ØM:$~uÛÁÅûª² RÙW`?ˆÄô>š– á– ¬¿~m!GÑýgä,!-‚AM9Ö^wÇôz(;`fÕ–Á$”cõõÃV(UÜJH¢Ïƒš@Xýø32Àï3E.Ò1pL¬ÀnCÙO€õ ANQp¡… ƒDXÝ1ð8v¹üµ³{`ʹöºE Ç‰5ï.Æ’Ñ2ˆƒ•×ëâ¤æy5Û…3‡· &™œk¯;iRõPqÚPL ¬¿~L!¨™ËÕ꥙Pm!ÈÂ쇷ã\FD„¨–Á •kýõcÛi"¼>‰ ‡+̹e«¯³âLlyÏë›YiË  Ö^w ̨È~ –iu rʵúºƒ|\Âýþ!£… ë¯7rר8U‚¹e0¨*'­Àî°%sý¤2/aŠÂÿS9iýuÇ@èvhеeP«¯[|Ôƒãjqáô:…ƒÕ× ¥¾Îì“KXµ dë¯[yÊ' \÷eBPa’ÊXƒý¸éë¬v5¸T„ · bÂ` ök"‡Õï;ûj,-„A*cöcB³<åçËÈàÖ1(€ÁúëÖWÔÑ4¾Î‹—Z2@°öºC€8Bˆ{DÖ]¡-‚I$óêëÇQea7Ü ÄQh!ÄÂúëÇ…œ\ïí‚LR-ƒš0XÝ1:0©¼;½¼Ø¼ƒ€A&óêëÇû@Ä÷,HE¢E +¯;N'ÌŸPΓ¬Ú2°ÿ3•×ärÜïd îL2YÖ^wŒÒê:˜V‡ ÚC¨ „Õ׬àׇQz™t «¯[Ya‡œÍ~TQ-$ÂÚëÇlªÂ~¯ù¦¶¡¬ë®Û<àã)Á·­€(YË  Ö]¿2™Ê¾«Câ¨!Ý[“LÖ•×J™\+½"Œ½ÍÁÂÚ뇶#çUשD¶daýuûK¨Ã"ø@0?”Zn-„A,ÛúëG|±±|ÄI"· bÀ`õu«í䤲ü´þ"¬¢eP«¯ûfK zm ¯€p›Ê:Ie[ÝBÈcl"w hXH A&Ö`?vWxªàšTN±ªj!Ø‚¯Â~‰;…Ë}!Ç­ˆ[ƒXö5Ø9„å·ŒÀ' ¥Ö2¨ƒØÞß(ŠøÙRècÙ0`°ûÑmçåõT–cD=™ÂìBä1ç«’ƒcRæÞB˜¤r¬Ã~DPO÷»°lö+±¯e©º:O@ a˱ûñoTª$•l#Á1`° »e 'LÓ.sGJIÞ2ƒ5ØõbŠkÅ`Z•YË`’ʹ û¡î„SâÖ§!(o!ÄÂ:쇺EÞ‹½Y-„š@X‰ýèÁ.¾bäG"µåÄr®ÃîxÉÊkX¹¬´¼E k°ÛT¶#¬þmƒÏ#JeÙ2Ô•köC±ôwP¸{Ë`ʵ»µ§~<9o_áB=„š@X…݆rž4qÜ¡*hC91°û±wáW,§CÈZ2ˆ„UØé´å¼Ov1Þ2ø,­Án v0ÀW-GX³²e+°[~@l÷ÖÙt<ž9Hå¢5Øí§-Ä}˜‚Í[… „Uع}JÜi!ÈÂ:ìÇYs&½¯ƒD†G aËX…ý¬§ü^hDÄž-ƒ0XƒÝƲCDÝ7}Ë Ò2¨ƒØ-:ÄBr™;ÏrÆ/MRk°_G*ƒ¯.lKT A&Öaw Ç5ínºCØ[6€À+±[‰Çœ­®]Fªˆ –yö£ž¦É"—5Ò ¨¶ jÀ`ö£ŽÀDЫՍ˜!Ù1 Ö`ÿ±wG!ôˆ@ ÿ»÷°ôçøbCÆlm'êqš‚P¼ÛFálòà öcA°DÚ #O“Â&”åöc—K˜x?omÆN"‚ó×ߢ”êÓiš92XT•íôõc&õk¯+=YyD°Éd;}=2@P ÏO&H˜jáüõãVrUß{ZAj9APÚ@8=BH÷þD`b¶‚,áö˜ÊZMÛ©¡Ì ©ìç¯ÊH‘˜~Ž×¡xŒ bÁàôõãଔ­»¢„\id°Ie?=A‚b,oMS±Œ ‚Ñ ìÇPNF ¶¹ýx¾•M6NaO‰Í>ȘRG‹XŽ3دMƒªŸJŽ' dàŒ Î_oeã>(ˈ6#¨‚³×c$ EfQÄšø&’ãìõÄÀ¤L­Í*;Gªdáüõk`ܤü§Õ Ëe„` yû‘É¥Ôä©C0†ëaÊyûÑeÄ®Öjàôõc¹)VoýM ö1‚ Î^?ÞÉÈæ½ÑËDG²‰ƒ³×c&#SsRˆž#„M&×éë ‚”¸÷æ wõBl œ¿~ŒhzRr»ÑBbX:BX¤r¾~tW$zZÛ]53HZ08{ýØ¿\Z­ã±B+|d '¯'¬`ENýTZòˆàÿ¡ˆ'¯G©ìÙö‡&+báôõAPHúJ©@u¬Bm œÀ~•=ظ­”²¢1êß©ˆ'°ÊÈÜ(Zã©3‡ÛÈ@ Î_O ‚„ýƒ@A<götöú‘ÉAÒJÊJ93Ø„2¾~é cå¾ø7­4Gµp{‚àJí‰ @”cý8Å"®}鬅WŒ bÁàüõ æ”õIåEÍ‘À&“ùôõˆ€À™R> IcŒ¢ „ó×1 oív„áŒ6B „Ø @6ÿöÛ!¤XV¡,'°'B`ÉÖæÒÐ\‰G±@púúeí-ZMY¹XbdP g¯G[a˜ús* 1|BÀ›L–³×aœ`CjqÀ¬#Ù08{ýØ~JýÙëC°=ýx¤¥Šd_¬&Hž#„E(ëéë‘€º·ÉÀÌŒƒZ08{=B†–u{íúx-œ¼~4z¥ù·¤ ”>3M œ½~tõÕv–T.#„M*ÛéëGƒ —·þkÌJ¦Bl œ¿~ìœE+¤þsdŒ,#„E,Û ì‰A: &Gï;1ݩ҂ÁùëÇ.#ö4k-n…B#Y08}=Ö” ’ µm ¤àlRÙÏ_?޼;ª!d*Ë !6Î`?¬q·’¦•?JšZ§°Æ…B¨].¤ÑXØ"–ýöËú­í—{ûÈ@ NaæÎ@#º=õ*¬‘Á¢ªg°'œ@®mD3YÐcd°Iå8…ý:SÄœÔnú2‘Fjáöc“ާ–~ 0™á˜ÊN'±ã.Ì}6…JŒ d‘§°GÌdÞžd‘>3X¤ržÁ~üzÛ1h¢F52ˆƒØcÏ£ƒ*ó·[€}d° å<ƒý˜D(a“¾ > }„´p û1’S®ÊíP‘RÔˆ@6Î` …¾Oe"@ŒÂ"”ëöãlXõ›i¡Æ52ˆƒó×£2B@‘ŸiTšó  N_?v•r[œP¦<3ÈM&×ùë1]z!'Ê(k„ '°‰XñM‡HF¦¢®Lx{‚P…Õ›\ÈSgÿeÂØ*BiõS¦¢<#¨‚Ó×WPkEe'À”œçd‹ Î^O ¤ÀTñ;£)@Vá12Mœ¿~<D2² ir™6¡L'°7}‰¼ëJT–‘@lœ¾žBfáWÚ%$ÑÈ`ÉtòzBP "R܃ˆ×È€‘ Î]•4v£ŸQe$-È‚ÁÉëG5Iõ§Ï‹+G›<æs×còO Q<>ƒØ@8y=B``§~Þ=@”|dP'¯ciÎäÑ>„(Nç -2™Ï]?öªiŠqSdY23ƒSׯ"»DS×ÎHf#û?9sýjv$“~a_F›L–3×g²U;˜æȆi#„Ú@8wý¸$[R®m‡R´FL'¯_'4SµÚIŠ0 É‚,áÜõãCàÄh?F™^l#‚E(ë™ë‡¹6dk]¿•®™#‚X 8u=!ð‚BÄÞÛ"¬Q42Ød²ž¼¥ƒ*¦ 00¡(O„6Î^?ŒÌ³¨Ò\”h„ §¯_WALÄ?0 UF‹T¶ó׃ÈÒÐVJK5Ä‚Áéëlj¢bñì³8..62¨ƒÓ×QÐhåL¨Àà1•u“ÊvþúÑqj‘د˜&¡ªŽdáöcÓfd°·Â¾çÁü öc笗»· ‘)#„E,ûì‰0hQZ»¡‰å,#‚Z 8="@rç¶ëT$bþwj´`púúÑl—ÅÖgqÊJÝF²Éƒó×c(d†Q‘5a!lB9Î`OBÁC´>ˆ*ÐF±pû±hÓJœš4*ä9±§°µýÐêývE…91pZ08ƒý¸Z'.íœ/zfúÈ@ N` ȃ>FRi#ƒM*çìÇQ ¯6°_fÄ#„Ø@8…ýHe-k_³Ì‰Pç°_EMEó¾ËÈÕjÔ§±ˆå<…=1ˆgé½È´d$ 篟+н¯­PÒð‘Á¢ª\§¯™œ%œMV:UŽ 6™\ç¯'"©Hm^_Â9k„Pg°Gq—@ÑV<:C…¥ç!iáö£¸_™m¹‚ˆ¤ÙA‘pû1/.šaA„‘úÈàÿ±Ìx{| $Pi›M eÄ‚ÁùëÇ| j(7í,fs ,R™ñöc믧H¶at芢 „3Ø]Q¡*í‘@Áf:B „SØ#„7!íÆÃ“f‹X¦3Øc$(S»m­LL42ˆƒØ3PWþ&‚CX†ÕÈ  Î_?.ú £U;™f”“=ܤ2À‡4Ñú MS5ȆÁ)ìÇR©¨ˆ>"h˜"4B°>‡ýhrͨ~2YÉF‹TæSØ;ûìÞÆ4 (ƒ,Fµ`pû±ØËP´U4KynÁ¢‚óׂ(àŠŠÊ$n3ÙäÁ ìÇr,¦ìuåT.!lBYÎ`O„(i¿F\n#„Ø@8…ý˜ÊQgõ¶êÑ4‚y„°He9ƒ=lª2kK¥L‘æ'Ó‚Á ìÇ&…÷!MD7È‚Áùë‰Ašes§œ¡ž#ƒM*ë ìÑ„9Fëþ儨@8ƒýÇÞ™[K…P0#û’bcŒ%šç|\"h£ŽúJÅö:/nœåàXŠ>B¨ „SØ>ø0íÒÈ€PhŒYIJžÁžˆC’V´1Íte¡‘,œÁ~m"'ÖŸu:Ž62X”•íöC`Weú‡‚1ÕÈ`“Êvûõg„(ÔÔ• ó¡6Na?>Ôʵ¢7¹°©¬´pûq>ªÈÛG{ÑA‘p{´FAÖkšââ#‚E*ûì1 JR«õÁ{1I bÁàöã1 äöfÄYöx6¡ìg° ,¨?. T–£42Ú@8…ý˜4þ™F§‚l œÃž h¶Ì ¢l\#„E,Ç)ì±°¬ÑÞ‹ª”h$ ç¯Ç§@ 5ØÛŠ»"Vµ‘A-œ¾~ôz…Eë‚W ÷ôÑVø&“ãüõ¡Âõ!!KíA6N`?Jšâ½Ç%(sN·„<ƒ=A`ŠŸU.he5BXÄržÀžT;ŒP‚ž#ƒZ08ýÚ_©ÙÎ×)Rê„ hàìõ„  Í­ä¨"¦ d“§¯'É€®è}™6¡\'°_ûàѾŴ(Ìd!ÄÂì &GW–¨¤Â"•ëöc£Q¡s6m§‰<1HZ08ýÊa“&,Š$3F²`púúµÑÈ0²i1Í,RYðüõÞ†…iÛàžâ6Bˆ „SØî_e­jú”M³r„Pç°ÓiL"ÞÖžšdÌOBý=–Oa?.å”sq[4˜HU:2ƒ3ØÍ^(¢Ö¿ÓÒYcd`g@'°GÍ ¢I*J$#ƒM*ÓìÇASÒ6¸¯ž^#„Ú@8…ýh4RÍÒ~¥E1yJeEÚ@8‰ýظ‰š•m›Îd ç°G}š ˆÞÛ#%ÑG‹XæS؃û\Žý²op¤ÕÈ  Î`?^²8¸• ÒâlR™Oa ›ˆäçVŽ#Mˆ6Îa?VÏ2Õ·´\FfZ#Ù@8‰=A €³è D>BXIJœÃ­Q‚!ãÏYÙ4¦Ä‚Á)ì× Aâ/ƒ‚dAÔ‚ÁìG°gõëÆ9oRYNa?zî0U?Ì@ŒÍr„ ç°áÉœÚHˆcXl@Oa?ØG¶=ƒQ®Â#ƒE&ë ìñ)0ÈbþºS7WÍ‘A-œ¿~T•‹úöŠ‚¢Ò¨‰Ð‚Áéë‰A¤”KïÁNªà‘lòàüõ£ý×ËÌ[‹«òÂ&”íöã ĬÚ.É`ĆÁ ìǬ,c’´—Ó4%œ!,RÙÎ_O Á­Z!Ǭ¤lb ´`púúÑþë"Üo´˜§Š dÁàìõhíÈâ1 1{0Ø„²Ÿ¾~…22ׂ'q bÃàôõÄ€ PT¸—DRe„Pç¯ê4 E>¾ÂÙÑy‚`‹TöÓ× &í÷AÐ’rf g¯=î? î¼,1G‹’rœ½ó!“µ/UO•lB9Î_?¼ZÙ·¦L„˜6B¨ „Øaèo§J”2BpÚ@8ƒ=A`ƒðô¾È¥Bk„ ‹H8=1©"í.Aê:2XÄrž¿Q@xp´µ³,U5"ˆ‚Ó×=ä(¨ÑŽ×•ˆš 6¡œç¯grX¥ª-W •GÇcРìB*'·ÃiX¢Ì#Ù@8ƒ=ö¸˜¢}kûÊQl#„E*× ìGi_ÉØZ*—G$ bÁàöã͈ÔÂúö J‰Ô‚ÁùëÇîßLÊø7Ó1r“Êuûñ©¬ÉjípšJ ËA6Î`?–ÿFêB¤”UeÅ3Ø£® Iû  ÿ?á:Bø{(+žÀÁ Ê4ZASÃÜç@¨ƒó×#3,iCQ%22(Z08}=2PHq§~ÝÚŠˆF² „ó×~»B'ïH™e„°Ie:ýh¯0æôžÊ)Ê9Bˆ „SØþ Á¨Öì• ˆa#„E,Óì‘A‚gßâ"‚%CZ 8="p(«²~%'J$F²`púú1%[&½¨ì%R#ƒM(óùë B¤òÀ 2IËG±p{‚àêVѶ q¨Žjá öcbœ3üçÁ1'´ˆe>=2p°§ŸOrö‘,œ¿~õz¡%·-Tj9"°¿#ó×1Yqi-–#ƒM(Ë ì‡®ÐTçʈYe#„Ú@8ƒ=A(.ä„bÓ1˜6NaŠÉ´;£4$!È"Î`?ZOI¸¯+öÊ,bYO`O ªÀˆØû*xOy0ˆƒó×c*3x!ý +S†ÔÈ`“Êzû5µï‰½»LHFƒ-´p ûÕýË”Ü («¦Ždáö£Ë…,ÂzÛ#¹KŒ±l§° ùÑX¾g*ŠG±`pû1”ãŠ\mó¯ºcÆÈ  N`?Ž×¹ E»)«‰¥51ÐM*Ûì×—Dn»œ^[eÃà ö«’cLÑ¿ k„` ~ûÕaÁ%Ù;,„±d„°He?…ý:"ÌÞŠû\n<"¨‚Ø‚bðB¡&°Kqž4£ƒó׃$H7ͶÆEÔŒxd ›<8ýø/ÒR÷vÖ×3ƒi„° å8ƒýXhTlÖB™@ÜÜG±p ûÑí…!ýå´ÊIF‹PŽóתr…£þ\›› N_?šàCóà €Òed g¯-.R?-…12Ødrž¾~¬_NÖˆ6´o©¢2Bˆ „óׄt(+Ò¶úW4%k„P'°GM`Umù¯Raޱ‹XÎó×Ï´`òl÷¢J4IG²`pþzdP@¥®m@ÓÌ|d°(*×éë1Ð8ZM™¼f›P®Ó×#tÒú¾ž ”Zò¡6N`?OÍÙ³U•3°¢&Ig°'ÆàØ*û Y93E œ¿C9À,óà ²çDÈ¿‡²áéëÇÄ8‰·EˆB$#ƒX08{=1°„rËìë—C8F‹L6<=*££éÞ.ÑæQå¢ „ØIMÓA ÊÐG²pûa°‰½¦•b ¡Lç¯Å4dòþ©ÌŽBNÅ‚Áéë‰A0D¨fW.žÔ‚ÁÙëGשK¸´»Ê®2™SÇM(ÓéëÑV¸«JŸCÀdȆÁéëG»Q6c„€(X9B°>ý€è”mõ¯§«Ž ¡Ì§¯ÇPvp"ìæT$ØbdP g¯±³õ!Ù´2-œ¼~Ìg&ceëü¥ÈÈlâàìõø¬ $IŸ—SAv±Â&“åôõ㦯”)÷‘(Åx< ±pþú5Xä½ÛN«f‹L–³×£½vHóo%-<‘ddÀ´`pòú±Ò Y¾ïE@…ê3Y08w=1 f²ê“ –i:2Ød²ž½~¬2ŠBý¾d…sbáôõ£ûš"äÛ}- …:B¨ „ó×c,8§}‡Å "œfw*‹XÖÓ×iñ4foÊÈÌ%td°ˆå[éõZ\ÁnL­–V‘.‚Üü…ž¶(cT뀧D1•eQ×·« <öÀ3JûL‹¬ÔlÞŒìj)ÞuJè )è#„Ú@¸£ ‚`k[£C¢ÅIµšžÁÒ2àƒÓ×íw /‘Êv"ô–Á"“ Î_ËdAù[ÒDÄ'ÊÙ2ð ƒó×íá4ž° •õâl-„Ü@8=\•³ŒT'í äÿSÙàüõTДL,ãN)XZ¼`púº}’C ¤öz©!¸· ôÿ ðìõÐü뵄 ÏE4Z›TÆó×ÃB" ,Å4R¶è!7N`w"pò÷K@xj­®pÀ ƒØC<:ea€Y [¼H„ó×û(MfùÑv b-ƒE*ÓéëŽÑÓð¬mFê™-_08{=Ì;5ÁâNS „M(Ó ìáªì¦TV¦‰“¥t 7 N`3ÃÁëtðhð†Á ì¡Ó‹Ë<#{ŒB-„E(óùëáY”}C9õ)³Šµ |ÁàüõÐéå@õpÊ É-ƒ\08}=ŒX\~ÿEêІ2mB™Ï_w_ª!•!äLÂŽ-Þ@8Ýþä©Rj-í£dD Aä öpETË29ÁDÁ´…°ˆe9Ýz;{aì?î,’Z‹X¾yF}"ø#FâRUæ€0ï0.œ¿®ÊDá\"ˆqJÏ€7p{8¹Eù0’°‡°Ie=ƒÝA}¬šY—¦±1p Á7NaueE!-—dÖÂ"–õ vÇ@奃Xyµ/žIÞ1\08ƒ=L"WÕ2½ÂÍ¥eÀ g°‡½Ê?»¢2-ÕZ›P¶3Øm(Ãc³ºÄÉ”[¾p » å|Ìu<(ƒj !7Îa·‰/‚Kq_ ÚTÖE*Û)ìVÜéƒñ2âŽ]Ì©eÀ g°‡Ó©¨ ÖD°tæ–Á¢®ì'°;ŒÏ "§1¶ 6©ìg°ÛT–âLu¨T¸?£Ü@8…ÝAˆ|À¬ßD€îÜ—r 7Îa£ÌÈÊ]Yz¼H„3ØÒ‡žnes‹yXË`‘Êq{ø ¿ÎÈs¸EËÀ Î_C°C@¤l”polB9N`ó+ …J%'ŸD˜u7Î`K»RÙ¿'£|¤)à-Þ@8…=,77ýN"‡‡dØBXÄržÂš°Uذ0t‘hø‚ÁìŽÃ e·:ûA€[¹`p{Ø haõU޼áfl29Ï_ÛA€¾Ó6ã™R$·xáv!å1§zí¸sgÏ¢®ìp»ƒÀüœœë=MUˆ½…ðÿPv8=lE€¤²&Ç(úHȃó×±§`V—8fË qÁàôõ0ÆȪ®²>’7p{èƒ7rñúÄÁƒ[›TÆ3Øm"Ðså:Ú+P0[¾p »ƒ@ü˜ ´ìÒ 0vo!,bÏ`í¿‘ôíõ¢'ÊÔ À‚ó×m*û á´2wÖ€­%À '¯‡íìTÄ)©¡dË`Étözh;ULþ@0~ –„-ß@8}ÝFr>Ĥ,ó+‚()[¹pþzX¤é?³ P;¸e:=LÛd Ç¢+0“‰Z¼`pþzxµoꥰ¯f=ý?>}=Ô2±¼MsG`ilR™Ï_·ìy*q}«îÔBn œÀºà #³¼M# é n œÁ&—¡§ȃ¢…À‹H8=½MK5)ØF(’-ƒE,Ëùë¡û7I$JU9¸e°¨*ß`¯iq!R݈½¸ãMȹӡ÷—RŠ¿s m!ðÂéÓ?ø@Àg¤š=„E èÙÓAa RYoMîÄÞ2ðƒ“§ÓH)'³y.†-ƒ\08wÚ1|š\‘g*sË@6©¬'O;OYkã©f·xáìé LE±ü0Ò#[º€`§O;âL°îE0 aj!,bÙîž6”XÄK]™Uˆ²E çN‡ÆÓT3®«)”¼E ¸@pæ´CñœÐ´TöÑ Z¼‰ƒS§Ã Á1PÊÀS ÉÂ&“ýÜéÐã¢$üüÌÍ©eà×ú;´&0ÇÏ\/"‰Â"”ýZ[eÃé»ÄÑ&´ÚÎpÁàüõp?0wöÒŽÞ2àƒÓ×ê}T"ªK¤e° å8ÝÎᗤߓ‘å#V1k!ø ìáK ¤ú>ƒ[¹p{€Ì”uzE†v|Ëq{ZŠ ‰ß£‘¾p4Ö–/œ¿0Ô±^.Ö3XT•óôuÇ@ã¸{ê•((-ƒM*çùë‚ðC@«FI-„Ü@8ƒÝA`y©X 6w7ÎaOÕ45ô¢Oƒ˜%[¼ˆ„SØíE ž:HÝ]—j¤-‚ÿ§rÀ ìiU¢WidÚBø‚Á ìavE&$•_aË`Êg°ƒmhµÏûîŠÄ „S؃¯0G²ºcœYÜZ¼p»Me{)RvŒã#l,BO`·gSx!™ZÊ’Z"µ |ÁàüuÇÀèP}—†9ýˆrAàäõ0‚<ÐUkMYÛÍ ›DƳ×Ã5™1Êðe Lào œ¾î pR%«MF!=ƒM(Ëéë6ü2}~F)O…“[¾apúzj­W* ÄA‚Z¹p{˜n‡àR7×'vx‘Êr{¨ã qÔ ƒ¨’à-^08=LVCS—ò3B!n,jÊzúºc`öˆ€´®ŠNÔ–Á&•õüõூ³O ³‡'°;æOS¾%M·'H­¸Ü@8…ÝžOõ%"øÏðeó/"á v[ÉɧÌô½#øS&vj,bÙN`¥RË¿(»†J‹ÀÎ_H¸®¥a÷–Á&”íöô:âÁ„…aAqá ö0k\Á F³Èo œÂî D>Œ”¨ý×à©ÜBX¤²ŸÁ&`+9Ta‘Òðó×EÔr0 Eçhä‚Áéë¿ö®mÇ"ˆþŠ/¬ä-ê~Aðä×EâHR€(YPàë™iÛØ=î!€%Hí‡u¾LŸ:]55ÞÙáNäàH¼ü/EIìcø519nõ땘,RìËG¸›Ó¹†„[{¨Ó\ÜÑÀ$"’`W· öˆ PÉòEÉ(™¹Æ$\–óVÀq YÒ !­Ô†ÔÜê×#”!Ô+—!÷ÐñUZÐÜÊ×#Ø¡¸²÷Â5(†È5áV¿^ÿÒ#v$TBaQÙ„k¢rÝ Ø+ÿj¿´ôâЇÄ5Ü Øk_3â°å]eÆpÑ! WåºÕ¯W.ÓÑsùà_36qt·òõÊ_äˆàâB…º)+(¸¯GAfšt( †ä˜ƒ+Brá­z=$Á ©|° +‡Ä5Üê×#ÂKŒ{ꄺ†„/(þé‹öãÕãÓwûŸÖâË(x†mA’T7»!ë s¶mˆ"ŸãT¥ÍÃ9™¼Ù·lÇi×»fêù2õ•©rŽí6é!©',BÛ¬8„d¶«5b å˜[$§ù|3{Íý”žÎ¹m<\.Ìo›iµ ª¡D„lÓy÷ Õ4l&yÖFçžÜk‚XŠ|† íMý™ uànÍ0Ï0³6‚ž`¶œIëîbλ¾±s¨v# VP7‘ôp˜rîúSk`¿m„ÑêýÖD¸æì™ÂÅ4P%íõøñóöúàÔ·.;Ž2’NwGð\>®g&C «Ô¹ê)“:Õµã”Îú&ÐÐŒ:Ná„t²;‚çº;`Ív!!jB<ω”u/Îzw<ØËªZgjtZÈ' õ°X¤A´¤:oî!Û€J#K[®î ï®wäÝ¢ó»w6„äTd±?óºMå˜U•ÝéåÖxÎTÏØ<4”„P¶Z"ÌÕÐËR=¢Ò\`6ÐçC‘‰8$µ÷ !f¡Ó(Gî{É"©}è>Yî>g¤,%’wK14®íã‚y¹7óõÏ/Ÿ}öì—g?þôí·ë´Ò«·KZ¿þùéé‚ÕFä_Ùz#îVi  ÃòùM| )!î¼±tB=°$G–ôÀ’ïY³Î'§„6’NÖ½¨°Ï<‰›V]ò$´¶é§“’ ®†`A©÷”ºÏ?}óË4ê:£43 keepassx-2.0.3/share/icons/svg/edit-clear-locationbar-ltr.svgz000066400000000000000000000107741276304217300244070ustar00rootroot00000000000000‹í]ms"9’þ¾¿‚c¾Œã@(S¯é™ØØ‹»¸‰ûx¡°ÙÁàܶû×_JU T…yiÀîÞ]Ú.¥R)éÉT*3ÁÌÇ?>ßOZŸ‹ùb<›~jƒíV1̆ãéí§öo¿þ©ëۭŲ?ö'³iñ©=µÿøÓ>þ[·Ûúy^ô—Űõ4^Þµþ2ý}1è?­ï–ˇë^ïééIŒ+¢˜Ío{W­n—G.>ßþ¡Õjñ´ÓÅõtñ©]ñ‚´ñçb0»¿ŸMqÈtñC;1kæ‡Çù$r ½bRÜÓå¢zìƒÄþT܈y±˜=ÎåZƒMÎùpĬiÙO*2õ$ö»ÌÑ]¼L—ýçn¾&ÞͶ¡(¥ìq_â<Œëúy˜½º˜Ø»9;ëéÿ[XD¹×,Ä´Xö~ùõ—ugWŠár¸!f¥¦4o]wÓþ}±xèŠEoEãYõÃå› úؼ+Æ·wËÔ?µy«é¯×Ö&…*»V27»´:3ãÌ gƒ›þ‚—Ý»›Ý=þù}XèÞb>¡«7œ.ÇÜñ0,z³ç—ÛbÚã©&ý›IÑë–,xÑÊ»e¡Åp¼ì&EÞÌýÀzÓŸ ÞÏ—|ѳÇåÃãòÿŠçe1-WÊ%üÊî8nMÌϳù²;O žºÜO\ó”Ïv.¾·}™Ýùr"¦·['z>°ÉÜÚù²êü‰{?‹Ñ‚Wº -;¸‹m‘'ýó¼?óñ‹´MqƒÙdR Øú“§þKy-'ª]Å.–³‡ê9¨eù2a@±Ëgóëd|}ˆ¤Ûäxùr ÚiÌl4Z”ë06$i+R;1ÅW ¡=omï|[±:~¾;€<³=™#ìq¨Â¿¯µG —`O®Q "Rªv,›¼Lµ$”ôR„7,)Z|j‘à_¡žŒ´Þ^½/”欖i|§»~’üŒÂ{Ô;@F€!¢ïÑ4S©d×Q'«²½9¬íÉf›q˜[Ø9£ƒhyÐt‚HiöW }rhš±YsÎÝu•ð΃’XtÙâPHRKZRÏYܽR }Gy¡@:mòhÈ÷Ë©U´ c²h¨É;ªñ¦hÈ^Ô ÉéVèef…à¡VRÌÏÊ<ñþüvˆ·ØáhàÓ9àäñå CÍÒïù>ådŒ>¹¨ÆBìÉŸrJEµý³ùãQŽÂ¿P<Ù™%¼wÔ_îY/H¹<SL“MbÄ-ŒL©„–NÂQ-ha¬AßÁ':«á¢®Â÷­¥ÎæÅA(Ê’‹{M­®6(HßÀ’ŸùI×Ê (œ4Ùýj­g¬MmcmeÇ „׬µ‹ÆÎ`h§]Z“Yœ—yÂïwEzú‘Þ;F <]"|PB*"äÍÕb#¤¶ÚäŽßà¼+@Èkê¡“Œº<¤Ü ‚ÆÈ”¡¤à²ç‹Ì.”P®T äÎfåa×CÑý;kƪˆ°'Ý/°ŒJÁî fU#½œÂÝN…)•;DŸ)¬žÈ{Ÿ'ðgÈ9–áqÒ_?ÆšËÕY”«Õ” By)5ÁýjÓÐï»7êûÉ%ý $a.\ÒP`v~¹,ÔA ÂYô”Å: „´*g¥É;ÚÊ;g¢8°â(Y ¡PýðdÉ@¨Ã٪܈M‡HH°Î#÷x^§Šû>•¾+ÎÞd8‡+ßôu˜Á*oTsƒu”±æ([< heÀ1¼RhiÃ9îD€µ± =ck…”V×QF(‡äõ72™(“ª¡¬…Gém3HÞ’§ZäÞäå¼ gN*8içŒ=«@z§CÙO!iG¾£…$ÔÞšŽ"Úy`ìµ®´úWjþCƒBÓ@Üdˆ¶òŽ2Þ qCÊ8Xã½ ¦mÉi²lÚ‚œÕØ !¢4–M\Ke}XŒ²þêíâ-å“¥2ájã¼³¶"§¿ žÀ8“ø_"¿²Ê9Â5ú³QáÐãÍEî|)5xµçÎW¾yçŸ2W‡ÌjÞ&é&d„¨™–†$è-ˆy/Ñ¿'btÄjˆ)­‘@m12ë½ñèjˆ¡3Z)I[ 3Fzkñ!#u ÈL2åÑlƒÌY#QÕ!³Îy”° ²PRÕ{ ±ÁdüðßýåÝjüª½ÿƒØ+N¥å†ÇyH²6ÿ,|:Ë—‡bÁãƒÅ zÕ–ýPŠsd¦þg+DB¦ƒ¾õ3?ja¤C݉#¯,1M £I1Í e )Ë4G‘ˆwvë¯-ÐÍšŠÆò4rè0'§t¤éXŒ²VxëùMZ\Fj’Vâ†('‚DkÓ”L"ë/#- ¤­ˆ?§=0ÕÅb¤M{ešgMƒUÜfA¨¡|æñáNu’dh`Èy¦¡ÃSœ Co¤ÍãËg…<<±" G’ nˆÄ0»D„jJäÙ“R¾4Kõlb“ëÇùäÇzT¡%]}½©j_6ç“‚­dú¥˜Ï¸¬?Ÿý›Eõ܇ïÚ¯šA,Ÿ”ëùìq:Ü$þ}6žæÔû1[ûdÌ¿®õŠ6ì/îúóyÿ¥š#Qãû‰së› +Ë¿lVË3”)› éI¹ï{fYà$Ã{g¼Ýqx_>ï¿|c…øÇ^øZ𸔢µþ}1ü<.žÒw×Üô×Ûèßñmxz_UÇÍl>,æ«._YWu™¦ï" HòÅ>› ä +–rÝõ8Y_Õ1»ù;[@­'·’°ÆõlRlíç`8{b@ê_f³û€“G¯ÑA½;èÆ€@§$5:«Ï£ßìÎ÷l4ÝÇÒ¶žƒçóÀ0é¿ aüÅdßÇ¥#§qóʆ ?a•%”‹û‡#¿™ 7è‘7¥YJƒþÂôLz©Ê><õ „qÝ››Ùsš>ëOòîj/FÒ+«­Y£_á^F¾ÒÇk&¹ H°¤Åö%Ǿ¸æª¿rCÙžVLJS6·ç—@˵ÿNz šÇiöøpÏ©så Výê Bʺ̹SÆåœòmcCÊÒJc„Œ(·]™m-¤&¥(¤ŠPfÛF U%Û~•lW$kJ Ú¡CòjSåÚ ˆ”¶¶c°U®hq›TfÛI˜!c¶½ž“)®L¶×+é*ÚÏi1¯Ö!×N $SmcËFØ ?¯£Ë\:R\Ì´L™sÇydèeZ¯Ãøø¬0O¬J 3í$2Â3í8%ÆÙ×êøÒb5–g£Rß]ž–É‚Ê]¥÷±Sh´<öSDÁÆÄ É~¯¸å'Ø­OL¬š9ä-¢Ý¨š9%Hk@·Q5sZX/ÉÚ¬l%Õeu30 tz³n6UÌÊViñ6UÉÒÀT%K3l”ÉÒZ²:YZuª“¥Ý¥:Y ¬•Ií¸(Å«fA6ÕË*7c½Mõ²äzªšYjǺY’êfItª›¥é‘W“«çK«á’‘4´uèÉÒo³D)¢öf]·DjG»ß¬Þt¶Ð8¡«³UwCç¡Q n\6.UÞõ ¼‹¤U¡•¬-ê5ËÖ®¢e³º´Ã)Ÿ VÌðu§Ïu·pó¸\6¼BtùCE&ø·ãŠîÛ«íhT]¨e‰*b´”ΜZ-ŽBÇ]}k¸CÀ}¿‰›&¦°ŠC”6Úk¤¹óó£xRAaÍ9Eß|cè{wú®é`¬c#Ș¯¼Eßžó-™ø¬S;Ÿùh¸oMj#²êÝb5ÿ–î” ¿½Ka  Š=m¼áëqƒi¶ÓèLX= ˜s± ÈÒ¾€€__ôzùO ‘˜™y‡Øq‹ÓጠB+Á"E-BÁ¿,2E æñºÛ1}$¡¤rnEQ1 %¬²S‰Öm¨×jÁµ®óZ×Phîë úZæNœê('¼Õhƒ­iÂ&KMÂjc y]§µÂI/!ãôJ8Eqx’IFð`‰.ÞAZwœÚWœÄx8 q‚4B¹Pï…DfMÓg¬i¥IêjOùüF Ogs÷¯åÌÑÂr“¯Œk«N§s£7—2úý>Øù6Ù°ÔuÇðºÂ{Máõ6Ðä†*E`ÐÙÌJ¼s67}%Œ ¼Éø2Þ ;Mr3›6R<‰63¥…CfÎy1kM®"AŽyÓrÞ´Þ$7í-[Cv¶à°í>QÊÙ¯´ k¾'›†l‰…3•’Ák[³Ê 󕺀’Ó?"–7ƒ×ª¬²¶¥4傜tÁg«@Ú²‰Ö˜ϧmÌb0H¬TˆišJãJR¾ ¥Ë¹Ó£¶vµM2ò56¸íQ`ð+5íé#,@!µ$¿ Ê6UZêU¡×¾ÖÄœ·ƒ}¹0MÁ?„> ¤XR+>J /ë‰Ê íZYQV tÒi*O[Ë›r`lÇQ¤„‘ÖЊR OÚP†s1M3"EWç¢$ݱNКˆ%g A;ÒõpÑ[§h3\´R*M«pÑD!ž²pÑjM´.z°š6ÃE[ŽÊÂÅDŒ¶×„m»:·ÛcÝpÑ´ÂýVÛœ‹T-ü\¯µѤ²)¦§ÈSñ6ã³ô¿H±R¿ì‡²hþ[ÏJ¨qð½Íðµ]LÅ?òŸüëÿü³É•lkeepassx-2.0.3/share/icons/svg/edit-clear-locationbar-rtl.svgz000066400000000000000000000104661276304217300244050ustar00rootroot00000000000000‹í]ms"9’þ¾¿‚c¾ŒcA(So)O÷lÄõÄnlÄ^ÜÅíLÜÇ …ÍpÛî_)Qe¡*švÏÜàž°*•RJOfJ™ f>üåé~Òú\,–ãÙôc„l·Šé`6Oo?¶ùù¯]j·–«þt؟̦ÅÇötÖþËúðoÝnëӢ诊aëq¼ºký}úërП­ïïV«ùu¯÷øø(Æ%QÌ·½«V·Ë#—ŸoÿÔjµXìty=|l—üó‡Å$ò ½bRÜÓÕ²zíÄ>Hìƒ |ü¹ÌîïgÓe9]~·Á¼Ž˜;-æQE&ðÞ÷$ö»ÌÑ]>OWý§n>”׸m(J){Ü—8ãº~š0_]LìÝ”ÎèÏù¿—A,g‹A1â‘…˜«ÞO?ÿôÒÙ•b¸nLSŸäÖ52íßËyP,{=Œg…Wwl Hññ®ßÞ­Òóxø±ÍûÃøP‰¿~±!)Ôº«šs³K›?‹ÏÅ$0df—O6œ núK^zïnv_ô†ýÏãaƒƒ—ÏÅp¼ê&EÑÌýOxÃíÅj"x‘_ò•ÌVó‡ÕÿO«bºÍ8$PÖÝqÜ 1Ÿ xšÏ«îh<)‚øjóñ”QZ̸1XöfOÏ·Å´Ç#&ý›IÑ몖½KOo· zÎÙ¼ÜÚù\uþȽ†ÅhÉ¿K…';¸‹ Œ…þmÑŽÙ­"msºÁl2)¬áþä±ÿ¼Œ²ªyò¡ ÑÅIã´ËÕl^¶ƒjVÏ$»<ãlqýŒ¯"iƆ6^=_Ãí4f6- ÷—¤ÆIX–o·z§I“Û¤ÁVi ^¤}èåÛÞ ã.”¤kïC¹csAÒoEj'£øªa 4ñÖöÊØŠÕñò~Øä™í¼9‡*ü¼ÖÁ»ã‘ÒŽ·Gðþ a4þ@“Ò_ £MŽv´´ãa´êÍ`Dïô[ÁȲìÛÁÈÒèu0>ãÇv¯ðeê§@ÖFHo éö 7lçd"! IR/äÛRÖÏ‹þtÉQÑýÇö}µ?}/; $¢w®Ó}i1xfK¶Ê 4W¹~™ŽWÖ=,‹Å?ChôŸÓ_–ѧ¤žÉ]ß- Ž<¿«¹˜Ø{'$ˆÃ¨þ¤æâc[Ù—YFÏ|ùcz|â^­„÷äÓÍ1È™Óñ›Ï×ÞÑ97¿ß’…µ;È )¨¬¦ÜŽš¼ê¤ÉûÃÌˆí‡ §«|€Ìt@Çáþ†ãì!Ø¡õÒÃr,£ˆÒg`‘ÙQàu3;0ÂI>3§4ï~@Ëð#‚áHä¦GAÖ^l‹Êiu-¢?ÁO =¼]èìÕ[†ÎÞœ-tvG˜BºtpK-Õ¾#™ŠJ°€¾½íl1' êÇðwãUÑÔzsM 7µu¬,ùYGê÷49ð1òîQvn§œØé$Þ—¶&¿;g"¢>™C\›Qß/ }ž“doþ›¸ÁyÚ°ûöJ7’JÄìB:âòÚu³ wow³4ÍŽœ\M@rª}žÃh¿M’3í³FçºU<¡—òø‚ ÿ{ˆ^â± &i9ŒÇùõ^œö»BxÓ£ÐHÓ>×ùÑ ”®Îò^#t@k­ëiáŒFuUw}ԤΎ ôÂj©]žW5yG9o:¨ ‹€®çwÄ—þÀ÷’øüïEñÕÿðMØœ_»"Yg<¤ð’,ÚßòEF1¾@Bƒ&¼Ê"s#¹ß;c²(Þ2:†dÿ6Þ@µ:…ï %·¥#2µ:*¢PHš\eH€´Í ô$¤v’ü%¡Tö@y²×ﯣڠ•°`4^í+3?ÃQ%l̸ßNe$¾¢”bH8ОòäCj핪¹e“—©Ö %é BŠ ÃS Ÿž¼à_á!´Œ´d¯ÞJsVË4ÐS§ûÒ’ÜFA„Ú`¼`ïߢi¦RÉ.W÷Ve{sXÛ“Í6ã0·°ωzsÙ-æ2ÐÛóÙ pL#P‹.uPHB©¥ RD§!Ã-k%1EBtÚä1óB)O j¥-¼±YLÓäÕxSLc/jLÞé¶D2³% ¨sÏ@™‡t†Xhš“þªàpY§ÕhX»¯¦Â?¼@cdÊRpYïðf@(aWòr§{Xy¬{¤rÿÎòöDû'lÆR`8ÉvÆ ˆª@^Naˆn§ÂTžme «§ÎDyÊ|Öü V9®Î¢\­. \ФÔöèW›†~ß­œ PxœŸ^tØ*¡¦#/Ùý‰ç²@5g‘òD(Ъü½Œ&ïh+âÀŸä • òÖ•/[øP éx/$XGÈ=„‚tªqïSé»âL&ÃÈ2Hu˜Á*2*ƒ¹Á:ÊXs”-´eÀ1¼Rhiƒw"ÀÚXÐÄØZ!¥•Æu”Ê¡'ýM ìÍN”½ª¡¬¡$›Á ’·D¾w7yG9oÂ…“ DÚ9ã(”ÜHr:TèzíîtˆŽ¼S:ÒÂt®c­ KÊÓ&-.#=z ¬Ä©œ­M"™ä-9^FZH[?¥=0ÕÅR¢M{e±¦Áª ~æ‰PCÙþÄm%œô2<`¼#¦¡C+JÂÐiG‡ñ±­‡'VÆËyé nL‰AºD„R$²ô¤”/Í ;›Øäúa1ù¾Uhé¯~½©Ø¾~\› ä +æWÕõ0Y_Ù1»ù[@­'·’°ÆiRlíç`8{d@ê_f³û€!itPïº1 Ð)éå'À 5»†³ÁÃ=M÷am[ó§Æà‡Å"0LúÏCÅi²¯\ŠãR‚‘Ó8‚ydLCП°ÊÊÅý|Ɉįí zIäMiž¥Afz6ûZ•!|x(êãº77³§$>ëOònµ#ýW8ª­Y£¿ÂÁ"P~¥×ìå& Á’–Û—ûâšËþòÊöT¹§0lnOÏ–(€J'GËP­SŸsj®™Ê-›Þé÷Ū?ì¯úÉ5+Š«–¾Ž®ÿû§¿¾ädƒÁõÿÌ¿¦(=0ôof pSò ×á,ë¯~ß³„¯(ûóÓýäC/udÌ &dÓ.ŠõWmûÖ6þw?ƒzÿ\qÌÿ÷ dós=½r¡UœöÁÕ.ãÓmM‰“þM1ùØþGp˜4­rö0¿ç ´t©ªX¹ƒ’×#S×”¸âúbKi«±!s Ù™1B®“Vn´-¤öJùqÁ:i5J¨2g¥*g-IÖªRVÚ¡CÒSS¦¬ ¼WÚÚŽu–)k¢ÅUl¼ðë¤5Mæ@Ș´V2Å•9kµ2®¤}J;ˆé©)kÚh QÌX]?„Ír»ZŒ^§¤‘âb `Ö©k”#C/ÓÂxÆÇ¶Â8<±*)LLXÓ”ö˜°F‘¥—êHùêþl•úÍe«i™<ÑzWéÝàô–c²õý8 ·¿U𙻣¾áŽ$TÃeÓeÓp wL¤Dk8#4œQ Ì‘)¾áŒ–iMgtÂ6Q&gL®XwD†£áˆVà¦#¾¸arÂT5ª;¡ÜpÂÊ“¦³½†ö¡'o²áÛì æÍûöf³¦þØŽ½Y­LaöjëÇ‘R9$÷ o<—KU1 ¹Hªê‰ÔQ¶lQškÖPv8yñ¹`u ¿îä0ª»ùÍÃjÕðòèØWÊ›p^WZÞ^SF£êÚ@-×`¡ ÚVF8srM”'=võ­ÁöýnšBu0)!m´ÖHsç­XÇé½ újÊ<|óOî0ð]ót±ŒH C^{{ηb[¦ç\ò±*pßš 6äÞí!ñRó»N‰—ðŠ— ÛŽ×wŠ0µ"OÉ›_í .Ó€·~ßÕίW¦$—@£^r¸®£†ó’„´NGš7Ê·”Ú(Ò§sh‘Õ’°Ä¸—ÃJ£×iŸDë¢Ú¬H€f—S€f]®¢:‡2HµMyŽÀw”d5Ú`/څ؆—¦½°ÚD«Ë¿±V8I2NRÂ)‡§9½<ØE¢‹W…f Hh*9½èÀ댤Ò(È'%F™5‰ÏXÓJÓ¬ÕžrùF ò%gs÷ÛÏh25.­eëy œ“æVl.eÅûÏJcäëRJ¨ëžûu?•‚Hûðz›­þaÇ{í8?ä•rö•v`Í+ì€üúEæ½ "„OgJs#â Ò)hʬÊãÖ¡ Æ#CˆhÀI×"ÉC¥²­XCkLËËuÀø±œŽ(f„ID¥k‹ÙJ¼Z‹M«u¶œ„ÕìeäªoéK«YÞƒ¯T1ùßÇ%m„7¨©¼ª«§xa§>ú¾òˆï¶›VÁåâ%~ªˆˆJ¥¤êØÒ¼Ù™<#±ŽURÅ9Ö ‡èÀuÆ ã8ŒÏq”ÒB“%[QÐ R;~†uœ!jò¸¦èÒaÀV±_MÅYEq¤AWã¤uè6ã8倫9,gÉâ9$oÝF@@ಈâ0Ê㺊-¯ ÛVtn·ÆJܲi„û¶)Ë«s¥ͨêPKß^û—P‹³à+ç#/0ý<¬ÔQeÎúß½ã_ÿŸG雾ikeepassx-2.0.3/share/icons/svg/password-copy.svgz000066400000000000000000003507301276304217300221150ustar00rootroot00000000000000‹ì½×v*I¶(ú¾¿‚Sûe÷@‚ð¦z÷9#ñÞû—xï=_g$HBN U­ªÛK£ºÈŒÌ˜1czó¿ÿo38VÍÙ¼;ýë7ìB¿9š£ú¸Ñµÿõ[>xV¿9æ‹ê¨QŒGÍý6ÿöÿþïýïÿy~vxgÍê¢Ùp¬»‹Ž#<êÏëÕIÓñ?Åbò»Û½^¯]Ýîñ¬íþ‡ãùùÿþ×ýï|ÕvÀCGóß»ÿúípñhîª6Ƶ¦«>º-ó)<,ç‹Yu1ž¹1r!÷o‡›õ×»&ËÙÀžºQw7Ías´˜»± ¿^[»¶n^¶»j†cxœ¹m4ÿï—+gÖë¥æÍ×Ô¾k­Ýˆ¸ y†+žçÛÑ¢ºy>ºsê>‚rÃØá².ù}3h}{ôõ¡°=øïõê—\óñrVo¶à¶¦kÔ\¸}9ßëà3r5—9^¶æÝßíר:lÎ'Õzsî~ùý7ØëÆ¢xB-:Ín»³8|é6þõ¬S$aüý±‹¸è0ÏñïL¹˜c¦5Õ¿}ÀÃ×Yãºy™ý6©Îçëñ¬ñ\O¶.xÜîhÎñr1Y.þÝÜ,š£ý,°Š£%ÙÃæ&×Ûr^onn&ãÙâ¹Õ4÷r/†÷ûçMFíÏwlØŒ]„Ü þßÿr8þ·ÑlÍmP™+mÿ ³j£[Íÿ¿MTÍ:¹:XW·sØ=ƒ¿wfMÀ×ÿ.Åcaß¿å¿÷à?‡À¶¥}ø–u€†Ëys–5{šåçÍ·áܬ:šÚ ÿõÛÂ|ÀÁþõ„þñ›£¾ ؼúÖ,…¸(b°Å3øBµ‹sëv?´ øÜ¬Î^î¢Ä`ÐÉõˆ{Ö3¬.fÝÍÿF1B8{BæÏ…‰@˜=ìâÚ|xVÄ%°Ôø°b¦]c-ñ~Ý0( 6@´õ~´õ~Ô€Å% XÓ7¸¼_á}p!Ä>A—÷¿\ØpA.©4æú—À   E]LKBTó™d6Ø^;æÁê¶ðMrňbXú†üë7€"SL0xÓ-y7ú  „ò3  ¡ 7£ú O9£âéÙ|¼£OfLp$Ÿwq‰8}z6€`³¸ÓŠ›70€A.…1GL‹=d`XR" ÝCŽ‘à’ý‡ôd8`ûÛáQL3ò„™K!Rx¸ü™Ãó=p!ü4\ø]Dò<Æ£SJH .F`ìIÀ"€0ÔE(ââJH+ÅöP2èÃ)Æò%é¢)¥öP.)zOy© v1Ä…ÒeÂï"¸o ˆAóYü9\ĦP'õµaL~!]ŠåÍgúÄ]B$uó8 ðEüN ù Àt(3IW˜rye€÷R©Ç€Dº˜ DzÐz?Úz?:³Qƒk8⛩*âê4UåPU „('1ÌE†ÛgDj z2cZPöÔH RœGS&õª‚ìD‰ æªÊáT( [°'ª@˜¦pjöDõhô[qé0Ÿpé¢Ê]DHʰÁîB ÌXƒ¸”ší™1àQÎ?ÇOÏB¸8U\½`‘<á‚©=iî$!ò€EX¸–Ô`¼MC0,Öñ IàÔè›)-áú °Øc”–3Å fBcsˆ0SO8 ‘zÂÀ^]š¶M4\ˆÈ á°‰¤ÜC‰+RZ¨¥=m½ÙÜ ⛡Dø>Ír ˆ+X˜ œ(€£"û'À&© 21ø¨$€SÇŽ¿€‰Ù"°}šl*MK0¬^ØöÛhëý¨ÍÈ‹ê9ïÁÁô ÁDóÅxâ˜/¶PÊÌgÐÅãÙïÿìÿ´tº‹íïøŸ¿9Æ­Ö¼ ó£ƒN ã0á{ùâ”èhJünJù¶X÷û|#Q¶aqFì:3”ÀÖ()ÈA^‡Sodƒì6uª…a%¶T "-ÈÖägi-|ÑÁÿÿû¦7 DÆ Q2oðL0üýã©6Öæé0B÷üõ"ŽÛBè3 6P2s9z ýs„'vPÕRüm;%û„¯€”&ÉéY¼Ê¯ôÛ, ð©Kó¹?9å±¼Ö»y0º0¦b'æñr¯ð²·yÔ¥Yˆ}(NÌâóÀŸu4 ¹0 Eø4lüów4Ë%W:=K@Ÿ8šE\˜… ƒc§fñ™¿£YÎï>=ýïm®ýLâpl¸¶OMmf-ÑA|¦ ,â{î¬A¶n¸óGáʱüÊIá”ó^e~§1–Ã1;WJÙóaùEìD§ŠßkþŽÊ¥I€ œÞOËüÍr 9Aª8ƒœ°‚]DNŠo|—KVŒFq8lïàÂÏ÷4Šû±ŸøéÑäÅßcóyS'oÑ÷¾IâTp|i'æ§A€(Gd_DuÎÕéÕ×Ro³KhŽ´1Þ<,VÀ{´äžµòä,êõúŽß垃¦pzÔ8‚ ¹]‚ô õHàˆå’KÐ%Œž&"pV¼Ç¤œ^$"·ž\zÙOˆA' W%Ì–ý ê eÔÜÓÒ+Ì|“ôzrîÓÒ+µ½4_“^?¯˜¼_~«3b:L(oYhµiþÎO‰ßM©¿a¡­ï](Ò·,”pówÛŽ‚8÷ðBm­ôê[ÕŒñ·zÓBa›Údz]˜òä: ¯óà?8§½Ý7òx™Ã÷Ù)õoWøò¹SýðVÍûÞ­¦Ÿ™Ëƒ[MÅã[mlwg ŒOäò†êª§Œ 7¬“VÍÀû‰1W33ñ™µ¾ Êã×uqÄ(–ç¦Þ õÛñWñÛÔÚør¨:ÍÏ-ìüÜäŽ×´º4åÝ8nL‘§ßŠÀ®^ÛûSÔ÷¶½?wçÑæKSèü¦Ã໑§÷äÆW=šõêžœ3¯ý„ÉëØ ôy¹0Bù#Ž„”xU•)¥Æý AiÖÂÅÿqƒ‘Šº8ÈéìÕJº9'øa/ÑAà³%˜ MsT JÙÞ­ÿl¾†`ËÇÚ%¨4n¢¨KÊÙ?¾h‘xYv«;X4gWl»û‹¸Dìí,¶šÁêr>ïVGžÁòÒóEÃ×\u«‹C°FÀ3mQÇžúÝ4ðˆc~±îÏm“FZýµ7è'Ž#¬ûW?Ž?³lúز±Ât¼ÃÂá+ÂXÂ&£7l4Õð‘(ˆÞi£°82sªÈÃWpž=B”°‹2 ByeS-MhuÁi€û« ˆ6¯H/]˜ ‹p@zÂ&öá=Ò·Þ_Üúpñ]D‹é‡‰6.jÊÏ,Žo$Y°VãÁÄÖmœq\"_œ½Ì…˜x (85P<º÷š=¹°–Ê8ìŸÉÁB\µ(ŸÀMm'Ó¥˜ãè9Æ ¨÷?i$Ùu]æªPvlÞ—çE2m‡*½åþ`áQòãW=áä¹Ã[ŠßMI–½a’{r4¿øfE¦T’"M)H#×7µaþn3ÙŽ‚sÚÅú:ò]‘Ý¿MàUø7 ‰¾áèÞc5…™?ŸáǬ¦0¥z_ˆ¼ÛNÌ9ÈZÒsVEùívb"¿ÃNÌõY›šÀ÷‚w 8k\3ο¯+¹ßA¿&|!€&üLNy°¨ù»qkù7_LnXè,ã0áM ý‚ ¦üòB¿¬Úè 6ó/ôX•ù.çyÜh®1Eß¼×ô³Só±…”ì;*¾Õ4~öu>dט}9å;£¨1L~’.AAgWÍg,mEP#Š$|SOÄ%@¦} …ýn1ÔDH!¾/€Z>ª,„Öé$Ì~ZÏ&ûQО%5Áä0BÚ€aOÏÚ…1"Ä3WÒ…8hذbªÄwBë›C`m±à4´³«)NO ðRƒ§€:âé™»4È2˜Û.—êéY˜`}P”Ÿ°‰¿&ï23~­ä/[¢8A«0¿!ÝÎN&ZZš%cJ¢.d-Õ! ôxtŸœ¤¹â§mo霺”Ä&N]»LШ Jÿ^ ‘g¨Ì4®„›OÈäpŠW”(ýC¬Lb¦ÿÒò`D¹ÒššdR4³a_’6YÞÇš)zz,’Dâ' ÇŠrýã!Ôû#8uÍÊ…2äX)À$›¿ÿür… ¼f’ÚÐ1é`ô¯6ˆùƒ •/˜KÎÍä®Qñî ðcÿý 4,Oã’¸Óx ¬¨K*°°aõîË8_õá¤)H†Âèì—ˆ ‚~E%#Ã#ò‚Jœ3žŸ­Ÿ‚Ä÷5€ƒâ Û‰w¦’€èPigM™4IE.æ[šÁ›ó-¿=IñÅ“ùVòš-\„(¹O,tR„#J ˆ˜K#[è¦v2žÛçM p°IA^rx5wq”øÂ˵9Âr¦ŽF[ïG2ËöEÝ–3…¹z0·™ NOÊ¥¨†ÓcƒÍ„Z¯Í6GP=qãi…“pâBº”þ‘¤©ÕÙ„~„>ýR™¯”âfŸÿ¿“âvÝt©Õ =é“ݰ٭h~Æ®¥Õ¿†ôu‹Î@D—§ÃÑEƒŠCìÀZ]w™¬;ÝEóê”'^FV½”2tD lÇÀ­õ&§lˆO±‡ðúØ.!䌥O«Ç­ºôê)ˆ¨J‘è\ û)·êÍ{qjµ¶¨÷°¹OÜ`î;zÒÜ'>›ûÞßGq¾Þjù…Ðá£Gov“9öz`ë[øèÑÜ7Ÿ =i•W£ƒ¿GžÕ'e4*ðCzõ…P‹ñõϱ$9ÛZñ"V0PÓ•Èû0‘?¢<CêºuÓ.å @×c¶ÛÉÎDæ†4Ú⸉,ŒX¡e´L(ÈöRÞ“Q~ß"®›”~™E}z×%<³ @(Åì '*áR`‡šEÝ$ÓèPTãhôÚ‰ë2×/³çq]Ùýeqômû×F§‡Â¨MÍÔ>`ñõ‹±Ñp ÚŽQ†(ÖZ©×r5 ÒS¬^,0vÄ£PÛ ÁlóoÖ“mñíTð&zH$ ”g7eCì|}eÛ°KJŠ&"³5Db‚03¥Y0c¯Fð8âòKü2hÃJSfÂÁZï‡[†­q@œÐúaÄyD÷Ã/ƒMŒqJ G×®…õËüóKÌ»ûXú9š‡Ñ#®ÚkKÿ¥)%F!èü"n~‰EœGÂÛD oF§KlPJnJ·íÑûðå™rÀtJåÓ3⯸×Å·{ŸŸÒ˜/®yQ‰Œ_Ѓ €55ʨY#¨:R#"NÆ^)»Ü+Ãý¯‡˜`»ï-þÜœ\  —Ø)gÜpKã‡! /›3ABHa8)BÂTs‘Ü¥á2S<’›4r„OèªJ]yW½ø/'æbD|cÓ»2Lüo&âÒ@\ :oÒ÷ ÿÍá".HµÔ&l#ÅîƒÓÕ ˜»àô€6C’ÈH퇦\­6æéõÃ3Ç.² 00hihÎÌp‰àh½T“¤ È4Öüà?•vr¦MoëïGëïGOÂé >)qœ¾ÂÏ࡚ø™f›CA‰]Æ—Øq?L¦nãgøv´’ÍÏàl£å~v<Šm- $NË/DÛ|ï‚Ô.EyÏÑ: ‡ØÇJH¬±ÅëÑR„PM>ÅY|ˆÂ8T$z±l2ƨ0É@Q¦N§9KpИ¾ç,mv=Xì«8ò!¨æcÈÍLjœ÷;\@^¶Æ¯Ÿ¤&Ȧ8Ùæø(§ÄhÔ.ãz"Ô¸¡¾ 4QÂÉëÑOwàÌKõÓ96*¸ üE_7B3&X\ßG£õ÷£—È18ØÀ¡æÄ˜$Xÿ¤)l>PSÃñqíc?4æ.†î¢ÆD“ËÔøP¹ö0<Øæx„Ìw;* ¡€–Óá/¦ü·ÑúûÑó`‚Ã)à Ù®ux–$ØÄ¼Øä[k8QÂÖ9•€€zcΩݪ¨Æ÷ë NíCWîÖ‹ߦC ›Bé&uÉ,Ñ.±]ÜÔ¦CT¹€T¢’Âe»ªßy` àìF?ÙËD-Jü,‰6e§@gqÙÑX£ÕÐû`…¯°ù}DưzIgÖÊd½Ùœ °¸SÀ:®¿¾@©€¾)‚‘m­ØxÆ.`WŒñC$‡@Ts;,ƒbŒÓ–&uû.mÄT&¾%ã×™ñ¾k WŒW…UØ„/¬‘pà¹è $"@Í0¹Nß#fŸdy¯ÁC?¾+<êb [2ÜŸš#MØ¡3H@»á¨!8»7¢ÌG‡®IÒvPæwˆEçLï‹ÞÆ”º†OŽc>1u½jëIA×X?º .ŒTtâôÀ'à»Ú #MMx°Iùavéræ‚_nd`Ÿ0æÚá¹M(: ™CŒúÇöáíïƒß/¢ÈÁ`üþì€@…¤Äž¥¯IÎüNVþãgLj‡¤£g‡šü_NøcgGékÖžG4ŠïÅ5í©l@Ø_`WŸ´Éà &(UpÓŠçVùå‚\Ö9m²s0L¿!1– b:A<„ W­¦vÛ]rÊKäà1Ã"Š?Ä_²oÜÓüu0qÅd±Û~\¯:ƒþ!BýCüú%UáÁHù{ …~H±úqá÷ÁŒ;`uÕæó À&ð|n“Ù÷×ŠÌ »•þJ‚ò£‰…÷àÒ5à×—ÌI½8Whö¯+ =šì|ÇIc?b¨?±ÄË™è߀z_ÀvÿÊòPÁ„{0ä-¾W®þ`/=Ÿ,õ!•êC¢Õké£)]÷@ë e¾ÛZúÁÿýÐz¸ÎË=к&^ße‹¿ò"—@p>ÏãDIOÊ] ¡¡ƒ}Ÿ€ú&¸xk£s®¤ç)@Ðkdø»ªoš®g’ìî—Ë»«£t.ŠP|­ªÛ™:JwL óÄ^^ †Ô=eì.•h'][ç¹ÂX/ôSûÅ··25¿e¡'îlÔÌßeó©> Ç<ñžWë*iþ¾¿éAhßÞ Ñkл±tçÑ”üÚBÏ|t¡XßÙþçZ!KrœàýÅŠg2EaÊÇûR+d¹s¸¸µ'fA¡Á€]Úa[ôûszĘ ìso%¯Rö«U[Ï®X]%ñ?¶bq~‡åÕR¥çªü>^w÷}Ç,ÏgÒÃàUŠð=½=NAïÎÒ¶çz añÝmaÊÇ+Ú<Ë!1¿Ê!ÿ¨Æ2˜&£Gƒïª"|Sc,®ÝŸB>ý)ÿõ­´¸*ž©š©X~ÏžÔ«õFý„q”㯃Sy܇QŸÈ‡?|W`¤¸ýtSÕLåÒöhy\yÝ¥¤dÆ`" aþ¾2÷UUÕ5Vç±éîz&<øLñ%®6mkÖ›æ ±ó†RºYm^ÜúcU] ÚðžW;ÁÕª Ÿßû¡w1GæÜûêëd®I½`JyUã91åwÔë6Q×Ww»ÚbMv¡æô»Z7·Õ»à ·ð^ø®²Ëõzú¥)ÑTÙ".‰SÂý‘ˆ³}èT?™PtL`´rJ†L|¡‰4$\â¿B•DÍ#9æÔ%¡ô-nžÃÌ…LëW;kf÷õþk•DÀ¸z03]—ì(³ÙG£—` 4"ÛÏ gÐN ˜a¢A†dêI›œfr…S”~wÍãW¸|ÄüHb:raüÕ¢A»&{‹»F\Øžd…Ì"±’.m¨°‰2Éq/èÐ.Ø!rDs—´“/m§€Nƒ>ú’&˜ 3l‡ ðÐïÒ!SãØC„X* gÉ„`2ŽM¡€8ðå‰Ûé,Ÿ°é7/`‚¦l{ü Y6_ˆD†úØáH Ð æ~s4Úz?ú>Íæ(˜ `z¤´… ¯Gs¤M%¦&…N1;pÊÄJi8Êñ2£õ'Êe~!²!Ÿ$Dì%bC›ŒtˆçÜ$„Rc_6„F™6|€â®r4úÛ&ƒÛi ÙÁ1v¡J¹PûÏpÑÄYQSÆ@2rªè÷—`?-òýPálš–“ƒÈCÖÀÛžM6œR/1ñŠÑŸ©ý³€È‚À°€!&VšîˆÒ¤ä*&YÀœ#:Ätúú;Ÿd`=$0ÿÝØ9aˆØØþÂÐOJÒ?¨qÜ) ?"œÿšÀå‘3öKib?ÊÉ0zäý¬§-a㿲%ì'…fÍcýB“|Öÿ˜õzú7šñCµ”ÿ\¡ùDÄ»¦ 9àœ:|1øhw"7hªOG¸¿…4+»hà˜œ¨'ØÇ¼×R<öý“ß¿2Žmà¶#÷Ÿ÷k9T´9.+ú½k¡ðkÁw¯…¹¸]Lh³¯ˆ·ÿòG­æcûa5è‘ÕP!ÞVC¹xY P~Æ¡ípeTýغ>æÑî×¥oZÖºbÎÕ.¾ÚßG½šÚ0ìÖ‡ÑéÄ™;–ñþɰ zrêÁeüÑ«8}üå½8fêÉ(y81ÏfMÔn¨ksWµÇ¯£Ÿ/.JÀe @h»š!hØú®„v&ÑåÐf¬„¸©’ÏWRLN¾ûºy¹09»œ‡|ïzÿ¨·¿œóÈÛ£C¥Sõªgòý+“ëªËéwý˜™²?=wóΟ¯—“i~%ð v.ºÆøé@Ào!ô.ÊâL‰™ƒž™ÃëE¾Hñ#°à§¥ÛPí»yÀ&9Ï&ùÏ¥¹¦û¢îÈ®eÄ¥4©K‚#"ù6nw…µ •K e¢ ÷¥ ± 1Žø¡†0Ã/i+G£õ÷£ŸùæZ]!\‹{3uMé5E¨±Á\_)þI(º)Ëí+L »€92,šÏÜ–ìâ”Æø‚±:!"]´›—$HéR ¿j%Gƒw­ø£õ×Ü:†¯þ¸sëþ„u\N†{`ßLK¾—Â9hvÛ£d­Ãöüï~èuà[gOú×ÝÆ¢cÚî×aÿï¬9]vg͆³hŽæÝñ^¼³XL~w»GsWµ1®5]õñÐm™OáÁ`9‡c·ÏÜ@‘û­uŸ´[™fëýbìûÿÝ}»íßpÕz÷ºß Ýž0ÉÄi>ôãjÏW^ñ´‚y·NóEûÌíiàTŸQñÿãËW^ô4Hÿ0ËÊW^õ´^þ'˜M¾òÒ§ÕðÛl"?@o_©éÙ™<*|³‘¼OŠâ¶î`õ=˜ïñÕ¼=¢ýºpxý ,ÃØÏ4¸<šQ~œözß'“…¥ªê¤@WýŒ@A f$CÊ΄?““@Ž“/O.»6¨ÖûçrÍOÌw-9ïÄ|èÚ?sáuˆùÎÉKEjÛ͈(»VWà‚«îB]ƒ¯sxrµÒÞmÅ >âç+íŠÅ¡âfÄ.[j<¼æ'ìÂR™"h ölêSÂMã‰;KÇ].Xyk¡½«'BàOM _0†®æ°±¤ƒ°uÓ(éð>Ö³?âô!êCxÔ%tàLqGĄƦ1]MûÑ]=abÚ°˜â”Pðó^løžrö7`ƒüÈîIMýíhÃOt>dWÛuÿh ­äï^õ––ÕWó·ñ»)¯6­þŒ¹GÁc"Ë>Ä}ˆJû³vs¹)ºC÷¥0¹²¯¥yŒ%ÐÔÖra,ˆ]Ó‘šbù@ꄞ¿±ªÚ'¾Bô÷mßÀücƒÇ:| ;yú,ç@ÿJ¾…ÉÏ¿%­õŽßâÆTý/tø_OÕÿNø1ØðC(âû@ÅKFrÅÜ.«íÎwæ“0MJ̘æPà¦[‰¡øš2yc››,üZ+¤ÅI ò³Õ¾LX¨ÖvÿWÓ=Q˜Rƒh‰I»<¬©§(ºBr²¯!˦ü¾väŠÙùÖ’_7Б³þ+ W«ƒÜ[EØ~–Ÿ¨‡rIþVôä•:ï7л®Hš‰¾³þ LxS!¤/Ô?)¯B:¥EýxiiSÉ•jB bÌžÄRSKZ™àa‚cOÙnŸž­ Ý[}ò›šòÝ@.¨:K.º‡\\Ô¢LTëe*Qmš¿¯V8aãÿùòІQñ—ˆN¬ŒF j´ir€]eð>&ú¸fl¸«ôI8¯FÓ«jô—€^U£¿¥bàÕ¼þDÌ',ì´P=8’O‚›&z `›°gcn¹¯9 ¹ÚÀôîj×"Î?Ä£¿ V¿¢¡@ÞÖ‡³pøbÌ BÁ ¡&ø2Õ ¸,=Bý¿ã4àsÕä`è»ë„ L~¦NèŸB 3ì_¨!È4°"©Í‡ge*õÔðjÏãÛ¨áŸú.ϘƒžakbÒ¶ƒÜÙ.’¨krÂ]€ùÖ¤ZÁÙciØÈÄ¡iCsµ¦Z iÓ9;r}Å6I†³ëbvãh­‘ 8(VµÜZÁù#4öõb¤ ¦U)€S»oH$ØØy>dTÄž´À¦ÏŽÉ@Á ;î/—a Àz$Ý8˜L^€Ü÷àÔ <^š!Æ$7é·&èS)`ïô<‚ D‰¯äkÓ_'ß@v=¾á1ƒóEéÞ“„Ó¤j°¸– ÛÀ°N…L &qiÐ4•Ý<ÅDÛ¡è¿LÚíÞÚr £):ò=Æ¥úE#ÆÇÈ{Ú÷‚ìt¦²àÙxØÔòMÐúƒ*l .¡ï@´‰i¯ÃMŽ)aÄ´„S‡Â!`-”€¤ž˜a€&ÑÿødêøÅ“»X–)™ë‘”hͤ¢6CdÀ%÷ݧvâMNøËäwl#ä'É|„ãek·Šr¢L¿*œ¦ê£ü/‘â Ðy„ŽcÓ¥‰)nçxÛmº)5›¸Lh„ û$olj'(»ì2=•Õsùõó¼DÐm“ã.%Ñêåp²Àñ“Y„&£€JÆÉœ­Ÿ|ŒHÐPô4ÏÄÄͲ À1eJÑ?œVw°hζá¹;‚Ï“ñ ºèŽGÏû!XÏ<ôì¿ÿ‰Úú^á8¨Öšƒ—1|äQj5=ƒæ¨á¨™ÿý×o#Xyup˜h?D펈Ãq£ YÝÉ`kfÏŽ—³zà<étëÇ‘åöcnva€Fyƒ C7ÍÛ\å0á犷ÁãšÑçb=N=Íh@8U·9ËOMqÆA"øÕðŒ«`ä¦vÊw‚‘Û5G΀‘ÛU7~-0r»ÖÅe0ÖÝIªºè8^>\0μ\b*¦¼Avbî>"P£(8˜õålU],gͽ5qÜèNà¿ßGppÛIžQ?üÛÏ>ÙÏ $ ¾ ”GæO i0hGÝa‹Ò”˜~V*Ï ‡‚P ZuVÎFU{"0ÌÍGàûL> £³Håx6ýb•x‚Ù@…'0·cAus 칟y(ÊÄ6`¹8Hphl ¯ÙÖnsµÜßúür/%Ǽƒ©–ŒÔ”™—jhZB¾¼Õóþµ»ŒðØqøöüòu÷Š4oÈ!™FÄ?ˆ ~_ÎÿóßïÉ9ÀLÿÃ=B`ûël9hþÞ\5ä¦!ÆlÜoøGÍ#œxÙÒ›iÓg÷û)­¶Pó¶84j;íÏÑ&ú¾ ?רöÙœz¤lÊ*埲@·ê­ê… üîeéWéÒ]œÛ:AÒÐqüØ…pr@I—T\¤Wf83ãü ™š¯dßÙÁ‘@?·9¹¹â lµxóz§‡£þ ÇEüíÖ+'gmÖ×¹Nw°£´NNÚ úöIßa‹‘ÒO‡1qÞr±†Õyßaþç…6ÃÔÍ¿J÷/y–Ä¿Jbl"n0 tÓƒtQIØÓX)A$±eG ÕØháRáZ Ä)ü¢]ÚVËàv… 9§.;ÏÀnt v<›Ùˆ²‚Ù%ÂYs©m0·`—uƒÁ‡‡êP¦`‘¦;©fðt‡1ÔIn˜‡!½Ô…@5ž<%w_µa-&쌇6YHæjSÝ.7ž°Ã”:2vzx¼ð~}¶¯À,Á)hfÆî¦L<<ѯ y~‰#±õ>“ÿ 7€”>¢…QîL3HÉ ÿüþ™ê°°Ý·¶SNröùá_ýX 6Øù­ú<ÙvqŸ¨p¿~s(uÏömkM1+àÿÜ€KæBÑW[6õã=ø¨±Œ±`µæm´õ~Ôø`Ìô}¹§¤û©ôy¦¤TzØe›òsh’×JÝ<›G©ÆvκáÔ$‘buƒAýrW~0u#;9E^Xð‰eáÁ\§¸ŒÝùà£nì=Eº ÖϧÓñd öð„üýHŒž‘ øõDY73•$Œ¥Øî½¬P7Æ&-“#…>x&@ª4Qø‹Ö‰4¯þ­QyŒ~wW2C‘D[bD? ;}a­o9æë³Eÿ;žl^~0/ ÿ^[.Ç¿õÆÝÑïÃî¢9{ùõ(Öb¯n! ¬ Ôª'-LCô±rÏ„€Ý'Á±Fe! è?ÔæBp˜8°Y¦8±; Ã…Ü!'[{"3¡BŽÃ}†ÑI lêeä8ü`zÈR082ë0nÎÈÛÛìïpèòÓẽX¡ðÞ#Œˆ@p‹©e,ä/¾§4ìÇÓa.`v&²Q+[½ÓLK{žÃ+KGHéw,Qüˆú$?ƒSÈ-éi±¹IÌß]MÒs²èÅ·»ó9MþõÓÉZ¼u"[õdî‘“ôÒ” ø»Ð êÝG_Nñ½‡nƒn²3Gòz)†½6Çàôp%^xºañâ…n3÷òÚA›{ýÂm¿ûU «†–µK=ØÞ€Þ´§¦•]gØ“'bÛÇ¥ÆS­(È¥ÆÊå6©æöL@‰á P™F–S{²N͘€I…0Ô´<*mJ ú‚2—r.´2–8N¸m¶3š„Ñúøû/‡1Ãaó±î°Ϥx2-£@tP3£ÆæîàÆ$`2^8ˆ7 ]1­nß²¿êÙ\¶Ÿûù09Høö°É›6”– s^æùðjÆ›¡L±Ab‚­й@=ÅʨOpYå³m_Žog Hн^ ¬ÒÔI 5pL^ hذ/³ v“¤JšÇFkç.›øRÍ̾<›{ ˆ…é'ê±'Â[ÆëƒQ¼ìøË†q+çgM¯F9›ïÿowž¥Ý%ñõe‰çM§Ô/" °dþ’žÙ–½ø&T6:·6%òö>JsD0DØj±æcóˆ¿Øa ÍÁ+H0—DšÐ;Àeå°ÑÁDP cð5œ›Ëìä„´ATÐÄaßLö¦f ¸H—é4* âiÊ…m›Àc;˜Ù_Ñ|ÃDƒ ¬° í­Ê߃ØœÃWäP¶nÿž‚°„Á ;¦ æžch¦5j º7Æ›ŠŒÏØ[J¤€°ÃÍ&ü ~YϬæÉ>$V¥M{sœ`“mƒ† ¶0I ±#Ì@Ú($ÒÀ„@e‹ #;Åìp˜¨}’AïÁ؈VdC†),ì÷%xo`AûW0GÞœ]“+ˆzcÀ‰míÞQ˜aMMˆ—½X‚c (ÂwˆµŠJ†˜sM Õá"Ì^šPAÛm ¹6ˆ¨98{ƒ7ƸEØ÷2c^îÈÜ¿øo­ª¤ÖúNeàŸ{OåÞøâ8U¦£Ä9"røïÅ‘sŽŒ|Áe{^Äú×o`cåM„æK1—)·GLÊúÖ¾ô ŒU³qÒ.þ|ìVôØñ¬.çónuä,g^c¾høš«®ýòƈ,L„¨ú±wOCɱç‹~`N>5BÐIäy_ ·S81&96Ýë&ò›ýÀD]ðõëù‰ú?0Ì+~Æ 3«ÿøa?07E”¾Ó ~N³=Ô¿’˜Ó?ÆrpÎ zzÌÑ{Åêp³… ñ1VéÔæRtºôÆC~`˜U}»ô»s™ ÷úMøñŸàæ¦ëüÀÿñÿ¸0Mü‚~`þ` Ø¿ 4\ô7ôòÈ-\†œ.€z¿Ø…ù‹xáwý›÷F‘à.E õèßÄÊéQÙ;4ö©Á©³Ì J~« ”3r{ݦopÂón±;ÜîEô³Ýá1(LùåÚ½ßé5é¶ù8’j1Nþãÿûÿï¯ëÿ f‚ÿ3‰ïõÿÁ½ô?þ¿ÿøÿþãÿû[ùÿ®JKŒmCgl½õ†®}´ØÞÒ(f<ã—91ã·vÎ$ù(^.¹U§@«>†VŰqþÅvçÖx4ãU‘ð•)|Ì |þr^àÿŸ}<ÇYÏâÏöùÜ•U ïYžw¢vˆ ß/õ؉nWfô8Aûl)¯¯&Sƒðùµ*§|VºàI  ä¬Îx;Nù¦Ž§_>Ë-8ËŸ«çÍø ­Y€ó=tò¼>äç3Ô7Yã£oçê Â~>³9'æü }¾ ÇA-z>î^çÂŒR‰ñK¸ È[Bq»X×kD ÈwbßÝl‘2Áì+'EQþÌ>‡›`hBnk'ûþ¬œ¦Ú êÞA³ãÎf ££ZcäÏëà ¸™&7vÓRSˈ3ã] £ e7c!”#â`Ä¥•7ŸŒ—´+»)èa¦~„íºÑ€XfK{ +=Q ¹ðÂæN,MM

Sôïàõ1F½ƒÛÇH£ än¼wü€ÄÁóÃŒZAˆ²ÌöýÀÚõÛÔϯs{Ò4~.ìÌtx°¹2>ŽáJn ¶0ŽáfQA#Ñü ÊTbS¦€à¸à7@Nr UE] g4¢WØ+X µûJ¼n‘´µ-@}ÛJx%ãÎ’Ç›¾w V}ÌÕ¸d×=Š\Š?•ñcËôõCÉ%ú̼$ÑÆ´ñÜ‹°ao)jìLFÇÝt—°Ó6×?…êSহdß¼ú»(î÷˜NÉÉPTWs¿Ý»ùæëƒ#¿wò™ÚM¦‰ }iÐ!LQC,%y)ZhªÈi}(vŠ,¨ÊZ]H tBK£öf\¹2¯û²;|b¿PÙ¸1eÃE€ã mš ¥Œù ø#q‚¾BÌ¡8@ÌëÀx01V¢W¦‰a|o¸cš¦n¯I½…i2‘«L.bÓ¼‡p Ú ¤?RmŠ÷ªLÓ¯$Pø~vªÉYEFŸ¡¨§ð„Ãñ2„ÏØ­ˆñ;\pÐÙi瘴&§ƒÞàú1˜ì{MW ?Ÿ#â0HŸO°Ñª×jç_ì‚<Âÿœ?.‘p¡ŸÕ;™DR /âU&Q¸¢tô*“%—v&ÂA&ÁÌÇü’ĉŸõ‰¬8!‚ÜÔ9þË2§Ákþà…û’iqX8!Jh¯øºpnªÓW’K$hB¯M6˜Tø+˜Î”ü¼nJA;ãò¦Æ…_f²„?,òƉ<#øœŒU»Íý|Úéy²#ÙPàcsèŠT¾™s˜AoqœÔ GVìû¿ìñ´.Ì^ª…ï'æ”^P7>í²±p|ÞeM%w|‡ùîž…3øGßìXÄDuÕ‘KKÐúù뺵âÔŠ9Z7–_Z÷¡`â‡S­H*¦Bì·c7GŸš0¾F"rÚlYÝŒœHºŽÚF‹?9¥nà&n~’Z@¡×‹w —@a~¢ÓãÑ{ŸSo5ÖçD£>l]’ôËY<¶ué$Ñ}m{É¡KÏÆLs¥R&ÀÅtu3av΢m<Ò侘ƺR:Ø!††1àæ~¸àf{4„&—4_µ0ûiû@cÊ1Ñz&Ø…7Ÿ™ñ•SdB·{÷»¡®&F H6=X%1£öl©Ôv y¸X›i:È]tÿÃ>·Fh©lS ;Lè!aúI4Ÿ¹‰Ø‘‡€+b\÷&`O§}¼l·Ã8ûAÞ5vã°gLlÖlîb|[ %]Ç0¬ÛÒôòxb°F…¹p€…¥]ŒÚaטîýü&ui4eÞ˜¨‰ÛrQŽSvÐ×Ôt™1퀿ã£;Ÿ_o=6É£.Öo¢"¾¤ê7±p8ÿœ¼±pಔ¼9(´Ü»'ÿÁ+£wÙù}IV…óyBV58ÐØî íwÕ=áôËi‡HG—¡‹'nbátíš8£Â$d™ÐY@BnÒ˜¾sL€æ¬ÌY1g“>æÒʄșî2˜Á}¦9#ec4¡ÖOvÏ%MТ‰E3¹ÈÄëÁeûYó«„³åuH ¦|RfjsµC~ƒäE`&b7Tĸ1gÆ!+…áë ;¤!‚Rö$M ª™¹¨…6Ù Ò%¹é^fn’(}´ì˜ñ1*LA4jÆ´à'ôÎÕÈN%/~ ½"¿¨Õ”_cn.D[‹ø›üÿÁŒD0›J;âŒ`))>ÍÒOæjÜ$¬J*Ÿ¿¬ñ€™ó®¬=ÉÇiú&‰q¨ÇÝñ(±· qÜà†2~ 5œÝy¾Ï¨÷ï<ü;Sxõ»wþ³aÌxTÏX¯ä™.Xe‹Þãl‡ORi ¨åù¯.è!í‘ãðÿGHˆ>0^_$2ÉÊOo›ןÁÙã¶›¨¼ðù}G³žê¨ñïZw1¬Nެ Þ7ÃYvüÏ~üoþ?ÏÏŽl³:4çsÇ¢¹1,Ñ1™WÝF³á¨mY³ùrAn?>wÕÇ Ú>¿›$Ö­7GóæïŽú¬ ÄpÕº<ŽGs,iÖ­- <¾©;¬¶›¯K2Aw¯K‡HXûmË'ÈcÐ{ŠÐ¨.ª¿Û¹{“fûŸµê¼)Ø“[÷Ü̲ÒÙ~%’i[+¶Âk«gY>7Y{|–å‡ßnûÏqë…V:´Ÿü{&û<ùÚ²2^Ëï·ÒiŸ• [«¿Ç­ÒV(mYV;¼úÑ?O»ðº=Vßc­Ü~ˆ+ÃðS~ó{a怵ö‡Ö:ôXuµnm«I‡3oyÎåË_%àßùi¦ÝϦ …b4À•\šep£S6H§\-˜—¦ýðqXæÇí8lG:`.JnÌEaxPܼÇÓ†717¦Ã>&ì÷oýV¸çïÅûþ|zè8â(ˆ"ÝzÙò<Ø™g ½ú(é]/B•rW-k ˶¼þtÙ¹WVKUÖR9]'ñH*S¥ëŠÇ¿ÅáB$mm§dî÷{Gs=˜;£ iLWÄÓn tÛj×…@¨-Üíâç½¢ýi‹åŠÒ[.Ô’õÔp™ÝÄ¢QwHg¨(Z±Pg|!É:¤Bû§Ü¬¥°»¶,®ZÊZÏê]_uWŽ&o ‹ÈRd³Ý¸7+ú9©˜Hç£Á O¶Gów&}d¤ÉX#íÇReºK&×ÙYo°lû¸{´öíØ6³-çÁb…4»p¿ßšdÖ¢.tKë%£µª·†™XP®SÁ¡7•fI±Èx¨én—)A±Dk4á¦Q»ÒÌ qÌçuäSåh°¿Õ MŠé2 ÕriÐø¦íxÒ‹wÞàhéñV”·§ÓnËéWC‹[²¤•jZV<èf«®LÄuˆÆçØÑ¤h6O Šc2X›N¸ë!ç¸?\ãÞά\¯³t!º¦™`óʺ5Äã±»²ÊÊ#Љ)ûf‚û"Õ£VTvýÐTΞy¸9él;î9­†žuÝŸ †™ö0” ­#ÔÓm$ÖºÜÓ³~?ÀÝÔéndTD¥H؇c%ì( ¡3;Z¶Ëý¶ÕÁÉõ0Η™_ï¦þEvë7;Ó…zнõ6–ª,J•No-=±Œ[„œ­QÏÕ3l·Ù%gŽíXT;>‰YõÄzÞ-B‰R0ÝÊB‹é¼‡ÃÝÝ,6™°@4“òªb#çbíg ñi¾¿ÙFuµ“Í÷¦ºµŽÖÐ'[³`"%23Kô«q9’>ÚlÓÒÓ²âñvyèõë~ÞCœ…hªŽ6{©èr¦†,çtK§ål³š›„üõÎQ‹¯"»ÍÒëî'íD)b©A±ÐZŒT"’éÌ«ÑrˆäŠ-µé¸û1(£]7Æ‘ñ:Ž ›yh£¬öÈiÁf”9ƪ½Ðv%è®ØKÍ;*ߎ…#¹A¾žEk\šÇ²žô%|EVãñ™^·•{4ò'†™n{Â3«]¹/=ÎRí,Gjæ®äë»XA´ª³t»+ÐÝÎç.BK+Ä«MOÔ[Ö¥^BE€´&[_GöQïb¼Ml»;ÏPwÒƒiÁW›z­VÏéÓÝV9n曎rÞD¼ß[I´-ocáÔ¢šÍ—õt²>ëbù é7†ýÊ|‰®­‚J÷Ó>Þl" Ç(ë.“™ÎÓFiö’U'*cÁy˜6v›É$U\¯;rÍ'jùb9]Š…+!oËCp«V(õrqäÝtã¾Æ¨Ž>+…=8°•CÒšÎâ|ÈUwAââåbØl´ZdÌ߽J™ÀÑ3š5|ë´3Š"9ÅÚëbv˜¯›Ð$–5 'îîj´ÞvwÁRﺾÞÕX(P›óq‘GuÃ7÷TÉ)ÝÆJ‹:"ÛBs‹ 21g¨:Äm«MžÊ,¡h®,3¥oœJÍSÔmEÛµuh>h“1.NƒËŠUd‹ibRi%T³œ£$lÔnÝ\­e8„Ñ ý Ÿc¦´§Ó¥ƒqÀOjZ®¹–-Î,O¿_™d7J«ýHŒoÆ2êöšQgÓ'ÑRCùnÉf#mžE½YrÞÌ:â»B‰Í‘·ÙûœŠÎâkÏväY§<š˜È°¯>b£M:Õj·~¿3èŒUÉ¢ïóìú~OhÖ"Õ öQÈ:s3À´,ù¦Né{7}EBr]ˆ•£Ël7é[– ¸¹ mÆãF»â§vZ-Z´7¾À|—X†˜µ³•²ÖÏÚjt—ÂC×›üÜã•"›Ñ¦ß íä¨'t7c±Tv°hÏ)euÈxë#Ùe:ZµËÅB¿´µ¬Þ‘­ì´{퓞NjÑnŠÀzÒèÖ Åz¢ÞfÉl›òÕ yg©ùJ^›{;ÿ:÷aw[1ÒªåýëÝx»*ž9’þåf×N®­ÕíjwYȬ’µé Ð™†gã’&ÁãÛ°ê.'ËHõ’ñz]h“„¥Ó#çíèN«N­ ºAÅØb\DÅ\°åÛj£ò.hy½ŠGÛIÍ+³á®È„5|‹ì /½Í²?\Z#鮬álº|Æœ–•ÚºÅAªéw/ŠýÅŒûÖc |1è á6Vž6úÑ|¯ÜÄk¬’ÛÔÀ×Y3]%¦­T{/ôDZJ·¥kqÛã^cZ:ˆ?;=ƒn1OøgÙu»¿h/²SêiÆÞå*ë•¥¶Ám/RÝËô²1Ïtã^¢ç$uOºÕ¢ÂQêŽ|Óy±\÷£ÒÔ_« J½&R鲚-ÆþY®ÝÁ­x8ín–@‚Xo1³<žœDÍéE¿Z@nÝMš9Z•A1£¤BÒÑ8õ‚ÁØfRå¥Ê6˜ÞX¥>]G¢³\fÖh²>¯³„HPUæ*¾Voº©'PÝÓ,³Z¢P‰8RñaB#µÍèNΊV׃Z°ÓþË<xFX{ùòÂIA2éFWY•næ«}í°wNÌž0’™q”«Ko=)ò“Å¢½Æ‰Ü¦2ã±4êµÆoЙ 7‡)ÓæóQ»B=óbgÌw«–·á&¾–v§Æ© ÏWW%LõIÉQ ðä6ÔX7~ìÜúŠžf=ºâ忏\óuyîÚ\—$ ±u¬êé%VRÓ"–ÕRžö­úÝb?Õ‰$ÚG´6öËõÑ Ð$~V¯MU±pûÊźX½?°˜ûüÁíx½Q-8(˾Ÿ$<îÖÚò­=én¢2÷†hcqÄHUå‚Ãd10ì³í\¯Y$˜«{õªÜ[£DÒ¦‚ ²JŒÜ–?•&‹ù µ)7·£Y^Æñ64ÙŽBÝÐ¨àŒ Vi®¢SäìPR^tHù|ùæÌOj=.l+qÖÇ w„S(Ì1—^+¾H׊é‡éVN+ÁÁäžC—jQ«@ãA¸ÕÜñ~bÛ° K5D«Ó gîµ'¡¼Í–Ì„´Ûò©IÂ7-†J»àŒdVdPœTb•Pg‰íI¢FÐ%ʸáÖzÑ¡¾~·åK†²±Z’lç[`w‹L$›«ìüî•3„üN+¿,v&ÕtgèoŒs²‰fÓ ÑqÔý‰T9R •·µÒ‚ |p’Ók]X#Ý.’Ù¢¥×›Èjò%óz|•Ê´@2vêM¥²J³ ÍÔ@¾á+¬ýe­²éùpyØEÒ•h²Û­Ä'E2 Ö8R„s§GT …úhuw—é¤;2,•bžø´ÅI´ÒÍb†[ŒFœÁ˜c1 SÙ“‘î6˜Üqk“©LÓg­G‹îVâõ&()év‚¨XŒå;å€(N;#®·þÎrè¥u¸˜Ù:…L^¥Ué›Ôt9·tmÕO:ƒ™6ÝõdGtÛ±Y|¨‚ën¶¶@žy¨4Z Æl^ŒWƒEtIeƒ™~¹J)ç‘Ûшn«N¯WëÄ‘îì¢õg4´¼>šÍb8»‡´×rZ㈻S­f~ZårëØr[HuÜñY¿:ÉJË\Ç£Äã@Îí¦–ñv¥ÈÛ­•šM[É3¬>ܵfŦ^RÓj‡¤sÝH”3‰ä²XÝE»É`´96¼cºÕY•dlÒÛ¬õeЛ`:¾é{C¹E|ºLëmÔ9š%нfrÑ%Žôu‘ÖP/Ÿ,ᩪ•È8<¨†ýÛÅ´Ð-„L2z8Œ®©h}2fîxÜÃûÉjzXW”Eœ+Ëí™$ˆ'êQ+íÑÎtrÂÆù*Ççm«tÙ.Xí,u'î ÌÎñ1 qGÏKß°ïN5O2GG]™qFg’eMsR1Œ!$™•ð(ï©Îj/éÇC^¯W…æ•’c°í€˜ ÂygÕ­/f¢•LË´5–|3˜¤ÅÎm%dYºçÀ2|;‹¡‡FB¸ÝØêx­<¥Y‰êr&²­µr”¢“`¾CÒ눺ãæ0¿³[†TȬ†ªÑx<™ÜÌ#ó°¯l2©‰{âítê±õ’ ûÓÊãƒÆ¼2G¡…ãÉÀ†ûçÊ´°íRk³™cÊi9 &ZnK4>_–=‹éº‘Å‹J´Ï b¾Ñ.ýÙ)/(GÑßìéänèONwÖ¬+ÄêV€ÏÛÃ\+P/딕‰LŒ:i àgåý–C=)‹¬YeÑ Fó‹||á,ïVÌÑíjÙìFÕ¬¶ÊRYW¬ºN§R Õ`oéì¹­ð’XÀ77ïÚ±²š„àIGaWÌ4úùM~V^©~9ªëI,Òyg9³– ò%YÐÓ÷´kíYÖ³hïz¡‘åj¥[)'ð›í6”{‹´•öÊ3ˆæQƒ¤ÙοhçT½ŸCºï³åtgOz‰ä¬ºœ9H3žTniµA˜™&Û`ÔWh‡j™–·âè7â^Uô³ÈDÌgÁ@­÷Åë¤/²Yµk–3ºòt¥A¨×v'ÚÝdÛ E›5¼ír-YÞ4êƒõrÝ/Ç+=GV˜ÆÃNÃé)eƒJdÜï5‘¸o¬¤e¶Î—óx}Þ,¶jëÝÈç·‚Ûæ°Ql´K•Ö48‹øÛÑj%1­º«ŽÏê°&}ܘ–r¢#“ Ñ÷ùØh%BI™­$NÞªT<¤WL|í”s¶öMjóA;p¨£Q\dé5w,KÁH·H•mgAê ŽóÝÏŰ™kç6ßðñª¯ˆÃhžìâDw’¾VžÚD;K;iÄåÊÊσcÉŽuBù‘JZçzÞu±¾-´xz,WƒÒëÌÏ¡T¿ð•cUo0™›ŠU±Õñµ<²‘iÐÏS!gÛ#$=j„»a*: åÖ‰î0Œi~™ó­„ÚZÙuÙ—%’îÐõhÕiwâíuÌ…YS ¥…5ªÉM5•õÊÉ”“.-Q 8ºåM‘n.ÓaåH­‡Ô(™õÔ +ÆY,Ÿ+¦³9šR_¤ãu¯xŒ{Œ‘dã.¬Ýý/ÕºÞ”!‹„«!GÔ˜ÏhWwüßAÿk…CÉÒ¸¦cœj÷†¸Sm® É­5˜ƒª¶°H`³£¾ä¶¯'\3‹ŒÅùfÀ[ÛÑœÁ»'W±­¡i+ë$»é²’ð7ç©ò©a¤ßñ¢4Éåë «vgýY¬KÍ&“eÇ©g6Ò‰M¸¿PŽxÆHgü½È&žöö§…Q®ž’•jäsÖdTS“jyäÌñ@È ÇÈ â¨w´È%&–Œ[;~*~”ŵ\¡Â§;G)ÄÄÊN–"e2rGæK¹Lì"~$¶²"â%¾@V æµ` t*î“kVïÏFÎô(VIªÕfwʤˆ·6 ês¬Ù·:H•JÍQ’‘‰/>áÑPAãËdf1ïä†ÞM5=[u›Ìã,—Ê¡"–ƒBÖ4CÞq`  Ûj¼Árrœ¢îqº­d{” îœø<ƒ`ºšðd«Úî/BÙêfê\ë“â2’®´â­)èÕírN ¥ÍˆÒÄpå‰\;±d+ z}k¿µ›ÅKxÑKú‘%4¸àÓi­\]á@.f•ÆõñdÛ]V)£¾xjA<Û +/ŠUi»²iÕ¼¥Ž0ãp2VV¬‘Îû=ùúrM¬ZÄ“]Ddc´Y̧ §Œ¤[›V*W±æ³J2¿K-+»@h°¼Ñ@l6T]\JÃdh’–™!ˆ»Ñí.QÞtSîÍJ¹e££a2_èLÕ´ÓWCñÎÄLëê)Žœ3™Ù–GëQÈš[–s]’éq$ÚÀ³ƒýà0$2ëä§Ía]OWÕ©ù¨Ý¬Mõ–ÅX‡¬TÅŸò§ÚÄmUG»MyÁ‹­õP¶×! »3‘Ž )Œ|h³Ì³óZ‘×=«¤¯ »%ŠÕ·-M…¢ëÞ";aNx|­ÐÎjoë>g‹ÌŠYØÿÙ¶åéwQ=7B§C9[V#`Óz’ç—Îxщ÷ auÓ¡4vNÖ8Ü®TCeœ*´|u_r¨6K/Áí¬Üt¥XÉ”"îNœHkçp·ã©š¯Åri$TÝmS  m»™®g–¾š¨åk…TGÚ!5ÐXxÐK‡'9ìO/-ÐK{õD(< ¯·,\‹Ì6ŽZo!êëz±·S‹ÚÆ›ãI¶â‹„«®w¥(“›râ¾'-f%A§‹êBm*>Oѯ»1ñ°{†H¬“-«ÑÍ"(­,j¯àò ǃq¼ÐnÒNÅÝcѰfÞV{^Ï'=Íï­÷Ý$N®1+>ë„W‹BW ŠÅ¨R *ÆJ/“Cgh¥¦a ¦â‘]x4ί½E.8›¨HjM3ª™™­ktÎw’®[«ŠÃ“Ö{£P§—YÇ–N_ï"Ó`6V_[s:9ÜTšnòËuŸ¯Í’VMµCc¼<ŸŠPÞ¯5¦ËÆjÅ@ƒz[êÌ–þ?ÎcÑ5( £¯bn :C½Dn†èÑ»§¿ÎÁIÂÞÿþþµØPÛ[þwò³ØZ '­ÒØQ’Ó/Ö{¼® Æ1çQ䂲 ÷ÑZ©©íÊ!‘A¢d̤EF+ÒêÑ~$‡Ôul`ðG¼·+³¥ºÖlLì¥èïa½&øYÂk$Ìþ ÕrÆ%ËS#C| 0ŒÕ5_ÔÃÜ„CrWÿâ“0í@2z¼Ã®Á+ÆÄ‚Î#Ÿº²Ñä$þé8&¶èj‘t)Z1\•T„o™[¥Q‚%®)~žR}‘—ãõ{› ŽÑþsÂÖÏù-ÖÓ·zGªN\­ãbâ¯D\±{‹R,±•ТàÌB¶…\ –À›3oqNÍk‘—xùÑO» ò‡Âc ÌOüü†Y‘l Ì™t±óì8ê©WÊpO_qí±×›c†s$¾~@ÖTÈovVò£çVÚÊL?uèPV]ª<6*òd{¤ds%¹–½\:#çãE¡2°(e™¨AÈÊ ý«ÂCG[Tÿ ¯ä@ªÈUcÚ :¬¦­ô#Ʀ?G6DU¯>y„yÀýÏDtÂlGu/@«ß÷ƒgÁÏ ’Ê3sÛ±ÏYMÃÓ¹ÒOÝŠ¡©¿£˜ZìP Œ›9.Ï“µcÛ™ç¨O)ð BÏ0×G¿/†±H0g¾Àçd—g©Û»o¹ë­w|ÔæÓDˆL÷ßy*̺i*"WU¤‡Œdº@j†ËM“ÛÕÐPq<ï¬ý:¨Fz'Þ8öÚ¬.ئ£{‚–¶Zg/F<)ÙR¢5:•W§¢Ñ@ùIƧ­c£m-¡'³y¢UàÓ„°Ô {lä½Â÷¬0ÝSV&¦¯ôÍAX›tщ㟳ÄR.Ö0ÀðcïwÔL¤?d¨únBúxΙ“Y¤#D"ÒÄùTh²×ŠpÁ‹9Œ£pA)=Ì8ºWQ”H±5/€]9 4Ö¥»Í™ŒYÈ'Ž"*Ö†\ ßߨ. 4<ô¬n—x­Ž|Äü!i–±Çö,1Ã("òݽ‹ª…ÁŸTÇÿ)¼V’F! Ñ2B"ƒgŨ›—>ä×»paŸši')Iã>C)€@¶øób¦X¡Áß—ëzõC=¡>¯Â3DvzµUWµ±óÞŸ‘´×Z ‚m{ñ6F¯öéÔ¤4<É”ÛWƒÜ•»«ÀYõÏîìB…p¸.XH•Ç&/Ý%ÐW÷‰“§á´œrþ·ª‡¨ |S¾9²z>ÒÓN{âU˜rz7à3ÀÓ DÖÂ>c)Geìòð°…TjÅ;-,âab=]â“°Ž´cØÆ==F7X|SVÏžåÉÁ—rÜxÁž/+†â9Ñ3i˜~“¼u^oá¦+?6ù*ùµ&uKÑ[›xT â7þ)“Öð“RáÞMm±b7>A(è„6Ú»÷žu¼Yº„kTtÅåpÔß<¯/0?bš¯ˆV‰À˜‚¢ÈO¡5º3->Ò3 …Е^ý¢;·Üù£âÐë¡ù»dU;r÷¬º Þ<ÛÂiÁ< bã—Æx«8AÎàRÃì¯/=8`^t8,Xe¥t:ÓÎä•H¾/ºÁ:\jzõ@„oÓ“ì1;-Áýì¸E¶¯ã;;Õc•©8è@çNö÷ Û|-9ÜÞä¹O6L\ ]Á±’5s·?m„‘æñÁ0®` ;/¾*æbNDЙ²ëÙ8- 5š7Цɼ9šW^ Á7êÒ™^î]e>­“Umßaåô›DRÌ,ì€0öÏîüõ |¢ÚÙ‚™Zä{³í ¤?Ò‹5~.}‘(-U“ô›*É"5óQ­¼Ž¬üÎÁR´Jƒú_ú²*D¸è^+fÁŒîCsz¾äŒ<ÐøÞ.Û¶÷ƒÞd9áiÞegÕB†&JÒ˜N§êN~•uþMçû¨F öõöÕÈúSSAx†·ûò~@·zñ×rµ1f†ÆÔ’²OOÔš¹¸¡O`-­ä^fÞJ¢f€’ç«WC؉ß>˜gí¦º¤ö*KÝëÛ>ûè©A Êe`Hÿi"ÕÈúÝ[?Öfëíe¿ÓɶµX¹Æ…“ß5Ñû£Ë:ƒW©®’LõäL&€ ^ë:ÝÅÛA, –Ï@±7YµG _O…óg71˜Top]Úr‰~«èÖ("‡XvÈ™Ñ?ªÇímä3¯ ÔƒÌ2eF:2Ö*ÍB¦“†SÂw£äÁ÷^z2øÿfëZ=ËèZ}ó*ÒØÐÆ½y¬\”†Í'µß'1>¿j²:‘y(^ø¡#ä‹#9QVî—óË•©·qÈd–ÅÝ q£€á(2ª÷ßаÝI·w) ¥ü…Ùb‡7fθ­P#á¶êÕõå7qPáÕ t`ÌþûŒ¾• >|lHI^AºŸ¿¸ûw Å™·.dèò“ûCÜÈgµëzH¬Z4þäóú“¢N²=þîæVy<ƒ8û¼Ã6,ø»k·>N‡˜¬ ò3RNƒÝIÿ@ÓŸ 2JQ³¥uRÀ›z9¶íCª¼Æ~±ιÚíÍ­¼°‡®‚ƒ‹kEN.ÊUðc#bûÖB|9¾MÍ1ÖK‚¬ â¶îÒ£ìežÿÑêË‚4ä ¸¿[a…ÆTázßEUo¦©§ž‚ª ºyøû¥g\júÜÖ¾†#)ZG ßU¾º´vÞf!q@ OÑ€¢YGõÈØ„KN¯ÃëÆTÅBe~ªIöϽà1*J†Ì¾ûõ Žc+E±ñ{+4mùýjZŸ°ÁèYàÇ¢Lñº$®©‹8½Ã3ln’ auýð4y0Öÿ-M¥íÝ<•9+³}ó&-ÏLÕ6€ Æ€ü™|iZòÞù…­£§‹6j}Y"°_]lG¨ü~7ÏñÑEa'õßžYåoÀ’×çßË„Ûø¼;kYÄUgºšó—±3í6ÂXz¦•Ó1£|!.g÷gåÄ–[/rëÛ¿{ m‡Íñ29Š’e.òNÚÆlóé–8]÷Ï êü†©¥¥‰¿:~–v½]:|׉®ÙX˜ù˜3LÁˆ-mXM"—­t§](ŸoðFÕGP’ö®Ÿ\׸¾ Þv—››çÏãä ÅÃØP <ánŒ!›ÕeSâY­‹é¨2¨¨£¦d¡›÷è#шì¢gQõ*¤yEFω¦ça¥"ºì…_´?¡ˆ±Â+¢¼"ŽYUœ»ÎX€+€Ûù[Î9ö–_(ñJ•ߣÁÂ;Ð{˜æ‘:Ö—Êr ¬{lô)«WJöÌߢ­Ôhxgô.¶"à=[¢YÌGuhŒ2rÉ>Ýdg!Ÿ§ž]ÈÉÏØâܱ7Ÿrå†ÂÝôj &¦Ak¿)aYBT·×ºÛLj¶®X F%/.S|H2WŽõ שLf¸Í5pJž×|ÎÂ[(ý”ÙEÉg¶¸æÁVpè,?_´ù»IJ…UÕôŠÌð)ª`°P(öèá Ó/}†‹pëúE&Ñ(Å gáVœh/o;¸@¡à¯ÉoDÒl=FÈ•"ïsNf°?^ÍÄî65ªû¼~*WÌ4¸Ã¬msÜ’­¯ü Ž)›ña”#­\Éö% L'+Aس>Sï«Çeâ¯&/-× ¶i[ÓlP³L¡UH°° ;gèÀúhšì.xulÍ'RY¿-û}cyÙ½ù->Êœ›.þˆ»¶™æúéÛ–Ïùéšúñpø¢‹%[L BuDŒ²žÀ@wÆ?Î_¹Bz›Oªo®®Û«œ›-üZ¬2k›5¾Î®G0¤ñZûÔþèyu…¡A@¿tÈ™Zû:púJ%<ò­{îUþªtuqó+y¯0IɇO›)ß°:2°AlÉëMquw÷B¥LnÁôýþ ¼À'é|¸Ãëå85K*‹Ø*ߢθŸCdo<‰÷û]ð÷ÓäOÌ —+Mµúú¢véRëiîŒ1òÇfâõýÇ\ÔlNžùR¢—û¡t+6RªøE ØXf¬okJëRCüê:/«t[óÖŠ½â‘û LJŒë¦ €ìÌß4‡´ý›_æ ÌZÜP!ÑêHåæßJ*Šs{=RŸ~ùXPžÃÈ›û hs.B±Â);í*øBèßuÚŸbû¡[‘–IQ´µJ/ä©¿õ•yG¨ïy‚Ñç'M_—½6šn{K 0K=î+@Écå5!*º„mï¯!ì•HIkbR'±£ù•FlZFâòŽE¹þÆlÉêÜiÊI‰Ht§Š€Y ‡l3spÍ)üÒW•ô^õ~Äz=Œ÷—Mcñ½”Pü˜Ó3ã‚ Y9¾'Ä]ŽàåwK/”ˆ€S `ûIƒ„qý:ÇÌ´¸ïKÛ$aÌÁ WóöÓªKŸÅêF }P‡e鶯öÝ&i’‚pn¢.¢8ÀZE“SøüÈ 9‘¹ð[ÂcØÛÉ&ìóžÝä=n‡Ú U#tÏô}HŒwážÿÊmÄß•‚|άC>˜ó}wosü%ÎÅò÷OÍrŒäY[‡ ²,̹é-Y9ÁYN„[Û?eð¼pª, [9ùë¯?¿c ‚Œ×2Íþ‹ãµ/“1ýÀ×`Ìâjõ‡eˉÜñ¦å >¦Êá,’çe>¿ßBÐn&eÍ»ÿ@!‘/@µ*<ëö¤ž©¿¨…ýÄ‹+ý_Ë<;¿gê‘Rù´¥´—$§¹£þŽpC*öTÚé°‘LGOI¿ºÑ##:?®3¯ 6q+G£]ùÞqÜÈ™oÜET[¶ ­O>KH7àXϵÙM ùL¹@*4EX¥ïŽùÑŸ×()쨜 —c®æ FYSbÐl˱ gël%'-Z±EˇU ²B§¨í90½ÉNc‚«Î?´L¢HÙfA³lòÖ–¡ÎvuÖƒÜçØ6AâäOÌ×WZŽÇP û@™±åO¡_/ýö%´Z< «%ö.Km²¸ÄÊï}cGuE&möFýYV祔..󾉅¢¸AKá¡¥¨Mx– a:¹Æv!= X "=¹ç[`¢›¥ŸdF÷{^j)r±"ïvÚd¦O¸ó{¨k¡Zì„cìœÜ?@( ±ÄæÂ‡_JÇ0rwÊh1èà‚—Gš±/Öý­ š ³›Ït' Þë\2T>Üb?m Âkd»ùNNí´êM*nEòºøTœi‹TxóŠ«OIÄüˆ¿5Âgð©>ƒJŠwŒ Pô'ó ü[b©+àZàvp'ï¨_x/-rDú¹}ð®‰=åê4†o›´jùͲL™­Ç˳³ÏB-‹ê1i±°H†!B$vÉ7CAª$:¯iÛ¡*9Øß]T]>T±ÃŽ£Ühm,æcæ ‘»³åv /IJ“y-ÆœÖþhGÍœ„4@Èð^·×¥Å‡…(F¹Ä£¬eSã´ûêüA–ªâ;çç—L,™eéÓËŽC'!–s:4ÛQ¶o‡y6e®0zÂ)HgÏ,óöÖæâÅ®œ.Øûâ“+$æ;|©áY6 ^}…AO¦1AÌ£l†Ç-Zàÿ0˜³I»¡Da1nèÆÏ²?äÕÕeké¡®DÊüx10¨L>Ÿiê“dÕ®ÌÓ(æÒN&ª­¥WYéÊëŽÑö˜&… Åùzüî´åÏä(ÃÆ ¢˜òa%Uä4ígÐŽ+I’/8€ž¸ŸÉòÆzÕqo¶5Û¾«JR÷N»¦g¯XK‹') a_…{Â-´½Ë›ÔëÖó ÙŠÔÄU™Oøìõ˜YU0€VkðJÁ Üè}Óx*ʼnÔW‹ÝÈ÷fZ EOôì°ŠWgªŸ°ïÌ-GÂD‡ØWjÑ´†áMgŸýå;wiJU3?> üý½Šk´f+!vJ"Y¡•r ,ì/t‹ÂOÓJbGçߣ¿ãÈã„€úù™f?ÿß¼› ½amqU‡M×Q~½ª…k²OÙ5oüÇû™‘pØüY,”„¤sɧQKÅ®P±ÍVç^,çÍ;ÕõW(ôˆñ³Å>Ñ1Df Ç<Ðjΰljٱfýüšq`<É<»†1 …¹SekÕÉ{T~½d> ˘“Åð,¼ö[ø×?V"=¨4ïïú”†CÖ¾—ó2ì±aûEê i6ò/Êÿ¥"¸Ø  §…¥æêòRúÉ/•`fkÄCtå«Èˆ…²–%Op̲„†“Òýû*WH·ÜfâDä,Õ-ô'QÏó7&˜¶Øu}ì˜Jã¬C„6 ÉÌ †1žª}Rã1ðÏݯðsæ†Ï »ÖSg:Nn•ÆÛ㵈>ŸÖj^ºà2Ÿ‹Ï%Ïu? –á<#ÂúûfËC¦ôLrµ÷´ÉUÁ&OêMÀèÎär>áWà…þHçš@õ‘²ïý7$T :Où K¨æ†ÉüW|v`íÛ; 2ÔØÅ æø]\¤ €àÃVeaù ‡z¤dÄÊI0]b¼Œøœ¶y¿Æão’ \úɵ•Aƒôë2Ò1>ëùÂSW>@ëIùu‰ÏH»x˜ìâ: ¹ öà¯oøÝ=Vþ _xc|˳%Ô$Û(£ËÃÅÛÉŸôbõpÝq^iÂGà›H§ämˆ“öp’ôµR¬Òˆ¼»GË-ˆÜ•¥òYÿ}o¾‚GIŒá^Á``Ò[‘¯8íÀ¹“@üfò‡¡+öWcý B$›ÖŒÙͽZ°÷P.w¢#ë¼êWE˜½¶p}«!§5?€Í--» I™ÎÛ>"•tGJÿº£ëŸ ^í×µŸkÒߎw¾IÛh²÷áÔ{!ã tƒ‚‚F½â Ë3sé›cHþ®¾6ørRßȇú«c†b!þíùZ쀗Ðï/z®æ³*pám½wòöaô¿ê;èk1>5àuÙß—R‚Ð=îj‹®éÕª‰U>LKëÉX-K½r>Ù‹wáMÆŠ#ÆG{bÊ ‘sÿ½á³Æö¥ý]Ü„‰d›öôèl Æ?ÑP›Û±¾•eÚ¥÷ÅøÈÕï»IßεqgüͲ~œ®w™Àg¿NÊ .i~^¼‘3ɱ´,˜C_|ó¶ì,Õ?fÉéÍGø|0êQ¿@¯0ÚáÔx”…Ïý†·49o'”­Ûn-@l!AÎ×¥†XèœÓ不<‚a„žA×XÚØ_š£òÏ W ³ùÜ'Ș“³ŸYÏv'åšVaÃÀ6öÍcÉ]#ôÕíËïÌ,æ©ÕOm˜Ï¢NòêF–UšvÊ›pn));Ÿ2oìíkí9)ZÒ½êé'KëjÓ¢aÀøÐ͈ç±ÒY‡å¸¬~:ˆ€™Ãc {<°Êþ=’´[¦ úSÌËh üu‡Æøòs‹(íûå :›VhÙcëG)çz pü3i7ö ¢ ‰ß&ÄóIgœ­jfN„­ðeW,¨ñ`}rdf¦HJãT²é#ÀWuVéËY±SŸKÄu*711˜ªG—žgX¦šŠ©ð|Ë1eÔ“©ù„ €’®iìhð¾ª* ž6DÆÐÏAãLêäarh,˜14Vi‡Çp¿!éóó‰ ¼â“-v¦§¾á<Áºè÷{¯×—86©t~‘< "]Éì#âá“¿”Q$Éâ{]jañfÕF†òã±V¥-]ým{å1°8“Ehˆ$°0bMÓ©²qt¢àŒ%‹œ#O•ùv[íKý]´Çö)£¬v‰X£«ðÊëƒÉ-ú†´äöÉÃPaÿÕÇÀ×icïúÍikìKÔ!w¬>C/乊V&sñ.ª#F9€y–±ýÛt˜5Ä"Á‚ÉXZ“¿%ÖÜݽMpÃaZòæe^Þ‚6AEkPŠÏ~;±U qû!VkVyÄu»¡=U€Gô Ý©U‚|ë6OWŒ›Èfú‹‹|°‹æ3¬®‚}ò.₟Bæ²xã~~}þdq0L9ƒ I“±X-P­¦Þ|"ý@ò ³Ô/m¼‰ú¹¨ñ铞â>§sÆãÍü,Rº2‰4È®¡ƒÂ'X÷›$_¾¡p€w».e P_F^¬[6û´ÉÓ苺QX¢+ µæ²‚û|Žó>1½i‰ó‚ q³1Ömã¸ã¼é ð¬nÄß»#¦sÜQ"¿1l$›_|ç$Ë}¾q²Ùe?qUÝÇ.YöøHþI+#Zا5U´æ±V^©wã­­=Û=_òO*Ñ®à?Z¹]ñA Fb—Žæ¶„ÕÛi‘©qã#A8b¾ºÎ’€ JµWÕZ6ÆÇ¼ ×eñ¥Oá¢\¬_*2¨4ÙK;A%ÞÔ蛉WõÛL|ùè!‹ñcºñ̌뇕Àl’ºÖ(—‰}-Ý/4~¯w¶1¼ñò›‚bNV¿Ù_ç:4ÄÒô @“k …=rX´îÂ+2ðÁ³øR‘qØ‚(pÙiÝsضkŸ–Cü"ô-›­ç]«Ö¬X–KD'd•K8Q@ú4¡ý'kÓ,ÊåÈ@rÄ6_ÿe|¤$ˆô»¥O¿q¯¥ùÕe"ý-¾ï‰‘A­)yùYÞŒøTû¼Ù ’Sú ­ã³ñ¯Q^€¸™­Š­Ã¬Ð¡¦ÒT‘1Ï=*ä«Èç’s¿ï$m±+›0E0åCÜÊ,©I_~AžŸßÒÄý÷´bºA™÷3ñ¡‚•8MןðùŸ?'ÜÅ*ÓÎ݈nG —™:nÁääú)ŠR¶~Í^#¬n>š²¼Ïiæ4¤ÍaÁÜ_¿ã-vW‡V>8-(ÛšòÉ7 nÃŒ¸7šÈzRÈ“ÙÂøI} ȲíR4w¥;×ò¬z!¶¹ Àv*?ôŸ¶Áqq¸âNy@\ž/qÂé¯CeÓMÚ“p±%–¸4d§ß'Ã'†º–Dy©ˆ1Am H&ÚoO™µøEì(ªPRÌ N꺞ª»<Ë0fãS5ð êÝýL¤Óå3‘{ }Í•Þ JÇnv þ!µý4i²p]cr,ñecIaŒ®z<YA„:}¯ÇL (¢¿¿Î&è8O>U€ñ®ã¼¨@¿ð[~h,•ò&a®Œž3Á(+4ä]B¿3NmËti)9âé Y;xHë=ÃåÍ“¹¶‰töU·Élf:½qS§-%)#]J½M4gê3Å öN½(Ç¿Öï 1ÒiQœYijò‹‘"ðÞ‡ `‹ \b°jœ}{T”1¬ÃŠ·Hó±úS;™-‚#ǘ`lÉ.ÐâÓfhòvRR,k…Pp5Z¢y“wâê>p~˜Ïå};DU¾3¢ÅW€—!÷ÖMG웞Ê`nÛhAÐd«4O¹ -S#Ó\oN>€' Võåf«6>Ö°ýQeÏÔ_âE®Q‘zGIre¤Ó#ÿhësB¿ŽÄ+‘g,ôàôT:s†2_’sùU«ÝÍD æÑwmõí<(‰MÙÒÅñ¹ã¥/õö¹&ƒ¡f¿éŠaɦã_ß° ´Tÿ-§Þ{#pÑ”¦YÃFÄ˯+¬à!F»Q1Ú•Š¼7/ñ‚.){? aým¶ISÉ‘PwÈ€«ú±«øNZâeùúÓW•“õHù§¾.š\^ vMÒ¾s³¢jpä’y{kô4n§ß8ÚºÂû#iyÆY€ÈÌ׬<-éÉemxÃ̯MR4¡}¼œ\3g}!¿ùÔÞZ„k;ç2ºN……•˜éè»[—Q1b,¬º(€V.(—¤ Ç¡øè3ª½^³¬ªˆeè9%}|ûs:Æ.s†£‰± CtœûÆ;¾O²_£‰B[¶ý©g©u:IÞÅŸ*ähœ0–KÖ¿´c rLèØ{愸Zxù­ <z:ê;[w¾ºÙ:ˆ¯lùPœSËu»°#èòd{V tã¬Eûûâlâ‹A.Íb[M8– ;Ñ<‘í¿ÁŸ^yw~eZµ–}1™¼ÉGܧ0lîÝsÉfúBÁh¿ãÐ09g€<úô·©Zgam-ö‰[_šQ÷êb)îÄõtÐ¥ÉÍû) ¸§ˆ”Ô‚\ÌÅôxè"Hü+æßò^³¹|ýq:÷é]éôß¼PæÏ$ø÷%ØPä\œ4,…óØH:é}¯9^‚©ôú²/ x¤y¨o .TÅGc§´ÃÁ>_Í'Æ‘04\‡ï+mó]·SFÎàÞo=ï’c²!k«¾_£ô³ñ,âY|ô%L7ïÚzç76ŒzÇ¡\Àêøƒ]Ú–öDcÝ ƒ† Þe»_3|Åìød²jÍßëu›¹ìßKì?Vÿ Ý|ÐÌ®Ç2¾k%Kß]äƒðÓôÒh‰Ó·ÒäE+ìJ»@'tñ7>eâ©—^¯0ÿ²Œm€LV}Š ˆyˆ{çžZû÷ð2eî“ùO¯•Ì[«d"Ä|á1 »W?Jö-$Èí¿\¿›•½;õÀé‘’ÜX•ŸIϺe&Ƕ–J ‰‹‡ïÐ\ü~ò-Ŧíõ† 0ÅRÒ$eì9ì•uêÛÂ9=’ùðªJ=3¶í:;ƒÙÍeä8åáâ`¦{Ø'”cn›ëO²U- m-µ„éÍ3ibe¦^Ÿ‰Þ|_ÅÎÒ¬¢– ùw\1ø}:C¨–íÚ/82 æÙöõá2ë }ä·´!âzLãaß?§Õ’ýÒÛ‡Ô¾x3}ŽJ¿'X¢ómç¬cã}\ùµÇ»ЯÕ%IÌQòÊ^5`0[„I†]Õ+òiCôôU'íÍ é‘R%41 $“ îÿU¬ª\j ÕçE÷èîÏx%wŸn¤†XH˜E50×lF%‹#K p–t*ÏE*ü(˜ìb1À:õƒÉìgó•×¥r^RDµç÷"{pøÈÌ#<ýD=÷+Äm¤`Œß¾ò ÀÁ92,Ùuýj‰~QâÕ~yÀò ê´öº¿È²Šûâ$*ú±¿ÁÏ˘Šo_þ½Ô¯Ài1 Š{biJ4‡ñôšú&=Ò§K‹ ðüÜG~­‹2u¶ÇDÈk‘˜ ’¸=¸4£O 1O>!|Ópì²ü¢?ùô!ZwiJÖŠ„Ë$ˆ"Ú< ÿö¿,÷JÓ§eXPóuøþ©¤ùß †±ù²Mû"%~Æzø¦WL¶j’¬7Ö/9_ ü—ÝR±M@Ì€žzˆ|‹ÇélxèL¬d"?$bÉÏ8°Pd–î!6wßßûS;ëäz¥víºš¡îë¼4§ÔüYý†ÚPÎxò‡¥¹Ç½¼ñè¿õ-da‰E_øÊYp±ˆžg©_c¦–'F½!Õ}¿²ÈŸ·hIáQ2¬n±µoÁÂ2²¡ðµR1²IW–5˜¯¤›—\’Ùû;t¼ 'åÄ×%DèÈŠþõÒI—OÝßQ¯1:sWôø*÷F;€ôD –É B"£™ÖÊw¥®¯×òX»\¾öM*pÀ¨zÐÁÇñcž‘ŸÁ‰øýWÃÔŸ%õ»²†oÞÌR@]b±(¦§KbìõZHß»‡?J®§ ÈbB[öI5mö¶h~ˆhâWë"ï³ N­ZŵÝ\¦¯·;mB”ñæA‘åÒèTKìÈ?•ŬëO:ÆV jª{½§L9àF8Û*%Ë—Çêâ –*û¿â3£ÃUñ`ãŠbZ¢Tðï)„2V´‰®Á¨=ônÉðËhö,î“; ý…F9‘ÎÅcQ~™2Y=IU-iébÛ³Tó+Ï ”&ŸPi’ëEã¿58{_}«ŽïMUºÈßßÖ®lWÈ^öYí(?H{øï©¢—ÄÿJ*䨥U’<¹ìçó¥<9í}ìSWÒ/ÐÎuKŦÞL' [‰sKý<•C¶*³™wÝ ~øfõ¸ý}ëmØÁA‹›IÄùdôžàžœ§ýd­ÂòøL}YDÎ&0°ÄÛnæ‡ ­\CÅê&p¦Ð‡rÿ¾Ó6vÈDOØ"ì*Ï·’¿U!lûœ1AIÉžF€;£è€©çÕcFyX")a⟊1ÇW¼þøBÇz(WŸ”SêINÚŸ”6×M[΀5€gíЛÐ'AãõWľ;.;]¼ÃÒ7r- qF‚YêïÅt_Ô§±Þ0õÑ”oŸž†p£øY¼ÆäŠ“ñ7E„óé Ú#Í­ô±`EâÅôosôÆ øý—-³ñC>xª°Ùa@#±–JùǦº-nz›v΂Õ5”¿Ë ;Ì'šÛÀî+éúb¼—ñCœ¿'ŽŸ„IoÈFšå'ÇcðÜ­Êç"8ç+dšë[ÍIEähRæñˆ3¡gq˜zo i,ý3ÒýCÜSVùÄhßÚ4÷Ùœ?rŸÊ±ÿìÍØCvƒê­&íÒïmÒQåëÓTBFzhÓ×Ùœñ·]Œƒ¿Ýn¹¢}ÂòKcuø ´Õaôª ¢Ç;Li“ç€A¯¯ìùoq-yDgðÂ,¼'Ü¢,hn²x€Âø×]›ñöÛà›H>pn[¿Ž¡U4µd÷†!L”2,û¦UÇo:뢧lƒ:&pªb”VHü÷<ÅòÛaæS!À}ªé þËY©î¨ÙojÃ_ôWci)wÏòJ@AWtpÞÞsbúp“R[YÃ<:;¶¾Òàvä?õq ¨|vDì¸È¤“@5STV¦—’l ›Òdrz˜ÕG ËâËe€C2^â½âtæÑÃ:!бc!K³I`Ȭv[¢±¼ƒÆðZf¤ªxÍOè5mçFïLà¯ç#Uü¦fK47×ûT)Z‚‹1±ƒŒê4‘æIâ€û`¤;Üñ&P ã#7ú®¦(®&}iû“ðŠyûoßívî…Q2)XH³1·=9‰ƒCI±k0o´ó)Xo÷ÅìG¬“r2GÕäÛs.xS~KWÑ!v3–ú¢V¹¥œÌ÷‰ö|7¬¥õº]˜^"‚¿»àã õóɳ¦9ló»ç±Fé9N[?“U@*ëÒGðTúk_[ÆØRl¦—#W\Ï:D¥Æ.31ûàWo~‘É‘Óïç£VŠ<>&éZÂ] [pÌ7]êoáÃF&ÆNíT¹yë‚ ©NÙ¿Ûß7(nÖg—ü“è:¡‘Î ½oy&ï€M¹{æ ÐEÒ×?­]z§°2Ô:Žx÷Å »z3"¾æ.ÕÁÑPM¯­¦A`À̪Œõ:ûaÄQ<:­¥8'@sá Ä€²pŽZK§þ$¦n^£Ô²UyñlÐôâ£'„¥êßK†B2PüíI6á1iT„kr/U·½?ßÖ=$`›ŽïµöªNfyùR.}ðð“x¢/ «BðŠÿ]ã|ZcÕXvOÒa=ÄtŠ~~“WÆÜÔ†önÓ¯E :ªDrÌêÂsç&dy[f»wöC—qÉÍ!£$Kƒ €Áèmãac×q·EùÈ¢­É9RˆÏØÒöÌóCúG—•ëgZÇÂ+S<(D¸×0| ²m¹ä šwó–[ýz¹I gWŸÄ ]K8·Oç,Yj3/vXŽXÊì4¼Ì£s;®°éÒ8ã1Ö£<øq<ö°ÆHZ˜Ië¿ð#K0owªqt<†UOË%½êa«¸§¬r$Áð  èAC>z¼Í–ÃøÄÒ /d’&]NÜhµ âá.Vz)«MšFÒ\ìÑ僘[ÑOoìðæ®I¿üÞã¿ÖKÞðÈò0üNAeã9ñ¤óXnV ¢ð«°gAqI9Jä9#rzú‹ÿ[öÊUFÃÐ}ú|b¦ÇËE2ö^2fÞa8‚J8ÿ™±<**dýdƒ•àýágŠB² ©~j¶˜ŠEñ-åæ³Û¡&`¡.=(ÜOP5Ô×h¨¢Üî—ˆ‹tæ缉8ËVú»ý¢6Æ÷…ˆˆ-€ÏSMˆ–ûz^úÑÁ80¿Ao´ m`gjçi“ƒ1ÇÍdí­’é4qÉFò$ù[ͦëA¸¯o·Ä•~ƒÄÙ'ÿm/Dgye'vÉ€OšÝÝ^¢= 4çb~¯Ü)&„p¾·À =~´C³ s Gìõt-!/ɆS}E5cäƒ-¯£î‰" °—§ ˜Çz³!áZ5qc[¯óZ±˜›uüÔªYÙ~`ÜáÑa´Hð8%Ã×ú•¬¹®`bl(¢EX Pà?Ú)råz½ŠWâå¹ÅPÑ@vaI]h}HʃÍc´wU‘øxwK”nöê/_êN9¶´øg½6Y 㦵º6uüñþ0a FŸâ—ö‰Ÿ”žŽ4Ï­ð߸qɃ]êHׯ÷<ü+¡P¯}j6Ä2mÓ'RPßKð:rhˆn毥 ¼xK¡/bX6"þ„[ÌQ’wèð—VUXÏK‘d‰¥ÀÉKˆß þ¡Úô¥¿?w´Èéú:X ü{V]Œî@³u=¶±Ï$‘ús¯ó•©Œ¤üfí뤠^Q3¯è Æy,wÄìÑ÷'9g`’Ì*™?#HÝ;•Ñ4AmÓËÈ>ŽõnÁw'<ƒ·b­;00*ã»­´ïe’QøÞ¹ xºEÆ#y½@Õøw•P5µŸÛxoPè ¹®Q.[ê ÇíR‹E±P!¦#žú}v—Œx›ée™ÊìÞb7ÿˆà™µ¿×~RTA=.К6Äç½2²//NŽQšöÞ[™ð›Õ°¹Äž»BÜÞd²›-9/e?²\fr|³ÿK7òê‰GQ¤9_Uxé’9»àm~ðÀf™^-|Ï…¼´ˆËA›˜yd“fÊb’¯t8BÿµFús÷V¢yeQ/6.éû Åt1g¸ g4oµY TƒÆH|±Vƒ®5ïžI=çϪä{Ã)Œ\÷¹œ"±ÈØBi3å›YüQ{Z'jÌéÅMóÕæMfI´\£:µÇëœ~{e-H²òqVUh5’¿ÌŠm“8@l‘]1ØùÌ-~úEÿJ¸_ƒC‡ä9æGis6‹i'çém¤°ù ø“œÞˆáŠŒrø9­¦K–=–6ÀŽïWT¬ocŽUë†89бK*Œ³:µYù—Xÿpº5‘Æ9Wå ðõ«E«Ô܈à¼ãƒ–Õ"R€Õ)·hçá`ìÌiË%>Nîî}3² •¦E²U,8¿ÓZ'B4Þ«4v´òésM«D”ÙÈ´ñ WÇüÁѵy:)ee¹¢–¢E:‚Ò@ uC¤IaŸjhÁæµÂÖ`"_ÁÕ·ºú1ÐÃ4ş㠔¡ê@CE´(Û:¤Ã£}C|®vÒMºÿ–¥45°]ìMJ+OJàßí0Ä=ƒ¤h.D·ŠÒßçŽîk” ëÔAx ½ê•ZˆDL+XÍÆLÑWᅤɪ®žO&?¶@Y°hyÞ_Q—ŠþúxÚ–RœnÐ9‹Àqâýý AjbMúàB çñ¤ò.Éý„/ý‰Ä8ì†ð£tçZš¢YùÍÜ%rþ°9m[hsVœÀRYüÆXr¢V¡âú›òŠw„¯OØýÛŒÄòßëoGEç^ÿ•SŸl>[…¡~kØpõÖ}cCÒ«ah€ç—gÆyyï­¤)Kpli ’íigЧ@±K ·ã¡6ÅÆë—É{jüŽÂ˜òµòõ”C…Dz‚cèßT‰ÉÐß–ÀæK^~îÌæYñ9gBù̦´Ã¸³á^#™÷¼ÓÇÊRa}<€/z‘Ã&;Å;à3Üö—¨¸Òp ŒÀ.h_Ñ'sÑK©Ç0o5-Ò'o5‚Kç5\÷0ÙôÂýh×ÝU È!l ˆáîQ´–¼qséëÛ‹=ë¶%z-Îp=’›UÝ×ÊæF*Å]#U>˜¬Èn/É —ÏÆuŒ `ßëuñ€xâ‰Ï1”É©Kv=j…G¤ tC®Õ¬‡Å=L…è(ü}Ù¨lÅ{(ÕƒërØ[Z#ÁrL#ò‰ž ø¼‰¯/´—ßTa;Øô4%l+ RÁÁ+V¹ çb²‘Ðjpi»ƒŠ!èWoËOƒý «›Á a:%Jò_ϰÖŠøè.^8X”I7=Ѧÿ8¬Õ¹ 0/\nÔçB1+Ûè%·”@0õ÷Gp›;ñ‡ðIï~Ëí¥0ØcK@ \|F“)´ô ì`–Zß„µÐ£ü8w>cªCIÀ[Eˆ÷¸´d!¾uÐrîm.Ô4TÖSÆ}º¨Ïâ4Š´~Oüs¹¨fä>ûcœsvq"$'ß7² pDDÑ7ǦâÛÌ™ Û`9$$›@= ª{üšç-z'¶®`!ˇ"™‚½%]Jî ÏQ ò; @ì­û˜ ]n:§"<ÞÁyE™Ì·.昈x…0 oê?ÌFÛA­-,-ZF#/9påqJQÍǶGçüõN,H½DM G(µîMéñi½w£»õØ×æš‘ü~Ã)Ö’bùŒ å‘;`OÍKŽyŽ¿ ¼Ÿøº+³f5Ôº&¦-•‹º^5mÅèˆÕ0l¼| áo¥J¸½Œ­Mñ)ìEû†)T–ûfÏk}%ÜydÈŽ iý o<å.¹ ‘TTÒ¬²lI;½d“ H¢%}S™ºX71¬Þ³×äðÌÐ#KhUgąí5 ÷¢Në©WÅ”y|×Búk"¾ñ™b‡­ò Mmk´\SâÝ/Rä7ÕVžÌøáÑVœk3Ð-1׿`HÁ$®,:ø\Š÷AØ;±~íFò™ýí%4ú,ÙÓÆPê¶t´I‘ßàÏ/.AøÖ¶™{8 BL¡'ñm$Ä/qn¨¾BŸ¢INl‡ù'M C÷f0¢’«æC Ò2äüÀ“ñÙë×¥A!Ý^PLhö¿jemàÒÓX»9DïiòÜa« V.Qñ­áÇëãïMÉœšC+ɧ´ïöÄW¨Ì­í•¥‘$óH:ôÕ÷]ªgfo/«SÃä]´ô®vx">×ôNê D¨Hk¿ùÛošk/ÙÆ>¹”îæÃ¶¸#£/-ÇŒƒ¯ B]ä~¨b÷v‹ÚÅ:ì_OŒ"æÉ¨%ôÆþ[n·€è·¬B\]-)¦\}¥ûŠ/¼DÕ$¨âàÎd›¨Í³’x^0££ûè­ki,¨MÉGM`~Âì}œ“d''±F~µgOÿø3_ÌßÀìÞ|ó:ðõÕ)»!ZW½áÌâÝý ¾nxÕñƒ\“«_®5áûâ™ ªççR767bˆg¥ò¶Cð4{¼¨o¡Ä¢f:MÔ—FÝ*ZZ&‘¥Z´ƒ‰ÓŠ7ﳺM[I¥;('16HºOÕ÷‹Ž7håDÒcÿ0®(h Ùå t¼òÒaŸLɇ”ŽTMy¾ÆÔ¬”ñ·yãÚú`æ=ü­›´f H‡›éó ÕÌÁHÈØ&;l$b’Èv RÊ¥¤LJÔËݨçǤ»Ð:Gx]©©ï(£¢[ÄÖúqºðUQ½{ø§£"’x³ ÑñÂl]üûØžDBMiÎÚi í4ÎïHÑÒc.¢ûzA¦x—:Xb?+ƒÙ§öÏ¥Ùnu'1PWÈnf÷©< Óà.È£‰È•ãL¸g!øÚ“K^öÏ¿ã„,i(ˆV8χö?c`Ð}_ãD(€‘ ŠOZ¼)´…¤<•ý½à:Œô0órê;×<´\È fõ°Aï5@/ˆ{¥ù˜æ®ìÏ/®S€U¬8ç3ˆ¨`ÍâTNdÍÈï¥d5”•ÏÓ,WHà.VÉÜRÌŒw׆TnwúëëŰPË)8¥¯j $3úÙ¢Ú<)ªfÅb;OóƒÑF¤‹éó%ƒJ?º²&š?ÓÅ2sóŒŒøŸÒË|I ¢³:gëc1m]ƒW³}ÐÜp]¤[â†Vš8ƒ’¤ÕTôówO~rë§@á[ºAöôu]¸¯jB%'j€UƒP¸ q-Çùµ´f_ƤÅe[ÔÍ¢óRý1A9Ê›ïbrÚŸgí,­ÿ±A—šJa¹²ͬ€»÷F6Ýr.|»ìû[IÆÑäQßVoÛnݰ̞ýrŽèaBK¯Ÿ²àt[–Ââ'IËùü7 ΄‰Ø ^Ԩк&uŽK,‚'±Ï0?)K·ú„‚¢ô@“ñA6‹ èŸbÉv*&óÀô²Gø³ <€]­2R¼¦NÓ“(H?ç:dº<´ÇéêŸvTD¥kß3OüŒ'†„IþQ©î9ògx|ŒG­øq´ì‰pÆÞ;Ôï¾q00EWÿèa'ÓËÿ¼û­òŽ£¾oÃ,äçáWŒçÛ=µ—K„9`iÿ­š»Æ/­Ãjí´Ò[DE_†;F…=–P„h(,:ï3åqâÑñk?NROEòšûf–D>— ‹%dàþB¤æzâû{Ÿ};ÚíSåáÜ_)Þ…kZËž}±.[‘r‰¶Úpòöëü2I¿!)К1"‡­š°Ë¿²ð1!íMx=¨i®FY€O· {ùg·;·&¢Q'1ß3ÿöoK¹‰/ÅxÇe±ˆ +â…ÒÿQ …Çq NöÓ,ö({Rr†>ÇoõUÁæøËbÖÁ§ü‹™/ô#a0[¯íHU­RÕa)Û.!?Ù˜yÜvˈ×Óä´þiõ‹fmçåÒ>ÑÿíT´:Œ9¥3­;¬’ Æ6rËüÔCâßôB¬¨=íKJZËÏ‘Ž ÷þ\D”å'øRfY"nΗÒ—WPqÞ1ªpÿ|F*Fð[ÓÛg¬ë)›e¡»Î'~XèM^ÙýN•¥¶Üà¯ÛCqaöéô– @>Û›±g9â\tø`¿2¶×åuí} ‚jz¢øyÇQÏïš>kŒGJ¹~^âG¡{¾ Ëúž×Õõ2î1'–ˆ÷dxJ6Y:×+Zìuþt¿ÊºI+ŽÛ8R) ø”>›÷ÊÙíµ¥W=w{ƒP¥©”ý€Ÿ=•ýçm8‘Ág:éÙ66ySlþbÙöQ¿¢¿‚r½èå1aœsÕ¬‚ÍÉÒÆk¾h.JŒ<ãàŽ¤”©gv­úQì½¹Œƒ$]ÿÕ«QÁŸ¡É©yiò«²BÄåFÅ}úÞK!ÿª»²H{ÍŒl2ü¼È*hò»Ñ“K[î AÓ¯ÐÊI¢—˜²„ÄGª”¾‰˜‡Ô*L| ßrô”ß,¥µ 0.—µ¥†îjµ-oÃq¶±ÏùŸ:;ðˆTUÖ>~ÃpÂψ¨çgZDÎÂûín„™ò(G¶õ•h3C€ ÚXМðÈlhh dšg?¯½Ó¢§¿+0ò÷)O6á˜ðö¬Ý—þ`§£LÂu»¤xHÝŠ¡Ì#'uÀM•!/¼vã6*šfþ—¶í(´Y]Þ#æ’ö½‰˜vª®Ÿ$+ñƒ¦$(îçÃw¾Ú×L*¢Q›åM ó —c Ã-"{Ya²<ÎAû&¸y°ÑšÑ@C X¼0OK‰è‹ƒ'!ÚBÀ:X@X_é½…ŒÇÇÖ´³ünÃDn®ãö“ë»W†ie…lkÕA˜†Y r?WmG²yç$S~¤§>‹*_ÀvüÌú†yÍê8ZcáD8E¡Äã-wSDGXÃ=ÜúùÁ-¨VÚ‘dÏu¹?ü×°±Hƒ‚” Êó‹ñùr,‡:¥;)å™è¶ŸtnM²:ÌKÀN•¹?K’[u‚M$L؈½©nàÙçÖÈwº)M™3%‘ ƒ!´¦­Âñ^Fêò_®Êi;ÑXŠ;z¶.ʲW”y½i«RHÖ!' ­1gË]UÔû)F±ÃúDA~d¢ ¢öº¯ê•‹’V6éH/0>…Ô» e;A³ä ù:Íà¡ Ô]ê–ŽBÎŒ)˜¿„,c7ª‰þÖ¡» \VëïŒêáT‹´û™äS‹ªÂâlâScøþÆcÜËÏŸ@TŸ ÙWø5ô6cO±"æ•×mxley@ýÍŒ!‚ϾñNX̨×2ï–Óî½›Ö]çb݉ٮg^@„rE÷*ežúÈ*ç™}ÏÅ <´“ƒUWpµþ¯ÝýÝ~`oAÅ|î÷D`zî}IemÜ‹-DntÓ½WöäYmTÅŠ@`ù~„P„y&|vN¢²&ÄÂ]_G(@ê< õ :¸Â÷q<·vi}’CS9Ú‘û.ByÑCÒ ñyi²ûŒýÔúÓWü]>^ˆàÆëô©Ê熣^+&Ãä7C£Ëcíg]±~ýL Ñü!Bž#ËÉT\çŒ×&Z»å+ëÀ`‡|ÝN)ò[d"::wÌßZî¼C>%T%6|ç„«Ê&`¾ßPÕpÙˆ³w‘‰üȇ(¦Ô‹…ã|BsÎäyȸW}¿þPµ«Êú5ý½ý*gPxhðúÅ;°|`ZâÚN˜Ñ`s£Øûd‹”÷‡Yà âúø•Aê+NвSjþ>KKë­) ¦7µJw@YoJ»Z¿âN#r|kÎ}Ê%(Åð¿<€ÀYâþNÙØòç^n±Y¨­MõH[‹’L4Ÿ]µˆ½³:¡_In)òP&~¹î¦nd”_Éý\§þz›IεɑÇYb›öè¤kAíÜï÷•s=-é„Ý6uçS¥ÚÄ2V2,i@5-=»î‹×yS³^ùµTçë‡CZ½½ü:®ù¹õ^1šˆUÛ´ùÃÛ[Y“×SÁaºäQÃh ë4š¨ÁoÒ/ßÐÃÅñ‚ ”ivŠ?¡à;(Šðäôy%E;­ŽQ£ðwÈøNŽó*ô µm@naœû ƒ3–dE7vGyö¡¦¿.Ýg÷š9#]Ñ’³¾N„ r[½ô}Rzã7ÆÝÏÿUÿ>€ké3kî×>Ñ(<÷‰ŽwL³A £ÖÉ"–ø¾žb²Zu§Îq½Ï†ûÃä‡C7Ö[¾é´ª§ÇT-_Áa1©é™Üµ¬¢|Нv¥ƒ§‰™öäUù Ûº™{~¯æÏÅËï}FaT®–v)Œâ ýmS” Í…H¤ŽÇÌ`㯛CÒÐ1eÉ5„çvè‚¥ oTd®ÌC'5ê<ôLœ8É ºCwhô길¿þ¤³~€öe±¿Üñ²%Ñ‚ú; º K†s3ñÝôÔðaÔiÙ•íÆæÓóÜ,Áß<Å\Ӯ˧i_%r†\h˜  gÚUþY{¦mLKn^¸Ô”Ýýâýæ\ÐkŸH(Ε? ¹Mõ~q×]UO ù^…™ìc+“)–”–O´R§‰L1yoüÞ~hL{X+1C[ý0ÔîMAÁFý`Ó¨áÏÃt¢¾üé¯ã:Çý-ƒ^$×tíFŠbu„ø¦Š{~kѪ*<|ä³&<°*ô'E{H›Ð„ e#:Â*â?ÿ°,•ÖðÂfèr{]ß` 5Þ$/§rÝÛ°àst¥5ß±¤Îz½…5 @$£|Öb7Iüöø®>2 ¢Öß¶!Pr¾÷gOLbIÍ”7"Ó!&øÓ ¤\[OÀäù¨í€I™!åæüÝÑ——©úëWã®y߉w=¦_½|œ€Ztfüó—{ú*î@fRÆ$/š¬­l¾Ä›KýxšW¬|‰dhÿÖŽütÔ„ pbëýˆ2ü8ú´¹áKK®ÈžÝ.`„[¶uØ0ìˆ%ë]Ò˩ֳ•W>e»DíðØÈ_Û‡Í;âivQqETP vlbÖ—Ú~öe;Q y¾ô]Ü{ÿeÇlc’Ÿœ’êQ™,¤bÒ¿.IfÛ{4^÷K%µá<²—"æÂú…KÀq2Á“#¾6¶e<öO òo>¥ÄÄUxœgÇÃF§x9ò™Òf;P+˜å KÕyÚÆ¯¬”x(V%U?©n¡bÉ ‡ð˜"E‚£»‰Öç2.ã­Ã¿ŽÓ½xÚ0Ú¸@Œ6eY97˜É2Ì/amƒž²{‹+F G˜¡(+Ƥ 28X¾¼ rñ Áˆ‘ÖŠ{#—&U(üÆ&ÀSB7òèz~=Á}ø°Õ<öîxÒª‘Æ¿–±Ñ$×éo‘‹÷S´„©ž(DzVgRqÔ% »ÓàÌ$ƒ8K°8«”®¸ò<ï}ýHy×›· hé; CÓnò•hÊæ©Ô,·…0ígø`¸_ƒš0ûNMx%%ßà‡ˆèËW ßÝUØt²'b¾òê¸+¨FKgn¢GŸ€ÖŸ›à!¾ÍÓ«fƒ\¨üfÓõ3Êøë‚#AɆ—Ì¿9|e6j¤"=Œ|ò,„Ü©{dX™á-lÐRÖ&­þŽqú[cý){;8_&=s÷Kð#”ÉÇB7ùÄØY´ú±ƒyà·xDxö€ú; ²dy£ "‡~_®ú{±ÐÁ2þ×ìÜgþßÅãmi_ÃÊ,àP²ö]bB«øoXÑd)@&ÜÚë {[GF<Ï„«³Ð~K„Ôùù¥C—½úÍþ:òS,œ»Gzüâ¿1ÿ( Å€Ii–ÌÖtニ>O/s1 É_Òs¿˜ðvQ8íY%%“ùƒá‘⫘V^õ< LeÎZñ9{Ú©5@d…Ê^eh><£ö¡…Ù‘céyFšÈ ÐUCô-×GŠ¥P¹+¨Øÿ‹?dó…ðžŸ|;¾J‘­öi9mREb· ÛN»o¼xum[ùªU‚X¢cùÑ-¼7SìMµUU{HRr²¡ÐÆ£ûr$i•7e'ëy£ðr„,¨0i`Ëõ»b1z¥Åãg^¤XµW,VËßw’ßP‹–ïa®’}8€´·/’žÞx ¾¦Œ‘4AfMkŠHR—YUÏ1ˆyîn¤±…™g£Ó£–fWÐbĨ~Ó¿/0D&˜â$^zI[ב¦¾ÑÕ7.pw´‰×ü¦å [ü¾ÛëŠ(z óx€ø^0ÆÎ(ÞO@•íý U²úK% °ïOâ¾ ô쯯6Sæüú/É'mfû.åCó5G?…½Mÿ½K±·Ç€2äª[wÄœ¢¤—¦ÖSä¿pŒ¢)ë]E+q»ê$A0íĈüD(|?ô¨ó‚š;ˆ°qÑø:L›qµ}™×:ž¹SŸˆâ1jÝd[ÊÛÇW¥"X¾ ²‘“|­lçtvAR±6¶Õ'îj¦R*e;g}c?ï÷¦˜aÌ&‡Ÿø°uÀƒ¨^–ò³ Úã]ï‰,Â‡Ä ü‡ZÌêêOʆ¡ŠºþÚÚHërGpJSNÒxù™½]¬ôèÙ ƒvŒý·IG^5FóŠÈµØ†uíäZ†Â»õÁ¹ÆØõŠ-TG.x¹Rm /n…Ãú÷Y}JLJ¢Ù[Ú´Ÿi~J*#Þà]ù]¿³ÁgÅ-À‡@Clz/©ô˜]EeLßtM„|ŒÏIÎu]o3etØòR´IžJy[Ù3ˆ;üxeÜ -vAÑb#Òë·£q´µNÿzB…/tSŽøÂ¥úå%k¢|™o.›è²XL `ÞÒtÁ9XtºÓ¡žâ/ Pûú> Ó?zU\@ÚêBÖ¿…³ÿº$@ÓBÝ-ß𠯣þá{¼¬µd,z= ^¯BÜvõF?iðøíÒç7ï?‰8«g_ž×§Ý¸•xÙ({˜±ÒÆýØAx@dŠ‹Y d5 Æuœ^‹°¯è¥ ŽÐ®<Ê.‰¹™Žï2rJ˜_N…¢œ¦¥;?%ÑŽÈ_ް¼ÿ–5,QÙÿÞQ²ºh‰³õÌWOœê=í1À+n /™!D+kÀáү뫡f›îÃëNjϕ ¸ãg¸Msçx+mĪ‚YU_Ö4SÝ©Q!r?QÖx ¥îKÏðßùÕå³ûë_+ƒMýwïïf››©¬§šI©¨÷`Ëö*.KkÌâîwïYÀ#äçVWÅÀtnB5ó\b«eœ`ÜG¾…nÑcìüô{·.aPÞŠb N¢"â0ÚY­_´T:P Ù’ _¦LÊøŽ !Kš,IWTðD»âzÆŽ „ÜJÐ]Â1Šc×Çäñª*d;LìŠ1šR¡ 畹n¾vîP,ÏÁ<é—=>®È?l£µ›tkbHäÆ:í¨(> %\âú×6QäGºt˜âA•WÔuc¡–Ð^Ê ûÔ‘’Ç¡ŸUáMsâ—76ÇÖü"ÉÙª[—½&Êy X+ÌÌÉóègç¦\ÊCŸ‹7X¾tžS,Óú«HL–F•™³‰=às;!{\˜ávÄ"qñNߦJ.$¶Òí‹1¥È´ª»¥JÐÉuÒhÉs^ŸP8¤Cr”k鱈i÷ßE¶ì+;1Ðõlûz¹:~hù¿N¶m¬ªöQ)£ÂÊ%|ÛšÌN™!óc挆å©°“Û7Û5Ä.òv©Á½xlÏ8vU8}kÙ|ügtè{€Q7L¶Îaé„h +LMq‚Pwf’l˜õОjwt¿AŒéPa)=i #÷†°òÉ'ÒŠ+².3´Ø8T·¢˜[bù§Rí¥¥Ÿüá)e)SÖÕ£Z½êäK‹ÈØî›É\ÎPŒ¾ô+øpÕoÆÙÈÛpŒþGçÈ„ôÈL?üß+òø,⢖j1ø8xîØÊžzÎþ=]€Ûfø¦õmÂVïÉA¯‰ê[ðSG>•‘íû…PT„xÉNÕD,s žÖøƒHϤñ·á¯çs ,øŒ‘CnœµGS·l"2ØÓœd*§-g™ö v~èG3ë'@ÈÏg74 Ýéº$lÅ"&ðÈ=K ËÏTŠ[ų胯ŸMàœ¿ç½]huÚñ¦¼ä÷ÉÇ&öç¯Ç†'‹ÞóG¦ ŸöˆÏRÛƒÚþp½ËR ´Ø‰.-Z´ÐR®{q.BUH.éZ±òÒø˜&Nж }WÙÿzˆï4À%K=¼=××#>i5(¨ÂÒ”V¿[»žw&ä­¦ºT>õ˜©N¼ŽJtÙÎN{tÂ"k+aË2ß@?/Lø7i‡Èñßêh‘vبcDlãšsAc Ï¥ž-âÔRCºåL–¬lÂb3Eáúöa(¢d™üüg´ÈÐyЬ'³.sQ´Š]3M¶¡í†CÐ÷2¥ðœõ¬xч¸N\½.CPÞÍÀ¾¨o‰Õ'¬IÒæœp–c&wáHŸ®ƒ^ý,¿Ju;¿a×oÙ4u¤ª¸F/ý±`Ä‚ :½RÎ@“¨ àeŒÊ-•ìß®¾b¸£D³‚}€³ó‘©–6xQãBV“s›¸¬ RéQݺÈå C¬×7‰~lcàÀª°BC+JÄ€ÐÅÖš¤IŠÓÓÖ{ŸûÅGîÉ/ÞMçÇùW¡ÎÖ>©C¢×¸·ûÇßݬ‹í†ÁßAŸ[ÂQ>ä=±ò 5U;‹ NTCùNDlæQgˆ©Ó±jâ¦s®gaCÄO©L(›rúsg6X©x$55Öõ¡…aK&aâm¶Ïš30jYXU—ª™£`|7I)UϽ{R`HŸ‹Š|fã^Γõ +$ó¶+lMõ¸ž ý"otw¹A tÒÿ¥¹a›ŒSÇqÙu4Ãjà߬õVaí=ÀÃÖ 9Ø«‘aÚß1}5îÃíõuÝS©½œ|—teÃ2}˜š¾óD~™L¾£ß”•CY¢­zžÀ.‚J‹„êœÀßW1á-ÏmÍyøë£<†YEìážBÈät¯¼~K1ëüëñüX;¡N4,3˜¾¶öî¿v-á~Ís ÒÁð—},ñ{Áå^K÷\s?¯¬Mso½àõSaZRJ¦s1Êßâ'ls”âû·D~ƒPD©• °göv²àÆ”8/ £«K# —^oßKëã»+ Ìó"Hó‹˜Ç~®™`æI?r1!–—&‘vŒX·4°=Ó%ñ¶'¬«1hÓØœQx)9c‹;¶ ³i­³¨ÉºkësKÒam‡¬rš#~¬G‚ &Rx)Qp¸¾™~‰ŠÍ|5ýa¢ItJÚì‘i&ñØåŠcPVæÐSÍméÆÞ쉖hVnßÀùôó¨\ñ“èv—O”yWÄG¿•,üz ¯Ž(.lü± uÈξå…8fK;ÆükA“š^ÁVp@ÿ™~0åhqáÜ3x™½”03–Èyо´{ö ÛäŒß†”øì·‰ãN~Ëo2I65 r+Mk?¤Q%zãÑܽ‘™¨g(ÿÓµ¯f•c¦È!üú•õ÷C¥­~hlP8 ¹Ì,ì8Ï´¨n¼Nz”¨C‰§œ]Ò{CÓ¨5-œÑ¢¬?|®Ãè‘ÿž$J³ 3õ£TxSÚv&3Œý'Æ{ÝM8Â:¯V·¶,¥õÁ›n=<a©wø›¡Yõ_”GÂàµpǰ+&Ì…ITl{ÐCó+¦wH=ôE T=KWÖ/ûW‹æú}Êå¡Aýç¹@Õ_äQW0fP¥òçó¡¬9à"oßwgÌãT<â/‡h” Pd.õ†âvÃÊdElØHÊkóûÎ~öS“m™[ 1Å9qKÿVŸ¾Ÿâ^¤ÌÅF2Jó8R¢gxiû²Š’!òÐÞ–è•kÔú¬œÁ˜¬’¡ª[Õ¾×-´.5MSÇÞ{Þïw¨i­±W¡ùñ¤æ^þ¦—ሒîÞNÇŒ$±<ó!¤X½–SY{Ò“]`‹`t³Ñãj0ó¾Jª _$ŠrKôHìsb‹Ü^ŒæIJÚÈBû+ôÞK¼Ùmù7/‡|CÌ@I•ÌêÈŽhHH'áK‚S“áéd¨¥Þi–vBÆbÌHíø$³ ãõ-\‚’™k¢UAzne9/6zžx±ÎÅé•ôóÊÝø6—ýa¡Rù×ÕˆñÕï þ¾ÔÕ?&4ZXªDãïË)¸!zO=‚ýµ® ¾z˜n²|÷mùh¨þóŠ^ßbGÿZØ¢ö–'•ÈÇv®?ëöU¿¢‡½>?"†bŽo­ô$Q»ùôf :0_Фœ’›|¶ül›k2‰øL‚/Ôt^…3ëËTŒnú¾Îå>•—l^Îõ>Õu ÂÓ¡dåŒú;H4¯Fr]$€_[ñJþÚ¼!Åž2ìœ $¾KP» eïDÞÌÝ&¤ôÈ~ò7ÿMåÊZºDÏüË©G–@:9W|£;Ø u–û‹Œ‡ýv>P“÷àaSQ$ü¬Õ¢“1çš.œß›”‹|º5ß—>c=$\iñýpªiÇ›S´óAEüû6!Sžšm¸¼Hùc÷I‰ùoý+Û™è8ª‰†Û7™bh„¥øÛÃö±þuX:CÀ›@y.”hmáGû ۊ勵u·é÷׈VZu½ØGŠü Ç·qäl]Swÿû¬_ ›®ŠñrŽ ~ÕIÆ&ŸÚ”„d\[R# ³’ìû±¦×ãq û©~Xž w-gòk¶¤»fÕ,6íPA‚Y 'Å;®y‰ÂaÝ:žŠæ`sžÒäŸ÷·¬þ/A—ìvzŒAO2ûı][ו†k–lNÝD ýëãÑüõ¤I4å|²ôìC,Æ“ëÈØÿZg¼Ÿ/ä—¸0爜¦áÏîÂËMT›4¯ÂªQæ,”æ\–áV"ò˜‘§%5ÑBóÃÓõÂtùˆI;ΰYÓÈ£÷eZÜôÚí¢|œP&¦Ö¾H-»Ñ®óäDµÉ*)" zå:” þ©²ˆ*ûW_T)Šd&ˆ š’߯àÄmè¿”98xϯò¯‘æ™h ’[sB–F¡"M™q?;¾Èbdø ¬þiÛ¡Í®ž+s²RÓoµŒM@ùÕá¸ð‘’ˆVÿ±Æ¥µ†®°šÒSʼn¬€"cDM/’½4ñæH‰QÆ¡ŸWª u®H„õºíú?üGœ7_0Ìô‰£·ÆçŠzKœ *˜>SÙ +œÝYòñ6† ºÁþ•DT ¦ý÷Ù6¹Æ·²!1•’1Ú†±@‘ÄŒ“@º¤;cùö[w!‹4†Tò­  Dh¦y X|¡l£ b2éþY®¢/VL VxëX!C0Wb#IºîžØ3`F½LÎböúa¿¿CÛ‚°C2-¼Gº¸ 3_8m{8‰‰"ÛõI‘ñQÈëÊÙ»ó$Y„9¸Õ ê¦‘6ìÀ‹ 3€Tóeé²Á)°\«·“*½Œåÿ2ßoxªúPT–/²¼?YTŒ ³IˆórN«þÅ9ÑĉÚV¤%—îS·(MÞæ ]þþÚ­/CQ½I×¹]{¯~…èZ°|7zÃñþz1?à8”ûÔ¼5¢\o¶Ä—®/löÈ7óhD¨ÁK‹ iÓ»ý%‘ô¹gØwsÂÝ=òÒÔ°•C语Å1Pó»HZ½¦Íh6ö•sþŽŒV‚=yRB‰GÂÁŒ/6\Ђ3~^¡d@s)Fp…o­t×nouìTiµ‹+¯Û é“A@†Á 06Ý2Ÿ\³|R’ø@ (}$—zyºÀö!d 4Û¸´+ܹX¹B‘«¨>r;ÓKü¼Ì×"¦¼Q3õ)²à¤ïÕèß‘ÙÚ£Ð7šCtY¶N”D®cìfU€ ?n­÷¥1c‘6A½œ—*å–jv£Ü|¿žÉw]Ÿ5# b̾²0]áÊ>îH=DW ö)©h€ÏHÐÞÃÔz‹¥ºÁ —¿wƒ„È3ç›ûF½gF\MбŠÏÎ!³sò½Ïâ%ü"2' îg=zý˜JÁ ¢Zåû÷'¡V0»j"Û@ïIŽ\xÁ#i)ê™:¯a9Š Áäg@©W¯òhhõRn£S¥+!U€ù×]büø[ÑËhç^­ß­:O$é8*„ÊeägÛè öÉm_{œƒJ™ì!C‡bó>[ÝU'Óð“ÊIå•`ÐŒz…ª½þ¼égØ"¤s">þÛÐHÛ•™Hìæìç@÷H‡þFCÑ)³“i“SrˆèO™ä‚â"ÈÚ"ÉÍÉ;$ÞlùhBÍÆ FJuKþ<\Ï& !¢Ê¨ÐÇ‘RfŽ®ó=ÑÔᘢC/ ¡ÕÒ»@è¯}}Ú@Å3]/ÞäÕr,5MM ¨´i#S±Nà’¤Ö_ÝÅ,'¶‡Þ|Ùo*drý±ÍñÇËʇ¯9Ú‡Þ‘­£ã Ä®÷®ÕY1óqœÐèÎg¢»Æ“XõS(pE#Z<ÄÑ>»íIô_ÜÛôõ9Ži;k¹ØÎYä…¼t¦ææƒœáÄŠ¤&[UŠŸ-޹å!)ƒC“‹m«ÔBJèGðÄ€Á b€PÈÞ²`+F/j“àgß[HOœ7f¶ôK T>‹8:sv²!¯›K]´óKlÅElR »ƒ¬©wc;p›Ÿ[.%,õé…&9äŒ!16'’¤ »®Ï¥ËF'ŒÄðBcW$,.UãüU÷êû¶U><Ë3-ððžè7Yƒ‹OFY842ÖùLŠik[ÈEqR€c8œï“gë½K%¤÷ Ëå*É,:þ–\üïtÛÌX./ô—aDzܟ„½ñE!¢”ÁðÝö×2T$ÉC TÛÔááñmKéGΕzÕíÃûGqnùW¡ÉÀc6kUÿH¦|½ëˆ>D(‰…ç¶'•dAWô³xI9òá$K)÷Wº½^rÂ{índôð[,ºÓy p>·ìa¬ÙlŸ1&º³.ù(›Ì´lZÒÑÌB‹Ò¼!B±Ésù@ùŽfN<¼,æ…n½Ìùå‘À›´|[Ķº¬b¶49ª ¾/caj]ÏŒê¯ à_ž†/"c!ŸÄ°ø*ú<£6Ç©F}m`YwÈWAç—»b)=Sƒ/ÓžÜñ¨¢`ÈaçŽÆFá{Á¿ìïÃÛˆ]„F7>櫸{i4? p~Ÿ%Œ–œšq¬yõÆ_YáÞð¤¼ÿ@wŸ¸’‹>ªIs8DÒ?j^½Ÿ/.öÐîç“]Ë®Üáì!3Õ—’©ž|¾2ÏRp#þöÙ“Þ"™öºjqK‘œSàß`”'Ó"ÇøŠ9ìmá©CÿQJ¬ ÛœÀ£•vÖîÿF© ­à]€&›e4R“øƒ]¥€˜†ñMDVÎblùn³í2_ëËkæI)dF*c™9/†lÞoé¿DÞL}ˆÏI·fÒñDáÛ~bŒ“wB? „¦¦Žpê¾Ô^ÐFd›öHë7c€õ‚ú2mnà“f£äKáis›ð÷K~׫‰ñYªxÊ’7­1Ë#‹Œ¢ÆÜØÃ#ô(TÂ/Åú ÇÃõs¬ÎŠ8íCugÑ2S ð]Ýš*Mzð©ï;1«Ê€è¿Ž<Ћò‘“g/1Zøè9X<Öi׿ä&ì'!VR¸L‰¥’.fPE‚Ã[Éc(âGJ{¼¯Ò"là_Ìq´6îúØk÷…Ìæ’ôiBX¿Ü'k—Lp¾)ãž´ÍÅÖ JK*˜U–¢ú“F=xå¢(D+A“Vd5.èL>ÊÍÙJúÑㆠF’ºœý˜ÈižxAc8bslÕ»ôè5Ü/_ôN6_t÷ßðºáàæx#ù±}9ïÜ™põÄ„Òf¥“~Ëç:jˆ¾! œ“Š!è®ñÔO²%½y2í4íxr¶N^WR¿šýy`tf AÉñ†‘²æ2·ML#äæCÛïâÑa¨£/Âô±‘{8„«áDÞú7bU„'²¢t9Öô7~¸X*ÆÃèȾ—œOÏyRÄ@;<ËýÕ-=ù,D;]RôùC1tCc±‘C›kÓs|òö]ÎÙ2ã7!åõc{žòX©<ܬº’ô{žäu Œ‡5±Øòg>™©ŽpÚZàUÅ0_°KL/ì7?‰†Pîð=^ðeþP~dÌhÆ8.à}¢´ó„‹ pýéžòRŒV°«óÇ ïŠ!^Ž‹ß.ÑÍËVÔ*¯Çp¼\_Û|$Bî #jr4H%»Ï2ˆÄ@Šçð÷õþL)8¹%>Àè¥ –0*h†-™ØÌàB‹ëúT&"zRÒ³©à×¼û„ÇßÂ['˜íüË÷××{’{›QDñÐëáWm/úyñ>2ÌŸ“Ô¹N´0®‚ˆ|žŠ±:H4Í t¹—³e˜·­b|YZ[Žýc–âÚD5©ðwt-WC!…—:nzï|@8ÐÖ‹Lý¾Jƒn‘DÞš<¸øZ^†qëxFÿ²Ôª‡+^˜É±Ñ†úöábV$­Þù¦}’#ï ôøÝ€ Ë*q •9Ë8̨Uˆ{UÃ6î3³sã™{VÁ¢«’ÊÿZ0¸º½Ð˜yA•º3uµü\Ä*Þ3 þU&ÕŒšÖ•{±â0ío’ž§\L ›ë¬DK™‹Žüèƒñ²­‹‹-„r 7|{¶Y$Xu‡5Ùe?^m}? Ð*‰Ö§¾ý¶s|cxj·Áyªâù§>± H­-Ë0Ó1ÑÒÅÚQŽE¼D3Í~ðüË1Äcm`÷zŠ—»’³ø38³éoý-ü-fÁ.C¼¸Ak7ÛA©ŸÑzÆ /ßÛx)TåÖ,…¿¿©zz~YÖFûWÑéW«`é“C/T_ta?b ¤:ãÌAr›™bü0!ip ªiÏÅ8Ì/SXã5qE§>``U=ÓtgdG^‡&\×7Õ%Ä^á •†!ÅçÖÞÝ^¼·éöMY:8úõ[–×ÏÍÝ{Ò•88Û] €ÃUwtê!(ïToUlÅ&5—sq5į$ËqqàbǤÉ#õ!Óåôü=Âû¤,„ñÈÒx"9èb;íªDõlÆkSáæÇ‚Ú}$ú(XXL›@¿ýðìQè‘2y„Œ›þNµÐ&óoáz)¥d¿ÈŸ°©qóìb«Õ-DÚªbÆ|ØÞ«·aJVßl6!ÒXEd³Ý >ó^Ÿô»¨è¿ùs·ïÙ¶Ï‘vD/fùÏÅNný¤±imÂdueŠa:O„wæ{ÆÒÊÒÌûðé¼¾ôN¯­Þ¬@÷"åS)bcºÑ\‡ìª5d5׋fÁ=+ïÏómºÐÁº×÷_8žgz߆ö~Y‡1Ƥõ ¤ ÿ,%z­8¿ ?ðQŠ'Óðgk_¬È•Xš›÷òßùÓTN:a™râ«2‹Jü0cÛOk ð–ß#^ñvdÇÒEêjß=.u «·A‰Le“Ö©ðNš¯ÐÅþÕèwÁ»d=OŽÍþµ«±ãÆÖ[7'€_ÛG'ê k”‰‹I4=YnD®#š<Øà¾)ZÇ.H¥ÌÀ<—ËC5'ß%_G™j©×•>þʇ’"a€9AxÍôS»[ÚÕˆ$å‡Ï–¥6Þœ¨Á˜Âƒ‹²è~3°ì¡g÷C‘ùƒ±yÔ²†Fñ÷ iニ 8‘Õ÷¡~ß¡ªF.D«ÅCÂzÀ®¯„Æè žûKôüï1Z{Z¢jmœÿ{Ó°zòäíùDYÌÌz@[Ýã›;û79‚èI¶( .Þ²æ†ûávòfâTEÛ!β^ù/Òd@Ï®½«›[-u£.4ÿú$œ½"5g£§`1}Þã-ÂÜkqóT» Ja–´ÎK…$-ͳ Ý£l*;"–@Û*žk¾ôéŒ÷#ü`?æ†öæçŠ~÷Nɾ=¯¤ˆp%ª–M#·Yoô¤z 8ƒøh˜°uG¸]ñ•]'QWêaÑÇø¿¯çUEøEYymïþ¸9ÓLKÐUêÒ\=;º‡^bIg`Ù*àÛÕ¯[ºcÌ[½Ê:z.ÕW^dSXÉßÇpþzÒ]Ä/eŬŠ~ix=Bõûå‡ÙЍÜþw˜mGý8‚ó¥cïn¢U]ý`ŠÝ½ Bý=NÃ\l©½©_±KŽ2°÷dÃG8‰¦ _]±úݳ¦“ß @ó._ÎUt¤îŽ™y&!\‘© $4Eì ËÛ€¯¯ï³ ³æo _ âœLò5©9Ê„z·D»}D@¤)±Ké¹T Š˜W'pŸAb Qý‰~~ÎÁùdÎ¥ê0=[m¼^} ?ûÆ——Ç%U$ÓQ#–Í=·ˆöüÄ%D`ˆ[¼ñWŒtÀ‰§~hØëèÍÆJ§G.È÷£m&}ÒB=$çfêáQ…8® RÌSÚ¨\}”sãi™œÊ+ìuÂypŸð½˜-)~SX2Á:MLD+áÕ¥E¬Ë ØA§ s rµPºAÍýMoѯ+üT¼mf¢¥4ʃ)‚\)µùRÉàíÅ:—“ QZ˜”ù;™sd}Þ_üQ”pt?BBó'cþŒíïÔOˆŽ¦i$´ÒorÖ&3fÞK:2<¶ÇÞr«B8NÒ*”º2-÷•Ü5®q>z ýçø:üÿ*ú¯~ç|·qbȬ]žWõÙèù¸œµ~×+åiÚ‡«+usû¬ãûU')HÖ¦ Ð<Ñ7~uÚW§EÜ }MIyzBüàÁ?#&ÀŠ6RÕjí¿¾ÄŒ•)#´3•ž/2}“Zú7Ó¨NÜTT§­(h’¡ùÚå›ÃD…Š3K>+9ÛÛžÞCó›ùÝ©¬¼b,;ì´èw#'À½5v£Ÿ I(A3÷ÃPé‡Üujù)• qÁÇøºbF˜B±16ù|°û‹ù[Æyõ„£'ð#€•]¶¡äÇ`5Çdi?1.U¨/8Ûç—Šõþî$šë °ù;_)©©C×»ô!@̧ï*ò$ ˆLÿó~C  àh™¦™t“¹'cA;ªO5˜6Ù³r Ô¶G*XÛ¹ËþËóÔå=”ý¦š½hÖTéû‘qË2EKÀÙ ™?ûš¯‰zdmñNì1Jï˜,þ-Nïáê°£”-†—˜LÙûP/ÝÕ¤ ?ŽID`CÑÞÃXa•*©;EÌýsÆ“:kó‡g±¼ebúyAèþo:ýýKÈÑë5ÆmfˆkQ+®ÚûTΖ›y5Z‚uŠøOåYWèËBÓ‘'V¼ÓŒޝßV1yzN”Ti$ŠEèßäƒØÀkÖ/5§'€óÜðçN’sôjÞ&eé~éÜ«2«Ç㲋}N¯mœióKuK=0õ9þ:¦ ÄÀ<žO¿Ÿ_¢“6Ë5 Í3°Ï×!–_Þû\Ò˜Þ˜Žš££$Bí£ú“Ë>x1»“´‹^Ÿæàæ×µEWӃݵÑ<ú퇔b4€½}H>ij—}á.8T‡özoD4/]­RuðɾéÄÓCoWa}ÛXù.û lô Q?1fñÚ"YQ"D…Ñ‹x{è1Ð@%6‰®CÉTeظ¦è•iCÿ¯YBÿWSLí5@’?òÁލ&z×ôsbþFÎ…`I[tÎá;²Ìª®»$²Ó… P‘(]XsßÀ‡ß¡HßrÓá‚*“ÀsÈ“QænîBņæ@¥öÅåx¯òA§i̇PΫìnÁ]”òýI}‡ ½Äì>sgЬH(<ƒŒ»Vlûv8$k£¡¶‚~%=L¦6&N„¼(¿o›P&[ÚðïùÆSy%EÍÞ¤öúÔbª(‡5@-~¥qOmèK*A»œ_UöÜ+MaÂD ^ÑúJ¨Bœ¿T,gsÞ×FÈà_L ë7rì•Yî°ÿ‹õ¨§ëAÅ–vœdvŒdª«ÎL¯Gé+ɳ¹£søýkSÙÙŸ†êªà_KäõÀÊ×ð¾=IÌB@bÑL•ýñãÀßpŒc ¢µ›}ίµØxäq]˜“ëÃÃåId…÷.|^eÐ,yDˆ<Ït©Î`£3‡|-‹µÜÀÙ >iÛ¸ýøP OKbû›1§»8x >U4çt­¬AYÜœ*\MrŒ4B òÁã. à6Mä21„hëEçÆX¤¨•¾àƒ‹’..áïCÃû—Y_”õ²Kz$÷tüšL”¼†‡Îuˆ õZHeç¡¢ˆd›Ú‡aºŒ<‘"'‚Ë_[ûe|ýÛD å—&ÎÅþFí–¨©t&p º±Ã¦£’úävéèÚ…t£ézõ¾ÕÑ{¬ˆN4Ï#'ÕKçŽàè##ë¾Ztã”H #þÞè -äN5¤ÊåÀ'ñw^Úú;èüDMüZŠøfA1¤áφdhyy¡Ë»¸;©ú`¥µ–ò—?Õ¯3 ²¦Y.ƒÈ¾o4†ùA&¿›ó«®8ZL&ák„µÉß±Âí‹ûk“GÂσ:½«˜[PÐKÂkÊ‘&0ã+%t× šÇ´}Š)⯇FÅœÞyVä sõ×kCjÊK“§ d†‹]Ž?Y‘HÃÚ˜ª—©:îžåx®°Ýc=qÒÓúk“IcÅjÕ°²À?ïõÉfbã?°áxË«ü¶ðªRNj^·ÁoåF Ì95‚:lGYÈ7 wâ±)ú%ÿó1…Í¿ÎÖ=jŽjÞÙõD6Çœ–dZá ÉõŸ z,AìâžÿVŠ~×¢(Å|—ùˆåÊÞ§©t¬!+û¯ ¼Ëí¬ìD rV× cj†´2.ž(öMÉÂÜbÐò6,G“£[kjÑ1O®ßK4fâéª÷¡âÕü[>.çÓ/î[Ü«Ðuí)ú9Ú9rC…œ!€– 1{pAªßøì¼’î³éd¨Zô!¡ÖAè¯ÔÁØ&·F”8¯_PßÚʳ ðü \{‘ .Ú/„ˆÎ­L:ÓÕm¿æèC=ÙWl„ã’¸ÐËewUqE1§Ï^ýnE„èr“þ|/@ô¬ QaÆU¡šª¿T:u“´\•g?ûña²'[ªÊ¿ÛUr·B%µZY±5†+9³ÎëFbʧЪ(d®q“Ÿ4ˆü5/#¼ÌŒ¨A¬É™0Ÿ‰·Áâ®ÂÕ!ã¶7ý÷•®…|TVäÑi\†ß2Öub,åôÃ9'}%LT½Ÿhn?К·r¡úùG”|!1~ãµ!dñ ¨ùùy¯U42 nM@dŒ²PñÅ[ ºŒ¼èË#<š›Vô¤‘gNUõú¯a¹ ·UñÖÀú§Õ$Üs¬x'ÖßiIî1×U³ñpayãeð¤”õ×WlDY£Z ̳íj•׆ð0$Ò]¯}#¹¾¸íS÷VqS&ÒWïbäÄ{æµ~"À¡9W‡÷$žó ÆccCgÖu¥µ*HMî™Ûèo>×v§îhî÷óÃгItxÕ§hàôúaÃü)B۴ɧm?íÑ8‰¥òJ¬ð»®1KijÄßáZ.|¦=Íu—-Åzý)•Ì|>‘ê·ºÃè >ågò-.îeLDxði*ô=œÇ˜I(Ú’Z$ýw\õ[íè§)#ùªÓþ]ôVêKÏ¥3™wYŠuQ¿«ok^¯3OhGO‚8lLÁJÚ¸ÿŽcßPVÞ_"ÚBI¥Fm,ÔÔ-÷V’Ó*è›»-•¾Ð[÷W,-Š#°‡¿nïëAÌ­¿å¹Â -¡H“Ðãö0m¬@ů+N‰—c¿'ÿ»°a¹I7¿È—Mغœˆëßp²Ó£"š*’ꑺ· EÈúëÓÊí¶1¥ €ïnÒs&·dmù¼ÑF5ç~͸Oºï,2ìqg¤iãÈO2ˆ‹ðûj¾Îc¤+Ì„´ Ø4û£ímW¸!;ÿ¢íøÁRIsÑjá|¢K¶8 –£œ”D! 1۪ɸdk£ ó>ÚOèàBó˜À½«Äå0òÁïJwÓÒÇ#–:Èf˜eSŸì>¨ûË«wì÷e÷u-þÂ=i,fM£RàDPw÷æ¹ø §¬rÝ4²¾Ñ¯ÞŽaXé“ô½DMŽå´&/¶†,´®ú‡Ü¨Qs¥Õ<:ôWI9ú \Mz$~²Q(›Þ¹î‰Ìf/Oüc¼BÆ ÿ!S˜i9î60‘½†û; ë¦qüÐD­þ;쾂ÀC,Å’«Ä°Â¾ôÞøÖÿˆÚãíç—öIvj®ì·Ô=Ä2–þ ?òì¹xsVŽ (BTVVð×=Ýc`’4Ï6&ß™¿2² ôŠk¢YAkÃJë8YoÔë‚!‰šHH‘õñŠûdì4W‰Áà” üüS¼N‡ýˆkµ„Dt‡k)§=NÓ¿•{‚7ê ®U]„ZÝv,þÁ02üš„ ²É»~Qäë­0ŸHB&¤ßb üÆy÷¿RôþxKìð&ýÕj× +Â.A¾¿„gÞCl>ªño¬DAK]3ɲòÂì©í&(«å>ÀëR[÷(Þ×Üñ/ăY]$³­ªuçÒ„í.;µw%¦r ç'J>®§×ÜJDRÒG9D1ˤÌeÍß¹’lóR‹7—„BIö‹®'R_ F"dC½’}¨dÈGÖdeOÊÌö8ÎV.Žk‹ß$7/Èk´7X%œñèB,PÄj¼Ê+bª|¨€” 23Ís¼~θ¿oÿ;”´‡+¾ŽÏX=ˆ˜?‘ô×cüÕ6ͥŠŽfÕf!|xGü±\•zE2‘T&~Þ'BØlÿ˜ÜÏÔJæ¾ †.¶’? Ñ;©Ùõ­€[E«ê*¬VH_«Ký;ç*J°ôêAìG›’ÆgµKɘ´^¾,4Zº¿æ8Šø™X#8o^ØÞKÛŠæ÷]æªát²Mïœ=Iº©æÆ­£Ö¿ÆHl®DÿHÉÊѲÌv(@ŽîXs0€´Š?*œ¾Íã·±Ýd›ÐJâƒÖÉß1¼Kx×dÏ…^‡6’Q £¥ãʃåñü~$ηü¤9 ^æ ¾6ã¡m:F3“¹ ¯)T®°œù· ÞWM6Å aÏ*óÐö7êþ«Ô*oÈï?aÛ¨3"ŒòR³ukW¬i‰‡aݽÄÜ*$2˜ÛuõV°‘4ÑUĨ{P÷›G&Kò³ì¯Áíùj|ËÅêQ‹cÞà¹þ¾´¤[ÕM%®~¤"R|žþlj:¶’Ëߘְæ†?µx.0¥0;ž«ÜèàOÒ2{Çצ*ÅÆ¾éÖú-(KÔ ÷ö×ð≎¿Wý‰I”Ș²6£K‚Ž?)=½1'5@,_Μ»zŽ4÷²ðˆ'W„~Vüït¡E»ÖQIÿâå=‰ðÅßÉ":,‚ù¢„!Ä(é-+bàG´FØ•òÝÁeµ?çïŒ*ÅKTšj­H«òoVAÀz‚o8 è's(]”&— Å)׺B.øìgŠ;É\ˆl9ï‹‹%™%ÚÇ­Á‚RþÛäTLŒ¾6Þ=ÌyDTa?Ø7¦ø³ cnôOcó‘8{7¼]‰:“`-ÅxÉÅVü<ÏÙ„uNý<@]ÌMiÄ·<&ì¥ÏGºÞþ‹J" [-µ]oJXûÑ-ø¨dðì¸wîNPæ*™ö”â\*±šüq„^v悞%8ªíø TyÚ{Ê€êkÛߥà•Ð÷xüF3WÚz8àjíõ5½1oœ±aü¼Õëo´n¬p½jÊÂuχ»žémøÂ(Á»|ÔÇ¥¾rV ïp¡È•E:`ÑE—XþÊ?~ ¥â]~G/9nÖ >–/øAÚSØK„§‹Ej–µí;êÃãc§áu“I`~´Â¸ý –ˆØ%c@¤êÉ5KÀªÁƒ¹h8¼ÚÆönf)ö´Å{3;íCUŽ”âi$ÁD¤Ù{ü¬ä¥ã©4eÀu6güÛû+`¥LHoUÊ4:8J|,hìˆ<Âú—xÔƒqó+ СÇ/û}šÚüäv8¶“[éqìC0Å£÷±@\OSˆ‹i‹Ìš,L?L/uŸèáKdÊÞàùAù‚ó*Õ¾ÕÎ(¼êêç2–¯l9!—‘¿£Ýû‚ÎË_ô2Òž—xe%i¬¦nã%þëɤQh$Y¾½Ç¤ì{c•n~甤á·X]€$Œ`Ô¤IóRÈ ígûï$–å˳É-«æ’GU#c*:ŠX(¯@xøsÁ`z.ê©ëüÄöo ŒÛ+"×&ð=9Ø9Î2o(£‘Ö“Ô>Èã š!®b£½"a.x!°¯4¾¹!ÁšÚ¨T+&¸ªpøò.¹‘JÝK"kŸ$¥-:Â+™¢vL–¾Xâ§{ßf åƒlÉQšÐ)ÖÃýð@c\"}s@ÈÁsóMwAµ73öªÎsRˆ– C”^<}…ô’Ÿø¡#ვ髩•d½¹µ%T:cç<ÝÛ•ëù¹SÌ,’ »×âÅñ1ö`zâ êBžå•fCcVŸQV‡è×v‘ëÔ`HÃíb–ÙkÞ(·|ÅXFæXâue™èl¶H³¡·‚¸h Y3xÐ4K­ôÃÇþÕýÂí¿¼%ÏI’%³ÿ>›z ¾ ö×»”Fa.CJ}¢.â­\Áöí\3‰‘ï›õ/t 8ÐjXÓ¤Xó$¡lÏ/hXÓéŒìõ¦fÝiNš«`ÀÈÄ,$Åä¬h€Iha¹×OÈJNïèw‚#5V»{–s2¼þzQps÷ë~ISÈXÞ>¨Ì1ëf¥íyÅù¬ºkóJé’þ{{bQ\Di™ŽI;"òyBÇ w'l®CGåîU-£> =¹T`XÀ!Ùø´Ñ-ð€ÞßßÊ©)QÕ!Ð2Çøð™Ž¹ôCeIzþÄÝ_ÑÖºÒûìî¨öË`óD}bóü,fCà 1•J´}Äxhîø`鿳.-2×Çà¶×_Ž “Ó‰àÖÒÍ2ê¯bY›4LôÙ~–%Œîé½öZú0¦'BAŠ„e¥ä7cº ›õÓܼ½NÏ*6¸p]µ‡qò/Ñ-¢Š}ýàÕl)ºãÅ´¬ƒ J) “W 4ÐccžàGÕ[í‘Íæ–'[P¿‰/?]±Áo}é׊ċÏt½FöRëN ë9Útæúóþ Àcù¥æþÀ«T:×xYðIüÓWÓ­)×\5 ¥ cOÌLüO„×AâÙUÊt¯—}mDd¿âßbð|0í0Å€|.áéŠi'üxª1ê½Ò& *‘IùuAlƒS‹ ¶újz—O‰“$9—…ûs~ÝÑU<ªÚu‰ ÐË›ÓÌîkzÉ+‚’N«ÜÒR.ûncã"ûÒe­ ΄›g‚cu;Ü ì\Ä^»±´ûL¸r•tÇÏ.5 ;ê˜9HD¶¨Ëß|ïÉÇ¿(c¬¿·©´¦ÁU©Ùú ÁÉP•&ƒ,piñK/Í»oìzþ‹ œ ea‰>à|Àß¿µaKKj㽸&(®•‚¸¶¯ùuÉO}ìƒÉÁ_·h)#Æ}aÔuG7 ±§€ƒ lPîåêùÝÈZ¦×ͽȽ:"çÄ\ß‚ªO <Ï£ž±›¦´ƒûÞ.W¨4Òƒt]÷‰À N‰8”<Éj¨É†Æ…,ÓE9ÙtRÁtð1HÅ©—ܶ ìMû82\Í‹¿ï{S°åãµB£¦@•Ùž~â>?O%.Mo¡)WT_Š,.p÷Y37”²ôÝnþla<ìDí³Nõ›ŠÅíR©‡¯pG á uK!“ÊÔ’c´ÎJLÈì4R&G2z•öxF€%VG©_zì}9Ì/eŽ9x_†ù®J5t“Öïïõfmau̾.'­ºÉ`c'öY±|‡XOZ%Í4uuHÈ€]Ap2gv_(Ìû5‚Ø{˜rdyïž…ª]"®WÔß[òi=2–×%+|¿Ö¥Ìš­NdE¯VÚ ²z®ÐÂhÖÆ“.E³·ÕK³þްW$GK!VHï¢P“ÞÔMxè_4f‹ç2ÙdZw-RQ´ôá,n ¿ÆÊ³„YˆæZCG„ë6ïù §2 (Ýï~Y¾i;l+1›†oÔ –äjƒ™-ÛkÊêÚÍŒÃ{5,eÏÕÅÊzÀôHÆîýž×P{×X_ʧ²Ma/í [–½„lÌT¦±z„o^úsAÂÏ8(2*‚“ïNÒŽg¾g„4úž:)^£ˆòi]üw˜ÕÙæÜò×°ºÃÇ '¢(Œ^Œúz¢bBLòE­ÆBØmcËÒ"Ê·¡êÓd8ÈøƒRñY€T~X£´zÆŠ Þø(6°dNBô”ž«;9¿n (8ÿ ÿè]NÛíZH??<(mðŒ_â•å*u­*¶¸Ç Ã!9™ kå"m{#Pú˜K„ωÏh ´ƒ4G3û±Ü×tGb¾¦>¶¤Ÿ o§d,nw¿}ze‘c°ØÇö_O&•¡RƉ,˺3hº4?æÇ§ÔÁ&6ïE5–úìN‹·;’ ç¢ú‹FÝùš.›œ|É™A.¬´ß*C¦óÝtä)–þN+)¤4¾l;ÎI>5$á §çø4Ž|ò ¼:.k`~sJ>aüñÒÊ&DFÁi<€”ïøè}Ç7e!4Xó/b^È܆)Ò±v´Û™&iâmîr ÐNa¨î\ˆwGÆÙМLEÄ[mXÓ§1=,ÿâÃß8]¼‡592¬9jÈœ'ÁQÅ\ܸ™5S* _-æ3¼ Ž•tP´0Ô0Õbü:J…FŠBåß$ÚùàŠØä¸Ës[Çⱡ(•Rªó¡)2퀮`GÑ´"T¾òòªNˆc‘£0šµ3èÒrYR.Ô´jYäýýz7o:ú…·¡;ðªò6.oä”7z*ålK•;[ÒJß2¾àëC1ŒÂTvÙš§~èoÚÕ§{ãO›PøVª¨²›½’Gy¶ ¬‘4HðЇPò gÛéÖ¥ö÷Gç±ä&DÑ_aÏ‚,`IÎ9 vd"ƒ_oÆU®²Ë3ÃHîÛç¢÷ºAc!þÃnðïiõò†éáÓ€šÅr)¦¼’z1!é!ò:¿ù_C+Â3‚\ g2v¨‘ßKjPÐ`û;õÚ²ŸªÄ"jäà&ÎEf'þjØo/Þ$űƒô·À§é¼è™æÈx$>ybäÞŸïÀPˆ Ie ëFŽšª%Ã昸R BjŒ^_9P6—Æ©þ87‚¡éó¶*7í"\»ó©«(&] 9ÞæŸg _{ÑU/èÿÞ†û'ûÊÈ0Ä,D'ÞщSóºÉ÷kݨ)7¯Ž×â? µ9'Ë$ÌÞº·TÅždÐcŒ&°}YR"¡K¦Àë…qf{ÈÚø˜Ë¯h°°uvóÔOáš‚âJˆÔ2V¬§Ûª“Q§¨Q†Ñù|0ÿo¸Ü%4G©£Hšƒä@6‘jû+—“ºp›Š` ùÃÇãEÞ‰«1ú;¢§¬çn˜Q hOwìÈæ2•œl¹³ÂWˈ‰æ ­ÊåG×@nŽ` –b·OÈ¢«ëÓ;XaЋWhâ3Í)/ÒéI™8Ý䨴…1qƈù¼*…êÀË7‰ð)žtk€ •$¿ý\ ÈÇYax(( D°87®_ߪ&JO‡À/¡Î*žÈÜ_¿·&ÙüÒYñð,^®‡øæ^­ù~dŠÿÛÀˣº²—š^¼™ÂCìn2ÆÌ}¦;ß6Å·_ŒFË\‘µ{ññ߉=Üb½[¬‚˜Âeæãu ý }.̪hkx C>^x‡:å¦Q©ûWä/6~µîy­Ic´c»~>>yvy„Q)cTÉÔ!ì¯N€¿Ïþ˨kzöZ¯GÀnö"\tÓ¾GÒž~«t0¶sZ†Î†Ù¥¨öÃÖ·0R4¥²é”¾Ê[}²ÏÉ+SioŒ¯Ciý†¹é°³Ùþ×ÎI¬\ u“ОU¾³Æã£Ïu¬Ir[ŒÌ%‹:”wìj8êo@ú c! Ni§és±µ± š¹j«>×üÙÅ{Ì7!èzgøt`“RŒïç°ñò)`èÉ¥–Mm1{°ú™YEÞ=^üR•ƒðUQû±œÌ‘bõ¬c„÷´ßC’ùqê‘›8§öQðbr­™åù¶.qã›ßw ßoXm8ù§µê”ºk˜˜ËßÅ«ÝÓkÊò7ü͈Jdîv¨í©î+v*^<”°óMÜ*]Gó¾å¢WA@(~£ ý="@çÒ^äg}5/rR(¹üØ…Ü¡âûÄÌX¥· ÎÐ÷tÏ ?LÞe6^±¦Œ'² @Ušw³¾ùkÔ%çØ6m„ÜB$5{®½ìÓ¾!`,/Õô¥ ýõY˜×!FF ïïä`þ6–È4d÷(D/¹¸@?_p0ú›y°´$­çuïñwgµ_«Æ"Ë•J¿ù«¡ô‰Èë+µùX¤ÿ.˜çNî±|ØZ‹"ÌòýzćbôêÛh¢ÊAÉ7*À´Ýçª\ íºœQ§–Jþä ØøÛÒP±ìÅþ‹cl}Aåߤ•‡rB[ÍÂ};I‡]?Ó[o“ô%Ï×tT‹×WDç¯?xüp-a­›í(ñ³5)Â@^6 ]F¤@(c*ãV¿̸r[xKS¥ƒ4²rdûMÖK`pœ]¦£]3l¼´çéœ=Þ¥*³ìHòWÍ] Oê†æQ *°Ûã{uBã²ç«•*ØþÿÖû %üIÑé³¢i¿àÇú×ohã?Ã` € 91½lPßBfÞLî|¦ÿ}Ø «â¬dîôu®?·žZÇÐvidΜ>u AQJz ûõG2Ðó¸šT!¾ñ…%¤O¥¸Ÿ¬ê?‘È[´ßJ`ûevwRo™Ã…š¯Kv"lTãÙ%pQ›~8eæ¯t„±£¢u~ú")?Bl>û&Å¢*É šê±ëà JôÁ߈p2‘Æ*Øû³þzþ¢KÀ`ºÿZã0Œ=Ïφô ´.=âfÁlÕOš“–ðšéÉm–Mp» ¼åƒgµü—”Á`€ò[KP¡î¼³[K².V¨°¦°ª|aÏì¿‘²¾Ÿ&¥­É#;yI‹›ýWnLŠ£tGÁÈÕ¬e]¸II9¿ ñ=0C 2€Ð,ÎA6æÉþØÎÚðFß_µ[σ{ _ÒþFø)"&1Zõˆ9/òï“WŸ£â%º2ᄤQj ù¶ô(1¬"†ž¨8uü7¼ª…å1ª´Ùöþ–Sfmm©o¿þkà$¦óÍÖîêÈú°ä-s1“™¾l@¿±£äGµÕ`•¯­Kq!uGyÚ¹—‹D¾Ùäž—•C¯@éy‘»ŒÏ~©¦„æyo=@ ÿ>gL3d{—l4ñ¼«7ˈyÖ–ûz£8ÿhƒÑ§NÁ×>Üë9°ÆËÃ¥o³9 ¶¼¸±²eó£±o)Þ,øõíúf[kÜ~+kšr¦ôúšßÒ‰Ž±Þà±Ám1ÐkÝò6&Ư.Ëu1nL|¯.±Åš‚ã÷ )ÉHü =Çž’ë­J¬okòøB~²QÖð2V[e–n„;²e4¯˜ê¿êØ=Š}¤{STì‚Ë.ðŠÙoì׈Eu)Æ•Øàk¤®Ë,– a<ÞäŸÝbÇ’¸¢­ýµaû±që¢ípqËŸ¥þ‘þ;X9®†eäç¾–Ùôä_þõ^*Œ‹1a)K…¢Û¤äƒyļÞÚßàªLØ}¸•¬¦m„i]QEðœ„f«çkÓ-/TĈ>ñSÜ£žö6‡¯…¿T–C:™^/ ½j©œ+E9©4$u0ÑxümœE)«øâ­j3ëq rŒ|ÈïX¿uj8nîgßuð=+I/v óooHç±ñœ$½°Í9jÎBzKȉVLn÷“±¶4V¶Ý‚*Øu}ÈtA€¤BÄ.72¯”ˆÙp>êºsWJ=fú>ÚÝ·->÷Þ£¾ß+/wûátîû¾Rœ@ï‹Ùõ¦Ó[¥íGç>jêmhª(ÄõD0™}ÅWú2y16ûZ`3ü+1iÍ@õë5é+oƒ—ðh&9W¿‡:þTZª™\À÷ÄÕMÈŽÁM™sômîPF±œyI¿ Ÿ,@ å·ôXí'.*Œ’AŸÛÃý¿¼À0¾y¦#z[§æÅÎ{’2¨7t<Ž9“X¼zA ޲y¸ª¡8¾ùJ ¯å  Kƒ˜EÓ;ý‰+J,3LfÖ]JRáŽ_o§W¦bˆeæ|ˆrXJ>ÅjÀoôÑ:Ɉû¯ëó²K{´k«ýþ‰ßÎ$­²…Ä/?©¦ŽÑƒ«i*+=·½;.ž9Êÿ¡ñdzô\9Û%)i¤¢tU“—äÚ ¬‚˜ØhÀæw£X~™W7mÌ §’®Áªé!u”—ƒ1ÖÖÛ}x=?a‡c Ü_Þ½¥Ø:vxÌÂccT¦M¬ê„ðޝâÀ–8®FÁÿê:B·Q›¾ï¥b¦¯ýÛÔæ’ç©Uk–ƒúp5ðUJÖ.Ñ!Óõ+?xýº‚BR·$øf6ÖÏö5šÁ’j0­0Ÿ89Œr;`(PŸt¨ å% @­-Mžˆ0pF¾IK÷Å™’ñ¿65Pݼ†ñçWßÔG½’0÷ª¾$“ʰÑ!ka&ãÔ$Þ #`2dg‡©+óT’²‰1<6C8Ï¿¨å!ðW~ ‘Z‰²YäÂK‹CnþPŸuïÙ癕|Lºî¶œþ¦:5Ø48¯³Ùo7+‡LZ·'8ÀU¥ìÀ§¤¾š&¦³k‰›ÓAó)m¦xÖ—ÃÚ"qã³j¿`©í8ý];Wb›V/lDÒp‡vo½‚œ²Ê¸ŠqùéqCw¨”oÓý–`’èÎJê[z|uè1"éðyÀNw™øÎd¥TÇãZæ&¥Z¡XGazÉhOÑË0IqôæÑo}Ù[S:ÂÅêj6•@ÿ \.šÇ´,Žã3bJUü¿ó¯ñSò y¯UXØ‹HåùúSMÔù›#ðñÂýh¨­ íÝÍ÷߬šp6, _h[¿9–ÅLIã¥DbIb­þ·vcICð¾* ¿&¹ê¶×²´¥ó<ð¶¿‘–t”aøðŽŠïµéÛS"íR~ ‹“?¦DÁÊŒôØ1ëD*Þ?È%„º¶…—áqêîíï,:/¹²Agù}¼ ‰E¾¾ÅĸݻMÌwÉøë[÷a_k—ÕÙ õÁ“Ûñ>gy¬‚Æ Hg¤Jýcµpöî¶@‹ý_ÈÅáƒï·Ùž&…c4H¤È’?n¶P]¤¢sBüôŸˆ~¹v‡ž¡t‡ùÍ i­ˆÇ>üñÀc¿¹oÎIDu ¸Øúì€TÖ0Í þßÛкhXU¹ï“ÖZöRß /ïô^)Ÿ‚ÓGÀ¿è4ÒA$(><î{ž{¼6ƒ;Û¾á/"uG/îõÃŒhc¹Ž ì7µv>d“,ÞΗ`Ú?îåJÄÞ†$°èy8È#b²Ÿ«Jý=ô@GºÁS^ tpE[>ú„¡s¦ÏÅ=ôÃ6‚Ï׬ý*î‘6ßïŸ  š Æ¡cv k.›”|3D“’ÄR¨´ ˆ ÞÙØ(X’GÅäÐc$ø™]v(y ‹-Û¡Ì'§#2q¸'îç ¯ŠÅo6‹^XŸÕÉýêwÓ©-[í>…GõC!ŠVu ¸ä0,ÇlÅ£`îvçJ6µãwH7Œ×Ô冣îAó2²S± ¡üžˇ4ýå¯oºv*¦°>Ùž#m©Í^Pé¸á\‘w0êÕ~1Cw½ ýÕ“o–•n"Ÿz/YšÄáèÉIL†ÛßfòûôR"˜-˜ÌÏ¿Üuð›DÊß%œ­†û«óê¼ÖæÓaw.îHÅlNÞ¯ÒŽØ*±º×Î’£ÓŸªÚ ¿Ô ê3V£‹¹%\/óŽéX¬šà‰"Ûßr‹Þ ļªJW|”¯hßïŸn_M‚Ú{;Ë.öXÿU‚VY1áʶäÁµ§#AUÉ£Ëi™P5Ôùäã97Ôš&ï³”}Ê=¾%/ýö7(Áô±ú6™-UKÓÙãRŸ€~AËf7Øêº§aK™éDwSl| úRÔSqkmo&R‘*†Äe/fGƒ²äHo)¡Bl¨˜ï[uoÊe|ü¡sÚݶˆgGäÛ¶. n¨¤„.Éë›.¯7Ù;î“JÎ:'š_B‘j.h0VèÆÖÄÊ’b$üÔ’ E¬eµÇ¤¤˜ç:ÐöQTz¥ŽŽêDX¤‘²KXÊ<ñÊxð‰cåßÇÚÖþ¼.ƒXɸ¾ÿNcU2G¯~P-+q»´ÔVÚºÏAÛ>R(}X÷/eÉVãÆ ròÝÃ%Z£>ŸžéôggƒA÷‹'è ø a Æx~û%ÐìMCÞ“6ÃØÙÆ7æ Œ–ºÑô˜[*sC$°óR QøÁѸÏ9<Ã'zVŒ‘X¦ê´‘)OŽ%|€‡p§ÈÎ`%²à®ž©~ñö/ùÖ˜†r+4'nŠ5ÔØ ”¾†'sÐéhå™ÊɋܗTÕ Àz7¹Ï]»uŒÏ/„TõLÕÉk$¿ç+3Kzˆ–aꕽ÷t]0 Ň^ ÷“ïžcÙ¶¿Þ¹_$Ð_¦±ù…Zt›²vTŒæ|Œ4^ßÐOŠ6;ÛMÄaŽ\I­ÛY0Wž“æ§ŠÿaÉS2.^­pÅy"ýì¬óÔ¼åMÄrR¶OëKçCˆÏe.1r!΋áøÍÏ_韭AC#?r Ëœ?ÇŽµ}x'9ô1Á¢Ìo¸‰¹8ÿþž²ø/—\ >Ë3ø ;ùѾäô!c(?1ÄvzJÌñ•9á9bîªʆ %ðA•ïqÃ"çP©kF½Ki¤$íX»ö{¿ÃÊ Á‚ù§»•³6ÉÞdßy~VË—y}̬ 4‰.A*ªG{®R;x0™5fûë2ñ.Ÿßùµ7 5´ÇI‰ÊôÓÔÌÑ„Z¸QÈyíŦ™ÚbȃmE\’fÎÂòèÑá>¤Ç—–U =[ɃBíÍ=Óô\òx[Ú¦îo‘ÍŒµ&݃“ÿºá‚Hð¯öÐàSi0rˆ"Ó„[ˆQ4Ïþp‚1þDù@óæ™â\Š“7ý¬@¼3%ŸIÇ´¿£«Btd}lU`¥7’Òœ[úÞ¯UoEžùÞp‰*©áßÃ5ßçGÏ"tÖzY"â.ô‚9¥­gU£VÀßIœM g­ãý%Ò» ·+î Á¢w8ﻨdreUÂB¦67Ðæ/t&–•¸æB”qQ«î}ý|z ©kRÔ¼é¾Ö†'ýžÚŽÐïN¯,sî@izÀ»2Y†Ùz—|¿8ö‹7(ËÚ:æÀÎÖ~I†^&Þ;Õ:¸? üòãÇ<ˆ×Øx]äÖðyË"p*¨•ó6×,Z ï-» î32|øEá©}Th–Ù‰Œ¥>Ô³ð=Þ\ÔÇÿÉë§5M’O÷Ñžˆá&Âóã±?Eõø¡ú‰{\©ò³xD)Ç3ì®m` ¦ Ó—Hƒ Mßâ(ï\¡<1Ã{UÇ&ç¹+&µ|v5~©oó«Ò_$nZ)|ï'm‡Ô<9û 3KAÃŒølÄ]¡j[ptŸË„¹å,÷u)¦€DêhÞáýØØÔbÙ¯ÁùÁº?·+G¼‡>€¶8ªT‡ûÉX1?{¹[iû­ù­J¸!Á¿_þ`ñ¼ñ„H£QKV=®JÇ‹0‹¸ò ˜D#‡šŸÉªZy‚÷ot1.Ò°ÃO`Í›Ÿ{ëæiÙÈ/6W±£)?uáïW\ÿš7èÄaŸ*Øp¦ˆ ü$zE-`é:4Ç9(" dPŠÆË¹Í÷­ãšRˆé ³{j¿&ܬlêí).&?ÑÔdI¸¤‹u¨tó€Ü0G¾¬ÇÍ4%T›Ð"ÌV‡è5_©$GO¸dµ9§•»{Ør•ÁÆby‹áKnyÆ_ÏÞtF¨ÐàK[ö •­å׸3¿ƒ?¸oÿ黟9ª$õ>I„Œ¯‰©æQŒÄù–Î#{Â[Ÿ¾Q@‚Æ d{'³ÜŠCÓ žEú0î»°…ä«D(÷ ÕÇ_ ÆìÇóZfhk·«Ü 3Ä6ã×¶–„d*MV1ÂÏt"U¯èÇRL½üÍöà‘Êx±_ö"ãÔ0¹|Úð>'í_7˜pý$÷­aºy-¿ÏvÐ@®“Õ r'òÛ­qËÖë¹þßAxª-nÞÜ÷ê^‰4‘5ãó#ÃG“šƒ|‹=MN^¯/_Š´o†T¹Òëˆ Öý‡¢ˆÚ놎}’?Y±œxÔ©êõ¸ ×F¼ü=˘>uùç!Û!=ÜusËî~~´ š@ö”mC§ó€‡è¿öëº~’¾æ¥ >ö£ú1…£B#Ú4 mc sh¨2LƘüsíiߦÙç°U Én½‹›°eõãº*~ëKuÎÅ\Ä´Ü·ñKŠˆ0ç‡L#hÜT8.Q´Ž»‘¦5Œ;îü¶Z¿ÄN|>`zâIpí‰û ßó|• R!JÆPøUJ\g«T«Ð hóè^è5^-Pq>‡QT1òˆ«€Ç;4 R×Wñï(‹…‰-]ß*ü³>¢1âÁ§ jÇfÃì[‹Ï[à¿T6„ç4s‘…RCãùÔÚ œºŸãžL‚¨Y• BáOÝ­{x;Ì~Ævy\Åó4$¶…½Ï lZÛwÞ½CØ{¾páb^ È2Åj•t×>±ù®tÚð/KÚ­r¡I$OîÙÛÓy°8؉MÛ\lµ½*ö'u׊4ÚÒc´äàbÉ ê²?¸ñª…Oê?7€©äú‰Èº;|9_0×ówQF¿€²vºìG‡£“¡žY wúõINŸ0 ,ý”å-âÕñ™þÐÀþüœQiÃg‘ |)ç Ú6ù"¸™¸Ä[pÅ6¥Ž$ 9&‹ˆ8ߎ»›ˆWK;@ò*7K[÷œE eÁ45z¥U¸?FíÒ•Í¥ UÌ‘q ñË@èà ÷ƒŽƒøwä;‡lŠñ£Ç”5­¬GiÒÚ]ëÛ{'w5Û«¼³Ôû¡¼Ûd‡1.绲íF<¬cÒ3òÝ™– )ì]êÀ¸šôÇ÷V@àwü>Ù—_†oìÚìo+ö5w—‰'‚rÒ3ƒ5ªäÃ_3Ã23ØÆ~rª€U,à‹'GÅâe9"%¤xÏA1ìB»¬ÿ¢¿Cm&vodûV2k'uM›‡ž®öá7zÌñ\ÍÀ˜å*ŠÇyù[?VW`/³àë•‹br{ÞC Öá ÚšrX»28gåDâJž˜¡ 6¿Ãï¤ÏŸõ÷Ѱ[-4óÆhîìŒC©Ÿ>˜ƒ„Ÿ¡›±´¶üLj¥ï&¢Owé+`fÛ…kÃkÀõ—„(Ŭ”Ï~{û;–9¶¡8ü*U¼0ÜåšÂJZÕ6ãz}Œq·®óy¦…JàCç—g27^“•1ŠOOv²˜ãËRø½Ûr•›ÔÙ·Q²ÛV=émðb—̯9À‡DäÈ/£š=*¼8<ܧ[ËÀHÿüöX›ã‘²Ò‰(íûã¡üúa m ×RM±N Oü«:’v/ýË×YZ¢O ×ýKýÒ‚5ëè ¶‘p—õêÌŽ¬%#‚K›Pü£Ò¨äF_½¢~¼2Éþ^GHÆVZjÃÚOIäG4þ*ùö¨H!­–ÐFõöÀ®‹¬!W0Yï€ÍEuFÿ†$F%°&Éþ},5 H“•H)/ýsÞ£Û’¯“ܦ<êWöVú®äã½]6ð(æ #öÅ™0 €-,Æ¡Œ1MÚWúY=\k,¿¯ÑÐ\•tHä•ו÷—oÕMàÕaµöëu¿ž)rOÔ*¾DZ AzÈR‹:)–Q…=Œ…=GOVCeB²’˜7…pýŠÚëʼ?¦X:CjK¤üÞy&%‰R³U÷#c™Åì\ÇßÔ`®é3¼mxq]¨Mƒ§P±ÆDE/(·äãÀóüò[°ËyÂá$|퀯þ䇌ÀªªåÚê²7½F¸>ímjÀ e>\º|d˜s¾›˜“;AÛ.ǯ¿é¬,Ê*…açî¨gL¨ ýk b`¦r §­Œ ¥ïœâßbíË<¾œá#%I]† k‹åâ®.n]a¯é‰=°Òñ©ÅR›¼##´]yñ£"ñãbx.Ù¼ÂËÞì{žmÁk×þ꟟ aߘD8Ëåy 0z¤*$súÏ’2ÞÝ„rAöí( lÚôÜ¥éÖ×G}åÆŽŸlxýX{Aýʾ g½ÁG‡¼A1õÉðù3(Q3ö!Øô-%´ 87ü pè0“ÒtËæœæ¦~rK²+OÕE†hX­Z¿yØdî…•°DߨyÞÝû /ñý¹%ÚÆ1¾w@ó5©=N >ßâz<'A4¤4HcH²dßo6,n “Š•¶SÌÓmWIûZŸLú¬-÷ÎAÿmC«‡ßH=ÈácÌð ë!Œb*dÝw®«—íÀ Ú&Ó|nv“[·³¼$Á3Ƈû{\ijö_¥öLÚÝãó@>p¶Ê’Ì“âË™¨Táó§C!õ[RÂ{*ÃÖ½{fFï° s¡¼­N<7¯wùM|<•f"jEÀ²”8ö+1ÿ†V«vª@+Kƒ¸ð£m= Œù÷s}”ˆN웹Èo šžh/gÎkÚuuG‰/UÉRþÅ+T¼é'bCœ_Ç ¦3YÝϺýMœøEÔkê1ZÑgrgìÌa„Î ÄœÙ*,âˆíB\œ²Ûƒªö”eÀ‹ãºÂ”­ï—ב s:>¨ðµí’oÚE ‰~0¿ +‹A¨U|jÊOªÞû(©i·àß12 Eýk¸ %°À6…û¬­W1rPŠ0íÖXW¬ZœiÍý5{nÒ%¢C˜eþºoî¨í%³°µn ý*Õí­¬À#>„È{¦$ž0©4Œ;ò uI¥y¾Ó¸Ë],5éðö“0Á|:Ò„]ñjm·TÔ¨C:¾FÏï â'“ç×E9,>B)>mYSrÐ:ö±Ÿï µPǘùŽêñšÔ‰aÌ£Æ.ȵªÝ/?…žŸÕ¿QpÔ!t–›æ Åí´Æ¢=̳´¢±®ñlO#yV2ìß—ûÿ¬g=Ûvfzï§tYò%6Ô¾›…ù½¸@ˆ‘RÜ!Ãb*V¿mV¢OH'?uœÁÎËÀzx¾ÍþÏòXÄ*¹d¡Òb"|¯\ÞÙ‹«_ÏÀcäý¼¯¨­i|°Èow®‰¬ñ¢Åoü.?$õH0õ+Š!éãAzó0N¯»>Áà¼(øÛÜØ?²œŒøÚñž&£ë™¶¹øiFóC[ëuzê{[Ñå]™p©É÷}#“sqù“í´F[òLQ;‘€qe»ºÍ´¥Ÿøõ°vWâ“j.VHòV9˜¿æF@¾oÍÖïuØó§ÂþP "!ã­^·Ÿ˜Ýæ5‹]Ì^Vƒ–ÑÎuY@Ô~,—™7¬¡Þ7ba̺XÈŠž¤üÍø×¡ß„"Œ–¥ÜaÏIs#‡_Ï<Ñ8”Êœ‘{4a7Î-«ò§<˜SáìÕwùðÓ³fLV/ÃçÐ+ÅtÇUÿÑè›Ì±\àŒ[•2Š`x<ê&R~.´2<ú‚oB‰7O¼ºnßÊÊ@ ‘€ÈG×'ž õ‰îšâ{Tws3M’g”˜#~µUÑµÝæ«F›è™1!X؃]+T **@ßã3ÕÔ;;÷æ0­~FZëOÓUBSÏQøÜ) ˺P;¢ñ~Yô~²ÐB:_rKcUM+ƒåô¦Ë2Eºâ¶¹µ_–~õò¾ȯŒÍmr¹æÇ‡û‡âö;džõû7íIŽGŒÈ‘Û/[zËNF3»ìñ ¨|·uXtoäצ•a<Ø% $oå^õÁ¾½Kºçò›ÀlË”ŒÂËs\î:ü(qŒ0|uÍcO0¨  ¥i£ñŠïÓ’ôJ0Íî)3¯J$’j?\ù‰~æ :1 >4ég#¡“uÇÎ'ŒG:Ð ö—¸×AÙ|÷(øD¬’ Ÿ‹»ìSÖ!_ûûö«5·ÏÌ hx^–µýÿûü©FšíR¼=ÍŸÒ xŸ-r"‰ª.l)ì”so *Õºþs å“$ Í-Ç„ñ¥îgÁt(­Ô¢ûÃåªpGò¢™THìÝÖ¾{Ê6Û…Y™ õ\f€JUÓI¿'ªj…ÛÍܼý…t•&bæè„8ª‘¬9£ò{Æv˜¢ããEáY3ç壕q=¿…Q+)ò}w=Ï…y7‚ó¸·ƒ§átʯCgÞdÚ&!ÿzJÍ•–Ç—·øt ¬¥Z÷÷Öª7Ñtgµów.QÒ‚XÏ$Ù_ܵʺkB$øü? Å’fŒßýâ¯í¼ówžBQ´Œzí½}âþúb}˜¡ÐøÎÕàU[× p¹ý´ ¬°ÿÚš>¬Z.Õ«Œ”“AòÕËaZŠ!0[zø •ýˆRÔ„ lÈW~¯S,Mq"UNßH,(pdYò¹*2𱯩çˆÌóçN“ÍEJ(Ú¿?h?½ßß}ÁT샠ë‰.èÖœ/Ä"ê&;ÖÅNi»–!QÙZ/²÷lu˜Ù¦`EÓq5;LÓ >Õ{#$—ÿÀòPù/6£DÞ/qïÌGŽÇÁÏfücœæãYįÂö÷Çþü~L½˜oêr ×·‘îåɶ«Ûº*?თF¥÷„òõ“5i¶3_Õ–Û}0mÒ·»ÜéeŒí…I<~Û àúö³?mC þ}½têVñ* µZø„<$]œBÛ#cLp {@µI’`GL3æf=Q“+²òÚëI§h#½ç5Ù 4`Dmß»fÛLàX˜^š«JÜt "#¢JZ¨Åˆ”î:fÖ.A"¹ÝRtË+FB=¤©Ì õ÷}‡ã-Ûæð·‹Ó„ì£Úß×D Ýç³m†yLÕù]òsa½µv&b܆ ËP?÷a-çîËþRïX¤Y „ &s–у1þÛà¯2I`n‹öC‚ö^˜íMùHG'§šÍ.Øí «Ÿ¿Y |R¹^£îxJá)è¡ÄjUmñ}«¤ˆÛx@tßFefç‰0¤gÍ‚X7+,Ó°¹Ë×a·ügÛÉøKôÄùØ‹myÌe•†ðÝø€–—BÓ•„¸ìcôÆlÞe!)Š?v*´yì!›<™Î·Š&wvTM•ÅU¨È\&V’̘“/^ýS£S¬ŸL{Ž«_þó–nÉ˦Ínç.NN÷'lYæ[ÓüÚ?~åqû6ðx¬xîfòݾöìÞr¼Ô‡¬l]zq Ü(Bƒœ_{¢(EÇâq™„¢ìZ„‹Ùg‘¯1Xv÷20Ðõy¢üZ$ÜPqÈ­0G ŽêÁÙ ¡KíQé{óNæU²åùÞ4¢x)^é©ZõÀꌅªxñ7ÎÂZã\ÆØ¾ðÛ«ù¥Îíh>¨üïcì\¼Iý~=÷l¿! ì~úÑ7A®Ô„m1‡Ø–Š@«eŸ¼ü1œ£)\’çÀñîQTmûÀ‚—E»ðPáÆ¥£2ê‡Í¦?Ÿ² 1Ü_ã=&ðR^Ì'1Ë÷ƒÓLšÈ™‹Ñ(ˆè˜~—ŒmXžs¼$¥»‚À jz"oËÃ#fïPå½fÎ)a¨8çÎÛ£´òÏÆÖd—äf‚ĘûëfE‘Ïu:hGAÅ:*Œ‚ÖœoÑð|,Ê›BP5ÊÏNßoÊJ”o£èüwv=‚ijÞ¥¸÷_/ÔPGKŽ=ô'ÄšqóðHaÎûñÑ@kÚ¼*,¢_®g$î*>¶¢Z*8¶Ù«iM9S)³æKp¬9ÿ²þÍF1x•æaÀhö«ëžßk(þÑÀ7l¡:¶÷Ä}ËF°ôŸ1v›Òt¾ƒF9g°8$Œö»œåö<5t‚uî ÃäÙßò­¶âCÞxª+­ò³|·v¯ë;æÍèPvq5ä{±ø9S–¯ý µk©À.º“ò‰6 >%z¤ô5“5KUÔÒ•ÉÂ^<ö\¶Ø¥g,á}‰SCÛËC1ÉIäkCˆŽ Þã:ñ2iCêrRNÑLt>þ¶^Ÿ{d0o“l³ò4Aw<žeo㊉0,ÃMÓr:#;Ô}?æ’¼%ífý —ÅKT„˜úQž9ˆ({W .ÔPóçÕ~G¤M†y Æú/8屩I€þÖ‡%üv눉Ͷë k½3Ð5ÖÈ®±å_õšr”·n›ü"Ó®bJù×&õãØ"nÕ:Aॠ^ç\O»×Úm1|8%³áb'ß1Ô?,lųµUó‡u+&!?nP‹ÜŠCP‹ó1¶´ŽÒÇ7 paI³”úkÃX*DL[ÔeJÜFöUᲡ®=CRή —EŸ"™ ·—lé’îÁnðïÁâ_ßII¿!®›ëͼe6×ÇãuC,×o§Ãׂ]ѲÉĨx\ñ\ùëÅÐÃÿ¸ìæYßYÇû€ÂO-fÖ°bÁª]$ôX0ß×qì·¶x)«afDmòÕÞ.¦h¦°Ò] àŒG³¼QgÅ‘¦î(÷Õ\éE½0cV}ÒŸw¾~î"jêúO‡h'å¾f3ÓŽ{ºÑ¬ö’Gl^¢e®]Z„?½Ÿ*¾€îŒNóùÞãóƒí>&7±n©d¨šJ”Íx4ŸÒ࿾Òd…¾ž¡Ãó{‡O·¨h~³2~l3ÂY¼œ €Ud¡"Ÿë¯çO- hF®ÙÛŒb¯UÕþcé<–›U‚(ü*ìY,É9#ÒŽŒH9<ýÅÝ*¯\¶Jšé9}>4Ý ¾v]P¢ü±„̹¡ü ”Ýñ²?’Q’ŒTJzÚ˜F”±x¸.l}™re¸ôÁÑߺŽÏMmìÊ?`SÓF´J£.VbšËóÅ¿f³9*ÿ8Y¬”ÖaAÜþ®:î¹Å/ˆ8  çÖC!ô×V—zìY:ѵµ~ƒ*gJP>¡æë¯‰¬™¦q¹vMò'RûSÆù®$Ç~Híà;ö×WÎþ±û¿7Ç£#ˆºáƒ¹Á&÷át MÆS€Œp¶B%ÃQe!ƒÄf‰Ê)>Oãqé§ 2œ›&éMè$B);ºGí×$Å8ûW¥@æäÉïæI[ºYY3 ÿr.‰ä £ bÙÖ²  û{IØT.K æ–YG êòY1)RfdðIôÁzÜ–Af„Xe˜)¦ëoüK,Ès¦†ÑcÎIHÓ ¿c_Ó Æn4h«œ>8Fm»l ùè>—´ÁÚM«7ÒðœÿaMÙƒ¶çÊ~!moÞͲà_oƒÃúÀi~³ÉÚ¢50 ¢§¬½C¥Žó·Ì˜VmqR1ÄJÿ*qX ®1k <þfÖ¿}]ÍÜs"˜2ò3‚Ñï&¥ö¹±Î@0_nQx„^ÂìN,¦ý¼ÔŒqiøbU“.äj“ ÷ÛìbÞ Œ›Æ«‘“Ò…»޳(óÀËã˜Ä鯸 ‹y1¿QŽ™~øÑR²vÞó˜’ù»7þj³Øz!jŒQ Ù:NS» ‹§7? ?éœ,V²zÜ?‡£üd+¢IBohù 9Å”dׂäù0h%p‚´Ñ‘ðv½»öÛå]¿ÆŽÎàõ†- mÃ!—fΤSIæÁs’ÀüÞØU§•­Ú¿JóZPÀ*íÎl¿0ĺd VûjCj8ó sùtf>ìëÙÍ4ПÏrˆZ—’ì#PM±Õ6n“†MDüª¨í!ËñßåFð¥DÁ±¾«ªâ÷Óy½•‘1ŽÆ•åKu÷ýùÙ|î}(ÊH+“¤ñ9w ÇÅtšmb8NÌR»0«y/6eky$ÅÔ'Ê#—2†þeÞŠÑAÖƒñQäˆTw–:2'·3Áø£³ýtn€Œ V+[³VÓV¹ðþuÖŒj=$Z¸$Ù¬œ࿆7øÍønº"Ý OÞ ™d„í˜aÈœ¹36»üÆ«…q|ünÃû¦Ã5^–P÷ô‚/Ô3Whá&R²ñò'%R?P¿´Q­l\/iŒYÑi\ž`”7…ïÚÙÔT\c™ ŸÝô.²«ºÅä HDÂ/`_‰JÖ&$jS¬]t"ï&²/·Ð)žû¦eÁ ùfŽA$Cîe#.³›¶™¿YœßV·Ñ½nÌŸ‚pY!<ë¡ ÍÑ/š—pLÕÓ1 L\_±¢J>–IÎ?ýŒ03¹N« ²¢Õs¯õ1è…‚Õ¡Òˆº©›Èê-óu]¿ò—D'Ç8X„F­£&ã2ë#ýLY&ø„c“leÐÛ…ðÈ‹$…p°‹ÑaŸ2b÷òH—1£¡ã©«Gn d<¡?½ª‰&û¬ËÇUìHÕÐ8$¢Ü_é>Ã8v6ymˆù÷7'ƒ>kbÖh!/ð™öñ^+¾~>Žêf™W»8þ:΂ÌSFH¶Êß•Ê`?ø¿ã,èIã?(¨vjiÉ£?ö@¼9EU÷° ùMt¿oo9”Ëç_'ª©2ؼšý×µPQ™t›úÅâ_±‚ûÈf;ü\ø±EYš¶‚ªt%]úœ;? ÂJÈÌÐU{ïÚs ŠÎý¾®@¡\,è’¡'³3Äêˆ. E:Ò«j®Þä½¾ÕŒ ¹ÁòiG ;ˆ[Œó åÉr?Yü+îÖIb$ä¼åضk…7­´WD`JÐÌϰT)™KÏת˜ײַc¸¦í\|½Î£tÌ 1ÑzIwºfä«€-åQž´H {£XZ €ï]Ї¿„ÇfîÞ?«ÙlLì‡Ç´…¢5Ïâ!'W>6âócy±—/Œ¶àvF^@Um)¼X3zá_³[Äþr 0¾Åz9Eã¾hÛfãóVÛkº ñRº é{ze÷cè˜9”†Ÿ-TÜŸ¼:«‡th%Òœó$">cS1~C¯) ²Yz!ä)ln¢ò^?[¼º×fš¦q¼¨ô‰Ó›=Xš#¨]žƒ „³)778Rn<ñ×e>tÿµ ¿аdžñ¦4©yŸKݵ}GU†f—zð w}|Šºâ>SsTõJ¸ ÌηøQI‰x€` ôn cÅφå±ÇL:èÜ}µOãsIŠKùW§Å¾D­ã¿Ú%é><ûDpeŸslÌ;ÏÄÙåŸ|›ôÝ*…’ík»Cmþ¡ó.°sA=ŒüH$Ʀèjœcük±D©°PòßìÂG÷$ûÝ¡F¿ÝC*÷îÎÀ›ÕßaM­ÇÑ·¦©ÁæLÑ%i5Ì1uLuY2ß‘ø<[5n@‘,8ÖÒëÅ‹jüîv[–Þ„#Çæ|ªýÛnÁ=X$„eŸúoƒª;ÃÈýóÜ^Âó{™ñÿANTТÞÙ+š¬ƒscw†¦-aqâù•¦aŒÉ‹óá€ü͉˜ UŽ5msi Ä*F¶vå^¶`'ÀžL- ÿ´Àއà#ÆURÈ7O>àeq#ü8©•Ò¹k{¬épóbç`¼4âZw<²5'&ñ-A±'v ;ëÉÀ÷Ë \ðt¤r~€Ñn;ª 0–O óIP¿_·(ñmø>¨Ÿã·:>F\žp~f­6À¥Þ£¼FŸÇåÊÓåtÐNÍnTèáÈ*pK0Õz’ü[?GÿA_ü‰ â¬Üñ(‰é63ëF(AåSq²\~ žZM–\%u¼$ 6eÔ¤¾äˆlh&ÙÛ’ÆrŒ^¿]ÛbÄã´m]bM.˜æíÒ ¶8±8è›Öd]§÷Ê­p¼é`ï¸øŠØßÏ‹W¥!~z¹ÆDѺƒ6GD¾÷OÓ¯öòW§¹×PM úv&ËA`žI$Ó‚<>Ö‹{Ù;Š]äöÍãÞg¸Fô ÎY³{  RTÈû!Dß'ßäTô×àÓÔ*¨y äõç“_\eÓ˜ÃÓpôj¯(Mú»>¯ò¥ÃˆjMDÖìLvý¯ÿ V‡\óÓvóª€úqò·ýùäNé~¶usÈolåš!&g~&‡(¶û01–=t;Ô³/&: -ÞÅø÷JÁ´aeÍrÉ“¤±;µïšÑ ~â)þ¡)s8¨þëõYÿõú]¶ù³’ìr%¸±tŒ×Â’oé,ß:*†… –ÆqŒ“4éÞ ¥dYÒ—§MåfÒÕ²÷ÅÀC·,t‹zXsuÉ~瞨›o‰«/‹ Ƙt ~§RçPƒ{9ÿ&g푆jÎõ€ï2Œ¹/ªª2Ø‹‘‡¨Š~ÊýÍ5ø…qpø¦°Ã±ñ¼bMå£J7/¤^†_G5ìöy»•x©i•60•7fƒ×yG6ˆ{¤¬q„ÛÇ‘yX÷y,¾ÔfáÕ³{cÝlæ–ÞÅ£Ö,Ü_ I0ü{k¼4Jƒ:纖Ée›e2;=ð¥;‡ÞíÁ¥ƒ#N#eÙ‰F0óãÓºÒ«àŒúGs0Õ“Ñ¡Z/’þ#Æ/2®ÁàSS%ÜÆ_ÔryE'¹5âûಢm*‘‡Áñ–Šz±..å—²Û6Mñ¼+†ýk®â%™§ ÖÆ7=ç‹ v±©_WÎèû óÞtéU”Ïãñø Ù':©Ü¿Eë]•ú¹ì9¿f&…yÒ›\ c®®,ŽK™nk"\ý³ýÈ¢ßCõ6IÏ'¿¿Ñ¿7¹xc´³V·Ç!” ÖÞ‘ÎâÒcÛþnéêÞ­Ì4ƒi…^Cô´T‹îÉi+»ü ÒÕŸ{üÀÙÄý›É+Ãb ‡Oó\È>¯mií—ê.2ñd# r¿¦½·>™JÞL¸D<–¯é¼K¯ï‘\øE¿×/{/‚µnb@º”:m]ã!¹$÷CjÞÉ&ØŸ % Rtzá礿ªH4Ü z~í†j˜µÜk‡Wƒt¥&±PVÊ!øcóc'ûñ#Ëi:×ÙAP î#TÔc®ø+¹C^ÝÜ’˜™úq^Ûqq>?\èé)ŠÛÖܽ®“Y‹U÷Ú DΠ€Ž'èºiQÂL'÷lÔ¿& ¢–VB(äüÒ´ TA`Ò@þ|æ¼ý^oon{ÿ]Ôº§ö´Ç’¹À5ÛB˜®çîi^ïâCÛŽÕeTÒ¡XÖiþ»ü:Åóãh™ßDÇÇþH4_™cÂÉT½ïpÜ’ ±þºUÇ íI#'é\„û9VBê–aó³wú9¾‰Cíäwm1öxÒGƒ¬Ñ m×/ÈäÍBÑÚØòQÎßÉóÀ ¯€æÌ4hÌö¦Øk—¸MÍŠ~KŸfD¢zfn`?›µ‹Á7Ã÷oßšû!¤›çÆÖìHàûüU .Ű6ͪÜ%5æ\á}yóÏuJ­}^ü@›“7ü\‰¸fŽv&M¾&rÙM¬*¡À_IçQp êvcA|¨I#ï̓,Y­f¯uÈ#áñ­“ܾ<è½Ë+ù>ÉÝ hwÚ“–ˆî£{HXNÇØf|üCzzNÀñ(™þ¡[•®næ  Mf’–%ûõ`ósºó¢Xªÿž(0“}°`«µµ¯!Ðß‘jO›ñ7hËìgR5¨S´ ÿdC« åƒî¸,X°žÖ2Üo3 ƒNÍíZþ»Õ_ЄxšÁ@Ñþå#–ýõoPˆš—œ =½ ®×&šD©æs<ד:dŒ±óG<00ü+Ì£@{¿éƒÿHØ ÐpKÍ%d—æB‘mÏäíqgå½yÛÛ:Ô¦>wÁ<ºùÑT).‘;[ ²šgÙrª@‡R|ì €æGç}¹q qh ×®ND$í(N³ v®§† Ä(Œ}؇5ki@3«úú¸‚j[‰Õˆ€¦€ø{)_ÞÒÁ¦YI^N¨Ø08Àéoq@VõØçÅ ²¾Â,‰Ï¸ýÚ©I!‡-`ñ6n=ý=±sÇ@unˆaÅ ‘!/c{½ ³Ì!½MG—pí…÷¾'ª÷#å{ûjÕuï>áî>yXY§Vz?FtQûHÇ0#7Û²™HÀ«”Lï$S­¿Œø,ôËBßG³á?ìjøåDg§ VŽd“g±>(ÛÄûh|Ž×΋ †åäL%c%_·ÿR1i­Wðýi69‚äNÒð±š)ä”'¹ëæ]YºážvIó+»fÚ€ß7Ÿ`5y 0UsÕµ*¯H±,Z4aûÉ‘¦Ê8RuT-ø á!ƒÓ ç/Ý÷YZ1ZiªÉbô7è•Bžx9¥ÊÚ…¬Q ŽÖÏ9¬÷þ«yö• ò÷ R>VE¡gw‚zŒ›ý7ªøZäþ\þ"è½°éÄÆY½XWª:Ù¾Í,ˆúÛÌ%Ûð žµœ‘ÅóÊ ±W ûäÌêš ¥÷OæÙ‰è8À–kÛ@5þù?4zeïrœŠ¯®8ñˈÕЛXÓTºÕO= s>?‡C‹ëùVz9+·[ÝeS?+Lwå+{ˆ~'æÉê‹É*Ü,öË÷=«ügà“Tâ#Ø¨ÅÆŒÄÉI“îW<¢ê‡ÛÅ0ZÖm­¯@}ÓpR s[KÍë›xnì5? ¾í¿KIœ,žuŽØÖDÇŠGòbGµ~àm¤™´Küó.SÒƒüGÀ"Í-G•ö­§ÑΙi†´‘Í_1édT _R™ÉÊ·iaÜŠ_¸õþȧ–¯ÝÙȸ€ðú &püoò«ÀiX‹íJ5•÷¹QìžH¨· {]œuL•t¶ºi„]çf¯¿3CÏo*$RéÇÆ“‡æïÁ©ÅÐ"ûû~óþJ|¾•¥Äõ¥üi÷ߤéÇ «"HÚÙãÌßâZó½YæI<®äûvÝiCóÀ¿Ç¤m.%P‘=Ö|kM±´'ÝM8/Œ(ŸeK¾v¬ï›Óy´^»i°Ç²“Ï”nýBÂxýâWA¤{<±Gÿ}™XW°Õa uÍMöiƒ(Gó*Ñàϼ<öÁ˜ºž›ædûµÃ“ßURr®Wb~°•ƒh–椙Êñ!lùà{„ÕïB˜½>žÍ©Üm/Û€ésÆW¯|PUr’fäx)t2Œeñ€ùæþfšáÙ*ªì~R` íà8–1ìׯa{~s1_.Fi ?4S«ý[(ô–¹Äv?‘O{Ϋ¸Ï:+M2†íUhT‚G¾%ÿJIÌ}$û~NŒ£&{¤ ‹E¸Énº4VYÚ÷ÆzœŸé™D__äf0’ú• Úb›þ–=BosÜó|a1>F“CÕó‰}ÒðÉ.Ò|ÕAÚ¼H¦iC®óÅH)ËÛ–í* ôVJ­)H¶ã¹ÌHÍŸ$C#ßô$ä¿´Us1CCyëÙœŠTê¡ÂGÄB¦†wÜ|\†I}Âö‰–Á3j»ª»Œ eGµÂO^8SŒLUqf™b¶‘µççÚ Ä2­—¿'|óü\ÿô«šP,Áúëë ’xþµè%Ô05àl¸3¥m&c†ö=«”¨½Ñl·¾VwÆ™!n{ðÈú½£“w@ÀÜÄIÏêµSGÂyõ¥›ýʬRè >øèÁxÂ,pÖÃîxhÆ=ý0f¸Æøø¹‹¶ ®Ë,>€g"Ås0¦ÓSP,]õ“2ø&<ú‡çëßkPÂÐæq|ÊMøi% ¦ý`L´¤¨X˜ K´mnû¥„½ö„wÒdŽŸì¨ßÉPüœÖ´NË…s†˜$Rº|•Cœ½ÅÎìŽH$ðwÎñÊøí,„ÁÁ„àÑxÝÉ#vÆá9íÂC$÷l!ùm+ ËLx /é*,6Ÿn±úÌšQJ$WЯ”È«æ›âëþ‘ÆιC{b—”¥‡Îh¶åaŸ4ëäÒ}FïŠrÀ¸Ê%o:!ìÚÉÔR*¤àÕ]=”ÀŠ3f§À3Â¥öæ‡~éô —Ó§s#}^}¿9!‰J÷„h+QkPš¾E­2ú;Ÿ1‚d€ç–®PáÙ|„wǯ/•ßð°Í¼þ=õú“*Îê$6M;»¿ô”ºTʤœo ÆAB2?™ÔÕѬ°tn?|¶A/Ãȼ¾ód ’¤|Mþz£G¿Ð)[kêã ;¤ìB[$Ë«6;K8~–ãI‚×c-š ½€›ƒò‘XԴ晩⿮x]Ï㟱4΂Àa Ÿ¨ô¡ƒµ>hü°ZF»y-¨…ËÝ#wÉ :Úñ ïŽ'î_ƒôë²DøË'úañ±’ÖX]~|tP×ԇݬ±hã3¯vHEíu];X 16,2GC4=ìùH±©`P¤¹x°4«òbÜÄÛùt“òãßϵÆgÈF®qÖîÉв¡ ¿Î<»W°ó/H$—BXÏ 7ú‡%Îíž«¿°S8¿»xB]]‚ne)žêæü:$³Á;ʨïÏkoQ‹«öqÝCfJÈ;D)&©³}y’ýÒSu9MÔ& µ}ôK÷]Ý ˆæà©¿É¡ePŒû’óǾ¬Ôïl«üÝ«å“ÖZz{<&`r£Oj¢-¹œý„‚@9Vn÷§Ì¿%ü™š¦÷¨« ÞB_Ut]iÛñÉ}ïçU†y•òÕ1$võ'ºŠGLÔn9•¤õ’Ä.ÐQîO—gi{ЋŽ'•y(G4Âüš!F5Xô!Ò.O´)°Úv` í¯­M5ßH™R#wÖçە뫯=Ô¥l _©Ü’ÿØ=½"Vqð=WMf‰:$úƒ½8‰«u2¥”ìòzq§™k¬\'©8ž†bv9xxGô‰¹çTãU›‰öïÛÒÜ °RåÔ@»­Ç¥ÈP‡×*Uìb½Ê J!Õ¿újPaha¡Yƒòç úº%+QìKa‰ka\mcç&*þFã¶@ ^·3ÕñiKT†Ç—ÕåËŠ¹JðiYeMz¾ M¿žäÎ=Ú–¢_¯xUimúó­>Bè!¥žÆ`¼öWgœOë4’z©øOv¤ ç{´ °$È@‹3f¦Xó»¿6n‡?¹p¤’'É šÄǺô¢ýuJh¢µäbœÇý‚/)”•SJ/ÀEá«ã±¬[ÇOÚŸ»ôÃþ´-ã`*Y‡ÞàÑ4ñî×ÍÞÔõUjÛð‡Q¢_Vc×ëÄèÉúF¦²ê-FVJ†Ž2f¾¹zž!y#{¿ÁÝæbûý]©q7iÅ’ö7Ç|þFýÖf1þ ß_Ç]ˆ)[L>ÇV×­à”Pé#–gA…yÉS9Â%¢ˆ­Žo ÓÅv½.—:½ï†úM¢¤¾"µ@àÍhÁõŒ?}é:_³$5Ý/Hn|¢Ü8©Oßç¿‹}BàXj›i ;~(v»Uù“¡ôxlŠ!2Hˆ¾óe Ñ’”ûø’­¤Þ¥e¾©¦wåó+ÇòH‡FýG^0öRx¦)¶S¤œÑtÁj¤ÙÇÚþZP Xcg³h K2›ßQ¬Ž"<Á¼!¢^ÂÑæ›¥ kí¢%Ï÷Ž„ÒÅoÜ$%9ïªÒ)D<^¼ö¿û¨¯PïïJݬ7fâjÐ:Ýè¬ÛÅ ùZ{âSÚÍ£©¯2çuÿ‰™X8nw-Óö_{F†êåsMí·½~õô³”ñ¼bïêî­‰!{_ {†kL¨+c 4"ª‡F*2ÀMÚsÑ„ÿ²øžØE¥§‰‰ò¡pGIïªWâþë f½‡ÿšcR91k2׋Gd)̤y:ùí0s *»Vž¿DT ¯é¼×S]êšl`Týð#znØm"õ•{ 3ádüÖ lë( £ØL Ä^`V½  R¦WìÜTÛ³ŠSB]y¡Ã±&Ò䃦†:{i&ã}bÿ=Ä¡’ÅI);œÛkG)öõh_JÒö1%jÌHûý9‚"Alìt×'Øò/g˜®V·C,_Ü„#ödÍàèM›OWœlÖ+9 À06­ÃùçO¯ Œ]Hˆ÷GÍòL}“DMžƒ/“ó%K¸k7öv·Z˜<2 3Tsê\¬CÜ_‚"À¼¬»1Í&”‡ÇM›(³ëòªº¥Vzì,¼œIç]Ý®§åÀ•=Ô×<ÉòÕÖæ#šÈ¦…ÕÏ9bÞ Dž¤‘u¸Ý{mtÃûú»CZw -˜ôO¼ã·5¼|hÔ°fl,Ôú\¸±Àñ[ cJ¿?›œ¿yŒcÇ0‡ Õ±üG^ÝO¿Óä ÒÖ *|¿™ÿŠo¤4 /]A át8Š]ŠñùÖä€à>Þ§&™êEŠÉôƆ…R´0^¸fˆ· zt’©=ô·]  5ßÕü&’€ 1n ˆj˜eqÖ¨6ƒí݉hE”àÑÁ‰û d#º6ñPä…CÞió8nu7‚G¼LËÂBcô’ªk}w-ûv¿Bóu§OŸ¶€O>µí‘ŠhÉÂí4‚î°k ?Ð11®Íûê¯øV”¤ ókÜ×~ãªD¬ÏÄÊòÞ,¯ó>€Ø °âc1çßõ{7ã¥Á¯ï¾Ë㛎‹±d}6—¨u‡gôì Ë©$û)¶ "åƒÚMÏóM€¤¡[=ËìpH\0””þ†äåü…«§7WO\y¿VüÆ”еϤÒqÈ-_ߜżIÕv…¡œÜùlòÂ4ÚÖkVákšë^VõÌšÓ-‘«#ñªð$0?|0œIÂB„– Û¬¡ "(Tg=àû–Ý…™†›¼C´Áíœ*¦ênüŸ–?%77öã¢Ë´oNŒˆt–Nì¿1p‘WÝ]þPT7Ê5À+ç1­@£Å¥ N’Wo¤ §ÜoÌ`k{ÓD˜u©v£Úm—Å€õügTÞq¿3ͦ,Žì CE½Ùþ¶:\ȇž§ø=î¤ÊÁçÞy¸,£âFΦ9GÿÏódG²þѳ3hÆ¢ â5BèD| …²Áž”·âûE;¾ó×[¼sR‰c^¸1ø"ì§Ò{Ô¬¬¨h¿xh"I<ÚÄ%Êmƒ€>SYf’ÓþyüöÍÄWÍ8 Ø¹3 Ô.>rÚmD1)·cü{]íD¸Øl`|PrÛ.,)Öçù˜ëø8¢i¦.8m_Aº!9Úü·ç$—'n +§Kp¹%w½ÎaHˆ§í‡°pÀ¡IàÈUç¦ÈMo`‹ÙD Ió››wýª£ÌÚ†Üþ¦¾¯_IÄí ÍcŸ|Gxv”;WYo‘º[—ª.RMGd"’;Pó® †Éz¹üþílõ¤öù”¹-%¢©Ÿ ìfrëzƒ‘| _î°?3_F=¯•9õïñ;-2 ð³×ž-…­¯÷ñœë3ïäI0•ˆm˜$Ma%ÇY¬˜ŒnYÕ'fŸ32›Q@ßÓ¾ $óÇ]ÀŠ0ôàÝï°Eu†]$ذÉ$D䎙æ½/(vkŠÆç@ÿ@Á¸©G ’¿î¤Ô ‚‚9êEÌ ‘,"ºáx'ë%'ÜùIÃݬ{ãò½žh³Î«I¾8ê³ø(À³Šñ¥¯dÖÞ¥¸Æø®„nä±"0üˆ¹ïßT×Tº{™²>Nâ×ÑR4aûï=2n¼Ê ÊxÓèd4Jë<9ÌHÅš$(¯ª}?øo4êÀvëeÊ~%:âß­QÌ ¦o»oÚ_³­ÜhŒµý=XÂ!{H„ü¨ÒÅ1^娲(õ$d€QŽAÙÎlÜnîíuNæ:ÄÝWñúäL:ÑÊ\DvAnÑÆãx°ØÉ)– z±ú²b73RñYsí««CÒév‘Ÿâú•Çßë•<±ûû8øsÌÎêXrÆ‹­Ý$ägÎXc$÷žüˆÎ ÅTi¬²TP'ðsžÏÎì$e,2ñH³Þ‚¡ùI\½ñkSaP‰””ß;Löú6Ÿ½¼VôI^ZŒ0¡%"Mf¢ùµè"ú[b8Ëßâøö`Á2\g¿žwίôú³zýÔìí[}‹°6¿8f²’\I~•ÚÑ™(4õº9¦<)¸2â1öí¦ço¹¨\Ê×1ꃂpËUÞ¦#»Ï1¯‰n:æè é[dÓk»J3‡Ütž`@Ö¡âbSĶt¡öl»ü§èÞÆëˆ W¼‘í‘Ò%p ¿j†|†«Ùó`èàçñ‰øüX''Í\àx¬¥äe‰¢…€Õ “b‰hþÊꆠívÚ¼žÅ1éÕ¿lÇoÒÈfˆÜ~‹‚¾VùTÄM°6( €`MÈòõÅ}˜–!ŸpõhjF†ÿîHÍ.!žÊ¼uND‚ì=tpÓ½»Ç’&´Xdæ|0‰ý4¯ýGSÀþYë³nøÀ1+4œn±à BïRw9V›«ñõÈ¿HÜ)_Æ55íö/ÏÒ=dÜ2BÝ)xÑÍ«žvÐ¥•ÍVö˜‹¬A"C1>˜>ø^Ïu8E´^,%Ts´1ˆ‘X–‰gR™ ùkù[}©@])0Žä.ÀÂo–ˆ­båFÓ­en§ñC³ÏQ±u‚Ú¬,È0¯Ò8Ý6)Þÿ^°Úª˜6…¯°+9é`â˜ãò @‘nìžnýhún…a5Íœ‚kWäç_ÿVbWßÀ+zKa?cbªòŠrE¹ÈŒë+•ÛȘ<¸f)¢ëªðAê( >Ž}ÇRÝïÀïCŒìAò¬&;¹rïaøK‰DߥôwOÿ d¨«Ç§jú~ï ô€Ì?ÇYtp\UþãÐùØã_—9)é‘_8Œ}ïVê„»Å÷Z,ÃQíO~VyÊ-‡”~å6y1õÌÔŽÛLt÷£ñ~ùlåï¤lo¼üI ùݼÐ|ŠúE´’ê,oã–ÉŽ§;kd>Àr1“/`˜æÒQ´4þÆ}}NÉhbŒeN,ÐYãnv$.wí&ÅŸ³LPPCPÌ ûSüÂÔš)èõœkÕ¿« 9¹£øë{]öê½|ã^ˆò&'Æd­òòý.`š—ÛqœØlÇöm?p„£Nák@JØùLØ¢3»w"ZÙ‡#ˆæ0Ò÷ÁWÇÍÝ*×|VÙcÏç,þ{ôâá!dý݃…mqûýaµ}öF¹%tްAÍ”£`z4šo ½†F>áµ é!ûÕ­p×öý0}uCþœ˜Ú+à“_£Ç˜ Ž,þh@E<üvwÖ\YŽ$cu`Ê~¶vºýüoìÇL dn( Õ È#*+•Úvÿ¦o‡Ûõ|è*Àœ5.·«}^‡²7é>BÙŽ®CÄvi¯Á–vËÝxßÝe ^Î”Ðøòá2ô3„3Ú¯ÐQAO¥-§ÀÂû0XV2ä¹K.›‘éRøi«²SʲБd”åPQ°` Ë«½!»N {`ƒÝ#…ÍHå™ÀÀàÇ>¾¡¢;ùð„îY÷!F½š9¿);bÙð|¼'ºl„)²L)µù¯Û¡¾@Hþ5 ã¹.lÑ_ «+' NåÕ¯2n óoù#Ð Þæà~îZ@ú{úÁã`‰ò¿æKw’Î6ßÂD®ñ ¶à½v‘œ¬z`ñé“2\›ý€ðÑ,£"®øH­–ј2½ùOæ.êòP,‰ùc,*}-ƒ­<ãMS{ž™Ú­E2ð±äƒpD%Uݺ¾,ã›[¤ÎøÆqsŽÖÆIYƒ °ÁÇàü$ÄÝ'Ñxrgõ&©=­ä”­3i 0»È˜õÆÒÅo}¡TY®ùiS$@@]™I7i7žAC"2Ñjâ¨~;zúXÔcFi´M³G_í ÚO $þ.‡ÔÍÝ™v¥ÞjH«øÕµÛÅÌ•Š0‚­j™†ÞÍe]RXóë Ò&N·„ø©x¿Í/1§öŒª%£ÎøÃirI¯’ÆèZšz_[ѮпbªƒaYû¾° o.ùÙºÕÛmÖ}™^º?¾«c¤à±Î ÈÒm?Ót …SûÞ_Œ¡Üg™ŽGEíµ~v¾Ð~Ç—ýì7J•¬l‡¦”jÚ Xjt«mÞE àYb€:±Â‚DL=ØfèÎÙšA²ƒuY): B#¢ g›Ìпn(É_)™¡ï9K5N>&±’]Ï›B€´h–Œ¨¤ÔÉ2¡÷œãtðŠ“iõmtQþ™±ü\¾?üuòŒðdÒ:à;+ü0ÀØE4J“‰†ÜïrSQLOdáD/bhºä·EÇòïAjs‘ˆÙ§$ø8(eÖÒϤWdÕÞ^ZÖ°=‚Áˆ¥R£ðî§/9cƒ<õ7 •<­ÌÞñ•x rVEaxü8½Ì ãp«ˆ>…ÛvMû¼žÌu¨KE°ñ@Åß¾qrUØÐú“ÿW ópV>opɯõÕFV'Ý’zë)µÖ‚[{æéÈ K½y®Œó»20Dž+’@/ìPȪz\N­RÌ¡¨4Üu·7¢í`ÚKÈR¡ß<ÖÝ›sÚ]EPø*òþõMÓ2-uÀu\UŸÓ‹‘FBxé>]ù\Ùs\ö±>Þ«.¯ô);ê™#(;mËŠ!úﱉóhãÃ! rÂ4ƒuǤYÂÒê×}~¡'ÍŸ+¹1Ô€vœa‘ý¼yó¬Z~•;šº)uWoíòš‡Ç x좨¾‰ÈË„²Ý~ÙÌ”³iÕ=ÌH¹`_\à$È^¤#kDlº0äc?8/2õûß—)ìõòcà'Çþ½õÍÃhcu/IÎ1þƒýlÿ­Þ2¿œó›|—øWl¥–ˆÇÌö}“þ]Ê~=žn°; F‡'ò}‡æDIõ4d=β¢KG¡˜¼<~ô7_47¥¿ûó'Ë컹ñ鯨x~ÛI}'šo:Öá‹¡æ•¶.Qç··-ìƒH¯—ìeÛòAð&GÇmÆÎ#–ÜÎG];¼øšÏÞ4_ßB70ßùÝ0 ¢+›Þá¢îzóëªr˜ÊÚc‰„ü U"k–à ¥dÏå›]Ó ÌT†Â™†ÚJ=%|²HPIüUòûÀö2Ì7±žäÁæñˆ7ŸÏáŒÐãªVŽ\ƒÀ”L¼âù÷+–:–/ÁÏFüžè!,RÉŸ¤6Ð îð6•¸÷ä ®]›P•x5¥{ì‚1¨sœCÖyÿqžáyç6q ûNi8Íùñ¯³Ôæy*¢œ›ÝlÚ³¤‘Æ<Ù8—Ó˜ñžo©^³G즞ÍÀD{¨ ËÙä)q¡­ÙØfýÈSí/ZSÀDì$©mþ ü•9õ.ºA«t_ï¦0‰IÚ›ãɱ‚y(’z’ýcd<~G6 QŒã5ÿ¯%ÇŽs§8Zª®Èœ^ß05‹”øE2ò´FQg| —ë[¦ó¥6î₲̓¡Ú~ Õ2É‚>ËÄœ»° Üî-QÀÑY+ ùÒØŸñˆ`úÚx fø9U—åÇÀ)ƒ1æÜø5ûšžPá $úf…¼»ÆÊeXÂÙ~dKþ%P×]´y~zZïI û:/k»(°CüF›Œaðùmê*¦èF78dVÃcCyöb¹—ûíŒ_ÌK]. (õ;aƒJ]O‡"9㊼íVrÈÎûÙÀ+5Ò¤ ·ÑoÐ`.:¿ƒþ蚜˗„³Ðã_‚`Ú  ܦ9” ŠùG5À#ºqƾHØCΪ¡°„÷$`@e”%Ö0ŒƒÖâ7ý (lê¯BOÈrQÁ7å¾àl F9Q‰ŠH ú“|¹õ»ízô†õü‹w¬kPû±M®ê½ƒýz@£@wÍòöï².ñ¹–ìkHÕò([ÌðôÅÓ*ŠæÄNjõfÉ´í)Ó vŠy½©ŽC¹_‰’i*[;À]žrR ´Å[ÏO¨e˜I/¶¤¼ÛQ;ä/8B^•ù‰ðÍ¿²DÜø tƒ`ywCî!áþ°×V½B5’ˆ‰ÒîiÍÔ–-"2!­sÿ+fëÇ#û–{‚XϵÏYáÊ_Ã#à¥ÃwömÏB> ¼~UÈW/eMÊÇÙPgó«´Wû8|´±­«Ãžiñ‰§`£˜µÙ'áL¹(åøÙżUØOÿsq w ­­ý@çAL}ŸÓ|‘ÆÎ•ÓÆŽO–‚ÆC^‹×$1Ql&Ówû¥gkHj]ÖŒáwGŸ½»äÏ=¼™‹åˆË‡õCðK£ãÑçnÒÃhÜ“Tñ[z¨Ç¦¿Ûߣ÷~ppç¹€‚Ån±ae  O¾ÜGF ýØl«PPž!½ä׌¢bžèIjÞ I0„ ÍBg¨mhÌO¦…¯ãS›öÀoyBøÓîýí)u¶×™­’ÿµŠEtÿïÑ­U$E=K‡‹b·5( 4äm+ßÔ—í++î« /RJ޹CË>öàÅY“uÄûc ˆç§ 7öUM?½Ø¬º4‡|‚øþ”¸!œ_‘ KÃà*ê´›fÅKãM{sgøá°X›ðå—FÖ ‡$Ñõ5#J¸3✹Z5¡\³ëœ~+”Tåí_W2Å¿™ËŽðpkc:Yv‰²œÛ²“ȯôm…b€Ø5Ö #½÷\çFèÐÁëU¢ÕßÅ(I‚ÝLÿÙ_Ðˉß›÷a’h;BO\×öø*ò ïŶxõW£‡Å ¶ƒ×C:+÷Ã4íŠØ]T%:œi›î«,Ó›»|M4¼ä~òä12ôœ÷Ígœà]bxäèõÀÏ@áwÚb~?¾Tshh"Q³,°Í®kÔØŸÍ1˜u¯íÖÆòq¬Q“ózÁqiª˜ç!˰ڲD}ß/”¿Yöv…Ý©ÍõN¡5ZN¼¦ ­Äi?k—\1é©ÅÑib‚[À·z¥Ôz!;§¬¥ÕÚ¨»YûŠ`4}·©w²—6Z#¹;:×¹`ïs$ОÑXYÝBÛ-j¥À“†AIé:Y¤²¯ÝÀºªÏM½<u©\5B{‹þd›…çj·×=qs/˜y–¾ï¨ú¦aOªËØš”ÛØ”*Ôäq‰bìÏOÙ‡ûø~óÕš%‡t×ÞK«¹YVʼn'v'CŽL×Ëá¹\Æâ䨡d¥áŽœâøÌNŸªíºWt’UÑ9ë:‰ü’Ù§NSݵVu!’Þ‹}Ó•ë¼ÎÍñÚ«ª``içäh«º½>VqåÉÒÙ\”ÎWãÚ™”SÿÈj쌄i«æ CÙêLNHž‘Ç;¦ºàZ–©é±¡X]â:KßÀ›.ùââØpiu©—¶<û>¼êÔ‚Jʳa,*N­+àa¦ªÇ^µéÄRÕ‚wÀ•ž]®ôDsMS{m ºHiWkÇ{i0Çméh¤ä1O <ÑÊ»%í»æÂPÜŠ1žè•ýùT£«S6œ\I•MËV¬³,ñ›åFÚÕÌlNŽÁv8(vö "}±jîq‡e´S°´5ǃ÷Y©Ë¤­-´­¨5MËÈ<®ïõâ a/bÆ©2éŒMûàký–ä.›/cmeŒ‡§U»›r*íÖ›F{†‡¨žÙ¨4=mÚÑž´ÛÉHÅÖIu|Tûˈg¢ÜÄep¯}Áo4¦EM¤óý8â.ñ‚cÛšúÛÖÜκ,Õ¸H¶6ðæ»t>߬+^}£ËU1’µ(&Ùš"ËÖξa/«S!;ΔÄëŒ;ao%Õäê"®­ yšRph+{£bN/ÊVO(Õfv£Uk”të”/º³£ëoÎÞ¼“¬;§9õ¼Ó|WO @#7å‚htJãñpÐhÓêtšY8ñÚÝž¥vG§9QËFPÔ-ž.–•B ŽŽ³´:Õ‚W47}¹Ó±ö›tÎd®®È-š£ÁPE›*ï–kÑ|bi†•¬6²œ×c¹s>NˆÕ›‘v h‹Öµ~âè×éÎɬ¿(_:YBZ#“óK]7u—mPãû®˜M‡»îÄìÃfa}žá]¿UÓ[üpZÙî£Æ•t[+¯ xüöЊLj6ëÓnÓìúœ©›zË]R «k§¦×±½? ôô¨ëºd/T½ ìöÄÖt—„©’LÖûÔxáæ ï$BKçeW_ô%1g´‹Z½g ÷â|­õõá.VBùd§rBgG»ÛìÓŠ¶^»ŽªXËߪœÇÇ‘0>ÐY­ß*Å}†TÍÛ\eg†ÖlyÛ5RzVkÝ—Ç‘eÏ-“Î[ƒMê¸Ð¨÷…õQVÀ`6Š×dEÎÉ®“¤*t§$êã=ö{ܸŸ]þ  FvOAuTGâÒÜÑtU‹IÇKýí(í„Âr`•T³¸á½l]J'Bi²L»AbV×±d¦\¼Æ“Š"´ê–ƒãa%öùBnØA=•V­¢Z§í8+´'¾Tâ·òd °­–êP¼jw6²{£FÝu»s~Óãô]Ò·”~i»WÜXkµäIýìw«F¹06åè”ÔgÉ =Y–wÀ¥Ã}?ë¶ñ4nî ƒ¬Æï, ¹XÇIÁ9—…¡©nÖâv÷,4Ó ¹-Ìgêúèãº)¦£FZ±K³n¸Ë°·no­ÎºCiq\W‹ã-.§'Z¥å/Kî|:l¤‰3.–ÕC!$µ R÷£n´¯”èzÚsƒQˆN2ï™q=5V¢W›Ó°Ræ÷æ\ík\ÉNε¢ß×gûc}Úp’íb#Ô:Ë™Gë´™·fîÄkžLqw˜LÅõ¾-Mwrc·œÖ­ê<Ž:s}p[•&/`ßlwNlû©Ò<…¨"Ô“dT?€JØ×ÌI/ZÚdpJìíh+ï•>Zš£ؾ¢[j1T(LwRJÅÎê\Hk¼6o/WFçTÛIƒ^Ù]lÆA¥]´q¿_Õ½Ðlo*š¹ÍœòVéDâ¾ÇK³á°A•N9ò.Ù(õÉ¡Õ8N‘oÅÓ¦¡îÈ*Ú%zmÕ›ñ¶¹±—sÔ¬ÍzaÚkwÎËÊB ªÍ$’VÝÚ®·.¦…ú&mœRnj¶ÙQÓ#•ÇEGaö1 dëܬ-šó#Ví¡Yö»Ù7 ápÞ5[ã$,'çÊ´˜…5TwÚ3…Ž#u5:Æ×Ô½¹%‡ëÎ*u¼Z¥¸9Ë „k•în`4×õÂZÃ5šý‚˜Éár£Ou ¤CGd»‰Pê­'ÞœdnlžÁÒyù“C:”A¦UÕ‘” ’¿lÅFZÍÚN^®šÒH1‘?),çË /Õ%@æÇF.õ¬w•ª=Ó·Û§ž+Æ[­³î‚¶VûÕºZÚðaCÌ'†ë²©7£ˆÇ[»ì´Q­Q_;-s¡„­Ygµíâñd¶n{œÛ$ñyèv»…ÚpÚœ–{–uŠI{èDíö÷KU¹® “òŠ×,MßÛfYÜQmžìÑÐe /{û$åv½T9ÙÄÓ¬²hµ-ö²ÈòÞªf¡sXYƒùI=õ'«dèɭͪҪ4íàÔXϺú%–@/\îû"Ç>’hP«+tÌMÉŸë¥UR.©¹„©•Þl–§éd·nÏqwͯëP½Š´3îei{ô‡Ñ1î%Ó¤Å-AŠëÇse©lkT‚^u+]™åލWYÄ¥UPÕ:K¥gJ­Ýb;I„³¹=tê‘‚³q¡¡†¼ÞRÕá¶¥Õi¤ìçU-°œ8²Eg¡õã0í4äÆ*-Q¶“TR v-õ§ÒfÝ‘Øö ¿ß÷ôà,‘j·3õ\¶1^»šÒTì© ž•ŠQ+õ‚1!ƒ¡27$k4üD]—q`Wk|ßœpIeì@L7ÔÓ¼,te®†SœYèU\Lû¼¦jjª…¢³ÒÆ#‘f«(ʇf}™Ly¾[JìÍYUfÉÜÆA}¤úrɨô #§Zæ¥>0à*%YÛi·ZUPOISU­ªÀirpwÚ¹Ó¤Ó=0mç÷Æh¶ˆ|±›uuçT_nVáíÚäJî^òÚi_ãe5¢eÍêJ›>ß>wV&ióJE]Jq®‘Âì´ [®c”û¢ç'“ÞÔÚš¶SÚÛvÍë6tŸ;W YSp*Ýù|®J©B©Ô®ê~:4R±²—j {ZôIlÂlœ[ V:•‚iËðº}­Fh]7ÞØâbµÛŠ'É œYÆ”Õf3©¹~rr'ãmç¼Ùša"ž:¥Ãb¹ 3B´¥,ÎÍñJ ñ`¢YБ&–ìÛ–¢‰ë]5lb?^ÕúŠá§¶âô‹QQ¯´•œŠéô:¡L˃_-)ÕLÛÌùűU?®iÈ›»Ù„ï gѪ8€ö¡[Äš‡ÝfQë˵âÍ*ŠY‚ç{êRj:¶ÓÙõº¥’VèÞìVyÃ^Ó’ê·ä†f¡Q;ë\Ü«­jÓ Á7W¼C©¼+ȕΪ]ÓŽ9Z8‰ jx£ù³R—¬´M!5 Åž0*X’ëèüI“¢YåçÆ6^XœÙšO‰PŸÕ¦JX‡qkž zs¾+ëñ! ^äú®Z©Ì£ÎÖ)™íö>Æžèðe6ǪÚu7XÄ®›n=aWçÒ³aúÃò°9šád;÷«â±Žó,i¶ƒÒ:Ý{¯S—¤cycˆt³rš>x~Š¿"Â>j¶MÓ+@CQç&ÁN Uwžlú´#:õ…µä¦’ükmÇÕåYµ³F·(²´€E\ŒÂi浈Q7´n°Öö$õÑd*pÖjaìôÔùzÈ7üU‰‰‚¾hÙÉŠøµqRŠ £:][á¹ «ÅT‹‹5¾RâçÝrWì¦m³·—XˆÌçâ…,¬Ðl~<»Õ— g¸‘fЉØÑ¶FÆ–$¥µÑ씣F(ƒŸÁV¯ ¡U‹ˆ}ïlÖ‡us°(s<™â–шjà‘w'•áaëîë©Þ[U«ÓB³f‹†²ˆ88o‚*8…IJ‡)ºÕfq¥¦ÎVCíyÛíõZ]žÃÖ¦ÚmvkµÉ^æñ¹Ú9í=˜šÚØYfÝvkÞß ó0Ô)=Éçs¶:¹êÔhÍw¸0)hp©ÓZ&Õêf3Ür“…ËÒ2Õq WökÁ®Ú ÇNÑ9«â2m·WŹܪá)-ac;ÉÜöÙÄfy~ɼY*œNĪd¨¼9¬‹œ8<Žˆ—MW5£·ü¥[؈ÓΤº…ÞZr±Ø?—´ ÀLÍ,iazç4Ë4 i'¤êª»NFQb.Z•·YÙ´¿÷[/œZýá2˜Oâéx—µåj;™ªµR*Ú›éõêÒº:ˆ¼ 6 ¶oÈ‘ ÅyE_ñdL¼…Î9%8k>ã§»ª‰önQ›ÏMqÝY=sU/á~OÓ¶­’Ñ®kk*™Óe$om³3±¬>ˆª ³„¦bºo‹.8Œ–ç¶ñ|fÍ´¤¸™GÂX鈑ïšñb×/ë[{Pª,SœWŽeäJ•,ìÌv’]=‡u\jIÝÉv5ä¦Ëys”eýNÖ/Bá4]›õ‘³ö³”['ê5£ºˆñFî–Ëf£ðìc>­ÀCf<÷sÕÛ.ÇûÆÔµõ —5£é‰L¿q´Å]{–¦Í+ñÆîµµ6oȧÉ";÷¶]i•ª Ò’²"ü¶¼. ‰Ú›µ§‰ÔÝ*´7YV¸EÀ\i1·›úÖ´ëíX8šüq}öJìëõQÃå;dê”K=£ Ñ•hª* ¢Êa55âê±½;½ålaŸ›œ0ŽÊü4šOóY³ßXHMÓªVzš¥'žQÖÖ%y6å-1-J&?œÍ$vÔ™\8&E'Lçíá`ëéåF'4ÍÕKÓÆô¬gË]:=Ž%i¦y8ªª1.ì–aCðL½“´)€ðqÅs"SOF'iõûàYæ8ÙÒ…„ nTIÖéÑíã®æJ¡sÛ2«me}CY5g¼é—«g­Òz…ÅÉçóz£˜–²amh+žà¸¢ï§ ®¾ô‰´eͬt±;VoX3ÑX{[ÔU1 tZËÁXKåF/(…U·,´Êh¬Z‹w–Ea)ƒ>P7Ó­²¼šïq¨ÖÚ-ë´ÒöÇÒ'ÓÓ–”O›ÎÑVh!ßc/–´Zθ0Öh² ˆÍe£†šìTyÄ÷æ“^FR¯lŒ'tt®ôÊUck¥bµ/OF­öt¸†º'Æýå€åc=ëíîvcmfVùX«WæÜ)$•QT«ŽO›Š®àî dZ3±Úë‡YÖâNRÑb“ÍÐ’†ÝBÙì.5Ýš6ÂòØ9$ƒJVmÅ'lEb²r粂¤×î+Ù8¸ t¦ÑÓ´h²úÒ9ú+;BÝX:;ª³ÆÀ+¡“&<˼xLËI!èx±6ŒLëª'¡Ó¨Ju3èîJ©Vµ~ÑîÖ[š†âÞbµô`OÆš±LÕñ’Vµ²[;ÅA»Z45e• Eµ)Pd&@÷I±¶ŸÊî~äÎT¹Ýq¦•5²Û¦<ÓÉl;¦…zßÎôƒ¬+^2Ú´)ö‡öaÅT=Ђ<5®r³eWP|©¼ß•&« À¾hÛŠ‹@Þ´ðŠo׫õDÜV:þt%­¬¬¤)õ¸äÓÙ&pÛ‰³ôüZÏ*õ"‰S 'Umúîp¢|Sd¹Ämj U{ý‰!g£tfú¸h6Z™Þ9´çÒ¡´ÂËi‹%ônn ÙD+Î(^Ë…)Sá”vÜq±Ð0j‰ ~È,®ïÌɾݒF²˜œ5UòöÇd©N¦ÉØû¼a¤BÒ(凙 „Qw"¬{ZãÔWÖûƒ—ì›Z§WÌä¸3Àµ…¼ØUÊ­¾[£ý-moÑ>ÔN½8;ô ('€^k¼LzzÈkDí)ÅZJÃyÔÝû´[X$(ƨ^é¯í©µÉè¨Õ µhVkeCYµP©*µþIYcÓ¨G¾uÁá÷¶Âf^“W P´ªçhfsw®ÃY-ë—¢Àç Ó;­í´Óœ#±6’c$v‡ê:Pë…LlÕÛQ{7É2nSWf]†ì»Ë=¹X€©nX{7ìÍW ‹“Ú#´ÓV°ýºÎvnò³Z]Í^­v^NЏ`)[ßîO¦®¸Î ½ùttüÓ ŸÒI:XìúM;Ø.–>^¯Úª$•’AñØ™ícÓñ†–¬t¥ÔžÛD6_–û&笧³¦Z‰ ÑI”y™OCuæn¼Ú¨ÏíZVòVgRtÔ¾e(á îÐN‘ª#­¢:XUé²»f‹ù¸=¡Ü®"ׇËa+14m$êi¼‘’dè·5],ÆÄé‚Ĭ·=±œö|ëèv6û–~l´¥eÐÙ¬iq<`›zAÁ«º ÓZÒ¯”å¡ÈP’ˆ]yÒ—bs ¢žå -âÐ ë×WUg”6ÚО¶âóüìØ¨vLYb’šÚ/—‹Üà4©Ã>-:µ‘Öí¥Ñ:Þî ¦^=”Œ£‹f¸24íí‚NOçST.´¦rìÔE ¾Rq§ã¸Tov³dÖµÄí›{F<˜­–UsjVR«·N$mέVVhŠg,ÅìÛ„ê<®öVš\Þ[¡ßrû,¶ÅcZÚN¸&ž8}eÖ41™a}žÆiÚ­µ„“g•k+³4^Ù $„ à.7R©pH—ýÖÎÔV'²®t6™;ˆÛ†¡vÉ«–8ÉïÉÚtb¹(q¦…x¥Ã°ÖZDrL’cg;—·íÒgAMTa¯—UŨÐr#¬ÆãžÖó™ß‹›Ï9nÑâÃõ¡¥ÖÖg0@Û;­Ð,!_’úg­W6¥¸–ÄÕ¢¢U«v·rõDÎØï9ßÇÆØGE÷T;cÊ-;[Œ¶Û©®°Þ€+#ÎW«–-Åæ¹V[Τ}V)îŽÍicÞÜ&¨i/’ÕL‡ÓcZ›5;y:*R4\W@)å’[îE”îÙç°ÆÍyxJqeyPs7¤ÿÕŒš¾9t¸N ´²u?îƒë)ÌÕmp²v±›…óWhŒ‰Ó¨†Ê€x{<œ¤KëŠSÀ™ìÃ>+Év03ûsí,&ëá$Ù 'Ízp(ê­*Ø«ÙÈœS^§RÜÛ–V"Þ –Q(ôº§µê‡€ˆµRéTtäq·—UzlOÎÝr©ßðº»òrTõ&K'u;)O[Í>VÛ\’¡P=×Yv]°Ž…¦nmãUž&Rí°+®×|¶(/“¸l•ã6=÷½}2tŒcÛ;b39áöhZ¦^mǭض7]iëöͱ©5Ýõ¸²Tìjˆí¡­9)Œ¢‚Òç­òyT·Ìis*Þ:Œôñë½ÞÀ,O”>`|ƒ£é<^­5»ŠÓÚÁJ"­Ó—‡4Ìz­øÕæšLTuÙPÒ±(wûmcG6 Â­ê(ݘþ¡Ð­ÝxØ6ÚåÙÀk7䯬×wÕ D†è Áœ÷ðøó£þ •‚{5"g󾄻VÍÌÂfBŽxÔÝY ¨${Á8_OcTv´)þ‰i¿°lÇé|}Üdm»wH;%ujaeJý°Â^Û±’N5,mšçÕÆœ:¥ªKÐ粉\¯7hÇÜŽ­<Ùœî©ç²»éžk궃ëEÕvÌÒQÔÂùf?ßúËIÒ&J—–ÎÞP=]µ€f§Êºò“ýfâ ér²nÕb·¿tt¿Ü5õÈUìÑYEk!Ú ‹È;ï6¸9Ù;ÓÄÈ:‘wú˜t]d—7Üè8jöìð\s6o‡ÑÌ_W$ikM@b…ÞJ ^h4G¥T¨œH½ât=LY{‡±d„«Í"± m+žƒ q‹uD¢lGÒ¨ÈoOýE·3õ¥ú±Ñ4äRÍÞÌשw†;\Ϧ±v,Ÿï×ËÙÜÒçhòYÓÕFö‡u ·˜u}ðÓ }ã-:øÔ ²™A†#þœ¤Óå¬ß<‰zùÔ KÑJUÇ£¿Áº3Û'Ñ!ˆœñªŸ5ægÃ[„\» "ûØ8÷†0§z»pÃiªî¸×Y{àúÛnigÎm‰îÓ0ØEA7Û§á^˜fÄó)±÷ ÊÏãÆ®˜¤ÕºW'«”lÆÍAcPÁ‡¨£m?ž,Ç%pësÒo×™!T\q蜥}”諲ØÂq›ïµ¶œÔ.vc"ÙñòT«‹ËÙ•u«ÝOõcZ=¤=^›õOjy°Pu²?Ïô€‚V:Fç츚‹IxàÛaoWmNܧÓãJ§¸"Wá:kX˜”χæÉª·:Ùl[ÉÊíu¹Í¾Ø¥¯ÁÆêÒü4ܬJÅhj•¬4]6’â{o£pDœWûÁJVùNklõÊëñx²mZ»•2ü’´U¬írì—B´Æ&hÚj«åuÃBmC¬ 5iQó`Sn¹]§8Îü ¤´ö}"àCk%ަy´R±‚hNꂲÆÙþ<8/fæ|_æí©=-Õk_vfýcÚÝ;F®¹dê%xAÊhÂ{ÁJŒºÁ|??÷J’kæi5öfÊb;ÉŒÃüÔš;ÈWÃÕŽèõöbÝÀF·šÒl~ÌŠÏZ\ZÝó«D9S@"ÉtÞò£j\í¤½êb«»©5ΔÂ:› ËE¬î{¥ÂÜáŽât¥3J&K¯.n[UnÜCµ«§V²,§ýí,˜.«».îŽNµf*Ñö¡ÚÒŠí$¨F¨Ì‡jOUÅYÚ,”³ênŒm[¤S­eÏôw8­ùY&ÓÄ^CÚFËxEǸKõóx¹Ý”‰DÆ`;b«~0vü}»oøípÜ7Gõ!Ø¡~»®Ì—m½˜pëmH6vLÛIÿ|õm«ižÝºÔ¯»ý±7<°¾³;ôÙ÷™÷ã…Ü’jÑyÓ0ÔŠqÒ©Ö;—¼~«<Š>Ù`Ú©|à »ÌØî—$›o£=‰· ‹Òr0=t`¶'ea)®Ê…1E Š{ûx*õ×]³¯o¥â.¨Õøls`¸ƺrœ”gÇ>E;£c£a)9ôªc:ëh8LœI æ$:©®§Š•–dÕGêÔJÇn¢û‡£vÈd3K·£Qd f(mNcß+—K¥±¾å¶>Ô¨—«3]ùx?OJZEŒUWŸîg ìv›à¦[ #§2æ6¡µv¡5—ÂÂ`Y&½Þ‹t]ÄÅ¢mx:ÁÕƒ9*.Gàº*[©Zkd>)Õåsˆ²fë Ç>7˜öúMo ÷jakÆz¯}nËÚL¦ÎšHÅ}«3_/ýl÷Ï>ÚíœQdUT?%²T!ÓS¢»™kÀgåɨ±ñ«4”TKêd>‹« ZõªH‹Ý±^îu•¶7òj§\8–z|a/õè©HWN¡ëïdFAˆpËh(«'³ÕÔKïî n9X¶Yg5ºfyc¯¤©›LG+—¥1>d1Hv!YNk¶83$=œígí…’Õj½J =Ûmz¥rŒ;#§çŠhÄrô‡›¨3“¤t½h¥"N§g´[ϱLšG‚7õ¤Õè*Óc±?r7¾Ö¤¥F7\O§óêÜÔä Þ¨³jFÉyWQKÞ&ž‘}- .éÂbo’ÈžPM{riŸ:¼ã-'ÖÞ'ínq¬ƒÂé µ®w“Vif5Q½­Zá>ѳ±9EÝYƒ¤§˜_̇tm%åcm¾=ÆÃг­’¢>ëf©9ñGü†öF[ ƒëµ‘^j6â²T³Z¨8Cþù8ÚZ|(xÛl:ÐÚÝÖ†÷»jÕ6üóÖ7ÜZŸž;=qËÇ›¦odÍÙÔá¨:YµÏQ7éîÔ! bu’ìÆÙl׿FcŠI?›’ÅzÞÑvÝm£½ÝÅ,MÕ¶Øíœ3UÆYRk5¢H6«AÆuž8SϬ$ËÖ¼»/yY¦ôÙ¨€Ç:éÕgÓš†ÖµÝ@oœÛ?1w}©ëqul)íE#È!Ù*sÎ? ›aZ8ïÐ Ø‘g³È&²E¢É¼^:µ÷‹`7LãQY#³>"x’®,·ILÏž žm»'·™ËÔ²{%fl§Œ5ГzI™U’óäœl.{‰ïîÛdw*ãž›µ–q2³V§²llŠëSÛŒö0Ie`›àerõyÒMÌ©XŒh_"ƸánNÃSymůjxÖ¦·ñ׃¹3Ê…ßë¸,Mcm—¥'÷äû#]ñJͬ.gtϹëC2fg*Ÿ\ì-P¤fûb½Z¨µƒÝÂÚÎш7Åmlµ#ÉÅN3íGþv…þ>›éö¹´wV¥ù“>G# d˜ôÒKJ1*:‚mÏÎvíHÑî66Áøä<Á®™"&JâxŠIñÒ4µyXìJß?t*§ý~¸çŽýô¼Á³ %C»7ö¾T;Œ:kÌg¢ìÓá)‰Ö…¨½œË•jk=Ýö<ÝEÍʾ¶ŸFÕÅp±˜$ƒêÞM‰ÄÅ­žZ7³)ìÕx685Ù¹§ë`+›sÕ˜®ªž2®¡^e2 ;Τ¼‰ªcmÌ»G7jÆrw¼‰K­Î9&Üy?PK€€Õ®|:Ñ¿;RÕ z™eö2Ûöݽ1îºÛr0<î¶êë­½²qÐʨZ³íqU‰öj nÒC³—qú¨7;ë–ÝŽP+E¦ÞÊÍEÃð‹¶SßK}Ý7›N£ þ`gt¶-A ×HÀ4­á 7ɤ´=ážÌÕ‡ûå YâÏçR .bטíëþn[ê¦Ê·JÞNKs‹$³ºqQmd33Ï ãyìöÒQ?.vÊÿTà$¾pòVZCÙ”ØÆ°ãjmvëõº¾=6Háãf»ƽÙx¸¶¿‘"}²ï ëæ‰VíEÀÛêpÔämírýr«9ªv\ÅÙ·7¦Úm¥úanċӚ}íxRkK¸­æ‰Ë}íᕆªtºžÒ8ÄÅãñöTž¬§qS.Ï˱÷l;[•†A÷P²•Á¾Œê{êÕ…:óÝÁhTq×¼\šŠ‰ãy Õ­•.¬ÜÖa ´'Ù©Õ‘¸yäáF£3]ìϼX)ŽHÍ£Õ¾¦”’ ®ÑÒ^GR8A›ì›|oØÊÅÞ¦)졢׳e¯C'´>ñÜNÉÕÀ÷íÃn´‡=h5²ýÌUc>Ëv[ë,¶4[j·ªr’¦BÉÕ+ã8®, |ŸL”y¹/w’Å cÍÜ œ—……qèé+»ã-ê:â¨>ÕÜpR«´½u+Ø’ÂVJ^‹´WÑ-]ËõÊö´]è#b¸Ã©Ùk¸œiìͨ!Á@c:uÎȳÔs8,‡¢ ;=°®ºQX–^›&Ö¦Úĉ?ê­ÁyØ›`iëê4ëüy²6[œ93F¼˜TBÁ‹vc¡é’”©ÑmÖ)x5‘ë¹-wxÖùyÊGîh 7ScuÆu©c?'^Û«ùÕ)â¨a v-u«û-[Òš¥ÚV§-͵ÃyË4ö5’Ù³@wÓA½2Œ]øÖð¼-އ+'Twýš¨kc´9|U[í$kÜ“LÞ©LlÛáTzœ×•YôB2®­²¤BœYªÔ«j'hÕÊC5îìí¶–•ÕÅøqÜ»\g™mM'hÓRÝžWúõ[tÎÕÎ-ãº/ŒýÝÆ¯[ãC%šòê8ÉæŒÛ–TЉ¤Í¼òÆ;!W> §ƒ‘×T‡Þ~ÝT•rѯƇEÅ•ÆmY¯J^èÔ£NwÑd0‡Þâ<Ã]3LÜóÐõõÀã»öaåî¹ÔËÆqÛ7Ôj4iíe 0 ìTŽEmÅÓEÐËÞQØÍO'ïŽÚ%¥;>¤ áÜŽ:ë“•ÕÇJÕê7“d™l¦&ܺ©뛡UG§ŠJWÝÝÊ6Æ>²Ke@Q÷ Ô$ËÃá¡w4é®P8ôµêÌò+V{8Ü{ž 5X`©¸CÅ¢âýƒû+þßÿƒÿ]Ü-’ÄŽ‚ë¥å»»Þ"Ysîò¿½\ˆ2å»T€*»üvàÅÖbgÿn…A`[I=Y‡è¸H‘ýßøß8x|Ë=!¬<óK_¨ü, ,q÷Dž)ô ~–y$ˆÔž%E–ä/Ò³Èj±"ú ·dé‹ü,ÁóÜ~¦ŠDÅ/èYàyUXËTfíŠÄˬDÉ_&=óùËà!IÆP@žªˆP€®5à ´þ¾˜ô®žeÖUúLeITX{&„Cʳċ‚âY9ëá¥)hA`OôYBŠB¸' JdèáŸÐºx%Ç.ãƒÂ/ç“È^Æž!”]¢g‘ý€^`x;" <ó,SLx OˆÐ-!F$ð“Ÿ%6â/@Üüwæ¶»¬iÄ(ÎøÚÏúŒ|TæÉáYF@ äËkŸ\çäe^fá2G—)²rÖ _”gMRV§TИiŠYyé׉VžI¢$•DIá0ì$!„ØÔ*¼Dc¨+9å[~|º2$ÿ…çxa­ˆ”¿áà§WžæÊZÅ ’s {æ/²7Á˜ž*7Òòô*.â3a’™?‰xø ŽàÕTÆ9³ÉŠL9ΜÙä+uíY‡òæ€ôWAç¼ì+‚lÒ Â¬"ˆ³/û±÷\f=rx€—ói‘cðXί`óKõ§—úçßr5µ»¨(ü'™êÇq}ÿ÷ÿÂK¼¤¿³‹§ð²›d¿£Ëetðíßí£„Ëåßã$ =û÷ ìµø¢û®×ðhIÎ }Ðtn¿w¡¿HÜ0xºÜŠÿñ[<¨–.=º‰2!ojÓ±«‹C»‹ ä¢Kµ»"¨NÙ–š}tó¦A‘‚Ö¤¼Šò·[•ëû rÿñÛÂOY|ÓéË{¯W¾Ø‹¨-–®$ù ï‹DŠé[ÿâ$Ü啨‘ ü+9YÁS>òßÿË‘Øßßó¢W¢þÆ…ŽÛI®ø‹¶ˆ¿»Eþ­Et3¼ûîÿð̬mwµfM‚Båy-gÿø±†K¦PãRw™¬Y Œy*0–:åU“…WbñG¦t÷ûé% Ê@–þ„éÅ’BŸ>š`Ð÷ü“ôpB°Äþ~bŠ¡Mòô˜m¾Õ&(*t"/Ö8}R~®qQ‘yñ³ÆñyØ8Ÿÿû°ñ¿.{ €E~€=¡ºòg²ç‡Ÿ ¦÷û:²üö_÷O €Ýž„ßð¶@yЕ«ëÕ8p ã!¶£!L‘Ý Æ±ýv{-‚Ø £-@ÒE¹§ÿÃ0¢” _À¢~y»B26”Áâ( ¼‚Ä¿AP™û*-2¸FÀ¥ÈCïNø«»p 7‰(ËHz#Ï7åUþ@Zá–øXyæÿ~BV¡ÅÇüÎRƒ,ìŸç÷‡ãçŸr (° àO "–±r€›xða¨Sã9Bà‹øL›IsH#J2A_D / øs€“E… L$Eb° æfóKŽ<¡>' ʀñ (ˆ+Sà]¬•¨ðŠÈ¶`Ìð ç˜ ;Y ƒƒ >d1Ge 2l%2Ùdð8$2T¦$+a=F"ý’ãj J賂À ;àù ŠIádÕF‘·àI 0âQþbÇ€ô0C³€£ R4EàtV;m0±$HˆA2¬P"å°,ÉmAE@ÛC¸ $^ -)<Р-¨xÇÄžV&¯}ørÓ—e@º”9o ¸¹ï*Æ÷…_€¾è:nà“/7#g®ëøX@N é+iEñË m¾ÎfNãuº¸‘"O˜'ðÌGƒ™G‘áµÐ*ó`âAá% ö< &c§®·%"`ݹx[HÁ€ÿEzãlñ¢D€ó^œ-žM t Pè™,žo²x†ïþˆPÏO9[ëÒ#W ‘oºZ¹‡DÛãxñ"fVréö&fîä²DÄAb=¼g¨V{ÀM’(I’ó‘–ýí%¿ãÕžû~F½iQü)Í-0—ò?K-ÿYjùÏRË–ZþšK- ¢¤?s©å#½(ÿ'‚ôŸÒ"HÿêpŠò—  €dñ˜ðÏ‹ }¶!b0¶€Ð.ë"HµÄ¤^  Í0”#Jðß.È™q(]aµzAÛoÅp!H¬ø˜‘!‚Ñ€»ÿ?è>Z'çç±óøHåïZ„6»{%ªb™Ü†TP¾ªõICƒ6e¤ªrå®!I¡Ÿ6ô80£‰%M¹_™ñÿ¬!òØA¨ˆeM½kHfú´¡ÇtÖy­\º£À¨OiD[×+ºv¿.JdéÓ†ûýÐ2û´¡ÇÄ.ë%JË÷5ò)±åÇÄ~?ýÓÏúN¦SôIØ”5ô˜Ø µ ý|xôÖ ÉÊ•AÀ¯àù«Ö™ž`ãµô{•%Ÿ) }Y>Sà´|ÜÆò+¯þ"Ñ“úéžÖOoÄ~£õ;R ,RIßëç·òQÐÌâ+ª ?Ý¿ŠÏؘ>, •yE¿•`̧ =,MׄҨó ú¼¡ÇT)UMºÓô"ùTÒÇZLu¾Bï4=@éOzLg]Õ©~×#,ÓO5½ò˜Ø ŸACßizÂÖ>iè“‘ÿ»mH’زß' }`24tô¦Ïíõ' }@lY+w žÏ{ô˜Ø­"kê]CTþŒFÿgëÌÔß™ òÉJkè1±Ë•RI¡÷&ƒÿŒFÿ˜Ø_Ëë¿Z–ÞlÆe‘õ¢Éò°"a1Ó«é¸Üüu&|b:ø_Wgú^P&#òƒd~—Æ b»Ç>t>XÁŠÀv7}Ã~¸ÿìﯬ`EbÛä>^?j”ÿû·ñŽØ‡Ó›‹†x)‡$—5p3YˆšÞ­» EÉwX]Wf$`b…áö›µžïá]½;òn§›/bÐù½{ȺªÜPçX{™µ[uíü?–\XÄNþ¥ím"‹QÈ/ñrñ„d ô7Ïâ@Ì´P_÷¶Éôh«0•Ëœä+¿$_ñÊ—j ¶Âà4Ó 77?X¸ùªÖWM|ÕþýÛ¿Cƒ¼î± üX»jù¿;ÂK„²Rþï~ðäc' }€aK˜ýÝc†OL=˱Rb÷†^FŸ4óדÿ»S‹‚ò± CÂÞüW´ùá-!?$:ôCÑù6#}›éåYˆÂ ¿Àõ·müAlO?d{ññîú÷Sû)Û‹ôGàßËŸ Ð’Èþî‚ýØÁ†v>çû»ƒoÒgr(=¶®ïµ¥Ÿ\$=¦ò?—ó•8_BßÅùŸðå?AÝß¼ýûù^ùˆïÁ»ûC}üA¾GDíѱÀåú"?ÊõÄÿ©\ù¹þÛœôýPI Hn¡’À¶ðø*!$3¨øÂÚâ3ÐúÂ÷Txæp³ÈUvÞî~ ;Ÿô+ïÛwÈVs gXÂèoïÚýú­_õé®Ãß-mŒÔpÂ÷ ÛǼ$?>È@ û»×Oüz$?>½@0û»IÇLoÊÿÝÁ³Cyô5Iß×û ”?(®è*®÷0qýv¤àW \K…²Àw²¬,,²}¿qÑ?~ÜäoŽè|5àŸïåÂ{ûίºóUgo„ñÃȯH¥Çý>ü‡%ñãдóX˜tÌþîOé}FDD#sE¹³}ÒgÂôA,<I¹“Ié“%žvw¿‡$8}ØÌcX *ìïÞ‹Ÿ…!¿Uߊä=3þÂZ8qølOé÷/“³–Þ­“YóUÒξի`àÁ?3v‚ØöIEylM¹ ¤l©V!¯>ä˽πôGÏßµ}÷Úï7ëøã ë à½"¡Ÿ.H<¶¦•2û»WŸ´‚Ó2ew"‡>6‚ýAžÚOJ\~÷‘¸K(û^â$myb|þ£÷s6ýˆQåëÎ4tnË08JäbÚ2æŠÏ¢˜Ÿ\pîï:÷wÁD²™T "ýË 2Äò"¤°¸e’ù ¡øî-ç—¡Þ³Øéoðð«E½gÛ‡;̱ð.FÿL=‘î×»oþ@Žþ®0~g®a|–­BÌ]Ò·(>¯¼žfgúTî~‰âãgB‘ÀËŸäÊøî(>Û.S?Žâ“›üŸËÅ=:ŸrðWüý÷ÿ ?I<ôCù~Ðõ¼ôm^~/†ä²4÷mþ¦îø9û|³©ìÑ1¿|ýWì3¦’œë‹ ÿ}y¼ø,#¸ù‰Ê3èGýív³Åý&¹·½·[êþ€q_öÅ<·òíðÜ:î;}îöÿÜl úµßlRy<ð_ŒÐü„?Ús·Kç¹ðÑÈÑÙý‰)ÿ`¡þnÿv}ÿ×ðÁJø#Rü"*çE,ÉeÛ=D‘ n#†Àb²ÍAë l>yYÖžÁ™ÎOb1rìô*_ö4ÜÞÍuOÙ&í×ý‡ÿ]\ÚNœÿŠÃ¥»ƒÿ~[{ytí4¡¹`Þ-VvnK—t¿qf-í襔äÿ^J¯¶<77:˜5óz‹w+^/–a Vé¦ü†Û æYôìîT(³Ç’ˆaˆ`^nodùP—„îž8DþÉ_d6t:ÿ?†<×aºŠrcºðssóòÀ2´[öÄá2™»ÓÍMöÈ“i†Ð$:Ø×vîÒŽ_JÞê²â»Ê¯·R7€Q?½` ‚¥÷7_7ðXyÚ”Ðûâ,Çd¯bÊzÿòšËÕýXv! ¥øv4—Ù|O—ë¶‹“»uÏöòÐ^îÆÁb÷´òCsá_»ŠßÝëröªÂ= ·½ÈæE2´“Ä V I¶¨xÊXE@‘»r&Ï:}¹Ê®W1ã§`7Å›Ëìzùž‚#äLkow_Ý0$ÛÐ 5nJš—\[ÍYó*8ïå%/ßÚÉb¹Hùè^.€^¶oüw´t~hú+ ´¬ß§aäq¬|a†˜ªWŒ·—ÖïLI,’ÿënADŠñqU8m}Ü×w•áò¶";‘T\'Éî÷bqwˆüç0ZÁ“ð¿­Ëj‡‰ëûuÖò \¿¶ä&¾ýó]~¾ô¸xíòkçmDÿ]|r~µº(É«˜½Î¾¿0màŒ+çІ‡Ý6\Úׇ^h¶{9)•›"‰k…‹6Çb‰"¿ð…p­ë‚+Ê.¥üˆ¨B$¸|F” IàʬTæÙ¡¨›R‰€—¡VÆ‹2+DŒ þB¥gY¢FЦ OƒVÁø ‘ž…+˜µ)S¶G¤y)_@”X c™¬ ‹XPäÛ2‘µATfmÒ›Þ_Æræ^ýú7¯H¼œ={uÄÞ<¤9§r=/‹ X‰7F²I ·®ÿ@И!‰í/ èj‘_®È3å%F8vV¬1ÊÐâ£)eô2EX€‘òì }Á‹<£ãµ”² <\+èöºÌ1+GeHîvXW”°pq)O§ÏXyEÎËDÚ†vØo,aEø¢°ƒUD¡´ÆJ‰€¥/ Ëé ËÍ‹ØV&"f"oË0Ëô Èy“8?n(*ù$ßànX7³v™¨kâªû‰úÖ„ÜôóªßÈ!Ê¢ð·—i`, 0K‚²î_.¸BŒùs¥0aôg'%ºb~Ífø6¯ ˆ‚²9ÁËÀó¬ŒA—súK@v‰œ„LÀ…þ,ãb),!@e%/{%6/"‰Š·eÀvéÚæ¥ô¶ë—‘0’¿fÈP¾"Þ#ÖØ)6ž\Y[ÀDˆòFò  ˆ±ŸÈvÿ^â+¯Ü¬°°oNÆ'Ea§ÝdÐü³d(¿/z‚žDò…Á/l6;HÂH¼‚¿È,• áaP.l˪ |!€c9¯ Zšýfš ËJÊjQ¶ÛF¤ì„9»;§Èóy©tSX¾-&ÊkÝ÷Cùªà¡b~X/ñâGz)þNˆ ÀW¹?eAyÆyÛ‹ô¦an®aŽž)‘»ç3 E`?„ü°$üžE(geÄ@d‡96u º¨Di®^D€éäQQùa=Àã>×W L¢Â)ìð8ËòVT¾)dO("x<_àþêV.òd¯«à弟AI–¶Vþþ‰Þº9Ù„Á0þíÉÆëï Šý]u‹@M(òK9›0ñ¿ƒ–·…Àœ÷¥€LìÈ\™ü.¾”-àDÑ"»{+½ßj~•§‚ lŸãk¬N$0äf‡-ŸGöXg*) ð1¿…CƒðÍ÷OòÍÆïüìÀEYH0ì|5Ë)ÁS*°L­Ûbv"™‘åûò·êßeSx(0}¼L~d’`Úÿ•³óBÖÕ¤Ã#"(lç{þÄ Q˜Pf,ç,ž¥d‘1x*ù|a– Qf …¾¾`!U,Cט/ƒ/sGYfEX2+" `8ï Av ü/ºT€™e)Ep¯±p[ööPž,æâ‰Q–V%ïúµ÷}¿tð2ª2˲2$ ø p0w“(ÌÏa9­Xr¥7Ê>$÷Mö™`ñ›ÎE~~éo·‹Ü«ÇÆõ»wÚ\Ù“Ûøß7Wïáog ÿ…³ o}yYÇÿz·ù';Ð^Öìe"ðwÆ÷m]¶œ²›å¦-ü¶.ûÎ?Ù¢~Ó–ø¶.›Ï?Ù§~ÓùV[ôƒ-½/›ÕoÚ¢Ÿ¶õùV»·fÄ{²?Þ-ñ£ê*ç¤<°)äy¦Ø¶–é"µŠ„ß~°ôB´>ÿ’Š%qM™«“—ºO×ÇA­äèÅ:e.ßé‚_/Y%)—zV0eKðru­v'Æ7ç…>cåo÷Dú™¿½)íçO¡üA"'~‹@äÄÏÙñ‡DNú–*ø‘“¾¥ ~@ä¤ÏUÁ÷ŠœDþ‘Ë }a e–‹™5vÒýEJ.²p½¸Š‚ÿ&†/Bø&uÖÜ=), Û¤]%êé‘HIô{DJBw–±¸ú9TtqWXÂeè(yä¨HbyÙJ ÓÌG•©,~aùç˜ãz[†Y’Aø¡¼€ Â2ƒQ^¹€ ðXnA–3S¡©û¸/¾eÁö†ÛBx DäÁ_*ˆ`6}¸SoËÞºö]fiðÀU¿ôýÚ p4ŒO‘ñMßÁOFäÚÝëï.òÃèy²<Ï—ñ<Á¤,Pg*÷•lùO" A¼+¾c ÂKw,ñC|@YFlƒÀV}€Ty®=†…È› D”xÄ–iTÈ}›×²ÜËaMÞøQðr\Œ€˜- 1>`‰%òFKƒ_›«|>d‘(ï.˜e"lÇVŸ€ô(—ÆRàOa–PD’X¦¹·BxD€Wæ}¿Vr1Ê3S¾•½=ôÚwAà ‘.}¿vƒñ0?#Òkß%*J9~~zãýÅ ðàsòK£È’ ˆyz£û‰ÁmºpÇkñ=<2¶NÆüí3œoßÿ þøhm ޝKdïÜ+Ê’ý!ì‹"D"³¼±y&ÿŠ—"Ý–±çX’Uæ0fËH¹g’ºvJ–URȽ”g,€¿2’/žæsÈ\¢€ _ ;½¥\Üö\7+2[wD¹—MXöM,çyÞ@Oƒ>ÍʶDÝ;Q¢$×(/Ø:Á³$ÌXܾ=å_ú~}5ë-‹é)òÕ©XòMKW3Á–ïÄ|A(_Ÿw‹HfyˆsJ÷å÷ ò]N•$À ü L{µ(/Þ;f*ê±ûÎòçò,«çÅ}ǘø±t,ýáå@•,arã½ç %/á N6¹ìÿER¾¥J¹,(„±eGO®ë ²r¹-½­/áúÝ€og”„)¸“‚û^<îé3Û5Ó¦o?™ Ë[å´üØ)ké³þÁœ²Çoä÷feèï÷Uù)‰ýú l uè[‹ˆŸeÕ¼H9; Ó˜K0ÛHÈ""û€•t \1EÊ%Wa°Á,%*¨nJ@Ï~y)ºaY,‰Ò?Âo­®}2B™É:æåËÉÅå‚0f1(Až'©ETÂ/£ –Xk‰ìã_@ ÈýHåéÛÓlóëuhT˜ d¹Ú…–¯“€ñÍ$\rqßOBžãõuþFù Íåׄ¢ ú€PlêDŠnéôôRv7‡ÊŸÀ­¿ l™? 9»bŒ.;§ öVÎÅM¤9ŒfVHd øE‰…i™c[<È5Q7[¶º&¹?õ/ŸÈ«PJù(Á2bt—8á¾I€Ÿî‡'€=å^‡~?Pá/5Ÿ˜h¿Pü‰©¼yúC­óÓÂô§ðÉ_hÿ,™¼?ëø¿X&ÉŸ |~a>)x»<Î7ÑgQž¹ a¶vDÄËÀ‘œ/ lÌçà‹¬bLï‡Iÿªó Ãç^¸2)Ÿ'ο±€Þ´ÎupsóoF~7Nå¯5lß#¢ fzŒ}ãE¤ÇrõËäòY¤äq– Ÿ%ôÏ?K‚•›ù$×Ï5Póí@eá'ðÝ?ɲC…Ò5ÊŶaã<°ó6bò¦¬_F@VànÆ~?Ð?sÿ’3Jÿª¾É=£ôO`Ý_Q¹lã‚"²ýÈ‹)±ªHâ3û~±r°ÝÒâ Bf_RðåËHyÉí)ÿ,ûö4ƒÃ{nïG={A¦&õFO/%w̉ y{Zz›;é™Wò£ ¢+ì[@¯ÌIÈs oÞÕ;ÙÈŸ¸À×t’ÑGtúJˆ/_Q{ Ò_Ïä…‹Žñ…’ι µˆô,É(O-uÙCÆK,”ÍNÿ°Â¤¤Ü”ü ý•™AKù‡Ÿö5+9ÿ¤ÓíXEÌVØnÖ/·›ù€y‘»%ÃýPÿZ¡ž?J¸ßH%2'fýcÅé/aÿ)•Ê¿TþLöõiå ÈÉl¡#v–˜‘'ä•g¥øòU–þ­ì$ó7öýËœF ÜÊÍZ†ùÄÛ¤üº’M_Ü ‰“0 2lx7‰Ê_,ê*_5ep›Øa=™ÒÈa–óðí²³’÷µï†…ÿ’᪖…˾_–'(ÿÜ"ûj`~âƒg[üf^¼BT…#ä™ ìÛì_Íð× ç°ãâ<Í})D)¯¶‡~&ÈâC›¨üLõíi‚>èÑãn}eÅ/ƒÈ˜,ç1GP2Šüb‰t5‰L-³-†¢D¥“ˆ™Âá;#ÏNû²ozÈH”ïgòÏ€o¿ Œ ;SÊ>ÞšU‹’ß 6·‰wƒe]FÌ6,)Ü-!îÇú++ËŠüƵlS¥£HEyñk…W¿+oêðêØŠ_^ þ¬â=‘Q~L¤‹«ßhôôRr7wò/8ÿϤq~Nþ¯Ÿ»?B-ßPÿ¯…cþD} cýk­nü‰úÆú×ZàøCÔòÛèþ ôýGyD—ðSÙžGŒV`1óÏj]pªˆEú†SÁ‹”àù¯çý‚£ÈÒÚ¼yíÛô¥ü¿ö¾mç•å6óUÏM H"Y0¹žûÃÞcØIŒmÏ`òöC²úP-uK«Õ­¥ÖÁAâ?ú—Ö*²HÏŸ‰«³LеdSÝóÖ'^¨ï|HÇî“°­çŒÊæuÞ!’&íkBçw¥‡Yž‡D “”^w2°v‘kE n=–1«škk«ÑP5wp×Üg¤Æ]]æ;ê {ê ¨l÷5É­`DÙÕ´ å]Ý©¾½.¹"Ýñà ·mMP m•Uí„–§"ÈdkÇïµ; Û¥^—#}°&v®LüQ1dÎM”Ç#f³:òÒ“×ÍaÎ{惷“DZ&×¹ä`›¤ûv«,lšj·:Yß‹B#ÓçÐ%s‚ú=5Á¨y§1qåQ(Óy‡>ߎqcEzÿWrµ®n`_öôaúÈðö¨ü»³æ>½NÑ…l˜sЕE«¤aš¢é^gÛ(7$o uÝU9ÚËCñ¶™üÐâ“ã<¤ËkŠ!3uÆ«§N"±CEúˆÎ5a,,°ÎÀ&m,&•«Ä½ƒ]™—/Ml‚²±cFåsŒºD`ÚÊbØ™•E]±£cÛ*¬t&ÛF³÷F•øåX"‘ÈN,’§&¦P"aÚÌbÚ¥™%£Sàºs¾¦Xµ2ôH¨ìì@ú˜Ð}ÙÙÍ”»§î‰ž«oÏÙûÕéíc‘Gi%!~†VúÛý2‹Ü· $]Á‘2ˆ&~V_õ$å‰zu¹~ìæ¨>"iwÎ'kÕ™äÓYI§'$‰èoç¡ùÝl®3ó "Ás_á<ÔDlÑ\ù¨íBÒT—Ÿ-`µ‰™~20Üäô2ŒLÑH]A2¢Ó£Å!ECÙ8gct¨0&ô¦guV ¡?³Ò¡ÎiËeæÛ 'Ðu!ø““pædòïÁÌÉÎÛ é£^I-½28Ýúíµ‡Ôj¤îªª”º°3fê«” T8 ×§$Æn¨n\¥$Þ×C™5~tº SÍ«btjÙK9x[£3Pe“:…dç5'ÆÄ®y,½s[ëÔ»?–[ixuû2®TM¤šöU¹Tl‰l`)J`¢H­Ü¦AlñB½Ãä‹éïqñªoãÌ©r570:Öù(ÝþžË:߇ )k3Žî‰2£êx˜¤ ÃXÕ[|6I÷Ít#&¡ƒ<ͤÒ:G“tã8Ù‡U’™†ð‘/oמ*—,Zï,=O¼ˆ¡7õ]5ë#®ïŒOì}šáÓù‹8SÎò¼³ð¸ñ´åClx¬¦vZE•€9JôÅA¬~=êà † aÖŠ ïfDh~¡knÕ’ÜF ^·ÞŸF”ZÚæ4¢Êå²öR ¦x¨Ù0¦u_nÎVÚÝpÝ ˆ[ëÓ¾ÅP=ù*f˜ˆŠ˜QD¸ÑÀlc¡<­x•W‘ôñtÖK÷1Ïâ›ûmšM}“yÏ¥©.s¹5¡b`ìaÖå¥Ú¾àC“ =MÖÒWí‹t#±:Ê…=ë·JÈ3ŠÙÏ0ê¢h2,†^Œõlî«ÑY¥Ë_C´M©ÈΑZ·º@`'äy߈~Ø‚„®¢SsS7j†Üê.«fHÖuÙ®­wP²ÕH5Í.¸8t{„ªÞ1P?&u›ÂòV—ªér_ ­Ð„Ôoyƒ<ˆmè«ýÌn0vlwâ=]tÕ·yæ\q0;ãcÅ©Nuê>ù›ó¬Ìêfi{É-?åm:X÷Õƒ.ð.­èÙµ[Ú„‹ª’©AЭÅ}²dª.ú“i¼¹7*©¶G']bˆ}ßu´=­Ñ͍|D_éP¨uðÞ³n`ûmuéíÊ-4»bÿžŽ}ªdÚ(y¼•R÷•NÍš¡ ™“åÉÅ Šñº‚œ²îÁ–(ZßÇ©³ q´@VK!ir+$%ÚW–|hŠÔ$¹ë°ï¬d|‘|ì}ýŽ<'èP?¦tgw*¡·„\![*2‡¨î¬xv1æ~‹éÐã+Hņ;õ0Ýèš‘ÓZ§…ÐŒrô¶W·_Ô$[Á˜<[q^?¦t_‰žÇÝ)ã.›—p§¼ªÚÃaHýxy (—÷!‰M6'†kE¨[%æ·ò†Î˜”`†Içé¿é”?Âk_•MÏ"’Ñš±¸I"võeêv`‘%ºBÂa–×|º“?¥–üxU«ÎïëI;¬2±PªÛÒs_[¦n–æ×k’†.™îuVÅ„1¥ûòp9i®Ãæ·½së*nµýíróÄô^:â¼&WÉ9Μ,`˜9XQº\K÷C™ÊWÏ€"\Ed6›œb#µ²ÊÇ.=wŠ›ùj24 ĽíækdÞY £™A§øO5•¥ºU$~CŒ-±ºa¹âÀ˜Î5”ýÖŠôöOä6j]]Á¾ ê£ôq£æÝëã=Í\Þ"â1–:³¶¬L49]Î!Œªeu÷xtÕ·ã̱êMHéR‰fÍ]”™ºP‰šD ø¨k0X†^t Í0sJahÿ@E¬ÓHÓ‰4ZH3Bc7'oäÇmÖ™š,^µÏ–‡EQM¼hÉKDYa¯´C²·fĘÖUoäÐcŸä ahŸHiª]ìr;}· in;ý[=gLR I&ýЂ:áþ ‹ãî.7‘´g(7É%ÊW áÇÿoÕø1fPšaÒÅÿÂý}åX“ýb<²™SPLÈ«‹Ìâ¹úÆ1u÷4YWߎÓÇJ:"ve£#\(ÌG¼…›¨ïÀ}¿êî|ÜTavqwuaF2ïT˜··™[¨oÅýMâ0¦Âá`h´P;—’™xFvUY¯Ú´6±²ê³ÆÆ|"`†OݰäÀ¦©ùI¹ƒ}© Ch/‹Ê9Gmölk{~èe¹Ø¡5‰|æïÚ¹S}§O•u“êÔ©®6ØìB÷9ï"ø²5!ªWÙ¤k¾ ¥IçeÕ’_/Ù9;Y®×]¦+î ¥Šô5d"o3,b\"¤¦ºch0Š8,¿R`TíıÌöާ\}ØfÊu3G†½-"ÔEeAºì}C¬ï‰R°·®9Á5Æ´®ét qVlïU¨·7Rïêö5EgÒš€C‘V€E ‘\ e9ƒ”Љ9L¾‹aU‹gHqædèr˜9Yµ·ª=ØîÞÆŽÀà\½Ó<Èù ƒSœzø‡Rp¿¯2»&©ó.‹¥yrX8>ĺÖŠI99?ͤ³žq²Ó#¸5ðIêr*ȹ²GÐ’"'šÛÈu‘*MÕƒ|ƨLinÇÛ®. wuœ=ÔLÎ5ƒ¨àÑAžmM•f_÷‚X¤6Uj+u…›„FiH•1¹ØÊ"¤îk¬£äJÁ¥9èÜtÙ6“b´\é@´¡ÓœÆô•ÝeõcR÷5i¥Òê¢z`ºSH÷ÈLfø/Ô{2W*áÝŠ\|ÛÏ+#NŸëL›n%Kß«½<'ÍdØÔ£ð SH ØÊì­Ï¦ו::«&®NÆJ#Û&ÌóÙEîrU¡1e×â ²ž×$cD]‡=&O‡°*ÚG„®ÙÔ!ßž•Ø»éý_É-Ôºbÿ¾ðè¨A'í_÷¤Ó:~´å´Iάðt€­Xª`mØ®÷Ò-¦”´¤Z°y[°SßmC:{+ýíˆBS'¦B‘œ<P®¾Z†4Ð>&t_.OÖýzÀ±P(é":wÏ®Tñ¥]{¹$j rñ}¥¦aÆ‘}äé&j*”f¾¥+:è#¢ ¸â˜>Êb®*êG¤Æ}<òVïéxÑ[M«ø*«¥—êKl ŰqdK²O¼öX’áñ‰ÑÍñé,ñ:ƒ%îš”xh€éš˜“¹|Iž~±+ˆÄ +z]h‚9 ÊẔÔ*QD}L*ïËÚ²ÑÀ>©IHå¾"ÒÁd+ˆôD)Ð=tâC͆©Ûì±ß gڒʸ¨ž5ÝEsU Ý_möÓ™ƒ5 ÌäÛqîd)Ìì¼’áoä6ÈõîJ/©Ñ‚O2Ã#A™DEVÔ…JhrއB¥è²òP#Ü’õ•ˆm|—¸Ñ³Íô25LNçg•T1«=JOKj»7©&*0Sj+¡Z͆1©+z’%èÅ­êÝë$[©wu»[÷!¯jdíë'Oâûýàʈ€«Ò[8`åË §—^ÐcåQŒ)XZ*KTËSÛúõ~E]¦{/Õ«˜¤šçý4J=Ò,:uŸŒóž]&th\ãEªÙä;aMÝÔÒé%Yu÷ÇÕ·qæXúö^YÓ.ºæf€¿žàÊ ÔUˆ‘LÜxÆSêÄCÉ‘SÅt¡×Y»üç¨Ý”L1©ŽGµ ÜïÕÿ«ý毑(üîðÏßþôŸÿøßÿõÛÈ¿û§þö·ÿ÷/–H¬¢AîØf9X÷¶D .è{àR!þþЉÿ]÷oÞÏSJÉù içW¸¨Î^8R…ÖÈþ೎²Gouâkƒ 5Ø6è|§|ì>©¸*ìKW7£pM¥Å7jªµ“¨-ËëæpÂIl86Ž4C–C#®¿ÝglpÎ ôw؆ B!Kšk2‘uR$è•¿@¸Ò€‚*BP^rüýˆE¹¼ýk%ƒóB³X&Y¾«þÎ+wÄö"á–‹àpzOËÎC¤{_"8b‘íb˜b5òšE¨øtê>)™÷HPwýiN˜Äx’uù ô(FÍI"À†G<æØH4–ÂïweÂXCR2o,’ª¸hn¿GÕmU߃ê&)€ñŒãÊwNdZ?£ß®Éìµ™¥è· Ú¿«IŠ´z­u˜Ô‰Aãf'/[)q²~@ @¥Fk»èŠØ-¶}}cË@sÔÊãXü6êÖºf cã|Ð1F§µìk‰"Û´¯ÒÇæ"HwEÕ÷Ã{ú~ÝõO6kÍ™6;@bÚDŽÄ¬ò¾:µ‚ƒ¡\ÒæΟкˆæüaIÀŸ@žÓwy82ñ2'ybÄÅÑ·F­Fi8í­úÀ:œÕ²);xæÆCÅŽR:—Äøéó[ño;&ùí Ó¯²: "ºh2̃ ôw„0ÕÁÃ)~À''½¿AøÅÄÔ«ù"|#ˆ§ P˜V½øi åkD;}EÃÞb‰=¾¢áfdºïdÉ«ùR¼y ÷Vƨ“(äºÙ#CH&†Ç’ËÔH¶„¶§6»wŠ„›—Dzڌª+Ƴ au¥ú¸Qãz_¾m¹8‚¾ÐŽh=òñŽJFuüü}‡Ÿý§»â€öúÓì”Ç\»¾î×­' Å|ïmöHÞ2"(/IlÛšV%²¦Q¯—?í»¾æµ ù>é|¾³W†=í­¦Ñ%ö(¹ö¥uúІCÍ-›X¨ùRššk¶mʤ›1IšŒI®[? Hºý¨IȼqTòJO2ß5R}fÔô%r{ËìœoR”sØ0[)WÕ~™È„]¶J×íB¶Jȱ9ØT;”h«ùúˆmmg #ßo 㣼Ф>¬k¥hoIo EDûpèX%’,ä0b è'§ši›rè§ ¤OÆVÄóš‰tŸ¿éOw óЉtŸO¤O˜Ë¯!¼¥æyou޽ÂànÍ©·|N:Z×CˆM’(ö5Â?êJÖÔVÔœk,3Ñß™£Ã¯¥¯g·Q£n‚Õ•(¢OÙœµ+ÔLiDŽ­°æ>&ÍG5>湑¤It5³üOÿ˜·fÜ#Ìõr~óŸö˜¸kx½½~˜ÝŸ5÷˜‹ñωÑêxŠ„A;{ÌS»7@±çŠšŸÀ·°{Îm0HÔœÓT‚‡–¾Tº¬5y}©0È­ú‘–ÃnƒJÚ¦]A!–¯ãUk G ëܘ¶)‹nÕZ.Ÿñ4|/ðš? ½p]ëVÀWnÝZmâz!L¯"@»4„¸Û f7†nF54Õ\é½a‰¿I›÷!Jqc+X}ÆF|ÝÁŸçÒ­:I ¹Þ­é¦…Üd—}²7ÔI´?3¾i7»2QNÜ–ûRQÞ©é%]J[ /•†ô¾mÛ9•äʼn)„‰ ÊúÁïmÿV&ìö‹È_jqïÄSÍK’·4j>œ*nǦvr]±‹±åËj}Ä,+4‚ß×B®Í½AWDR}¦¹ã%¼ÁMZ  “']•T û mËPÀRÉ/†Ð®­µƒ‹ ks:!¤!/¨“cË4[¼ÏœÍÇI¹·y¤ÛaoÝ_ÂnЕÚчŠAe’®bˆ9€fs™äô³óswrh¾BÓɨܬÉk÷/0|¿žîÆ›QDœ‹"~ÜÚ½F ¼;ë÷VÙõ‹UE®Í£PƒÙ&Ú5ƒ˜üð|Ç;j"¯äü¥u^!½r§×6óo¢I÷§Ù>ÆÚùKw„o¿û¯žþx¦›µž›û˜57 Çñê}¹,&‘1<ÊûškÃü ÐÏ ¾é½ó¢IqÔI8¶*PðÀšŠž»¬ä¸™HÁáAót¥g¨ÍÁYSÆ Ù7íœ -ß"¤ódΚɉ•wä`ðÞê9•<›p ´ç2ÿÖ1­³§°É\Õš{²(ÿ„¶SF±U¼¯MX›û`yÝÛ0·'ó=}0ÌàÌ(j@ŽÇF±“ž5]MÑ}»šžý„F·(ýߟî%R8Xù ÃPˆnÝ×¾-”èD¨½~˜í6šÇ*ÊÅsÓ„Gȸ·Æ8×ö3xà¶ >u@DÀ-¤‹Õö¼†žìs_Þ‚ )¶+€·ÖšÚψ°·Z@×âK-T‰AVÔÉŽ]%¡xÑë.­·)—nEfÇ2æÍ_×<±áJˆ±› +vXÚßÚ‹°n«mœÛ[ùþØ2C'Á(²æ¾t 2'ö×Fm2| bï­ï+§¶"É‹ ][œÓ¶8/w¦múâB”x-ªz£¦¾G[3#î­$ÐA×"§´cñáPød@gÃß$æo`ئìYT¸×œ²†\¯Š'èO<ݤ»â‰öúçQÆØÈ¯õ›SïÝ¢ïÃú]A oåÓß&‡Ž>zk æLñu6_púCçx‹÷P_­×îÚÕÃÛObSÎ ñì _T z½¥¤í~4ý^ã á $®æ• œcS’&éáX´ë,ú ­H—ÃŘ­ÏIÜz ûÑï šƒãÐwAýο€mòm™°&?Øáu°~z'6‰ª°_Ç—³·’H/¿d•cF‘ÖžCÐ\oÖõ7 ñ]º‰‹ïÀEŸ×±Ã{ßû@Õ?J|o †Ä°x©¯vË%*¦K¸mi8|ü†PO¡® ¤·—A{¤&xk¢ *œ›Ùµ±Ãì‘x{éóⱫ:_ö”FWº®ï¢Á"—÷3äÆV߂ĖnÜ/w‡‹žcjÓàòè9[º8ê(ÕRc–y«ÒÎ`»T¦mÈŸ»*A‹La “KWâ|ÄajLûšÙðÒ¹òK›÷"Þßm`ÞÝXùþlàdôÍzZc£;ñêûoêï´F­ô܃>ð–¾£ÝO»èÖ Fš¿Þz¬»õB™‘n´yz7Øu¼w5)݇ï=|ßÎ †õÚE¶éE «ò0ˆ‘üä ÆÝT±÷ºÿ¬Y]y9­×'e‘e‰LŸ`ƒþñ_ùÛßååÿýË/ÿüï¿ÿòûÝŸå?¯`Pë×NÛŒ%l&ëÍN õ AÎe;éU¥Ë€·Þ¾NZ[3lH@¹äF(q©’Ë5ƒé íýüð ´÷j¯?,¤ &pVØxE…6tÚ·~ýîÃ宾Ýýެ­¤}™Ä!O^?­M±9ã©É]ò¹ØBµ24¹½Ü"}¨uòvõýWîÖYk{zœ„ØÀ½ºš-ú‹¨ÅÅ&e‘vÝSÉÂyòÇ“vÁ×Éšæbæ`0tà³”a¬'<»¶U{ñD—ó £®6GФQ+vZË=_~¹~1(øXt «¸ªÁ¤;¶+UÇÿæÐŸî†Ý„ÃN÷Àa§†)‰5ÅU<—éÉÙü\ ‡>›ÖÝÐ:”½¯â½8ì ¸ÃMÛ°uŒ)7åi a <ôÝé8ûÊÂ÷!iO˜¶)ÅÔ`B¦Ýb`{Ê¥/AiÑV†M.¢?Aû®·óßÉ úù—ÃV¬WA`§/öóßÏeØu׿{ÂD~ߤnï÷z'ƯÀ^/Êá^©' | 0Ž;æ¡‚Éî½÷²ò}¨ÕÕ÷ßk/ëuù™ƒ qœÕÖéPpŽ.TÒ³&ýÏ_´é§¿›|mº½ãiHé+Ö&h2K·@#79£ŸYŸ\cø.e}¾üÜZfÄÓ8ϳÖF÷¡Çœl Âôù'¤öy%Ä3¿4ÄóV¾Ï”5ê$s_£¸ÛËϺÖžÛsø–òóãÖ¨•Z“sç/´òóß®›ÐÊ< ­<ÛiŒ €Áalò£F¨y®-î+??O~®@·òã—-ÐQ¬>g#Ô©I!ÑôÜÃGø>+ùÝç“Þ׬‘œƒv< o0P:Jyg˜Æ› Ð}˜ÄÕ÷?Éyž6GÜO È£S3ŒUÇ}¹Î‘@×qYúÚ·ðbçÓËtys°Í!Z÷mL«KnK' n( D³ ÉK„1ÚTÅaoÙï¬ÛcM©lx¼D&ëÙ]~\—dØ|ã>.ÝD7æYtãE¦ï!žØ\Ý×ûyžØ€áN€f'P²ÄucÓ'@dwdú>Ô[‰.Ì/.¼¨*廚Ž,4%Wå ÒdÛŒw™…¦ýˆÏ;œK€RÙÒLA®ëWy °Ýÿ½îŸÆ”Â…ÒYø'¶mºq´1ŸÓ^hÀ—Ò±kwÿÊ«S¶ˆš7r(¥\9Õ\Û”EKZh:Á[†-eÙVMä\yÍæï§?Ÿ‹°a¯Ï­þ«ˆâÊ£iýƒyÌ«°ó›ñé”—a3ŽiååØŒ©™ã…½üZÂÛZ¾[œÆY›`ù°FÝ£SÞ94Þ‹Kû2>!§d»ÏU”å ñÞuûÓ ‡Ð®Í*nDU|cÈXmai1V˜7T]凡¡8vÜw‹Õb˜,hÐiZm¬y¥å·š)eH½æÙ¦LZ2!un‘ç‘ðærá">Ù (ä™äËýør? 8¤Ò[À‹Z1ÖÏæF—9ùQH—¤±‘Ù-Øè [0ù…’Ç(|²åþ—€¹Ã6eϼ7ºV&;ùޝVíJrãWr¯²çV]:ÏÖ¥¯46€8HdytñÚçZLW¯ÖÎéF==ŒJ·ZLsZÖbÊÚbšÓQ….À Dã7kG]õe ãX°v&ú»$L £§äÝ1z«W—ö®¸§Ñ«·%ÁøV[{;{  ²ð$Wªg ^ñPqÕ÷lᤧgà†<Ú®0=gåÐè%Î’Ø:9¨özeÞ×Û½yF×5¹æ9 ¶—Ȩo²Ý[´„$·ÌQ&çC%<;ëquæåYz$”Íg&0BçǘRç‚QK©5 ÚÓ¹ÔÊ_IKfòùàF«Ï2ï®ÁUÞ‡Ò`#|*y· X3Äp| ªƒp«âᆌºÒcÑÊ[^Úã:a÷6Œaª£;\Ÿîæ*2×"‹ á1D‘§(W[ÍŠˆMÝ•%ÜøMέjq•ï¿r‹ë6íd.¥<£Ç .[˜³¢¹K¾ýmîz²í‘;¸Q‘Çg±­A¹B±5Ú!‹Óaèê§K_ůø<[|nµUÉŸ˜l«ºÒŠÌÀÚŠ’7ö{^éáZ×Q•ÜKwTmæ÷\Ú¢V.ñ­—£ }«–£É÷ßk9Ú ¿'@³œ Šå&º#[Ô ÏŠ¦ä¾=Lϸf{˜–]fNÙõg„Ô„‚?(Ȳüî Ç >ˆ é]“«@„5„Åh䣿£|4uônrË)ÄŽÂ%ŠD… V9[óƒ<5zCšl uc˜;â\d%3ÅxðÂò!•üË-BWš„;¥v n·!W.ò/ï’b+/ÒJb%Dô‘s+µÔÊUøUç–qæ\vofvúsºÏörÜg 幓n°  û|c8ˆzŠ`ædºΗ^&`§À]^Ì ÓȃèдÔgÇ?DèÏUIvîL%ƒÑ)±¹k©  Žl uqŠ\äˆ>¤$/NGûîn”n¬K»¸È‡0y[Í®®`Ía?E%ùCTzÛÃ,2‚ê µÆùƒPœ£#×·½‘¢©1iaÃÖ1@“¸„˜§ÉŒeÃsîνž` ÁN„Ó²œc¯^_O1øÞë)Ä‘D‡Šò óg_§Ú«ôÀ!D!TQbÀƒ¢±ÉGIÉ«BÅßKIKi¾IÞƒÈñ´ÐÆòœɴ1;¼ÏÞ¥Ô°Ö’ÌäŠ~º˜ÔVG-ÃV´I A‡Šð^'Æu¢ûˆëÄÞ 16 þ¿:AˆŠB•]QÔE1ª±;‹¾óä¶%Õ™88vŸìåÙ| tÆ' ©ý ŸŠ·+6ºFÞá=0¨d ½½HwÙ_D€¢¼É5A¤Y_Rq–§¨øJ ÞiG šËW>SWÉ'OË‹÷2},õpÄíNuê>Ù‹«óÈ» ï5E¤ý+èyPâá¤N‰©“NŠÇî“Ñõ‘[s}„3'#dš9YÑ_ìÔ}´—¬ôu`ä¨Xy%À0 $!áX¢ ¹Šš€ÍU³®!gWåê‡*ªÃ“tò÷7©;ñ96Ruç¬hâˆVLYÇ*ª(-ÅQÜñš;¼TÞZŸvq™|7Òîáü*»ãñCÔÒûwWˇÄ­g/>CFEÅ•À;‰³‘;¡ gþ.&½ÌÆc÷ÁXbW9:~”Þ!ŽÞNÅ]ÎÊIx¡óX(j¸ ’[™}nÀ!(Ш7¶Ãp#¸Š÷AÁ5ŠÁ€¤ã‘%ÒŠIíéUÎØy™A¼Ä;vìOÃyJ‡Úgƒc¹Co[üt5‘ײbCN˾$·Š§šr:D¹x‘BÞ‘VTú*2NŽQSÁ^ñØëç  ùc÷Á^âþ‡¨É“È9žf’ê¯gxtê>Y™°ÊÊ„!{£R‡Q¡Ù\Ðç-ÆîeTë×P&a ®aöû¡‰¨8$“Ç´¨'$ð{ÔÆØÛšÌM–ЕD2#¹Ô?…X¯¦D”×ÇÒ(†ìE%kFìE'ù4 Ÿt¿¦=BšõÃ>Ú¦>ÚF+鈤ÈÕ†ÛþØ}0’Úˆ«nÒO+ÌË®ÔÅáT§î“O¸»-ÌrÅýU'ò¦†pgþLrŸcO¾»=­h±8wÂ]ø8uq2ÖÈ,þxqTÛ uĖLj£êÑskM™1ëÐ.Ç]âìdçíVºo”E¢ÁV³zîúï˜ê<BÆ®û!MÇŒ‰×Ü#»é“E8w²Î–»n^ÇÌûÉjÈCs‡P%r³Hì<$æÅÔš„JàÔÖåœæè@~ ¾¹C® Z¥™*ÕR²‚ЩæMÔˆ¾ª‚í#¨(FÎú‚ŽÉój´ïïF³ÿÍñSntè‰g.QÈJil@׋hV"ºZOè mC@pº6GnÁQׯ“ƒðÈÒèí¢¡}Ýh¾è‰LFgêäÔk_øˆbŸB÷täiŸ²x ñ{¹ÒG>œÀ §¤Ð–@MŒ1÷ë\=O.½ýû4j.¨ncMD™Ÿ9Zò™gŽÖ•)ª“]/L>S-sÕ‰ 9õ¿M\Ñk’XǵÅñÅì€+}öŠÑ!~»W>„04Fè#g¼ÙçêåùÛIFhò>„®ÝÓ[42,z‰}_dKž<7â5õ´ïïJ‡ÆÈÍôiWù6o¬ÝÕ-¬2éZ2GDGÖìXŠáqü¦žMÎGSѤ¥q)%bÂØâ“5ƒšE>7 „+MXµ ìõ’+QR‹$‚X$ySA§Ý*Gî(¦¼–ñJªºß_„¦-’â±§ŽQqœ *ññëâ?ó¸Î tRÔ>ôã) Ó圡w0¢ø:ɯ>†Ž‡[\|‰°š»:˜i-^ä†&;uÃüd(±œI9pÓ¢«&_R\g誺‹ÂÐl ˜µ·/r:œjÎ=ÉósØÀK¬Þcü°0c!¾~ØOôÃÞ¡0çÊÿ¨Õ{øl¤ßomÃŒú†\é xy©aÂd±©×­‡ÕSÝ›{‚qm0'íœåA2å&û€š“&Ägy:MK—Ÿºž: ‘%Ÿ»¦#°O„ÄÃɧ‚¿ñ›¶§®)õ§HÜc¬›ì­j邸ö-]frÓöODµ±IÀµHÄx™Š `E“?±j|ÀìšìJý“õ¯-Áö,˜FWð‰^`šLI^³xQ„58±xÚ+'|Ø3žfR ¯.„/妸 ¥ëÒRdPJbµÒ1ÙÖ”T¼i²Ÿ«m^%?ÓM›sNòÊØúî¬)ô”{† qI¦Ox>Bë+šˆ%-/m,*/ÏY°)¬5c2Š14¾åS.¶ðÌŒ‡Š¥°.?ˆÔǸbà“l!ÿ`8ÓBo«7Á`ieÝvð±ÐÛʹ¸VgŽ·Ì .yZ;ÙÌïLäµÁD~¯ÊD÷0“Õøá'wse >÷-ÅénÎÏyKWF¶óOk«èVHнiPQ“¸(ý Ú¥Ê*‚>6„á¼]µ$WÈuãJ&ŠL%¿©qm tOmÂï áÖì Üã½9œi½Ö+%J‡)³ü  ?×¥Cp+Åp„}‹÷ø¼ogÚÝ.ûö‹M;¡gFÝ©¡ÐF>ǼêIÆ™f²Ù®t„ÆÎN¬jÊ<¼5.[^ÈëjÖ­Žíi¡Òö¬dXõÃGlÛ˺æýÈ;ïÞÇé~³;øÔeúH„³o€‡ŽW"ÜüaÄÐON5×ö8vwE@{iׯ¡‡¤ù¶ºŸ7—cš›Çø9ÞnO<ùÉù#G¾ÍP 9¯’d¿°Z 8ZÕŠúdûÖùÿ£¢¦¶,ä\cUiŽ¿–CRì¿ØN^tÐva{m€F¿°z’Cÿ1âF7¡ãÊhDk ·h+ºÔ\iûŸ+¦=É7nÓºµÀAÜTÈGVh€¥G¿2݈þ•ÓˆEÅÆç$J”°¡¨Ê)b¸¶ñn•% }SNbå¼¾U‚ùáMOít¤¨z;Œwßšb÷ªÛ¬C<} §©ÁÒéCO7‡ÓýSw°i°‡¡ÌÛµ£¶bþ:fµæ°fL)B\{Ù7}Ê6öB¾ªÛvB¼R£[¨ÇÙµ5?n3׈Ðt—Óמ³ia|ó^ưÖ¹¦…ù®laµD­øPÈêÇAžIè}MáO4…£-R3"´¨P¨U¥¤ÓqŒºá‘?¸yåhæOmšµHòÉIÓˆ$¡V]½ËwTï^J„òÊ-o8·Ñé-Ehº¯Y2«þ’š&Œµü¬ÊÐѲê¼Ö½¢œÉ7Iwž“!ž»1{rܤ˹)[N5ûžã‹ÑôÞ§…–ï!¾¹ï¦‚§ûbänn* éíK*3˜À™åƒ$'qª-߇úb+û ^¹°—Ÿ;–°i;XŒù˜%¸p ifÑl5GN­š“³¼ðÃ ÇØÍYõÝ~3Îã•%ùT¢õרöCK÷!ͱ§Ïg½•Æ Kþ ,uA¦Vý ,Û³'¸Xž;õÀUÍ€4Óòà–= W®}®_kê÷ Ç€tÌB|ÎHµøÞͼÔ#>‚û»Gé•›»kžîpZ(3yÂéGvŸLâêBQ€M„ân$óñ!Ö¤Ç\òâôLr©Ç ï™4Ô®ï ï¿þò·¿ËÿÊÉþòË?ÿûï¿üãß~÷gùσØßR.‰cÊ¢šªéNÏ H´á[ÒåyÌØ"…ûØÂk'Âc÷Éé÷€ÔÏ’^ýÅU/guèØ8ywààµû\|T½#±Ú¨nWÃb§ÑÚ9ªƒXð™üøRu?>va¼‰c‚,ZÔ…Tl½”ÔÈé©»“¤@uã?½½[¦×hsÇ dáz/bâU0\óÄÓQ!€œG̳oŒåyÔ@ºoUFEûÃZhl#mVZÉe}ñ›äTMÔ9KâC€H%«•¦3úï0eõ×¹ ¦…\¢ŽÕËŒz0o†Fm,At¶°[[Å+êšá j#Ͻ?QsEpþÿ½–ÀlI"Ãóg%ó¬s!å±ÐžRÒ»ágyPÄy@¡Öt½²ü‡Åé?õÙ¯‡Sê?®YbôÿŸß~ý—ÿñëßþó—?ýö¿~ûÓ_þöËþ3ø¬•Ë»itó‘(*¦g4ûŸgHì?õÙ=$†$¥úìßÎÇ,þè‚P*¤7AH0SÌG «²x“.ÕŸ‰»¹¬”ø‚ÊÏ"ÄâˆU?þzÍ[xUËÿ—ÿ\2N…Íчå)–¿*%Q­Ćƒx¬Ã'¹I9²>íïb°õîInêÏúoüZŸ¢œs;ý°>úí·77^¿zõã?»„Ë«o^}utrÒµ¼þá›8::ê{qýúüìëã‘þÃ÷Wïºó³Wë÷ëïÖ7ׯèÕq#?kägýÃßý°>»üî»Ë‹ë¡åÅõo&ÄWço;ê6˜e ¢ªz…üŠù¤£8¹þùâæô§“ý¦Ýïjʈøª»×(£zýÓûN¿8˜áîôéô?tÿîl¸¾üþêlý¶k¹†‹õÍ«?üñ»›'ç7ç“n¶ÂoÏÏÈÅéwëë§gëëW[|hÿîüëãŽ.¶ý¿Þ) ‚lnmMo©ýãùú‡õûž ÓŒó›o;­â.¿]¿ûæÛ›v=U»ý×?}¸¼º9yûîýºdÇ«o/¿[¿:?ýáÝù«?¬¯ÿrsùáÕõÏ×7ëïN®×§Wg߇‹oîìã§ó$E ìÎû?·ûûüž_žýùôz÷ìï.ºñ_]vœ]¿ºüéçoÖ¯ºžÞŸþùýúÕéÙMÇÉõ­6£ßi'Ú¿îåòû›ßßü×ú§›õÅF"Ýô´¹ÚÜÚÁÞD­/ú‡Ÿüùôì/ß\]~qÞÙçúÇãßw÷~÷Ýúæôüôæ´û{œÒ-AGÒéÿëÿû‡í¯†ë³³×ÿïòê/ÝåøÓœþ¹{ü×ÇC›‘îüìu§ƒßÞüþÝw§ß¬{eÿÇNç~÷ªÝØ#¾ùùÃz´n¯Öe¾Ëþ»¾{×7zõŸ7ïÞ¿ÿ÷þ!ÇG¯vã|5tdãU㣻Ør9\¯ß^7ôW¶e~'ü~XŸõÎdCÚf°y7Â}RŒl×é¤9ïn5Ûøð_?}}|bxôúȱÿ/ÝIôó×ÇÃMhðNš¿~}xoGãO.¯Þ}ó®Ó#u$ßÊðwÇétñß®NÏßu~vÊÎþáâãܯ;«kóx}óóûN8=xrvùþòêõopøù§ºìK7‰¯éŸŽ[›Ë·o¯×6ဵ§ö-„KÛ,·§Í¨õ®ÁŽïÚÛág>´ùóèâîènî¼ÉÿÕ¾˜ï›•6·Ý0ޯϺþOßÿxúóõñ/O›eâñŒ2m–É¿ZŒx¨-S?SŒ·¥dd¿RJx°”ŒâãÊmÆr§r ±/ªãËOŽQ-69ìñh*Ì^L‡-åy Å*HÑ-7=úˆÓ£M-8=Q$î%i=lôx‚IoþÈSŒ‹i9 =Vúc$Ò¤tðÓ>WJ$öhʦU¦lZõˆÊ¦Uñˆb¤G#=ª—³YÍ’_i³x°”ò>ekÜaÝ™œÐ˜*Ž?c„=Öî~ljp¡~ÆcA"¼"½=Y!Ch•…Ý©$ç 5Ѳ…óS*þ÷³ËìlŒ}îÓðð²7+ „R?Åÿõ¿Ÿ+%Jÿ$)aÿû¹‹”¹””ãø#¾ïöI÷û„?kÿû« Ìsê™¸Û Èu4!Ý)ûû5æ´ÿícÓ_¾ÿd/0¬ú¿þöjÝíRüæŽ@?áýGhqÍ7#ø§‹w7ÝvÄ÷×ë«ÿì—ôÿ÷ÅŸ®×;ª³~ 2µ]w«Þ.ßÎn¿Ý¿}Õ]aÃw§×»5âþï{=Ž¿§ÒâI.ýáôæÛ[sÑdþ¶[ö}Ý-ÿö7·Yÿj¸Û&¨›¯«Ë¿¬__tûSãß'ÃÆÃkÙ^öâí&ãõ°F>ÿÿ廋}´[x^_½×ýïµn±óÓëoO¯®NŸÑÐb½&ÀŒ¨ªo¶ÑM4®Ä¤@ ?+=ú—î2€CÒx¥€®X aáÑR”X Î:4gë—€¥—öPDnÈ$2E3­=ÐûžÞ PyF×– ’Æ Ђ-Vä^:€$Å+ ò”sСÇG3`V"$Te,ËÐel<ˆ`ŽÍ œ©£†Þ5OœöœØSUOBãõIÕxw×´jÚk»ÎÍs£ªZ'¹ÒÜ|ÇÎl!°_<Òbip;±wqy¾îOíu RgÝÏõõÙøs=üsøÏи5ÿê‘É‚`¿°5þÝ-Ju+GŸ´ °ibh“eí·ë;ýþúúÝéÅÿzÿ}ßÝÇ;l«hçXÿðîôf‘†aóE²ðYÄ6·ë'ª¤JW'Šrä\EU( ÕvmW}K+ T&žÂ¦ä%=hà™nGFIlTcèšs‚+9w½†€*%Õ‹cGkDnJGŒÀ›ö’ ¸mà…˜ÜÁÜÃL€™â1€¦ä>€æCóh|oƒ@‡*ÄŽÆhÑc’šÒa ›GS{ôvù§CRTú‡Œ«?ŒÑQŽm¯õ›£1ø Ãñ­4d“BëÀ#gdtÍÇ\{ƒEQ÷EÀ-/5ö؃d;t;?ºÉô©C *9¹k¾) ¤¶¥P£úù± Ë4çÍi³e›Z{žJƒ¥k8V-5€\^}o([‘µ¼Ç˜ C‡Ž"u0B¡™ÕÑ6Ó0ޤì0‰ B¼m<:qYPùÜÑ.É@£àØè-UÓÛmº¨S¢]b9ínÈ@gÏݦª1à&£ml4¤ñûæhÌ›d6Žu´M…cÅ]Sq‡ïÏÊ›ÒzËM­o9àWlª 9®L•æMÖÜêû¶ÔÈ©&nkžªìX½4Ýîû ™mk"ÝYLÇâ®zÚ™– `Ƭõ®›Úê®r›õXäÍÌ¿G‹¹x€Í½' áE"…,F×#16&1Y y!+…%)Ft`d0JÞésÇÈÛÜÿIï±û]l~Ûšƒó=böÈ_ÜÜ1Œø;Ûܹ?¹/á˜fÛpù€Š5ßPœ þÀ Å9Õ¯N/®ûÏ|ô›|7Wï~ú-­°ÿ‹Dïþ>!$Hõò¯ö6$K!)‹gÛ’YFTm7rJÛÐ}Ú¶U©!*aMŸŸ›‘óäfކˆH÷'gäz+9ûÕ,±Åƒ°„Ì…dY÷óÄVËó$XÃS š‹åý< ÑB<õñDQ\#Ü>HÌf–¾»ñó@î^¤´…Û'í€D$9ïš¡=ˆÐHØ3Cï—™a,¯–ô ,1JºU|„¥”åY ÊaI3¢>b­Á¸ÕËÝ9ì~žÊyqžDhš$"?âDè6KŸxºÏUýc‡û\5ï:P·ì‡ÇÚÓ ï?jwøqñ¥Î@º»ÂIÑz{Foù3OŠº{~\JB)Ÿóé$ËXÿÙ~Õ‰K<ãSËÏ<™ê¸Ô¬p~Lw¹Š?]wÏ£ÿýtÝå*]FwéÝ]l5µ4n­¦Þý‰õÓ«³ã¯üMœêâÁ7‚&eVØcUÞ d÷ÔÜm ¹´î*Åû"“Q ¹$ï"èëM5ÀÆ; ®ºÌÁ©8î¼ßuÀ ‚årk›A5ÝV»gýÏ£mw«]»#<¢þW˜è ò;{ÿëd7·*s„À@4*ôvu’ Á)« +WýêŽå‰_}©f…º”‹ç•q‡Î*b ϼ«Òa“Iè\éþ$Ì‘iñ„Å1ía Ç ÓüKÀRÉÃä`!É(ö–Ên¿Ë±â#gÜiñÓ i¾ø¹¹¼úþýúõú‡u·°xþËÞy³0aõPÞùþsídʙٻ#.­á©¢»ö¨aHe‡“ÖJ Ê=$F̈‡#-%¤Go&`"¸¤Gu]¨2Ó*ˆ­H;LÀ,h8U$V><ÚØQWY@h›ÖZZ¼*$7æ#2ª0ë1JÍ”sFî»°¢ôJs ]Eb¹Hße*lŽÍpÊÀN``È*+mŠy’õm¨ÀLåÜús„ÐĔɃ­™)ýèM£:H•’÷=šBbÚœ-Ë7 ²³ô«#Óóõ×;b«cÕc.U ¥îÙÖm3Yl©¡BJ‰Ç€Xahý.d1Ti ¯¼,XbéšÍö­-˜÷­ÙTl¶hZÓEkà(ÕV .áŽ?ºýî„·D §Ú7åR)÷©)‚š5S±$šr§¦< a,SS..dššr°ú¾)Ws”NL™‘ -&¦Ìh€&¼oË,\¾gË,¡<1fƒD kÆÜ°©17°së°Ys{ôÔšÛ0§æÌ(`JÍœ&ÓŠ­™s›²™5|âï)øüm9¤xx‡¤ ìäi_Ò!-/[Í’ûd+,‹É–@,IÌW†ìØo¸ ?¨á\ýŽº Q rwMÝ—v׎µ)ö„ÎÁ&1úœ¸IÝ •nÊòKí»°=Á]à/+ÑøÍsÒ™r&‚f²X“Ý”¶¡SÚG—¨±Æ½•¥u” Ê1{‰:P¤Xͼ«)xpåÌÇBjãDvZT󹎂(©ÈT œ…UþeOY MË ÔãžWy¸H}¢@¢q‘¤K[ïêP"gªFʘÀÆdÑH;” ‚Ó™¾¨2)½(ӢʤòÊd ÁTbûÊ对§M’àæûÊÄà–Èúe•éÅÕZ¥Âi÷ ôoÜÕ7Ú†Niÿ%ZO@¢êðŒì^‡gŸãðˆ¸fÁS JBŒ)ßEÊC-–’ù¬ ßÏúç$B8L澯?á7'² ó3âæí¼C’{Wõ{¹wû \It{vˆÔàý™©§ý©(ëTë3ñ^æÓ?ƒy¨fÚc>ÄËjæíŒyªò/Ê|Ñ“cþpWöTý1É}¬+毞Ã)‡÷§7ëßž0”“0ùú„W'jižõÕ¾Ú0”xÕ¾èRË*b®6È8Ï Ò+Öaн²#^Vv‚€‚+)P÷¢}±q Ì"Œ1ìÎ ÒDEœÐÄôø/Ês%[RL¤¹Â¯–|©ÞCê!cÜ«DL‹Jl}âS]¸ZŸžÿÇúæÛËîéÝ{öÍQ÷Ý7ÍtÊu¦Pà‘‚òEmOðlOø¶í ÷÷E•`"˜5Oðæ´zB>5Ö‰rU}ó;©ˆø‘SVª~Ø‘¤6bqôãqzK·#ŽyC†åZéLjåÐcámN9ˆsîŠSæå€¢¤î§‚ åv ¸Ç(8òIÄØ¬çiÀP%ñŒ2p3¿Åÿœó\‚i<,,{:.Ï‚ FJ¾Ï3F"Î’!/Éç ‰$mÁGª{Éölr*¯N"8+|ÅîX_-!M?0”{,¥Bň4W!ã ÇQ!}d³ÉsÛçÙQ`æ)íŒqë`M9 µù<õ"*ÏêÕ‹-EQ¯ƒ¼rQòRÆJ`!Xsc5 ¤ýd¯ÏŒÕ ‚Ø•õI‚K¹ ¯Oºk0NF±Þ®,ÂxÅDf¨‹Wð\L\·"C€rØÜ¬ ¨Ü|nÜK¸ä^Mh!öMÀÍyß‹²0ç^­‰rý f)=@³NœSyx¯$b™Õúd¼ªä¤þª§òrŠ•jU¬8$2i -?HËw¤ó2}z*(U÷ÏŠœ°*d¦ìW¾„œàTÓMŠx(á\¼!.  ú ™ì—S .Q® ©žxÆ,¶0%(ÏÓ“F;µ;*Ô´Ïrxój’R!4£z—g%a‹($ÔtêáBÅC…º„õRA1eØÌz)@RÊgÖ‹…Î3ë‚r,Y/`$}Ê)6U¢ˆÍ)6ƒP¯¯0~ÎÃŒ?–2~K0“Y2mä`5WÓR`æYb)Ál èûAÌ+òúÄ ·tÉ‚"÷UɘÀ*u¦JŽ Ql Þ+0‹v —ИVÄJȶ:1PB1é£/gVY¬N4PŠ¢·_¥ SZDÝô0‰g.¤nÀÅ"³ôš ŠlVÉ ÄH8¯…Ñ!ø~Ǹ„:3$uu4Hºœ:ÕL' !‰nç&¨T>SI(‹:H%-<0†ý'Q/)[!°„HÅŠ€R¬8;5dböZY08vè" yXHA®•¹@p²ÏeD·BJ†QÎý€@‰Å߃Ð鰠ñP­ç™`L³UÀp2ךx‘XyVê…%d8ófNE«¢åBnQÔ|+ ˜õV¥KPž4_÷VÆŠ|àÂ…`‘¦®¸ÄTYF¤Ç^Qs„²ôܯ·Ñ@ˆ=ç™O%«ìMB)‰«–ƒ‹JØ ¿Tηü¾T΋y˜/•óòBõçW9#T¥HÕÊ ¬Ü"‡@ÃPJn›@cX‰2”Bd’Y¹:¡ °2["ÙA}ì ;@ØÝg%6hÉ\¡3ÁËtVb“ ÚŠÇ/%öã–Øˆ/%ö/©cTþM”Ø%¥4×I„Ȩ̀VîEùßB-E¡3™ B?=‘ë3®°£ø™UØó$RÌA’’©ý¢ûÔV¨«ÍäéìÀùÈçO\D4ÇmÊZ”d)ÛŠ*s Igz b WiàìjHû®RØ B±fyº¤Ìœe#nð”ø°œIU‘|±"º§¬NÄ H{×yB¥ ”®K8Ç<(9ãbg|Lc–!RΜ£¨ƒ¡ Ï2$EŒZBÇô öÑq‘Z \}¦aj%4¯-E÷³òFÜàñ¡{¨êf&Ñýʼn"Hb%B-¢Xƶ…‹œhî'‘ D‹gŠÅ æÄ9W,I^D± Iôd÷Fä³;Ðá̳¤¥Ö>Ïd,)s5G4¯ùçÿTc îõ îß’–ó3Ôr|ìcû ÎŽsgnɬ3-·Ú'¦Aˆmöý0Çæì˰o%@ˆ³O-”"©ÏbY#ž²_¬À\K°ÿÈ›´‚œ·rD)3žçˆ¨-¡œè=#e² ;¾?ߢü¬‹oÅg]|K>éâÁ9úíTÔá㈦‹nO@iöç‰!XÑW\ª¾Dé)/ã>ÃB¢‡zŠ(„Ÿ÷GXKÅ|uB`âæÜ›äpE̸5P6Q_)E­ˆŒElóÄóüEáp>gód1Ï/mžü˜Yùã¿°£m Py,q”ŒˆBýÑÓ³\"2yƦ۔ÊÐ ‰k!¥2z‰•¿,­ç,ûñ-¿l´$"µC-ôé½Þ‹°Ì~¿×´A¬ƒÃÞeŸeÿe«õS6KëYž¹müÇ¡»­Oi®±o‡nÃ=©•òÆÿÁŽõIaiüÓË!–ò¬RÏñKcÿy;VyæŽUžwÆ*ô¬ÙçzÎì'Æsf?²ž5ûšÏ™}/yò§O‚4kvú¤]ÌOŸ ¤é’§OÝäÐÁ§u€ÒBUn Ïýó“ˆj‹Ÿ$tåCÏO>Í79P†Ð­W9hG¸.ø*BG|æ_%©<~“•±Ø­oA3¦%¿I„Ð,ü“û¶œ&öù—åÆB_–Ó$mKIú˵ÕáÒŒHÐàˆöÍVËHþj«§rқЈžóΠáá;ƒ/‰ö'//$žçw†ôòFâ…_žK¨U/¯$~©ÆË·ù,ôm>M¦ö ¿Î§q///~œ— 7‘ÓËÛ†Y!³^¾Ñç±^}Û„/_éó¤nÏñÃý—sý‹ŸëG̓מ¤RY½ýoöέ9n#YÐïû+ž—u„œ'ïOÌÃ9Þˆ}ÑFì?ØEÚ£s<–B’=cÿúE€.t7LS›–Õ²dòê’‰Ê̪B}™ä&}âi£ú´ÓFUéIg7©<í´Qeûœ6z!ÏÊò”ÓF•éI;V²§íXÑ.çX?ý‹4Q2{f€,ä4³§BŠ1Ï™EEÊÓNTT`âô#!:Õƒd^°ËnK¿üáÕ›ÿûâýß·-¯Œ7sõ•î÷¼U×+|3*kJ}ýêÍô÷ë__ß¼ÿåÍÍTòå»—í¿^ñh´•kBÒ†Oøÿ\—‚#ë”5”\\võÍ>&AK¦„ŠK0‹h, 0Zy!‘´«¡ë™ É´A•Ú‡Ï[Ž)@6iõîà xn, ÒhîWzƒäê½<ˆ¥ÍT]±f¹RST(DÍ}ø|_1¿^mÔúîý/?Üüí‹ï^ýðÃ×?½ýáîÜŠ—/ÿÚõzºÂ¯Þÿò5Í¿¾ý釛¯o~¾™®æõ_ß½ûú¿n¦+ûãÍòóWÿ|uýþï_Ó›­ Õ< À¯¿ýéýû-ûÏׯ~üú¯Þß¼]èhiŒÍ[‡ÜòûÔ…©Àv¤Î„mØÆßo^}ÿ÷i¤³khSrbñM ê^ηØZÙáüLúýä„aßÝüï?½{÷êÅÿñÃOoÇùѱÞu;º4×ÿëæçW/Þ¿zýãß¾@¨4e}º“MÿÛ¬–]7{7?téÔ‚}'uפÏ;4-мÔôõÓŸ¿…?áé[QèÓÍ|/ ~ÊÒ>aéñî÷/>ß:ׇ4ˆ|;ç·-R²*hÒÖ'São_žÏ•Çáˆb©O9¢ØîxÞ²‘'|¡½I‘Û÷&9íyŸœ5³ç£Zó㿽¬ ½0–ÐPY¤ÁÏzÕJÒ_™Q(ñåCèóß’wëmº`ç¹M7nR»žÝ-BS¦¦1eàÂì¹th è$3Áš˜HZC.Â`¨6ˆ Ľ¸ DDÃ’ œh Tp‡ Q”Ô ‚»UƒÈÜ+,͆ÜP|‚L@¡e¯¢ü¤½Šâ¼ÊŸG|Éˉÿé}ñ ŽýOßñÉ]ßçˆúUø®õ³f?L³ø¤W@\OyÄõ¤W@œöˆÏ¾8UîÜ®VTÊ“ÛÕÌnŒµs·šÕÍóôn5±pJ]æ¶ãmÏÖ(‰eØroƒ/#†Þ"¦¤J=ò«d/üìé¾ ûž*½- î &‰—z^Hª#˜JM (Dì$Z’¦ Q@ˆ§¦¹¬÷hÅ‹¤3cQñqÐ 9±fˆ$¾BÊlP¡pmÎ bÆn*1ãè¿lñáa X ûC ’²ÃZ›K‚XÅèØnsǾY`JÇ L$´À¢™–Tg]a3LâC2 ÛJÅc†ªé13E^`JR®Ð¹AÝ\…B胰5zxN¸‚Nhåe>Ó¸|‚Äà,lÛç„®€,ª)8TêìHóÀÌrò Z@Zjƒä»&°Ÿòn•öáAÕ*.“ðj·%¼rp=tÂëíÞüÁö>}Ãv ÕJî¼…ú9`[1=zÀ¦¸pÀfú°?ìÏûO°©î°‰ö^¤|ú"ôLÃÜÛË/Óä³½|P¢ ÍHn™d¹•<ò:ûÂ7÷QÒ¾û^â_öá¾ôáxPãö0ö€aø/r-ßÊËO'ê’÷ðWÏW0›#£(ˆÜÂo&X ‚$Ü C‘Òòps:{ƒ!˃¶Â½V¾U,Œ`쪽^KjØÀ1ÐDàkб¤ÕÛ ³A±¹cŠàU~¨—'& LsHVu”X…dàT™;Àâ $iêÉ@Sk‚X­HÄR´5òªylO‹ûŽ;¬îòpñô÷þ=L.ã~Ãì–]N•PV½À­TóÊ ItëÍavFF‰‹ˆÄ|‘œõöﹹȋ™ÈpçM’fæˆ~äü‰”ìä æÁþñ+5½c¯Ðƒ$]qõyêÑžÁ‹Ž–ð¦ 6BÉö¼AÇywßnHÄ”š~N‚`ªÏ°2½cF,r\L@šÇjLé ÂMTÞž;èöÜ?^’wUç…§m÷6\a@"91\Õ>í½uÖ&LŸMòãÇÿá&©Ä¡~¬FNˆ#=Ž'þáŠÌûãåÇ£É]F£É' B6„=*Žc”B1Æ©ð˜Àu,»»PÐ]ŒÝÅ­ª±´Ÿ$¬çƒ!”hˆÔ³>]·|F^‚%_~¼jùNª¿ô$ᢣo_ø œqµß¼xŒU×»÷¯ß¯µñí⽿XhjÏò¦úÙ_M}zýöë¿ð¨ø_;;>sGk·V!*/äåi{]¶7Oû S ËîÔào´'§ííž»U†Ý®Qa ©»kt4´Ó ÝÞöÏYkc‘|<~wÜÝg8ÿž`AôáóZ®ãåw÷Pcî©ñÃ[ÃS£!ÇG«ÑïaßßµÏ=Ôh(÷½±Ë©QÈ>^B»výfv{ku_£¾˜­ìwµd÷°Ùëëo¯_~T0ÉHÍ»ùöPaæïæxÚìîY¼[sb‘ÇíÒê¾Ôë{Œ «{Œ ¾á—|})GoÎþñ¦åœè¡\ð“óPáôñj —GôPáöÉy¨¤PcÒcª1éÓScñÄËâxD£.®OΨ«è÷µT4ØðLK^x ‡¢|À*Ìé-ß{fUu‡(÷Z…íë%¸LBâN#±>9ƒvtühƒvt~<¿èèúÉ©‘‘?^Œúx~ÑýSó‹^I¯ÆJyÄÑXùÉu ×G«1PèñÔ(òÉ©‘ƒ?^hÔÁñÉuHêÇ«QÒQ’ùÉ©QñF£âcŽFEÿôÔ˜ùj,üp5Þ|"t5˜GkScºÿ®–Òï³y£ßÞ¼¸OÉÀ{hÉùrƒ­\WKå÷óløRî¡¥ò{x¶—$׌³ *î¡Æ¨7L÷QcÜC£µK¨±ðîeÒ#îÍÒ'·7S”ü»Z¢¼G•ÓŸ»—a×ví÷ß!)*¼ÃU¡¼GØ®¨¬o/u7åã—†­–GYŽæ>¹Å!!{<„&½U“AŸœ&‰?^“ÄȨIbÔÇÒäA'onÞ¾{3)åÕÏ7C_ÛcrýÕë·¯¾Õ¾Xñêë+íÿî˜üÏoþ߯û"úa¿å¤)›´Ä~îžÓžä´ãІ¶6}æªvl÷»ÓNå¸%?öÖqr—\0Í’[’TE¿x°—;€X’˜?#0dÇötKÿLPùúw" Q ?ûJ\“E¿GÂýÒØ‘}7à(u0ó‘ßù÷ÿca­¦™ý¯°Eë†Ý ƒêŸg a_¶>ž>Žþïþëo_´ÇÊ[;ϧ{ûó[_åÞþ?þh_ÆM€QU¹ûXûx¨Ý°}äY{ºÛ‚LžM˜‚óÊœ•¥ )¾2 ë%–ï“6%Á^*"i*%àÜÏ1P4³ qèïZi…ؤ]Ф¹&†R˜CS_54§ HyÊ•X«¬£Þ…Ž=f$ÜSá ZÃ!âŠæ‚ )äL'å+Ј6ga‰»’‚œefõŒ©hƒÌ¢Öaz^I‚$gÌHÄëJ¼•íh}Û XItÙ¯~á‚Âä2ãÔ'‰qG"*Ñ5E50L­.Z¦¦^±@fyN¨€­Zm½1Á"ÿrÐ'¶¸Z«˜Ð\í„–¦&”@½àÚ¡Žz'¯ÖnOheSp¹Iß1ÀY™9WÅÄØ¢²¡,Vë¨ÊÅZF‘˜/ÕY£®×•„¼&ñU@ÍÒ®(Á<\'`ÅæMT•~qŒ æ®tÈæ>Ã,©Ž(S&Ä€„EuÉ:â¥(f¡vhª8u0ÃôŽÊ9åjï½U\¤ðÙª8œe˜mÇYV4›W50›\C]! Hïÿb¨ -Æ{µXó„V o¨}ÒVhœÀ!i›z¼ZÕ›Ö‚—NŽ>…€¥—múÚ ÙVð|£ƒÐ¡yJ› j7²YiGN&Ùì8ÂaV{‚‹jʳD±vý¹ú•M!eºb^¯X”¬Ã.¢(&–àèHed«¬ÀŒÒ7¶–ë5Fvèb‡Ã*‹Â6vR˜¾±¦ŽfɇÍ2h‘ÑÆ4 ˆPhc„º1LB‘uõ‘‘o]1ଂác:u7—­+¢®!¶á³6¥ŸoÜáxa–$¨&éL™˜¸¹K)©ZcÊ•"à*Žüƒâ¢îNû ð”¢FŒ‚¢ynMUm¬€°Œ‡‹Ÿ¥ÎVÝ ”¥‹ÆÀâºP3o¬Q#`äm˜"^«ÑŒ˜CØ2+UÝDFbfJñ³³Þ™e;KvÌ‹;«äàM´&nV»ÚêöœÕX·uuk=is5×mߺyžÈ°esüZlv(¥Wh€Ví5.~¤åðóëñü˜®U&‚‘™o¯q·g'ÜŽ…Œ>ô#æy#%1FÖ,ójäÛ1¸Zùv¬.f>FuïâbèšGö³XºæÁVüj5õ<Ø”6–¡Uǥ澱Ӄ¹oìy5÷­ÝŽnÄ¡–­#YÛþæÐ­Õ+ÕÕ¡÷«ïòMÁEô¦…ƒFgØ«[57|æAÁó®ÄƲ 7MX nÆÃ™á<ëZ=~'¡Š¾ D Œd#x¬ƒs1½û}w4÷`é´šˆ¶X͈zÓ±ñ`#‚k®ã؈¿£†Õø×V‘|ôdÄûÑÛÙ߬ò¬¿>B›Œy ¨éfBEX¾™ªÐââ·Sš3‰;Ä™‘'yŸ º/ˆíh…*,¾™oa€qµY™£¤NÈúxž'ocˆ-È6#Œ0ÌÆdp> qLÇØ<Ì,Ÿo±àÁŒÁ¾„:=˜Ä˜ÐŽ¢cÚ;ìk°3\ñ°Ö1Ñ^M”Ç||µP³öá$Æì~õ&‘c°N/r]+èðN£èóÕ‘ÕG÷‚NA¼Y¥dB„Ûf-Óñéš'Œ¹d³6J'Oݬ ÂÏWZ j$mVdY‰ÌH¸‰£•]›ÔXÿ5„ìc•¸ H¶¾ s._ìi%cYºZøºt¡r,oW KàÕÀÇ2y»ŒþõêhY­a†^~M\™ùtg1~‹mJ'njNœNž«X~Õ<)ÙÁ¨Yó¤åQZó¸Ï¿®ÛãulXÔàí/c{×þí?µÿ>ìónúŒŸWÔ^îöá›3íÀþÎÌîwt¨à—'ïü¶jšSsçŸ]U¿<ÙÂ(/álcؽhÞÈñ2ÎR©ÚÓJÌ)Å”>Umå ¤¨—3I–hÌÔp*'`ÕÏr `õ ¥¢e3Ñ"›IZ”Ò²›CŒ>ÁõFX¥d" äÚgçBÉ ­Ýè«jYÔ1w¤ä¥yÉ‚XÈ— cÍ §HßÐQ—ÊæŽI½oè̲³‹ùT´A*ŽèÐ(¬ú†Ž1ÕŒ½/x̳•d¨Ö貟コøsO¸ #¬AƒÊð¾ËäÔ~!q6„M›ÇE 4"©Kæ­+}‘g…˜Íó"{«í :fž•NÌ…9Am=µê‹KSò 9p˜LÈ Ã¬‰š³ÖoÂx¢JCTØ#ßqt_¶tx† jÚºÒ UqM°Y³J§ˆŽÂ…½¡e8)WÒ\ß*šâáÒ2§ NP™ÃûžŽxù„ÄJÖ™VÖBÌ}YaKiåLÍ¥³L²™E${g]¼Î*i-–â"Dï;;Œ”Wh×k$%wÖK/{;ªÂÏLç1>oïHhfø†*„†QcUÞX×Oc¤Kiš 6Z­4i\ TºãÄœ@Kй1/áÆº{襷g& bxnj Rö”MÛ!£ç£—¡ &é´‘&líå{°çCGŽëãàZ&9J¿’ÌÆ>1Iæe÷gö4€´ÈC Žým§I@ŽìÕ‡‹÷q˜D,WÌëÕÍ„@UZw4µ&Z ÁÅÜ™cÎËœŒ¨Í(/ŒÒUžŒ™&PH1ÃrMKwÚXÕÄäÈ \©x*<,–P€-U6†M¨,@À¨ÚJWAX`ä«GiŒ2\1¤£G+=| ¨°Ùpe™:Åðy›ÒÏ7î‘ÐÁ©Ñy?ˆB½QƒŠBíûA.B kõ÷ý ¡µ´,u*.jï”Ý‹—=!–F8«ï ™„Ï’g¸E B(k:z~D hé§10Z,T¨<+,±™•Wé6ÜꑘAª_Ë#* Nâ#ÌvV™1Âqc ¤½ôÛZÉí„–ë˜ÌlѰ ŸY jX£¾`°:k7Ìœz ¢Ç’ 6d^ö‡$q«Ÿeƒˆ‹k«É4~~mžQ<Ô™šš¹½â©ÀiÊÛ‘‘I‚Û1´ì¡·¾Kda"Û‘™ÆD¹Á…ÀIc¬Ïý¬%€[U% n,(ûºÎ,iXš7–zf“}¥è˜º±^BŒrÝX9¡÷Ø'ìûDXÏÑêÁT­­‡!tÁ#_Ô©‹V,NK; M«ÕµÅ(:|àºUD‚Ã_–òIjÏj3+$¸3sÁc_Ýó ”áÕç-#Ñ´áý»€*‰Gq¢Ó ‘ÚF"à,=Š<Ô—Ë)#F-{GV*2âٺ乡ÄTD6"dg¢*²¥F™Òˆº•1ÚˆÎ3óÙÆñqæˆø£Æ13mÍ!F/ÇlcH3f%CîÁž¹ÎºÕD©±õA‹\ÛÙÍñãxžÕ©…Z§á¬23 ­Î¬ýY¥Ïñ°@‘¼¶³A Dç6i”À°Æl6“1»ìƒuVј‡Îcµ©ÌW;)ñìvŒó1û}>LbÌ“¿¦³Î§í`_>fݣ蘋=Ìâ‡a¹þðcMpp6Ö«G±±Â®g¬DV…cŲº²<¬klø¼Qôùpc¥Ô÷ž,]u,¨2!Ôr³êjëtu– Z̶YÅ%¶ÊÈ7k½ðó5a‡ºY;vÄé6V˜¡Ÿ¬DÃÀKƒÆŠµ!d·ËÚ5ÜÕï²ý¤GËäoV6Ókœ îDz|Díuñ¾Æö±À?ߨÙÃqå|ä=œ³í›Çß@:SƒÔ~ oÓ`´ÎÒ`ô, †ÏÒ`ø, †ÏÒ`ø, †wÒ`ô, ë< †ÏÓ`è4 ÆÏÓ`x/ ÆÎÓ`ü< †÷Ò`ü< ÆÏÓ`x/ †÷Ò`ô< ÆÎÓ`x' &ã< ÆÖmw?ÜCçó4‹ó4=Oƒáó4;OƒÑó4ÞKƒá»¥Áèy ï¥Áð^Œž§Áðá¶Œò`øpÿ†F"Œåš“{™0ÜY—îp߈vsaø ÇûPvÈ™˜,¥G: E£]X1dƒ® (-ØX?ؘ-ĘFs>dÆLl5ú\Scë?ΥǙëö¿Ž×Û€^›¶ƒGÏG/—[iB×^¹{>tt¸“I#]FópÇ“Ö|éÌÉ„ò0ÃóíÓ.ÏHš÷YGÖÌáv,Ö!m†×»¶H{‰3˜‡Ì™qØÆ _ï¯òÎt;]ža8ë=õ8ØŸ§ÏðyúŒž§ÏXì¤Ïð^úŒí¤ÏøNú ß9}FwÒgx7}†wÓgv²gl'{†w³gø4{c'{Æv²gx/{†ïœ=C;Ù3¼—=Ã;Ù3¼“=Ã;Ù3¼“=£çÙ3Z;Ù3|’=c;Ù3;É3|ž<£yž<³a°äÞKžñäÚIžáÝäÞIž±:KžÁŠä>Kžá½ä¬äÝIžá»'ÏØ»äÛËž¡½ô¤Ý:Ï ÁP˜ûU¤?Ýý’9in?cÞB³Æ?µžEÿx=]OE>õt=Ýõ!jþÍu­¹v"^;Q¸>á:Òn}ò ‹ÁY«jë‘O´vÛ"r¹LAb\¶vn­#ܹ&*Ï'ìU®'\LŠÅnRtÂiz¸MχrЙb[¨É¬6+FU¶°H,Û­,pVÁ×Û ×°ÅÍ€R ¸XÚŽnä§M>äÉ"Ül·Ü4àbâ÷°ÊŒ'¤e08,{ ¸:„‡gÐu|Ù‡p‡zš,ãt3¯ë>¬ñ€çáÏ<“ƒGSyB9º:àytì<ˆÓ€ëÌw_ããݽ6r?;ó‘NŽFÔ€'‡D}£ã²%ÙN—r$/ÈûbØ`g‡i–üͼÂPÑ}5,W˜D±/‡Ñ€×8êAÏ xvuÀ“S9K¤í}® ê:Ë\Ù ë\´ãÅ';•rö‹yÀ³.ñëýuûà2àÙYÏO¡òýT»ïïLJ_üƒ½€}D¬ë!ôøÎS“ÁÎS˜˜°g;[8OŠtÀÓä)»œTð<‹Ï7=6è>/Ömÿx`¬»É¾æåǵ…~Ç€ç‰è`— kwæžÙNx·}è¹r[îIu›œãì»mS/}­X¯}µÁ;.~µq셂Ÿ®5Ùk .uN½ø0àòvŽë_ MÝðšäºîÑË®§‹z}ä8ZôØ™Êö¤e.VÙ 4¢UE/䇿^;Ž“½Ö°W‘ŽCo/7õÝëR=˜°zØï…®£k@¬óÖµãûñªXMÓ ‰sÎq=ëö„ΧÒ4ìE± Qˆ»Š–D—5E¶®Í Y\•t}Aߞ𞨯kŸ||ñ¾.’걉ø²–ªµ-M„ƒ¬hë ¶®Ïò±}Ú²Ž+qlÉ6Ǹ-ÜÕp&¦õ¶é:Sö^ {Âe˜%î² ‰µêœÀ:v×±;ë:Ê×±ã+m%k!«çPGk"‹!u´;²¸#Zm Q±Ú—ïcBf ©}±ÌÞÜÝgÍ>(¯/ ›MµÛÜ…E‘Wç u¦y4ãŠÀZu4ø²l†DG °Ù${‘u{¥Ž#¬û0u’Ä çë8ž=ûÀ¾uœÐ­ßðê9oìIÿ:ªÌ·NÓ#+¯{`^]û:Õ¼wö9ž÷E=Ü“kÇ óm¢°ýŒ.ÆêtawòmWË`íɲ-huô‚dÙ?”jiÀí¶kµP¢ŒÚ—ÌrB)Õ§Ô&›ÏôƳ“eGTêè*‚eî«fROÈ[é…³I'œÔ­4‹U«}ÕõÒ*¯Ý«c#ï´îÇ´î:ûšîÌkó¿É÷·£Þݶ=úîདྷ֦ ' »ÑˆÚg²›—¨}ÞAGSÔS”¶Zû.¾{Û·]ôBíh {Uíh8{YíI×XÛg]#5&A÷ùO8o¯7S9_Ãô8çó5‚³Ã »‰d\„FdŠîÙ³Ó:¿ÅÆÖá=Û¬”C²§ÅÇá±×Úz ÝÛ'äqhÑÃ{‚ßc}/½‚^2hßa]z;‚œIçCcÅ£J·+l~·‘¶IžëÊØ~{â1åÄéKhýü¡jýv»u’Nµ?ç’oTU'’ãq;‹ûƒošŸÔÁ·û5/°ï>øƒTÀ¾¹– LÞ. …/ýêñ!6fÙÕ¬’*}|p,T”±ËUTõ„º¼N×þ4î´Beâ#6… /ÐÀ3ÝÆvr$Œ½V«7bWx¡’«_‚W¼“Ÿ8 ‚fÌ Mɽ¶}ýº4›9{R…˜&nÛ×L@RSž,aÉš:ëÕŽœr×}W²` ­mWÿxwïêÏÇq›°7õgyú/û®þ¦ÿ²íê/e^Sl§óï ‹ñ¤•œ\ÛÆ¾Ô,¶jÔÜÄ_ŠL³r¾m²¾ƒÞÒef( –Úöô¹&äòŠÚ7õg¡;EŒi5³‡]}zb„B3«}[2ޤ¬u[’™^½Åø@>=“}_?&4 Ž¥5RukÜ÷ í.Ò1¹éKòÝw(¸øf]Œ&]ÞÞÚ?ÖLïíÛ±c;Ö±ºÃß¾•o›¬©õ¶~^ð¾¯o‡¦°mìMoîÛWïíç±%nÞ5›ìâ‡ÛvoîŸ:ÑæÝëÞc¤ö}µØ»–M˜qº»7÷»¯öîþ¡S÷Æß±ûOZÌÅ› z-Ñà±V‰.,VÓ#1ó­}ì‘á÷ü·ÿ0 뺯0>ÿ¯yD:¤­ïÇO(÷O€•KýÓ;;úí@ÜZ64ýæýѬeú>,ê›Ïÿ#¨Œa)Èf[°oÞ©Ê¢ÔÈ÷jÒÿFjòÚÂ^kš_|€/>Àà‹ðÅøù>@Ë¢D]†¶û*„E©ê£C”+Ùç5D½pŠÆørІÕS4|“å—NÑðù ¿xІ¯§høÅS4|=EÃ?ç _OÑðk§hН§h:à½S4Î×S4üÒ)¾ž¢áŸqІ¯§høçœ¢á÷NÑHŸ¢¹S“åØÑpG ô!š;=Yî5ð›34zs†æx„æª({”½êÉ^åd{S`‹í̓]Nö­šloAt2ûÜy]Äd{ãcä“–,ÝhÉò–,_µd¹7oÎgcnÏÅè~.†{ϨÏÅÜÈÉrïBÝœŠÑn´7‚²|'(Ëð#Äð¢,¿z$†oŽÄðËGbøæH ÿÌ#1|s&†ú™â›31üóÎÄðÍ™þk‰áEY~áL ßœ‰á×ÅÿÒ‡bøæP ÿ¬C1Î7вüÓÅߊá»C1ÏŠ²f¿¬¤,ÆKš²˜7ÇaôUYŠÿFYYõte=oοÈ;ʲ7_øWÕ–Õ›Ó.ô¢º,çO——•ëQ©/g]~ Ùû³.|˜å×κ_fù¥³.„|=ëÂ/œuáëYþÅκ¿pÖ…/‡]ø•Ã.GYî-÷Ëa—oufù¬3Ë­3»|8h¹eY@§Ü{ϽÐ7¥¹—šMûvÜ? ­#©é½ ÔIïu²‹Þ+ô^ì¢÷ª'½W9é½:ÈUïÕ ®z¯qÒ{ ³Þk€õ^'<ë½øIïu «ÞkBœõ^ä¬÷Ê W½W†8é½tÑ{¥«Þ«AÞé½ÒYïÕ@Îz¯yÕ{ È“Þ+ðYï•À®z¯yÖ{5ЫÞ+^õ^ò¤÷:JsÖ{E°«Þk€_õ^ø¬÷šP'½W)ГÞë„~Õ{гÞk€]ô^ ê¢÷:éIïu²“Þëd7z¯ vÑ{e¨“Þëd7z¯vÑ{mzÔ{U‹Þ«Üè½&ØEïÁ/z¯u£÷Àg½W/‹Þ+ƒÝè½ ØEïUAÎz¯“]õ^êVï/z¯vÑ{uà½W¹è½*ðEï5 nô^ì¬÷švÑ{Eà½×¹Õ{ŽW|£÷:QÞȽ2èÜ+^ä^ôFî5!nä^ñFîoä^ü"÷Ê7r¯x#÷j·r¯t#÷J¹W»‘{5й׽‘{ŹWj¹×•¹W»‘{¥¹Wº‘{%°¹W»‘{¥‹Ü«€ÜȽ ÄIîU Nr¯“]ä^'½È½ D˽v¾7r¯Ôr¯§’4ë2Ÿå^éVî•Nr¯]ãá×wóí‰Ò­Ü+^ä^ô"÷j 7r¯v+÷J7r¯t‘{5È[¹W¼‘{eˆ‹Ü+ƒßȽâ­Ü+^ä^â"÷ê ·r¯x–{m Óš­y§öеW<«½ÈÚ+_Õ^³À.j¯ vQ{ ¨µW¾¨½"ÈEíÕoÔ^ ìFí/j¯ u£öª µ×¦GµW»¨½2ØUíÕ ä¢öÀµ×ÅûÊï;Åö :ï£ÑOÙ¾F—¦}’.÷d7j¯ uQ{ô¢öÊ`µW‚º¨½NzR{ì¤ö:ÙÚk€]Ô^ì¤öÚ¾e«½N¨Wµ×„:«½&ðYí5À¯j¯vQ{å‚<«½&äUí¯j¯zV{ȳÚ+]Ô^©€Ïj¯yV{5ȫګ\Õ^é¬öjwj¯tU{eˆ£ÚëBÎj¯ zU{E³ÚkBœÕ^ü¬ö:áYí5ÀNj¯]Õ^ä¬öê'µWƒ¸¨½:ÈEíÕ@Nj¯ qR{U°µW:ª½öôþº0W…šj´Ù†DzK£¶+Í€Dß²£Ñi Q9h§µ^Ùy7[×$ÞRkŠwykœŸR;Å.Ím¹ÿò‹ü.ñçñ»@FÎw¡w+Z½¸Ä\§ƒ!d é¢K$†ÄÁ.ùdÆ\dƒ© ,±$dXƒe±Õ%>CxŒÏs¡ÉJ5ƒ3âÌ%fCö "ÑÉLˆ×›32j¹¹¯[ÓÛâ=:[_êûùf9ºp^Æ1¡”«È`f% £p¿VÌìpD j†ÕÕ5™$cìwÇd¡´ç2&bõÓ¬>” (¾ÖÖdâJ5K§iΓ™Ê`å¡,ëu$S(v»Qt©RF#™ÌÙx©=QfîL{S£Ÿî¼©aÊ¢ûKçÉœ }or­•Ý8-5¨±ZÓõ£ÆòÝÃt]0Þ?\¦)è@ˆ2×™‰e"b¯…Õd¶¬Es:³¤ 99GÖÂ*jÍý±z%Ý5Uã°’žî{1X™ag4€£X®O#‘“õC{eÉd]®þ¸=§m¥}¨oùkniv¼’-ó Ìè 4*7Ï0#øá fâaƒ­m$è°åȘäàÞ—ÿÄå²ÌûhéŠ ØÂ¨7åˆ@Ðçaæ}·!õIzO×ö¼ùr25¢öýY ðÌÔGJïãØl–éPÒýC9ô‘â\)“±°ò`…ná‡þ‘ Ú÷*É`lH +2 Ë™©óímæ~¾Þgîrô>s—öí>³ ž·™ÑgÈ»‚{Ÿ¹_Dï4÷ËZP¿ÑÞiîÚk&V>ï5{¡÷^s7¶ãŽ³Í¦—Œ¡¶¢$̃ëÔDg«ÕµkÒà x‰ÒÐ3xÀÅ5{2fq¬ …ÑåÉ–¡€ÞD‹¹š0ʹhæ#SÇ‹Íb7X$+S/ñbîT§x1eÎs¼Ø(ÄÛx1Æäs¼XJê)^LŠ­NñbšXÊKS³LÌÄ'cS’‰±&Ò5ÃB:´ð-îQ¹{BgÛ=¦¯{V£{`vï§]%Ý›»æºÏw ËÖtobRê·5Q¿Ò6FýæÛf)pÊÒ@(c\†…˜ƒ(ZF^[ÜÒ{,¯„Ž´4É\5–ëLøÉ „Dv'âjDyµS'<‡Úi¦^Bí‘O¡vZš|µ#½„ÚeUúÛH»,µ:GÚ%b]#íBR¯‘v¢š§@»D‘s Ý(Ì5ÐNÙêm ] Û)Î.0òg·¾’޳kx‰³c=…Ù±KœÃì(¬.av³;Ìngo£ì¤Jêeç$z޲#´8Ùkèzüî ;GªSŒ3Ñ9ÆŽN9†€…pBìæƒušBḭ̀.!vêB§;­ÒS„ÝåM|Ûôa‡tFV=Ç× b½¯cI½Ä×ÙÛ)¼N’ñ^Ç•©çðºÕö]Âë"±ø^œÂ§ð:'Ñkt]DÚ)ºËÝÎÑu£8—ð:vËsx’µíhßûmtfHì–('s±ˆÍbY;ÞmØ&“ˆ”ÁDר]l0§¤âc®¹åÚÏF볋 kŽeµ.kWJl•Ò•‡µTÞ±–©_ÑáuÐú:ޝÖ×Ö/¸ïþöMcÐÝ®›.ÍæØºtm]Çf¨»];6WvíØ¨}mÔÝôsiúÇ‚µ¡\ÍZw»A·n×½×ÞyìÅ´¥xìµ#£Í,´õàÕz ¯FæhŒx³km³øÆ¬©L›¾¾f³RÒα n?YÛå~þ u9¿}cçi5B= tÍõ¸Ñõkt}ßžè’bZýv{lë&puÚµã@©›]ë!µ›^¼Ý@C´nv­‡óc§Ùþî ÖþÁÖ¤‰ãÍírt×lפ»pû0ǾÞÎN…vŠÚx´ïÔ&Æ ÐEy³D™ƒ™‹#ï‹/.ÛXß{ñ Ý?üËüûüåŽïÑþcþ]ãÆ˜N§óÌ€E)ë¡@XŠ¡Ë©í(A³‡€‡“¾®ˆüd†®¾RDé I q§u‰S¼äI‰’ ²'q(#–Ò„9xØ1P E^îå2õ44Åh¨0Œ|hxà8KŒõdRΡ±¸P¤åáOÊHn1Ï“"¥=Š+,mÚŠÜøÍݦ`êƒБĴ-£ñ°Ì2\›£=›a ­#Fȸ;+<“(µ‘7§g!ÝUø‘èÆ¼œ¿ÿÏ?~÷ßý¿ïžàŸ?ÞŠéßÿ|nÇ¿ûÏ?ýéÒŒgË}i…™-^q@Èš2g*V&ùøÐÿÜ¿Mp 5z~ˉžùͥі3¦=R«ã«ÿùga•?ÆícÝ ¿¢¯h¾‡”LõúkúýŽºÃ}ÿ_¿ùz¿õæë?ÿæë=ë׿Þ½'óõónSðàJ»éÈj¯ê•»È8@¬Ÿ€¡»ÖÆÓ®=KøÛïï‚qï¯{½râ3­œn N¯¶ŸûÖ÷jÛ½oùŸLß¼W޹±:7Fg‘-®8nk8ÖùL(¾^¾évø¢©OË€ Öf]ûˆSŒjID²\ƒªIê —I“çðu 90L€„d2£ªÅåÁŒHµŠœ¤d° j.á±”äDŒâ"õU,ò)—參g+2c,Il¦ˆ@ˆn4(³äðvQX3pó`®-cšÌë$Š4–6ŸÏƒ ’ó(yAç` –ŠË¢e…냂gœH€ºZȃŠHG’(^,ãvuw˯ƿ™ydS.ióË%– VÚB.£,|Pb•Qœ¦ÊÁÉ\F±YÐu²(užÂ2I¥³z+5g$c -bòÞŽÆTUDÙŒ¸Te‘ÌHm™Û(`Ù»á:Š®Eš£8&Æ2%dJ*UGc©QÚeªiœ2 U¡N¿I͂瓳†V &Ê&ò Ÿ~šøâK1E š¦æ#AQ¡Yg•A¢·­tZ‚«}´Æ÷þòñ¯Ç˜îÝïø4Œ¢ô `ñ²áÔTÒÍ«ŠgÕbâP1 4iáªOÁx¾oà_ Þ`Þ ®¯MHŸçsôq½QúüFôžÿñ‡~@'ĹÄcí¿zÓ£—Ðyôz½oܾ(‘¿Ú➢´D’ ¥M›'ITƒQ)3/CH9ÏA‹hBŒË1fг×Aª4SGi¼¼RÇ¢¥>{;¦%Æ@¨ 4i˜kt4'~ÔÓÔg0‰–¼>€Ì1Ò‰L§!E"²ÁÜÊQ§.¥¤eÛ‡UbV.V¢ÒRå¬Ky(ˆÿ×}9•OÏ—»¼îmËO4¯Ÿálòj²ìõ1éõQí:.¾?²~Zãÿ/ïßœ¯KÄáÿùßÿñlßýãžï‡ß?›ØwßxV‚£»X×ó;×ÿy\¡Xüþl°J½PF)4iÑC 5ôB9qɰ˜ ÂæñЂˆ"ÿ² uYz¥¯¸ U [¼gK>«Å—{«khßü+V?¯ëo«»…Ö—Å­™³[kvgÌ>HA©dåÃ0YÓ¿yÍ®~X +‰~ý# ÷Û°šz wbFçxt,Ƙ…¡r#^ÃE ‹xÐ!‹É¼lÑ—z¢Zjÿ ¨’î¿°¬É±D#«×d™!>˜±'Õv¸Éu2uG™w;0Zò ÁšnO– n.ƒy‘/Ǩ¸x²BÔÐ5X-'!Û¢mÃâaÌ.U“%EêÃH‰)¶X]á‡D–:MFž*' ΈœÌ‘²Î„…4ïVe¸âpð¼0+©F‚…¦\“™‘èxÇd²-k/œ„Ì”¶>8Ѩ]ápŒYêRŒ“#ǽ³zPl@B-Ž'S¨\.£$_ª[(l2L4¯5¢],%RN]âg3mžEKò`žÌı“tãýÕr*uŸ„(s¶'“¨Û6öú>”}ZSK:íÓ½¸ˆÀ<,I|ózáM>½ÂÌ‚hßZ½X‚¼X†º± ~cAðÆ‚à­á/äçZ†¸X»± ~cAäbAòjAèÆ‚`[S»“5²´¯_OøšÒIH„É®@E$£¥ ŠÆƒŠVÆ@윚rq¾eîœ8ê­iˆ”ȪZ€¼Š£zYÕs"Oôfë9šqËFA°8Òž ¯ÌÊY7í‡Ì“(º,…+ç±Ðƒª&úrRÀ3mQ=ÐÕÇø6DÉû¹›-Ç’4•ýH5Á¦s×)ÞUø{!IâheÿôÎ8BŸ¿cŸáßüPÓ-ÓtoQ  ut¼~݃¦Pu³Ì#Ýâ-3ÊÓ€L!•Ùx¶Huò©‘–D•¾uÉfKà"mº÷ÙRÔÚYónÚOÙ±KÓ-èXͳûF³MJÐC“¼ú¹›-}Î)të æÞ]¿ÞvÿÁ|üç³oªAùÍšµ ³üR%uÌáçߟÅOîT"°«– »Ç˜Ã­˜´”$a©HH”k6²GzË#f¤rSÓ'µôÙY+Ð)¦¸Ã¡³f˜6[bùÊ=‹T<iKÐjGv̺i?ä`A¬]˜É˜ÊèXêAË2“fßBÒEeÈ9|ôAdÐ~ðfë±|&–#Mä0‹Nñ®Æïœ‹`þ›³¨kÑ;ãUú߯xõ×v¤èÆ‘¢;GŠþþ©nÞ™ù#š÷òw“JáivH BZSu¿æ m¡<Į̈£OF™:PI…ÓœY”…ú£ ¹4çþ« ®iõ…ëÄÄÄm ‡O·°É4I'Aö˜Œ‚Pß>#HšÈ£ ±Œž,€æq‹°¤Äx2,CGÖx¢k¹¯.Àq(û¤fùåøÓ–8”Š´ã$>’~i±÷-öÖN”ë„—·j^‘AÀ3ByOMF¬Îj2à‰Ÿ¨¬Œáu§Fñ~§F!µê#;5„ )UÙ©1*Œ»šÓ×Ý!ÄP™í±%?v^ö‹û¿Ö~·p}íúÛôßß©±,&ÑiwúÓ¢2¯¹­N\ôC³e>Í–]B»\º: fÉnÿ ÇþåΦ‚CJ‚2B÷=x”/J;2r*ßewök®ÿètÍŒúS?ÉviíLÇ"­Úæ­ý'p‚ ]¹aäöK¥%–FÆýi¿ùÌöåÈ'r?‘·§Õp˰“i4òéOý Ìöå±<cEÇÞ³)÷Χl6fË^ãA:”ñöçËÒØDg' ›{Wøãoÿë»ïi½#ùÇßþî»?þæëoÇ—_ÑׇnôòèŽæ™ÞÃü¨‚¿|÷ýÿýx­#دUïú?¹÷Ðaù¥b%A‡J \JÑôxíÍÊþC#èÍq‰ûë,g^í`¹!Ú4~QEfú†D:Å­²cÎ×ÙY|Ü»DQÞ½<ƒ$±zT˜ì¡<óº—w_‘nñeÞð÷8ox},øy̓¯ó™—Ù«#ü«ùÞW·ÿ¥™Âu‚ñúܤ§4nõõÏœô ÿmLú®#úë¾ÂçïŽßN/ø”¯:¥¯û´íÿ>ù¯0m½¶­×Í÷[áß™ã~m¡ò¥…þ“ßk ý\è×=ùë{¯_gêñËOåD?Ñ©Üu>ÓMáuŸÑÿz'†Î‡ð% 0F¿1 s q@JòI•yþ0°‚¨šMVV(ö•0kÍiKF˜Î›²J‚R@™«VU&sÆC ̼Ê£T]~©¬œÕsѪ Ç@™Ó .§ù»³E–uÓ#bpf©¬SØÙ«âá ,Fê“ “•çB)sFȧ•ʤ‚h1V%ËD®…4©gÒ`**3G )É©àì(¹(ñfb™J¢A¾h¤‡“ð“ ¤«»}å*"¹nÀ‡ bŒO&$:ršÔ4ÒÊŠ¼RM–ÔJ“FÕj陃*²p.Ly0&#á…YQ †¬œ¾¦éž±ü¨¹»Òš¤'¢è,J9Ù&&Y6™[" FRXëÃUT<¬ÀÝ+fš DŒ˜óñ½†Î Iò˜ï“Ó)d(³–-'KÄSFÕËÈsN‹5œc†˜2 SÆlj‰1¥u¢X}0öª»ö~«£%bÒ½½gJ×ÛuÄ÷æùcfŠôi9Ø; Çé‘UÖ†{JEf.Úó­ž‹IUTޝzþV¬ÓÐÔÄ=ásbÈ*Šîpä©% Í£¤0Ô't$ äÇ«,~°xZhë7 oÔfî§6ÿ,¿“ß2^ÊP•¦¥¢râÕR)ŠÆ ÄáµÙ"Å'ðb²ºŸ¡jôNR‰Ñ1M‹î (D>:&sÈrì^I0dÕU27¯‡Æ¸Ö¿ª0¶Éä u Ž©9C…Æw9LˆG.'Ry¸d65ž¢SÐùÉ 4Ùdš-’ih¨žTDõaDé9bB¡0‹Ÿ¬ž,ʾ 7´ÅÄ'EŒâ\+î^rÏ’|©±£F~ŠÓ øi3væ‹¢¡ ÷RØa‰›ÔŠ6je> šæ€–"ƒ!ˆÊd ¸ß/&$¹ë€³Ý>% —×` V’ ¸ùz?+TU-˜Sæµ4r-}B,(Áä'Ä€HâyMàÛe-—SÆê8¸‘,Iˆ„ÊÈL ŒF^IÆ#Y`ˆs/•B`ÖÀª\ºÕKbÁ(œ×j ŒÁ»N9(–:EÄÈ'4.Õ¥N(cÀÚîF0¡µHé å°½¦³Ej`„ô”X`ç¦A"ª/m@„ Œ=bä Ðk…Q¾@IKZ Sæ„kß®ØÞ…ÞÏÊ)30‘Ð ‹fXR \`îPk[ã8&* TM…)r-0%)7è< Ÿ´|–ªÈuKÖ$lÁi² d“œP'Ì-ÕR`A©™ªãÞ­öd‚%ƒê“ZØ€ÂÆ:°ñ¥Sî?…©[f‡P@©xR/pIÜVÆjÉ chý%ƒý2Ú¯“ܬ-ÁH¹æ½?SÌë|ûMAc¡¬º0©¤R ¯Kr…£4û•²Â"¥-I¯²‘Ñ)çýiJÂæ[ MêR±RĈŠThP!* D!^á,Ñv©ÆJƒ|a®j[š¢w¹ß?Ž2ð»gÝÖ¨ÿæÇùßr¬8x˜TÐHE¥ÿßÞµ,Ç#Û_qôÎì¼ù~DÜÝlç+f1óqóõ·°Ä“¢!uYRɲ#º¥c’ Df"3Ðbšn,:ÎAÚT™“IÙ™À‰Æ«×tœø³À¼oûJ Rb ƒ‘©åO3ŠI.22 ìÅrµàㇻç3©]!ʮǮ¼ýn&µ<ýta ö%—N\¼{òY¥ÄÓ½ÏÆí¶KÎBI§‚y{²@>K™ÐJ¦¶¿²*BÓ”Œcw¨ògaè{$O¶^:ñùûÃuésb¤óÒ7/»CüílúØ33Ûngª-v3•Oþu»w"XMÀ®åxUATTÙN1  â;AyUžE$Ïõj˜ÒE¯)P&'çЫe–.k4<ˆ¬{~Åáí•D2…zÖeßADxÛ íw-æåé§Ûþʬ™‹wO~~ï§;·+Ý]p"83B·Ù`ñ†þÑþ~*%w®âæ÷ã_üêcª´½˜è„dÍËä¦ÊfÙýÕØ¹çUœÔ<·p³ÆL,VãRŒM $'P‘Û"è Äè»xÛdŒeßï^ñ{ƒ°ØÌDúŽé¯‘ÚmgÃJaigžÖ;Ÿ,LöV™Œ!GüGžb¤evEÍ€¨9@¤†)¨gÇh ©‘"d»› ,ÕÛÝ’PÈÕ@+"j`\o'‚q+' “%µ3è0Úe˜`Ž ÂïÍ¥ ¸†â"XŒN¶²òܤÝß,äÑPTykœÔÆ EñÀÙ¥ß.Ø/U0Ñ’ö¬¨ Lb·ÑA£?$%Gû†À…:ºÎB¬fýZ†Ìú,ާ¢ Hÿ®L sqb„¸5ÍÓX2B©zcܺ£§¢€“náþÜ"°ÂXè@$}êàìE£1ÏkŒði\FkcìëúXGõߪ($­ÚÃ2F¯„YˆãqP#È'Ò2ßï@ˆ#c]¸²ýû‹¢+»¤áYåу;5#~”AR;Ì:pa„Ë)@˺…[‘Pþ,¡(ìÝ©R‹–L¢@’ h©mIõ“TÆ}% ˆ¸xá`ÐÌ”†¤X´Ør¥3“ëŠe- $A.Ã=ßeÙäÂì|ivÿˆTÔLDjL˯ˆÔ}#R†Ÿ&"•ô;F¤˜ÅhÕ@T™¾D0 jpS@…!ß÷ü‚Ï;ëù)G,E $9f(ŒMaö¼á1RÝQ!ʲˆõ§c­]¤f”Â2iXFeFã hRdчö„°uGƒÈ¨¨Í :(—×nƒ ‹Ò?^¤›~wí¾©¨ò;«¨½…ž°óïìˆÜÏ£ÚÉ{éÊ·Ñèû!š°Bww¿*_í<&¼äÍT@¬ìúZbýZ“ð „®5²¼Æå 䪅̃˜P†&Cã:5ÐÁÒz10ƒ9óÐ7æ™üÇɬ´žò×ÎʽšÏï»íKʈÞîæü³À÷ˆzÿl:ˆU´é`DXk˜5bK+rõÉP ^$ ‚b9̆IÖá¼rtüÕÊÑ©ò@9J€)êȱ™Hð~“Xë{-д n”CzIœ© JÙ¯4(góCmþÓ}7åv©ó¯Î`óÝpVsW&èàŒÞLUe9[2ùQ%Q ÇP'qr˜)×i‚ÄE'jv•­5™ˆe6öh¿UrÒõ¼¼-d 8Mx¡`%¬ïioR×À¯ÝäAÔ܆8\M[‰)é@‡i,1HåذŒ%¹±u»[ ¥£¼ÚÅRakòUµšÅRW©†ȸ׸̦«Q,WºÒa 4j0Ñ}Ýç Á¬¼¡„Öm‰¥ñÀ K¼[Mªá•ˆe·/9VÛ×gò·2rôaJå‚8•5Ì R¥7í”EÒÔo‘ cHj?˜ùªöÕ¼};ߞU!Úû}žy»¥‰3s*uØAqX§ç¼'’“´ûEÛý¢í~Ñv¿h»_´Ý·¤íîí׈J¿žº;ŒÚ~¡~]ª³ÚÖÂsGÏüɨà²îÖÊ®4à;{yWâì{Sg§È³ÓôÙó|ùDÆ|/íÿ-i´óéóM:'ʃ^S\¼¸©š—ÆyyÞ—œ—ž¼AÙ˽ɵ[ª~#FŤ¸6$êÔÖnî T.¹D‰gÐWÙv>c"­Ëò³ö«X{¾ òDË}–MœM~ÏMº÷ÅWuƒT,Øô2 ´ÕAÑ ù$°öZ*dèǤB~‘!¿ÈH†Ü+µ®\& ‘“¡MÆÌ]hsz-:•½ù|üçãS$Ћ(帘LÂp%XË. “ì Qyo^Çy¤ÀjVl¨"Sm!‚0b—ãpÁ]IïíOyÈó>òý£Þåu¶èú+Zð‹¢þ‰¢.¿{´à•ÄÇÍ ~vòãÞA„RÀ.#øeêCma®Ô¼ØfJnX§6ýˆºo…ùŽ+ìœ~KW°DâÇøz»X°Œ€†úðø9ý:FˆHûûÏk·Zª•::ö?ü~º} zÆA Ä–b-„?M·fºû‚ JY­”oûqûçÃ=˜}¿¿_Xññ®€œÆqœq(¶0æã§2ûjäî{ ñ?å%‘5S y¿ÞyÎèo:<’¢©.¸(—„t+MÀ¯6Jº’h Ítñ¹š¢¶v~Å_•À1îÇâ·† œ „è"’‹ôìߟM/Ñ!+Äè¢É¤VC4IûßåÏ*2N]L@QQ%óœ” Õ,M´ËgJÆN¼P׃þ-ºr.†“‡ÞɃõ„eX˜ûA„d‹¸\ƹÒÊW“4,W–¢±–•¡²"‹Í•¢Ñ›yø cÏr„È«»™@<dæÔ¼¹rƒŒÁˆSH‰³õ÷èpa îuP'hsÉõ«é‡o?wã‚ЙÃv™‚qߎµAYM˜ëýb½­wÚþ˜ e˜k-¸¤¥˜æ˜N¨¦¦ý("_¸ +‚ŸQPÁ{ ^Óè5Jh„¹¤U CH ™üs…~ㆂV¤þ×ä/…¶&0š”„0æÛ« øöa¶5¹!Û‹m[ß÷•ƒy¹ ¾½å’i^çG@2¥nØöb9Þ# <õ*Ap„ŒF]ÝoÀÑçšÿ}-"8ß>tö¦7俉@9yûŽÝ×N®»öáºÒy?›€-ÄŠ>˜Ÿ-œ´‚ÙñÇê/-ðÖZ $dÝ[És4ªdv ®ZKâ~K-°Ù ‘ü©m"WÌn›‚+cµM„έ¼!A“Ù*HDkÐÍ[Ç—f/ƒ"uqp× ½Ä+[¿z– ·ß°ªo< ÁÉÍr"”YθˆÏtØq’ Ƙ¬A22àèP¤§^0Äu×4NÁøVÅ0sç÷ß{çÁÊÓ/ ‚Æï–/‹T»wdó;?šþµØBS êÈÓ+G‚¢¬”ŨգÚR”'ñµ{·ó=4?Fó#¼ Èœ„íUaù+]ËDüþssž}ÿ0Ú™nOänG´ ýp* ñK¥©¡vUã®Ì«ª).lŒØàñ(ZˆÁ+èT¥m¾ˆla9–^^– Š)ÖÄHâëKWùô »‡Ÿ(¦ë­'cµ¶s6Ü[['2ƒh€‘ÏÈ[¿ZM½h,Õÿ|¬@v"òËöpø×Oc²=çP¾à\T6«ò€d’UrH29eý[òë?ÑÀºœûÅeÇüÒŠVjš†à.#ì‚3º MhAI:@Éè`ÂS¹@™­¡j¨‘}Y‚éÔ@±Î,§±£!eÆŽš.’ ]7TTâ›g6PÀ-ô¶ùU–ñ¦ÌL¼‚"6@g UÃo7tdÐìoŸ@îc=æì6HQž1ÞÞ¢äü[ÿÒÒ ÝàQ<œ¶>µ¬Èv}?´ß‘Êɱ¡ÑÌx ŸçøËÌCÆÛo–RõR5BP*¤ÆÌ· Ài¤½Ï@zªîû+?m러¨/á~½pS%÷›CEIk LÌoÀ.Ü…†¼Á5+ܯæ%ægпÛLš7Nâìú¸Qˆ÷–¤l6æšZy^«äŒnÀ1/ D#68>€Õ°Œ×ÍË¿jt²R¦4󦌲ZØSõ¹ yëDrg’ž•—ªäà™-éÎ7û[§I ×R’™VÆÀ9ƒGº\, ”ª±<ý´-XxþêýãÏÖ8O÷?»Æ9¿d¬q¶¶ÎÖ8\@AõÌÇ_½Æ!|Íç!c1[‡bÖ ¤õØ­Z£24nÑÊÄ,n “+]@^·v}:œ£Ò€ÑQ†¢L¶þP#ôjàJŸÚBSõ Ü’ úõ,‰ ޏ¢·7àmë'dKŒ(E»”B•n>ë¨^_¸›Ä圑2θ4ÛÉBN-äÁÀÅ,½˜^ÜS»ª›/mš/lÚ¾í?øUÔtRÔô{—4 1Ÿ$pK˜Úþ 9ƒ*[,AƒUÇN~à†U ,#%ýFŒ€†F‹ h¨‰\°N³p^¼ÀLR©qØA9D–H(ò¨¨3Õ’¢­!î1H¤%S;Æh©K¸²¯×!Ú’¡\Ùov¨`©¥X(Ø¿9p’ÄBè@šÔ4¦)–]0%É1À’¨ò‚*©Ç·HÇ䥔ҵC%¥XK:X°IûƆECÑ©$ªýËD—P /¶º4ÔQc÷Žji䊡L݈Ö1BMjwX·nWHA6ùVÈämx’Õ%ÆñE<©$}XÇÆß˜golÜs³a‰ +—©öŸÄ˜lA°(fö%8ÌLN„Äì¡ÁSÇžÅ1ÅáØ38vüÂîɾž½‘䟎½1tç‰Sºï±Gfkì5ø4wžÌ;Må&òÞ w6ƒ3Ó¹­Š»–Ú¿cÆÀ5¥!¤ © ê"A \‡R4ÏÓ˜—¶OÉÌØ{¸ôÛŠ!{©qCDòDëbèP’é«’"c.$š µˆ;é^§ ÛÏß,Ì+ƒXÁ"µ’Ö7S Ï’uedR%º«¹ñ"‚AåÏ õ¥Ï¿*[¿êÛýxívíʇ¯iGßÏ×ù.`|¬.øšé_5ìëL?¶ñS#$ÑŒ²•áÕQ)•Åj„„»BÁÐE˜8e5Bó¥ìóC*ì¡B%”`éo¦€%u}³,v¯%„Öq _iü< xÜgÕà_ZÂ~ÿödþìwY bûóøKAÿm}p/õÂl“—‘†Zi‰ÍD¾æ)Ê"-]L$vRô«Û{ÃÛ×üHï…dBÂör)/ñY+qu¦pî œ^ZŒÎþA‹Ñ÷ba¿«º Êt¦¦>D£LV—Ó”¯K"_ˆÒÙ! ‹ƒ€Á»W¡Ÿ× OU Ÿ×ŸOTŸï,^¤wòsÔ›Ÿ+¤{&Ó³#»­ñîÖš+B2/Æç:Yþ¾Û£Ïëx ½×¾ ~’Â÷¯Êà‡){ßt]48]~ÿ‚÷mݹØ}þ“ö}"_Âüeî¯(nþºv?{>yûWyûã”·oŠ´¹è³¥íw,l«šÐ0·ë5¡Y¬Í³ü(Åïç¥ïS…ïçeïEï{‰8-DrM1ò:©|—W±{'̳ﱃ¨@(‡,©J¼VhJfÙÌVä,²ð‚ d„ºõªÍò$Z" ¼úÍ é½S3(ó‚1¤Jò’ZD½¦°4<f‰Þ5„0 5”’²Õ +;…,‰`naŒA\Ý[ËDLÙÕŽA¢*V{Gd'kŠÀKÛ¦W}õËê屯/‰,#„TZHÏB93áÓ=ÒVµUHÖÖY\Á²p9°±´õ÷}’û¶Ìæ´O¬’ŸÉÉükoDzîz ¦¹ 2uë©=ع3”wS}ï«Ã'ŒÌ¤©º¿6+úÝŽ{ïA=o ÖìåH~¯fÓ.Àý{¹H{Cùi§Ý³–´lÚï÷„Éßy wôEv†òµÑÛî2!’<ÓüÈbÓD•¿"HjSaµûk…_ˆÒ¶ÉÚøßÿþÏ¿ÿïò¿ÿ%ý “¹}keepassx-2.0.3/share/icons/svg/username-copy.svgz000066400000000000000000003245251276304217300220750ustar00rootroot00000000000000‹ì½Ww*I¶ ü>¿‚¯îËí…>¢îôÌÂ{'!ÜK/¼÷ž_ÿ퀄$œ@:uª§Vu‘™±cÇöæÿßU¿çXÔ'ÓöpðÏ?ˆËúÃQT‡µö ùÏ?^²ÁGý‡c:+jåÞpPÿçƒáÿ÷ÿü¯ÿýÿ=>:|“zyV¯9–íYËt§Õò¨îøïÖl6úÓí^.—®öîG×pÒtÿÃñøøþ×ÿúßÓEÓLÿlÿóÝŃ©«\Vê®ê°ïöà§H¯7ŸÎ&åÙpâ&–Ërÿ±»©V}½k4Ÿôì©kUw½Wï׳©›¸ÈëµÕ·k«ø²íEÐÂãð¶Áô¿öWNj×Kñ͗̾‚cÜuSúW•«õ©{ÿû°×µY ð„Z´êífk¶ûÒ®ýóX a–„Ù=òÏWIJ\ŒÂE»yçÚÅc˜ùã¾ÎRVñeþùÇ|ZŸà§Çêp´vÁã6sç³Ñ|ö¯újVlgU,ÉÆ›\oËy½¹¾ '³ÇF»Wß>Ê=ëÜïŸ74?ß±ª`qQñyp}0øþ—Ãñ¿kõÆÔ~Xûg˜”kír/„ÿXü6QuØëÕ«äroY^Oa÷þlMꀯÿUHÄ#þ©mÁÿ~I$lKs÷íeОM·|Æ=M ^¦õ·áì¤<˜ÚôÿùÇ ?öà`ÿ·~°þñ‡£º‚X°yÕ5.…º˜Åa‹'ð…—Öí¾kð¹^žìïb1èèzä-ëé—g“öê¿£8¥‚?Xøç"TZ„?Pâ?éãoóès³PûP™Åï…?ÏÁ,ôÌ,Ì"ÇaðâßÁ,ç \éø,Aò`yf!ÇŽÍâÇ¿ƒYNï9>ýïmc]:û™ÄîØcŸ›ÚZ˜µ²và#eØØrg °uäÎ7… Çò+'E0!ö¼ gg1–#?ŽWÚÀ™ó`ùYì´Ž•€ÿʹI€ ßOþÌr9Aª8œ°‚ŸENF®|—sÖœGq8lïà"N÷8ŠH€ØÁôÅßcóiS'¯Ñ÷¾I-K0upÀɹ°ˆ8¢AÑ8 Ãä,ª ¡¡}ý6 =‡æ–AãÝÑÃâ ú¶ƒžÃsT+Îâe>Ÿÿð]Îá9h Çgñs@¸ÐsÐ¥–9¡¾ °\zº”³ãDΊ³DäÚ“Ë."û1èˆÁᢄٰÿ}0A}a\€š{\z…™¯’^Î}\ze¶—ækÒëçÓWãËouBL‡ Õ5 -×ñïô”äÝ”æ ÐúÞ…Zæš…R×í(ˆsw/ÔÖJ/¾U¿å« ^µÐ:¯U«æÃ”G×I©¼;ÿÁ)}ìýë¾AÉãy>t Ü'§4\à˧NõÝ[ 4ï{·š}f.wn5“÷o5ÚîN@ßBŸÈù 5e%®X'+×Κ'€÷Sb®¶Ëoo~n‚鬿¯/ÚåÙ.XÈXÀ3mQÇžúÝ4ðˆC~±}îÏmW(­þÞôÇÖý»ÇŸY6»oÙD:ÞnáðÕ"DÁ&£Ñ6šøHµKH‹]Œ´ÑD˜ÎÓô 8Ïï!JÄÅ8¡‡îÀ¸E˜QÁ\p Àþ ¢Í+Ò+cvH@°Æ>¼GúÆû‹.¾‰hqs7Ñ"è¢fâÉäJ’kEï¡¶îh{àÐqi²wör—Ååk@ÁÁ(BñàÞKödËEŒÒè°$Ó”HyÑ¢|W ³LçbrÐÑsŒg‡×—°€ïBx…Á#,¬]ÎÔÁhãýèAfÙݾ¨ër¦ˆÐwæ6S ˆÓƒvifàôØ`ÃPkôÚ<<‚úA §NÀIHåÒæG’¦~Tg“æúô[e¾þ*ÅÍ>ÿÿNŠÛeÓ¥ÑWXô$p¤OvSÀf Z1â„]Ëè3~ ;éë ƒˆ®Ž‡£Ëšø-f±}Ùe²lµgõ‹SyU–ì\Ê Ð%‰w°Ö«lœª&?ÅÂë,\Bé KŸÑ÷[uÙ5þÔcQ•YFZ§Ù¹U¯Þ‹c«µE½»Í}ò sß©@Уæ>ùÙÜ÷6ø>Šó-ôöPË/€ =x³«Ì±—[ßÂGæ¾*8øT èQ¨ºü=ò¬9*£1IîÒ«Ï„Z|ˆ×¨~Žõ ÉÙÖŠ½XÁAM×÷a"¿¢<·ôeë¦]ÊA‚®Çm·“‰,4Ú⸉,Q¬0¨C¡vB(Ù^©[2Êo[Äe“Òo³äÑÇqYÂÃE€\B)á;=QK;ŒAAvSÜX»¢£¿h'.Ë\¿ÍNœ^Äee÷·YÄIt2×ìßî £Æ#†ëmÀâë´ÑÚ*CŒ£õk¹éÑ{ Œñh䇣Ô6H Ûâ›õd[|;¼iÝ¥RʳcÙ;__ÛöâRŠY;“•·5DŠA˜’ciÂùk <Îqy¿ Ú°6Œc8XãýpãÃ0°5ˆóZ?Œ8÷è~d1  §4eptíZX¿ÍÁ?½ôû¼»ƒ¥Ÿ¢yĺÇU{ié¿5¥$ÖßH:½ˆëD ßb§‘ð:è›ÑéTJ`é¶-zï¾<2˜Î˜zx@üµêr øzëóÓ†pôââ‹* Íø’í\`lb*£¸FPu”±¨<{¥íBpg ¬‘û_1ÿÀvß[ü?¸>8 >¸>8αSÁrKôÃPÐ—ÑæL-)•DNjY«¹(á2p˜&C¯€ð]Uë p¢ïªÿ áÄ]œêoŒvSÆ€Iü›ƒ‰º D'ôvXæV8‘s8ˆ R-³ #–æ·ÁébÌMpºC›aÜRJí»X®Ö …yxýð(ˆ ¤l± F!Í™ ·Q­}5IÆL#vþSe'gÚô¶ú~´ú~ô(œ.à“–WÁé+ü jØŽŸ.  Fí2¾ÔŽûá†r}?cÀϘ´£•l~g ­Øñ³ÃQbk9–´äqù…›ïq‚Ú¥(o9ZáÛX E4 ¶|=ZšRfè§8‹Q§ªƒ¤¶ö–MÎ9“X äu:ñ,ÁAãæ–³D ìr°ØWqäCPÍÇ›9ïvθþ€¼lѯŸ”¡–Mq”e›à œ– Q»Ð;ô@º¡5¹4Qäåè§pf_ýtGŽQ—Lìõuš %fçú>­¾=GŽ)ÀÁÃI° þ),ŒÖ&p|\ÛØC„‹[7Qcjèyj¼«\{˜ls¼eáw;* ¡–Ó{SþÛhõýèi0Áá”p†l×:rô¾ Wœ¡«ÂÆ*‚á ˆU 2<×:ˆ´(P3Bo„Ó÷ˆÙGYÞkðßÇÐÀƒïà OC†¹8È@€û3<Ò”ï:C€ ´Žšg÷J”ùÈâ¬K’´”ùbÑ©Ó[Å¢w€ÁR·Àðé!`ð×—«¶Eëë·®‚˯‘ŠŽœø|× À‰e†cÊ·K—sür%û„1—ÏuBÑqÈìbÔ?°oü~Evã÷g*K)rçÙÑæ’ä,ndå?~vPÌà”*¶â¹V~ù„ çuÎßA€ìì ÓoBÑrA±Ä]rÑjjg°Ý$§ì#?DˆþQü!Þøœ}ãæ˜æ¯ƒ‰Ê &‹mÜöýzÕéôêâ×Ï© wFÊß-뇫~ïÌÁ¸Vm>¿‘|oÏ×é6Å̾¿§P|gfØ-¨ôw”ïM,¼—.É¿¸|gNê-À¹@³_éÞdçNÿCý‘%žÏDÿÔû†ðK¤øwÆ» &Ü‚!—hñ­rõ{ééd©©T­ÎXKïMéºZ(óÍÖÒ–øï‡ÖÝu^nÖ%ñú&[ü…9‚ÓyGJz2á ÍÚÙ÷)¨oRÈ·6:§Jz»D†¿«ú&ví8‘ìdwß8_ÞíT¥SùS”‘KUÝNÔQº»cý˜'¶)Ò·”±;W¢2ëÒ:Oƺ{¡ŸÚ/¾½Ö|ü–…¹³VÁ¿+Ëæ3sŽyä=/ÖÕ ÿ¾¿éµ>&о½•Å.AïÊÒSŠK =UðÞ…scûŸK…,éa‚÷ (žÈ…)ïïHuªå6ÎáìÖM˜…~n‡mÑï¯éƒاÞJ]¤ì«¶ž\±¾HâlÅòô«‹¥JOUù½¿îîûŽ!DΤ‡Á‹á{z{ƒÞ¥mOõ"ò»+Ú”÷W´.x’Cq‘CþªÆ2D|&£ƒïª"|Sc"/ÝŸB>ó)ÿõ­Œ¼(žé V,¿eOªåj­zDŽ8Èñהé<ìÃhŽäà ¾+0RÜ~¼©ê¦rn{Œ:¬¼îÒJq4Ø…HMâßWæ¾(°êª!ú46Ý\¯ÃOÿÐòbÓ¶zµ^«;¯(…`êåúÙ­?Xõª ïy±\¥ Òñé ¹zgsdN½¯¹LæêŒ³ë¦T5ž#S~G½nŒº¾¸Ûå¯ó35§ßÕº¹®Þ…ФAÎðÂw•].×»ø¸Ðï,•Ȩ¹§Êu)Kr-íÐe ¾ ýQZ E—Fk¨dÆb¤!Šüª$hîÉ1g.É)coqóð°à. [¿ÚY;0»¯÷ß«$"æ¾Ú£P@ë}–•ŒØ—Za@àDïä·-;ùÍÇDzk0™Ç¢ŒjL5 h–FC=±&´þLéÃoA™ ¼ÛfÇà´­´à¸$ÜlkÐ̘«‡pìºdGÉàfŒžƒ1Ð ˆl?+œA;5 `F0Ä€ ÉõƒÁœ HÃ\!Ê5cß]óø.ñ‡Ü“˜n¹þІhЮéÖân,!mO²¶p‘D+—A*Œ±@˜·¯@'†Éw‘#F¸ Ú·: úè>+LráÄA?àaß ¤]¦Æ1 ñ»±ÒΆ`rA0Ž2@øò@¥ítVûÍÁ `Дmß“eüB•…ÔÇGÒ€N€4»ð›ƒÑÆûÑ÷i6¿¢`&€éžÒv.¼AŽ–Á JÂ0…Ns;p c¥ œ@A¼Üt´þD¹Ìï Dv#䣄ˆï#6 fÔX»x%0!”¡} Æ6|€â;®r0zÛ“˜ˆ!ìˆ4nÙÁ1v¡Æ„ÔÛÏp㬖1P€ŒƒB5ûþìÇEjî*œ @3Jºy˜E ð¶ĞÓz¯9û™*Ð? y,¸ ÿŠé´ »#*LÉÕ\ý¶€9Et(vúúw :?ÉÀ¨u—ÀüïÆÀN CÔnÄöo ý¤$MÉÇÒð=Âù¯ÐÄ.÷œ±ßJûQNF¬{Ù¿ƒUã¸%Œòw¶„ý¤Ð  ¹¯_È}’ïÒú¯9Qw©§ÿÆB3¹«–ò_+4‰x7+ÒÎéÝÄG»9¢©9áþÒ¬í¢`r¤vœäó^ ‰xÄÿ/Bÿucü>È8¶Û^ŒÚ~Þ®eWÑæ°¬è÷®…}LÀÛ­…ܼîv1¡Õ¶"Þö˯ZÍÇöÝj¬{Vä|[ r¿ üœïBÛá:Æ™þ±u}̣ݮË\µ¬tÏ3.±ÚßF½bm¾Kë#ÖñÄ™–ñþɰ vtúÎeüêU?þêVÃz2ZíNÌ#®‰Ù umøuðóÙEI¸ cW3 ÛÜ”ÐΕu>´™h)¯ªäó•“£ï~€®^.LÎÏç!ߺÞ_õöçScîy{kWéT¿ê™bûÊô²êrü]?f¦lOÏͼóçÁ+Õùdšß ¼’ŸŠ®„1q<ä# x,ë]”ʼnœƒ˜Ãç³ÞG'})âG`!ŽKסÚvs‡)L ž1ùÏe„aÛ¢î–]ËH(…©KRXT‰‚nwmíjAj—‘£ ·¥ ‰Ëâ»^TÂ\œìÓVF«ïG?ó/"Œ¾@.„‘·fêbé5M™ÚiƒD»°BÝ›ø6ŒçRqøj©+Š1Ù`a.ÿ¤Ìº*Ëí+LЏ€9r"ë–ìâ”h|!DïˆU.ÚÍ> R¹´&¯ZÉÁàM+þ(Aý=·Ž“ …?nܺ¿`ç“áîXÇ7“ÃÝ’o%‡pêíæ UéÀ°=ÿ»_z-øÖÚ’þe»6kÙŸÖÛuØÿ;©çíI½XÍêƒi{8€oÍf£?ÝîÁÔU® +uWuØw{ðS¤×›OáØÍ†7FËýÆÖÚŽš§zãýbìûÿÕ~»í_pÕz÷ºß ]Ÿ0Éåq>ôãjÏW^ñ¸‚y³NóEûÌõiàÌœPññå+/z¤¿Ì²ò•W=®—ÿf“¯¼ôq5ü:›ÈÐÛWjzBv¦÷ ßüG$ï£b†¼®;ÆXí¡góý"¾š·‡!Ú¯ ‡÷1ŸÀr6ŒýDƒËƒÕ7Ài«÷ý:8a–.ë3]õ3Ý)˜‘Þ );þDN=L¾<ºìJ¯\ížÊ5?2ߥä¼#óY—–ø™ ¬+@ñ» ûŠÔ¶›ÑbüR]3®º3u ¾ÎáéÅJ{×+ø ˆŸ¯´G‘»ŠC„S»l)zxñ'â"Jc4п@{ÆzÀŒ l„GCÁµÀ8". Á^x»bû Ñ]?ŠmX°8%”ü¼¾§œýØ >2‚[RSÿ8Øð#†ùÅvÝ?šB«Ä»W½¦eõÅümònÊ‹M«?cîAð؇Ȳqg¢Ò>ĬÆ\Ewض¦°Qöµ4Z±¶–‹I횎 ‹å©“(Ìþ:|KÌÏ¿&­õ†ßòÊTý/tø–_OÕÿNø1ØðC(âû@ÅsFr-Ð n—‚5vç;ü$±I މ‡øƒÀn%Hñ ãêÊ67Yø¥VHWŠ£äg«}aX¨1vÿWìž(±Ô Z"¥´”]«ÇifÉ]¡œ9ÙÖš0q[; zÁì|mɯ+èÈIÿP„‹ÕAn­‡"m?ËOÔC9$ÿVôÔ…:ïWл¬HâDßYÿ&¼ªÒêŸÀ” !Ó¢~¼´4VreC¨AŒÙ’X†µ¤5SKrþ -»ÀíÃ#g uY·VŸü¦¦|W ¦O’ nÝB.ÎjQÕzžJ”ëø÷Õ Glü?_•ØGt%¨ÑØäÀÚu•!Û˜è[à’±á¦RÐGà´Í.ªÑ_FvQþ–Š?Vóú ÀODÚi9 zK=HMô@Áưg4·ÜÖ†^l`zsµë3çâÑß«Ÿ ÑÐ o›ÝYØ}A³‚ÔpB?Â@¦º祧]¨ÿwœrªš }wPIèÏÔ ýK¨¡Å±€ýžRia[ ’?µö.AÏ£!J50x­^“˜þ>ù¶²Ëñ 爜/ƶž$ œ˜ª ÀFqbKÂ:µ…˜Ôe@ÓÔvóŒ.¶CÑ›´Û­µåFÝStä{ŒKÕ³FŒ&Ž÷&´ïÙñLe)î*²q·©å› õ‹*lI!ï¡ï@´)¶×˜cÊAÁö‚pꈶ¤D#„ìã …RáÔSì‘hRóO¦Žß<¹€ug™مً¤Ô®4³".¹í> °“orÂß&¿`s!?‚HøŽ—­Ýj&¨Æ~+T8”Xu‚3ñ·HñèÜCÇ viâZØ9Þv›nÆbS†FHºMò&X;AÛˆ`—,ì© ¬^€ÔÀéïŸç º‡ncŽ»RÔèýáB² È.B„ÑÀôGÎÖÏ‚FÝG¤4ÌúšGŠqóH–8X¦DRó3Ài´{³úÄa[Ûø<öʳöpð¸‚õLŸBÞíâ·?1»Qß+{åJ½·#¥FÝÛ«jŽ þï?ÿÀÊ˽ÝDÛ!fwDìkuɼ7kzkœpüy8ŸTëçQ«]=Œ,·sµ 4Ê+\¦^«_ç*‡ ?P¼ ÖŒ>ëqìi¨E9L_ç,?6Å ‰Ã3.‚Q`í”kŽœ£°«nü^`v­‹ó`¬öÚ£tyÖrì?œ1Îì/ÁŠ)oáÝj0³:Ÿ,ʳù¤¾µ&kíü÷çÎl=ªÃ3ª»ÛÙGÛ™dÁ—¾ƒqàÈâ[Æ ÚQuØ¢4£ØÏŠZ”IÇ#è¡ TƒÖÁ\ •sªj†~¾ÏÕƒDEiÇ#ö‹ÕòfžÂlÂŽ ÕÍѳç~°ð! (SÛ€å À} ±¾f[»ñjµ½õq¯%ß«¥#u eø’@ ±%äþ­·¯ÕsØ…dPÀG±c÷íqÿuóŠ4oÈ¡¸±$ˆÿ"Òûs>éý÷½'ç3ó{ôí¯“y¯þg}QcCŒÉ°[ðê8±ßÒ¯SÖ“逿JÃ)k¨<ŸNÛå·7Ÿœ™`:«ùë‹¶ýX¤ÿ µI ÝÙÒàÃIàòv2û9’àØq+7¬úu!uÌŽ?8EfÙû†ÂÛýt쑪®®(ú̘ި6Êgâ‘È»—e_%±7 !v¼Óêl†Â‰Œ‡ÓåRZ˜ ÎQÈàBì„ÌÃQüJ·MÚÉ|"ìsÇ”£›+OôFCÔ/7­8h%qØÀî"stÖzµv9&íx“;àìè¤5f®Ÿô¶ Âq<ŽËÓ¡ˆÕ/O»üŸ3̇Úÿ¿Êh¶/y’ZRC¾J-m~„˜j¶“µZQKnÙ…R ]Ùb0p‚¥POÐÒ ~1.ck˜p»&È™˜ËN™°{vJ8Õvosà T"ÇÀKm+ÞB\4' ¼ F™Ccí ª°ÑªáðtÚ•@>ˆ\„¹,ÉÑ)©% ¢¸A.‰tŒ: &TáÕX¨.G§aÞU›Ðå·,îÀzM ¹"èq‚ƒ€?+A`>P™@7(hÓ¯Ó=îçÛ®!G”JsW'¶û(cE1`¡û÷}ܽðv}¶ÛÈበ”L4!j í§æ${˜ ©­Âb*;(jÐ_©‘¨§b_K% ÿ¸§Ú-ls xØÙG…”éî_õP¢GìüVUMí ¹Í¹¸]UÛUíçÛ¼X— D &Š»¤ÔìÕlF°e;·C#? ¾ÓÐÞFïGÑ-cØÂæ–êôÇ2Ô..”1 èaûÆmÊ/@6³´ºTµçÓ5©`†Øé÷È%æÃ}…oà|ƒ±³Ú[vž:³à#Ë"ãÒŽq»‰Ã: „G_£|ŒtSbgª ìáUâHœ Äåœ_7(Ç¢hô¶ÛH Ôóu|”4;' ȰBn1ÎÙH|õo 0ä컬!EþÅSs?Fvºg­oéøõÑ.ð'­ö?àKÃÄVæ³Ùáoa{ðg¿ ‚þþ׃°‘­æh1`M !>Øh…è%Õ– »NécçT±ã@âßM´Y±SbõٰÛ³l±6ÂeBâq$‡øhpôëúÜ”5ø;Ó¶ëí²¾œx} â–<Ú/IXêrŒ­bÊ-÷â J+rÏ‚¸$[Ñs§˜¾~²ßý"ÐuͨʹÎxo@‡ ¯ÚÇcSžàAܺœ@ BcÐ=i kë·øD'HS^]Û&—÷Ô †¨Å!5Ä{6Ž>N‹v†ݺ{0Š…Y•€á'ýV9U§]`ÂNþÍ\äôЊwk¤Ußi@õ™Hª¿Hª$Òæ•?i3ëÿDüu‘W*sM"÷õîy˜ðs"÷Á ùÜó‚ý+È)÷<èœÖ}þ÷ ”«'‰ÑpÇ6—YÇ‹»Ü垇Yõ·»çAW=•k|«{Üÿ÷¼ÀV¿ÿqÏÿÇ=ÿãîyÀ4ùºçÅM†ÿ†îyÐp­C÷<,‹^Ãeèñ»·»ç±ìÐßÄ9¿›»¼ïWŠ7) Lêÿx¦ÿM<Ó‚Ô(¾AsàŸŠ\;ËQò[ݹ‚Óë+ƒ}ƒ;žwÝázw.(¢Ÿí÷¹saÊ/W‡þNw.&tßç¯ýIªÅý/ó?¾Ì¿¯/0˜ßé˼íà(r«ÿîeÿñÿýÇÿ÷ÿßÿ£þ¿7—ˆ¶h$Ù{õ(«Õ±7·Ÿd[ÇÛÎ3‡Š0”ºœ|vá\¯“þ¿O¾<‚èö9®Ôy8ÛW•Ï=ïÿ»I®â†U•º§:–ÒQ»dg‘ c˜§÷8÷ŽG„d_‘Am€óZÅc{z»Š=Êo@É5µsÊìbH¶•ÝÎój€½ÒãÞ:á ¨ÖLå£EÿšV=0ã ¿Ý‘ïéÝs“@ð£Õ•`Ïïi{ò óëž+ 4OឣgpÏv‚Úï¹`6í»î8hJÂ.~aï¹ÆBBòݦƒü$]~)-—zRW<²?Ux}õ1¨ò zUˆ/¶×9µã3^T ^E¨YÚ_ÎÓþÙ#z˜…þ(ÿjéMU.@<|T_`9˜A½]ꉜë/²œo±¶ !&Ã)uµP­°< íB!\,ž„v¸ÃúRøÉB¹›€R¥ Ä ­v „îËqQ@K£„ÞÛâ%ö—ûr\ ËTÙõél[¼æ FÚ}®³Å!QB~‰Dõ‰¿#(úŒ§’iÐ{ˆ>áM=æû>œZ~™ú5€ú}®ÿz0ãEê÷-8Â÷#?Žu‹s§‡‚R?j€ ߃ d$K:Äö>Û:L ß·l6¨å)º+’s0Úx?:±æI·]ίG¬íš (h—xÇOÁ$oY‘'"H4ç5ö1‚ä*K’u"€äØŒ_Aä£R·˜u“I¬ÂN5=`0¶Ê¯)µµ0jI ]'h¡WÀÓàOè„Á¤ nXXÒâ’H 1£–íFÁF4;ë€Ka‘Q‰Áz\Á)ÒÛÐ4ŸÍ'A¬AÓ<…`7%‰à;©‚°#Rû(UÐËBÅG™B¼‰§%ŠÅ'yâ@œØ®}ÅgYÐ×!€åÛ¾?¡ñu÷+°#ù¶+%X W.·(Ã`>­mž"{…˜Í·ƒ˜ÏAÈ%¯‚ñ­ùMÀ&X&âA‰^$à"þ›–·Sœ|CÚ$¦Õñúv€Â?In™¡ü¹½ÓÐ˰[…Ý“ ½˜…¥—ÅfÕB? ê^í ½R¢0AË#M¦}¡Ììz¡Žn«-Snq¡¾"\àROˆæµjðŠG"® Êä„Àb@À™È;Rü”Èbèñht  ”}Œòþå>MOñî›Ìv!£; ob‡0 &ú’܇ b' º¯=¥z&ö1ˆ@& =¬=}…ÙÍ^Љ­š=GšZ£Z©œÞŒ3©Ðâ sþ¸L*¤yÔï¤RÅ€ÁÈW©TK‹ìèW©x¹²Ó"wR)ávnÈ—ô0òhޤ@”ôœ›õ'ÉäÜ67ÿjÜÆ¬ÇSz‘RÇÉÌí˜m‡Ïÿ.xm·¦ùÅXmGÉÿV8]ŸN`ôM¶…ŒÆ#£@ü~U¸>rwŠ2ŠéoãîöjNéGê¸É™×¨"Ÿ2d %ÚŽY½FõR' ëÝÉoÁkÁ™bËÇ*r|rûa”6eâ¿ß-Ñ7”pÊЗ¿Ë©ihÆÃo´eÙxº ¿áð•ÙqÛë¦äLñ’Ïë¦ôSˆ…ë8ùUM—…3P²¾Dƒ¶'ÿ ÿšË(~ñÂÑ´Ž-ñv §TKƒU¯ Ø‘…½ò Ê·ë8`:°¯`:×ê󺳨ê/Š&þQÇ“‹”¹/ž X•l߇rÿp4Q¸˜†«¤ev<éÑ; @î’˜ˆE°U”Úå¼F; Èd 9Ð/IYöbOÉDTöf‹\'gQóx<¬ìh×éáH‡VlÃíœÄ½›ãq—‡eU€„ÉmÏí¹àR¾ïµX0vÆÊò ëѰûë HÙEùkN;‡ìÍ|O1®ÚŽiy³ÞeIÛº±]·Ñ‚Ùaéë&êKëÞU’ÿ@å´¢*vù+Èú£ÀdµË¡'‰¹D’>lS1`»Y ŠÚý1:ð\3Þ,Ó¾-€R®CVí\+…,8¬QaGwigjgvF(aÛ J¬ª°ÍçÀwi SJ\LXšk;ŸO®Â,n@$w>¾Þzè0PLq|ÐA±üõƒYο o²ž಻s¾R=w¸å‹Ò‚W¶ÞÖ—”8ŸG” RQFßÀôn*É(Ø—3°wIX.Ò/²éRpº¶?$d8£kE`V !lºŽÔ^i<+x6Ùå.c©0{[«÷fÈw ? ³@ì†} s`>¦É`Z3&}0¸l›½‡¿*8[>‡ÂÔ=ÐDԃƩñj‡üÂLx ,¡)†×Á1hIIx ¶B’Â'PØxÞ ÔÂ`âµr)­»ñV©¨6ËŽcf˜À[`9ÎGô.‡««ò)Îþ¦^4qN¾»ºFl­%ÞÅFeö³n4µ $<ªÕܲüe­ã–Å6 o˜²fÙÅÙl¥æ`u ±—t­º®VúãÇôúWD1ñx\Â9šU•R£˜züBZý¯ö{Þ{mÝ8|ÝÞ£ÁNì=6€W”ß{ƒm»Û^ÞyÚåÉ-í„êyûÎÿK~‡çvLÒÑ}¿':ï†3o«,LñÝÆJÑœÄvû~8ŠmyAÝ!Àx¾bɰ—z®N¤ Àž7Ø-‘yÜö™‘U€•žžñ⦳º?pìþÿô°ù= ³ªXdëáí#Àxwý‰ÜIuv{Ù½H÷ ,Óò ö¯J{Ö/¸!¬ ÚÅágvü÷vüoþÿÏõr¿WŸN³ú å%Çh2\´kõš£²v'õúþ‚ìv|êªAïy|7I¼]­¦õ?ÕI8å¢L»ß¦XÒ¤]™#÷<¼©Ý/7ë¯KÂdŽ×%É]Nš}É6#Ö²e\ëý)©•gå?í‹ÜQ½ù?•ò´.ùƒÛtÜÜãÉO àÉdüžçˆÇáiÁÀ*àuëŒ'œñx<ÍÈöéÿ¼ÍjÐëözº^ÏÂð"pe~zß>˜9èY"Ïò%äõT½že3lz ÑLä)è+"Ù—bÔ_ 6öÔì>gr¹|,$¥l†?‘Z«Ô¯ÑV±œÃ—eð XæÇÍlG&ˆ¥VxQ”À7ðz›ð&xc&â9˜<Å'u&›…vÑxq`UJ^G33óÑ›óaxä\Ç&y+YñSobZ©°¥ä«˜wº‰º§5Ÿtušžq¬©ýÎeºý<…uÍßñÌUV”“P‹Ÿ§>U.”y-’KgM•&¢é§2[–¼5‰ä¢ÏzL§€o05½©3–4ÑÚxA½ÍFÏ4=á2 7¥»™’G'm±î¸Á³yå+æ*©jº?^Åc1wXRg8/ñp‹<ùÊ·h‰uƒNµZô w9âñÝÐÎðrR™ê¢½pÔE=—›Eçòù¹ð=«ˆ©O:.3/±PȯšƒiG8S~:0³T¼– Z¡4Þ¤RËçI§7oú…{°ôoøúi]Ì:Bù­E6‘n·1zNzf•H®]XÎÙÔZêj£ÿ©e:Ô÷¥“¡gšÏs®»›EF­x²1‰(7V³TÏöIÜïs¼¤‹±Pwm’†æ3E®d3Š’q3‘ò‘/4˜{}%í똌Ûãô ËáÙ€ÏyÊ“®{<‰›/Ú*™0a‘FCGY“iº—ÒiÔ³jEÚ^ÚJ L"ákMŠÕ*ÏäbËHpUI>--}2º›iOQ{e>™¥EÿD ´¿pTÊÑÒ¦«©Ó;ÔG­uË=eåpÍ»¬R¡ðì©Ù§ÂË(ó¶kÉ™gYì˜I·nætמ“%+o¢?‰ˆ#gõσy³ØmzZ$µì‡#/…ÞSC,7ãÀìyHÔ[㙟yóå:ž.Í ¥Vg©¼ñ'· ;ƒŽûeP}â›Õ&5q¬‡²ÜòûiÜSM.G‘Í,œ,„2ì <O;$ÒÞLâ£ÆžÒ>¯…á\,}Ãç\büÒ]­£µÚ²Üz~éŒMc#¾_5&¡d6FÕÓ$Ù-'THú`µÎ(oÓH4‹}_Àt_¼Ô™‹¥‘X½“ŽÍ'ºÏ³N·rzœM^qÓp ¶Ü8*‰Et³šûÜÝT¯™,D=º—Ï5fŒ>µ¦åX1L³yCú½j¹»^Ù+Z›*© £Ãe‚äVÓðJ{š§6£èÈr^î„× É6ùNzÚÒ/Íx$ší½T"“X%G Óø³7³²’þ<¯ˆÄÄ,›Ú=’ý§vs$ž›bWy…š[{鉻ôRÝÄs²Qždš¹xŽm6~w1ž{¢\÷Æ|ÅapYè$uHkj¶ö·T7ó͆ë亽ñöM+Óçü•±ÏÑhtœ~ÓnŸbãÕtÕ Ñ`Ö—Lt; e­‹ëx$=+??ççÕLª:”˰Å_V´[ëwKÓQ4¶ôät¦›Y‰áj­9ñx{ž©Ì «¦]´b*šFXm³Òù岥汗då%_Ìâ‘RØÇÛ㥤QÉ:Ù„å[µþÚ j9üž4ñ’à2\ +Ïx’ã`¶¼ QŸÌgýàj•dµðì™vÝó'*T’ÄÂÎPxRó/3ÎçpÌR½A¼¹Ì?÷’Ó¥c%"ªäÄÝ^ 6Ò×lÏxÚë[V—› +S1Ì‹˜©ù§Þr05fëxaVµè:WŸ‘üŒÃÜ.÷IÓÓdoi’Ô,[TOµ¹˜NOÓÌí‰5+Ëð´×¤C’‡æ%OžÏÆÉQyDÇ¥pÅã¤`£6Ëúb©"añÊl8¨ùm¼­6ë ƒZ1j)Œjîñv»¥ÑóªÄX¹‹ÕP½„ÛzkÐZui¬P¶†á—v!è?G›âÙêLRÓú³#±ÉøÔòÕëÃ@­GÒ±Ibé]¼³ÐXÄ’#ñW|°Ê¤Íü:p†œñ2uýÞM7à O´\á¡®U¥ªÊÔëÌd `Z üc'v}«®¦aµÌÅ‹±ùs;åŸs¤¾¯†ÃZ³H¤7+î{*q¿¤s•¨æÖ¥ï;"i+Ì1›YPOb–©äûc/ͳµ—B½>È;‡)Tbž {‘F}#ºÉevÅK<]“V'ÜŸ¸—Þ¤öÕê)lÜ ï!™%ýã|¸° MèÓ‚öò£R¼n͉£9JV¨Õ·’EÒ‰ ÏrÖbþn»áO…Ÿã•]O× ÁnfOÑçlip/œa+àô¼Ìó­Q9ÓêjìêFcÏ™™l9ªdº-‡‹ëJaF{~8É™¥É--ÓÌÓɬa–«èbò%÷yý¥~j€dì4«Ri‘ ='e쩲8ð néèÎ+¥UÇOŠÓà&š)ÅRív)1ÊÓA¨",M…pze9—«1w{žI¹£ýB!îMŒó1’²Ö}¶šMHƒ³¨3wÌF¦:*Ú^‡RáY¥ú©î÷,³öZÕ:(iåv‚¨˜¿´ŠA™·¬­yß) ËHþilåž^tÚQVþQPçS©,º)gè©É6U$Qâùf|’èëвý\™YÞi¸0Xô†|š‡½YlM?‡žºÅ2c"òb¹µØ:¸hu:•VÂ2­M¬öúŸŸ¥A³èO‡î>ë4œžaÔÝŒëFýe^d³Ëø|K·Ü‰I·w³‘YÇ÷TͯSÅx%Âsóõ ´%–ŧnÙ 5û‰YvVs¿xüz>ŒøGȴŸ:”´ÂΊ¯k˜6^íöÈ@¯×¨u ÐlÕ.×ʫզˆ)̓֓':íܰž{©Œ'y«šòôji§M²"²EÚUfÓ2„=)Gœ·ŸâM^¼˜™)‡³ž9k·Ã2׌¶U47¬Î´\ ³Þ–¹uÙýؼçÕ%_&ÈÖåÞ4Ž Uÿ¼µ~I8f•reã­Lj•¼ ûG¢E?S‰<õúV¨Se- ˜32à Ý{–éO {›Ÿ“Ï¥'tèwö„£Q¬ðt!´¤é@Ærwò£ù@fW³p¯Ükg€ÇÁž·òi1Æ5_ã%^ôx<Œ¼d“IÓ#,˹ltñ¼ðL‚Žh¡ß—âžé:2LŠÄûTf#ö;ç]‰èzÍ›Y—WóVºáï AÈ4/a“Ú¹¨oº™@jX§_|^©¶V¬àHWgj6ZV«Õt¼`^›ùÖ³çl8K<<²È.ÓÊ´æ Ž³þyR$R¾ÔËè©d‰|¯™Ï¨\}]ÏRó2ñ÷œ©µ#^iæüm–äé‘È3õRy ¥KQgwµ4S_¡žéw@ÿÒ@=òÅr)¼KTç3©‚ùV·ÿT‰Ð¹åäå^Å ÒÔÚlMOD¥œ/DO‡Â¾ŠßYÁg_ÖþZf8Ë=ÅmW|á”g‡Ç¸7r8–sxW>ŸõÂÉñ‹cXŽME(æÄkè¬Ù&õ°Z Ä‹¿ƒqx锽B ýÞ~|ö\Ì‚$¥¼+í¶x fEr^"^-°ŒY‘^d’öâÉ7BÍ‚ÇàòÁìy6,7—Nw$Ì[gËñÆu¢ŸŠa méÆº›õ.Æ‘a••OóÍó*¦ÏÑÎt=ד•à¥çâp¬K!l“U°ÿ¬³Ùù(Ÿu÷VÓF®3vÖT0å\ufNÒf™F=Ø|Rñ‘¡Õ^-:JMóŽVî¥ÛlÆõe|Í^Æ¡n>Yˆ…Ë~•h̓ËtÇ»èz³ñ¼±ˆ-FÒº˜ž·+j¾Øãô€HW eÍRÁŠE}H6’¥`}º¨y|Îr5´ªÌi·PŸ¨Ì°Úi²vÀTú¹ÖzÜ(úúÕD`Õzò—ºEÞ ™”X5µÓ³òTœ‹©˜†¹I$¦ãaÜ—…*þP¯ëÜôò™Ñ¢›/Df[ÀmºÎÓª:›5óÍt•È·:I½\ùÂÀ®A¨0@¾‰£ïÅòÓlßäâ5OK“ÊhyR)ÐãòÅö*¿)Ó§F‹Ó~¸T¦áI3: /ínþ¥8Œ?õK<9J­´“Áûejn‡Œ¤#ò©›¤Õâ”›ªx^> êyg¢¶¶„ð«…âpz•*ý¼Y6ÅÓ¬Xe(÷B åX²Vë´Y=Ž–˜¤¼¥Ò¨Û¯Iñ%µœ†y ¢iebª‰—´Ÿ––%OÕdÒi/ÐÇr¨3wvܞȜz¼€onÑí5ãE= à ÎRŽÜ&ÿT뾬^&Å…îc¦š"2óâ,>-ˆ|)òv½ÍJsòì57ð ‚rX72´øÍzÎ }yÖH†:E€™WÆ^¬ÍðM`Ö|I¶ÒÕnÖ2]?ô\Ì´–/)o-™š”׉ 3ëiÆ»QÚ­'3Ká˜BÑiÐ2_OB$Ü–‚¼DM7Àf.ë—š_”ýyÒëÇ^è&AM+åí­ŒŒ³°1Oµ„Zx^¦¡¡â5Ç2©³h)c²ß2_]ç"3T‹^aILæKd­t·™ôãe_(•ËE¾Ñò7¼ª–ÐÏÓagÓ¥43¨…›~:6 g—Év?BØË<ë_H½ö<÷´¬ª®*ÐL‹-‹V³•h.ãžA„×u¯W˜yµ*§“ƒN1•v²¹G惎vqõ ŠH;ûÔâÅh¥céAêÙ[Í-¸àñ—l!7žL­1óG[>÷BÄ…$+wnéîD¡ÒΉº {(µH9숡ùŒµM+ñô¿F$œ* +&^Ëêf§OZåú"—Z{zSPÕf\m˜?µîšQ-[ÏÆ£Cg~ºê‰F.ÐtÔ'ðî©ET®+Ö¸ñ줛ñ¼” Ô§é°å×ýh·å ÆØS4ûRyò÷pÒÄ;ñôd4š·¼ÑêÓê‰vãréδ#ñäfžè*‘ñuǹA¶šV¥…U{É£AEÊÅ3+‚a7#ˆ£¾Á,›yT³é§°žI%›+‰ñÆQs¹pGR…h‘ÜÑé\Í“›h­/JšÏžÐŠfJùÒS!ên%¨òlîf"]ñ7x68ކs »­*AkݬgªOsEV^*¹t™D›a=é±x¤×ÉDFYÈÌ= —vªÉp¤Y®y¤¬•ÎLV—Õ|g£gk¨GÏ%4R ³)ĸZ-'éz3rRl<+Ïôªä÷&RÕåË0Òä˜1ÈsQáv„Y§ÛªÄªÉn!¶™MæÉA¢ç;³¡)á¡f¬Ñön¬ëÃþ~0gõ×›+¢g 2?H´’¡`0Þ( Z4éÐaí]œ­â0Ëþÿœ7‚£@¯BN€ðâ°á2@xïÍé—Ùl‚‚îßïW‰†ù7ˆ]º;u NåÑö‘— ròþñS”ƒÛ—¶²”¢%øåÄrðð›)0XIEÛ'ˆèKÆæ É‚Væ±ô·ôñ'jpl­°V]`Y_f°1ü{<†™*:-Ì"/×Ú{ø€«&2¼ßØžÞ=g‘ÀCv¾Èß÷5œÍwË|m¢2&:ŸFÖ[Ž&N/mwá£ýXÿ°I¿˜ýI×*UESÛ³='¨ÿ5š24#tš_ˆV:¡¿ÏU"çU BÝ<ÃÅwC;è^ÕŠ+„– Ä™¹¼¸”ck£ðzjB,Å<MÈõ¹TöÕ«ˆÖ÷ßÌC/_ `x3;PÞ©Ia1ÉÒÕ[é‡ï.Ö«+Í#¥Zú¡²Ï|$è‚ß$zä{°¶”Ö½\ÖŸCÛ@>„ou’-=˜E°ÍîŒ2ˆ}q~˜ò|™LBò èá2ò—דߴýö{ þÍå :µµØjôíÉÏb“k¾7Jm‡q’SLç¿ØïËàu]0Ž9 C” ½ÆJLmW‰ô«ý##`&-4ŠH‘®@·à#9¤®cƒ?â½]ñ˜.嵦³ob/Eë5ÁÏ^CaöV¨’S.^˜âwP€a¬®ù¢æ&’»ú'ߘ„i’Òãt5^2&ætùÔ•Ž&'ñOÇ1áY»iÄ(‹„vŠ©‚ž}rU²1ç²ÙßÚg-e¨²q!œ;<Ù6›»4yÊ_-Ò¬\bÔKZvãiëKÈsªºH JAä`å\B¶óç™f‘J<[B_‘‡ô—•‹9,’!®ò‘E—‹¤KáR‹éત"üŠÌ*Œ,èdýH!Ð~…0—ª‹¼œo¿7‰Ðéí=lµN»XOßzè);qµŽˆ‰m¸b÷¥HbK¡AÁ™…l %8_-€7gÔßÅ9µoƒ¼ÄË [í2ÈÿÇ⛟è3x5³"é@˜3éböµ£°§^ Ã=}ŵÇ^¯Îèj´.‘vvV²£çVÚJM/qè@÷W]Ê,2Jòd{¤`3%¾–½X:#ã£E¡R0/d™¨@ÈŠ†ZÀ*ñÀÑÕkýáHºjD›~‡U´•|ÄÈ4àç̆°¬áÕ#À!¸oMD'ÌfT÷´ú}?xü´—_3³ûœÕ$8+ùT˜ú;Œ¨%Æ•À8±ž£âM„Huï…¬›¦"rÙ PI~‘‘LHíÏ`¹ir»jʧ〵_UKïø;޽6«Ëö¾éè_AK-ŠÒ#ž”l)ážÊ«SÑp ¼8哯±Ñ¦’ГYü,Ñ2p6g˜¾–k¸¦<ç{ŸiBXj¿lø}ïYaº9¢¬TL6^é냰6éÂÇ?g%\ö¬a†1 áÇÞ먙HZd(ûnBúhΙ“Y¤#D"ÔÄùTh²×’pÁ‹9Œ#wA)¾˜qt¯<Ï)‘b/ª_»rh¬9Jw›3³M†T¤ < ™¼5¾&P]hÊ4èYÝ.ñZùˆøCÒ,c0ìYb†QDè¹{– ƒ+©8Ž× ¼–’F. á2B"ƒ§ù¨›—>d×;waši'.Hã>ɇ@¶øób&_¡Áß—ëzÙ¢_¡:¯ükˆìôjÊ®l"ç%¼?#i¯•âûÛöâ'l _ÍÓ©Iix’)³¯¹KwW³ì)žÝÙ… à`]°€*ŽM^ºK ¯îÅOÃi8å:½_Y aNy¦|sdù|¤§æÊÅ+7åä®Ág €§ˆ¬…}ÆB‹Èåáa ¨ÄŠ>vZXÈÃÄzºÄ'fiǰ{zŒ n°ø¦¬ž=‹“?üå¸Ñ‚=ˇü¹Ð3®™~“¾ë2,¼ÞÀuW8^dòeÜ6&uKÑ[›xT â7þ)“Öð“RáÞMì/bEnt‚6Ó; l¸wï=íx³p ×(é’Ëà°¿y^_BÊgZbš/‰F Áˆ‚ÂÐK 5¼3É>ÔS …Е^ý¡;·ÜÙ£àÐë¡ù»`U;2÷,» Þ¾Þ¶Ó$‚™OøÄÆ/µñVq‚œÁ¥‚Ù¶Ï=8`^t8ÈYe¥t:“Îä•P¾Ï»Á:b\ª{õ@„_Ý“ì1;-ÁµvÔ ÛÏñœ‰ò±ÊDt s'ûwM¶noòÜÇ&®¹®àXÁšŠÛŸ&ÄHóø`—3¹å?•N21#BèLØõƒlœæˆõõiÓä?ß9œW^ À7êÒ©^åî]¦­“Un¿aåô›DÌÌmŸ0öÏî¼õ ùêÂÊÙü™äw³Í ¤7Ò‹5~Î}‘(-Qãõ›*ŒÉ"5óQ­¬ ­ìÎŽÁR´ ƒú6‰`]Y¢\t¯3gFw‹ 99ß r†_ÐøÝ.Û4÷ƒÞd1áIÖ9e§åBæßÆ:ø¨;}øUÖù7‘Ÿï£ÊÓ›W-ëOMùÁÜîëÛvÝèùG\‹ÕƘbS‹oÈ>uäü†>¾µ|´‚{™Y#‰šJ œ¯^ `'z{`–6 ›è’Ú«,u¯oûìç5 <>*—‚ý§‰T!ëGtoeüX›­7—ýN&ÛÖB`åjLB~WDMì.ë ^&ºJ2å“3©Öx¥ëtul±$X<ÅÞda8Ôr¾~=ΟÝÄ`P¾ÁuiŠ%lWÑ­PD°ôS£TBÚ!›Ðc^~¡û©eÊŒt¤¬U˜¹LÇ5§ïZÉüß½¶zm9YÈ</´èyâHN”•yÅü2AeêmÜR™å#qwÃEÜÐg8Š «½j¶;éæ.¤¡0›ïðÆìÏ7%jÄÜV¾º¾øÅ*¼j”öÒÛàÀèûQ)ÿÃG†g%¤{Ù‹kÙ¿[(Þ˼u!E—Vîq#ŸÕ®ë±jáØÊçË'õ'Ex!züÝÍ ¬òx>qöY‡m˜ÿw×n}œ1Yäg¤œ»ÿ’þ¦?d”¢fKë$Ÿ7õblš‡Tÿx#Œ ´‘úιÚýya]×’œ\”+áÇFÄæ­ørüêŠc¬—Y'æÄmÝÅ—²—MxþG«@ò- Ò'àþn…åSë}çeµ™¦ž|T]Ðí‹¿_zÊ%¦ÇmÍk8⼦uò\é{¡K*çmæøò)ê¡Õ}©ëàaÉéu|»1Q±@™Ÿj’½sÏyŒ…ò‚áC³ïÚžÁql¥(6zo¹¦-m[i4Ðx„ †ïtL}/eŠ×%qM\Äéža3“ «ë‡Ç Éƒ±þoi*¬lîú©ÌY1˜í—ÕIq¦ª¶”?úäGHåKÓâ÷Î/l>]´V«Ë)Ÿýéb3BÅoðú¨~ÎÎs;®þöÌê„,ÿ–¾}ö»L¸ñÏ»ó¶†E\u¦Ë9{9Ón#Œ¥§Z1m!3Z¡ÏçâÒ}íþì ŒØ2ëEn}ów¯¡é°9Z&GQÒÀEÞIšˆ­?Ý%ëþD?À Q ¤0ñWÇÏÒ®7‹@ï 2Ñ5s3$[Їù1Ť Ù†Õ! tÙñ@‡qš…òø¯U}%YaïêÁuª;çmw¹¹yþ<1¾Až?Œ ùÊîÆ°iUõ >Vº˜ŒJ.ƒŠ:jJ¸Y>È.zæe¯BÚ7Oé9Öô,(UD—¿ÁíO(d¬à ©oE¬*Î]g,ÀåÃÍü+æ {Ë/”x%Jûh°ðöõ¦y¤Šô¥´ÜAÃCëk}AŠò•=ó·$¯¡X+4Þ½‹¬xÏ–hæsÊQa¹Œ\²G×é™Ëç©§Gpò3¶8·pìÍ'\±¡p7½êœ‰hÐÚoŠAX–Õíµ.Àö¢­+æ‹aÁ‹ËTû’Ì”cýÁU"“é.G}M œ§ÿ­?g á ”|Šô¢ä3]\óNaË?t–ŸZÿÝ$¥ŽÜªürzayjx•3X({ôð…é—>CµE¸±õý"“芔∆³p+N4—·G·œ/Ž‹Ã·N…ïˆ$ézŒ+…6ÞgœÌ`¼šŠÝmjT÷yµ*—Ï4¸Ã¬msÜ’®¯ì Ž ›òA˜#­\ñö# T'KAس:“ï3VËD'^NߤX'ئmM³AÍ2…F!Á܂쌡}ëC I¼»ˆÿ­"¨/8–ŠêmAXû‹Däe÷æ/ÿ(sfºø#îÚ’§šë%o[>ç§hÞéEÃá!ˆ.l>Õ8QÔ2ÊzÝc4´œ·r¹ô6ŸTß\]·W1×[ð³XeÖ6k|]`HýmpìSyã÷[•êû¤Ñ&CÆTÚ/×kÔW*摇h݃p¯¢õ©ÂÕÅÍ+å½Ä$%>Mªü‚òHÁE°u&¯7aDåÝÝ •0™KÐï×x€OÒ-øp×Ëq*–T±Q~y•r­C¤o<Žöûó÷ÓäOÌ —KMµúê¢véRëiîŒ2òÇ{fâõ½e.j6§¯ùR—û¡t+6R*ùEñÙHf¬_cJëRAüê:/«póÖò½ä‘û LJŒë¦r €ìÔÛ4‡´½›_æ LÜP!ÖêHäæßJ"Šss=RŸüøHPžÓÈêû hsÎcB±Ü):íÊøAèßï´­b{Y‘qž7•J/äªíúJ¿G ïYŒÑç'‰O—½2ên{Kõ1K=îËGÉcå5&*¼„mï¯!ì•HHkb'¶Ãù•„lR„âòöŽE¹þFlÁêÜiÊI‰Hx'Š€Y ‡lÿRspÍ)üÒWo•ô^ý¶Äzù=Œ÷M"ñ½Pô˜Ó3ã‚ i1¾'Ä]ÿåuK/ˆ€S `çûIƒ„qµc¦ZÔ÷…m’0æ`«}÷Óª Äò† }P‡eé¶§öÝ&i’‚pn¬. 8ÀZE“Sð|É 9¾‘ºð[Â#Ø›I'ìóžÝ¸ ·C펅ʺgú>$Æ»pÏÿä&äßJAgÖ!Ìù¾»·9¶±s±üݪi†‘|-këB–…97½Å+'8 Ò‰pc{§ žN9!a+'ÿ¼µõ:vBÈx=!Sïm­}ɾcæW«>,‹X–HdÎwZ.ÿcªÎ"YVdóû-øÍvaRZ¿ûÙBT£Â³±nOê™ú‹úPX+^\áµ,óìD´ÏÔ#!¤òhKI/=îKN}·£¶G°!%ûñKítØÐ¦£‹¦¸^Ýø%CÚ?®3¯ 6q+G£]ñÞqÜȘ_Ô…TS4 ®O>KH7àHÏ4ÙM ùT¹@Ê5EX¥ßŒÙÑŸ×()쨜1—a®æå FYSlÐlË‘ gŽël)Ç Z²yÃç‡U²B'¨ýu`z“ÆøW•}>h‘øDž°õ‚¦éô]†:›ÕYzpŸsÛ‰“??_?i9CÉíeÆ–?¹~½ô Ø7–Ð4lpŸnWKì]–Údq‰”ö}cGyy*MúF½YV祔.*²¾Ž„<¿AKá¡%¯Lx– a:™Æv= !˜#"=¹ç[`¢›¥V2Ãû=/•ºXžu;m 2Ó'Üy=Ô5P¥@vÌ1vFî Hb3aŠ‚¥c¹;E¸˜tpþË#ÍØë¶«‚¦Â¬Áæ3ÝI‚÷: Õ·ØOñ ™@ஓS9z“Š[’¼.>gÚ"ܼ¢DêSR1?âoðéÊÏ ’â!(þÉÄü|ï–Xêò¹¸ÜÉ:ª î¥AŽp@?·Þ±'\•€ÆðkâF-~ÙQ ³õxqvö™«E^>&-æÉ0D€D.9àæc(HgB÷­›f( övAU—Tì°£03‹øˆyg£Bdîl¹È ‘ì¤ßcNk´£bNB `xž ­tÊ ôþ¾/n §»¡ÝNÔbGª¾=¤ëib¿¬L±Ц®Ýe±üƒðv?=DÜÉ Ñ_  ï•¯ l Éí$ç©öRdUe¯@´j/ý ßv“|¼n¯ ‹rQ 3‰GY˦Æi÷Ôùƒ,eÉwÏÏ/˜X2M“§—‡NB$1æthöwDÙ¾æÙ”¹Üèi§ œ¿f‘5·6ç/vÝàdÁÞ_1oÜᙀL ϲ!Pðòí+ð{ê0 be3¾Ü¢ù^‹Á<˜NÚ Å ‹qC7~–í¸ø!+¯.]‹/êJd®ÌƒÊdó™D>IVåÊÌCeœcg@ê^T~¸øw‚ øZÒàyœ?73]LÐÙ^,‰O?Ù-kóSɳ[ªºSÿ¨­ë-2¹—^ò1 Ó½®þ½Ìtg\©™Á¢ †á œ¡Ï«s¹ý(ÞyY¢×BœÔgÅLÚÉXµµä*J]yÝÚÓ¤08_ß¶\੦Ø8AS<ì $쑦ý ÚqÅ Iò9Ðך(`¤—÷F`[³í»,%uï´ûˆ`zþækaÑâó$E!ì+wïO°ö÷2Æ:ùvëù†lEªâ*Í'|öjL­Ò@«1x%gPnüþ’h*ĉÔW‹ÝÈ÷fZ …Oôì°Š—g¢Ÿ°çÌ GÂD‡ØWbá´ÁNgŸþå;wiJY3?> ük_ù5Z³;%‘¬ÐHæö:ˆEá§i%±£óîÑÛqäqB@ý´¦ÙÏíâ™—bsÁwX\ÕaÓÛu”_¯ráêôStõÿDÑ~¦$Ô ¥ !é\ü©ÕB±KTl2 Ñ¹Ë}çêú+zÄhm±uŒ‘Ù±/hÕgÐãÄìX³~þÌÈ7ždž]à PƒÚÜ©¢±ªø½*¿ŽG€^2ï“EÄÉbpæßö¸í+‘ž”Ú÷ï÷) ‡†-¼oÆËð÷ˆ ÛËMÒ‘Q^›ˆ8à `/€_-(4W——*×O~)3µxX#¢+ÖHEF,°(x‚cÎà%D0œÌ—îö§\Ý­Õ¼tÁe>ç#žIžé^ê/Ãy"Fˆõ÷͇Lé©äjïi“ËœŸ†U™€Ññå|‚ŸÀ ý‘Ìê#e¿ûoH¨ tþžò3R–PÍ âù®øìÀÚ¯wjd¨°‹AÍñ·¸Háþ‡-‹,IJôPI‰•3bºÄxÑ9mó~;Æß8$ç¸ÔÊ••ø~ƒôë2Ò1>ëùÂW>@ëqñs‰ÏH»_ð0Ù!Áu2ìÁ¶¯ùÝ¿¬&(üA¿$ðÆø†g ¨Ž·ËWF—‡ó·“=éÅêÁ4>ºã¼’˜Á7‘LñÛ'íá$ég%X©Y v›º+Ke³þ9úÞ|ù’½üÁÀ>äwE~â´äŽ}ñ—ʆ.Ù¶ÂúA… ‰7­Ó›{5`ÿE¹l܉f­7òª^%aöÚÂõ†œÖü66´ìZ€$…d2oûˆ”Ò*ýëzŒN¬Úo |+縞¨ý\“þv¾ç›´:}Nµç2Î@8((˜cTÞ+ßay&`.<c ÉÛÕ×_Nâ™/:ã£&áLñRã ÔÒÃŒê4‡ßQxÇ Å¦›bÈùPuÌPì#Ä? 9_‹íóúkýá¡—áª?«çß­ÿž¼}}[þ}Íǧf|¼*ú[øQЏ³¢G]rá5½5¶Š‡iéa}¸¢3«a©WÆÇ{þο“±âˆñÑž˜úȹ·oø¬°}é_m­ë¾3¡lÓÞý‚­þ8â'º*bs;Ö7²L»Tì¾¹ê}×ÉÛ¹6îŒ~iÚÓõ.bøì×IyÁÍÏ«×rª#–9s¨£ÑF'0oËþÈRÕ2KÊHo>|ÀçƒQmHµ¾^b´Ã©Ñ( Ÿû oI|ÞN [1¶ÝšØBŒœ¯7J ‘Ð9¦ÞKO} †z]#icÛ$CåÖ W ÓùÜ'Ș㳟YOw'áê+±a÷aûe‘ä®!úêö¥=S €y*Aõá«ÖÌgQ'yuCË*L;áM8³”O‘Õöö³öŒ-é^õä“&U9ŽI^3`tèfÈóXᬀÃr\–­ÎF"`&Äðì²$í–©‚ÞäÇó2(?‡Ý!€Ñ|yׄü¶êÔËcˆóûB‡«Rür=¤®-ÎMVŒarF¾¡…áá$ñ»‹ÒxöŒhCj-VЉ‹Â»Ëq1ûÀ†WîG+€IùõðT? Á¡ÊÊó8J¯„ÂA¥ÀÇˉÑ^©?&îTÀÂKCÕÀúk©lw_#§ƒ<*ü–6-,R/c ¼&žÚsÝäëžç¾j¶Ù2d×ô:1™c»Ç› eNž„ïäî*ù~*¬ùõ‚ âÐÿÖgq…}¿Dg“-:,#ý(äL÷Ž&íÆT$ñWx6é ƒ³eÅ̱°åžìŠ9Õ_XŸY„™)âÂ8•túðUžeòrVìÔ§ÃÒCqŠMŒ ¦ìQç¥g)–ª¦b*<ßpLödb>a‚ø ¤kÚ;´Ão@UeÁ“šHú9ÉcœI¥´‚U.)bxåßâzg`¼„‹¾! ¹}² Ø{õðóFÚØ»~sš ûUÀ«ÇÐ y®¢;a«•Ê\´‹êH€aÆ`–¦lÿ6Ý&G ±H0gR…†Æäo@‰4ww_obÜp˜Æƒ¾ó2/oA› ¼1(ÅcØ(¹Œ¸í~H£ågšUQÕlhOåàþ|A7Dj•?Ûºí««NÊMd=ý†ŽÅE>ñÙEóV×@Á>yqÁO.sH‘?q >mŸ=™ SÌ ÄBÒd,V”«©×ŸP?lÃ,õG†o†¢~.jtzäWqŸËŒ8ãñúô[‹”®T" ²«)ÅÀ à Öý&É—g(ð½]—2P¨.ÃO®Ö­›~šøiôyU+,Ñå¹ZqiÎ}>ÇyŸˆÞ4‰ÄyÁC¨Þë¶qÜqÞô|­nÄß»#&sÔùa,¿1l$›_j|ç$Ë}åžr²Ù¥­¸ªnˆFˆc,{ü$ÿ¤•.ìÓšŽ²óXËo¡wã­­=Û=y'ë—ó­Ø®è }#±KG3Û;‚òí4ȈT8ñ¡ _^gKä`‚Rîe¹V¾ñ/ÈU‘·¢ôÉ]”‹ôáG…•Ä{aǨě}3Ѫþê‰/=d1~L6ž™qý°b˜MR×jå2±Ÿ¥{¹ÆïÕn#Ã67^üPÌèÁê7;ç«L‡†Hš¨3b¡ Gë‘Ö]x…>|m¾Tä@6'r\¶DZÿ:lÓ5OË!Ú}Ëfóý^«T>¬X–ID'¤¥K8¡Oøú4¡ý'm’4ÌäÐ@rÄ6OoS>TbDjoéSDoüÛÐüê2¡þß÷ÄÈ V¼ü,oF|ª}ÞlPIÏ)y†ÖñØh€×0.@ÜÌFÅÖaVè@Si *ɈçÀ²Uä3ɹßwœ4Ø•N˜"˜ò!nEW¤ ‹// ¡¯¿ÂĽ÷´b²A©õ3ñ¡ü•8MןðùŸ?'Üù*ÓÎ]‹çnG —™8nÎdäúÉóB¶Úz¯Ö;7‰MYÞç4sÒd°`î¯öx‹†ÝÁ%Âa†• NC`>Ê6¦ž¹ Ç¢ÉÒÑÒíPÓ»PhS«ùÝ äjs¹‘oƒ²g¸_-4â·VÅù”2éÐ.ätnüK£Ì•(Fž4H%„´Ï£¢*·Än`rcKeJØd‡Få1Y®íޏªúQ>nzœ\KnÔ5{¦ç—)•ð²—Ø ä•ßîÐ3r´‘'K}Úi{t„€7ž.÷ ±Í]¶SÙè¡ÿ¤ñ‹ÃwŠâzô¤x‰NoJ›®“ž„ó-¶¼Ã¥!;ù=ÎÈ81T•$ÊKIŒ1jk@<Ñ^sʬÅ/bGQ¹’`_ÿ¤®ë©ºëkb)Æl|b¢>A½{£Ÿétºx&r¯ ŸY£Ò{AéàØõT-RÙO“&s×5&WÀ"_6–ÆðªÆ³–D¨²×ïzÌ$‡Bú×v†40~ÀYü)}ŒwçEù‚ü›€viÑH*8äM>$Â\)ï?W8‚ašk,È»„~§œÚÉÒPrÈÓ²vðÖ{þ=Ê›'slÉüTÝ&Ó™éôÚMœ^´”¸u)ùn¢9SŸ)b°wò ý`ìñkýÍ#ÅY¡E<+?)²…÷>PX[LàýU㜠¤ŒaV¼EšÔVíd6÷ cü±!w8GóO“¢ñÛI@H±¬BÁÕhˆúMÞ±«{ÀzA6?”÷ëUùÍ`€æ?^†ì»nâ8b¿äìw¼ô£ÞW‡£?ä¢Âì7]A!Ã#,YwüëäÒ–ê½åäûžÇ\4¥®Ö°1À²CÅ«ËyˆÑnÔFŒf¥ÂhA—„½аþ6Û$‰äH¨;¤ÀU¶ì*¾ã†xYžþôUåd¿¤Üª¯‹&—ˆ]“´ïܬ¨ºdVÂß5|·Óoíù]þû#iyÆY€HÍ׬<-éÉemxÃLÛÄ Ó^L®™±žÝ|bo Â5s]§B‡ÂJÌtôݭ˨²aV•ç@#ç”KR¹ãP|øÕ^¯XVUÄ"pˆŒ’>žý9c—9CÑØØ†š!:Î}ãßÇi[k¢ÐMêibB•Œyœuѧ 8'Œå’õmàƒ:ö_sB\-¸¼Fž =õ®;_Þlå‡ÈO¶<(ʨåºÝØty²=ͺqÖ¢½}q¶GñE?“f±)'K„áHžH÷vpŧWÞ—…©Vn§e_L*oòõ‰ ›{÷\¼™ž3Áï84LÎû >ým*×Yd[‹<"ÇÀFÅÁ—fT=ºX‚;Q5taróÆã^(î)"µ sgG>=ºµùÜ.ï5‹Wë‹ÓA¸OïJ¿ÿe¹2&Á»/éÀ†<㢸f)œÇZ î¤÷½fx&ÒëÇþ½4à‘Z䡾Aʹ@’¯ ûü4<CF‚À`p ~c¤4õoÝN9{€{¿õp¼kHŽÈš¬¬ê~RkãiȳøèµìO7ïÚzçÕ6Œ~C%8ŸÕñ»´-é‰.º ¼Êv¿føŠØñÉd՚ǷÒmæ²Û—جþ¸Ù ™]dtWJš¼»Ðá§é%á%o¥Îò*RØ•vNè¢_&|Šø«^zµÂüËnÛ™´üä¾ñ_"ê{jìöàeJÝ'óŸ^+™>¶–ñDˆøÂ9b0v¯2z8”ìÊ‘Û{¹^7+{wê¾Ó#¹±*?“߯°Ð 39¶µ”j@\<|æâõ“g)6m¯‡?\€)’&1(ƒ`Ïi¯¬³P¿Îèé̇WUê™°iÖù×Ìn.Ó G çû0ÝÃ>qÛ\}â­lÁhºp©$LlžIb+5õêŒõú÷Êw–f-µ\È»£’ÁèÓµhÖ~Á‘Y0Ϧ¯—Yí#¿¥89×cûnF‹÷JnRûþáÍäA:*ù`‹Î¯™ÓŽ}@Œ÷p¥mŽwî£?«‹ãˆ£ä•½*À`¶“ »¬VäÓè!!5è© NúÚ›A“#¡ hb@H&kÜkU,ËL* ÕçEÿÒÝŸñJî>ÝH ‘3‹j`®YJ…–à,éT–‰TðQ0ÙÅb€uª…É´59›ÓÑ[JwZLª¸rÝÕ®6@º+ïu‚Y%*–ÖèlÅÐ5.z=t͘ ˆ~¹õ%Gbç‰ï1eâNiðׇý“-ù‰j³¹ R `|,£üÏÆüäu)—RÍù»È>2óH O?Qϵ¹¸ŒñÛÏA>>88GŠÅ»®_ Ñ/j+^ͬ¯AÖ^õYôC~_œD…-Û^V[Æ”ÿúâï¥~9NÈÙ.(þ Sz 9ˆ¦×Ô×Iô%½qº´0W¯—yHÛ¸(cQgsL„L±‰Ù ‰ÛƒK£úóäÂ÷7 GN.Ë/ú“M¢q—º`­P¸L‚ÈÃí d¿¾M3o¡4}jñ0ÅüН‚÷ç©£íC=ú©A~PiÛËFgЄ’¨5 C§íEiiäÖˆ`,ÜÑË(®%ŸN¹¼ úÉ I¹7lòk­k1ßUÓ|aý=D÷ÄÓ·xE @æê麗6$-“Aß.ÙQ^Å ,[cê[œXx¯#æ4±¼šÈΨÁýÔI÷Œh÷‡ü’éì´"}ågÊj¯ð—¬N⪥š?1Š{5ðÂÓ^•8Yç‘™÷aÊÚ12±kA í³pšÐÔS91¯Îͳ„®iç8W1ü¡ÌÑ+dˆy÷ÛmµÁjʦ)“÷šI$ÝwŽ*9)æÁl¼.£Ñ¥|®?gS–k &T O ‡M*>–¾Îò:¦Rá¼’5»Ã^þ©NN°vðD=?e¹š"´W¾ÝÐ+àà»f'áš%Vc™GÛÕ¦á F“mE”æwf,Kl„ëcË{¤’do<ÌÆbäË6í‹”døëá—l\>ÙªI²ß±zÉÙJàm2tKÉÖ>1zpêòQ,§Óá  3¶â‰üˆ%?ãÀB¡Y@ú±¹ËÿµïO嬓û-´k×Õu_ç¥9…~dÏê0Ô†2öÀã‡<,ÝϾÜë;ýñ÷ ¾E‚ !,‘è ?9õ/ѳ4ñ*ÌԲب6¤¼ïWzïó-)8r@†•gÉÞHG¥…Ê›zâDÄA›™ÕQ¬@>-j+e"”IHYu]uÊÇ-6ö-XXJÖt _+!;P›tiYƒù÷ŠAº~É™¾3AWÈËpN|]BX‚ެhðá]/]‘tùÔ½ýâÆBgÆâŠ]Å^kœˆÁ2YNHd8ÓZñ.ÕõõZk—‹·Ó¼IöÕGÚÿ8^Ä3ò38!¿·…?LýIQR¿+kðæÍ4Ô%‚‹bzº VÁ^¯…ô¾×—\r™e¿Õs<Íäüf È~CE¥ ¾ÜëÂÒ½ ̈™GnÒðCx?^kõ8›ï$ w™©ß×JôQWÛŽM£Ïß_"«3ûp}Ë4õëÖõì(êÊÏáW _çA À×´w;RÁ·ÛªùkS{?ùöÍ‹¥®ð]Oœx©l=Ì«÷P©6å‡V¤®j÷Fs«|e¬¼°7Äú-¾÷¨ì‚›2ŠÐSµ?›Žz‘®3ùV¾Dô˜Ã‹’sá§:NrxSFÎI¹Pw„S<œLó"ÜÝû»…–»PæN¦ûµ÷ü×ë`jòRÐË£Ë\Òœî•ceŒ7§9ó9oZâS xR¤œÝèì™—©;c+%YðCü}£ÎcÔ¹ÚÊ4Âo§µ JÚBÃÃh›75*⣔9yÊ 'w¶{–—ÿpûÌ%wÜ^n^XƒåCÏeäqKàèN%Ýû훆7p¦žŒžxým(0=^Û‘—ë2T ¯UIë z¾¹†O”µ)3þÞ}îQ?Ðo*‰û¢"ÀÛK#Çm\–*Ú¹ÇPÎÂÜ{Ã5ÀõËݘ­¤(ùûWû=«½ˆUkGÐqþɨЕ¿JIå·ç;Û·ò™Ÿó´ºDjK—­‡µˆú­!r9{G«Ê’,åh“y³d³—\—õ×Üâb¼G™ ùŒÑmß á‹°KÌ‹?Hϳ”'£­Nœ d9Âpš~Š—2KŽ~_¹2˜{Ærý^k¹úÎô+)Ýzø×zQ%YdÍ©¸Ê7ìR2Ì3¯§ Z$³ÿ½æ‹lꨒõ ä»mX*õ| ·úÑn>-%WÓ ùäN1-{¤šÔ{“×-¢F{åºHÀûìüS+WqÍE7“éëíN›¦¼yPd±Ô:Õ;ràG«²˜uýIÇØèâᇠCu¯÷”*\kg[9 ¤ÙòX] >ÒPEÿW|fx¸ê! b\aDK” þ=Å¡€PÊŠ6ÑÕ¸5‡Þ-™üxMŸÅ}rÇ$m`é\<f—)“å“Tå’.¶=K5»²Biò •:¾^4Þ®þÙ{ê[u¼ïT&‹ük× rÅÐ÷1`»ö²Ïr@ùAÚÃ{O%½ÄÞOR!Ç.¬ü$èà Ìe?Ÿõ•“ÞÃ>U)µ¾v®["ÖÕf:iÐHœXê穲ÁP™½È¼«ÚWpðÃ×ë—Ûß·Þì7¸‡œG†ï þàéÁ}µVÖJ,‹náÀÔ—Edl K´íföx¸ÐÈ”ïàa¡n § Mq(×y¿á7mc‡Lô„-rήò|+Ù[‚¦Ï””ôi¸2Š˜zV>f”’P&þ©Cp|Éë/tìÅàò“pJ5ÉqÓÊ£$}D tÏJ5%R;ä;|ËÑ©®øE¿Ì5Û•°àrðCNô^䌞c‹’?ÂÌS>–å`¿Â€W?ƒM£Ç>:íÉnÿ„“ºf+y?y¥¼eÙO_¼ã3,r,ü–ȳ§@ŒޱQäÞd‚Üçç…Ÿm^&gƒ#Ó’Ç %õuù–1`àig;ô&ô±_ý”z‹+b¿‰Îß‚a鹂¸ #Á,õ÷bºêÑXo˜úèÊ7OOC¸Ñ<5¨•>ý3hœ,?0Œð^ó/L_6Œùü4íTýÚËy_& ÕŠõ®Î'ËøP\¶õ9$ †ÆÏÀ H][YI’™~_X¤!’e6~˜'ï°q/—„é KŶr“^ôŒóü%5hì–›`¥Ö+ââ뻼œ[ÎkµxUWPÙ§üsèXû8ôæ ×ò @Ìø²Gò}Üt6Æ·~]”Dl`°ùüc¬ƒô ›å-åäÎò=áô©4Mî4.õãeUÔ˰N·ðK²£¿Œ²JVôÍ%ÆÒ]ÀðOYÿž¦‹Û—;òéúM. „ªãha<–•)é×ýÝŸg ¿“ôúTÀm‰2¦¦¸³1äR™&p¸Çýí–ËQŠ•i}¦Ð<ÝeõH?wœt<õÓ~!ª9H}æ± Bº*ÈÄkÔÈ£’ô÷ÒÉL߃ßm<"Ý5JÆÄ ½d¦£ÌÕ÷¾W¤` –£Å}IŠq|º\˜¿Üõ÷n>žQ¬þéKß>›¬Ô³>Ÿíãå[›\~2Þ²ˆp>=A{¤¹‘>¬H¼˜ümŽÞâ}¯ÿ±Åc6~ÈOåÖ ;¬h$Ö0P!·l¢Ûâ¦7IçÑÜøv_âH×çã­¸ÔˆŠàü=qü$LrC6R/­Ás·~(ŸkáŒ/‘i®n5$U‘O@ q‘•`È#΄žùaê½éפ±ôÏH÷pOXÅ£}hÓܧsöpÈ}*ÇÞÚ›±ìU[EÚ…×Û¤£Ê#Ö'‰„ŒôÐ$¯³>£_³»Ýr…û„e—ÆêðhÊÃèU#Ä/ï0U¨M_üzu¥Ï‹kÁ#:;€fá¹8á5`~}“ù,Æ¿îÊ ‰·×ø¿Xò€s ÙÈj;†vVÑÔâý; Aâ ”aÙØ/);~ÓY=eÔ!ßO1S£°úC‚ä¿ç)Fß3›rÁîSíLõ^ÎJuGÅþþ¡m…%…Ü=Ë+]ÑÁy{ϱqèÃMJMi óèìØxJÛ¡Ÿµêã@+PzìˆØQžJ'j¦¨¬L/!Y6¥Éäô0«‡@–ÅËd´D{ÉéÌ£!‡uBcGBš¤“ÀXí¦@#yáµÆÌH•Ñ"šŸà[7ž½3mχªøK:Ì–h4ª¯÷©R´çc2¶‘ƒŒê4‘æIâ€y`¨;Üñ&P ãC7ü®¦(®Ä}a{“ðŠxûoßívî¹Q0 ˜çH³·=9‰ƒCA±«?o´ó(XoöÅìG¬“22CÕøÙs&ûx]ü WÑ!v3–ê¢V¹¡[NæûX{Æ ka½n¦—àï®øhB½lúZÓ4ÙÝóX­tÈ‹§­ŸÉÒ'•uiŒÃ*ýµ¯ cl 6ÓË‘)î×:D¥ÆÎ36ûðáWoþÉ‘“ß磖Š<>&éùZÌ]1›sÌ/YªoàÃF&ÆNìD¹yë‚ ©JØ¿Ûß7(nÚ§—ü“è:¡–|Î ¾¿âŒß>×r÷ÌA®‹¤§»øžÂÊPë8âÝËíòΈøš»DGC5¿Mu05fZ¦ì·³FÅ£ÓŠs|4._ô) 稵pªOlêFîãJ=![ÏúýA/zâ~P¨Þ½¤($ùßžd£$ÇÒ›J…_…= ‚ˆK‚ÈQ"ïÈ‘ÓÓ_~ß²W®2†î>烙~ HMîå[Ñ­ïOÕº1Ø&£ºÖnÕKÌ!-åÐÜ8‰Çú: „¬øß;ÎG¢¨Æ²*6@L/ëgÃ}qSØ»MËì÷T‰æ˜ÕçÎMèò8l‰íÕ~}ʉ¯PjéE²´ñ3ÐÝm<¬bì‡#ê·0ÙWk2ï-„gnq{žóãô>-×Ï´Ž…[&¸_H®axdÛRÉohÔF•Z¹ú±/¥?®!Žbºü-ÁÜ>Êñ¶$±MÝèËrÄR¦§á¦žžÛqMŸD)±.å@ÇñØã5FÒÂLZßèÆ4ÆÜÝy\ň¿Æã·¾¥ÓrH·z<ŠÕ¾¹'¬rÔÁà  è±†|øp›- ð‰ÄÉÿÁ:ÉÄM²œ¸ÑjÄ#]¨ôR$åÁæ1Ú»ªH |¼;‹%J7{õŒ—/u'‹[Züƒ³À^›¬„ŒqSZ]›:þxÿ¿ïEL˜0£ø¥}â'¥§#Ís+ü7n\ò`—z Òõë=ÏÿJ(ÔkŸ… ±LÛô‰Ôw㼎€¢›ƒùk©/ÞRè‹V§ˆ?ás”ä:ü¥U•VÅÅóR$Yâc)pòâ7¨¨¶}駊ߟ;Zät},þ}Ç«¿.Fw ÙºÛØg’Hý¹×ÎùJO©Œ¤üfí뤠^Q3¯è Æy,wÄì©ïO$rÎÀ$™U2F6ºw2*+&.¢i‚Ú¦—‘}ëÝ‚ïNxoÅZw``TÆw[ißË$£ð½sAðþt‹ŒGòzªñï*¡jj)>·ñÞ8 Ðr;\£\¶ÔA$ŽÛ¥‹b¡BL1F<ú}v—Œx›ée™ÊìÞb7ÿÁ3k¯ý¤¨‚z\ 5mˆÏ{ed_^œ£4í½·:33à7«a1r‰=w„¸½Éd6[r"^:Ê~e¹Ìäøf%þ—n<äÕ06¢Hs¾ªðÒ%svÁÛüàÍ*2½Zøž #xi—ƒ61óÈ&Í”Å$_ép„þ j0ôçî­DóÊ¢^:l\Ò ö*Šé<Å@œá2œQÐp¼Õf%P S ñÅò(Ä;V*tz\á5_ÍAÑ{'Œ/µGq'õeÙÔ¹²ú€L?)íÌ%—àØ4u«~/kÁkK¿Îû3§GSÍ7ŽÆÍa¿lZ$Mu½ÍIM²²´sÉíŽ_“=ßü]msB¾9±1ZæL ÕZ‰¢a×% ªIÿ<…—FâÅ£ùºb^s@ιú¢b+îÛñ—T ï˜Ð@CWH7t„_gµHôÙQ_Ç ÍmM¥C®PºîL3­±vâ¤HõOÍDž48¸‘>øšÔ®‰i™ŒG„x:›žõöA7^‘„Ëqx<|¬\kÞ=“z&ΟUÉ÷* †+R¹îs9Db‘±…ÒfÊ7³ø£(ö ´þNÔ˜Ó‹›æ«Í›Ì’"h¹Fuj×9ýöÊZdå㬪Ðj$™=µMâ±9DvÅ`ç3·øéý+á~ ’ç˜e¤ÍÙ,¦œ§·ý‘Âæ+àOrz#†+2rÈáç´š.YöXÚt;¾_Q±¾9V­âä(ÆBN,©0ÎêÔfå_býÃéÖDç\•ƒÀׯ­Rp#‚óŽkT ZV‹HV§Ü¢‡ƒ±3O¤-—ø8¹»?tôÍÈ&TšÉV±àüNkÑüy¯ÒØÑʧÏ5­Qf#ÓÆ3t\ðG׿é¤|L”•uæŠZŠéJ5Ô ‘&…}ÔЂ-Ìk…­ÁD¾‚«ouõc +†iŠ?ÇA)…CÕ €†ŠhQ¶uH‡Gû †ø\í¤›tÿ-+Jij"`»:Ø›”Vž”À¿Ûaˆ{IÑ\ˆn¥¿/Î=Ü×(Ö©ƒð@{Õ+µ‰˜V°š™¢¯Þ “U \=ŸL~l²`Ñò¼¾¢. ýõñ´-¥8Ý s€ãÄûû‚ÔÄšôÁ…4ÎãIå]’û _ú‰qØ! áG'>è>ε4E³ò›¹KäüasÚ¶Ðæ¬8¥²ø)°äD­BÅõ7åï_Ÿ°û·‰;ä¿ÏߎŠÎ½þ+§>Ù|2¶8 CýÖ°áê­ûƆ¤WÃÐÏ/ÏŒóòÞ[IS–0àØÒ$ÛÓÎ@±K ·ã¡6ÅÆë—É{jüŽÂ˜òµòõHˆ¡B"=Á1ôoªÄdèoK`ó%/?wfó¬øœ3¡üfSÚaÜÆÙp¯‘ÌÎ{ÞéÆce©Ç°>À‚½Èa“âðnûKÔ?ÜGi8PF`—N´¯è“¹è¥Ôc‡·šé“·Á¥óš®{DL6½p?ÚuwUƒrˆb¸{`­%oÜ\zÇúöbϺmI§^‹3\äfAU·Çµ²¹‘Jq×H•&+²ÛK²Âås§qãXÁ÷z]< ^ xâs erêR£]ZáÑ)Ýk5ëaqSF!: _6*[qçJõ Æº„ö–ÖH°Óˆ|¢g~oâëK§íÃå7UØö=M Û ƒTpðŠUnù˜l$´\Zãî búÕÛ2ÁÓ F¿Âêf0H˜N‰’ü×3¬5‚">º‹%ÇAÒMO´é?kuîÂGÌ —Ûõ¹PÌÊ6zÉ-%LýýÜæŽAü¡|Ò»ßr{) öØŸÑdJ'-ýÂ{˜¥‡Ö7a-$ô(?Îä˜êPÒðVâ=.-Yˆ/…F´œ{› u •õ”qAŸ.ê³8"­ßÿ\.ª¹Ïþç\£]‡ÉÉ÷ìQtçͱ©ø6sfÃ6X É&Fˆê¿æyËS½[W°åà ‘LA„Þ’.%w‰ç¨ù ö‡Ö}̆.7Sï`‰¼"ƒLæ[sLD¼B7õf£í Ö–‚-£‘—¸ò8¥¨f‹c[£s þú '¤^¢&…#”Ú÷¦ôø´Þ»ÑÝzìksÍH~¿ákI±|Æ…òO‘;`OÍKŽyŽ¿ ¼Ÿøº+³f5Ôº&¦-•‹º^5mÅèˆÕ0l¼| áo¥J¸½Œ­Mñö¢}Cˆ” * Ë}³çµ¾’@ 2äÇ…´þ†7žr—‰\†H**iVY¶¤^²I$Ñ’¾©L]¬›‡VïÙkrxfè‘%´ª³0fÔáÖ{Q§õèUD1eĵþšˆo|'A¦Øa«|CSÛ-×”x÷‹ùMµ•g3~x´çÚ tKÌõ/ÒG0‰«‹>—â}öN¬_»Ñƒü@f{A >Köt†1”º-mRä7øó‹K¾µmæH§SèI|IñKœÛª¯Pǧh’Ûaþ•&†¡{ž¾KW\76zÉB>*õ^†#;ŒQrŽ4¦ÃáŸ/ý®_Ö¶áãÒÒ›=³²™Âì÷аÅa!LëádiELþºÑGŸ¨PÃ.í¡k¤Á‡1`ÇDøzÊÂ2–ŽGScÎ^䤥¹Œ¨dÇj£9¨´ 9?ðd|öúuiPH·„šý¯ZY¸4Ä4ÖnÑ{šŒ$ÑY³õ1Ș€¶®Á«Ù>hn¸.Ò-qC+ÍœÁ ÉÒ‰j*úù»'?¹õS ð-݇ {úº.Ü@ŠW5¡’5ÀªÁ(܆8Ž–ãüZZ³/cÒb‰²-êæŠÑy©þ˜ åÍw19íϳv–ÖÿØ KM¥°\Ù‡fÖ ÀÝ{ #›Æn9¾]öý­$ãhò¨o«·m·nXfÏ~9Gô0¡¥×OYpº-Kañ“$Èå|þ›gÂDl/jTèF]“:Ç%Á“X‹g˜‹”¥[}BAQz ÉøÎ ÈE‹ôO ±d;“y à z„ìÁþì`W«Œ¯ƒ©ÓÄô$ ÒϹ™.íqºú§QéÚ÷Ì?ã‰!a’Tª{Žü_'ãQ+~-{âEœ±wÁõûo LÑÕ?zØ Àôò?ï¾F«¼ã¨ïÛ0 9F‡ÇyøãùvOíåaXÚ«&†Ç®€ñKë°Z{­ôQÑ—áŽQa%áZ£ ‹ÎûLy܇xtüÚ“ÔS‘¼fÅÀ¾™%‘Ï¥ÂÇb Ù¸¿†©¹‡øþÞgߎvû¨<œû+Å»°qMkÙ³/öÀe+R.ѶBNÞ~_&é7$Z3Æ@ä°µ@vùW>æâ"¤½ ¯5ÍÕÈ! ð bâva/à ÿìvçÖäC4ªà$æ{æßþm)7ñ¥☧Rcazü5¿¿$3nrø–ê|èùJ©ºúà{åköâ¿ó\H¿ƒyÄ”z•‚ø:½¾&ö—´ y·ùNßµNåäû¿úw¬U=E8Ÿ²XĆñBéÿ(†Âã8'ûi{”N‰=)¹?CŸã·úª`süe±ƒëÆàSþÅÌú‘0˜­×v¤ªV©ê0Œ”Šm—ŸlÌ‚ÑÿíT´:Œ9¥3­;¬’ Æ6rËüÔCâßôB¬¨=íKJZËÏ‘Ž ÷þ\D”å'øRfY"nΗÒ—WPqÞ1ªpÿüF*Fð[ÓÛg¬ë‘ͲÐ] g‚?,ô&¯ì~§ÊR[nð×í¡8ˆ0ûtzË ŸíÍØ³q.:|°_HÛëòºö¾A5=Qü¼ã¨çwMŸ5Æ#¥Ü?/ñ£PŠ=ß…e}Ïëêú@÷ÈŒKÄ{2< %›,ë­Fö:º_eݤÇm©”|HÊŸÍ{eˆìöÚRŒ«ž»½A¨ÒTʃ~ÀÏžÊá^ˆó6œÈ`ƒ3ô웼)6±lû¨_Ñ_A¹^t‡ò˜0ιjVÁæäNiã5_4ÈG%Æ‚qpGRÊÔ3 »Vý¨ öÞ\ÆA’®ÿêÕ¨àÏÐäÔ¼4ùUY!âr£â>}勵ê®,Ò^3#› ?/²JšünôÀäÒÖ†»Å#hÐô+´r’è%¦,!ñ‘*¥ob'æ!µ Ó÷=å7Ki­Œ„Ëe-G©¡»ZmËÛpœmìsþ§Î<"U•µß0œð3"êù³ -"gáýö 7ÂLy”#ÛúJ´™!Àm,hNxd64´2Í3‡Ÿ×ÞiQŒÓßùû”'›pLx{ÖîK°ÓQ&áº]R<¤nÅPæ‘“º à¦J^»qÍ3ÿKÛvÚ¬. ïÆsIûÞDL;U×O’•ø‰AS÷óá;_ík&Q„(Íò&y†K1Ðᑽ¬0Y‡ç Ž}Ü<ØhMŒh !,^H˜§¥DôÅÁ“m!`¬ ¬¯ô ÈÞBF‰ãckÚY~·a"7׋qûÉõÝ+ô²B¶µê LÃ,¹Ÿ«¶#Ù¼s’)?ңϢÊW°?³¾a^³:ŽÖX¸NQ(ñxËÝÑÖp·~>Gp ªU†v$Ùs]îÿ5l,Ò àe°â<Ãb|¾Ë¡NéNJEy&ºmÁ'[“¬ó°Ó#BeîÏ’äãV` 6boªxöù5òîGÊ@SæLÉC$Ã`­i«p¼—‘ºü—«…rÚŽD4–⎞‡‡­‹²ìe^oÚª’uÈã CkDÌÙr`WÕõ~Ä(vXŸ(ÈlBTÔ^÷U½rQÒÊ&éƧzw¡l'h–¼!_§±5†áo<ƽüðü DõéÁP‘ pE_Co3öˆ1ffl¸nÃc¨(˪è÷hf |öwÂÚx`î@½–y·Ä˜vïÝ̰î:ëNÌv=ó"”+ºW)óÔGV9Ïì{.n࡬º‚«õíîïö{ *æs¿'ÓsïK:(kã^l!r£›Þè½²? Ïj£2(æ¹Zq “ù~ûVïÛ]x—lÎ/åŸD\”µY%yÊ»²ºÜ$Ê$%ÞUê:”zfw†¶M@1"µøQ ú6=¬9rF¶Õ½ï2 ªb¬Ç.¸‚ <6Þü’+âM{Ý‘ÆÉz²0|¯œä^+úœz†·B°.¯³ 5U ŽéžEœuþĽ»¥>Ræ¢áMºK­èÕEA¦F*äÐß÷q¬½($KŒVdØØWbÙ\&Tñ·Ë6$!U¾Y-ÍÞœã* K{Ÿçdæ 6i½;Ò3cÌðór°9Ý¢š_ À ÈSç=ƨ¾†ìÐì×4d›Ð@€·tEó˜Î9Š/?îí¢5q}897õðZ1&¿™]k¯8 èŠõëgõˆæöYN¦à:g¼6ÑÚ-_Y;äëvJ‘çØ"3ÑѹcþÖrçò‘P•Øð®~ðÐYr ß·[]_ñ­Œþ\œˆù}TaŒå>Ó¤±Ëð0Ü/úëë›ó×C“K¾/e¾W­¹D_ür:V¤˜šoòÀ¾ïf ‚¹·]€('øCºY”ýü°™ÃëE i¸ ºÝ¡’ÅHôßW(7p[É%H5ÚRmYÛU\)8SÖªp.oQôK­FAF€û1'o#{cS§õ°ò ¢·`²Øl23 kÑE1†h\.žR$o7?„Âý\\'Úó}Ò=@fšãØ4­UP¾ðe ]š–•×ëAé]?WwW¤“ª²¾o(ŒâDÐÍ·Á÷^Àû(›€ù~CUÃe? ÎÞQD&ò#: ˜R/Žó Í9“ç!ã^õýúCÕF¬^(ë×ô÷zô«œAá¡ÁëïÀòi‰k;8`FƒÍr`ï“-fPÞf ƒˆëã[T©¯8AËN©ùû,-­·¦$˜bÜÔ*Ýe½)íjýŠ;Èñ ¬9sô)— Ãüòwd‰û;ufcËŸ{¹ýÅf=¢¶4Õ#m-J2Ñ|vÕ"ö~Ìê„~%=¸¥È?@™øåº›º‘QZ|%÷sAžúëm&9×&Gg‰mÚ£“®eµs¿ßWÎõ@´¤vÛÔO•jËXɰ¤Õ´ôìº/^WäMÍzå×RP¯>d iõöòë@ºNäçÖ{Åh"VmÓfä?x ooeM^‚ÃtÉ£† ÐÖi4Qƒߤ_¾¡‡7Šã„)ÓìBÁwPá#Èéó$JŠvZ£Fáïñ1æUèjÛ<€Ü Â8÷g,ÉŠnìŽòìCM]ºÏî5sFº¢%g |A5ä¶zéû¤ôÆoŒ»Ÿÿ«þ}×>ÒgÖܯ}¢Qxîï˜ f;ƒF­-’E,ñ}=b²Zu§Îq½Ï†ûÃä‡C7Ö[¾é´ª§ÇT-_Áa1©é™Üµ¬¢|Нv¥ƒ§‰™öäUù Ûº™{~¯æÏÅËï}FaT‘Pœ+r!›êýâ®»ªžò½ 3ÙÇV0&9R,)-Ÿh¤N/˜bòÞø½ýИ*ö8°Vb†¶úa¨Ý›‚‚úÁ¦Q߇éD}ùÓ_Ç —qoþuœîÅÓ†ÑÆb´é(ËʹÁL–a~ këô”5Ø[\Ñ0u8 EY1&1ÁÁ‚ðå5h‹_FŒ´Vܹ4©Bá76 ÝÈO ëùõ÷áÃVóØ»ãI«FüZvÆF“\g¤¿Eò\¾Äõ† 8¿&_q‡IOͤyqÀ2½Nû,Þh S=QŽe­Î¤â¨Kv§Á™':Hq –`qV)]qåyÞ;úú‘ò®6oÐÒw†¦Ýä+Ñ”ÍS©Yn aÚÏðÁp¾57`öšðJJ¾Á! Ñ—¯¾»«°édO0Ä|åÕqWPŒ–ÎÜD>­ >7ÁC|›§W͹Pùͦëg”ñ×G‚’ /™røÊl ÕH+DzùäY ¸S÷”ae†O´°AKY›´ú;Æéoõ§ìíà<~™ôÌÝ/ÁP& QÜäcdÑêÇæßâuáÙêï, ðh!®v¬½°ä+Ö'–0RÿKÍ•”A=¥½qCÑ2(Uɇpˆ¤áõ|—–¸¦ŸXÀ‘@u& Œø\¯Õ°£WñþkÊ ©™'—ôdÝ•ÒOèP]Z(6ù™}1h—@õßù¿8¡mT2 ž½›,€:ôADãí¦‰îíS|9ŒBG´?å§R‚ü{õW;U '(ˆ{|ýì'8Õ*ÍÎHÈÉþ{ÏÞv‰w{EzËîQÕ&ö¹%cè]^±R‡)õsjý.* ï…i«øS<þÀ0êã§íþäâä(½¢b=š¾ã û¸ß@ÞY°ÎöΠ䇄(ëùÓê\±#‡Í·pHÕÔßV‘¥Zp°‚À#Ó…Ç@î/^YÂkx¤kcI°þö£ò*Far™ÁÉËõ:Ù˜"7ý¦5¼ м"¥A8#hnÞ_;þ¼o£¯ªöý—¼WÀýÐAœsK¬j,çÕ7Æ–ä‡=jDlÓëZÕ5)“©Œ=‰J|eü·@øCYÉQ” œ‚$Öb, wKE2cª…¯TN=\/áG,IÙ®ï7¦k´¥í\ðµ‘Má3HVƒ8»BÁÖc“@Ø“œ„ZŸíǑ˓‹2ãƒSz¡÷úÈ’å2|ˆú}¹êïÅBÈø_³sŸùK|;·¥} +³€CÉÚw‰ ­â¿aE“¥™pk¯7ìm}ñ<®ÎBû-R?äç—]öê7ûëÈO±pîMèñ‹ÿÆü H4&¥Y2[_нûvø<¼ÌÅ0$?|IoÌýbÂÛEá´gI””LæB†§_Å´òªçI`*sÖ¢ˆÏÙÓN­"+Töª(Cóáµ-ÌŽKÏ3ÒD–¨¢o¹>¥X •»‚Šý¯±øC6QxïùÑàÛñUŠlµO3Èi“*»MØvÚ}ã}Ä«kÛÊWͨÄÃÈn὘úcoª­ªÚÓ@’’“…6Ý—#yH«¼á(;YÏ…—#dA…I[®ß‹Ñ+-?ó"Ū½b±ZþÞIF|C=.Zb¼‡¹JöáÒÞ¾Hzzwâ-øš2FÒ™5­m("I]fU=Ç æºCº‘ÆfžNZš]5B‹£úMÿ^`ˆL0ÅI¼ô’¶&®#M}£«o\àîh¯ùMËA·ø}·×Qô,æññ%¼`ŒQ¼Ÿ€*ÛûA«dõ—J@`ߟÄ}èÙ__m¦Ìùõ^’OÚÌö]ʇækŽ~„½Mÿ}K±·Ç€2äª[wÄœ¢¤—¦Ö#òÀßN8FÑÇ”õ®¢•¸]u’ ˜vbD~" ¾zÔyAÍD؈¸h|¦ÍƸھÌkÏÜ©ODñµˆn²-åíã«R,_ÙÈI¾V¶s:» )wWÀXÛjÈw5S©?•²³¾±Ÿ÷{SÌ0f“ÀO|Ø:àA T/ËaÙÙíñ®÷DaˆCb…?þC-fuõ'eÃPE]mm¤‡u¹#8¥)'i¼üÌÞ.VzêÙ ƒvŒý·IG^5FóŠÈµØ†uíäZ†Â»õÁ¹ÆØõŠ-TG.x¹Rm /n…Ãú÷Y}JLJ¢Ù[Ú´Ÿi~J*#Þà]ù]¿³ÁgÅ-À‡@Clz/©ô˜]EeLßtM„|ŒÏIÎu]o3etØòR´I¥¼­ˆìÄ~¼2n…» ‹h±éõÛÑ8ÚZ§‚=¡Âº)G|áRýò’5Q¾Ì7—MtY,&P0oiºà,º€ ÝéPOñ—¨}}Ÿ Ó?zU\@ÚêBÖ¿…³ÿº$@ÓBÝ-ß𠯣þá{¼¬µd,z=>¼^…¸íê~ÒàñÛ#¥Ïß¼ÿ$⬞}y^ŸvãVâe£ìa:ÄJ÷cá5‘)B,f’Õü1×qz-¾¢—‚8B»ò>”]s3ßeä”0¿œ E9=LKw~J¢‘¿-`yÿ-kX£²ÿ}£duÑg뙯ž8=Ô{Úc€WÜ@_2CˆVրä_1ÖWCÍ.6Ý)†×Ÿ+pÇÏp›æÎñWÚˆU³ª¾¬i¦ºS£Bä~¢¬ñ@K5Ü—žá¿ó«Ëg÷×¾Všúï86ÞßÍ66;SYO5“RQïÁ–íU\&2–Ö ˜ÅÝïÞ³€GþÈÏ­0®ŠéÜ„jæ¹ÄVË8Á¸/Ž| 7Ü¢ÇØ*ø1è÷n] ¼Ÿ*Zˆ%8‰ŠˆÃhgµ~ÑRé@fK6|™2)ã;6„,hN°$]QÁíFˆë;6rW(Aw Ç(Ž\;“OÄ«ªí0±C(ÆhJ…6œWæºùÚ¹C±|<ó¤_öø¸"{ü°ÖjoЭqˆ!‘ë´£¢ø€–pý׿¶‰"?ҥê¼¢® µ„öRÙGGJ‡~V…7Ủ_ÞØXó_ˆ$od«n\öš(ç-`­03'Ï£Ÿ›r)}.Þ`ùÒyN±LëO‘˜,*3g{ÀçvBö¸0ÃíˆDââ¾M•\Hl¥ÛcJ‘iUwK• “ë4(¤Ñ’æ¼>¡pH‡ä(×ÒcÓî¿‹lÙWvb  ëÙ÷õruüÐòlÛXUí#8¢RF…•Kø¶5™2CæÇÌ ÊRa'·o¶kþˆ]äíRƒ{%ðØžqì< ªpúÖ²%øøÏèÐ÷£n˜lÃÒ ÑV˜šâ¡îÌ$Ù0ë¡+]½úY~ ”êv~î߲iêHUq^úcÀˆAuz¥œ&QÀË•[*Ù¿]}ÅpG‰„gûgç5"S-mð¢Æ…¬&ç6qY¤Ò£ºu‘=ʆX¯oý,ØÆÀUa!„†V ”ˆ¡‹­5I“§+¦­÷:>÷‹Ü“_>¼›Î‡ó¯B­}R‡D¯qo÷¿5ºYÛ ‚¿ƒ>ÿ¶„£|È{båjªvœ¨†òˆØÌS!¦NǪ‰˜>ιž… ?¥^0¡lÊéÏÙ`¥zà)‘¨©±®- [2 o³}ÖœQ˪ºTÍã»IJ©zî=ȨؓCú\Tä3÷rž¬ŸhX! ”˜·]akªÇõLèy£»Ë Zè “®ø/Í ÛdÜxœ:ŽËF¨£V'øf­· kï¶~ªP‘3€½¦ýÓWã>Ü^_×=•ÚËÉwIW6,Ó‡©é;Oä—Éä;úMY9d%Úz¡ç™ì"¨´H¨ÎÁü}ÞòÜÖœ÷¿>Êc˜õXÄî)„LN÷ªÁë·ä³Î¿ϵêDÃ2ƒékkïþøk×î×<ç" ÙÇ¿\îµtÏ5÷óÊÚô7‡ ñÖ ^1¦%¥d:£ü-~Â6G)¾;Aä7%`A´‘Z¹{fo' nL‰ó"q1ºº4Âpéõö½´><ºÛ±’ÀryhPÿy.ÐGõy`ÔŒT©<Âù|(+Aø…ÈÛ÷Ýó8Oñ—C4Ê(2—zCq »ae²¢6l$åµù}g?û©É¶ÎÌ-P€˜âœ¸¥«O߸)s±‘ŒÒß<Ž”hÄ^Ú¾¬¢dˆ<´w %zåµ>+g0&«d(†êVµ¯ÅuËm…KMÓÔ±÷ž÷ûjZklÄU¨G>A<©¹— ée8ℤ»·Sç1#I,Ï|)V¯åTÖžôdØbX#Ýlôx ƒÌ*艢Ü}'û„Ø"·£y’†ö²Ð~àŠ½÷o6F[þÍË!ß3PR%³:²#ÒIø’àÔãdx:Ù*D©wš¥]†±³R;>É,èx} — dæšhU‡[Y΋M€ž'^¬s±Dz%ý¼r7¾ÍeX¨Tþu5b|õ{‚¿/uõ M†„–*Ñøûr nˆÞS`í«‚¯^¦›,ß}E›AG>Úªÿ¼¢×·ØÑ¿6„¨½åI%ò±ëϺ}Õ¯èa¯Ïˆ¡˜ã[+ýIÔn>½Y‚Ì—")§ä&Ÿ-?ÛæšL">“à 5WáÌú2£›¾¯s¹Oå%›—s½OuÝ‚ðt(Ù@9£þÍ«‘¤œC— à×V¼’¿6oH±§ ;g‰ïÔ®CÙ;‘7s· )=ò€ŸüÍS¹ƒ²–îÑ3ÿrê‘%NÎßè6h€åþ"AãaD¿Ô$Ä=xØT ?k5èd̹¦ ç÷Ææå"ŸnÍ÷%…O‰±®´ø~¸ Õ´ãÍ)Úù ¢þ½MÈ”G³ —)ì>)1ÿ­e;3G5Ñpû&S,°{Ø>À¿Kgx(Ï…­-ü(b_a[ñýñoc£ô·î6ýþÑJ«®ûH‘¿áøv"ŽœÍ kêîàŸõkdÓU1^ΑÁo£:ÉXÃÂä£MIHƵ%5’0+ɾkz=×°õÃò\¸k9“X{°%Ý5«f±i€ Ì9)ÞqÍK³èÖñT4›ó”&çédBFØJ†È_ïº]÷—ê$*|¼¼Óäu|Íá™xÚFÉÕ\CâTRâ§u]ŒÓ®ñP–ë|ŸáaJóo_–™U¸ Isk¥;+¯Ñ7^Ó5ØÄ½zà ãʦ¹ÚV]‹"ižjì$Ç–£JD…= „°Ä{'<;<á=_ÿèysÎìzzTEÄEY™ÑÝØD…3{ÖuEŒ­ëÜ–H?ð⨈ÐÖÚö|Wͬ-åkf$`¦÷=%­)oaÙ.Qü”$hßÔ?ûœùu<ú÷˜GËÖ³o-„©6cD›Ì(“œœgÑÿ6 ?w8ÄÐ9ã|¹)TÑh)£Eè÷W¡`¦ÙTÿÜÅ@ô‹¬›A¥Æ¬MUy¨B˜|,¸®PBcÔžMt*0O¢ô[+’©7NÑ]ô¯ü’…„—¬Ö4Ø‹w*ìÅ¿‘|‘Yæ)!wR‚ß:a¬œ Æt—¹{õb8][S[¹y”VDx}.ƒIfɦ—¶Ò1‘"©Ù¿x‡$z!¿ãc¡Â³Ã¤'˜-Òn r3 |µëæû£º—ü¬/93£~ãqg£9³&c0S'‚ªÐG¡×‹¦'®—êo_$õ&½¿ìD·À >œMÈœ}BýdÉv‘A‰ÐóïhŸÏû[Vÿ— Kv;=Æ '™}âØ®­ëJÃ5K6§n"Œþ5Äx4=iM9Ÿ,=û‹ñä:2ö¿Öïç ²æ‘Ó4ì_x¹‰j“æUX5Êœ…rÜ 2ÀÒßJDÓ!ò£ó¯¤&Zh~xº^’.Ñ#i‡Â6kyô¾L‹›^»]”ÊÄÔÚ©e7Úuž<€¨6Yå E¤A¯\‡äÁ"UQeÿê‹*E‘̤TSòÛè¸ ý—ƒ2ïùUþ5Ò<mArkÎòQÈÒ(ÔàQ¤)3îgÅyCŒ ŸÕ?m;´ÙÕseNVjVËØ”_Ž ) ‰hõk\Z«ÿ•VSzª8qPd¬“¨éE²—&Þ)1Ê84x¥ªPçŠDX§Û®?àqÞ|Á0Ó'ŽÞŸÿPÔ[â¤o€TÁô™ÊNXáì†ø™%oc¢ ì_)@D•`ÚŸÝgSð‘k|+ëS)ù£m¸ ILÁP0 ¤Kº3–o¿u7²HcH%ßÊ€ @„fšWÅÊ6J/&“îo‘å*úbÅ´ a…·Žõâ0s%6’¤Pàßû`̨—ÉYÌ^?ì÷wh[vH¦…÷H·aæ §m¢#1Qd»>)2> y]9{wž$‹0á·úÀTÝ”#Ò†xñ0=H5_–.œ˵z;©ÒyÁ¨Qþù~ÀSÕ…¢²|‘åýÉ¢bLp˜MBø›—sZõçdD'j[‘–\ºOÝ¢d4y›ƒt9üµ=Z_†¢0z“4®s»ö^ …èZ°|7zÃñþz1pÊ}jÞQ®7[âK×6ž·úAøy (Qм½²É©n÷$} )/¼:Ý÷Ï¦Š¶^}Ë.# < ú•—0Š=úI.Mí$‡ã$C§1ÜòçwÝþf] p^•»÷Píï¹3ãÙÊ›÷r%HR/)& K`^ÊÌ—éôÞ®ðÔùõº¨ÓG6šªúXJûÞ1½¡‰ã¦'bÜM}h)òsÚn#çu¿7)Ÿú…zíøê Á«^Ò4K5!Ø™I²œ7YAßýÑé\,̓˜w$}¡‚žô¿R”T­Ô™Qet6¤7Ã~úJ§ÜLI]RÆŸ(ôßÅCp²Ø-­\]mTÆ [Aje¿ì˜Ñ™‡(þÚ©“åNûñølI³ÀÈô+“½…Ì ‘%Vò“™»õ!å‚B:B 8¢'·%*$˜âï¾~Tª‘¼¼€ÕÞGíõ~4¾idá1£bßÏb—`¸ü½ó$Dž9ßÜ7ê<3âj‚ŽU|v™“ï}/aˆÈœ(¸Ázôú1 ”‚@D=´Ê÷ï ¡V0»j"[OïIŽ\xÁ#i)ê™:¯~9Š Ád0 Ô«Wy4´:)·Ñǩҕ*Àüë.1~|Šƒ­èe´s§ÖïV'’tBå2ò³mtû䶯€=ÎA¥Lö‚¡C&èãζՓ¯Vi¨ÒLæÝl&óɳ¤µ·Ì‰ËNÍk¦>‰-‰FÉ{˜Q…ÏV¾b]×ÛóX?Ò#,ýª´‘~ü•§›( €G¹ ¿y«vYŽéGí±”aõµq´iŒNi^‘o VSÛ%ãö•øò!²ë€öm£}ˆóQ7ŠXÞGŸ.?§&J֫ӣʱlj3ÖfŸ·QÌ{$ㄇhú”~Õ“LöÍ0J›ð Íé£qŸ³Ý³µ'"€ØAmû:…Œ‹IŬÚÒ]û…èʵi\õîô‰|z7»ØbZQ¡"¯M½¦ÞpžÅŽ,ÖýðPÓ™ø¼£V{Í-§¶ú8AçF·ßÏ0ŸÖT“ëÈì½NQtßÙûÍ”¾žšâ¤þw(ã3óp HaáRÈÿl•—êÕaK3AËÝ­iŠ-hÞÕe–HBšF1¶š–ýþešxOÌT€ªKĆ©$à/16cXÐÇLýËä´Ö“í-üàŠ'î霓{îê,[БŸv±žlc¤ÔÑŸ|l§flx;¾[NÚ'ÝÒõ±N¼:Îå:‘¶IL®×#ðÁÊÑÉhŸ¿f‘úìpÔï…xi©×c¿äÔmã¶|Ü V@6ÒL!Û\Æ124êRŒ~"-†æµ$™½ lo—ã*Eþ†ýü{{}ÐÕaƒú5Ý·ÌøpÎ5±–Ê”…™÷“.Äxa¥od%*é÷}oø{mlï³eÙÌM@´ÄÀõ«E±"Za诃–l sƒ²dÒ^Z’Ù%õ~',Þ×[ÀbŽü{‚q©éÎËœ(„Þ·ïóàÏuˆþJÛ)0JJÖÃ߀'ÎCNˆîP·ðš'­VJÛÈ`]Ñ ‰<˜–8þ¡mõ—ƒþõeþЦVVü!žçû¥üÚ€´Xq¶`\¯à±"b­ëuf&¥BtØ‹¾ ÷ÇëÆPx’`ùˆÍûluWLÃO*'•W‚u@3êªôúCò¦Ÿa‹Î‰øøoCK mWvf"±›³ŸÝ#ú E§Ì"L¤MNÉ!¢?eJ Šˆ k‹$4s\$îTx³å£ 5ƒ)Õ-9x¸žMBD•Q¡#¥Ì]ç{¢©Ã1E‡^@B«¥wÐ_ûú´3€"Šg º^¼É«3äXjšš@QiÓF¦bÀ%I­¿º‹YNl÷ù²ßTÈäúc›ãÀËʇ¯9ÚûΑíGÇ(öˆ]ï¿VgÅÌ{ÄqB£;Ÿ‰6þ ObÕ PàŠF´xˆ£}þ¶'ÑqKl[Ð×ä8¦í¬å`Î"/ä¥357?äô'V$5é|°ØªRülqÌ-ñHš\l[¥RÒ@?ª€'z .` „Bö#@X1zQ›?ëÞzè@zâ|¼1³E _’¡òyˆ£3g'òú±¹ÔE;Cb+.b“Rø;Èšzq7¶·ù¹åRÂRŸ^h’CÎcs‚ ùA ²°ëú\ºühtÂH /4vEÂâR5Î_u¯¾o[åóL11Óï‰~“5¸ød”…“A#cϤ˜¦±¶…\Ä'8VsÁù>y¶Þ»TBz¿°\®’Ì¢ãoÉÅÿN·õÀŒåÒùB‡ ;–åþ$ì/ ¥ ƀﶻ–¾"I¥Ú¦o[J?r®Ô«nÞPuĹå_u„&Ù¬U=LùzÖ>D(‰…ç¶'•dAWô³xI9òþ$K)÷Wº½^rÂ{ýÝÈèá·>Xt§óà }nÙÃX³Ù>cLtg]òQ6™iÙ´¤£™…¥yC„b'’1æòžòÍœ¹Y:Ì ¿õ2ç—DoÒòmÛJ貊ÙÒä¨&ø¾Œ…©u=3ª¿.€= kx꿈Œ…|Ãâ«èòŒÚ§õµeÝ!_ œ_ôL þ½LSxòG½C;w46 ß{ þeÞFì"4ê¼áð1_ÅÝÃH£Aøóû,y`´äÔŒcÍ«7þÊ ÷†'åýºûÄ•\ôQMšÃ!’x¨yu~¾¸ØC»ŸOv.»r‡³‡ÌT_J¦zðuºÊžGÁø7ÚgOz‹dÚéª!Ä-EpNƒQžÈ“"zÚáYî¯néÉgY/Ú钢ϊ¡ ‹ý‹Ú\뜞ã“ß³ïrΖ¿ )¿¨íxN@ÈcR¹¿?XÙÿJÒïx’×0î×ÄbËÁ|2Sõà´µÀ«Ša¾`—˜^Ø0?‰†Pîð=^ðe~_~dÌhÆ8.à}¢´ó„‹ pýéžòRŒVðWæÀ ïŠ!^Ž‹ß_¢›—­¨U^áx¹¾¶ùH„8ÜF &Ô䨗JvŸe‰Ïáïëý™xÐx ¶Ì²GNñ7IŽBº ÕÅ,i?‚áÚññŒOîÇ6œ ÜV=’'iã•­'R0Àäï²,Ñ%°â"£*Y°±o8Åoy~|ÎVi²‰(Ö¶Q Éà2‘«À;Ò9¼eœ,¢­÷å‰ù’8$7Î%.Ëé«_² ÀóWy:i ¨Ÿ¯ˆNê7ÇOúzß« 7_»Àˆx#0Òÿ@c˜ö(¹NÿÄï1rr=r ¢k¯A·Š[BedäÎÝzüE¹¨X5K®gàWª·š)Ž]?äMCXnÀpVsqøš®ÀŃÇÙ¢ºá(ÂJû¹Ü}_&ö2µGÁгÍ4/ý¬(šÕtLÔƒdvìÊ™î¯Où Üx½Ç˜^›i[ÿ:Ô0'Á¤ãáX]Œ¦ðÑHÁÉ-ñF—(m°œ€QA3lÉÄfZ\×§2Ñ“’žE Cóî^ o`öç_¾¿¾Þ“ÜÙŒ"Ї^÷Cµ½ègñ>2ÌŸ“Ô¹N´0®‚ˆ|žŠ±:H4Í t¹—³e˜·­b|YZ[Žýc–âÚD5©ðwt-WC!…—:nzç|@8ÐÖ‹Lý®Jƒn‘DÞš<¸øZ^†qëxFYjôÕÃ/ÌäØhÃF}ûp1+’VïüÓ>É‘wzün@…e•¸…ÊefÔª Īa÷™Ù¹ñÌ‹=«`ÑUIåÆ-\Ý^h̼ JÝ™ºZ±Š÷Æô•Iõ£¦uå^¬8L;LÒ³ËÅÔ°0±‰°Ÿ•hÉ"sÑ‘]0^¶uq¡…Pná†O`Ï2+cƒ+⯮â°&»ìÆ«­/b­’h}êÚo;Ç÷8Öˆ§þ68/PUì#ÿÔ'V©µef:ú Z:£X”cg/ÑL³<9†x¬ ì^Gñò¯ä,þ Îl:Dã[K Y°K/nÐÚÍvPê§…A´ž1HÂË÷6^ U¹†5KáðW#UOÏ/ËÚhÿ*:ýj,}rè…ê«‘.ÌáGlTaœù$·™)Æ€qIƒ=UM{.Æa~™Â¯‰+:õ«ê™¦;#;ò:4Ế©.!ö o ¨4 )>·Þðîö⵸M·oÊŠÐ)ÀÑÔoY^?7wïɯÄÁÙþ•Ø_õN2åÝê­Š­Ø¤æâr.®†ø•d9.\¬ã˜4y¤>dºœž¿GxŸ”…0YO$Ç@l§¿U•¨žÅøbm*ÜüXP‰>z ÓÆ&Ð/F?<;z¤†L!㦿S-´ Áü[¸^J)™Æù65N`žUlµº¢…HAU,ØÛ{õ6 AÉê›Í&D«ˆl¶[Ág>À+â“~÷ ñû˜?wû‘mûi§Gôb–ÿ\ìäÖO›Ö&LÖ¯L1LGà‰0â߃„ùž1‡´²ô#ó>|º¯/Óák«7+ð{‘ò©±1Ýh î‡ìªÕg5׉fÁ+ïÏþ6]è`HÝëû¯GÏ3 ½ŽoC{CÄaŒ1i=éÂ?½Vœ_„|”âÉ4üÙÚ+r¥–fÆæüwþ4•S‡NX¦œøÃªÌ¢Ò?ŒÄØöÓš¼exÄ+`gAv,]¤_ á»Ç¥Nau6(‘©lÒ:ÞIó~±5ú]ðÆ.YÏαٿv5vÜØzëæ0´]t¢ºF™¸˜DÓ‘õGàFä:¢iÁƒ uì‚4QÊ Ìs¹Ü0À~ÌõíÍÏýîœ8þ’Ú;^IáJT#,›Fn³ÎèHõpñÑ07`?ú!àþuÅWvD]©ƒEãÿ¾žWaˆ²ò0ÚÎý;ps¦™– 9.ªÔ¥¹zv8t½Ä’ÎÀ²UÀ·«_·tƘ·z•ýè¹@Vs\\y‘YLa%o|ý9t>¤»ˆ+^ÊŠY ix=Bõ»eÀlÅGTnÿ;̶£~AÏùÒGˆ±÷o¢U]ý`ŠÝý„ú{œú¹ØR{S¿â/9ÊÀÞ“I á$b˜.|u Äj¸gM'%¾€æ]¾œ«èHÝ3óL,B¸"S>HhŠØ–·__ßgfÍß¾Ä9) ˜äkR/r” õn‰vûˆ€HS„c—Òs©1¯ŸÀ}z‰-Duýüœ½óÉœ'JÕaz¶Úx½º@~Ö//KªH¦£F,›1zn5íù‰KˆÀ3¶xãPŒtÀ‰§~hØëèÍÆJ§G.È÷£m&}ÒB=$çfêáQ…8® RÌSÚ¨\}”sãi™œÊ+ìuÂypŸð½˜-)†),à&&¢•ðêRŽ"Öe ì S…€‹¹¹Ú(Ý Šæþ¦·èׂ~*Þ63ÑRåÁA®”Ú‰|©dpŒöbËÉÎ…(-LÊüÌ9².o‚/þ(Ê8~!¡ù“1cû;õÁ¢c…i ­4LÎÚ$`ÆÌ{IG†Çv˜À[nUÇIZ…RW¦å¾q¢’kÜ€ÞB÷9¾ÿÄ¿Šþ«ß9ßmœ2ë_—'ÀU}6z>.g­ßõŠ@yšváêJ¿¹}žãûU?NR¬M y¢oüúi_qƒô5i$åé =`0À½?ö~F L€ l¤ªÕÚ}‰+SGhg*=_dú&µôo¦P¸©¨N[QÐ$C5òµÿÊ)66ú‰ g—:}ždälo{zxÍoæü¾He…äcÙaÿ@‹~7rÜ[c7úùÒ„4s? •~È Q§–ŸR ,pŒ¯+f„)c“Ï»¿˜¿E`œWO8z?bÑñXÙeJ~ôVƒqA–v1ˆq©B]/xÁÙ>¿T¬÷÷O¢á ¹›ß±ó•’š:tý—>ˆ™âô]Ež„‘éoøZøGË4ͤ›Ì=k ÒØqP}ªÁ´Éž'—@m{¤‚µ»ì¿ÔKw5)ÃcÒØÐEG´w?“+¬R%õOÑ{sÿœñ¤ÎÚüáÄD,o™˜n^ºû›N©9z½Æ¸Íôq- aÅU@{à`—ÊÙr3¯ÆA+B°NTžu…αü>4]yÒi`Å;Íhàø¶ŠÉÓs‚Œ ¤J#Q,Bÿ&Ä^³x©9=œçú?w’œ£Só6)ÓH÷Kç^•Y=—]ì+p:mãL›_ºë·ØSŸã¯c J<œÈãùôûù%:i³\³Ð<û|bùå½Ïe!éé¨9:J"Ôþ÷0ª?¹ì‚³±;I»èõin~][p5ÝÛ¿6š'B¿ýRÌz°³É'Mí²/ÜûêÐ^ïˆæåW«T|²o:ñtßÙUXß6V¾KÆ~ÝëAÔÍDŒY¼¶HVO”‡Qaô"ÞzÌ#´P‰M¢ëE2Uö®…):eÚÄÿk–ÐýÕS{ ä@>ØÕDçš~îCÌßȹ,i‹ÎÙ |G–YÕõ/‰ìt!T${JäÜ7ðaÆw(Ò·ÜüpA•Ià¹äɃ(s7w¡b}s Ò ûâr¼‹×ù Ó4æ}(çUv·à.Jùþ¤¾Ã€ƒ^â v—¹3EV¤žAÆ¿Vl»¶?$k£¡¶‚~%L¦6&N„¼(C€‚·M(“-mø÷|㩼’¢foÒ{]j1U”à ‰– ¿Ò¸£6ô%• ]ί* »0a"¯h}%T!Î_*–³9ïj#dð/&†õ9öÊ,wØb=êézP±%¤'™ãÆÖ™êª3ÓëPúJòlîÆèì~ÿÚTvv§¡º*ø×y=°ò@Æ5¼oO³ÐX4Se|ÀÅ8ðð'ãXƒhífß½3Åk-6y\æäýúðpyYá½ ŸW4K"Ï3]ªóØèŒÇ>_Ëb-7p6ƒOÚ6n7>èÓ’Ø3æü.ž‚OMÁ9]+kP7§ W“#ƒ|ðø—…p›&r™ B´õ¢sã‰,RHÔJ_ðÇAŠEI——ð÷¡áÝˬ/Ê„,ĤÉ=¿&%¯þ¡s"C½RYʝè#"™ð&@†öáD˜.#O¤ÈI§àò×Ö~™_ƒè᯼óÒĹØß¨Ý5•ÎD7vØtTRŸÜ.]û Pn4B¯Î·~ô+¢ͳå¤zù¹#8:ÁÈȺ¯¿qJ¤úÿöotH yS ©rÙsÅIü—¶þ:?QG¿–"¾Ù@ÐG iø³!Z^^èò.îŸT}°ÒZKùËŸê×™GÙÓ,—Adß·šFÃÇ|/“ßͪ+Ž“Iøamr8V¸}qm’ãH<è§ÿ*æô’ðšr¤ÉÌøJ Ý5ƒæ1mŸbÊžøë¡Qc1§ÿ<+r¹úëµ!5å¥ÉSÐŒ 2ÃÅ.ÇΟ¬H¤amLÕÉÔ wÏr{ñÄ->»^=iùOñéw+"Ä/7éÏ÷DÏ f\ª©úK¥#Q7IËUy6Ø“ÙR TþÝ6¨úë»*‘¨ÕÊŠ­Ñ_É™ý¼ßHLùTZ…Ì5nò“‘¿æe„—™ÕË‚59æ3ñÖAü«ðDuˆžÃ¸íMÿ}¥k!•yt—áÄ·Œý€:1–rpÎI_ Uï'šÛ´æ­\¨~þ%_HŒa¼6„,†€šŸŸ÷ZEó ÓàÖDƘ! ßY¼ªË˜Á‹¾\1òÁ£¹iEOyæTU¯ÿÚ– z[oõ ¡Z} áŽcÅ;±þNKr¹®š„ Ë(ƒ'¥¬CW±ej0ϲ«iT^ÂÃHw¼öŒäºâ:´OÝYÅM=˜HKt^½ˆ‘ì˜×ú‰w†æ\íß“xÎ/(Œ aœYו֪ 5¹cð¼`Ú‡8Ú¨¾éA¹M6™R„ô7i>/#üöŽÔ¾ŠTQ;’T˪ ôÄ™øÝëί±‡²¬º£A^?ŽÈ°¡ß~€ºŸ¯=!§8Ê볌þæƒqíïÔ­çÒý~ =›D‡W}ŠzN¯Ö9ÌAÚ¦M>mûiÆI,µWb…¿ØuYJS#þ×rá3½ïhî×sÐR¬×RÉÌ穆ÕíGõ)Ÿ8“oqq/c"ƒOS¡ëà<ÆLBÑ–Ô"é¿ãªßjG?uHÉWöï  ·RwXz.?“y—¥Xõ»ú¶vàu:ó„vô$ˆÃƬ¤ûï8ö håýu ¢-”TjÔÆBÍ#aI€ˆáAcIçz‰æß½÷]v–xÍm ÙqÏ}ù5/Öè°¯ïå¢{wÐc×4Bˆ?å/ï½g*úmuàk8E‡“"*îa;Ž$|)!d¨m+g³‡!TrAý ©Ï¿k•çãýÕeþ DddPì~ꑾµÞrÆ ÛHýÚCç´JÕÅÒ/yG¶ºSô•Ž9µÍ 5¹^ùB“ÓÀ_?wKJM3™ò‡¨¾ðÎåˆN® ¹wç`05-ïôê–{+ÉiôÍÝ–J_è­û+–ÅØý_·Î÷õ æÖßò\a–P ¤Ièq{˜6V âWŽ'ŠÄKбáÉÿ.lXnò›_äË&l]NÄõo8ÙéQÍ IuH݉½û EÈúëÓÊí¶1¥ €ïߤçLnÉ*Úòy£3ŒjÎýšqŸt0ÞY¤ß+0âÎHÓúG‘Ÿdá÷Õ|ÇHW˜9 9h°iöGÛÛ®$pCv¢íੈ¤À¹h5„p¾?Ñ%[ËQNJ¢ИmÕd\²µÑ„yŸ‹í'4¸Ð<&pï*q9̆|°Ã»ÇÝ´ôñ㈥²égAÙÔ'»÷êÇþòêû@Ù]]‹C¸'Mƒ€Å¬iT œêîÞÜ"¿á”U®›FÖ7úÕÛ1 +}’¾—¨É±œÖäÅÖ…VýUÈ5WZͳѡ¿JÊѯHàjÒ#ñ³€BÙôŸëžÈlvòÄ?Æ+dl¿ð2…™–ãnsaÙk¸»Ó°nÇMÔÚé¿Ãîû!(ÜÇR,¹J +ìKïŒoÝø¨ÝQ1Þ~~iŸd§æÊ~K]ðÑC,céO?çO‘‹7g刂"ÔCeeÝÓ=&Iólƒ~òù;!# J¯¸&šÕéµ6¬´'ë‚zB0$Q )²±>^q÷Œæ*"œ2Á?Åët؉x±VKHDÿp-å´Çiº·²cïBðáF=Áµª‹P«Û‹0Œ ¿&!ƒlò®_ùz+Ì'… iX „ß8/â¾ñWŠÞo ’Þ¤¿ZízaEØ%èÃ÷—ðÌ»ÍG5þ•(hé×L²¬<‚p{j» Êj¹ÏðºÔÖ=Š÷5ÿøâÁ¬.’ÙVÕºsiÂþ.;µw%¦r ç'J>®§×ÜJDRÒGÙG1ˤÌeÍß¹’lóR‹7—„BIö‹®'R_ F"dC½’}¨dÈGÖdeOÊÌö8ÎV.Žk‹a’›äÇ5Ú¬Îxt!(b5^å1U>T@Ê™™æ9^7gÜß·ÿ?”´û+¾ŽÏX=ˆ˜?‘tè0þj›æÒbG³j³>¼#þX®J½"™H*?ï!l¶{Ìîfj%s_…NC[ÉïûèT€ìúVÀ-È¢UuV+¤¯Õ¥þs%Xzu ööÀÑŦ¤ñYíRræã­—/ –ß_sE@&ÖΣÀ[£¶wÒ¶"‚ù}—¹j8?Ù¦wΞ$ÝTsãƒÀÖQë_c$6W¢R²r´,³‡ £¬Ù@ZÅÎFßæñÛŠØ€þd›ÐJâƒÖÉß1¼Kø¯Éž%. 5l$£FK7Æ•ËâùýHœoù9 Hs¼Ì|mÆCÛtŒf&sA_S¨\a9óo¼)®šlŠëž§ÌCÛߨ?ú¯R«¼!¿û„m£öḦ0ÊKÍÖ­]±¦%N„ýî%æV!‘ùÀ|Üî‡Qo9A]EŒ~ê~“ãïÈäcI¾b b–ý5¸=¿@o™£B=jqÌ\"×ß—–üVu“@‰«©ˆ”ÆŸÝÿâ8QÇVrùÓÖ\ÿ§Ï fÇsÕ€üIZfçøúÁtA¥ØØ7ÝZ¿e‰zâ~Àþ^<ÑÂñ÷ª?1‰S6ÐFctIÐñ'¥§÷sRÄòå̹«çH#q/ xrEèç‰ÿ.´h×:Š"é>}¼|b£#¾ø;Yd@‡E0_”0„%½eE üˆ€Ö¥|·EpYíàü}ƒQE x‰JS­iUþÍ*XOPïõG 2‡ÒEir™Pôr­+ä‚Ïz¦¨¾°“ìÀ…È–ó¾±X’Y¢}Üê-(å¿MNÁÄèkãÝýœ—ADÕ6À¾1ÅŸs› ÍGâìÜLðvu&Rø™|k)ÆK.¶âçyÎ&¬sêçêbhJ#¾å1aŸ(}>Òõö_TiØj©ízSÂÚ~h©ÀG%ƒgŽsw‚2WÉ´w çR‰Õäs t²3ô,ÁQmÇoT ÊÓÞST_Ûþ.¯„¾Çã7š¹ÒÖ÷Pn®­éy㌠ãç­^£uc…ëUS®{>üë˜îØú/Ìâ¼ËG}\ê+gúŠ\Yä,ºèË_ùÇP*þËïè%ÇͺÁ‡Ãò?H{ ;‰ðt±HÍò±¶}G}xübìÔ¿n2 ÌV·?aÀ»dôˆT=¹f X5x0 ÇaƒWÛØÞÍ,ÁžöP¼7ó§}¨Ê‘òC<$˜ˆ4{Ÿ•¼t<•¦ ¸Î指½»VÊ„ôV¥L£ƒ£ÄǂƎÈ#¬¼Ä£>Œ›_I€ööxÙðijs8Éípl'·ÒãØû`ŠGïc:¸Ž¦-#Ò™5Y˜®Ÿ^ê>Ñý—È”5¼Á#ò‚òçUª}«'œQxõ«ŸËX¾²å„@\FþvŽvç :/ÑËH;^â••¤±šº—øw®$SF¡‘d ûBô“^°ïUº}øS’†ßbu’0‚Q“&ÍK!/X´Ÿå¿“X–/Ï"·¬šKU8Œ©è <>r4*b¡¼ááσ鹨 §®óÛ¿)0n¯ˆ\›À÷äüaç88˼¡ŒFZ7NR» 7ŽƒHh†¸ŠUŒöŠ„¹à…À~¼Òøæ†kj£R­˜àªÀáË»äF*u/‰¬}’”¶è¯mt < w·Ä·rjJTõG´Ì1>¼Ef c.ýPY’žƒ¸û+ÚÁ¯ô>;‡;ªý2ØXúï¬ D‹Ìõ1¸í‡ë/GÉéDpkùÍ2ê¯bY›ÔOôÙ~–%Œîé½vZú0¦'BAŠ„e¥ä7cº ›uÓܼ½ŸžUlpáºj÷!ãä_6¢[D»zèáÕl)ºãÅ´¬ƒ J) “W 4ÐccžàGÕYí‘Íæ–'[P¿‰/?]±Áo]é׊ċÏüz(ì+<¤Ö?U\0¬ãhÓ™ëÏûÓå—š;x¢êÞQ‚þ¸è¬kS½ Ç·œ&+n_à‡k…}|/դ͙–ßûQÜVø[ÙD°m–é\0- ƒ“Íß+¯6ig•~èC“›¯“fõÁü{ Nà*^4¨)~ŠCÖšéž§Ä©vð*J l¤¥ÿ:uÃI㥑ðއr ù¤í0Yì g‰œ^äÉ»C°ºŸ¿ŸÒR§²Éˤ…ûzð7T³ÎB2É._UC ÷0Œ±+_~%ùâ0AÔnæx3DØ_0'¡máÝ&Ä"“½}ü¬û\CaC·~1ûß„‹¤ À~.o€c˜}ï8f½ïûèÜ[¦ÍWðÀ²u ×àó¬—šhcWéèGzæÜ‡³öÅeôÓkx™KæL«îè¯_÷OD´*ÿ %¹(ʵð: -p9šNá#ÙZ˜Ìö2 4bTݬ Yªð*€Î5^|ÿtÕtkÊ5WÍBF)ÈXÄ3ÁáuxvÕ£2]ãÄÄëÁe_Ù¯xÀ·<L;L± ß…Kx ]1ý O5Fý¯WÚ¤A%2)Ã/ˆmpjÔV_Mgàò)q’$ã²Pcwί;ºŠGU¿ÄèåÍiæïkzÉ+‚’ŸV¹¥¥\÷ÝÆÆEöå—µ68nž ŽõÛáeç"ðÚ¥Ýg•«¤;~V1¨ÙQÇÌéD"²E¥Xó½'ÿ> Œ±þÞ¦ÒšW¥fë [€'CUšl ²À¥Å/E¼4ï¾±ëù/&p&”…%ú€ókÖ–ÔÆ{q=LP"\+qm_2ü’A}ìƒÉÁ_·h)#Æ}aÔuG7 ±£€ƒ lPîäêùÝÈZ¦×ͽȽ:"çÄ\ß‚ªO <Ï£ž…±›¦´½ûÞ.W¨4Òƒt]÷‰À N‰8”<Éj¨ÉúÆ…,ÓE9ÙtRÁtð1HÅ©—ܶ ìMû82\Í‹¿ï{S°åãµB£¦@•Ùž~â>ƒ§—¦7‹Ð”+*ƒ/Eø÷Y37”²ôÝnþ,a<ü‰Úgê7‹Û¥R_áŽÂ ý–B&&•©-$Çh•˜Ùi¤LŽf¶l¯)«k73~Ø;¨a){®.VÖ¦G2vï÷¼@uì¿ÆúR>•m {iOزì%dc¦2Õ#ôxóÒÁ ?ã È¨HN¾;IW8žùžÒè{úIñE”Lëâ¿Ã¬Î6¯à–¿†õÐ>V8EatbÔÕbê”/j…0êÁß6¶,-¢|ª>½A†ƒŒ”ŠÏHå‡e0J«g¬˜àbKæ$DO鹺“óëÆ€‚ó¯ð¯ÞåT°¿] éç‡{¥ý<ã—xe¹J]뀊mîß±ÂpHNfÂZ¹ÈDÛÞß”.æá‡çÄg4ÚAš£™ýXîkº# 1_S ŸG[ÒO†·ÆÓ²G÷w¿}ze‘c°ØÇö_O&•¡RƉ,Ë~gÐüÒü˜ŸR{›Ø¼ÕXê€Y?-Þî¤O6œ‹ê/ õÏ×tÙü£óXr ¢è¯°gA°$çœÙ‘Dáë͸ÊUvyfôè¾}®ô^7¯\JaR+'ÿîS Ë{ï† žœÊ§•À§(ä ±î?‚—CzÌâÉÏé-Xš„ÔA|ø¢C|®–œz`ü©¥CJ¬J0D©ïÇàc÷Þ´2`},ß„…Ñ¥Jbvrû0þDz(‹èKŸW~ŽcíÇÇÄç(xZ²¹J»P{d‡üÓ%DWÓ^’…ÂÈ{Ž®–ê&¬¢›sY|Xµœñ]ñœl€’[ Ž ˜¡’ÓÛS,QC ªÿ&0žK¨RWrª,}›JÇn>EmŒÖ<—¡©ü|*n’,;Á”«Ü  ùˆiª J'‹Þá&SÛ>G)•öíǵ¬úz¿ƒ[°<ã"úØ… ÓŒ×zê ;ÕzqäÆ_lycn…øU ìÒìŸGa§î­Ó8Œãó½ §CªB/7týY‚ZÀ®"í‰2)ð1C)£ëçÛû/¨`,dÂØ þ½[½Ä0=¾[PB@³\.Åô!ƒW2/!$=D^ç§økè`ExNK àLÎŽ ò{I- ìpg^7BöS•XD<ÀĹÌíÔ_ ;ö’MR;È~ |šÎ‹ži¾…ŒGâÓ'Fn ~F†BTHª]7 ÔT-–0çA«æxEiyºFuÞqaœè=\`äi7ž]œiäò˜ŸOñrçEA¥ÿ‘•ÇÒ”ÿì'+ÛŠ¹%Ë:_Ÿ\÷Å*wHò3{íogZße°ˆ!¾õþ6"/Çx0U±(PJ’2JA¾¿y“„~Ôô;[ƒ7ÅŒE/.O8ß~í¸dÏ-e~¤a“âÜÙGj’Â%‰ßn{¦*ÌÕ*z2Jä"h’‘ ö¥êŠûÇô®Ò±%ŠÐ³)’ÕÛñ;°Qxí¥dò`T<®µâbÌîsœ¬crS°r¶åW&¢UÍÄ[À¡²K¸A…«ïFÍ ‘{ÙW<Êó›º@ºqË•Ýë ÿí£ºyýJÇs7ëí%·TY!rc¿9Ì›ªËÖ®üZ$yn[XëT#9X¥±ËЇ¶oˆÈ¿B€ŸP=G+-Ï6Ôºf$†2~Š­îÌÔ–`¥[ñ^‰Æ ’ Sa…ÞSk$ËÇÆnPiîOÚmºê|§Eqåç– VÝG—åA2s}¯ß²‹šŸ‡£®Ù9hƒ»9ˆpÙOûI{ö ¬ÊÁØÞé:g—¢º7ÛÜÂlHєɦSø*oÍaÈ>'¯L­Åß„Òú ;²qgóý¯“X»ꦡ== ª|fÇ¿>ÿѱ6-dl1¾`!Y¬Ð£¼c×ãÁPÒg¸ü–êTv–=[[û×¢¹«vêsÍŸ]Æßb2nvö€O6)Åø¼¯ž†ž\fùÑÔ•³ÇƒMó<Ùþ•fX¢ÔþÞ£0žNêúf1þÃôÖ€\½R^ƒöô FŸº÷iU@tfr=KóAñÍomölhå)0²BÚ;€ª‡áeÓRWMQ‰ C~ûyê $«›» ±,? Ñ ­ðr¾êÚtÂ0Á¶ÀQM Ôbe½X¶“!0ë@˜6ÆöDóénõ²MÝj¹¯=øD9¹–np&†Îí¶ç.ëº+‡Å;±ý†d“°ÐŸ#1! ó:&ÈWDƒÅ‡;=˜¿%2 Ù ¤ÑK./Ð/Öáf,­H빯#NwVëðµú[æ…’AÙ§xµ”>±yÝßZmß)AeÍ$¿‹ƒæy’{"¶Ö¡³|>^ñ¡½†.š¨jTŠ 0m÷¹ºC»©fÔi¤Š?y6þ¶4TA"{‰ÿâ@_Põ7i塜ÐVópßNÒa×÷ë]š½ÄàùšŽªßòõQÇùëž<\KXëf;JülMŠ0P — H—)ʙڸÕ3®Ü•ÞÒÖAå ­¬ù~“ÍgD—éh× Ç/Äy:ç÷D©Úì&{²ŸüÑ_sŸH¡yÔ‚ ìöø^иüùj­ ¶ÿ浸?):½W4üXÿºó]òç` p¡ ¦—­j<"dîÍäÎçú߇­°*ÎJîNçêð#Œpë©u mWFîÌÙS—Ð¥t °ßpä -9W“*åÒW#¾´„ì©÷“UÃûâ"‰E;VÛ( ´û“Še¾©Ø‰°Qgß–ÀE]ö攘¿Ò¶ÆŽŠÖùÊ´tü±ùü“n‹z¨$ƒj¦'®wŽ7(Ñ ÂÉD–¨ààoÌúø‹-KéþkÃ0öxðT¬åÞ±³§QÊà©8z¿Â…ta2(ìžHéÝtW;\ñ|à>¼’Õz?O<³йô7K–`ëaâ™*÷Ñ‚´„×LOn»lŠ€Û}à-orkR¥Û8 F®ä (ëzLà&%ü&$÷ÈŒ ÈŒB³8Ù˜'ûp`;kÃ}Ô~=î|Iûᧈ˜Ähõ#æ¼ÈÇ'¯„?GÅ+6te I£Ò2¶ô¨0¬#†ž¨8uü7¾ê…å1ª²Ùª)·¶®RƒØoþÚ#8©é|òµ¿z²9,¹AË\Ìt¦/Ðï_â(ÅQ/åF XkçR\HÝQ‘õîå"‘…o6¹U­$Ð+P^ä.ã½_ª)¡E1X¿÷™À ÙÞ%m2ïêͲ0"äÞ£µÕ¾Þ(Î?Ú` ™Sò ¤÷zެñòpéÓ-/i­|dÙâhí[ ˜?¾ÝÜlg}·ß š¦œ½¾æX:Ño¢·xbp[BgôZ·¢KˆïG—å¦ünL|®>µÅ†‚“xÔ€Œd¤ þ„žcOéá5V-aÖ§M4ùûB~²Q5ðò­ÿ¶Ê,ýô îÈ—¯y%ÔðQ¿ý£ØG¶·eÍ.¸ì¯„ýDð—ý‰¨.åw%6øúR×e KÐ0žlòψn±gI\ÑËÎþذýظuÑv¸¼å÷ÒüHÿ ¬×À2òs_Ëlzò¯ ÿz/•Fˆ%˜°TˆÎeÂшmRŠÑ<^ oíopÕ ¦ì>Þ£JÖÓö…i]QEðœ”fëçÓ­.TĈ!õSÜ£ö6‡×Ò_jË!\o†^µL.”²œ¿Ô?Z’:˜è{ümœÿŠR^óe¬j3ëI rŒ|Èq¢ß:57÷³ï¦Aø•¤»‡ù·7¤÷ØdÎÆ ’^Øæ#5ç!½e@äD+¦N·ûΜX;«¿¶Ý*Ø÷CÈôA€Ž¤B$­.·2¯TˆÙr>êºs_IýÍõýk÷Ÿ®|ßû|õý¾Xy¹»7dóÀØ÷•áz_Ì®·½Þ)¥l?:÷V3oC3%@!n ‚Éj¾Ö—ÉK° ´Ø×›!à_©Ikª_¯I_y¼„G3ɹþ= èÐÉ»Ö2Íä~ ®~BvDx nÆlœ£os€2ŠÌKúåød-ÇÒc9´Ÿ¸¨0JCa÷ÿ^ðÃøæušŽèm½Z”7:ïiÆ Þô…¤ãqpÌ™&â5Rpl”Í“ÀõP ÅñíGJy­H!è`X¤À<šâì'®(±8Ì8™ùôIH¥û…üf;½æ=•c"3çC”ãRñÖ~×¢wˆ6iNÜí\ŸÛ®ì¯ÝXÝ/ðOüv&ií•-$~ÅIµM‚\CSyå¹ÝÝsÉÌQþMÞžå /à*Ø>ÍH#¥{¬Û¢"×eÄľL`~ÿ«óê§M€¹ñT²5X5=¤Žêr0ÆÚ{¯ç'ìð›÷‡w¯T)·ž³ðXÇD'•ië&%¼ã£8°%~W£äM¡ÛW›>ñR3ÓÇþmj{ɇóÔª5/@}8ƒù:#—‚‚èéæUˆï¼~}I!™[|;ë{ûíhI ˜€VXLœœ Fµ0¨O:4†ò’F Ñ–¶HE˜8£Ø¤¥ÿàŒLÉø_›¨i_ã÷çןÌG½Š0ÃXU_ŠÉeØèXÄZ˜KÇß85‰7Ø ÙÙá_æÊ<•fljŒÍÎóo#jõDü‘ÃcdVªl¹ðÒâ›?6g3xöy柮»-§¿é€†N-6Îël÷ÛÍ«1—Öí N'pU)?ðé-©¯¶MèüZ’ötÐbÊZ…)Ÿõå¿ac‘¸ñ^µ_°4v ÈþÀ®](‰M«¶"i¸c·w^ANUç\͸üô¸¡;TªØt?˜¦º³‡úÄ–ž\=úcŒH:|°³]&>3Y+õq%Çw­ “R­šP¬£4½4GÚSô*L3½yEô@Ç[_vÎ6”Žp‰ºšm-ÐW€‹æoVU# 'I€ ¥*þßù×ä)ù‹Äk–ö"RE±þTuþæ¼½p?ZjëÃQûCw3þ›U®À†¥á 횘cYÌ”4^J%–$Öúk7–4ï3¡ÂøkÓ«éÍ!+{QzÏoûiiO†ïh©(0¯íÐ!h—ò]œü1 Öf¤'ŽÙÌ òPñŽøA!!Ôµ-¼ ¿ˆ œPwï~gÙûxÅU-:ËññZ€6ùæSãvï.5{Ü}$ã¯oÝ›}­mH\Vo/D4O6nG|Îò·Z/$t"›‘:óÕÂÙ[¸»,ö]>~¡Ç7¾ßfwšŽÑ =’"Kþ¸ÙBu‘ŠÎ ñ³|"úåÚ=z„Òæ'‡D¤³"w†ðÇ{ŒsŸ‚“xÂX?ºãù°Ó£³lÝpüÊB“ýBD ËomÀ÷©["òε•}øË?âÏ –&€ûq4 4âbç³#R÷XË´'øWdbÿ5Bë£ulaýU¾OZk5HC/¼¼Ó{e|Noÿ Ó— EñÑàqßóÜãµÜ è·Zþ"2÷ë%ƒ~˜m,×qæ6ΛlÓEûùLûǽ¼¯±÷H‡! ¬%zòˆ˜ìgĪRoz _ºÅ3î:¸‘¢-}ÂÐ9³‹ç’úaAƒçkÖ~H HW|ãø§¥‚B€qè7?…µ‰—M J¾¢Í Ib)TZPDïüÛ(X‘GÍÐc$ø™]v(} ‹-·C/{˜ONGdâ$pOÜÏQ_Kb6^Ø7Éýš¸íÕŽ­wŸÂÀ£þ¡E«:ƒ a\rVß|Å£`îwç*6³“8¤[Æk›jÃQ÷ yÙ©DP~ÏåM‹þòטnœš)­w¾HWi³WTöÝp.„È;õêO¿üc ÷ƒ }7ú£§Ÿ<¯ÜT>õA²4‰Ãѓ҄ v¸Íô÷¤T0;0Ÿ¹ëè·©TÄœ†û«÷š¢×öÝcw!îHÍlN1¬oÒŽØ:µú×Î’£ÓïºÞ ¿Ô š3Q£‹¹%\¯ŠžéY¬šà‰2ßc¹Cïb^u­+>Ê×´ï÷O·¯6Eí½›e{¬ÿ*A«¬˜pm[òèÚÓŽ‘ ªÑåt̨꼋ï9·Ôš¥ñYÉ>å„’—aû”`úXs›Ì–©¥i…üq©O@¿ ƒe ³ŸJluÝÓ°¥Jl¢û·)¶¾}(꩸¶·©H5Câ²—³£Ayzd·”R!6ÖÌ'VÝ›rèœv·-âÙ/òé:P7TRB—äõM—W KÚÖ÷É %gÍ¡H ´+ôßÎĪŠb$üÔÒ xE¬euǤ¤X:Ð QTy•Ž~GÔ‰°H#ßdŸ²”yâµñàÇÊ¿·µ-¬ý~]±’Isÿƪ1 dŽA}£Z^¶â$öY¨´õ}¤T†°.ï_Æ’/¬ÁQåä{€+´A}>;³;Îá΃îOÐ:ñ.”Â|“9ö+ Ýÿš†Ä“6ÃØÙ%7æ Œ–¹ÑôXX*sc$°óRŽQøÆÑd(8<Ç'zVŒ‘X¦îµ/SKøáN™ŸÁJäÁ%\=§Rû—|ëLC…š7%jlPFßÓèô´òLíeáKªê %`ÅÆMîs_$n“àó !U=Wuòú’Ÿó€¹%=Ä Ë0õÊãÇ=ÝFLBù¦—Ò}»çX¶í¯·Fî Wilqa§Öý¦¬=• Ÿ ­7´ô“¢íζGñF˜‚_®¢Ö‘í-˜«ÎIó3ÅNþ°ä)¯6¸â<‘½wÖyjÞÆò&b9- )Û»‡ˆõ¥ó!Ä2—…ÎçÅpüæ¯ì‚‘ÏW !„‘¹…eN‚Ÿc'Ú>Æi„$½ F°(ónb!ο¿wY|Œ—NŒK/Ÿå|¥þhß ŒÆ ú1”Ÿb»=#æäÊðübîª%ʆ ¥ðAUñwÃ"çP©kF½Ki¥4ëY»ñ¿Çª Å‚ùg»U°6ÉÞd Ÿy~VË—y½Í¼¤´©.A*ªGw®R7z0™·f÷ë2ñ>DÖÚðŸµýZÆ.îGÐý~’ÓÝó3<÷%nYoÚµ1Þ‚¨Þ‘]YEJkëå"Õ{†þüGé‚TÜœ 4šºÿä © ŒÇÈŒe<4´IQIzqÎ×ùwŠíhºYT<@…}ó½lúø¼T%—mÙ*G‡ êy\œò1ÅÞrΖ%7»²ÃNÔÜ}²èÐì’Hÿùæ-X躨@}NŽÕx{å³Ü –~m°,—ŒC¾e…}d˜ÉÝÚØ§àôK´w 1¿>® 5¿¤[ñ£óë2x©F[ÛÞ6ù·-™; 9+ùßa†RM ð¸§Î¸f:FÁ›9ÒåOò±™ BS8Ù 6²,‘6à1êôP_]‘Fµx7ݎȤüR>ª‘F¨ËÙÒ#ydÊ4 l¾“¤«¤Œ  G 6 Ó©þ‚©±J ð­¾Õø"îe={=›)-'´LÄ)ÂyœÌ {î°Œ­dV™º¸9lL°íÑoõädý×7H¾R¢ú„°ëkDn?oÉ>7ƒ&J:Ø7!UŠôWð¯ïý/=ñ,1ûî æC£qÞXòCÃF‚ˆ—=êôÈßLy¥­|<åXÛÒÅ׉:ß—õ jŸödÁèç–šTfùÊ“º)6þ¶ñUö°udc¡LE$2Ï`ÑœDtÓeŒPù–—=pY+¹ ¾0r“K|÷7å ûDÑ•+TÎ@·"ž€æÅs ^¾Ú‡ƒÏjƒ_Zz´¤Ú.í0¾ù‹›jűç×e_Grút'?ÙÈ¿^˜¢3Üv@*¿…®'[¦2Èi,I¨&d¨^÷CuîjŸš®î+-ĺ%q0üˆ/Äøó}•`=JrdËôÙJ°ûc·AæœBIóko:oi“R”é ¦©Y )µp_!gäu8›fH ¶qIÛ9«c@Çû_ZT- l- v7÷LÿÑsÉãmyìÚf¸E67Ö†tNþë† B Á¿!~ï¡ÁgÒhäE¦ w£hžýæãûåkÍ›gÊs)OÞôóJñÞ”T|& ÒþŽ® Ñ‘ôM°u‰UÞ—”æÂÒ÷a­+òÌxà 'ª¥–Ç#j)~(ŽE élôªBÄ].éo”ZvžU °þFHâlf8k“ì/‘ÞU¸[qWýs¸ãyße-û“+«ºöè2Ý´¹6¿}¡7±¼ÂͰ¢œ‹:pïëçÓKH]“¢mÿ±6¨:69ÏSá 0-©å½«ÉKÍJ¤í¤0†_OÚŽ™xrþ7@+a–‚‡ùⳑô¥ªmÁÑ¿+,掳Ü×¥˜©_óïÇÆfË~ ÎÖíü¹}õÅè h‹£Jq¸ïœ‹sû•¶cÍïT >~ù£ÅóÆ"­vF#=Xõ¸*/Ã<âª'`R~&+¨å Þ¿ÑŸlHã?5Glqî[X¤e#¿Ä\Åž¦üÌ…?qýhÞ¢‡½ë`Ù2‚Š“pèµ€¥ïÑç ˆ|0AY(ú^ÎmÆ·ŽkJ)f£Îî™iüÚp³:T°©ØS\>L~¢©É’pI#ëPé.á¹ÿÂiX ø²7ÓVPcB‹\2[¢×|e’=á’7æœÕîîaËU‹†/…å={³E R‚ë»X:ر©l#¿¾;ó;øƒû ï¡ßø™£*ÒXï“DÉø˜˜jå—8cé<ò'¼õé¤Ñ+h’A¾÷2Ë­84ÅXð,Ò›qãÒÒE <´Ô|‰³Ÿ8Ìk™¡­Û®j+ÍOÙœ_»f\R~”©@6Yý%?Ó©T¿¢K1Íò7Ûƒ¾T΋Cø²éüN-Sȧ ïsÚýuƒ ·¯Ÿ¦à>² L·¯å÷ÞhÂaò†AîTÞa»3nÙz=×ÿ;O@ÅÍ›¯î•JóY3>?2|´™9Ê·8Ðää úò¡HûfHk½‰È`Ý(Ѝƒnèè1 ù“ËI¾:U¿WáÁ¯~Ï2fO]>ÀÇyÈvFwÝܲ»ïm‚&?eÛÐé"à!úǯ„ýº®Ÿ¤¯E%ˆý¨L)%¨Ð'ˆ6ÍB×Z㪠“ &Á0ï\{·ivåùl•Bò[ï“v#lY}󨮊ŸæRs1q-76~iæüi}÷ŽK­ãn¥i “ž;?6, €ï÷A ˜žºD\{ê¾Ãxž¯ªEjDiÙ ?JKi£ëlµj•Z m=ƒÆ«•*Î{Cà0ŠjFžqÐàˆCà u}ÿ޲X˜ØÑÍ­Â?ë-_Ù—_…1vmö§‡†»ÊËÄSA9é™ÁZUŠñ¯™a•lk ?9SÀ:‘ ðÅ“_Åâe9"%¤xÏA1ìBû7¬”ÿ¢?cc¦v1²}j™µÓǺfíCOW÷ð›GÅsvë…fbŒæNÀÎ9”úéS‰9HøûËËŒX¿è0}ºÏ^¹3Û.\vX#®¿$D)¿ÁJùìg°?ߪÀ6ç/€_¥ú†»\SXIë±ÚfÒ¬1î×u>ϬT |ìýê¢@æ¾×dåŒâÓ“,æø²~î®ú~•›ÔÙ·¯dwzÒÛè%.Y,^{€‰È‘_E {Ôx+px¸O·–ƒ‘þþµì±¶Ç#e•QÚçÇCÅõÃ. » n¤†b@žøW}¤Ýž\ú‡oò¬BŸn†—ú&¤kׯ/ØFÊ]Ö«7{²‘Œ®lBñZw¢ŠZ}õÊæñÊ$û{!™XY¥ë0¥‘Ñø«â¿°GE‚ i„¶ª·vSæ-¹‚ézl!ª3ú7$1ª@€5Iöïcy¬l0hDÚ<¨Í@Êxé7šóÝ–|ä–2ÕѼòXúr”Œ÷vÙÀ£z˜÷k‰/΄Il¹` å,¸ÐˆiÒ¾2ÌúëáZcù}Œ–æêü¤C¢¨½¾º?|§n¨«­°_¯;6¦,lí]fÀ å>\º|d˜s±Ž›X;AÛ.'¯¿é¬,=Ê*…a#î¨gL¨ýk b`¦r §­Œ eqAñ±˜Ãû2gøHER—!ÃÚb¹¸«‹[_Úkv¢å¬trj‰ÔeïÈm7FBüW‘Êä›àbx.Ù¼ÂËÞì{žmÁkßýšÅ¸Ÿ acL"œåò¼øz¤*$súÏ’2Þ݆òp@6vP6mzî3t¢1š\å² {“ÆàôΡ«Æ¤-ß÷†Ú³‘p4õ+ ëë£>ŠrßžŸlxýX{AÃʾ g½ÁGÇ¢E1õÉðù=*QûB°:_*hpnüàÐc&¥é–Í9íMýäŽdWžjÊ Ñ°^µ”yØdî…•°TߨyÞÝû /1~ßmã?8 ùˆšÔ'М±¸ÞÏI é Ò’,™$w̆å­aR¹¢ÒvŠE¶­â*iëKïµc’Á9è¿mhÍøûRç€rø3<裘ڙC÷ëd;°‚®Í5„ÛÝÅäÎí-/M1ÂLðñþW–™ÃGi<“v÷ä|œ²¤ód…ør¦*UúüéÐAHý–ŒðžÊ°õñÀÌèÖ¡c.”·5©çÍ.ÇÄ{Ä3Ùh'¢ÁQ¬*€¿‹äohµjg ´²4ˆ ?ÚÖ˜?ѿы}x3ù©@Óíå,xM»®þ¨ð¥®XÊ¿x…Š€˜~’!1Äùu¬`6“õý¬ÛßDÀ‰_D½¡£½'wÆbd#tN!æìÍNaGìââ”ÝUu (^Œ ×fls¿¼žd˜ÓñA…ol—Œi&úÁü.¬-¡Vñ©)?©Ž÷¯¤fý‚¾‘i(ê_À­€¶)Ü'`m½Ê/eÓmÝ!€MýVÁºÃ™ÎÜ_³ç¦}*:„Y¯û†á^€ºA2K[ëGÚ¯‹DÝbe6¨üâcˆÜ…gJâ “J˸_>¥.©2Ï8Kú|ÔÅJ“Oaß)̧#MØ•¬ÖvKeƒ:¤ãkôid?™<¿.ÊañJñYÇš’ƒ6‰ýädgH¨ƒzÆ,vTOÖ´I cþjì‚\«Úðò3èùYýå G=Bç…i¾PÜ~Ck"Ú㤷1ãô¦R qÁ‹‚¿€ÀÍÃ#Ëé_{ÞÓdt=³®ßí×|ÓÖzžo+ºÄµ Wš|ß729ÁáX<ÙNk´%Ï„uiWu«ÛN;Qù©ßŒk¥>©b¤±ÊÁü5·ò‰5[¿×q/ž ûC%ˆ„ŒX½n¿ø¤0»Íkž8»˜+:½¬­¢ëó,€Þ¨3þÞX!3nXKÅ7ba̺XÈŠž¤üÍ÷¯C¿ E(9,K¹ã.ž“æF;¿'x¢u(•9#÷hÃ(i[Våwu0)¦Âùjîêá§g͘¬_†Ï¡W†éŽªÿ£Ñ˜,°Bàœ[•*Š`ø{ÜVÆ…†=Õ[Z¯ 2¦¤tûà£GkXë¿=+ÅogåÇCJ$JŒ×¥‹mšC}äØhÕ¤KäâØ…è Òë]MSr)û‡l … hýúšy5—ê¦,*ð`}a»L5áý|ëoÿ‹Á’­QçÊ€ÚeþÞî •³ÏŒ·8ÏeB@Üáaè7ÒÌ Åœ6žŒË´Ñ…r°$¼ÈóªñX:"é…y!¢–å0 ssfÿÇƒÓ Ž=È¢g{»h÷/ÝTŒf¡ÿ¸…;¤Jß á¸%ÍqIj¢7ðk>þI‘AÐA†s–-Ó9ø ô󌈥¸,‹ñ)P0‘òs¡•áÑ|¢HÄ<ñêû}«f(O%D>"]ŸÜ?–·—Ú6®Ÿ¿iO‚|paŒ8²‘öq¸Ä½ ªö³GÁ;2`•lùBÜeŸ²ùÚãÛ¯×Â>s' áyYÖJxôÿïó§i·Kñö¬xJƒâ½·(ˆ4ªû°£°S.¼9,©Lë‡÷)TO’(4·w&—ºŸ%ÓO \vR‡ ì ”«ÆÉ‹f"P5"µwXßúîõ(Ú<ÿOC‰ä‡9c'÷°øk7ïåü™§@-gÆA‹·w2\lsô Ÿù¡¼îëš¡®¶Ÿv5¶bà_[Ó‡U«¥~U’q2H¾9Ì*1fKß¡²Q†š°ÅʯóuŠ•)NDj¢Ê驎,‹c1×e.ðþ#ö5 ü‘yþñÜYº¹(P ÕOÛ“øSöS±7j€:8®'ºðdõ·ÈÎÓ»¹m[„Ó”…ÞäMÒùÏîÉ?l™¼²i¶¸ú6¸nhÙСôl7w|û‚Å×ïøŠÄÎ ñ)HCnÜqúk]Œßˆp'ZÌí¹«ÅbòSúä4™`,6HªM²¦Ô½õD>–<ÿfýÒid¼cÒˆx£[{¾‹hÚüX;£ ìZÆTe½t|ÈÞ°ÓE`fÛ’MÇÕì0ËJ'x×ñFH.ÿ†å±ö_lN‰¼_áÞ+˜O‚ŸÌøÛ8Ídzˆ…î·ýþý ™Š˜o›ê®±‘íÕé¶«Ûº*?ᣗE•“ „òñÓ5m·³_õVØC0mÒ§¿Üée|{Ú Óäûéj€ºOÂþ´ 5øøzéÔ­âu@jð{yLû$ƒ¶GƘàö€“2$ÁŽ˜ö[˜ÍDL¡ÈÈk¯'¢ôž{²AhĈƾv Ì®ÀoizY¡*IÛ/ˆŒˆ*i¡#Rºë˜y·©äöKÙ/¯ õ¦r+Ôß'¿·l›ãß.N²GŒê~5tû›z8Ÿo3ÌcªÎï’_ë­…´3ßÍ£tÅ'šºéc¬ÁoÕêû>¬å³}Ù_êˆ4KPÉäÎr zðMþ6ø«L˜Û¢ý ƒ½f{Sñ¥£“SÍvìî…5Ïß,>©Ü¬Ñw<¥ðôPb½*‹¶ø¾UQÄm åeÐt¥!.ûؽ1›wYH†â m{ȦH§3VÑôÎú¯©²¸Êµ¹Ë$Jú‚sòÅkxjt† “iÏIý+~ÞÒ/EÕ¶°ÙïÜÅÉÙþä-Ë|gšûǯ)re&l‹ľ°L:­¬†ôåÃ9šÂ…ñ'yìïEÕ¶7¬(xYô§n\:jcñ¨a,ÐÄ©¡Ý塘ä¤òµ!DOñwx™´!õ@9© h&:Û¬Ï3r˜·I¶]yš {Ïóظ" «pSÁ¬šÎÖˆÄuŸÀO¸´èˆ”A»]ßèeñ¡#æ£~Tä" ÆÞ5ˆËÄ#5Ôü~uŸ/Ò¥c‘*S®~Y5‡TµBà`Õvù÷ÆKXÙµ4ò•,Û"V‹ãm@˜«[ÁZÙhGõDL ñÚåM¼âܧˆ”ÜFÈÊ]½¥íñ÷$höÆ™Üú\Å™‹ߟÅ2Ÿ¼‹ŽcýœñØÔ¦Àpëã~z‹uÄÔf»õ…uÞèšëÆHdßÚò¯~MJˆÛ[·M~‘iW± ¥úk“úvl‘?·ú ðRPoÀ n ƒÝë쮜G>œÒÙŽp±IÒÏ7Ô?,ÿ±tKŽ*Aýö,ð–xïn‡G8 o¾þÑ/¢W=j©Èºyn©2ÓV,1[Z5X·bòóÆ j–[q jq>æ¡Àæö_Š è£Þ¸0§YJ¿‡kÅX*@L[ÔeJ\¿ì«Âe#D]{‚¤œ]. ?E2î ÙÒ%Ý£ÝàßÁâ_ßIIû€ –Õõ&Þ2›ëãñº!–Kßéð5cW8¯r1*W ðS‹™4,€X°ªEW =Ìè:ŽíÖf/e5Ì ©U¾ÚÛÅÍúGW8aÇÑÌêà,¢8Ò¯;J ºš+½¨÷ L؃…ÕGŸÇt÷Î×î΢¦þàÏðéí¤Ü×dfÚqÿn4«½¤Ä›—h™kçáOoWÅÃÑi>?x|~°ÝÇä~쇛+ª~%Êf¼šOjð_½ô³_ÏÐñù»ã'çT4û¬ŒÛŒp/ç`Y`£ÈçúëùS‹š‘KvÄ6£ØKUµàk×%Ê$dÎ …äÇBéÁÑ/û#%ÉãÆßÔlÚˆîήsá!8N‚uÕ:È}„dDYèoÖ®Í"VwAÂØðìM„MG>I_‚qÔ&¿¿ÒíµÎã¥qpƒå{cý½Ò’¦AKÛ˜ÝßM"ú7üí¬)íhm•ò°+%óCõÚãë·u4>âF«8.+¤m†‹“!œ%Ò!€s°ÀB]õRôÜû øÔÉS)œ0»vm-°Ð*îs¸,­”9‹_riVF%Àúœ“aZ–&æ¬ëˆ©Á –û:¥io*©’³œm®wò•ña¤RÒÓÆD0¢ŒÅÃuaë3È”+kÌÀ¥ˆ†øÖu|îhªhcWÆ ø168mD«4êb%ö§¹<_ük6›£ò“ÅJifÄíïªãž[üø‚ˆ£¡‘pn]1ògAmu©ÏÒ‰®­õT9S‚ò 5_MdÍ4Ë-°k’?‘BØŸ2vÈw%9öãÔ¾±S`}5áè»ÿëqs67Øä>œ.a¢Éx 0ƒÎV¨d8ª,dØ,@™'«ãîð²|>/|*›ËÌÔ7r¦j¼¶shá[ͼ÷ /'!âsÿˆii ÕÓõ…sö•½ø4;C) ó­¾Â>ZhI*Žzö[Ù_-~¨÷“)z(¯{\K¼'©¼{e—‹ Ê;éÂ'Åçi<.ýD†s3 ÂÄâ1½ €D(eG÷¨ýš¤gÿªÈœ<ùÝ+&EÊŒ >‰>¶·e¡Ç¬2LˆÓõ7þ%dŒ9SCŒè„sÒtÂïØÄô‚± Úª§‚€QÛ.[C>ºÏ%m°vÓê4<çX“Avã íù€²_HÛ›·G³,ø×ÛàÀ°>ðAšßl²¶h ¨è)kïÃP©ãü-3¦U[œṮҿJˆkÌš¿™õo_W3÷܆¦ŒüŒ`ô»I©}nA¬s'ÌW†[A¡—p»‹i?/5c\¾XÕ¤ ¹Ú$Ãý¶»˜7ã¦ñjä¤táî€ã,Ê–œbʲkAò|´8AÚèHø »Þ]ûmò®_cHGgðzÖжáK3g HÒ©$óà9I`þoìªÓÊVí_¥y-(`•vg¶_b]²«}µ!5œy…‚¹|:3öõ<Í4ПÏrˆZ—’ì#PM±Õ6n“†MDüª¨í!ËñßåFð¥DÁ±¾«ªâ÷Óy½•‘1ŽÆ•åKu÷ýùÙ|î}(ÊH+“¤ñ9w ÇÅtšmb8NÌR»0«y/6eky$ÅÔ'Ê#—2†þeÞŠÑAÖƒñQäˆTw–:2'·3Áøsg-úé6ܬV,¶f­¦­ráý;ê¬Õz>H´pI²Y9 À oðšñ;ÜtEºž¼2ÉÛ1Ã9sglvù¯Æñ ð»ý ï›×xXBÝÓ ¾PÏ\] …g˜HÉÆËŸ”Hý@ýÒFµ²q½¤1fE§qx‚QÞ¾kgSSqe‚~BhtÓ»|Ȯ꓃" ¿€} $*Yc˜p¨M±vщ¼›È¾ÜB§xVì›b”3ä›]8‘ ¹{”¸Î:lÚfþfq~[ÝF÷º2 Âeu„ð¬ÇMàhŽ~Ѽ„cªžŽi` äúнUò±Lrþég„¹˜ÉuZ]­žÃx­A/ø«•FÔMÝDVo™¯‹èú•¿$z|òqŒƒEhÔ:j2.³>ÒÁ”…a‚O86ÉV½]HüA$)„#€ÕXŒû” »—GºŒ O]Õ8rc ã ýéU5H4 ØG`}\>®bGª†Æ!åþJ÷Ʊ³Ék;@Ì¿¿9ô1X³F yÏ´‡ðZñõóqT7{`"\íâøë8 27VL!yØ*W*ƒýà_ü޳ $ÿXv@µSKKý±âÍ)ªº‡UÈo¢û}{+È¡\>ÿ:QM•ÁæÕì¿®…ŠÊÌ ÛÔ'(ÿûŠØG6ÛáçÂeiÚ ªÒ=.é²ÐgßùYVBf†®Ú{¡=§ èÜïë ÊÅ‚€>!Ê¡q2;C¬~€èÂP¤!½ªæèMØë[À˜û,Ÿv²ƒ¸Å8Rž )÷“Å¿ân$FBÎ[Žm»VxÓJ{E¦Íü K•’¹ô|­ŠYqñÎú9†kÚÎÅ×ëÏ%).å_ûI46´Žÿj—¤øpLtðìÁ•}αm0ï<g—òmÒw«J¶¯í µù‡Î»ÀÎõ0ò#‘›¢«qZŒñ¯Å¥ÀBɳ Ý“ìw‡ýVtS©¸wwÞ¬þkj=޾5M 6Ï`Š.I«aŽ©cªË’ÁøŽÄçÙz\ãtÉ‚c-½^¼¨Æïn·%aéàm@8rl¾Á§Ú¿í Ðc‹„°ìSÿmPug¹žÛKxþ]f|Å,'H*hQïìMÖ‹Á¹±;CÓ–°8ñüJÓ0ÆäÆŠÅyp@þæ‰DÌ*Çš¶¹Š4b#[»r/[°`O&ƒ†ÿNZ`G„CðcŽª )ä›'ãeq#üÔJéܵ=h:ܼØ9/¸Öl͉I|KPì €èÎz2ðßýòB<©œ`´ÛŽ*(ŒåÈ|Ôï×ßmJ|¾êgÄø­Ž—'œŸYë†Íp©÷(¯Ñç¡<¢ByºœÚ £Ù =Yn æ¯ZO’ëçèTñÅŸ¸ ÎÊ’˜nÃ1#@±nt€T>g!ËåðÔj²ä*©ã% a°)£&õ%GdC3ÉÞ–4†”clôúíÚ#Ò¶u‰5¹`š·K#<@2ØâÄâ oRX“uyœÞ+·Âe𦃽ãâ+b?/^•†øéåEëÚùÞ?M¿ÚË_æ^C5 (èØ™,y&bL òø ÷²w3ºÈ훇Þg¸Fô ÎY³{  RTÈûqˆ¾O¾É©èÖàÓÔ*¨y äõÇÉ/®²iÌái8zµ×”&ýÝŸWùÒaDµ&"kv¦»þ×P«C®y‰i»yU‚@ý8ùÛþ|r§t?[ƒº9d‹7¶rÍ“3 ?“CÛ}˜ËºêÆÙÎ ïbü{¥`Ú0€²f¹äIÒÆXN­Á»f´‚ŸxŠÜ”9Tÿõú¬ÿz}©-¥½Ñwhw$:"F·aåÓãÓä°g)½„*Ú¹®}£c.2ïü%º<t,J:TÙëø³ý0}iõÇç¡¿½ôöA˜îå)ëÓÍ‹^Å®" 3žKÖ„gj"ÔQ¯Ø ˜'UΦÙ0ãV/ÿŽ˜¢®¶ aæ·†í³¶£¸ñã³4Ÿ w $ÈâP<:¢Êp– ‡¡ŽÇk¬îßÕ@Š10“‚ûWù©¸t#ƒt h…!šI‚EØ¥Ì)òàÈf ˜šAÜ SÃ,¤}”>]¶ù³’ìr%¸±tŒ×Â’oé,ß:*†… –ÆqŒ“4éÞ ¥dYÒ—Ó¦r3éjYŽûbà¡[ºE=^suÉ~瞨›o‰«/‹ Ƙt ~§RçPƒ{9ÿ&g푆jÎõ€ï2Œ¹/ªª2Ø‹‘‡¨Š~ÊýÍ5ø…qpø¦°Ã±ñ¼bMåQ¥›Ò?/ï£vû¼ÝJ¼Ô´Ê˜‹Ê›@³Áë¼#Ä=RÖ8‡vçqd¯{‹<_ê ³ðj‚Ù½±n6sKïâQkƤ?6ü{k¼4Jƒ:纖Ée›e2;=æKw½ÛƒKGœFʲ`æ‡ÓºÒ«àŒúGs0Õ“Ñ¡Z/’þ#Æ/2®ÁàSS%ÜÆ_ÔryE'¹5âûಢm*‘‡Áñ–Šz±..å—²Û6Mñ¼+†ýk®â%™§ ÖÆ7=ç‹ v±©_WÎèû óÞtéU”Ïã1âñ:²OtR¹‹Ö»*ôsÙs>~ÍL ó¤7¹6Æ\]Y—2ÝÖ"D¸úçñs ‹~ÕÛ$=ŸüþbDÿrÜäâmÐÎZÝB(¬½#Å¥)ƶýÝÒŸ«{·2Ó ¦ýz ÑÓR-º'§­ìò7PHWîñg÷o&¯ ‹)>Ís!û¼¶¥µ_ª»DXlÈÄ“€ÊýšöÞúd*y3á]ð _Óy—^ß#72¸ð‹~¯_ö^kÝÄ€t)uÚºÆCrIî‡Ô¼“M ±? % Rtzá礿ªH4Ü z~í†j˜µÜk‡Wƒt¥&±PVÊ!øcóc'ûñ#Ëi:×ÙAP î#TÔc®ø+¹C^ÝÜ’˜™úq^Ûqq>?\èé)ŠÛÖܽ®“Y‹U÷Ú DΠ€Ž'èºiQÂL'÷lÔ¿& ¢–VB(äüÒ´ TA`Ò@þ|æ¼ý^oon{ÿ]Ôº§ö´Ç’¹À5ÛB˜®çîi^ïâ㶫˨¤>B±¬ÓüwùuŠç‡h™ßDÇÇþH4_™cÂÉT½ïpÜ’ ±þºUÇ íI#'é\„û9VBê–aó³wú9¾‰Cíäwm1öxÒGƒ¬Ñ m×/ÈäÍBÑÚØòQÎßÉóÀ ¯€æÌ4hÌö¦Øk—¸MÍŠ~KŸfD¢zfn`?kƒo†ïß¾5÷CþH7Ï­Ù‘À÷ù­ \ŠamšU¹Kj̹"ÂûòòÏuJ­}^ü@›“7ü\‰¸fŽv&M¾&rÙM¬*¡À_IçQp êvcA|¨I#ï̓,Y­f¯uÈ#áñ­“ܾ<è½Ë+ù>ÉÝ hwÚ“–ˆî£{œ°œŽ±Íøø-†ôôì€ãQ2ýC·*]ÝÍÿ@šÌ$-KöëÁæçtçE±Tÿ(0“}°`«µµ¯!Ðß‘jO›ñ7hËìgR5¨S´ ÿdC« åƒî¸,X°žÖ2Üo3 ƒNÍíZþ»Õ_ЄxšÁ@Ñþå#–ýõoPˆš—œ =½ ®×&šD©æ³=ד:dŒ±óG<00ü+Ì£@{¿éƒÿHØ ÐpKÍ%d—æB‘mÏäíqgå½yÛÛ:Ô¦>wÁ<ºùÑT).‘;[ ²šgÙrª@‡R|ì €æGçоÜ8Ž…84ÐkW'"’ö§Ù;×SCbÆ>ìÚµ4 ™U}}ÜAµ­ÇÄjŽ D@S@ü½”¯Foéà@Ó¬$/'Tlàô·8 «zìób†@Y_a–ÄgÜ~m„Ô¿¤Ã°x·žþžØ¹ã :7İb†È—±½^…Yæ‚Þ&‡£K ¸öÂ{ ßÕ{‡‘ò½Š}5ŽêºwŸpwŸ<^Y§Vz? :ˆ¨} ¤c˜‘›mÙL¤GàUJ¦Šw’©Ö_F|úe¡ï£Ùð‡û„~9ÑÙiƒ•#ÙäY¬Ê6ñ>Ÿãµ‡óâß‚a99SÉØEÉ×-Å¿TLZë|šMŽ ¹“4|¬f 9åIîºyW–.d¸§]ÒüÊ®™6à÷Í'XM^LUÆ\u­Ê+’F, „MÇ_Ø~r¤©2ŽTU >–ðÁéƒó—îû,­­4Õd1ú€ôJ¡O¼Ç9¥ÊÚ…¬Q ŽÖÏ>¬÷þ«yö• òw)«¢PŒŒ³;A=àfÿ „*¾–¹?—¿€z/l:±qV/Ö¤ªN¶o3 ¢ƒþ6sÉ6|ƒg-§A`dñ¼²FBìÃ>9ó±uÍ„Òû'óìDt`Ë5Šm ÿü½²w9NÅWWœøeÄjèM¬i*Ý꧃„9ŸŸÃ¡Åõ|+½œ•Û­nȲ©Ÿ¦»ŠŠò•=Ž~'æÉê‹É*Ü,öË÷=«ügà“Tâ#Ø¨ÅÆŒÄÉI“îW<¢ê‡ÛÅ0ZÖm­¯@}ÓpR s[KÍë›xnì5? ¾í¿KIœ,žuŽØÖDÇŠGòbGµ~àm¤™´Küóÿ(\¦¤Çò‹4·UÚ·žF;g¦ÒF6ýĤ“Q1|Ie&+ߦ…q+vh|áÖû#ŸZ¾vgK kàÂoèc5Cxä“_NêXlWª©ü»Ïb÷DB%¸Ùë⬓`¢¨D ³ÕM#ì:7{ýz~S!‘J?6ž< 0§C‹ìïûÍûO(ñùV–×—rð§Ý“¦VE´³%Ƙ¿ ĵæ{³Ì“x¨äûvÝiCóÀ¿Ç¤m.%P‘=h¾µ¦ØFÚŽî&œF”ϲ%_;Ö÷Íéøaõ»‡f¯çFs*wÛË6`zçœñUã+T•œ¤†y^ † cY<`¾¹¿™fx¶Š*»ŸXC;xŽe {ãõkØžß\A ä—‹QZ š©Õþ-úFË\b»ˆÈ§=çU Üg•&Ãv‰*4*Á#ß’¥$æ>’}?Œ'ÆQ“=Ò…Å"ÜÆd7]«,í{c=ÎÏÎôL¢¯/r³IýÊm ±ÍËž¡·9îy¾°£É¡êùÄ>iødi¾ê m^$Ó´!×ùb¤‹åí Ëvz+¥Ö”‰?N¶ã¹ÌHÍŸ$C#ßô$ä¿´Us1CCyëÙœŠTê¡ÂGÄB¦†wÜ|\†I}Âö‰–Á3j»ª»Œ eGµÂO^8SŒLUqf™b¶‘µççÚ Ä2­—¿'|óü\ÿ8èW=4 X‚õ××4$ñükÑK¨ajÀÙpgJ7ÚLÆ. í/zV)Q{£Ùn}­îŒ?2CÜöà‘õ/zG'¹‰“žÕk§Ž„ólêK7û•Y¥Ð,|$ðÑ-‚%ð„YଇÝñÐŒ{û!`Ìpññsm\—Y|ÏDŠgcL§§ X0 ºê'eðMxôÏ×;¾× „¡Íãø”›ðÓJLû±1Ñ’¢ba&,Ѷ¹í?¾(%ìu° ¼“&südGýN†âg·¦uZî(œ3Ä$‘Òå«âì-vfwD"¿sŽWÆog! &†ÀëN±3Ïi"¹ç’ß¶Ò°Ì„·ðB‘®Âbó÷é«Ï¬¥DrÕýJ‰¼j¾)¾îilàœ;´7 vIù¸ôÐͶ<ì“fœ‡j—Æž¿†òsãEÑ%KŸaŽMã÷û‘Ù:(sóƒ&n|¬æùÛ33•SVÂ6RóYè¯ÊŽ¥À_((ƒ£t÷(e.÷Ü8 f§—mêC(s0_àw?W«%˜@=ôŸ €I¶~äàb¡Ã„Kã² EÌУp–®ÓÑ+ÕGºÏèÝAQW¹äM'„];™ZJ…¼º«‡’ØBqÆìxF¸ÔÞ|âÐ/½€ëåôéÜHW_ÆoNH¢ÒÄ=!šÆJÔ”¦oQkŒþÎgAÌÇA2ÀŽóKW¨ð<|„wǯ/•ßð°Í¼þ=õú“*Îê$6M;»¿ô”ºTʤœo ÆAB2?™ÔÕѬ°tn?|¶A/Ãȼ¾ód ’¤|Mþz£G¿Ð)[kêÄRv¡-’åU›%œ?Ëñ$ÁëA‹&H/àæ |$5­ùCfªø¯+^×óøg,sÁŸ °CXÃ'*}è`­#¬–Ñn^ jár÷È]r‚Žvüè{à£ã‰û× ýº,~Áò‰~˜C|¬ƒ¤5$V—_'Ô5õa7k,ÚøÌ«RQ{]×ÖBŒ ‹Ì‘ÀÀM{>REl*i.,ͪ¼7ñv~ÝĤüðû¹Öø ÙÈ5ÎÚ=Z6ä—™çéÕ#,ÇüËÉ¥Ö³Âþa‰s»çê/ìNãï.žPW— [YЧº9¿ÉlðŽ2êûóÚ[Ôâ*„}¨û!d¦„¼H”b’:Û—'Ù/=U—ÓDmRRÛG¿tßÕÝ€hžú›zPŸ/9ðe¥~g[åï^-Ÿ´ÖÒÛØ€]È>©‰z@´äpö åXa¸ÝŸ2ÿ–ðSdjf˜Ü£®‚z }mTÑu¥mÇ'ô½ŸWRäUÊ?®Ž!±«?ÑU€‘©ìÇu„#+%CGH3ßÜ@=ϼ‘½ß`ȇns1ˆýþ®Ô8ˆ›´bI{€›c> £~k3Èÿ…Æï¯ã.Ä”-& Ÿc«ëÖNpJ(ˆô˳ Â¼ä©œ á QÄVÇ·…éb»^—KÞwCý&QR_‘Ú ðf´àzÆŸ¾t¯Y’šî— $7>QnœÔ§ïóßÅ>!p,µÍ4?.v»Uù“¡ô06Å$Dßù²†hIÊ}|ÉVRïÒ2ßTÓ»òù•cy¤ ‚C£þ#/{)<Ó” Û)RÎhº`5Òìcm-¨¬±³Y´„%™Íï(VÇ`ÞQ/áhóÍR†µöÑ’ç{GÂéâ7n’ˆœ÷ ÕFé"¯ ^û‚ß}ÔW¨÷w¥nÖ³aQµ hntÖíb†|­=ñ)íæÑÔW™óºá‹ßÄL,·Î»–iû¯=#Cõò¹¦öÛ^¿zúÙÊx^±wu÷ÖDŒ½/Ž= Ã5&Ô•1PÕÃ@#à&í¹èÂY|Oì"‰ÒÓDDù¸pGIïªWâþë f½‡ÿšcR91k2׋Gd)̤y:ùí0¹•]+Ïo¢*…Ž×ôÞë©Æ.uM60 ª~ø‘=7ì6ŒúÊ=™p2~k¶u†QìŽ?1‚˜Uï¤G¨”é;7Õö¬âß”äGW^èp쇉4ù ©„¡ŽÃ^šÉÁxߣ؇8T²8É"eÇs{íˆ Å¾^íKIÚ>Q¢ÆŒ´ßÑ?#(ÄÆNw}òˆ-ÿòp†éju;ÄòÅM8bÿGÖ ŽÞÔ¸ùtÅÉf½’ãÁ cÓ:œ>ñôª°ÁØ…„xÔ,ÿÀÔ7IÔäÙø²19_²„»Öxcow«…É#Ò8C5שÎÅ:Äý%(Ì˺[ÓlByxÜ´‰2».¯ª[êa¥ÇÎÂË™t>Ñõ×ízZ\IÑC}Í“,ßXm=a>¢‰lZXýìS Öé AäIY‡Û½7ÑF7¼¯¿;¤uÚ‚IÿÄ;~[ÃˇF kÉÆ‚@­ßÉ… ¿¥0¦Tñû³Àù›Ç8v sÈ0\ùËäÕýdñ;MÎ"m½ ò‡ûÍüW|#¥Yxé ÂX§Ã!PlìRDˆGÈ·® ÷aŸšdªÇ(RL¦7î0,|”¢…ñjÄ5C¼5Ñ£“LíqÛ Zó]Ío" ØÀãÆ€¨†Yg:`3ØÞˆVD œ¸¿@6¢kóE^8ä6‰p«»<âeZ£—T…\ë»kÙ·ûš¯;}ú´Ìxò±¨mTDKn§Ùt‡]ƒh\´øŽ‰qmÞWÅ·¢$™_ã¾¾ðW%bm|&V–÷fy÷Ä…‹9ÿ®çØ#¸/}~}÷]n:.Æ’õy¸D­;48£ggXN%ùÛ/H±])Ôhú;Ï7’†^lõ0–5Øá¸`() ü ɡy .þVO+n®ž¸ò~­ø)(ÿ kŸI¥ã[¾¾8‹y“$ªí C9¹óÙä…i´­×¬:Ã×4×½¬ê™+4§["WGâUáI`~ø`8“„… -A·YCDP¨ÎzÀ÷-» 3 7y‡hƒÛ;9)TLÕÝø >-Jnn:íÇE—%hÞœé,Øcà"¯º»ü¡¨n”k€WÎbZ>FŠJœ$¯ÞHN¹ß™ÁÖö¦‰0ëRíF ´Û.‹ëùTÞq¿3ͦ,Žì CE½Ùþ¶:\ÈÇ=Oñ{ÜI•ƒÏ½ópYùŽðì(w®²Þ."u·.U]¤šþŽÈD$w æ]A !’=~è!rùýÛÙêIíó)s[JDS?AÙÍäÖõ#ù@¿Üaf¾Œz^+sêßñ;-2 ð³×ž-…­¯÷ñìë3ïäI0•ˆm˜$Ma%ÇY¬˜ŒnYÕ'fŸ=2›Q@ßÓ¾ $ó绀a0è±w¿ÃMÔv‘`Ã&“m;fš÷¾D Ø­i(Ÿ ýã¦]6Hþº“Rƒ æ¨1€D²ˆè†ã¬—œpç' wT°îË÷z¢Ì:¯&ùâ¨Ïâ£Ïb(Æ—¾’Y{—â㻺‘ÇŠÀð#æ¾S]SéîeÊúᣥhÂ*öß{dÜx•”ñþ¦ÑÉh”Öyr˜‘Š34IP^Uû~ðß hÔí×Ë”ýJtÄ¿[£˜9"LÞvß´¿"f[¹Ñk'ú{°„Cöù-P¥‹b¼Ê±eQêIÈ£0ƒ²Ù¸ÝÜÛëœÌuˆ»¯âõÉ™t¢•¹ˆì‚Ü¢Çñ`±“S,AôbõeÅnf¤â³æÚŸ­®I§ÛEf|ŠëW¯WòÄBpìïãlàÏ1;«cÉ/¶v“Ÿ9cA’Ücxò#j83S¥±ÊRAÀÏy>;³“ ”±ÈhHÄ#ÍzO†æ'qõƯm@L…A%RR~ït<0ÙèÛ|žåµ¢OòÒb„ -iÊ0»ýä×¢‹èo‰á,‹ãÛƒ sÈpýzÞ9¿ÒëÏêõS³·oõ-ÂÚüâ˜ÉJr%ù pTjGg¢@ÐÔëæ˜ò¤àÊˆÇØ·›ž¿ä¢r)_Ǩ^Â-Wy›Žì>Û¼&ºé˜£+¤o‘M¯í*ÍrÓy€Y‡ŠgˆMÛÒ…Ú³íòŸ¢Wx¯#B€t^ñF¶GJ—À1üª>ð®fσm ƒŸÇ'âócœ4sã °–’—%Š^V'LŠ%¢ù+«‚¶ÛiózǤW ü²¿I#›!Rpû- úZåS7ÁÚ¢ $‚5!Ë×÷aZ†|ÂÕ£©þ»#b4»„hx*?ðÖ9 ²÷ÐÁM÷î$M4h±ÈÌù`ûi^û¦€ý³ÖgÝðcVh8Ýb7ÀA…Þ¥îr¬6Wãë‘/~‘¸S¾ŒkjÚ7ì_ž¤{ȸe„ºSð¢›W=í K+›­ì1YƒD†b|,0}ð½žëpŠh½,XJ¨æhc#±,Ϥ2:ò×ò·úR:ºR`É]€…ß,[Åʦ[ËÜNã!†fŸ£bëµYYa^¥qºmR¼ÿ½`µU1m !_aWrÒÁÄ1Çå€"ÝØ=ÝúÑ4ôÝ Ã jš9×®ÈÏ¿þ­Ä®¾?Vô–Â~Lމ©Ê+Êå"3®¯Tn#?`òØ5H]W…RGñHðqì;–ê~~bd’g5ÙÉ•{Ã7XJ$ú.¥¿{úÿk C]=>UÓ÷{¥dþ9È¢ƒãªò‡ÎÇÿ¾ÌIqHüÂaì{·‚P'Ü-¾×bŽj2ð³ÊSn9¤ô+÷°É‹©gF vÜf¢»÷Ëg+'ek|ãåOÍïæ…æSÔ/¢•Tgyç¡‚‡}ð±Lv<ØY#ó– Œ™ÜÐxÃ4.ˆ¢¥ñ7îì ìs:øKF«c,Ûpb~`»Ù‘¸Üµ›ö2AA A1ƒìOñ ShJ¤ oÔs®UTÿ®j€æäŽâ¯?ìuÙ«÷ò{!Ê›`lœ“µÊË÷»€i^nÇqbg°Û·uüÀŽ:…¯)aç3a?ˆþÍìÞ ˆheA4‡q¾¾:~lîV¹æ³Ê<Ÿ³øï éÅÃCÈú» Ûâö=úÃjúìrKèaƒš)GÁõh4ß@{ |:ÂkÒCö«[á®íûñôÕ ùsbj¬€O~0AYüÑ€Š xøí:² I:bu`Ê~ítû/øßØ™"ÈÜPªþGTV*µíþM#Þ·ëùÐU€9k\nWû¼eoÒ}„² ]‡ˆíÒ^ƒ-í–»ñ¾»Ë¼œ)¡ñÙ>äÃeègg´_¡/¢‚žJ[N…÷a°¬d:Ès—\6#Ó¥3ð'Ò6Ve§”e¡#É"(Ë¡¢`Á–3V{CvöÀ»G ?:›‘Ê3)€Á}|CEwòá ݳîCŒz?næü¦ìˆeÃóñžè²¦È2¥Ôæ¿n‡úy ù×4Œçº°E%t®®œ08”W¿Ê¸4Ì¿å[Œ@7x›ƒû¸kêïôƒÇÁåÍ—î$m¾…‰\ãlÁ{í"9XõÀâÓ3&e¸6û1ÂG³ŒŠ¸â#µZFcÊôæ?™»¨ËC±$æÏcQékÄhåoš‚ØóÌÔn-ò%„#*©êÖõeqßÜ"uÆ7Ž›s´6NòÈT€å>€ó“wŸDoàÉÕ›¤ö´’S¶Îhl¤Âì"cZÔkK¿qô…RMd¹æ§M‘ue&ݤÝx ‰ÈD«‰£úíèécQ¥Ñ6Í}µ'h?ø»R7wgÚ•z«a ­âW×n3W*¶ªez7—uIaÍ®+H›8Ýâ§^àý^4¿ÄœÚ3¨–Œ:ã§É%½zH£kiê}|lE ¸BÿŠ©†eíû‚¼¹ädëVo·Y÷ezéþø®Ž‘‚Ç:7 K·ý¸˜¦c(œÚ§ðþb å>Ët<*j¯õóä íwüpÙÏ~£TQÉ*ÁvhZáA©¦Ý€¥F·ZÑæ]ž%¨+,HÄÔcÛ Ý9[3Hv°.+EgAhDtál“¹šâà %ùK %3ô=g©ÆÉ+Ùõ¼)H‹fɈJJ,Óz?Á9N¯8™VßFåŸ9ËÏUáûã¿NžžLZ|gÅáæ»ˆFi2Ñ€û]n*Šé‰,œèñ‹š.ùmÆ1¤ü{Ú\$bö)I>$J™µô3)DÀÙ@µ·—–5¬@`0b©Ô(¼ûéKÎØ Oý HeO+³w|%Þ‚œUQ?N/3èC<nѧpÛ®iŸ×“¹u©6Sñã·oœ\6´þäÿÕÂ<>+Ÿ7¸ä×új#+Ž“ÀFŠnI½õ”ZkÁ­Ž=óˆtä…¥Þsûñ¡ûóñ}g0tt€ÝË]!õñùzÙ,ݶÒ8ÁûýÖǦÔÂÿe†áJ…Ôv–FƆHj}gKFûWR =ša—éuÎÎBPýCŽžEbpdFmü[<é­’WåƒDQGg ¿Ð“æÏ•Üj@;ΰÈÇ~Þ¼ùƒV-¿ÊMÝ”º«·vyÍÃcýÏo;©ïDóÍáQÇ:|1üÒÖ"êü–â¶…} àõ’½l[>ˆþàÏâè¸ÍØyÄ’Ûù¨k‡_óÙ›æë[ˆãææ;¿¢FAteÓÀ2\Ô]o~]US™C{HÈR%²f >RJö\ްÙ5 ÊœAe(œi¨­ÔSPÂ'‹•Ä_%¸l/üqëI8å~%J¦©líwyÊIÐoI›”²¡ÎæWi¯ö!|´±­«Ãžiñ‰§`£˜µÙ'áL¹(åøÙżUØOÿsq w ­­ý@çAL}ŸÓ|‘ÆÎ•ÓÆŽO–‚ÆC^‹×$1Ql&Ówû¥gkHj]ÖŒáwGŸgwÉŸ{x'2Ë?—ë †à—FÇ£Ïݤ‡Ñ¸'©â·ô¸›þnGïýàþàÎs‹ÝbÃÊ@ž|¹ Œú±ÙV¡ F£êä¸ã›ó`ÝÖÖÕãÔ0àì"µ¹Xy]ºÊq+ç£FÍægã®7XßÁÞe/7rÓ5%ùô:ÔrΓxPïJSåå%Dí˜6WÄ29+L˜nùm=¾Ð«U{ݧËÙDh¶×Ûµk}ßîÆía5UöVq²£¥ù,`§ËÎx²o§ÇÆE-Á, ﮪMfápE‹€qÅ’)L¼­ê9C¦üå~ÏÀ©;ê“aDfû'gºW«ÃLҬͮ!Dðê¡[yT]—&E šµ ]u ÄCy”§ì>‰ÚacðŒÀ³UêÑ \-Ó­¦ã=3eÇ3« Qjos[t3US„™æ§Ô^7Ò4YúÆÌ«\c¬ ‡fp&Y3Ú1U :Ä?ÜGnW÷r¾2hª¾5åʆ¦3–#eTcOpÇÈÛwã1bŒ»r êPF©C½ÃOŸJÊ"u8 ºábÊ•ÙÈÙ ÁJº¬—îÌfv7vªU™Æ rJä+=J'ƒXaóäpáG÷š<à"žíÀEêóŽ7Ù­æ¥*8ÐÇõ<Ó{ÞÝŠ7¸CJŽdkב§•%º*^æàm]“ûãä|-—j4õåqdQyJžoëJ§„Õ⨮5#œ©3]gUÌŠYÌ¥{Tù×ÇnÚܧÓ)ëÛÒt@_®œ/Oc®ØÅÚˆ®·#—Émza3Cuž:µ·,̘°”¡¼ÐÜý•1#Y»-ö—rw éñâãZ8Ý}u¥Ý›‰Eq ‰®·ËÖ“N¿hý&œæÛÍ^^[J²(S!&§pO§2=G”¨¹ëhËë¥ëŸnkG0×Ë›Ï-Ð`¹ØÒÑ0;Tr]}YW\=£Õ#WnÑe¡o[K%oòîàçÕ\ÇìÀxÎEhÂye×3 †IŠFÛó¡ÙÜè·sG’3LÈ´FA ¯QóÚ™Eë4D!c"ÒÊN¦Ôq~¿…Ì–´@ÃnÒc®‡ÒHo”ª(FÆŽÈ3oxÛæÍtŽWRO_;,q¬šd¢ÓK½uÅ퀒/šÄ•¼^óÆ¢ËÔ™5ì÷+¾|Ô‹ÓŽu‹4£\7½!Wö×m»Ý«cµºvê·´c÷DÅ3z=º±=Ø;2ðpg^)jG¯š|u˜')ºghá0ÍaÙLü‘á,¬Ø+´H9»›h#C}! õƒ0ôŽ2QÕòdy#²bó¸W¬èñtÜ|BI׃Z^'#!:jq~XØÔ¦æT‹Æ²Ýz:[‹É˜¼:¦´•‰‘_wóa¶ž®÷ÅqÔg;¡ç¯ œ»ûHÌõi¹D›*"¹#R÷µa£ë¤ôœØ¸í,=7 wfVåÆœîjâ,‘¥1Isü›íÁ—ŸŠ«GAMèÅͨ‹¸„ëÜ1´Òó¹Ý£ö .WÊ3·”çp`׉ܭ¥a! D~¼ ¸=nÂnÐÌIÙT¼ÐÚ<æv§c;Ñó‰2ôÑv;›¦…£$Ù9·Áø,nJ檑ìi¿_ âf\¦9Q'⸭—ÝíQfnu\YÒ… ËK=‡Ú‰ôÄ÷Lj5ïœÅà¨)*Ày^´¥|¶ªK6Tç-6ƒEÒ, qtü¨é]àõa âøØæ¼Û­æöʼ#Éß;ãLm÷h5(ö¦ê¬õºßnr¶ÅœZÊIôR ÷Š&VÓÔtù"Ú„MÎ'äãÁ Ï'êeg­"DiÅ|™–«íŽ,ÀÌøÂK¦Ç© Ö!2îPÅ5=Ò"£EɃ'tËJ-ü:¯Ì¸5{lZ’VLH°|o]YͬræÞ WìAt¨Ìx¦ú’b.§9ó¾6 žè2ˆ½¤9Ž®(-fª³¼‰TðÖÒv¶F Y,ÅiXq|kéI HtöÇBÍ—‹(X;¶X¬O›ð¬"Ý8EJJÄ+®êö±ªæûãê8Ö\÷QqÊõ¶)e¶£¿íæûz’²›¡½•lÓsÛV©–ÍúJíãSkÈÈÓ®uC\´F|ø\*»cŸfËd(Þ¿÷Vr›[èî̇ôØa½OùuNÖ“UpÞ=–ÑÉž²E6Â/Ð+¼ë–!ð$Z‚«Ò'eætÖó½º(8,-/’Îj|lŒK¤˜HÈh§Ï-ltõγçÛn»/ï•Vë5á/îÝÄ“¾{°¹63óáDåñ»#æÀ*‡hæ3y㉚î/öÙ¨éÎ9ß6‹RD­>XÊ·=9UËF ˆó(|Äë² ç¹Tµ~hí-o«¢Ù,ùeØŒ\IÊŠÞdÇå(‰TsOѹ¿QvÛëU›æËÍÔÍ1µ‰6±–©2kMÃh’ˆN£áŽa™Éb`Ün/šÖŽk—ˬ–¢1ÊýÙœñ-€„³ÓC‹ˆQkZz˜cZå‰9²UpÆžÎаÉý.¤Æ‘à ”õ#´aÙùÛjáÕG’TGµŸt’xªMå‹Ãô°åGÖD‚Ù˜X޶ €aõJ ¬×3pOõ ’4“@Óø¼c.r·Y Ç+ 0í¯Öád—£¶ê4x,¼$4À†Ïè“ÅW6Uš­LòR)ŒeWe“-©t›ÐAÙœL¤0‡¦Ì N¯XÇ5Þ2iVÚѽV~0ºúKežªËiFt“A»¢ƒ‰jš¦Ä6¢ °Êlº!{«a&Wv¾g-ÜK,ðV·³š¢Ã(?®­TÝÊ“bp ¢Y•¤ºKT’º®ŒzW˜:~cJ˜$Æ<ÎêGlèçM—œ¢f›ÑÍöÎEËq²Ç3·n¥‡bv—‚:mÉÌÈ_â²™‰.³b…²*œoE+k|1ØË¡¬tÝ>‚‰h›‚ ¿6g­œ˜¤}_/î‘PÎåd›ý© Šh_ij’™§(^ å-?¿ˆéi":#¸^“ \6¦äb¡3#Më\Ù.á¬Í#G/Nó£X,`Þrê×;Í$U~ZÝr!-ã,–&³Üœƒ‘£(× ¥L@ŽñK’'ˆAqÜœSú² šÎr²ýx¿Ú±«Â8›Ùl3¼/¨ÙÖ«µ½EÍÙº¦›‘>bïãÄb„$ V0?1 9úZ®Çq˜ șƎöëÁ,6ëd+l˜`aûíš_Éå¡.€_[ÔYŸyä·KuÈà×c ƒÇ)]sÖÂ’Õ<’¯\“QÆ‘&Üp_"h’íÉeŽ8 Q¾e\¿¹l®×£Ò²fÇÈ-ºxŸ ¹ÎÉɈ4ձʨâhW¿¢ÍˆÊæé:™÷篷¼ìö$:h‡™Æ92œ’¼"kµßË‚ž³WƒÂ3C ÿÞÙIcö gg‰ 2Žhm-Ë90rÕ˜ìoçøºh¦Z8›«¹ÏX¢]YUÞ%ù H!çúûœ ÔÙjJMp–)ÅTbM[«$Üd¦®Ôùܸò$êf›Ç5…¥™ëתÊÚÜ^h³(äšm|×µá#–ŽÖÚ¼ 1ÐÒ`íÝŒÙ,Iög°cüZ¦Å®š£É5¢ý™~ìa0A'1^£(áÐä×stFÈ:m¬trÆæóÍ›£ÁãÁ¹“–'·hH0ûûKÛc8·´„μx0Ç1hâ±1b¶ÝHžÌ”‘\4 §m+ƒHû}BA Õ¨>”µc¯'6‘Üö¸½fë’¤ëíÞËM£:ê—vmgÛ³qÌæ£†ñ“§i 6šíÊÔ@–…ë†~04'Óc–‘ÚS"Xz@Ö6dK/³¬dü‹=7M‡‰6Ñ>uÂÅm5Y>¯G–²#uŽ^ÉŸ}gc¸îL•æñ M™æª0"ïvÖ:džÜ“\³¤uqÔYìTöEÕ½ÅÙß;×aÌÉ}LÅì¤-6§ ëϺbæº%µ%«çpO=suhÛí¦Ýý8FÎâœÛ¶!!Ö1Ó¹5³+”ðêxì,9‰Ìg§”SíŠëÆ µ³§_—ÇØŸNˆvUÂÎÉ–wŸ¹(ˆ4 )V‰¿µæ‘l.ù‡a·vVÙ°Éép #1äÈó8ѵ¤”cͪgQÐ oBØ s#ÛôWÓsl( %aÝaEÞ£.á_GX–1¹áŽÁx¤YVG’¸¼œÜ£UÍîʵØhÞÉö»Aëå˜<–§îažVۥͮw6ÑdwZ§ÖXŽFüéHºL{°GyØuN]Ò‰ÜëaP4¦²ßÓéx¹ÉM‹Ñqy즭wiŽweOr €c&YúàâK:u¦›Z ŽÂõ‰¿£MŽRžz°z¹Ý³¶½Nníç…M&uÔÜã-RåT·ÅÁ–óÚY®â¶[K W'ÒÉÆ³N^•·f1Áû䦹X›Q»Ÿïý|ãVª&ÓëqI,¼ŒóÛƒìÍÙ`ʨºT§×›MŸ+Jϸ«a.a (âs]nø¥–ït¨‘.•ÝòÑë1µÏõ= :ž¡¥¸Û¢œRÛ©;æCóж×Ûl®¬ÝG(_ïsjjgnüH6w_}=3­p}`–e\rÎ'ÚÃRª/ 5ÓÐZÁfµ±¥¡›hã™uvf¶åÃZ9î£}1MÙ¾õvø}¬Ýp¡¨çÄMNîø>_LLâQp“C9Ÿéd2‘º9iÛ¢mµ=ÚÔ¹"—ì]v¯ÆŽêÉS÷tKhï¾¹Õ»I;[Wä–L}ÙÝróZS¶â†·n±‚Ï”KáqZƒváw@ã€^XQ>ÅêDt¥ššÄo^¼7ãzoÒJÞ—NJ¨ÒƒÞ,g¬!%;õ2j²br›o‡¾ºXË2Uivè¥7ˆ'ºly¤{ÂLÇóG>Ü)³¡#‹aC¥Ã#sºÃùÕ¸ãë!>I¼² Ž“ˆò—ç¿ÓãtÖ…Ábë·Ó?Óú´ní[â7[˜Å°‘n€ÒgÄÉSi1cÇ×K'®¸½ûÊóººÙ9Ÿ¬QH*‹Ù¢fΓMv ÙÐmG²¸Ð€’OI+uà¥Ù\sGZÉâà!I«,ÞÓýŽ\É€,=4‘>=cPº5,¾¥‘N5QÑ.úö¶Z®Û鿦˜ìm"ï¸Æ/ô^9.)CÂq™9bƃ#‰úÑlb}8XZó:rªǸ*köÀ3u'Klz½×žd ÖºÞ·¤e5t½õ=Ð<‘ÓÕ #M^>Öú$ºÞÒúº’7Úxwâ«ÍÍmÞ¾LÆëm<¶gAI–;Æ¿ÍZÕÞ¶8§€ÞZ÷jmZ÷9'iâpÞ…Yª×LP;—ËG7ZL¶‘t°Œ4Ë×öj6[ò!ogƒÉLœo¢ Š-”š°Ë¬RŸžéÄœóá­”²³ºtskš·ÛQ™»@6K=XŸ›•i˜ù¯d®ö7¨¢\Z Zf½PJåb´-‘,Ä“JþÝe`©—î5.4te`?$æ°l?[Lqå&yš/hÞÑæóÎ3†hàç Îooã†Fí@3F¾ÉWtÈeôhŒfg_¶+??Û~+|…ŠÄ²£z7¼oNWÑJ6éÞ•óp*Ž4й¤ôÉ1¿uˆ :žVÒ¤²<“Í1ÙÒ)NÒùaX™þ¼¥aÇ iëZb±«6Âf(Hy"H’Oµó“mêŠ!— ¿Ø{ûumÉò™6UÂÖõ>Sä)3¬¸`;Èkg¡¤Ì¸Ñ2÷o’ëzz_*¬—o’Hê;\Ä åƒtrS @¦óz;óûìÖRuͨ¼±b¡©ÙTM£Î×ô#uÇóÐé¡N‚α—°£Á­ñ¶ë‹#‡.šl’6ÞUŠeI¹?Jg#‚Í4^>nLÕÁq°F1ºíçk»ä+®¾oÎ&VF7ÔæsFºšV%ÑZ(/¡C]×dõ8\š§L«V%IñÐ%‹è¶–æQ'ØFH¹ÈƒÕˆÊXvÛÉÚØa«y]͆¢<›ùê¤÷ÄÙžiA’eÈÒ3j?æosFÔù|œŠÜ…Ž 2Œ†kŸ­œn>÷Nìµ /÷Õqi®Î5µòí:ñDV ïËÁŽ-Êr ®s=î ×9®lj’FE9Õ;4Õ´36Ä-`|‹³ #ÙŸ¡f~sëRÞlù½P´šAãŒßÜ”yN’¼¥Øè ¯nëÂ%àÂÝÙ¡Iœì6Ø0îE߯÷+ZP‰e»K•%¿Óas§š°]XDí:G´1în«‡»XoÚÓyÒŽ•h¬à_ìšFc§¬ùØ'áhXÝ‘›°GoY=”ÒD$8æx¯»—ÈÍZwµq¤ëÆyå^Bñ@g#65ÛEþ¸ÊÆÖ@¯‘ä+_Z¯SµÌÎÍ׆r§V7+?ž]ÄÁPo³|$®¯[ŽF·uÈX,§Âdâæ¥É-h1ÙWíµÛuöÉ1¯cÒ?úÇÑ¢v¯³ãæ´½7ê5°Ú""êcZ#[°ÅƒA¦yÈ”jn^ÍN±±o9POO¢}6Zëf>Öf@eR^¸éB±£%²ÔY#´æ½îR?_ÍìJ†µx6€DêcXÞÊÊY5<\Ø+[æ’}¬¤ËÑÕ[qµGÚ³+éª Ðá¨lGÕ†—.˜ózFèK¦ÔiãÖÞ¸ÙžOùÑ›]T¤óUà Êm¶–‡JO;«ͽ¤IsjVƒ„jb·ç¡p”×þiz#nˆ<µ¼PûQ¾Ê«Báv¯¶»èt9–Ó!š[[Ñ—²\²«²µ2¥Ð·Îa±‡8´U¢é)ÓaMDç‚KüJPêmw+¦çõÊéâ»]Ä[=Ý?Àج,¸Ü¶ø÷™¯ºÍ¯ÙyÙ%KKšX·}Î>æZ7J·ëñ¡ ¶Dé' ´GþF.­u¾z\kžË+WÁ5ãüxÛÀTŒ1í1áx  +ä댶‘êl§gvxÉç‹¢û®¥MîÆøtß ÔÅÚøÔ~Tß´YbOµ;#0rö`råCÚ¨Ne=&nc¹¬»8HG·ÑãzšÝjD)‘sÉ©9¥µ;QrxèY:FúôZðÊt/ i³ÝÍ1ÌÐÕ¬Gò„©¤xz¼ž6ù8VWàŽg–ÊÁD'’„^G1M¯M¶ì¼1§i¥…hˆ†C¹LHÁ@³›sz` ±„35‡%Í—mÆËqWPíj}óû–صí*ݱ÷«48»}ª)ÂËTbƒˆc‡×õÆŒ<{Ûªm—Q—Kp(݉”U…åQ®D·Ó†›Æ,gÊ gcã°Œdؼ-ðÌH2ÌS)ºÉ]Ìa¨êÓ±¦ŠJzHçD-ÔY\YMx …0¨Ù…Ï`Â’â¯ÜóÒÃY¯¦#—Œ/ƒxœÛƒs»9—KÕ'~Èãúxcüã[[ejï8÷™“ÅN‹Óõ¤Øb;Ÿk“ FvI´Ñ¸B›C Å uÀïèî“rsbÙ&²× ƒšcG]"I¹±ºs(YÔ륺›ïÃí!N2y™³ž[Þ9±A:Ì™éÈ|^%ÒiÖ \w™H£4©NÜuž 1§ Š¡fÔüR£gÆ®M@©g¸×ŒSÔáõ±‹ò‹HLmi1ÝØÆztrWÔB‘ÜâZO[Ý9RêiÉ5Š´Í½¹õø>7Ï÷j? Î3n8Ý g´2²™ÚáŒršBMG«e5fóY;W¨œž¨¬»K®nƒôÜw²¢®´w¯J3ßʺsfÅó­Ðm4æLVÉ*³ÚÕé‚d„JWªµz‘ö€Š%£¾èí)ªæ¦µ4 ¦Þ¶GÎŽÌ|QÏKå|©ðkªÎCu3:AÔÛz¾^–%ïÌò–PžÇÔYìX×—9¸÷–MÛVÜÞ Þšc5´Åé8—©h~ÙIfìâíÓuo:­fº+*ö2ßñwM"{Ðɾt—| øÓ©ÌJƒw¹Ò0£‡rµó˾©c™;m)MèÆ+ÎIÝ}7H}?~Ä«Öò××F¬ØEÔeðÆb$ž&6;…u ¾,xZÂ’êõ~®/A®kq3”×ÖÃi×›‰·L†ÑCqÊ+˜d²ó`™Ä¬ÕÚ92‹Ò*¯#ÎÒ—qòØ?Æ‘[%éÌJÝDK²hgf9ÞØ™¶‰ñkç—¶yÄ,»YMHŠsgæ„+G·ÚÌOÀ?b”ÚT)µ×áb6˜+ùÅvÏ&e[U2+¯FóóTX˱_˜ët·¼Î¹Ö?åÓØ>î“} ·V*¢óP߇A!]¶sFÎu*¹Ý2‚š­•ºUñc J¾™äûÅ‘ytÑdÀÙƒé Öça[O¸àÔˆ‹™´É×óñ^ª6W_‘Û±dÛ úJ‰j[ß=T²–b-ïnÛEv›n¶ñ({©/2ZÏ.I6ïÖúmRÉ–ÚuÒQË󚙚•Oé8IVAŒûãî®w³}zÔÝL³Yu³'1«+ütƦE°ÀŠz¼,ÆnWìS»Û1ÅeUÔq·³iž’ª ã+Ѥ­¾Ñ•Ì’f¥±¾òÀ€b3¹åì|¥ó龘Mªe$ªú­±éN)7ÑÃmº8s·«ºöêäè ­Éä¾Hör9;<&’ª—0Ø/õŒòGc@¥z£ç’ôñ~ÓîŽp nÚr>;¹Ùd¹VöûkšÒìo, /Ôp(¦%¾Ãÿøÿøû¿Ã‹]×~™¿ºY|Ñì:"bï¯_Þ^ ¿Á<_|3| 'àCêƒ?À(ÜâD¸æ/ ŽDpâûk>Ì7Ïø+·ÿ@tÄ™àà[Ü5Í}CÔ³/ê›@ÑúJ~£XÄpÐ+°B¿C°¯B'_÷‚A Ð/ùÀ¹Ã$YÑn Dªïó’—·kðîß:ñIñx‹Äç8. ð2ãcáy_ާÕß—fú¥eHÄô·%)áû>¯xy½ß–a^güS~…%Žõúf cF >'¹¯ô7žq ¾þlГ×5y[†·Ux®Ñs‰Ü^õ@ðôWñ] øtRDšú +- šßWú}¡Åo"Ë \?eX‘@$¨KQ^Z‘d +Ô«8ùúøòªäW’ a^h‘Èüò®Ó$–-à^‘Hñ½…}#)’Áw‚9Ó¤ ~°–—wsa¾qØ2û+)>ÂSpkG½²ñ"/Ð|oœ½²ñ¯ÒÁ²Çê»Ñ¿: âÅ¿"ˆ£f@÷êG² ~ø>ÏUï. yPÄ~Ù‘!ð$âûcÔüyúËÛùÝ—ÞM]ž. }!ªºÍÀýq–ýöoÈCÍþ;>x)/Çuûõ<,o™ÿ›÷óÂóþ½ªË"õË‹Üÿàß|ßë1\^’p‹ <]œÃçK‘Ùu\ä/ϯª¿~©v³ÑsDÏ&†ç¸ïn3ðgö­ªb;e·òyÚMpº€§àÉþ=î»G ^S ip”_>ºÜ,—û×/vÖØmõaÐÏû¾•¶ÛÙ ÿÇÏë¿qù#ƒï~‹J?øë—ƒÏ¾]¾]ÅHxNéÇÞhd¾á둞Ç5ÌÿVùåí«¹^ùß¿>”v^Ey†`×eüø?48ð8T¯Ù ,‰ÿ»r–…V–Á,8%ðs`õà+Àþ8+!'€* úËÂ}üõ ¸Vðn,͈pÜþõ E‚ÓfÁB¾ÁO_?~]þõ #G<ó]€?N¾Ÿ÷'òx_Òª..ýIø#Ðä»↗^Y~û·€Åÿü{ßô®‡_ˆ"*¿îcåð{Dwä÷©ñãðY™#?#Ü%Ä ’¤ g"¶F‡8}!šØ«#|B¤@c+|ô§PØáˆ¤øƒEˆù‹€p÷{‹€¸þ“gÿ9XQxù#›àþçl‚†èÁñ,‡M‚ÙÓÿÏ1‰W|®Â0!ò…ýT‰‹ÿùf}r/Ÿ›ÚÖ'ÄCB/Éÿ­Î…ñÏuΰ4Çñ$ó·:G/ܧ“ýßvþ¿×¤i€¼¿`Òpºø4éŸÕóϘ4 á…þò‰nƒI ÿ“ÆÐb•@àöõûÅ“ÕH€ˆ9ÇQ ïƒ) `ãE ÇûgHÝýô-×Ãóû öJÓúk…¯˜ÏNÿ÷'lzü\ßñhlÿÏëû§<ëóŸâ©¨ Ð'Æ»,â‘øD°ÏI`=‡É€óõ€›B€’i <@3¡GÎ ËsÔW††…óJÀqZdQÄxq¬Èbtk «ùµ'8p>ÁÀ ò@%  8ˆWÈ/½ðY+ÐïÀÐ1BvÓ|ý"·`Öîƒgzðy†ð ¶MŒ²Aó`B ÿ"Gñ"ËáSŒðµ§o°4´ßD È.|›vÔcy3 €!}¾Ð Àß$Õߘ& „IÀu„Ôó4ŸÝs1š¥0òG¢À±ý hÄÓ 2õ PH‹‰À(–kAO" ²nîñ•ÂW‹âÞÇðõÃ0+ãP x ·ß"— óûŠù0,êuÞ '_?Ìï à•q‚LßEË0_?Èö³Æ÷ÕBxoâu¹(ŒäðFMâ­Xy ˜ÜVR„I(,<8< ëÐ"Âõ|? è³mª×'¼ &>‰Ä{šÚÙ/ð)–ÿúÆx°'~kÿÞìb®`˜…ñ$܇="êÉÂàvÀL9†Jã3DP<|b¿1º@crb¡yºgbHÀ”÷ýª—·Ë>Ð1°DúG:v+³ÿó“ßÅñæ/ÿL~&B°û4 “ü9tQß(Q …ŒÈ~E)ò¿·0²ä_wpð? à4ÖBôïO4÷•g$rˆ¡^1'@PŠå!º=!g¦†"Î_?| xo9èÅ`ô"Oÿaã?G›®¦Åüoþýï a<ÿi—¢GùÔO! â:ÐuQÜǾ¿Á £?†p“ÏA'OQ"%þî&É þý"æ?Dß(‘þ}Cÿ%}ƒ8ÅBؤÁ+ã­Sð‹þKÃ8P3øâI„@k8ÀØÏ-&އÀ‡ÀSB\"™zcðžú@ܦÀÙ³ïŠTìûoÁaó"zMä¡{uì¯hb/ÏW¾úGk"tù_ÖDžƒ&VücŽ‚·®ÿ›5ñsì<òOa7ŽýÆiQÜ×+ó8ûMsš€ ºr ' !¤Ñ€þ‰Ë€4ô•Æû“€Nz°! ¥{îs 1=ƒîHx÷è9ŽÓ"(DFˆ©$7öa bú}Ì^|ng’?ÆGÄQŸÄÇ­ N¢ÿ™ñ–„ý…ø§ó¿§v ÔÓ¨µc@9?'vÔŸÚ¿¬ñG›ÿ(p&€ý1–ÇëŒ7ô©?ÅápY83ôKP¤þ0ŠôçÛ> èŸýÎßÿÀ“Ñ6¤ÿÙ= p5ÎsÏ‚°hFø°eA‚›{Û² ±ò¾¦~܆…_~$ù{àGb–ôgöåÿ![,Ò§zýŸïAö:ÊCŒHê©£À­(ŒAzýø% Œ™Ï ¿¢¢x„?*ÔUûD›À‚X6ø£øòå»:èý®~й¿_Q?ôÈü©˜Ec£þW^ü_yñåÅÿ•ÿß™ÅþwæÅÿÈ/òÿÚ‡ý×>ì¿öaÿÙû° )âÿú}Xð¯¤A ÿQû°ÿwèùAÕª /¾À¿¿åöÙ÷î±ßô÷vl ™/vè÷s$þL†}!œ¢ôüò­•ëÿÞZ_åØó„CÂݼEþî«*²½¢ùëô¡½+Š3>W€ÀëýƇfA) 1¿ÀìˆÂ iŠ¥~¸âV–°à/™Ýú0èþ?2GE–½¤í O÷ý¯pog|ÅíI%._âK^§x`^|ó_û¹Åž_½µ|?7ÿpòûWMœÃ¬_Þ‡ØßùNI$þþ[è“¥~ßÜöåýR$àÑ¿Ýæyôã\.hlõq6ÏÕü½\^ïp¶ñ9î|¯gïßV¹}y ³Â±³×Î^5ï‡Ûõê5ƒÓ²8k¥O2ÜÞ¯ë8AWëöûhñ‰@©Ë8Œs˜&‰ýd{j)r@2>Kr8Æ­•L}he¢<ôƒÛÀÂH`,&šóW$¬„‚>y¸¼ `Ï‹÷Éãš<€Ý}+Gr4PJh£xއ¸mNi€ÖÚ¢ à>…£Î¥#ÞƒÖ÷­æ‰Yßke~°À©?ãÛëþ%ψŽÞ‹,Ü}ýCû¤jƒÅu0€ˆžUoG@¹€à0Ç"ôEˆÃÏ–ˆá©·%Ô$@€å1¾@F{Àd_[¼iM±H}<"˘)ôÇ"&ù€Cè¯PmÀœXEÀTdD¾o4uMàϵ€‹q"ÀŠqß „ý*â]pž§…¾ ßQÄm %ÿ؆ðÞ¸È÷]¢ž¦"Å`yôq?Lëê=êµläÇ…úÏäþíSÿ“ýs(Þ_Þ–«(ËS@]þó|)¬|" ‚y•0‡åH—éñê€Þögƒ1ˆ¢(à5Añ ó¸ ï]ñ½üÎ’,Q,Bà)œ£ @X"N!8û¶wa®Dù± Ô3;öùlý8ôçL°Èßs âOÂûLµiŒ~â?U›FÀx8ñ+Ì(+ƒÕ +âÅ^µßµYÄè¢ã‹(b” ÈVÀYa&÷»¦˜p•á¾ò˜KCÌÆ¬F„À=.$q#\ ÎŽ@‹_9îMóý¹àe@¡ñžöLˆÿ¤eüÙYp–a¼3…¿X‹ù Iö­ì‡ÆñÇfN|?÷÷Sù©áSÇDÿ²_êó•ŸêvõwÚ@õ¹üœý Å7ÀšG³ ¿{˜ǰF߀buï   âÝ“,ø:KQ½*SØLi¼t"õt/Sì^ øôgMãOÏ#ÁíÛîý#"ÞtÂY£ïMãø ‘¡á¶?ÎàÇ£vÑoÒ¿I´Fðûª†±µøïÃo}`D@:ÀøÑëç'ŠýwK›ù·v¼0⃟{Àœ?¶2ñË peýóÖæÙÀ ÊÒn¸n}î|?ó§ým<_ŠÆ•õãÄïȘì“%ë€E øúª`4 IîïsÈߥ >‘{s,, Þ—Á{ѤÔ°Æúc3fò„žÿ±ýûéWL! Àò‘<÷+‹ËþÏ\7±†Ÿ ’âh‘¦?C'/@uÁrõZ›Öʳ<÷õ.p~ ðÔ7D#áÕ‡‡`:äǾ5rÿ€üÁÿ|C? ñYPzÕÈŸîGoï ±¼hÙGó¿ë~¿$Ñ_»ÿëTá— ƒÁIð§/lKGœ€Ø‡xØ¿·â¤ ^–å~hþ~òÿûVñ÷É”cpýél(AßxŽâp¡ÃàcìT~lÆ96‘ù}ûóôÿ÷ÅújŠ,ÊÏM˜!-poøNãx¾Ð8£Ãà}G ¢Pñ_~u‡ÿÉ~†•pþ¨Åñ{÷ñHEá½ê¿|ŒùýC¿Ÿ!νˆõ¾ûÛâ¾Y‚ÐÀ•ábEê/¯9 S±ú=ðV+ÓgÏÿÒg]ŠÆšgRë™sûñè‡Ô)ŽD„‰Ù$6fá½n’Á4Š€k0$||K®!Dqýæ/Çáýbï÷»Ãà¤çMðÍÃ-)ÌMYÎîÑ$.­¿9NZÐ4‹ñý7 Mâ4Âßöß±$ T¾O§½^ ø§G€Í<pëA"óÜ&Øç69ðu\(Õç„û=hœ‚irÔk‚ãa{ÚBSÏÔà-èÓ§(\ ÀýÓ”töL 2x¯ž|K¿fCûò¼Îs$+¯7Çs|ûúÃaŸy_\ÌE±,LšæÑx•`yX]¯Óï¿!à ##OñýŠ`¢Â}Ka: ÏÜÀ?óz¨ñCäßå-ЀHá]Ô/OÑâ,1…×â8àžo+õB=\¸‡?â”%Â6ùºÒo= œ/ë¥'p àˆÏDÁ‡û«¾ôÅl¼È=“b½ô`þ"Éó}º Ø(ÎÛ€2¾¼iã«ü>®OŸŽ$Ÿ½â7ÆPï2yz÷±RãW8 V‚q? }žzfPxÃ9à6xDHÀ¦‰ù+‰“|ý"1¨·P€µô–Â#Nx¦ÄIŠÁ fŠëeä1ÙíI ?xE)š§{e$yAèÏA¬Ðà©“L¿SöÂÀR èh<Î SXÒÌ3÷ÇÅR}v‘é3࢈ãûÈÎ ô³l¬× bJ„óâ؇ÀôÚ Ýõµ|_Ý'µyðŒ^$Ü%ûLSâe+³§NÀ¬ûràŸÙ> Z@$}² E|&%EœÀoAÃØû”½ü¾ÏÌÑ›ÕoáKéV:øpÓ÷{bà.àâü ‹ú.ƒ‚®E ·èû ß'Øoqõ%¾ ˆ{Üw¹ýÜðºâ×ïK `Ä¢¯ };^¼†P_‹«"ô+ $‚¯ŠN=obEÏÔ)…7İ„quˆó¾z0®äC8Ì[èøÚú½±/+¥ d`#c„¾ºDàŸÖ/bÍRݧï¸çtD^d{oAö)D„W©7A @ÈËÛù/¯üð8;ÏüÓö¿h|`t4œ<.¦ÀLàðprõYi®ÈÙOGäÁ•‚¸pôB_þ@Ó"¦BÑ}½Ž’l/° îYÄÃ#žïëh€ü÷½Bï¯:VÎ|íK”ØþX5¦¯ gXê™ýep.™;Áªþ!Û ýòS]í¿yž‹læBn‰˜äè¯<ñ;ûôZOÁÑo‚ëÕKŽ}“\_r‚E'¾‰®Xvü»ìž¢ãÞD'OÉÑß%÷³àžrC¯r£ˆÄøá£Ü`/â?On09lš‡¸Ë÷Õ}u —`ކ˷)\GáD<ø' h@ E\‚‹gvÌpÁ¢À÷õFXœ9¥a¾T¿:}1Ï4#>Ý ~Äܺ‹k³žÜx+¸ßáÅ;í 0\-‡hìß»xyï~ñ}¹8¸¸1×{ìŠúzq\¼(>ÇŠ×òm¬Y_?Q‰Á3d8¸ð½¥¯üx6}\"‰/ÂÏKD;¼hÿ ¢_K&ÿµVÿ¬µbá?/º ÁÃÿÉ¢‹?Ÿ>÷«Cx×G–a>¨Y"ß§ Ÿ` ¯–€úê!õ*AâÔV Ç:ÌG>a• û'(Hsñá(ɲë áó+ηî¸h ¬'|ôª¸íM'ÄpOÀàPÄ€Xì7YŠƒ¿wñòÞÖ §L±NàšË^'¡S½ËäÅ÷Á¾¼öU)pÚ+#òè­…ëu¢oùè÷óÍþ×?¼õÑ‹Œ΂€½‚ê¿‚kç†ôxíˇ°Q\b%€Ñ>%ùäD€ÎúÒFç€y\q…K‘¨gñ.ÈÒ=É!ûS¿"öY©Œã Ù"¾Â4Á@x Ánñ ¸  ŸŽÓ¥xéIÌoqe+~4ó^á0%ôi†·ÂNô: Wº OÆJ¢'¾ I¦×þÉB!>K¢0vƒNŽ9 ¾ïݽ¼õ÷œ`ÿ”°†!pá4ƒÙ…sÝÖ¦¿àmÀÏ öÏÁ –÷aþO½é¾âòM(=‚ØÞÛˆø9-œ`$âúdL†É¾zWxÿË›ü³žÚ='Ö}¾_Áñ<ÐT–~S¤è¾WfÂ>Q?ÇáZoÅOÁeñåëÚ_¿ô&ÿ^“ âyaÿò1¢ðÜËÏ Lˆ%Å_ò ŸìÆÀø˜þ/ÿ8íwÐ~Sw°È¯,ÂÀÜCÏÍ@ÊxS£—<ƹ~±„Г]hà1ˆºþZWÈð4ÆËâªO Ó(WÚ‰8ó Š„kN%öA ZР‡Kï@_À¿àÇÇ`)„Þ”p%5 äðî8 .®Gh"æ¤0.„÷m l¨@;pu" bÜÍ18ã í` xwC ŸšÛ«æãv°GðýVϽ’¾ÚWTÅ•‚Ù³?¦gè}‡osÄ® À£#d X‰=ËOżùåmÌxó 1>ƒî‰$Ü×›<ëqIö»X^Þå‚eIŠÏ²{,K®wDØ—ã- „ö¾ nz®@¯ùoû<ƒþè|’Û‡Ø%üw‡Ï§«3ˆ!R_—cS^+’Iñ¹ñÁÓý8kÒ³üü_ïkaÙyo– ®¥ïèKûEL—³¯Ó€À»À±H‚qcÇìaÂùéÉh¼xõ½âdõa‰Â;4Þ’f?w 8œÑxÇö}Ë”ü„šd1«°ÊçDŠÿ˜ö6%þ̦>] üµ•øÌc€Iü=† ÿ{Í àÂn7+†Á;»Uˆ1A‹X`R_±OpÆ‹žeö‹pM Þý!8ü”hc𠾆ãY,?1¦±f,@x‹Á¡”ýÊp}]¿€ IÀÌ(ÅÒnŠÛx †yìiÀ©~í ¥8JÄ;]4Q}a< äIÁFYp9=áäEõ[véñ3+#àZ!ÞbæÅÞ5Ñ@Hø‚“ƒúÁg‚æ°bˆž™€™)úTV•hŠ¢x½éƒyÞ,ÁOŠ=ç ¡þVLbT8–ä~ŠGͺˆÿu†óý}J?ä`Hü,*%ü.+ïÜêúw™˜>ùò·21ßÕýóÔÌ'jÎrŸPòç3cÀkð®_û—}tC ÿ‡~±äˆîÚý±#ÂÕ'°öwÖ;†å>jÏ‹/Ÿ½LäwnýosCÕwàÞÿ½~îÿÿ=»Ä’ÇË]¢ðSâ.Î"€0y¼‘ˆð‡žpذËxIã·˜á]Y¼SÊÒ$-Š=¥1 ÁPžÅÔ¼_yð>8'€¡.Þµ~f žÉ)ï 8ãÑ#7bzΘ{1‘ñöŽÜx+¿_ÃŽ¥ûç q²€ëYƒi¬-f”ÄëcS_éoOºwÃ~€2Xƒù÷L[Á æùÞ[Ê— ¸éA‚?ŸtÃEaä·'JÆú êŒ/7ÈÈaEú)+?õÞã{*êu/¯# û‡Öx¦ßžæˆþ}È/Ï1c!c,Ø?]'âG1qUN÷¤@dyðï‚yÉ0¯£g±aà“¼Ñ T¤ÈõÄÔÎ~?fbŸWéÇôáô`#¦GKËàŽ(ÇÛÓf¸+~A~ü6À¢C8͇žqÂòâǽbŠü[X!iòcT…ÏHÂÏ\Â/î±}øþ-Gÿ(`ê¾ÓXX8(økì>XXŸg@ÁçcKÇÙX`Wø9F+U¿¡J˜ oì0$õÜZà±ÅÉ' xøÁ¶>L¶`‰ ~àúkÿ\.x¤Þi±àl¸þ¹n¦_Zë²øÑÂÞÙËÁ‚ÑsïîAŸy>iŒSBŽëu|¢@ö› 8iÊõö (ºÀm¬@öOÿá§¼i‘Æõ~ؤÙÿ¿½séìÈŽðÞ¿‚€WÈvfÞ|†7³µ~ƒ!ÉfþùŽ/NÞb‘¬n‘lNÃaÄYu+çô‚ŽV‡p ýXé3kEÄz‹¹dR?å—lî²âÑLëŽy„<­ƒÔçÔaG1ôõîIf¦BzZ#2ó2Ÿ|¡¢È¤?I0ÇQ^srÞ\}_Tµ¡§%c“§®÷÷K´¡€PÐÐâhÈKC˜”×&èЧŽ{‡…ÙPìZAÕ}[¦FW¿¬TS¾®”‡#£¡õôçýfN!4û»etÄ;‚7™÷.‰Wú2ê“þh¯©DÏ7fó·ƒëõðÎðú'­ •gúqæs „Ü·¶Wêí⤬OkÔ „‡öwGŸ“-W@X±A­43p‹•8|Ú±|Öþô—÷Õl_®%MóL±d=€^æÔpx½ ‡Òq G_£“‹™äù¤:(»ÿŠm[úŸÛöu®ÇY߃ÿz‰Ç/E]›T’²÷¥è¶Ÿ,ývƒB‹A`ä®2¸{ãzò±£מº¦…ÒjÛ%…/®Ö5²5#|N¼V “R€Rd¿v ’º­¤Î†LÙŒâûföÏ-"ñÓî¶ 2ÕÌžc*l€×EP¯N^U@6é«^]2гÚv¹¿–çR8qÌ]"'íWˆL½—©VÞnEúQäèy¬‹¨’+𸭑q‹ƒ5YÅ÷]·†úÈä/J&íŽÔuê£t…¸Ó”w¼ ± ¿æ>Þ¸?Æ–ë˜Öc ;Nòtt}ŸØÂd:ÔÀ”ÒEÔ“èB®ˆ.µ»ø_wí^{j Æ:&°£¢BÉ´; ›pר¿/ÐßÓòÚW )Ä*Q59OJ.$^dg8xDx¾ž¾&Ò”õ¡ð(±ÕvöÍ¥Ì×/ ÃTµF߉úÚÍŒ2·pK¾ùÐo,#ølJ‰>Cîç.[]ì¿Ë£ˆ.zDZS ûÙ A(™ói¯Ž/‡¥)…¢ÉÁÊÆ)ô³z„¡ºŽ>‰>«û"5„û™î¬ß€·„<Ï\ÅYS/…nIÙÙɇTž.-Y…M·˜;…oÞ¼Ûîû« (¼·êÓËÎÕzÅ–Qˆ¬ §°L:0Î!u¨–¥æ8­‹ó›/Ù×¾åìHžÊ™9÷Cäb€¬ow6­k—|ä¶ÞL€þ`à ‹³dZö² %¨5  K¦c·Nmžx¥XTðió]<«B@y¹»¹yÒ—Óæ¥a“§·ŸÆ È|fÛE…É`ˆBwÚþ@ûGI6­’lIm…wÃÊÀ[y„tôJ”rõÁ©ª3[¼"Í6²,•Ò}yEœ´IcÇ‹õþŽC8j•5¸>„×ÒŠÔõsžéÀ¼@Gh¥¼ý¤é,ÇIóÆÌHV}ÐX'×nJ¯Gi>hK©Gs«ºCôK½'J€du [«ÖBšú匎ÕQØä‡¡Ù5 ]ÀÒÃÅÉìúf]ñË 4c =©SÆ)žQÇj)c‰V;u3N!‡ÚÞs&ùüYŒlGYU²é»°(…í†î#t¸óã”÷:¢¹Ð±ûi0§/u£âpVÎÍÂ傉dÂK:ÈÃùˆN.ºMã¦"ä§Ú2E42ùB¥`P'«ÂI’H¶¬Â™§åÂÀ ¯ò<Æ3:©#]©RÔ’ UÏ6öCO´ò¬×è8ÒõžèŸøâv›¨¿Ô(¥4Ü¡Œ'¯õ|PŽ¡ï“ íPËV̳ ü‰ÍÙW+*Ì÷3Kœú´ef´er5;fpEÛ"]–u*X¿æ®V~J»„²5E´Jlf8-ŒaƒîÖ8‰ÈZ3°Sú¨á%äâ¬4'©z¦ÔÕ ¸ú#„»ò¸œSÿ,ÙʉZB"O°;¡a=î2¹ô~홢9ü:‰4qÌD•‰…Ðý“¦V-%WN7“tÚs¨QÈäðJk6ò:ÈZé»äWû1)B!h†æ×"€ÛfÙi“žzô‘•Ñáê/äkûÄÝuë©xÆ÷©52+*Zܵø½BËÛu W¼06ÜM*\ƒ×BÉ}_e¸ªÿ0vßEõ²SÖ]–0ƒÿ¡×@:éãH”&äÅ…;ëh#E0=9kSá¥RÝOe”ß$èRé1>?¦_¹¡Ê<´âõ¬¢¡n C븸'ÖW‰¡Ö¹µg7ô…þ×Íš§ÿ÷vêÍ÷øEíÊxSÛer´äÙÞe¨FADtáXɈŠÁV€B‹ÅËÚŒ»ßî.¯=\^üÐ òx¥µC´§úkW„¿ÏãeÒЀ‹QÝ ¬Ç¤Ö d¥ma¯e™‰\P`ù À»\rCu½D¾¿÷Î-OË~x×h`\Ó…QáæNÍ:±æư–èù˜Žà/œ€?ï÷@`„÷œ›¡4f°›d³Ú†Ø£¤«4ó¾ñ¶ XŽÀÂ?ªŒ € ?%mw˜¨T’’ÙŸÔxJÏÆÚä ¥AÑþ,©Œ•ÿÉCsD1@!»ý¡0[”«Z;…nYoÆêŽGKõœu§NDÞh8Θm=þÝCüáñ¦­xMårýÅq¥Ït·—GWM°ŸénõBx{¾TÞN±€£¢ ÉvuGš\Ò„& /¤¹ß'Ì}Ì—ÊÜ_7OÇ \~<Ç Tš®äÈWV¢ÉÁ<³ùßÓ/ùÙQlÁM¿ÙJ4yâw[ š(ÓM‚ÆÐ»ãØ+g 7(º7¦È²ží×™ÃÞRra_Ëž"žîÝÔ'dýÚŒn¬åõðùº6ôZk6GJZë‡.u:Æ«x¥¯ƒÄßZê<Þ½Ô #`”v+e dY¢¸Hù ÿHa{±¬§D<+YvǦM§Òº:‘st¥¯‡cƒ žÒrY‰:Š¥[g#Xž{«›¨‰õƒúè7áñT„ǘÏã,CÍùW§¤¾Ùbybeê¬A›9@3T<§éaPkAÕ®P"çǦ$<ÊaX=ë—ênEdsnLK-šM4Äì"ígkŒæS97¥É­G%­ôˆzÝÖÉdUÐËÔ.írGðG³»`ùLù¨ÀêÑNJe¼Hd›Ó®¤\ž}à€-i¦HË%·Üã+)]Ì^M³…›)ÀºÙ9»)®Üzòçtt¡­¿1Ç—ë}øÊ…¼Í“Τ¨œžÃÎ2ºi×_mÚê_P=½ŽþþûšÞŒÞ4H,p™—¦õùãŠWIõkõ趯#ÜŽ+‘ŒiëãßÚü°¯¬¸RË@åÂw.ʽˆ¸´²ÑƶZé^æ"ÆÚ]g¹Öa,2¥g_4+¨°V 6kF§*NrIäŸïšihr÷ ãLûlå‰r\"¥\ÎqŽ¡Øi‘"}²ñN3€J‘¼!°5Åv¤yM÷|Þü¾„ ÄsÔ×°„q^} e;‰#—ÃÐd2]=t‰0ç ¥!ùÌ®Œ˜ë¾ŒºXQÄŸ‰àDבÀ>U¦GZ)õ-èl슅‚QÏ3üWv]+“û¦Óàr2b  aÿM«k/×:ÞÍš~e à^3íqÃTܧT6”—¥mF§“žð"µ%@Ÿ'»:œJJËÆ- {®&‚u1×2q¿†.z3ŸJ'¼:ÆÖLè^…†É‘°2ˆa‰xÙï/ZvS{z‚m:Ã]@%’ESòDßÖ³©ˆ+O‹Ï»ª˜!=Å2÷CI_6Ò|~«€>èÌùƇÕT„îƒJD-#Z»´)w.2û—‰ÂÓùÔíù|êÛ±ûµwcáúº_¦ ¥{BÇÓÍây¸8ű¨î3XºŠÎØB4ZÖ׋è;ÀÑzp¾ú¡Ÿ޼ãñN6˜¦ÐË*Í}¿i¨-s{hh?þØkiÊÄÙ=3ÚùaOw¼}uÇui£dUÚªÑéË* Èë廟gê)[»¾¢Y>Ó›åŸÚ ŸÚ ŸÚ oÖNÐÛ¶çĶÛ÷ñ­Ýwp£¼„úm™åªáü§Ÿÿû_ÿå—ÿüóýüÇ÷’q[Gåýóò^þÿ·—ÿE‰”¢7|ßÇ® ¤ût™’T3öu¢/@œS?·–À äyN@$ù lèE…tÒ³±9OçæT4qòƒ”jgcÍ ‹lZ†G{ O1äaÐ6$ý|ù¡í¾%„ÌáÀÛCp×FČσç÷{?\½ùÓÁKÏç.!¼ë±”ÙiCeR† 4*¶fá$k‡gÚëú[¬çÉ~^Òã™þ’µˆy WøÜ0Ð ÓX'"èJaï6¥,ÿñÞÎ%û–6p½¿·àHNÚ+Bnˆƒ#fP}Ð;P©ýXNzVan!²Ò£)˜Ã­ÄGÞ¹\Vâ¼ÈÈÊY8 Ò@kÚjä´jÎ?|xüË7íàMսǨzÕ;dÄÖ˜ù¾ZÓœéûQÿU'øÝL½\'=ce®‹ŠAÒB¾Üˆüb#ò‹È¯ÚˆãÆFä¯âƒosÛ|}“.1yc#ºrÖ?ßÚˆ7—?x#bœT=¶–‡”£^“:§IÕCf*1bšT>bºOÐiÆ—-M‘z úŽ2æ¦õÍGÓ( dC;–c¾]¥äC¬C–pª˜Þ_/ÓÕj?Õ PØ+~YšEMä;Œah+㛪±BiÁn`“Lvò<¤#T/ÁÔ/˜ð0ɤ‰•S¦¦¶Á {"êÿ.bá”!ÓÊáÛºt†r?Û¹°’ÛëÔ¦ÖÖÚ’UFo°ÿ“Ñ ÍêéT¬boŸ&Õ'OÅÂþVO‡j{Ûù|ÏçbÕ‹…„iIKááÚS±b1ÎÕ8¥ Wö2 +ÀŽº8‘ Ë¡Üø8+ŸÐb–—~Ù€¾^A®w x]ìÁ<÷ =~Ë«/I¬WÀµ?Ž#¹Ì÷I®{̲Ž^käæfsŸHqó98¸ë0å€jöø7'@)vc\vÃ:cO7£Ô»{á­˜W3Êhˆ0@±^v¢Ý]Öäjö ?\/1ò£Ý’3Û²Ú„šªøÎ v¶ëÐ:݇ÑU‰‹˜óquñJ÷ÜÇç7ñåUžŽòÒÝwÎÂ(¯ºZi>qþŽˆª¼·E ¹23åQdË'£Ò-\òKËú"wý~¾Œ–ÿø«ímíÆ²Õ¢h´´õ ”L ÎÑ0ø0¸›ïÐ nJÉÉã(-,,M%«<(¦IP£ ZÀp çvBä$Í™OµH j ¼1ÑÜøâêÈÝF|¥Ý>¬‰ -fć0]Ö¸)Ù±9OÁ™ë…–úý&²¬çƒœ„|zˆafë)ƒ|læÅɃ\å9h¶"ƒW ô“wª®'ÆXD/µ(&˜¼ŽÎÍ#É:¼ÄF,_æ$³­ ÔUÚQhòh\w{ê ÏS- ”÷ìly‡/I3¦èP›=¿bDl mÏ[°‚CØÒW²±‚¶RŠ?sGM‘k¥ éøñßþ"ËÇèÙéÓÂ\'ùHôzü#e^˜(éË&€lÍ*üèI'ü¼$ EÞV©áÓB(ý(µ£Lí…‹‰ÁŠ—ï=Â#zÅÆ1ÎîQ—›6ß÷²»þ”ËòÏÞF´ÿä`B®ÌÍžÚƒVó^ÊRÓf'ÇÒÔŽÃôó›FmlÌ‚44°ð@õ’TçúLá]  ¹¾ÑÜ ú—Sl™SùN¢@£™œÿ-"s÷|ôbÜký%ÿšý¸{iï†(~J©J©J©¿_Jý£ +³¾¢=óGTQÖ{Ù×v]‚»ý˜ýïžË<1S^Π¾½4÷-™§+£ySïézêîl¿[ˆüÞ:çgûÿjû»»„OÒ¿¿•mù9õÊö¤h7MýÞ,8`h:˜äu=D$”fý¬µ|ÖZ.µ–Ûb B ŸÑæg´ùmþµF›™þÅ+PßowiçЯs¸ÙßÿGŒàÖÿý#sÂÿéoþ—;ºó„¨keepassx-2.0.3/share/linux/000077500000000000000000000000001276304217300156055ustar00rootroot00000000000000keepassx-2.0.3/share/linux/keepassx.desktop000066400000000000000000000005311276304217300210220ustar00rootroot00000000000000[Desktop Entry] Name=KeePassX GenericName=Password Manager GenericName[de]=Passwortverwaltung GenericName[es]=Gestor de contraseñas GenericName[fr]=Gestionnaire de mot de passe GenericName[ru]=менеджер паролей Exec=keepassx %f Icon=keepassx Terminal=false Type=Application Categories=Qt;Utility; MimeType=application/x-keepass2; keepassx-2.0.3/share/linux/keepassx.xml000066400000000000000000000004521276304217300201530ustar00rootroot00000000000000 KeePass 2 database keepassx-2.0.3/share/macosx/000077500000000000000000000000001276304217300157405ustar00rootroot00000000000000keepassx-2.0.3/share/macosx/Info.plist.cmake000066400000000000000000000031311276304217300207650ustar00rootroot00000000000000 NSPrincipalClass NSApplication CFBundleDevelopmentRegion English CFBundleDisplayName ${PROJECT_NAME} CFBundleExecutable ${PROGNAME} CFBundleIconFile keepassx.icns CFBundleIdentifier org.keepassx.keepassx CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PROJECT_NAME} CFBundlePackageType APPL CFBundleShortVersionString ${KEEPASSX_VERSION} CFBundleSignature KEPX CFBundleVersion ${KEEPASSX_VERSION_NUM} NSHumanReadableCopyright Copyright 2010-2012 KeePassX Development Team CFBundleDocumentTypes CFBundleTypeExtensions kdbx CFBundleTypeIconFile keepassx.icns CFBundleTypeName KeePassX Password Database CFBundleTypeOSTypes kdbx CFBundleTypeRole Editor keepassx-2.0.3/share/macosx/keepassx.icns000066400000000000000000003276501276304217300204560ustar00rootroot00000000000000icns¯¨is32·†ÿ‡ÿ ,NXQ/ÿ €ÿX1b[B[g;^] ÿÿaf%elhoj#ÿuXÿO}%=z|u&9{ v‚ ÿV‡ˆP†ŒŽ†f„‘lÿÿ n“”•–—˜šš›Ž.€ÿ 6MOPO!€ÿ HMOPQ+‚ÿ HKMCJRT-ÿ GKK= KTV/€ÿ-FIKK,LVV.ÿÿGI4ÿNVCÿÿ !" ÿÿÿÿ,%‰ÿÿÿ†ÿ , ‡ÿ a«¾²aÿH1€ÿXj¿±y¬Çr ®±Dÿÿ»¹5#°Ä# °¼·Hÿ6Æ”ÿ€Ð;\À¾JjÊÆA$½É*ÿwÈÉÄËÏÑÌ¡Ê׊ÿÿ ’ÎÐÑÒÔÕÖ×Ù¼1€ÿ y°³µ°F*;>€ÿ ?¦°³µ·\‚ÿ D¥®°–§¸ºaÿ I¦¬®Š0§º¼f€ÿ--¦ª¬®c/©¼¾cÿÿ/¨ªu04ÿ.ª¾‘ÿÿJLÿÿÿÿ+`O‰ÿÿÿ†ÿ‡ÿ  8>;!ÿ€ÿX$JG4EP-IGÿÿ IRRXUZUÿaIÿDh5gia+nh dqÿKvxn@t{|uWs€dÿÿ e……†‡ˆ‰ŠŠ‹‚.€ÿ $4575€ÿ 14577‚ÿ /34-38: ÿ .13) 3:Ñþ€ÿþÎ:ÿýøÇ¨‘©Éùüˆ€ÿ…‚ÿ—ÿÚr]_`bc{ßÿ€ÿDˆMÿCþÓZZ[]_abceÚý<€ÿüVÿÿßöjVXZ\URtB\yùÙ€ÿƒbqîûSÿ'ÿ±SUVXZ]ÿÿî0c¾ÿ€€ÿe<>`ïúO€YÿŒQSUWP¤€ÿW_ÿQ€€ÿn;<>bòùLˆÿjPRSUN`ÿÿù^€ÿ€€TÿèS;=?eòøHxÿ|NPRTU\š7&`ŒÿjZlÿæP;=?hô÷EOÿ£MOPRTP-2X_«ÿ8ÿoÿäP;=?kõö¹ÿ³KMOQRTVXY[^Üü ÿÿrÿâM<=?n÷ÿÍNJLMOQSTVXZ¤ÿ€€ÿvÿàL<>?pÆLGHJLNOQSUVŒùÛ €ÿyÿÞJ<>@ACEG‰°`NPRm¾ÿî9‚ÿ|ÿÛJ<>@BC„ýÿÿëÖóÿÿ»„ÿÆÿ°;=>@Q÷ÿ•’ÉòÊ”U„ÿ‹ÿÓB9;=?@zûì-†„ÿ†ÿÕ@68:;=?A}ûê*„„ÿ‚ÿ×?35AJLA=?A€üç'…ÿ}ÿÙ>/13­ÿÿÐD>?A„ýå$ƒÿyÿÛ<,.02¬ÿÇÿÍC>@A‡þâ!ÿtÿÝ:)+,.0«ÿ!›ÿËB>@BŠþ߀ÿXÿß9&')FZ[½ÿ  ÿÈB>@BŽþÜÿ€ÿY"$&Xôÿ ¦ÿÅB?@BÄÿÿ €ÿR"#Róøˆ€€ªÿÂA?A¾ÿÿ€ÿƒ`mñùK… ¯ÿÀstÐÿÿ€ÿúO‡´‚ÿÿ8pA‰kpÿ‡„ÿˆÿ††ÿ‡ÿÿ„”ÿ€BjB€‘ÿ>Ñþ€ÿþÎ:ÿýûàÏÃÑâüüˆ€ÿ…‚ÿ—ÿê±¥§©ª«¸îÿ€ÿDˆMÿCþ梢¤¥§©ª«¬ëý<€ÿüVÿÿßú©Ÿ¡¢¤—o{e ·üÙ€ÿ²ž¨õûSÿ'ÿÑœžŸ¡£mÿÿîL«Üÿ€€ÿŸ‡ˆžöúO€Yÿ¼›œžŸ‘¥€ÿZ¤ÊÿQ€€ÿ¥…‡‰Ÿ÷ùLˆÿ§™›œžaÿÿù£ºÿ€€Tÿñ”…‡‰¡÷øHxÿ²˜™›ž5\š7C¨ÁÿjZlÿï’†‡‰£ø÷EOÿÉ–˜š›“R!Yœ§Ñÿ8ÿoÿî’†ˆ‰¤ùö¹ÿÒ•–˜š›Ÿ ¢¤¦ìü ÿÿrÿ톈‰¦úÿá•“•—˜šœŸ¡¢Ìÿ€€ÿvÿì†ˆŠ¨Ý“’”•—™šœžŸ¾ûÛ €ÿyÿê‡ˆŠŒ‘¸Ð¡—™š«Úÿî9‚ÿ|ÿ鎇ˆŠŒµþÿÿóçøÿÿ»„ÿÆÿÎ…‡‰Š•úÿ•’ÉòÊ”U„ÿ‹ÿ㈄†‡‰‹®üì-†„ÿ†ÿ凃„†‡‰‹°ýê*„„ÿ‚ÿå…~ˆŽ‰ˆ‰‹²ýç'…ÿ}ÿæƒ{|~Ëÿÿâ‹ˆŠ‹´þå$ƒÿyÿèxy{}ÊÿÇÿà‹ˆŠ‹¶þâ!ÿtÿé€tvxy{Êÿ!›ÿÞ‹ˆŠŒ¸ÿ߀ÿXÿê~qsu‡•—Õÿ  ÿÝŠ‰ŠŒ»ÿÜÿ€ÿ’npr’øÿ ¦ÿÛŠ‰ŠŒÜÿÿ €ÿnoŽ÷øˆ€€ªÿÚ‰‰‹×ÿÿ€ÿ®–ŸöùK… ¯ÿØ©ªâÿÿ€ÿúO‡´‚ÿÿ8pA‰kpÿ‡„ÿˆÿ††ÿ‡ÿÿ„”ÿ€BjB€‘ÿ>Ñþ€ÿþÎ:ÿýöº’u“»øüˆ€ÿ…‚ÿ—ÿÒS889::XÖÿ€ÿDˆMÿCþÊ877899::=Ñý<€ÿüVÿÿßõN66773Bp/6V÷Ù€ÿyTcìûSÿ'ÿ£45667Uÿÿî!:¬ÿ€€ÿZ,-QîúO€Yÿy44560¤€ÿV7ƒÿQ€€ÿd,,-TðùLˆÿS34451`ÿÿù7^ÿ€€TÿçF,,-WñøHxÿh33455\š79oÿjZlÿäD,--Yó÷EOÿ–233451 58–ÿ8ÿoÿãB,--\ôö¹ÿ©2234455677:Óü ÿÿrÿà@,--_öÿÇ61223445567ÿ€€ÿvÿÞ?,--bÀ60112234456t÷Û €ÿyÿÛ=,-..//0y¥I335R²ÿî9‚ÿ|ÿÙ<,-../výÿÿèÐñÿÿ»„ÿÆÿª,,-.>öÿ•’ÉòÊ”U„ÿ‹ÿÐ6+,--.kúì-†„ÿ†ÿÓ6*++,--.oûê*„„ÿ‚ÿÖ6)*6>>1--.süç'…ÿ}ÿØ7(()¨ÿÿÍ5--.wýå$ƒÿyÿÚ8''((¨ÿÇÿÉ3--.zýâ!ÿtÿÝ9%&''(¨ÿ!›ÿÇ3-..}þ߀ÿXÿß9$%&AVV»ÿ  ÿÃ2-..þÜÿ€ÿY#$$Vôÿ ¦ÿÁ1-..¾ÿÿ €ÿR##Róøˆ€€ªÿ¾1-.·ÿÿ€ÿ„`nñùK… ¯ÿ»ggËÿÿ€ÿúO‡´‚ÿÿ8pA‰kpÿ‡„ÿˆÿ††ÿ‡ÿl8mkUвŠU¹ÿÿÿÿÿÿÿ¶aðÿÿÿÿÿÿÿÿÿìTeÿÿÿÿÿÿÿÿÿÿÿÿÿZ4ÀÐÐÐж2ñÿÿÿÿÿÿÿÿÿÿÿÿÿí²ÿÿÿÿÿÿï1¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÀÿÿÿÿÿÿÿì,+ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿR Àÿÿÿÿÿÿÿÿè(bÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿå#˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÀÿÿÿÿÿÿÿÿÿÿáÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚ­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ5ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­@õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„D÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöN Gøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ'KùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ8 OúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáQŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ´6QûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþèÃq Múÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò~A JùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßJGøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ? E÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ8 9öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ$¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿg Àÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿÿy Àÿÿÿÿÿÿÿÿÿÿÿÿÿ¡³ÿÿÿÿÿÿÿÿÿÿzÀÿÿÿÿÿÿÿÿõàààÃ[>§ÿÿÿÿÿÿÿÿÿ|Âÿÿÿÿÿÿÿño6.+% !©ÿÿÿÿÿÿÿÿ}´ÿÿÿÿÿÿól !¬ÿÿÿÿÿÿÿnAÅÕÖÖÖÈl’ÓÖÖÕÕ®- ih32E™ÿ…£ÿŠžÿ]Ф¯—z5‚›ÿ€¯û„ÿâ\™ÿ€Xîÿýö‚ÿ«€—ÿ§€ÿ Ѧ†hbx™ºóÿÿçI€ÿˆ†ÿ€´ÿÿó’\]_`abccrÐÿÿû2ÿÿ‰…ÿ`ÿÿÒiZ[\^_`ab€cžûÿÑÿœƒÐ« ƒÿïÿìaXYZ[]^_`ab€c®ÿÿ‚„À„ÿ¹‚ÿ´ÿÿ„VWXYZ\]]6@:)Xceßÿû0ƒ Àÿ÷ÔÕÕéÿÿµ€ÿ$ÿÿ¾SUVWXYZ[3ÐÿÿÐ#Qc~ýÿˆƒÀÿÚ<=>KÙÿÿ±ÿÿsÿÿ€RTUVWXY6ÿ’ccàÿ»ƒÀÿÚ;<=?MÛÿÿ¬ÿ°ÿÿ]QSTUVWXíÿð YcÂÿìƒ ÀÿÚ:;<>?OÝÿÿ¨ ÊÿéOPRSTUVWßÿãKc£ÿÿ‚Àÿè@:;=>?Pàÿÿ¤€ àÿËNOQRSTUVyÿ{XbˆÿÿJ‚*®ÿÿÉ?:<=>?RãÿÿŸÃÿäMNPQRSTU5 ›óó› `a›ÿÿ,‚*ÐÿÿÇ>;<=>?Tåÿÿ›šÿþXMOPQRSTVN_`¹ÿö€+ÿÒÿÿÄ?;<=>?Wçÿÿ–pÿÿ~LNOPQRSUU2&S]^_ØÿÇ+ÿÿÕÿÿÁ>;<=>@Yéÿÿ“¹ÿÿŸKMNOPQRTUVWXY[\]i÷ÿ•€ÿ×ÿÿ¿=;<=?@[ëÿÚTJKMNOPQSTUVWXZ[\ÆÿÿNÿ&Ùÿÿ»<;<>?@]ìÿÿÛSHIJLMNOPRSTUVWYZŽÿÿ­‚‚ÿ%Ûÿÿ¸<;<>?@`ïÝRFGHIKLMNOQRSTUVXsïÿë‚‚ÿ€!Ýÿÿ´;;=>?@`RDEFGHPQLMNOQRSTVŸùÿÿXƒƒÿ€ßÿÿ±;<=>?@BCDEFMÎï WMNPQ^‚Òÿÿý„ƒ…ÿ€ áÿÿ®;<=>?@BCDJË€ÿþçËÃæÿÞ=ƒ‡ÿ€ "ãÿÿ«;<=>?ABGȉÿœ „ˆÿ€¡ÿÿèI;<=>@Abõÿÿ„Q¡Íê÷ßÂz%…ˆÿ€‘ÿÿéS9:;<=?@Amöÿÿj‹‰ÿ€ÿÿêR789:;<>?@Ap÷ÿþe‰‰ÿ€‰ÿÿìR46789:;=>?@Arøÿþ`‡‰ÿ€„ÿÿîS2346789:<=>?@Auùÿý\„Šÿ€ €ÿÿïT01235¤€´ ‡<=>?@BxúÿüWƒ‰ÿ€ {ÿÿðU./0124æÿ <=>?AB{ûÿûSƒ‡ÿ€wÿÿòU,-./013æÿýýÿþŠ<=>@AB~ûÿúNƒ…ÿ€rÿÿóV)+,-./02åÿ¨=ôÿþ†<=?@AB€üÿùJƒƒÿ€!nÿÿôW'(*+,-./1åÿ¨Aöÿýƒ<>?@ABƒýÿøF‚ƒÿ%gÿÿöX%&')*+,-.0åÿ¨D÷ÿý€=>?@AB‡þÿö?ƒÿ Àÿ÷Y#$%&()€×Øúÿ¨€Høÿý~=>?@ACŠÿÿƒÿ ÀÿÕ""#$%'„ÿ¨ Kùÿü{=>?@BCùÿƒÿÀÿÕ€"#$‡ÿÿð‚À~‚ Oúÿûx=>?ABùÿƒÿÀÿÕ"‚ÿÿð3‰ Sûÿúu=>@AùÿƒÿÀÿç€{˜ÿÿñ7‹ Vüÿú—‹üÿƒÿÀ„ÿó;Zý„ÿƒÿÀƒÿõ>^ýƒÿƒÿ$ƒ0‰ÿÿƒ%ƒ0ƒÿ†ÿŽƒÿŒˆÿƒÿ‹Šÿ‹„ÿ™ÿ…£ÿŠžÿ]Ф¯—z5‚›ÿ€¯û„ÿâ\™ÿ€Xîÿþú‚ÿ«€—ÿ§€ÿ æÎ½­ª·ÈÚùÿÿçI€ÿˆ†ÿ€´ÿÿøÃ¥¦§¨©ª««³æÿÿû2ÿÿ‰…ÿ`ÿÿ媣¤¥¦§¨©ª€«ËýÿÑÿœƒÐ« ƒÿïÿô¥¡¢£¤¥¦§¨©ª€«Óÿÿ‚„À„ÿ¹‚ÿ´ÿÿ¹ž ¡¢£¤¥¤]NED˜«¬îÿû0ƒÀÿú€åñÿÿµ€ÿ$ÿÿÙœžŸ ¡¢££DÐÿÿÐ'Œ«¹þÿˆƒÀÿ膈‰‘èÿÿ±ÿÿsÿÿµ›žŸ ¡¢aÿ’%««ïÿ»ƒÀÿè…‡ˆ‰’éÿÿ¬ÿ°ÿÿ¡šœžŸ ¡2íÿð š«Þÿìƒ Àÿè…†‡ˆ‰“ëÿÿ¨ Êÿò˜š›œžŸ ßÿã‚«Íÿÿ‚Àÿðˆ…†‡ˆ‰”ìÿÿ¤€ àÿá˜™š›œžŸ-yÿ{™ª¿ÿÿJ‚*®ÿÿ݈…†‡ˆ‰•îÿÿŸÃÿï—˜™š›œža ›óó› '¨©Éÿÿ,‚*Ðÿÿ܇…†‡ˆ‰—ïÿÿ›šÿÿ—˜™š›œ/ Ч¨Ùÿö€+ÿÒÿÿÚ‡…†‡ˆŠ˜ñÿÿ–pÿÿ³–—˜™š›œž\, D”¥¦§êÿÇ+ÿÿÕÿÿ؆…†ˆ‰Ššñÿÿ“¹ÿÿÆ•–—˜™š›žŸ ¡¢£¤¥¬ûÿ•€ÿ×ÿÿ׆…‡ˆ‰Š›óÿé™”•–—˜™šœžŸ ¡¢£¤ßÿÿNÿ&ÙÿÿÕ…†‡ˆ‰Šœôÿÿꘒ“”•–—˜™›œžŸ ¡¢Àÿÿ­‚‚ÿ%ÛÿÿÓ††‡ˆ‰Šžõê—‘’“”•–—™š›œžŸ °öÿë‚‚ÿ€!ÝÿÿÑ…†‡ˆ‰Šž–Ž‘’—˜•–˜™š›œžÈüÿÿXƒƒÿ€ßÿÿÏ…†‡ˆ‰ŠŒŽ”âöÇœ—˜™š¢·åÿÿý„ƒ…ÿ€ áÿÿÍ…†‡ˆ‰‹ŒŽ’à€ÿþñáÜñÿÞ=ƒ‡ÿ€ "ãÿÿÊ…†‡‰Š‹ŒÞ‰ÿœ „ˆÿ€¡ÿÿðŽ…‡ˆ‰Š‹Ÿùÿÿ„Q¡Íê÷ßÂz%…ˆÿ€‘ÿÿñ“ƒ„†‡ˆ‰Š‹¦úÿÿj‹‰ÿ€ÿÿò’‚ƒ…†‡ˆ‰Š‹¨úÿþe‰‰ÿ€‰ÿÿ󒀃„…†‡ˆ‰Š‹©ûÿþ`‡‰ÿ€„ÿÿô’}~€‚ƒ„…†‡ˆ‰ŠŒ«ûÿý\„Šÿ€€ÿÿô‘{|}~€ÆÐÐÑ´†‡ˆ‰‹Œ­üÿüWƒ‰ÿ€ {ÿÿõ‘yz{|}ïÿ ¸†‡‰Š‹Œ¯üÿûSƒ‡ÿ€wÿÿö‘wxyz{|~ïÿýýÿÿ¶†ˆ‰Š‹Œ±ýÿúNƒ…ÿ€rÿÿ÷‘uvwxyz|}ïÿ¨=ôÿÿ´‡ˆ‰Š‹Œ²ýÿùJƒƒÿ€!nÿÿø’stuvwxz{|ïÿ¨Aöÿþ³‡ˆ‰Š‹Œ´þÿøF‚ƒÿ%gÿÿù’qrstuvwyz{ïÿ¨D÷ÿþ±‡ˆ‰Š‹Œ¶þÿö?ƒÿ Àÿú’opqrst¶å€æüÿ¨€Høÿþ¯‡ˆ‰Š‹¹ÿÿƒÿ Àÿännopqrµ„ÿ¨ Kùÿý­‡ˆ‰‹ŒûÿƒÿÀÿä€nop±ÿÿð‚À~‚ Oúÿý«‡ˆŠ‹ŒûÿƒÿÀÿän­ÿÿð3‰ Sûÿüªˆ‰Š‹ûÿƒÿÀÿ»ÿÿñ7‹ Vüÿü¿¸¹¹ýÿƒÿÀ„ÿó;Zý„ÿƒÿÀƒÿõ>^ýƒÿƒÿ$ƒ0‰ÿÿƒ%ƒ0ƒÿ†ÿŽƒÿŒˆÿƒÿ‹Šÿ‹„ÿ™ÿ…£ÿŠžÿ]Ф¯—z5‚›ÿ€¯û„ÿâ\™ÿ€Xîÿýó‚ÿ«€—ÿ§€ÿ Ç‘hB:U¨ðÿÿçI€ÿˆ†ÿ€´ÿÿðz€899€:MÄÿÿû2ÿÿ‰…ÿ`ÿÿÉI77€899:„úÿÑÿœƒÐ« ƒÿ ïÿéB667788€9:˜ÿÿ‚„À„ÿ¹‚ÿ´ÿÿn566€7 87"953:=×ÿû0ƒÀÿ÷€Ñæÿÿµ€ÿ $ÿÿ³45566€7 *ÐÿÿÐ!0:\üÿˆƒÀÿ×,--9Õÿÿ±ÿÿsÿÿk4€5667!ÿ’ ::Øÿ»ƒÀÿ×,,--<Øÿÿ¬ÿ°ÿÿB44€566íÿð 4:²ÿìƒ Àÿ×+,,-->Úÿÿ¨ Êÿæ33445566 ßÿã,:Šÿÿ‚Àÿæ2€,--@Ýÿÿ¤€àÿÄ€344556yÿ{4:iÿÿJ‚®ÿÿÆ2€,--BàÿÿŸÃÿà233€455! ›óó› 99ÿÿ,‚ÐÿÿÃ1,,€- Dâÿÿ›šÿþ@233€455/99§ÿö€ ÿÒÿÿÀ0,,€- Fåÿÿ–pÿÿl2233€4 55 2889ÎÿÇ ÿÿÕÿÿ¼/,,€-Hæÿÿ“¹ÿÿ’€23344€566€78Föÿ•€ÿ ×ÿÿº.,,€-KéÿÕ=122€344€566778¹ÿÿNÿÙÿÿ·-,,--.Mëÿÿ×>01122€344€5667vÿÿ­‚‚ÿÛÿÿ³.,,--.PíÙ>00€122€3 445566Vìÿë‚‚ÿ€Ýÿÿ¯-,,--.P?//001882233€456øÿÿXƒƒÿ€ ßÿÿ¬-,,--..€/06Èí“>2334BlÊÿÿý„ƒ…ÿ€ áÿÿ©,,€-..//5Å€ÿýäĹâÿÞ=ƒ‡ÿ€"ãÿÿ¤,,€-..4‰ÿœ „ˆÿ€¡ÿÿæ<,,€-.Qôÿÿ„Q¡Íê÷ßÂz%…ˆÿ€‘ÿÿèG++,,--..^õÿÿj‹‰ÿ€ÿÿéI*++€,--..aöÿþe‰‰ÿ€ ‰ÿÿëJ)**++€,--..cøÿþ`‡‰ÿ€„ÿÿíK))€*++€,--..føÿý\„Šÿ€ €ÿÿîN(())*ž€¯~,€-..jùÿüWƒ‰ÿ€{ÿÿðP'€())äÿ…,€-..múÿûSƒ‡ÿ€wÿÿñQ&''€()äÿýýÿþ,€-..pûÿúNƒ…ÿ€rÿÿóS€&''(()äÿ¨=ôÿþ},--€.süÿùJƒƒÿ€nÿÿôU%%&&€' ((äÿ¨Aöÿýz,--€.výÿøF‚ƒÿ gÿÿöX$$%%&&€' (äÿ¨D÷ÿýv,--€.yýÿö?ƒÿÀÿ÷Z#$$€%Öúÿ¨€Høÿýs,--../}ÿÿƒÿÀÿÖ€#$$%Œ„ÿ¨Kùÿüp€-../øÿƒÿÀÿÖ#$‡ÿÿð‚À~‚Oúÿûm€-..øÿƒÿÀÿÖ#‚ÿÿð3‰Sûÿúj€-.øÿƒÿÀÿç€|˜ÿÿñ7‹VüÿùŽ€‚üÿƒÿÀ„ÿó;Zý„ÿƒÿÀƒÿõ>^ýƒÿƒÿ$ƒ0‰ÿÿƒ%ƒ0ƒÿ†ÿŽƒÿŒˆÿƒÿ‹Šÿ‹„ÿh8mk  KmŠ—|_*M´÷ÿÿÿÿÿÿÿÛˆ/¿ÿÿÿÿÿÿÿÿÿÿÿÿðt^øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛbÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏ _´¸¸¸¸¸¸¨A5ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥LÿÿÿÿÿÿÿÿÿÿmÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿC–ÿÿÿÿÿÿÿÿÿÿÿhRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍ ˜ÿÿÿÿÿÿÿÿÿÿÿþcÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc˜ÿÿÿÿÿÿÿÿÿÿÿÿý_ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®#˜ÿÿÿÿÿÿÿÿÿÿÿÿÿýZaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿç/ ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüVˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ=˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûQ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿT˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]:ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñC‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆ<Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’2‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðW#–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ;›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãI Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõf( ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú-¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòr+JÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑW!BöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ{. >õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÞÉ¢X-;óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð„U2 7òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîk/4ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë]% 1îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèW" -ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæS *êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãMèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ3sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿz˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿž ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ‡ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ!˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’foêÿÿÿÿÿÿÿÿÿÿÿÿÿÿ !˜ÿÿÿÿÿÿÿÿÿÿÿÿÿçÍÌËËÆT=3Yêÿÿÿÿÿÿÿÿÿÿÿÿÿ "™ÿÿÿÿÿÿÿÿÿÿÿÿßaF=:861&!Yìÿÿÿÿÿÿÿÿÿÿÿÿ¡#œÿÿÿÿÿÿÿÿÿÿÿà[0  \îÿÿÿÿÿÿÿÿÿÿÿ¡#}ÿÿÿÿÿÿÿÿÿÿáZ, !^ïÿÿÿÿÿÿÿÿÿÿ†!%ÊÿÿÿÿÿÿÿüÊ]- !]ÔþÿÿÿÿÿÿýÆA ?KOPQPPJ<* .GQRQONLE2    it32K‰ÿÿÉÿéÿ•âÿ›ÝÿŸÚÿ¡×ÿ‰1Sn‰¤ÀÛÙ¾£ˆmR/‰ÓÿˆF—å‹ÿã“BˆÐÿ†O¥ð‘ÿí H‡Îÿ†>Ê—ÿÁ4†Ìÿ…(±šÿþ¤…Éÿ…—ûÿ÷‡ „Èÿ„%Ù¡ÿË„Æÿ„Bî‰ÿ ôÅ©™‰yik{‹œ¬Éö‰ÿä2„Äÿ„fû‡ÿð½Šb_``€abbcgÂó‡ÿõS„Âÿ„‡ÿë–^__``aa€bƒce ï†ÿþy„Žÿ“™ÿ„|†ÿó¤`\]]^^€_``aa€b„ci®ö†ÿc„‹ÿ——ÿƒNþ…ÿ¾e[€\]]^^€_``aabb†cpÉ…ÿù8ˆ…ÿ™•ÿƒ*ò„ÿý¡ZZ[[€\]]^^__€`aabb‡c±…ÿ扂ÿ›“ÿƒÛ„ÿ õ‡YYZZ[[\\€]^^__€`aabb‡cšû„ÿȉÿœ’ÿƒ¸„ÿísX€YZZ[[\\€]^^__``€abb‡c†ö„ÿ™Š€ÿ‚&(„ÿƒN„ÿùyWXXYY€Z[[\\€]^^__``€abb‡c‘þƒÿþ1Šÿÿ‚øÿÖ„ÿ‚Ô„ÿ’VWWXXYY€Z[[\\]]€^__``aa€b‡c­„ÿ¹‹ÿ‚øÿÓ„ÿƒ^„ÿ°VV€WXXYYZZ€[\\]]€^__``aa€b‡cÊ„ÿBŠÿ‚ø‘ÿÏ„Œÿ‚߃ÿÕVUVV€WXXYYZZ[[€\]]^^€_[H3'>??@GÐ…ÿ½ „…ÿƒÔƒÿwRRSSTTUU€VWWXXYY€Z[QE‰ÿèƒc˜ƒÿ·ˆÿ‚ø‚ÿÚ€<==>>??@IÓ…ÿ¹„„ÿ‚#ƒÿî€R€STTUUVV€WXXYY€ZâŠÿ©D‚clü‚ÿø ‡ÿ‚ø‚ÿÚ;<<€=>>??@JÕ…ÿµ„ƒÿ‚rƒÿ¹QQRR€STTUUVV€WXXYYZElŒÿ$ƒc׃ÿS‡ÿ‚ø‚ÿÚ;;<<==€>??@KØ…ÿ±„‚ÿ‚·ƒÿƒ€QRRSS€TUUVVWW€XYY1ŸŒÿX[‚c¨ƒÿ—‡ÿ‚ø‚ÿÚ:;;<<==€>??@MÚ…ÿ­„ÿ‚Ô‚ÿøUP€QRRSSTT€UVVWW€XY ÓŒÿ‹H‚cyƒÿ´‡ÿ‚ø‚ÿÚ:€;<<==>>€?@MÝ…ÿ¨„€ÿ‚í‚ÿáOPP€QRRSSTT€U VVWWXXYòŒÿª4‚cdü‚ÿ͇ÿ‚ø‚ÿÚ::€;<<==>>€?@OÞ…ÿ¤„ÿ‚ƒÿÏOOPPQQ€RSSTTUU€VWWXVÆŒÿ~!b‚cí‚ÿç‡ÿ‚ø‚ÿÚ9::;;€<==>>€?@Pà…ÿŸ‰ ƒÿ½€OPPQQ€RSSTTUU€VWWV“ŒÿK"bbcÝ‚ÿý†ÿ‚ø‚ÿÚ99::;;€< ==>>??@@Sã…ÿšˆ9ƒÿ«N€OPPQQRR€STTUUVV€WX‹ÿú5€b€c̓ÿ†ÿ‚ø‚ÿà€9::;;<<€=>>??@@Tå…ÿ–ˆSƒÿ˜NN€OPPQQRR€S TTUUVVWW Êÿ~€Ha€bcc¾ƒÿ3†ÿ‚øƒÿ¥99€:;;<<€=>>??@@Wæ…ÿ‘‡TƒÿšMNNOO€PQQRRSS€T UUVVW1$õˆÿÍ€Yaabbcc¾ƒÿ3†ÿ‚ø„ÿ¡99€:;;<<==€>??@@Xé…ÿ‹†>ƒÿ®MMNNOOPP€QRRSSTT€UVVE€Qð†ÿÔ%€``aabbc̓ÿ†ÿ‚æ…ÿ99::€;<<==€>??@@Zê…ÿ†…(ƒÿÀMNNOOPP€QRRSSTT€UVV€½ƒÿþF€`aabbÝ‚ÿü†ÿ‚.ì…ÿš99::€;<<==>>€?@@]ì…ÿ„ƒÿ×LMM€NOOPPQQ€RSSTT€UVO€>€?@@^í…ÿ|ƒù‚ÿëLLMM€NOOPPQQ€RSSTTUUVV5Œ W^__``aabü‚ÿ͇ÿ„4ð…ÿ“99::;;€<==>>??€@`ï…ÿvƒÈ‚ÿýOLLMMNN€OPPQQRR€STTUUVV(ŠE€^__``awƒÿ³‡ÿÿ„7ñ…ÿ99::;;€<==>>??€@cñ…ÿq‚ŒƒÿKLLMMNN€OPPQQRR€STTUUVV? ‡T]]€^__``¦ƒÿ–‡€ÿ„:ó…ÿ‹9€:;;<<€=>>??@@Aeò…ÿlOƒÿ¼K€LMMNNOO€PQQRR€STTUUVVPƒ 3[\\]]^^€_`ÖƒÿQ‡ÿ„=ô„ÿþˆ9€:;;<<==€>??@@Agó„ÿþg€ƒÿôPKLL€MNNOOPP€QRRSS€TUUVVWVH5")=RZ[[€\]]^^__iü‚ÿø ‡‚ÿ„Aö„ÿþ…9€:;;<<==€>??@@Aiõ„ÿþb;ûƒÿ‚KKLL€MNNOOPP€QRRSSTT€UVVWWXX€YZZ[[€\]]^^_–ƒÿ¶ˆƒÿ„D÷„ÿý9::€;<<==>>€?@@Akö„ÿý^8ò„ÿÀJKKLLMM€NOOPPQQ€RSSTT€UVVWWXX€YZZ[[\\€]^^Ôƒÿhˆ„ÿ„Gø„ÿý~9::€;<<==>>€?@@An÷„ÿýó…ÿ•JJKKLLMM€NOOPPQQ€RSSTTUU€VWWXXYY€Z[[\\€]‡„ÿˆ…ÿ„Kù„ÿý{9::;;€<==>>??€@AqøŒÿ™IJJ€KLLMMNN€OPPQQ€RSSTTUU€VWWXXYY€Z[[\\]]܃ÿ̉†ÿ„Nú„ÿüx9::;;€<==>>??€@AtùŠÿœHIIJJ€KLLMMNN€OPPQQRR€STTUUVV€WXXYY€Z[[\\„ÿU‰‡ÿ„Rû„ÿûu9::;;<<€=>>??€@Avúˆÿ €HIIJJKK€LMMNNOO€PQQRR€STTUUVV€WXXYYZZ€[aåƒÿˉˆÿ„Vü„ÿúr€:;;<<==€>??@@AAyû†ÿ¤GGHH€IJJKKLL€MNNOO€PQQRRSS€TUUVVWW€XYYZZ[[ÄÿBЉÿ„Yü„ÿúo€:;;<<==€>??@@AA}û„ÿ§FFGGHH€IJJKKLL€MNNOOPP€QRRSSTT€UVVWW€XYYZZ£„ÿ¹‹Šÿ„]ý„ÿøl::€;<<==>>€?@@AA€ü‚ÿ«E€FGGHHII€JKKLLMM€NOOPP€QRRSSTT€UVVWWXX€Y…üƒÿþ1‹‹ÿ„aþ„ÿ÷j::€;<<==>>€?@@AA‚ý€ÿ®DEE€FGGHHII€JKKLLMM€NOOPPQQ€RSSTTUU€VWWXXYxó„ÿ™ŒŒÿ„eþ„ÿög::;;€<==>>€?@@AA…þÿ²CDDEEFF€GHHIIJJ€KLLMM€NOOPPQQ€RSSTTUU€VWWXŠ÷„ÿÉŒÿ„i…ÿõd::;;€<==>>??€@AAˆ³DC€DEEFF€GHHIIJJ€KLLMMNN€OPPQQRR€STTUU€VW¡þ„ÿçŒÿ„m…ÿób::;;<<€=>>??€@AABBCCDD€EFFGG€HIIUNKK€LMMNN€OPPQQRR€STTUUV^»…ÿú;ÿ„r…ÿòa::;;<<€=>>??@@€ABBCCDD€EFFGGHHIWÞä€KKLL€MNNOO€PQQRRSS€TWšð†ÿh’ÿ„v…ÿ ñ^::;;<<==€>??@@AA€BCCDD€EFFGGHTÜ€ÿÍvKLL€MNNOOPP€QRRSST‡ä‡ÿ‚Ž“ÿ„{…ÿï\:€;<<==€>??@@AA€BCCDDEE€FGSÚƒÿã›ZL€MNNOOPP€QSw®ä‡ÿø]Ž•ÿ„…ÿîZ:€;<<==>>€?@@AABB€CDDEEFFP؆ÿþà·ocVNP`r…—·í‰ÿê;Ž—ÿ„„…ÿìW:€;<<==>>€?@@AABB€CDDEEOÖŽÿúüŽÿÕ!˜ÿ„ˆ…ÿêU:;;€<==>>??€@AABB€CDDMÓ ÿü—™ÿ…Œ…ÿèS:;;€<==>>??€@AABBCCDKÑ ÿ¶*›ÿ…‘…ÿçQ:;;<<€=>>??@@€ABBCJΟÿÒE‘ÿ…—…ÿåN:;;<<==€>??@@€ABFË…ÿÉ[­ö‘ÿø´[‘žÿ„¼…ÿ ÎB::;;<<==€>??@@AABB®…ÿã! T¨ó‹ÿó©W “žÿ„¸…ÿÐB9::€;<<==>>€?@@AABB±…ÿà€B`|˜³Ïëêжœ‚iG•žÿ„µ…ÿÓB899::€;<<==>>€?@@AABCµ…ÿݦžÿ„±…ÿÕC€899::;;€<==>>??€@AABC¸…ÿÛ¤žÿ„­…ÿØC77€899::;;€<==>>??€@AABC»…ÿØ¡Ÿÿ„©…ÿÚD667788€9::;;<<€=>>??€@AABD¾…ÿÕŸŸÿ„¥…ÿÜE5€6778899€:;;<<==€>??@@€ABEÂ…ÿÒœ ÿ„¡…ÿÞF455€6778899€:;;<<==€> ??@@AABBFÄ…ÿÏš ÿ„…ÿáF3445566€78899::€;<<==€> ??@@AABBFÇ…ÿÌ—¡ÿ„˜…ÿâG33€45566€78899::€;<<==>>€?@@AABBHÊ…ÿÈ”£ÿ„”…ÿäH2233€4556677€899::;;€<==>>€?@@AABBIÍ…ÿÅ ‘¤ÿ„…ÿæJ112233€4556677€899::;;€<==>>??€@AABBJÏ…ÿÁ ¤ÿ„‹…ÿèL011€23344€5667788€9::;;€<==>>??€@AABBKÒ…ÿ¾ Ž£ÿ„†…ÿêL/0011€2334455K{||}|?;<<€=>>??@@€ABBLÔ…ÿºŽ¡ÿ„…ÿëN€/001122€3445tˆÿÁ>;<<==€>??@@AA€BMÖ…ÿ¶ŽŸÿ„}…ÿíP..€/001122€344t‰ÿ¾>;<<==€>??@@AA€BNÙ…ÿ²Žÿ„x…ÿîQ--..//€01122€34sŠÿ»=;<<==>>€?@@AABBCPÜ…ÿ®Ž›ÿ„s…ÿ ðT,,--..//€01122334s‹ÿ¸=;<<==>>€?@@AABBCQÞ…ÿªšÿ„o…ÿòU+,,€-..//00€12233sŒÿµ<==>>??€@AABBCRà…ÿ¦˜ÿ„j…ÿóW*++,,--€.//00€1223rÿ²<==>>??€@AABBCTâ…ÿ¢–ÿ„fþ„ÿôY€*++,,--€.//0011€2rƒÿÁÝ…ÿ®;<<€=>>??@@€ABBCUä…ÿ”ÿ„aþ„ÿö[))**€+,,--..€/001122rƒÿpÞ…ÿ«;<<==€>??@@€ABBCXæ…ÿ™’ÿ„]ý„ÿ÷^(())**€+,,--..€/00112rƒÿpá…ÿ¨;<<==€>??@@AA€BCYè…ÿ”‘ÿ„Yü„ÿø`'€())**++€,--..€/0011rƒÿp€"ã…ÿ¤;<<==>>€?@@AA€BC[ê…ÿŒÿ„Uü„ÿùb&''€())**++€,--..//€01qƒÿp$å…ÿ ;<<==>>€? @@AABBCC]ë…ÿŠŒŽÿ„Qû„ÿúe%&&''((€)**++,,€-..//€0qƒÿp‚'ç…ÿ€<==>>€? @@AABBCC_í…ÿ…‹ŽÿƒMú„ÿûh%%€&''((€)**++,,--€.//00qƒÿpƒ*é…ÿš€<==>>??€@AABBCCaî…ÿ€ŠŽÿ‚Jù„ÿük$$%%€&''(())€*++,,--€.//0pƒÿp„,ë…ÿ–<<€=>>??€@AABBCCdð…ÿ{Šÿ‚ñ„ÿ ün##$$%%&&€'(())**€+,,--€.//pƒÿp…/í…ÿ“<<==€>??@@€ABBCCfñ…ÿ*‰ÿ‚øƒÿýq"##€$%%&&€'(())*_âää…åíƒÿp†2ï…ÿ<<==€>??@@AA€BCChó„ÿ0‰ÿ‚ø‚ÿýt€"##€$%%&&''€()[öÿp‡5ð…ÿŒ<<==€>??@@AA€BCCjôƒÿ0‰ÿ‚ø‚ÿÖ‚"##€$ %%&&''((Xôÿpˆ8ò„ÿþ‰<<==>>€?@@AABB€C³ƒÿ0‰ÿ‚ø‚ÿÕƒ"##$$€%&&''Vó‘ÿp‰<ô„ÿþ†<<==>>€?@@AABBCC²ƒÿ0‰ÿ‚ø‚ÿÕ„"##$$€%&&Rñ’ÿpŠ?õ„ÿ ýƒ<<==>>??€@AABBC²ƒÿ0‰ÿ‚ø‚ÿÕ„"€#$$%%&Oð“ÿp‹Bö„ÿ ý€<<==>>??€@AABB²ƒÿ0‰ÿ‚ø‚ÿÕ…"€#$$%Kï”ÿpŒFø„ÿý}<€=>>??@@€AB²ƒÿ0‰ÿ‚ø‚ÿÕ†"€#$Hí…ÿ‚ŒIù„ÿüz<==€>??@@AAB²ƒÿ0‰ÿ‚ø‚ÿÕ‡"##Eë…ÿ†ŸMú„ÿûw<==€>??@@AA²ƒÿ0‰ÿ‚ø‚ÿÕˆ"Cé…ÿ‹¡Qû„ÿút<==>>€?@@A²ƒÿ0‰ÿ‚ø‚ÿÕ‡"?ç…ÿ£Uü„ÿúr<==>>€?@@²ƒÿ0‰ÿ‚ø‚ÿÛ†=Må…ÿ”¥Xü„ÿøwTUVVWW»ƒÿ0‰ÿ‚ø•ÿ˜¦\ý•ÿ0‰Œÿƒø”ÿ¨aþ”ÿ0‰Œÿƒø“ÿ¡ªeþ“ÿ0‰Œÿƒø’ÿ¥¬i“ÿ0‰Œÿƒø‘ÿ©®m’ÿ0‰Œÿƒøÿ­°r‘ÿ0‰ŒÿƒÁÈž²rÈ%‰Œÿ¸‚ÿ®Œÿ°‹ÿ­Œÿ§•ÿ¬Œÿ¦—ÿ«Œÿ¥™ÿ©ÿ¤›ÿ¨ÿ£ÿ§ÿ¢Ÿÿ¥Žÿ¡¡ÿ£ÿ £ÿ¡ÿÿÿÉÿéÿ•âÿ›ÝÿŸÚÿ¡×ÿ‰1Sn‰¤ÀÛÙ¾£ˆmR/‰ÓÿˆF—å‹ÿã“BˆÐÿ†O¥ð‘ÿí H‡Îÿ†>Ê—ÿÁ4†Ìÿ…(±šÿþ¤…Éÿ…—ûÿ÷‡ „Èÿ„%Ù¡ÿË„Æÿ„Bî‰ÿ ùßÐÈ¿·®¯¸ÁÊÒâú‰ÿä2„Äÿ„fû‡ÿ÷Û¿¨©©€ª«­ÃÞø‡ÿõS„Âÿ„‡ÿôŧ¦¦§§€¨©©€ªƒ«¬Ìö†ÿþy„Žÿ“™ÿ„|†ÿùͦ¥¥€¦§§€¨©©ªª…«®Ôú†ÿc„‹ÿ——ÿƒNþ…ÿÛ©€¤¥¥€¦§§€¨©©ªª†«²â…ÿù8ˆ…ÿ™•ÿƒ*ò„ÿþÊ¢££€¤¥¥¦¦€§¨¨€©ªª‡«Õ…ÿ扂ÿ›“ÿƒÛ„ÿù»€¢££¤¤€¥¦¦€§¨¨€©ªª‡«Éý„ÿȉÿœ’ÿƒ¸„ÿõ¯¡¡€¢££¤¤€¥¦¦€§¨¨©©€ª‡«¾ú„ÿ™Š€ÿ‚&(„ÿƒN„ÿü³  ¡¡¢¢€£¤¤€¥¦¦€§¨¨©©€ª‡«Äþƒÿþ1Šÿÿ‚øÿÖ„ÿ‚Ô„ÿÁŸ  €¡¢¢€£¤¤€¥¦¦§§€¨©©€ª‡«Ó„ÿ¹‹ÿ‚øÿÓ„ÿƒ^„ÿÒžŸŸ  €¡¢¢€£¤¤¥¥€¦§§€¨©©ªªˆ«â„ÿBŠÿ‚ø‘ÿÏ„Œÿ‚߃ÿ矞€Ÿ  €¡¢¢££€¤¥¥€¦ §§¨Ÿ}Y6Chª…«®òƒÿˉÿ‚ø’ÿÌ„‹ÿ‚n„ÿ±žž€Ÿ  ¡¡€¢££€¤¥¥€¦‘)€P¨„«Æ„ÿU‰ÿ‚ø“ÿÈ„‰ÿ‚ãƒÿÞ€žž€Ÿ  ¡¡€¢££€¤¥¥¦k |°äüÔ¡e$”„«îƒÿ̉ÿ‚ø”ÿÅ „ˆÿ‚5ƒÿþ«œ€žžŸŸ€ ¡¡€¢ ££¤¤¥£=Né„ÿÉ& tƒ«Á„ÿˆÿ‚ø‚ÿù„áââî…ÿÁ „‡ÿ‚„ƒÿØ›œœ€žŸŸ€ ¡¡¢¢€£¤¤]ˆ‡ÿõI ˜ƒ«éƒÿiˆÿ‚ø‚ÿ膇‡€ˆ‰‰Šâ…ÿ½ „…ÿƒÔƒÿ°››œœ€žŸŸ  €¡¢¢€£’E‰ÿè6ƒ«Èƒÿ·ˆÿ‚ø‚ÿ膆‡‡ˆˆ€‰Šä…ÿ¹„„ÿ‚#ƒÿõ𛛀œ€žŸŸ  €¡¢¢££3âŠÿ©v‚«°ý‚ÿø ‡ÿ‚ø‚ÿ膆€‡ˆˆ€‰Šæ…ÿµ„ƒÿ‚rƒÿ×šš››€œžž€Ÿ  €¡¢¢}lŒÿ$ƒ«éƒÿS‡ÿ‚ø‚ÿè…††€‡ˆˆ€‰Š‘ç…ÿ±„‚ÿ‚·ƒÿ·€š››œœ€žž€Ÿ  €¡¢YŸŒÿX‚«Ðƒÿ—‡ÿ‚ø‚ÿè……††€‡ˆˆ‰‰ŠŠ’é…ÿ­„ÿ‚Ô‚ÿûœ™€š››œœ€žž€Ÿ  ¡¡¢:ÓŒÿ‹|‚«·ƒÿ´‡ÿ‚ø‚ÿ者††‡‡€ˆ‰‰ŠŠ’ê…ÿ¨„€ÿ‚í‚ÿšš€›œœ€žžŸŸ€ ¡¡òŒÿª[ƒ«ý‚ÿ͇ÿ‚ø‚ÿè„€…††‡‡€ˆ‰‰ŠŠ“ë…ÿ¤„ÿ‚ƒÿ㘀™šš€›œœ€žŸŸ€ ÆŒÿ~:ª‚«õ‚ÿç‡ÿ‚ø‚ÿè„„……€†‡‡€ˆ‰‰ŠŠ•ì…ÿŸ‰ ƒÿؘ˜€™šš€›œœ€žŸŸ  “ŒÿK<ªª«í‚ÿý†ÿ‚ø‚ÿ耄……€†‡‡€ˆ‰‰ŠŠ–î…ÿšˆ9ƒÿΗ˜˜€™šš››€œ€žŸŸ  X‹ÿú\€ª€«äƒÿ†ÿ‚ø‚ÿ샀„……††€‡ˆˆ€‰ŠŠ—ï…ÿ–ˆSƒÿ×—˜˜™™€š››€œžž€Ÿ <Êÿ~€}©ªª€«Üƒÿ3†ÿ‚øƒÿǃ€„……††€‡ˆˆ€‰ŠŠ˜ð…ÿ‘‡Tƒÿ×—€˜™™€š››œœ€žž€ŸZ$õˆÿÍ€œ©©ªª««Üƒÿ3†ÿ‚ø„ÿŃ„„€…††€‡ˆˆ€‰ŠŠ™ñ…ÿ‹†>ƒÿÏ–——€˜™™€š››œœ€žžŸŸ~€Qð†ÿÔ%€¨€©ªª«äƒÿ†ÿ‚æ…ÿƒ„„€…††€‡ˆˆ‰‰€Ššò…ÿ†…(ƒÿÜ––——€˜™™šš€›œœ€žžŸŸ9€½ƒÿþz¨¨€©ªªí‚ÿü†ÿ‚.ì…ÿÀƒ„„€…††‡‡€ˆ‰‰€Šœó…ÿ„ƒÿ瀖——˜˜€™šš€›œœ€žŸ’ €Ê—ÿÁ4†Ìÿ…(±šÿþ¤…Éÿ…—ûÿ÷‡ „Èÿ„%Ù¡ÿË„Æÿ„Bî‰ÿ ò·”€kWCEYm‚–»ô‰ÿä2„Äÿ„fû‡ÿì®n<ƒ9ƒ:?s³ð‡ÿõS„Âÿ„‡ÿæ~:€8„9…:<†ë†ÿþy„Žÿ“™ÿ„|†ÿñ<ƒ8ƒ9‡:B™ô†ÿc„‹ÿ——ÿƒNþ…ÿ±D77„8ƒ9ˆ:J»…ÿù8ˆ…ÿ™•ÿƒ*ò„ÿý‚7„8ƒ9‰:œ…ÿ扂ÿ›“ÿƒÛ„ÿón6ƒ7„8ƒ9‰:€ú„ÿȉÿœ’ÿƒ¸„ÿéV€6ƒ7„8ƒ9‰:gô„ÿ™Š€ÿ‚&(„ÿƒN„ÿø^‚6ƒ7ƒ8„9‰:uýƒÿþ1Šÿÿ‚øÿÖ„ÿ‚Ô„ÿ|ƒ6„7ƒ8„9‰:—„ÿ¹‹ÿ‚øÿÓ„ÿƒ^„ÿ¢55ƒ6„7ƒ8ƒ9Š:¼„ÿBŠÿ‚ø‘ÿÏ„Œÿ‚߃ÿÍ7€5ƒ6ƒ7„8996*#0†:Bâƒÿˉÿ‚ø’ÿÌ„‹ÿ‚nƒÿþ^‚5ƒ6ƒ7ƒ81€€9„:z„ÿU‰ÿ‚ø“ÿÈ„‰ÿ‚ãƒÿ¼ƒ5„6ƒ78 $|°äüÔ¡e 2„:Öƒÿ̉ÿ‚ø”ÿÅ „ˆÿ‚5ƒÿýS4ƒ5„6ƒ787Né„ÿÉ&'ƒ:n„ÿˆÿ‚ø‚ÿõ…ÊËá…ÿÁ „‡ÿ‚„ƒÿ¯€4ƒ5„6ƒ7 ˆ‡ÿõI4ƒ:ʃÿiˆÿ‚ø‚ÿ×,,„-6Ë…ÿ½ „…ÿƒÔƒÿ_4ƒ5ƒ6‚71E‰ÿèƒ:}ƒÿ·ˆÿ‚ø‚ÿ×€,„-8Ï…ÿ¹„„ÿ‚#ƒÿë5‚4ƒ5ƒ67âŠÿ©(‚:Fû‚ÿø ‡ÿ‚ø‚ÿ×,„-9Ñ…ÿµ„ƒÿ‚rƒÿ­ƒ4„5ƒ677*lŒÿ$ƒ:̃ÿS‡ÿ‚ø‚ÿׂ,ƒ-.:Ô…ÿ±„‚ÿ‚·ƒÿn3ƒ4„5ƒ67ŸŒÿX5‚:‘ƒÿ—‡ÿ‚ø‚ÿ׃,ƒ-.<×…ÿ­„ÿ‚Ô‚ÿ÷933ƒ4ƒ5„6ÓŒÿ‹*‚:Vƒÿ´‡ÿ‚ø‚ÿׄ,ƒ-.=Ù…ÿ¨„€ÿ‚í‚ÿÝ3ƒ4ƒ5ƒ6 òŒÿª‚:;û‚ÿ͇ÿ‚ø‚ÿ×+„,ƒ-.>Û…ÿ¤„ÿ‚ƒÿÈ3„4ƒ565ÆŒÿ~ƒ:é‚ÿç‡ÿ‚ø‚ÿ×++ƒ,„-.@Ý…ÿŸ‰ ƒÿ³‚3„4ƒ5€65“ŒÿKƒ:Õ‚ÿý†ÿ‚ø‚ÿ×€+ƒ,„-.Bà…ÿšˆ9ƒÿžƒ3„4ƒ5€6 X‹ÿú9‚:Àƒÿ†ÿ‚ø‚ÿÞ+ƒ,„-.Dâ…ÿ–ˆSƒÿ‰2ƒ3ƒ4„566Êÿ~€*9‚:¬ƒÿ3†ÿ‚øƒÿŸ+ƒ,„-.Fä…ÿ‘‡TƒÿŠ22ƒ3ƒ4„56$õˆÿÍ€599:¬ƒÿ3†ÿ‚ø„ÿ›+ƒ,ƒ-..Gæ…ÿ‹†>ƒÿ¢22„3ƒ4„5+€Qð†ÿÔ%€ 9€:Àƒÿ†ÿ‚æ…ÿ—€+„,ƒ-..Jè…ÿ†…(ƒÿº€2„3ƒ4ƒ56€½ƒÿþ*‚9::Õ‚ÿü†ÿ‚.ì…ÿ“€+„,ƒ-..Lê…ÿ„ƒÿÑ2ƒ3„4ƒ52€51„2ƒ3ƒ4ƒ5?®…ÿú;ÿ„r…ÿñU+ƒ,„-ƒ.ƒ/„01@Úàn1„2ƒ3ƒ4€57‡í†ÿh’ÿ„v…ÿðR+ƒ,ƒ-„.ƒ/ƒ0>×€ÿÆbƒ2„3ƒ45q߇ÿ‚Ž“ÿ„{…ÿîP„,ƒ-„.ƒ/0=ÕƒÿߎB2„3445_Ÿß‡ÿø]Ž•ÿ„…ÿíM„,ƒ-ƒ.„/00;Ó†ÿýܬ|YJ<35F[q†«ê‰ÿê;Ž—ÿ„„…ÿêK„,ƒ-ƒ.„/;ÑŽÿùüŽÿÕ!˜ÿ„ˆ…ÿéHƒ,„-ƒ.‚/8Πÿü—™ÿ…Œ…ÿçFƒ,„-ƒ.€/7Ì ÿ¶*›ÿ…‘…ÿåDƒ,„-ƒ./6ÈŸÿÒE‘ÿ…—…ÿãAƒ,ƒ-ƒ.2Æ…ÿÉ[­ö‘ÿø´[‘žÿ„¼…ÿË3+ƒ,ƒ-ƒ.¦…ÿã! T¨ó‹ÿó©W “žÿ„¸…ÿÍ4++„,ƒ-ƒ.©…ÿà€B`|˜³Ïëêжœ‚iG•žÿ„µ…ÿÐ6+„,ƒ-‚./­…ÿݦžÿ„±…ÿÓ7ƒ+ƒ,„-‚./±…ÿÛ¤žÿ„­…ÿÕ7**ƒ+ƒ,„-‚.0´…ÿØ¡Ÿÿ„©…ÿØ9€*„+ƒ,„-‚.0·…ÿÕŸŸÿ„¥…ÿÚ;‚*„+ƒ,„-‚.1»…ÿÒœ ÿ„¡…ÿÝ;)ƒ*„+ƒ,ƒ-ƒ.2¾…ÿÏš ÿ„…ÿß=€)ƒ*ƒ+„,ƒ-ƒ.3Á…ÿÌ—¡ÿ„˜…ÿá?)„*ƒ+„,ƒ-ƒ.5Ä…ÿÈ”£ÿ„”…ÿã@ƒ)„*ƒ+„,ƒ-ƒ.6È…ÿÅ ‘¤ÿ„…ÿåB((ƒ)„*ƒ+ƒ,„-ƒ.6Ê…ÿÁ ¤ÿ„‹…ÿçE(ƒ)ƒ*„+ƒ,„-ƒ.8Í…ÿ¾ Ž£ÿ„†…ÿéF‚(„)**A‡sr0,„-ƒ.9Ð…ÿºŽ¡ÿ„…ÿëH'ƒ(„)*lˆÿ½/,ƒ-„.:Ò…ÿ¶ŽŸÿ„}…ÿìK€'ƒ(„)l‰ÿ¹/,ƒ-„.;Õ…ÿ²Žÿ„x…ÿîM‚'ƒ(ƒ)kŠÿ¶.,ƒ-ƒ./=Ø…ÿ®Ž›ÿ„s…ÿðO„'ƒ(‚)k‹ÿ³.,ƒ-ƒ./>Ú…ÿªšÿ„o…ÿñQ&&ƒ'„()kŒÿ°-€,„-ƒ./@Ý…ÿ¦˜ÿ„j…ÿóT&ƒ'„(€)kÿ¬-€,„-ƒ./BÞ…ÿ¢–ÿ„fþ„ÿôWƒ&ƒ'„())kƒÿÁÝ…ÿ¨,„-ƒ./Cá…ÿ”ÿ„aþ„ÿöX%„&ƒ'ƒ())kƒÿpÞ…ÿ¥,ƒ-„./Fã…ÿ™’ÿ„]ý„ÿö\€%ƒ&„'ƒ()kƒÿpá…ÿ¡,ƒ-„./Gå…ÿ”‘ÿ„Yü„ÿø^‚%ƒ&„'ƒ(kƒÿp€"ã…ÿ,ƒ-„./Iç…ÿŒÿ„Uü„ÿùa„%ƒ&„'‚(kƒÿp$å…ÿ™,ƒ-ƒ.//Lé…ÿŠŒŽÿ„Qû„ÿúd$$„%ƒ&„'(kƒÿp‚'ç…ÿ–€,„-ƒ.//Në…ÿ…‹ŽÿƒMú„ÿûh$„%ƒ&ƒ'(kƒÿpƒ*é…ÿ’€,„-ƒ.//Pì…ÿ€ŠŽÿ‚Jù„ÿükƒ$ƒ%„&ƒ'€(kƒÿp„,ë…ÿŽ€,„-ƒ.//Rî…ÿ{Šÿ‚ñ„ÿün#„$ƒ%„&ƒ'((kƒÿp…/í…ÿŠ€,„-ƒ.//Uð…ÿ*‰ÿ‚øƒÿýr€#„$ƒ%&&\á‡äìƒÿp†2ï…ÿ‡€,ƒ-„.//Wñ„ÿ0‰ÿ‚ø‚ÿýu‚#„$ƒ%Yöÿp‡5ð…ÿƒ€,ƒ-„.//Yóƒÿ0‰ÿ‚ø‚ÿÖ„#ƒ$‚%Vôÿpˆ8ò„ÿþ€€,ƒ-ƒ.€/«ƒÿ0‰ÿ‚ø‚ÿÖ…#ƒ$€%Só‘ÿp‰<ô„ÿþ|€,ƒ-ƒ.//ªƒÿ0‰ÿ‚ø‚ÿÖ†#ƒ$%Qñ’ÿpŠ?õ„ÿýy,,„-ƒ./ªƒÿ0‰ÿ‚ø‚ÿÖ‡#‚$Mð“ÿp‹Bö„ÿýv,,„-ƒ.ªƒÿ0‰ÿ‚ø‚ÿÖˆ#€$Kï”ÿpŒFø„ÿýr,,„-‚.ªƒÿ0‰ÿ‚ø‚ÿÖˆ#$$Hí…ÿ‚ŒIù„ÿüo,,ƒ-‚.ªƒÿ0‰ÿ‚ø‚ÿÖ‰#Eë…ÿ†ŸMú„ÿûl,,ƒ-.ªƒÿ0‰ÿ‚ø‚ÿÖˆ#Cé…ÿ‹¡Qû„ÿúh,,ƒ-€.ªƒÿ0‰ÿ‚ø‚ÿÖ‡#@ç…ÿ£Uü„ÿùf,,ƒ-..ªƒÿ0‰ÿ‚ø‚ÿÛ†>Nå…ÿ”¥Xü„ÿølF…G´ƒÿ0‰ÿ‚ø•ÿ˜¦\ý•ÿ0‰Œÿƒø”ÿ¨aþ”ÿ0‰Œÿƒø“ÿ¡ªeþ“ÿ0‰Œÿƒø’ÿ¥¬i“ÿ0‰Œÿƒø‘ÿ©®m’ÿ0‰Œÿƒøÿ­°r‘ÿ0‰ŒÿƒÁÈž²rÈ%‰Œÿ¸‚ÿ®Œÿ°‹ÿ­Œÿ§•ÿ¬Œÿ¦—ÿ«Œÿ¥™ÿ©ÿ¤›ÿ¨ÿ£ÿ§ÿ¢Ÿÿ¥Žÿ¡¡ÿ£ÿ £ÿ¡ÿt8mk@'JdšµÐëéδ™~cI%;ŒÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙˆ7I™èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä•DeçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäaJÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐE1½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·, Ÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü™ ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ9èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä2]øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõQˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþx“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY=úÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö1êÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá7888888888888888888* ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂTÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó› ¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ"Aÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ8>þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá Ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐ ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØoÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà.$ ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~0$ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿκÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁ=. ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöK7& ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇ ^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?-ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà °ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹E2! ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíK7% ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼Tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿr<)ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£@,ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸C/ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯ÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊE2  ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚH4! ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëI5# ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûK7$ ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœ3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY8% ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿk9& ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿl:' ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[;( ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúP<) ÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëP<) ŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛP<) âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌP<) :ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»O;( @õÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨N:' C÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{L8% Gøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿí\I5# Kùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾YF3! NúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVC/Rûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷eQ>+VüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ^L9' ZýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšXF3" _ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèdR?-cþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš[J8& gþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãdSB0  lÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’[J9(pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ`Q@/  uÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆVF6&zÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀZK;+ ~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ`O?/! ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïlQB3$ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúRC5' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™RD6( ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµQC5( –ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ¥OB5( šÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùŒL?3& ŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïvH<0$ ¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàcD8-" ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¸S?4) ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑkD9/$ µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåƒH=3)  ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòL@6,# ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¾L@7.& ªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¾ƒRG?7.& §ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüïàϾª”{VLD=5-% £ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè‡zumdZOE;3+$ Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæri^QD8-$ ›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãygZL=/$ —ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàp[L<-! “ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜfQA2$ ŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ`J;, ŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕZF7) …ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒXD6' ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏUC4& |ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌSB3% xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊQA2$ tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆO?1# oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃN>0"kÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿M=.!gþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼K;, cþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸H9* _ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´E5&Výÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿª@/  ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþt8& “ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×?,ËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûI1 îÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿc4" ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿf6$ ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿh8% ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿi8% ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´£üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿi9& ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´¤üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿi9& ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³~¤üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj9& ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³}{z¤ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj:' ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£yvtr ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj:' ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒsojgfœýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿj:' ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËpjc]YWY™þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿk;( ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåte]UMHFIO˜þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿk;( ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë¸g^WNE<647?I˜þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿk<) ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍyusqonmmllkjjdXVRMF=4,&$'/:G›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿk=)ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎg^XTQOMLKKJJIHGEC?:4,$!,8Gžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿl=*ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏbVNGA=;9877654421/,(#+8F ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm>*ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑ_QF<4.*(&%$$##"!   +8G¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm>+ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ^NA6+#  +9G¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm?+ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕ_M?2'  +9Gªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm?+ ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×`M?1$  +9H®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿl>+ ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙbN?1$  ,:H±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûT<)™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜePA2$  ,:H´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛK9' -íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝgRC4&   ,9G¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýzD3" ZëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏfRE6(  +8D©ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù”J;+  ">¡ÒéëëëìììììììììììììììæÇ”VNC7* )4?o¹ÞëëììììììììììììëëëëëÞ¶lG7-#  ")/369:;;;;;;;;;;::::9862,%  &,269:<<<;;;::9988776530,&  "$&'((((((((('''''&%$!   #&'())(('''&&%%$$#"!       ic08÷Ÿ jP ‡ ftypjp2 jp2 Ojp2hihdrcolr"cdefjp2cÿOÿQ2ÿd#Creator: JasPer Version 1.900.1ÿR ÿ\@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ]@@HHPHHPHHPHHPHHPÿ ö^ÿ“ß‚H y—<2ì¾5yŸöªæÑ»4Úæ+è×ò±ZÇ­O\PÎÄ7EVhÔöÜYhâÌ)§ö¥¶€ f6ñK@_îöŽ,µ’­Ïß‚P yÏÙ0?»·Ë¯tØâãäO#RÐ󆱪Ëg³(à3fùY’0.rQeTŠ Þ«$/ då³ð:NZUUíZ¶B˜Žhß‚` y—<2^\µ§ù’ŠO—D}vÁÒ¬d\rXÂÕAÈ£Ô®SyƒÑ¢ëïS%õübÂ…fÉ-ý:Ö0¿ß‚PRÀ¼%&>¯j’ÈõüwW¦£ïð °m(Þ¨d•Înbð‘f¦R°tï¿'üQŸ8ÅøqVžvkñi}ôÍüp ‡ßšeù§_²˜2=ß/~Âþò{?C†0Î@·0Òº€*×߀£?Yh ÇB©aHU­LX;ª!][ûƒ—&ï\Íï ÆRñY§½ºaŸAt©0z¡Wgî§«uÉHù"gGÆT)Ë(q5Ï¥ _¯M²y:Ïæaçu¯³ªCH6o‹ÏøiA¬T¨¬eŽÚæq$žùS$<èògåžÁÊyÄ´·)ê) A‰UáæášØÚ°.íÌý{%]^ÀC8Ýjn@ p ê+yËû ?V¡ìb·¹’€<²Ç6iã´‘ùßšuù¦ÏÍP70F>UÔºTTxÌAâºÖº9ƒ¼„›‘ s¸ ¹ß\3árÖ©‹nYÖÁT“=‘³úÀãn_TNjaCú,Ö )8‡3?C†qÑð»ì¾š\*>[=ë»q4cxÊ}ÒÌpöK›]û¿Oúm•u¡Á•ÉÚ '°uHvCÔUFÿHÃ"9àla3îK“>BÃ2ñÚy@jl5°Á öVæ&Pƒê ô˜Š`3®Ú•º¬²Aªp^‚`e“£åÄnïSëííÉë\R¾OÂ6ùd‡+â±ç™ö†ØÊßšmù¦ß²˜ ÿMR£e9Ò†0OO\5,§³H.ÉZ¦Añƒ‡€+hŒÓïãÔ¼!ßB‰üºÊ4µÂ5«©´56†|8BŒÆFy ’@ÄÁ ³At©0z¡Wgî§«o¼ìE$5¤— N.}¼S\Èi2- u®¸ÐRòN! ¤¤)xP.)KŒÌcÀ\6u‰¥³” cšiƒÕIaÜä_åž±½nS#Áq’äoíÓ9v½ # Þj’­˜Räärò2ò&z;u­¾ë&ëd d#¸+£ßk n¾îµÄ …†!–±7Æó©¦²enÆßš ügæ†4ï“PªÆêñ3[úÈÞd­¤¼µZÍ ‹ºÝâx7°iäa­?‹›©Lx›ž³*°§aÙ¾vcoíñÝpfË!…Ï,™ °Q ½ÖfžŒ31¾ÑSç3yXG±Xñ¦¾ô;»£jµ ¯|á ‹#Rï ±V²•¾èÏNWkè7sIFÃóÓJù[3 ÿLx$$%8RtZ¥!ð"x¶·©tú’%¸%WÜF5¹Õš Är™¤æ§ßßž€ßžÏÏCië³üCêôFþ#*5}ÉO“q$Fa4÷_—Eo×È,Ñ)²c„l· 5,{vÂåu“ɗ߬ÃRõNàýÎq­§\b¬…èNٜ˽»È±1gã‰ÑÌå º›JûƒsÎdÙZr{°Ÿ²lÒ[‘ÒRñ±b¯¼ó²Ø ÔÄ p5bÞÃþDá¡çàbÕ=]™‘nÞ@aFt="/ÆÁOúêY±¿Ü‡äD ·BÆÂ@>ÞµØ:,ŠUÕüùŒJÞŽö ˆ¥4žh‹ü¤Œæß!;ã;_íAAç Agô?nˆŒ;ZK]ŒfEô7YH@>¿Ÿ¾ÖÁwþֵğ#[š.ŠQCÇÛUjÑ™@yÚ%ïÝ‘zy0ÉwÄÒSý°°J$`‰¤ü2ÁÐì‚ Û!´Þ.Ÿ ˆ)G×6ù  ãœ5z´ô¥I-G„ö)ïE£[ª²°¡Ñ©Š.h‘.‡bÆò”¿ñ÷0§·Ûìßô?$¸Þ›8Aû§L]9l\…·P‹|ÙËoá4ÓÑÜ(àÊ–8¤r[ɧ ¤èÔÞ•AÝV© Údærûdh³yÉXì;!hObÖ ið• ÀÝ d£Àâ´ôÀxÚ+k버º¢;ŒŽdH1EI¯LabRµ"§[Óâ)Ìf™8Æ·HÓ)ì¬Êüö‘ö8»€Žbþe+Š3N[ñ­Kà—J¬§KÅÄÿéU oJ†ý|¬Ô†<ë|›"5´—á6$SÞ<›[üõl„‹ÐûYdþG© ‘YöÕB9wvªö¿mW—ª=9;ÈÉPJ Ï#b½Ì®I‹Þ|ŠŽcKÑŒ­x¬¼Á¶·Å¨Ô?ÉïzŠzDToÆ7ÉÑ«³Ò]¨]§m’þóV€«Ä9 CITe¥q¢ú¶Mü¦3“ |AªÐomMÛ‰[f,ÍØõXff¨mU¦S÷܉š^ z—¼Éz*ûvÉlZ eÆ}­B ¢§Y³ùÚ‡Q‚×HVâtðLð&]ßû~z?= iëЬ]ÁÈ}y°­½j¢0¨õ~/ë5òz ‹mFVb¦6&U/ÁÀ=È5‘ðFa8 †M”¡ÅXc+­XÛÐmÁiÂþaD‡ K¡Ä@Üý/€8§#ÕÒvu…§Âr4‘~Ú!–…ß–²ã"t[]´ù§Êþ)kxÆS¶†Ÿ«ÈÍ5oôOÜÒ<’ÔsÔÒ‹ˆ»\“².Ð 7ŽFm“ïÄ*b+ Fô]·™ÀŽëUdþµ#ˆ¹u|Û÷ìX/ëbg0\ÐÞaf¯˜áç0­Šç·©}¨V{ê¥>ÕääØÄ6áä À <(¬¸ ]_ ù¸Ëlçp1O=ŒÿgŸ½zjX<}>)ßÏ™éÊ<=ò ê>tÌæ`Ò("èq´Ã/;®éöüúÕÝp5™­ ßTÑ{«v4Î/ÓjYH¦%ä² `jI©Ð}cõZäFH·wW¾Æ÷©,U´yAÑócŠ7Â-F¸’‘"+5²Vî®§S™¡F\ªómmϱ_‡m&Rú^Q§o¿ã»mïÆ>G§@º©ÀV(ðöìK¡ceÖ2ÔѼ¢BËÙ WÅÆœóǃTÖû¾ ÌfȦf²wÂUŒz= Õ³Gµóu¼1{PªÖ¤†~ ;ªÑ.o^ÿèpÄøç}ΰ7»ïS+\lb™íÊŸ/ š¯Ðé,9‹{ßœì¿ßÿ?=Ÿž†ië³üC°fY'¡(þýr8^+µ‹m¾ïùŽ•( ¿JezÌl¤YEê½F)ÔÄÑWà‡±·¾n‰Ø¸LÕÞv…,:˱¥¢ØF;Pšeu-%Ö”¿±HÃ';2ÿ^ƒ/ß¡©¥‹É˜Qi"¸üþDL~[9ãrµûZ/J…j]íô6PTíÍÚä@¡§éô¥Œòö¨ÉŒó?¾Ý4[9¨ÇÁ7Ö¼ŽDN\-ÔÔøjlÈpÀ§u–·¨—z­rØ=-© ( ,ªÙß‚· ûoï ”qØ´ 1.ÃRM_¦\±…ûtðK§2ÓKtWÞÄ–Û†Oƒ.Ãäµüa1Å,¥}9ã ¼¸}•›{N³îvù&h[_ÂHJwFØ2§zg_o"•ÈyÊ íñ577¬Ô{‹i¸\JÇiz„VíQÝ£@9ák­3”ï!“³òÏR[ž/Ý5\Ÿ)ì¬Êüö‘ö8»€Žbþ®ÊqF9Ác 5©k€6ؽÃ[ÎÒ7­ÉÈ&Ô:xU_›Ù×!Äüø¶(–jS$‰Åâf ´ ìI'N“þ!¢7#†^½ý?¿’6©[nʉLÙL®»áv›±`¨RíH/*GdH@Á ‘~ÔU!ïá'ñqo¡J&—þ}ä#jóݤ}QÆäò©‡p:2Ü…±‡1SîAÑ—¯÷bb!E,·U‰ ש,ë9ЫF*±øþMÈ å(1/•2ÐÌŠQÕ8 ³ßA-Õ; S|¢‡ü~¯žOû^¹¨Puøö€hPæç‘­ì‘À)\òøS‰Å›7†+ÿæ‰Ï¿:Ž~tèXFÝ™vFñ¸» X)¦‹8”ó˜Dâ”ÇpºÉ\1[óaÆQ-£»¦(eÝY1TyÞ!Œ\R|*ÖÚ~˜_o6àʦ ‹Ó²õâsncaØK‡³–ÌHô ømmzæhCR’îÝÍàT!ÔhÂ%½3õQÜð§Ô°Ñ›Îßµ Oò+jìVŠ ïôÏÕÄtο¹Š’5}owXkž«™ð¹n+›é•I”ÌzXÐËg´h¤,m ¬¼ƒÜª(‰h•- ÖœPubÕ‚¬bõЕš5AKH H¦é¿kÜè BùÕ”´ô%‘Ðlüœ$ºyæëD‚Cò)uvóË:ù؃ÙTÖ ïIÎÝÈìŠá¬)[#<9~ãn~1 Í%¯ÎR×}ðþ•ܱåW«¦}ð¡y“†7GX„³.½s):{浈Àˆb}ç NœÝ$š<ßTg­.ê‰Ö ØYÇwlwÝ¿&à >/8;ðBŽ/J^HȦIJð3ƒBUHçcÞù¼>2°gJw§RØ&×ü„Ky^M=Œ uËá]ðÒâ£å³ŸpÝQŽð¿7¶ùî®g;hÏ„þm˜uÌvÏä#±ÓóŠÀ·Q3MN5š_ /®(Ø1U½2`Öþ¦yf°ÙKΤÆj(›7Ö´è¥øð&jµŠýwé„v¡Þ•c–¹ÝmuŠ—Ü}XÔwc-Låû&X¯³ÖÂóx¨+ÎXÍØ$vÚBU·ŒþÑ5ñý8(K|ðfàSœp`éÆ*š[#á±Êä5X,XWÆX¸ØÁF•È'µ†»ál©»œ%+vù²'ö5FL•ÁúÈïÁ]ž¾†I8öæ'¥Áë †vN «c>¡*íIŸúßì[>GZ–g¶ †‡E|Zè¢L¼t±½ÿì?ÎÚçk†ŒK ‰‚R|¦¤”ÊÛ[öÊ(‰Lvì4·«5‡Ö$Áù3š¸’MAög$èxBû}í1ü·4.±ß Ù Mi¹áu+**·wU5ݵ!Ì(褎â$9ÜS;Qz[bý°JDJí‡-Ym@:BøÁÂ4ãx ÞY›Ïr°Š;p ‚„3© Ò!KÎJ›9ÅÄ6^ñØXœ…x›,Ï^á¸N¹Xª„CpPâËÕÿs9T€do3ûg¼¯ŸÄ¯¦(ÝbæiïÁÈ \Ê›µDFuû’ÇëiB,nȃQò—™ÙÔ”çWˆLX¿V|vÝñÂS,•¦q³º|ŠY6„Ú$l>í¡vfµ$ëïþ 2®%ž‚Õ£"Z†ê• íF¢×.ÉÛÀýÎè?P¤ÊçJ Û»alϬÃóL P¶¬k²¼ ï)œÚ}‰è‘ fì²ýkQËdz!ÅÎñ#KÀ¤ ‰!¥ª|sÏDm"ðOA×è€ÌÜi“yssÙÕHlÈ•xºbÖK§üòúcw½‘Ñ u.¯/Òl[µJ!%É×C'FÖ.P¹ð8„øú.»Aâ5–ÝtO5ÞÞÏt$±#{È¢«­åÈ!û‘°Ò3hÀÁÆC=-V=§ùÄû-ô«ºËþýV}‹Ÿë£JPÒx<¿ÏLCcwbˆ›™tîÚÇÑ3ƒª]§ Bã 0¨Ÿ"ðH+ïûKF¦øë ±Uá=€Õøƒfз(ýªÇF`íotÈO=[kØ¿kã0F"öx× feØ}ÀWƒuR>…òeNª 5!²Q]¨«8\¤&0úÐÇù ."­º¦Uzµ\C¥û•I4çXzƈ¤žJ‘/³ÝŽû"Nh äÿ;v*-=!äVlÒðàg¤²„+´ÿp`ñ_Ò+ÊF{3s9[šØý#¹ä[¦òŠø}—´‰QE¾,ï(§;ŽgŸã¿[Åç^)þx8%…N) ÷r1±ô„aè`jn¥ 6;ÚJ›ÕŒëb^¼d­¡ý,èŒXÉJaž— yÀwX)fÚÛ¼‹*“æ3jwé’´ã9/‚£ñ|9Èq‰ù0­_)Á¼Œüé¾måå~1t›#"±íÄSBûBÕ ÷y4žÒxô€]ÛUSþZ¢‹¹#L°˜üž)Ô Éºo™;f”ðm¾Ú$œP$Û•é··ŠÀ ñ¥!G¢Ø“ÿB&—HÏuaf†¾s~!·Å.ÂÆX‹g•·€J™ŽáܺÔ£Ðs™Å[™B¿ÆOÐ×5-´”í]w6÷$A"ó2˜¾é‘ÈYEÛw¢U²ÀèûRt›\ u´›áƒÿÀ,¬¤Î¨YCìRM›pþ¿X»3Ò½’«SËû¦/FQ5Œê´Ò¥œ°‰Ÿ­ žÆ22ìh™]P2ÒǦì[ŒÞ:-ò¸w&´fÜFEHéSƒz.çA²ì®)°%¥i„g±t Ì²ß 7hv mC)EÝŒ·º/Ë7ì|ß^ú©}BG}1ž³Qªƒ!Inp„|÷ë“ð¦2ѵ›¢(Ü•ä¾í®Öðñ0z&*Kd¿‚˜[œË&'¬AøÅS{åXÁã9Åe æJÌÅ12øñçl'æ§Â›±Ôm ±µü­aûlqÔùÖet¤<……Âá´ÝëHQ«z\/b-o¿p9o~Aߎ¢åý]z"ƒö}•ug„wÓ1“\-^àÅ·>(è[cÊì¾~ªhÊû(ú ›ú©U$u¼H9n¡öc?¯Ð$÷ˆz?ÄXÖ¾t3ósÇêη­Ò\üYœÏàææ…d¾ßGX€AÏIx±Þ¡lÝc"ì“lêÙBŠM£wo¾Vmä+üsaÏW·º6ž/6Qˆí.,£Y]Qµ „T­pÖ‚ÜŒZ"Rцo«Ä+š9—ÆF‡”æ5Meþp{-'@ÀaØÉRïwJ·ž7£X7Ø ¨fÙ@Bï¸44𠯢¤Ÿwá4ü¡·ã®ø»úõ$o7¦.Çä_—ŠÐÕ·8QŒ.Tà/FéŽMzfpIð‡IùÅðR£Nĺ\ àÎ6¤<`¬žQÇWA}$·ŽõGT{¹7d8ß%rÇ)Z24/4:'•3 óxúl”‚¬î¦ƒÌÒÑC*¬Ë…¯·Ô¹žjyéM>‹ÑGAQ+Ê•¥øh§ü <W¡Üè\ý좮ä:ý‰K<½5”¬AA-.›xSaèÅ‚–¶ÔW5‚@À…e¡~Â4(Hè  c[÷Ô™óÊæÚˆ–9ÞI~Ûäœ Æ—¥ ?µ97;»p!_Îæ,vòTaæã]ö8 ¯X£çp•Fw½|5MQM?QrLÎëÝð¯;9ëøa`~Æq†.«£Ý¡Ìãñ8 ¾¨Z°D<Ì|!üÙéËÀÚBþyÉÜ“$üàJ¢E32Ç¿ •™‰R¿`½2~ë!ÌdWËaHp»¨ Œj8}“»–Cnù™]ˆ• ë’¿2"¥x%«^·C!ÒýrIk"¼âP¤¼JÏîùøué?>¿@ˆb}ç NœÝ$š=1_˜­ˆ—ìÉ¡õ=ÿeÈôM“›<üñS 2õ] æø:#Z8Íak·F›±=× ›;ÄWãͼa5V+vÐ bö—ñÞŒ¿F Ú.Ç–(à0yÖô&vcÀ{ûJ’ºƒ`–C³ä­ð&w9¬¼ø#ÿGMÄ¢§9Ïܸùk<ãæ òRì È¥„ws8œž²­¢¶MZ’±£ÝÄ’:û '8¹2÷üŠàà°Ë6]$y¢kÃÒÍÙãÛGG yö‹t…1ÏJÆŒ³Êg”Ë–JÌôÐuZÝG‹°œ«÷-@J{ãÁ?$œ]‘AÞŽ“§ÐÀX9îë5í2ÃxÕ<Îõ¸pGûË#(7ÿPšH§DçHÈ$«binkJÏ@@ÇvXÐ`ˆo.ÈÚù9 èÞ0t´ñ˜ W‡tú.W…&›0k÷pU N+4Çõý|î‚Ãþ‚f\Gú B p¤_¸N{ç|1‹÷´¯èèxð$æÅå#Œð"eçÕ±Ñ"ÔHeK|ÆŒÎ_Ñw™'OÒµ·“ØzÌB¼ñÀ¨™ð°ôè;Ù;—ª‹¦æ’8rXQ :ééárŒž˜1¤ÅR¦Í*SDJ  C9VÄø·/üêOXz/•zø…»$NJ~†“ú‹Óý¦yÂÔX÷àu‰±¸r’¿dœY¹¸eR}Ï$ë°9©hHSn'ÓôºãÇòøúpZ@f— ‘|9sZ, ¼mÔ~V®Ñ7^s¡ø(ÙÆ\þ­·7?mzB¦ –‰•ÝÜBvœóÆ]UZþ2í)­]>›hÅᮜ_DéP¾\ØÄŒ¨fÊ®H§ÜÇãk;Ê?ùº\wa µÂ{?ÿ-ÔÝ}Zõ¢Óíá “ÄÅ =,¹ðÇfvÖ¨!÷yAdß/8“ÍT¶ªØNCM°oj¯EŽî÷»Ä“k󸵙rkô£„5æzç__jv˜QÑ4©Ò¥ê¢Í¾sHFsÆAÙ/H õAÕ-÷4=7ËØÕý*¥m¬ BöA"-ȉ‡«HZÂÄÎ{Í’úYý—Ž”Yt®èx”%¨4Ñ/Sa²¼GuïŸ&”a —ÚTó ªwfÿXG ¾ÇPeN¹¬…½„ù8Ít"vDKá èûIÿ›[âÚú/ÔÒõRáÅäsÖÝ=ÄÂ2…*3žù #g>úáÍm‚¿\ ÕZ.£_Çu€ŸÝy÷ækÛÐÐMÒJ™u…ñùÎDt ›œ‡1øä_GôÏ#dáRÓö=”v½òì\è§sö»}uN,UÖŒ{}àÈ*?øŸÂTž¨`Õˆ<‚|¶rèÓKHÄeü„~ V…¼ÿ#Ü(4Ø8¦Dÿ“ð¦2ѵ›¢(Ü•ä¾í®Öðñ0Œë}íå×DW>¶W®´Cðüs0ˆýI<<~Á¯ Êör:5¬ÅQ¬˜7½9­ƒ´%‘tå¸×MEïÏ4ûÐip@[„_"”òyì=^¸†Ý»Ëké¦‰Ï p Yà×-by‚Uè´(ug­×‹Vr„;9Ð×CfÞ|Ÿ†ÒôýÖ"¼x3J¼:»Ä‹ú£÷dÈêš“nË-pAŽ:æê*iäPÒÑ^çå‘U{`A*z-¸mX-9lÉ1Žö¸z†÷Ë Ûúý×u¾Zñ°†âßì©÷îÀÄJÓø÷I¬{LýºÙr@zËä ™vÇt…?€svmü¹–bff.Í¿Y¥T¢/)V•¶aÔGT–r#i’½¨ÑáGÙñÔoØ Å(AL%Âç Ø Ζ«X*¿Ç.¯eñÂíÑ<û{ãIzô»ömáïÀžðÅ„Úq¸—^åP\ƒ&<ýZÒÆ¿óÞ3ÊŸˆËoMÅÍqìÊÖ¢Ú;TŽ ¿€& ¼Sì-áñ<`"Ȩaœ«aäÃ'Ò§ä\¹ö;‡b‰C¤ã%%Œ9Çç0™²"QBæKÊ^V¬=Ê»3èK²U«ïõ áuçgíLh«­é»¦ñKX+ùQŸkþ²ò–G²F”-5RH!zLQ7`¶‘UQ¨Z§¾Èœ®ÁÉhìnwÁFëÄ…I¤åÖ_˜±â‹š…&8•?öBÁ–0ïw^Á–hS™‹ ƒá¡ 8¤µ)9Mq‘™âÆKYkûMìC«¿6(5Ü.5%%rÇ D;í„W¡wèAûÒ…óá¿–‹%v&2t h‘ͳçE‹í«ŸÑŒì(Ù¦ül­X”*ßÅæÖ™5¡P:È¿py.¨ãüy3]Xkǯ%ýÌ(S¼&¦!ïVQ¦D‡ \ï íSwì$GȤ*V}¿'ø0ÒVçœÆ ’1Ú±™°C—cñ·Ïïéøv?>À€ˆb}ç NœÝ#é.—ÁWi°‹Ã<‹ÿˆ/@yxý‚uøK?ÛèAÚNM¶…k¹È…xi­³÷uºäÍ€øá˜i€ÛÛHž)fಠÖMÁ¹¶O„ZríME5ùJO/uS¯)$–’ò~z´ $;0«P»0”CX D_£t Ìòl±¯ózÂY -o?;n:i¶¶Fº”v=uINýY™®Csh·•»ds,ò` 9‹¢7!U’g.ÒÿëÍ¥Vß“—ð;ï%}6D3'å”às*b+Ñ•/âtí¬Y{."9¼ùDþ±@¬Ú>Ó°¨xKÉ­ D_³ÔWÂÈ“»4„q_"z=§ïCU3!/Ky‹íáR–¾kñâNÝ÷*$¶¸} ;²!-½|Ù#m-øionùP­Ü8Ž´‡×ÑÉÙª}jî žßD2·Zr^_Ø 3”øU2ææµ#é…ç'±T<’v…š.[xë s/xªô¾Ø)žbg§Ò|’¥ü0¿¡J•›xFç ¡•˜Cl¸É.ê–äät®i͉û$g­Eà /xDv”£ÉNƒy¶B>vÀf žTA%ø*¤ÍæQE‘GHDßÉ9¬Csé!j,Û¿gÌÚ®âÜJwhÛÿö­F7´®È“™1Èn"êW6ÞÏ/Œê#A ”øF†nýÉò޳ÄvÁÇi’±ôÄçc²ž0<9¥1¢/:I6„ìyñÏ…v”zÔ% ¶øˆ}í"Òå÷Æ/øWíLc«ÍƯ`7?Ó IYI¦3méŸ5&ºôÝË|àD!|³÷ jçú‘è,‘ cÿ€·OÂ?˜³b^³Q Jè…V¢ÿ'B <Ûçü1vÓö-=r¾mì´ê‡XÚ”2—ò–iE€M|‘‘J¯Î‚ÓçŠÄ]asæm yÈö?i†rÚWg7º‡ô¾bµ†ÿMQeœ]‡F9ádÆfßÎS&ö©tèïcw½‘Ñ ¸$ ucgÛGÖ5[u¤'·N¤;Äy§ûC–£°ÛGrüÛE‹#½Ô'Ð˘ÎuÝÕ×>yÍ„§})÷¥ í)|Hòf |¨œ 5¤¯æ7ÍÇÔ?žÏ’÷TàŸ&šmJˆ*íÑWþ•ËÔï¶ðœE†=.)V^ÐaõÚü'ú=%õ?\XN.û$™7ÿI˜ËÂ×>ñ‹Š2Bâ[Ú˜Ë+0|ꈛ‡eTá£Üß…L®ó…–'×DϦÞÞ+F/uüðu2GÅ]˜‘ ‡J`;˜âbð/P,‘Ò{¼±ØR?é^rHõD<¶_f™ÈaÿsKÚØKZê°H##ƒaÒÈúË_àCÒ{ûGoJí ì¼F„¨þ«hì!nü3×ò hqF8þ1¼—Zš›óv_òU)ܺèv(/;›C.èÇŠq¶×ŠÄÞ äè%MÒ¿û®í é÷Ùaòš_\ŸÂïÓo“z¸Ñœœ^«=±Á¥¾CY«ò!'aªŸîJ’®í5- Ý Z39åÊþ'$)ÚW_¶lÄÜx2† ïÂâµ[-ž½¡Ã9i3šPi“ð¦2ÑüðcBîD 2îÈ÷æSîQ¢­ —ä¾$tNÎöë.õã(GY…‹)»>RúêÕº}ó?iBIÅë_º¥s?õw$•)­v†caFûᎹ0‡yªñE²{‘Gâ7¡¸î ¶yHöL¯’W€ß\k7Ší*a žÎbLI×ZNò\ÿP•?ͪ)±9hÄn×ÃÖgú”ß µ©YÅc¥-Ê≤u·þ{ãÀ}Ë0©Šëqƒ»‡aÜñø®Öá}FT‰øš7×K—Â.«ð G€q~’Ûµ~’NºPVh)ßR"¸)~²ðò€½†å „êŠdf%ÇP„Ù›¢p|w eo­LêÉxÖÙÞȦЫeÈWjj«T„;¨nÆg°=t‡ë#ËmÑÓ"Þ”ó$Ö(Mo¿®¸/G¡ÝõE’aU jŒìç‰rOÛ†—v{Dí«¶±Ø(Z·w¿˜f™='ûù6jyåÃ÷Ç¡ú„Ñš®¨g¾V‚t¹R+èŠìxM‹(?Õš®›/ÔÉ*³è /[xš÷¼wO4ôê të,u£C¯à{Í™è‡ìZ¤UäÙ§6.HTYÁѯuÈÒ´ûä ¢{«ð*ñ£ä””Šë ÷š†TqGÙù”»ŸÞa¡õž‹Ø¹nŒÆ´nÆþ­IÓÔðÕ%3X6)/b ½×Xe./e|ɉ&¾Tqs|<2ÚŒçzŽ‚ñŠû×…òÍ—Ø@~÷űñ®Ðº aDUA[6²š* RÄfè|¶òxjF™Aü¯,ú¢|ˆÄðãĪoš“@QiÃô!`¿ùÀ>çÓ³r•ïâ–i9 ÔÄŽY·";Ê8’¯{B1©NõתŽþÝê.м¹‚CFSš"0q–mÉF>wÑ£j«YŠÕ«T}ãO‹ÇÍ;wL¬¼w…9ö;jÃKð¡ÁŠN©ª¦ç¡Šƒ’ôÏÜóÓ/ =¦HJßãŽöC±[¯zÊÇËH\]À ø«­‡Ç9~®:„þ€*íº¶y‚ˆWÖ…l·7â ¥)Ù'¹®U»õoËNÏ´%2_’ûŠX-£¬¾ î5š–3.ÉÃ\)’V³| Ïll…[¤g5‰å6º-›ûm0"R$}Çå§yŠ8bÔ‡ ßß™öo+艕‡½öQ²´í÷ߟ»åùû¶Çáî˜ñ0P=µ÷úzgG¥Ê&ßW±û’ „¸ý˜ˆ|Œ¹ÓD}è’¯oPLTþ©ël^è3Ü¢–ïÒRC¶b~²1…Ér°¶}|»peȵJvókÏhFwSÌ. z\ªß{ zÚ·rÂ^2œ†ÉeËL z¯ÂQ௔~ ’-7¼|Š™ÙBv+D½½pjVrˆ8—yiDzV,>?21>ø®ë¾ ²×‘iþçî[2˜¨Ìh5\~¶Ûà1ž?F8ÊþͪE¢Ðë`‚åªð¨›:7D1ËZ¬ïqQ–ª`E^òh!óU{¿MÀ£c.yôˆˆÂØjиêþjrÛÛÉð9ó_µ´Ì£öž÷’^eÑ^Aå†O?¹×$âr&¥†ÕÏkn{‹ÂB%E’ºäaM˜éWrZå2¥ÇÁEBã¤i,°;øšýçcg|À/C¥Šé¸|ìkÙ»Y{©ÄŒ„áOZpä—æ¿A¤µép¯wÜð±ƒH‚eq"u(›Á+{ÌÉòA5”ÈF´54ßz_ÕÌó^ø‡Ýuø 2<;‹(½¶ãûÓˆÜT¶ª n~Œ õúC$xvc1¥”¾¨v¢H6$ÙHз‡Â§IÇ¥Ülf+[ O9c®úV7’‘Éã<”Av3ø¾>ÒâR™ft1ç±ûkm£ Áù#Áð{º’ê’¤€ZB.C%gKĵ½Þɺs[þVám'Ó¼úµ¾[÷ çOùkžûfI,kZzÇâëÀD»¥ç±þ¾N–ß\M¬ZPÖ„eLŸ*¥À¿™ú½â`K2Œ0‡{ ÉûHôA»÷àJç?ß¼UÖ,À¸ÆñŽ-…—‘€Àœ ˜0bgôIU±ÔÒðïUº08s!˜ÈsO`›SãBtŒ:ò\€I¼¾øPïå|CJ9”Y,O)1äRÙPÃ…9¿P8ÌÚ4¸ ×GgèÎCœÕiún¼Õ§>wGÔö¸žyŽœ• @0.ô­1Ò$,Í'8Ñ7ÕTI%-ôq´Ù¨¥ÆmßÔ[dWˆ\ÊšÙÕÅS÷3/çÛ{6TÂ>c4]›Ç™G/]mà’|º‚à'Àòp°=Y]é<•e}±èÍE£¾7úÝ'Á†\4®q{¡Õ T&)…=ù³ö ")ß¼ÏòpuvjnYmjïœ Q~˜ßGû?Qdã6Ðê[”UÒ8ׄ’™”nÐå€i'¬É4Ú¸´WŒüé Ž-œÁ÷ÓRt -Vwú-ÍÚ¤[¥ßA¥u䥽X@µ#«oðæ#‚oN*iÓ^FwrXÄ5û<ÕD6ØG×.)˜#·ÜóZCõ’vSÍ;\ãßH‚vr#-__ˆ‘¼nšƒ£³ 6,ãµ,ã;µ` X¿jkëÓÀn??¾ÒŠ6ì0êž=Av=¶l«ç‰Í6]ààs¨Ð¸íf9k#õÊÆ ±2ŠTÒPj}j3—¬/…&Ùs÷¹YMðÃkmöNQP/ÆÛäGÿkåâ‹£D´ÆŽV5´ˆ¥%-ãä‚l1¹[K1¢´„maÆ™i øëuR†<áϺ)rÝ9ÁâÒÝr1ÔOÛÐÎnÙ`ky£gZëÈÎϧø6›ï¢¢œœcI~|¼´ØôŸ<0œÈ…É"R­\ÕklŲP–8MSbAù>ëȨ½kØ"ª´Þs‚zé÷"¢ÿdúÜhBy£Päwædk‰R÷iÝŽvGÚä9et$IBÁ[kÌ/ÿY X63„“#â4ôZˆvÊnXñ);9ØCÀyʪ£þ ­Í·W™¬§0&`ê¸n§¬ø 1 ¨<¯$’–<ųÊá9Ç&‹„KÏüq<u³€ò5D¯ŒÌÀò_ ^c øå$ôÅäP™µÚ ”€4Ð9ð8≠‘<Ç´†¤§MÊ]3ˆ¥³úþ§ÚƒEÒ9µ©×#˜?›/Û2û©„sJ5 ›”ã†vÿd-Ú EDM ºA7G˜ÄcZê°åÌD(j„þ\F*Ã~¤Û÷z²™¯_†ÃCièŽÞሩþÏt`Ák ‰|[kŸ†“ w¡›J1Ç ™hHåW^SèÁÜ·lÉÒ\bO¦àý6Þu¹Î8_ö/¹Öø¦:¶dzBŒ7n$-WOL”8GÄ'÷¥,"ªfRßíóthTÏù5eAý®;uagBI¬t¦ŸBº,dC#Vi>G²›¥q›_0ºŒR×’.-¡ˆÖ‘««“vá£êE2¤¤£¯FvÂûô^Ý¥+V¢Î¥ž Õ4B5Oô"ò÷ §åŽ5hj'ˆE¼·~ET–¶1¸LSÔ#nºo<Îô›¸€õhé'¤•Ké„”¥fÞNî‡P¾¦êª—Û=J´Ú¶ÄÐv·=òÏÒç XÐ[-.ª…—äAk)j¼ ½;NÕL–Ã)ØÑàWb-ë <¾…ÍZCXµ¬k±ÍWÕœ€‘“[îv÷*†cO†$à q€{«Ö¨ÀB_5&ÆyIÙk"ˆ·÷ø’j{©“8‘õ…þC¾ËàÚ²ÔxÜžV´%‡ØFÜ#ìøßLšÂª¿àwäíÄxiðÉCˆÝilpÖË›éû âÚ2ut à´m°Ú®>ÐQÈ>ˆ'{å§ ¯gü~¾&q"²¾—ë„z¯`§]8è r÷<\ß\4Sõ>mgáFF,z‘µýaªk ýÊhšãWü„ŽŽÈ¹yÄg0x'­‹ùs’r“Wh6Å:O±Ýbë)tøWÓ¹…äYöÍÜìãL] î¼™™RÙ½ZÆÍF«tqŒØ±ê Š…9!/ d‡A›´6”¸Î@¢{‹Þ0ñ­ùb¹·S*H´Ô+´¥³@ß+4 .•&tm[$ër%¢ûA=#a;|&£áœzn‡)µ*U"úR~í葉ÒK?~©Ò´yVþ¨&ªC ¶³’cëÌÆ×²t¹¨IPýÞGÜÑV°W¸ô0~kIQǺ/«ãpq}·¶èÏŸã›ôçza çʣɶpZ¤¬‹%„¦…òDKî ƒ'èx™þ}kß`G'ðö÷4þ^xÏ%ˆ]½ I/¡ÕB ø&Xx°ßÛ=v9ÈHúâš=‰\2U–JŒ•–¡b+êGªFVÙld¿,޳gÿNa³\ù­0k%Ö°ÕŸ×À ½ÙN ÌÐúù¤°‰%qo—*çòäNÝeÇW¶Ä™må² fó_|¥ö@°I÷½Ž’å–ÐÎäÍç…;:E9â^’ê†bãб—3Dß4g©žÎd³04!XÒý‘íú&û!Y(eçÜ­c® 'Mw诀“(ÿZ‰Û¼2¥¿û‡ÙàáÄ/rkâGp?l;sZOQm£¡‘Þ¶á’NÖ“š®¿X•žAN€|±"Úiü¹ M/LŸÕ±á4,WdŠk›ty>UO *X–.dw­…j«¬Ÿoù|þ`*5ÃNb]üGâ ï„=«NHîÅ÷( ýÜÖv3Uô²\"³_‰-Dˆ¥ØÃý¤NÁ_îß%©°\aùµÌÏùÌç‘…f"ü™mh³±:Æ’¾%…Á_?æˆsÛ÷ ¶få„f÷ r˜%ä&ë§nÖEÊã-¼QRVªªª%m>ë»OܪL‹pLšžQ]0+8=›è¦¹þÑš Rø?Ûý‘Á”ÎÉzä²Ëhj¡âåå¨ÓwÔ‰¨nû#që0V ôQÓ ëíÒJ +Gb\‘’‰@…Ö\ü 'Cµ°RVÙA½´Î>k–ŠémÇÚ‚p ¿·8çrŽA;Ôv¢}µr nüBÕ/L’ñ"Ÿ!˜\}xæ§ÞŽ'<‘÷çÂ|ÞPB¨á„³^üÏuÛBªÕ™gç?üó ë2wÞë_µ…¥”ÆaO%é´ÝÚb ™¿/LÈVì4Áâ=ïß“E<vïB'Ç*&ðØzà>îÊ{£8´7ïé‹LüM%LA†:|:6’ö9‚ƒRT3vd8^bt£™½/·®û¾Ž"wµ&Ÿ»%g ¤Ž¶Œ+»²hû ›œ˜Í3΋@æ bß\#I‘qlÜѯ€„ö¸£À}z-%ˆ¯¹ŠFÈ µš5N?œ4Ú:êSárÆ.‚JŒ+øÈ6S½ø·7ÈcL?ä€ú¡áŽR¹Ûº¶+à‹<–5î ,OJ†¾îªÇ&â·VÑÕ×;v•‚¼¤ÐP-¢â©ÐÒ°½AöåjFóP Q—ˆ6†"}b#Rl€°Ÿtdb ûºÌ/)öíUÅ“ÒõÞçílí¬Ûn Ø­.Åå¿'óºmcLë+ª%0u={(-Î\~–kÀú«ßŒ†Ì8H ³Ðið¹P–ÚC_ø\V¶P$ô2˜ò®=÷v˜ÔÚÛ±mó™9”r uü½wT¿žf6‘^¹H`f.lyá;y2ãj:ê~º•l[£ŒdÙ­]‚ôÑSy+ÜÄeò’ët>.—i"îÞÍ‘+â2~Meo…†ÅŒøü„Ë>Í/¤&*ïÙ›=oýµ]5•}«þ,ªˆÖ s¼ß¡ä›BÐ1æc Ùã±<< . ú°,*”šøÝ÷ªJßâWÉ€ û^ ¶r?”Û4O»°—¡*ìPØ£Ü6ÁN"ô¿¢uÔ­gd†Ãá&'|Ì('øSzFcìX"ôÖFSœ%5ÖAùóÝ›èˆ;ò…¡™0yž!~xþŠªsþjw3/ª†vº]T"¦„#̯©Êf—X€R\ÜУŒÕ‚¹d™RmËÉ2¨Õp÷j­Q"èró»4´ÑPêT€zYh­8:6d”­:]Tµž»Dl„:SÏÒÄ¢Ÿ«È76‹¸NáɪÎTèË MA§Y8!µ2F^=’ædŒòÍ£{"Å:†B—79L¥5œu}öòÙãJ5N†qðäe¸x³6­d±QÔxÿ#x)‚Äÿ'e… Ä‹jËÿccùfe׺ei{DÏ”ßUÀ° Þ&“‰=SôÔ­NbÂUÒÍâ®Kÿ½÷é© ¨M"’€ôóÆÒéCh”*šA'ýYÚ°Ù4cöÆ™.»ù­¿U> û´];üF©ó)1ˆ$Êõjã"¤Sàë,86íF’˜á3^öòséöàþmUr{ñ·>uF7bØS1<3%€Û Ì ²RdúÔ[it߬ót\wµõŠÁ«r7c–Þg–Y¯°óÎdÖzôETçâMˆTª»Ž‰ÿjƒ.Gî ¨+Ê*r-N7ìÿ8_>-øox¬“/ÉÕ}X‰&«Ó \ÅŠk+ÒÁÉ*_ç3 „ïãÙIÝ5Sœ,V?Ñ7¦–ZiR¿ÙyéLÍ6®PBA¸û `´ rWtì¼ÖŠúï Rfº,#mYp°V6Ôù%7Öb|¢#œ1ŒPð$äZ}¬U àvC\A­b– ±¾Éøèî‰åŸkú½ÂEòóØWiR«zNMÏfÂGI!f[!a Â1%´Ž±,m›z×q4æFÒŸ#:Àý¡ ª±*ŠVQ¶lÍ¿PdªF&jDŸiE<'Ðf•_õeïA•ó­¶ –c_Ø ÝÈ‹~§ Ô‚±`Œ§ ‹FÖ<(ͤH›oÊßükfí¿Q¥íf%GÓGïâÕN/¤1ÄeÇCÿ.©ªEâ¯TÊÝ ¡s“–¼ ÇvÀuôGž¡‚Ù‹käâbõ»ÃÁ3ŒoÉÝ&22ÒK\à+¶¿àÎÎŽè'—½€ Ȇ¾{µ¨WáOeåä{é­øÃ™köUÐæòÝcPÖzÀ]¸yÅÈ;c#еvxûC•1æˆÀc/Ô–£´,…ÖÜàç˼Žq4q²Iò¡·8Ð$êöӥȥõØ (ÖŸ'ç¦a´R^<ý±±!Å<¼äJΛÿ ÑÐÄ,©Ÿƒ¢|×êÊ[Ú W³'èýgCtà&È˨8OF\ijdbÖ þ(Nh ǃ â7!Lx%B˜ùKÖ6(>LO¢”€Õ#£7ãG'. JQhn<¬KÀQˆˆáÈ9\ÊC%<@ÞʃNò*Œ>XìœÍ*Ý£ÛÐñrÖó;nW$Ã?÷òÃß³GÅdŽY,ûs– Ùn#ª‹>@p7ÂÿÂ18ò¥[0 y* œ5–È]%ðœzD»†ñT1”í®LöË"b)–6µ:ysû)wˆ `¬ÉŽ`úÛÍ£QxDñÎ Ò"_Ç‹ú[ÅÂ)ÇjîU‚cš—ãOE¹ï÷ߘäLÂÜªŽ”éè Ó.Ê·Ð/†~k\…·¸þ´j¯™V}zna¼lCñ°À„1}2ö$ÖÉЈ¬€6×ѼæIÑíÅš¶$8tL)€÷÷ð ÀÉÝè™ /¾–¥µZò3áar’ ‡“…ë¾<ï=6(tÆB\Fêü—&þµAEç?é¨ [¿ÓN»›ÿyy&âÁ€S 7imï…¦äïÖ²&5Ø¢ß ×ê*^ “ÜóQ—ƒ$ïÑBÎØÇr^‹c0-ÈÏöÎ<H!…^"¥—`Ví劎- Oär?nNäÐ!Ì~¼8'|2(*tm{ygFúÝ|øj)q›wê6¨åx;χÇQ,ú«ŽsÂÅðÁ=aVç—r§5Éî ©+KFd×qGÁ#Ø#ù0¶õ@)¦áبԇžeJ°`ò-þ䥎¡8QCMôk,ĘßyŸäàêÃT-=ð¢ïÚàßÉL—“ðäW˜Vã žô;Ñ…E5i¹ábߨCMXÞ§†üZ½ýu¢vœ#@ÇË\õçÖl/t4¡4µ{d}LצӖԦ~ n r9Q‚3#ã°|@ßÈ¥ž'šÞFé»Hhœ´ç”,£- ¥žM\íÖŠ)$Ky¢GIR+Û²âJB8_šÎá4ÉGýnsÖìâžñºj ™%Ö,ãµ,ãúžǯˆÔ†ï¬Ç÷Ézo<uÚë þl¼ð8” j‚µc;¡M¤ŠV×Ïyì[»4p ª.ÁXqgòÇærñ`rE`6Uy„Å•ˆ)£aºÅÐF^À享¦ñ[^Œ_G‚õ(õõ+µ€žŒ)u•˜£³¡¨äaŽó»b¼šsÏ´ðËc̬¯ÕÑ^%û‘‰¤pdR¡bÈÅ\#cÑÚms愯5.“@„ï™3…رS×Ëv{~÷‹,4Î"Wnkbk–eD$Ä;æi!“Lh³ï.oÔhf3ê­.ZShr)zoôŸ©ÈcR£+qWÐcìûÉþ$ wöNRg{@…NyŒxyšùcÖ¢–>@ÚLÕ¥ÖLiÕ{$5Éy—Âe¥×ró6eeÙ_…Ÿ¦>ÊÚ‚âåf]õ$Ÿ‚  i¢Õñð×¾C‰O…%bàÖn”Ôš@4ˆ_ò$€ (hôc®=/r«I¿PÑ:<î™L%N/X&D׎-ÅÔÄÛìw¶A†|]j°ìýK‘ïÝÝ™ÇJ ÿÆÁÑÐa•V1·’ÿ1V§käþ\Ù<¦g³Žøû8jh~1E1AzH*ˆnÊa¡%vtxï:Úa0@‘¦–ÇÏ£Z=x|Yß¾õ#¿a¦ª»6ÿ]æSýŒ¶ÛѶ»qÑã TqÉ0ç-jqè{ÄÖ#¬(m‰WÚóª®^Ç’÷n1rxóß‘sþ¿, /F‚×Rµ'¸»,@À‰F€÷È?æˆè‡ZYÎê€Ã^s·÷›‡eo¥[—‰l:ûó–¾§o™`/PUÆU¦ÜûFªä P®ÛMƒ`k·èlsíš,©½ I Þ ©Å'Lüï•*=h³ü[Ë»l¢É-žþAçíÑ>öy­Nî{újIw«7o4¶GúŒÆ©Óøyãý0öº°ÙN‚¹³ £ VG#ú Ã}-²ˆíÉlý´°ºÊom”æÊåZzlÝMýÕòH!,Uß=´&éó n3€žIÌRÛ´¦°¹ó¶Ð ƒNP#Uu#ûg€p(¶¸è¶ Šøà"o&CV<‡íJ¶¡¬‡ *zézmSê©)iô‡’rt‹€áM]¹ü¥Yw‹È«íÍJSÎó^ ~hýO°õ$C9<ó}Jæû§÷*Ì'ëú›ßàsMê²|â¾ÀÊ|Ö.:>Š™;¤d2˜çeœPZkÕ‰·õ )øA Å2víÔ·}¬%L_.ˆû´¾ …ÜÈ`Cžg!ÆV j=èKÌâŸXËК›3áhî|`#¬ÑR%¾dæy~±/1™ÎÏ‹7@£¦ñð-2<ÇçÞ òL $[:ŸÛ ‹ù|þÛ`0<6uE +ü†sÓ9 ÷–aÊ'˜NÅ«m ÃüØ–ž£/Ø|ô¡‰ü‚³Q•ý-‹ÄÊì qó“áÁk çÖ ¶¡G´êyúH ´!cgACo…šÏ}¿6 +ß$ÆPhœÛŒ6øœ{ëÅG¶îÜ¢Ëfwm1TÕívò7[¾æÚ¯€—sƒd%Ü;ñÇW½H*Sú?³WêhT`‘ #ØäJ}܉¿w f‘ô ö•ò9ú†)n×q|CªÝ·â¸$j*CòtÅåæÎØ$îý;¥¼„Ùó"•Ã2v¹v;ß»)zèR¡‡5Ÿ"Ëe†zF÷x¾ ˆœÄ{±5@rUÆ=»Ükê¢`£L“éΑ~Úøñ§y!I ÆÀŽâì’Ûb ($l) Þ8UËj’˽k¬‡~ GÿRë¶WNä²ãÍ8üõ$Îõ ®éˆäuSì©¢ébýgOæ’#M–ÉjÓ‰â0Ñö¶Þ›òBÈ|aUOìGÅ¢S é[`BVžÊB}jâµÄMr8)(ÛáeW…YöžNòæ¿ dµ$—·8”¹àû1ãë@€ýGRžêãÓb7MKº‹{%Ë+:îbzǽ%&ʵ¿‚kžÎÑñ,»¬ÏÌMNâ/‡ó':HrÀ½é9ÑÚ¯¡ç¶-ˆ«áÄÏ[ñ²O è #Š€Ëx|¾£¼Dû[«#݈ húŽYþ3|ýK ad)ΩŸ£iù>[¢Ú«i¬Æ«µÈ™m¶® ÛÙe-ûŸËQ¬a*T‚ØûJ’îÆÇêåæ -$ÒE B!—Õ´ä>™?«cÂhX®É[:W‘MZa%7éòÖè¦K1Èó• ±xúH 4¬«%«FšŽ»Xe×,Ëæhõ0~áµË’%ºÀ9E¦ðõRáÉÜÊL±_¿ý¤Jo&8á¹cz XŠ.Ò¾³¯¾p*œxöƒÉ¥C7ã23ý–iˆÇ =¬j°¾öu±„øG [ø¢ºgè—0ëaàð¶A|öºý!lë°Zx†ïANᓌòÅ}ËIØÂ[âhät+«ùëAÛUbÈ8ÖòöÁ¹¥ÅûØ(Á{Ù—ŠO"x&œi@…"îX8øô‘9lÍÅ5˜*Ìžlz´ ½Àà&N%;±Ö³BÙ}3ì½´ÿ{׉ÿ?ÑÈ ãû¹<3\\cºœÖá;ˆñ¨ì»A¾@å:9"2ðîÛ€ÿJŽÖ™QÒV GL¡Hqë—¿áÄ;3-9+'£J2]÷üdQÎz˜¼¿»¬ŽuqG·wøQq‰œî½Ã,ÄÿbÁÿlæÛâôÈ0÷¹¶Ž…r×pÕ{å~¢¶NÞÕ 70ª¦ZðÖˆÉ ÉÜÑl©/dÅå÷O#c1™ÓÁÚ„ G[ÿ¼Øªoð(HäRï¬dO޶ž3,ާšÿMÆÇw” cE”¹ùÙuAz–ƒG²¥E#!M£½V†à g†Æ’C¢«À]ö¤û½âUá@­ÍõbCÓ£ë` $í•Ò3¨ŽârÄÌ D‚à=¬ÿs7`+LÍá W®MÕ]Èg-ÉjëãJ—ŸA®,öŽ@[,ô<»$@2NMÄüW½ ¦¬—ÅÔ].çîª\ÝcöÓó]¼À&PÍyìÑk‘ŽÃôZžŠã:hº³éq?zC%ÜÜ;¾a°^“¾8V´ešð>ª÷ã!³Eu3Á\D8-Œ?‘j áqZÙ@œvdaºØJ ëăg—cô.",íƒÐÓOý8E‹«¼í^_áô] ~] ƒ»Ü1šØ·šzyùð×!øè7{-oýZóÄX·>Jvä[U¤‹Ë“ =h Š„ ›æ3ãæ„ÒfêÎÞ)Š»Ä.óÜŠÚÀ¥¸×rÓóÿH*Ø„Ð@-‘ç@zИ7‹ì{2Aê§(ºÐ©n=Nãæ›–ƒ­þ%|‘˜€Ÿµà›g.ÔÛ4O»°—¡*ìPØ£Ü6ÁN"ô¿¢uØà¡ìËÓðÅðjV×2f·»§ì c^çwÚ=„ô‡@”³Ãš9þIµ«ÃU<ç%b+ɤb²é¦ÿmûIB'>3/Qõ5ß퓃xÄõŸÊ㯧õ 0¬z¥S!Z•Ú„ "?°Øè(»9Éý%ˆ¡ú=’|\ý–uÍö¹Ñ«e1§šÌ×â ÆTUëRÌp¸¡ÌòàN“ݽ÷VŽÆD’\Q+‹ rÑ‚‡]ÿ •~Gì`Äátâ pÁ»¼«ÏÁ†ÜÑ“got~µ›W}µ)}Øç"ãõ¾<2;4XP+Â@:ÞéÄÝ\¸ZwÅX FgH¹nîèûÈàoî¢^Xuóå ¾ÙE£œÀóòöÇLX²%Ø_ñ„»0¦A^—aÜË%ŠtÜ´Ü“ù¸ïz;‰V»á° R§—h½Ï®t/ª-Á.xÐ2ªóˆž’ˆß!áÊÉŒ3t“aŸÖ&QàØ(¬+}ºKWÕåÄ£úifàp4VmR0„b>-„–m>f%C¨}"q+v”–b‘vøD‹!ëc¥÷<†–fõ;f}£í¯¿º—ÝŒ‹Ö†—m.¼X<ó!Ò/…ObYÓ~Rïà€E(žÂ‘V°pŠÙ–ŒÆß™š£IÇ;ìÈ]éÇМ¾qEó›œX"t¬ßvø×]|X r`Gœ\³¶0õ_P)G†¡Ê¶3'CkÅÊ}Щ¶2xÕ“ûVÜ/CSÎ}½7¿ØjÞkxfâ2ìXW0ýžmVŠõÔ¨aæf¿œÂV:oüV˜Õ˜Ò8 6@£³CÎünô¨Jpˆú¼L¥E&ÊÜMª¥´& CBÖÌG“ÈO¨Ÿ âbÄcÓÊÒø Çyw¬É¼61Œüœ¡¹<ÐBKŠí…ÑGb1žcÌ®%¨6Óé4Ýq!”fŒ\¾l)­¨'„g èšY~¹ºâÌOþ3÷AŸßu á ¿‹èt7ë0ªÚ$Öow¬'\¼)ßaÔ²ÜGT*'|€÷Ô"VN(®XíeKŠ=¬'"]–ŸÏˆ®4ˬVŸSêò˜ÃÚqÚ(uÑxÀÔpÆIyË3Ðà_¹lvÛhI‡ƒˆÄq=Ú@ÞÄbª*Š"5Y;Ö~>Å1IŒŸF¨<è’ÀtÖÈÖ„m< |A0Ây™4è½ 7è‚P² ¤]Ë]³K`“à¥ý“-ª)Ü*ÀЮÊh 5 !…µÏ!cA¡pŠKyœ’óÚ„Ž j³W+ïNh/ßîr­ø\»pÐ&´Ÿ,©ÆzÛ¥«! #ŬE ÷ŸÿÁד[¬xS9´õ`Á“ù@„i”®T¨ƒ¼úM*wâÓÉ—a09&gx'‹¹ô5ô2—k-ÒWŽ×éžOV‹—¡Œµ–ƒIÁ"?æ‡ øÅ/×L*ÖÜ=#5Zæè‰ù–•|ÜžGê&¿./OÚ¬'mtfr\PÖQ%†S&§69è“U:êvD¹‚ˆHå„©$þ˜©¿yiQÜÐq÷A…ªÈ³0Œ55ýYߟºåùûœGáíêñ0P=µ÷úzgG¥Ê&ßW±û’ „¸ý˜ˆ|Œ¹ÓD}è’¯oPLTþ©ël^è3Ü¢–ïÒRC¶b~²1…Ér°¶}|»peȵJvókÏhFwSÌ. z\ªß{ zÚ·rÂ^2œ†ÉeËL z¯ÂQÍ`ê;f´.®D£ñ·ßº X¹Tfºü€ÿF„„¨mD~Hk‹DÙ[¢ Aè„“ ÍT ÈÏ‹,­­ê)Ϭ³ÚStzQÃG€íÏj?UôÀa öY°ÃrXêÂëÑxtWYó³)O§* ¡M_¿Lfײ„¯Y=>°ö Ÿä¥íîYýÂÓ¡?˜4…áŸÏâ!ßÀà7Hí7ý®º“‡kÖí„Ü&G·€+µ(q¢ÞËu³Öq>lH@çhÏt…,¦­T¸§ÖMî§T̨×~’§ »Ü ÁÓG©GÞÚ¡ê—;Ú™Ïà ºZ¸ÕWZ—…ÿpD[1üÁgfŒZØÅì·#è¥< ZÒ­Ê^»®Òjcî­®¯(¿ÌtɳD 矊ßðÐõK– ùW¬Ý¸üϰÄòD†(ÔùÀ1KCCý³rÿx³ôÍ„gÌ´€¡mNìû«°Oâg±0à•e£$CÉY½ <…ÆDÅóíqN­ž¼´8ëEÞ¢aì^À ·@'³jJJB“psÐ×°D¹(ÉÒ‚ÂUeb|ëÑmHWŒùí”ôh°(Ù`¥7úO„ã1®b5àÇÙû¥ÕŸKS_»VòÜÕÏè,†wHîû>7×¾4ù¦!“º˜íµfͨÀ?Ýxé"ÅíˆÈ%ëã–¡¼H0@½@Z½òÜááâ¹Láü¡\B\¾+»@zµï˜™!z5#úzø=Êy*sƒx3NÀe·bŸAEŒÎ;ÎÒlnú]§rg¸&ù þ0,p¸›£‡ h¿HbäHc6âãxé&ÙÓ1ŠÃM›‘M‰æWÇö…Î µ­çå(76]Ï›ElW—Ûu(Ðå7>¬C¢Rûb«Ÿãg~ËØþ ­)L¨šœ$ {zTßÞ DESÖìñ{«§üÓt3Ãûb×ÌmÎM¾" ^9©\«ŸCV#Š“ƒÈñKë+9SÙ28뜔U߯a‘ŸÀ †d ÁaA˜%ߢÅP?å¸<åL¸n¾]ú ÅÇ{„ñŠ€ëªvA-€‰Ø£~¤«“3ÚnŸÉðpsþ·ÏdûõÄŽ<ÞÕÔðõ“eÑ-Óù‰|Ꮀê’iÌ s°ÚT¥X»·àp¥>lžK/€â}quõtˆTDŠ'ž”N‘׸s±F¦5árÍ–÷çýM=]ºÞ{:ƒTÖ,tN¬€@k9»® Z4’åIº‰áf ]#¡ýP\Ï…ŸŠæË1ß-ŸC‚‘Ò´Z¦r{QÍħÞñ:A"ÓÁíJåÝ%ß5Æ!ž)ñµ$“;­øâ-d~wdYßG ¢O¹ÞœÒ6´¦w|‘â„&©šýgîtèˆo-žñV«¿ÐB. 7O w—9f $Ñ[:0ÙʰGWIzl22 küÌÀ<øò{@p„„ÿXXEd#0J#zؖܬo‹¶îÛ"͈ bOŠLf)Ô}1‘ÆŽö¡5"çºèöLщ›É„¡1Gl×\q¥eÔ醌¤ñ ää•’£cÂ`ÆàC`cÔÜC­¾:Õæ(q×>½}ÑM i„SªŽD|Þ `ªæô!2”5æq)yo|Á2‹ãÍœ XjD݇ï23¾Úi½5l%zú°3ùtŸâ-^‘(JE©ÊZah o.¦¤¿¸ÈÐêàLÿUÇJÝÜ—rÝñÿO]ôÇÔEçLmÈœŸ{ûÿa[7 %]†<Â9á³ÕL1ˆ|ëˆm3ݘÃ`¿PΦsXÞ¡ÅPS)¬Lo±8 þ¡GfD6ÒUôÀôàäèÕÄßå_ùÀã483§2Ý­Žp?áä~šœ¨8 žoïÏ*xËõê6«È?< ™¯®2~pߪ`Á§d€EÙ M¾#v-;><‚ü¿Ð·>“Õ‚ÈH‹ý8ö¨»¬é…{ëÊýÖ ±¥#Änä(`(NqŽ9G ê;Q>Ú‡ºÔž– yi]&‚¾Í1Ŷû?`9£€‰Ú~ж¸cxøÂŸå‹ô𣎟_Úë€a‚Š|ú†«°g®ù‘=åò!S¼76CI1ý‹• »hÿ@çadv°ÓŠ4-“›]¡p•V|"бÑc&>W=C¦×jüöPÉ„¤[?½9œ5ÑqÈ¥·'ü Zij0ZžÇ3€ö4¶0ñÕÙÂÞOCO”Û4O»°—¡*ìPØ£Ü6Ž OÁ×`PmµÿD…]äÊh﬿¡À'…ùø¨ ‡ÂS{„źÝÅþÓö˜³4í¬Î¶¦³ÃïÅ-%¦á#ˆÕª;Ñ~ªò±8xf8(Nœ“ö•äÆóßÁ?ðžÙMô¥Þ¾ _3ñˆûÀÙHÈ…ßîïx‹LnŠÖ]HƒÎì6Ñ´I…øô„ï}š»_ÛmrDXÃðVK8&ïZËJÌc—ª7‹ß°å64F²u!þ'bõ­ß”6‘Öx3DÊ—éVL2^‡jïÌ;¼o]UI(æ-ä“TTÑqÆ3¡³gÈrtƒ<ÿ[fkåhhî¯g]*Á1W>±×寬zaq3³;‡‘‡Éô&cükð„ÙUG¤¥"[£|õ¥}ïÅw^äüb:°é€'¥2æEÕ±Y—Íš™nO±)…°ß!| X5OÚ±þÅfœsÝ‚yBÑ€ñ+]?êjÞ­ÓÙžq’3ï¬/ѪëO=hg•!ŽõWÔ£^I#«?hÈ3eÖH†ý¸?›U\î:öïaRk5o×'€ÝîõZâóTøínÐt"c¹êŒò"@î%vjY¤·6¼¿*™ÐOý©ŽöÒî³-•Ö=—ñ²«¢.IŸh'ŽÇ3<âX.᣽G‘t Í1¶™¦S­ n7²%ÔL ³Úãÿ sïŠÒ͘ޙ¯x·_¨¢ƒ„™ƒ¹â'¼&Ùj•âÑ·oõ9ß OÖ] e• Ô y’¤4é­=—sÇU¤–Àd0Y(]¸©ß«—5So¤ÙÀ—$èŠX*•àáÆ«˜…»KV,­X=T·.:\F´# ” d¥‚¡{,¶)Æ"_zo5}±º1ÎLЮô(IT˪äÑ'¸šÚÔ½ÓÞ[Úú6[Í_Ô¬Á Ô—ˆ¡GÔSÿǰ–‹[ö|(®©à†ä.ÚµT7Êxì‚L4ϬÈäYkˆ°3l[žôÀí†ÖI°FÖAýj–î\ü©‡»ª«~‹%z‘„>àø½]HtËPËt×u¤£Ü5}ÉIŠc{e¸Ž¨TN,ùlÒ„âì±ÐJ|tû›OúÝØsŽ¥­IŸ Šå;ÆHεã@àÄH{r³˜0ëõ²ïüÚ ~0ÖiE°:ÅJ¥ƒ¹ç[îû ûJ“ã,¯SÈ4ð¼§úâœÈA£:qcÔ]LÖyÉ2!jšîùÊZÇIÄ„yÍw5BL«Ù"ëŒÍk§î®o#SqªUcb†!‹Ë¸‹z6ƒøl!¾Âpë|–ZTì&ƒNZ›ážÅ“¤DÎŽéG=‘Ï#sT—ù} á˜ðvÈÏÔòHñ8nÈîký©Ü´¼s‰ÀÁØþ§‡nÝ[­ž*á/>ž±é‡ñ' jåÿ~¯bSòä~²•µÐû£AX®‘€Æá‘4÷1îÂ3êÿd“À×gÐó\W# vQ6qV AFÕ"Õo‡£ælö¹ó p¼»¡:¸aèŽèížV—_£Y– €Ñ”V™k8\)˜¿(ö6½uYpOgô•Æç¦þŽå¿ksÎÏhÞ£ˆòãóþ¦30Ä©àËz>+Ó–_è{&Ä­ýþ2 ¥¹CEÔ0¬MF …)Ÿä¦ Ö¸ Oî´TÞ;J(Á! SÀÆ~¤ËœìAç—Fè¿/¶¬¾0Ž)dǵhña÷nãœv{†Á¸P¼Añy_žóì};Ïë øu‡OÓ­U÷ME‰Z×o̾Zœ½È¯Ð4ƒ_nœˆéujËMê²qfï•8‡Ñ0T¡“£äø"ë•âð¶k]ÑÝ[«£'ºî6¦ç´¿â–P  ¬.*H®6Üs‹—^]†›“Ñ‘jioY°²l^Q¬hú>Çc§²ƒ-CšÌòá> ôùÌnsZ÷"Äöìt «þ¬ËÕ‰ˆÁc°K¬Ž8©ÿMv5ð“xÖâA\¢÷§ÔœE_Æ&wÇ-K6B™“ºÈöÇ7¦Ø÷Cá¨ÿF J)ó³›;UüfÓ˜ ‚±¤£qy·¡Z¦9¡ çö´ l‹­zÂeÕ鯓¼Zø./¹ Á~÷Çvq'ìx¼®½óÐo‰òKW:Õoò^€ÜMaGwøþLÃS”[‚ ž :d9–þ~Ô² -?(>¥B»EiªêþèH†gŸ¼ä –¶Ï^¬¿½7Sì¢^³}/†ªbÑ1Õª·|èVõGM%)ëh,·îjfCÉB•õÒ#þ—Œi]"r+°W"³Üd÷é o“j/¡›ä¦†ƒÒwZug[¡Ç2JBdA[ȇ.ðîß?å~(DÅ$~¤(’+ZûÖuš®¤C)]½#3šÚ "N×\Z‰°^+;dô'vVN¸/I˜{IMT÷5I_E¡uÓ”½l^±Ÿ ‰Ü“eµÑDg dCWD$Õ’ƒ^i*Ý NØÜtHŒÚ{ší (‰7Wàh’i° 7мJîù@`Ûš]B(Å›ïóˆ–Ö>•ã¤~;9¡uM€®«Ð¶˜Ì©.Jm3)OºÝ‰H±æßÔeOü ú…l|ãQû¼Ú#(–'¯?ß²ùì·z@év·š Gü”v½å£Åݳ°*vJûŽßŸz …ß ë[PˆI_Ä}Cgr…=ìôöø5ò†Ã|7T æƒRDsgë¡ .S™ Y~0YÆdá‰?&B’²JE?¼¬èÚÜëSUç§ÐSÀ`…Iïº}‡gâIž½êÅÜx­tøÓîý‘‰–TsXuʆ ]P˜½_™-¦¶GF´xz³|»sEî¡¥é'Ÿ¤wMpž3ŸZÑéÉêïYÌNg|x³¾UõuËÔƒ<¸Ü‘Rr1’}R!ï‚þÛÖiacõwy÷4¨%8¾åö„i¤zÇ0g‘Ì`胥eŠžbÙ8ë++^<½†Ñà-IÔflâ+›w€ªd»ÈðH¿§D—¾©ûæ«Ü²¾m¥†JFeF‰âØåu¶Ä´ÉýiÚu_yfš¯[욃H6‡V›ÂÀ„*–ò[R FDô±`üJM^R ‡à·;c ÙÀ£ŽÈ믚N“Rà–̲Ê~B,+ <*keI ö+ ðmOC‰Ža¥ùÖdB©VпþSw¢âÑ#J–p=ðäÉàÓJö*j^Þf—gI#jî×±P.s²L!Ë­¶ƒÿʇàé‚##pÆ2ì—.àÀƒpóÌn[ú:Se~Ò_d µí5ÞôUÛ ŠKJxâz¡×þÎFÎh°žš{¢uÖ ÿq NyX škðÂkrù­_¦³Ž×þf¶KY»VGT@‡ -3fìξ#ÜÖ=t(Ü*M€àäE aÿ}GmÑiBtòÈ"JŽÃë»s@›-ËeÉN|Àd ¼3鯒îÁU±Rø‰'kþìŽjâA0nÁÙ¶%BHåtëI?«ƒ °ÞpII‚Ž®5ý^ÆPøB™°7Qîn÷;jc}a±8zk=Ÿ¡ê¤:-±¹æ]9ÚÔŠ½¡ý|âMQ„9ì1a×gðŒG‹:s&yV‘¡PÅíZWü™Ü7­[â÷H%H/.©º—OÛQàé·Ëà^9i”–(àïM¨6™1*tuÏìGN?V4˜DpH(UV‹ˆ„ú‚•:3…I 6åûÜäxË«ëY"vC ¥ÁûkOâ`À5/ç¤\#¡|ÏÏ#ï¹åùZMo#e¹7³9I‘ø®)¡$)<%Ú¦Hì-úÆöÒŒÍWH+òé|¹T´ÎdCaˆ¹è¦‹£ÒïÝÏŠ š(R¹£ÜÆÈòé—( ª$r׿qt·:ì¿»ú<…ÀŒP,ÍŽÿ%N™Q7ŠJ<—S”òtöö©R×%–Ñý]ËÙ|1\ "=”¦ç’Ë$ë6Æ5ºù‰E©2pñÉòS¸äÿlmáœÆÉŒÊ¯KÞ”„‘.&rÔ½Ÿ*ó ”MÙøÀbã!+¹~Ÿäd™"òxX/éKÆA&°*7¹‡AðÛ|,§²Ž&ðoV2¤‹ÑóŸÀK|¨¡áÏ캛<.v!Áà!öu“#²°ñ"1bÌò^h‚‡€ƒ#K=X¬[šÓ#8†„W*pÝÆ?½$ó mmhwSþ—ßA-ëãvòÁ2?`ÁšçÚž€8}ô#窱8•4{#ÛËe°3Ù\1<˜YˆQPŸÂ‘w2,}vÎ1Ãá‹õTrñø2™Ì#Vccz˜$šÙ¾ŠÛ h|z>òD0ßWN{C‚™q7œ4óæIˆ}e-«¯±Ó+Ø1È`PU`vŸë¢|NËæÇÇÂÖ±û€Æ^ŽTâFûçðî#øwñü; þsçðísøzÿbìl·?‡rè/áÓã2õPôc±Z‡òzìŸ.+r‹ƒÕþÝÜ‹)wjÐÃL›‡>2{¨ miﻄaÒ¥—ÉÊdkÓª3òlÔ©6Q{ö˜æìjƸ³@'(£F&3e N»ÐçætÃóU,…Øô1iïÁ9‡€W¼8òu‚¸@LJ›2žSʲqÑz SŽ™Ÿ Ñ´Y}°_Ž­èäÇܽ»ÃÅšýµ«)OÀ¦ÕHÑ•*hf»î³³n©U±MTmü°¸+5ß“´'[δ¶–û´%M…|Û±^ Vxíoþ”6`Î:ÔO…p†ÈMHÏ–xx7ö3i\%”´r¿>`UÉè·5ø|ªƒa:–›_‘smLµè—² Â~þàM¢n€ÌïebSU·ðE»”ÁR¬#F¾“w÷©f­#ÂtXƒ\o2ÜÇ·—Sé…,‡ƒ¼t¼†FÉi)'¶Ý˜êphþä0(ûvÝ÷êhªg ’kÉáÎ8yGŠ©¾O&}ÏçrÒSDqÓGÿÏê PÉÛcŽƒâÇDÇ|£ËꮀçÚ.Ïm ¦ª÷ù x49¹LÄíý¥›l…_H\°MÚpJ(Œd‡YÃÅÑÐtˆt:ýL¯o"°[Œš9Aù¢z,| ŸR A¦ÅÌ{®«UƒîìidàwÁ«QüyÓ ±­À‰òÇÛ¨Ç7±½ã¹\X½©F´c-Ô£ËïK}øï«h4õ‹.pºžIÉa;,m ”˜âz& ¢øÿsBà‹ó<[†Hw³äìMŸÛ¹z¼ÝËTâ²â8“ÍGdè®~5éTL1Òá¾ÆÁÑQ6@ÍMÚÛvGƒñ^·ÀoÖC¥AóoRD6]îS¼{)y‰Y ªhQ&-IÂØÇhšÿY}‡Ó,·š5ȱMÞ“äF±ÞD…ÞŒ³‰eùý=¥b!)„Ç`ÿ ¶ï'žäp1Mç4ü …ù1“6b €:EésK°š-UcCSTÅkx¬Q/¹Áî²÷$6·OêHzuRèà«'“f¨ùNìþ¼¤¯‡ñ}éR¹ï¦Îd¾iÅŸâÉz¶—`qòHE·ÄˆhI*'¯Ðˆƒ %«¹ùË“à’ɺÖ-ì¾âøuQ>bAÌj¹¾à$ǹ„Û ²Ýª}¯H«_†:Yn⎊ï%Û»ŸM…«e‰xôëòÕYûÈB\ð”[Š‹áþÜZáb’:Œ Ç>Ä¡¿ZÜ )é=1¦“̰+€i®†´º8­£ý‘åÀ\î’º—©•€¶“] íÇòžg$ ûHÒ1:Ÿ!|ï±¼ÐTõ(Í´I•‰f ¹…7<„:OgLV]Nf4/6‚ðœUéeD”6Z¹þn7—Êݼž¬$·iuOByŽ®ÞCrR)—ñVÜuÑ,ãöQºZØáj|±°¥^úVó¹KE^A„þP¤MΨmÎÁ¯Óˆ»~°ÅHüŲĺ‘?CÿeÜíVž/ôRŠÑHŒd'7üòÀéº7uÆe«|²oäM ©ˆ Ú¡][’޶pûÉbÊ— ¸!äk¾‡ô1ÛÛN7rpˆ4¸ ÷6/«'¯l§!¾Yì×åoqã­m*Ô:¯m,u –Š÷¯¹Ê—ˆÇ I T¯Öw4þõ>6ñŠ ƒê`È–eiߊ!ú¦ ™çCõ%/ÿ&×ÐSÛ–´9!¢ ¤k¥HÅ 4b‘H´cé b+üšsÒSF=B2ò÷¨$Žénš”>­7­ò2<Õ$üã’ºÒ|pYWFm‡ ‡š÷œ_„€ËúåS1y°:¸JújîßúÂÑÓÂæ¾AµÛ†Aø¿êC¯’-<óTãùÌß½.Ȭ˜÷Ûæ¬šëˉÛú%Ó]ú §ÜàÓqÖu(çRዺ| zÔóÄí…´Mr«½1¶%Ù8UÔ >@†–ÞT‡9~k6 mÞHÜKšûzÜ(ÔAÛ‡7]q§?#OÁÔM­>Í÷jå(‰¥0ðrÑæn÷sÞ,©l@»‹;¹à¸<>Ò$õa }@o¬.Þƒ>Àš”\Oð~h䆙rx¤~5V96üÖ-õsÔc™îÿþDȾ,zæß0¾š"^?g(£dŶ¼"‡²p{vÙTãn&‘iþ¡ˆÇqV¨ %LÎu0ÿ—”‚½àfƒe}d߇svz¢X5‘#ÛÃq7AÄ £rîÞÌ[v¾Ù œ"–èR{)ø½#Édú/Ä-‰{ìJL|¸õ°‹d«aæTú1»¦¥±¹¼F3ÃLXÌWÎ •XÐùK'úx›r`NÊ!‰ ·=Ç0Ú*k¶aÒW!ê<"84§d6GÖß øB›‹#ÅMO¨2Õ¯ q˜1!.ä}[æè•EÔªô¬\¡áÏõ)ùfq´‡3£³êA]œ¦7õùSlàOb£Ÿ_C@)»s¦‡Vt™Ñ¥kVØzÊlù Y@Å*<¨á鑊Z±úûԥ̷?Â32ß{±ß´P¶xI[*ôÎõ’þ–CQq˜£’ FîåUžÄ‡µÈ–ýô1a™ ™nÈç}ÉãÅùš«:æÅ6’®Û_&•¤ôü}®†mè&X—4ÿé·_íaa»Ó Õ²±ÜüÏÏð$/k Mæ¾¼-ŽÖtóa< v:iUK¨!‚‚À€ -`‹P(]yÒ¢^MÚµ¥µŠLä=KŃ6ÙðØWrîÿ_™Ù1S¸›+»÷HBûîB½µK§áQ6\í?â}Ïj_UQ*©èoÉä 0¦ˆ½,q´ofõÍ?yáõÍí ]¤ppƒ¼.äÞBÀ†&Ñô|e5åá$ #·éª¯ø…N±s f˜–P ›ÃPCro3Š·^Ö_eþü®M4Úl9dŒ±ÒÓĉœOD¨1ÓÑ·Di¾’òj;oÕŠÃ×%g UÕ¾¹I¢Ï!{› ø· T­þÔ‡¬à!d‘Z n來}Ð!j×tÍzéÈâJ²/B®¨Ž³ñMØ‘‹÷Ðw'%ádÕÿ=—sTà 6ÅfûIȃû{µäM «o³þ¾‡KŸøøÒäD߯Ž,¹Z§¹›cw´ÑÙØB¤Š0׬ÓöˆX*Èe|å ±`Ok™` Þ•Ë¡—Âßd¨ãÁ”.*µ‹gn%èµwÿØQ64æ™g™^ÙûÇék~ßÛå@סkÛøþëîñ$ ñ(«Ôõ>!ÿž•×5Âi?®ç??¬c@,¥.EäpÝÕ µuýð5Њôk€ÿfQË-Y‘%ÄpæãÑâ|}_céŒô2Û ˜ô¹Q%Er_ëöÈ¥ܾ‹à¿ôkMtë­;ý£Ë4gZÅçAŸè ʇãH¯ö‘ãã•âîNyUÎ ˜¿afÌ£/Ù*Ó`å®Ï„çÞ@¹¼#8cZ€(WjÒÚm–l~¹ÇéoùŒ:¹¦Ä³è%…Ä­ÜJ»ÿ×6BÄd†' NÁƒ¬5ñî’óO×4†ååŽ\œÓc´°†yókðr Pì_pÀ¦o"µO›¼§ƒÿ:žšp˜# kp®yc%ëFrØ&†p=ãÜãþl×äõ0'|ÿ-p=psž%«ÑÿMÖYÿ6H]3à%ìIõkΫ›çéçeëÞi÷]mD# ›·å~$rè9àHëBTR‹í,ú*eâÝæÄATý»Š-'–ÇØ½Cj *;zŽÜ»’#gÝS\9Xè Õ«¾8ð¸žJ¿ïòWÅ܇-§’9Ö̈5}4™ê¯+Ue“OGÏ t—´#Úð‚M²ÁŒ ÓP‚eTº)nÔ£néb£mœS-U›®3" é^ánÖ]Ænf3~„ÝjH}„™ zÉ¡Ï}RŸé ÃVÝ“©ò® ­Á¹DÂí›ÊÎ!^^qnµ¯…_óªh›ÅãM—’‚`ì *#«v3&gÛ6f« w«ŽçÝËMš·DPi0\t½ Ú§'{ʹoÅ%¡HP)!5£# :°hØ8,ZmðVNâôí ?òˆä{õPàÃD)ûÂ~Ä'´fðo¨ÔL K7ÕîJÒx¦jÂJí^M!ØíXCc¾Înb3, $(Aàëν¨*Ä´;.:¼ýX’áWdns°!ÝžL÷Xå§âê#U ŸØyå…ÁÀÅF‡PŒ?æòO(Â䬯Dä°^“sQ½4÷°TmC{x7«Uöµ¶8gáàFÒëôŸë«[â1$‘MÌÄ“ÔØ“ÓýÝ "œOUPÚ»$¦Vè’ÖC!â)ŽÇïv8kóO¾]]Wâ°4²e 4µ]åÓëΩˆM‡ÕÇ[ÊçØ_´‘&l´ïd¿Š¨ ­µJä6¹ù °‘Ýßé‘kŠ„7Ê¡ÌC!^tâÆJ!¶.&eè}R‚U*È ø9«¹ê:Šú¶Ãáf²…/äÚïÃ!å·óæØeÅúiÙ‘¡n­ôÐsåªm¾Lâ§XvWvÔ\‹ýÈEïËÈ!ƒÀl¨‡F¼=ÐÉñf;«ôÀ̲)ÊŠÎ"Ùxb~ê\ ¹" ö¬þ(W¸ÒÝݵª—1àÝȬȄ6“r»>.=Àq-ý4M ÂßsH¤–#$ç2½0„¯‚¶¥$[,U?ÿT؉‹tÅ÷!`ƒüå+=bï莙ðÔH,T4¥&%cJÓÁ¹áà:àdfƒ®óH+j æe¬¼î¶[Šºãšol±2×ã7 æì§ýR_(m|y n኎E§0‚á`bÌ dÉÔ-IYÀB¦kŸ´à_7Î…•Á’UÕí ão´¸û™Û†¿'‚D*´Zº6p…–ÄÇN濳S7bµÊ¡lÌ n1–i¥hÕêÊê-e†›vj9a›301¨ðñÁZ|¹èßÜä ©Hôî çÑê†ë”øÐ­ö•}ú1“>”Eôª²jÔ½^ÙyG91ç×b?œø°sÚa0¾¤ò'ÙBqB1éþA1K’ÂËUWyäCýo¨B/UDä`ãÁ†ˆStËT‹„Ø2tWf–0%ÓFfßó/`l1vð˜f5h6‡¯^›~ŽÐÿE|¦âV¼l|DÿL¦²t®ZÝJˆ=.“ûè¯Oïá™:7S±#©²*͉xÛ½d¨·XšÞa³yžž\Ë㾊adn¿þE’ïòÄ‹Œ“¢OÑL´"®*}>ñ‡Opc͆©ˆ ƒ%"1Iòò7<мT.I¤¨ðéxÊí³]ÞEªc{0Þܵí±±¦ùy\PHÏ¿e½ÏÜ¡,QÉ`û‹Âøéb_²8èÌçz¥ú³GÙlîrI÷ûQ\XŒó]0ýˆØÆê¿×@[¾Ÿ{‚y¬Ÿ mìjø7\ë lF·ÊB=È8­Ñ5# Ó¥9§¦Ý Ú‰ñì^\`€ ¬º’­i^Wz Ä .q7'šßöIqjÇ·Œ7/Z=WnAŽÚf-Ñ„1fÓkœ;ÀZªfìì-«KCL“ iwþYãQ‹)òù{2–?ÿa` %šEÔ!ÈØ#ƒ$wß‹u†M™2¹#66—³*‘{F->Ùc›Šz[ä¨ÕÄî¶«4NWz:%7ˆé'/ãyZ1¶m s_™÷qÅ•"û¿Å@ø7E|ó#OsÈ.«Ž¥0O¿6›=¥‡®˜¯/mRÏ6çž"uJY5ÑψÇ“ï4™PdN&¯÷.¶® $Z€gªcÙr§u¶¼ƒÒ`À_ø$4¤j˜á0okèßäó0ÌÇÜÿtCû[jW}#€Ÿc‰>g1ɰ ¦ÙÝ^ȽB0ž´_©ÇVŒCùÈá ð¦z!ÕOòT6È#ã€lˆ .»aYˆ?ŸØzI¦[Ì}KN¡·l œ·)d<žÅÔc ÓDüïâ=0Nnјn!M–êq~ùnþޝ´ÖÑ„Íu\{LµÔÔÜÆª<ÂÀ4íÕ8¾ÿP+HÁxà0û‚Âÿ@RRËVÃQŽ­t›u®®ºíò˱OÅ‹tÎLi½ïL9h“z¼Uù)Åò´Å ²£Û%3…Å:޹o)I1îTS-oö›¡Ï¥  | }qà”òfüc3î±Ä!¿O8˜T<­']Ü« dbìÉ5ò´‚:<ù”Ù&õL‡nŒ ±`$9 ÁOF1öxù+ÃP–À޽ku° ê)ÿ2<ý¬ŠÒ$¤Í,k»n’vßL¡«ÐQ’«8ùª©Í©Ì)Hò¼µ }³»lEd Y;yƹe è»Eª, žßAÃÙ5_¶eö'Û‰¾î¬OàáY‡²´n}GÐn"ozº”ÑÝ›éÍ^f)I„ËÕUì`¼­–APR\JŸ¿ƒî6 EºkêšúÙ ™þÞw¨üE¢ÛhÄ´pé¢Ò×JP€6 ySEE}S…;Ðiù¶Æ­ž±ŸMë œÿs OéT[·€v0S:ãΦØïæ¥m/¶¼˜ábÃÊö3f¢H†S<.ð mxrÃ!fËAw©Yü4º;!]#µüÜÑõγ jº*&è3­Êïy,@¬Å‡i RfŒü‰NrWlcÝ‚ç#"WóštþÕü€ÅÊU_@$ŠOÓ–0Ý]\Å®6?åúÄÛðÐ ±ý„ÑK8ŽîUÛàwãüi ð’´P²3O—ûT…Aþ·fÔôò­äõvÏdmËÝ/l’ÀËbÆMÿ~ŠI©ßBcKƒøKe·;lì¹Å²¼~ˆÃ¼sÅC¾PK“æˆÛòÙx“¼?6çS{gü{G¼|Ò%¢¡ ®†à‘}GP·‹ÐS£ºù-IÐhË—ÜXQ‹ü4H{yšFjÑËa'ã  “lŠà½'ë1¤¶…°Ê¹ÒÈ”«Ï§‡ æ2ßеkQñqÝU†’ ­‹=ü¬`wüþ°ï:®7z¤t”¨à¯¯H<¬I+ÊDêr¬>m‚ 7sv§€Á­Û»I¹´=¼Ìï“5hA›È ­ÿI¡¶Õ¸², ¿!+¬ZJš”4bÙȪ°éöjSqÁÜ7Å©QwÎH"O׉‡ñjknhPÐÛóý«IÆm‰ O<‘"Dª°ß2Ó|wïZLÏsÀ¦?Ý3VÔŸ$Û«Ð%CŸ™AX£Á4,ѵ žiÆ[Åu,⤗]Þ©¶Eº“ †¬1©-?ÐèGYó‡›ìµ.ZÕ¤Oí¿„ÌžáåÊUÈhÅÄl.+äê‹ |"©€l” ªŠk£!ÁR}Ùùk¸™z6Ùâ§z=¬È‚úÕàOæ4qþió©NÝ#•8n†„¢mY?°ÔD ]®>ˆ·…%ùwTaÞgÙáa´f–4‡Í—‰¦2ÛH#8ò]– *ÊÖË+Å•Œ88?Lí¶enz/('ñ´K†âE$UÑÛhC³vSRÛ•ÿHEaD Ф:÷ß”éÇÒ»Z·–0µ¾ûÜöò1 =C7‹{† ©Ñ¾âº$Ä¿Séë "cRߤè–×›ŠF4i5©Q7ûD‹F±!ãØæA_À¹fŠAŠ—/„ÈM3ú”÷ò~¦méNÁt0 œUÕØ¬ñÑ78 ›ix¿yy™WéÈ4ä~8…e2lrÊæÂ²5û—ü¥¸„-W·ÎæöV¸Þ®1¬§–&é9ì$> …ǸÆ:.{ §À±MŒjgî2ÔRÔ놑„ºûćéNAÏ`¤—ÅH{EUvY$«ixŶKÒÔ\Vk7"ûǽƒ\í…@M;ÌpÆCLÛ¡%õïÒ/‡|ryø+¡$ÕTB© ï³××ÖaÇ|‚ÓXO߈11÷Pb Fβç£^ž¾aä8‹ïÿ Üû½Ì{›ÁqbÆRvÜÑõËEY;ñþ“òäÙTËìû¿Öƒø6$Ú«4–j¾Õ½‰ÙTsoþ À®Õ~éÓÓfG#²:z,¢@÷ÛI¡¢šˆ¡…ÅôÌ-ʃ=9ª¤X+6¹­ÊfUØè¦.™÷ï÷"ø iÌŒ 1‘ÑÕZ¹Tn_¶Š“-n 'ÜQXBg©X×[UçØíO¿oý9þ:4sÐÔõJ É(ÿ"¡i’„!ØÒáWym,ØEQ›= ›ºó«~+0ÓšbÕýc«t¬ˆMþyõç\[ÿ`,Áiäl/¶¤S‹MJdƒ†2ð{¢$1ín:‰>ߘ.¹ù¹C±úl"ŲJS"§5Èœºvtgð ú4R ªN>P I©·mâ0Âï3]cãŸ/X?X”ÀËݾŒHk;”A—q%¡'L|™\\gXI K'±ÀS—C$ÖÓ½Û C囃\ºí(4ßk÷òüfzÿSùTL}è*£owPø”´(¾B(¨>”§KüìI2[gGHäˆbó'dÇ ëJ^ÄÁ9{¦ R.¸Ý@ÅAˆ‹ ¯hõ®U²e¨©c†;¦WžU…Õ£. x—ÜÕxŠ“¦×†µ¼õ¿†qÃ[ÙT•>DQ]ëô;»ˆÑ»­%£$ÒT†— ;g LìeÎwä‡Ç™q âº>êàà68ˆöð{ÎÏ54Ðûå §î[2¢?ÀôC…$× ‚l'ªD]U#Î:œá3&Z ×gƒDÊöNüú—ò¼Ë:‘X;Ñ2‡¶ÿðǾR3_ì2¾Ý ¹‰ FFÜ‚PC¥ÞÌiO$M7v¹\‰V/UOªAú¦Ñ$"äJìû>Ìëgî:/Ð:šÍ[]7ˇ™+ºöådD#"$ŸA¸t[ßÏÚÇðêÀyÉv\ìÑq·à™êu“Øúò®ïUÁ÷Ðè/G+±Açn®â`ø†[KÍa÷êj‹²Ë‚s›Ò0…î³õu-‚ŒÐ­™öι¦Ä\ãg0'õwGíÇ^*ˆçï0"È_ð(Ÿ<ø•¯ö£ä¿­„Ǻ؇G•×ÄÀ\ÛlICÓáäH]Üžcq8Ü^ýT†.Ü«(…ת^+hO8;}èdrv£²åÞ õ±ñò(= D§»[à0bI`r¨ ù"C ò¢ò*ï±”ÆM°âÞ°ê¼£|Þ”ÃÊ.ºU³ÍêJ“L¹Ö0ÃV4á²…ÖZ}áŸ.`ºÇ"žûgJ) _‡! èç\JQíµ\w¤¬ÓLîÿçðí¿øwÙü:þþgçðìÓøwñü:óþUcøu‘ü;Œþ;ÿJã2õPôc±Z‡òzìŸ.+r‹ƒÕþÝÜ‹)wjÐÃL›‡>2{¨ miﻄaÒ¥—ÉÊdkÓª3òsýÀá4–‡Ð|‰2—p}y@oÎèt3TkšShØbpÜæX}|y«Ó{wÞÙ¾½õW$ ] ¨ù2²Ðb,Ë-PÞïÕ´ÌéB¼²9'’G«•ÀÁþa J³'ub9š®2µ®ø˜@i’ÙB#';,¶ÿuí×íãl9n“ô€L÷gár ­`û‚œº kД¥e 6%ÍReÉ%ÈO‰àÕ ·)ÕZ¬„$aÀ¦«31Jtr~ Æ›ûã«bÙlxê±"Á³ó-ÎÀJ:r)àkäyÎu ±Ú½P3ÁMˆ×ªÓLE»`þ½çW¹ÂÔ›;½†h2n:›ÒažëEwúh> /pH G€áÛBö$Í{ìz«þ<¨!ë““°­z¦Á~Çxœ»¹¯—v!V( ›rJÛ†J.€{,Þ÷nÖËü kQ‰'W«èvïÐ?õ©«Ûl§l¼§—ÄjpÝaˆ¦w§\ J›ÅÏËðþÂ6̯–1&¨a[ ¤}lèBÊ]I¼\@}1df¡Ò·÷íÒáÁM6oüþpÿ$µç,}·B@-'¾“¨‰ù €¨šóÔ˜<ŸŸx„Ä=óvîußa*Cû$9ûòïéÔsɃƒ™Òp/ÏœìlG‚º¡À¢6“måusŽüyàL±G8zvÞ< ‘Á—ŠiÇw§ |…6—/Íc~UÈ? õÌnÖmüôÆÄ$§å4zØ'"RØ¡~'$kGÚ¹›< #YòrÝŠ¯L-àï±6–¾¶D÷ƒnO8fºÃ4ˆ/¬½ùB¤ËRæòé!À w 4¾ì¬¹Q6.ypCÏ}\4°qoˆ™ÀÏIð/&Ú÷Û}‡Ó쯙YZ|ëEÕ@Ö2Ãs²ý3yM7–àž;cDÐP~ä…x ½Èƌҡ¨ÛWÜVáOy9 kàRÄÔº+Eù ô?Ř¡ôv³ñ׋np¹Ï*àÈGÖàkôµ±`í¦–¤}î/3_Mkrăl!¡Tƒ”¥CûRÙ~Lð“âÉz¶—`qòHE·ÄˆhI*'¯Ðˆƒ %«¹ùË“à’ɺÖ-ì¾âø†‡ô?/à¹Åâ…I·êœgŸ³JÓüO25ãm!Ô*Þ4Ö¥>‚šc{¨¿-¹ù†¢–ß^²Îưí/âÛbŸsôÒŠð>+TŽ~ƒ_Ç/52p)åÕ¤)Œ˜½Ú!VÈò¨u:” ï#l?ǃP#ÃÿŸÎù=(¶+õ(ñR«TG[Þa&}áÜ<}›!öU÷j›³p# ¾R _Ád˜uK‹F>š"¿ÉƒØÛŒ Dž¡X`ÚIû§ ò1÷{y„vNK¯npIbç·éõŒnDv>t°WðÙãQYà'þ1VîWRQÃB²)zMÔP`îÌ›¼'¤çü`Œ™é—"‡dè²®§‰µÊ1&õv#*¿bè?C’ºafríîí¢­²o•˜ÛÙ ü¢qiˆ1\cGµBÀ{F§•XҷĨI ~‚;á\C%/O Z§µø«>msò×Ú!à”о–…DUÿâTLA¥®Ó}7ÏÔz(1ÃÃŒ>ד Ós̾RÙ‚ÆüÐýŠ£wv Õš)•L§^*£Áà[8:¥†i1΀‚»éÁ̃oÂÔ'Óf¾ÐÄÁ›Å÷î¼þzÝ?ä}[æè•EÔªô¬\¡áÏõ)ùfq´‡3£³êA]œ¦7õùSlàOb£Ÿ_C@)»s¦‡Vt™Ñ¥kVØzÊlù Y@Å*<¨áé  ¨JÔ µ7–ñ×ðn¼Všc°(òK–´çš{Ãòk O®ÎèE€yXƒã铦Ÿ½æ×KbôíäýNìASLÒ÷‚Kq!uT|œ‹ËqÈg*夫RœjœJ“'ðozØÓ4‚¶yÐ,†½4ÿ#Å^Ë¡g˵͈ c³Â2ÙV¨–KŽZ+Û¼"+ÛdJìp<·YƒÇ”õ!£Øtúáٯ鎻½XÄb°Ò_iu<Ç\ ÕY³Z4îËÎö?» ç¸F>×®û¡J ãî”qt\fÖÏð*<á… %ПBOlÜÊð H*{iæÛÐÀ:ùô Tàì Åœä|Ù©5ò|lõÏY›uEþ#½;x»+6ÄM=-øÁK4«e5>3®×_’Ä'Š—ÕÀ 0ƒ¦½vë¢/ïè3B3¬žäQ%%ÒXñJgnMš˜kÞ |ð «ãX<³ö–ƒØ¥Zi_}4ˆ±ù?}ñû¬¿ÇçËÆßʇãH¯ö‘ãã•âîNyUÎ ˜¿afÌ£/Ù*Ó`å®Ï„çÞ§æ*Š¥Þp&ÝÒ4IªÈ ¤˜‚CÜxÙÑgH½åsö/§øº-öë›!b~ßÇ%¬VvŠuðH"ˆ¼ðÞ,­^Ûa5Q å16œ«j%6©YI›ÝŸí­Lóüñ—ü·¤ÇφâV°>A¸Éq<ºVò ÌÒW“`ŒÝ~…„â»çÇ©ïä|Êöb2CW4«.³é‰)¬Ö»¨#%üQ¤q£Ø‘Z*g§Sg’Ú¯`Ò0 ÿ‡éÌHÿ?¡éÀ©ÙâqnçN [CŸ©Ü(ÒÌ2 <¦k0xÒJ[:&Þ}R3¸Œš6 r±QPa;m»"îG½@¹FšÂÅõs_McxÈ.³n]Š ÕgZ½Õ)iÆ?tô¬ãb‰[Û?UÜu€s,©s< @мœ(˜ á ‡×Õv¶—è Z`׫„¤XÏU÷Î5n@ٚƎòV«ùvIíWfŸ4ò"e†pØIæõIO{“'è|ä!†èjhaÂ4™µÔˆH9¡Å;ƒ×vhó%>9Þ¸Rä¶ï€š¼Ÿ ¢RuÛšëÿKhÁ6Í™2ï#lòÚCç…¾ >!¼óµ®zWD)ªÁlgÉštu$[%ܯCÝ{›lÍàÞô'”Yž† ˆ._ݵÙõÚô¡8ŠÐS‹Ð8+Ðêk/í–W¬("lŽôu§2Ùk•'…äåáÖ˜™W¦†xj^N9N>˜Ön¯6ŠävY”ûVv|úº.Ÿ—û©N÷ù¸håJ{'&úˆ!8yù¢ €¨Gå)t¶õÐÔo0:š²¶y‰ë<<@tûGwZ‚Ø3£Z«7xöL.bhíû±z>Ì:M«'`Ý "œOUPÚ»$¦Vè’ÖC!â)ŽÇïv8kóO¾]]Wâ°4²e 4µ]åÓëΩˆM‡ÕÇ[ÊçØ_´‘&l´ïd¿Š¨ ­µJä6¹ù °‘Ýßé‘kŠ„7Ê¡ÌC!^tâÆJ!¶.&eè}R‚U*È ùd &!‹òTõÒ b»7ªîf”IrV‰øskº¥&»ÿ=™ó¢†úð¦È“¬¤þ…›ÆÃëŠ,<&!vÃÍEÖ0V{ F<ˆ,Ú³ø¡^ãKwvÖª_‚%ºÓUÃà å9I@q€up;›uZ| D²1Ò1&똮ŎÀîJyDõÉLAŽh4M{¢Äc.K~rˆÖ&R%ÉŸ¿î/Z‰w÷`ü¥õÏ)=b¿ua䉭l!Æëu²ÜU×Ó{eŒé–¿͘æ×õ9n‘Pô1”z”÷nE‡/\†e)[„R™&)jÀmåZp4r6 3¢z ‡“YC¶¡ÿmð#8;§Tú‹sÄÆíUº·ˆe4­ê;öÿLãÐh¹èœCÌ‘DÒ8œæ`¿œ³ô&Q“Üi4ïCåè{fçV&ÍNoa0P«€#@ÔÕªÂ`c[ß¹ñ –) wÅÚúç†I%2ÒznOèÖÖ3Œ[«†ñÓW…é ÎˆøûÙ+ÆVm3“¶?8±£zó}[ä´•ý}°*/:Z0î¼´ª¬ÎL³Ð´!JÊL¶ÉÎؘÍάMË ®DÄ=¡ÅÎK–IÛ ¾­ïíîäüÿ š|mÿV¶Y<ÁP⚘þ[u[0¥Ž°Kâ]ˆÓ€DÌXúÒE•‹é¿žY)¤ÿdI^_v½ËNdñ›äŠ’‹õ|Roc¦Ö0L>X`RcB¤m†ñ }«Û.-Ç€Õåö±,c €dî)û¥3s«[ø#Ÿ¤¶ê§q%÷Ç•µ`ÝðsTe–˜Y°Fpò³Ì»O£ô‰Þâ«gãä#X„ÈùÀKÂæ´bF胛 '`Zˆ[rò´ÞQve˲)£ËÈl6Þ“´­KçÎg(ÍhFÒ«ãƒÔkL¹æbãvrðæRóû¦þG¢VWk>(m|y n኎E§0‚á`bÌ dÉÔ-IYÀB¦kŸ´à_7Î…•Á’UÕí ão´¸û™Û†¿'‚D*´Z»\UåWinŸ>~l1‰”rð·Ž|Èh„±°O$üçŸÄìKö¸ÜŒ‡d A;˜¾$¸½nf}·ßA~`:6S&s™mÏßzÛdð“àa‹&­KÕè@ܳ7·ø¿}ÿ/i2äíÍÝ~ê2$•E“ê¹6u}qÁð“TØ”Oÿ! VðtÒ^÷Š@B9$a¤µ ´z¸ÂÕõ]Â&ÚÀÐYϼwú§ùžQôcÌ⯀Çb…œ­‘'kÞÜ~ˆÍ¸ß0<[‡R¢K¤Æþú+y«ÒëÊHÈîï +Wí0Ð%Œcm²7`’¯C¡‰Å”ŽrÔVàmãIúj"‘„—àûfÝL¾¿ì‹Þ=¬C6¡×Ù“JjyÚi7q;µùé*óD§¾ÌþevcÒdihìÔ'y©ìÃ{rÔ_¶ÆÆÈ™·SÖ_;LjÂ6ï6nÎýœCØŸì¶„#ës’3¢q°K­´K¸L5ªØ %5°¸†¤õ¨'Ü$õG"ôŽ…ÁѬDR †×•çi鱦§“½Î›}WF°QEÏåªÙÝ@ÅN G½¬öG%Ë ôŸ+ˆ= bŒ§6šã†·ÀÄåË&*O=Ò,‘í%û‰²©u`^=>¤ÝyÄw_ñ¸¸˜ÏNÊÛäªâ=žÄ`вSiÃÃzð™Ào˜¹îŒ"¤ó”òÐ>„G Æž÷ÖŸk–,­·ß$tѤ·rµÿuj¢Å M79¦ â0ø6%µ‚©‹ÅJ|‡Ðâwˆ= HÇ›Äré¼­ötÖ°Ï­ßõ®0ŽE@ìQ+•Uß³Mòàé:‰£¦KþCÊN45$]’mdC6\÷ã+»°Ñ·…~§ §.·?heˆ¿ŠÉ´^Ž´€Ÿ+§§¹—-™Ïîü1[ðRòaCžö/¿ñÁ]PxÉy I-¿„¼ž7ž¢CÔqÝØ Ò [ ?è0Ó„ds¼uæ.]TÜÿhÀ\à“½aw+ˆ= 1‡Æ‚¬+(%§»ÅløŒÞþªÝ9[í©•ú«½4ÈÚeéî(§–À1Iã/º¼¸ßW2ö† Á\ ÖlNÕº²¦F«ÉGZ!cر¨héÅ.HcTy 8ñ`b˼•òLEBº¨˜'ñTMS{Õ­Þ 3°D ,ÐÉHyh‡ªÖ>ÎÔ&88ë!¬Ž^51X}OÆÆ/`Ãm”õ©P)˜#n;—¼¶4Dݳ„—´U€·óC‚¦IhéñàI÷¬)Ð ÜÙTâæŠHÿ}ÔjšôY\EbÎWÓÎer+–ò×?KnÍæ$Em«…åÐg¦T­À;ÎÒÚ ÍuYà þå:ÂWÜ"N”C+Õ°½5²IvÁÞÇtœT¥WE¼ØtØä¿aùîáMŸRÝ$’íyJ¹\,(¦%(ª !›ÐÀé4²è•¬»×—ÁÉ£°Æp ƒ¾o…ÛÌ xN_º ;SÌE6°õº·ÌH-Zú÷Üx®TãÈúã²Éåÿ5eê‚Ä'žÉNʕȦ~½ó*Œ(+µ )¦ÓùÇÛ¸©WÔý®âBPÜ¢'C›t˜÷ îS ô´ÁŠØàŠËŠ8Ü,dÙ—Yê}¢pÍ]Å±Þ ›¿#$QÝÍÀðÁÈEÐç@{Å¥'ä{Êlÿmúù-MLëœ;Q4böꌓöÕ<žüôd€oRM1zÁ}ª´3,ÏÔï>³†ÈŸ’}5õ#¤󒢂óNsÖ‹ÿ:±¶˜—jz´6§m³à·‘ Ôz´í#i]mµ<Œk° ø|›(UòÛ£RµÕõ.voLUD…6>¼• ²ÁxÞúã#ß}${Je<› 7ÑÄ€š‚,©*»PK•ùãq-šž=¹¢ä±"qøÑI^egox5„{<á#"áƒ="ç ë™1ËðûNù¥®' ñHY8dèz‡@÷OÝ+{~GHwÒâm)fój}ü’Œ>‰‰šdñÍ¡nYøòJî\˜&›ðiuê.ã² Ëãê,{L’SAž.Ê£Ú…»{æåíÁò§«Šv6¥˜ry!£Ú­1ÎVr¢á4ŠÑÚ¦.bž$RUlÝ=Ãlƒy‰J k©Ë§Õõp|ã ²/7µ¬ý®ËÞFîØŠ··o¥Í›ÎHž Ñ3¥×ó‡ÑbV¥B7SdnOÿæ”nÙ(šù—$ ½®.ªáíg)7ìÊ|¾£áx¼“*vªA÷óÐ%^ÂSJ€»GŸ”<ÿ>÷‘SÖ‹ÑÕµ'Tf>I:C¹`~û”›¸(K’£]õ&¡µ“Ï›ÛÐhJAKÛÔñRªtBÖ²x)óپɞ¬X KFIs™ŠÜòÒo•†]ÐÊ êw­Ý}®ÍB*7N~`u¤+[h09òmš 9C¤¢tˆr¿öB®0ÉÌ ’%ÞÔYÉJË„„ãÙ¢S/Ë§Š–tøµB#eÏ—_Q< vØ ÿ,èò™^¡jsŒØ$fò¯‹­S2d[x´ö~ä5žyvp¾h‘ E)Õ>´ÇîÛkÙØJ0—ÙÓú‰þ%sÅÐêæˆæ?§…‚MÒ€rºÕS7îóÜv‘R‘SlðOÒ<¤ÔÈ^7>Oä\žTŠQ©@¼7¹àõ”ã£óšË¤\V·qšÝ4§ì§P"k½ d$ðà9\dÒK|ˆÌVòê”w#ÏcòݰßÔ¢ñÓÈ?²ðMzVî»#÷õ ú@X_eWtqk^âäæ)î›á5´€vcíš:UM´Éë/—¬ŠÇ¹,–Ajdy)…f!q`Ý<\ôS ånFáHøµIjMÛz¾DÌ~TgÍKNxÌì9™OÁ˜ãs-ÓüW~¯l±µ1èû•uš’üÊ¿ §³¨³Dˆÿ%UBŒÆnÓݪ©nkHŽa h—²[3…»z°[üƒW`ôòÛéJfL® ©DðFª 3Œ_¬~z*¯Q ’¡[‡¶šý€WÕcJexY= ßìïi›fB¦Á&+ÊgÑœìE+t2€¦š×¹‚¥xƒè ê½Áè*銃ױžGì7.Þ“u I³VÈK ª‹õI6Òv$_ÜsªºØ³fD‚o=þ¤BùZ§bWÍE]evˆUØ]¸ùñzÅSD~_È´—Ÿ‡_Üñ׃2÷HHážÌÀ Ò«„·ÍHØó`—¥6ü‹ú·'.@nš±RÙ¶SÞs¡ú @ ÿZµMþÞf¡F4ÿGÄ?­þµÄ.1f±jŽ”bWJ ?‚@°z¹É§íîèÅ‚*-ÞŸ5atFjÞØÊxøæR9ô¬:ªËŠ$Ð`÷@Òót^b!;ûÙ€ô*fl4‚73ÇüñnŵeÄÁ‰œíþr•&¯»xþAfGÅyȺ–[¾½<àöÙÍpçhø.f’%¯¶P¼Db·9ÙH¡;jC§ƒŸ‹é1;C¡J„xm®Ühˆ ц!Jòê.µi—þ L¬!èµ4Ý—šQåùq åV:Œ±&á°9œšëñ¹Ï"£è,^8¦—\A#Æ¥Y(]Ö¯¯0ꎥióCÄw·¾! YضW w{I<¢jî-ºtiqšþÇæórs­Ïq¢ÏrV’<ÈFc³œ‡¨Ñd|ýZŠ” …[Æ>8Ì& -¦â¹Ç YåÕYj‹p¬b¬*Œë p_) †õÄŠeWú°´T­[PiuJM€â¢Xâ»m/iKë›Y¤0ñ²x>Ç'ê?†}`ü·¾¹ ˆ¯Â®¤ÆÕ½šFŒçTT„† ñJYd‰¥Ã¿S»U6*â[ˆ€l}(CÉBcKƒøKe·;lì¹Å²¼~ˆÃ¼sÅC¾PK“æˆÛòÙx“¼?6çS{gü{G¼|Ò%¢¡ ®†à‘}GP·‹Ð`Ý«SýèT°÷à„íÞÎMA°‰l/x,pæPg¿™1rs³…‘%À~±½dÆÍU,à ‘‹²t>·Iô Žê«ô¦®z |ë‘ÇíüÒ»SÅGžîYDzÍv6Ž>ìŠUsuje°TeyÈ -‰µmÈ,Í>"Šh•a}¼çÐÌåÖ— ]TÑ4uNÇH+±õb…Èrê8úPj[âÖï›ç77¸&Ë©…¹»f>ôòÌÍÜA1o%Y#¯¥f¹ÑþŠq WÉ>ë§Œû8ãÍ«Ñø}rõ&»&kjħñ[¨¶(XJó~¸•uoôË5ä§÷±ÓÎw Ï%Ý¥68ï¦Ýkˆ¶ ÖVˆæ´[æ³ äµõ)Äý…[|~$‰ŠÚæÍ2 jãd#ïÐcIO ±[4BޤËs·]¬Í–~zÛôðÿRªÇ%î|U£u+DI¥€ @Zs‚è‹©G+·9¿DPf_Va;ÈuÁ/¸ÅeÙS;þ'lÍ ™4v†ÀÃtÊŒñ±¡U_KüI8½?][_Zé0V?ŒrXûÊ43È|_— õÕÞXíåb¨Él9 9ðàT<ŽÉ_Œåk¸uOû$~Iº®M×Dc_ÑD F¢V¡×xqY¸¬˜PlIâ…¬Š¦‚‹Úcdû¡­yekª‰¶»ö\#’%Еàùq>ñ’cÛÂq}eAmµÉ¯é‘4X…³Pd>Mï[¢_ë³x ó ê6~][Œé7ß’¨ŠNËÝ€¤ºrP…5ÛÙ)_u_¥ã¤rée|"bƒ s±… ¦Ì¼äyƒá%‡1ÔÙŠ}ì#؈ÙuÚvà,K=©Æ UŽ™àqcÜS¡Î\&&šNRümD´ÜzÓ'«ÈµÄÎÔþiœ—]žßç c<¹ºûþ½™1ú·Ø ï¤i…Ÿ¥¤;œ­jü%xø…Ç4U0AÈKásÎÄûnÈw$©ú:Ã.¹š¼Qdò;åÜ@ÙÏZƒlX‘0dË¿,—ÂûfYÜì¤G†äÉ 4Övn=uñ4…gÕQ` ÍFKMä®>ŠÇ¦ïyy™WéÈ4ä~8…e2lrÊæÂ²5û—ü¥¸„-W·ÎæöV¸Þ®1¬§–&é9ì$> …ÇȹZ„\˱3´uÑ}Q:©jw‰C‡lïì]˜$ŸC…y^¥ÏÕ§ÁñEcŒ“ j‹Ó ”˜(àÌØ5xçºPÓ¹0KmÉÛ©ShTþ¥‡DÈÐñ…骪ص º!‘Šú?vΣ²Œ©¢} (oye‡Å>é±[Ýzx>ÞBïýsáåŒþÇ›OKG¤›æëÍ÷g m$\¿bL‡!·ˆ‰À•w |¥ÿ3JÉT h‘:Ï_ú›È†ŽZϘÇrýiÓ!ëÉ;¸ŒOr‰:㦓 7#¼s[™dÁJ­Ä0œÈìŒþ3 Yµ™ àêËè…+>˜iV»ASty“KÃ:¬ ®>[ÊXqÂHù#[Ý yŒs·Ã Ûä|Œ=ü ŒwÝ,, ÑrUiÎÍhc§‹_W¯Û©ÛíÁ}j«úPe±h‚-"°g n›@ŽY Oÿ.—'rõ J¾*¢éµ¡b2%UañØ$upyç”yUa-[~8£º‘Zx¾$æi(Ïý]›0ašoÁUÔæ`‹’YÖÈ¿§ìÛT›ÉËG¹¯ðvyÏoÑÔÍ:%Ék§T…L M­£9Šš˜\ÐÝDoXôvÎí)Ôöä#âgËÉâ€wÉ¡ˆl>”ýž]Knr ±øÀ\ˆb]"“MÜüàÝ…-¹9´ä¯',OÁ n+²æ=÷Ué‚ÿwïB7²_JCÝ­88³X’Ço·ürIškÏ¢—`ÉÍ4&ÑO}FæèyhæÉÁÌ)nQ8ƒ½ƒ¼a¥Éóë8ÜŠðñJÿnö-ã©»áàŘ{³(ß¹¢ÿm2Uû_ë³.ÜJ›m«p¬¹Ê:ž– xæ…Â0GÍ—ӷFÆ=ÿånˆVðtj$|¡·i¨jTöɺvÏjN²±¯?ð4&¼ëÙ8‹JùÅ÷¹[Ÿh×Ëçä?Ó•¥òÅlú.÷TIòçðí¯øwUü:Ýþfçðì×øwkü:ÔþUcøuwü;Eþ%ÿH€ã2õPôc±Z‡òzìŸ.+r‹ƒÕþÝÜ‹)wjÐÃL›‡>2{¨ miﻄaÒ¥—ÉÊdkÓªjj륅 ÙïÁ[À(ú&ö³.þB/8( hßA³0ŒˆÄ\ m þ5½Ê Éî!ƒîâ[Ç£ÇUŸ®-ÉA$Z㋎‹ÐQ.•íCÇøo !ån'Rîòô÷I|4Òx­Ìrfz[9aôÄð£±íÿ`ndEæò_<}^J’ütÂA“CX œZ'ô;ÃÔdz~@¸ÂúÒìÀu—½¬Ågë²ÊßÓ¢d$+ áxÙÔz¢-tÚùöØû¦g›—{øÛ×D{=´Àxœ¹‰F¶¦Úü°0H±¶ß!©ªAP°C·¬+iÓ#Ý-æˆTs +ADÐ;±)äÒè!],%^üÏZ]F]õÐFí>¼B';Z.&³ _M©XÃæH-hEÊ™®¤êÏŠòK¡"bd=šîeÓç9óž cˆÞ#õpŽ:hÿp™à}@ÊŽªj…‘à”©â¤XÎèø'TØÁU€½\¼$> ˆR¾8П%—4ÇØÿI­J2ÒeÇ2LvU_©R­·dSØ?Á.-ÞîåTÔ%(? ¼ààpm¡¶Ð!Y¸ÿwaôűŸJç¹6囕Jzß.ŒŒØa–ÛÏ<ÑîøÖ#íÕÃjã–lßÇÙH…§æûx3Q†Ã ãŠã¥ÍÉä]¬ ìÃìÆEJ†tN!ê(Ž`ÚG/ç}º”ï$G ì57ˆ$e_L_• 6ò>Æ0Á‹§(–Œeº”y}éo¸qÂgóÓÒ<Òm0ªÛ(c¿(ÒiZ4—ðdñÅä–ØrÄtMÚêéï—¬Rã•ނ˪_ Œ…Éž=AO@ð†?ZÊ„­D7ƒªöîâÒ`Ë[Õ­nýpÂO GÍç}¼»üür§ÁZeØ;X2kõ-VÇøµµM…ûa%rbé‹F[ÈÚl³EÒ|˜Ö;¸ _Üõš#VžæâW‘PB¶+nÌ ¥ºtì\;ÚãžödÝ£T[œâúufë(óÿ9kÛgØæ—Þ„`¬ZtÈïìçí4! ž+Ð Þ%¨ É.Îv›‡ w¿¯»#âÉz¶—`qòHE·ÄˆhI*'¯Ðˆƒ %«¹ùË“à’ɺÖ-ì¾âøuQ5;[@bPH<¿œföŽéßçDz׎Î6Ñ’>#¬Ø0ª(¹º?Lc¨VaÕè?÷Ì{ú¦ÏD¤çO¸!h¯Ôe“ig—¥DD3]çl6ƒª}»²oÏZXWSMþ>CÙ" JÚÒÍJ²’ñÀq)c¥þ >m8º ¬ö:r&·1‡‹°c)¤Ln“í¢á.\:ÿG^Èi7 =WhÎÚ†ðd¹S¹óùûÔ>åMS8ÁÚ7eŽj- &/LÖ¥k`lw……Gd7à_è(ŸøŒoÏýCÔ*LL1 lZ>MüŽ(‚ÊhÖØý"Æ{¿€µj`¶Ö5’OÜ=FVn ï³.Ýîª@$·ŸbÞ†§hTʧ¤ýºü3J»Œ(™#x‰2 ÊÒlµk4JhXîøÄ›Æã[ᨃ˜FUqÚÛž†èX\e{O5¾Y!îÙØ<Å»úuÞWñÞQ3eI–ƾq6ßwH´ÿ(bñÜUª Fi|½ìrž¥kxãsx ÐèGPUåDqŽÀíú`b}+ÁƒÇ‚ó¶ÊP«Z YM7<Í^íÌñÕ –ahlµú²0މhÊ,TfŠïÕoW|WÆ Ú¹5ñ™[&–¶Ò-Jö/(³cdÇ ƒ,×?ç`Xœ›òªXä}[æè•EÔªô¬\¡áÏÝÙ·sáÉì ´$x@'[«—ª¡šP—v™—MS–"n&ø$Cišö¹ÚÕÝ,¢­€]@¹MŸ!‹.¹IOjø®·å’{UJEe%†Z´¸õÇhZÁ„Jãþ· ŽåûTÇRÓyL¶]´âžJ`ðýŸŸLMÆ7g70L7¥öñœA3¾Ù‘Rt¸¥ Bc˜ÆëãMÛ5±¥ÝÜM’‡bH`ØXÏ4»ð鉅‘.Ó!üz4 ¾Itg%žëüxbÏPh@#ZUŒîª×Ü?‡‰W‰›ôÒÖµ…×*%àäÝ«Z[W­.¦-ˆ$|í31Û?6οÏY)‚—ô9¹¨Ã&W66æTÖ«ï·à; °ÐfBéÕfÐ…¤NÀ¡Â6|mœŒîS9è[y¯V#²(ÊÀ5BèÃãÈðññŠÙªSm˜#ÚÊUF »à›)¯/ i¿MPÀø|*u‹˜B Tööי…Iå¦ «ì¹û»Ý´¸p5¶`ÊDžqyþnÐáH½¥Ãuíµ@¹&FSÞVÌ{Õ[nw÷4ȱ¨Ô§ªàß7ÝÇ ±jð8•X…bÙ@B›÷‚öÞ³^·ÝÅ^ŽWugiíÁR*Bàý™T6éåC˜û~9†ÄY¨ Â_ùqˆ‘Ò+Y¾èBÿèb›5øn½K¼¦›¿y/¹âÌS°ƒP\j›-KPÈYÀ.‘|fÃ^Å.üëËV O²í*¹ý š³²ßÙw7_éù.[^H{&Wì.Íü©j0Æ©r°oZðÖ4ÍšB9×SÎvm•ZªÝXÐû®SÈì |PÆFÖ¡*ßPͯ øåü{fy”Ð 2$¸ŽÝ ›¡%f4GÝJý‡óÝM(Gg[êÕÙçÊaõÅ2(a=%šÍƒÿʇãH¯ö‘ãã•âîNyUÎ ˜¿afÌ£/Ù*Ó`å®Ï„çÞ@¹¼#8cZ€(WjÒÚm–l~¹ÇéoùŒ:¹¦Ä³è%…Ä­ÜJ»ÿ×6BÄd†' NÁƒ¬5ñî’óO×4†åàO$Ÿæ¡q£«êå.°;¥Äö¡XBHq€¬ØK­7²F‘ÉoâGY]†ÿÍ*è`Ö?Þ&Oû¢Ë3WõAk=ÇÏ6Z—Ÿdç ©³§¢a³iþî—WÞº(gÀL¯í Ÿ2LÞ»™~ï˜ ™ù†ôþ‚·k `~âB¢‘‚eËZOÒ¯Ùz *ºçj·;­x{‰(°+ºJPJ––ßdu²wäDk^XÈ\Ò¨ 5ì„õeþâø@BÉLŸLŒÃ„ŧÜóK_'ràŒÀì\~³?á¿©Ÿ_M„:% ¿ÙyÈ A:ÑÜrz`O†sxàÊóÍ»ZÍœ—â{/Ï&w_re»ŽP³¡¥Ì‡wGbVw¼ÄgÖn‚º@Un£FÁÝà€ëßì`ÐRJ‹ˆÕFA Ükd4=BŽÎ«³ÀÜ’Ñg„žp€¶2 Šípÿeÿ`Eí½-O¬öÓÆPs1÷æãQ6ó1÷w„,GÀnûJðaGŸ86€„(‹›Ÿ£–q°H9=zå¹È£4,ÕûÖR“I ,ÿ$']5ÃUN¢dÄF£É± ¤2Ï s3ÐØ„öŒÞ ð•ÅØ¾TšÐBÄñŒZ§sq_;æ1U„\ô‘ÿ>ì9“1.UR¦#úCï±­®¨Ïˆȇ±ÎÕÔÆz[œ3TS3ÖÍfáªç‚Æ¿¥m ÏÇÍ“m$}ÑLƒÂ‚q-b{àVÂÚ‰]únÓîß[ÌÏ£`¸?–ÊJ+ࢅ#zkÎou5bàÓë?k«¬M}xÒÃßuŒÚ§Ý "œOUPÚ»$¦Vè’ÖC!â)ŽÇïv8kóO¾]]Wâ°4²e 4µ]åÓëΩˆM‡ÕÇ[ÊçØ_´‘&l´ïd¿Š¨ ­µJä6¹ù °‘Ýßé‘kŠ„7Ê¡ÌC!^tâÆJ!¶.&eÝÆ‹%  =»–›MR•Œ‚_*Såoývcû½¸~gÚ¶ß %¬4°MÝxޏv×yFPš®Pü$ëÏg SæÙ½¸…N¥w<´Ðû5kÉYnù)CËFpä”]wÝ>vB–s|ɧ1äA`~ÕŸÅ ÷[Â6ÕRò~_Â+2! ¤Åܯ0Q‹¾%¯³„ø<ê®þQYY€zºC_;~BÛõòûßàê•§ê²1Þà°ÎÇÖÅ‚ëêüBnOf¯^ bIp-ª3­Ýö°Z/h½ê&ÃÄô<—ù9BŽi½²ÆtË_ŒÝ¡¡Ÿ‹LÝYiC}h½Øk_úyœÿq´Ï³>se]™ ’òWöã¶ÙU 4cK€EJé›’O@ˆ+Œ.R\šÆW•]2Quð\îwïÊNä’B¢žUÞO$@ØóBEÙC‹í¾³w‰MSî)û¥3s«+ø#žp¤µê­çÒùÅjFëéžÔª°ÝÔ¢Õ‡¤Ã5iCµŠBµu‰qd¨äL¹—ïÕ5û§A?É…ÞÓ£¬^ ß¹° ‘u“8}^=¯¹Gï¿2` eÿdLÉ@s>(m|y n኎E§0‚á`bÌ dÉÔ-IYÀB¦kŸ´à_7Î…•Á’UÕí ão´¸û™Û†¿'‚D*´Zº6ß[bqókryX‚±àÙ˜LaóL¬ëÎð@e`“^ãl;Oýâ\ŽÅÕƒà8ý†QþK²I‰¤óIq±5Ñt/x.@`‹÷u„u¥ðÃj!XtHWR a‹&­KÕèÆW‚Óíã±Z¨ÎÏL™Ï›’2G3±oËù,»xøÞegM“¸“Ü'b:Ñ*Ôî¼<™¨Äݪn à¶äýÌMÃR~ ¥—·¢œï°é?˜’PøÜ ñêΓøSrjåQ—IýôVs+ÿ?v@ßM|F¥z=Ùp1ŠêrÕ¯Þê¥p:å^Äþ3¾Q7Ù „w]€\ûXÌÙg^SÕþ†ÏlHÚ²ž¢õ½± 0Ú²“"L'Nñ²`VÚ¨m¤Ÿ·JP:ÍpVÁ 0羫7®œ„aÕß»0äïUª´þ|ÐZ…kpr ¹6”$í²ÙgÙb”^Z§Þ4¡¬#^°<‹—¡—¹MlôVþh!†á ñJ ,¯Sõºæ vl©<íÝÄÌ2Eùâ!¡]‰ö‚µ¾î:xùmÐh¯‡Šjö ´Ìl§LéFSì'I¶^âçØõrro×èHƒ$_¹¤Í5¾@ G­Û{^€ qMyð6Cá,§çx a E  ÷]ˆj €íjÄù(>˜„ ÖC¦G_ Ò-ý@µ_ûqaîοW7¡RrD2«d§SŸ€úsÂÉ’ûAÂkwb _ß*¼+.º2¹R˜~Y@JJ‰Þ ô$u K6oÉü¦ò´9H|îeÖ>ùÔ™â ÆàWS”5®msÕ³ƒêÒz¶fåP ; €˜˜@ÿU4•3a¶çÜÑËí|óËë"¨ë8l€™èÞÎ7ˆXËpööÄb>i uÃtû.n>öË/4O¥˜€‘ƒ:§ÁÍÐmP7×5€ô§×º¶ J䑎$*¼\õTï9©úý 1J›„dÏ*‰úÞ’°êÏ‹~“eÀWjg'Îká¸&ù®‚l ¯s\¹3„zÄËü´˜ … ÌÐ<ÿ€W4 j]0™RøÝm«t@ÞÎCÝÇÔ§ªø£éù'Õ…´hï“Z™ÁS’fóÛy “δnÞž÷ÍûØ"ˆ€ôŠoð†AB<½gÝ~Qsf÷¬)Ð ÜÙTâæŠHÿ{ÏQìB1œÅæ¸ßé…‘£îpDgŠóy^r:Én®]Ô¬}æ#8&M•×6•?§‰…þoGzÚäãBÄò» àÔl“àµ3;(*©ÎB(áûÄjð|¸ ãrŸöq³ììíªi,O7èä…dåAaÄ!˜¿W%º~–:]¶ùÖÈ݄ߺâŸl~󨆆|‚ƒÒ®jÚ óÇw,ÛןItðö¿ë’Þ+¹ƒPyh£ZFO™xœT;õc— ²xAØ£W Úš\uå;ÈmjXÑF'.«¨`v{E°&݉ˈ½G­À¨D _ylwZÇ— ÉíP^Ð^¶”'OÿdzÄ’M ¤±ž¤•f‘õéJ9`x|ǤöWl=>®Ô@N‘Fɇ 5™Vc‡"2æC´¡xë«äžÛÓéRQ*¹êni™EKˆz÷@è5p3ÒÊÙò:XÞ@f—­ @M+QŽ‚\ÖtŠ*™[§û—K°rL¤RgÈ^ù]Ãj,Ã_‡‹Ë`Yá`P¸5¨t:°‚ñÀdf¼9jLi‘?BÛ¸føþãŒ^Ìy3â¬<“ËCSÌÅ:°îP‚g°ì¨ ŒÂÛö,é+´­»Òºî5¯µ™Y"3Ó¡„V1®¾ìÐ=T87¥yûl¬BåhÜ^èÈeŒ«VµIM„ùsx,yó)²4Om½Ð%ñ/H‘Ýà80.-  €àL‡kx"GÊ|¾£áx¼“*vªA÷óÏÍ ¬RòœÐŒ¾ Yy(êwa©N÷lùüºÿdš”M‡ðÖ»ØèrF(…]Ñäe¾J/Ú–xo‚¹`1’Ïtý8ˆb©T'ËŠ”¨Ûh÷ŸÜЕ7†ÄJ”Êž/SÉu…Ybô\€+9¤yš¼Îì]½8l‰˜ šXhábØmž—‘סà›iÁñé5þ²L×iö0†& XPç0ÿÒ¤´zÀ݈ æt$ÕÝö ‡÷ Ú\‡Iîû6~êÓ#Çô”ð»BûØÉ¡ mÇב5¦ ȯúÌÝ=h#•v©]£)S°æÿZ.÷¢?Ó˜¨þÖ |‰ù*Ô¥Í$?›»Nõ‡$擊7ú‘úJÐŒÂð¶ë{¸Ë#êôôPÕB‹ÒÉÛxp+ »¯HLÄ=nP™äç¸ßEJf¼æ<5\¤3ò4Î/úU~QöHÙà-= ±ÀM!˜œ{ÿ@²E/¸¶DQ-¾±´ ZmfJoñ9j‚›s§ƒ ˆÑ-P®)nêËA6·›óèïm*vK!°9ýÉ«v0~¿Åõ'…µ¢'ôþ/K@3àFÏOlÔ—Y cîF´E‡­0žöõúS®¢ÎC5M©k6,Xáy;¶ ÷ÅõòsÏÑ>LS¸Keet ’Ù¯DÓwÚFO|£=Ìr÷Ìo효ô{êFÙŒ.pP÷*ž±u¥ £{øô.Ç¥´LÏS u0b¶Ù#­øA:U•>âÁÉ?ŪcŠ™j°,èeѳö‚ú,áÇ‘¨ýÖÖ ‡ ·ñ&en¾ñðíüô‚v¿—¹,ºöK.ñVÑÙ2Þ$T* ð¤.ß}|ˆ·ÉZÿY»F ŒØê¸Ë¦K¶íÃÑ ØäÑ  –Ö³†ãìTјK4P^ˆýÆüi¨õ±+ÖÍëñeÕoµ18³&º€„—v¹áI’wd»†æ/©²\-žôæsb‰H-¿¡£È/ŅІ­ó:å5•„ ƒm³fåW!ÛY £#“BYÓrgNÌ7 p»ØÊÃn”äùvûô["ŽŸçK(HË)w/¿ßâ Lk^bƒ#ãº><^öO5v,t׫¨üRTÏòb)!â{ºßà—-J­’X xC<÷šÊÒÌLHU"К;“¿üàü…o3¶÷S©[õz‰r^*ÇçÄCé7œëbjˆ…o㎊Écn¹¤Í‚D‰Šâãié˜"a-ŒÃ¶•õ ‰¾ãì¥|=~Žº¾S®a*•~ª‘qðyÝVØ=tœŒˆßkü³k?‚±ÞðPI=6¾‚Fçª5Èa+­[±z0¾â×ö›33~-…› ,“üwÁ-ºÀ„g#nétº)ø‡|ûèì†h?ð_BcKƒøKe·;lì¹Å²¼~ˆÃ¼sÅC¾PK“æˆÛòÙx“¼?6çS{gü{G¼|Ò%¢¡ ®†à‘}GP·‹ÐRã-"Z³ßkâ µˆU„ÙVêƼ¬fh©^Þý®òò‹f1‘Þ£ŽpÞç)d À){Ç·É¿¾ÁW…ü®w˜Ð´8žunŒZÇuV+HFÏ Æ‹•0UÞ@Ñ §7‰åg"|óÓ"GìFa›ŽIYÿ5hsÿ'Ó¥šÏÕ¹×2Å›·¿«.ÿ „1žüXƒ:ö•Fí£ÁÝ?G¶âçK©9Á“ µ—Úu.½xÀ1O[ ŸYÆòti—!p !Fõõ)­Þ(g€ý›ó9]Ρ)穎Ñþ‡ÿkðvÈ}q>ó²ci=±Xq@øÊ„ÏJø&pt¤Ýõ„Ïñ\ò|7'Á.—†pÙûqV-ístmÓâgË]ê[_RœjxQçþ’`¨û<Շà Á¶J!µYé>SP‰T"/¬îC-hGVî±¹6¥;^ªTÄ ·HuÉ)V}ÔEc7»šÚ Õ…EÛGeZEQí_™”ž !ÙVýañëªPe²(KùÝÚ3MZKê°ƒ›a‹cÅEmÔ³µñöys?Ãk·Þé¼èSB¡ß}ŸƒŠ†¥vD‹:IExü2ÿ6¬ËÝþ›ƒ‚óp6ßJR2?Þ¦õmGÒ—@cØtJ}B†ž‰éÀ†YEÕb,sEÜ *Þ+6 ‰|íkÀØ-S§~áûlá7>!*ÃDU°ÞŽ0ºklgŒ8‰Êp¤Ö Øô»›û•:e!+b·3g@G!¬¯3Wt3³Á%rMZ ™²5Vмi fµ°™M¿ S Í€-źe÷%- /$ìÍzíy T§ét,µGaÛãUÁ™ µ}ã#Í-”=æi‚ò„Ôrcö½ƒçü ô…ǘiÜ.…6VVÚÖ®|_^[ؾI;â|¿—‰^2œ; ‰Az2q(0ÑŽtžÆâ|Þˤ‹àunŸDâG2iþs¡Ї¾^ÓØF5w+œÿyy™WéÈ4ä~8…e2lrÊæÂ²5û—ü¥¸„-W·ÎæöV¸Þ®1¬§–&é9ì$> …ǸÆ"4p¼;®ÄÃAgÍÃtìž{kjæ˜FýKÆÑáó±«-u…õ~˜°c‰ãæ’Ö6a\=¤…›5RõëAês¦qh« L Ÿ3eb)"Eç‰+ÙÀÖ3¥µ ãi¿Ü%/q»Ó6ºÁí¤¥¨Á„jnQ$¸ÒÝ%5Ñ>Ũ1Zÿ Aã¡k¾\Ô=  Ù딌Ó6D6ÿ„k"j"ÆBs@½cg6< £d׋4"¿2–€¡_ùhS;Š0ÊV£.“î¸#æu†¼àì c³»÷QÍñ5ÄèýFd}æO ›V5®Ü•û~y_×ùºŒ…)„ÝÉ C Ûu¥˜ðX€6„#ÆQ’hc_!3èåÇj”‡¹¼Xë ìTÓªÖß{ìÙ´ É% òîÆœ4kþ.+5ÎRš~9Z¶°èŸn7÷¬²x肆$ƒ²¶+”øÈ‰.¡Iän¼„WZW<^OŒ ô¡.µé¼LÃî7û‡l›V}»—~FM†Naäí¸=4OÌõYóî3±Î<:G­M frK!;t0éî Â…6úÏ:uœÃòÔ¼2Lý|d&XmÞGñ¶V×1÷KWžò*VñjR7eÈ^°Û?‚¢]iªð*÷q—Šòh‡¤ì²øaFUÄI|Ú§n³f›µº‘ŽÄ€c^?§KüìI2[gGHäˆbó'dÇ ëJ^ÄÁ9{¦ R.¸Ý@ÅAˆ‹ ¯hõ®U²e¨©c†;¦=ÚÑ oAž§V µƒV…¸}Ô‘¯K#™„5„wfÀŸ`Ï1žUôäû.‹¼&mßÒiØ­’ÅÈÆ‹?Ü—<Áç‡Ãо öÈó¨Ö$DäìE>%؆FÁdû1—Vƒè; ?#›¦@÷æ>ù—`Q_;“xŽ‚¦ÅëÖ%Äæ®þšk?ß|*Fè¿lîi ªH£º[<~Pÿ@ñÞSt‰z윶Ð$çmt»“¨aà‚YhW[K$l¼á#Eœ‰£U?½G"µªFdõ3 i;¸-g^ ¬¯±rˆD±Ôìs³P;j©X¹]?n¯[K>u*³—Í6=­¤¹ùéAÜù 1úg‡U' íÑ%O¬½ÇŠHÌ á$žë| …³'³þÙÛûIÿ@[x£;ÍÖ^îkñ Mî‰póžŠ@§z!¾|Y¡»µ‡Æ×YÙ”šŠk#¹Ü†ïÀŽéœCB,04ìSö±GÐ+«j%v©ÈZë’š5Æf ý_É]³Ù,(sðóm˜øRtîÿû¡«5¥ õ73àÆÏöЬEÂ=Ô;‹î’ñ±èH=ãöé/íÔÛªŸ·Yqût;öèÇíÕÿmÕ|?mÙût3öé—íÔ°ã£SFS¹¢ÅJÊüؼ0¿¨f„Àž#·›+Â¥Ÿýôƨ²o›¨½%äÄrÕÛm°Tƒø=‚H,"äѲn9“6)ñ‡)mþiÎ2úhÍ-67Ÿ¾„À‹§“ÆFoÆ’é|Ž¢K–î/ž§%êͪ’<ÁóUê!fnhç8^mxK‡»ó—}á ¡wš,hg-_ì-\QܵO廌ÌýïÒ1Á¹$ Òsu5¬8ìÔß‘¨îö2êͱ™7é·éMÚ¯CÀuxýä¿×e³Bzu¨E¶'^rì¢Þž:ñdà¡’meŸ@y°½Ÿfy[‰Øjˆ_Ÿþßá73ð|Ç1'S¹ýºIòCÙ]I·òs×£1Ÿ2½[žpãŸâW‘Plꓞ­{‹§.²îM äÞ"˜5IPIŽH—óîƒc6Äœ‹\ÿ'©¨ÿx-èo£\;-å¶GðL>ò $:,“o}Jƒ¢Ð3e™ëmåÚ+NÊt£×²={=gûaþ§ZüÌoYõ˜ "™œdïÚÒš6 dÿ‡›Mch©ƒrLL=flW¤ûlºèO°9ws–æ ºp2.áL®~kvùïÄãˆxPïß<7›ì! ©½Hè« ùëOó•3îPµÎæ;Ý£$T•WyP&ãÒÿ|²ÏèCAp PÉ¡²Cà›s:Ö}×B:DêLëÈ s¡*íÿ;«€vÚ#Rõå« Î66YW2ãöm= Ãb~óÄR!‚X +ÐZ4ÑàÍ«Öíœ#˜òo½­ß‘Që¨ûß—ÿj‘ ù°¶ÛüvVnf«ø´Óß5õKG‚(ÐÙO:Û7˜W Õ¿|ð!Ë z`g¶fÊþžD) Fš¨Ï3°LÉLŒêÎC´Áx˜hûñ}“+Si Ý3\-ª„¡é·•€€ãöX€k3£ÆF°ÞêjG5é ¸AÙ&NäŽ ž-å&¨ˆŸÞ_ÐìX’ìÚ;MÃr«¬ŠÇÁ\¾qÃtbüÕªÂì› Ê-=úIô”ɳü²µ=¾¯#àQ à#<ªï;¶:ÝuI‚ªª?£¡ðp†ÀD7¿¤GÈß¿ÔÚ5ÖÃ9• £ñàx hòÝS×¢ãSìœVõL÷åiÈlMÁð0“‘¿õã­àˆ‘\l”îQnÓØfU¹O|”óüK?ƒûð:zW4ë'°1·4°˜õUH J_|½Ã°I$pZHMÿ†ÎÆ‹æ+[·—=é‰ÜzTó+Gê˜É‘z@72ã ðÑû³4 Ûa½tÿFnÈ’“*KÖ½ƒPô‰f6(ô"ïš‹‰<šL>*íó¨ITWã`CŒÆúŸ¾UÀ ³«ÁW û†¨i}Ýÿ\ëÚaž<Ÿj"ø)qQLñÛG7©§Õ@\©«c9Dlœ¾RPæšíz-/|Eã²£ÏQo îi§îÙÖ F*ãÞv©‘š6WËòò:/·í8Yç$òÊüe[Ó_༶¶‚œÒÈÔÍûDV^‹Š©p ^cSU¥wP®¥JðpwæÀSsŠE2Œ¬ª¯?n,}„ÿwÓfR´þ3з嗯h+r//Ër/l6=Ï‚-µ‚©!.gBÍ·œÿ+0]M¶K‘³ ;2vªüªÏüŒONWö'Vº^ À#'<18‚(@«†sªŸŒÆ4µJYÛåï,ÎýÏ„ÊïDÖ7 ññŠUÍ'vQ;õ>YÀò£ ©#òÙL&&±È7¤ R;ª‚(»Ârë²NÉÂÉ:ƒ·™6^uû& ½—óNä>fͲŽâwàkØLïjÇo¾wô `Ĉψ‡L®”x÷®¿‰x$¹™ó¹A”Nyæú{¯Kpj‘³’m¯ßY‘meʃL4„i<¸x²–Ãw–x%°›~»ÄG‡ÏÐP¿ªÓ½ŠW÷HóH 5ÂÛ\F’A{©Èé!ÑË&ZéNš”Õ:ÖÒ—¬cÚád´,p#ƒÍáNY–iD÷“O´³u˜,hšg%Î^µ)âQdலüˆÚoß#ñ#öcîPwQÏf[“ ŠŽ7ä?­^0 v¯t×°î<¤ž’@?YsãBÖlÔYó”Kc–ß]5/R¥áÒ/Š;SÙ’üØ%ˆÝáDƒ)Ø”c5A¦–=±5`wLÜë­»¬I[¤èY¡˜+™b ^²‹Žœµ „¨ü“D޳;'Ç{ܬW*¾Ÿnw¤2ÈEÔ.·®ª8¨{ÐÅr×»è—Ù!O’§¯ /¡çƒ¦Vå{N’^S”M]1nå»ðÕ‹¾'«©K½b.{5Í·6% öÓñ,Òò¨¤ASÐnz$ÑÜSþÍþÏŠÉñì€Í)óòH*ÂÖa9Ÿ„B¥%Cß./¯ü.ÊÿLJ\K@¨Zn ®žÁ^Z´™“?••†`c9—סœ3ø†í¢Ò5¥K Fv†Ïk÷c«Ðe@GÇ(à÷êù¥j2Þ.½üÜ ®k4JÖÈñåùÕiÚ¢so axB=ÔÏŽyža2Ñm¾ƒ•¡[WÞ­‚æù4n[¼–Üß+†™Ûf,‘ŒJß•å.óW=¿N/ßÚÏ]v‡ÇS¹_—..V Ôg.´áÜšŽÀ5‡?ÿ2À+ ¼Q‘"=¯áx_JH§ú!…üõ…0Âh+Š™*ýžT2 ˆnÂaE:?+¡GŽ(¢LîòçÁê’g´,t–Ɇ~ÇÞ}$uP¿I€*t Ά–9£ƒ9xèÐo3%3¢~°»C±3§Lf®TÁèÍ·¸MÆZía¥YïÝ<–ac–›4îæw"wË#êGÎyå l¼ƒÑ.®3î+»ñ: q÷.¥Åu¹<È-§<øQëu@YÜá>â‘°vI8^»\Ò%—a)ΖR î#œk©-?²‰©âÙ,ÑÙ‰RrÈ®«­e’aK…¤ƒ~©›çôU®Ö†’™ªþζ½þS^zÅs—3¶L£áBXK™¸l@(¥*2À˜~ÕÌÊÔ­ .U!8GFÕû¨&B =.ÿRƒVu_;÷ÌÄuÀ}Ƨ+Qí[ªºk¨ ¦2!–œ®ßw«E§ùÁõ*H.¥vÆð”<±Œ·[ñd½±ßÃâf!ß2ÌÐYûDßýØÆçâ sàÜdN–qÕ\åÚh¾F¸e?  Ü7f-õp.\8Uê×™ê›Âý3ú3€7°=¡KôôqØŸIÓ»9Éi×ÑëÍ}V&W­ÄÖ{¬DJC,B>/Þ›`@¾F†¼üS)gŸ)¥„~¨A²á91­ËìC~ªÐ¨©•Ñ;²óaeæƒ;…ý"Å\>çýÎÑç1ÓD ò»BÕÓÊ„3ÂX¾ ÔÁ£X[R¡rR,9¯ç8´Î¼b@q£Wæy8Û¯Hè77ÐÿudÑèDß{ÜTíqÞÏ2¸W; # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . file(GLOB TRANSLATION_FILES *.ts) get_filename_component(TRANSLATION_EN_ABS keepassx_en.ts ABSOLUTE) list(REMOVE_ITEM TRANSLATION_FILES keepassx_en.ts) list(REMOVE_ITEM TRANSLATION_FILES ${TRANSLATION_EN_ABS}) message(STATUS ${TRANSLATION_FILES}) qt4_add_translation(QM_FILES ${TRANSLATION_FILES}) install(FILES ${QM_FILES} DESTINATION ${DATA_INSTALL_DIR}/translations) add_custom_target(translations DEPENDS ${QM_FILES}) add_dependencies(${PROGNAME} translations) keepassx-2.0.3/share/translations/keepassx_cs.ts000066400000000000000000001307621276304217300220600ustar00rootroot00000000000000 AboutDialog About KeePassX O KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX je šířeno za podmínek licence GNU General Public License (GPL) verze 2 a (případnÄ›) 3. Revision Revize Using: S použitím: AutoType Auto-Type - KeePassX Automatické vyplňování – KeePassX Couldn't find an entry that matches the window title: Nedaří se nalézt položku, která by se shodovala s titulkem okna: AutoTypeAssociationsModel Window Okno Sequence Posloupnost Default sequence Výchozí posloupnost AutoTypeSelectDialog Auto-Type - KeePassX Automatické vyplňování – KeePassX Select entry to Auto-Type: Vyberte položku, kterou se bude automaticky vyplňovat: ChangeMasterKeyWidget Password Heslo Enter password: Zadejte heslo: Repeat password: Zopakujte heslo: Key file Soubor s klíÄem Browse Procházet Create VytvoÅ™it Key files Soubory s klíÄi All files VeÅ¡keré soubory Create Key File... VytvoÅ™it soubor s klíÄem… Error Chyba Unable to create Key File : Nedaří se vytvoÅ™it soubor s klíÄem: Select a key file Vyberte soubor s klíÄem Question Dotaz Do you really want to use an empty string as password? Opravdu chcete ponechat bez hesla, tedy nechránÄ›né? Different passwords supplied. NepodaÅ™ilo se vám zadat heslo do obou kolonek stejnÄ›. Failed to set key file NezdaÅ™ilo se nastavit soubor s klíÄem Failed to set %1 as the Key file: %2 NezdaÅ™ilo se nastavit %1 jako soubor s klíÄem: %2 DatabaseOpenWidget Enter master key Zadejte hlavní klÃ­Ä Key File: Soubor s klíÄem: Password: Heslo: Browse Procházet Error Chyba Unable to open the database. Databázi se nedaří otevřít. Can't open key file Soubor s klíÄem se nedaří otevřít All files VeÅ¡keré soubory Key files Soubory s klíÄi Select key file Vyberte soubor s klíÄem DatabaseRepairWidget Repair database Opravit databázi Error Chyba Can't open key file Nedaří se otevřít soubor s klíÄem Database opened fine. Nothing to do. Databáze je v pořádku otevÅ™ená. Není tÅ™eba žádného zásahu. Unable to open the database. Nedaří se otevřít databázi. Success ÚspÄ›ch The database has been successfully repaired You can now save it. Databáze je úspěšnÄ› opravená Nyní jí můžete uložit. Unable to repair the database. Databázi se nedaří opravit. DatabaseSettingsWidget Database name: Název databáze: Database description: Popis databáze: Transform rounds: PoÄet průchodů Å¡ifrovacího algoritmu: Default username: Výchozí uživatelské jméno: Use recycle bin: Namísto mazání pÅ™esouvat do KoÅ¡e: MiB MiB Benchmark Test výkonu Max. history items: Omezit poÄet uchovávaných pÅ™edchozích verzí položky na: Max. history size: Omezit datový objem pÅ™edchozích verzí položek na: DatabaseTabWidget Root KoÅ™en KeePass 2 Database Databáze ve formátu KeePass verze 2 All files VeÅ¡keré soubory Open database Otevřít databázi Warning Varování File not found! Soubor nebyl nalezen! Open KeePass 1 database Otevřít databázi ve formátu KeePass verze 1 KeePass 1 database Databáze ve formátu KeePass verze 1 All files (*) VeÅ¡keré soubory (*) Close? Zavřít? Save changes? Uložit zmÄ›ny? "%1" was modified. Save changes? „%1“ bylo zmÄ›nÄ›no. Uložit zmÄ›ny? Error Chyba Writing the database failed. Zápis do databáze se nezdaÅ™il. Save database as Uložit databázi jako New database Nová databáze locked zamÄeno The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Pro databázi, kterou se pokoušíte otevřít, existuje zámek úprav (stejnojmenný .lock soubor). To znamená, že je nejspíš už otevÅ™ená v jiném oknÄ› KeePassX (v případÄ› sdíleného úložiÅ¡tÄ›, tÅ™eba i na jiném poÄítaÄi). Pokud tomu tak není, je zámek nejspíš pozůstatkem pÅ™edchozího neoÄekávaného ukonÄení aplikace a je možné ho smazat. V každém případÄ›, dotÄenou databázi je možné otevřít i tak, ale pouze pro Ätení. Chcete? Lock database Uzamknout databázi Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Nelze uzamknout databázi, protože ji v tuto chvíli upravujete. Pokud chcete zmÄ›ny dokonÄit, kliknÄ›te na ZruÅ¡it. V opaÄném případÄ› zmÄ›ny zahodíte. This database has never been saved. You can save the database or stop locking it. Tato databáze doposud jeÅ¡tÄ› nebyla uložena. BuÄ ji můžete uložit, nebo neuzamknout. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Tato databáze byla upravena. Chcete ji pÅ™ed uzamÄením uložit? Pokud ne, provedené zmÄ›ny budou ztraceny. "%1" is in edit mode. Discard changes and close anyway? „%1“ je právÄ› upravováno. PÅ™esto zavřít a zahodit zmÄ›ny? Export database to CSV file Exportovat databázi do CSV souboru CSV file CSV soubor Writing the CSV file failed. Zápis do CSV souboru se nezdaÅ™il. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Databáze, kterou se pokoušíte uložit, je uzamÄena jinou instancí KeePassX. PÅ™esto uložit? DatabaseWidget Change master key ZmÄ›nit hlavní klÃ­Ä Delete entry? Smazat položku? Do you really want to delete the entry "%1" for good? Opravdu chcete nenávratnÄ› smazat položku „%1“? Delete entries? Smazat položky? Do you really want to delete %1 entries for good? Opravdu chcete nenávratnÄ› smazat %1 položek? Move entries to recycle bin? PÅ™esunout položky do KoÅ¡e? Do you really want to move %n entry(s) to the recycle bin? Opravdu chcete pÅ™esunout %n položku do KoÅ¡e?Opravdu chcete pÅ™esunout %n položky do KoÅ¡e?Opravdu chcete pÅ™esunout %n položek do KoÅ¡e? Delete group? Smazat skupinu? Do you really want to delete the group "%1" for good? Opravdu chcete nenávratnÄ› smazat skupinu „%1“? Current group Stávající skupina Error Chyba Unable to calculate master key Nedaří se spoÄítat hlavní klÃ­Ä EditEntryWidget Entry Položka Advanced PokroÄilé Icon Ikona Auto-Type Automatické vyplňování Properties Vlastnosti History Historie Entry history Historie položky Add entry PÅ™idat položku Edit entry Upravit položku Error Chyba Different passwords supplied. Zadání hesla se neshodují. New attribute Nový atribut Select file Vyberte soubor Unable to open file Soubor se nedaří otevřít Save attachment Uložit přílohu Unable to save the attachment: Přílohu se nedaří uložit: Tomorrow Zítra %n week(s) %n týden%n týdny%n týdnů %n month(s) %n mÄ›síc%n mÄ›síce%n mÄ›síců 1 year 1 rok EditEntryWidgetAdvanced Additional attributes Další atributy Add PÅ™idat Edit Upravit Remove Odebrat Attachments Přílohy Save Uložit Open Otevřít EditEntryWidgetAutoType Enable Auto-Type for this entry Zapnout automatické vyplňování této položky Inherit default Auto-Type sequence from the group PÅ™evzít výchozí posloupnost automatického vyplňování od skupiny Use custom Auto-Type sequence: Použít vlastní posloupnost automatického vyplňování: + + - - Window title: Titulek okna: Use default sequence Použít výchozí posloupnost Set custom sequence: Nastavit vlastní posloupnost: EditEntryWidgetHistory Show Zobrazit Restore Obnovit Delete Smazat Delete all Smazat vÅ¡e EditEntryWidgetMain Title: Titulek: Username: Uživatelské jméno: Password: Heslo: Repeat: Zopakování hesla: Gen. TvoÅ™ URL: URL adresa: Expires Platnost skonÄí: Presets PÅ™edpÅ™ipravené Notes: Poznámky: EditGroupWidget Group Skupina Icon Ikona Properties Vlastnosti Add group PÅ™idat skupinu Edit group Upravit skupinu Enable Zapnout Disable Vypnout Inherit from parent group (%1) PÅ™evzít od nadÅ™azené skupiny (%1) EditGroupWidgetMain Name Název Notes Poznámky Expires Platnost skonÄí Search Hledat Auto-type Automatické vyplňování Use default auto-type sequence of parent group Použít výchozí posloupnost automatického vyplňování z nadÅ™azené skupiny Set default auto-type sequence Nastavit výchozí posloupnost automatického vyplňování EditWidgetIcons Use default icon Použít výchozí ikonu Use custom icon Použít svou vlastní ikonu Add custom icon PÅ™idat svou vlastní ikonu Delete custom icon Smazat svou vlastní ikonu Images Obrázky All files VeÅ¡keré soubory Select Image Vyberte obrázek Can't delete icon! Ikonu nelze smazat! Can't delete icon. Still used by %n item(s). Ikonu není možné smazat. Je používána %n položkou.Ikonu není možné smazat. Je používána %n položkami.Ikonu není možné smazat. JeÅ¡tÄ› jí používá %n položek. EditWidgetProperties Created: Okamžik vytvoÅ™ení: Modified: Okamžik minulé úpravy: Accessed: Okamžik minulého přístupu: Uuid: UniverzálnÄ› jedineÄný identifikátor: EntryAttributesModel Name Název EntryHistoryModel Last modified Okamžik minulé zmÄ›ny Title Titulek Username Uživatelské jméno URL URL adresa EntryModel Group Skupina Title Titulek Username Uživatelské jméno URL URL adresa Group Recycle Bin KoÅ¡ KeePass1OpenWidget Import KeePass1 database Importovat databázi ve formátu KeePass verze 1 Error Chyba Unable to open the database. Databázi se nedaří otevřít. KeePass1Reader Unable to read keyfile. Nedaří se naÄíst soubor s klíÄem. Not a KeePass database. Nejedná se o databázi Keepass. Unsupported encryption algorithm. Nepodporovaný Å¡ifrovací algoritmus. Unsupported KeePass database version. Nepodporovaná verze databáze KeePass. Root KoÅ™en Unable to calculate master key Nedaří se spoÄítat hlavní klÃ­Ä KeePass2Reader Not a KeePass database. Nejedná se o databázi KeePass. Unsupported KeePass database version. Nepodporovaná verze databáze KeePass. Wrong key or database file is corrupt. Chybný klÃ­Ä nebo je databáze poÅ¡kozená. Unable to calculate master key Nedaří se spoÄítat hlavní klÃ­Ä The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Zvolený soubor je databáze ve starém formátu KeePass 1 (.kdb). Můžete ho importovat pomocí Databáze → Importovat databázi KeePass 1. Jedná se o jednosmÄ›rný pÅ™evod. Databázi, vzniklou z importu, nepůjde otevřít ve staré verzi KeePassX 0.4. Main Fatal error while testing the cryptographic functions. PÅ™i ověřování Å¡ifrovacích funkcí byl zjiÅ¡tÄ›n fatální nedostatek. KeePassX - Error KeePassX – chyba MainWindow Database Databáze Recent databases Nedávno otevÅ™ené databáze Help NápovÄ›da Entries Položky Copy attribute to clipboard Zkopírovat atribut do schránky Groups Skupiny View Zobrazit Quit UkonÄit aplikaci About O aplikaci Open database Otevřít databázi Save database Uložit databázi Close database Zavřít databázi New database Nová databáze Add new entry PÅ™idat novou položku View/Edit entry Zobrazit/upravit položku Delete entry Smazat položku Add new group PÅ™idat novou skupinu Edit group Upravit skupinu Delete group Smazat skupinu Save database as Uložit databázi jako Change master key ZmÄ›nit hlavní klÃ­Ä Database settings Nastavení databáze Import KeePass 1 database Importovat databázi aplikace KeePass verze 1 Clone entry Klonovat položku Find Najít Copy username to clipboard Zkopírovat uživatelské jméno do schránky Copy password to clipboard Zkopírovat heslo do schránky Settings Nastavení Perform Auto-Type Provést automatické vyplnÄ›ní Open URL Otevřít URL adresu Lock databases Uzamknout databáze Title Titulek URL URL adresa Notes Poznámky Show toolbar Zobrazit liÅ¡tu nástrojů read-only pouze pro Ätení Toggle window Zobrazit/skrýt okno Tools Nástroje Copy username Zkopírovat uživatelské jméno Copy password Zkopírovat heslo Export to CSV file Exportovat do CSV souboru Repair database Opravit databázi KeePass 2 Database Databáze ve formátu KeePass 2 All files VÅ¡echny soubory Save repaired database Uložit opravenou databázi Error Chyba Writing the database failed. Zápis do databáze se nezdaÅ™il. PasswordGeneratorWidget Password: Heslo: Length: Délka: Character Types Typy znaků Upper Case Letters Velká písmena Lower Case Letters Malá písmena Numbers Číslice Special Characters Zvláštní znaky Exclude look-alike characters Vynechat podobnÄ› vypadající znaky (pÅ™edejití zámÄ›nÄ›) Ensure that the password contains characters from every group Zajistit, aby heslo obsahovalo znaky ze vÅ¡ech zvolených skupin znaků Accept PÅ™ijmout QCommandLineParser Displays version information. Zobrazí informace o verzi. Displays this help. Zobrazí tuto nápovÄ›du. Unknown option '%1'. Neznámá pÅ™edvolba %1. Unknown options: %1. Neznámé pÅ™edvolby: %1. Missing value after '%1'. ChybÄ›jící hodnota, následující za %1. Unexpected value after '%1'. NeoÄekávaná hodnota, následující za %1. [options] [pÅ™edvolby] Usage: %1 Použití: %1 Options: PÅ™edvolby: Arguments: Argumenty: QSaveFile Existing file %1 is not writable Do stávajícího souboru %1 nelze zapisovat Writing canceled by application Zápis byl zruÅ¡en aplikací Partial write. Partition full? Zápis nebylo možné zcela dokonÄit. Nedostatek volného místa? QtIOCompressor Internal zlib error when compressing: BÄ›hem komprimace se vyskytla vnitÅ™ní chyba v knihovnÄ› zlib: Error writing to underlying device: DoÅ¡lo k chybÄ› pÅ™i zápisu na zařízení, na kterém se nachází: Error opening underlying device: DoÅ¡lo k chybÄ› pÅ™i otevírání zařízení, na kterém se nachází: Error reading data from underlying device: DoÅ¡lo k chybÄ› pÅ™i Ätení dat ze zařízení, na kterém se nachází: Internal zlib error when decompressing: VnitÅ™ní chyba knihovny zlib pÅ™i rozbalování: QtIOCompressor::open The gzip format not supported in this version of zlib. Použitý formát gzip komprese není podporován verzí knihovny zlib, která je právÄ› používána na tomto systému. Internal zlib error: VnitÅ™ní chyba knihovny zlib: SearchWidget Find: Najít: Case sensitive RozliÅ¡ovat malá/velká písmena Current group Stávající skupina Root group KoÅ™enová skupina SettingsWidget Application Settings Nastavení aplikace General Obecné Security ZabezpeÄení SettingsWidgetGeneral Remember last databases Pamatovat si nedávno otevÅ™ené databáze Open previous databases on startup PÅ™i spuÅ¡tÄ›ní aplikace otevřít minule otevÅ™ené databáze Automatically save on exit PÅ™ed ukonÄením aplikace automaticky uložit případné zmÄ›ny Automatically save after every change Po každé zmÄ›nÄ› hned automaticky uložit Minimize when copying to clipboard Po zkopírování údaje do schránky automaticky minimalizovat okno KeePassX (do popÅ™edí se tak dostane okno, do kterého se zkopírovaný údaj bude vkládat) Use group icon on entry creation Pro vytvářenou položku použít ikonu skupiny, do které spadá Global Auto-Type shortcut Klávesová zkratka pro vÅ¡eobecné automatické vyplňování Use entry title to match windows for global auto-type VÅ¡eobecné automatické vyplňování provádÄ›t na základÄ› shody titulku položky s titulkem okna. Language Jazyk Show a system tray icon Zobrazovat ikonu v oznamovací oblasti systémového panelu Hide window to system tray when minimized Minimalizovat okno aplikace do oznamovací oblasti systémového panelu Remember last key files Pamatovat si nedávno otevÅ™ené soubory s klíÄi SettingsWidgetSecurity Clear clipboard after Vymazat obsah schránky po uplynutí sec sek. Lock databases after inactivity of Uzamknout databázi pÅ™i neÄinnosti delší než Show passwords in cleartext by default Hesla vždy viditelná (nezakrývat hvÄ›zdiÄkami) Always ask before performing auto-type PÅ™ed provedením automatického vyplnÄ›ní se vždy dotázat UnlockDatabaseWidget Unlock database Odemknout databázi WelcomeWidget Welcome! Vítejte! main KeePassX - cross-platform password manager KeePassX – správce hesel, fungující napÅ™Ã­Ä rozliÄnými operaÄními systémy filename of the password database to open (*.kdbx) který soubor s databází hesel (*.kdbx) otevřít path to a custom config file umístÄ›ní souboru s vlastními nastaveními key file of the database soubor s klíÄem k databázi keepassx-2.0.3/share/translations/keepassx_da.ts000066400000000000000000001234371276304217300220400ustar00rootroot00000000000000 AboutDialog About KeePassX Om KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX distribueres under betingelserne i GNU General Public License (GPL) version 2 eller (efter eget valg) version 3. Revision Revision Using: Bruger: AutoType Auto-Type - KeePassX Auto-indsæt - KeePassX Couldn't find an entry that matches the window title: Kunne ikke finde en post, der matcher vinduets titel: AutoTypeAssociationsModel Window Vindue Sequence Sekvens Default sequence Standardsekvens AutoTypeSelectDialog Auto-Type - KeePassX Auto-indsæt - KeePassX Select entry to Auto-Type: Vælg post til Auto-Indsæt: ChangeMasterKeyWidget Password Kodeord Enter password: Indtast kodeord Repeat password: Gentag kodeord Key file Nøglefil Browse Gennemse Create Opret Key files Nøglefiler All files Alle filer Create Key File... Opret Nøglefil... Error Fejl Unable to create Key File : Kan ikke oprette Nøglefil : Select a key file Vælg en nøglefil Question SpørgsmÃ¥l Do you really want to use an empty string as password? Vil du virkelig bruge en tom streng som kodeord? Different passwords supplied. Andre kodeord leveret. Failed to set key file Kan ikke sætte nøglefil Failed to set %1 as the Key file: %2 Kunne ikke sætte %1 som Nøglefil: %2 DatabaseOpenWidget Enter master key Indtast hovednøgle Key File: Nøglefil: Password: Kodeord: Browse Gennemse Error Fejl Unable to open the database. Kan ikke Ã¥bne databasen. Can't open key file Kan ikke Ã¥bne nøglefil All files Alle filer Key files Nøglefiler Select key file Vælg nøglefil DatabaseRepairWidget Repair database Reparer database Error Fejl Can't open key file Kan ikke Ã¥bne nøglefil Database opened fine. Nothing to do. Databasen Ã¥bnede fint. Intet at gøre. Unable to open the database. Kan ikke Ã¥bne databasen. Success Succes The database has been successfully repaired You can now save it. Databasen er blevet succesfuldt repareret Du kan gemme den nu. Unable to repair the database. Kan ikke reparere databasen. DatabaseSettingsWidget Database name: Databasenavn: Database description: Beskrivelse af database: Transform rounds: Transformationsrunder: Default username: Standard brugernavn: Use recycle bin: Brug skraldespand: MiB MB Benchmark Benchmark Max. history items: Maks. posthistorik: Max. history size: Maks. historikstørrelse: DatabaseTabWidget Root Rod KeePass 2 Database KeePass 2 Database All files Alle filer Open database Ã…ben database Warning Advarsel File not found! Filen blev ikke fundet! Open KeePass 1 database Ã…ben KeePass 1 database KeePass 1 database KeePass 1 database All files (*) Alle filer (*) Close? Luk? Save changes? Gem ændringer? "%1" was modified. Save changes? "%1" blev ændret. Gem disse ændringer? Error Fejl Writing the database failed. Kan ikke skrive til databasen. Save database as Gem database som New database Ny database locked lÃ¥st The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Den database, du prøver at Ã¥bne er lÃ¥st af en anden forekomst af KeePassX. Vil du Ã¥bne den alligevel? Alternativt Ã¥bnes databasen skrivebeskyttet. Lock database LÃ¥s database Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Kan ikke lÃ¥se databasen, mens du redigerer i den. Tryk pÃ¥ Afbryd for at afslutte dine ændringer eller kassere dem. This database has never been saved. You can save the database or stop locking it. Denne database er aldrig blevet gemt. Du kan gemme databasen eller stop lÃ¥sning. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Denne database er blevet ændret. Vil du gemme databasen før lÃ¥sning? Ellers mister du dine ændringer. "%1" is in edit mode. Discard changes and close anyway? "%1" er i redigeringstilstand. Kassér ændringer og luk alligevel? Export database to CSV file Eksportér databasen til CSV-fil CSV file CSV-fil Writing the CSV file failed. Kan ikke skrive til CSV-fil. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Databasen som du prøver at gemme er lÃ¥st af en anden instans af KeePassX. Vil du alligevel gemme? DatabaseWidget Change master key Skift hovednøgle Delete entry? Slet post? Do you really want to delete the entry "%1" for good? Vil du virkelig slette posten "%1" permanent? Delete entries? Slet poster? Do you really want to delete %1 entries for good? Vil du virkelig slette %1 poster permanent? Move entries to recycle bin? Flyt poster til skraldespanden? Do you really want to move %n entry(s) to the recycle bin? Ønsker du virkelig at flytte %n post over i papirkurven?Ønsker du virkelig at flytte %n poster over i papirkurven? Delete group? Slet gruppe? Do you really want to delete the group "%1" for good? Ønsker du at slette gruppen "%1" permanent? Current group Nuværende gruppe Error Fejl Unable to calculate master key Kan ikke beregne hovednøgle EditEntryWidget Entry Post Advanced Avanceret Icon Ikon Auto-Type Auto-Indsæt Properties Egenskaber History Historik Entry history Indtastningshistorik Add entry Tilføj post Edit entry Rediger post Error Fejl Different passwords supplied. Andre kodeord leveret. New attribute Ny attribut Select file Vælg fil Unable to open file Filen kan ikke Ã¥bnes Save attachment Gem vedhæftning Unable to save the attachment: Kan ikke gemme vedhæftningen: Tomorrow I morgen %n week(s) %n uge%n uger %n month(s) %n mÃ¥ned%n mÃ¥neder 1 year Et Ã¥r EditEntryWidgetAdvanced Additional attributes Yderligere attributter Add Tilføj Edit Rediger Remove Fjern Attachments Vedhæftninger Save Gem Open Ã…ben EditEntryWidgetAutoType Enable Auto-Type for this entry Aktivér Auto-Indsæt for denne post Inherit default Auto-Type sequence from the group Nedarv standard Auto-Indsæt sekvens fra gruppe Use custom Auto-Type sequence: Brug brugerdefineret Auto-indsæt sekvens: + + - - Window title: Vinduestitel: Use default sequence Brug standardsekvens Set custom sequence: Definér brugervalgt sekvens: EditEntryWidgetHistory Show Vis Restore Gendan Delete Slet Delete all Slet alle EditEntryWidgetMain Title: Titel: Username: Brugernavn: Password: Kodeord: Repeat: Gentag: Gen. Generer URL: URL: Expires Udløber Presets Predefinerede Notes: Noter: EditGroupWidget Group Gruppe Icon Ikon Properties Egenskaber Add group Tilføj gruppe Edit group Rediger gruppe Enable Aktiver Disable Deaktivér Inherit from parent group (%1) Arv fra forældregruppe (%1) EditGroupWidgetMain Name Navn Notes Noter Expires Udløber Search Søg Auto-type Auto-indsæt Use default auto-type sequence of parent group Brug standard Auto-Indsæt sekvens fra forældregruppe Set default auto-type sequence Definér standard auto-indsæt sekvens EditWidgetIcons Use default icon Brug standardikon Use custom icon Brug brugerbestemt ikon Add custom icon Tilføj brugerbestemt ikon Delete custom icon Slet brugerbestemt ikon Images Billeder All files Alle filer Select Image Vælg Billede Can't delete icon! Kan ikke slette ikon! Can't delete icon. Still used by %n item(s). Kan ikke slette ikonet. Det anvendes stadig af %n element.Kan ikke slette ikonet. Det anvendes stadig af %n elementer. EditWidgetProperties Created: Oprettet: Modified: Ændret: Accessed: TilgÃ¥et: Uuid: Uuid: EntryAttributesModel Name Navn EntryHistoryModel Last modified Sidst ændret Title Titel Username Brugernavn URL URL EntryModel Group Gruppe Title Titel Username Brugernavn URL URL Group Recycle Bin Skraldespand KeePass1OpenWidget Import KeePass1 database Importér KeePass1 database Error Fejl Unable to open the database. Kan ikke Ã¥bne databasen. KeePass1Reader Unable to read keyfile. Kan ikke indlæse nøglefil. Not a KeePass database. Ikke en KeePass database. Unsupported encryption algorithm. Ikke understøttet krypteringsalgoritme Unsupported KeePass database version. Ikke understøttet KeePass database version Root Rod Unable to calculate master key Kan ikke beregne hovednøgle KeePass2Reader Not a KeePass database. Dette er ikke en KeePass database. Unsupported KeePass database version. KeePass database version ikke understøttet. Wrong key or database file is corrupt. Forkert nøgle eller databasefil er korrupt. Unable to calculate master key Kan ikke beregne hovednøgle The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Den valgte fil er en gammel KeePass 1 databasefil (.kdb). Du kan importere den ved at klikke pÃ¥ Database > 'Importér KeePass 1 database'. Dette er en envejs konvertering. Du vil ikke være i stand til at Ã¥bne den importerede database med den gamle KeePassX 0.4 version. Main Fatal error while testing the cryptographic functions. Fatal fejl ved test af kryptografiske funktioner. KeePassX - Error KeePassX - Fejl MainWindow Database Database Recent databases Seneste databaser Help Hjælp Entries Poster Copy attribute to clipboard Kopiér attribut til udklipsholder Groups Grupper View Vis Quit Afslut About Om Open database Ã…ben database Save database Gem database Close database Luk databasen New database Ny database Add new entry Tilføj ny post View/Edit entry Vis/Rediger post Delete entry Slet post Add new group Tilføj ny gruppe Edit group Rediger gruppe Delete group Slet gruppe Save database as Gem database som Change master key Skift hovednøgle Database settings Databaseindstillinger Import KeePass 1 database Importér KeePass 1 database Clone entry Klon post Find Find Copy username to clipboard Kopiér brugernavn til udklipsholder Copy password to clipboard Kopiér kodeord til udklipsholder Settings Indstillinger Perform Auto-Type Udfør Auto-indsæt Open URL Ã…ben URL Lock databases LÃ¥s databaser Title Titel URL URL Notes Noter Show toolbar Vis værktøjslinie read-only skrivebeskyttet Toggle window Skift vindue Tools Værktøj Copy username Kopiér brugernavn Copy password Kopiér kodeord Export to CSV file Eksportér til CSV-fil Repair database Reparer database KeePass 2 Database KeePass 2 Database All files Alle filer Save repaired database Gem repareret database Error Fejl Writing the database failed. Skrivning til database fejler. PasswordGeneratorWidget Password: Kodeord: Length: Længde: Character Types Tegntyper Upper Case Letters Store Bogstaver Lower Case Letters SmÃ¥ Bogstaver Numbers Numre Special Characters Specialtegn Exclude look-alike characters Udeluk lool-alike tegn Ensure that the password contains characters from every group Vær sikker pÃ¥ at dit kodeord indeholder tegn fra alle grupper Accept Acceptér QCommandLineParser Displays version information. Vis versionsinformation Displays this help. Vis denne hjælp. Unknown option '%1'. Ukendt valgmulighed '%1'. Unknown options: %1. Ukendt valgmuligheder '%1'. Missing value after '%1'. Manglende værdi efter '%1'. Unexpected value after '%1'. Uventet værdi efter '%1'. [options] [Valgmuligheder] Usage: %1 Brug: %1 Options: Muligheder: Arguments: Argumenter: QSaveFile Existing file %1 is not writable Eksisterende fil %1 er ikke skrivbar Writing canceled by application Skrivning afbrudt af programmet Partial write. Partition full? Delvis gemt. Diskafsnit fyldt op? QtIOCompressor Internal zlib error when compressing: Intern zlib-fejl ved komprimering: Error writing to underlying device: Fejl ved skrivning til enhed: Error opening underlying device: Fejl ved Ã¥bning fra enhed: Error reading data from underlying device: Fejl ved læsning af data fra underliggende enhed: Internal zlib error when decompressing: Intern zlib-fejl ved dekomprimering: QtIOCompressor::open The gzip format not supported in this version of zlib. Gzip-format understøttes ikke i denne version af zlib. Internal zlib error: Intern zlib fejl: SearchWidget Find: Find: Case sensitive Versalfølsom Current group Nuværende gruppe Root group Rodgruppe SettingsWidget Application Settings Programindstillinger General Generelt Security Sikkerhed SettingsWidgetGeneral Remember last databases Husk seneste databaser Open previous databases on startup Ã…ben foregÃ¥ende databaser ved opstart Automatically save on exit Gem automatisk ved afslutning Automatically save after every change Gem automatisk ved ændringer Minimize when copying to clipboard Minimér ved kopiering til udklipsholder Use group icon on entry creation Brug gruppeikon ved oprettelse af post Global Auto-Type shortcut Global Auto-Indsæt genvej Use entry title to match windows for global auto-type Brug titel pÃ¥ post til at matche global aito-indsæt Language Sprog Show a system tray icon Vis et ikon i systembakken Hide window to system tray when minimized Skjul vindue i systembakken nÃ¥r det er minimeret Remember last key files Husk de sidste nøglefiler SettingsWidgetSecurity Clear clipboard after Ryd udklipsholder efter sec sek Lock databases after inactivity of LÃ¥s databaserne efter inaktivitet i Show passwords in cleartext by default Vis kodeord i klartekst som standard Always ask before performing auto-type Spørg altid før auto-indsæt UnlockDatabaseWidget Unlock database LÃ¥s database op WelcomeWidget Welcome! Velkommen! main KeePassX - cross-platform password manager KeePassX - cross-platform password manager filename of the password database to open (*.kdbx) filnavn pÃ¥ databasen der skal Ã¥bnes (* .kdbx) path to a custom config file sti til brugerdefineret indstillingsfil key file of the database databasens nøglefil keepassx-2.0.3/share/translations/keepassx_de.ts000066400000000000000000001264221276304217300220410ustar00rootroot00000000000000 AboutDialog About KeePassX Über KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX steht unter der GNU General Public License (GPL) version 2 (version 3). Revision Überarbeitung Using: In Benutzung: AutoType Auto-Type - KeePassX Auto-Type - KeePassX Couldn't find an entry that matches the window title: Konnte keinen Eintrag finden, welcher mit dem Fenstertitel übereinstimmt: AutoTypeAssociationsModel Window Fenster Sequence Reihenfolge Default sequence Standardreihenfolge AutoTypeSelectDialog Auto-Type - KeePassX Auto-Type - KeePassX Select entry to Auto-Type: Wählen Sie einen Eintrag für Auto-Type: ChangeMasterKeyWidget Password Passwort Enter password: Passwort eingeben: Repeat password: Passwort wiederholen: Key file Schlüsseldatei Browse Durchsuchen Create Erstellen Key files Schlüsseldateien All files Alle Dateien Create Key File... Erzeuge eine Schlüsseldatei... Error Fehler Unable to create Key File : Erzeugen der Schlüsseldatei nicht möglich: Select a key file Schlüsseldatei auswählen Question Frage Do you really want to use an empty string as password? Wollen Sie wirklich eine leere Zeichenkette als Passwort verwenden? Different passwords supplied. Unterschiedliche Passwörter eingegeben. Failed to set key file Festlegen der Schlüsseldatei nicht möglich. Failed to set %1 as the Key file: %2 Festlegen von %1 als Schlüsseldatei nicht möglich: %2 DatabaseOpenWidget Enter master key Hauptschlüssel eingeben Key File: Schlüsseldatei: Password: Passwort: Browse Durchsuchen Error Fehler Unable to open the database. Öffnen der Datenbank nicht möglich. Can't open key file Schlüsseldatei kann nicht geöffnet werden All files Alle Dateien Key files Schlüsseldateien Select key file Schlüsseldatei auswählen DatabaseRepairWidget Repair database Datenbank reparieren Error Fehler Can't open key file Schlüsseldatei kann nicht geöffnet werden Database opened fine. Nothing to do. Datenbank wurde ordnungsgemäß geöffnet. Es gibt nichts zu tun. Unable to open the database. Öffnen der Datenbank nicht möglich. Success Erfolg The database has been successfully repaired You can now save it. Datenbank erfolgreich repariert sie kann nun gespeichert werden. Unable to repair the database. Reparieren der Datenbank nicht möglich. DatabaseSettingsWidget Database name: Datenbankname: Database description: Datenbankbeschreibung: Transform rounds: Verschlüsselungsdurchläufe: Default username: Standardbenutzername: Use recycle bin: Verwende Papierkorb: MiB MiB Benchmark Benchmark Max. history items: Max. Einträge im Verlauf: Max. history size: Max. Verlaufsgröße: DatabaseTabWidget Root Root KeePass 2 Database KeePass 2 Datenbank All files Alle Dateien Open database Datenbank öffnen Warning Warnung File not found! Datei nicht gefunden! Open KeePass 1 database KeePass 1 Datenbank öffnen KeePass 1 database KeePass 1 Datenbank All files (*) Alle Dateien (*) Close? Schließen? Save changes? Änderungen speichern? "%1" was modified. Save changes? "%1" wurde geändert. Änderungen speichern? Error Fehler Writing the database failed. Schreiben der Datenbank fehlgeschlagen. Save database as Datenbank speichern unter New database Neue Datenbank locked gesperrt The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Die Datenbank, die geöffnet werden soll, ist aktuell von einer anderen Instanz von KeePassX blockiert. Soll sie dennoch geöffnet werden? Andererseits wird die Datenbank schreibgeschützt geöffnet. Lock database Datenbank sperren Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Datenbank kann nicht gesperrt werden, da sie gerade bearbeitet wird. Wählen sie "cancel", um die Änderungen zu speichern oder sie zurückzunehmen. This database has never been saved. You can save the database or stop locking it. Diese Datenbank wurde noch nicht gespeichert. Sie können sie speichern oder Sperre freigeben. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Dieses Datenbank wurde geändert. Soll sie gespeichert werden bevor sie gesperrt wirt? Anderenfalls gehen Ihre Änderungen verloren. "%1" is in edit mode. Discard changes and close anyway? "%1" wird bearbeitet. Änderungen verwerfen und trotzdem schließen? Export database to CSV file Datenbank als CSV Datei exportieren. CSV file CSV Datei Writing the CSV file failed. Die CSV Datei konnte nicht gespeichert werden. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Die Datenbank, die gespeichert werden soll, ist von einer anderen Instanz von KeePassX blockiert. Soll sie dennoch gespeichert werden? DatabaseWidget Change master key Hauptschlüssel ändern Delete entry? Eintrag löschen? Do you really want to delete the entry "%1" for good? Wollen Sie den Eintrag "%1" wirklich löschen? Delete entries? Einträge löschen? Do you really want to delete %1 entries for good? Wollen Sie die Einträge "%1" wirklich löschen? Move entries to recycle bin? Einträge in den Papierkorb verschieben? Do you really want to move %n entry(s) to the recycle bin? Wollen Sie wirklich %n Eintrag in den Papierkorb verschieben?Wollen Sie wirklich %n Einträge in den Papierkorb verschieben? Delete group? Gruppe löschen? Do you really want to delete the group "%1" for good? Wollen Sie die Gruppe "%1" wirklich löschen? Current group Aktuelle Gruppe Error Fehler Unable to calculate master key Berechnung des "master keys" gescheitert EditEntryWidget Entry Eintrag Advanced Fortgeschritten Icon Symbol Auto-Type Auto-Type Properties Eigenschaften History Verlauf Entry history Eintragsverlauf Add entry Eintrag hinzufügen Edit entry Eintrag bearbeiten Error Fehler Different passwords supplied. Unterschiedliche Passwörter eingegeben. New attribute Neue Eigenschaft Select file Datei wählen Unable to open file Öffnen der Datei nicht möglich Save attachment Anhang speichern Unable to save the attachment: Speichern des Anhangs nicht möglich: Tomorrow Morgen %n week(s) %n Woche%n Wochen %n month(s) %n Monat%n Monaten 1 year 1 Jahr EditEntryWidgetAdvanced Additional attributes Zusätzliche Eigenschaften Add Hinzufügen Edit Bearbeiten Remove Entfernen Attachments Anhänge Save Speichern Open Offen EditEntryWidgetAutoType Enable Auto-Type for this entry Auto-Type für diesen Eintrag aktivieren Inherit default Auto-Type sequence from the group Standard-Auto-Type-Sequenz von der Gruppe erben Use custom Auto-Type sequence: Benutzerdefinierte Auto-Type-Sequenz benutzen: + + - - Window title: Fenstertitel: Use default sequence Standardsequenz benutzen Set custom sequence: Benutzerdefinierte Sequenz verwenden: EditEntryWidgetHistory Show Anzeigen Restore Wiederherstellen Delete Löschen Delete all Alle löschen EditEntryWidgetMain Title: Titel: Username: Benutzername: Password: Passwort: Repeat: Wiederholen: Gen. Gen. URL: URL: Expires Erlischt Presets Vorgaben Notes: Notizen: EditGroupWidget Group Gruppe Icon Symbol Properties Eigenschaften Add group Gruppe hinzufügen Edit group Gruppe bearbeiten Enable Aktivieren Disable Deaktivieren Inherit from parent group (%1) Von der übergeordneten Gruppe (%1) erben EditGroupWidgetMain Name Name Notes Notizen Expires Erlischt Search Suche Auto-type Auto-type Use default auto-type sequence of parent group Auto-Type-Sequenz der übergeordneten Gruppe anwenden. Set default auto-type sequence Standard Auto-Type-Sequenz setzen EditWidgetIcons Use default icon Standardsymbol verwenden Use custom icon Benutzerdefiniertes Symbol verwenden Add custom icon Benutzerdefiniertes Symbol hinzufügen Delete custom icon Benutzerdefiniertes Symbol löschen Images Bilder All files Alle Dateien Select Image Bild auswählen Can't delete icon! Symbol kann nicht gelöscht werden! Can't delete icon. Still used by %n item(s). Symbol kann nicht gelöscht werden. Es wird von %n Eintrag verwendet.Symbol kann nicht gelöscht werden. Es wird von %n Einträgen verwendet. EditWidgetProperties Created: Erstellt: Modified: Bearbeitet: Accessed: Zugegriffen: Uuid: Uuid: EntryAttributesModel Name Name EntryHistoryModel Last modified Zuletzt geändert Title Titel Username Benutzername URL URL EntryModel Group Gruppe Title Titel Username Benutzername URL URL Group Recycle Bin Papierkorb KeePass1OpenWidget Import KeePass1 database KeePass 1 Datenbank importieren Error Fehler Unable to open the database. Öffnen der Datenbank nicht möglich. KeePass1Reader Unable to read keyfile. Lesen der Schlüsseldatei nicht möglich. Not a KeePass database. Keine KeePass-Datenbank. Unsupported encryption algorithm. Nicht unterstützter Verschlüsselungsalgorithmus. Unsupported KeePass database version. Nicht unterstützte KeePass-Datenbankversion. Root Root Unable to calculate master key Berechnung des "master keys" gescheitert KeePass2Reader Not a KeePass database. Keine KeePass-Datenbank. Unsupported KeePass database version. Nicht unterstützte KeePass-Datenbankversion. Wrong key or database file is corrupt. Falscher Schlüssel oder die Datei ist beschädigt. Unable to calculate master key Berechnung des "master keys" gescheitert The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Die ausgewählte Datei ist eine alte KeePass 1 Datenbank (.kdb). Zum Importieren gehen Sie auf Datenbank > 'KeePass 1 Datenbank importieren'. Dieser Vorgang ist nur in eine Richtung möglich. Die importierte Datenbank kann später nicht mehr mit der alten KeePassX Version 0.4 geöffnet werden. Main Fatal error while testing the cryptographic functions. Fataler Fehler beim Testen der kryptografischen Funktionen. KeePassX - Error KeePassX - Fehler MainWindow Database Datenbank Recent databases Aktuelle Datenbanken Help Hilfe Entries Einträge Copy attribute to clipboard Eingenschaft in die Zwischenablage kopieren Groups Gruppen View Ansicht Quit Beenden About Über Open database Datenbank öffnen Save database Datenbank speichern Close database Datenbank schließen New database Neue Datenbank Add new entry Neuen Eintrag hinzufügen View/Edit entry Eintrag anzeigen/bearbeiten Delete entry Eintrag löschen Add new group Neue Gruppe hinzufügen Edit group Gruppe bearbeiten Delete group Gruppe löschen Save database as Datenbank speichern als Change master key Hauptschlüssel ändern Database settings Datenbankeinstellungen Import KeePass 1 database KeePass 1 Datenbank importieren Clone entry Eintrag klonen Find Suchen Copy username to clipboard Benutzername in die Zwischenablage kopieren Copy password to clipboard Passwort in die Zwischenablage kopieren Settings Einstellungen Perform Auto-Type Auto-Type ausführen Open URL URL öffnen Lock databases Datenbank sperren Title Titel URL URL Notes Notizen Show toolbar Symbolleiste anzeigen read-only Nur Lesezugriff Toggle window Fenster zeigen/verstecken Tools Tools Copy username Benutzername kopieren Copy password Passwort kopieren Export to CSV file Als CSV Datei exportieren Repair database Datenbank reparieren KeePass 2 Database KeePass 2 Datenbank All files Alle Dateien Save repaired database Reparierte Datenbank speichern Error Fehler Writing the database failed. Schreiben der Datenbank fehlgeschlagen. PasswordGeneratorWidget Password: Passwort: Length: Länge: Character Types Zeichenarten Upper Case Letters Großbuchstaben Lower Case Letters Kleinbuchstaben Numbers Zahlen Special Characters Sonderzeichen Exclude look-alike characters Gleich aussehende Zeichen ausschließen Ensure that the password contains characters from every group Sicher stellen, dass das Passwort Zeichen aller Gruppen enthält Accept Akzeptieren QCommandLineParser Displays version information. Versionsinformationen anzeigen. Displays this help. Zeigt diese Hilfe an. Unknown option '%1'. Unbekannte Option '%1'. Unknown options: %1. Unbekannte Optionen: '%1'. Missing value after '%1'. Fehlender Wert nach '%1'. Unexpected value after '%1'. Unerwarteter Wert nach '%1'. [options] [Optionen] Usage: %1 Verwendung: %1 Options: Optionen: Arguments: Argumente: QSaveFile Existing file %1 is not writable Bestehende Datei(en) %1 ist nicht schreibbar Writing canceled by application Schreiben von der Applikation abgebrochen Partial write. Partition full? Unvollständiger Schreibvorgang. Partition voll? QtIOCompressor Internal zlib error when compressing: Interner Fehler in zlib beim komprimieren: Error writing to underlying device: Fehler beim Schreiben auf das zugrunde liegende Gerät: Error opening underlying device: Fehler beim Öffnen des zugrunde liegenden Gerätes: Error reading data from underlying device: Fehler beim Lesen von Daten auf dem zugrunde liegenden Gerät: Internal zlib error when decompressing: Interner Fehler in zlib beim dekomprimieren: QtIOCompressor::open The gzip format not supported in this version of zlib. Das gzip-Format wird von dieser zlib Version nicht unterstützt. Internal zlib error: Interner Fehler in zlib: SearchWidget Find: Suchen nach: Case sensitive Groß-/Kleinschreibung unterscheiden Current group Aktuelle Gruppe Root group Root-Gruppe SettingsWidget Application Settings Anwendungseinstellungen General Allgemein Security Sicherheit SettingsWidgetGeneral Remember last databases Letzte Datenbank merken Open previous databases on startup Letzte Datenbank beim Starten öffnen Automatically save on exit Automatisch speichern beim Schließen Automatically save after every change Automatisch nach jeder Änderung speichern Minimize when copying to clipboard Minimieren beim Kopieren in die Zwischenablage Use group icon on entry creation Gruppensymbol für das Erstellen neuer Einträge verwenden Global Auto-Type shortcut Globale Tastenkombination für Auto-Type Use entry title to match windows for global auto-type Verwende den Eintragstitel für entsprechende Fenster für den globale Auto-Typ Language Sprache Show a system tray icon Taskleistensymbol anzeigen Hide window to system tray when minimized Fenster verstecken wenn minimiert Remember last key files Letzte Schlüsseldateien merken SettingsWidgetSecurity Clear clipboard after Zwischenablage leeren nach sec sek Lock databases after inactivity of Datenbank sperren nach einer Inaktivität von Show passwords in cleartext by default Passwörter standardmäßig in Klartext anzeigen Always ask before performing auto-type Immer vor einem Auto-type fragen UnlockDatabaseWidget Unlock database Datenbank entsperren WelcomeWidget Welcome! Willkommen! main KeePassX - cross-platform password manager KeePassX - plattformübergreifender Passwortmanager filename of the password database to open (*.kdbx) Dateiname für die zu öffnende Passwortdatenbank (*.kdbx) path to a custom config file Pfad zu einer benutzerdefinierten Konfigurationsdatei key file of the database Schlüsseldatei der Datenbank keepassx-2.0.3/share/translations/keepassx_el.ts000066400000000000000000001304121276304217300220430ustar00rootroot00000000000000 AboutDialog About KeePassX Σχετικά με το KeepPassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. Revision ΑναθεώÏηση AutoType Auto-Type - KeePassX Αυτόματη-ΓÏαφή - KeePassX Couldn't find an entry that matches the window title: Αποτυχία να βÏεθεί μια καταχώÏηση που να ταιÏιάζει με τον τίτλο του παÏαθÏÏου: AutoTypeAssociationsModel Window ΠαÏάθυÏο Sequence Ακολουθεία Default sequence ΠÏοεπιλεγμένη ακολουθεία AutoTypeSelectDialog Auto-Type - KeePassX Αυτόματη-ΓÏαφή - KeePassX Select entry to Auto-Type: Επιλέξτε καταχώÏηση για αυτόματη γÏαφή: ChangeMasterKeyWidget Password Κωδικός Enter password: Εισάγετε κωδικό: Repeat password: Επαναλάβετε τον κωδικό: Key file ΑÏχείο κλειδί Browse Αναζήτηση Create ΔημιουÏγία Key files ΑÏχεία κλειδιά All files Όλα τα αÏχεία Create Key File... ΔημιουÏγεία αÏχείου κλειδιοÏ... Error Σφάλμα Unable to create Key File : Αποτυχία δημιουÏγεία αÏχείου κλειδιοÏ: Select a key file Επιλέξτε ένα αÏχείο κλειδί Question ΕÏώτηση Do you really want to use an empty string as password? Θέλετε στα αλήθεια να χÏησιμοποιήσετε μια άδεια σειÏά σαν κωδικό; Different passwords supplied. Έχετε εισάγει διαφοÏετικοÏÏ‚ κωδικοÏÏ‚. Failed to set key file Αποτυχία οÏÎ¹ÏƒÎ¼Î¿Ï Î±Ïχείου ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï Failed to set %1 as the Key file: %2 Αποτυχία οÏÎ¹ÏƒÎ¼Î¿Ï Ï„Î¿Ï… %1 ως αÏχείου ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï DatabaseOpenWidget Enter master key Key File: ΑÏχείο κλειδί: Password: Κωδικός: Browse Αναζήτηση Error Σφάλμα Unable to open the database. ΑδÏνατο να ανοιχτεί η βάση δεδομένων. Can't open key file Αποτυχία ανοίγματος αÏχείο ÎºÎ»ÎµÎ¹Î´Î¹Î¿Ï All files Όλα τα αÏχεία Key files ΑÏχεία κλειδιά Select key file Επιλέξτε αÏχείο κλειδί DatabaseSettingsWidget Database name: Όνομα βάσης δεδομένων: Database description: ΠεÏιγÏαφή βάσης δεδομένων: Transform rounds: ΜετατÏεπόμενοι γÏÏοι: Default username: ΠÏοεπιλεγμένο όνομα χÏήστη: Use recycle bin: ΧÏήση ÎºÎ±Î»Î±Î¸Î¹Î¿Ï Î±Ï‡Ïήστων: MiB MiB Benchmark Max. history items: Μέγιστα αντικείμενα ιστοÏικοÏ: Max. history size: Μέγιστο μέγεθος ιστοÏικοÏ: DatabaseTabWidget Root KeePass 2 Database Βάση Δεδομένων KeePass 2 All files Όλα τα αÏχεία Open database Άνοιγμα βάσης δεδομένων Warning ΠÏοειδοποίηση File not found! ΑÏχείο δεν βÏέθηκε! Open KeePass 1 database Άνοιγμα βάσης δεδομένων KeePass 1 KeePass 1 database Βάση δεδομένων KeePass 1 All files (*) Όλα τα αÏχεία (*) Close? Κλείσιμο; Save changes? Αποθήκευση αλλαγών; "%1" was modified. Save changes? "%1" έχει Ï„Ïοποποιηθή. Αποθήκευση αλλαγών; Error Σφάλμα Writing the database failed. Save database as Αποθήκευση βάσης δεδομένων σαν New database Îέα βάση δεδομένων locked κλειδωμένο The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Η βάση δεδομένω που Ï€Ïοσπαθείται να ανοίξετε ειναι κλειδωμένη από μια άλλη διεÏγασία του KeePassX. Θέλετε να την ανοίξετε οÏτως η άλλως; Αλλίως η βαση δεδομένων θα ανοιχτή μόνο για ανάγνωση. Lock database Κλείδωμα βάσης δεδομένων Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Η βάση δεδομένων δεν μποÏεί να κλειδωθεί γιατί την επεξεÏγάζεται αυτην την στιγμή. ΠαÏακαλώ πατήστε άκυÏο για να αποθηκεÏσετε τις αλλαγές σας η να τις αποÏÏίψετε. This database has never been saved. You can save the database or stop locking it. Αυτή η βάση δεδομένων δεν έχει αποθηκευτεί ποτέ. ΜποÏείται να την αποθηκεÏσετε ή να σταματήσετε να την κλειδώνετε. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Αυτή η βάση δεδομένων έχει αλλάξει. Θέλετε να αποθηκεÏσετε τις αλλαγές σας Ï€Ïίν την κλειδώσετε: Αλλιώς οι αλλαγές σας θα χαθοÏν. "%1" is in edit mode. Discard changes and close anyway? "%1" είναι σε λειτουÏγεία επεξεÏγασίας. ΑπόÏÏιψη αλλαγών και κλείσιμο οÏτως η άλλως; Export database to CSV file Εξαγωγή βάσης δεδομένων σε αÏχείο CSV CSV file αÏχείο CSV Writing the CSV file failed. ΓÏάψιμο στο αÏχείο CSV απέτυχε. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Η βάση δεδομένων που Ï€Ïασπαθείται να αποθηκεÏσετε είναι κλειδωμένη από μία άλλη διεÏγασία KeePassX. Θέλετε να την αποθηκεÏσετε οÏτως η άλλως; DatabaseWidget Change master key Delete entry? ΔιαγÏαφή καταχώÏησης; Do you really want to delete the entry "%1" for good? Θέλετε Ï€Ïαγματικά να διαγÏάψετε την καταχώÏηση "%1" μόνιμα; Delete entries? ΔιαγÏαφή καταχωÏήσεων; Do you really want to delete %1 entries for good? Θέλετε Ï€Ïαγματικά να διαγÏάψετε %1 καταχωÏήσεις για πάντα; Move entries to recycle bin? Μετακίνηση καταχωÏήσεων στο καλάθι των αχÏήστων; Do you really want to move %n entry(s) to the recycle bin? Delete group? ΔιαγÏαφή ομάδας; Do you really want to delete the group "%1" for good? Θέλετε στα αλήθεια να διαγÏάψετε την ομάδα "%1" μόνιμα; Current group ΤÏέχων ομάδα Error Σφάλμα Unable to calculate master key EditEntryWidget Entry ΚαταχώÏηση Advanced Για Ï€ÏοχωÏημένους Icon Εικονίδιο Auto-Type Αυτόματη-ΓÏαφή Properties Ιδιότητες History ΙστοÏικό Entry history ΙστοÏικό καταχωÏήσεων Add entry ΠÏόσθεση καταχώÏησης Edit entry ΕπεξεÏγασία καταχώÏησης Error Σφάλμα Different passwords supplied. ΠαÏέχονται διαφοÏετικοί κωδικοί. New attribute Îέο χαÏακτηÏιστικό Select file Επιλογή αÏχείου Unable to open file Αποτυχία ανοίγματος αÏχείου Save attachment Αποθήκευση συνημμένου Unable to save the attachment: Αποτυχία αποθήκευσης συνημμένου. Tomorrow ΑÏÏιο %n week(s) %n month(s) 1 year 1 χÏόνο EditEntryWidgetAdvanced Additional attributes ΠÏόσθετα χαÏακτηÏιστικά Add ΠÏόσθεση Edit ΕπεξεÏγασία Remove ΑφαίÏεση Attachments Συνημμένα Save Αποθήκευση Open Άνοιγμα EditEntryWidgetAutoType Enable Auto-Type for this entry ΕνεÏγοποίηση Αυτόματης-ΓÏαφής για αυτήν την καταχώÏηση Inherit default Auto-Type sequence from the group ΧÏησιμοποίηση Ï€Ïοεπιλεγμένης ακολουθείας Αυτόματης-ΓÏαφής απο την ομάδα Use custom Auto-Type sequence: ΧÏησιμοποίηση Ï€ÏοσαÏμοσμένης ακολουθείας Αυτόματης ΓÏαφής: + + - - Window title: Τίτλος ΠαÏαθÏÏου: Use default sequence ΧÏησιμοποίηση Ï€Ïοεπιλεγμένης ακολουθείας Set custom sequence: ΟÏισμός Ï€ÏοσαÏμοσμένης ακολουθείας: EditEntryWidgetHistory Show Εμφάνιση Restore ΕπαναφοÏά Delete ΔιαγÏαφή Delete all ΔιαγÏαφή όλων EditEntryWidgetMain Title: Τίτλος: Username: Όνομα χÏήστη: Password: Κωδικός: Repeat: Επαναλάβετε: Gen. URL: URL: Expires Λήγει Presets ΠÏοεπιλογές Notes: Σημειώσεις: EditGroupWidget Group Όμαδα Icon Εικονίδιο Properties Ιδιότητες Add group ΠÏόσθεση Ομάδας Edit group ΕπεξεÏγασία ομάδας Enable ΕνεÏγοποίηση Disable ΑπενεÏγοποίηση Inherit from parent group (%1) EditGroupWidgetMain Name Όνομα Notes Σημειώσεις Expires Λήγει Search Αναζήτηση Auto-type Αυτόματη-γÏαφή Use default auto-type sequence of parent group ΧÏησιμοποίηση Ï€Ïοεπιλεγμένης ακολουθείας αυτόματης γÏαφής της μητÏικής ομάδας Set default auto-type sequence ΟÏισμός Ï€Ïοεπιλεγμένης ακολουθείας αυτόματης-γÏαφής EditWidgetIcons Use default icon ΧÏήση Ï€Ïοεπιλεγμένου εικονιδίου Use custom icon ΧÏήση Ï€ÏοσαÏμοσμένου εικονιδίου Add custom icon ΠÏόσθεση Ï€ÏοσαÏμοσμένου εικονιδίου Delete custom icon ΔιαγÏαφή Ï€ÏοσαÏμοσμένου εικονιδίου Images Εικόνες All files Όλα τα αÏχεία Select Image Επιλογή εικόνας Can't delete icon! Αποτυχία διαγÏαφής εικονίδιου! Can't delete icon. Still used by %n item(s). EditWidgetProperties Created: ΔημιουÏγήθηκε: Modified: ΤÏοποποιήθηκε: Accessed: ΠÏοσπελάστηκε: Uuid: EntryAttributesModel Name Όνομα EntryHistoryModel Last modified Τελευταία Ï„Ïοποποίηση Title Τίτλος Username Όνομα χÏήστη URL URL EntryModel Group Όμαδα Title Τίτλος Username Όνομα χÏήστη URL URL Group Recycle Bin Καλάθι ανακÏκλωσης KeePass1OpenWidget Import KeePass1 database Εισαγωγή βάσης δεδομένων KeePass1 Error Σφάλμα Unable to open the database. Αποτυχία ανοίγματος βάσης δεδομένων. KeePass1Reader Unable to read keyfile. Αποτυχία διαβάσματος αÏχείου κλειδιοÏ. Not a KeePass database. Δεν ειναι βάση δεδομένων KeePass. Unsupported encryption algorithm. Μη υποστηÏιζόμενος αλογόÏιθμος κÏυπτογÏάφησης. Unsupported KeePass database version. Μη υποστηÏιζόμενη έκδοση βάσης δεδομένων KeePass. Root Unable to calculate master key KeePass2Reader Not a KeePass database. Δεν είναι βάση δεδομένων KeePass. Unsupported KeePass database version. Μη υποστηÏιζόμενη έκδοση βάσης δεδομένων KeePass. Wrong key or database file is corrupt. Λάθος κλειδί ή το άÏχειο της βάσης δεδομένων είναι κατεστÏαμένο. Unable to calculate master key Main Fatal error while testing the cryptographic functions. KeePassX - Error KeePassX - Σφάλμα MainWindow Database Βάση Δεδομένων Recent databases ΠÏόσφατες βάσεις δεδομένων Help Βοήθεια Entries ΚαταχωÏήσεις Copy attribute to clipboard ΑντιγÏαφή χαÏακτηÏÎ¹ÏƒÏ„Î¹ÎºÎ¿Ï ÏƒÏ„Î¿ Ï€ÏόχειÏο Groups Ομάδες View ΠÏοβολή Quit Έξοδος About Σχετικά Open database Άνοιγμα Βάσης Δεδομένων Save database Αποθήκευση Βάσης Δεδομένων Close database Κλείσιμο Βάσης Δεδομένων New database Îέα Βάση Δεδομένων Add new entry ΠÏόσθεση νέα καταχώÏησης View/Edit entry ΠÏοβολή/επεξεÏγασία καταχώÏησης Delete entry ΔιαγÏαφή ΚαταχώÏησης Add new group ΠÏόσθεση νέας ομάδας Edit group ΕπεξεÏγασία Ομάδας Delete group ΔιαγÏαφή ομάδας Save database as Αποθήκευση βάσης δεδομένων ως Change master key Database settings Ρυθμίσεις βάσης δεδομένων Import KeePass 1 database Εισαγωγή βάσης δεδομένων KeePass1 Clone entry Κλωνοποίηση ΚαταχώÏησης Find ΕÏÏεση Copy username to clipboard ΑντιγÏαφή όνομα χÏήστη στο Ï€ÏόχειÏο Copy password to clipboard ΑντιγÏαφή ÎºÏ‰Î´Î¹ÎºÎ¿Ï ÏƒÏ„Î¿ Ï€ÏόχειÏο Settings ΡÏθμίσεις Perform Auto-Type Εκτέλεση Αυτόματης-ΓÏαφής Open URL Άνοιγμα ιστοσελίδας Lock databases Κλείδωμα βάσεων δεδομένων Title Τίτλος URL URL Notes Σημειώσεις Show toolbar Εμφάνιση γÏαμμής εÏγαλείων read-only Μόνο για ανάγνωση Toggle window Εναλλαγή παÏαθÏÏων Tools ΕÏγαλεία Copy username ΑντιγÏαφή όνομα χÏήστη Copy password ΑντιγÏαφή ÎºÏ‰Î´Î¹ÎºÎ¿Ï Export to CSV file Εξαγωγή σε αÏχείο CSV PasswordGeneratorWidget Password: Κωδικός: Length: Μήκος: Character Types ΤÏποι χαÏακτήÏων Upper Case Letters Κεφαλαία γÏάμματα Lower Case Letters Πεζά γÏάμματα Numbers ΑÏιθμοί Special Characters Ειδικοί χαÏακτήÏες Exclude look-alike characters ΕξαίÏεση χαÏακτήÏων που μοίαζουν Ensure that the password contains characters from every group Βεβαιωθείται οτι ο κωδικός πεÏιέχει χαÏακτήÏες απο κάθε ομάδα Accept Αποδοχή QCommandLineParser Displays version information. ΠÏοβολή πληÏοφοÏιών έκδοσης. Displays this help. Δείχνει αυτήν την βοήθεια. Unknown option '%1'. Unknown options: %1. Missing value after '%1'. Unexpected value after '%1'. [options] [επιλογές] Usage: %1 ΧÏήση: %1 Options: Επιλογές: Arguments: ΕπιχειÏήματα: QSaveFile Existing file %1 is not writable Writing canceled by application Partial write. Partition full? QtIOCompressor Internal zlib error when compressing: Error writing to underlying device: Error opening underlying device: Error reading data from underlying device: Internal zlib error when decompressing: QtIOCompressor::open The gzip format not supported in this version of zlib. Internal zlib error: SearchWidget Find: ΕÏÏεση Case sensitive Current group ΤÏέχων ομάδα Root group SettingsWidget Application Settings Ρυθμίσεις ΕφαÏμογής General Security Ασφάλεια SettingsWidgetGeneral Remember last databases Open previous databases on startup Άνοιγμα Ï€ÏοηγοÏμενων βάσεω δεδομένων κατα την εκκίνηση Automatically save on exit Αυτόματη αποθήκευση κατα την έξοδο Automatically save after every change Αυτόματη Αποθήκευση μετά απο κάθε αλλαγή Minimize when copying to clipboard Ελαχιστοποίηση οταν αντιγÏάφετε στο Ï€ÏόχειÏο Use group icon on entry creation ΧÏησιμοποίηση εικονιδίου ομάδας κατα την δημιουÏγία καταχώÏησης Global Auto-Type shortcut Use entry title to match windows for global auto-type Language Γλώσσα Show a system tray icon Hide window to system tray when minimized Remember last key files SettingsWidgetSecurity Clear clipboard after ΕκκαθάÏιση Ï€ÏόχειÏου μετά από sec δευτεÏόλεπτα Lock databases after inactivity of Κλείδωμα βάσης δεδομένων μετα απο ανενεÏγεία Show passwords in cleartext by default Always ask before performing auto-type Πάντα να Ïωτάτε Ï€Ïιν να εκτελείται η αυτόματη γÏαφή UnlockDatabaseWidget Unlock database Ξεκλείδωμα βάσης δεδομένων WelcomeWidget Welcome! Καλως ήÏθατε! main KeePassX - cross-platform password manager filename of the password database to open (*.kdbx) Όνομα της βάσης δεδομένων κωδικών για άνοιγμα (*.kdbx) path to a custom config file key file of the database ΑÏχείο κλειδί της βάσεως δεδομένων keepassx-2.0.3/share/translations/keepassx_en.ts000066400000000000000000001233431276304217300220520ustar00rootroot00000000000000 AboutDialog About KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. Revision Using: AutoType Auto-Type - KeePassX Couldn't find an entry that matches the window title: AutoTypeAssociationsModel Window Sequence Default sequence AutoTypeSelectDialog Auto-Type - KeePassX Select entry to Auto-Type: ChangeMasterKeyWidget Password Enter password: Repeat password: Key file Browse Create Key files All files Create Key File... Error Unable to create Key File : Select a key file Question Do you really want to use an empty string as password? Different passwords supplied. Failed to set key file Failed to set %1 as the Key file: %2 DatabaseOpenWidget Enter master key Key File: Password: Browse Error Unable to open the database. Can't open key file All files Key files Select key file DatabaseRepairWidget Repair database Error Can't open key file Database opened fine. Nothing to do. Unable to open the database. Success The database has been successfully repaired You can now save it. Unable to repair the database. DatabaseSettingsWidget Database name: Database description: Transform rounds: Default username: Use recycle bin: MiB Benchmark Max. history items: Max. history size: DatabaseTabWidget Root KeePass 2 Database All files Open database Warning File not found! Open KeePass 1 database KeePass 1 database All files (*) Close? Save changes? "%1" was modified. Save changes? Error Writing the database failed. Save database as New database locked The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Lock database Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. This database has never been saved. You can save the database or stop locking it. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. "%1" is in edit mode. Discard changes and close anyway? Export database to CSV file CSV file Writing the CSV file failed. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Unable to open the database. DatabaseWidget Change master key Delete entry? Do you really want to delete the entry "%1" for good? Delete entries? Do you really want to delete %1 entries for good? Move entries to recycle bin? Do you really want to move %n entry(s) to the recycle bin? Delete group? Do you really want to delete the group "%1" for good? Current group Error Unable to calculate master key Move entry to recycle bin? Do you really want to move entry "%1" to the recycle bin? EditEntryWidget Entry Advanced Icon Auto-Type Properties History Entry history Add entry Edit entry Error Different passwords supplied. New attribute Select file Unable to open file Save attachment Unable to save the attachment: Tomorrow %n week(s) %n month(s) 1 year EditEntryWidgetAdvanced Additional attributes Add Edit Remove Attachments Save Open EditEntryWidgetAutoType Enable Auto-Type for this entry Inherit default Auto-Type sequence from the group Use custom Auto-Type sequence: + - Window title: Use default sequence Set custom sequence: EditEntryWidgetHistory Show Restore Delete Delete all EditEntryWidgetMain Title: Username: Password: Repeat: Gen. URL: Expires Presets Notes: EditGroupWidget Group Icon Properties Add group Edit group Enable Disable Inherit from parent group (%1) EditGroupWidgetMain Name Notes Expires Search Auto-type Use default auto-type sequence of parent group Set default auto-type sequence EditWidgetIcons Use default icon Use custom icon Add custom icon Delete custom icon Images All files Select Image Can't delete icon! Can't delete icon. Still used by %n item(s). Error Can't read icon: EditWidgetProperties Created: Modified: Accessed: Uuid: EntryAttributesModel Name EntryHistoryModel Last modified Title Username URL EntryModel Group Title Username URL Group Recycle Bin KeePass1OpenWidget Import KeePass1 database Error Unable to open the database. KeePass1Reader Unable to read keyfile. Not a KeePass database. Unsupported encryption algorithm. Unsupported KeePass database version. Root Unable to calculate master key Wrong key or database file is corrupt. KeePass2Reader Not a KeePass database. Unsupported KeePass database version. Wrong key or database file is corrupt. Unable to calculate master key The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Main Fatal error while testing the cryptographic functions. KeePassX - Error MainWindow Database Recent databases Help Entries Copy attribute to clipboard Groups View Quit About Open database Save database Close database New database Add new entry View/Edit entry Delete entry Add new group Edit group Delete group Save database as Change master key Database settings Import KeePass 1 database Clone entry Find Copy username to clipboard Copy password to clipboard Settings Perform Auto-Type Open URL Lock databases Title URL Notes Show toolbar read-only Toggle window Tools Copy username Copy password Export to CSV file Repair database KeePass 2 Database All files Save repaired database Error Writing the database failed. PasswordGeneratorWidget Password: Length: Character Types Upper Case Letters Lower Case Letters Numbers Special Characters Exclude look-alike characters Ensure that the password contains characters from every group Accept QCommandLineParser Displays version information. Displays this help. Unknown option '%1'. Unknown options: %1. Missing value after '%1'. Unexpected value after '%1'. [options] Usage: %1 Options: Arguments: QSaveFile Existing file %1 is not writable Writing canceled by application Partial write. Partition full? QtIOCompressor Internal zlib error when compressing: Error writing to underlying device: Error opening underlying device: Error reading data from underlying device: Internal zlib error when decompressing: QtIOCompressor::open The gzip format not supported in this version of zlib. Internal zlib error: SearchWidget Find: Case sensitive Current group Root group SettingsWidget Application Settings General Security SettingsWidgetGeneral Remember last databases Open previous databases on startup Automatically save on exit Automatically save after every change Minimize when copying to clipboard Use group icon on entry creation Global Auto-Type shortcut Use entry title to match windows for global auto-type Language Show a system tray icon Hide window to system tray when minimized Remember last key files SettingsWidgetSecurity Clear clipboard after sec Lock databases after inactivity of Show passwords in cleartext by default Always ask before performing auto-type UnlockDatabaseWidget Unlock database WelcomeWidget Welcome! main KeePassX - cross-platform password manager filename of the password database to open (*.kdbx) path to a custom config file key file of the database keepassx-2.0.3/share/translations/keepassx_en_plurals.ts000066400000000000000000000025651276304217300236160ustar00rootroot00000000000000 DatabaseWidget Do you really want to move %n entry(s) to the recycle bin? Do you really want to move %n entry to the recycle bin? Do you really want to move %n entries to the recycle bin? EditEntryWidget %n week(s) %n week %n weeks %n month(s) %n month %n months EditWidgetIcons Can't delete icon. Still used by %n item(s). Can't delete icon. Still used by %n item. Can't delete icon. Still used by %n items. keepassx-2.0.3/share/translations/keepassx_es.ts000066400000000000000000001266331276304217300220640ustar00rootroot00000000000000 AboutDialog About KeePassX Acerca de KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX es distribuido bajo los términos de la versión 2 de la Licencia Pública GNU (GPL) o por la versión 3 (si así lo prefiere). Revision Revisión Using: Usando: AutoType Auto-Type - KeePassX Auto-Escritura - KeePassX Couldn't find an entry that matches the window title: No se puede encontrar una entrada que corresponda al título de la ventana: AutoTypeAssociationsModel Window Ventana Sequence Secuencia Default sequence Secuencia por defecto AutoTypeSelectDialog Auto-Type - KeePassX Auto-Escritura - KeePassX Select entry to Auto-Type: Seleccionar entrada para Auto-Escritura: ChangeMasterKeyWidget Password Contraseña Enter password: Ingrese la contraseña Repeat password: Repita la contraseña: Key file Archivo llave Browse Abrir archivo Create Crear Key files Archivos llave All files Todos los archivos Create Key File... Crear un Archivo Llave .... Error Error Unable to create Key File : No se puede crear el Archivo Llave: Select a key file Seleccione un archivo llave Question Pregunta Do you really want to use an empty string as password? ¿Realmente desea usar una cadena vacía como contraseña? Different passwords supplied. Las contraseñas ingresadas son distintas. Failed to set key file No se pudo establecer el archivo llave Failed to set %1 as the Key file: %2 No se pudo establecer %1 como el Archivo llave: %2 DatabaseOpenWidget Enter master key Ingrese la clave maestra Key File: Archivo llave: Password: Contraseña: Browse Navegar Error Error Unable to open the database. Incapaz de abrir la base de datos. Can't open key file No se puede abrir el archivo llave All files Todos los archivos Key files Archivos llave Select key file Seleccionar archivo llave DatabaseRepairWidget Repair database Reparar base de datos Error Error Can't open key file No se puede abrir el archivo llave Database opened fine. Nothing to do. Base de datos abierta correctamente. Nada que hacer. Unable to open the database. No se pudo abrir la base de datos. Success Éxito The database has been successfully repaired You can now save it. La base de datos ha sido reparada correctamente Ahora puede guardarla. Unable to repair the database. No se pudo reparar la base de datos. DatabaseSettingsWidget Database name: Nombre de la base de datos: Database description: Descripción de la base de datos: Transform rounds: Rondas de transformación: Default username: Nombre de usuario por defecto: Use recycle bin: Usar papelera de reciclaje: MiB MiB Benchmark Prueba de rendimiento Max. history items: Elementos máximos del historial: Max. history size: Tamaño máximo del historial: DatabaseTabWidget Root Raíz KeePass 2 Database Base de datos KeePass 2 All files Todos los archivos Open database Abrir base de datos Warning Advertencia File not found! ¡Archivo no encontrado! Open KeePass 1 database Abrir base de datos KeePass 1 KeePass 1 database Base de datos KeePass 1 All files (*) Todos los archivos (*) Close? ¿Cerrar? Save changes? ¿Guardar cambios? "%1" was modified. Save changes? "%1" ha sido modificado. ¿Guardar cambios? Error Error Writing the database failed. La escritura de la base de datos falló. Save database as Guardar base de datos como New database Nueva base de datos locked bloqueado The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. La base de datos que está intentando abrir está bloqueada por otra instancia de KeePassX. ¿Quiere abrirla de todos modos? Alternativamente, la base de datos se abre como sólo lectura. Lock database Bloquear base de datos Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. No se puede bloquear la base de datos porque actualmente está editándola. Por favor, pulse cancelar para terminar sus cambios o descartarlos. This database has never been saved. You can save the database or stop locking it. Esta base de datos nunca ha sido guardada. Puede guardar la base de datos o dejar de bloquearla. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Esta base de datos ha sido modificada. ¿Desea guardar la base de datos antes de bloquearla? De lo contrario se perderán los cambios. "%1" is in edit mode. Discard changes and close anyway? "% 1" está en el modo de edición. ¿Descartar cambios y cerrar de todos modos? Export database to CSV file Exportar base de datos a un archivo CSV CSV file Archivo CSV Writing the CSV file failed. La escritura del archivo CSV falló. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? La base de datos que está tratando de guardar está bloqueda por otra instancia de KeePassX. ̉¿Desea guardarla de cualquier manera? DatabaseWidget Change master key Cambiar la clave maestra Delete entry? ¿Eliminar la entrada? Do you really want to delete the entry "%1" for good? ¿Realmente quiere eliminar la entrada "%1" de forma definitiva? Delete entries? ¿Eliminar entradas? Do you really want to delete %1 entries for good? ¿Realmente quiere eliminar las entradas "%1" de forma definitiva? Move entries to recycle bin? ¿Mover entradas a la papelera de reciclaje? Do you really want to move %n entry(s) to the recycle bin? ¿Realmente quiere mover la entrada "%1" a la papelera de reciclaje?¿Realmente quiere mover las entradas "%1" a la papelera de reciclaje? Delete group? ¿Eliminar grupo? Do you really want to delete the group "%1" for good? ¿Realmente quiere eliminar el grupo "%1" de forma definitiva? Current group Grupo actual Error Error Unable to calculate master key No se puede calcular la llave maestra EditEntryWidget Entry Entrada Advanced Avanzado Icon Icono Auto-Type Auto-Escritura Properties Propiedades History Historial Entry history Historial de entradas Add entry Añadir entrada Edit entry Editar entrada Error Error Different passwords supplied. Las contraseñas ingresadas son distintas. New attribute Nuevo atributo Select file Seleccionar archivo llave Unable to open file Incapaz de abrir el archivo Save attachment Guardar adjunto Unable to save the attachment: Incapaz de guardar el adjunto: Tomorrow Mañana %n week(s) %n semana%n semanas %n month(s) %n mes%n meses 1 year 1 año EditEntryWidgetAdvanced Additional attributes Atributos adicionales Add Añadir Edit Editar Remove Eliminar Attachments Adjuntos Save Guardar Open Abrir EditEntryWidgetAutoType Enable Auto-Type for this entry Activar Auto-Escritura para esta entrada Inherit default Auto-Type sequence from the group Heredar Auto-Escritura por defecto del grupo Use custom Auto-Type sequence: Utilizar secuencia de Auto-Escritura personalizada: + + - - Window title: Título de la ventana: Use default sequence Utilizar secuencia por defecto Set custom sequence: Definir secuencia personalizada: EditEntryWidgetHistory Show Mostrar Restore Recuperar Delete Eliminar Delete all Eliminar todo EditEntryWidgetMain Title: Título: Username: Nombre de usuario: Password: Contraseña: Repeat: Repetir: Gen. Gen. URL: URL: Expires Expira Presets Predeterminado Notes: Notas: EditGroupWidget Group Grupo Icon Icono Properties Propiedades Add group Añadir grupo Edit group Editar grupo Enable Habilitar Disable Deshabilitar Inherit from parent group (%1) Heredar del grupo padre (%1) EditGroupWidgetMain Name Nombre Notes Notas Expires Expira Search Buscar Auto-type Auto-escritura Use default auto-type sequence of parent group Usar escritura automática por defecto del grupo padre Set default auto-type sequence Establecer escritura automática por defecto EditWidgetIcons Use default icon Usar icono por defecto Use custom icon Usar icono personalizado Add custom icon Añadir icono personalizado Delete custom icon Eliminar icono personalizado Images Imágenes All files Todos los archivos Select Image Seleccionar imagen Can't delete icon! ¡No se puede eliminar el icono! Can't delete icon. Still used by %n item(s). No se puede eliminar el icono. Utilizado aún en %n elementoNo se puede eliminar el icono. Utilizado aún en %n elementos EditWidgetProperties Created: Creado: Modified: Modificado: Accessed: Accedido: Uuid: Uuid: EntryAttributesModel Name Nombre EntryHistoryModel Last modified Última modificación Title Título Username Nombre de usuario URL URL EntryModel Group Grupo Title Título Username Nombre de usuario: URL URL Group Recycle Bin Papelera de reciclaje KeePass1OpenWidget Import KeePass1 database Importar base de datos KeePass1 Error Error Unable to open the database. Incapaz de abrir la base de datos. KeePass1Reader Unable to read keyfile. Incapaz de leer el archivo Not a KeePass database. No es una base de datos KeePass. Unsupported encryption algorithm. Algoritmo de cifrado no soportado. Unsupported KeePass database version. Versión de la base de datos KeePass no soportada. Root Raíz Unable to calculate master key No se puede calcular la clave maestra KeePass2Reader Not a KeePass database. No es una base de datos KeePass. Unsupported KeePass database version. Versión de la base de datos KeePass no soportada. Wrong key or database file is corrupt. La contraseña es incorrecta o el archivo está dañado Unable to calculate master key No se puede calcular la clave maestra The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. El archivo seleccionado es una vieja base de datos de KeePass 1 (.kdb). Puede importarla haciendo click en 'Base de datos' > 'Importar base de datos de Keepass 1'. Esta migración es en un único sentido. No podrá abrir la base importada con la vieja versión 0.4 de KeePassX. Main Fatal error while testing the cryptographic functions. Error fatal comprobando las funciones criptográficas. KeePassX - Error KeePassX - Error MainWindow Database Base de datos Recent databases Bases de datos recientes Help Ayuda Entries Entradas Copy attribute to clipboard Copiar atributo al portapapeles Groups Grupos View Ver Quit Salir About Acerca de Open database Abrir base de datos Save database Guardar base de datos Close database Cerrar base de datos New database Nueva base de datos Add new entry Añadir nueva entrada View/Edit entry Ver/Editar entrada Delete entry Eliminar entrada Add new group Añadir nuevo grupo Edit group Editar grupo Delete group Eliminar grupo Save database as Guardar base de datos como Change master key Cambiar la clave maestra Database settings Configuración de la base de datos Import KeePass 1 database Importar base de datos KeePass 1 Clone entry Clonar entrada Find Buscar Copy username to clipboard Copiar nombre de usuario al portapapeles Copy password to clipboard Copiar contraseña al portapapeles Settings Configuración Perform Auto-Type Relizar Auto-Escritura Open URL Abrir URL Lock databases Bloquear base de datos Title Título URL URL Notes Notas Show toolbar Mostrar barra de herramientas read-only sólo lectura Toggle window Cambiar a ventana Tools Herramientas Copy username Copiar nombre de usuario Copy password Copiar contraseña Export to CSV file Exportar a un archivo CSV Repair database Reparar la base de datos KeePass 2 Database Base de datos de KeePass 2 All files Todos los archivos Save repaired database Guardar base de datos reparada Error Error Writing the database failed. Fallo al escribir la base de datos. PasswordGeneratorWidget Password: Contraseña: Length: Longitud: Character Types Tipos de caracteres Upper Case Letters Letras mayúsculas Lower Case Letters Letras minúsculas Numbers Números Special Characters Caracteres especiales: Exclude look-alike characters Excluir caracteres similares Ensure that the password contains characters from every group Asegurar que la contraseña contiene caracteres de todos los grupos Accept Aceptar QCommandLineParser Displays version information. Muestra información de versión. Displays this help. Muestra esta ayuda. Unknown option '%1'. Opción desconocida '%1'. Unknown options: %1. Opciones desconocidas '%1'. Missing value after '%1'. Falta valor después de '%1', Unexpected value after '%1'. Valor inesperado después de '%1'. [options] [opciones] Usage: %1 Uso: %1 Options: Opciones: Arguments: Argumentos: QSaveFile Existing file %1 is not writable El archivo existente %1 no se puede sobrescribir Writing canceled by application escritura cancelada por la aplicación Partial write. Partition full? Escritura parcial. ¿La partición está llena? QtIOCompressor Internal zlib error when compressing: Error interno de zlib comprimiendo: Error writing to underlying device: Error al escribir en el dispositivo subyacente: Error opening underlying device: Error al abrir el dispositivo subyacente: Error reading data from underlying device: Error al leer el dispositivo subyacente: Internal zlib error when decompressing: Error interno de zlib descomprimiendo: QtIOCompressor::open The gzip format not supported in this version of zlib. El formato gzip no está soportado en esta versión de zlib. Internal zlib error: Error interno de zlib: SearchWidget Find: Buscar: Case sensitive Distinguir mayúsculas/minúsculas Current group Grupo actual Root group Grupo raíz SettingsWidget Application Settings Configuración de la aplicación General General Security Seguridad SettingsWidgetGeneral Remember last databases Recordar última base de datos Open previous databases on startup Abrir base de datos anterior al inicio Automatically save on exit Guardar automáticamente al salir Automatically save after every change Guardar automáticamente después de cada cambio Minimize when copying to clipboard Minimizar al copiar al portapapeles Use group icon on entry creation Usar icono del grupo en la creación de entrada Global Auto-Type shortcut Atajo global de Auto-Escritura Use entry title to match windows for global auto-type Usar el título de la entrada para coincidir con la ventana para la auto-escritura global Language Idioma Show a system tray icon Mostrar icono en la bandeja de del sistema Hide window to system tray when minimized Ocultar la ventana a la bandeja del sistema cuando se minimiza Remember last key files Recordar últimos archivos clave SettingsWidgetSecurity Clear clipboard after Limpiar el portapapeles después de sec segundos Lock databases after inactivity of Bloquear base de datos tras un periodo de inactividad de Show passwords in cleartext by default Mostrar contraseñas en texto claro por defecto Always ask before performing auto-type Preguntar siempre antes de realizar auto-escritura UnlockDatabaseWidget Unlock database Desbloquear base de datos WelcomeWidget Welcome! Bienvenid@! main KeePassX - cross-platform password manager KeePassX - gestor de claves multiplataforma filename of the password database to open (*.kdbx) nombre de archivo de la base de datos de contraseñas a abrir (*.kdbx) path to a custom config file ruta a un archivo de configuración personalizado key file of the database archivo llave de la base de datos keepassx-2.0.3/share/translations/keepassx_fr.ts000066400000000000000000001310341276304217300220530ustar00rootroot00000000000000 AboutDialog About KeePassX À propos de KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX est distribué selon les conditions de la GNU General Public License (GPL) version 2 ou (à votre choix) version 3. Revision Version Using: Utilise : AutoType Auto-Type - KeePassX Auto-Type - KeePassX Couldn't find an entry that matches the window title: Impossible de trouver une entrée qui corresponde au titre de la fenêtre : AutoTypeAssociationsModel Window Fenêtre Sequence Séquence Default sequence Séquence par défaut AutoTypeSelectDialog Auto-Type - KeePassX Auto-Type - KeePassX Select entry to Auto-Type: Choisissez un champ pour Auto-Type : ChangeMasterKeyWidget Password Mot de passe Enter password: Entrez un mot de passe : Repeat password: Confirmez le mot de passe : Key file Fichier-clé Browse Naviguer Create Créer Key files Fichiers-clés All files Tous les fichiers Create Key File... Créer un fichier-clé... Error Erreur Unable to create Key File : Impossible de créer un fichier-clé : Select a key file Choisir un fichier-clé Question Question Do you really want to use an empty string as password? Voulez-vous vraiment utiliser une chaîne vide comme mot de passe ? Different passwords supplied. Les mots de passe ne sont pas identiques. Failed to set key file Échec de définition du fichier-clé Failed to set %1 as the Key file: %2 Impossible de définir %1 comme fichier-clé : %2 DatabaseOpenWidget Enter master key Entrez la clé maître Key File: Fichier-clé : Password: Mot de passe : Browse Naviguer Error Erreur Unable to open the database. Impossible d'ouvrir la base de données. Can't open key file Impossible d'ouvrir le fichier-clé All files Tous les fichiers Key files Fichiers-clés Select key file Choisissez un fichier-clé DatabaseRepairWidget Repair database Réparer la base de données Error Erreur Can't open key file Impossible d'ouvrir le fichier-clé Database opened fine. Nothing to do. La base de données s'est bien ouverte. Aucune action à effectuer. Unable to open the database. Impossible d'ouvrir la base de données. Success Succès The database has been successfully repaired You can now save it. La base de données a correctement été réparée. Vous pouvez maintenant la sauvegarder. Unable to repair the database. Impossible de réparer la base de données. DatabaseSettingsWidget Database name: Nom de la base de données : Database description: Description de la base de données : Transform rounds: Passes de transformation : Default username: Nom d'utilisateur par défaut : Use recycle bin: Utiliser la corbeille : MiB MiB Benchmark Base de référence Max. history items: Nombre max. d'éléments dans l'historique : Max. history size: Taille max. de l'historique : DatabaseTabWidget Root Racine KeePass 2 Database Base de données Keepass 2 All files Tous les fichiers Open database Ouvrir la base de données Warning Attention File not found! Fichier introuvable ! Open KeePass 1 database Ouvrir une base de données KeePass 1 KeePass 1 database Base de données Keepass 1 All files (*) Tous les fichiers (*) Close? Fermer ? Save changes? Enregistrer les modifications ? "%1" was modified. Save changes? "%1" a été modifié. Enregistrer les modifications ? Error Erreur Writing the database failed. Une erreur s'est produite lors de l'écriture de la base de données. Save database as Enregistrer comme nouvelle base de données New database Nouvelle base de données locked verrouillée The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. La base de données que vous essayez d'ouvrir est verrouillée par une autre instance de KeePassX. Voulez-vous quand même l'ouvrir ? Dans ce cas, elle sera ouverte en lecture seule. Lock database Verrouiller la base de données Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Impossible de verrouiller la base de données lors de modifications. Cliquez sur Annuler pour finir vos modifications ou abandonnez-les. This database has never been saved. You can save the database or stop locking it. Cette base de données n'a pas encore été sauvegardée. Vous devez la sauvegarder ou annuler son verrouillage. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. La base de données a été modifiée. Voulez-vous l'enregistrer avant de la verrouiller ? Autrement, vos modifications seront perdues. "%1" is in edit mode. Discard changes and close anyway? "%1" est en mode édition. Ignorer les changements et fermer ? Export database to CSV file Exporter la base de données au format CSV CSV file Fichier CSV Writing the CSV file failed. Échec de l'écriture du fichier CSV. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? La base de données que vous essayez de sauvegarder a été verrouillée par une autre instance de KeePassX. Voulez-vous quand même la sauvegarder ? DatabaseWidget Change master key Changer la clé maître Delete entry? Supprimer l'entrée ? Do you really want to delete the entry "%1" for good? Voulez-vous supprimer l'entrée "%1" définitivement ? Delete entries? Supprimer les entrées ? Do you really want to delete %1 entries for good? Voulez-vous supprimer "%1" entrées définitivement ? Move entries to recycle bin? Déplacer les entrées vers la corbeille ? Do you really want to move %n entry(s) to the recycle bin? Voulez-vous déplacer %n entrée(s) vers la corbeille ?Voulez-vous déplacer %n entrée(s) vers la corbeille ? Delete group? Supprimer le groupe ? Do you really want to delete the group "%1" for good? Voulez-vous supprimer le groupe "%1" définitivement ? Current group Groupe actif Error Erreur Unable to calculate master key Impossible de calculer la clé maître EditEntryWidget Entry Entrée Advanced Avancé Icon Icône Auto-Type Remplissage automatique Properties Propriétés History Historique Entry history Historique de l'entrée Add entry Ajouter une entrée Edit entry Modifier l'entrée Error Erreur Different passwords supplied. Les mots de passe ne sont pas identiques. New attribute Nouvel attribut Select file Choisissez un fichier Unable to open file Impossible d'ouvrir le fichier Save attachment Enregistrer le fichier attaché Unable to save the attachment: Impossible d'enregistrer le fichier attaché : Tomorrow Demain %n week(s) %n semaine(s)%n semaine(s) %n month(s) %n mois%n mois 1 year 1 an EditEntryWidgetAdvanced Additional attributes Attributs supplémentaires Add Ajouter Edit Modifier Remove Supprimer Attachments Affichage Save Enregistrer le fichier Open Ouvrir EditEntryWidgetAutoType Enable Auto-Type for this entry Activer le remplissage automatique pour cette entrée Inherit default Auto-Type sequence from the group Utiliser la séquence de remplissage automatique par défaut du groupe Use custom Auto-Type sequence: Utiliser une séquence de remplissage automatique personnalisée : + + - - Window title: Titre de la fenêtre : Use default sequence Utiliser la séquence par défaut Set custom sequence: Définir une séquence personnalisée : EditEntryWidgetHistory Show Afficher Restore Rétablir Delete Supprimer Delete all Supprimer tout EditEntryWidgetMain Title: Titre : Username: Nom d'utilisateur : Password: Mot de passe : Repeat: Confirmation : Gen. Gen. URL: URL : Expires Expiration Presets Valeurs par défaut Notes: Notes : EditGroupWidget Group Groupe Icon Icône Properties Propriétés Add group Ajouter un groupe Edit group Modifier le groupe Enable Activer Disable Désactiver Inherit from parent group (%1) Hériter du groupe parent (%1) EditGroupWidgetMain Name Nom Notes Notes Expires Expiration Search Chercher Auto-type Remplissage automatique Use default auto-type sequence of parent group Utiliser la séquence de remplissage automatique par défaut du groupe parent Set default auto-type sequence Définir une séquence de remplissage automatique par défaut EditWidgetIcons Use default icon Utiliser l'icône par défaut Use custom icon Utiliser une icône personnalisée Add custom icon Ajouter une icône personnalisée Delete custom icon Supprimer une icône personnalisée Images Images All files Tous les dossiers Select Image Choisir une image Can't delete icon! Impossible de supprimer l'icône ! Can't delete icon. Still used by %n item(s). Impossible de supprimer l'icône. Toujours utilisée par %n objet(s).Impossible de supprimer l'icône. Toujours utilisée par %n objet(s). EditWidgetProperties Created: Créé le : Modified: Modifié le : Accessed: Accédé le : Uuid: Uuid : EntryAttributesModel Name Nom EntryHistoryModel Last modified Dernière modification Title Titre Username Nom d'utilisateur URL URL EntryModel Group Groupe Title Titre Username Nom d'utilisateur URL URL Group Recycle Bin Corbeille KeePass1OpenWidget Import KeePass1 database Importer une base de données au format KeePass1 Error Erreur Unable to open the database. Impossible d'ouvrir la base de données. KeePass1Reader Unable to read keyfile. Impossible de lire le fichier-clé. Not a KeePass database. Ce n'est pas une base de données KeePass. Unsupported encryption algorithm. Algorithme de chiffrement non supporté. Unsupported KeePass database version. Version de base de données KeePass non supportée. Root Racine Unable to calculate master key Impossible de calculer la clé maître KeePass2Reader Not a KeePass database. Ce n'est pas une base de données KeePass. Unsupported KeePass database version. Version de base de données KeePass non supportée. Wrong key or database file is corrupt. Mauvaise clé ou fichier de base de données corrompu. Unable to calculate master key Impossible de calculer la clé maître The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Le fichier sélectionné est une ancienne base de données pour KeePass 1 (.kdb). Vous pouvez l'importer en cliquant sur "Base de données" > "Importer une base de données KeePass 1". Ceci est une migration à sens unique. Vous ne serez plus en mesure d'ouvrir la base de données importée avec l'ancienne version KeePassX version 0.4. Main Fatal error while testing the cryptographic functions. Erreur fatale lors des tests des fonctions cryptographiques. KeePassX - Error KeePassX - Erreur MainWindow Database Base de données Recent databases Bases de données récentes Help Aide Entries Entrées Copy attribute to clipboard Copier l'attribut dans le presse-papier Groups Groupes View Vue Quit Quitter About À propos Open database Ouvrir une base de données Save database Enregistrer la base de données Close database Fermer la base de données New database Nouvelle base de données Add new entry Ajouter une entrée View/Edit entry Voir/Modifier l'entrée Delete entry Supprimer l'entrée Add new group Ajouter un groupe Edit group Modifier le groupe Delete group Supprimer le groupe Save database as Enregistrer la base de données sous Change master key Modifier la clé maître Database settings Paramètres de la base de données Import KeePass 1 database Importer une base de données KeePass 1 Clone entry Dupliquer l'entrée Find Chercher Copy username to clipboard Copier le nom d'utilisateur dans le presse-papier Copy password to clipboard Copier le mot de passe dans le presse-papier Settings Paramètres Perform Auto-Type Effectuer un remplissage automatique Open URL Ouvrir l'URL Lock databases Verrouiller les bases de données Title Titre URL URL Notes Notes Show toolbar Afficher la barre d'outils read-only Lecture seulement Toggle window Basculer de fenêtre Tools Outils Copy username Copier le nom d'utilisateur Copy password Copier le mot de passe Export to CSV file Exporter au format CSV Repair database Réparer la base de données KeePass 2 Database Base de données KeePass 2 All files Tous les fichiers Save repaired database Sauvegarder la base de données réparée Error Erreur Writing the database failed. Une erreur s'est produite lors de l'écriture de la base de données. PasswordGeneratorWidget Password: Mot de passe : Length: Longueur : Character Types Types de caractères Upper Case Letters Lettres majuscules Lower Case Letters Lettres minuscules Numbers Nombres Special Characters Caractères spéciaux Exclude look-alike characters Exclure les caractères se ressemblant Ensure that the password contains characters from every group S'assurer que le mot de passe possède un caractère de chaque groupe Accept Accepter QCommandLineParser Displays version information. Afficher les informations de version. Displays this help. Afficher cette aide. Unknown option '%1'. Option inconnue '%1'. Unknown options: %1. Options inconnues : %1. Missing value after '%1'. Valeur manquante après '%1'. Unexpected value after '%1'. Valeur inattendue après '%1'. [options] [options] Usage: %1 Utilisation : %1 Options: Options : Arguments: Arguments : QSaveFile Existing file %1 is not writable Le fichier existant %1 n'est pas accessible en écriture Writing canceled by application Écriture annulée par l'application Partial write. Partition full? Écriture partielle. Partition pleine ? QtIOCompressor Internal zlib error when compressing: Erreur interne zlib lors de la compression : Error writing to underlying device: Erreur d'écriture sur le périphérique concerné : Error opening underlying device: Erreur d'ouverture du périphérique concerné : Error reading data from underlying device: Erreur de lecture sur le périphérique concerné : Internal zlib error when decompressing: Erreur interne zlib lors de la décompression : QtIOCompressor::open The gzip format not supported in this version of zlib. Le format gzip n'est pas supporté dans cette version de zlib. Internal zlib error: Erreur interne zlib : SearchWidget Find: Chercher : Case sensitive Sensible à la casse Current group Groupe actif Root group Groupe racine SettingsWidget Application Settings Paramètres de l'application General Général Security Sécurité SettingsWidgetGeneral Remember last databases Se souvenir des dernières bases de données Open previous databases on startup Ouvrir les bases de données précédentes au démarrage Automatically save on exit Sauvegarder automatiquement à la sortie Automatically save after every change Sauvegarder automatiquement après chaque modification Minimize when copying to clipboard Réduire lors de la copie dans le presse-papier Use group icon on entry creation Utiliser l'icône de groupe à la création d'une entrée Global Auto-Type shortcut Raccourci de remplissage automatique global Use entry title to match windows for global auto-type Utiliser la correspondance entre le titre de l'entrée et de la fenêtre pour le remplissage automatique global Language Langue Show a system tray icon Afficher une icône dans la zone de notification Hide window to system tray when minimized Réduire la fenêtre vers la zone de notification lors de sa réduction Remember last key files Se rappeler les derniers fichiers-clés ouverts SettingsWidgetSecurity Clear clipboard after Vider le presse-papier après sec s Lock databases after inactivity of Verrouiller les bases de données après une inactivité de Show passwords in cleartext by default Afficher les mots de passe en clair par défaut Always ask before performing auto-type Toujours demander avant d'effectuer un remplissage automatique UnlockDatabaseWidget Unlock database Déverrouiller la base de données WelcomeWidget Welcome! Bienvenue ! main KeePassX - cross-platform password manager KeePassX - Gestionnaire de mot de passe multi-plateforme filename of the password database to open (*.kdbx) Nom de fichier de la base de données de mot de passe à ouvrir (*.kdbx) path to a custom config file Chemin vers un fichier de configuration personnalisé key file of the database Fichier-clé de la base de données keepassx-2.0.3/share/translations/keepassx_id.ts000066400000000000000000001236501276304217300220450ustar00rootroot00000000000000 AboutDialog About KeePassX Tentang KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX disebarluaskan dibawah ketentuan dari Lisensi Publik Umum GNU (GPL) versi 2 atau (sesuai pilihan Anda) versi 3. Revision Revisi Using: Menggunakan: AutoType Auto-Type - KeePassX Ketik-Otomatis - KeePassX Couldn't find an entry that matches the window title: Tidak bisa menemukan entri yang cocok dengan judul jendela: AutoTypeAssociationsModel Window Jendela Sequence Urutan Default sequence Urutan baku AutoTypeSelectDialog Auto-Type - KeePassX Ketik-Otomatis - KeePassX Select entry to Auto-Type: Pilih entri untuk Ketik-Otomatis: ChangeMasterKeyWidget Password Sandi Enter password: Masukkan sandi: Repeat password: Ulangi sandi: Key file Berkas kunci Browse Telusuri Create Buat Key files Berkas kunci All files Semua berkas Create Key File... Buat Berkas Kunci... Error Galat Unable to create Key File : Tidak bisa membuat Berkas Kunci : Select a key file Pilih berkas kunci Question Pertanyaan Do you really want to use an empty string as password? Apakah Anda benar-benar ingin menggunakan lema kosong sebagai sandi? Different passwords supplied. Sandi berbeda. Failed to set key file Gagal menetapkan berkas kunci Failed to set %1 as the Key file: %2 Gagal menetapkan %1 sebagai berkas Kunci: %2 DatabaseOpenWidget Enter master key Masukkan kunci utama Key File: Berkas Kunci: Password: Sandi: Browse Telusuri Error Galat Unable to open the database. Tidak bisa membuka basis data. Can't open key file Tidak bisa membuka berkas kunci All files Semua berkas Key files Berkas kunci Select key file Pilih berkas kunci DatabaseRepairWidget Repair database Perbaiki basis data Error Galat Can't open key file Tidak bisa membuka berkas kunci Database opened fine. Nothing to do. Basis data terbuka dengan baik. Tidak perlu melakukan apa-apa. Unable to open the database. Tidak bisa membuka basis data. Success Sukses The database has been successfully repaired You can now save it. Basis data berhasil diperbaiki Anda bisa menyimpannya sekarang. Unable to repair the database. Tidak bisa memperbaiki basis data. DatabaseSettingsWidget Database name: Nama basis data: Database description: Deskripsi basis data: Transform rounds: Default username: Nama pengguna baku: Use recycle bin: Gunakan tong sampah: MiB MiB Benchmark Max. history items: Maks. item riwayat: Max. history size: Maks. ukuran riwayat: DatabaseTabWidget Root Root KeePass 2 Database Basis data KeePass 2 All files Semua berkas Open database Buka basis data Warning Peringatan File not found! Berkas tidak ditemukan! Open KeePass 1 database Buka basis data KeePass 1 KeePass 1 database Basis data KeePass 1 All files (*) Semua berkas (*) Close? Tutup? Save changes? Simpan perubahan? "%1" was modified. Save changes? "%1" telah dimodifikasi. Simpan perubahan? Error Galat Writing the database failed. Gagal membuat basis data. Save database as Simpan basis data sebagai New database Basis data baru locked terkunci The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Basis data yang Anda coba buka terkunci oleh KeePassX lain yang sedang berjalan. Apakah Anda tetap ingin membukanya? Alternatif lain buka basis data baca-saja. Lock database Kunci basis data Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Tidak bisa mengunci basis data karena Anda sedang menyuntingnya. Harap tekan batal untuk menyelesaikan ubahan Anda atau membuangnya. This database has never been saved. You can save the database or stop locking it. Basis data ini belum pernah disimpan. Anda bisa menyimpan basis data atau berhenti menguncinya. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Basis data ini telah dimodifikasi. Apakah Anda ingin menyimpan basis data sebelum menguncinya? Kalau tidak, ubahan Anda akan hilang. "%1" is in edit mode. Discard changes and close anyway? "%1" dalam mode penyuntingan. Tetap buang ubahan dan tutup? Export database to CSV file Ekspor basis data ke berkas CSV CSV file Berkas CSV Writing the CSV file failed. Gagal membuat berkas CSV. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Basis data yang Anda coba buka terkunci oleh KeePassX lain yang sedang berjalan. Apakah Anda tetap ingin menyimpannya? DatabaseWidget Change master key Ubah kunci utama Delete entry? Hapus entri? Do you really want to delete the entry "%1" for good? Apakah Anda benar-benar ingin menghapus entri "%1" untuk selamanya? Delete entries? Hapus entri? Do you really want to delete %1 entries for good? Apakah Anda benar-benar ingin menghapus entri %1 untuk selamanya? Move entries to recycle bin? Pindah entri ke tong sampah? Do you really want to move %n entry(s) to the recycle bin? Apakah Anda benar-benar ingin memindahkan %n entri ke tong sampah? Delete group? Hapus grup? Do you really want to delete the group "%1" for good? Apakah Anda benar-benar ingin menghapus grup "%1" untuk selamanya? Current group Grup saat ini Error Galat Unable to calculate master key Tidak bisa mengkalkulasi kunci utama EditEntryWidget Entry Entri Advanced Tingkat Lanjut Icon Ikon Auto-Type Ketik-Otomatis Properties Properti History Riwayat Entry history Riwayat entri Add entry Tambah entri Edit entry Sunting entri Error Galat Different passwords supplied. Sandi berbeda. New attribute Atribut baru Select file Pilih berkas Unable to open file Tidak bisa membuka berkas Save attachment Simpan lampiran Unable to save the attachment: Tidak bisa menyimpan lampiran: Tomorrow Besok %n week(s) %n minggu %n month(s) %n bulan 1 year 1 tahun EditEntryWidgetAdvanced Additional attributes Atribut tambahan Add Tambah Edit Sunting Remove Buang Attachments Lampiran Save Simpan Open Buka EditEntryWidgetAutoType Enable Auto-Type for this entry Aktifkan Ketik-Otomatis untuk entri ini Inherit default Auto-Type sequence from the group Mengikuti urutan Ketik-Otomatis baku grup Use custom Auto-Type sequence: Gunakan urutan Ketik-Otomatis ubahsuai: + + - - Window title: Judul jendela: Use default sequence Gunakan urutan baku Set custom sequence: Tetapkan urutan ubahsuai: EditEntryWidgetHistory Show Tampilkan Restore Kembalikan Delete Hapus Delete all Hapus semua EditEntryWidgetMain Title: Judul: Username: Nama pengguna: Password: Sandi: Repeat: Ulangi: Gen. Gen. URL: URL: Expires Kedaluwarsa Presets Prasetel Notes: Catatan: EditGroupWidget Group Grup Icon Ikon Properties Properti Add group Tambah grup Edit group Sunting grup Enable Aktifkan Disable Nonaktifkan Inherit from parent group (%1) Mengikuti grup induk (%1) EditGroupWidgetMain Name Nama Notes Catatan Expires Kedaluwarsa Search Cari Auto-type Ketik-otomatis Use default auto-type sequence of parent group Gunakan urutan ketik-otomatis baku grup induk Set default auto-type sequence Tetapkan urutan ketik-otomatis baku EditWidgetIcons Use default icon Gunakan ikon baku Use custom icon Gunakan ikon ubahsuai Add custom icon Tambah ikon ubahsuai Delete custom icon Hapus ikon ubahsuai Images Gambar All files Semua berkas Select Image Pilih gambar Can't delete icon! Tidak bisa menghapus ikon! Can't delete icon. Still used by %n item(s). Tidak bisa menghapus ikon. Masih digunakan oleh %n item. EditWidgetProperties Created: Dibuat: Modified: Dimodifikasi: Accessed: Diakses: Uuid: Uuid: EntryAttributesModel Name Nama EntryHistoryModel Last modified Terakhir dimodifikasi Title Judul Username Nama pengguna URL URL EntryModel Group Grup Title Judul Username Nama pengguna URL URL Group Recycle Bin Tong Sampah KeePass1OpenWidget Import KeePass1 database Impor basis data KeePass1 Error Galat Unable to open the database. Tidak bisa membuka basis data. KeePass1Reader Unable to read keyfile. Tidak bisa membaca berkas kunci. Not a KeePass database. Bukan basis data KeePass. Unsupported encryption algorithm. Algoritma enkripsi tidak didukung. Unsupported KeePass database version. Versi basis data KeePass tidak didukung. Root Root Unable to calculate master key Tidak bisa mengkalkulasi kunci utama KeePass2Reader Not a KeePass database. Bukan basis data KeePass. Unsupported KeePass database version. Versi basis data KeePass tidak didukung. Wrong key or database file is corrupt. Kunci salah atau berkas basis data rusak. Unable to calculate master key Tidak bisa mengkalkulasi kunci utama The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Berkas yang dipilih adalah basis data KeePass 1 yang lama (.kdb). Anda bisa mengimpornya dengan mengklik Basis Data > 'Impor basis data KeePass 1'. Ini adalah migrasi satu arah. Anda tidak akan bisa lagi membuka basis data yang diimpor dengan versi lama KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Galat saat menguji fungsi kriptografi. KeePassX - Error KeePassX - Galat MainWindow Database Basis data Recent databases Basis data baru-baru ini Help Bantuan Entries Entri Copy attribute to clipboard Salin atribut ke papan klip Groups Grup View Lihat Quit Keluar About Tentang Open database Buka basis data Save database Simpan basis data Close database Tutup basis data New database Basis data baru Add new entry Tambah entri baru View/Edit entry Lihat/Sunting entri Delete entry Hapus entri Add new group Tambah grup baru Edit group Sunting grup Delete group Hapus grup Save database as Simpan basis data sebagai Change master key Ubah kunci utama Database settings Pengaturan basis data Import KeePass 1 database Impor basis data KeePass 1 Clone entry Duplikat entri Find Temukan Copy username to clipboard Salin nama pengguna ke papan klip Copy password to clipboard Salin sandi ke papan klip Settings Pengaturan Perform Auto-Type Lakukan Ketik-Otomatis Open URL Buka URL Lock databases Kunci basis data Title Judul URL URL Notes Catatan Show toolbar Tampilkan bilah alat read-only baca-saja Toggle window Jungkit jendela Tools Perkakas Copy username Salin nama pengguna Copy password Salin sandi Export to CSV file Ekspor ke berkas CSV Repair database Perbaiki basis data KeePass 2 Database Basis Data KeePass 2 All files Semua Berkas Save repaired database Simpan basis data yang sudah diperbaiki Error Galat Writing the database failed. Gagal menyimpan basis data. PasswordGeneratorWidget Password: Sandi: Length: Panjang: Character Types Tipe Karakter Upper Case Letters Huruf Besar Lower Case Letters Huruf Kecil Numbers Angka Special Characters Karakter Spesial Exclude look-alike characters Kecualikan karakter mirip Ensure that the password contains characters from every group Pastikan sandi berisi karakter dari setiap grup Accept Terima QCommandLineParser Displays version information. Tampilkan informasi versi. Displays this help. Tampilkan bantuan ini. Unknown option '%1'. Opsi tidak diketahui '%1'. Unknown options: %1. Opsi tidak diketahui: %1. Missing value after '%1'. Nilai hilang setelah '%1'. Unexpected value after '%1'. Nilai tidak terduga setelah '%1'. [options] [opsi] Usage: %1 Penggunaan: %1 Options: Opsi: Arguments: Argumen: QSaveFile Existing file %1 is not writable Berkas yang ada %1 tidak bisa ditulis Writing canceled by application Penulisan dibatalkan oleh aplikasi Partial write. Partition full? Penulisan parsial. Partisi penuh? QtIOCompressor Internal zlib error when compressing: Galat zlib internal ketika memampatkan: Error writing to underlying device: Terjadi kesalahan saat menyimpan ke perangkat: Error opening underlying device: Terjadi kesalahan saat membuka perangkat: Error reading data from underlying device: Terjadi kesalahan saat membaca data dari perangkat: Internal zlib error when decompressing: Galat zlib internal ketika dekompres: QtIOCompressor::open The gzip format not supported in this version of zlib. Format gzip tidak didukung pada versi zlib ini. Internal zlib error: Galat zlib internal: SearchWidget Find: Temukan: Case sensitive Sensitif besar kecil huruf Current group Grup saat ini Root group Grup root SettingsWidget Application Settings Pengaturan Aplikasi General Umum Security Keamanan SettingsWidgetGeneral Remember last databases Ingat basis data terakhir Open previous databases on startup Buka basis data sebelumnya saat mulai Automatically save on exit Otomatis simpan ketika keluar Automatically save after every change Otomatis simpan setelah setiap perubahan Minimize when copying to clipboard Minimalkan ketika menyalin ke papan klip Use group icon on entry creation Gunakan ikon grup pada pembuatan entri Global Auto-Type shortcut Pintasan global Ketik-Otomatis Use entry title to match windows for global auto-type Gunakan judul entri untuk mencocokkan jendela untuk ketik-otomatis global Language Bahasa Show a system tray icon Tampilkan ikon baki sistem Hide window to system tray when minimized Sembunyikan jendela ke baki sistem ketika diminimalkan Remember last key files Ingat berkas kunci terakhir SettingsWidgetSecurity Clear clipboard after Kosongkan papan klip setelah sec det Lock databases after inactivity of Kunci basis data setelah tidak aktif selama Show passwords in cleartext by default Tampilkan teks sandi secara baku Always ask before performing auto-type Selalu tanya sebelum melakukan ketik-otomatis UnlockDatabaseWidget Unlock database Buka kunci basis data WelcomeWidget Welcome! Selamat datang! main KeePassX - cross-platform password manager KeePassX - pengelola sandi lintas platform filename of the password database to open (*.kdbx) nama berkas dari basis data sandi untuk dibuka (*.kdbx) path to a custom config file jalur ke berkas konfig ubahsuai key file of the database berkas kunci dari basis data keepassx-2.0.3/share/translations/keepassx_it.ts000066400000000000000000001251761276304217300220720ustar00rootroot00000000000000 AboutDialog About KeePassX Informazioni su KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX è distribuito sotto i termini della licenza GNU General Public License (GPL) versione 2 o, a tua scelta, della versione 3. Revision Revisione Using: In uso: AutoType Auto-Type - KeePassX Auto-Type - KeePassX Couldn't find an entry that matches the window title: Impossibile trovare una voce che corrisponda al titolo della finestra AutoTypeAssociationsModel Window Finestra Sequence Sequenza Default sequence Sequenza predefinita AutoTypeSelectDialog Auto-Type - KeePassX Auto-Type - KeePassX Select entry to Auto-Type: Seleziona una voce per Auto-Type: ChangeMasterKeyWidget Password Password Enter password: Inserisci password: Repeat password: Ripeti password: Key file File chiave Browse Sfoglia Create Crea Key files File chiave All files Tutti i file Create Key File... Crea file chiave... Error Errore Unable to create Key File : Impossibile creare file chiave: Select a key file Seleziona il file chiave Question Domanda Do you really want to use an empty string as password? Vuoi veramente usare una stringa vuota come password? Different passwords supplied. Sono state fornite password differenti. Failed to set key file Impossibile impostare il file chiave Failed to set %1 as the Key file: %2 Impossibile impostare %1 come file chiave: %2 DatabaseOpenWidget Enter master key Inserisci la chiave principale Key File: File chiave: Password: Password: Browse Sfoglia Error Errore Unable to open the database. Impossibile aprire il database. Can't open key file Impossibile aprire il file chiave All files Tutti i file Key files File chiave Select key file Seleziona file chiave DatabaseRepairWidget Repair database Ripara database Error Errore Can't open key file Impossibile aprire il file chiave Database opened fine. Nothing to do. Database aperto correttamente. Nessuna operazione da eseguire. Unable to open the database. Impossibile aprire il database Success Successo The database has been successfully repaired You can now save it. Il database è stato riparato con successo Adesso puoi salvarlo. Unable to repair the database. Impossibile riparare il database DatabaseSettingsWidget Database name: Nome del database: Database description: Descrizione del database: Transform rounds: Round di trasformazione: Default username: Nome utente predefinito: Use recycle bin: Utilizza cestino: MiB MiB Benchmark Prestazione Max. history items: Max. oggetti nella cronologia: Max. history size: Max. grandezza della cronologia: DatabaseTabWidget Root Root KeePass 2 Database Database KeePass 2 All files Tutti i file Open database Apri database Warning Avviso File not found! File non trovato! Open KeePass 1 database Apri database KeePass 1 KeePass 1 database Database KeePass 1 All files (*) Tutti i file (*) Close? Chiudere? Save changes? Salvare modifiche? "%1" was modified. Save changes? "%1" è stata modificato. Salvare le modifiche? Error Errore Writing the database failed. Scrittura del database non riuscita. Save database as Salva database come New database Nuovo database locked bloccato The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Il database che stai tentando di aprire è bloccato da un'altra istanza di KeePassX. Vuoi aprirlo comunque? Altrimenti il database verrà aperto in sola lettura. Lock database Blocca database Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Non è possibile bloccare il database dato che lo stai modificando. Premere Annulla per completare le modifiche o scartarle. This database has never been saved. You can save the database or stop locking it. Questo database non è mai stato salvato. È possibile salvare il database o interrompere il blocco. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Questo database è stato modificato. Vuoi salvare il database prima di bloccarlo? Altrimenti le modifiche verranno perse. "%1" is in edit mode. Discard changes and close anyway? "%1" è in modalità modifica. Annullare le modifiche e chiudere comunque? Export database to CSV file Esporta il database come file CSV CSV file file CSV Writing the CSV file failed. Scrittura del file CSV non riuscita. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Il database che stai tentando di salvare è bloccato da un'altra istanza di KeePassX. Vuoi salvare comunque? DatabaseWidget Change master key Cambia chiave principale Delete entry? Eliminare voce? Do you really want to delete the entry "%1" for good? Vuoi veramente eliminare la voce "%1"? Delete entries? Eliminare voci? Do you really want to delete %1 entries for good? Vuoi veramente eliminare %1 voci? Move entries to recycle bin? Muovere le voci nel cestino? Do you really want to move %n entry(s) to the recycle bin? Vuoi veramente spostare %n voce(i) nel cestino?Vuoi veramente spostare %n voce(i) nel cestino? Delete group? Eliminare gruppo? Do you really want to delete the group "%1" for good? Vuoi veramente eliminare il gruppo "%1"? Current group Gruppo corrente Error Errore Unable to calculate master key Impossibile calcolare la chiave principale EditEntryWidget Entry Voce Advanced Avanzate Icon Icona Auto-Type Auto-Type Properties Proprietà History Cronologia Entry history Cronologia voce Add entry Aggiungere voce Edit entry Modificare voce Error Errore Different passwords supplied. Sono state immesse password differenti. New attribute Nuovo attributo Select file Seleziona file Unable to open file Impossibile aprire il file Save attachment Salvare l'allegato Unable to save the attachment: Impossibile salvare l'allegato: Tomorrow Domani %n week(s) %n settimana%n settimane %n month(s) %n mese%n mesi 1 year Un anno EditEntryWidgetAdvanced Additional attributes Attributi addizionali Add Aggiungi Edit Modifica Remove Rimuovi Attachments Allegati Save Salva Open Apri EditEntryWidgetAutoType Enable Auto-Type for this entry Abilita Auto-Type per questa voce Inherit default Auto-Type sequence from the group Eredita la sequenza predefinita di Auto-Type dal gruppo Use custom Auto-Type sequence: Usa sequenza personalizzata di Auto-Type: + + - - Window title: Titolo finestra: Use default sequence Usa sequenza predefinita Set custom sequence: Imposta sequenza personalizzata: EditEntryWidgetHistory Show Mostra Restore Ripristina Delete Elimina Delete all Elimina tutti EditEntryWidgetMain Title: Titolo: Username: Nome utente: Password: Password: Repeat: Ripeti: Gen. Gen. URL: URL: Expires Scade: Presets Preimpostazioni Notes: Note: EditGroupWidget Group Gruppo Icon Icona Properties Proprietà Add group Aggiungi gruppo Edit group Modifica gruppo Enable Abilita Disable Disabilita Inherit from parent group (%1) Eredita dal gruppo genitore (%1) EditGroupWidgetMain Name Nome Notes Note Expires Scade Search Cerca Auto-type Auto-Type Use default auto-type sequence of parent group Eredita la sequenza predefinita di auto-type dal gruppo Set default auto-type sequence Usa sequenza di auto-type predefinita EditWidgetIcons Use default icon Usa icona predefinita Use custom icon Usa icona personalizzata Add custom icon Aggiungi icona personalizzata Delete custom icon Rimuovi icona personalizzata Images Immagini All files Tutti i file Select Image Seleziona immagine Can't delete icon! Impossibile eliminare l'icona! Can't delete icon. Still used by %n item(s). Impossibile eliminare l'icona in quanto è in uso da %n voce.Impossibile eliminare l'icona in quanto è in uso da %n voci. EditWidgetProperties Created: Creazione: Modified: Modifica: Accessed: Accesso: Uuid: UUID: EntryAttributesModel Name Nome EntryHistoryModel Last modified Ultima modifica Title Titolo Username Nome utente URL URL EntryModel Group Gruppo Title Titolo Username Nome utente URL URL Group Recycle Bin Cestino KeePass1OpenWidget Import KeePass1 database Importa database KeePass1 Error Errore Unable to open the database. Impossibile aprire il database. KeePass1Reader Unable to read keyfile. Impossibile leggere il file della chiave. Not a KeePass database. Non è un database KeePass. Unsupported encryption algorithm. Algoritmo di cifratura non supportato. Unsupported KeePass database version. Versione database KeePass non supportata. Root Root Unable to calculate master key Impossibile calcolare la chiave principale KeePass2Reader Not a KeePass database. Non è un database KeePass. Unsupported KeePass database version. Versione database KeePass non supportata. Wrong key or database file is corrupt. Chiave errata o file del database danneggiato. Unable to calculate master key Impossibile calcolare la chiave principale The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Il file selezionato è un vecchio database KeePass 1 (.kdb). Puoi importarlo facendo clic su Database > 'Importa database KeePass 1'. Questa è una migrazione in una sola direzione. Non potrai aprire il database importato con la vecchia versione 0.4 di KeePassX. Main Fatal error while testing the cryptographic functions. Errore fatale durante il test delle funzioni di crittografia. KeePassX - Error KeePassx - Errore MainWindow Database Database Recent databases Database recenti Help Aiuto Entries Voci Copy attribute to clipboard Copia attributi negli appunti Groups Gruppi View Visualizza Quit Esci About Informazioni Open database Apri database Save database Salva database Close database Chiudi database New database Nuovo database Add new entry Aggiungi nuova voce View/Edit entry Visualizza/modifica voce Delete entry Elimina voce Add new group Aggiungi nuovo gruppo Edit group Modifica gruppo Delete group Elimina gruppo Save database as Salva database come Change master key Cambia chiave principale Database settings Impostazioni database Import KeePass 1 database Importa database KeePass 1 Clone entry Clona voce Find Trova Copy username to clipboard Copia nome utente negli appunti Copy password to clipboard Copia password negli appunti Settings Impostazioni Perform Auto-Type Esegui Auto-Type Open URL Apri URL Lock databases Blocca database Title Titolo URL URL Notes Note Show toolbar Mostra barra degli strumenti read-only sola lettura Toggle window Cambia finestra Tools Strumenti Copy username Copia nome utente Copy password Copia password Export to CSV file Esporta in un file CSV Repair database Ripara database KeePass 2 Database Database KeePass 2 All files Tutti i file Save repaired database Salva il database riparato Error Errore Writing the database failed. Scrittura del database non riuscita. PasswordGeneratorWidget Password: Password: Length: Lunghezza: Character Types Tipi di carattere Upper Case Letters Lettere maiuscole Lower Case Letters Lettere minuscole Numbers Numeri Special Characters Caratteri speciali Exclude look-alike characters Escludi caratteri simili Ensure that the password contains characters from every group Verifica che la password contenga caratteri di ogni gruppo Accept Accetta QCommandLineParser Displays version information. Mostra informazioni sulla versione. Displays this help. Mostra questo aiuto. Unknown option '%1'. Opzione sconosciuta '%1'. Unknown options: %1. Opzioni sconosciute '%1'. Missing value after '%1'. Manca valore dopo '%1'. Unexpected value after '%1'. Valore inaspettato dopo '%1'. [options] [opzioni] Usage: %1 Uso: %1 Options: Opzioni: Arguments: Argomenti: QSaveFile Existing file %1 is not writable Il file esistente %1 non è scrivibile Writing canceled by application Scrittura annullata dall'applicazione Partial write. Partition full? Scrittura parziale. Partizione piena? QtIOCompressor Internal zlib error when compressing: Errore interno di zlib durante la compressione: Error writing to underlying device: Errore durante la scrittura nel dispositivo: Error opening underlying device: Errore durante l'apertura dal dispositivo: Error reading data from underlying device: Errore durante la lettura dal dispositivo: Internal zlib error when decompressing: Errore interno di zlib durante la decompressione: QtIOCompressor::open The gzip format not supported in this version of zlib. Formato gzip non supportato da questa versione di zlib. Internal zlib error: Errore interno di zlib: SearchWidget Find: Trova: Case sensitive Riconoscimento di maiuscole e minuscole Current group Gruppo corrente Root group Gruppo radice SettingsWidget Application Settings Impostazioni applicazione General Generale Security Sicurezza SettingsWidgetGeneral Remember last databases Ricorda ultimo database Open previous databases on startup Apri il database precedente all'avvio Automatically save on exit Salva automaticamente all'uscita Automatically save after every change Salva automaticamente dopo ogni modifica Minimize when copying to clipboard Minimizza quando si copia negli appunti Use group icon on entry creation Usa l'icona del gruppo alla creazione di una voce Global Auto-Type shortcut Scorciatoia Auto-Type globale Use entry title to match windows for global auto-type Utilizza il titolo della voce per abbinare la finestra per auto-type globale Language Lingua Show a system tray icon Mostra un'icona nell'area di notifica del sistema Hide window to system tray when minimized Nascondi la finestra nell'area di notifica del sistema quando viene minimizzata Remember last key files Ricorda gli ultimi file di chiavi SettingsWidgetSecurity Clear clipboard after Pulisci appunti dopo sec sec Lock databases after inactivity of Blocca i database dopo un'inattività di Show passwords in cleartext by default Mostra la password in chiaro in maniera predefinita Always ask before performing auto-type Chiedi sempre prima di eseguire auto-type UnlockDatabaseWidget Unlock database Sblocca database WelcomeWidget Welcome! Benvenuto! main KeePassX - cross-platform password manager KeePassX - gestore di password multipiattafroma filename of the password database to open (*.kdbx) nome del file di database da aprire (*.kdbx) path to a custom config file percorso ad un file di configurazione personalizzato key file of the database file chiave del database keepassx-2.0.3/share/translations/keepassx_ja.ts000066400000000000000000001323501276304217300220400ustar00rootroot00000000000000 AboutDialog About KeePassX KeePassX ã«ã¤ã„㦠KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassXã¯GNU General Public License (GPL) version 2 ã¾ãŸã¯ version 3 (ã©ã¡ã‚‰ã‹ã‚’é¸æŠž)ã®æ¡ä»¶ã§é…布ã•れã¾ã™ã€‚ Revision リビジョン Using: 利用中: AutoType Auto-Type - KeePassX 自動入力 - KeePassX Couldn't find an entry that matches the window title: ウィンドウタイトルã«ä¸€è‡´ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ: AutoTypeAssociationsModel Window ウインドウ Sequence シーケンス Default sequence デフォルトã®ã‚·ãƒ¼ã‚±ãƒ³ã‚¹ AutoTypeSelectDialog Auto-Type - KeePassX 自動入力 - KeePassX Select entry to Auto-Type: 自動入力ã™ã‚‹ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’é¸æŠžã—ã¦ãã ã•ã„: ChangeMasterKeyWidget Password パスワード Enter password: パスワードを入力: Repeat password: パスワードをå†å…¥åŠ›: Key file キーファイル Browse å‚ç…§ Create ä½œæˆ Key files キーファイル All files å…¨ã¦ã®ãƒ•ァイル Create Key File... キーファイルを作æˆ... Error エラー Unable to create Key File : キーファイルを作æˆã§ãã¾ã›ã‚“ã§ã—ãŸ: Select a key file ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž Question è³ªå• Do you really want to use an empty string as password? 本当ã«ç©ºã®ãƒ‘スワード文字列ã§ä½¿ã„ã¾ã™ã‹ï¼Ÿ Different passwords supplied. ç•°ãªã‚‹ãƒ‘スワードãŒå…¥åŠ›ã•れã¾ã—ãŸã€‚ Failed to set key file キーファイルã®ã‚»ãƒƒãƒˆã«å¤±æ•—ã—ã¾ã—㟠Failed to set %1 as the Key file: %2 %1 をキーファイルã¨ã—ã¦ã‚»ãƒƒãƒˆã§ãã¾ã›ã‚“ã§ã—ãŸ: %2 DatabaseOpenWidget Enter master key マスターキーã®å…¥åŠ› Key File: キーファイル: Password: パスワード: Browse å‚ç…§ Error エラー Unable to open the database. データベースを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ Can't open key file キーファイルを開ã‘ã¾ã›ã‚“ã§ã—㟠All files å…¨ã¦ã®ãƒ•ァイル Key files キーファイル Select key file ã‚­ãƒ¼ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž DatabaseRepairWidget Repair database データベースを修復ã™ã‚‹ Error エラー Can't open key file キーファイルを開ã‘ã¾ã›ã‚“ã§ã—㟠Database opened fine. Nothing to do. ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯æ­£å¸¸ã«é–‹ã‹ã‚Œã¦ã„ã¾ã™ã€‚行ã†ã¹ãã“ã¨ã¯ã‚りã¾ã›ã‚“。 Unable to open the database. データベースを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ Success æˆåŠŸ The database has been successfully repaired You can now save it. ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯æ­£å¸¸ã«ä¿®å¾©ã•れã¾ã—㟠データベースã®ä¿å­˜ã‚’行ã£ã¦ãã ã•ã„。 Unable to repair the database. データベースを修復ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ DatabaseSettingsWidget Database name: データベースå: Database description: ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æ¦‚è¦: Transform rounds: 変æ›å›žæ•°: Default username: ユーザーåã®åˆæœŸå€¤: Use recycle bin: ゴミ箱を使ã†: MiB MiB Benchmark ベンãƒãƒžãƒ¼ã‚¯ Max. history items: 最大履歴数: Max. history size: 最大履歴データサイズ: DatabaseTabWidget Root ルート KeePass 2 Database KeePass 2 データベース All files å…¨ã¦ã®ãƒ•ァイル Open database データベースを開ã Warning 警告 File not found! ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“! Open KeePass 1 database KeePass 1 データベースを開ã KeePass 1 database KeePass 1 データベース All files (*) å…¨ã¦ã®ãƒ•ァイル (*) Close? é–‰ã˜ã¾ã™ã‹? Save changes? 変更をä¿å­˜ã—ã¾ã™ã‹? "%1" was modified. Save changes? "%1" ã¯ç·¨é›†ã•れã¦ã„ã¾ã™ã€‚ 変更をä¿å­˜ã—ã¾ã™ã‹? Error エラー Writing the database failed. データベースãŒä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ Save database as データベースを別åã§ä¿å­˜ New database æ–°ã—ã„データベース locked ロック済㿠The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. é–‹ã“ã†ã¨ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯åˆ¥ã®KeePassXプログラムã‹ã‚‰ãƒ­ãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ ã¨ã«ã‹ãé–‹ãã¾ã™ã‹? データベースを読ã¿å–り専用ã§é–‹ãã¾ã™ã€‚ Lock database データベースをロックã™ã‚‹ Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. ç¾åœ¨ç·¨é›†ä¸­ã®ãŸã‚ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ロックã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ キャンセルボタンを押ã—ã€å¤‰æ›´ã‚’完了ã•ã›ã‚‹ã‹ç ´æ£„ã—ã¦ãã ã•ã„。 This database has never been saved. You can save the database or stop locking it. ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯ä¸€åº¦ã‚‚ä¿å­˜ã•れã¦ã„ã¾ã›ã‚“。 データベースをä¿å­˜ã—ã¦ãƒ­ãƒƒã‚¯ã‚’解除ã—ã¦ãã ã•ã„。 This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. ã“ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯å¤‰æ›´ã•れã¾ã—ãŸã€‚ ロックを行ã†å‰ã«ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ ä¿å­˜ã—ãªã„å ´åˆã«ã¯å¤‰æ›´ç‚¹ã¯å¤±ã‚れã¾ã™ã€‚ "%1" is in edit mode. Discard changes and close anyway? "%1" ã¯ç¾åœ¨ç·¨é›†ãƒ¢ãƒ¼ãƒ‰ã§ã™ã€‚ 変更を破棄ã—ã¦é–‰ã˜ã¦ã—ã¾ã£ã¦ã‚‚よã‚ã—ã„ã§ã™ã‹ï¼Ÿ Export database to CSV file データベースをCSVファイルã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã™ã‚‹ CSV file CSVファイル Writing the CSV file failed. CSVãƒ•ã‚¡ã‚¤ãƒ«ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? ä¿å­˜ã—よã†ã¨ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯åˆ¥ã®KeePassXプログラムã‹ã‚‰ãƒ­ãƒƒã‚¯ã•れã¦ã„ã¾ã™ã€‚ ã¨ã«ã‹ãä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ DatabaseWidget Change master key マスターキーを変更ã™ã‚‹ Delete entry? エントリーを削除ã—ã¦ã‚ˆã„ã§ã™ã‹? Do you really want to delete the entry "%1" for good? 本当ã«ã‚¨ãƒ³ãƒˆãƒªãƒ¼ "%1" ã‚’æ°¸é ã«æ¶ˆåŽ»ã—ã¾ã™ã‹ï¼Ÿ Delete entries? 複数ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’削除ã—ã¦ã‚ˆã„ã§ã™ã‹? Do you really want to delete %1 entries for good? 本当㫠%1 個ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’æ°¸é ã«æ¶ˆåŽ»ã—ã¾ã™ã‹ï¼Ÿ Move entries to recycle bin? エントリーをゴミ箱ã«ç§»ã—ã¾ã™ã‹? Do you really want to move %n entry(s) to the recycle bin? %n個()ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’ゴミ箱ã«ç§»ã—ã¦ã‚‚よã„ã§ã™ã‹? Delete group? グループを削除ã—ã¦ã‚ˆã„ã§ã™ã‹? Do you really want to delete the group "%1" for good? グループ "%1" を完全ã«å‰Šé™¤ã—ã¾ã™ãŒã‚ˆã‚ã—ã„ã§ã™ã‹? Current group ç¾åœ¨ã®ã‚°ãƒ«ãƒ¼ãƒ— Error エラー Unable to calculate master key マスターキーを計算ã§ãã¾ã›ã‚“ã§ã—㟠EditEntryWidget Entry エントリー Advanced 詳細設定 Icon アイコン Auto-Type 自動入力 Properties プロパティ History 履歴 Entry history エントリーã®å±¥æ­´ Add entry エントリーを追加 Edit entry エントリーを編集 Error エラー Different passwords supplied. ç•°ãªã‚‹ãƒ‘スワードãŒå…¥åŠ›ã•れã¾ã—ãŸã€‚ New attribute æ–°ã—ã„属性 Select file ãƒ•ã‚¡ã‚¤ãƒ«ã‚’é¸æŠž Unable to open file ファイルを開ã‘ã¾ã›ã‚“ã§ã—㟠Save attachment 添付をä¿å­˜ã™ã‚‹ Unable to save the attachment: 添付をä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸ: Tomorrow 明日 %n week(s) %n週間 %n month(s) %nヶ月 1 year 1å¹´ EditEntryWidgetAdvanced Additional attributes 追加属性 Add 追加 Edit 編集 Remove 削除 Attachments 添付ファイル Save ä¿å­˜ Open é–‹ã EditEntryWidgetAutoType Enable Auto-Type for this entry エントリーã®è‡ªå‹•入力を有効ã«ã™ã‚‹ Inherit default Auto-Type sequence from the group 自動入力手順をグループã‹ã‚‰å¼•ãç¶™ã Use custom Auto-Type sequence: カスタムã®è‡ªå‹•入力手順を使ã†: + + - - Window title: ウインドウタイトル: Use default sequence ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®æ‰‹é †ã‚’使ㆠSet custom sequence: ã‚«ã‚¹ã‚¿ãƒ ã®æ‰‹é †ã‚’入力: EditEntryWidgetHistory Show 表示 Restore 復元 Delete 削除 Delete all å…¨ã¦å‰Šé™¤ EditEntryWidgetMain Title: タイトル: Username: ユーザå: Password: パスワード: Repeat: パスワード確èª: Gen. ç”Ÿæˆ URL: URL: Expires æœŸé™ Presets プリセット Notes: メモ: EditGroupWidget Group グループ Icon アイコン Properties プロパティ Add group グループã®è¿½åŠ  Edit group グループã®ç·¨é›† Enable 有効 Disable 無効 Inherit from parent group (%1) 親グループ "(%1)" ã‹ã‚‰å¼•ãç¶™ã EditGroupWidgetMain Name グループå Notes メモ Expires æœŸé™ Search 検索 Auto-type 自動入力 Use default auto-type sequence of parent group 親グループã®ãƒ‡ãƒ•ォルトã®è‡ªå‹•入力手順を使ㆠSet default auto-type sequence デフォルトã®è‡ªå‹•入力手順をセット EditWidgetIcons Use default icon デフォルトアイコンã‹ã‚‰é¸æŠž Use custom icon カスタムアイコンã‹ã‚‰é¸æŠž Add custom icon カスタムアイコンを追加 Delete custom icon カスタムアイコンを削除 Images ç”»åƒ All files å…¨ã¦ã®ãƒ•ァイル Select Image ç”»åƒã‚’é¸æŠž Can't delete icon! アイコンを削除ã§ãã¾ã›ã‚“! Can't delete icon. Still used by %n item(s). %n個ã®ã‚¢ã‚¤ãƒ†ãƒ ã‹ã‚‰ä½¿ã‚れã¦ã„ã‚‹ã®ã§ã€ã‚¢ã‚¤ã‚³ãƒ³ã‚’削除ã§ãã¾ã›ã‚“。 EditWidgetProperties Created: ä½œæˆæ—¥æ™‚: Modified: 編集日時: Accessed: アクセス日時: Uuid: UUID: EntryAttributesModel Name åå‰ EntryHistoryModel Last modified 最終更新日時 Title タイトル Username ユーザーå URL URL EntryModel Group グループ Title タイトル Username ユーザーå URL URL Group Recycle Bin ゴミ箱 KeePass1OpenWidget Import KeePass1 database KeePass1 データベースをインãƒãƒ¼ãƒˆã™ã‚‹ Error エラー Unable to open the database. データベースを開ã‘ã¾ã›ã‚“ã§ã—ãŸã€‚ KeePass1Reader Unable to read keyfile. キーファイルを読ã¿è¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚ Not a KeePass database. KeePassデータベースã§ã¯ã‚りã¾ã›ã‚“。 Unsupported encryption algorithm. サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„æš—å·åŒ–アルゴリズムã§ã™ã€‚ Unsupported KeePass database version. サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®KeePassデータベースã§ã™ã€‚ Root Root Unable to calculate master key マスターキーを計算ã§ãã¾ã›ã‚“ã§ã—㟠KeePass2Reader Not a KeePass database. KeePassデータベースã§ã¯ã‚りã¾ã›ã‚“。 Unsupported KeePass database version. サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®KeePassデータベースã§ã™ã€‚ Wrong key or database file is corrupt. キーãŒé–“é•ã£ã¦ã„ã‚‹ã‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ãƒ•ァイルãŒç ´æã—ã¦ã„ã¾ã™ã€‚ Unable to calculate master key マスターキーを計算ã§ãã¾ã›ã‚“ The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. é¸æŠžã•れãŸãƒ•ァイルã¯å¤ã„ KeePass 1 ã®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ (.kdb) ã§ã™ã€‚ データベース > 'KeePass 1 データベースをインãƒãƒ¼ãƒˆ' をクリックã™ã‚‹ã“ã¨ã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ ã“れã¯ä¸€æ–¹å‘ã®ç§»è¡Œæ“作ã§ã‚りã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã¯å¤ã„ KeePassX 0.4 ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§ã¯é–‹ãã“ã¨ã¯ã§ãã¾ã›ã‚“。 Main Fatal error while testing the cryptographic functions. æš—å·åŒ–機能ã®ãƒ†ã‚¹ãƒˆä¸­ã«è‡´å‘½çš„ãªã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ KeePassX - Error KeePassX - エラー MainWindow Database データベース Recent databases 最近使ã£ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ Help ヘルプ Entries エントリー Copy attribute to clipboard クリップボードã«ã‚³ãƒ”ーã™ã‚‹ Groups グループ View 表示 Quit 終了 About ã“ã®ã‚½ãƒ•トウェアã«ã¤ã„㦠Open database データベースを開ã Save database データベースをä¿å­˜ Close database データベースを閉ã˜ã‚‹ New database æ–°è¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ Add new entry æ–°è¦ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®è¿½åŠ  View/Edit entry エントリーã®è¡¨ç¤º/編集 Delete entry エントリーã®å‰Šé™¤ Add new group æ–°è¦ã‚°ãƒ«ãƒ¼ãƒ—ã®è¿½åŠ  Edit group グループã®ç·¨é›† Delete group グループã®å‰Šé™¤ Save database as ファイルåã‚’ã¤ã‘ã¦ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿å­˜ Change master key マスターキーを変更 Database settings データベースã®è¨­å®š Import KeePass 1 database KeePass1 データベースをインãƒãƒ¼ãƒˆã™ã‚‹ Clone entry エントリーã®è¤‡è£½ Find 検索 Copy username to clipboard ユーザーåをコピー Copy password to clipboard パスワードをコピー Settings 設定 Perform Auto-Type 自動入力ã®å®Ÿè¡Œ Open URL URLã‚’é–‹ã Lock databases データベースをロック Title タイトル URL URL Notes メモ Show toolbar ツールãƒãƒ¼ã‚’表示 read-only 読ã¿å–り専用 Toggle window ウィンドウ切替 Tools ツール Copy username ユーザåをコピー Copy password パスワードをコピー Export to CSV file CSVファイルã¸ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ Repair database データベースを修復ã™ã‚‹ KeePass 2 Database KeePass 2 データベース All files å…¨ã¦ã®ãƒ•ァイル Save repaired database 修復ã•れãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ä¿å­˜ã™ã‚‹ Error エラー Writing the database failed. ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã®æ›¸ãè¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ PasswordGeneratorWidget Password: パスワード: Length: 文字数: Character Types 文字種 Upper Case Letters 大文字 Lower Case Letters å°æ–‡å­— Numbers æ•°å­— Special Characters ç‰¹æ®Šãªæ–‡å­— Exclude look-alike characters よãä¼¼ãŸæ–‡å­—を除外ã™ã‚‹ Ensure that the password contains characters from every group 使用ã™ã‚‹æ–‡å­—ç¨®ã®æ–‡å­—ãŒå¿…ãšå«ã¾ã‚Œã‚‹ã‚ˆã†ã«ã™ã‚‹ Accept é©ç”¨ QCommandLineParser Displays version information. ãƒãƒ¼ã‚¸ãƒ§ãƒ³æƒ…報を表示ã™ã‚‹ã€‚ Displays this help. ã“ã®ãƒ˜ãƒ«ãƒ—を表示ã™ã‚‹ã€‚ Unknown option '%1'. '%1' ã¯ä¸æ˜Žãªã‚ªãƒ—ションã§ã™ã€‚ Unknown options: %1. %1 ã¯ä¸æ˜Žãªã‚ªãƒ—ションã§ã™ã€‚ Missing value after '%1'. '%1' ã®å¾Œã«å€¤ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 Unexpected value after '%1'. '%1' ã®å¾Œã«äºˆæœŸã—ãªã„値ãŒã‚りã¾ã™ã€‚ [options] [オプション] Usage: %1 ä½¿ã„æ–¹: %1 Options: オプション: Arguments: 引数: QSaveFile Existing file %1 is not writable 存在ã™ã‚‹ãƒ•ァイル %1 ã¯æ›¸ãè¾¼ã¿ã§ãã¾ã›ã‚“ Writing canceled by application アプリケーションã«ã‚ˆã‚Šæ›¸ãè¾¼ã¿ãŒã‚­ãƒ£ãƒ³ã‚»ãƒ«ã•れã¾ã—㟠Partial write. Partition full? 一部ã—ã‹æ›¸ãè¾¼ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚パーティションãŒã„ã£ã±ã„ã‹ã‚‚? QtIOCompressor Internal zlib error when compressing: 圧縮時ã«å†…部zlibエラーãŒç™ºç”Ÿã—ã¾ã—ãŸ: Error writing to underlying device: 基本デãƒã‚¤ã‚¹ã¸ã®æ›¸ãè¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: Error opening underlying device: 基本デãƒã‚¤ã‚¹ã‚’é–‹ãæ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: Error reading data from underlying device: 基本デãƒã‚¤ã‚¹ã‹ã‚‰èª­ã¿è¾¼ã¿æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸ: Internal zlib error when decompressing: è§£å‡æ™‚ã«å†…部zlibエラーãŒç™ºç”Ÿã—ã¾ã—ãŸ: QtIOCompressor::open The gzip format not supported in this version of zlib. zlibã®ç¾åœ¨ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ãŒgzipå½¢å¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 Internal zlib error: 内部ã®zlibエラー: SearchWidget Find: 検索: Case sensitive 大文字ã¨å°æ–‡å­—を区別 Current group ç¾åœ¨ã®ã‚°ãƒ«ãƒ¼ãƒ— Root group 全㦠SettingsWidget Application Settings アプリケーション設定 General 一般 Security セキュリティ SettingsWidgetGeneral Remember last databases 最近使用ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’記憶ã™ã‚‹ Open previous databases on startup KeePassX起動時ã«å‰å›žä½¿ç”¨ã—ãŸãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’é–‹ã Automatically save on exit 終了時ã«è‡ªå‹•çš„ã«ä¿å­˜ã™ã‚‹ Automatically save after every change 変更ã™ã‚‹ã”ã¨ã«è‡ªå‹•çš„ã«ä¿å­˜ Minimize when copying to clipboard クリップボードã«ã‚³ãƒ”ーã—ãŸã‚‰æœ€å°åŒ– Use group icon on entry creation エントリーを作æˆã—ãŸã‚‰ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚¢ã‚¤ã‚³ãƒ³ã‚’使ㆠGlobal Auto-Type shortcut 全体ã®è‡ªå‹•入力ショートカット Use entry title to match windows for global auto-type グローãƒãƒ«è‡ªå‹•入力ã®éš›ã«ã€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®ã‚¿ã‚¤ãƒˆãƒ«ã¨ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã®ãƒžãƒƒãƒãƒ³ã‚°ã‚’行ㆠLanguage 言語 Show a system tray icon システムトレイアイコンを表示 Hide window to system tray when minimized 最å°åŒ–ã•れãŸéš›ã«ã‚·ã‚¹ãƒ†ãƒ ãƒˆãƒ¬ã‚¤ã¸æ ¼ç´ã™ã‚‹ Remember last key files 最後ã®ã‚­ãƒ¼ãƒ•ァイルを記憶 SettingsWidgetSecurity Clear clipboard after æ¬¡ã®æ™‚é–“ãŒéŽãŽãŸã‚‰ã‚¯ãƒªãƒƒãƒ—ボードを消去 sec ç§’ Lock databases after inactivity of 未æ“ä½œã®æ™‚é–“ãŒç¶šã„ãŸã‚‰ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‚’ロック Show passwords in cleartext by default パスワードã¯ãƒ‡ãƒ•ォルトã§å¹³æ–‡è¡¨ç¤ºã«ã™ã‚‹ Always ask before performing auto-type 自動入力ã®å®Ÿè¡Œå‰ã«å¸¸ã«ç¢ºèªã™ã‚‹ UnlockDatabaseWidget Unlock database データベースã®ãƒ­ãƒƒã‚¯ã‚’解除 WelcomeWidget Welcome! よã†ã“ã! main KeePassX - cross-platform password manager KeePassX - クロスプラットフォーム パスワードマãƒãƒ¼ã‚¸ãƒ£ãƒ¼ filename of the password database to open (*.kdbx) é–‹ãパスワードデータベースã®ãƒ•ァイルå (*.kdbx) path to a custom config file カスタム設定ファイルã¸ã®ãƒ‘ス key file of the database データベースã®ã‚­ãƒ¼ãƒ•ァイル keepassx-2.0.3/share/translations/keepassx_ko.ts000066400000000000000000001262651276304217300220670ustar00rootroot00000000000000 AboutDialog About KeePassX KeePassX ì •ë³´ KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX는 GNU General Public License(GPL) 버전 2 í˜¹ì€ ë²„ì „ 3(ì„ íƒì )으로 ë°°í¬ë©ë‹ˆë‹¤. Revision 리비전 Using: 사용: AutoType Auto-Type - KeePassX ìžë™ ìž…ë ¥ - KeePassX Couldn't find an entry that matches the window title: ì°½ 제목과 ì¼ì¹˜í•˜ëŠ” í•­ëª©ì„ ì°¾ì„ ìˆ˜ 없습니다: AutoTypeAssociationsModel Window ì°½ Sequence 시퀀스 Default sequence 기본 시퀀스 AutoTypeSelectDialog Auto-Type - KeePassX ìžë™ ìž…ë ¥ - KeePassX Select entry to Auto-Type: ìžë™ìœ¼ë¡œ 입력할 항목 ì„ íƒ: ChangeMasterKeyWidget Password 암호 Enter password: 암호 ìž…ë ¥: Repeat password: 암호 확ì¸: Key file 키 íŒŒì¼ Browse 찾아보기 Create 만들기 Key files 키 íŒŒì¼ All files 모든 íŒŒì¼ Create Key File... 키 íŒŒì¼ ë§Œë“¤ê¸°... Error 오류 Unable to create Key File : 키 파ì¼ì„ 만들 수 없습니다: Select a key file 키 íŒŒì¼ ì„ íƒ Question 질문 Do you really want to use an empty string as password? 빈 문ìžì—´ì„ 암호로 사용하시겠습니까? Different passwords supplied. 다른 암호를 입력하였습니다. Failed to set key file 키 파ì¼ì„ 설정할 수 ì—†ìŒ Failed to set %1 as the Key file: %2 %1ì„(를) 키 파ì¼ë¡œ 설정할 수 없습니다: %2 DatabaseOpenWidget Enter master key 마스터 키 ìž…ë ¥ Key File: 키 파ì¼: Password: 암호: Browse 찾아보기 Error 오류 Unable to open the database. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ 수 없습니다. Can't open key file 키 파ì¼ì„ ì—´ 수 ì—†ìŒ All files 모든 íŒŒì¼ Key files 키 íŒŒì¼ Select key file 키 íŒŒì¼ ì„ íƒ DatabaseRepairWidget Repair database ë°ì´í„°ë² ì´ìФ 복구 Error 오류 Can't open key file 키 파ì¼ì„ ì—´ 수 ì—†ìŒ Database opened fine. Nothing to do. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 열었습니다. í•  ì¼ì´ 없습니다. Unable to open the database. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ 수 없습니다. Success 성공 The database has been successfully repaired You can now save it. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 복구했습니다 ì´ì œ 저장할 수 있습니다. Unable to repair the database. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 복구할 수 없습니다. DatabaseSettingsWidget Database name: ë°ì´í„°ë² ì´ìФ ì´ë¦„: Database description: ë°ì´í„°ë² ì´ìФ 설명: Transform rounds: 변환 횟수: Default username: 기본 ì‚¬ìš©ìž ì´ë¦„: Use recycle bin: 휴지통 사용: MiB MiB Benchmark ë²¤ì¹˜ë§ˆí¬ Max. history items: 최대 과거 항목 수: Max. history size: 최대 과거 항목 í¬ê¸°: DatabaseTabWidget Root 루트 KeePass 2 Database KeePass 2 ë°ì´í„°ë² ì´ìФ All files 모든 íŒŒì¼ Open database ë°ì´í„°ë² ì´ìФ 열기 Warning 경고 File not found! 파ì¼ì„ ì°¾ì„ ìˆ˜ 없습니다! Open KeePass 1 database KeePass 1 ë°ì´í„°ë² ì´ìФ 열기 KeePass 1 database KeePass 1 ë°ì´í„°ë² ì´ìФ All files (*) 모든 íŒŒì¼ (*) Close? 닫기 확ì¸? Save changes? 변경 사항 저장 확ì¸? "%1" was modified. Save changes? "%1"ì´(ê°€) 변경ë˜ì—ˆìŠµë‹ˆë‹¤. 저장하시겠습니까? Error 오류 Writing the database failed. ë°ì´í„°ë² ì´ìŠ¤ì— ì“¸ 수 없습니다. Save database as 다른 ì´ë¦„으로 ë°ì´í„°ë² ì´ìФ 저장 New database 새 ë°ì´í„°ë² ì´ìФ locked ìž ê¹€ The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. 열려고 하는 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 다른 KeePassX ì¸ìŠ¤í„´ìŠ¤ì—서 잠갔습니다. ê·¸ëž˜ë„ ì—¬ì‹œê² ìŠµë‹ˆê¹Œ? ì½ê¸° 전용으로 ì—´ ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤. Lock database ë°ì´í„°ë² ì´ìФ 잠금 Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 편집하고 있어서 잠글 수 없습니다. 취소를 눌러서 변경 ì‚¬í•­ì„ ì €ìž¥í•˜ê±°ë‚˜ 무시하십시오. This database has never been saved. You can save the database or stop locking it. ì´ ë°ì´í„°ë² ì´ìŠ¤ê°€ 저장ë˜ì§€ 않았습니다. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 저장하거나 ìž ê¸ˆì„ í’€ 수 있습니다. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. ë°ì´í„°ë² ì´ìŠ¤ê°€ 수정ë˜ì—ˆìŠµë‹ˆë‹¤. 잠그기 ì „ì— ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 저장하시겠습니까? 저장하지 ì•Šì€ ë³€ê²½ ì‚¬í•­ì€ ì†ì‹¤ë©ë‹ˆë‹¤. "%1" is in edit mode. Discard changes and close anyway? "%1"ì´(ê°€) 현재 편집 모드입니다. 변경 ì‚¬í•­ì„ ë¬´ì‹œí•˜ê³  닫으시겠습니까? Export database to CSV file ë°ì´í„°ë² ì´ìŠ¤ë¥¼ CSV 파ì¼ë¡œ 내보내기 CSV file CSV íŒŒì¼ Writing the CSV file failed. CSV 파ì¼ì— 기ë¡í•  수 없습니다. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? 저장하려고 하는 ë°ì´í„°ë² ì´ìŠ¤ë¥¼ 다른 KeePassX ì¸ìŠ¤í„´ìŠ¤ì—서 잠갔습니다. ê·¸ëž˜ë„ ì €ìž¥í•˜ì‹œê² ìŠµë‹ˆê¹Œ? DatabaseWidget Change master key 마스터 키 변경 Delete entry? í•­ëª©ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? Do you really want to delete the entry "%1" for good? ì •ë§ í•­ëª© "%1"ì„(를) 삭제하시겠습니까? Delete entries? í•­ëª©ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? Do you really want to delete %1 entries for good? ì •ë§ í•­ëª© %1개를 삭제하시겠습니까? Move entries to recycle bin? í•­ëª©ì„ íœ´ì§€í†µìœ¼ë¡œ ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? Do you really want to move %n entry(s) to the recycle bin? 항목 %n개를 휴지통으로 ì´ë™í•˜ì‹œê² ìŠµë‹ˆê¹Œ? Delete group? ê·¸ë£¹ì„ ì‚­ì œí•˜ì‹œê² ìŠµë‹ˆê¹Œ? Do you really want to delete the group "%1" for good? ì •ë§ ê·¸ë£¹ "%1"ì„(를) 삭제하시겠습니까? Current group 현재 그룹 Error 오류 Unable to calculate master key 마스터 키를 계산할 수 ì—†ìŒ EditEntryWidget Entry 항목 Advanced 고급 Icon ì•„ì´ì½˜ Auto-Type ìžë™ ìž…ë ¥ Properties ì†ì„± History 과거 ê¸°ë¡ Entry history 항목 과거 ê¸°ë¡ Add entry 항목 추가 Edit entry 항목 편집 Error 오류 Different passwords supplied. 다른 암호를 입력하였습니다. New attribute 새 ì†ì„± Select file íŒŒì¼ ì„ íƒ Unable to open file 파ì¼ì„ ì—´ 수 없습니다 Save attachment 첨부 항목 저장 Unable to save the attachment: 첨부 í•­ëª©ì„ ì €ìž¥í•  수 없습니다: Tomorrow ë‚´ì¼ %n week(s) %n주 %n month(s) %n개월 1 year 1ë…„ EditEntryWidgetAdvanced Additional attributes 추가 ì†ì„± Add 추가 Edit 편집 Remove ì‚­ì œ Attachments 첨부 Save 저장 Open 열기 EditEntryWidgetAutoType Enable Auto-Type for this entry ì´ í•­ëª© ìžë™ ìž…ë ¥ 사용 Inherit default Auto-Type sequence from the group ê·¸ë£¹ì˜ ê¸°ë³¸ ìžë™ ìž…ë ¥ 시퀀스 사용 Use custom Auto-Type sequence: ì‚¬ìš©ìž ì •ì˜ ìžë™ ìž…ë ¥ 시퀀스 사용: + + - - Window title: ì°½ 제목: Use default sequence 기본 시퀀스 사용 Set custom sequence: ì‚¬ìš©ìž ì •ì˜ ì‹œí€€ìŠ¤ 설정: EditEntryWidgetHistory Show ë³´ì´ê¸° Restore ë³µì› Delete ì‚­ì œ Delete all ëª¨ë‘ ì‚­ì œ EditEntryWidgetMain Title: 제목: Username: ì‚¬ìš©ìž ì´ë¦„: Password: 암호: Repeat: 암호 확ì¸: Gen. ìƒì„± URL: URL: Expires 만료 기간 Presets 사전 설정 Notes: 메모: EditGroupWidget Group 그룹 Icon ì•„ì´ì½˜ Properties ì†ì„± Add group 그룹 추가 Edit group 그룹 편집 Enable 활성화 Disable 비활성화 Inherit from parent group (%1) 부모 그룹ì—서 ìƒì†(%1) EditGroupWidgetMain Name ì´ë¦„ Notes 메모 Expires 만료 기간 Search 찾기 Auto-type ìžë™ ìž…ë ¥ Use default auto-type sequence of parent group 부모 ê·¸ë£¹ì˜ ê¸°ë³¸ ìžë™ ìž…ë ¥ 시퀀스 사용 Set default auto-type sequence 기본 ìžë™ ìž…ë ¥ 시퀀스 설정 EditWidgetIcons Use default icon 기본 ì•„ì´ì½˜ 사용 Use custom icon ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ 사용 Add custom icon ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ 추가 Delete custom icon ì‚¬ìš©ìž ì •ì˜ ì•„ì´ì½˜ ì‚­ì œ Images 그림 All files 모든 íŒŒì¼ Select Image 그림 ì„ íƒ Can't delete icon! ì•„ì´ì½˜ì„ 삭제할 수 없습니다! Can't delete icon. Still used by %n item(s). ì•„ì´ì½˜ì„ 삭제할 수 없습니다. 항목 %nê°œì—서 사용 중입니다. EditWidgetProperties Created: 만든 ë‚ ì§œ: Modified: 수정한 ë‚ ì§œ: Accessed: 접근한 ë‚ ì§œ: Uuid: UUID: EntryAttributesModel Name ì´ë¦„ EntryHistoryModel Last modified 마지막 수정 Title 제목 Username ì‚¬ìš©ìž ì´ë¦„ URL URL EntryModel Group 그룹 Title 제목 Username ì‚¬ìš©ìž ì´ë¦„ URL URL Group Recycle Bin 휴지통 KeePass1OpenWidget Import KeePass1 database KeePass1 ë°ì´í„°ë² ì´ìФ 가져오기 Error 오류 Unable to open the database. ë°ì´í„°ë² ì´ìŠ¤ë¥¼ ì—´ 수 없습니다. KeePass1Reader Unable to read keyfile. 키 파ì¼ì„ ì½ì„ 수 없습니다. Not a KeePass database. KeePass ë°ì´í„°ë² ì´ìŠ¤ê°€ 아닙니다. Unsupported encryption algorithm. ì§€ì›í•˜ì§€ 않는 암호화 알고리즘입니다. Unsupported KeePass database version. ì§€ì›í•˜ì§€ 않는 KeePass ë°ì´í„°ë² ì´ìФ 버전입니다. Root 루트 Unable to calculate master key 마스터 키를 계산할 수 ì—†ìŒ KeePass2Reader Not a KeePass database. KeePass ë°ì´í„°ë² ì´ìŠ¤ê°€ 아닙니다. Unsupported KeePass database version. ì§€ì›í•˜ì§€ 않는 KeePass ë°ì´í„°ë² ì´ìФ 버전입니다. Wrong key or database file is corrupt. 키가 잘못ë˜ì—ˆê±°ë‚˜ ë°ì´í„°ë² ì´ìŠ¤ê°€ ì†ìƒë˜ì—ˆìŠµë‹ˆë‹¤. Unable to calculate master key 마스터 키를 계산할 수 없습니다 The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. ì„ íƒí•œ 파ì¼ì€ KeePass 1 ë°ì´í„°ë² ì´ìФ(.kdb)입니다. ë°ì´í„°ë² ì´ìФ > 'KeePass 1 ë°ì´í„°ë² ì´ìФ 가져오기' í•­ëª©ì„ ì„ íƒí•´ì„œ 변환해야 합니다. ë³€í™˜ì€ í•œ 방향으로만 ì´ë£¨ì–´ì§€ë©°, 가져온 ë°ì´í„°ë² ì´ìŠ¤ëŠ” KeePassX 0.4 버전으로 ë” ì´ìƒ ì—´ 수 없습니다. Main Fatal error while testing the cryptographic functions. 암호화 함수를 시험하는 중 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤. KeePassX - Error KeePassX - 오류 MainWindow Database ë°ì´í„°ë² ì´ìФ Recent databases 최근 ë°ì´í„°ë² ì´ìФ Help ë„ì›€ë§ Entries 항목 Copy attribute to clipboard í´ë¦½ë³´ë“œì— ì†ì„± 복사 Groups 그룹 View 보기 Quit ë내기 About ì •ë³´ Open database ë°ì´í„°ë² ì´ìФ 열기 Save database ë°ì´í„°ë² ì´ìФ 저장 Close database ë°ì´í„°ë² ì´ìФ 닫기 New database 새 ë°ì´í„°ë² ì´ìФ Add new entry 새 항목 추가 View/Edit entry 항목 보기/편집 Delete entry 항목 ì‚­ì œ Add new group 새 그룹 추가 Edit group 그룹 편집 Delete group 그룹 ì‚­ì œ Save database as 다른 ì´ë¦„으로 ë°ì´í„°ë² ì´ìФ 저장 Change master key 마스터 키 변경 Database settings ë°ì´í„°ë² ì´ìФ 설정 Import KeePass 1 database KeePass 1 ë°ì´í„°ë² ì´ìФ 가져오기 Clone entry 항목 복제 Find 찾기 Copy username to clipboard í´ë¦½ë³´ë“œì— ì‚¬ìš©ìž ì´ë¦„ 복사 Copy password to clipboard í´ë¦½ë³´ë“œì— 암호 복사 Settings 설정 Perform Auto-Type ìžë™ ìž…ë ¥ 실행 Open URL URL 열기 Lock databases ë°ì´í„°ë² ì´ìФ 잠금 Title 제목 URL URL Notes 메모 Show toolbar ë„구 ëª¨ìŒ ë³´ì´ê¸° read-only ì½ê¸° ì „ìš© Toggle window ì°½ 전환 Tools ë„구 Copy username ì‚¬ìš©ìž ì´ë¦„ 복사 Copy password 암호 복사 Export to CSV file CSV 파ì¼ë¡œ 내보내기 Repair database ë°ì´í„°ë² ì´ìФ 복구 KeePass 2 Database KeePass 2 ë°ì´í„°ë² ì´ìФ All files 모든 íŒŒì¼ Save repaired database 복구한 ë°ì´í„°ë² ì´ìФ 저장 Error 오류 Writing the database failed. ë°ì´í„°ë² ì´ìŠ¤ì— ì“¸ 수 없습니다. PasswordGeneratorWidget Password: 암호: Length: 길ì´: Character Types ë¬¸ìž ì¢…ë¥˜ Upper Case Letters ëŒ€ë¬¸ìž Lower Case Letters ì†Œë¬¸ìž Numbers ìˆ«ìž Special Characters 특수 ë¬¸ìž Exclude look-alike characters 비슷하게 ìƒê¸´ ë¬¸ìž ì œì™¸ Ensure that the password contains characters from every group 모든 그룹ì—서 최소 1ê¸€ìž ì´ìƒ í¬í•¨ Accept 사용 QCommandLineParser Displays version information. 버전 정보를 표시합니다. Displays this help. ì´ ë„움ë§ì„ 표시합니다. Unknown option '%1'. 알 수 없는 옵션 '%1'. Unknown options: %1. 알 수 없는 옵션 '%1'. Missing value after '%1'. '%1' 다ìŒì— ê°’ì´ ì—†ìŠµë‹ˆë‹¤. Unexpected value after '%1'. '%1' 다ìŒì— 예ìƒí•˜ì§€ 못한 ê°’ì´ ì™”ìŠµë‹ˆë‹¤. [options] [옵션] Usage: %1 사용 방법: %1 Options: 옵션: Arguments: ì¸ìž: QSaveFile Existing file %1 is not writable 존재하는 íŒŒì¼ %1ì— ê¸°ë¡í•  수 ì—†ìŒ Writing canceled by application 프로그램ì—서 쓰기 작업 취소함 Partial write. Partition full? ì¼ë¶€ë¶„ë§Œ 기ë¡ë˜ì—ˆìŠµë‹ˆë‹¤. íŒŒí‹°ì…˜ì´ ê°€ë“ ì°¼ìŠµë‹ˆê¹Œ? QtIOCompressor Internal zlib error when compressing: ì••ì¶• 중 ë‚´ë¶€ zlib 오류 ë°œìƒ: Error writing to underlying device: ìž¥ì¹˜ì— ê¸°ë¡í•˜ëŠ” 중 오류 ë°œìƒ: Error opening underlying device: 장치를 여는 중 오류 ë°œìƒ: Error reading data from underlying device: 장치ì—서 ì½ëŠ” 중 오류 ë°œìƒ: Internal zlib error when decompressing: ì••ì¶• 푸는 중 ë‚´ë¶€ zlib 오류 ë°œìƒ: QtIOCompressor::open The gzip format not supported in this version of zlib. ì´ ë²„ì „ì˜ zlibì—서 gzip 형ì‹ì„ ì§€ì›í•˜ì§€ 않습니다. Internal zlib error: ë‚´ë¶€ zlib 오류: SearchWidget Find: 찾기: Case sensitive ëŒ€ì†Œë¬¸ìž êµ¬ë¶„ Current group 현재 그룹 Root group 루트 그룹 SettingsWidget Application Settings 프로그램 설정 General ì¼ë°˜ Security 보안 SettingsWidgetGeneral Remember last databases 마지막 ë°ì´í„°ë² ì´ìФ 기억 Open previous databases on startup 시작할 때 ì´ì „ ë°ì´í„°ë² ì´ìФ 열기 Automatically save on exit ë낼 때 ìžë™ 저장 Automatically save after every change í•­ëª©ì„ ë³€ê²½í•  때 ìžë™ 저장 Minimize when copying to clipboard í´ë¦½ë³´ë“œì— 복사할 때 최소화 Use group icon on entry creation í•­ëª©ì„ ë§Œë“¤ 때 그룹 ì•„ì´ì½˜ 사용 Global Auto-Type shortcut ì „ì—­ ìžë™ ìž…ë ¥ 단축키 Use entry title to match windows for global auto-type ì „ì—­ ìžë™ ìž…ë ¥ 시 항목 제목과 ì¼ì¹˜í•˜ëŠ” ì°½ 찾기 Language 언어 Show a system tray icon 시스템 íŠ¸ë ˆì´ ì•„ì´ì½˜ 표시 Hide window to system tray when minimized 시스템 트레ì´ë¡œ 최소화 Remember last key files 마지막 키 íŒŒì¼ ê¸°ì–µ SettingsWidgetSecurity Clear clipboard after ë‹¤ìŒ ì‹œê°„ ì´í›„ í´ë¦½ë³´ë“œ 비우기 sec ì´ˆ Lock databases after inactivity of ë‹¤ìŒ ì‹œê°„ ë™ì•ˆ 활ë™ì´ ì—†ì„ ë•Œ ë°ì´í„°ë² ì´ìФ 잠금 Show passwords in cleartext by default 기본값으로 암호를 í‰ë¬¸ìœ¼ë¡œ 표시 Always ask before performing auto-type ìžë™ìœ¼ë¡œ 입력하기 ì „ì— í•­ìƒ ë¬»ê¸° UnlockDatabaseWidget Unlock database ë°ì´í„°ë² ì´ìФ 잠금 í•´ì œ WelcomeWidget Welcome! 환ì˜í•©ë‹ˆë‹¤! main KeePassX - cross-platform password manager KeePassX - í¬ë¡œìФ í”Œëž«í¼ ì•”í˜¸ ê´€ë¦¬ìž filename of the password database to open (*.kdbx) ì—´ 암호 ë°ì´í„°ë² ì´ìФ íŒŒì¼ ì´ë¦„ (*.kdbx) path to a custom config file ì‚¬ìš©ìž ì •ì˜ ì„¤ì • íŒŒì¼ ê²½ë¡œ key file of the database ë°ì´í„°ë² ì´ìФ 키 íŒŒì¼ keepassx-2.0.3/share/translations/keepassx_lt.ts000066400000000000000000001270021276304217300220630ustar00rootroot00000000000000 AboutDialog About KeePassX Apie KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX yra platinama GNU Bendrosios VieÅ¡osios Licencijos (GPL) versijos 2 arba (jÅ«sų pasirinkimu) versijos 3 sÄ…lygomis. Revision Poversijis Using: Naudojama: AutoType Auto-Type - KeePassX Automatinis rinkimas - KeePassX Couldn't find an entry that matches the window title: Nepavyko rasti įraÅ¡o, kuris atitiktų lango antraÅ¡tÄ™: AutoTypeAssociationsModel Window Langas Sequence Seka Default sequence Numatytoji seka AutoTypeSelectDialog Auto-Type - KeePassX Automatinis rinkimas - KeePassX Select entry to Auto-Type: Pasirinkite įrašą automatiniam rinkimui: ChangeMasterKeyWidget Password Slaptažodis Enter password: Ä®raÅ¡ykite slaptažodį: Repeat password: Pakartokite slaptažodį: Key file Rakto failas Browse NarÅ¡yti Create Kurti Key files Rakto failai All files Visi failai Create Key File... Sukurti rakto failÄ…... Error Klaida Unable to create Key File : Nepavyko sukurti rakto failo : Select a key file Pasirinkite rakto failÄ… Question Klausimas Do you really want to use an empty string as password? Ar tikrai norite naudoti tuÅ¡ÄiÄ… eilutÄ™ kaip slaptažodį? Different passwords supplied. Pateikti skirtingi slaptažodžiai. Failed to set key file Nepavyko nustatyti rakto failo Failed to set %1 as the Key file: %2 Nepavyko nustatyti %1 kaip rakto failÄ…: %2 DatabaseOpenWidget Enter master key Ä®veskite pagrindinį raktÄ… Key File: Rakto failas: Password: Slaptažodis: Browse NarÅ¡yti Error Klaida Unable to open the database. Nepavyko atverti duomenų bazÄ—s. Can't open key file Nepavyksta atverti rakto failo All files Visi failai Key files Rakto failai Select key file Pasirinkite rakto failÄ… DatabaseRepairWidget Repair database Taisyti duomenų bazÄ™ Error Klaida Can't open key file Nepavyksta atverti rakto failo Database opened fine. Nothing to do. Duomenų bazÄ— atsivÄ—rÄ— tvarkingai. NÄ—ra kÄ… atlikti. Unable to open the database. Nepavyko atverti duomenų bazÄ—s. Success Pavyko The database has been successfully repaired You can now save it. Duomenų bazÄ— buvo sÄ—kmingai pataisyta Dabar galite jÄ… įraÅ¡yti. Unable to repair the database. Duomenų bazÄ—s pataisyti nepavyko. DatabaseSettingsWidget Database name: Duomenų bazÄ—s pavadinimas: Database description: Duomenų bazÄ—s apraÅ¡as: Transform rounds: Pasikeitimo ciklų: Default username: Numatytasis naudotojo vardas: Use recycle bin: Naudoti Å¡iukÅ¡linÄ™: MiB MiB Benchmark NaÅ¡umo testas Max. history items: Daugiausia istorijos elementų: Max. history size: Didžiausias istorijos dydis: DatabaseTabWidget Root Å aknis KeePass 2 Database KeePass 2 duomenų bazÄ— All files Visi failai Open database Atverti duomenų bazÄ™ Warning Ä®spÄ—jimas File not found! Failas nerastas! Open KeePass 1 database Atverkite KeePass 1 duomenų bazÄ™ KeePass 1 database KeePass 1 duomenų bazÄ— All files (*) Visi failai (*) Close? Užverti? Save changes? Ä®raÅ¡yti pakeitimus? "%1" was modified. Save changes? "%1" buvo pakeista. Ä®raÅ¡yti pakeitimus? Error Klaida Writing the database failed. Duomenų bazÄ—s raÅ¡ymas nepavyko. Save database as Ä®raÅ¡yti duomenų bazÄ™ kaip New database Nauja duomenų bazÄ— locked užrakinta The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Duomenų bazÄ—, kuriÄ… bandote atverti, yra užrakinta kito KeePassX egzemplioriaus. Ar vis tiek norite jÄ… atverti? Kitu atveju duomenų bazÄ— bus atverta tik skaitymui. Lock database Užrakinti duomenų bazÄ™ Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Nepavyksta užrakinti duomenų bazÄ—s, kadangi Å¡iuo metu jÄ… redaguojate. Spauskite atÅ¡aukti, kad užbaigtumÄ—te savo pakeitimus arba juos atmestumÄ—te. This database has never been saved. You can save the database or stop locking it. Å i duomenų bazÄ— niekada nebuvo įraÅ¡yta. Galite duomenų bazÄ™ įraÅ¡yti arba atsisakyti jÄ… užrakinti. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Å i duomenų bazÄ— buvo modifikuota. Ar prieÅ¡ užrakinant, norite įraÅ¡yti duomenų bazÄ™? Kitu atveju jÅ«sų pakeitimai bus prarasti. "%1" is in edit mode. Discard changes and close anyway? "%1" yra redagavimo veiksenoje. Vis tiek atmesti pakeitimus ir užverti? Export database to CSV file Eksportuoti duomenų bazÄ™ į CSV failÄ… CSV file CSV failas Writing the CSV file failed. CSV failo įraÅ¡ymas nepavyko. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Duomenų bazÄ—, kuriÄ… bandote įraÅ¡yti yra užrakinta kito KeePassX programos egzemplioriaus. Ar vis tiek norite jÄ… įraÅ¡yti? DatabaseWidget Change master key Pakeisti pagrindinį raktÄ… Delete entry? IÅ¡trinti įrašą? Do you really want to delete the entry "%1" for good? Ar tikrai norite iÅ¡trinti įrašą "%1"? Delete entries? IÅ¡trinti įraÅ¡us? Do you really want to delete %1 entries for good? Ar tikrai norite iÅ¡trinti %1 įrašų? Move entries to recycle bin? Perkelti įraÅ¡us į Å¡iukÅ¡linÄ™? Do you really want to move %n entry(s) to the recycle bin? Ar tikrai norite perkelti %n įrašą į Å¡iukÅ¡linÄ™?Ar tikrai norite perkelti %n įraÅ¡us į Å¡iukÅ¡linÄ™?Ar tikrai norite perkelti %n įrašų į Å¡iukÅ¡linÄ™? Delete group? IÅ¡trinti grupÄ™? Do you really want to delete the group "%1" for good? Ar tikrai norite iÅ¡trinti grupÄ™ "%1"? Current group Esama grupÄ— Error Klaida Unable to calculate master key Nepavyko apskaiÄiuoti pagrindinio rakto EditEntryWidget Entry Ä®raÅ¡as Advanced IÅ¡plÄ—stiniai Icon Piktograma Auto-Type Automatinis rinkimas Properties SavybÄ—s History Istorija Entry history Ä®raÅ¡o istorija Add entry PridÄ—ti įrašą Edit entry Keisti įrašą Error Klaida Different passwords supplied. Pateikti skirtingi slaptažodžiai. New attribute Naujas požymis Select file Pasirinkite failÄ… Unable to open file Nepavyko atverti failo Save attachment Ä®raÅ¡yti priedÄ… Unable to save the attachment: Nepavyko įraÅ¡yti priedo: Tomorrow Rytoj %n week(s) %n savaitÄ—%n savaitÄ—s%n savaiÄių %n month(s) %n mÄ—nesis%n mÄ—nesiai%n mÄ—nesių 1 year 1 metai EditEntryWidgetAdvanced Additional attributes Papildomi požymiai Add PridÄ—ti Edit Keisti Remove Å alinti Attachments Priedai Save Ä®raÅ¡yti Open Atverti EditEntryWidgetAutoType Enable Auto-Type for this entry Ä®jungti Å¡iam įraÅ¡ui automatinį rinkimÄ… Inherit default Auto-Type sequence from the group PaveldÄ—ti numatytÄ…jÄ… automatinio rinkimo sekÄ… iÅ¡ grupÄ—s Use custom Auto-Type sequence: Naudoti tinkintÄ… automatinio rinkimo seka: + + - - Window title: Lango antraÅ¡tÄ—: Use default sequence Naudoti numatytÄ…jÄ… sekÄ… Set custom sequence: Nustatyti tinkintÄ… sekÄ…: EditEntryWidgetHistory Show Rodyti Restore Atkurti Delete IÅ¡trinti Delete all IÅ¡trinti visus EditEntryWidgetMain Title: AntraÅ¡tÄ—: Username: Naudotojo vardas: Password: Slaptažodis: Repeat: Pakartokite: Gen. Kurti URL: URL: Expires Baigia galioti Presets Parinktys Notes: Pastabos: EditGroupWidget Group GrupÄ— Icon Piktograma Properties SavybÄ—s Add group PridÄ—ti grupÄ™ Edit group Keisti grupÄ™ Enable Ä®jungti Disable IÅ¡jungti Inherit from parent group (%1) PaveldÄ—ti iÅ¡ pirminÄ—s grupÄ—s (%1) EditGroupWidgetMain Name Pavadinimas Notes Pastabos Expires Baigia galioti Search PaieÅ¡ka Auto-type Automatinis rinkimas Use default auto-type sequence of parent group Naudoti numatytÄ…jÄ… pirminÄ—s grupÄ—s automatinio rinkimo sekÄ… Set default auto-type sequence Nustatyti numatytÄ…jÄ… automatinio rinkimo sekÄ… EditWidgetIcons Use default icon Naudoti numatytÄ…jÄ… piktogramÄ… Use custom icon Naudoti tinkintÄ… piktogramÄ… Add custom icon PridÄ—ti tinkintÄ… piktogramÄ… Delete custom icon IÅ¡trinti tinkintÄ… piktogramÄ… Images Paveikslai All files Visi failai Select Image Pasirinkite paveikslÄ… Can't delete icon! Nepavyksta iÅ¡trinti piktogramos! Can't delete icon. Still used by %n item(s). Nepavyksta iÅ¡trinti piktogramos. Vis dar naudojama %n elemento.Nepavyksta iÅ¡trinti piktogramos. Vis dar naudojama %n elementų.Nepavyksta iÅ¡trinti piktogramos. Vis dar naudojama %n elementų. EditWidgetProperties Created: Sukurta: Modified: Keista: Accessed: Prieiga: Uuid: Uuid: EntryAttributesModel Name Pavadinimas EntryHistoryModel Last modified Paskutinis keitimas Title AntraÅ¡tÄ— Username Naudotojo vardas URL URL EntryModel Group GrupÄ— Title AntraÅ¡tÄ— Username Naudotojo vardas URL URL Group Recycle Bin Å iukÅ¡linÄ— KeePass1OpenWidget Import KeePass1 database Importuoti KeePass1 duomenų bazÄ™ Error Klaida Unable to open the database. Nepavyko atverti duomenų bazÄ—s. KeePass1Reader Unable to read keyfile. Nepavyko perskaityti rakto failo. Not a KeePass database. Ne KeePass duomenų bazÄ—. Unsupported encryption algorithm. Nepalaikomas Å¡ifravimo algoritmas. Unsupported KeePass database version. Nepalaikoma KeePass duomenų bazÄ—s versija. Root Å aknis Unable to calculate master key Nepavyko apskaiÄiuoti pagrindinio rakto KeePass2Reader Not a KeePass database. Ne KeePass duomenų bazÄ—. Unsupported KeePass database version. Nepalaikoma KeePass duomenų bazÄ—s versija. Wrong key or database file is corrupt. Neteisingas raktas arba duomenų bazÄ—s failas yra pažeistas. Unable to calculate master key Nepavyko apskaiÄiuoti pagrindinio rakto The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Pasirinktas failas yra sena KeePass 1 duomenų bazÄ— (.kdb). JÅ«s galite jÄ… importuoti, nuspausdami Duomenų bazÄ— > "Importuoti KeePass 1 duomenų bazÄ™". Tai yra vienakryptis perkÄ—limas. JÅ«s negalÄ—site atverti importuotos duomenų bazÄ—s, naudodami senÄ…jÄ… KeePassX 0.4 versija. Main Fatal error while testing the cryptographic functions. Lemtingoji klaida, testuojant Å¡ifravimo funkcijas. KeePassX - Error KeePassX - Klaida MainWindow Database Duomenų bazÄ— Recent databases Paskiausios duomenų bazÄ—s Help Pagalba Entries Ä®raÅ¡ai Copy attribute to clipboard Kopijuoti požymį į iÅ¡karpinÄ™ Groups GrupÄ—s View Rodinys Quit Baigti About Apie Open database Atverti duomenų bazÄ™ Save database Ä®raÅ¡yti duomenų bazÄ™ Close database Užverti duomenų bazÄ™ New database Nauja duomenų bazÄ— Add new entry PridÄ—ti naujÄ… įrašą View/Edit entry ŽiÅ«rÄ—ti/Keisti įrašą Delete entry IÅ¡trinti įrašą Add new group PridÄ—ti naujÄ… grupÄ™ Edit group Keisti grupÄ™ Delete group IÅ¡trinti grupÄ™ Save database as Ä®raÅ¡yti duomenų bazÄ™ kaip Change master key Pakeisti pagrindinį raktÄ… Database settings Duomenų bazÄ—s nustatymai Import KeePass 1 database Importuoti KeePass 1 duomenų bazÄ™ Clone entry Dublikuoti įrašą Find Rasti Copy username to clipboard Kopijuoti naudotojo vardÄ… į iÅ¡karpinÄ™ Copy password to clipboard Kopijuoti slaptažodį į iÅ¡karpinÄ™ Settings Nustatymai Perform Auto-Type Atlikti automatinį rinkimÄ… Open URL Atverti URL Lock databases Užrakinti duomenų bazes Title AntraÅ¡tÄ— URL URL Notes Pastabos Show toolbar Rodyti įrankių juostÄ… read-only tik skaitymui Toggle window Perjungti langÄ… Tools Ä®rankiai Copy username Kopijuoti naudotojo vardÄ… Copy password Kopijuoti slaptažodį Export to CSV file Eksportuoti į CSV failÄ… Repair database Taisyti duomenų bazÄ™ KeePass 2 Database KeePass 2 duomenų bazÄ— All files Visi failai Save repaired database Ä®raÅ¡yti pataisytÄ… duomenų bazÄ™ Error Klaida Writing the database failed. Duomenų bazÄ—s raÅ¡ymas nepavyko. PasswordGeneratorWidget Password: Slaptažodis: Length: Ilgis: Character Types Simbolių tipai Upper Case Letters VirÅ¡utinio registro raidÄ—s Lower Case Letters Apatinio registro raidÄ—s Numbers SkaiÄiai Special Characters SpecialÅ«s simboliai Exclude look-alike characters PaÅ¡alinti panaÅ¡iai atrodanÄius simbolius Ensure that the password contains characters from every group Užtikrinti, kad slaptažodyje yra simboliai iÅ¡ kiekvienos grupÄ—s Accept Priimti QCommandLineParser Displays version information. Rodo versijos informacijÄ…. Displays this help. Rodo Å¡iÄ… pagalbÄ…. Unknown option '%1'. Nežinoma parinktis "%1". Unknown options: %1. Nežinomos parinktys: %1. Missing value after '%1'. TrÅ«ksta reikÅ¡mÄ—s po "%1". Unexpected value after '%1'. NetikÄ—ta reikÅ¡mÄ— po "%1". [options] [parinktys] Usage: %1 Naudojimas: %1 Options: Parinktys: Arguments: Argumentai: QSaveFile Existing file %1 is not writable Esamas failas %1 nÄ—ra įraÅ¡omas Writing canceled by application Programa atÅ¡aukÄ— įraÅ¡ymÄ… Partial write. Partition full? Dalinis įraÅ¡ymas. Pilnas skaidinys? QtIOCompressor Internal zlib error when compressing: VidinÄ— zlib klaida, glaudinant: Error writing to underlying device: Klaida, įraÅ¡ant į bazinį įrenginį: Error opening underlying device: Klaida, atveriant bazinį įrenginį: Error reading data from underlying device: Klaida, skaitant iÅ¡ bazinio įrenginio: Internal zlib error when decompressing: VidinÄ— zlib klaida, iÅ¡skleidžiant: QtIOCompressor::open The gzip format not supported in this version of zlib. Å ioje zlib versijoje gzip formatas yra nepalaikomas. Internal zlib error: VidinÄ— zlib klaida: SearchWidget Find: Rasti: Case sensitive Skiriant raidžių registrÄ… Current group Esama grupÄ— Root group Å akninÄ— grupÄ— SettingsWidget Application Settings Programos nustatymai General Bendra Security Saugumas SettingsWidgetGeneral Remember last databases Prisiminti paskutines duomenų bazes Open previous databases on startup Paleidžiant programÄ…, atverti ankstesnes duomenų bazes Automatically save on exit IÅ¡einant, automatiÅ¡kai įraÅ¡yti Automatically save after every change AutomatiÅ¡kai įraÅ¡yti po kiekvieno pakeitimo Minimize when copying to clipboard Kopijuojant į iÅ¡karpinÄ™, suskleisti langÄ… Use group icon on entry creation Kuriant įraÅ¡us, naudoti grupÄ—s piktogramÄ… Global Auto-Type shortcut Visuotinis automatinio rinkimo spartusis klaviÅ¡as Use entry title to match windows for global auto-type Naudoti įraÅ¡o antraÅ¡tÄ™, norint sutapatinti langus visuotiniam automatiniam rinkimui Language Kalba Show a system tray icon Rodyti sistemos dÄ—klo piktogramÄ… Hide window to system tray when minimized Suskleidus langÄ…, slÄ—pti jį į sistemos dÄ—klÄ… Remember last key files Prisiminti paskutinius rakto failus SettingsWidgetSecurity Clear clipboard after IÅ¡valyti iÅ¡karpinÄ™ po sec sek. Lock databases after inactivity of Užrakinti duomenų bazes, kai kompiuteris neaktyvus Show passwords in cleartext by default Pagal numatymÄ…, rodyti slaptažodžius atviruoju tekstu Always ask before performing auto-type Visuomet klausti prieÅ¡ atliekant automatinį rinkimÄ… UnlockDatabaseWidget Unlock database Atrakinti duomenų bazÄ™ WelcomeWidget Welcome! Sveiki atvykÄ™! main KeePassX - cross-platform password manager KeePassX - daugiaplatformÄ— slaptažodžių tvarkytuvÄ— filename of the password database to open (*.kdbx) norimos atverti slaptažodžių duomenų bazÄ—s failo pavadinimas (*.kdbx) path to a custom config file kelias į tinkintÄ… konfigÅ«racijos failÄ… key file of the database duomenų bazÄ—s rakto failas keepassx-2.0.3/share/translations/keepassx_nl_NL.ts000066400000000000000000001252211276304217300224470ustar00rootroot00000000000000 AboutDialog About KeePassX Over KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX wordt verspreid onder de bepalingen van de GNU General Public License (GPL) versie 2 of (als u wenst) versie 3. Revision Revisie Using: Maakt gebruik van: AutoType Auto-Type - KeePassX Auto-typen - KeePassX Couldn't find an entry that matches the window title: Kon geen element vinden dat overeenkomt met de venstertitel: AutoTypeAssociationsModel Window Venster Sequence Volgorde Default sequence Standaardvolgorde AutoTypeSelectDialog Auto-Type - KeePassX Auto-typen - KeePassX Select entry to Auto-Type: Kies element om automatisch te typen: ChangeMasterKeyWidget Password Wachtwoord Enter password: Geef wachtwoord: Repeat password: Herhaal wachtwoord: Key file Sleutelbestand Browse Bladeren Create Aanmaken Key files Sleutelbestanden All files Alle bestanden Create Key File... Genereer sleutelbestand... Error Fout Unable to create Key File : Niet mogelijk om sleutelbestand aan te maken: Select a key file Kies een sleutelbestand Question Vraag Do you really want to use an empty string as password? Weet u zeker dat u een leeg veld als wachtwoord wilt gebruiken? Different passwords supplied. Verschillende wachtwoorden opgegeven. Failed to set key file Niet gelukt het sleutelbestand in te stellen Failed to set %1 as the Key file: %2 Niet gelukt %1 als sleutelbestand in te stellen: %2 DatabaseOpenWidget Enter master key Geef hoofdsleutel Key File: Sleutelbestand: Password: Wachtwoord: Browse Bladeren Error Fout Unable to open the database. Niet mogelijk om de database te openen. Can't open key file Niet mogelijk om het sleutelbestand te openen All files Alle bestanden Key files Sleutelbestanden Select key file Kies sleutelbestand DatabaseRepairWidget Repair database Database repareren Error Fout Can't open key file Niet mogelijk om het sleutelbestand te openen Database opened fine. Nothing to do. Database werd zonder problemen geopend. Niets te doen. Unable to open the database. Niet mogelijk om de database te openen. Success Gelukt The database has been successfully repaired You can now save it. De database is met succes gerepareerd U kunt deze nu opslaan. Unable to repair the database. Niet mogelijk om de database te repareren. DatabaseSettingsWidget Database name: Naam van de database: Database description: Beschrijving van de database: Transform rounds: Transformatierondes: Default username: Standaard gebruikersnaam: Use recycle bin: Gebruik prullenbak: MiB MiB Benchmark Test Max. history items: Max. items in geschiedenis: Max. history size: Max. grootte geschiedenis: DatabaseTabWidget Root Alles KeePass 2 Database KeePass 2 Database All files Alle bestanden Open database Open database Warning Waarschuwing File not found! Bestand niet gevonden! Open KeePass 1 database Open KeePass 1 database KeePass 1 database KeePass 1 database All files (*) Alle bestanden (*) Close? Sluiten? Save changes? Wijzigingen opslaan? "%1" was modified. Save changes? "%1" is gewijzigd. Opslaan? Error Fout Writing the database failed. Opslaan van de database is mislukt. Save database as Database opslaan als New database Nieuwe database locked vergrendeld The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. De database die u probeert te openen is vergrendeld door een andere instantie van KeePassX. Wilt u toch doorgaan met openen? U kunt de database ook alleen-lezen openen. Lock database Database vergrendelen Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Kan de database niet vergrendelen omdat u deze momenteel aan het bewerken bent. Druk op annuleren om uw wijzigingen aan te passen of gooi de wijzigingen weg. This database has never been saved. You can save the database or stop locking it. Deze database is nog niet opgeslagen. U kunt de database opslaan of het vergrendelen annuleren. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Deze database is gewijzigd. Wilt u de database opslaan voordat u deze vergrendelt? Zo nee, dan gaan de wijzigingen verloren. "%1" is in edit mode. Discard changes and close anyway? "%1" is gewijzigd. Wijzigingen ongedaan maken en doorgaan met sluiten? Export database to CSV file Database exporteren naar CSV-bestand CSV file CSV-bestand Writing the CSV file failed. Schrijven van het CSV-bestand mislukt. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? De database die u op probeert te slaan is vergrendeld door een andere instantie van KeePassX. Wilt u toch doorgaan met opslaan? DatabaseWidget Change master key Wijzig hoofdsleutel Delete entry? Element verwijderen? Do you really want to delete the entry "%1" for good? Weet u zeker dat u het element "%1" wilt verwijderen? Delete entries? Elementen wissen? Do you really want to delete %1 entries for good? Weet u zeker dat u %1 elementen wilt wissen? Move entries to recycle bin? Elementen naar de prullenbak verplaatsen? Do you really want to move %n entry(s) to the recycle bin? Weet u zeker dat u %n element naar de prullenbak wilt verplaatsen?Weet u zeker dat u %n elementen naar de prullenbak wilt verplaatsen? Delete group? Groep verwijderen? Do you really want to delete the group "%1" for good? Weet u zeker dat u de groep "%1" wilt verwijderen? Current group Huidige groep Error Fout Unable to calculate master key Niet mogelijk om hoofdsleutel te berekenen EditEntryWidget Entry Element Advanced Geavanceerd Icon Icoon Auto-Type Auto-typen - KeePassX Properties Eigenschappen History Geschiedenis Entry history Geschiedenis van element Add entry Element toevoegen Edit entry Element wijzigen Error Fout Different passwords supplied. Verschillende wachtwoorden opgegeven. New attribute Nieuwe eigenschap Select file Kies bestand Unable to open file Niet mogelijk om bestand te openen Save attachment Bijlage opslaan Unable to save the attachment: Niet mogelijk om de bijlage op te slaan: Tomorrow Morgen %n week(s) %n week%n weken %n month(s) %n maand%n maanden 1 year 1 jaar EditEntryWidgetAdvanced Additional attributes Extra eigenschappen Add Toevoegen Edit Wijzigen Remove Verwijderen Attachments Bijlagen Save Opslaan Open Open EditEntryWidgetAutoType Enable Auto-Type for this entry Auto-typen inschakelen voor dit element Inherit default Auto-Type sequence from the group Erf standaard auto-typevolgorde van de groep Use custom Auto-Type sequence: Gebruik aangepaste auto-typevolgorde: + + - - Window title: Venstertitel: Use default sequence Gebruik standaardvolgorde Set custom sequence: Aangepaste volgorde: EditEntryWidgetHistory Show Tonen Restore Herstellen Delete Verwijderen Delete all Alles verwijderen EditEntryWidgetMain Title: Titel: Username: Gebruikersnaam: Password: Wachtwoord: Repeat: Herhalen: Gen. Gen. URL: URL: Expires Verloopt Presets Ingebouwd Notes: Opmerkingen: EditGroupWidget Group Groep Icon Icoon Properties Eigenschappen Add group Groep toevoegen Edit group Groep wijzigen Enable Inschakelen Disable Uitschakelen Inherit from parent group (%1) Erf van bovenliggende groep (%1) EditGroupWidgetMain Name Naam Notes Opmerkingen Expires Verloopt Search Zoeken Auto-type Auto-typen Use default auto-type sequence of parent group Gebruik standaard auto-typevolgorde van bovenliggende groep Set default auto-type sequence Stel standaard auto-typevolgorde in EditWidgetIcons Use default icon Gebruik standaardicoon Use custom icon Gebruik aangepast icoon Add custom icon Voeg icoon toe Delete custom icon Verwijder icoon Images Afbeeldingen All files Alle bestanden Select Image Kies afbeelding Can't delete icon! Kan icoon niet verwijderen! Can't delete icon. Still used by %n item(s). Kan icoon niet verwijderen. Het wordt nog gebruikt door %n element.Kan icoon niet verwijderen. Het wordt nog gebruikt door %n elementen. EditWidgetProperties Created: Aangemaakt: Modified: Gewijzigd: Accessed: Gelezen: Uuid: Uuid: EntryAttributesModel Name Naam EntryHistoryModel Last modified Laatst gewijzigd Title Titel Username Gebruikersnaam URL URL EntryModel Group Groep Title Titel Username Gebruikersnaam URL URL Group Recycle Bin Prullenbak KeePass1OpenWidget Import KeePass1 database Importeer Keepass 1-database Error Fout Unable to open the database. Niet mogelijk om de database te openen. KeePass1Reader Unable to read keyfile. Niet mogelijk om sleutelbestand te lezen Not a KeePass database. Geen Keepass-database Unsupported encryption algorithm. Niet-ondersteund encryptie-algoritme Unsupported KeePass database version. Niet-ondersteunde versie van Keepass-database Root Alles Unable to calculate master key Niet mogelijk om hoofdsleutel te berekenen KeePass2Reader Not a KeePass database. Geen Keepass-database. Unsupported KeePass database version. Niet-ondersteunde versie van Keepass-database. Wrong key or database file is corrupt. Verkeerde sleutel of corrupte database. Unable to calculate master key Niet mogelijk om hoofdsleutel te berekenen The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Het gekozen bestand is een oude KeePass 1 database (.kdb). U kunt het importeren door te klikken op Database > 'KeePass 1 database importeren'. Deze actie is niet omkeerbaar. U kunt de geimporteerde database niet meer openen met KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Fatale fout bij het testen van de cryptografische functies. KeePassX - Error KeePassX - Fout MainWindow Database Database Recent databases Recente databases Help Help Entries Elementen Copy attribute to clipboard Kopieer eigenschap naar klembord Groups Groepen View Beeld Quit Afsluiten About Over Open database Open database Save database Sla database op Close database Sluit database New database Nieuwe database Add new entry Voeg element toe View/Edit entry Bekijk/bewerk element Delete entry Verwijder element Add new group Voeg groep toe Edit group Bewerk groep Delete group Verwijder groep Save database as Database opslaan als Change master key Hoofdsleutel wijzigen Database settings Database-instellingen Import KeePass 1 database Importeer Keepass 1-database Clone entry Element klonen Find Vind Copy username to clipboard Kopieer gebruikersnaam naar klembord Copy password to clipboard Kopieer wachtwoord naar klembord Settings Instellingen Perform Auto-Type Voer auto-typen uit Open URL Open URL Lock databases Vergrendel databases Title Titel URL URL Notes Opmerkingen Show toolbar Werkbalk weergeven read-only alleen-lezen Toggle window Wissel venster Tools Hulpmiddelen Copy username Gebruikersnaam kopieren Copy password Wachtwoord kopiëren Export to CSV file Naar CSV-bestand exporteren Repair database Database repareren KeePass 2 Database KeePass 2 Database All files Alle bestanden Save repaired database Gerepareerde database opslaan Error Fout Writing the database failed. Opslaan van de database is mislukt. PasswordGeneratorWidget Password: Wachtwoord: Length: Lengte: Character Types Tekens Upper Case Letters Hoofdletters Lower Case Letters Kleine letters Numbers Cijfers Special Characters Speciale tekens Exclude look-alike characters Geen op elkaar lijkende tekens Ensure that the password contains characters from every group Zorg dat het wachtwoord tekens uit iedere groep bevat Accept Accepteren QCommandLineParser Displays version information. Toont versie-informatie. Displays this help. Toont deze helptekst. Unknown option '%1'. Onbekende optie '%1'. Unknown options: %1. Onbekende opties: %1. Missing value after '%1'. Ontbrekende waarde na '%1'. Unexpected value after '%1'. Onverwachte waarde na '%1'. [options] [opties] Usage: %1 Gebruik: %1 Options: Opties: Arguments: Argumenten: QSaveFile Existing file %1 is not writable Bestaand bestand %1 is niet schrijfbaar Writing canceled by application Schrijven afgebroken door programma Partial write. Partition full? Slechts deels geschreven. Is de schijf vol? QtIOCompressor Internal zlib error when compressing: Interne fout in zlib bij inpakken: Error writing to underlying device: Fout bij schrijven naar onderliggend apparaat: Error opening underlying device: Fout bij openen van onderliggend apparaat: Error reading data from underlying device: Fout bij lezen van gegevens van onderliggend apparaat: Internal zlib error when decompressing: Interne fout in zlib bij uitpakken: QtIOCompressor::open The gzip format not supported in this version of zlib. Gzip wordt niet ondersteund in deze versie van zlib. Internal zlib error: Interne fout in zlib: SearchWidget Find: Vind: Case sensitive Hoofdlettergevoelig Current group Huidige groep Root group Hoofdgroep SettingsWidget Application Settings Programma-instellingen General Algemeen Security Beveiliging SettingsWidgetGeneral Remember last databases Onthoud laatste databases Open previous databases on startup Open vorige databases bij starten Automatically save on exit Automatisch opslaan bij afsluiten Automatically save after every change Automatisch opslaan na iedere wijziging Minimize when copying to clipboard Minimaliseer bij kopiëren naar klembord Use group icon on entry creation Gebruik icoon van de groep voor nieuwe elementen Global Auto-Type shortcut Globale sneltoets voor auto-typen Use entry title to match windows for global auto-type Gebruik naam van element als vensternaam voor auto-typen Language Taal Show a system tray icon Toon een icoon in de systray Hide window to system tray when minimized Bij minimaliseren enkel icoon in systray tonen Remember last key files Onthoud laatste sleutelbestanden SettingsWidgetSecurity Clear clipboard after Leeg klembord na sec sec Lock databases after inactivity of Vergrendel databases na inactiviteit van Show passwords in cleartext by default Laat wachtwoorden standaard zien Always ask before performing auto-type Altijd vragen alvorens auto-type uit te voeren UnlockDatabaseWidget Unlock database Database ontgrendelen WelcomeWidget Welcome! Welkom! main KeePassX - cross-platform password manager KeepassX - multi-platform wachtwoordbeheerder filename of the password database to open (*.kdbx) bestandsnaam van de te openen wachtwoorddatabase (*.kdbx) path to a custom config file pad naar een configuratiebestand key file of the database sleutelbestand van de database keepassx-2.0.3/share/translations/keepassx_pl.ts000066400000000000000000001247131276304217300220650ustar00rootroot00000000000000 AboutDialog About KeePassX O KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. Revision Rewizja Using: Używanie: AutoType Auto-Type - KeePassX Auto-uzupeÅ‚nianie - KeePassX Couldn't find an entry that matches the window title: Nie mogÄ™ znaleźć wpisu, który by pasowaÅ‚ do tytuÅ‚u okna: AutoTypeAssociationsModel Window Okno Sequence Swkwencja Default sequence DomyÅ›lna sekwencja AutoTypeSelectDialog Auto-Type - KeePassX Auto-uzupeÅ‚nianie - KeePassX Select entry to Auto-Type: Wybierz wpis do auto-uzupeÅ‚niania: ChangeMasterKeyWidget Password HasÅ‚o Enter password: Wprowadź hasÅ‚o: Repeat password: Wprowadź ponownie hasÅ‚o: Key file Plik klucza Browse PrzeglÄ…daj Create Stwórz Key files Pliki kluczy All files Wszystkie pliki Create Key File... Utwórz plik klucza Error Błąd Unable to create Key File : Nie można utworzyć pliku klucza : Select a key file Wybierz plik z kluczem Question Pytanie Do you really want to use an empty string as password? Czy naprawdÄ™ chcesz użyć pusty ciÄ…g znaków jako hasÅ‚o ? Different passwords supplied. Podano różne hasÅ‚a. Failed to set key file Błąd w ustawianiu pliku z kluczem Failed to set %1 as the Key file: %2 Błąd w ustawieniu %1 jako plik klucza: %2 DatabaseOpenWidget Enter master key Wprowadź klucz główny Key File: Plik klucza: Password: HasÅ‚o: Browse PrzeglÄ…daj Error Błąd Unable to open the database. Nie można otworzyć bazy kluczy. Can't open key file Nie mogÄ™ otworzyć pliku z kluczem All files Wszystkie pliki Key files Pliki kluczy Select key file Wybierz plik z kluczem DatabaseRepairWidget Repair database Napraw bazÄ™ Error Błąd Can't open key file Nie mogÄ™ otworzyć pliku z kluczem Database opened fine. Nothing to do. PomyÅ›lnie otworzono bazÄ™. Nic do zrobienia. Unable to open the database. Nie można otworzyć bazy kluczy. Success Sukces The database has been successfully repaired You can now save it. Baza zostaÅ‚a naprawiona Możesz teraz jÄ… już zapisać. Unable to repair the database. Nie mogÄ™ naprawić bazÄ™. DatabaseSettingsWidget Database name: Nazwa bazy danych: Database description: Opis bazy danych: Transform rounds: Liczba rund szyfrowania: Default username: DomyÅ›lny użytkownik: Use recycle bin: Korzystaj z kosza: MiB MiB Benchmark Test sprawnoÅ›ci Max. history items: Max. ilość wpisów w historii: Max. history size: Max. rozmiar historii: DatabaseTabWidget Root Root KeePass 2 Database Baza danych KeePass 2 All files Wszystkie pliki Open database Otwórz bazÄ™ danych Warning Ostrzeżenie File not found! Nie znaleziono pliku! Open KeePass 1 database Otwórz bazÄ™ danych KeePass 1 KeePass 1 database Baza danych KeePass 1 All files (*) Wszystkie pliki (*) Close? Zamknąć? Save changes? Zapisać zmiany? "%1" was modified. Save changes? "%1" zostaÅ‚ zmieniony. Zapisać zmiany? Error Błąd Writing the database failed. Błąd w zapisywaniu bazy kluczy. Save database as Zapisz bazÄ™ danych jako New database Nowa baza danych locked zablokowana The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Baza, którÄ… próbujesz otworzyć, jest zablokowana przez innÄ… instancjÄ™ KeePassX. Czy chcesz jÄ… otworzyć pomimo tego? Inaczej baza bÄ™dzie otwarta tylko do odczytu. Lock database Zablokuj bazÄ™ Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Nie można zablokować bazy, którÄ… edytujesz. NaciÅ›nij anuluj, aby zakoÅ„czyć zmiany albo porzucić je. This database has never been saved. You can save the database or stop locking it. Baza nie zostaÅ‚a nigdy zapisana. Możesz jÄ… zapisać albo przestać blokować. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Baza zostaÅ‚a zmodyfikowana. Czy chcesz zapisać przed zablokowaniem jej? W przeciwnym wypadku zmiany zostanÄ… porzucone. "%1" is in edit mode. Discard changes and close anyway? "%1" jest w trybie edytowania. Odrzucić zmiany i zamknąć? Export database to CSV file Eksport bazy danych do pliku CSV CSV file plik CSV Writing the CSV file failed. Błąd przy zapisywaniu pliku CSV. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Baza, którÄ… próbujesz zapisać jest zablokowana przez innÄ… instancjÄ™ KeePassX. Czy chcesz zapisać mimo to? DatabaseWidget Change master key ZmieÅ„ główne hasÅ‚o Delete entry? Skasować wpis? Do you really want to delete the entry "%1" for good? Czy na pewno caÅ‚kowicie usunąć wpis "%1" ? Delete entries? Usunąć wpisy? Do you really want to delete %1 entries for good? Czy na prawdÄ™ chcesz usunąć %1 wpisów na dobre? Move entries to recycle bin? Przenieść wpisy do kosza? Do you really want to move %n entry(s) to the recycle bin? Czy na pewno chcesz przenieść %n wpis do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza?Czy na pewno chcesz przenieść %n wpisów do kosza? Delete group? Usunąć grupÄ™? Do you really want to delete the group "%1" for good? Czy na pewno caÅ‚kowicie usunąć grupÄ™ "%1"? Current group Bieżąca grupa Error Błąd Unable to calculate master key Nie mogÄ™ wyliczyć głównego klucza EditEntryWidget Entry Wpis Advanced Zaawansowane Icon Ikona Auto-Type Auto-uzupeÅ‚nianie Properties WÅ‚aÅ›ciwoÅ›ci History Historia Entry history Historia wpisu Add entry Dodaj wpis Edit entry Edycja wpisu Error Błąd Different passwords supplied. Podano różne hasÅ‚a. New attribute Nowy atrybut Select file Wybierz plik Unable to open file Nie można otworzyć pliku Save attachment Zapisz załącznik Unable to save the attachment: Nie można zapisać załącznika: Tomorrow Jutro %n week(s) %n tydzieÅ„%n tygodni(e)%n tygodni(e) %n month(s) %n miesiÄ…c%n miesiÄ…c(e)%n miesiÄ…c(e) 1 year 1 rok EditEntryWidgetAdvanced Additional attributes Dodatkowe atrybuty Add Dodaj Edit Edytuj Remove UsuÅ„ Attachments Załączniki Save Zapisz Open Otwórz EditEntryWidgetAutoType Enable Auto-Type for this entry Włącz auto-uzupeÅ‚nianie dla tego wpisu Inherit default Auto-Type sequence from the group Dziedzicz domyÅ›lnÄ… sekwencjÄ™ auto-uzupeÅ‚niania z grupy Use custom Auto-Type sequence: Używaj niestandardowej sekwencji auto-uzupeÅ‚niania: + + - - Window title: TytuÅ‚ okna: Use default sequence Korzystaj z domyÅ›lnej sekwencji Set custom sequence: Ustaw niestandardowÄ… sekwencjÄ™: EditEntryWidgetHistory Show Pokaż Restore Przywróć Delete UsuÅ„ Delete all UsuÅ„ wszystkie EditEntryWidgetMain Title: TytuÅ‚: Username: Użytkownik: Password: HasÅ‚o: Repeat: Powtórz: Gen. Gen. URL: URL: Expires Wygasa Presets Prezentuje Notes: Notatki: EditGroupWidget Group Grupa Icon Ikona Properties WÅ‚aÅ›ciwoÅ›ci Add group Dodaj grupÄ™ Edit group Edytuj grupÄ™ Enable Włącz Disable Wyłącz Inherit from parent group (%1) Dziedzicz z nadrzÄ™dnej grupy (%1) EditGroupWidgetMain Name Nazwa Notes Notatki Expires Wygasa Search Szukaj Auto-type Auto-uzupeÅ‚nianie Use default auto-type sequence of parent group Korzystaj z domyÅ›lnej sekwencji auto-uzupeÅ‚niania z nadrzÄ™dnej grupy Set default auto-type sequence Ustaw domyÅ›lnÄ… sekwencjÄ™ auto-uzupeÅ‚niania EditWidgetIcons Use default icon Ustaw domyÅ›lnÄ… ikonÄ™ Use custom icon Ustaw niestandardowÄ… ikonÄ™ Add custom icon Dodaj niestandardowÄ… ikonÄ™ Delete custom icon UsuÅ„ niestandardowÄ… ikonÄ™ Images Obrazy All files Wszystkie pliki Select Image Wybierz obraz Can't delete icon! Nie można usunąć ikony! Can't delete icon. Still used by %n item(s). Nie mogÄ™ usunąć ikony. Nadal używana przez %n wpis.Nie mogÄ™ usunąć ikony. Nadal używana przez %n wpisów.Nie mogÄ™ usunąć ikony. Nadal używana przez %n wpisów. EditWidgetProperties Created: Stworzone: Modified: Modyfikowane: Accessed: Uuid: Uuid: EntryAttributesModel Name Nazwa EntryHistoryModel Last modified Ostatnia modyfikacja Title TytuÅ‚ Username Użytkownik URL URL EntryModel Group Grupa Title TytuÅ‚ Username Użytkownik URL URL Group Recycle Bin Kosz KeePass1OpenWidget Import KeePass1 database Importuj bazÄ™ danych KeePass1 Error Błąd Unable to open the database. Nie można otworzyć bazy kluczy. KeePass1Reader Unable to read keyfile. Nie można otworzyć pliku z kluczem. Not a KeePass database. To nie baza KeePass. Unsupported encryption algorithm. Niewspierany algorytm szyfrowania. Unsupported KeePass database version. Niewspierana wersja bazy KeePass. Root Root Unable to calculate master key Nie mogÄ™ wyliczyć głównego klucza KeePass2Reader Not a KeePass database. To nie baza KeePass. Unsupported KeePass database version. Niewspierana wersja bazy KeePass. Wrong key or database file is corrupt. Błędny klucz lub baza jest uszkodzona. Unable to calculate master key Nie mogÄ™ wyliczyć głównego klucza The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Wybrany plik jest bazÄ… starego KeePassX 1 (.kdb). Możesz zaimportować jÄ… przez wybranie Baza > 'Importuj bazÄ™ danych KeePass 1'. Nie bÄ™dzie można skonwertować nowej bazy do starego programu KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Błąd krytyczny podczas testowania funkcji kryptograficznych. KeePassX - Error KeePassX - Błąd MainWindow Database Baza danych Recent databases Niedawne bazy danych Help Pomoc Entries Wpisy Copy attribute to clipboard Skopiuj atrybut do schowka Groups Grupy View Widok Quit ZakoÅ„cz About O Open database Otwórz bazÄ™ danych Save database Zapisz bazÄ™ danych Close database Zamknij bazÄ™ danych New database Nowa baza danych Add new entry Dodaj nowy wpis View/Edit entry PodglÄ…d/edycja wpisu Delete entry UsuÅ„ wpis Add new group Dodaj nowÄ… grupÄ™ Edit group Edytuj grupÄ™ Delete group UsuÅ„ grupÄ™ Save database as Zapisz bazÄ™ danych jako Change master key ZmieÅ„ główne hasÅ‚o Database settings Ustawienia bazy danych Import KeePass 1 database Importuj bazÄ™ danych KeePass 1 Clone entry Sklonuj wpis Find Znajdź Copy username to clipboard Skopiuj użytkownika do schowka Copy password to clipboard Skopiuj hasÅ‚o do schowka Settings Ustawienia Perform Auto-Type Wykonaj auto-uzupeÅ‚nianie Open URL Otwórz URL Lock databases Zablokuj bazy Title TytuÅ‚ URL URL Notes Notatki Show toolbar Pokaż pasek narzÄ™dziowy read-only Tylko do odczytu Toggle window Pokaż/ukryj okno Tools NarzÄ™dzia Copy username Skopiuj użytkownika Copy password Skopiuj hasÅ‚o Export to CSV file Eksport do pliku CSV Repair database Napraw bazÄ™ KeePass 2 Database Baza KeePass 2 All files Wszystkie pliki Save repaired database Zapisz naprawionÄ… bazÄ™ Error Błąd Writing the database failed. Błąd przy zapisie bazy. PasswordGeneratorWidget Password: HasÅ‚o: Length: DÅ‚ugość Character Types Typy znaków Upper Case Letters Duże litery Lower Case Letters MaÅ‚e litery Numbers Liczby Special Characters Znaki specjalne Exclude look-alike characters Wyklucz podobnie wyglÄ…dajÄ…ce znaki Ensure that the password contains characters from every group Zapewnij, że hasÅ‚o bÄ™dzie zawieraÅ‚o znaki ze wszystkich grup Accept Zaakceptuj QCommandLineParser Displays version information. WyÅ›wietl informacjÄ™ o wersji. Displays this help. WyÅ›wietla ten dialog. Unknown option '%1'. Nie znana opcja '%1': Unknown options: %1. Nie znana opcja: %1. Missing value after '%1'. BrakujÄ…ca wartość po '%1'. Unexpected value after '%1'. Nieoczekiwana wartość po '%1'. [options] [options] Usage: %1 Używanie: %1 Options: Opcje: Arguments: Argumenty: QSaveFile Existing file %1 is not writable IstniejÄ…cy plik %1 jest nie do zapisu Writing canceled by application Zapisywanie anulowane przez aplikacjÄ™ Partial write. Partition full? Częściowy zapis. PeÅ‚ny dysk? QtIOCompressor Internal zlib error when compressing: Błąd wewnÄ™trzny zlib podczas kompresowania: Error writing to underlying device: Błąd w zapisie na urzÄ…dzenie: Error opening underlying device: Błąd w otwieraniu z urzÄ…dzenia: Error reading data from underlying device: Błąd w odczycie danych z urzÄ…dzenia: Internal zlib error when decompressing: Błąd wewnÄ™trzny zlib podczas dekompresowania: QtIOCompressor::open The gzip format not supported in this version of zlib. Format gzip nie wspierany przez tÄ… wersjÄ™ zlib. Internal zlib error: Błąd wewnÄ™trzny zlib: SearchWidget Find: Znajdź: Case sensitive Rozróżniaj wielkość znaków Current group Bieżąca grupa Root group Główna grupa SettingsWidget Application Settings Ustawienia aplikacji General Główne Security BezpieczeÅ„stwo SettingsWidgetGeneral Remember last databases PamiÄ™taj ostatniÄ… bazÄ™ Open previous databases on startup Otwórz poprzedniÄ… bazÄ™ podczas startu Automatically save on exit Automatycznie zapisz przy wyjÅ›ciu Automatically save after every change Automatycznie zapisz po każdej zmianie Minimize when copying to clipboard Zminimalizuj po skopiowaniu do schowka Use group icon on entry creation Użyj ikony grupy podczas tworzenia wpisu Global Auto-Type shortcut Globalny skrót auto-uzupeÅ‚nianie Use entry title to match windows for global auto-type Wykorzystaj tytuÅ‚ wpisu do dopasowania dla globalnego auto-wpisywania Language JÄ™zyk Show a system tray icon Pokaż ikonÄ™ w zasobniku systemowym Hide window to system tray when minimized Schowaj okno do zasobnika podczas minimalizacji Remember last key files ZapamiÄ™taj ostatni plik klucza SettingsWidgetSecurity Clear clipboard after Wyczyść schowek po sec s Lock databases after inactivity of Zablokuj bazÄ™ po nieaktywnoÅ›ci Show passwords in cleartext by default DomyÅ›lnie pokazuj hasÅ‚a Always ask before performing auto-type Zawsze pytaj przed wykonaniem auto-uzupeÅ‚ninia UnlockDatabaseWidget Unlock database Odblokuj bazÄ™ WelcomeWidget Welcome! Witaj! main KeePassX - cross-platform password manager KeePassX - wieloplatformowy menadżer haseÅ‚ filename of the password database to open (*.kdbx) nazwa pliku z bazÄ… haseÅ‚ do otwarcia (*.kdbx) path to a custom config file Å›cieżka do pliku z ustawieniami key file of the database plik klucza bazy keepassx-2.0.3/share/translations/keepassx_pt_BR.ts000066400000000000000000001262641276304217300224630ustar00rootroot00000000000000 AboutDialog About KeePassX Sobre KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX é distribuído nos termos da Licença Pública Geral (GPL), versão 2 ou (à sua escolha) versão 3, do GNU. Revision Revisão Using: Usando: AutoType Auto-Type - KeePassX Auto-Digitação - KeePassX Couldn't find an entry that matches the window title: Não foi possível localizar uma entrada que corresponda ao título da janela: AutoTypeAssociationsModel Window Janela Sequence Sequência Default sequence Sequência pré-definida AutoTypeSelectDialog Auto-Type - KeePassX Auto-Digitação - KeePassX Select entry to Auto-Type: Escolha uma entrada para Auto-Digitar: ChangeMasterKeyWidget Password Senha Enter password: Insira senha: Repeat password: Repita senha: Key file Arquivo-Chave Browse Navegar Create Criar Key files Arquivos-Chave All files Todos os Arquivos Create Key File... Criar Arquivo-Chave... Error Erro Unable to create Key File : Não foi possível criar o Arquivo-Chave : Select a key file Escolha um arquivo-chave Question Pergunta Do you really want to use an empty string as password? Você realmente quer usar uma sequência vazia como senha? Different passwords supplied. Senhas diferentes fornecidas. Failed to set key file Falha ao definir arquivo-chave Failed to set %1 as the Key file: %2 Falha ao definir %1 como o Arquivo-Chave: %2 DatabaseOpenWidget Enter master key Insira a chave-mestra Key File: Arquivo-Chave: Password: Senha: Browse Navegar Error Erro Unable to open the database. Não foi possível abrir o banco de dados. Can't open key file Não foi possível abrir o arquivo-chave All files Todos os arquivos Key files Arquivos-chave Select key file Escolha o arquivo-chave DatabaseRepairWidget Repair database Reparar banco de dados Error Erro Can't open key file Não foi possível abrir arquivo-chave Database opened fine. Nothing to do. Banco de dados aberto com sucesso. Nada para fazer. Unable to open the database. Não foi possível abrir o banco de dados. Success Sucesso The database has been successfully repaired You can now save it. O banco de dados foi reparado com sucesso Você pode salvá-lo agora. Unable to repair the database. Não foi possível reparar o banco de dados. DatabaseSettingsWidget Database name: Nome do banco de dados: Database description: Descrição do banco de dados: Transform rounds: Rodadas de transformação: Default username: Usuário padrão: Use recycle bin: Usar lixeira: MiB MB Benchmark Benchmark Max. history items: Máx. itens no histórico: Max. history size: Tamanho máx. do histórico: DatabaseTabWidget Root Raiz KeePass 2 Database Banco de Dados KeePass 2 All files Todos os arquivos Open database Abrir banco de dados Warning Aviso File not found! Arquivo não localizado! Open KeePass 1 database Abrir banco de dados KeePass 1 KeePass 1 database Banco de dados KeePass 1 All files (*) Todos os arquivos (*) Close? Fechar? Save changes? Salvar alterações? "%1" was modified. Save changes? "%1" foi modificado. Salvar alterações? Error Erro Writing the database failed. Escrever no banco de dados falhou. Save database as Salvar banco de dados como New database Novo banco de dados locked trancado The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. O banco de dados que você está tentando abrir está bloqueado por outra instância do KeePassX. Você quer abri-lo de qualquer forma? Alternativamente, o banco de dados é aberto como somente leitura. Lock database Trancar Banco de Dados Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Não é possível trancar o banco de dados uma vez que você o está editando. Por favor, aperte cancelar para finalizar suas alterações ou descartá-las. This database has never been saved. You can save the database or stop locking it. Esse banco de dados nunca foi salvo. Você pode salvar o banco de dados ou parar de trancá-lo. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Esse banco de dados foi modificado. Você deseja salvar o banco de dados antes de travá-lo? Do contrário, suas alterações serão perdidas. "%1" is in edit mode. Discard changes and close anyway? "%1" está em modo de edição. Descartar alterações e fechar mesmo assim? Export database to CSV file Exportar banco de dados para arquivo CSV CSV file Arquivo CSV Writing the CSV file failed. Falha ao gravar arquivo CSV. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? O banco de dados que você está tentando salvar como está travado por uma outra instância de KeePassX. Você deseja salvá-lo mesmo assim? DatabaseWidget Change master key Alterar chave mestra Delete entry? Apagar entrada? Do you really want to delete the entry "%1" for good? Você realmente quer apagar a entrada "%1" para sempre? Delete entries? Apagar entradas? Do you really want to delete %1 entries for good? Você realmente quer apagar %1 entradas para sempre? Move entries to recycle bin? Mover entradas para lixeira? Do you really want to move %n entry(s) to the recycle bin? Você realmente deseja mover %n entrada para a lixeira?Você realmente deseja mover %n entradas para a lixeira? Delete group? Apagar grupo? Do you really want to delete the group "%1" for good? Você realmente quer apagar o grupo "%1" para sempre? Current group Grupo atual Error Erro Unable to calculate master key Não foi possível calcular chave mestra EditEntryWidget Entry Entrada Advanced Avançado Icon Ãcone Auto-Type Auto-Digitação Properties Propriedades History Histórico Entry history Histórico de Entradas Add entry Adicionar entrada Edit entry Editar entrada Error Erro Different passwords supplied. Senhas diferentes fornecidas. New attribute Novo atributo Select file Selecionar arquivo Unable to open file Não foi possível abrir o arquivo Save attachment Salvar anexo Unable to save the attachment: Não foi possível salvar o anexo: Tomorrow Amanhã %n week(s) %n semana(s)%n semana(s) %n month(s) %n mês%n mese(s) 1 year 1 ano EditEntryWidgetAdvanced Additional attributes Atributos extras Add Adicionar Edit Editar Remove Remover Attachments Anexos Save Salvar Open Abrir EditEntryWidgetAutoType Enable Auto-Type for this entry Habilitar Auto-Digitação para esta entrada Inherit default Auto-Type sequence from the group Herdar sequência pré-definida de Auto-Digitação do grupo Use custom Auto-Type sequence: Usar sequência de Auto-Digitação personalizada: + + - - Window title: Título da Janela: Use default sequence Usar sequência pré-definida Set custom sequence: Definir sequência personalizada: EditEntryWidgetHistory Show Mostrar Restore Restaurar Delete Excluir Delete all Excluir todos EditEntryWidgetMain Title: Título: Username: Nome de Usuário: Password: Senha: Repeat: Repetir: Gen. Gerar URL: URL: Expires Expira em Presets Pré-definidos Notes: Notas: EditGroupWidget Group Grupo Icon Ãcone Properties Propriedades Add group Adicionar grupo Edit group Editar grupo Enable Habilitar Disable Desabilitar Inherit from parent group (%1) Herdar do grupo pai (%1) EditGroupWidgetMain Name Nom Notes Notas Expires Expira em Search Buscar Auto-type Auto-digitar Use default auto-type sequence of parent group Usar sequência de auto-digitação padrão do grupo pai Set default auto-type sequence Definir sequência auto-digitação padrão EditWidgetIcons Use default icon Usar ícone padrão Use custom icon Usar ícone personalizado Add custom icon Adicionar ícone personalizado Delete custom icon Excluir ícone personalizado Images Imagens All files Todos os arquivos Select Image Selecionar imagem Can't delete icon! Não é possível apagar o ícone! Can't delete icon. Still used by %n item(s). Não é possível apagar o ícone. Ainda usado por %n item.Não é possível apagar o ícone. Ainda usado por %n itens. EditWidgetProperties Created: Criado em: Modified: Modificado em: Accessed: Acessado em: Uuid: Uuid: EntryAttributesModel Name Nome EntryHistoryModel Last modified Modificado pela última vez em Title Título Username Nome de usuário URL URL EntryModel Group Grupo Title Título Username Nome de usuário URL URL Group Recycle Bin Lixeira KeePass1OpenWidget Import KeePass1 database Importar banco de dados KeePass1 Error Erro Unable to open the database. Não foi possível abrir o banco de dados. KeePass1Reader Unable to read keyfile. Não foi possível ler o arquivo-chave. Not a KeePass database. Não é um banco de dados KeePass. Unsupported encryption algorithm. Algoritmo de encriptação não suportado. Unsupported KeePass database version. Versão do banco de dados KeePass não suportada. Root Raíz Unable to calculate master key Não foi possível calcular a chave mestra KeePass2Reader Not a KeePass database. Não é um banco de dados KeePass. Unsupported KeePass database version. Versão não suportada do banco de dados KeePass. Wrong key or database file is corrupt. Chave errada ou arquivo de banco de dados está corrompido. Unable to calculate master key Não foi possível calcular a chave mestre The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. O arquivo selecionado é um banco de dados antigo do KeePass 1 (.kdb). Você pode importá-lo clicando em Banco de Dados > 'Importar banco de dados KeePass 1'. Esta é uma migração de uma via. Você não poderá abrir o banco de dados importado com a versão antiga do KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Erro fatal enquanto testava as funções criptográficas. KeePassX - Error KeePassX - Erro MainWindow Database Banco de Dados Recent databases Bancos de dados recentes Help Ajuda Entries Entradas Copy attribute to clipboard Copiar atributo para a área de transferência Groups Grupos View Ver Quit Sair About Sobre Open database Abrir banco de dados Save database Salvar banco de dados Close database Fechar banco de dados New database Novo banco de dados Add new entry Adicionar nova entrada View/Edit entry Ver/Editar entrada Delete entry Excluir entrada Add new group Adicionar novo grupo Edit group Editar grupo Delete group Excluir grupo Save database as Salvar banco de dados como Change master key Alterar chave-mestra Database settings Configurações do Banco de Dados Import KeePass 1 database Importar banco de dados KeePass1 Clone entry Clonar entrada Find Localizar Copy username to clipboard Copiar nome de usuário para área de transferência Copy password to clipboard Copiar senha para área de transferência Settings Configurações Perform Auto-Type Realizar Auto-Digitação Open URL Abrir URL Lock databases Trancar bancos de dados Title Título URL URL Notes Notas Show toolbar Mostrar barra de ferramentas read-only somente leitura Toggle window Alternar Janela Tools Ferramentas Copy username Copiar nome de usuário Copy password Copiar senha Export to CSV file Exportar para arquivo CSV Repair database Reparar banco de dados KeePass 2 Database Banco de dados Keepass 2 All files Todos arquivos Save repaired database Salvar banco de dados reparado Error Erro Writing the database failed. Escrita do banco de dados falhou. PasswordGeneratorWidget Password: Senha: Length: Tamanho: Character Types Tipos de Caracteres Upper Case Letters Letras Maiúsculas Lower Case Letters Letras Minúsculas Numbers Números Special Characters Caracteres Especiais Exclude look-alike characters Excluir caracteres similares Ensure that the password contains characters from every group Assegurar que a senha contenha caracteres de todos os grupos Accept Aceitar QCommandLineParser Displays version information. Mostrar informações da versão. Displays this help. Mostrar esta ajuda. Unknown option '%1'. Opção desconhecida '%1'. Unknown options: %1. Opções desconhecidas: %1. Missing value after '%1'. Falta valor após '%1'. Unexpected value after '%1'. Valor inesperado após '%1'. [options] [opções] Usage: %1 Utilização: %1 Options: Opções: Arguments: Argumentos: QSaveFile Existing file %1 is not writable O arquivo existente %1 não é gravável Writing canceled by application Escrita cancelada pelo aplicativo Partial write. Partition full? Escrita parcial. Partição cheia? QtIOCompressor Internal zlib error when compressing: Erro interno do zlib ao compactar: Error writing to underlying device: Erro ao gravar no dispositivo subjacente: Error opening underlying device: Erro ao abrir dispositivo subjacente: Error reading data from underlying device: Erro ao ler dados do dispositivo subjacente: Internal zlib error when decompressing: Erro interno do zlib ao descompactar: QtIOCompressor::open The gzip format not supported in this version of zlib. Sem suporte ao formato gzip nesta versão do zlib. Internal zlib error: Erro interno do zlib: SearchWidget Find: Localizar: Case sensitive Diferenciar maiúsculas e minúsculas Current group Grupo atual Root group Grupo Raiz SettingsWidget Application Settings Configurações do Aplicativo General Geral Security Segurança SettingsWidgetGeneral Remember last databases Lembrar dos últimos bancos de dados Open previous databases on startup Abrir bancos de dados anteriores na inicialização Automatically save on exit Salvar automaticamente ao sair Automatically save after every change Salvar automaticamente depois de cada alteração Minimize when copying to clipboard Minimizar ao copiar para área de transferência Use group icon on entry creation Usar ícone de grupo na criação da entrada Global Auto-Type shortcut Atalho para Auto-Digitação Global Use entry title to match windows for global auto-type Usar título da entrada para comparar janelas para auto-digitação global Language Idioma Show a system tray icon Mostrar um ícone da bandeja do sistema Hide window to system tray when minimized Ocultar janela na bandeja de sistema quando minimizada Remember last key files Lembrar dos últimos arquivos-chave SettingsWidgetSecurity Clear clipboard after Limpar área de transferência após sec seg Lock databases after inactivity of Travar bancos de dados após inatividade de Show passwords in cleartext by default Mostrar senhas em texto claro por padrão Always ask before performing auto-type Sempre perguntar antes de realizar auto-digitação UnlockDatabaseWidget Unlock database Destrancar banco de dados WelcomeWidget Welcome! Bem-vindo! main KeePassX - cross-platform password manager KeePassX - gerenciador de senhas multiplataforma filename of the password database to open (*.kdbx) nome de arquivo do banco de dados de senhas a ser aberto (*.kdbx) path to a custom config file caminho para um arquivo de configuração personalizado key file of the database arquivo-chave do banco de dados keepassx-2.0.3/share/translations/keepassx_pt_PT.ts000066400000000000000000001243411276304217300224750ustar00rootroot00000000000000 AboutDialog About KeePassX Sobre o KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX é distribuído sob os termos GNU de licença pública geral (GPL) versão 2 ou (á sua escolha) versão 3. Revision Using: AutoType Auto-Type - KeePassX Escrever automáticamente - KeePassX Couldn't find an entry that matches the window title: Não foi possível encontrar uma entrada que coincida com o titulo da janela: AutoTypeAssociationsModel Window Janela Sequence Sequência Default sequence Sequência padrão AutoTypeSelectDialog Auto-Type - KeePassX Escrever automáticamente - KeePassX Select entry to Auto-Type: Seleccionar entrada para auto escrever: ChangeMasterKeyWidget Password Senha Enter password: Inserir a senha: Repeat password: Reinserir a senha Key file Ficheiro chave Browse Procurar Create Criar Key files Ficheiros chave All files Todos os ficheiros Create Key File... Criar ficheiro chave Error Erro Unable to create Key File : Impossível criar ficheiro chave: Select a key file Seleccionar ficheiro chave Question Questão Do you really want to use an empty string as password? Pretende utilizar um valor sem conteúdo como senha ? Different passwords supplied. As senhas inseridas não coincidem. Failed to set key file Falha ao definir o ficheiro chave Failed to set %1 as the Key file: %2 Falha ao especificar %1 como ficheiro chave: %2 DatabaseOpenWidget Enter master key Inserir chave mestra Key File: Ficheiro chave: Password: Senha: Browse Procurar Error Erro Unable to open the database. Impossível abrir a base de dados. Can't open key file Não é possível abrir ao ficheiro chave All files Todos os ficheiros Key files Ficheiros chave Select key file Seleccionar o ficheiro chave DatabaseRepairWidget Repair database Error Can't open key file Database opened fine. Nothing to do. Unable to open the database. Success The database has been successfully repaired You can now save it. Unable to repair the database. DatabaseSettingsWidget Database name: Nome da base de dados: Database description: Descrição da base de dados: Transform rounds: Ciclos de transformação: Default username: Utilizador padrão: Use recycle bin: Utilizar reciclagem: MiB MiB Benchmark Teste de desempenho Max. history items: Número máximo de items no histórico: Max. history size: Tamanho máximo para o histórico: DatabaseTabWidget Root Raiz KeePass 2 Database Base de dados KeePass 2 All files Todos os ficheiros Open database Abrir base de dados Warning Aviso File not found! Ficheiro não encontrado ! Open KeePass 1 database Abrir base de dados KeePass 1 KeePass 1 database Base de dados KeePass 1 All files (*) Todos os ficheiros (*) Close? Fechar ? Save changes? Guardar alterações ? "%1" was modified. Save changes? "%1" foi modificado. Guardar alterações ? Error Erro Writing the database failed. Falha na escrita da base de dados. Save database as Guardar base de dados como New database Nova base de dados locked Trancado The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. A base de dados que está a tentar abrir encontra-se trancada por outra utilização do KeePassX. Pretende abri-la de qualquer forma ? Alternativamente será apenas para leitura. Lock database Trancar base de dados Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Não é possível trancar a base de dados pois encontra-se em edição. Por favor cancele para finalizar as alterações ou descarte-as. This database has never been saved. You can save the database or stop locking it. Esta base de dados nunca foi guardada. Pode guarda-la ou pare de a tentar trancar. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Esta base de dados foi modificada. Pretende guardar a base de dados antes de a trancar ? Caso contrário as alterações serão perdidas. "%1" is in edit mode. Discard changes and close anyway? %1 está em modo de edição. Fechar e Ignorar alterações ? Export database to CSV file Exportar base de dados para ficheiro CSV CSV file Ficheiro CSV Writing the CSV file failed. Falha na escrita do ficheiro CSV The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? DatabaseWidget Change master key Alterar a chave mestra Delete entry? Apagar entrada ? Do you really want to delete the entry "%1" for good? Pretender realmente apagar a entrada "%1" para sempre ? Delete entries? Apagar entradas ? Do you really want to delete %1 entries for good? Pretender realmente apagar as entradas "%1" para sempre ? Move entries to recycle bin? Mover entradas para a reciclagem ? Do you really want to move %n entry(s) to the recycle bin? Pretende realmente mover a entrada(s) %n para a reciclagem ?Pretende realmente mover a entrada(s) %n para a reciclagem ? Delete group? Apagar grupo ? Do you really want to delete the group "%1" for good? Pretender realmente apagar o grupo "%1" para sempre ? Current group Grupo actual Error Erro Unable to calculate master key Impossível calcular ficheiro chave EditEntryWidget Entry Entrada Advanced Avançado Icon Icon Auto-Type Auto escrita Properties Propriedades History Histórico Entry history Entrada do histórico Add entry Adicionar entrada Edit entry Editar entrada Error Erro Different passwords supplied. As senhas inseridas não coincidem. New attribute Novo atributo Select file Seleccionar ficheiro Unable to open file Incapaz de abrir o ficheiro Save attachment Guardar anexo Unable to save the attachment: Incapaz de guardar o anexo: Tomorrow Amanhã %n week(s) %n semana(s)%n semana(s) %n month(s) %n mês%n mês(es) 1 year 1 ano EditEntryWidgetAdvanced Additional attributes Atributos adicionais Add Adicionar Edit Editar Remove Remover Attachments Anexos Save Guardar Open Abrir EditEntryWidgetAutoType Enable Auto-Type for this entry Activar auto escrita para esta entrada Inherit default Auto-Type sequence from the group Herdar sequência de auto escrita padrão deste grupo Use custom Auto-Type sequence: Utilizar sequência de auto escrita personalizada: + + - - Window title: Título da janela: Use default sequence Utilizar sequência padrão Set custom sequence: Especificar sequência padrão: EditEntryWidgetHistory Show Mostrar Restore Restaurar Delete Apagar Delete all Apagar tudo EditEntryWidgetMain Title: Título: Username: Nome de utilizador: Password: Senha: Repeat: Repetir: Gen. Gerar. URL: URL: Expires Expira Presets Definições Notes: Notas: EditGroupWidget Group Grupo Icon Icon Properties Propriedades Add group Adicionar grupo Edit group Editar grupo Enable Activar Disable Desactivar Inherit from parent group (%1) Herdar a partir do grupo (%1) EditGroupWidgetMain Name Nome Notes Notas Expires Expira Search Procurar Auto-type Auto escrita Use default auto-type sequence of parent group Herdar sequência de auto escrita padrão do grupo relacionado Set default auto-type sequence Especificar sequência padrão de auto escrita EditWidgetIcons Use default icon Utilizar icon padrão Use custom icon Utilizar icon padrão Add custom icon Adicionar icon personalizado Delete custom icon Apagar icon personalizado Images Imagens All files Todos os ficheiros Select Image Seleccionar imagem Can't delete icon! Impossível apagar o icon Can't delete icon. Still used by %n item(s). Impossível apagar icon. Ainda em uso por %n item(s).Impossível apagar icon. Ainda em uso por %n item(s). EditWidgetProperties Created: Criado: Modified: Modificado: Accessed: Acedido: Uuid: Uuid: EntryAttributesModel Name Nome EntryHistoryModel Last modified Última modificação Title Título Username Nome de utilizador URL URL EntryModel Group Grupo Title Título: Username Nome de utilizador URL URL Group Recycle Bin Reciclagem KeePass1OpenWidget Import KeePass1 database Importar de dados KeePass 1 Error Erro Unable to open the database. Impossível abrir a base de dados. KeePass1Reader Unable to read keyfile. Impossível ler o ficheiro chave: Not a KeePass database. Não é uma base de dados KeePass Unsupported encryption algorithm. Algoritmo de criptografia não suportado. Unsupported KeePass database version. Versão de base de dados KeePass não suportada. Root Raiz Unable to calculate master key Impossível calcular chave mestra: KeePass2Reader Not a KeePass database. Não é uma base de dados KeePass. Unsupported KeePass database version. Versão de base de dados KeePass não suportada. Wrong key or database file is corrupt. Chave errada ou base de dados corrompida. Unable to calculate master key Impossível calcular chave mestra: The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Main Fatal error while testing the cryptographic functions. Erro fatal durante teste de funções criptográficas. KeePassX - Error Erro - KeePassX MainWindow Database Base de dados Recent databases Base de dados recentes Help Ajuda Entries Entradas Copy attribute to clipboard Copiar atributo para inserção Groups Grupos View Vista Quit Terminar About Sobre Open database Abrir base de dados Save database Guardar base de dados Close database Fechar base de dados New database Nova base de dados Add new entry Adicionar nova entrada View/Edit entry Ver/Editar entrada Delete entry Apagar entrada Add new group Adicionar novo grupo Edit group Editar grupo Delete group Apagar grupo Save database as Guardar base de dados como Change master key Alterar a chave mestra Database settings Definições da base de dados: Import KeePass 1 database Importar base de dados KeePass 1 Clone entry Clonar entrada Find Encontrar Copy username to clipboard Copiar nome de utilizador para inserção Copy password to clipboard Copiar senha para inserção Settings Definições Perform Auto-Type Utilizar auto escrita Open URL Abrir URL Lock databases Trancar base de dados Title Título URL URL Notes Notas Show toolbar Mostrar barra de ferramentas read-only apenas leitura Toggle window Alternar janela Tools Ferramentas Copy username Copiar nome de utilizador Copy password Copiar senha Export to CSV file Exportar para ficheiro CSV Repair database KeePass 2 Database All files Save repaired database Error Writing the database failed. PasswordGeneratorWidget Password: Senha: Length: Tamanho: Character Types Tipo de caracteres Upper Case Letters Letras maiúsculas Lower Case Letters Letras minúsculas Numbers Números Special Characters Caracteres especiais Exclude look-alike characters Excluir caracteres semelhantes Ensure that the password contains characters from every group Assegurar que a senha contém caracteres de todos os grupos Accept Aceitar QCommandLineParser Displays version information. Mostrar informação da versão. Displays this help. Mostrar esta ajuda. Unknown option '%1'. Opção '%1' desconhecida. Unknown options: %1. Opções desconhecidas: %1. Missing value after '%1'. Valor em falta após '%1'. Unexpected value after '%1'. Valor inesperado após '%1'. [options] [opções] Usage: %1 Utilização: %1 Options: Opções: Arguments: Argumentos: QSaveFile Existing file %1 is not writable O ficheiro %1 existente não permite escrita Writing canceled by application Escrita cancelada pela aplicação Partial write. Partition full? Escrita parcial. Armazenamento cheio ? QtIOCompressor Internal zlib error when compressing: Erro interno zlib durante compressão: Error writing to underlying device: Erro de escrita no dispositivo subjacente: Error opening underlying device: Erro ao abrir dispositivo subjacente: Error reading data from underlying device: Erro de leitura no dispositivo subjacente: Internal zlib error when decompressing: Erro interno zlib durante descompressão: QtIOCompressor::open The gzip format not supported in this version of zlib. O formato gzip não é suportado pela versão zlib utilizada. Internal zlib error: Erro interno zlib: SearchWidget Find: Procurar: Case sensitive Sensível ao tipo Current group Grupo actual Root group Grupo de raiz SettingsWidget Application Settings Definições da aplicação General Geral Security Segurança SettingsWidgetGeneral Remember last databases Lembrar últimas bases de dados Open previous databases on startup Abrir última base da dados ao iniciar Automatically save on exit Guardar automáticamente ao terminar Automatically save after every change Guardar automáticamente a cada alteração Minimize when copying to clipboard Minimizar quando copiar para inserção Use group icon on entry creation Utilizar icon de grupo na criação de entrada Global Auto-Type shortcut Atalho global de auto escrita Use entry title to match windows for global auto-type Utilizar titulo de entrada para coincidir com janela de entrada de auto escrita global Language Língua Show a system tray icon Mostrar icon na barra de sistema Hide window to system tray when minimized Esconder janela na barra de sistema quando minimizada Remember last key files Lembrar os últimos ficheiro chave SettingsWidgetSecurity Clear clipboard after Limpar dados de inserção no final sec seg Lock databases after inactivity of Trancar bases de dados após inatividade de Show passwords in cleartext by default Revelar senhas em texto por padrão Always ask before performing auto-type Confirmar antes de executar auto escrita UnlockDatabaseWidget Unlock database Destrancar base de dados WelcomeWidget Welcome! Bem vindo/a ! main KeePassX - cross-platform password manager KeePassX - Administrador de senhas multi plataforma filename of the password database to open (*.kdbx) ficheiro chave para abrir a base de dados (*.kdbx) path to a custom config file caminho para um ficheiro de configuração personalizado key file of the database ficheiro chave da base de dados keepassx-2.0.3/share/translations/keepassx_ru.ts000066400000000000000000001422021276304217300220710ustar00rootroot00000000000000 AboutDialog About KeePassX О KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX раÑпроÑтранÑетÑÑ Ð½Ð° уÑловиÑÑ… Стандартной общеÑтвенной лицензии GNU (GPL) верÑии 2 или (на ваше уÑмотрение) верÑии 3. Revision Ð ÐµÐ²Ð¸Ð·Ð¸Ñ Using: С помощью: AutoType Auto-Type - KeePassX Ðвтоввод — KeePassX Couldn't find an entry that matches the window title: Ðевозможно найти запиÑÑŒ, ÑоответÑтвующую заголовку окна: AutoTypeAssociationsModel Window Окно Sequence ПоÑледовательноÑть Default sequence Ð¡Ñ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð°Ñ Ð¿Ð¾ÑледовательноÑть AutoTypeSelectDialog Auto-Type - KeePassX Ðвтоввод — KeePassX Select entry to Auto-Type: Выберите запиÑÑŒ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð°: ChangeMasterKeyWidget Password Пароль Enter password: Введите пароль: Repeat password: Повторите пароль: Key file Файл-ключ Browse Обзор Create Создать Key files Файлы-ключи All files Ð’Ñе файлы Create Key File... Создать файл-ключ... Error Ошибка Unable to create Key File : Ðевозможно Ñоздать файл-ключ: Select a key file Выбрать файл-ключ Question Ð’Ð¾Ð¿Ñ€Ð¾Ñ Do you really want to use an empty string as password? Ð’Ñ‹ дейÑтвительно хотите иÑпользовать в качеÑтве Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿ÑƒÑтую Ñтроку? Different passwords supplied. Пароли не Ñовпадают. Failed to set key file Ðе удалоÑÑŒ уÑтановить файл-ключ Failed to set %1 as the Key file: %2 Ðе удалоÑÑŒ уÑтановить %1 как файл-ключ: %2 DatabaseOpenWidget Enter master key Введите маÑтер-пароль Key File: Файл-ключ: Password: Пароль: Browse Обзор Error Ошибка Unable to open the database. Ðевозможно открыть хранилище. Can't open key file Ðе могу открыть файл-ключ All files Ð’Ñе файлы Key files Файлы-ключи Select key file Выберите файл-ключ DatabaseRepairWidget Repair database ВоÑÑтановление хранилища Error Ошибка Can't open key file Ðе могу открыть файл-ключ Database opened fine. Nothing to do. Unable to open the database. Ðевозможно открыть хранилище. Success УÑпешно The database has been successfully repaired You can now save it. Хранилище было воÑÑтановлено. Теперь Ð’Ñ‹ можете Ñохранить его. Unable to repair the database. Ðевозможно воÑÑтановить хранилище. DatabaseSettingsWidget Database name: Ð˜Ð¼Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð°: Database description: ОпиÑание хранилища: Transform rounds: Раундов преобразований: Default username: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾ умолчанию: Use recycle bin: ИÑпользовать корзину: MiB МиБ Benchmark Проверка Max. history items: МакÑимум запиÑей иÑтории: Max. history size: МакÑимальный размер иÑтории: DatabaseTabWidget Root Корень KeePass 2 Database Хранилище KeePass 2 All files Ð’Ñе файлы Open database Открыть хранилище Warning Внимание File not found! Файл не найден! Open KeePass 1 database Открыть хранилище KeePass 1 KeePass 1 database Хранилище KeePass 1 All files (*) Ð’Ñе файлы (*) Close? Закрыть? Save changes? Сохранить изменениÑ? "%1" was modified. Save changes? «%1» изменён. Сохранить изменениÑ? Error Ошибка Writing the database failed. Ðе удалоÑÑŒ запиÑать хранилище. Save database as Сохранить хранилище как New database Ðовое хранилище locked заблокировано The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Хранилище, которое Ð’Ñ‹ хотите открыть, заблокировано другой запущенной копией KeePassX. Ð’ÑÑ‘ равно открыть? Ð’ качеÑтве альтернативы хранилище будет открыто в режиме Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. Lock database Заблокировать хранилище Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Ðевозможно заблокировать базу данных, так как вы в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€ÑƒÐµÑ‚Ðµ её. ПожалуйÑта нажмите Отмена, чтобы завершить Ñвои Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ отклонить их. This database has never been saved. You can save the database or stop locking it. Эта база данных никогда не была Ñохранена. Ð’Ñ‹ можете Ñохранить базу данных или оÑтановить её заблокированной. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Хранилище было изменено. Ð’Ñ‹ хотите Ñохранить его перед тем, как заблокировать? Ð’ противном Ñлучае вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны. "%1" is in edit mode. Discard changes and close anyway? "%1" в режиме редактированиÑ. Отменить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ вÑÑ‘ равно закрыть? Export database to CSV file ЭкÑпортировать хранилище в файл CSV CSV file Файл CSV Writing the CSV file failed. Ðе удалоÑÑŒ запиÑать CSV файл. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Данное хранилище заблокировано другой запущенной копией KeePassX. Ð’Ñ‹ уверены, что хотите продолжить Ñохранение? DatabaseWidget Change master key Изменить маÑтер-пароль Delete entry? Удалить запиÑÑŒ? Do you really want to delete the entry "%1" for good? Ð’Ñ‹ дейÑтвительно хотите навÑегда удалить запиÑÑŒ «%1»? Delete entries? Удалить запиÑи? Do you really want to delete %1 entries for good? Ð’Ñ‹ дейÑтвительно хотите навÑегда удалить %1 запиÑей? Move entries to recycle bin? ПомеÑтить запиÑи в корзину? Do you really want to move %n entry(s) to the recycle bin? Ð’Ñ‹ дейÑтвительно хотите помеÑтить %n запиÑÑŒ в корзину?Ð’Ñ‹ дейÑтвительно хотите помеÑтить %n запиÑи в корзину?Ð’Ñ‹ дейÑтвительно хотите помеÑтить %n запиÑей в корзину?Ð’Ñ‹ дейÑтвительно хотите помеÑтить %n запиÑей в корзину? Delete group? Удалить группу? Do you really want to delete the group "%1" for good? Ð’Ñ‹ дейÑтвительно хотите навÑегда удалить группу «%1»? Current group Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° Error Ошибка Unable to calculate master key Ðевозможно вычиÑлить маÑтер-пароль EditEntryWidget Entry ЗапиÑÑŒ Advanced РаÑширенные Icon Значок Auto-Type Ðвтоввод Properties Параметры History ИÑÑ‚Ð¾Ñ€Ð¸Ñ Entry history ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð·Ð°Ð¿Ð¸Ñи Add entry Добавить запиÑÑŒ Edit entry Редактировать запиÑÑŒ Error Ошибка Different passwords supplied. Пароли не Ñовпадают. New attribute Ðовый атрибут Select file Выбрать файл Unable to open file Ðевозможно открыть файл Save attachment Сохранить вложение Unable to save the attachment: Ðевозможно Ñохранить вложение: Tomorrow Завтра %n week(s) %n неделÑ%n недели%n недель%n недель %n month(s) %n меÑÑц%n меÑÑца%n меÑÑцев%n меÑÑцев 1 year 1 год EditEntryWidgetAdvanced Additional attributes Дополнительные атрибуты Add Добавить Edit Изменить Remove Удалить Attachments Ð’Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Save Сохранить Open Открыть EditEntryWidgetAutoType Enable Auto-Type for this entry Включить автоввод Ð´Ð»Ñ Ñтой запиÑи Inherit default Auto-Type sequence from the group УнаÑледовать Ñтандартную поÑледовательноÑть автоввода от группы Use custom Auto-Type sequence: ИÑпользовать Ñвою поÑледовательноÑть автоввода: + + - - Window title: Заголовок окна: Use default sequence ИÑпользовать Ñтандартную поÑледовательноÑть Set custom sequence: УÑтановить Ñвою поÑледовательноÑть: EditEntryWidgetHistory Show Показать Restore ВоÑÑтановить Delete Удалить Delete all Удалить вÑÑ‘ EditEntryWidgetMain Title: Заголовок: Username: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: Password: Пароль: Repeat: Пароль ещё раз: Gen. Генеральный. URL: URL: Expires ИÑтекает Presets ПредуÑтановки Notes: ПримечаниÑ: EditGroupWidget Group Группа Icon Значок Properties Параметры Add group Добавить группу Edit group Редактировать группу Enable Включено Disable Выключено Inherit from parent group (%1) ÐаÑледовать у родительÑкой группы (%1) EditGroupWidgetMain Name Ð˜Ð¼Ñ Notes ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Expires ИÑтекает Search ПоиÑк Auto-type Ðвтоввод Use default auto-type sequence of parent group ИÑпользуйте Ñтандартный автоввод из поÑледовательноÑти родительÑкой группы Set default auto-type sequence ПоÑледовательноÑть автоввода указать по умолчанию EditWidgetIcons Use default icon ИÑпользовать Ñтандартный значок Use custom icon ИÑпользовать Ñвой значок Add custom icon Добавить Ñвой значок Delete custom icon Удалить Ñвой значок Images Ð˜Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ All files Ð’Ñе файлы Select Image Выбор Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Can't delete icon! Ðе могу удалить значок! Can't delete icon. Still used by %n item(s). Ðе могу удалить иконку, %n запиÑÑŒ вÑÑ‘ ещё иÑпользует её.Ðе могу удалить иконку, %n запиÑи вÑÑ‘ ещё иÑпользует её.Ðе могу удалить иконку, %n запиÑей вÑÑ‘ ещё иÑпользует её.Ðе могу удалить значок, %n запиÑей вÑÑ‘ ещё иÑпользует его. EditWidgetProperties Created: Создано: Modified: Изменено: Accessed: ДоÑтуп: Uuid: Uuid: EntryAttributesModel Name Ð˜Ð¼Ñ EntryHistoryModel Last modified ПоÑледнее изменение Title Заголовок Username Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ URL URL EntryModel Group Группа Title Заголовок Username Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ URL URL Group Recycle Bin Корзина KeePass1OpenWidget Import KeePass1 database Импортировать хранилище KeePass 1 Error Ошибка Unable to open the database. Ðевозможно открыть хранилище. KeePass1Reader Unable to read keyfile. Ðевозможно прочеÑть файл-ключ. Not a KeePass database. Ðе хранилище KeePass. Unsupported encryption algorithm. Ðлгоритм ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ поддерживаетÑÑ. Unsupported KeePass database version. ВерÑÐ¸Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð° KeePass не поддерживаетÑÑ. Root Корень Unable to calculate master key Ðевозможно вычиÑлить маÑтер-пароль KeePass2Reader Not a KeePass database. Ðе хранилище KeePass. Unsupported KeePass database version. ВерÑÐ¸Ñ Ñ…Ñ€Ð°Ð½Ð¸Ð»Ð¸Ñ‰Ð° KeePass не поддерживаетÑÑ. Wrong key or database file is corrupt. Ðеверный ключ или файл хранилища повреждён. Unable to calculate master key Ðевозможно вычиÑлить маÑтер-пароль The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Выбранный файл от Ñтарой KeePass 1 базы данных (.kdb). Ð’Ñ‹ можете импортировать его, нажав на База Данных > 'Импорт KeePass 1 базы данных'. Это одноÑтороннее перемещение. Ð’Ñ‹ не Ñможете открыть импортированный базу данных на Ñтарой верÑии KeePassX 0,4. Main Fatal error while testing the cryptographic functions. ÐеиÑÐ¿Ñ€Ð°Ð²Ð¸Ð¼Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° в процеÑÑе теÑÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ‡ÐµÑких функций. KeePassX - Error KeePassX — Ошибка MainWindow Database Хранилище Recent databases Ðедавние хранилища Help Помощь Entries ЗапиÑи Copy attribute to clipboard Скопировать атрибут в буфер обмена Groups Группы View Вид Quit Выход About О программе Open database Открыть хранилище Save database Сохранить хранилище Close database Закрыть хранилище New database Ðовое хранилище Add new entry Добавить новую запиÑÑŒ View/Edit entry ПоÑмотреть/редактировать запиÑÑŒ Delete entry Удалить запиÑÑŒ Add new group Добавить новую группу Edit group Редактировать группу Delete group Удалить группу Save database as Сохранить хранилище как Change master key Сменить маÑтер-пароль Database settings Параметры хранилища Import KeePass 1 database Импортировать хранилище KeePass 1 Clone entry Клонировать запиÑÑŒ Find Ðайти Copy username to clipboard Скопировать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² буфер обмена Copy password to clipboard Скопировать пароль в буфер обмена Settings ÐаÑтройки Perform Auto-Type ПроизвеÑти автоввод Open URL Открыть URL Lock databases Заблокировать хранилище Title Заголовок URL URL Notes ÐŸÑ€Ð¸Ð¼ÐµÑ‡Ð°Ð½Ð¸Ñ Show toolbar Показать панель инÑтрументов read-only только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Toggle window Переключить окно Tools ИнÑтрументы Copy username Скопировать Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Copy password Скопировать пароль Export to CSV file ЭкÑпортировать в файл CSV Repair database ВоÑÑтановление хранилища KeePass 2 Database All files Ð’Ñе файлы Save repaired database Сохранить воÑÑтановленное хранилище Error Ошибка Writing the database failed. PasswordGeneratorWidget Password: Пароль: Length: Длина: Character Types Виды Ñимволов Upper Case Letters Заглавные буквы Lower Case Letters Строчные буквы Numbers Цифры Special Characters ОÑобые Ñимволы Exclude look-alike characters ИÑключить похожие Ñимволы Ensure that the password contains characters from every group УбедитеÑÑŒ, что пароль Ñодержит Ñимволы вÑех видов Accept ПринÑть QCommandLineParser Displays version information. Показывает информацию о верÑии. Displays this help. Показывает Ñту Ñправку. Unknown option '%1'. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾Ð¿Ñ†Ð¸Ñ Â«%1». Unknown options: %1. ÐеизвеÑтные опции %1. Missing value after '%1'. Пропущено значение поÑле «%1». Unexpected value after '%1'. Ðепредвиденное значение поÑле «%1». [options] [опции] Usage: %1 ИÑпользование: %1 Options: Опции: Arguments: Ðргументы: QSaveFile Existing file %1 is not writable СущеÑтвующий файл %1 непригоден Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи Writing canceled by application ЗапиÑÑŒ отменена приложением Partial write. Partition full? ЧаÑÑ‚Ð¸Ñ‡Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ. Раздел переполнен? QtIOCompressor Internal zlib error when compressing: ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib при Ñжатии: Error writing to underlying device: Ошибка запиÑи на низлежащее уÑтройÑтво: Error opening underlying device: Ошибка Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ð½Ð¸Ð·Ð»ÐµÐ¶Ð°Ñ‰ÐµÐ³Ð¾ уÑтройÑтва: Error reading data from underlying device: Ошибка Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ñ Ð½Ð¸Ð·Ð»ÐµÐ¶Ð°Ñ‰ÐµÐ³Ð¾ уÑтройÑтва: Internal zlib error when decompressing: ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib при раÑпаковке: QtIOCompressor::open The gzip format not supported in this version of zlib. Формат gzip не поддерживаетÑÑ Ð² Ñтой верÑии zlib. Internal zlib error: ВнутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° zlib: SearchWidget Find: Ðайти: Case sensitive ЧувÑтвительно к региÑтру Current group Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° Root group ÐšÐ¾Ñ€Ð½ÐµÐ²Ð°Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð° SettingsWidget Application Settings Параметры Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ General Общие Security БезопаÑноÑть SettingsWidgetGeneral Remember last databases Помнить поÑледнее хранилище Open previous databases on startup Открывать предыдущее хранилище при запуÑке Automatically save on exit ÐвтоматичеÑки ÑохранÑть при выходе Automatically save after every change ÐвтоматичеÑки ÑохранÑть поÑле каждого Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Minimize when copying to clipboard Сворачивать при копировании в буфер обмена Use group icon on entry creation ИÑпользовать значок группы Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… запиÑей Global Auto-Type shortcut Глобальное Ñочетание клавиш Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð²Ð²Ð¾Ð´Ð° Use entry title to match windows for global auto-type ИÑпользовать заголовок запиÑи Ð´Ð»Ñ Ð¿Ð¾Ð´Ð±Ð¾Ñ€Ð° окон Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ автоввода Language Язык Show a system tray icon Показывать иконку в трее Hide window to system tray when minimized При Ñворачивании прÑтать окно в облаÑть ÑиÑтемных уведомлений Remember last key files Запоминать поÑледние файл-ключи SettingsWidgetSecurity Clear clipboard after Очищать буфер обмена через sec Ñек Lock databases after inactivity of Заблокировать хранилище поÑле неактивноÑти длительноÑтью Show passwords in cleartext by default По умолчанию показывать пароль в открытую Always ask before performing auto-type Ð’Ñегда Ñпрашивать перед тем, как производить автоввод UnlockDatabaseWidget Unlock database Разблокировать хранилище WelcomeWidget Welcome! Добро пожаловать! main KeePassX - cross-platform password manager KeePassX — кроÑÑ-платформенный менеджер паролей filename of the password database to open (*.kdbx) Ð¸Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð° открываемого хранилища паролей (*.kdbx) path to a custom config file путь к Ñвоему файлу наÑтроек key file of the database файл-ключ хранилища keepassx-2.0.3/share/translations/keepassx_sl_SI.ts000066400000000000000000001241231276304217300224560ustar00rootroot00000000000000 AboutDialog About KeePassX O KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX se razÅ¡irja pod GNU General Public License (GPL) licenco verzija 2 ali (po želji) verzija 3. Revision Using: AutoType Auto-Type - KeePassX Samodejno tipkanje - KeePassX Couldn't find an entry that matches the window title: Ne najdem vnosa, ki bi ustrezal: AutoTypeAssociationsModel Window Okno Sequence Sekvenca Default sequence Privzeta sekvenca AutoTypeSelectDialog Auto-Type - KeePassX Samodejno tipkanje - KeePassX Select entry to Auto-Type: Izberi vnos za samodejno tipkanje: ChangeMasterKeyWidget Password Geslo Enter password: Vnesi geslo: Repeat password: Ponovi geslo: Key file Datoteka s kljuÄi Browse Prebrskaj Create Ustvari novo Key files Datoteke s kljuÄi All files Vse datoteke Create Key File... Ustvari datoteko s kljuÄi... Error Napaka Unable to create Key File : Ustvarjanje datoteke s kljuÄi ni uspelo: Select a key file Izberi datoteko s kljući Question VpraÅ¡anje Do you really want to use an empty string as password? Ali res želite uporabiti prazen niz kot geslo? Different passwords supplied. VneÅ¡eni gesli sta razliÄni. Failed to set key file Nastavljanje datoteke s kljuÄi ni uspelo Failed to set %1 as the Key file: %2 Nastavljanje %1 kot datoteko s kljuÄi ni uspelo: %2 DatabaseOpenWidget Enter master key Vnesi glavno geslo Key File: Datoteka s kljuÄi: Password: Geslo: Browse Prebrskaj Error Napaka Unable to open the database. Odpiranje podatkovne baze ni uspelo. Can't open key file Odpiranje datoteke s kljuÄi ni uspelo All files Vse datoteke Key files Datoteke s kljuÄi Select key file Izberi datoteko s kljuÄi DatabaseRepairWidget Repair database Error Can't open key file Database opened fine. Nothing to do. Unable to open the database. Success The database has been successfully repaired You can now save it. Unable to repair the database. DatabaseSettingsWidget Database name: Ime podatkovne baze: Database description: Opis podatkovne baze: Transform rounds: Transform rounds: Default username: Privzeto uporabniÅ¡ko ime: Use recycle bin: Uporaba koÅ¡a: MiB MiB Benchmark Primerjalni preizkus (benchmark) Max. history items: Max. vnosov zgodovine: Max. history size: Max. velikost zgodovine: DatabaseTabWidget Root Koren KeePass 2 Database KeePass 2 podatkovna baza All files Vse datoteke Open database Odpri podatkovno bazo Warning Opozorilo File not found! Datoteke ni mogoÄe najti! Open KeePass 1 database Odpri KeePass 1 podatkovno bazo KeePass 1 database KeePass 1 podatkovna baza All files (*) Vse datoteke (*) Close? Zapri? Save changes? Shrani spremembe? "%1" was modified. Save changes? "%1" spremenjeno. Shrani spremembe? Error Napaka Writing the database failed. Zapis podatkovne baze ni uspel. Save database as Shrani podatkovno bazo kot New database Nova podatkovna baza locked zaklenjeno The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Podatkovna baza ki jo želite odpreti je že odprta v drugem KeePassX. Ali jo vseeno želite odpreti? Lahko jo odprete tudi samo za branje. Lock database Zakleni podatkovno bazo Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Podatkovna baza je trenutno v urejanju, zato je ni mogoÄe zakleniti. DokonÄajte spremembe in poskusite znova. This database has never been saved. You can save the database or stop locking it. Podatkovna baza Å¡e ni bila shranjena. Lahko jo shranite ali prekinete z zaklepanjem. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Podatkovna baza je bila spremenjena. Ali jo želite shraniti? V nasprotnem primeru bodo spremembe izgubljene. "%1" is in edit mode. Discard changes and close anyway? "%1" je v urejanju. Zavrži spremembe in zapri? Export database to CSV file Izvozi podatkovno bazo v CSV datoteko CSV file CSV datoteka Writing the CSV file failed. Pisanje v CSV datoteko ni uspelo The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? DatabaseWidget Change master key Spremeni glavni kljuÄ Delete entry? Izbris vnosa? Do you really want to delete the entry "%1" for good? Ali res želite izbrisati "%1"? Delete entries? Izbris vnosov? Do you really want to delete %1 entries for good? Ali res želite izbrisati %1 vnosov? Move entries to recycle bin? Premik vnosov v koÅ¡? Do you really want to move %n entry(s) to the recycle bin? Ali res želite premakniti %n vnos v koÅ¡?Ali res želite premakniti %n vnosa v koÅ¡?Ali res želite premakniti %n vnose v koÅ¡?Ali res želite premakniti %n - vnosov v koÅ¡? Delete group? Izbris skupine? Do you really want to delete the group "%1" for good? Ali res želite izbrisati skupino "%1"? Current group Trenutna skupina Error Napaka Unable to calculate master key IzraÄun glavnega kljuÄa ni uspel EditEntryWidget Entry Vnos Advanced Napredno Icon Ikona Auto-Type Samodejno tipkanje Properties Lastnosti History Zgodovina Entry history Zgodovina vnosov Add entry Dodaj vnos Edit entry Uredi vnos Error Napaka Different passwords supplied. Gesli se ne ujemata. New attribute Nov atribut Select file Izberi datoteko Unable to open file Datoteke ni mogoÄe odpreti Save attachment Shrani priponko Unable to save the attachment: Priponke ni bilo mogoÄe shraniti: Tomorrow Jutri %n week(s) %n teden%n tedna%n tedni%n tednov %n month(s) %n mesec%n meseca%n meseci%n mesecev 1 year 1 leto EditEntryWidgetAdvanced Additional attributes Dodatni atributi Add Dodaj Edit Uredi Remove Odstrani Attachments Priponke Save Shrani Open Odpri EditEntryWidgetAutoType Enable Auto-Type for this entry OmogoÄi samodejno tipkanje za ta vnos Inherit default Auto-Type sequence from the group Dedovanje privzete sekvence za samodejno tipkanje iz skupine Use custom Auto-Type sequence: Uporabi poljubno sekvenco za samodejno tipkanje: + + - - Window title: Naslov okna: Use default sequence Uporabi privzeto sekvenco Set custom sequence: Nastavi privzeto sekvenco: EditEntryWidgetHistory Show Prikaži Restore Obnovi Delete IzbriÅ¡i Delete all IzbriÅ¡i vse EditEntryWidgetMain Title: Naslov: Username: UporabniÅ¡ko ime: Password: Geslo: Repeat: Ponovi geslo: Gen. Samodejno generiraj URL: URL: Expires PoteÄe Presets Prednastavljeno Notes: Opombe: EditGroupWidget Group Skupina Icon Ikona Properties Lastnosti Add group Dodaj skupino Edit group Uredi skupino Enable OmogoÄi Disable OnemogoÄi Inherit from parent group (%1) Podeduj iz nadrejene skupine (%1) EditGroupWidgetMain Name Ime Notes Opombe Expires PoteÄe Search IÅ¡Äi Auto-type Samodejno tipkanje Use default auto-type sequence of parent group Za samodejno tipkanje uporabi privzeto sekvenco nadrejene skupine Set default auto-type sequence Nastavi privzeto sekvenco za samodejno tipkanje EditWidgetIcons Use default icon Uporabi privzeto ikono Use custom icon Uporabi ikono po meri Add custom icon Dodaj poljubno ikono Delete custom icon IzbriÅ¡i ikono Images Slike All files Vse datoteke Select Image Izberi sliko Can't delete icon! Ikone ni mogoÄe izbrisati! Can't delete icon. Still used by %n item(s). Ikone ni mogoÄe izbrisati. Uporablja jo Å¡e %n vnos.Ikone ni mogoÄe izbrisati. Uporabljata jo Å¡e %n vnosa.Ikone ni mogoÄe izbrisati. Uporabljajo jo Å¡e %n vnosi.Ikone ni mogoÄe izbrisati. Uporablja jo Å¡e %n vnosov. EditWidgetProperties Created: Ustvarjeno: Modified: Spremenjeno: Accessed: Zadnji dostop: Uuid: Uuid: EntryAttributesModel Name Ime EntryHistoryModel Last modified Zadnja sprememba Title Naslov Username UporabniÅ¡ko ime URL URL EntryModel Group Skupina Title Naslov Username UporabniÅ¡ko ime URL URL Group Recycle Bin KoÅ¡ KeePass1OpenWidget Import KeePass1 database Uvozi KeePass1 podatkovno bazo Error Napaka Unable to open the database. Odpiranje podatkovne baze ni uspelo. KeePass1Reader Unable to read keyfile. Branje datoteke s kljuÄi ni uspelo. Not a KeePass database. Datoteka ni KeePass podatkovna baza. Unsupported encryption algorithm. Algoritem za enkripcijo ni podprt. Unsupported KeePass database version. RazliÄica KeePass podatkovne baze ni podprta. Root Koren Unable to calculate master key IzraÄun glavnega kljuÄa ni uspel KeePass2Reader Not a KeePass database. Datoteka ni KeePass podatkovna baza. Unsupported KeePass database version. RazliÄica KeePass podatkovne baze ni podprta. Wrong key or database file is corrupt. NapaÄno geslo ali pa je podatkovna baza poÅ¡kodovana. Unable to calculate master key IzraÄun glavnega kljuÄa ni uspel The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Main Fatal error while testing the cryptographic functions. Napaka pri testiranju kriptografskih funkcij. KeePassX - Error KeePassX - Napaka MainWindow Database Podatkovna baza Recent databases Nedavne podatkovne baze Help PomoÄ Entries Vnosi Copy attribute to clipboard Kopiraj atribut v odložiÅ¡Äe Groups Skupine View Pogled Quit Izhod About O programu Open database Odpri podatkovno bazo Save database Shrani podatkovno bazo Close database Zapri podatkovno bazo New database Nova podatkovna baza Add new entry Dodaj vnos View/Edit entry Uredi vnos Delete entry IzbriÅ¡i vnos Add new group Dodaj novo skupino Edit group Uredi skupino Delete group IzbriÅ¡i skupino Save database as Shrani podatkovno bazo kot Change master key Spremeni glavni kljuÄ Database settings Nastavitve podatkovne baze Import KeePass 1 database Uvozi KeePass 1 podatkovno bazo Clone entry Kloniraj vnos Find IÅ¡Äi Copy username to clipboard Kopiraj uporabniÅ¡ko ime v odložiÅ¡Äe Copy password to clipboard Kopiraj geslo v odložiÅ¡Äe Settings Nastavitve Perform Auto-Type Izvedi samodejno tipkanje Open URL Odpri URL Lock databases Zakleni podatkovne baze Title Naslov URL URL Notes Opombe Show toolbar Prikaži orodno vrstico read-only samo za branje Toggle window Preklopi okno Tools Orodja Copy username Kopiraj uporabniÅ¡ko ime Copy password Kopiraj geslo Export to CSV file Izvozi v CSV datoteko Repair database KeePass 2 Database All files Save repaired database Error Writing the database failed. PasswordGeneratorWidget Password: Geslo: Length: Dolžina: Character Types Tipi znakov Upper Case Letters Velike Ärke Lower Case Letters Male Ärke Numbers Å tevilke Special Characters Posebni znaki Exclude look-alike characters IzkljuÄi podobne znake Ensure that the password contains characters from every group Geslo naj vsebuje znake iz vsake skupine Accept Sprejmi QCommandLineParser Displays version information. Prikaže informacije o razliÄici. Displays this help. Prikaže pomoÄ. Unknown option '%1'. Neznana izbrira %1. Unknown options: %1. Neznane izbire: %1. Missing value after '%1'. ManjkajoÄa vrednost po '%1'. Unexpected value after '%1'. NepriÄakovana vrednost po '%1'. [options] [možnosti] Usage: %1 Uporaba: %1 Options: Možnosti: Arguments: Argumenti: QSaveFile Existing file %1 is not writable ObstojeÄa datoteka %1 ni zapisljiva Writing canceled by application Aplikacija je prekinila pisanje Partial write. Partition full? Delno pisanje. Polna particija? QtIOCompressor Internal zlib error when compressing: Notranja zlib napaka pri stiskanju: Error writing to underlying device: Napaka pri pisanju na napravo: Error opening underlying device: Napaka pri odpiranju naprave: Error reading data from underlying device: Napak pri branju iz naprave: Internal zlib error when decompressing: Notranja zlib napaka pri dekompresiranju: QtIOCompressor::open The gzip format not supported in this version of zlib. Ta razliÄica zlib ne podpira gzip formata. Internal zlib error: Notranja zlib napaka: SearchWidget Find: IÅ¡Äi: Case sensitive Razlikuj med velikimi in malimi Ärkami Current group Trenutna skupina Root group Korenska skupina SettingsWidget Application Settings Nastavitve aplikacije General SploÅ¡no Security Varnost SettingsWidgetGeneral Remember last databases Zapomni si zadnje podatkovne baze Open previous databases on startup Odpri prejÅ¡nje podatkovne baze ob zagonu programa Automatically save on exit Samodejno shrani ob izhodu Automatically save after every change Samodejno shrani po vsaki spremembi Minimize when copying to clipboard Minimiziraj pri kopiranju v odložiÅ¡Äe Use group icon on entry creation Za nove vnose uporabi ikono skupine Global Auto-Type shortcut Globalna bližnjica za samodejno tipkanje Use entry title to match windows for global auto-type Uporabi ujemanje naslova vnosa in naslova okna pri samodejnem tipkanju Language Jezik Show a system tray icon Pokaži ikono v sistemski vrstici Hide window to system tray when minimized Minimiziraj v sistemsko vrstico Remember last key files Zapomni si zadnje datoteke s kljuÄi SettingsWidgetSecurity Clear clipboard after PobriÅ¡i odložiÅ¡Äe po sec sekundah Lock databases after inactivity of Zakleni podatkovne baze po neaktivnosti Show passwords in cleartext by default Gesla privzeto v Äistopisu Always ask before performing auto-type Pred izvedbo samodejnega tipkanja vpraÅ¡aj za potrditev UnlockDatabaseWidget Unlock database Odkleni podatkovno bazo WelcomeWidget Welcome! DobrodoÅ¡li! main KeePassX - cross-platform password manager KeePassX - urejevalnik gesel za razliÄne platforme filename of the password database to open (*.kdbx) konÄnica podatkovne baze (*.kdbx) path to a custom config file pot do konfiguracijske datoteke po meri key file of the database datoteka s kljuÄi podatkovne baze keepassx-2.0.3/share/translations/keepassx_sv.ts000066400000000000000000001235501276304217300221000ustar00rootroot00000000000000 AboutDialog About KeePassX Om KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. Keepassx distribueras enligt villkoren i GNU General Public License (GPL) version 2 eller (om du vill) version 3. Revision Revision Using: Använder: AutoType Auto-Type - KeePassX Auto-skriv - KeePassX Couldn't find an entry that matches the window title: Kunde inte hitta en post som matchar fönstertiteln: AutoTypeAssociationsModel Window Fönster Sequence Sekvens Default sequence Standard sekvens AutoTypeSelectDialog Auto-Type - KeePassX Auto-skriv - KeePassX Select entry to Auto-Type: Välj post att auto-skriva ChangeMasterKeyWidget Password Lösenord Enter password: Ange lösenord: Repeat password: Repetera lösenord: Key file Nyckel-fil Browse Bläddra Create Skapa Key files Nyckel-filer All files Alla filer Create Key File... Skapa nyckel-fil... Error Fel Unable to create Key File : Kunde inte skapa nyckel-fil Select a key file Välj nyckel-fil Question FrÃ¥ga Do you really want to use an empty string as password? Vill du verkligen vill använda en tom sträng som lösenord? Different passwords supplied. Olika lösenord angivna Failed to set key file Kunde inte sätta nyckel-fil Failed to set %1 as the Key file: %2 Kunde inte sätta %1 som nyckel-fil: %2 DatabaseOpenWidget Enter master key Ange huvud lösenord Key File: Nyckel-fil: Password: Lösenord: Browse Bläddra Error Fel Unable to open the database. Kunde inte öppna databas. Can't open key file Kan inte öppna nyckel-fil All files Alla filer Key files Nyckel-filer Select key file Välj nyckel-fil DatabaseRepairWidget Repair database Laga databasen Error Fel Can't open key file Kan inte öppna nyckelfilen Database opened fine. Nothing to do. Databas öppnades fint. Inget att göra. Unable to open the database. Misslyckades att öppna databasen. Success Succé The database has been successfully repaired You can now save it. Databasens reparation har varit lyckad. Du kan nu spara den. Unable to repair the database. Misslyckades med att laga databasen. DatabaseSettingsWidget Database name: Databasnamn: Database description: Databasbeskrivning: Transform rounds: Transformerings varv: Default username: Standard användarnamn: Use recycle bin: Använd papperskorg: MiB MiB Benchmark Benchmark Max. history items: Maxantal historik poster: Max. history size: Maximal historik storlek: DatabaseTabWidget Root Root KeePass 2 Database KeePass 2 Databas All files Alla filer Open database Öppna databas Warning Varning File not found! Filen kunde inte hittas! Open KeePass 1 database Öppna KeePass 1 databas KeePass 1 database KeePass 1 databas All files (*) Alla filer (*) Close? Stäng? Save changes? Spara ändringar? "%1" was modified. Save changes? "%1" har ändrats. Spara ändringarna? Error Fel Writing the database failed. Kunde inte skriva till databasen. Save database as Spara databas som New database Ny databas locked lÃ¥st The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Databasen som du försöker öppna är lÃ¥st av en annan instans av KeePassX. Vill du öppna den ändÃ¥? Databasen kommer dÃ¥ att öppnas skrivskyddad. Lock database LÃ¥s databasen Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Kan inte lÃ¥sa databasen eftersom du hÃ¥ller pÃ¥ att redigera den. Tryck avbryt för att ansluta dina ändringar alternativt kasta dem. This database has never been saved. You can save the database or stop locking it. Databasen has aldrig sparats. Spara databasen eller sluta lÃ¥s den. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Databasen har ändrats. Vill du spara databasen innen du lÃ¥ser den? I annat fall försvinner ändringarna. "%1" is in edit mode. Discard changes and close anyway? "%1" är i redigeringsläge. Kasta ändringarna och stäng endÃ¥? Export database to CSV file Exportera databasen till en CSV-fil CSV file CSV-fil Writing the CSV file failed. Kunde inte skriva till CSV-filen The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Databasen du försöker spara som är lÃ¥st av en annan instans av KeePassX. Vill du spara endÃ¥? DatabaseWidget Change master key Ändra huvud lösenord Delete entry? Ta bort post? Do you really want to delete the entry "%1" for good? Vill du verkligen ta bort "%1" för gott? Delete entries? Ta bort poster? Do you really want to delete %1 entries for good? Vill du verkligen ta bort %1 poser för gott? Move entries to recycle bin? Lägg poster i papperskorgen? Do you really want to move %n entry(s) to the recycle bin? Vill du verkligen flytta %n post till papperskorgen?Vill du verkligen flytta %n poster till papperskorgen? Delete group? Ta bort grupp? Do you really want to delete the group "%1" for good? Vill du verkligen ta bort gruppen "%1" för gott? Current group Nuvarande grupp Error Fel Unable to calculate master key Kunde inte räkna nu master-nyckeln EditEntryWidget Entry Post Advanced Avancerat Icon Ikon Auto-Type Auto-skriv Properties Egenskaper History Historik Entry history Posthistork Add entry Lägg till post Edit entry Ändra post Error Fel Different passwords supplied. Olika lösenord angivna New attribute Nytt attribut Select file Välj fil Unable to open file Kunde inte öppna filen. Save attachment Spara bifogad fil Unable to save the attachment: Kunde inte spara bifogad fil: Tomorrow Imorgon %n week(s) %n vecka%n veckor %n month(s) %n mÃ¥nad%n mÃ¥nader 1 year 1 Ã¥r EditEntryWidgetAdvanced Additional attributes Ytterligare attribut Add Lägg till Edit Ändra Remove Ta bort Attachments Bilagor Save Spara Open Öppna EditEntryWidgetAutoType Enable Auto-Type for this entry SlÃ¥ pÃ¥ auto-skriv för denna post Inherit default Auto-Type sequence from the group Ärv standard auto-skriv sekvens för grupp Use custom Auto-Type sequence: Använd egen auto-skriv sekvens: + + - - Window title: Fönster titel: Use default sequence Använd standard sekvens Set custom sequence: Egen sekvens: EditEntryWidgetHistory Show Visa Restore Ã…terställ Delete Ta bort Delete all Ta bort alla EditEntryWidgetMain Title: Titel: Username: Användarnamn: Password: Lösenord: Repeat: Repetera: Gen. Gen. URL: URL: Expires GÃ¥r ut Presets Förinställningar Notes: Anteckningar: EditGroupWidget Group Grupp Icon Ikon Properties Egenskaper Add group Lägg till grupp Edit group Ändra grupp Enable SlÃ¥ pÃ¥ Disable Stäng av Inherit from parent group (%1) Ärv frÃ¥n förälder grupp (%1) EditGroupWidgetMain Name Namn Notes Anteckningar Expires GÃ¥r ut Search Sök Auto-type Auto-skriv Use default auto-type sequence of parent group Använd standard auto-skriv sekvensen frÃ¥n föräldergruppen Set default auto-type sequence Ange standard auto-skriv sekvens EditWidgetIcons Use default icon Använd standard ikon Use custom icon Använd egen ikon Add custom icon Lägg till egen ikon Delete custom icon Ta bort egen ikon Images Bilder All files Alla filer Select Image Välj bild Can't delete icon! Kan inte ta bort ikon! Can't delete icon. Still used by %n item(s). Kan inte ta bort ikonen. Den används fortfarande av %n postKan inte ta bort ikonen. Den används fortfarande av %n poster EditWidgetProperties Created: Skapad: Modified: Ändrad: Accessed: Läst: Uuid: UUID: EntryAttributesModel Name Namn EntryHistoryModel Last modified Senast ändrad Title Titel Username Användarnamn URL URL EntryModel Group Grupp Title Titel Username Användarnamn URL URL Group Recycle Bin Papperskorg KeePass1OpenWidget Import KeePass1 database Importera KeePass1 databas Error Fel Unable to open the database. Kunde inte öppna databas. KeePass1Reader Unable to read keyfile. Kunde inte läsa nyckel-filen. Not a KeePass database. Inte en KeePass databas Unsupported encryption algorithm. Krypteringsalgoritnmen stöds ej Unsupported KeePass database version. KeePass databas versionen stöds ej. Root Root Unable to calculate master key Kunde inte räkna nu master-nyckeln KeePass2Reader Not a KeePass database. Inte en KeePass databas. Unsupported KeePass database version. KeePass databas versionen stöds ej. Wrong key or database file is corrupt. Fel lösenord eller korrupt databas-fil Unable to calculate master key Kunde inte räkna nu master-nyckeln The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Den valda filen är en gammal KeePass 1 databas (.kdb) Du kan importera den genom att klicka pÃ¥ Databas > Importera KeePass 1 databas. Detta är en envägsmigration. Du kan inte spara en databas som KeePass1 databas. Det som används i KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Allvarligt fel vid testning av kryptografiska funktioner. KeePassX - Error KeePassX - Fel MainWindow Database Databas Recent databases Senast använda databaser Help Hjälp Entries Poster Copy attribute to clipboard Kopiera attribut Groups Grupper View Vy Quit Avsluta About Om Open database Öppna databas Save database Spara databas Close database Stäng databas New database Ny databas Add new entry Lägg till ny post View/Edit entry Visa/ändra post Delete entry Ta bort post Add new group Lägg till ny grupp Edit group Ändra grupp Delete group Ta bort grupp Save database as Spara databas som Change master key Ändra huvud lösenord Database settings Databasinställningar Import KeePass 1 database Importera KeePass1 databas Clone entry Klona post Find Sök Copy username to clipboard Kopiera användarnamn Copy password to clipboard Kopiera lösenord Settings Inställningar Perform Auto-Type Utför auto-skriv Open URL Öppna URL Lock databases LÃ¥s databaser Title Titel URL URL Notes Anteckningar Show toolbar Visa verktygsfält read-only läs bara Toggle window Visa/dölj fönster Tools Verktyg Copy username Kopiera användarnamn Copy password Kopiera lösenord Export to CSV file Exportera till CSV-fil Repair database Laga databasen KeePass 2 Database KeePass 2 databas All files Alla filer Save repaired database Spara lagad databas Error Fel Writing the database failed. Misslyckades med att skriva till databasen. PasswordGeneratorWidget Password: Lösenord: Length: Längd: Character Types Teckentyper Upper Case Letters Versaler Lower Case Letters Gemener Numbers Siffror Special Characters Specialtecken Exclude look-alike characters Uteslut liknande tecken Ensure that the password contains characters from every group Säkerställ att lösenordet innehÃ¥ller tecken frÃ¥n varje grupp Accept Acceptera QCommandLineParser Displays version information. Visar versionsinformation. Displays this help. Visa denna hjälp. Unknown option '%1'. Okänt alternativ: '%1' Unknown options: %1. Okända alternativ: '%1' Missing value after '%1'. Saknar värde efter '%1' Unexpected value after '%1'. Oväntat värde efter '%1' [options] [alternativ] Usage: %1 Användning: %1 Options: Alternativ: Arguments: Argument: QSaveFile Existing file %1 is not writable Den existerande filen %1 är inte skrivbar Writing canceled by application Skrivning avbruten av applikation Partial write. Partition full? Delvis skrivet. Är partitionen full? QtIOCompressor Internal zlib error when compressing: Internt zlib fel vid komprimering: Error writing to underlying device: Fel vid skrivning till underliggande enhet: Error opening underlying device: Fel vid öppning av underliggande enhet: Error reading data from underlying device: Fel vid läsning frÃ¥n underliggande enhet: Internal zlib error when decompressing: Internt zlib fel vid extrahering: QtIOCompressor::open The gzip format not supported in this version of zlib. Gzip formatet stöds inte av denna version av zlib. Internal zlib error: Internt zlib fel: SearchWidget Find: Sök: Case sensitive Skiftlägeskänslig Current group Nuvarande grupp Root group Root grupp SettingsWidget Application Settings Applikationsinställningar General Allmän Security Säkerhet SettingsWidgetGeneral Remember last databases KomihÃ¥g senaste databasen Open previous databases on startup Öppna senaste databasen när programmet startar Automatically save on exit Spara automatiskt när applikationen anslutas Automatically save after every change Spara automatiskt efter varje ändring Minimize when copying to clipboard Minimera vid kopiering Use group icon on entry creation Använd gruppens ikon för nya poster Global Auto-Type shortcut Globalt auto-skriv kortkommando Use entry title to match windows for global auto-type Använda postens titel till matchning med fönster för globalt auto-skriv Language SprÃ¥k Show a system tray icon Visa statusfält ikon Hide window to system tray when minimized Vid minimering, minimera fönstret till systemfältet Remember last key files KomihÃ¥g senaste nyckel-filen SettingsWidgetSecurity Clear clipboard after Rensa urklipp efter sec sek Lock databases after inactivity of LÃ¥s databaser efter inaktivitet i Show passwords in cleartext by default Visa lösenord i klartext som standard Always ask before performing auto-type FrÃ¥ga alltid innan auto-skriv utförs UnlockDatabaseWidget Unlock database LÃ¥s upp databas WelcomeWidget Welcome! Välkommen! main KeePassX - cross-platform password manager KeePassX - plattformsoberoende lösenordshanterare filename of the password database to open (*.kdbx) namn pÃ¥ databas fil att öppna (*.kdbx) path to a custom config file Sökväg till egen konfigurations-fil key file of the database nyckel-fil för databas keepassx-2.0.3/share/translations/keepassx_uk.ts000066400000000000000000001371441276304217300220730ustar00rootroot00000000000000 AboutDialog About KeePassX Про KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX розповÑюджуєтьÑÑ Ð½Ð° умовах Загальної публічної ліцензії GNU (GPL) верÑÑ–Ñ— 2 або (на ваш вибір) верÑÑ–Ñ— 3. Revision Ð ÐµÐ²Ñ–Ð·Ñ–Ñ Using: ВикориÑтаннÑ: AutoType Auto-Type - KeePassX ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ â€” KeePassX Couldn't find an entry that matches the window title: Ðе знайдено запиÑ, що відповідає заголовку вікна: AutoTypeAssociationsModel Window Вікно Sequence ПоÑлідовніÑть Default sequence Типова поÑлідовніÑть AutoTypeSelectDialog Auto-Type - KeePassX ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ â€” KeePassX Select entry to Auto-Type: Оберіть Ð·Ð°Ð¿Ð¸Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ: ChangeMasterKeyWidget Password Пароль Enter password: Введіть пароль: Repeat password: Повторіть пароль: Key file Файл-ключ Browse ОглÑд Create Створити Key files Файли-ключі All files Ð’ÑÑ– файли Create Key File... Створити файл-ключ... Error Помилка Unable to create Key File : Ðеможливо Ñтворити файл-ключ: Select a key file Обрати файл-ключ Question ÐŸÐ¸Ñ‚Ð°Ð½Ð½Ñ Do you really want to use an empty string as password? Ви дійÑно хочете викориÑтати порожній Ñ€Ñдок в ÑкоÑті паролÑ? Different passwords supplied. Паролі не Ñпівпадають. Failed to set key file Ðе вдалоÑÑ Ð²Ñтановити файл-ключ Failed to set %1 as the Key file: %2 Ðе вдалоÑÑ Ð²Ñтановити %1 в ÑкоÑті файл-ключа: %2 DatabaseOpenWidget Enter master key Введіть майÑтер-пароль Key File: Файл-ключ: Password: Пароль: Browse ОглÑд Error Помилка Unable to open the database. Ðеможливо відкрити Ñховище. Can't open key file Ðе вдаєтьÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл-ключ All files Ð’ÑÑ– файли Key files Файли-ключі Select key file Оберіть файл-ключ DatabaseRepairWidget Repair database Error Can't open key file Database opened fine. Nothing to do. Unable to open the database. Success The database has been successfully repaired You can now save it. Unable to repair the database. DatabaseSettingsWidget Database name: Ðазва Ñховища: Database description: ÐžÐ¿Ð¸Ñ Ñховища: Transform rounds: Раундів перетворень: Default username: Типове Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: Use recycle bin: ВикориÑтати Ñмітник: MiB MiB Benchmark Перевірка Max. history items: МакÑимум запиÑів Ñ–Ñторії: Max. history size: МакÑимальний розмір Ñ–Ñторії: DatabaseTabWidget Root Корінь KeePass 2 Database Сховище KeePass 2 All files Ð’ÑÑ– файли Open database Відкрити Ñховище Warning Увага File not found! Файл не знайдено! Open KeePass 1 database Відкрити Ñховище KeePass 1 KeePass 1 database Сховище KeePass 1 All files (*) Ð’ÑÑ– файли (*) Close? Закрити? Save changes? Зберегти зміни? "%1" was modified. Save changes? "%1" змінено. Зберегти зміни? Error Помилка Writing the database failed. ЗапиÑати Ñховище не вдалоÑÑ. Save database as Зберегти Ñховище Ñк New database Ðове Ñховище locked заблоковано The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. Сховище, Ñке ви хочете відкрити, заблоковано іншою запущеною копією KeePassX. Ð’Ñе одно відкрити? Сховище буде відкрито тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ. Lock database Заблокувати Ñховище Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. Ðе можливо заблокувати базу даних, Ñку ви в даний Ñ‡Ð°Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÑ”Ñ‚Ðµ. ÐатиÑніть СкаÑувати, щоб завершити зміни або ÑкаÑувати Ñ—Ñ…. This database has never been saved. You can save the database or stop locking it. Це Ñховище не було збережено. Ви можете зберегти Ñховище або зупинити його блокуваннÑ. This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. Ð’ Ñховище було внеÑено зміни. Ви хочете зберегти його перед блокуваннÑм? Інакше внеÑені зміни буде втрачено. "%1" is in edit mode. Discard changes and close anyway? «%1» в режимі редагуваннÑ. Відхилити зміни Ñ– вÑе одно закрити? Export database to CSV file ЕкÑпортувати Ñховище в файл CSV CSV file Файл CSV Writing the CSV file failed. Ðе вдалоÑÑŒ запиÑати CSV файл. The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? Це Ñховище заблоковано іншою запущеною копією KeePassX. Ви впевнені, що хочете зберегти його? DatabaseWidget Change master key Змінити майÑтер-пароль Delete entry? Видалити запиÑ? Do you really want to delete the entry "%1" for good? Ви дійÑно хочете видалити Ð·Ð°Ð¿Ð¸Ñ Â«%1»? Delete entries? Видалити запиÑи? Do you really want to delete %1 entries for good? Ви дійÑно хочете назавжди видалити запиÑи - %1 ? Move entries to recycle bin? ПереміÑтити запиÑи до Ñмітника? Do you really want to move %n entry(s) to the recycle bin? Ви дійÑно хочете переміÑтити %n Ð·Ð°Ð¿Ð¸Ñ Ð² Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑи в Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑів в Ñмітник? Delete group? Видалити групу? Do you really want to delete the group "%1" for good? Ви дійÑно хочете назавжди видалити групу «%1»? Current group Поточна група Error Помилка Unable to calculate master key Ðеможливо вирахувати майÑтер-пароль EditEntryWidget Entry Ð—Ð°Ð¿Ð¸Ñ Advanced Розширені Icon Значок Auto-Type ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Properties Параметри History ІÑÑ‚Ð¾Ñ€Ñ–Ñ Entry history ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð·Ð°Ð¿Ð¸Ñу Add entry Додати Ð·Ð°Ð¿Ð¸Ñ Edit entry Змінити Ð·Ð°Ð¿Ð¸Ñ Error Помилка Different passwords supplied. Паролі не Ñпівпадають. New attribute Ðовий атрибут Select file Вибрати файл Unable to open file Ðеможливо відкрити файл Save attachment Зберегти Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Unable to save the attachment: Ðеможливо зберегти вкладеннÑ: Tomorrow Завтра %n week(s) %n тиждень%n тижні%n тижнів %n month(s) %n міÑÑць%n міÑÑці%n міÑÑців 1 year 1 рік EditEntryWidgetAdvanced Additional attributes Додаткові атрибути Add Додати Edit Змінити Remove Видалити Attachments Ð’ÐºÐ»Ð°Ð´ÐµÐ½Ð½Ñ Save Зберегти Open Відкрити EditEntryWidgetAutoType Enable Auto-Type for this entry Увімкнути Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ запиÑу Inherit default Auto-Type sequence from the group УÑпадкувати типову поÑлідовніÑть Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ групи Use custom Auto-Type sequence: ВикориÑтовувати Ñвою поÑлідовніÑть автозаповненнÑ: + + - - Window title: Заголовок вікна: Use default sequence ВикориÑтовувати типову поÑлідовніÑть Set custom sequence: Ð’Ñтановити Ñвою поÑлідовніÑть: EditEntryWidgetHistory Show Показати Restore Відновити Delete Видалити Delete all Видалити вÑе EditEntryWidgetMain Title: Заголовок: Username: Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача: Password: Пароль: Repeat: Пароль ще раз: Gen. Генер. URL: URL: Expires ЗакінчуєтьÑÑ Presets Заготовки Notes: Примітки: EditGroupWidget Group Група Icon Значок Properties ВлаÑтивоÑті Add group Додати групу Edit group Редагувати групу Enable Увімкнено Disable Вимкнено Inherit from parent group (%1) УÑпадкувати від батьківÑької групи (%1) EditGroupWidgetMain Name Ð†Ð¼â€™Ñ Notes Примітки Expires ЗакінчуєтьÑÑ Search Пошук Auto-type ÐÐ²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Use default auto-type sequence of parent group ВикориÑтовувати типову поÑлідовніÑть Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð±Ð°Ñ‚ÑŒÐºÑ–Ð²Ñької групи Set default auto-type sequence Типова поÑлідовніÑть Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ EditWidgetIcons Use default icon ВикориÑтовувати типовий значок Use custom icon ВикориÑтовувати Ñвій значок Add custom icon Додати Ñвій значок Delete custom icon Видалити Ñвій значок Images Ð—Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ All files Ð’ÑÑ– файли Select Image Вибір Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Can't delete icon! Ðеможливо видалити значок! Can't delete icon. Still used by %n item(s). Ви дійÑно хочете переміÑтити %n Ð·Ð°Ð¿Ð¸Ñ Ð² Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑи в Ñмітник?Ви дійÑно хочете переміÑтити %n запиÑів в Ñмітник? EditWidgetProperties Created: Створено: Modified: Змінено: Accessed: ДоÑтуп: Uuid: Uuid: EntryAttributesModel Name Ð†Ð¼â€™Ñ EntryHistoryModel Last modified ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð° Title Заголовок Username Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача URL URL EntryModel Group Група Title Заголовок Username Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача URL URL Group Recycle Bin Смітник KeePass1OpenWidget Import KeePass1 database Імпортувати Ñховище KeePass 1 Error Помилка Unable to open the database. Ðеможливо відкрити Ñховище. KeePass1Reader Unable to read keyfile. Ðеможливо прочитати файл-ключ. Not a KeePass database. Це не Ñховище KeePass. Unsupported encryption algorithm. Ðлгоритм ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ. Unsupported KeePass database version. ВерÑÑ–Ñ Ñховища KeePass не підтримуєтьÑÑ. Root Корінь Unable to calculate master key Ðеможливо вирахувати майÑтер-пароль KeePass2Reader Not a KeePass database. Ðе Ñховище KeePass. Unsupported KeePass database version. ВерÑÑ–Ñ Ñховища KeePass не підтримуєтьÑÑ. Wrong key or database file is corrupt. Ðеправильний ключ або файл Ñховища пошкоджено. Unable to calculate master key Ðеможливо вирахувати майÑтер-пароль The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. Обрано файл Ñховища попередньої верÑÑ–Ñ— KeePass 1 (.kdb). Ви можете імпортувати його, натиÑнувши Сховище > 'Імпортувати Ñховище KeePass 1'. Це одноÑторонній ÑпоÑіб міграції. Ви не зможете відкрити імпортоване Ñховище в попередній верÑÑ–Ñ— KeePassX 0.4. Main Fatal error while testing the cryptographic functions. Ðевиправна помилка в процеÑÑ– теÑÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÑ€Ð¸Ð¿Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ‡Ð½Ð¸Ñ… функцій. KeePassX - Error KeePassX — Помилка MainWindow Database Сховище Recent databases Ðедавні Ñховища Help Довідка Entries ЗапиÑи Copy attribute to clipboard Копіювати атрибут в буфер обміну Groups Групи View ВиглÑд Quit Вихід About Про програму Open database Відкрити Ñховище Save database Зберегти Ñховище Close database Закрити Ñховище New database Ðове Ñховище Add new entry Додати новий Ð·Ð°Ð¿Ð¸Ñ View/Edit entry ПроглÑнути/змінити Ð·Ð°Ð¿Ð¸Ñ Delete entry Видалити Ð·Ð°Ð¿Ð¸Ñ Add new group Додати нову групу Edit group Редагувати групу Delete group Видалити групу Save database as Зберегти Ñховище Ñк Change master key Змінити майÑтер-пароль Database settings Параметри Ñховища Import KeePass 1 database Імпортувати Ñховище KeePass 1 Clone entry Клонувати Ð·Ð°Ð¿Ð¸Ñ Find Знайти Copy username to clipboard Копіювати Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача в буфер обміну Copy password to clipboard Копіювати пароль в буфер обміну Settings ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Perform Auto-Type ЗдійÑнити Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Open URL Відкрити URL Lock databases Заблокувати Ñховище Title Заголовок URL URL Notes Примітки Show toolbar Показати панель инÑтрументів read-only тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Toggle window Перемкнути вікно Tools ІнÑтрументи Copy username Копіювати Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача Copy password Копіювати пароль Export to CSV file ЕкÑпортувати в файл CSV Repair database KeePass 2 Database All files Save repaired database Error Writing the database failed. PasswordGeneratorWidget Password: Пароль: Length: Довжина: Character Types Види Ñимволів Upper Case Letters Великі літери Lower Case Letters Малі літери Numbers Цифри Special Characters Спеціальні Ñимволи Exclude look-alike characters Виключити неоднозначні Ñимволи Ensure that the password contains characters from every group ПереконатиÑÑ, що пароль міÑтить Ñимволи вÑÑ–Ñ… видів Accept ПрийнÑти QCommandLineParser Displays version information. Показує інформацію про верÑÑ–ÑŽ. Displays this help. Показує цю довідку. Unknown option '%1'. Ðевідома Ð¾Ð¿Ñ†Ñ–Ñ Â«%1». Unknown options: %1. Ðевідомі опції %1. Missing value after '%1'. Пропущено Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Â«%1». Unexpected value after '%1'. Ðепередбачене Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Â«%1». [options] [опції] Usage: %1 ВикориÑтаннÑ: %1 Options: Опції: Arguments: Ðргументи: QSaveFile Existing file %1 is not writable ІÑнуючий файл %1 непридатний Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу Writing canceled by application Ð—Ð°Ð¿Ð¸Ñ Ð²Ñ–Ð´Ð¼Ñ–Ð½ÐµÐ½Ð¾ заÑтоÑунком Partial write. Partition full? ЧаÑтковий запиÑ. Разділ переповнений? QtIOCompressor Internal zlib error when compressing: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib при ÑтиÑненні: Error writing to underlying device: Помилка запиÑу на оÑновний приÑтрій: Error opening underlying device: Помилка Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð¾Ñновного приÑтрою: Error reading data from underlying device: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð· оÑновного приÑтрою: Internal zlib error when decompressing: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib при розпакуванні: QtIOCompressor::open The gzip format not supported in this version of zlib. Формат gzip не підтримуєтьÑÑ Ð² цій верÑÑ–Ñ— zlib. Internal zlib error: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° zlib: SearchWidget Find: Знайти: Case sensitive ВраховуєтьÑÑ Ñ€ÐµÐ³Ñ–Ñтр Current group Поточна група Root group Коренева група SettingsWidget Application Settings Параметри заÑтоÑунку General Загальні Security Безпека SettingsWidgetGeneral Remember last databases Пам’Ñтати оÑтаннє Ñховище Open previous databases on startup Відкривати оÑтаннє Ñховище під Ñ‡Ð°Ñ Ð·Ð°Ð¿ÑƒÑку Automatically save on exit Ðвтоматично зберігати при виході Automatically save after every change Ðвтоматично зберігати піÑÐ»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ— зміни Minimize when copying to clipboard Згортати при копіюванні до буфера обміну Use group icon on entry creation ВикориÑтовувати Ð´Ð»Ñ Ð½Ð¾Ð²Ð¸Ñ… запиÑів значок групи Global Auto-Type shortcut Глобальні ÑÐ¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ ÐºÐ»Ð°Ð²Ñ–Ñˆ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Use entry title to match windows for global auto-type ВикориÑтовувати заголовок запиÑу Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ вікон Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ Ð°Ð²Ñ‚Ð¾Ð·Ð°Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Language Мова Show a system tray icon Показувати значок в треї Hide window to system tray when minimized При згортанні ховати вікно в облаÑть ÑиÑтемних повідомлень Remember last key files Пам’Ñтати оÑтанні файл-ключі SettingsWidgetSecurity Clear clipboard after Очищати буфер обміну через sec Ñек Lock databases after inactivity of Заблокувати Ñховище, неактивне протÑгом Show passwords in cleartext by default Типово показувати пароль у відкритому виглÑді Always ask before performing auto-type Завжди запитувати перед автозаповненнÑм UnlockDatabaseWidget Unlock database Розблокувати Ñховище WelcomeWidget Welcome! ЛаÑкаво проÑимо! main KeePassX - cross-platform password manager KeePassX — кроÑплатформний менеджер паролів filename of the password database to open (*.kdbx) назва файла Ñховища паролів, що відкриваєтьÑÑ (*.kdbx) path to a custom config file шлÑÑ… до влаÑного файла налаштувань key file of the database файл-ключ Ñховища keepassx-2.0.3/share/translations/keepassx_zh_CN.ts000066400000000000000000001220321276304217300224430ustar00rootroot00000000000000 AboutDialog About KeePassX 关于 KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX 使用的是第 2 版 GNU 通用公共授æƒåè®®(GPL)(ä½ å¯ä»¥æ ¹æ®éœ€è¦é€‰ç”¨ç¬¬ 3 版). Revision 修改 Using: 使用: AutoType Auto-Type - KeePassX KeePassX - 自动输入 Couldn't find an entry that matches the window title: 无法找到符åˆçª—壿 ‡é¢˜çš„项目 AutoTypeAssociationsModel Window çª—å£ Sequence é¡ºåº Default sequence é»˜è®¤é¡ºåº AutoTypeSelectDialog Auto-Type - KeePassX KeePassX - 自动输入 Select entry to Auto-Type: 选择自动输入的项目 ChangeMasterKeyWidget Password å¯†ç  Enter password: 输入密ç ï¼š Repeat password: é‡å¤å¯†ç ï¼š Key file 秘钥文件 Browse æµè§ˆ Create 创建 Key files 秘钥文件 All files 所有文件 Create Key File... 创建秘钥文件... Error 错误 Unable to create Key File : 无法创建秘钥文件: Select a key file 选择一个秘钥文件 Question 问题 Do you really want to use an empty string as password? 你确定è¦ä½¿ç”¨ç©ºå¯†ç ï¼Ÿ Different passwords supplied. 你输入了ä¸åŒçš„å¯†ç  Failed to set key file 设置秘钥文件失败 Failed to set %1 as the Key file: %2 无法设置 %1 为秘钥文件: %2 DatabaseOpenWidget Enter master key è¾“å…¥ä¸»å¯†ç  Key File: 秘钥文件: Password: 密ç ï¼š Browse æµè§ˆ Error 错误 Unable to open the database. 无法打开数æ®åº“ Can't open key file 无法打开秘钥文件 All files 所有文件 Key files 秘钥文件 Select key file 选择秘钥文件 DatabaseRepairWidget Repair database ä¿®å¤æ•°æ®åº“ Error 错误 Can't open key file 无法打开密钥文件 Database opened fine. Nothing to do. æ•°æ®åº“打开正常。没什么å¯åšçš„。 Unable to open the database. 无法打开数æ®åº“ Success æˆåŠŸ The database has been successfully repaired You can now save it. æ•°æ®åº“å·²ç»ä¿®å¤æˆåŠŸ 现在å¯ä»¥ä¿å­˜æ•°æ®åº“ Unable to repair the database. æ— æ³•ä¿®å¤æ•°æ®åº“ DatabaseSettingsWidget Database name: æ•°æ®åº“å称: Database description: æ•°æ®åº“介ç»ï¼š Transform rounds: åŠ å¯†è½¬æ¢æ¬¡æ•°ï¼š Default username: 默认用户å: Use recycle bin: 使用垃圾桶: MiB MiB Benchmark 基准测试 Max. history items: 最大历å²è®°å½•数: Max. history size: 最大历å²è®°å½•大å°ï¼š DatabaseTabWidget Root æ ¹ KeePass 2 Database KeePass 2 æ•°æ®åº“ All files 所有文件 Open database 打开数æ®åº“ Warning 警告 File not found! 找ä¸åˆ°æ–‡ä»¶ï¼ Open KeePass 1 database 打开 KeePass 1 æ•°æ®åº“ KeePass 1 database KeePass 1 æ•°æ®åº“ All files (*) 所有文件 (*) Close? 关闭? Save changes? ä¿å­˜ä¿®æ”¹ï¼Ÿ "%1" was modified. Save changes? "%1" 已被修改。 è¦ä¿å­˜å—? Error 错误 Writing the database failed. æ•°æ®åº“写入失败 Save database as å¦å­˜æ•°æ®åº“为 New database 新建数æ®åº“ locked å·²é” The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. ä½ è¦æ‰“开的数æ®åº“已被å¦ä¸€ä¸ªKeePassXé”ä½ã€‚ 你确定è¦ä»¥åªè¯»æ–¹å¼çš„æ‰“å¼€å—? Lock database é”使•°æ®åº“ Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. ä¸èƒ½é”使­£åœ¨ç¼–辑的数æ®åº“。 é€‰æ‹©å–æ¶ˆç»§ç»­ç¼–辑, 确定忽略编辑。 This database has never been saved. You can save the database or stop locking it. æ•°æ®åº“未ä¿å­˜ã€‚ ä½ å¯ä»¥ä¿å­˜æ•°æ®åº“或者中止é”ä½å®ƒã€‚ This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. æ•°æ®åº“å·²ç»æ›´æ”¹ã€‚ 你想在é”ä½å®ƒä»¥å‰ä¿å­˜ä¿®æ”¹å—? å¦åˆ™ä¿®æ”¹å°†ä¼šä¸¢å¤±ã€‚ "%1" is in edit mode. Discard changes and close anyway? 正在编辑 "%1" 。 ä»ç„¶è¦æ”¾å¼ƒä¿®æ”¹å¹¶ä¸”关闭å—? Export database to CSV file 把数æ®åº“导出为CSVæ ¼å¼æ–‡ä»¶ CSV file CSVæ ¼å¼æ–‡ä»¶ Writing the CSV file failed. 写入CSVæ ¼å¼æ–‡ä»¶å¤±è´¥ The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? ä½ è¦ä¿å­˜çš„æ•°æ®åº“已被å¦ä¸€ä¸ªKeePassXé”ä½ã€‚ ä½ ä»ç„¶è¦ä¿å­˜å—? DatabaseWidget Change master key æ›´æ”¹ä¸»å¯†ç  Delete entry? 删除项目? Do you really want to delete the entry "%1" for good? 你确定永远删除 "%1" 项目å—? Delete entries? 删除项目? Do you really want to delete %1 entries for good? 你确定永远删除 "%1" 项目å—? Move entries to recycle bin? 移动项目到垃圾桶? Do you really want to move %n entry(s) to the recycle bin? 你确定è¦å°† %n 个项目移到垃圾桶? Delete group? 删除群组? Do you really want to delete the group "%1" for good? 你确定永远删除 "%1" 群组å—? Current group 当å‰ç¾¤ç»„ Error 错误 Unable to calculate master key æ— æ³•è®¡ç®—ä¸»å¯†ç  EditEntryWidget Entry 项目 Advanced 高级 Icon 图标 Auto-Type 自动输入 Properties 属性 History 历å²è®°å½• Entry history é¡¹ç›®åŽ†å² Add entry 添加项目 Edit entry 编辑项目 Error 错误 Different passwords supplied. 你输入了ä¸åŒçš„å¯†ç  New attribute 新建属性 Select file 选择文件 Unable to open file 无法打开文件 Save attachment ä¿å­˜é™„ä»¶ Unable to save the attachment: 无法ä¿å­˜é™„件: Tomorrow 明天 %n week(s) %n 周 %n month(s) %n 个月 1 year 1 å¹´ EditEntryWidgetAdvanced Additional attributes 附加属性 Add 添加 Edit 编辑 Remove 移除 Attachments 附件 Save ä¿å­˜ Open 打开 EditEntryWidgetAutoType Enable Auto-Type for this entry 打开此项目的自动输入 Inherit default Auto-Type sequence from the group ä»Žçˆ¶ç¾¤ç»„ç»§æ‰¿é»˜è®¤çš„è‡ªåŠ¨è¾“å…¥é¡ºåº Use custom Auto-Type sequence: ä½¿ç”¨è‡ªå®šä¹‰è‡ªåŠ¨è¾“å…¥é¡ºåº + + - - Window title: çª—å£æ ‡é¢˜ï¼š Use default sequence ä½¿ç”¨é»˜è®¤é¡ºåº Set custom sequence: è®¾ç½®è‡ªå®šä¹‰é¡ºåº EditEntryWidgetHistory Show 显示 Restore 还原 Delete 删除 Delete all 全部删除 EditEntryWidgetMain Title: 标题: Username: 用户å: Password: 密ç ï¼š Repeat: é‡å¤ï¼š Gen. 生æˆ. URL: 网å€ï¼š Expires 过期 Presets 预设 Notes: 备注: EditGroupWidget Group 群组 Icon 图标 Properties 属性 Add group 添加群组 Edit group 编辑群组 Enable å¯ç”¨ Disable ç¦ç”¨ Inherit from parent group (%1) 继承自父群组(%1) EditGroupWidgetMain Name åç§° Notes 备注 Expires 过期 Search æœç´¢ Auto-type 自动输入 Use default auto-type sequence of parent group ä½¿ç”¨çˆ¶ç¾¤ç»„é»˜è®¤é¡ºåº Set default auto-type sequence è®¾ç½®é»˜è®¤è‡ªåŠ¨è¾“å…¥é¡ºåº EditWidgetIcons Use default icon 使用默认图标 Use custom icon 使用自定义图标 Add custom icon 添加自定义图标 Delete custom icon 删除自定义图标 Images 图片 All files 所有文件 Select Image 选择图片 Can't delete icon! ä¸èƒ½åˆ é™¤å›¾æ ‡ï¼ Can't delete icon. Still used by %n item(s). ä¸èƒ½åˆ é™¤å›¾æ ‡ã€‚ä»åœ¨è¢« %n 个项目使用 EditWidgetProperties Created: 已创建: Modified: 已修改: Accessed: 已存å–: Uuid: Uuid(通用唯一识别ç ): EntryAttributesModel Name åç§° EntryHistoryModel Last modified 最åŽä¿®æ”¹ Title 标题 Username 用户å URL ç½‘å€ EntryModel Group 群组 Title 标题 Username 用户å URL ç½‘å€ Group Recycle Bin 垃圾桶 KeePass1OpenWidget Import KeePass1 database 导入 KeePass 1 æ•°æ®åº“ Error 错误 Unable to open the database. 无法打开数æ®åº“。 KeePass1Reader Unable to read keyfile. 无法读å–秘钥文件。 Not a KeePass database. 䏿˜¯KeePass æ•°æ®åº“。 Unsupported encryption algorithm. 䏿”¯æŒçš„加密算法。 Unsupported KeePass database version. 䏿”¯æŒçš„KeePass æ•°æ®åº“版本。 Root æ ¹ Unable to calculate master key æ— æ³•è®¡ç®—ä¸»å¯†ç  KeePass2Reader Not a KeePass database. 䏿˜¯KeePass 的数æ®åº“。 Unsupported KeePass database version. 䏿”¯æŒçš„KeePass æ•°æ®åº“版本。 Wrong key or database file is corrupt. 秘钥错误或数æ®åº“æŸå。 Unable to calculate master key æ— æ³•è®¡ç®—ä¸»å¯†ç  The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. 当å‰é€‰æ‹©çš„æ–‡ä»¶æ˜¯æ—§ç‰ˆæœ¬ KeePass 1 æ•°æ®åº“(.kdb)。 ä½ å¯ä»¥é€šè¿‡ç‚¹å‡» æ•°æ®åº“ > '导入KeePass 1 æ•°æ®åº“’ æ¥å¯¼å…¥ã€‚ 这是ä¸å¯é€†çš„修改。导入åŽçš„æ•°æ®åº“将无法由旧版的KeePassX 0.4版本打开。 Main Fatal error while testing the cryptographic functions. 在测试加密函数时å‘生é‡å¤§é”™è¯¯ã€‚ KeePassX - Error KeePassX - 错误 MainWindow Database æ•°æ®åº“ Recent databases 最近的数æ®åº“ Help 帮助 Entries 项目 Copy attribute to clipboard 将属性å¤åˆ¶åˆ°å‰ªè´´æ¿ Groups 群组 View 显示 Quit 退出 About 关于 Open database 打开数æ®åº“ Save database ä¿å­˜æ•°æ®åº“ Close database 关闭数æ®åº“ New database 新建数æ®åº“ Add new entry 新增项目 View/Edit entry æµè§ˆ/编辑项目 Delete entry 删除项目 Add new group 新增群组 Edit group 编辑群组 Delete group 删除群组 Save database as å¦å­˜æ•°æ®åº“为 Change master key æ›´æ”¹ä¸»å¯†ç  Database settings æ•°æ®åº“设置 Import KeePass 1 database 导入KeePass 1 æ•°æ®åº“ Clone entry å¤åˆ¶é¡¹ç›® Find 查找 Copy username to clipboard 将用户åå¤åˆ¶åˆ°å‰ªè´´æ¿ Copy password to clipboard 将密ç å¤åˆ¶åˆ°å‰ªè´´æ¿ Settings 设置 Perform Auto-Type 执行自动输入 Open URL æ‰“å¼€ç½‘å€ Lock databases é”使•°æ®åº“ Title 标题 URL ç½‘å€ Notes 备注 Show toolbar æ˜¾ç¤ºå·¥å…·æ  read-only åªè¯» Toggle window 切æ¢çª—å£ Tools 工具 Copy username å¤åˆ¶ç”¨æˆ·å Copy password å¤åˆ¶å¯†ç  Export to CSV file 导出为CSVæ ¼å¼æ–‡ä»¶ Repair database ä¿®å¤æ•°æ®åº“ KeePass 2 Database KeePass 2 æ•°æ®åº“ All files 所有文件 Save repaired database ä¿å­˜ä¿®å¤åŽçš„æ•°æ®åº“ Error 错误 Writing the database failed. æ•°æ®åº“写入失败 PasswordGeneratorWidget Password: 密ç ï¼š Length: 长度: Character Types 字符类型 Upper Case Letters å¤§å†™è‹±æ–‡å­—æ¯ Lower Case Letters å°å†™è‹±æ–‡å­—æ¯ Numbers æ•°å­— Special Characters 特殊字符 Exclude look-alike characters 去除相似的字符 Ensure that the password contains characters from every group ç¡®ä¿å¯†ç åŒ…嫿¯ç§çš„字符 Accept æŽ¥å— QCommandLineParser Displays version information. æ˜¾ç¤ºç‰ˆæœ¬ä¿¡æ¯ Displays this help. æ˜¾ç¤ºå¸®åŠ©ä¿¡æ¯ Unknown option '%1'. 未知选项 '%1'。 Unknown options: %1. 未知选项: %1。 Missing value after '%1'. 在 '%1' åŽç¼ºå°‘值。 Unexpected value after '%1'. '%1' åŽæœ‰æ— æ³•识别的值。 [options] [选项] Usage: %1 已用:%1 Options: 选项: Arguments: 傿•°ï¼š QSaveFile Existing file %1 is not writable 当剿–‡ä»¶%1 ä¸å¯å†™ Writing canceled by application 应用程åºå–消写入 Partial write. Partition full? 写入ä¸å®Œæ•´ã€‚ç£ç›˜æ»¡äº†å—? QtIOCompressor Internal zlib error when compressing: 压缩函数库 zlib 出错: Error writing to underlying device: 下层设备写入出错: Error opening underlying device: 打开下层设备出错: Error reading data from underlying device: 读å–下层设备出错: Internal zlib error when decompressing: 内部函数库 zlib 解压错误: QtIOCompressor::open The gzip format not supported in this version of zlib. 当å‰ç‰ˆæœ¬çš„压缩函数库 zlib 䏿”¯æ´gzip。 Internal zlib error: 内部函数库 zlib å‘生错误: SearchWidget Find: 查找: Case sensitive 区分大å°å†™ Current group 当å‰ç¾¤ç»„ Root group 根群组 SettingsWidget Application Settings 应用程åºè®¾ç½® General 常规 Security 安全 SettingsWidgetGeneral Remember last databases è®°ä½æœ€è¿‘的数æ®åº“ Open previous databases on startup 在å¯åŠ¨æ—¶æ‰“å¼€æœ€è¿‘çš„æ•°æ®åº“ Automatically save on exit 离开åŽè‡ªåЍä¿å­˜ Automatically save after every change 修改åŽè‡ªåЍä¿å­˜ Minimize when copying to clipboard å¤åˆ¶åˆ°å‰ªè´´æ¿åŽæœ€å°åŒ– Use group icon on entry creation 新增项目时使用群组图标 Global Auto-Type shortcut 自动输入全局快æ·é”® Use entry title to match windows for global auto-type ä½¿ç”¨é¡¹ç›®æ ‡é¢˜æ¥æŸ¥æ‰¾è‡ªåŠ¨è¾“å…¥çš„ç›®æ ‡çª—å£ Language 语言 Show a system tray icon 显示任务æ å›¾æ ‡ Hide window to system tray when minimized å°†çª—å£æœ€å°åŒ–è‡³ä»»åŠ¡æ  Remember last key files è®°ä½æœ€è¿‘的秘钥文件 SettingsWidgetSecurity Clear clipboard after åœ¨å¤šä¹…åŽæ¸…é™¤å‰ªè´´æ¿ sec ç§’ Lock databases after inactivity of 在多久没有动作之åŽé”使•°æ®åº“ Show passwords in cleartext by default é»˜è®¤ä»¥æ˜Žç æ˜¾ç¤ºå¯†ç  Always ask before performing auto-type 在执行自动输入å‰è¯¢é—® UnlockDatabaseWidget Unlock database è§£é”æ•°æ®åº“ WelcomeWidget Welcome! æ¬¢è¿Žï¼ main KeePassX - cross-platform password manager KeePassX - 跨平å°å¯†ç ç®¡ç†è½¯ä»¶ filename of the password database to open (*.kdbx) æ‰“å¼€å¯†ç æ•°æ®åº“文件å(*.kdbx) path to a custom config file 自定义é…置文件路径 key file of the database æ•°æ®åº“秘钥文件 keepassx-2.0.3/share/translations/keepassx_zh_TW.ts000066400000000000000000001224031276304217300224770ustar00rootroot00000000000000 AboutDialog About KeePassX 關於 KeePassX KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. KeePassX 是使用第 2 版 GNU é€šç”¨å…¬å…±æŽˆæ¬Šæ¢æ¬¾æ‰€ç™¼ä½ˆçš„ (æˆ–è€…ï¼Œå¯æ ¹æ“šä½ çš„鏿“‡é¸ç”¨ç¬¬ 3 版) Revision 修改紀錄 Using: 使用: AutoType Auto-Type - KeePassX KeePassX - 自動輸入 Couldn't find an entry that matches the window title: 無法找到符åˆè¦–窗標題的項目 AutoTypeAssociationsModel Window 視窗 Sequence åºåˆ— Default sequence é è¨­çš„åºåˆ— AutoTypeSelectDialog Auto-Type - KeePassX KeePassX - 自動輸入 Select entry to Auto-Type: 鏿“‡è‡ªå‹•輸入的項目 ChangeMasterKeyWidget Password 密碼 Enter password: 輸入密碼 Repeat password: 冿¬¡è¼¸å…¥å¯†ç¢¼ Key file 金鑰檔案 Browse ç€è¦½ Create 建立 Key files 金鑰檔案 All files 所有的檔案 Create Key File... 建立一個金鑰檔案 Error 錯誤 Unable to create Key File : 無法建立金鑰檔案: Select a key file 鏿“‡ä¸€å€‹é‡‘鑰檔案 Question å•題 Do you really want to use an empty string as password? 你真的想使用空白密碼嗎? Different passwords supplied. æä¾›äº†ä¸åŒçš„密碼 Failed to set key file 無法設定金鑰檔案 Failed to set %1 as the Key file: %2 無法設定 %1 æˆç‚ºé‡‘鑰檔案: %2 DatabaseOpenWidget Enter master key 輸入主金鑰 Key File: 金鑰檔案: Password: 密碼: Browse ç€è¦½ Error 錯誤 Unable to open the database. 無法打開這個資料庫 Can't open key file 無法打開金鑰檔案 All files 所有的檔案 Key files 金鑰檔案 Select key file 鏿“‡é‡‘鑰檔案 DatabaseRepairWidget Repair database 修復資料庫 Error 錯誤 Can't open key file 無法打開金鑰檔案 Database opened fine. Nothing to do. 資料庫正常打開。沒什麼事。 Unable to open the database. 無法打開這個資料庫 Success æˆåŠŸ The database has been successfully repaired You can now save it. 這個資料庫已經æˆåŠŸä¿®å¾© ç¾åœ¨ä½ å¯ä»¥å„²å­˜å®ƒã€‚ Unable to repair the database. 無法開啟這個資料庫 DatabaseSettingsWidget Database name: 資料庫å稱: Database description: 資料庫æè¿°ï¼š Transform rounds: åŠ å¯†è½‰æ›æ¬¡æ•¸ Default username: é è¨­çš„使用者å稱: Use recycle bin: 使用垃圾桶: MiB MiB Benchmark 效能測試 Max. history items: 最大的歷å²ç­†æ•¸ï¼š Max. history size: 最大的歷å²å¤§å°ï¼š DatabaseTabWidget Root æ ¹ KeePass 2 Database KeePass 2 資料庫 All files 所有的檔案 Open database 打開資料庫 Warning 警告 File not found! 找ä¸åˆ°æª”æ¡ˆï¼ Open KeePass 1 database 打開 KeePass 1 資料庫 KeePass 1 database KeePass 1 資料庫 All files (*) 所有的檔案 (*) Close? 關閉? Save changes? 儲存修改? "%1" was modified. Save changes? "%1" 已被修改。è¦å„²å­˜å—Žï¼Ÿ Error 錯誤 Writing the database failed. 寫入資料庫失敗 Save database as 將資料庫儲存為 New database 新的資料庫 locked å·²éŽ–ä½ The database you are trying to open is locked by another instance of KeePassX. Do you want to open it anyway? Alternatively the database is opened read-only. ä½ å˜—è©¦è¦æ‰“開的資料庫已經被å¦ä¸€å€‹æ­£åœ¨åŸ·è¡Œçš„ KeePassX 鎖定 ä½ è¦æ‰“開它嗎?或者,打開唯讀的資料庫 Lock database 鎖定資料庫 Can't lock the database as you are currently editing it. Please press cancel to finish your changes or discard them. 無法鎖定資料庫,因為目å‰ä½ æ­£åœ¨ç·¨è¼¯å®ƒ è«‹æŒ‰ä¸‹å–æ¶ˆå®Œæˆä¿®æ”¹æˆ–放棄 This database has never been saved. You can save the database or stop locking it. 這個資料庫尚未被儲存 你能儲存資料庫或ä¸å†éŽ–å®šå®ƒ This database has been modified. Do you want to save the database before locking it? Otherwise your changes are lost. 這個資料庫已經被修改 想è¦åœ¨éŽ–å®šä¹‹å‰ï¼Œå„²å­˜è³‡æ–™åº«å—Žï¼Ÿ å¦å‰‡ï¼Œé€™æ¬¡ä¿®æ”¹å°‡æœƒéºå¤± "%1" is in edit mode. Discard changes and close anyway? "%1" 正在編輯模å¼ã€‚ 是å¦è¦æ”¾æ£„編輯åŠé—œé–‰ï¼Ÿ Export database to CSV file å°‡è³‡æ–™åº«è¼¸å‡ºæˆ CSV 檔案 CSV file CSV 檔案 Writing the CSV file failed. 寫入 CSV 檔案失敗 The database you are trying to save as is locked by another instance of KeePassX. Do you want to save it anyway? ä½ å˜—è©¦è¦æ‰“開的資料庫已經被å¦ä¸€å€‹æ­£åœ¨åŸ·è¡Œçš„ KeePassX 鎖定 é‚„è¦å„²å­˜å—Žï¼Ÿ DatabaseWidget Change master key 變更主金鑰 Delete entry? 刪除項目 Do you really want to delete the entry "%1" for good? 你真的想永é çš„刪除 "%1" 項目嗎 Delete entries? 刪除項目? Do you really want to delete %1 entries for good? 你真的想永é åˆªé™¤ "%1 " 項目嗎? Move entries to recycle bin? 移動項目到垃圾桶? Do you really want to move %n entry(s) to the recycle bin? 你真的想將 %n 個項目移到垃圾桶? Delete group? 刪除群組? Do you really want to delete the group "%1" for good? 你真的想永é åˆªé™¤ "%1 " 群組嗎? Current group ç›®å‰çš„群組 Error 錯誤 Unable to calculate master key 無法計算主金鑰 EditEntryWidget Entry é …ç›® Advanced 進階的 Icon 圖示 Auto-Type 自動輸入 Properties 性質 History æ­·å²è¨˜éŒ„ Entry history é …ç›®æ­·å² Add entry 增加項目 Edit entry 編輯項目 Error 錯誤 Different passwords supplied. æä¾›äº†ä¸åŒçš„密碼 New attribute 新的屬性 Select file 鏿“‡æª”案 Unable to open file 無法打開檔案 Save attachment 儲存附件 Unable to save the attachment: 無法儲存這個附件: Tomorrow 明天 %n week(s) %n 個禮拜 %n month(s) %n 個月 1 year 1 å¹´ EditEntryWidgetAdvanced Additional attributes é¡å¤–的屬性 Add 加入 Edit 編輯 Remove 移除 Attachments 附件 Save 儲存 Open 打開 EditEntryWidgetAutoType Enable Auto-Type for this entry 打開此項目的自動輸入 Inherit default Auto-Type sequence from the group 從父群組繼承é è¨­çš„自動輸入åºåˆ— Use custom Auto-Type sequence: 使用自訂的自動輸入åºåˆ— + + - - Window title: 視窗標題: Use default sequence 使用é è¨­åºåˆ— Set custom sequence: 設定自訂的åºåˆ— EditEntryWidgetHistory Show 顯示 Restore 還原 Delete 刪除 Delete all 刪除全部 EditEntryWidgetMain Title: 標題: Username: 使用者å稱: Password: 密碼: Repeat: é‡è¤‡ï¼š Gen. 產生 URL: ç¶²å€ï¼š Expires éŽæœŸ Presets é è¨­ Notes: 附註: EditGroupWidget Group 群組 Icon 圖示 Properties 性質 Add group 加入群組 Edit group 編輯群組 Enable 啟用 Disable 關閉 Inherit from parent group (%1) 繼承自父群組 (%1) EditGroupWidgetMain Name å稱 Notes 附註 Expires éŽæœŸ Search æœå°‹ Auto-type 自動輸入 Use default auto-type sequence of parent group 使用é è¨­çš„父群組自動輸入åºåˆ— Set default auto-type sequence 設定é è¨­è‡ªå‹•輸入åºåˆ— EditWidgetIcons Use default icon 使用é è¨­çš„圖示 Use custom icon 使用自訂的圖示 Add custom icon 加入自訂的圖示 Delete custom icon 刪除自訂的圖示 Images 圖片 All files 所有的檔案 Select Image 鏿“‡åœ–片 Can't delete icon! ä¸èƒ½åˆªé™¤åœ–ç¤ºï¼ Can't delete icon. Still used by %n item(s). ä¸èƒ½åˆªé™¤åœ–示。ä»åœ¨è¢« %n 個使用 EditWidgetProperties Created: 已建立: Modified: 已修改: Accessed: å·²å­˜å– Uuid: Uuid (通用唯一識別碼) EntryAttributesModel Name å稱 EntryHistoryModel Last modified 最後修改 Title 標題 Username 使用者å稱 URL ç¶²å€ EntryModel Group 群組 Title 標題 Username 使用者å稱 URL ç¶²å€ Group Recycle Bin 回收桶 KeePass1OpenWidget Import KeePass1 database 匯入 KeePass 1 資料庫 Error 錯誤 Unable to open the database. 無法開啟這個資料庫 KeePass1Reader Unable to read keyfile. 無法讀å–金鑰檔案 Not a KeePass database. 䏿˜¯ KeePass 資料庫 Unsupported encryption algorithm. 䏿”¯æ´çš„加密演算法 Unsupported KeePass database version. 䏿”¯æ´çš„ KeePass 資料庫版本 Root æ ¹ Unable to calculate master key 無法計算主金鑰 KeePass2Reader Not a KeePass database. 䏿˜¯ KeePass 的資料庫 Unsupported KeePass database version. 䏿”¯æ´çš„ KeePass 資料庫版本 Wrong key or database file is corrupt. 無法的金鑰或資料庫æå£ž Unable to calculate master key 無法計算主金鑰 The selected file is an old KeePass 1 database (.kdb). You can import it by clicking on Database > 'Import KeePass 1 database'. This is a one-way migration. You won't be able to open the imported database with the old KeePassX 0.4 version. è¢«é¸æ“‡çš„æª”案是舊的 KeePass 1 資料庫 (.kdb) 。 ä½ å¯ä»¥é»žé¸ 資料庫 > 「匯入 KeePass 1 資料庫ã€ã€‚ 這是單å‘é·ç§»ã€‚你無法用舊的 KeePassX 0.4 的版本打開被匯入的資料庫。 Main Fatal error while testing the cryptographic functions. é‡å¤§éŒ¯èª¤ï¼Œåœ¨æ¸¬è©¦åŠ å¯†å‡½æ•¸æ™‚ KeePassX - Error KeePassX - 錯誤 MainWindow Database 資料庫 Recent databases 近期的資料庫 Help 幫助 Entries é …ç›® Copy attribute to clipboard 將屬性複製到剪貼簿 Groups 群組 View 顯示 Quit 關閉 About 關於 Open database 打開資料庫 Save database 儲存資料庫 Close database 關閉資料庫 New database 新增資料庫 Add new entry 加入項目 View/Edit entry ç€è¦½/編輯項目 Delete entry 刪除項目 Add new group 增加新的群組 Edit group 編輯群組 Delete group 刪除群組 Save database as 儲存資料庫為 Change master key 變更主金鑰 Database settings 資料庫設定 Import KeePass 1 database 匯入 KeePass 1 資料庫 Clone entry æ‹·è²é …ç›® Find 尋找 Copy username to clipboard 將使用者å稱複製到剪貼簿 Copy password to clipboard 將密碼複製到剪貼簿 Settings 設定 Perform Auto-Type 執行自動輸入 Open URL æ‰“é–‹ç¶²å€ Lock databases 鎖ä½è³‡æ–™åº« Title 標題 URL ç¶²å€ Notes 附註 Show toolbar 顯示工具列 read-only 唯讀 Toggle window 切æ›è¦–窗 Tools 工具 Copy username 複製使用者å稱 Copy password 複製密碼 Export to CSV file è¼¸å‡ºæˆ CSV 檔案 Repair database 修復資料庫 KeePass 2 Database KeePass 2 資料庫 All files 所有的檔案 Save repaired database 儲存已修復的資料庫 Error 錯誤 Writing the database failed. 寫入資料庫失敗 PasswordGeneratorWidget Password: 密碼: Length: 長度: Character Types 字元類型 Upper Case Letters å¤§å¯«è‹±æ–‡å­—æ¯ Lower Case Letters å°å¯«è‹±æ–‡å­—æ¯ Numbers 數字 Special Characters 特殊字元 Exclude look-alike characters 去除相似的字元 Ensure that the password contains characters from every group ç¢ºå®šå¯†ç¢¼åŒ…å«æ¯ä¸€çµ„的字元 Accept æŽ¥å— QCommandLineParser Displays version information. 顯示版本資訊 Displays this help. é¡¯ç¤ºé€™å€‹å¹«åŠ©è¨Šæ¯ Unknown option '%1'. ä¸çŸ¥çš„é¸é … '%1' Unknown options: %1. ä¸çŸ¥çš„é¸é … '%1' Missing value after '%1'. 在 "%1" 後缺少值 Unexpected value after '%1'. "%1" 後有ä¸é æœŸçš„值 [options] [é¸é …] Usage: %1 使用方å¼ï¼š%1 Options: é¸é …: Arguments: åƒæ•¸ QSaveFile Existing file %1 is not writable ç¾æœ‰çš„æª”案 %1 ä¸å¯å¯«å…¥ Writing canceled by application 應用程å¼å–消寫入 Partial write. Partition full? éƒ¨åˆ†å¯«å…¥ã€‚åˆ†å€æ»¿äº†å—Žï¼Ÿ QtIOCompressor Internal zlib error when compressing: 進行壓縮時,函å¼åº« zlib 出錯 Error writing to underlying device: 寫入底層è£ç½®æ™‚出錯 Error opening underlying device: 開啟底層è£ç½®æ™‚出錯 Error reading data from underlying device: 讀å–底層è£ç½®æ™‚出錯 Internal zlib error when decompressing: 在解壓縮時,內部的 zlib 函å¼åº«ç™¼ç”ŸéŒ¯èª¤ï¼š QtIOCompressor::open The gzip format not supported in this version of zlib. 這個版本的壓縮函å¼åº« zlib 䏿”¯æ´ gzip Internal zlib error: 內部函å¼åº« zlib 發生錯誤: SearchWidget Find: 尋找: Case sensitive å€åˆ†å¤§å°å¯« Current group ç›®å‰çš„群組 Root group 根群組 SettingsWidget Application Settings 應用程å¼è¨­å®š General 一般 Security 安全性 SettingsWidgetGeneral Remember last databases è¨˜ä½æœ€è¿‘的資料庫 Open previous databases on startup 在啟動時開啟最近的資料庫 Automatically save on exit 離開時,自動儲存 Automatically save after every change 修改後,自動儲存 Minimize when copying to clipboard 在複製到剪貼簿時最å°åŒ– Use group icon on entry creation 新增項目時使用群組圖示 Global Auto-Type shortcut 全域自動輸入快æ·éµ Use entry title to match windows for global auto-type 使用項目標題來找尋自動輸入的目標視窗 Language 語言 Show a system tray icon 顯示系統夾圖示 Hide window to system tray when minimized 將視窗最å°åŒ–至工作列 Remember last key files è¨˜ä½æœ€è¿‘的金鑰檔案 SettingsWidgetSecurity Clear clipboard after 在多久後清除剪貼簿 sec ç§’ Lock databases after inactivity of 在多久沒有動作之後鎖ä½è³‡æ–™åº« Show passwords in cleartext by default é è¨­ä»¥æ˜Žç¢¼é¡¯ç¤ºå¯†ç¢¼ Always ask before performing auto-type 在執行自動輸入å‰é€šå¸¸è¦è©¢å• UnlockDatabaseWidget Unlock database 解鎖資料庫 WelcomeWidget Welcome! æ­¡è¿Žï¼ main KeePassX - cross-platform password manager KeePassX - 跨平å°å¯†ç¢¼ç®¡ç†è»Ÿé«” filename of the password database to open (*.kdbx) è¦é–‹å•Ÿçš„密碼資料庫檔案å稱 (*.kdbx) path to a custom config file 自定設定檔的路徑 key file of the database 資料庫的金鑰 keepassx-2.0.3/share/translations/update.sh000077500000000000000000000006231276304217300210110ustar00rootroot00000000000000#!/bin/sh BASEDIR=$(dirname $0) cd $BASEDIR/../.. echo Updating source file lupdate -no-ui-lines -disable-heuristic similartext -locations none -no-obsolete src -ts share/translations/keepassx_en.ts lupdate -no-ui-lines -disable-heuristic similartext -locations none -pluralonly src -ts share/translations/keepassx_en_plurals.ts echo Pulling translations from Transifex tx pull -a --minimum-perc=80 keepassx-2.0.3/share/windows/000077500000000000000000000000001276304217300161405ustar00rootroot00000000000000keepassx-2.0.3/share/windows/icon.rc000066400000000000000000000000631276304217300174150ustar00rootroot00000000000000IDI_ICON1 ICON DISCARDABLE "keepassx.ico" keepassx-2.0.3/share/windows/keepassx.ico000066400000000000000000013274561276304217300205010ustar00rootroot00000000000000 hv ˆ Þ  ¨f00 ¨%@@ (B¶D€€ (Þ† ( (   J!êL"ì (+á`,õO%óJ/ª.¨Gÿ/ªIÿ#u4ù0Û4ì3&.á6ªNý<¾Vþ0‘CûM-§-¦Fÿ/ªIÿ1¬Kÿ3®Kÿc,ö%/á5©Lý<¼Vþ<¾Vþ!c.ó.#I ç.¦Gÿ1¬Kÿ3®Kÿ)Š=û  ¨0á3§Ký:ºTþ<¼Vþ!f/ôFDã/¥Hþ3®Kÿ4°Mÿ-–Cü3§Jý8¸Rþ:ºTþ a-ôL?Ý1¦Hþ4°Mÿ5³Oþ7µPþ7·Qþ\+ôP X$y6ú4°Mÿ5³Oþ7µPþ5°OþF!í*ß;ð>Üy :e’n÷…Γÿ…Дÿ†Ñ•þ‡Ò–þˆÔ—þ‰Õ˜þŠÖšþŠ×šþ‹Ù›þ‚¼Žü.1.¶1KwVòvȇÿxɈÿnÄþ@Pûtˆþ{ÏŒþ|ÑŽþŭþW¡fûsÊ„þ€×‘þdŠl÷Z+5\=îgÀzÿiÂ|ÿa¾uþJ&ñn+j9ônÊþhÆ{þA ³- $ªd½výqÉ‚þ* ® œU°hþZ¼oÿU·jÿH#ðS6åaÆuþI”Xû D€OöhÐ}þ;%Î žI®^ÿG±]ÿD ðN ¼I»aþR¹fý5%#R°eüXÄlý# H ë1çIK$j1÷J¿bþG±[ý4yB÷E¬[üPÇgþ-r;ö3 ƒ a,õ8«Ný>¾Xþ;²Qý!a/ól8 ‹,º †,ÿÿLJ€Àà?ðàÀ‚8ÿÿÇ(0 (22.041*¥ÿÿÿþÉ+%Íÿÿÿþ® Òàààÿÿÿÿÿÿÿÿÿýýýÿ]]]ÿÍ8" $ÓmmmÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿ× Ðàààÿ™¼™ÿRRÿ’·’ÿüüüÿWWWÿïêé¥MÓiiiÿÿÿÿÿ¾•ÿZ¢hÿ­Ò´ÿÈÈÈÿ× Ðàààÿ|©{ÿ#n"ÿ$p$ÿ·ÿüüüÿàààÿàààÿ½½½ÿâ×eeeÿþþþÿ…¹ÿ-ˆ>ÿ.‹@ÿ—Æ¡ÿÈÈÈÿÖ ÆËËËÿÐàÏÿ/w/ÿ%r&ÿ%t)ÿl¢oÿ~¯‚ÿ·ÓºÿØØØÿÿaaaÿþþþÿˆ»ÿ-ˆ>ÿ.Š@ÿ@–RÿÞíâÿ³³³ÿÎ JûÞÞÞÿÌÞÍÿ.z1ÿ&v+ÿ'x-ÿ({/ÿ†¶‹ÿØØØÿ\\\ÿýýýÿм“ÿ-ˆ=ÿ.Š@ÿ>•QÿÛìßÿÒÒÒÿúdQûàààÿÉÝÊÿ/}5ÿ(z/ÿ(|1ÿ†·Œÿþþþÿþþþÿ½•ÿ-‡=ÿ-Š?ÿ=”OÿÙêÝÿÕÕÕÿút T"""üãããÿÆÜÈÿ/€7ÿ)~3ÿF’Qÿm©vÿa¤kÿ,‡=ÿ-‰?ÿ;“NÿÕèÚÿÙÙÙÿû€V$$$üåååÿÃÛÆÿ0ƒ;ÿ+‚8ÿ,…:ÿ,‡<ÿ-‰?ÿ9‘KÿÓç×ÿÜÜÜÿÿÎh Z&&&ÿéééÿÁÚÄÿ-…<ÿ,‡<ÿ-‰?ÿ6HÿÐåÔÿâââÿBBBÿ\\\ÿjjjÿ444ÿôš•FFFÿ÷÷÷ÿŸÇ¥ÿ,†<ÿ-ˆ>ÿ.‹Aÿ1ŽDÿ²ÕºÿÿÿÿÿÿÿÿÿøûùÿéôìÿÿÿÿÿçççÿMMMÿÖ9‘DDDÿ÷÷÷ÿ£É©ÿ,†<ÿ-ˆ>ÿ5ŽGÿ3Gÿ/Eÿ2’Hÿ’ÆŸÿr¶ƒÿ;œUÿ4šQÿF¥cÿ£Ó²ÿýþþÿ}}}ÿÈ!ŽAAAÿöööÿ§Ë­ÿ,†;ÿ-ˆ>ÿ5ŽFÿÈáÍÿ¼ÛÃÿ3“Jÿ1“Iÿ2•Lÿ3—Nÿ3šPÿ4œSÿ5žUÿ6 WÿzÁ‘ÿûûûÿ222ÿŠ ‹???ÿõõõÿ«Î±ÿ-…<ÿ-ˆ=ÿ3EÿÅßÊÿèèèÿîîîÿ¨Ñ²ÿ2•Kÿ2—Nÿ3™Pÿ4›Rÿ5žUÿ6 Wÿ7¢Zÿ7¤\ÿ½âÉÿ···ÿÑu===ÿôôôÿ¯Ð´ÿ-…<ÿ-‡=ÿ2ŒDÿÂÞÈÿéééÿ***ÿ¾¾¾ÿªÓ´ÿ2—Mÿ3™Pÿ4›Rÿ5Uÿ ]3ÿ ÿN,ÿ7¢\ÿyÄ”ÿïïïÿí(ÎÛÛÛÿ¹Ö½ÿ.†<ÿ,‡=ÿ1‹CÿÀÜÆÿëëëÿ,,,þøãããÿ¾ÿ3™Oÿ4›Rÿ5Tÿ-…Iÿyyyÿìììÿ~~~ÿ&p@ÿW·yÿÿÿÿÿ þ2Ðàààÿ¶Šÿ,‡<ÿ1‹Cÿ½ÛÃÿíííÿ///þe¸ÇÇÇÿ“È¢ÿ4›Qÿ5Tÿ5ŸVÿ&k=ÿòòòÿÿÿÿÿôôôÿU2ÿkÀŠÿûûûÿ ÷#ÐàààÿµÔºÿ‚¹ŒÿÀÜÆÿïïïÿ222ÿk„•••ÿÄâÍÿ5œSÿ5ŸVÿ6¡Xÿ5Xÿ•š—ÿüüüÿ™š™ÿ1’Tÿ›Ô¯ÿÏÏÏÿÚÏËËËÿèèèÿèèèÿßßßÿ555ÿq@444ÿüüüÿq»ˆÿ6¡Xÿ7£Zÿ8¥]ÿ7 [ÿ.tGÿ5œZÿS¶wÿöûøÿjjjÿ’mרØÔk¡„„„ÿòùôÿz‘ÿ8¥\ÿ8§_ÿ9©aÿ:«cÿa¼‚ÿáòçÿÀÀÀÿÕ Ý|||ÿúúúÿÓìÜÿ©Úºÿ Ö´ÿÇçÓÿûýüÿ¨¨¨ÿö7000ÿ„„„ÿ···ÿÄÄÄÿ‘‘‘ÿLLLÿÈ%8x®»‡Pÿÿÿüø€À?à?ðøðàÀ€€€€À‡Àÿàÿðÿþ?( @  AÅÕÖÖÖÈl’ÓÖÖÕÕ®-´888ÿpppÿpppÿpppÿpppÿAAAÿól !¬ÿkkkÿpppÿpppÿpppÿpppÿÿn€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿOOOÿño6.+% !©ÿ´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}À€€€ÿÿÿÿÿ„®ƒÿ`–`ÿnŸmÿñöñÿùùùÿKKKÿõàààÃ[>§ÿ¯¯¯ÿÿÿÿÿ»ØÀÿg©sÿgªtÿËâÐÿÿÿÿÿÿ|À€€€ÿÿÿÿÿRRÿ#n"ÿ#o#ÿRŽRÿó÷óÿøøøÿˆˆˆÿ€€€ÿ€€€ÿ€€€ÿÿ¡³ÿªªªÿÿÿÿÿ¾ÚÂÿ1‰Aÿ-‰?ÿ.‹Aÿ·×¾ÿÿÿÿÿÿzÀ€€€ÿÿÿÿÿY’Yÿ#n"ÿ$p$ÿ$r&ÿV’Xÿôøôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿßÿ¦¦¦ÿÿÿÿÿÁÛÅÿ1ŠBÿ-‰?ÿ.Š@ÿ.ŒBÿ¾ÜÄÿÿÿÿÿÿy ¯XXXÿÿÿÿÿßêßÿ9~9ÿ$q&ÿ%s'ÿ&u)ÿA‡FÿV•ZÿV—[ÿ»Õ½ÿÿÿÿÿ ÿÿ   ÿÿÿÿÿÃÝÈÿ2ŠBÿ-‰>ÿ.Š@ÿ.ŒBÿ»ŽÿþÿþÿÜÜÜÿÿg 9ötttÿÿÿÿÿÝéÝÿ9€:ÿ%t)ÿ&v+ÿ'x,ÿ'y.ÿ({0ÿ¨Ê«ÿÿÿÿÿ!!!ÿ›››ÿÿÿÿÿÇÞËÿ3‹Bÿ-ˆ>ÿ.Š@ÿ.ŒBÿ}¸ŠÿþÿþÿßßßÿÿÕ$E÷yyyÿÿÿÿÿÚèÛÿ8<ÿ'x,ÿ'y.ÿ({0ÿ(}2ÿ¨Ê¬ÿÿÿÿÿÇÇÇÿÿÿÿÿÉàÍÿ3‹Cÿ-ˆ>ÿ-Š@ÿ.‹Aÿz¶‡ÿýþþÿâââÿ!!!ÿÙ8 Gø}}}ÿÿÿÿÿØæÙÿ7ƒ>ÿ({/ÿ(|1ÿ)~3ÿ¨Ë­ÿÿÿÿÿÿÿÿÿÍâÐÿ5‹Dÿ-ˆ>ÿ-Š?ÿ.‹Aÿw´„ÿýþýÿåååÿ$$$ÿÛ? Jù‚‚‚ÿÿÿÿÿÖå×ÿ6…?ÿ)~3ÿ*5ÿ6ˆAÿ>ŽJÿ>Lÿ1‰Aÿ-ˆ=ÿ-‰?ÿ.‹Aÿs²€ÿüýüÿçççÿ'''ÿßJMú†††ÿÿÿÿÿÓåÕÿ6‡@ÿ*6ÿ+ƒ8ÿ+„:ÿ,†;ÿ-‡=ÿ-‰?ÿ.‹Aÿo°}ÿûýûÿêêêÿ***ÿò~A Qû‹‹‹ÿÿÿÿÿÐãÓÿ6ˆBÿ+„9ÿ,†;ÿ-‡=ÿ-‰?ÿ.‹@ÿk®zÿúüûÿìììÿ---ÿÿÿþèÃq ŽÿÆÆÆÿÿÿÿÿªÎ°ÿ,…;ÿ,‡=ÿ-‰>ÿ.Š@ÿ>•Qÿöú÷ÿÿÿÿÿ•••ÿ’’’ÿÉÉÉÿòòòÿÊÊÊÿ”””ÿUUUÿþ´6Oú|||ÿÿÿÿÿÙéÛÿ<ŽJÿ,‡<ÿ-ˆ>ÿ.Š@ÿ.ŒBÿ/Cÿvµ„ÿýþýÿÿÿÿÿÿÿÿÿèóëÿÐçÖÿñøóÿÿÿÿÿÿÿÿÿ»»»ÿÿáQKùyyyÿÿÿÿÿÛêÞÿ=Jÿ,‡<ÿ-ˆ>ÿ.Š@ÿ.ŒAÿ/Cÿ/Eÿ0‘Gÿy¸‰ÿ¥Ð°ÿI¡`ÿ3—Nÿ3™Pÿ5šRÿR«mÿ²Ú¾ÿÿÿÿÿîîîÿ999ÿÒ8 GøvvvÿÿÿÿÿÞìàÿ?Lÿ,†<ÿ-ˆ>ÿ-Š?ÿb¨pÿÀÝÆÿ6“Lÿ0Gÿ1’Hÿ1”Jÿ2•Lÿ2—Nÿ3™Oÿ4šQÿ4œSÿ5žUÿ6ŸVÿt¾Œÿ÷ûùÿÛÛÛÿ ÿœ'D÷rrrÿÿÿÿÿàíâÿ@Mÿ,†<ÿ-ˆ=ÿ-‰?ÿ_¦nÿöú÷ÿÿÿÿÿÇáÍÿ6•Nÿ1“Jÿ2•Lÿ2—Mÿ3˜Oÿ4šQÿ4œSÿ5Tÿ5ŸVÿ6¡Xÿ7¢Zÿ̤ÿÿÿÿÿÿöN @õoooÿÿÿÿÿãîäÿB’Pÿ,†;ÿ-ˆ=ÿ-‰?ÿ\¤kÿôùõÿöööÿ¹¹¹ÿÿÿÿÿ©Ò³ÿ2•Kÿ2–Mÿ3˜Oÿ4šQÿ4›Rÿ5Tÿ5ŸVÿ6 Xÿ7¢Yÿ7¤[ÿ:¦^ÿÓìÜÿüüüÿ ÿ„5ôlllÿÿÿÿÿäïæÿD’Pÿ,†;ÿ-‡=ÿ-‰?ÿY£hÿóøôÿ÷÷÷ÿEEEÿOOOÿÿÿÿÿ–É£ÿ2–Mÿ3˜Oÿ3šPÿ4›Rÿ5Tÿ1“PÿR-ÿ !ÿY2ÿ5œXÿ8§_ÿ–Ñ«ÿÿÿÿÿ888ÿ­­TTTÿÿÿÿÿçñèÿF”Sÿ,…;ÿ,‡=ÿ-‰?ÿW¡eÿñ÷òÿøøøÿHHHÿÿxxxÿÿÿÿÿh²|ÿ3˜Nÿ3™Pÿ4›Rÿ5Tÿ5žUÿ5ÿ\\\ÿšššÿ777ÿC&ÿ9¨`ÿoÁŒÿÿÿÿÿjjjÿÍÀ€€€ÿÿÿÿÿd¥nÿ,…;ÿ,‡<ÿ-‰>ÿTŸbÿð÷òÿùùùÿLLLÿá݈ˆˆÿÿÿÿÿS§jÿ3™Pÿ4›Rÿ4œSÿ5žUÿ1Nÿ`a`ÿÿÿÿÿÿÿÿÿùùùÿÿ7£^ÿ^º€ÿÿÿÿÿ€€€ÿÚÀ€€€ÿÿÿÿÿZŸeÿ,‡<ÿ-ˆ>ÿQž`ÿîöïÿúúúÿOOOÿå#˜YYYÿÿÿÿÿy¼Œÿ4›Qÿ4œSÿ5žUÿ6ŸWÿ0‘Pÿ¤¥¤ÿÿÿÿÿÿÿÿÿÿÿÿÿVZWÿ7¤_ÿƒÊÿÿÿÿÿQQQÿºÀ€€€ÿÿÿÿÿy²ƒÿTžbÿc¨qÿìõîÿûûûÿSSSÿè(b'''ÿÿÿÿÿ£Ñ±ÿ4œSÿ5žUÿ6ŸVÿ6¡Xÿ7£ZÿUm]ÿÿÿÿÿÿÿÿÿîîîÿ!L0ÿ:«cÿ¬Ü¾ÿÿÿÿÿÿÀ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿVVVÿì,+ÿßßßÿõúöÿN©jÿ6ŸVÿ6¡Xÿ7¢Zÿ7¤\ÿ3—UÿBoRÿp{tÿ/eBÿ6 \ÿV·yÿ÷üùÿÙÙÙÿÿR ²DDDÿˆˆˆÿˆˆˆÿˆˆˆÿˆˆˆÿMMMÿï1¹CCCÿþþþÿÊæÓÿ8¢Zÿ7¢Zÿ7¤[ÿ8¥]ÿ9§_ÿ9©aÿ:ªbÿ:«cÿ=¬eÿÑëÚÿýýýÿ<<<ÿµ4ÀÐÐÐж2ñ———ÿÿÿÿÿÒêÚÿS±rÿ8¥]ÿ8§_ÿ9©`ÿ:ªbÿ:«cÿX¸{ÿÖîßÿÿÿÿÿÿíeÿÿýýýÿöûøÿºàÇÿ’ϨÿuÑÿ“Ñ©ÿ»âÉÿøüùÿüüüÿˆˆˆÿÿZað>>>ÿÑÑÑÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÎÎÎÿ:::ÿìT¹ÿÿBBBÿjjjÿBBBÿÿÿ¶UвŠUÿÿÿÿÿà?ÿÀ?€?????€?ÀàÿðÿøÿüüüøðàÀ€8xøüÿþÿÿÿÿ€?ÿÿñÿ(0` $    ?KOPQPPJ<* .GQRQONLE2 %ÊÿÿÿÿÿÿÿüÊ]- !]ÔþÿÿÿÿÿÿýÆA}ÿ$$$ÿ000ÿ000ÿ000ÿ000ÿ000ÿ000ÿÿÿáZ, !^ïÿ%%%ÿ000ÿ000ÿ000ÿ000ÿ000ÿ000ÿÿÿ†!œÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ>>>ÿÿà[0  \îÿ^^^ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡#™ÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿ;;;ÿÿßaF=:861&!YìÿZZZÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡#˜ÿÀÀÀÿÿÿÿÿçïçÿ|©{ÿ|©{ÿ|©{ÿ˜»˜ÿÿÿÿÿÿÿÿÿñññÿ777ÿÿçÍÌËËÆT=3YêÿVVVÿüüüÿÿÿÿÿùüúÿŽ¿—ÿ‚¸‹ÿ‚¹ÿ‚¹ÿüýüÿÿÿÿÿÿÿ "˜ÿÀÀÀÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ‚­‚ÿÿÿÿÿÿÿÿÿðððÿ333ÿÿÿÿÿÿÿÿ’foêÿSSSÿûûûÿÿÿÿÿúüúÿjªuÿ-ˆ=ÿ-‰>ÿ-Š@ÿ.‹Aÿøûùÿÿÿÿÿÿÿ !˜ÿÀÀÀÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ$p$ÿ‡±‡ÿÿÿÿÿÿÿÿÿðððÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿÀÀÀÿ~~~ÿÿÁ‡ëÿOOOÿúúúÿÿÿÿÿûýûÿm«xÿ-‡=ÿ-ˆ>ÿ-Š?ÿ.‹Aÿ.ŒBÿøûùÿÿÿÿÿÿÿŸ!˜ÿÀÀÀÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#o#ÿ$p$ÿ$q%ÿ%r'ÿŒµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿÎêÿKKKÿùùùÿÿÿÿÿüýüÿp­{ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.‹@ÿ.ŒBÿ/Cÿøûùÿÿÿÿÿÿÿž ˜ÿÀÀÀÿÿÿÿÿ÷ú÷ÿZ’Yÿ#o#ÿ$p$ÿ$q%ÿ%r&ÿ%s(ÿ%t)ÿ¶ÿÖå×ÿÖæ×ÿÖæ×ÿÖæØÿúüúÿÿÿÿÿ¨¨¨ÿÿÿÿHHHÿøøøÿÿÿÿÿýþýÿs¯~ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ/Cÿ}¹ŠÿÿÿÿÿÿÿÿÿÿÿœsÿgggÿÿÿÿÿÿÿÿÿöùöÿX’Xÿ$q%ÿ$r&ÿ%s'ÿ%t)ÿ&u*ÿ&v+ÿ'w,ÿ'y-ÿ'z.ÿ({0ÿäïåÿÿÿÿÿ¨¨¨ÿÿÿDDDÿ÷÷÷ÿÿÿÿÿýþýÿv±€ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿy¶‡ÿýþþÿÿÿÿÿöööÿ???ÿÿzèÿnnnÿÿÿÿÿÿÿÿÿôøôÿU’Wÿ%s'ÿ%t(ÿ&u*ÿ&v+ÿ'w,ÿ'x-ÿ'z.ÿ({/ÿ(|1ÿäïåÿÿÿÿÿ¨¨¨ÿÿAAAÿöööÿÿÿÿÿýþýÿz³ƒÿ,‡<ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿv´ƒÿýþýÿÿÿÿÿøøøÿFFFÿÿÞ3*êÿrrrÿÿÿÿÿÿÿÿÿó÷óÿS‘Vÿ&u)ÿ&v+ÿ&w,ÿ'x-ÿ'y.ÿ(z/ÿ(|0ÿ)}2ÿäïåÿÿÿÿÿ¨¨¨ÿ===ÿôôôÿÿÿÿÿþÿþÿ}´†ÿ,‡<ÿ-ˆ=ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿs²€ÿüýüÿÿÿÿÿùùùÿJJJÿÿãM-ìÿwwwÿÿÿÿÿÿÿÿÿñöòÿQ‘Uÿ&w,ÿ'x-ÿ'y.ÿ(z/ÿ({0ÿ(|1ÿ)~3ÿäïæÿÿÿÿÿýýýÿýýýÿÿÿÿÿþÿþÿ¶Šÿ,†<ÿ-ˆ=ÿ-‰>ÿ-Š@ÿ.‹Aÿ.ŒBÿp±~ÿûýûÿÿÿÿÿúúúÿNNNÿÿæS 1îÿ{{{ÿÿÿÿÿÿÿÿÿðõðÿP‘Uÿ'y.ÿ(z/ÿ({0ÿ(|1ÿ)}2ÿ)4ÿäïæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…¸ÿ,†<ÿ-‡=ÿ-‰>ÿ-Š?ÿ.‹Aÿ.ŒBÿm¯{ÿúüûÿÿÿÿÿûûûÿSSSÿÿèW" 4ðÿ€€€ÿÿÿÿÿÿÿÿÿîôïÿN‘Tÿ({0ÿ(|1ÿ)}2ÿ)~3ÿ*€5ÿžÆ¤ÿ¯Ð´ÿ¯Ð´ÿ¯Ñ´ÿ~´‡ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.‹@ÿ.ŒBÿj­xÿùüúÿÿÿÿÿüüüÿWWWÿÿë]% 7òÿ„„„ÿÿÿÿÿÿÿÿÿíôîÿK’Sÿ)}2ÿ)~3ÿ*4ÿ*€6ÿ*‚7ÿ+ƒ8ÿ+„9ÿ,…:ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.ŒAÿf«uÿøûùÿÿÿÿÿýýýÿ\\\ÿÿîk/;óÿ‰‰‰ÿÿÿÿÿÿÿÿÿëóìÿJ’Rÿ)4ÿ*€6ÿ*7ÿ+ƒ8ÿ+„9ÿ,…:ÿ,†;ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿc©rÿøûøÿÿÿÿÿþþþÿ```ÿÿð„U2 >õÿÿÿÿÿÿÿÿÿÿéòêÿI’Rÿ*7ÿ+‚8ÿ+ƒ9ÿ,…:ÿ,†;ÿ,‡<ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿa¨pÿöú÷ÿÿÿÿÿþþþÿeeeÿÿÿôÞÉ¢X-Böÿ‘‘‘ÿÿÿÿÿÿÿÿÿèñéÿG“Sÿ+ƒ9ÿ+„:ÿ,†;ÿ,‡<ÿ-ˆ=ÿ-‰?ÿ.Š@ÿ.‹Aÿ^¦mÿõúöÿÿÿÿÿÿÿÿÿjjjÿÿÿÿÿÿÿÿÿÛ{. Jÿÿ¡¡¡ÿÿÿÿÿÿÿÿÿæðèÿ<ŽIÿ,…;ÿ,‡<ÿ-ˆ=ÿ-‰>ÿ-Š@ÿ.‹AÿQŸbÿôùõÿÿÿÿÿÿÿÿÿ„„„ÿQQQÿ¡¡¡ÿÍÍÍÿêêêÿ÷÷÷ÿßßßÿÂÂÂÿzzzÿ%%%ÿÿÿÑW!¨ÿ"""ÿãããÿÿÿÿÿÿÿÿÿ¤Ê«ÿ,…;ÿ,†<ÿ-‡=ÿ-‰>ÿ-Š?ÿ.‹Aÿ.ŒBÿ4GÿÂÞÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿ ÿÿòr+¤ÿ ÿáááÿÿÿÿÿÿÿÿÿ©Í®ÿ,…;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.‹@ÿ.ŒBÿ/Cÿ/ŽDÿ5’JÿÅàËÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿäñçÿÄáËÿ¹ÜÃÿâñæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞÿ===ÿÿú-Ÿÿÿßßßÿÿÿÿÿÿÿÿÿ¬Ï±ÿ-…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.ŒBÿ/Cÿ/ŽDÿ/Eÿ0Fÿ6”MÿÈâÎÿíöïÿ“Ç ÿ>œWÿ2—Mÿ3˜Nÿ3™Pÿ4šQÿB¢^ÿl·‚ÿÊåÒÿÿÿÿÿÿÿÿÿýýýÿ„„„ÿÿõf( ›ÿÿÝÝÝÿÿÿÿÿÿÿÿÿ¯Ñ´ÿ-…;ÿ,†;ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿPž`ÿ?–Rÿ/ŽDÿ/Eÿ0Fÿ0‘Gÿ1’Hÿ8—Pÿ8˜Qÿ2•Lÿ2–Mÿ3˜Nÿ3™Oÿ4šQÿ4›Rÿ4œSÿ5Tÿ6žVÿÈŸÿøüùÿÿÿÿÿÿÿÿÿXXXÿÿãI –ÿÿÛÛÛÿÿÿÿÿÿÿÿÿ³Ó¸ÿ.†<ÿ,†;ÿ,‡<ÿ-ˆ>ÿ-‰?ÿ.Š@ÿPž`ÿíõïÿÙêÝÿ>—Rÿ0Fÿ0‘Gÿ1’Hÿ1“Iÿ1”Kÿ2•Lÿ2–Mÿ3—Nÿ3™Oÿ3šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ6ŸVÿ6 XÿV°sÿìöïÿÿÿÿÿëëëÿÿÿ ;‘ÿÿÙÙÙÿÿÿÿÿÿÿÿÿ·Õ»ÿ-…<ÿ,†;ÿ,‡<ÿ-ˆ>ÿ-‰?ÿ.Š@ÿMœ]ÿëôìÿÿÿÿÿÿÿÿÿ×êÛÿ>˜Sÿ0’Hÿ1“Iÿ1”Jÿ2•Lÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Yÿ7¢ZÿvÀŽÿÿÿÿÿÿÿÿÿ­­­ÿÿðW#Œÿÿ×××ÿÿÿÿÿÿÿÿÿº×¿ÿ.†=ÿ,…;ÿ,‡<ÿ-ˆ=ÿ-‰?ÿ-Š@ÿK›[ÿéóëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕéÚÿ=™Tÿ1”Jÿ2•Kÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ4šQÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ7¢Zÿ7£[ÿ8¤\ÿ¹ßÆÿÿÿÿÿÿÿÿÿNNNÿÿ’2‡ÿÿÕÕÕÿÿÿÿÿÿÿÿÿ¼ØÁÿ/†>ÿ,…;ÿ,†<ÿ-ˆ=ÿ-‰>ÿ-Š@ÿHšYÿæñéÿÿÿÿÿÿÿÿÿ“““ÿ¹¹¹ÿÿÿÿÿÿÿÿÿ’ÆŸÿ2•Kÿ2–Mÿ2—Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ7¢Yÿ7£[ÿ7¤\ÿ8¥]ÿF¬iÿöû÷ÿÿÿÿÿ•••ÿÿÆ<‚ÿÿÒÒÒÿÿÿÿÿÿÿÿÿÀÚÄÿ0‡?ÿ,…;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-Š?ÿF˜Wÿåñçÿÿÿÿÿÿÿÿÿ–––ÿÿpppÿÿÿÿÿÿÿÿÿl³~ÿ2–Lÿ2—Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Uÿ5žUÿ\2ÿ,ÿ ÿD&ÿ2”Sÿ8¥]ÿ8¦^ÿ9§_ÿÎêØÿÿÿÿÿÇÇÇÿÿñC:ÿÿÐÐÐÿÿÿÿÿÿÿÿÿÃÜÇÿ1‡>ÿ,…;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿD—Tÿâïåÿÿÿÿÿÿÿÿÿ›››ÿÿÿšššÿÿÿÿÿþÿþÿ@Xÿ2—Mÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5Vÿ/ÿÿÿÿÿ ÿ/ŠNÿ9§_ÿ9¨`ÿ§Ù¹ÿÿÿÿÿöööÿÿÿLÿ®®®ÿÿÿÿÿÿÿÿÿÆÝÉÿ2ˆ?ÿ,…:ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿB•RÿàîãÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÃÃÃÿÿÿÿÿàïäÿ2—Mÿ3˜Nÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ!a5ÿ ÿ›››ÿóóóÿóóóÿ›››ÿ ÿ 'ÿ9¨`ÿ9©aÿÉ›ÿÿÿÿÿÿÿÿÿ,,,ÿÿ]˜ÿÀÀÀÿÿÿÿÿæðèÿ2ˆ@ÿ,…:ÿ,†;ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ@”PÿÝìàÿÿÿÿÿÿÿÿÿ¤¤¤ÿÿúçÿàààÿÿÿÿÿÄáËÿ3˜Nÿ3™Oÿ3šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ6ŸVÿ-ÿyyyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{{ÿÿ4™Xÿ:ªbÿi¿ˆÿÿÿÿÿÿÿÿÿJJJÿÿg˜ÿÀÀÀÿÿÿÿÿ×èÚÿ+…:ÿ,†;ÿ,‡<ÿ-ˆ>ÿ-‰?ÿ>“OÿÚëÝÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿûQ¤ÿÊÊÊÿÿÿÿÿæòéÿ3˜Oÿ3šPÿ4›Rÿ4œSÿ5Tÿ5žUÿ6ŸVÿ6 Wÿ ÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããÿÿ,‚Kÿ:«cÿŠÍ£ÿÿÿÿÿÿÿÿÿÿÿT˜ÿÀÀÀÿÿÿÿÿ×èÚÿ,…;ÿ,‡<ÿ-ˆ=ÿ-‰?ÿ<’MÿØéÛÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿüVˆÿ°°°ÿÿÿÿÿÿÿÿÿB¡]ÿ4šQÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ2ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿ ÿ4šYÿ:«cÿ²ÞÂÿÿÿÿÿìììÿÿþ=˜ÿÀÀÀÿÿÿÿÿ×èÚÿ,†<ÿ-ˆ=ÿ-‰>ÿ9‘KÿÕèÙÿÿÿÿÿÿÿÿÿ±±±ÿÿýZaÿsssÿÿÿÿÿÿÿÿÿkµ€ÿ4›Rÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ7¢Yÿ!a6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’ÿ %ÿ:«cÿ:«cÿØïàÿÿÿÿÿ»»»ÿÿç/ ˜ÿÀÀÀÿÿÿÿÿ÷ú÷ÿÑåÔÿÑåÕÿÑåÕÿæñéÿÿÿÿÿÿÿÿÿµµµÿÿý_ý$$$ÿÿÿÿÿÿÿÿÿ³Ù¾ÿ4œSÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ7¢Yÿ7£Zÿ7£[ÿ*D3ÿÐÐÐÿÿÿÿÿÿÿÿÿÐÐÐÿ!'#ÿ0ŒQÿ:«cÿ\¹~ÿüþýÿÿÿÿÿˆˆˆÿÿ®#˜ÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿþcÁÿ´´´ÿÿÿÿÿÿÿÿÿn¹„ÿ5žVÿ6 Wÿ6¡Xÿ7¢Yÿ7£Zÿ7¤\ÿ8¥]ÿ7¤]ÿ"]6ÿ9N@ÿ5E:ÿD)ÿ3˜Xÿ:«cÿ=¬eÿ×îßÿÿÿÿÿûûûÿ000ÿÿc–ÿœœœÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿÐÐÐÿ«««ÿ ÿÿhRÿÿïïïÿÿÿÿÿéôìÿB¥aÿ6¡Xÿ6¢Yÿ7£Zÿ7¤[ÿ8¥]ÿ8¦^ÿ9§_ÿ9¨`ÿ9©aÿ:ªbÿ:«cÿ:«cÿ:«cÿ˜Ó®ÿÿÿÿÿÿÿÿÿ‚‚‚ÿÿÍ LÿÿÿÿÿÿÿÿÿÿmÅÿ```ÿÿÿÿÿÿÿÿÿÉåÒÿIªiÿ7£Zÿ7¤[ÿ8¥\ÿ8¦^ÿ8§_ÿ9¨`ÿ9©aÿ:ªbÿ:«cÿ:«cÿ:«cÿ„ËžÿúýûÿÿÿÿÿÑÑÑÿÿÿC_´¸¸¸¸¸¸¨A5ùÿ´´´ÿÿÿÿÿÿÿÿÿðøóÿzÃ’ÿ8¥\ÿ8¦]ÿ8§_ÿ9¨`ÿ9©aÿ:ªbÿ:«cÿ:«cÿM³rÿÄæÐÿÿÿÿÿÿÿÿÿûûûÿ222ÿÿ¥bÿÿ§§§ÿÿÿÿÿÿÿÿÿÿÿÿÿÇæÑÿ‘Φÿh½†ÿB­hÿ:ªbÿU·xÿÈ™ÿ¨ÚºÿðùóÿÿÿÿÿÿÿÿÿçççÿIIIÿÿÏ ƒÿÿXXXÿîîîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿóúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«««ÿÿÿÛ^øÿÿ¯¯¯ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿ\\\ÿÿÿ¾/¿ÿÿÿ]]]ÿŠŠŠÿ¤¤¤ÿ¯¯¯ÿ———ÿzzzÿ555ÿÿÿðtM´÷ÿÿÿÿÿÿÿÛˆ KmŠ—|_*ÿÿÿÿÿÿÿÿÿÿÿÿ€ÿøÿ€ÿðÿÿàÿÿÀÿ€ÿÿÿÿÿ€ÿ€ÿÀÿàÿðÿøÿü?ÿþ?ÿÿÿÿ€ÿÿÀÿÿ€ÿ?þüøðàÀ€€@Ààààð€ðÀ?øÿÿüÿÿü?ÿÿÿÿÿÿ€ÿÿÿÿàÿÿÿÿþÿ(@€ @    &,/1111100-&   *02210/.-+(  !a™Ÿ ¡¢¢¡¡¡gI5  0R–¡¢¢¡¡¡  ŸzB. ¼ÿÿÿÿÿÿÿÿÿÿÿýÄT5 7¦úÿÿÿÿÿÿÿÿÿÿÿÚH'CÿÿÿÿÿÿÿÿÿÿÿÿÿÿËP1 9«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠ1|ÿÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿÝÝÝÿ///ÿÿÿÇM1 9¨ÿÿÿÒÒÒÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿèèèÿÿÿ·5{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÿ,,,ÿÿÿÅP9)" 9¤ÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸6yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÿ)))ÿÿÿÄ[MFCA@><8/! 8¢ÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸5xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÙÆÿž¿žÿž¿žÿž¿žÿž¿žÿÍÞÍÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿ&&&ÿÿÿÕ¿½¼¼»»£dRA1.<žÿÿÿØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÚêÝÿ¢Ê©ÿ£Ëªÿ£Ëªÿ£Ë«ÿ½ÚÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·4xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|©{ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ*s)ÿÅÙÅÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿ###ÿÿÿÿÿÿÿÿÿÿõz`SP ÿÿÿÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÙéÜÿÿ-‰?ÿ.Š@ÿh«vÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·3xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|©{ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ-u-ÿÉÜÉÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿ ÿÿÿÿÿÿÿÿÿÿ½tn§þÿÿÒÒÒÿÿÿÿÿÿÿÿÿÿÿÿÿÛëÞÿ=‘Lÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿh¬wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·2xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|©{ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ$p$ÿ-w.ÿÌÞÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿÛ}®þÿÿÏÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÝìßÿ>‘Mÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹@ÿ.‹Aÿh¬wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶1xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|©{ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ$p$ÿ$q%ÿ$r&ÿ0z2ÿÏàÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿܯþÿÿÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿàíâÿA’Oÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹@ÿ.‹Aÿ.ŒBÿi­wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶0xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›½šÿ#n"ÿ#n"ÿ#o#ÿ$p$ÿ$q%ÿ$r&ÿ%r'ÿ%s(ÿ2|5ÿÓãÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿõþÿÿÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿÿâîäÿB“Qÿ,‡=ÿ-ˆ>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿ†½’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµ.wÿÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿ«ÿ#o#ÿ$p$ÿ$q%ÿ$q&ÿ%r'ÿ%s'ÿ%t(ÿ&u)ÿ48ÿ„²‡ÿ„²ˆÿ…³ˆÿ…³‰ÿ…´Šÿ™Àœÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿÿÿ ÿÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿäïæÿD”Rÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿp±ÿûýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³+9ÿÿkkkÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ|©|ÿ$q%ÿ$q&ÿ%r&ÿ%s'ÿ%t(ÿ&u)ÿ&u*ÿ&v+ÿ&w,ÿ'x-ÿ'y.ÿ'z.ÿ(z/ÿIPÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿÿ ÿÃÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿåðçÿF•Tÿ,‡<ÿ-ˆ=ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿm¯|ÿúüûÿÿÿÿÿÿÿÿÿÿÿÿÿƒƒƒÿÿÿƒ$ Çÿÿoooÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿx¨yÿ%r&ÿ%s'ÿ%t(ÿ%u)ÿ&u*ÿ&v+ÿ&w,ÿ'x,ÿ'y-ÿ'z.ÿ(z/ÿ({0ÿIQÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿÿ ÿÀÀÀÿÿÿÿÿÿÿÿÿÿÿÿÿèòéÿH–Uÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿk®yÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆÿÿÿè<Öÿÿsssÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿu¦vÿ%t(ÿ%t)ÿ&u*ÿ&v+ÿ&w+ÿ'x,ÿ'y-ÿ'y.ÿ(z/ÿ({0ÿ(|1ÿJ‘Qÿÿÿÿÿÿÿÿÿÿÿÿÿ888ÿ ÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿéóëÿJ—Wÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ.ŒBÿg¬vÿøûùÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒÿÿÿí^'Øÿÿxxxÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿq¥tÿ&u*ÿ&v+ÿ&w+ÿ'x,ÿ'x-ÿ'y.ÿ(z/ÿ({0ÿ(|1ÿ)}2ÿJ‘Qÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿ¹¹¹ÿÿÿÿÿÿÿÿÿÿÿÿÿëôìÿL™Yÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹Aÿ.ŒAÿ.ŒBÿe«tÿøûøÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‘‘ÿÿÿïd-Ûÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿm£pÿ&w+ÿ'x,ÿ'x-ÿ'y.ÿ(z/ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿJ’RÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíôîÿN™[ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹@ÿ.‹Aÿ.ŒBÿb©qÿ÷ûøÿÿÿÿÿÿÿÿÿÿÿÿÿ–––ÿÿÿñh0 Þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿk¢nÿ'x-ÿ'y.ÿ'z/ÿ({0ÿ(|0ÿ(|1ÿ)}2ÿ)~3ÿJ“SÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîõðÿPš]ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹Aÿ.ŒBÿ_§nÿõúöÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÿÿól2 áÿÿ………ÿÿÿÿÿÿÿÿÿÿÿÿÿûüûÿg¡lÿ'z/ÿ({/ÿ({0ÿ(|1ÿ)}2ÿ)~3ÿ)4ÿK“TÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðöñÿS›_ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ]¦lÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿôq5 "ãÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿùûùÿe jÿ({0ÿ(|1ÿ)}2ÿ)~3ÿ)4ÿ*5ÿ0ƒ<ÿQ˜[ÿR™\ÿRš]ÿR›]ÿR›^ÿA‘Nÿ,†<ÿ,‡=ÿ-ˆ=ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿZ¥jÿóøôÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤¤ÿÿÿõv9 %æÿÿŽŽŽÿÿÿÿÿÿÿÿÿÿÿÿÿøûùÿaŸhÿ)}2ÿ)~3ÿ)4ÿ*4ÿ*€5ÿ*6ÿ*‚7ÿ+ƒ8ÿ+ƒ9ÿ+„:ÿ,…;ÿ,†<ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿX£hÿòøóÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿÿ÷ƒE((èÿÿ’’’ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷úøÿ`Ÿgÿ)~3ÿ)4ÿ*€5ÿ*6ÿ*‚7ÿ+ƒ8ÿ+ƒ9ÿ+„:ÿ,…;ÿ,†;ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿU¡eÿð÷òÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿÿø“aE+ +êÿÿ–––ÿÿÿÿÿÿÿÿÿÿÿÿÿöùöÿ\žeÿ*€5ÿ*6ÿ*‚7ÿ+‚8ÿ+ƒ9ÿ+„:ÿ,…:ÿ,†;ÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿR cÿïöðÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°ÿÿÿÿÖ§jD2$.ìÿÿ›››ÿÿÿÿÿÿÿÿÿÿÿÿÿõùõÿZcÿ*7ÿ+‚8ÿ+ƒ9ÿ+„9ÿ,…:ÿ,†;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹@ÿ.‹AÿPŸaÿíõïÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÿÿÿÿë²o9(1îÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿóøôÿXœbÿ+ƒ8ÿ+„9ÿ,…:ÿ,†;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ-Š?ÿ.‹@ÿ.‹AÿNž_ÿëôíÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿå€7$ 4ðÿÿ¢¢¢ÿÿÿÿÿÿÿÿÿÿÿÿÿò÷óÿUaÿ,…:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-Š?ÿ.Š@ÿ.‹AÿLœ]ÿêóìÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼ÿ ÿ@@@ÿÿ¸¸¸ÿÔÔÔÿñññÿòòòÿÖÖÖÿ»»»ÿÿ???ÿÿÿÿÿÑa- +êÿÿ‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿg§rÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ[¥kÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿêêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿŠŠŠÿÿÿÿù…6!(èÿÿ‚‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿj©uÿ,…;ÿ,†<ÿ,‡<ÿ-ˆ=ÿ-‰>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿ/Dÿ^¨oÿôùöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíííÿoooÿÿÿþ£?'%åÿÿ~~~ÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿn«xÿ,…;ÿ,†;ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ/Cÿ/Cÿ/ŽDÿ/Eÿaªrÿöú÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúýûÿßïãÿÀßÉÿ¢Ð®ÿͪÿ±Ø¼ÿÊäÑÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ÿÿÿÿ¬C("ãÿÿzzzÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿq­{ÿ,…:ÿ,†;ÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/ŽDÿ/Eÿ0Fÿ0‘Gÿb¬tÿ÷ûøÿÿÿÿÿàïäÿ½ÿ6˜Pÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ3šQÿ4šQÿ? [ÿ|¿ÿàðåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿ ÿÿþŽB&áÿÿvvvÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿs®}ÿ,…:ÿ,†;ÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ/Cÿ/ŽDÿ/Eÿ0Fÿ0Gÿ0‘Hÿ1’Iÿd®vÿv¸‡ÿ4–Lÿ2•Lÿ2–Mÿ2—Nÿ3˜Oÿ3™Pÿ3šPÿ4šQÿ4›Rÿ4œSÿ5Tÿ<¡[ÿ¨Ö¶ÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÿÿÿ÷s= Þÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿw°€ÿ,…:ÿ,†;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ.‹@ÿ@•QÿÉáÎÿMž^ÿ/ŽDÿ/Eÿ0Fÿ0Gÿ0‘Gÿ1’Hÿ1“Iÿ1”Jÿ2”Kÿ2•Lÿ2–Mÿ2—Nÿ3˜Oÿ3™Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5žVÿ6ŸVÿj¹‚ÿçôëÿÿÿÿÿÿÿÿÿÿÿÿÿµµµÿÿÿÚS2Ûÿÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿz²ƒÿ,…:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ-Š?ÿ.Š@ÿ?•QÿÜìßÿÿÿÿÿèóêÿKž^ÿ0Fÿ0Fÿ0‘Gÿ1’Hÿ1“Iÿ1”Jÿ1”Kÿ2•Lÿ2–Mÿ2—Nÿ3˜Nÿ3™Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5Uÿ5žUÿ6ŸVÿ6 Wÿ6¡XÿA§bÿÝïãÿÿÿÿÿÿÿÿÿÿÿÿÿuuuÿÿÿF$ Øÿÿkkkÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ}´†ÿ+…:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ.Š@ÿ>”OÿÙêÝÿÿÿÿÿÿÿÿÿÿÿÿÿæñèÿI\ÿ0‘Gÿ0’Hÿ1“Iÿ1“Jÿ1”Kÿ2•Lÿ2–Mÿ2—Mÿ3˜Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ6¢Yÿ7¢Zÿa¶}ÿýþýÿÿÿÿÿÿÿÿÿïïïÿÿÿáV2Õÿÿgggÿþþþÿÿÿÿÿÿÿÿÿþÿþÿ¶Šÿ+„:ÿ,…;ÿ,†<ÿ,‡<ÿ-ˆ=ÿ-‰>ÿ-‰?ÿ.Š@ÿ<“Nÿ×éÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãðæÿGž\ÿ1’Iÿ1“Jÿ1”Kÿ2•Lÿ2–Lÿ2—Mÿ3—Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ6¡Yÿ7¢Zÿ7£[ÿ7¤[ÿ¢Õ³ÿÿÿÿÿÿÿÿÿÿÿÿÿ‡‡‡ÿÿÿ‰?Òÿÿdddÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿ…¸ÿ+„:ÿ,…;ÿ,†<ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ:’LÿÔèØÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿàïäÿD[ÿ1”Kÿ2•Kÿ2–Lÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6 Xÿ6¡Yÿ7¢Zÿ7£Zÿ7¤[ÿ8¥\ÿ=§aÿßñåÿÿÿÿÿÿÿÿÿñññÿÿÿ¾J$ Ïÿÿ```ÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿˆ¹ÿ+„:ÿ,…;ÿ,†;ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ.Š@ÿ9‘KÿÒæÖÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÿ&&&ÿÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿ_¬rÿ2•Kÿ2–Lÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ3šQÿ4›Qÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6ŸWÿ6 Xÿ6¡Yÿ7¢Yÿ7£Zÿ7¤[ÿ8¥\ÿ8¥]ÿ8¦^ÿm¾ŠÿÿÿÿÿÿÿÿÿÿÿÿÿHHHÿÿíQ*Ìÿÿ]]]ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿŒ¼”ÿ+„:ÿ,…:ÿ,†;ÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ8JÿÏåÔÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÜÿÿÿˆˆˆÿÿÿÿÿÿÿÿÿçòêÿ3•Lÿ2•Lÿ2–Mÿ3—Nÿ3˜Oÿ3™Pÿ3šPÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ,‚GÿK)ÿ (ÿ.ÿS.ÿ1’Qÿ8¤\ÿ8¥]ÿ8¦^ÿ8§_ÿ;©aÿðùóÿÿÿÿÿÿÿÿÿ˜˜˜ÿÿÿs.»ÿÿYYYÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿ¾–ÿ+„9ÿ,…:ÿ,†;ÿ,†<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ-Š@ÿ7HÿÍãÒÿÿÿÿÿÿÿÿÿÿÿÿÿßßßÿÿÿÿ²²²ÿÿÿÿÿÿÿÿÿ¥Ð°ÿ2•Lÿ2–Mÿ2—Nÿ3˜Oÿ3™Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5žVÿY0ÿÿÿÿÿÿ ÿ&p?ÿ8¦^ÿ8§^ÿ9¨_ÿ9¨`ÿ¸àÇÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿŽ1/ÿÿVVVÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿ”Àšÿ+„9ÿ,…:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰?ÿ-Š?ÿ5ŽGÿÊáÏÿÿÿÿÿÿÿÿÿÿÿÿÿáááÿ ÿÿÿÿÜÜÜÿÿÿÿÿÿÿÿÿ…À”ÿ2–Mÿ2—Nÿ3˜Nÿ3™Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5žVÿ$j9ÿÿÿ---ÿYYYÿ@@@ÿ ÿÿÿ.‰Mÿ9§_ÿ9¨`ÿ9©aÿ•Ñ«ÿÿÿÿÿÿÿÿÿïïïÿÿÿ 2vÿÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿ—Âÿ+„9ÿ+…:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ>ÿ-‰>ÿ-Š?ÿ5ŽFÿÇàÌÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿ###ÿÿÿÿÿýýýÿÿÿÿÿÿÿÿÿnµÿ2—Mÿ3˜Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5Tÿ5Uÿ5žUÿ3˜Rÿÿÿ¶¶¶ÿÿÿÿÿÿÿÿÿÿÿÿÿåååÿCCCÿÿ &ÿ9¨`ÿ9©aÿ:ªbÿ€É›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°1xÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÍ¯ÿ+„9ÿ+„:ÿ,…;ÿ,†<ÿ,‡=ÿ-ˆ=ÿ-‰>ÿ-‰?ÿ4EÿÅßÊÿÿÿÿÿÿÿÿÿÿÿÿÿæææÿ%%%ÿÿÿòÿ'''ÿÿÿÿÿÿÿÿÿÿÿÿÿ]­sÿ3˜Nÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ5œSÿ5Tÿ5žUÿ5ŸVÿ(u@ÿÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿ"""ÿÿ5œYÿ:ªbÿ:«bÿpÂŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼/xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶‰ÿ+„:ÿ,…;ÿ,†<ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ3DÿÂÝÇÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿ(((ÿÿÿŒ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿo¶‚ÿ3˜Oÿ3™Pÿ4šQÿ4›Rÿ4œSÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 WÿW0ÿ888ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ÿÿ*|Gÿ:ªbÿ:«cÿ€É›ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­-xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶Šÿ,…;ÿ,†;ÿ,‡<ÿ-ˆ=ÿ-ˆ>ÿ-‰?ÿ2ŒDÿ¿ÜÅÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ+++ÿÿÿ‘vÿÿüüüÿÿÿÿÿÿÿÿÿ…Á•ÿ3™Pÿ4šQÿ4›Rÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6 Wÿ6 XÿU/ÿmmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÇÇÿÿ*zFÿ:«cÿ:«cÿ•Ò«ÿÿÿÿÿÿÿÿÿïïïÿÿÿ™*xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶Šÿ,†;ÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ1ŒCÿ¼ÚÂÿÿÿÿÿÿÿÿÿÿÿÿÿìììÿ...ÿÿÿ–Zÿÿæææÿÿÿÿÿÿÿÿÿ©Ô¶ÿ3šQÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5ŸVÿ6ŸWÿ6 Xÿ6¡Xÿ(u@ÿ[[[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶¶ÿÿ5œZÿ:«cÿ:«cÿ¹áÇÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿƒ& xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·Šÿ,‡<ÿ-‡=ÿ-ˆ>ÿ-‰?ÿ/‹Bÿ¹Ø¿ÿÿÿÿÿÿÿÿÿÿÿÿÿîîîÿ111ÿÿÿ›7ÿÿ¨¨¨ÿÿÿÿÿÿÿÿÿåòéÿ4šQÿ4›Rÿ4œSÿ5Tÿ5žUÿ5žVÿ6ŸWÿ6 Wÿ6¡Xÿ7¢Yÿ4™Uÿ!)#ÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtttÿ "ÿ:«cÿ:«cÿ<¬eÿðùóÿÿÿÿÿÿÿÿÿ˜˜˜ÿÿÿa xÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ò¶ÿ{´…ÿ{´†ÿ{µ‡ÿ{¶‡ÿºÙÀÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿ555ÿÿÿ éÿXXXÿÿÿÿÿÿÿÿÿÿÿÿÿ]¯uÿ4œSÿ5Tÿ5žUÿ5žVÿ6ŸVÿ6 Wÿ6¡Xÿ6¢Yÿ7£Zÿ7£[ÿ#i;ÿxxxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿ.ˆOÿ:«cÿ:«cÿoÁÿÿÿÿÿÿÿÿÿÿÿÿÿGGGÿÿé9xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòòÿ888ÿÿÿ¥šÿÿùùùÿÿÿÿÿÿÿÿÿÖëÜÿ8ŸWÿ5Uÿ5žUÿ6ŸVÿ6 Wÿ6¡Xÿ6¢Yÿ7¢Zÿ7£[ÿ7¤\ÿ8¥]ÿW1ÿWXWÿÍÍÍÿøøøÿßßßÿÿÿ&o@ÿ:«cÿ:«cÿ@®hÿàòçÿÿÿÿÿÿÿÿÿðððÿÿÿ²-xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿ<<<ÿÿÿ©Hÿÿ–––ÿÿÿÿÿÿÿÿÿÿÿÿÿ–̦ÿ5žUÿ5ŸVÿ6 Wÿ6¡Xÿ6¡Yÿ7¢Zÿ7£[ÿ7¤\ÿ8¥\ÿ8¦]ÿ8¦^ÿ-„KÿI*ÿ %ÿ+ÿR/ÿ3–Wÿ:«cÿ:«cÿ:«cÿ¥Ø·ÿÿÿÿÿÿÿÿÿÿÿÿÿ„„„ÿÿÿl xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ???ÿÿÿ®×ÿÿôôôÿÿÿÿÿÿÿÿÿúýûÿX°sÿ6 Wÿ6¡Xÿ6¡Yÿ7¢Zÿ7£Zÿ7¤[ÿ8¥\ÿ8¦]ÿ8¦^ÿ9§_ÿ9¨`ÿ9©aÿ9ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿe½…ÿýþþÿÿÿÿÿÿÿÿÿîîîÿÿÿÖHÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿ²Pÿÿ~~~ÿÿÿÿÿÿÿÿÿÿÿÿÿ×ìÝÿ@¥aÿ6¡Yÿ7¢Yÿ7£Zÿ7¤[ÿ8¥\ÿ8¥]ÿ8¦^ÿ9§_ÿ9¨`ÿ9©aÿ9ªaÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿH±nÿàòçÿÿÿÿÿÿÿÿÿÿÿÿÿuuuÿÿÿN Õÿÿÿÿÿÿÿÿÿÿÿÿ²Æÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿæóêÿi¹ƒÿ7£Zÿ7¤[ÿ8¤\ÿ8¥]ÿ8¦^ÿ8§_ÿ9¨`ÿ9©`ÿ9©aÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿrÃÿì÷ðÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿ»`˜˜˜˜˜˜˜˜˜‘;/ôÿÿÞÞÞÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ¦×¶ÿ=§aÿ8¥]ÿ8¦^ÿ8§_ÿ9¨_ÿ9¨`ÿ9©aÿ:ªbÿ:«cÿ:«cÿ:«cÿC¯jÿ°ÝÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿ ÿÿî$Rþÿ###ÿ×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßñåÿƒÈ›ÿG®jÿ9¨_ÿ9¨`ÿ9©aÿ:ªbÿ:«cÿ:«cÿK²pÿ‡Ì ÿæôëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐÐÿÿÿüG{ÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿÕíÝÿ¼âÊÿ§Ù¹ÿ¨Úºÿ½ãËÿ×îßÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±±ÿ ÿÿÿswþÿÿkkkÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿgggÿÿÿünPôÿÿÿ†††ÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿ‚‚‚ÿ ÿÿÿñI-½ÿÿÿÿ999ÿ‰‰‰ÿ²²²ÿËËËÿãããÿãããÿÊÊÊÿ±±±ÿ‡‡‡ÿ777ÿÿÿÿÿ´&IÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎB7ˆØÿÿÿÿÿÿÿÿ×…37QkkQ7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿ?ÿ€ÿÿüÿ€ÿÿøÿ€ÿðÿ€?ÿàÿ€ÿÀÿ€€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿ€ÿÀÿà?ÿðÿøÿÿüÿÿþÿÿÿÿÿÿ€ÿÿÿÀÿÿÿàÿÿðÿÿøÿÿøÿÿðÿÿàÿÀ?ÿ€?ÿþüøðàÀ€€€€€€€€€€€€€€€€?À€À€ÿà€ÿààÿð?ÿÿÿøÿÿÿüÿÿÿÿþÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿàÿÿÿÿÿøÿÿÿÿÿÿÿÿÿ(€        "$&'((((((((('''''&%$!   #&'())(('''&&%%$$#"!  ")/369:;;;;;;;;;;::::9862,%  &,269:<<<;;;::9988776530,&  %09AFJMNOOOOOOOOOONNNNMLID=4)  %.7?EILNOPPOOONNMMLLKKJIGC>7-#  ">¡ÒéëëëìììììììììììììììæÇ”VNC7* )4?o¹ÞëëììììììììììììëëëëëÞ¶lG</" ZëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏfRE6(  +8D©ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù”J;+ -íÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝgRC4&   ,9G¶ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýzD3" ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜePA2$  ,:H´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛK9'  ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙbN?1$  ,:H±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûT<) ïÿÿÿÿÁÁÁÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿžžžÿÿÿÿÿÿÿ×`M?1$  +9H®ÿÿÿÿÿÿrrrÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿÈÈÈÿ%%%ÿÿÿÿÿl>+ñÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿÕ_M?2'  +9Gªÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿm?+ñÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÒ^NA6+#  +9G¨ÿÿÿÿÿÿmmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿm?+ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÑ_QF<4.*(&%$$##"!   +8G¤ÿÿÿÿÿÿiiiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿm>+ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡¡¡ÿÿÿÿÿÿÿÏbVNGA=;9877654421/,(#+8F ÿÿÿÿÿÿeeeÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿm>*ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎg^XTQOMLKKJJIHGEC?:4,$!,8Gžÿÿÿÿÿÿaaaÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿl=*ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜˜˜ÿÿÿÿÿÿÿÍyusqonmmllkjjdXVRMF=4,&$'/:G›ÿÿÿÿÿÿ\\\ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿk=)ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛçÛÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿ>€=ÿNŠMÿåîåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿë¸g^WNE<647?I˜þÿÿÿÿÿXXXÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûøÿl«wÿF–TÿG–UÿG–UÿG–UÿG–UÿG—VÿG—VÿG˜WÿG˜Wÿ´Ö»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿk<) ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ@?ÿçïçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåte]UMHFIO˜þÿÿÿÿÿUUUÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿf§rÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿk;( ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿC„Cÿéñéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËpjc]YWY™þÿÿÿÿÿQQQÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿh©tÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹AÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿk;( ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿE…Eÿëòëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒsojgfœýÿÿÿÿÿMMMÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿl«wÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹AÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿj:' ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿHˆHÿíóíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£yvtr ýÿÿÿÿÿIIIÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿo¬zÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿj:' ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$q%ÿKŠKÿïôïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿ³}{z¤ýÿÿÿÿÿFFFÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿr®}ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿj:' ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q&ÿMOÿðõðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿ³~¤üÿÿÿÿÿBBBÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿv°€ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿªÑ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿj9& ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$r&ÿ%r&ÿQRÿñöñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿ´¤üÿÿÿÿÿ???ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿy²ƒÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/CÿªÑ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿi9& ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÕÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿS‘Vÿó÷óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿ´£üÿÿÿÿÿ<<<ÿôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ|´†ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/CÿªÑ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿi9& ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖäÖÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s(ÿ%t(ÿV“XÿôøôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÔûÿÿÿÿÿ888ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ€¶‰ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ«Ñ³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿi8% ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿu¤tÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$r&ÿ$r&ÿ%r'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t)ÿY•[ÿöùöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿÿÿÿÿÿ555ÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ¸Œÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/CÿY¥jÿóøôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿh8% ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿr¢qÿ#n"ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ%r'ÿ%s'ÿ%s'ÿ%t(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ\˜_ÿáìâÿäîäÿäîäÿäîåÿäîåÿäîåÿäîåÿäîåÿäîåÿäîåÿäîåÿìôíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿÿÿÿÿ222ÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ºÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/CÿW¤hÿñ÷óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿf6$ îÿÿÿÿñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿn nÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ%r'ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z.ÿ(z/ÿ({/ÿk¤pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿÿÿÿ///ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿм“ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ/Cÿ/CÿU¢fÿð÷ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ***ÿÿÿÿÿc4" ËÿÿÿÿJJJÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿkžkÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ%r&ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z.ÿ(z/ÿ(z/ÿ({0ÿk¤pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿÿÿ,,,ÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ޾–ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/CÿR¡dÿîöðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{{ÿÿÿÿÿûI1 “ÿÿÿÿÿMMMÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüûÿhœhÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ%r&ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t)ÿ%u)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z.ÿ(z/ÿ(z/ÿ({0ÿ({0ÿk¥qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿÿ***ÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’Àšÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/CÿPŸaÿìõîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿÿÿ×?,ðÿÿÿÿÿQQQÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿd›eÿ$q%ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s(ÿ%t(ÿ%t)ÿ%u)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'w,ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ({0ÿ({0ÿ(|0ÿk¥qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿÿ'''ÿçççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–Ãÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/CÿNž_ÿëôíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ………ÿÿÿÿÿÿþt8& VýÿÿÿÿÿUUUÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùûùÿa™bÿ%r&ÿ%r'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'w,ÿ'x,ÿ'x-ÿ'y-ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ({0ÿ({0ÿ(|0ÿ(|1ÿk¥qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿÿ$$$ÿåååÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™Ä ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/CÿL]ÿéóëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠŠŠÿÿÿÿÿÿÿª@/  _ýÿÿÿÿÿYYYÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûøÿ^—`ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'w,ÿ'x,ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿk¥rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿ"""ÿãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿǤÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿI›[ÿçòêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´E5&cþÿÿÿÿÿ]]]ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöú÷ÿ\–^ÿ%t(ÿ%t(ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ'w,ÿ'x,ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿk¥rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡É¨ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿGšYÿåñèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”””ÿÿÿÿÿÿÿ¸H9* gþÿÿÿÿÿaaaÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöùöÿX•[ÿ%t)ÿ&u)ÿ&u*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿk¥rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿpppÿÿÿÞÞÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥Ë«ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ/CÿFšXÿãðæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿÿ¼K;, kÿÿÿÿÿÿfffÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôøôÿW”Yÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z.ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿk¦rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨Í®ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/CÿC˜Uÿáïäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿M=.!oÿÿÿÿÿÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó÷óÿT’Wÿ&v*ÿ&v+ÿ&w+ÿ&w,ÿ'x,ÿ'x-ÿ'x-ÿ'y.ÿ'y.ÿ'z.ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿk¦rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬Ï²ÿ-†<ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/CÿB—TÿÞíâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢¢¢ÿÿÿÿÿÿÿÃN>0"tÿÿÿÿÿÿoooÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñöòÿQ‘Uÿ&w+ÿ&w,ÿ'w,ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'z.ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿk§sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ-†<ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ@–RÿÝìàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¦¦ÿÿÿÿÿÿÿÆO?1# xÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðõðÿO‘Tÿ'w,ÿ'x,ÿ'x-ÿ'y-ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~4ÿk§sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ó¸ÿ.†=ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ>•QÿÚëÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªªªÿÿÿÿÿÿÿÊQA2$ |ÿÿÿÿÿÿxxxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîôîÿMQÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'z/ÿ(z/ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿk§sÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶Õ»ÿ.†=ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ=•PÿØêÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®®®ÿÿÿÿÿÿÿÌSB3% ÿÿÿÿÿÿ}}}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìóíÿKPÿ'y.ÿ'y.ÿ'z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿl§tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹×¾ÿ/‡>ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ;”NÿÕèÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²²²ÿÿÿÿÿÿÿÏUC4& …ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëòëÿHNÿ'z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ*€5ÿl§tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÙÁÿ/‡>ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ:“MÿÒæÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶¶ÿÿÿÿÿÿÿÒXD6' Šÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéñêÿFLÿ({/ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ*5ÿ*€5ÿAKÿs¬{ÿs¬{ÿs­{ÿs­{ÿs­|ÿs­|ÿs­}ÿs®}ÿs®}ÿs®}ÿr®|ÿ0‡?ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ9’LÿÐåÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºººÿÿÿÿÿÿÿÕZF7) Žÿÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçðèÿELÿ({0ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*6ÿ*6ÿ*7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ8’KÿÍäÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾ÿ ÿÿÿÿÿÿÙ`J;, “ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåïæÿBŒJÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ6‘JÿÊâÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿ ÿÿÿÿÿÿÜfQA2$ —ÿÿÿÿÿÿ”””ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãîäÿ@‹Hÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ6‘IÿÈáÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÅÅÿ ÿÿÿÿÿÿàp[L<-! ›ÿÿÿÿÿÿ˜˜˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáíâÿ?ŠGÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*7ÿ*‚7ÿ+‚7ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ5HÿÄßÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿÿãygZL=/$ Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßìáÿ=ŠFÿ)~3ÿ)4ÿ)4ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*7ÿ*‚7ÿ+‚7ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ3FÿÁÝÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿæri^QD8-$ £ÿÿÿÿÿÿ¡¡¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝêÞÿ;ŠFÿ)4ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ2ŽFÿ¾ÛÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿè‡zumdZOE;3+$ §ÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚéÜÿ;ŠEÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ1ŽEÿ»ÚÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÒÒÿÿÿÿÿÿÿÿüïàϾª”{VLD=5-% ªÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØèÚÿ9‰Dÿ*6ÿ*6ÿ*7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ0Dÿ·Ø¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¾ƒRG?7.& ®ÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕæØÿ7‰Cÿ*7ÿ*‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ0Cÿ´Ö»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó¾L@7.& ²ÿÿÿÿÿÿ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓåÕÿ7‰Cÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ/ŒCÿ±Ô¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòL@6,# µÿÿÿÿÿÿµµµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐäÓÿ6‰Bÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ/ŒCÿ­ÒµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåƒH=3)  ¹ÿÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍâÐÿ4ˆBÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ©Ð±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿBBBÿ```ÿ|||ÿ˜˜˜ÿ³³³ÿÏÏÏÿëëëÿêêêÿÐÐÐÿ¶¶¶ÿœœœÿ‚‚‚ÿiiiÿGGGÿÿÿÿÿÿÿÿÿÿÿÿÑkD9/$ ¼ÿÿÿÿÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËáÎÿ3‰Bÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ¦Î®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããÿ!!!ÿÿ ÿTTTÿ¨¨¨ÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿ©©©ÿWWWÿ ÿÿÿÿÿÿÿÿÿü¸S?4) ¤ÿÿÿÿÿÿ———ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãïåÿA‘Nÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ2ŽFÿÆàËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿ[[[ÿ­­­ÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿ´´´ÿ[[[ÿÿÿÿÿÿÿÿÿàcD8-" Ÿÿÿÿÿÿÿ‘‘‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåðçÿD’Qÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ/Cÿ6‘JÿÈáÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÒÒÿEEEÿÿÿÿÿÿÿÿïvH<0$ šÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçñèÿF”Sÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Dÿ7’KÿÌãÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶¶ÿ***ÿÿÿÿÿÿÿùŒL?3& –ÿÿÿÿÿÿˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéòêÿH•Uÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ8”MÿÎåÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿ———ÿÿÿÿÿÿÿþ¥OB5( ‘ÿÿÿÿÿÿ„„„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêóìÿK–Wÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/Eÿ/Eÿ;•OÿÑæÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿ!!!ÿÿÿÿÿÿÿµQC5( ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíôîÿM˜Zÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/Eÿ/Eÿ0Fÿ0Fÿ;–PÿÓèØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿÜíàÿ¬Õ·ÿ|¼ÿYªoÿJ£cÿ<›Vÿ3˜Nÿ5™PÿF£`ÿ[­rÿq¸…ÿ†Ã—ÿ«Õ·ÿêõíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ;;;ÿÿÿÿÿÿÿ™RD6( ˆÿÿÿÿÿÿ{{{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîõïÿP™\ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ0Fÿ0Fÿ0Fÿ0‘Gÿ=˜SÿÕéÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßîãÿŽÄ›ÿBZÿ2–Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4›Qÿ5›Sÿ_°wÿŸÐ®ÿßïäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿ]]]ÿÿÿÿÿÿúRC5' ƒÿÿÿÿÿÿvvvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðöñÿR›^ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ0Eÿ0Fÿ0Fÿ0‘Gÿ0‘Gÿ0‘Hÿ>™Tÿ×êÜÿÿÿÿÿÿÿÿÿÿÿÿÿÆâÍÿb®vÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿqº‡ÿßïäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚‚ÿÿÿÿÿÿïlQB3$~ÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ÷òÿUœaÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ0Eÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Iÿ@›WÿÚìÞÿàïäÿn´€ÿ1”Kÿ2•Kÿ2•Lÿ2•Lÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ7ŸWÿ‡ÅšÿíöðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhhhÿÿÿÿÿÿÛ`O?/! zÿÿÿÿÿÿmmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóÿWžbÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ0Eÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Hÿ1’Iÿ1“Iÿ>šUÿ5–Nÿ1”Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ?¤^ÿ®Ø»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ;;;ÿÿÿÿÿÿÀZK;+ uÿÿÿÿÿÿiiiÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôùõÿZŸdÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ|·ˆÿ«Ñ³ÿ0Dÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/Eÿ0Eÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0’Hÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 WÿŽÊ¡ÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿÿÿÿÿÿÿˆVF6&pÿÿÿÿÿÿeeeÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùöÿ\ gÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿyµ…ÿýþþÿÿÿÿÿ©Ð²ÿ/Cÿ/ŽDÿ/ŽDÿ/Eÿ/Eÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0’Hÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿr½Šÿöû÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿÿÿÿÿÿÛ`Q@/  lÿÿÿÿÿÿaaaÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ú÷ÿ_¢jÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿu³‚ÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿ¥Î®ÿ/ŽDÿ/Eÿ/Eÿ0Fÿ0Fÿ0Fÿ0‘Gÿ0‘Gÿ0‘Hÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ[³xÿðøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿ’[J9(gþÿÿÿÿÿ]]]ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûøÿb¤lÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿr±€ÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡Ì«ÿ/Eÿ0Fÿ0Fÿ0Fÿ0‘Gÿ0‘Gÿ0‘Hÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿkº…ÿüþüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ111ÿÿÿÿÿãdSB0  cþÿÿÿÿÿYYYÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿe¦oÿ+„:ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿo°}ÿûýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿʧÿ0Fÿ0Fÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¢Yÿ7¢Yÿ7¢Zÿ7£ZÿË£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿÿÿÿÿš[J8& _ýÿÿÿÿÿVVVÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿh§rÿ+„:ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿk®yÿúüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™È¤ÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2•Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿµÝÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿÿÿÿÿèdR?-ZýÿÿÿÿÿRRRÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿk©uÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿh«vÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”Æ ÿ0‘Hÿ0’Hÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ=§aÿßñåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿÿÿÿÿÿšXF3" VüÿÿÿÿÿNNNÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿn«xÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹AÿfªtÿøûùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄœÿ1’Hÿ1’Iÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿvÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUUÿÿÿÿÿÌ^L9' RûÿÿÿÿÿKKKÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿr¬{ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿb¨qÿ÷úøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹Â™ÿ1“Iÿ1“Jÿ1”Jÿ1”Kÿ2”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿÔìÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿ÷eQ>+NúÿÿÿÿÿGGGÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿu®~ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿ.‹Aÿ`§nÿöú÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡À•ÿ1”Jÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿk½‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVC/KùÿÿÿÿÿDDDÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿx°ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹Aÿ]¥kÿõúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ^^^ÿ888ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ·ÚÀÿ1”Jÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿÊèÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhhhÿÿÿÿÿ¾YF3! GøÿÿÿÿÿAAAÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ|³…ÿ+„9ÿ+„:ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.‹AÿZ¤iÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿbbbÿÿÿ;;;ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqµ‚ÿ1”Kÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿ8§_ÿ}Å–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶¶¶ÿÿÿÿÿí\I5# C÷ÿÿÿÿÿ===ÿôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ€µˆÿ+„9ÿ+„:ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿ.‹AÿX¢gÿòøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿgggÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóùôÿ7—Pÿ2•Kÿ2•Lÿ2•Lÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6ŸVÿ,„Hÿ!a5ÿ?"ÿK)ÿ&o=ÿ2“Rÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§_ÿ9§_ÿE­iÿûýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿ ÿÿÿÿÿ{L8% @õÿÿÿÿÿ:::ÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒ·‹ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹AÿU¡eÿð÷òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿlllÿÿÿÿÿOOOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²×¼ÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ2’Pÿ7ÿÿÿÿÿÿÿÿ ÿ]3ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§_ÿ9§_ÿ9¨_ÿ9¨`ÿÌèÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿQQQÿÿÿÿÿ¨N:' :ôÿÿÿÿÿ777ÿñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡¹ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿSŸcÿïöñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿqqqÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿm³ÿ2•Kÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ't?ÿ ÿÿÿÿÿÿÿÿÿÿÿ0ÿ3—Tÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§^ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿϦÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–––ÿÿÿÿÿ»O;( âÿÿÿÿÿ444ÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹»“ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.‹@ÿPž`ÿîõïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvvvÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿ6—Oÿ2•Lÿ2–Lÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿJ(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*{Eÿ8¦^ÿ8¦^ÿ8§^ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿUµwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÌP<) Šÿÿÿÿÿ111ÿîîîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½–ÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.‹@ÿN^ÿëôíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèóëÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ!c5ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ4™Wÿ8§^ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ:ªbÿûýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÍÍÿÿÿÿÿÛP<) Åÿÿÿÿ...ÿìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“Àšÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿLœ]ÿêóìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑç×ÿ2–Lÿ2–Mÿ2–Mÿ2—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5ŸVÿ2’Oÿ ÿÿÿÿÿ<<<ÿpppÿ¤¤¤ÿÁÁÁÿ”””ÿaaaÿ'''ÿÿÿÿÿÿ="ÿ8§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªaÿ:ªbÿéõíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæææÿÿÿÿÿëP<) ìÿÿÿÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—Âÿ+ƒ9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿJšZÿèòêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿ(((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÜÃÿ2–Mÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ9ÿÿÿÿÿ½½½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿÿÿÿÿÿÿ*zFÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿÕíÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿÿÿÿÿúP<) ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›Å¡ÿ+ƒ9ÿ+„9ÿ+„:ÿ+…:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ.Š@ÿG™Xÿæñéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢Ï®ÿ2–Mÿ2—Mÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ+~EÿÿÿÿQQQÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿ%%%ÿÿÿÿ ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«cÿÀäÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[;( ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÇ¥ÿ+ƒ9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿF˜Wÿäðæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‘‘ÿÿÿÿÿÿÿÿÿÿÿTTTÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÃšÿ2—Mÿ2—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿZ1ÿÿÿ$$$ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÍÍÿÿÿÿÿ5œYÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«cÿ:«cÿ¬Ü¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿÿÿÿÿl:' ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞìàÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿD—Tÿâïåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–––ÿÿÿÿÿÿÿÏÿÿÿÿSSSÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‰Ã˜ÿ2—Nÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3šPÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ< ÿÿÿÃÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~ÿÿÿÿ*}Hÿ9©aÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ¬Ü¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿÿÿÿÿk9& ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ+„9ÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿB–Sÿàîãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÿÿÿÿÿÿœ3ÿÿÿÿ999ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžÎ«ÿ3—Nÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ ÿÿXXXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿÿÿÿ\5ÿ9ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿÀäÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿY8% ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ+„9ÿ+„:ÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ@•PÿÝìàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿ¡ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³Ø½ÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ5Vÿÿÿ“““ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿKKKÿÿÿ<"ÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿÕíÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿÿÿÿÿûK7$ ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ+„:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ>“OÿÛëÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤¤ÿÿÿÿÿÿÿ¦ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈãÏÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ5VÿÿÿÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ~~~ÿÿÿ:!ÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿéõíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿÿÿÿÿëI5# ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ=’MÿÙêÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿÿÿÿÿÿªßÿÿÿÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝîáÿ3™Oÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ ÿÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªªªÿÿÿ[4ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ;«dÿûýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍÍÍÿÿÿÿÿÚH4! ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,…:ÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-Š?ÿ.Š@ÿ<’Mÿ×éÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿ¯ÃÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ûøÿ9œUÿ3™Pÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¢Yÿ: ÿÿÓÓÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿ*|Hÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿV·yÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÊE2  ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,…;ÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ.Š@ÿ:‘KÿÔçØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±±ÿÿÿÿÿÿÿ³¨ÿÿÿÿ···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿn·ƒÿ3šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢YÿY1ÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿ5[ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ‘Шÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ÿÿÿÿÿ¸C/ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,†;ÿ,†<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ9JÿÑæÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµµµÿÿÿÿÿÿÿ·Œÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­×¹ÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ*}Eÿÿlllÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ$$$ÿÿÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÌé×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿSSSÿÿÿÿÿ£@,ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,†<ÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-Š@ÿ8IÿÏäÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿÿÿÿÿÿ¼Tÿÿÿÿ###ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëõîÿ5šRÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£Zÿ3ÿÿâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©©©ÿÿÿ(vDÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿF°lÿûýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿ ÿÿÿÿÿr<)ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ,†<ÿ,‡<ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-‰?ÿ-‰?ÿ-Š@ÿ6GÿËâÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½½½ÿ ÿÿÿÿÿÿÀ öÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ_°wÿ4›Rÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ1’QÿÿEEEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿÿÿ6ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ}Șÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ···ÿÿÿÿÿíK7% ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùöÿÊáÎÿÊáÎÿÊáÎÿÊáÏÿÊáÏÿÊáÏÿÊáÏÿÊâÏÿËâÏÿáîãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿ ÿÿÿÿÿÿà °ÿÿÿÿ„„„ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ø»ÿ4›Rÿ4œSÿ4œSÿ5Tÿ5Tÿ5žUÿ5žUÿ5žVÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ ]4ÿÿˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿIIIÿÿ ÿ4˜Xÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÊéÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiiiÿÿÿÿÿ¹E2! ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÅÅÿ ÿÿÿÿÿÿÇ ^ÿÿÿÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿS«mÿ4œSÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ7£\ÿ="ÿÿNNNÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿ&&&ÿÿ ÿ'tCÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿnÁŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?-ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿÿËûÿÿÿÿãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ÞÆÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ$k<ÿ ÿÿ|||ÿ°°°ÿäääÿüüüÿÔÔÔÿ¡¡¡ÿeeeÿÿÿ $ÿ2”Uÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÖîßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿöK7& ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿκÿÿÿÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ^±wÿ5Tÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ1‘Rÿ)ÿÿÿÿÿÿÿÿÿP/ÿ9¨aÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿzÆ–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUUUÿÿÿÿÿÁ=. ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿÒhÿÿÿÿÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍçÕÿ7ŸVÿ5žUÿ5ŸVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§_ÿ9§_ÿ9¨_ÿ6Ÿ[ÿ*}HÿY3ÿ6ÿC'ÿ#h<ÿ0Rÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿB®iÿâòèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿÿÿÿÿÿ~0$ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÓÓÿÿÿÿÿÿÿÕëÿÿÿÿ^^^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢Ò°ÿ5žVÿ5ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§^ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ¼âÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿÿÿÿÿà.$ ðÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿÿÿÿÿØoÿÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|Á’ÿ6ŸVÿ6 Wÿ6 Wÿ6¡Xÿ6¡Xÿ6¡Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦^ÿ8¦^ÿ8§^ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ—Ó­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿÿÿÿÿj Üÿÿÿÿ&&&ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿ(((ÿÿÿÿÿÿÿÛÝÿÿÿÿNNNÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøüùÿ^³yÿ6 Wÿ6 Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿuÄ‘ÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ111ÿÿÿÿÿÐ ¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞXÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéõíÿV¯sÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿg¾†ÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿL >þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿá ËÿÿÿÿÿÛÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóùõÿn»‡ÿ6¢Yÿ7¢Yÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ€ÉšÿúýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿ¾†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ"Aÿÿÿÿÿ***ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿÊ¡ÿ7¢Zÿ7£Zÿ7£[ÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿœÕ±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæææÿÿÿÿÿÿÿ8TÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó› ¨ÿÿÿÿÿNNNÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±Û¾ÿD©eÿ7¤[ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿJ²pÿ»âÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿ888ÿÿÿÿÿÿ•7888888888888888888* Ðÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñùóÿͤÿ<¦`ÿ8¥\ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿB®iÿ™Ô®ÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿcccÿÿÿÿÿÿÂêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæôëÿ~Å–ÿ:§^ÿ8¦^ÿ8¦^ÿ8§^ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ<¬eÿ†Ì ÿëöïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿyyyÿÿÿÿÿÿá=úÿÿÿÿÿfffÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì÷ðÿ®Û½ÿn¿Šÿ<¨bÿ9¨_ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ?­gÿsÃÿ³ÞÂÿðøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿSSSÿÿÿÿÿÿö1eÿÿÿÿÿÿBBBÿîîîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòùôÿ·ßÅÿ”Щÿ€È™ÿk¿‰ÿW·yÿC®iÿE¯kÿY¸{ÿmÁ‹ÿ‚Êœÿ–Ò¬ÿ»âÉÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿ222ÿÿÿÿÿÿÿY“ÿÿÿÿÿÿ%%%ÿÙÙÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿÿÿÿÿÿÿÿ‡ˆÿÿÿÿÿÿÿ———ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿ‡‡‡ÿ ÿÿÿÿÿÿþx]øÿÿÿÿÿÿ(((ÿ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ¤¤¤ÿÿÿÿÿÿÿÿõQ9èÿÿÿÿÿÿÿ>>>ÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿ444ÿÿÿÿÿÿÿÿä2ÏÿÿÿÿÿÿÿÿOOOÿ¥¥¥ÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíííÿ   ÿHHHÿÿÿÿÿÿÿÿÿÌ ŸþÿÿÿÿÿÿÿÿÿFFFÿ———ÿåååÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããÿ“““ÿBBBÿÿÿÿÿÿÿÿÿÿü™ 1½ÿÿÿÿÿÿÿÿÿÿÿ111ÿSSSÿnnnÿ‰‰‰ÿ¤¤¤ÿÀÀÀÿÛÛÛÿÙÙÙÿ¾¾¾ÿ£££ÿˆˆˆÿmmmÿRRRÿ///ÿÿÿÿÿÿÿÿÿÿÿÿ·,JÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐEeçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäaI™èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä•D;ŒÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙˆ7'JdšµÐëéδ™~cI%ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿþÿÿÿàÿÿÿÿÿøÿÿÿÀÿÿÿÿÿðÿÿÿ€ÿÿÿÿÿàÿÿ€ÿÿÿÿÿÀÿÿ€ÿÿÿÿ€ÿÿ€?ÿÿÿÿÿÿ€ÿÿÿþÿÿ€ÿÿÿüÿÿ€ÿÿÿøÿÿ€ÿÿÿðÿÿ€ÿÿÿàÿÿ€ÿÀÿÿ€ÿ€ÿÿ€ÿÿ€>ÿÿ€<ÿÿ€8ÿÿ€0ÿÿ€ ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿ€ÿÿÀÿÿÿàÿÿÿðÿÿÿøÿÿÿüÿÿÿþÿÿÿÿÿÿÿÿ€?ÿÿÿÿÀÿÿÿÿàÿÿÿÿÿàÿÿÿÿÿðÿÿÿÿÿøÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿ?ÿÿÿÿÿÿ€ÿÿÿÿÿÿÀÿÿÿÿÿÿàÿÿÿÿÿÿÿðÿÿÿÿÿÿøÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿþÿÿÿÿüÿÿÿø?ÿÿÿð?ÿÿÿàÿÿÿàÿÿÿÀÿÿÿ€ÿÿÿÿÿþÿÿüÿÿøÿÿðÿÿàÿÀÿ€ÿ?þ?ü?ø?ðàÀ€€€€€€€€€€€€€€€€€€€?€€À?€ÿÀ?€ÿÀ?€ÿà?€ÿà€ÿà€ÿðÿ€?ÿðÿ€ÿøÿ€ÿÿøÿ€ÿÿüÿÀÿÿüÿÀÿÿþÿðÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ(                 !""####$$$$#####################"""!    !"##$$$$$$$$$####"""""!!!!!   !#%&')*++,,,,----,,,,,,,,,,,,,,,,,,,,+++**)'&$"  !#%')*+,,---------,,,,++++*****))))(((''&&%#"    #&)+-/1234556666666666666666666666665555544320/,*&#   #&),.02345677777777666655554444333322221100/.,+)&$!  #'+.2479;<=>?@@@@@AA@@@@@@@@@@@@@@@@@@@@@???>=<:852/*&!   $(,/258:<=??@AAAAAAAA@@@@@???>>>>====<<<<;;:987642/,($    %*/37;>@CDFGHIJJJKKKKKKKJJJJJJJJJJJJJJJJJJIIIHGFDA?;72-(#  #(,048<?ADFGIJJKKKKKKKKKJJJJIIIIHHHHGGGGFFFEEDDCA@>;840,'"  %+16;@CGJLNPQRSSTTTTTTTTTTTTTTTTTTTTTTTTTSSSSRRQOMKHD@;5/)#  !&+059>BEHKNPQRSTUUUUUUUUTTTTSSSSSRRRRQQQQPPPOONNMKIGEA=94/)#  $*17Xˆ´ÌÎÏÐÐÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒѽ›y[VTPMHC=60)#  "(-38=BGY€¦ÈÐÑÑÑÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÒÑÑÑÑÑÑÑÑÑÑÑÑÑÑÐÇ£{VNJFA<6/)#   '.sêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø¢\YUPJD>70)"  $)/5;AF`ÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûºYNIC=6/(!  #3­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔp\WRLE>6/(!  $*07=CI•öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçzPJC<4-%  1ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô‡^YRLD=5.'   %+18?EOÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü“QJB:1)"  ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷†_YRKC<4-&  %+29@FPÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöiOG>6-%  eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿö„_XRJB;3,%  %+29@GPÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓSKB90(    ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõ‚^XPIA92+$  %+29@HOÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•OF<3*"  Qÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿô]WOH@91*#  %+29AHPÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇRH?5,#  ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó~\VNG?80)#  %,29AHP½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëTKA7-$  ´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò{\UNF?70)#  %+29AHPºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿdLB8/%  ÝÿÿÿÿÿÿÿÿÿŽŽŽÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ•••ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñy[TMF>70)#  %+29@HO·ÿÿÿÿÿÿÿÿÿÿÿÿÿeeeÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ˜˜˜ÿ444ÿÿÿÿÿÿÿÿÿÿƒMC9/&  âÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙÙÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿïwZTME>70*$  %+29@HO´ÿÿÿÿÿÿÿÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†ND:0&  âÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿîuZSLE>71*%  %+29@HO±ÿÿÿÿÿÿÿÿÿÿÿÿÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‡ND:0' áÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿìsZSLF?82,&!  %+29@GO®ÿÿÿÿÿÿÿÿÿÿÿÿÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‡ND:0' áÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿërZSMF@93.)$!  $+29@GNªÿÿÿÿÿÿÿÿÿÿÿÿÿeeeÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‡ND:0' áÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿéqZTNHA;61,(%"   $+29@GN§ÿÿÿÿÿÿÿÿÿÿÿÿÿaaaÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‡ND:0' áÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿÿÿÿÿÿÿÿÿÿÿÿÿÿèo[UOID>941-*(&%##"!!!   $+19@GN¤ÿÿÿÿÿÿÿÿÿÿÿÿÿ]]]ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†ND:0& áÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÈÈÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿæo\WQLGB=:631/.,++**)))(((''''&&&%%$$#"!  $+18@GN ÿÿÿÿÿÿÿÿÿÿÿÿÿYYYÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†ND9/& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÅÅÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿåo^YTOKGC@=;976544332222111000//..--,+)(&$! $*18@GNžÿÿÿÿÿÿÿÿÿÿÿÿÿUUUÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†MC9/& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿäp`\WSPLIGDCA@?>>===<<<;;;:::9988765431/,)&#$+18?GNšÿÿÿÿÿÿÿÿÿÿÿÿÿQQQÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†MC9/& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿâpc_\XURPNMKJIIHHGGFFFFEEEDDCCCBA@?>=:852/+'# %+18?GN˜þÿÿÿÿÿÿÿÿÿÿÿÿNNNÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†MC8/% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿárfc`][YWVUTSRRQQQPPPPOOONNNMMLKKJHFDB?;73/*&""&,29@GN”þÿÿÿÿÿÿÿÿÿÿÿÿJJJÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†LB8.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿàsjgeca`_^]\\[[ZZZYYYYXXXWWWVVUTSRPNKHD@<72.*&#! !"%).39@GN’þÿÿÿÿÿÿÿÿÿÿÿÿFFFÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ†LB8.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿß‹ˆ‡†„„ƒ‚‚€€€€€€€~~~}|h^]\[YWTQMIE@;62.+)((*-05;AHNýÿÿÿÿÿÿÿÿÿÿÿÿCCCÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ…LB7.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÖÁÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’YÿY’Yÿ™¼™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¯¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþäÁ˜da_\YVRMHC?:63100258=CIOŒüÿÿÿÿÿÿÿÿÿÿÿÿ@@@ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßìáÿd¦pÿ`¥lÿ`¥lÿ`¥mÿa¥mÿa¥mÿa¥mÿa¥nÿa¥nÿa¥nÿa¥nÿa¦nÿa¦nÿa¦nÿa¦nÿa¦nÿa§oÿb§oÿb§oÿ·ŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ…KA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ–º•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×xfda^ZUQLGC?<:99:=AEJPŠüÿÿÿÿÿÿÿÿÿÿÿÿ<<<ÿôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáîãÿB’Pÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿU cÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ…KA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ™¼™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõžjhea]YTPKHECBBCFIMRˆûÿÿÿÿÿÿÿÿÿÿÿÿ999ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäïæÿC“Qÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿU dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ…KA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿž¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤¤¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ’mkgd`[XTPMLKKLNQUˆûÿÿÿÿÿÿÿÿÿÿÿÿ666ÿñññÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåðçÿF•Tÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹AÿU dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„K@6-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ¡Á¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìxpmjfb_[XVTSSUWYˆúÿÿÿÿÿÿÿÿÿÿÿÿ333ÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçñéÿG–Uÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹AÿU dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„J@6,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ¤Ä¤ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆtqolifc`^\[\]^‰ùÿÿÿÿÿÿÿÿÿÿÿÿ000ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéóëÿJ—Xÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹AÿU dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„J@6,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ$p$ÿ¨Æ¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ‚usqnkigedccd‰øÿÿÿÿÿÿÿÿÿÿÿÿ---ÿìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëôíÿK˜Yÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹AÿU dÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„J@6,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ%q%ÿ¬É¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“““ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡xvurpnmkjij‹÷ÿÿÿÿÿÿÿÿÿÿÿÿ***ÿêêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíõîÿN™[ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„J@5,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ&q&ÿ¯Ë¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾{yxvusqpoo÷ÿÿÿÿÿÿÿÿÿÿÿÿ(((ÿèèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîöðÿP›^ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„J?5+# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ&q'ÿ³Í³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ|{zyxwuutöÿÿÿÿÿÿÿÿÿÿÿÿ%%%ÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðöñÿSœ`ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„I?5+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ's(ÿµÏµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿç~}|{zyyxõÿÿÿÿÿÿÿÿÿÿÿÿ"""ÿãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò÷óÿUžbÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„I?5+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ's(ÿ¹Ñ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿç~~}}||{’õÿÿÿÿÿÿÿÿÿÿÿÿ ÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóÿXŸeÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„I?5+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ(u*ÿ»Ó¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿç~~~}’ôÿÿÿÿÿÿÿÿÿÿÿÿÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôùõÿZ¡gÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿU¡eÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ„I?4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ)u+ÿ¿Ö¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿè’óÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöú÷ÿ^¢jÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿU¢fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒI>4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$r&ÿ$r&ÿ$r&ÿ%r&ÿ+v-ÿÁ×Âÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿ耀‘òÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ú÷ÿ`¤lÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿU¢fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒI>4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ,w.ÿÅÚÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿ耀€ñÿÿÿÿÿÿÿÿÿÿÿÿÿ×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûøÿc¦oÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/CÿU¢fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒH>4*" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ-x/ÿÇÛÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿ耀ðÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿf§rÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/CÿU¢fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒH>4*" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ.x0ÿÊÝËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿ耎ïÿÿÿÿÿÿÿÿÿÿÿÿÿÒÒÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿi©tÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/CÿU¢fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒH>4*! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬È¬ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ/{2ÿÍßÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿèíÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿm«wÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/CÿU£fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿƒH>3*! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®Ê®ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n#ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ0{4ÿÏàÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿðìÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿo¬yÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿW¤hÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‚G=3*! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöùöÿY’Yÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ3}6ÿÒâÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿr®|ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ6’JÿÈáÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ‚G=3)! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöùõÿWVÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ4~6ÿÔäÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿv°ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ5‘IÿÅàËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿG<2)  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôøôÿTŽSÿ#n"ÿ#n"ÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$r&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ59ÿ׿Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÂÂÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿz³ƒÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ4‘HÿÃÞÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿF<2(  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿó÷óÿRQÿ#n"ÿ#n"ÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ7;ÿ¸Ò¹ÿÂØÃÿÂØÃÿÂÙÃÿÂÙÃÿÂÙÃÿÂÙÃÿÂÙÃÿÂÙÃÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÙÄÿÂÚÄÿëóìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ}µ†ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ3Hÿ¿ÜÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿE;1( àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñöñÿO‹Nÿ#o#ÿ#o#ÿ#o#ÿ#o#ÿ$o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿµÑ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ€¶‰ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ2Gÿ¼ÛÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿÿÿÿÿÿÿÿÿ€D:0' Ûÿÿÿÿÿÿÿÿÿ×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïõïÿLŠLÿ#o#ÿ#o#ÿ#o#ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿµÑ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…¹ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ1Fÿ¹ÙÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@@@ÿÿÿÿÿÿÿÿÿÿ{B8.& ¯ÿÿÿÿÿÿÿÿÿ!!!ÿâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïôïÿJˆJÿ#o#ÿ$o$ÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿµÑ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµµµÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ»ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ1Eÿ¶×½ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmmÿÿÿÿÿÿÿÿÿÿÿ\@7-$ {ÿÿÿÿÿÿÿÿÿÿ$$$ÿåååÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíóíÿH‡Hÿ$p$ÿ$p$ÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ({0ÿ({0ÿµÑ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ½”ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ1Eÿ²ÕºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿïH>5+# Gÿÿÿÿÿÿÿÿÿÿÿ&&&ÿçççÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëòëÿF†Fÿ$p$ÿ$p$ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿—ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ0Eÿ¯Ô·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÌE;2)! ïÿÿÿÿÿÿÿÿÿÿÿ)))ÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêñêÿD…Dÿ$p%ÿ$q%ÿ$q%ÿ$q%ÿ$q%ÿ$r&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“Á›ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ0Eÿ¬Ò´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿ™B8/& `ÿÿÿÿÿÿÿÿÿÿÿÿ,,,ÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçïçÿB„Cÿ$q%ÿ$q%ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜ÄŸÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ¨Ð±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜJ>5,# ¹ÿÿÿÿÿÿÿÿÿÿÿÿ///ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåîåÿ?ƒ@ÿ$q%ÿ$q&ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿ¡¡¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÆ£ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ¤Î®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿülC:1)  îÿÿÿÿÿÿÿÿÿÿÿÿ222ÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäíäÿ>‚@ÿ$r&ÿ$r&ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ È§ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ ÌªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥G>5-% 4ðÿÿÿÿÿÿÿÿÿÿÿÿ555ÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâìâÿ<>ÿ%r&ÿ%r'ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Êªÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿʧÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‘‘ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¶JB91)! 7ñÿÿÿÿÿÿÿÿÿÿÿÿ888ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßëàÿ:€;ÿ%r'ÿ%s'ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿ•••ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Ì®ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ™È£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•••ÿÿÿÿÿÿÿÿÿÿÿÿÿÿºMD<4,$ :óÿÿÿÿÿÿÿÿÿÿÿÿ;;;ÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞéÞÿ9€:ÿ%s'ÿ%s'ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ&u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«Î±ÿ-†<ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ•Å ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾OF>6.'  >õÿÿÿÿÿÿÿÿÿÿÿÿ???ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛèÛÿ79ÿ%s(ÿ%s(ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®Ð´ÿ-†<ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ’ÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂQH@80)" AöÿÿÿÿÿÿÿÿÿÿÿÿBBBÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙæÙÿ6~9ÿ%t(ÿ%t(ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿ‡‡‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²Ó¸ÿ.‡=ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/CÿŽÁ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£££ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅSIB:2*# E÷ÿÿÿÿÿÿÿÿÿÿÿÿFFFÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖå×ÿ4~7ÿ%t(ÿ%t)ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿµÒ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿƒƒƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÔ»ÿ.‡=ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/CÿŠ¿–ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨¨¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈUJC;3,% IùÿÿÿÿÿÿÿÿÿÿÿÿIIIÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓãÔÿ3}6ÿ%t)ÿ%u)ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿµÒ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿ~~~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹Ö¾ÿ.†=ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ†½’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌUKC<4-& MúÿÿÿÿÿÿÿÿÿÿÿÿMMMÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑâÒÿ1|5ÿ&u)ÿ&u)ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿµÒ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäääÿ ÿ ÿ ÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ØÁÿ/‡>ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿƒ»ÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎWLD=5.'  QûÿÿÿÿÿÿÿÿÿÿÿÿQQQÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎàÏÿ1|4ÿ&u*ÿ&u*ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿµÒ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÚÄÿ0‡?ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ¹‹ÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑYLE=6/(! UüÿÿÿÿÿÿÿÿÿÿÿÿUUUÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌßÍÿ/{3ÿ&v*ÿ&v*ÿ&v*ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿµÒ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÜÆÿ1ˆ@ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ|·ˆÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔYMF>7/(" YüÿÿÿÿÿÿÿÿÿÿÿÿYYYÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÝÊÿ/{2ÿ&v*ÿ&v+ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿµÒ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅÞÉÿ2ˆ@ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿxµ…ÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ\NF?70)" ]ýÿÿÿÿÿÿÿÿÿÿÿÿ]]]ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÜÈÿ.{2ÿ&v+ÿ&v+ÿ&w+ÿ&w+ÿ&w,ÿ'w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈßÌÿ3‰Bÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿu³‚ÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÀÀÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÙ]NG?80)# bþÿÿÿÿÿÿÿÿÿÿÿÿaaaÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÙÅÿ,z1ÿ&w+ÿ&w+ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËáÏÿ4ŠCÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿr²ÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÄÄÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÜ_OG@81*# fþÿÿÿÿÿÿÿÿÿÿÿÿeeeÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁØÂÿ+z0ÿ&w,ÿ&w,ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎãÒÿ6‹Dÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿo°}ÿûýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÇÇÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÞ`OHA92+$ kÿÿÿÿÿÿÿÿÿÿÿÿÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½Ö¿ÿ*z0ÿ'w,ÿ'x,ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑäÔÿ7‹Eÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿl¯zÿúüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿÿÿÿÿÿÿÿÿÿÿÿÿÿábPIA:2+% oÿÿÿÿÿÿÿÿÿÿÿÿÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÔ¼ÿ*z/ÿ'x,ÿ'x-ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿ)4ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓæÖÿ8ŒGÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿi­wÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿãdQIB:3,% tÿÿÿÿÿÿÿÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸Ó¹ÿ*z/ÿ'x-ÿ'x-ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({0ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖçÙÿ9Gÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿf«uÿøûùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿäfQJB;3,% yÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ´Ð·ÿ*z/ÿ'y-ÿ'y.ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØéÛÿ;ŽIÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿcªrÿ÷ûøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿçhQJC;4-&  ~ÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±Ï³ÿ)z/ÿ'y.ÿ'y.ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛêÝÿ=Jÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿa¨pÿöú÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×××ÿÿÿÿÿÿÿÿÿÿÿÿÿÿèjRKC<4-'  ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®Í°ÿ(z/ÿ'y.ÿ'z.ÿ'z/ÿ(z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝëßÿ>Lÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ^§nÿõúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿêlSKD=5.'! ˆÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÊ­ÿ({/ÿ'z/ÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿµÓ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàíâÿ@Mÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ[¥kÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿìnSLE=6/(! ÿÿÿÿÿÿÿÿÿÿÿÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Éªÿ'z/ÿ(z/ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ޼•ÿÃÛÆÿÃÛÆÿÃÛÆÿÃÛÆÿÃÛÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÜÇÿÃÝÇÿ½ÙÁÿB’Pÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/CÿY¤iÿòøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿîqUMF>7/(" ’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Æ¦ÿ(z/ÿ({/ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/CÿV¢fÿñ÷òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿ!!!ÿÿÿÿÿÿÿÿÿÿÿÿÿðuVOG?80)# –ÿÿÿÿÿÿÿÿÿÿÿÿÿ“““ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ä£ÿ({0ÿ({0ÿ({0ÿ({0ÿ(|0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿT¡dÿð÷ñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåååÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿñxXQIA92+$ ›ÿÿÿÿÿÿÿÿÿÿÿÿÿ˜˜˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÂ ÿ({0ÿ({0ÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿQ bÿîöðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿ'''ÿÿÿÿÿÿÿÿÿÿÿÿÿó|ZSLD<4-& Ÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜Àœÿ({0ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿPŸ`ÿìõîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÿ***ÿÿÿÿÿÿÿÿÿÿÿÿÿô^VOG?70(" £ÿÿÿÿÿÿÿÿÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”¾˜ÿ(|1ÿ(|1ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿMž^ÿëôíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìììÿ---ÿÿÿÿÿÿÿÿÿÿÿÿÿö†a[SKC;3,% ¨ÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘¼•ÿ(|1ÿ(|1ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿL]ÿéóëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîîÿ000ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Šf_XQIA91*# ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ¹‘ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿI›[ÿçòéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿ333ÿÿÿÿÿÿÿÿÿÿÿÿÿøje^WOG@80)# °ÿÿÿÿÿÿÿÿÿÿÿÿÿ­­­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿЏŽÿ)}2ÿ)}2ÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿGšYÿåñçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÿ777ÿÿÿÿÿÿÿÿÿÿÿÿÿù”ojd^VOG@81+$ ´ÿÿÿÿÿÿÿÿÿÿÿÿÿ°°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…µŠÿ)}2ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿE™Wÿâïåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿ:::ÿÿÿÿÿÿÿÿÿÿÿÿÿúšsojd^WPIA:3-'" ¸ÿÿÿÿÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚´ˆÿ)~3ÿ)~3ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿC˜Uÿáîäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ>>>ÿÿÿÿÿÿÿÿÿÿÿÿÿûžwtpkf`YRKE>72,'" »ÿÿÿÿÿÿÿÿÿÿÿÿÿ¸¸¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ²…ÿ)~3ÿ)~3ÿ)4ÿ)4ÿ)4ÿ)4ÿ*5ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿB—TÿÞíâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÿBBBÿÿÿÿÿÿÿÿÿÿÿÿÿü¢zxuqlhb\VOIC=72-)%!  ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿ»»»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ{°ÿ)4ÿ)4ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ@–RÿÜìßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿFFFÿÿÿÿÿÿÿÿÿÿÿÿÿü¥|{xvsnje`ZTOIC>950,(%!  Ãÿÿÿÿÿÿÿÿÿÿÿÿ ÿ¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿx®ÿ)4ÿ)4ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ>•QÿÚëÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿIIIÿÿÿÿÿÿÿÿÿÿÿÿÿý¨~}{ywtqmid_ZUPKFA=951-)&"  Æÿÿÿÿÿÿÿÿÿÿÿÿ ÿÂÂÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿu¬|ÿ*4ÿ*€5ÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ=•PÿØêÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿNNNÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúòêáØÏƸŸƒjd`[WRNJFB>:62.*'#  Éÿÿÿÿÿÿÿÿÿÿÿÿ ÿÆÆÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýýÿrªyÿ*€5ÿ*€5ÿ*€5ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ<”OÿÕèÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿRRRÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûãȬcVROKGC?;73/+'$  ÍÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿn©vÿ*€5ÿ*€6ÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ:“MÿÓç×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿVVVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÚ¬{VPLHD@<840,($  ÐÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿk§sÿ*€6ÿ*6ÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ8‘KÿÐåÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿZZZÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÈ—\NJEA=950,($  ÓÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿi¦qÿ*6ÿ*6ÿ*7ÿ*7ÿ*‚7ÿ+‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ7‘JÿÍäÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ___ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÀPKFB>950,(# ÖÿÿÿÿÿÿÿÿÿÿÿÿÿÒÒÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüùÿe¤nÿ*7ÿ*7ÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ6‘IÿËâÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿdddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿê¨dKGB>940+'# ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûùÿc£lÿ*‚7ÿ*‚7ÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ5HÿÈáÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhhhÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÍvKGB=94/*&! ÛÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ûøÿ_¡iÿ+‚7ÿ+‚8ÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ4GÿÅßËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmmÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍtKFB=83.)$  ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöúöÿ^ hÿ+‚8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ3FÿÂÝÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËrJE@;61,'# áÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùöÿ[Ÿeÿ+ƒ8ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ2ŽFÿ¿ÜÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊfID?:4/*%! "ãÿÿÿÿÿÿÿÿÿÿÿÿÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøôÿYžcÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ1ŽEÿ¼ÚÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%%%ÿOOOÿzzzÿ›››ÿ©©©ÿ¶¶¶ÿÃÃÃÿÐÐÐÿÝÝÝÿêêêÿèèèÿÛÛÛÿÍÍÍÿÀÀÀÿ³³³ÿ¥¥¥ÿ•••ÿqqqÿIIIÿ!!!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù£PHB=72-(# %åÿÿÿÿÿÿÿÿÿÿÿÿ ÿâââÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóÿVœaÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ0Dÿ¹Ø¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ111ÿuuuÿ¥¥¥ÿÐÐÐÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿÑÑÑÿ©©©ÿrrrÿ...ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàuKF@;50*%  'èÿÿÿÿÿÿÿÿÿÿÿÿ###ÿäääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ÷òÿTœ_ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ0CÿµÖ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡‡‡ÿÿÿÿÿÿÿÿaaaÿ§§§ÿêêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ¨¨¨ÿeeeÿ"""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþµVIC>82-'" *êÿÿÿÿÿÿÿÿÿÿÿÿ&&&ÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïöðÿQš^ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ0Cÿ²Õ¹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒŒŒÿÿÿÿÿÿ{{{ÿÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÓÓÿqqqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì{LF@;5/)$  Ìÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆº‘ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿA–Sÿçòéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿ999ÿÿÿSSSÿ¶¶¶ÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ®®®ÿMMMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü NIC=71+&!  Äÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¦¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”Á›ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/CÿKœ\ÿèòêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿ•••ÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçççÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇZKE?93-("  Áÿÿÿÿÿÿÿÿÿÿÿÿÿ£££ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—Þÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/CÿMž^ÿëôíÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåoMGA;5/)$  ¾ÿÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›Å¢ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/CÿP aÿìõîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÿ………ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøOIC=71+%  ºÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÈ¦ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿR¡dÿîöðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòòòÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþŸQKE?82,&! ¶ÿÿÿÿÿÿÿÿÿÿÿÿÿ———ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£É©ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿU¢fÿð÷òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿËËËÿ222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªSMG@:3-'! ³ÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Ì­ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿX¥iÿñøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµUNHB;5.(" ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÎ°ÿ,„;ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/EÿZ¦lÿóøôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããÿAAAÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾WPIC<5/(" «ÿÿÿÿÿÿÿÿÿÿÿÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®Ð³ÿ,„;ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ]¨oÿôùöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿyyyÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇYQKD=6/)# §ÿÿÿÿÿÿÿÿÿÿÿÿÿ………ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±Ò¶ÿ-…<ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿaªrÿöú÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýüÿíöïÿëõîÿõú÷ÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½XRKE=60)# £ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿµÔºÿ-…<ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿd¬tÿ÷ûøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàïäÿ¯Öºÿ‰Â˜ÿyºŠÿi³}ÿ[¬qÿL¤dÿ=œWÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ4˜Pÿ70)# žÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸Ö¼ÿ-…<ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿf®wÿùüùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿÓèØÿ£Ï®ÿr·„ÿCŸ[ÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ9œUÿf³|ÿϬÿÓéÚÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿTTTÿÿÿÿÿÿÿÿÿÿÿÿÿþ™YSLE>7/)" šÿÿÿÿÿÿÿÿÿÿÿÿÿxxxÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»×¿ÿ.†=ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿj°zÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿÄáËÿs·„ÿ9™Rÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›RÿA¡]ÿ}¿ÿÉåÑÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿcccÿÿÿÿÿÿÿÿÿÿÿÿÿüŠZSLE>6/(! –ÿÿÿÿÿÿÿÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾ÙÂÿ/†>ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿm±~ÿúüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèóëÿ™Ê¥ÿJ¡`ÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿK§gÿ•Ë¥ÿáðåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtttÿÿÿÿÿÿÿÿÿÿÿÿÿ÷}ZSLE=6.'! ‘ÿÿÿÿÿÿÿÿÿÿÿÿÿoooÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÛÆÿ0‡?ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿp´ÿûýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿ¿ÞÇÿn³€ÿ4•Mÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ6Uÿ|¿ÿæóêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ………ÿÿÿÿÿÿÿÿÿÿÿÿÿìjYSKD<5-& ÿÿÿÿÿÿÿÿÿÿÿÿÿkkkÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÝÈÿ1‡?ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿu¶…ÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌåÒÿX¨mÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ; Yÿ’Ê£ÿóùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‘‘ÿÿÿÿÿÿÿÿÿÿÿÿÿË_YRKC;3,$ ˆÿÿÿÿÿÿÿÿÿÿÿÿÿgggÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇßËÿ2ˆ@ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿx¸ˆÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿäñèÿt·…ÿ1”Kÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿE¦bÿ©Ö·ÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{{{ÿÿÿÿÿÿÿÿÿÿÿÿÿ _XQIB:2*# ƒÿÿÿÿÿÿÿÿÿÿÿÿÿcccÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊàÍÿ3‰Bÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ|º‹ÿýþþÿõúöÿ“Ç ÿ7—Oÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿS¬oÿÀáÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaaaÿÿÿÿÿÿÿÿÿÿÿÿù{^WPH@80(! ~ÿÿÿÿÿÿÿÿÿÿÿÿÿ___ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÍâÐÿ4‰Bÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿl²~ÿDž[ÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿf¶ÿØíßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿIIIÿÿÿÿÿÿÿÿÿÿÿÿâg]VNF>6.& yÿÿÿÿÿÿÿÿÿÿÿÿÿ[[[ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÐäÓÿ6ŠCÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ<¢\ÿ¸ÝÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿ555ÿÿÿÿÿÿÿÿÿÿÿÿ»b[TLD;3+$ uÿÿÿÿÿÿÿÿÿÿÿÿÿWWWÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒåÕÿ7‹Dÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿg«uÿ³Õºÿ0Dÿ.ŒBÿ/Cÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ™Ïªÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿÿÿÿÿÿÿÿÿÿÿÿþ†`YRJA91)! pÿÿÿÿÿÿÿÿÿÿÿÿÿSSSÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕæ×ÿ8ŒEÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿdªsÿøûøÿÿÿÿÿ¶×½ÿ1ŽEÿ/Cÿ/Cÿ/Cÿ/Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ{À‘ÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¹¹¹ÿÿÿÿÿÿÿÿÿÿÿÿàf^WOG>6.& kÿÿÿÿÿÿÿÿÿÿÿÿÿPPPÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ:Gÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒBÿa¨pÿ÷úøÿÿÿÿÿÿÿÿÿÿÿÿÿ³Õºÿ1ŽDÿ/Cÿ/Cÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿaµ{ÿìöïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvvvÿÿÿÿÿÿÿÿÿÿÿÿ¤c\ULD;3*# gþÿÿÿÿÿÿÿÿÿÿÿÿLLLÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚéÜÿ<ŽIÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ^§nÿõúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ô·ÿ0Dÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡XÿM¬kÿÛîáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ666ÿÿÿÿÿÿÿÿÿÿÿôraYRI@8/' cþÿÿÿÿÿÿÿÿÿÿÿÿIIIÿøøøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜëÞÿ<ŽIÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹Aÿ.ŒAÿ\¥lÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ­Òµÿ0ŽEÿ/ŽDÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ?¥aÿÂãÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÃe^VNE=4+# ^ýÿÿÿÿÿÿÿÿÿÿÿÿEEEÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßìáÿ?Lÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿY£iÿóøôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©Ð²ÿ/ŽDÿ/ŽEÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ9£ZÿÀâËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿÿþ†b[SJA80'  ZýÿÿÿÿÿÿÿÿÿÿÿÿBBBÿöööÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàíâÿA‘Mÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿV¢fÿñ÷òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦Ï¯ÿ/Eÿ/Eÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢YÿA§bÿÞðäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ777ÿÿÿÿÿÿÿÿÿÿÿØf_WOF=4+# Vüÿÿÿÿÿÿÿÿÿÿÿÿ???ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãïåÿB’Oÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿT¡dÿïöñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Í­ÿ/Eÿ0Eÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢ZÿT°rÿòùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿÿˆc[SKA8/' Rûÿÿÿÿÿÿÿÿÿÿÿÿ;;;ÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäðæÿD’Pÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿQŸbÿîöïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Ìªÿ0Fÿ0Fÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿo½‰ÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿdddÿÿÿÿÿÿÿÿÿÿÿÐf_WOF<3*" Núÿÿÿÿÿÿÿÿÿÿÿÿ888ÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçñèÿF”Sÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿOž`ÿìõîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÊ¦ÿ0Fÿ0Fÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ•Ψÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÿÿÿÿÿÿÿÿÿÿÿþ€b[SJ@7.% Jùÿÿÿÿÿÿÿÿÿÿÿÿ555ÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéòêÿH•Tÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿM]ÿëôìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™È¤ÿ0Fÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ¼àÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’’’ÿÿÿÿÿÿÿÿÿÿÿÇf^VND;1(  Gøÿÿÿÿÿÿÿÿÿÿÿÿ222ÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêóìÿK–Wÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿKœ[ÿéóëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•Æ¡ÿ0Gÿ0‘Gÿ0‘Gÿ0‘Gÿ0‘Hÿ0’Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ?¨bÿÚîáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿüxbZQH>5,# C÷ÿÿÿÿÿÿÿÿÿÿÿÿ000ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìôíÿL—Xÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ.‹AÿI›Zÿçòêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘Åžÿ0‘Gÿ0‘Gÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿP¯pÿñùóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼d]TKB8/& @õÿÿÿÿÿÿÿÿÿÿÿÿ---ÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîõïÿO™Zÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹AÿG™WÿåñçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽÃ›ÿ0‘Hÿ0‘Hÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿŒË ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿÿÿÿÿÿÿÿÿÿÿói`WNE;2)  <ôÿÿÿÿÿÿÿÿÿÿÿÿ***ÿêêêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïöðÿQš]ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹AÿE˜Vÿãðæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹Á˜ÿ0’Hÿ1’Hÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ<§`ÿäóéÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‚‚‚ÿÿÿÿÿÿÿÿÿÿÿ•bZQH>5+# 9òÿÿÿÿÿÿÿÿÿÿÿÿ(((ÿèèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñ÷òÿTœ_ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹AÿC—Tÿáîäÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡À•ÿ1’Hÿ1’Iÿ1’Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿÅ—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿ ÿÿÿÿÿÿÿÿÿÿËd]TKA7.% 6ñÿÿÿÿÿÿÿÿÿÿÿÿ%%%ÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøóÿVaÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹AÿA•Rÿßíâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ„¾“ÿ1’Iÿ1“Iÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ:¦^ÿÜïâÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿùm_WMD:0' 2ïÿÿÿÿÿÿÿÿÿÿÿÿ###ÿäääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóøôÿYždÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ?•QÿÝìàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ½ÿ1“Iÿ1“Iÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿsÁŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑÑÑÿÿÿÿÿÿÿÿÿÿÿžaYPF<2)! /íÿÿÿÿÿÿÿÿÿÿÿÿ ÿáááÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõùöÿ[Ÿfÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ.‹Aÿ>”OÿÚëÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿ~»ÿ1“Jÿ1“Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿÑêÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,,,ÿÿÿÿÿÿÿÿÿÿÔc[RH>5+" ,ëÿÿÿÿÿÿÿÿÿÿÿÿÿßßßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöúöÿ^¡hÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ.‹Aÿ<“NÿØéÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿw¸ˆÿ1”Jÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿh»…ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆˆˆÿÿÿÿÿÿÿÿÿÿýq]TJA7-$ *éÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûøÿa£kÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ;’MÿÕèÙÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿKKKÿ ÿÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆÁ—ÿ1”Jÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿÅåÑÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿÿÿÿÿÿÿÿÿÿÿš^VLB8/& 'çÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøûùÿd¤nÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ9‘KÿÓæ×ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿOOOÿÿÿÿËËËÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ûøÿ=šUÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ]·|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ???ÿÿÿÿÿÿÿÿÿÿÀ`WND:0' $åÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿg¦qÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ8JÿÏåÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿSSSÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ö¹ÿ1”Jÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿÔìÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ———ÿÿÿÿÿÿÿÿÿÿçaYOF<2(  "ãÿÿÿÿÿÿÿÿÿÿÿÿÿÕÕÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüúÿi§sÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ7IÿÍãÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿWWWÿÿÿÿÿÿÿÿìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]«pÿ1”Kÿ1”Kÿ2•Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿÍ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿpZQG=3)! àÿÿÿÿÿÿÿÿÿÿÿÿÿÓÓÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûýûÿm©vÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ5HÿËâÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ[[[ÿÿÿÿÿÿÿÿ ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×êÜÿ1”Kÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ5žWÿ0Nÿ*~Eÿ%n<ÿ(xBÿ.ŠLÿ4œVÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿI¯lÿüþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜[RH>4+" ÞÿÿÿÿÿÿÿÿÿÿÿÿÿÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýüÿp«yÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ5GÿÇàÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ```ÿÿÿÿÿÿÿÿÿCCCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆžÿ1”Kÿ2”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ5Uÿ'r>ÿÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ.‹Aÿ4ŽFÿÄÞÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿdddÿÿÿÿÿÿÿÿÿÿ€€€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿV§kÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ.‰Jÿ>"ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ-ÿ's@ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ€Ç™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿç]TJ@6,# ÙÿÿÿÿÿÿÿÿÿÿÿÿÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿw¯€ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹Aÿ3ŽEÿÂÝÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiiiÿÿÿÿÿÿÿÿÿÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêôíÿ1”Kÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ3—SÿI(ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ/ÿ/ŒMÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿL°oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿþcUKA7-$ Öÿÿÿÿÿÿÿÿÿÿÿÿ ÿÇÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿz±ƒÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ2Eÿ¾ÛÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmmmÿÿÿÿÿÿÿÿÿÿÿÿôôôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Öºÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ#g8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿK*ÿ7¡Zÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿàòæÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ULA7.$ Òÿÿÿÿÿÿÿÿÿÿÿÿ ÿÄÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ}³†ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ1Dÿ»ÙÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿ666ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿv¸‡ÿ2•Kÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6žVÿK)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ*ÿ4›Wÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ®Ü¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿLLLÿÿÿÿÿÿÿÿÿÿ”VLB8.% ‘ÿÿÿÿÿÿÿÿÿÿÿÿ ÿÁÁÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿ¶‰ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ0ŒCÿ¸×¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@œXÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5›Tÿ9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ1’Rÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ}Æ—ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿ¬VLB8.% <ýÿÿÿÿÿÿÿÿÿÿÿ ÿ¾¾¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ…¸Œÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ0ŒBÿ´Ö»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|||ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¯¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèóëÿ2•Kÿ2•Lÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ4›Tÿ)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ0ŽPÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿN²rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿšššÿÿÿÿÿÿÿÿÿÿÅVMC8/% Ùÿÿÿÿÿÿÿÿÿÿÿÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿˆ¹ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ/‹Bÿ±Ô¸ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÅáÌÿ2•Lÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿC$ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ6 [ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÁÁÿÿÿÿÿÿÿÿÿÿÜVMC9/% :ÿÿÿÿÿÿÿÿÿÿÿÿ···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ¼“ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ/‹Bÿ­Ò´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†††ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢Ï®ÿ2•Lÿ2•Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ#h8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>#ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿÖíÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿÿÿÿÿÿÿÿÿÿõWMC9/& mÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾—ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹Aÿ.‹AÿªÐ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½ÿ2•Lÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ.†IÿÿÿÿÿÿÿÿÿÿÿÿÿÿPPPÿnnnÿˆˆˆÿ   ÿ“““ÿyyyÿ___ÿ...ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ"f9ÿ8§_ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ¹áÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbMC9/&  ÿÿÿÿÿÿÿÿÿÿ°°°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ”Àšÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ¦Í®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\«qÿ2–Lÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ)ÿÿÿÿÿÿÿÿÿÿ ÿeeeÿ¸¸¸ÿúúúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜÜÜÿŠŠŠÿ***ÿÿÿÿÿÿÿÿÿÿÿÿ ÿ4›Xÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ›Ô¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ000ÿÿÿÿÿÿÿÿÿÿkMC9/& Ñÿÿÿÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜Ãžÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ¢Ì«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•••ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJJJÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAžYÿ2–Lÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ)xBÿÿÿÿÿÿÿÿÿÿcccÿãããÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿO-ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ~Șÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÿÿÿÿÿrMC9/% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœÅ¢ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹AÿžÉ§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿaaaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6˜Pÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ 'ÿÿÿÿÿÿÿÿ ÿÐÐÐÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿhhhÿÿÿÿÿÿÿÿÿÿÿ4šWÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿpÂŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJJJÿÿÿÿÿÿÿÿÿÿzMC8/% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÇ¥ÿ+ƒ8ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹AÿšÇ£ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿžžžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüùÿ2–Mÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ(u@ÿÿÿÿÿÿÿÿ999ÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿL,ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿg¾†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVVÿÿÿÿÿÿÿÿÿÿƒMB8.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¤Ê©ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ–Å ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¢¢¢ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽŽŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîöðÿ2–Mÿ2–Mÿ2—Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ8ÿÿÿÿÿÿÿBBBÿ÷÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ©©©ÿÿÿÿÿÿÿÿÿ ÿ9§_ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ^ºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbbbÿÿÿÿÿÿÿÿÿÿ‹LB8.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Ë¬ÿ+ƒ8ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ.‹Aÿ“Ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§§§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¥¥¥ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãñçÿ2–Mÿ2–Mÿ2—Mÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸVÿ ÿÿÿÿÿÿ"""ÿìììÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ,‚Kÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿT¶xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnnnÿÿÿÿÿÿÿÿÿÿ”LB8.% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«Î°ÿ,ƒ9ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹AÿÁ™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ«««ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼¼¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØëÝÿ2–Mÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ*}Dÿÿÿÿÿÿ ÿÒÒÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿOOOÿÿÿÿÿÿÿÿQ.ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿK²pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzzÿÿÿÿÿÿÿÿÿÿ›LA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈßËÿ,ƒ9ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ‹¾•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯¯¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÁÁÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØëÝÿ2—Mÿ2—Nÿ2—Nÿ3—Nÿ3˜Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 WÿP+ÿÿÿÿÿÿ~~~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåååÿ ÿÿÿÿÿÿÿ ÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿK²pÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzzÿÿÿÿÿÿÿÿÿÿ›KA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ð´ÿ+ƒ9ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ‡½’ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³³³ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯šÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáðåÿ2—Nÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ(ÿÿÿÿÿÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿxxxÿÿÿÿÿÿÿÿ5ž[ÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿT¶xÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿnnnÿÿÿÿÿÿÿÿÿÿ’K@6-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ð´ÿ+ƒ9ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿƒºŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ³…ÿÿÿÿÿÿÿÿÿ§§§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëõîÿ2—Nÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïïïÿÿÿÿÿÿÿÿ0Qÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ^ºÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿbbbÿÿÿÿÿÿÿÿÿÿŠJ@6,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ð´ÿ+„9ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ€¸Œÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»»»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¸uÿÿÿÿÿÿÿÿÿšššÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõúöÿ3—Nÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿÿÿÿÿÿéééÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[[[ÿÿÿÿÿÿÿ*}Hÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿg¾†ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVVÿÿÿÿÿÿÿÿÿÿI?5+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ð´ÿ+„9ÿ+„9ÿ+„:ÿ+„:ÿ+…:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿ|¶ˆÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¾¾¾ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿ¼fÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþþÿ3—Nÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ4›Uÿÿÿÿÿ<<<ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿÿÿÿÿÿ%n?ÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿpÂŽÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJJJÿÿÿÿÿÿÿÿÿÿxI>4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñ´ÿ+„9ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿy´…ÿýþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÂÂÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÀ Vÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@žYÿ3˜Nÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ/ŒMÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿÿÿÿÿÿÿ _7ÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ~È™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÿÿÿÿÿoH>4*! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñ´ÿ+„:ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.‹@ÿu³‚ÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÆÆÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÄ Fÿÿÿÿÿÿÿÿÿqqqÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ]­sÿ3˜Oÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ.‰Kÿÿÿÿÿ···ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'''ÿÿÿÿÿÿ[5ÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ›Ô¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ111ÿÿÿÿÿÿÿÿÿÿfG=3)! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñ´ÿ+„:ÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿr±ÿüýüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÉÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ 7ÿÿÿÿÿÿÿÿÿQQQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}½Žÿ3˜Oÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ3˜SÿÿÿÿÿÎÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÿ%k>ÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ¹áÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ\F<2(  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñµÿ+„:ÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿo¯{ÿûýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌÌÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌ#ÿÿÿÿÿÿÿÿÿ***ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›Í©ÿ3˜Oÿ3™Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡YÿÿÿÿÿæææÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿVVVÿÿÿÿÿÿ*{Gÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÖîßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÿÿÿÿÿÿÿÿÿÿöOE;1' àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñµÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿk­xÿúüûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏùÿÿÿÿÿÿÿÿÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿºÜÄÿ3˜Oÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3šPÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ ÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ```ÿÿÿÿÿÿ/‹Pÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂÂÂÿÿÿÿÿÿÿÿÿÿÝND90& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯Ñµÿ,…:ÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿi¬vÿùüúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÓÓÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓÕÿÿÿÿÿÿÿÿÿÛÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜíáÿ3™Oÿ3™Pÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ $ÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿJJJÿÿÿÿÿÿ5œZÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿO´tÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ›››ÿÿÿÿÿÿÿÿÿÿÃLB8/% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,…:ÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿ.Š@ÿfªsÿøûùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÖ¬ÿÿÿÿÿÿÿÿÿ´´´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿA \ÿ3™Pÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢YÿH'ÿÿÿÿÃÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ333ÿÿÿÿÿÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ~È™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿsssÿÿÿÿÿÿÿÿÿÿªKA7-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ.Š@ÿ.Š@ÿ.Š@ÿb¨pÿøûøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿs¹‡ÿ3™Pÿ3™Pÿ3šQÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ(vBÿÿÿÿ¨¨¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿI*ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ¯ÝÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿLLLÿÿÿÿÿÿÿÿÿÿJ@5,# àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,…;ÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ`§nÿöú÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛÛÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÜ[ÿÿÿÿÿÿÿÿÿ^^^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Ó´ÿ3™Pÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ5žXÿÿÿÿdddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿÿÿÿÿÿ*{Gÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿâòèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtH>4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,…;ÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿ^¥kÿõúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞÞÞÿÿÿÿÿÿÿÿÿÿÿÿÿÿß2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚíßÿ3šPÿ4šQÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ0ÿÿÿÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿƒƒƒÿÿÿÿÿÿ8¦`ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿM³rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿYF<2)  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,†;ÿ,†;ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿZ£hÿôùõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ! þÿÿÿÿÿÿÿÿÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿF£aÿ4šQÿ4šQÿ4šQÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ$j;ÿÿÿÿÂÂÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ222ÿÿÿÿÿ?$ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ‚ÊœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿéND:0' àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,†;ÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿX¡fÿòøóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãããÿ"""ÿÿÿÿÿÿÿÿÿÿÿÿÿå$ÑÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿ4šQÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7¢Zÿ ÿÿÿMMMÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½½½ÿÿÿÿÿÿ2“Uÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÇçÒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[[[ÿÿÿÿÿÿÿÿÿÿ¿LC8/& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñµÿ,†<ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿU dÿñ÷òÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿåååÿ$$$ÿÿÿÿÿÿÿÿÿÿÿÿÿç'ÿÿÿÿÿÿÿÿÿ[[[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØìÞÿ4šQÿ4›Qÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ%m=ÿÿÿÿÃÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿ444ÿÿÿÿÿB&ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿK²pÿýþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’J@6-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñ¶ÿ,†<ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š?ÿ-Š@ÿ.Š@ÿ.Š@ÿSŸbÿïöñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèèèÿ'''ÿÿÿÿÿÿÿÿÿÿÿÿÿê*JÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW«oÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ ÿÿÿ999ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦¦¦ÿÿÿÿÿÿ3–Wÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿϦÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÚÚÚÿÿÿÿÿÿÿÿÿÿÿeH>4+" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ°Ñ¶ÿ,†<ÿ,‡<ÿ,‡<ÿ,‡=ÿ-‡=ÿ-‡=ÿ-ˆ=ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-ˆ>ÿ-‰>ÿ-‰?ÿ-‰?ÿ-‰?ÿ-‰?ÿ-Š@ÿ.Š@ÿ.Š@ÿP_ÿîõïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿêêêÿ***ÿÿÿÿÿÿÿÿÿÿÿÿÿì. úÿÿÿÿÿÿÿÿÿÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¡Ñ¯ÿ4›Rÿ4›Rÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ*}Fÿÿÿÿwwwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×××ÿÿÿÿÿÿT1ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÖîßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ–––ÿÿÿÿÿÿÿÿÿÿçOF<2)  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×èÚÿ•Ãÿ•Ãÿ•Þÿ•Þÿ–Þÿ–Þÿ–Þÿ–Þÿ–Þÿ–Þÿ–Äžÿ–ÄŸÿ–ÄŸÿ–ÄŸÿ–ÄŸÿ–ÄŸÿ–ÄŸÿ–ÄŸÿ—Å ÿìõîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìììÿ---ÿÿÿÿÿÿÿÿÿÿÿÿÿî1Âÿÿÿÿÿÿÿÿÿ~~~ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿíöïÿ<ŸYÿ4›Rÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿX1ÿÿÿÿ¦¦¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿ&&&ÿÿÿÿÿ.ÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿa¼‚ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿÿÿÿÿÿÿÿÿÿ¼LC9/& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîîÿ000ÿÿÿÿÿÿÿÿÿÿÿÿÿð5~ÿÿÿÿÿÿÿÿÿ"""ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ•Ë¥ÿ4›Rÿ4œSÿ4œSÿ4œSÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¤\ÿ2ÿÿÿ ÿ®®®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìììÿ;;;ÿÿÿÿÿ ÿ5[ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÉèÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßßßÿÿÿÿÿÿÿÿÿÿÿJ@6-$ àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿ444ÿÿÿÿÿÿÿÿÿÿÿÿÿò9:ÿÿÿÿÿÿÿÿÿÿÄÄÄÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóùõÿB£_ÿ4œSÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ4›Wÿ ÿÿÿÿŠŠŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿØØØÿ###ÿÿÿÿÿÿ-„Lÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿlÀ‹ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„„„ÿÿÿÿÿÿÿÿÿÿþ_F=3*" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñññÿ777ÿÿÿÿÿÿÿÿÿÿÿÿÿô=èÿÿÿÿÿÿÿÿÿgggÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ£Ò±ÿ4œSÿ4œSÿ5œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ4˜Vÿ $ÿÿÿÿSSSÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ•••ÿÿÿÿÿÿ ÿ-…Mÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿÕíÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ'''ÿÿÿÿÿÿÿÿÿÿÑKC90( àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿ:::ÿÿÿÿÿÿÿÿÿÿÿÿÿöAŒÿÿÿÿÿÿÿÿÿÿùùùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùüúÿJ§fÿ4œSÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ6 Zÿ3ÿÿÿÿÿlllÿäääÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿ§§§ÿ$$$ÿÿÿÿÿÿ ÿ2’Uÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿxÅ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿG?6-% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ>>>ÿÿÿÿÿÿÿÿÿÿÿÿÿ÷E-ÿÿÿÿÿÿÿÿÿÿªªªÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±Ù½ÿ5Tÿ5Tÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ7¤]ÿM+ÿÿÿÿÿÿ888ÿŠŠŠÿÐÐÐÿîîîÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿßßßÿ®®®ÿ\\\ÿÿÿÿÿÿÿÿ.ÿ5œZÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ<¬dÿßñåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkkkÿÿÿÿÿÿÿÿÿÿ÷SC:2)" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÿAAAÿÿÿÿÿÿÿÿÿÿÿÿÿùIÍÿÿÿÿÿÿÿÿÿ555ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿU­oÿ5Tÿ5Tÿ5Uÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ/‹Oÿ-ÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿ ÿ(uDÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ„Ëžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÿ ÿÿÿÿÿÿÿÿÿÿ¿E=6.& àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿEEEÿÿÿÿÿÿÿÿÿÿÿÿÿúNnÿÿÿÿÿÿÿÿÿÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¿àÉÿ5Tÿ5Tÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ(tBÿ !ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿY3ÿ8¦`ÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ?­gÿçõìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}ÿÿÿÿÿÿÿÿÿÿÿy?81)" àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùùùÿIIIÿÿÿÿÿÿÿÿÿÿÿÿÿûRúÿÿÿÿÿÿÿÿÿ@@@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿa²yÿ5žUÿ5žUÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ1‘SÿX2ÿ ÿÿÿÿÿÿÿÿÿÿ ÿH*ÿ,Kÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿЧÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóóóÿÿÿÿÿÿÿÿÿÿÿí@82+% àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúúúÿMMMÿÿÿÿÿÿÿÿÿÿÿÿÿüW¯ÿÿÿÿÿÿÿÿÿÿÅÅÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛîàÿ>¢\ÿ5žUÿ5žUÿ5žVÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ4›Yÿ.ˆNÿ(vDÿ"d9ÿU0ÿ _7ÿ'qAÿ-ƒLÿ3•Vÿ:ªaÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿV·yÿóúõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‹‹‹ÿÿÿÿÿÿÿÿÿÿÿ¤72,&  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿQQQÿÿÿÿÿÿÿÿÿÿÿÿÿý\BÿÿÿÿÿÿÿÿÿÿKKKÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¼ßÇÿ6žVÿ5žUÿ5ŸVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿD¯kÿßñåÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøøøÿÿÿÿÿÿÿÿÿÿÿùG/+&! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿUUUÿÿÿÿÿÿÿÿÿÿÿÿÿþaÈÿÿÿÿÿÿÿÿÿÿÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ͨÿ5žVÿ5ŸVÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ;«dÿÂåÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‘‘‘ÿÿÿÿÿÿÿÿÿÿÿª+($  àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿYYYÿÿÿÿÿÿÿÿÿÿÿÿÿþfMÿÿÿÿÿÿÿÿÿÿ444ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþÿs¼Šÿ5ŸVÿ6ŸVÿ6ŸWÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿžÕ²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéééÿÿÿÿÿÿÿÿÿÿÿüB#! àÿÿÿÿÿÿÿÿÿðððÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýýýÿ^^^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿkÒÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõúöÿW¯rÿ6ŸVÿ6ŸWÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿyÆ•ÿþÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ___ÿÿÿÿÿÿÿÿÿÿÿ¯ ÓÿÿÿÿÿÿÿÿÿKKKÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿPPPÿ999ÿÿÿÿÿÿÿÿÿÿÿÿÿÿpXÿÿÿÿÿÿÿÿÿÿÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãñçÿC¥bÿ6 Wÿ6 Wÿ6 Wÿ6 Xÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¢Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ\¹~ÿöûøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄÄÄÿÿÿÿÿÿÿÿÿÿÿþ? ŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvÚÿÿÿÿÿÿÿÿÿÿgggÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈåÑÿ8¡Yÿ6 Wÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿG±mÿäóêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿ///ÿÿÿÿÿÿÿÿÿÿÿ¶ hÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{`ÿÿÿÿÿÿÿÿÿÿÿÊÊÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ§Õµÿ6 Wÿ6 Xÿ6¡Xÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ>­fÿÊèÕÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü8 2ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈÿÿÿÿÿÿÿÿÿÿ&&&ÿóóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ²Ú¿ÿ:£[ÿ6¡Xÿ6¡Xÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿI±oÿÎêØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÔÔÔÿ ÿÿÿÿÿÿÿÿÿÿÿ• Éÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡1üÿÿÿÿÿÿÿÿÿÿ\\\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎèÖÿE¨dÿ6¡Yÿ6¡Yÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿY¸{ÿäóêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöööÿ,,,ÿÿÿÿÿÿÿÿÿÿÿé'öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŒ‘ÿÿÿÿÿÿÿÿÿÿÿžžžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãòèÿV°tÿ6¢Yÿ7¢Yÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿoÂÿóúõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿhhhÿÿÿÿÿÿÿÿÿÿÿÿblÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’æÿÿÿÿÿÿÿÿÿÿ ÿÖÖÖÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóúõÿn¼‡ÿ7¢Yÿ7¢Zÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿŒÎ¤ÿüþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬¬¬ÿÿÿÿÿÿÿÿÿÿÿÿÅ”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý„Xÿÿÿÿÿÿÿÿÿÿÿ,,,ÿõõõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýþýÿ‹ÉŸÿ7¢Zÿ7£Zÿ7£Zÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ<¬eÿ¬Ü¾ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿÿÿÿÿÿÿÿÿÿÿÿü1MëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛ:ºÿÿÿÿÿÿÿÿÿÿÿNNNÿüüüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¬Ùºÿ:¤]ÿ7£Zÿ7£[ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿF°lÿÉèÔÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîîîÿ+++ÿÿÿÿÿÿÿÿÿÿÿÿŽœÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÒ‰ ëÿÿÿÿÿÿÿÿÿÿÿfffÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕìÝÿg¹‚ÿ7£[ÿ7¤[ÿ7¤[ÿ7¤\ÿ7¤\ÿ8¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ}Șÿæôëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿ<<<ÿÿÿÿÿÿÿÿÿÿÿÿÎOopppppppppppppppppppppppppppppppppppppj= IþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁâÌÿV²tÿ7¤[ÿ7¤\ÿ7¤\ÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿh¿ˆÿÕíÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿPPPÿÿÿÿÿÿÿÿÿÿÿÿó%ˆÿÿÿÿÿÿÿÿÿÿÿÿœœœÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþüÿ­Ú¼ÿH¬jÿ8¥\ÿ8¥\ÿ8¥]ÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«bÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿW¸zÿÀäÍÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿgggÿÿÿÿÿÿÿÿÿÿÿÿÿ]Åÿÿÿÿÿÿÿÿÿÿÿÿ®®®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõú÷ÿ™Ñ«ÿ@©cÿ8¥]ÿ8¥]ÿ8¦]ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿJ²pÿ¬Ü¾ÿüþýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿzzzÿÿÿÿÿÿÿÿÿÿÿÿÿ¢íÿÿÿÿÿÿÿÿÿÿÿÿŸŸŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëöîÿ„È›ÿ:§_ÿ8¦]ÿ8¦^ÿ8¦^ÿ8¦^ÿ8§^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿA®iÿ—Ó­ÿôúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþþþÿnnnÿÿÿÿÿÿÿÿÿÿÿÿÿÚ Kýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì÷ðÿ¥×¶ÿ[¶zÿ8¦^ÿ8¦^ÿ8§^ÿ8§_ÿ9§_ÿ9§_ÿ9¨_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªbÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿg¾†ÿ±ÞÁÿóúöÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿ]]]ÿÿÿÿÿÿÿÿÿÿÿÿÿñ-hÿÿÿÿÿÿÿÿÿÿÿÿÿzzzÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙîàÿÎ¥ÿU´vÿ9§_ÿ9§_ÿ9§_ÿ9¨`ÿ9¨`ÿ9¨`ÿ9¨`ÿ9©`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ;«dÿ^ºÿšÔ¯ÿâóèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿNNNÿÿÿÿÿÿÿÿÿÿÿÿÿùBÿÿÿÿÿÿÿÿÿÿÿÿÿgggÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèõíÿ´ÞÂÿ€Ç˜ÿM±pÿ9¨`ÿ9¨`ÿ9¨`ÿ9©aÿ9©aÿ9©aÿ9©aÿ9ªaÿ:ªbÿ:ªbÿ:ªbÿ:ªbÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿ:«cÿU·xÿˆÌ¡ÿ¼âÊÿïøòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðððÿAAAÿÿÿÿÿÿÿÿÿÿÿÿÿþYšÿÿÿÿÿÿÿÿÿÿÿÿÿ===ÿåååÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿñùôÿÓìÛÿ´ßÄÿ•Ñ«ÿxÄ“ÿi¾‡ÿ`»€ÿW¶yÿM²qÿD®jÿE¯kÿO´tÿX¸{ÿa¼‚ÿkÀŠÿ|Ç—ÿ›Ô¯ÿ¹áÇÿØîàÿõû÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎÎÎÿ###ÿÿÿÿÿÿÿÿÿÿÿÿÿÿt°ÿÿÿÿÿÿÿÿÿÿÿÿÿÿºººÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ™™™ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ Äÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}ÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõõõÿ]]]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¦ ¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿBBBÿàààÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÏÏÿ+++ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿš©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ‹‹‹ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôôôÿrrrÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ‡•ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ///ÿÈÈÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ±±±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿtÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿjjjÿïïïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿQQQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüahûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ}}}ÿíííÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâââÿjjjÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòO=åÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿxxxÿëëëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàààÿgggÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒ'»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿtttÿÝÝÝÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÒÒÿdddÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸ €ýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>>>ÿžžžÿòòòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëëëÿ’’’ÿ222ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöbEêÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿ]]]ÿ¼¼¼ÿûûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷÷÷ÿ±±±ÿQQQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÙ.¦ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿKKKÿŽŽŽÿÒÒÒÿþþþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüüÿÉÉÉÿ†††ÿCCCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú‡ CØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿXXXÿÿµµµÿÝÝÝÿýýýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûûûÿØØØÿ°°°ÿˆˆˆÿPPPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÄ+|öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ---ÿUUUÿwwwÿ‡‡‡ÿ”””ÿ¡¡¡ÿ¯¯¯ÿ¼¼¼ÿÊÊÊÿÈÈÈÿ»»»ÿ­­­ÿ   ÿ“““ÿ………ÿuuuÿQQQÿ(((ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîe"´ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý¡:·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¤(5²ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû %1­þÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿú##‚àÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÑqA¡ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿì’1 `±ðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿæ£R6x»öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð±m*@wŸÆîÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÀ˜p8<d‡—¤²ÀÎÜéèÚÌ¿±£–…a8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿþ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿþ?ÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿþÿÿÿÿÿÀÿÿÿÿÿÿÿÿüÿÿÿÿÿÀÿÿÿÿÿÿÿÿøÿÿÿÿÿÀÿÿÿÿÿÿÿÿðÿÿÿÿÿÀÿÿÿÿÿÿÿàÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÿÿ€ÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿþÿÿÿÿÿÀÿÿÿÿüÿÿÿÿÿÀÿÿøÿÿÿÿÿÀÿÿðÿÿÿÿÿÀÿÿàÿÿÿÿÿÀÿÀÿÿÿÿÿÀÿ€ÿÿÿÿÿÀ?ÿÿÿÿÿÿÀþÿÿÿÿÿÀüÿÿÿÿÿÀøÿÿÿÿÿÀðÿÿÿÿÿÀàÿÿÿÿÿÀÀÿÿÿÿÿÀ€ÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀÿÿÿÿÿÀ?ÿÿÿÿÿÀ?ÿÿÿÿÿà?ÿÿÿÿÿà?ÿÿÿÿÿà?ÿÿÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿøÿÿÿÿÿÿüÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿðÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÀ?ÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿà?ÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿð?ÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿüÿÿÿÿÿÿÿøÿÿÿÿÿÿÿðÿÿÿÿÿÿÿðÿÿÿÿÿÿà?ÿÿÿÿÿÿÀÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿüÿÿÿÿÿøÿÿÿÿÿðÿÿÿÿÿàÿÿÿÿÿÀÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿþÿÿÿÿüÿÿÿøÿÿÿð?ÿÿÿà?ÿÿÿÀ?ÿÿÿ€ÿÿÿÿÿþÿÿüÿÿøÿÿðÿÿàÿÿÀÿÿ€ÿÿÿþÿüÿøÿðÿðÿàÿàÿàÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀ€ÿÀÀÿÀÀÿÀÀÿÀÀÿÀÀÿÀ?ÀÿÀÀÿÀÿÀÿÀÿÀÿÀÿÀÿÀÿàÿÀÿàÿÀÿàÿÀ?ÿàÿÀÿàÿÀÿÿðÿÀÿÿðÿÀÿÿðÿÀÿÿøÿÀÿÿøÿÀÿÿøÿÀ?ÿÿøÿÀÿÿü?ÿÀÿÿÿü?ÿÀÿÿÿþÿÀÿÿÿþÿÀÿÿÿþÿÀÿÿÿÿÿÿÀÿÿÿÿÿÿÀ?ÿÿÿÿ€ÿÿÀÿÿÿÿ€ÿÿÀÿÿÿÿÿÀÿÿÀÿÿÿÿÿÀÿÿàÿÿÿÿÿàÿÿàÿÿÿÿÿàÿÿàÿÿÿÿÿðÿÿðÿÿÿÿÿðÿÿøÿÿÿÿÿøÿÿø?ÿÿÿÿÿü?ÿÿþÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿkeepassx-2.0.3/src/000077500000000000000000000000001276304217300141335ustar00rootroot00000000000000keepassx-2.0.3/src/CMakeLists.txt000066400000000000000000000213361276304217300167000ustar00rootroot00000000000000# Copyright (C) 2010 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}) configure_file(config-keepassx.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx.h) include(GetGitRevisionDescription) get_git_head_revision(GIT_REFSPEC GIT_HEAD) git_describe(GIT_DESCRIBE --long) if (NOT GIT_HEAD OR NOT GIT_DESCRIBE) set(GIT_HEAD "") set(GIT_DESCRIBE "") endif() configure_file(version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY) set(keepassx_SOURCES autotype/AutoType.cpp autotype/AutoTypeAction.cpp autotype/AutoTypePlatformPlugin.h autotype/AutoTypeSelectDialog.cpp autotype/AutoTypeSelectView.cpp autotype/ShortcutWidget.cpp autotype/WildcardMatcher.cpp autotype/WindowSelectComboBox.cpp autotype/test/AutoTypeTestInterface.h core/AutoTypeAssociations.cpp core/Config.cpp core/Database.cpp core/DatabaseIcons.cpp core/Endian.cpp core/Entry.cpp core/EntryAttachments.cpp core/EntryAttributes.cpp core/EntrySearcher.cpp core/FilePath.cpp core/Global.h core/Group.cpp core/InactivityTimer.cpp core/ListDeleter.h core/Metadata.cpp core/PasswordGenerator.cpp core/qlockfile.cpp core/qsavefile.cpp core/qsavefile_p.h core/SignalMultiplexer.cpp core/TimeDelta.cpp core/TimeInfo.cpp core/ToDbExporter.cpp core/Tools.cpp core/Translator.cpp core/Uuid.cpp core/qcommandlineoption.cpp core/qcommandlineparser.cpp crypto/Crypto.cpp crypto/CryptoHash.cpp crypto/Random.cpp crypto/SymmetricCipher.cpp crypto/SymmetricCipherBackend.h crypto/SymmetricCipherGcrypt.cpp format/CsvExporter.cpp format/KeePass1.h format/KeePass1Reader.cpp format/KeePass2.h format/KeePass2RandomStream.cpp format/KeePass2Reader.cpp format/KeePass2Repair.cpp format/KeePass2Writer.cpp format/KeePass2XmlReader.cpp format/KeePass2XmlWriter.cpp gui/AboutDialog.cpp gui/Application.cpp gui/ChangeMasterKeyWidget.cpp gui/Clipboard.cpp gui/DatabaseOpenWidget.cpp gui/DatabaseRepairWidget.cpp gui/DatabaseSettingsWidget.cpp gui/DatabaseTabWidget.cpp gui/DatabaseWidget.cpp gui/DatabaseWidgetStateSync.cpp gui/DialogyWidget.cpp gui/DragTabBar.cpp gui/EditWidget.cpp gui/EditWidgetIcons.cpp gui/EditWidgetProperties.cpp gui/FileDialog.cpp gui/IconModels.cpp gui/KeePass1OpenWidget.cpp gui/LineEdit.cpp gui/MainWindow.cpp gui/MessageBox.cpp gui/PasswordEdit.cpp gui/PasswordGeneratorWidget.cpp gui/PasswordComboBox.cpp gui/SettingsWidget.cpp gui/SortFilterHideProxyModel.cpp gui/UnlockDatabaseWidget.cpp gui/WelcomeWidget.cpp gui/entry/AutoTypeAssociationsModel.cpp gui/entry/EditEntryWidget.cpp gui/entry/EditEntryWidget_p.h gui/entry/EntryAttachmentsModel.cpp gui/entry/EntryAttributesModel.cpp gui/entry/EntryHistoryModel.cpp gui/entry/EntryModel.cpp gui/entry/EntryView.cpp gui/group/EditGroupWidget.cpp gui/group/GroupModel.cpp gui/group/GroupView.cpp keys/CompositeKey.cpp keys/CompositeKey_p.h keys/FileKey.cpp keys/Key.h keys/PasswordKey.cpp streams/HashedBlockStream.cpp streams/LayeredStream.cpp streams/qtiocompressor.cpp streams/StoreDataStream.cpp streams/SymmetricCipherStream.cpp ) if(NOT GCRYPT_HAS_SALSA20) set(keepassx_SOURCES ${keepassx_SOURCES} crypto/salsa20/ecrypt-config.h crypto/salsa20/ecrypt-machine.h crypto/salsa20/ecrypt-portable.h crypto/salsa20/ecrypt-sync.h crypto/salsa20/salsa20.c crypto/SymmetricCipherSalsa20.cpp ) endif() if(UNIX) set(keepassx_SOURCES ${keepassx_SOURCES} core/qlockfile_unix.cpp ) elseif(MINGW) set(keepassx_SOURCES ${keepassx_SOURCES} core/qlockfile_win.cpp ) endif() set(keepassx_SOURCES_MAINEXE main.cpp ) set(keepassx_MOC autotype/AutoType.h autotype/AutoTypeSelectDialog.h autotype/AutoTypeSelectView.h autotype/ShortcutWidget.h autotype/WindowSelectComboBox.h core/AutoTypeAssociations.h core/Config.h core/Database.h core/Entry.h core/EntryAttachments.h core/EntryAttributes.h core/Group.h core/InactivityTimer.h core/Metadata.h core/qsavefile.h gui/AboutDialog.h gui/Application.h gui/ChangeMasterKeyWidget.h gui/Clipboard.h gui/DatabaseOpenWidget.h gui/DatabaseRepairWidget.h gui/DatabaseSettingsWidget.h gui/DatabaseTabWidget.h gui/DatabaseWidget.h gui/DatabaseWidgetStateSync.h gui/DialogyWidget.h gui/DragTabBar.h gui/EditWidget.h gui/EditWidgetIcons.h gui/EditWidgetProperties.h gui/IconModels.h gui/KeePass1OpenWidget.h gui/LineEdit.h gui/MainWindow.h gui/PasswordEdit.h gui/PasswordGeneratorWidget.h gui/PasswordComboBox.h gui/SettingsWidget.h gui/SortFilterHideProxyModel.h gui/UnlockDatabaseWidget.h gui/WelcomeWidget.h gui/entry/AutoTypeAssociationsModel.h gui/entry/EditEntryWidget.h gui/entry/EntryAttachmentsModel.h gui/entry/EntryAttributesModel.h gui/entry/EntryHistoryModel.h gui/entry/EntryModel.h gui/entry/EntryView.h gui/group/EditGroupWidget.h gui/group/GroupModel.h gui/group/GroupView.h keys/CompositeKey_p.h streams/HashedBlockStream.h streams/LayeredStream.h streams/qtiocompressor.h streams/StoreDataStream.h streams/SymmetricCipherStream.h ) set(keepassx_FORMS gui/AboutDialog.ui gui/ChangeMasterKeyWidget.ui gui/DatabaseOpenWidget.ui gui/DatabaseSettingsWidget.ui gui/EditWidget.ui gui/EditWidgetIcons.ui gui/EditWidgetProperties.ui gui/MainWindow.ui gui/PasswordGeneratorWidget.ui gui/SearchWidget.ui gui/SettingsWidgetGeneral.ui gui/SettingsWidgetSecurity.ui gui/WelcomeWidget.ui gui/entry/EditEntryWidgetAdvanced.ui gui/entry/EditEntryWidgetAutoType.ui gui/entry/EditEntryWidgetHistory.ui gui/entry/EditEntryWidgetMain.ui gui/group/EditGroupWidgetMain.ui ) if(MINGW) set(keepassx_SOURCES_MAINEXE ${keepassx_SOURCES_MAINEXE} ${CMAKE_SOURCE_DIR}/share/windows/icon.rc) endif() qt4_wrap_ui(keepassx_SOURCES ${keepassx_FORMS}) qt4_wrap_cpp(keepassx_SOURCES ${keepassx_MOC}) add_library(keepassx_core STATIC ${keepassx_SOURCES}) set_target_properties(keepassx_core PROPERTIES COMPILE_DEFINITIONS KEEPASSX_BUILDING_CORE) add_executable(${PROGNAME} WIN32 MACOSX_BUNDLE ${keepassx_SOURCES_MAINEXE}) target_link_libraries(${PROGNAME} keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${GCRYPT_LIBRARIES} ${ZLIB_LIBRARIES}) set_target_properties(${PROGNAME} PROPERTIES ENABLE_EXPORTS ON) if(APPLE) configure_file(${CMAKE_SOURCE_DIR}/share/macosx/Info.plist.cmake ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) set_target_properties(${PROGNAME} PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_BINARY_DIR}/Info.plist) endif() install(TARGETS ${PROGNAME} BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION ${BIN_INSTALL_DIR} COMPONENT Runtime) add_subdirectory(autotype) if(APPLE AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8)) if(QT_MAC_USE_COCOA AND EXISTS "${QT_LIBRARY_DIR}/Resources/qt_menu.nib") install(DIRECTORY "${QT_LIBRARY_DIR}/Resources/qt_menu.nib" DESTINATION "${DATA_INSTALL_DIR}") endif() set(CPACK_GENERATOR "DragNDrop") set(CPACK_DMG_FORMAT "UDBZ") set(CPACK_DMG_VOLUME_NAME "${PROGNAME}") set(CPACK_SYSTEM_NAME "OSX") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSX_VERSION_NUM}") include(CPack) include(DeployQt4) install_qt4_executable(${PROGNAME}.app "qjpeg;qgif;qico;qtaccessiblewidgets") endif() if(MINGW AND NOT (${CMAKE_VERSION} VERSION_LESS 2.8.8)) set(CPACK_GENERATOR "ZIP") set(CPACK_STRIP_FILES ON) set(CPACK_PACKAGE_FILE_NAME "${PROGNAME}-${KEEPASSX_VERSION_NUM}") include(CPack) include(DeployQt4) install_qt4_executable(${PROGNAME}.exe "qjpeg;qgif;qico;qtaccessiblewidgets") endif() keepassx-2.0.3/src/autotype/000077500000000000000000000000001276304217300160055ustar00rootroot00000000000000keepassx-2.0.3/src/autotype/AutoType.cpp000066400000000000000000000375211276304217300202730ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoType.h" #include #include #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeSelectDialog.h" #include "autotype/WildcardMatcher.h" #include "core/Config.h" #include "core/Database.h" #include "core/Entry.h" #include "core/FilePath.h" #include "core/Group.h" #include "core/ListDeleter.h" #include "core/Tools.h" #include "gui/MessageBox.h" AutoType* AutoType::m_instance = Q_NULLPTR; AutoType::AutoType(QObject* parent, bool test) : QObject(parent) , m_inAutoType(false) , m_currentGlobalKey(static_cast(0)) , m_currentGlobalModifiers(0) , m_pluginLoader(new QPluginLoader(this)) , m_plugin(Q_NULLPTR) , m_executor(Q_NULLPTR) , m_windowFromGlobal(0) { // prevent crash when the plugin has unresolved symbols m_pluginLoader->setLoadHints(QLibrary::ResolveAllSymbolsHint); QString pluginName = "keepassx-autotype-"; if (!test) { pluginName += Tools::platform(); } else { pluginName += "test"; } QString pluginPath = filePath()->pluginPath(pluginName); if (!pluginPath.isEmpty()) { loadPlugin(pluginPath); } connect(qApp, SIGNAL(aboutToQuit()), SLOT(unloadPlugin())); } AutoType::~AutoType() { if (m_executor) { delete m_executor; m_executor = Q_NULLPTR; } } void AutoType::loadPlugin(const QString& pluginPath) { m_pluginLoader->setFileName(pluginPath); QObject* pluginInstance = m_pluginLoader->instance(); if (pluginInstance) { m_plugin = qobject_cast(pluginInstance); m_executor = Q_NULLPTR; if (m_plugin) { if (m_plugin->isAvailable()) { m_executor = m_plugin->createExecutor(); connect(pluginInstance, SIGNAL(globalShortcutTriggered()), SIGNAL(globalShortcutTriggered())); } else { unloadPlugin(); } } } if (!m_plugin) { qWarning("Unable to load auto-type plugin:\n%s", qPrintable(m_pluginLoader->errorString())); } } AutoType* AutoType::instance() { if (!m_instance) { m_instance = new AutoType(qApp); } return m_instance; } void AutoType::createTestInstance() { Q_ASSERT(!m_instance); m_instance = new AutoType(qApp, true); } QStringList AutoType::windowTitles() { if (!m_plugin) { return QStringList(); } return m_plugin->windowTitles(); } void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow, const QString& customSequence, WId window) { if (m_inAutoType || !m_plugin) { return; } m_inAutoType = true; QString sequence; if (customSequence.isEmpty()) { sequence = autoTypeSequence(entry); } else { sequence = customSequence; } QList actions; ListDeleter actionsDeleter(&actions); if (!parseActions(sequence, entry, actions)) { m_inAutoType = false; // TODO: make this automatic return; } if (hideWindow) { hideWindow->showMinimized(); } Tools::wait(m_plugin->initialTimeout()); if (!window) { window = m_plugin->activeWindow(); } QCoreApplication::processEvents(QEventLoop::AllEvents, 10); Q_FOREACH (AutoTypeAction* action, actions) { if (m_plugin->activeWindow() != window) { qWarning("Active window changed, interrupting auto-type."); break; } action->accept(m_executor); QCoreApplication::processEvents(QEventLoop::AllEvents, 10); } m_inAutoType = false; } void AutoType::performGlobalAutoType(const QList& dbList) { if (m_inAutoType || !m_plugin) { return; } QString windowTitle = m_plugin->activeWindowTitle(); if (windowTitle.isEmpty()) { return; } m_inAutoType = true; QList entryList; QHash sequenceHash; Q_FOREACH (Database* db, dbList) { Q_FOREACH (Entry* entry, db->rootGroup()->entriesRecursive()) { QString sequence = autoTypeSequence(entry, windowTitle); if (!sequence.isEmpty()) { entryList << entry; sequenceHash.insert(entry, sequence); } } } if (entryList.isEmpty()) { m_inAutoType = false; QString message = tr("Couldn't find an entry that matches the window title:"); message.append("\n\n"); message.append(windowTitle); MessageBox::information(Q_NULLPTR, tr("Auto-Type - KeePassX"), message); } else if ((entryList.size() == 1) && !config()->get("security/autotypeask").toBool()) { m_inAutoType = false; performAutoType(entryList.first(), Q_NULLPTR, sequenceHash[entryList.first()]); } else { m_windowFromGlobal = m_plugin->activeWindow(); AutoTypeSelectDialog* selectDialog = new AutoTypeSelectDialog(); connect(selectDialog, SIGNAL(entryActivated(Entry*,QString)), SLOT(performAutoTypeFromGlobal(Entry*,QString))); connect(selectDialog, SIGNAL(rejected()), SLOT(resetInAutoType())); selectDialog->setEntries(entryList, sequenceHash); selectDialog->show(); // necessary when the main window is minimized selectDialog->activateWindow(); } } void AutoType::performAutoTypeFromGlobal(Entry* entry, const QString& sequence) { Q_ASSERT(m_inAutoType); m_plugin->raiseWindow(m_windowFromGlobal); m_inAutoType = false; performAutoType(entry, Q_NULLPTR, sequence, m_windowFromGlobal); } void AutoType::resetInAutoType() { Q_ASSERT(m_inAutoType); m_inAutoType = false; } void AutoType::unloadPlugin() { if (m_executor) { delete m_executor; m_executor = Q_NULLPTR; } if (m_plugin) { m_plugin->unload(); m_plugin = Q_NULLPTR; } } bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { Q_ASSERT(key); Q_ASSERT(modifiers); if (!m_plugin) { return false; } if (key != m_currentGlobalKey || modifiers != m_currentGlobalModifiers) { if (m_currentGlobalKey && m_currentGlobalModifiers) { m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); } if (m_plugin->registerGlobalShortcut(key, modifiers)) { m_currentGlobalKey = key; m_currentGlobalModifiers = modifiers; return true; } else { return false; } } else { return true; } } void AutoType::unregisterGlobalShortcut() { if (m_plugin && m_currentGlobalKey && m_currentGlobalModifiers) { m_plugin->unregisterGlobalShortcut(m_currentGlobalKey, m_currentGlobalModifiers); } } int AutoType::callEventFilter(void* event) { if (!m_plugin) { return -1; } return m_plugin->platformEventFilter(event); } bool AutoType::parseActions(const QString& sequence, const Entry* entry, QList& actions) { QString tmpl; bool inTmpl = false; Q_FOREACH (const QChar& ch, sequence) { // TODO: implement support for {{}, {}} and {DELAY=X} if (inTmpl) { if (ch == '{') { qWarning("Syntax error in auto-type sequence."); return false; } else if (ch == '}') { actions.append(createActionFromTemplate(tmpl, entry)); inTmpl = false; tmpl.clear(); } else { tmpl += ch; } } else if (ch == '{') { inTmpl = true; } else if (ch == '}') { qWarning("Syntax error in auto-type sequence."); return false; } else { actions.append(new AutoTypeChar(ch)); } } return true; } QList AutoType::createActionFromTemplate(const QString& tmpl, const Entry* entry) { QString tmplName = tmpl.toLower(); int num = -1; QList list; QRegExp repeatRegEx("(.+) (\\d+)", Qt::CaseSensitive, QRegExp::RegExp2); if (repeatRegEx.exactMatch(tmplName)) { tmplName = repeatRegEx.cap(1); num = repeatRegEx.cap(2).toInt(); if (num == 0) { return list; } // some safety checks else if (tmplName == "delay") { if (num > 10000) { return list; } } else if (num > 100) { return list; } } if (tmplName == "tab") { list.append(new AutoTypeKey(Qt::Key_Tab)); } else if (tmplName == "enter") { list.append(new AutoTypeKey(Qt::Key_Enter)); } else if (tmplName == "up") { list.append(new AutoTypeKey(Qt::Key_Up)); } else if (tmplName == "down") { list.append(new AutoTypeKey(Qt::Key_Down)); } else if (tmplName == "left") { list.append(new AutoTypeKey(Qt::Key_Left)); } else if (tmplName == "right") { list.append(new AutoTypeKey(Qt::Key_Right)); } else if (tmplName == "insert" || tmplName == "ins") { list.append(new AutoTypeKey(Qt::Key_Insert)); } else if (tmplName == "delete" || tmplName == "del") { list.append(new AutoTypeKey(Qt::Key_Delete)); } else if (tmplName == "home") { list.append(new AutoTypeKey(Qt::Key_Home)); } else if (tmplName == "end") { list.append(new AutoTypeKey(Qt::Key_End)); } else if (tmplName == "pgup") { list.append(new AutoTypeKey(Qt::Key_PageUp)); } else if (tmplName == "pgdown") { list.append(new AutoTypeKey(Qt::Key_PageDown)); } else if (tmplName == "backspace" || tmplName == "bs" || tmplName == "bksp") { list.append(new AutoTypeKey(Qt::Key_Backspace)); } else if (tmplName == "break") { list.append(new AutoTypeKey(Qt::Key_Pause)); } else if (tmplName == "capslock") { list.append(new AutoTypeKey(Qt::Key_CapsLock)); } else if (tmplName == "esc") { list.append(new AutoTypeKey(Qt::Key_Escape)); } else if (tmplName == "help") { list.append(new AutoTypeKey(Qt::Key_Help)); } else if (tmplName == "numlock") { list.append(new AutoTypeKey(Qt::Key_NumLock)); } else if (tmplName == "ptrsc") { list.append(new AutoTypeKey(Qt::Key_Print)); } else if (tmplName == "scolllock") { list.append(new AutoTypeKey(Qt::Key_ScrollLock)); } // Qt doesn't know about keypad keys so use the normal ones instead else if (tmplName == "add" || tmplName == "+") { list.append(new AutoTypeChar('+')); } else if (tmplName == "subtract") { list.append(new AutoTypeChar('-')); } else if (tmplName == "multiply") { list.append(new AutoTypeChar('*')); } else if (tmplName == "divide") { list.append(new AutoTypeChar('/')); } else if (tmplName == "^") { list.append(new AutoTypeChar('^')); } else if (tmplName == "%") { list.append(new AutoTypeChar('%')); } else if (tmplName == "~") { list.append(new AutoTypeChar('~')); } else if (tmplName == "(") { list.append(new AutoTypeChar('(')); } else if (tmplName == ")") { list.append(new AutoTypeChar(')')); } else if (tmplName == "{") { list.append(new AutoTypeChar('{')); } else if (tmplName == "}") { list.append(new AutoTypeChar('}')); } else { QRegExp fnRegexp("f(\\d+)", Qt::CaseInsensitive, QRegExp::RegExp2); if (fnRegexp.exactMatch(tmplName)) { int fnNo = fnRegexp.cap(1).toInt(); if (fnNo >= 1 && fnNo <= 16) { list.append(new AutoTypeKey(static_cast(Qt::Key_F1 - 1 + fnNo))); } } } if (!list.isEmpty()) { for (int i = 1; i < num; i++) { list.append(list.at(0)->clone()); } return list; } if (tmplName == "delay" && num > 0) { list.append(new AutoTypeDelay(num)); } else if (tmplName == "clearfield") { list.append(new AutoTypeClearField()); } if (!list.isEmpty()) { return list; } QString placeholder = QString("{%1}").arg(tmplName); QString resolved = entry->resolvePlaceholders(placeholder); if (placeholder != resolved) { Q_FOREACH (const QChar& ch, resolved) { if (ch == '\n') { list.append(new AutoTypeKey(Qt::Key_Enter)); } else if (ch == '\t') { list.append(new AutoTypeKey(Qt::Key_Tab)); } else { list.append(new AutoTypeChar(ch)); } } } return list; } QString AutoType::autoTypeSequence(const Entry* entry, const QString& windowTitle) { if (!entry->autoTypeEnabled()) { return QString(); } bool enableSet = false; QString sequence; if (!windowTitle.isEmpty()) { bool match = false; Q_FOREACH (const AutoTypeAssociations::Association& assoc, entry->autoTypeAssociations()->getAll()) { if (windowMatches(windowTitle, assoc.window)) { if (!assoc.sequence.isEmpty()) { sequence = assoc.sequence; } else { sequence = entry->defaultAutoTypeSequence(); } match = true; break; } } if (!match && config()->get("AutoTypeEntryTitleMatch").toBool() && !entry->title().isEmpty() && windowTitle.contains(entry->title(), Qt::CaseInsensitive)) { sequence = entry->defaultAutoTypeSequence(); match = true; } if (!match) { return QString(); } } else { sequence = entry->defaultAutoTypeSequence(); } const Group* group = entry->group(); do { if (!enableSet) { if (group->autoTypeEnabled() == Group::Disable) { return QString(); } else if (group->autoTypeEnabled() == Group::Enable) { enableSet = true; } } if (sequence.isEmpty()) { sequence = group->defaultAutoTypeSequence(); } group = group->parentGroup(); } while (group && (!enableSet || sequence.isEmpty())); if (sequence.isEmpty() && (!entry->username().isEmpty() || !entry->password().isEmpty())) { if (entry->username().isEmpty()) { sequence = "{PASSWORD}{ENTER}"; } else if (entry->password().isEmpty()) { sequence = "{USERNAME}{ENTER}"; } else { sequence = "{USERNAME}{TAB}{PASSWORD}{ENTER}"; } } return sequence; } bool AutoType::windowMatches(const QString& windowTitle, const QString& windowPattern) { if (windowPattern.startsWith("//") && windowPattern.endsWith("//") && windowPattern.size() >= 4) { QRegExp regExp(windowPattern.mid(2, windowPattern.size() - 4), Qt::CaseInsensitive, QRegExp::RegExp2); return (regExp.indexIn(windowTitle) != -1); } else { return WildcardMatcher(windowTitle).match(windowPattern); } } keepassx-2.0.3/src/autotype/AutoType.h000066400000000000000000000052431276304217300177340ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPE_H #define KEEPASSX_AUTOTYPE_H #include #include #include #include "core/Global.h" class AutoTypeAction; class AutoTypeExecutor; class AutoTypePlatformInterface; class Database; class Entry; class QPluginLoader; class AutoType : public QObject { Q_OBJECT public: QStringList windowTitles(); void performAutoType(const Entry* entry, QWidget* hideWindow = Q_NULLPTR, const QString& customSequence = QString(), WId window = 0); bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); void unregisterGlobalShortcut(); int callEventFilter(void* event); inline bool isAvailable() { return m_plugin; } static AutoType* instance(); static void createTestInstance(); public Q_SLOTS: void performGlobalAutoType(const QList& dbList); Q_SIGNALS: void globalShortcutTriggered(); private Q_SLOTS: void performAutoTypeFromGlobal(Entry* entry, const QString& sequence); void resetInAutoType(); void unloadPlugin(); private: explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false); ~AutoType(); void loadPlugin(const QString& pluginPath); bool parseActions(const QString& sequence, const Entry* entry, QList& actions); QList createActionFromTemplate(const QString& tmpl, const Entry* entry); QString autoTypeSequence(const Entry* entry, const QString& windowTitle = QString()); bool windowMatches(const QString& windowTitle, const QString& windowPattern); bool m_inAutoType; Qt::Key m_currentGlobalKey; Qt::KeyboardModifiers m_currentGlobalModifiers; QPluginLoader* m_pluginLoader; AutoTypePlatformInterface* m_plugin; AutoTypeExecutor* m_executor; WId m_windowFromGlobal; static AutoType* m_instance; Q_DISABLE_COPY(AutoType) }; inline AutoType* autoType() { return AutoType::instance(); } #endif // KEEPASSX_AUTOTYPE_H keepassx-2.0.3/src/autotype/AutoTypeAction.cpp000066400000000000000000000036131276304217300214240ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeAction.h" #include "core/Tools.h" AutoTypeChar::AutoTypeChar(const QChar& character) : character(character) { } AutoTypeAction* AutoTypeChar::clone() { return new AutoTypeChar(character); } void AutoTypeChar::accept(AutoTypeExecutor* executor) { executor->execChar(this); } AutoTypeKey::AutoTypeKey(Qt::Key key) : key(key) { } AutoTypeAction* AutoTypeKey::clone() { return new AutoTypeKey(key); } void AutoTypeKey::accept(AutoTypeExecutor* executor) { executor->execKey(this); } AutoTypeDelay::AutoTypeDelay(int delayMs) : delayMs(delayMs) { } AutoTypeAction* AutoTypeDelay::clone() { return new AutoTypeDelay(delayMs); } void AutoTypeDelay::accept(AutoTypeExecutor* executor) { executor->execDelay(this); } AutoTypeClearField::AutoTypeClearField() { } AutoTypeAction* AutoTypeClearField::clone() { return new AutoTypeClearField(); } void AutoTypeClearField::accept(AutoTypeExecutor* executor) { executor->execClearField(this); } void AutoTypeExecutor::execDelay(AutoTypeDelay* action) { Tools::wait(action->delayMs); } void AutoTypeExecutor::execClearField(AutoTypeClearField* action) { Q_UNUSED(action); // TODO: implement } keepassx-2.0.3/src/autotype/AutoTypeAction.h000066400000000000000000000042541276304217300210730ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPEACTION_H #define KEEPASSX_AUTOTYPEACTION_H #include #include #include "core/Global.h" class AutoTypeExecutor; class KEEPASSX_EXPORT AutoTypeAction { public: virtual ~AutoTypeAction() {} virtual AutoTypeAction* clone() = 0; virtual void accept(AutoTypeExecutor* executor) = 0; }; class KEEPASSX_EXPORT AutoTypeChar : public AutoTypeAction { public: explicit AutoTypeChar(const QChar& character); AutoTypeAction* clone(); void accept(AutoTypeExecutor* executor); const QChar character; }; class KEEPASSX_EXPORT AutoTypeKey : public AutoTypeAction { public: explicit AutoTypeKey(Qt::Key key); AutoTypeAction* clone(); void accept(AutoTypeExecutor* executor); const Qt::Key key; }; class KEEPASSX_EXPORT AutoTypeDelay : public AutoTypeAction { public: explicit AutoTypeDelay(int delayMs); AutoTypeAction* clone(); void accept(AutoTypeExecutor* executor); const int delayMs; }; class KEEPASSX_EXPORT AutoTypeClearField : public AutoTypeAction { public: explicit AutoTypeClearField(); AutoTypeAction* clone(); void accept(AutoTypeExecutor* executor); }; class KEEPASSX_EXPORT AutoTypeExecutor { public: virtual ~AutoTypeExecutor() {} virtual void execChar(AutoTypeChar* action) = 0; virtual void execKey(AutoTypeKey* action) = 0; virtual void execDelay(AutoTypeDelay* action); virtual void execClearField(AutoTypeClearField* action); }; #endif // KEEPASSX_AUTOTYPEACTION_H keepassx-2.0.3/src/autotype/AutoTypePlatformPlugin.h000066400000000000000000000032731276304217300226210ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H #define KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H #include #include "autotype/AutoTypeAction.h" class AutoTypePlatformInterface { public: virtual ~AutoTypePlatformInterface() {} virtual bool isAvailable() = 0; virtual QStringList windowTitles() = 0; virtual WId activeWindow() = 0; virtual QString activeWindowTitle() = 0; virtual bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0; virtual int platformEventFilter(void* event) = 0; virtual int initialTimeout() = 0; virtual bool raiseWindow(WId window) = 0; virtual void unload() {} virtual AutoTypeExecutor* createExecutor() = 0; // implementations should also provide a globalShortcutTriggered() signal }; Q_DECLARE_INTERFACE(AutoTypePlatformInterface, "org.keepassx.AutoTypePlatformInterface/1") #endif // KEEPASSX_AUTOTYPEPLATFORMPLUGIN_H keepassx-2.0.3/src/autotype/AutoTypeSelectDialog.cpp000066400000000000000000000060571276304217300225530ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeSelectDialog.h" #include #include #include #include #include #include "autotype/AutoTypeSelectView.h" #include "core/FilePath.h" #include "gui/entry/EntryModel.h" AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) : QDialog(parent) , m_view(new AutoTypeSelectView(this)) , m_entryActivatedEmitted(false) { setAttribute(Qt::WA_DeleteOnClose); // Places the window on the active (virtual) desktop instead of where the main window is. setAttribute(Qt::WA_X11BypassTransientForHint); setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); setWindowTitle(tr("Auto-Type - KeePassX")); setWindowIcon(filePath()->applicationIcon()); QSize size(400, 250); resize(size); // move dialog to the center of the screen QPoint screenCenter = QApplication::desktop()->availableGeometry(QCursor::pos()).center(); move(screenCenter.x() - (size.width() / 2), screenCenter.y() - (size.height() / 2)); QVBoxLayout* layout = new QVBoxLayout(this); QLabel* descriptionLabel = new QLabel(tr("Select entry to Auto-Type:"), this); layout->addWidget(descriptionLabel); connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); connect(m_view->model(), SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(entryRemoved())); layout->addWidget(m_view); QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Cancel, Qt::Horizontal, this); connect(buttonBox, SIGNAL(rejected()), SLOT(reject())); layout->addWidget(buttonBox); } void AutoTypeSelectDialog::setEntries(const QList& entries, const QHash& sequences) { m_sequences = sequences; m_view->setEntryList(entries); } void AutoTypeSelectDialog::emitEntryActivated(const QModelIndex& index) { // make sure we don't emit the signal twice when both activated() and clicked() are triggered if (m_entryActivatedEmitted) { return; } m_entryActivatedEmitted = true; Entry* entry = m_view->entryFromIndex(index); accept(); Q_EMIT entryActivated(entry, m_sequences[entry]); } void AutoTypeSelectDialog::entryRemoved() { if (m_view->model()->rowCount() == 0) { reject(); } } keepassx-2.0.3/src/autotype/AutoTypeSelectDialog.h000066400000000000000000000027221276304217300222130ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPESELECTDIALOG_H #define KEEPASSX_AUTOTYPESELECTDIALOG_H #include #include #include #include "core/Global.h" class AutoTypeSelectView; class Entry; class AutoTypeSelectDialog : public QDialog { Q_OBJECT public: explicit AutoTypeSelectDialog(QWidget* parent = Q_NULLPTR); void setEntries(const QList& entries, const QHash& sequences); Q_SIGNALS: void entryActivated(Entry* entry, const QString& sequence); private Q_SLOTS: void emitEntryActivated(const QModelIndex& index); void entryRemoved(); private: AutoTypeSelectView* const m_view; QHash m_sequences; bool m_entryActivatedEmitted; }; #endif // KEEPASSX_AUTOTYPESELECTDIALOG_H keepassx-2.0.3/src/autotype/AutoTypeSelectView.cpp000066400000000000000000000030151276304217300222550ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeSelectView.h" #include AutoTypeSelectView::AutoTypeSelectView(QWidget* parent) : EntryView(parent) { hideColumn(3); setMouseTracking(true); setAllColumnsShowFocus(true); setDragEnabled(false); setSelectionMode(QAbstractItemView::SingleSelection); connect(model(), SIGNAL(modelReset()), SLOT(selectFirstEntry())); } void AutoTypeSelectView::mouseMoveEvent(QMouseEvent* event) { QModelIndex index = indexAt(event->pos()); if (index.isValid()) { setCurrentIndex(index); setCursor(Qt::PointingHandCursor); } else { unsetCursor(); } EntryView::mouseMoveEvent(event); } void AutoTypeSelectView::selectFirstEntry() { QModelIndex index = model()->index(0, 0); if (index.isValid()) { setCurrentIndex(index); } } keepassx-2.0.3/src/autotype/AutoTypeSelectView.h000066400000000000000000000022021276304217300217170ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPESELECTVIEW_H #define KEEPASSX_AUTOTYPESELECTVIEW_H #include "core/Global.h" #include "gui/entry/EntryView.h" class Entry; class AutoTypeSelectView : public EntryView { Q_OBJECT public: explicit AutoTypeSelectView(QWidget* parent = Q_NULLPTR); protected: void mouseMoveEvent(QMouseEvent* event) Q_DECL_OVERRIDE; private Q_SLOTS: void selectFirstEntry(); }; #endif // KEEPASSX_AUTOTYPESELECTVIEW_H keepassx-2.0.3/src/autotype/CMakeLists.txt000066400000000000000000000006341276304217300205500ustar00rootroot00000000000000if(Q_WS_X11) find_package(X11) if(PRINT_SUMMARY) add_feature_info(libXi X11_Xi_FOUND "The X11 Xi Protocol library is required for auto-type") add_feature_info(libXtst X11_XTest_FOUND "The X11 XTEST Protocol library is required for auto-type") endif() if(X11_FOUND AND X11_Xi_FOUND AND X11_XTest_FOUND) add_subdirectory(x11) endif() endif() if(WITH_TESTS) add_subdirectory(test) endif() keepassx-2.0.3/src/autotype/ShortcutWidget.cpp000066400000000000000000000061561276304217300215000ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "ShortcutWidget.h" #include #include "autotype/AutoType.h" ShortcutWidget::ShortcutWidget(QWidget* parent) : QLineEdit(parent) , m_key(static_cast(0)) , m_modifiers(0) , m_locked(false) { setReadOnly(true); } Qt::Key ShortcutWidget::key() const { return m_key; } Qt::KeyboardModifiers ShortcutWidget::modifiers() const { return m_modifiers; } void ShortcutWidget::setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { m_key = key; m_modifiers = modifiers; m_locked = true; displayShortcut(m_key, m_modifiers); if (autoType()->registerGlobalShortcut(m_key, m_modifiers)) { setStyleSheet(""); } else { setStyleSheet("background-color: #FF9696;"); } } void ShortcutWidget::resetShortcut() { m_key = static_cast(0); m_modifiers = 0; m_locked = false; autoType()->unregisterGlobalShortcut(); } void ShortcutWidget::keyPressEvent(QKeyEvent* event) { keyEvent(event); } void ShortcutWidget::keyReleaseEvent(QKeyEvent* event) { keyEvent(event); } void ShortcutWidget::keyEvent(QKeyEvent* event) { event->accept(); if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) { return; } bool release = (event->type() == QEvent::KeyRelease); if (m_locked && release) { return; } Qt::Key key = static_cast(event->key()); if (key <= 0 || key == Qt::Key_unknown) { return; } Qt::KeyboardModifiers modifiers = event->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META); bool keyIsModifier; switch (key) { case Qt::Key_Shift: case Qt::Key_Control: case Qt::Key_Meta: case Qt::Key_Alt: case Qt::Key_AltGr: keyIsModifier = true; break; default: keyIsModifier = false; } if (!release && !keyIsModifier) { if (modifiers != 0) { setShortcut(key, modifiers); } else { resetShortcut(); setStyleSheet(""); displayShortcut(key, modifiers); } } else { if (m_locked) { resetShortcut(); setStyleSheet(""); } displayShortcut(static_cast(0), modifiers); } } void ShortcutWidget::displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { setText(QKeySequence(key | modifiers).toString(QKeySequence::NativeText)); } keepassx-2.0.3/src/autotype/ShortcutWidget.h000066400000000000000000000027101276304217300211350ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SHORTCUTWIDGET_H #define KEEPASSX_SHORTCUTWIDGET_H #include #include "core/Global.h" class ShortcutWidget : public QLineEdit { Q_OBJECT public: explicit ShortcutWidget(QWidget* parent = Q_NULLPTR); Qt::Key key() const; Qt::KeyboardModifiers modifiers() const; void setShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); protected: void keyPressEvent(QKeyEvent* event) Q_DECL_OVERRIDE; void keyReleaseEvent(QKeyEvent* event) Q_DECL_OVERRIDE; private: void keyEvent(QKeyEvent* event); void displayShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers); void resetShortcut(); Qt::Key m_key; Qt::KeyboardModifiers m_modifiers; bool m_locked; }; #endif // KEEPASSX_SHORTCUTWIDGET_H keepassx-2.0.3/src/autotype/WildcardMatcher.cpp000066400000000000000000000046761276304217300215630ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "WildcardMatcher.h" #include const QChar WildcardMatcher::Wildcard = '*'; const Qt::CaseSensitivity WildcardMatcher::Sensitivity = Qt::CaseInsensitive; WildcardMatcher::WildcardMatcher(const QString& text) : m_text(text) { } bool WildcardMatcher::match(const QString& pattern) { m_pattern = pattern; if (patternContainsWildcard()) { return matchWithWildcards(); } else { return patternEqualsText(); } } bool WildcardMatcher::patternContainsWildcard() { return m_pattern.contains(Wildcard); } bool WildcardMatcher::patternEqualsText() { return m_text.compare(m_pattern, Sensitivity) == 0; } bool WildcardMatcher::matchWithWildcards() { QStringList parts = m_pattern.split(Wildcard, QString::KeepEmptyParts); Q_ASSERT(parts.size() >= 2); if (startOrEndDoesNotMatch(parts)) { return false; } return partsMatch(parts); } bool WildcardMatcher::startOrEndDoesNotMatch(const QStringList& parts) { return !m_text.startsWith(parts.first(), Sensitivity) || !m_text.endsWith(parts.last(), Sensitivity); } bool WildcardMatcher::partsMatch(const QStringList& parts) { int index = 0; Q_FOREACH (const QString& part, parts) { int matchIndex = getMatchIndex(part, index); if (noMatchFound(matchIndex)) { return false; } index = calculateNewIndex(matchIndex, part.length()); } return true; } int WildcardMatcher::getMatchIndex(const QString& part, int startIndex) { return m_text.indexOf(part, startIndex, Sensitivity); } bool WildcardMatcher::noMatchFound(int index) { return index == -1; } int WildcardMatcher::calculateNewIndex(int matchIndex, int partLength) { return matchIndex + partLength; } keepassx-2.0.3/src/autotype/WildcardMatcher.h000066400000000000000000000026751276304217300212250ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_WILDCARDMATCHER_H #define KEEPASSX_WILDCARDMATCHER_H #include class WildcardMatcher { public: explicit WildcardMatcher(const QString& text); bool match(const QString& pattern); static const QChar Wildcard; private: bool patternEqualsText(); bool patternContainsWildcard(); bool matchWithWildcards(); bool startOrEndDoesNotMatch(const QStringList& parts); bool partsMatch(const QStringList& parts); int getMatchIndex(const QString& part, int startIndex); bool noMatchFound(int index); int calculateNewIndex(int matchIndex, int partLength); static const Qt::CaseSensitivity Sensitivity; const QString m_text; QString m_pattern; }; #endif // KEEPASSX_WILDCARDMATCHER_H keepassx-2.0.3/src/autotype/WindowSelectComboBox.cpp000066400000000000000000000035541276304217300225600ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "WindowSelectComboBox.h" #include #include "autotype/AutoType.h" WindowSelectComboBox::WindowSelectComboBox(QWidget* parent) : QComboBox(parent) { setEditable(true); setInsertPolicy(QComboBox::NoInsert); setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed, QSizePolicy::ComboBox)); // first item is always the current content of the line edit insertItem(0, ""); } void WindowSelectComboBox::refreshWindowList() { model()->setData(model()->index(0, 0), lineEdit()->text()); while (count() > 1) { removeItem(1); } insertItems(1, autoType()->windowTitles()); } void WindowSelectComboBox::showPopup() { if (lineEdit()->isReadOnly()) { return; } refreshWindowList(); QComboBox::showPopup(); } QSize WindowSelectComboBox::sizeHint() const { QSize size = lineEdit()->sizeHint(); size.setHeight(qMax(size.height(), QComboBox::sizeHint().height())); return size; } QSize WindowSelectComboBox::minimumSizeHint() const { QSize size = lineEdit()->minimumSizeHint(); size.setHeight(qMax(size.height(), QComboBox::minimumSizeHint().height())); return size; } keepassx-2.0.3/src/autotype/WindowSelectComboBox.h000066400000000000000000000022371276304217300222220ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_WINDOWSELECTCOMBOBOX_H #define KEEPASSX_WINDOWSELECTCOMBOBOX_H #include #include "core/Global.h" class WindowSelectComboBox : public QComboBox { Q_OBJECT public: explicit WindowSelectComboBox(QWidget* parent = Q_NULLPTR); void refreshWindowList(); void showPopup() Q_DECL_OVERRIDE; QSize sizeHint() const Q_DECL_OVERRIDE; QSize minimumSizeHint() const Q_DECL_OVERRIDE; }; #endif // KEEPASSX_WINDOWSELECTCOMBOBOX_H keepassx-2.0.3/src/autotype/test/000077500000000000000000000000001276304217300167645ustar00rootroot00000000000000keepassx-2.0.3/src/autotype/test/AutoTypeTest.cpp000066400000000000000000000055101276304217300221030ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeTest.h" bool AutoTypePlatformTest::isAvailable() { return true; } QString AutoTypePlatformTest::keyToString(Qt::Key key) { return QString("[Key0x%1]").arg(key, 0, 16); } QStringList AutoTypePlatformTest::windowTitles() { return QStringList(); } WId AutoTypePlatformTest::activeWindow() { return 0; } QString AutoTypePlatformTest::activeWindowTitle() { return m_activeWindowTitle; } bool AutoTypePlatformTest::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { Q_UNUSED(key); Q_UNUSED(modifiers); return true; } void AutoTypePlatformTest::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { Q_UNUSED(key); Q_UNUSED(modifiers); } int AutoTypePlatformTest::platformEventFilter(void* event) { Q_UNUSED(event); return -1; } AutoTypeExecutor* AutoTypePlatformTest::createExecutor() { return new AutoTypeExecturorTest(this); } void AutoTypePlatformTest::setActiveWindowTitle(const QString& title) { m_activeWindowTitle = title; } QString AutoTypePlatformTest::actionChars() { return m_actionChars; } int AutoTypePlatformTest::actionCount() { return m_actionList.size(); } void AutoTypePlatformTest::clearActions() { qDeleteAll(m_actionList); m_actionList.clear(); m_actionChars.clear(); } void AutoTypePlatformTest::addActionChar(AutoTypeChar* action) { m_actionList.append(action->clone()); m_actionChars += action->character; } void AutoTypePlatformTest::addActionKey(AutoTypeKey* action) { m_actionList.append(action->clone()); m_actionChars.append(keyToString(action->key)); } int AutoTypePlatformTest::initialTimeout() { return 0; } bool AutoTypePlatformTest::raiseWindow(WId window) { Q_UNUSED(window); return false; } AutoTypeExecturorTest::AutoTypeExecturorTest(AutoTypePlatformTest* platform) : m_platform(platform) { } void AutoTypeExecturorTest::execChar(AutoTypeChar* action) { m_platform->addActionChar(action); } void AutoTypeExecturorTest::execKey(AutoTypeKey* action) { m_platform->addActionKey(action); } Q_EXPORT_PLUGIN2(keepassx-autotype-test, AutoTypePlatformTest) keepassx-2.0.3/src/autotype/test/AutoTypeTest.h000066400000000000000000000051001276304217300215430ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPETEST_H #define KEEPASSX_AUTOTYPETEST_H #include #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" #include "autotype/test/AutoTypeTestInterface.h" #include "core/Global.h" class AutoTypePlatformTest : public QObject, public AutoTypePlatformInterface, public AutoTypeTestInterface { Q_OBJECT Q_INTERFACES(AutoTypePlatformInterface AutoTypeTestInterface) public: QString keyToString(Qt::Key key) Q_DECL_OVERRIDE; bool isAvailable() Q_DECL_OVERRIDE; QStringList windowTitles() Q_DECL_OVERRIDE; WId activeWindow() Q_DECL_OVERRIDE; QString activeWindowTitle() Q_DECL_OVERRIDE; bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; int platformEventFilter(void* event) Q_DECL_OVERRIDE; int initialTimeout() Q_DECL_OVERRIDE; bool raiseWindow(WId window) Q_DECL_OVERRIDE; AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE; void setActiveWindowTitle(const QString& title) Q_DECL_OVERRIDE; QString actionChars() Q_DECL_OVERRIDE; int actionCount() Q_DECL_OVERRIDE; void clearActions() Q_DECL_OVERRIDE; void addActionChar(AutoTypeChar* action); void addActionKey(AutoTypeKey* action); Q_SIGNALS: void globalShortcutTriggered(); private: QString m_activeWindowTitle; QList m_actionList; QString m_actionChars; }; class AutoTypeExecturorTest : public AutoTypeExecutor { public: explicit AutoTypeExecturorTest(AutoTypePlatformTest* platform); void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE; void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE; private: AutoTypePlatformTest* const m_platform; }; #endif // KEEPASSX_AUTOTYPETEST_H keepassx-2.0.3/src/autotype/test/AutoTypeTestInterface.h000066400000000000000000000023641276304217300233750ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPETESTINTERFACE_H #define KEEPASSX_AUTOTYPETESTINTERFACE_H #include "autotype/AutoTypeAction.h" class AutoTypeTestInterface { public: virtual ~AutoTypeTestInterface() {} virtual void setActiveWindowTitle(const QString& title) = 0; virtual QString actionChars() = 0; virtual int actionCount() = 0; virtual void clearActions() = 0; virtual QString keyToString(Qt::Key key) = 0; }; Q_DECLARE_INTERFACE(AutoTypeTestInterface, "org.keepassx.AutoTypeTestInterface/1") #endif // KEEPASSX_AUTOTYPETESTINTERFACE_H keepassx-2.0.3/src/autotype/test/CMakeLists.txt000066400000000000000000000005001276304217300215170ustar00rootroot00000000000000set(autotype_test_SOURCES AutoTypeTest.cpp ) set(autotype_test_MOC AutoTypeTest.h ) qt4_wrap_cpp(autotype_test_SOURCES ${autotype_test_MOC}) add_library(keepassx-autotype-test MODULE ${autotype_test_SOURCES}) target_link_libraries(keepassx-autotype-test testautotype ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY}) keepassx-2.0.3/src/autotype/x11/000077500000000000000000000000001276304217300164165ustar00rootroot00000000000000keepassx-2.0.3/src/autotype/x11/AutoTypeX11.cpp000066400000000000000000000574351276304217300212040ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2000-2008 Tom Sato * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeX11.h" #include "KeySymMap.h" #include bool AutoTypePlatformX11::m_catchXErrors = false; bool AutoTypePlatformX11::m_xErrorOccured = false; int (*AutoTypePlatformX11::m_oldXErrorHandler)(Display*, XErrorEvent*) = Q_NULLPTR; AutoTypePlatformX11::AutoTypePlatformX11() { m_dpy = QX11Info::display(); m_rootWindow = QX11Info::appRootWindow(); m_atomWmState = XInternAtom(m_dpy, "WM_STATE", True); m_atomWmName = XInternAtom(m_dpy, "WM_NAME", True); m_atomNetWmName = XInternAtom(m_dpy, "_NET_WM_NAME", True); m_atomString = XInternAtom(m_dpy, "STRING", True); m_atomUtf8String = XInternAtom(m_dpy, "UTF8_STRING", True); m_atomNetActiveWindow = XInternAtom(m_dpy, "_NET_ACTIVE_WINDOW", True); m_classBlacklist << "desktop_window" << "gnome-panel"; // Gnome m_classBlacklist << "kdesktop" << "kicker"; // KDE 3 m_classBlacklist << "Plasma"; // KDE 4 m_classBlacklist << "plasmashell"; // KDE 5 m_classBlacklist << "xfdesktop" << "xfce4-panel"; // Xfce 4 m_currentGlobalKey = static_cast(0); m_currentGlobalModifiers = 0; m_keysymTable = Q_NULLPTR; m_xkb = Q_NULLPTR; m_remapKeycode = 0; m_currentRemapKeysym = NoSymbol; m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask; m_loaded = true; updateKeymap(); } bool AutoTypePlatformX11::isAvailable() { int ignore; if (!XQueryExtension(m_dpy, "XInputExtension", &ignore, &ignore, &ignore)) { return false; } if (!XQueryExtension(m_dpy, "XTEST", &ignore, &ignore, &ignore)) { return false; } if (!m_xkb) { XkbDescPtr kbd = getKeyboard(); if (!kbd) { return false; } XkbFreeKeyboard(kbd, XkbAllComponentsMask, True); } return true; } void AutoTypePlatformX11::unload() { // Restore the KeyboardMapping to its original state. if (m_currentRemapKeysym != NoSymbol) { AddKeysym(NoSymbol); } if (m_keysymTable) { XFree(m_keysymTable); } if (m_xkb) { XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); } m_loaded = false; } QStringList AutoTypePlatformX11::windowTitles() { return windowTitlesRecursive(m_rootWindow); } WId AutoTypePlatformX11::activeWindow() { Window window; int revert_to_return; XGetInputFocus(m_dpy, &window, &revert_to_return); int tree; do { if (isTopLevelWindow(window)) { break; } Window root; Window parent; Window* children = Q_NULLPTR; unsigned int numChildren; tree = XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren); window = parent; if (children) { XFree(children); } } while (tree && window); return window; } QString AutoTypePlatformX11::activeWindowTitle() { return windowTitle(activeWindow(), true); } bool AutoTypePlatformX11::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { int keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); uint nativeModifiers = qtToNativeModifiers(modifiers); startCatchXErrors(); XGrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow, True, GrabModeAsync, GrabModeAsync); XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); XGrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); XGrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow, True, GrabModeAsync, GrabModeAsync); stopCatchXErrors(); if (!m_xErrorOccured) { m_currentGlobalKey = key; m_currentGlobalModifiers = modifiers; m_currentGlobalKeycode = keycode; m_currentGlobalNativeModifiers = nativeModifiers; return true; } else { unregisterGlobalShortcut(key, modifiers); return false; } } uint AutoTypePlatformX11::qtToNativeModifiers(Qt::KeyboardModifiers modifiers) { uint nativeModifiers = 0; if (modifiers & Qt::ShiftModifier) { nativeModifiers |= ShiftMask; } if (modifiers & Qt::ControlModifier) { nativeModifiers |= ControlMask; } if (modifiers & Qt::AltModifier) { nativeModifiers |= Mod1Mask; } if (modifiers & Qt::MetaModifier) { nativeModifiers |= Mod4Mask; } return nativeModifiers; } void AutoTypePlatformX11::unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) { KeyCode keycode = XKeysymToKeycode(m_dpy, charToKeySym(key)); uint nativeModifiers = qtToNativeModifiers(modifiers); XUngrabKey(m_dpy, keycode, nativeModifiers, m_rootWindow); XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask, m_rootWindow); XUngrabKey(m_dpy, keycode, nativeModifiers | LockMask, m_rootWindow); XUngrabKey(m_dpy, keycode, nativeModifiers | Mod2Mask | LockMask, m_rootWindow); m_currentGlobalKey = static_cast(0); m_currentGlobalModifiers = 0; m_currentGlobalKeycode = 0; m_currentGlobalNativeModifiers = 0; } int AutoTypePlatformX11::platformEventFilter(void* event) { XEvent* xevent = static_cast(event); if ((xevent->type == KeyPress || xevent->type == KeyRelease) && m_currentGlobalKey && xevent->xkey.keycode == m_currentGlobalKeycode && (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers && (!QApplication::activeWindow() || QApplication::activeWindow()->isMinimized()) && m_loaded) { if (xevent->type == KeyPress) { Q_EMIT globalShortcutTriggered(); } return 1; } if (xevent->type == MappingNotify && m_loaded) { XRefreshKeyboardMapping(reinterpret_cast(xevent)); updateKeymap(); } return -1; } AutoTypeExecutor* AutoTypePlatformX11::createExecutor() { return new AutoTypeExecturorX11(this); } QString AutoTypePlatformX11::windowTitle(Window window, bool useBlacklist) { QString title; Atom type; int format; unsigned long nitems; unsigned long after; unsigned char* data = Q_NULLPTR; // the window manager spec says we should read _NET_WM_NAME first, then fall back to WM_NAME int retVal = XGetWindowProperty(m_dpy, window, m_atomNetWmName, 0, 1000, False, m_atomUtf8String, &type, &format, &nitems, &after, &data); if ((retVal == 0) && data) { title = QString::fromUtf8(reinterpret_cast(data)); } else { XTextProperty textProp; retVal = XGetTextProperty(m_dpy, window, &textProp, m_atomWmName); if ((retVal != 0) && textProp.value) { char** textList = Q_NULLPTR; int count; if (textProp.encoding == m_atomUtf8String) { title = QString::fromUtf8(reinterpret_cast(textProp.value)); } else if ((XmbTextPropertyToTextList(m_dpy, &textProp, &textList, &count) == 0) && textList && (count > 0)) { title = QString::fromLocal8Bit(textList[0]); } else if (textProp.encoding == m_atomString) { title = QString::fromLocal8Bit(reinterpret_cast(textProp.value)); } if (textList) { XFreeStringList(textList); } } if (textProp.value) { XFree(textProp.value); } } if (data) { XFree(data); } if (useBlacklist && !title.isEmpty()) { if (window == m_rootWindow) { return QString(); } QString className = windowClassName(window); if (m_classBlacklist.contains(className)) { return QString(); } QList keepassxWindows = widgetsToX11Windows(QApplication::topLevelWidgets()); if (keepassxWindows.contains(window)) { return QString(); } } return title; } QString AutoTypePlatformX11::windowClassName(Window window) { QString className; XClassHint wmClass; wmClass.res_name = Q_NULLPTR; wmClass.res_class = Q_NULLPTR; if (XGetClassHint(m_dpy, window, &wmClass) && wmClass.res_name) { className = QString::fromLocal8Bit(wmClass.res_name); } if (wmClass.res_name) { XFree(wmClass.res_name); } if (wmClass.res_class) { XFree(wmClass.res_class); } return className; } QList AutoTypePlatformX11::widgetsToX11Windows(const QWidgetList& widgetList) { QList windows; Q_FOREACH (const QWidget* widget, widgetList) { windows.append(widget->effectiveWinId()); } return windows; } QStringList AutoTypePlatformX11::windowTitlesRecursive(Window window) { QStringList titles; if (isTopLevelWindow(window)) { QString title = windowTitle(window, true); if (!title.isEmpty()) { titles.append(title); } } Window root; Window parent; Window* children = Q_NULLPTR; unsigned int numChildren; if (XQueryTree(m_dpy, window, &root, &parent, &children, &numChildren) && children) { for (uint i = 0; i < numChildren; i++) { titles.append(windowTitlesRecursive(children[i])); } } if (children) { XFree(children); } return titles; } bool AutoTypePlatformX11::isTopLevelWindow(Window window) { Atom type = None; int format; unsigned long nitems; unsigned long after; unsigned char* data = Q_NULLPTR; int retVal = XGetWindowProperty(m_dpy, window, m_atomWmState, 0, 2, False, m_atomWmState, &type, &format, &nitems, &after, &data); bool result = false; if (retVal == 0 && data) { if (type == m_atomWmState && format == 32 && nitems > 0) { qint32 state = static_cast(*data); result = (state != WithdrawnState); } XFree(data); } return result; } KeySym AutoTypePlatformX11::charToKeySym(const QChar& ch) { ushort unicode = ch.unicode(); /* first check for Latin-1 characters (1:1 mapping) */ if ((unicode >= 0x0020 && unicode <= 0x007e) || (unicode >= 0x00a0 && unicode <= 0x00ff)) { return unicode; } /* mapping table generated from keysymdef.h */ const uint* match = qBinaryFind(m_unicodeToKeysymKeys, m_unicodeToKeysymKeys + m_unicodeToKeysymLen, unicode); int index = match - m_unicodeToKeysymKeys; if (index != m_unicodeToKeysymLen) { return m_unicodeToKeysymValues[index]; } if (unicode >= 0x0100) { return unicode | 0x01000000; } return NoSymbol; } KeySym AutoTypePlatformX11::keyToKeySym(Qt::Key key) { switch (key) { case Qt::Key_Tab: return XK_Tab; case Qt::Key_Enter: return XK_Return; case Qt::Key_Up: return XK_Up; case Qt::Key_Down: return XK_Down; case Qt::Key_Left: return XK_Left; case Qt::Key_Right: return XK_Right; case Qt::Key_Insert: return XK_Insert; case Qt::Key_Delete: return XK_Delete; case Qt::Key_Home: return XK_Home; case Qt::Key_End: return XK_End; case Qt::Key_PageUp: return XK_Page_Up; case Qt::Key_PageDown: return XK_Page_Down; case Qt::Key_Backspace: return XK_BackSpace; case Qt::Key_Pause: return XK_Break; case Qt::Key_CapsLock: return XK_Caps_Lock; case Qt::Key_Escape: return XK_Escape; case Qt::Key_Help: return XK_Help; case Qt::Key_NumLock: return XK_Num_Lock; case Qt::Key_Print: return XK_Print; case Qt::Key_ScrollLock: return XK_Scroll_Lock; default: if (key >= Qt::Key_F1 && key <= Qt::Key_F16) { return XK_F1 + (key - Qt::Key_F1); } else { return NoSymbol; } } } /* * Update the keyboard and modifier mapping. * We need the KeyboardMapping for AddKeysym. * Modifier mapping is required for clearing the modifiers. */ void AutoTypePlatformX11::updateKeymap() { int keycode, inx; int mod_index, mod_key; XModifierKeymap *modifiers; if (m_xkb) { XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True); } m_xkb = getKeyboard(); XDisplayKeycodes(m_dpy, &m_minKeycode, &m_maxKeycode); if (m_keysymTable != NULL) XFree(m_keysymTable); m_keysymTable = XGetKeyboardMapping(m_dpy, m_minKeycode, m_maxKeycode - m_minKeycode + 1, &m_keysymPerKeycode); /* determine the keycode to use for remapped keys */ inx = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; if (m_remapKeycode == 0 || !isRemapKeycodeValid()) { for (keycode = m_minKeycode; keycode <= m_maxKeycode; keycode++) { inx = (keycode - m_minKeycode) * m_keysymPerKeycode; if (m_keysymTable[inx] == NoSymbol) { m_remapKeycode = keycode; m_currentRemapKeysym = NoSymbol; break; } } } /* determine the keycode to use for modifiers */ modifiers = XGetModifierMapping(m_dpy); for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { m_modifier_keycode[mod_index] = 0; for (mod_key = 0; mod_key < modifiers->max_keypermod; mod_key++) { keycode = modifiers->modifiermap[mod_index * modifiers->max_keypermod + mod_key]; if (keycode) { m_modifier_keycode[mod_index] = keycode; break; } } } XFreeModifiermap(modifiers); /* Xlib needs some time until the mapping is distributed to all clients */ // TODO: we should probably only sleep while in the middle of typing something timespec ts; ts.tv_sec = 0; ts.tv_nsec = 30 * 1000 * 1000; nanosleep(&ts, Q_NULLPTR); } bool AutoTypePlatformX11::isRemapKeycodeValid() { int baseKeycode = (m_remapKeycode - m_minKeycode) * m_keysymPerKeycode; for (int i = 0; i < m_keysymPerKeycode; i++) { if (m_keysymTable[baseKeycode + i] == m_currentRemapKeysym) { return true; } } return false; } void AutoTypePlatformX11::startCatchXErrors() { Q_ASSERT(!m_catchXErrors); m_catchXErrors = true; m_xErrorOccured = false; m_oldXErrorHandler = XSetErrorHandler(x11ErrorHandler); } void AutoTypePlatformX11::stopCatchXErrors() { Q_ASSERT(m_catchXErrors); XSync(m_dpy, False); XSetErrorHandler(m_oldXErrorHandler); m_catchXErrors = false; } int AutoTypePlatformX11::x11ErrorHandler(Display* display, XErrorEvent* error) { Q_UNUSED(display) Q_UNUSED(error) if (m_catchXErrors) { m_xErrorOccured = true; } return 1; } XkbDescPtr AutoTypePlatformX11::getKeyboard() { int num_devices; XID keyboard_id = XkbUseCoreKbd; XDeviceInfo* devices = XListInputDevices(m_dpy, &num_devices); if (!devices) { return Q_NULLPTR; } for (int i = 0; i < num_devices; i++) { if (QString(devices[i].name) == "Virtual core XTEST keyboard") { keyboard_id = devices[i].id; break; } } XFreeDeviceList(devices); return XkbGetKeyboard(m_dpy, XkbCompatMapMask | XkbGeometryMask, keyboard_id); } // -------------------------------------------------------------------------- // The following code is taken from xvkbd 3.0 and has been slightly modified. // -------------------------------------------------------------------------- /* * Insert a specified keysym on the dedicated position in the keymap * table. */ int AutoTypePlatformX11::AddKeysym(KeySym keysym) { if (m_remapKeycode == 0) { return 0; } int inx = (m_remapKeycode- m_minKeycode) * m_keysymPerKeycode; m_keysymTable[inx] = keysym; m_currentRemapKeysym = keysym; XChangeKeyboardMapping(m_dpy, m_remapKeycode, m_keysymPerKeycode, &m_keysymTable[inx], 1); XFlush(m_dpy); updateKeymap(); return m_remapKeycode; } /* * Send event to the focused window. * If input focus is specified explicitly, select the window * before send event to the window. */ void AutoTypePlatformX11::SendEvent(XKeyEvent* event, int event_type) { XSync(event->display, False); int (*oldHandler) (Display*, XErrorEvent*) = XSetErrorHandler(MyErrorHandler); event->type = event_type; Bool press; if (event->type == KeyPress) { press = True; } else { press = False; } XTestFakeKeyEvent(event->display, event->keycode, press, 0); XFlush(event->display); XSetErrorHandler(oldHandler); } /* * Send a modifier press/release event for all modifiers * which are set in the mask variable. */ void AutoTypePlatformX11::SendModifier(XKeyEvent *event, unsigned int mask, int event_type) { int mod_index; for (mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { if (mask & (1 << mod_index)) { event->keycode = m_modifier_keycode[mod_index]; SendEvent(event, event_type); if (event_type == KeyPress) event->state |= (1 << mod_index); else event->state &= (1 << mod_index); } } } /* * Determines the keycode and modifier mask for the given * keysym. */ int AutoTypePlatformX11::GetKeycode(KeySym keysym, unsigned int *mask) { int keycode = XKeysymToKeycode(m_dpy, keysym); if (keycode && keysymModifiers(keysym, keycode, mask)) { return keycode; } /* no modifier matches => resort to remapping */ keycode = AddKeysym(keysym); if (keycode && keysymModifiers(keysym, keycode, mask)) { return keycode; } *mask = 0; return 0; } bool AutoTypePlatformX11::keysymModifiers(KeySym keysym, int keycode, unsigned int *mask) { int shift, mod; unsigned int mods_rtrn; /* determine whether there is a combination of the modifiers (Mod1-Mod5) with or without shift which returns keysym */ for (shift = 0; shift < 2; shift ++) { for (mod = ControlMapIndex; mod <= Mod5MapIndex; mod ++) { KeySym keysym_rtrn; *mask = (mod == ControlMapIndex) ? shift : shift | (1 << mod); XkbTranslateKeyCode(m_xkb, keycode, *mask, &mods_rtrn, &keysym_rtrn); if (keysym_rtrn == keysym) { return true; } } } return false; } /* * Send sequence of KeyPressed/KeyReleased events to the focused * window to simulate keyboard. If modifiers (shift, control, etc) * are set ON, many events will be sent. */ void AutoTypePlatformX11::SendKeyPressedEvent(KeySym keysym) { Window cur_focus; int revert_to; XKeyEvent event; int keycode; if (keysym == NoSymbol) { qWarning("No such key: keysym=0x%lX", keysym); return; } XGetInputFocus(m_dpy, &cur_focus, &revert_to); event.display = m_dpy; event.window = cur_focus; event.root = m_rootWindow; event.subwindow = None; event.time = CurrentTime; event.x = 1; event.y = 1; event.x_root = 1; event.y_root = 1; event.same_screen = TRUE; Window root, child; int root_x, root_y, x, y; unsigned int wanted_mask = 0; unsigned int original_mask; XQueryPointer(m_dpy, event.root, &root, &child, &root_x, &root_y, &x, &y, &original_mask); /* determine keycode and mask for the given keysym */ keycode = GetKeycode(keysym, &wanted_mask); if (keycode < 8 || keycode > 255) { qWarning("Unable to get valid keycode for key: keysym=0x%lX", keysym); return; } event.state = original_mask; // modifiers that need to be pressed but aren't unsigned int press_mask = wanted_mask & ~original_mask; // modifiers that are pressed but maybe shouldn't unsigned int release_check_mask = original_mask & ~wanted_mask; // modifiers we need to release before sending the keycode unsigned int release_mask = 0; // check every release_check_mask individually if it affects the keysym we would generate // if it doesn't we probably don't need to release it for (int mod_index = ShiftMapIndex; mod_index <= Mod5MapIndex; mod_index ++) { if (release_check_mask & (1 << mod_index)) { unsigned int mods_rtrn; KeySym keysym_rtrn; XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (1 << mod_index), &mods_rtrn, &keysym_rtrn); if (keysym_rtrn != keysym) { release_mask |= (1 << mod_index); } } } // finally check if the combination of pressed modifiers that we chose to ignore affects the keysym unsigned int mods_rtrn; KeySym keysym_rtrn; XkbTranslateKeyCode(m_xkb, keycode, wanted_mask | (release_check_mask & ~release_mask), &mods_rtrn, &keysym_rtrn); if (keysym_rtrn != keysym) { // oh well, release all the modifiers we don't want release_mask = release_check_mask; } /* release all modifiers */ SendModifier(&event, release_mask, KeyRelease); SendModifier(&event, press_mask, KeyPress); /* press and release key */ event.keycode = keycode; SendEvent(&event, KeyPress); SendEvent(&event, KeyRelease); /* release the modifiers */ SendModifier(&event, press_mask, KeyRelease); /* restore the old keyboard mask */ SendModifier(&event, release_mask, KeyPress); } int AutoTypePlatformX11::MyErrorHandler(Display* my_dpy, XErrorEvent* event) { char msg[200]; if (event->error_code == BadWindow) { return 0; } XGetErrorText(my_dpy, event->error_code, msg, sizeof(msg) - 1); qWarning("X error trapped: %s, request-code=%d\n", msg, event->request_code); return 0; } AutoTypeExecturorX11::AutoTypeExecturorX11(AutoTypePlatformX11* platform) : m_platform(platform) { } void AutoTypeExecturorX11::execChar(AutoTypeChar* action) { m_platform->SendKeyPressedEvent(m_platform->charToKeySym(action->character)); } void AutoTypeExecturorX11::execKey(AutoTypeKey* action) { m_platform->SendKeyPressedEvent(m_platform->keyToKeySym(action->key)); } int AutoTypePlatformX11::initialTimeout() { return 500; } bool AutoTypePlatformX11::raiseWindow(WId window) { if (m_atomNetActiveWindow == None) { return false; } XRaiseWindow(m_dpy, window); XEvent event; event.xclient.type = ClientMessage; event.xclient.serial = 0; event.xclient.send_event = True; event.xclient.window = window; event.xclient.message_type = m_atomNetActiveWindow; event.xclient.format = 32; event.xclient.data.l[0] = 1; // FromApplication event.xclient.data.l[1] = QX11Info::appUserTime(); QWidget* activeWindow = QApplication::activeWindow(); if (activeWindow) { event.xclient.data.l[2] = activeWindow->internalWinId(); } else { event.xclient.data.l[2] = 0; } event.xclient.data.l[3] = 0; event.xclient.data.l[4] = 0; XSendEvent(m_dpy, m_rootWindow, False, SubstructureRedirectMask | SubstructureNotifyMask, &event); XFlush(m_dpy); return true; } Q_EXPORT_PLUGIN2(keepassx-autotype-x11, AutoTypePlatformX11) keepassx-2.0.3/src/autotype/x11/AutoTypeX11.h000066400000000000000000000104611276304217300206350ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2000-2008 Tom Sato * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPEX11_H #define KEEPASSX_AUTOTYPEX11_H #include #include #include #include #include #include #include #include #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/AutoTypeAction.h" #include "core/Global.h" #define N_MOD_INDICES (Mod5MapIndex + 1) class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface { Q_OBJECT Q_INTERFACES(AutoTypePlatformInterface) public: AutoTypePlatformX11(); bool isAvailable() Q_DECL_OVERRIDE; void unload() Q_DECL_OVERRIDE; QStringList windowTitles() Q_DECL_OVERRIDE; WId activeWindow() Q_DECL_OVERRIDE; QString activeWindowTitle() Q_DECL_OVERRIDE; bool registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE; int platformEventFilter(void* event) Q_DECL_OVERRIDE; int initialTimeout() Q_DECL_OVERRIDE; bool raiseWindow(WId window) Q_DECL_OVERRIDE; AutoTypeExecutor* createExecutor() Q_DECL_OVERRIDE; KeySym charToKeySym(const QChar& ch); KeySym keyToKeySym(Qt::Key key); void SendKeyPressedEvent(KeySym keysym); Q_SIGNALS: void globalShortcutTriggered(); private: QString windowTitle(Window window, bool useBlacklist); QStringList windowTitlesRecursive(Window window); QString windowClassName(Window window); QList widgetsToX11Windows(const QWidgetList& widgetList); bool isTopLevelWindow(Window window); uint qtToNativeModifiers(Qt::KeyboardModifiers modifiers); void startCatchXErrors(); void stopCatchXErrors(); static int x11ErrorHandler(Display* display, XErrorEvent* error); XkbDescPtr getKeyboard(); void updateKeymap(); bool isRemapKeycodeValid(); int AddKeysym(KeySym keysym); void AddModifier(KeySym keysym); void SendEvent(XKeyEvent* event, int event_type); void SendModifier(XKeyEvent *event, unsigned int mask, int event_type); int GetKeycode(KeySym keysym, unsigned int *mask); bool keysymModifiers(KeySym keysym, int keycode, unsigned int *mask); static int MyErrorHandler(Display* my_dpy, XErrorEvent* event); Display* m_dpy; Window m_rootWindow; Atom m_atomWmState; Atom m_atomWmName; Atom m_atomNetWmName; Atom m_atomString; Atom m_atomUtf8String; Atom m_atomNetActiveWindow; QSet m_classBlacklist; Qt::Key m_currentGlobalKey; Qt::KeyboardModifiers m_currentGlobalModifiers; uint m_currentGlobalKeycode; uint m_currentGlobalNativeModifiers; int m_modifierMask; static bool m_catchXErrors; static bool m_xErrorOccured; static int (*m_oldXErrorHandler)(Display*, XErrorEvent*); static const int m_unicodeToKeysymLen; static const uint m_unicodeToKeysymKeys[]; static const uint m_unicodeToKeysymValues[]; XkbDescPtr m_xkb; KeySym* m_keysymTable; int m_minKeycode; int m_maxKeycode; int m_keysymPerKeycode; /* dedicated keycode for remapped keys */ unsigned int m_remapKeycode; KeySym m_currentRemapKeysym; KeyCode m_modifier_keycode[N_MOD_INDICES]; bool m_loaded; }; class AutoTypeExecturorX11 : public AutoTypeExecutor { public: explicit AutoTypeExecturorX11(AutoTypePlatformX11* platform); void execChar(AutoTypeChar* action) Q_DECL_OVERRIDE; void execKey(AutoTypeKey* action) Q_DECL_OVERRIDE; private: AutoTypePlatformX11* const m_platform; }; #endif // KEEPASSX_AUTOTYPEX11_H keepassx-2.0.3/src/autotype/x11/CMakeLists.txt000066400000000000000000000010471276304217300211600ustar00rootroot00000000000000include_directories(SYSTEM ${X11_X11_INCLUDE_PATH}) set(autotype_X11_SOURCES AutoTypeX11.cpp ) set(autotype_X11_MOC AutoTypeX11.h ) qt4_wrap_cpp(autotype_X11_SOURCES ${autotype_X11_MOC}) add_library(keepassx-autotype-x11 MODULE ${autotype_X11_SOURCES}) target_link_libraries(keepassx-autotype-x11 ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB} ${X11_Xi_LIB} ${X11_XTest_LIB}) install(TARGETS keepassx-autotype-x11 BUNDLE DESTINATION . COMPONENT Runtime LIBRARY DESTINATION ${PLUGIN_INSTALL_DIR} COMPONENT Runtime) keepassx-2.0.3/src/autotype/x11/KeySymMap.h000066400000000000000000000254011276304217300204500ustar00rootroot00000000000000/* * Automatically generated by keysymmap.py from parsing keysymdef.h. */ const int AutoTypePlatformX11::m_unicodeToKeysymLen = 632; const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = { 0x0100, 0x0101, 0x0102, 0x0103, 0x0104, 0x0105, 0x0106, 0x0107, 0x0108, 0x0109, 0x010a, 0x010b, 0x010c, 0x010d, 0x010e, 0x010f, 0x0110, 0x0111, 0x0112, 0x0113, 0x0116, 0x0117, 0x0118, 0x0119, 0x011a, 0x011b, 0x011c, 0x011d, 0x011e, 0x011f, 0x0120, 0x0121, 0x0122, 0x0123, 0x0124, 0x0125, 0x0126, 0x0127, 0x0128, 0x0129, 0x012a, 0x012b, 0x012e, 0x012f, 0x0130, 0x0131, 0x0134, 0x0135, 0x0136, 0x0137, 0x0138, 0x0139, 0x013a, 0x013b, 0x013c, 0x013d, 0x013e, 0x0141, 0x0142, 0x0143, 0x0144, 0x0145, 0x0146, 0x0147, 0x0148, 0x014a, 0x014b, 0x014c, 0x014d, 0x0150, 0x0151, 0x0152, 0x0153, 0x0154, 0x0155, 0x0156, 0x0157, 0x0158, 0x0159, 0x015a, 0x015b, 0x015c, 0x015d, 0x015e, 0x015f, 0x0160, 0x0161, 0x0162, 0x0163, 0x0164, 0x0165, 0x0166, 0x0167, 0x0168, 0x0169, 0x016a, 0x016b, 0x016c, 0x016d, 0x016e, 0x016f, 0x0170, 0x0171, 0x0172, 0x0173, 0x0178, 0x0179, 0x017a, 0x017b, 0x017c, 0x017d, 0x017e, 0x0192, 0x02c7, 0x02d8, 0x02d9, 0x02db, 0x02dd, 0x0385, 0x0386, 0x0388, 0x0389, 0x038a, 0x038c, 0x038e, 0x038f, 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0, 0x03a1, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x040e, 0x040f, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x045e, 0x045f, 0x0490, 0x0491, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x060c, 0x061b, 0x061f, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063a, 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651, 0x0652, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38, 0x0e39, 0x0e3a, 0x0e3f, 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58, 0x0e59, 0x2002, 0x2003, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a, 0x2012, 0x2013, 0x2014, 0x2015, 0x2017, 0x2018, 0x2019, 0x201a, 0x201c, 0x201d, 0x201e, 0x2020, 0x2021, 0x2025, 0x2026, 0x2030, 0x2032, 0x2033, 0x2038, 0x203e, 0x20ac, 0x2105, 0x2116, 0x2117, 0x211e, 0x2122, 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, 0x215b, 0x215c, 0x215d, 0x215e, 0x2190, 0x2191, 0x2192, 0x2193, 0x21d2, 0x21d4, 0x2202, 0x2207, 0x2218, 0x221a, 0x221d, 0x221e, 0x2227, 0x2228, 0x2229, 0x222a, 0x222b, 0x2234, 0x223c, 0x2243, 0x2260, 0x2261, 0x2264, 0x2265, 0x2282, 0x2283, 0x22a2, 0x22a3, 0x22a4, 0x22a5, 0x2308, 0x230a, 0x2315, 0x2320, 0x2321, 0x2395, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a1, 0x23a3, 0x23a4, 0x23a6, 0x23a8, 0x23ac, 0x23b7, 0x23ba, 0x23bb, 0x23bc, 0x23bd, 0x2409, 0x240a, 0x240b, 0x240c, 0x240d, 0x2424, 0x2500, 0x2502, 0x250c, 0x2510, 0x2514, 0x2518, 0x251c, 0x2524, 0x252c, 0x2534, 0x253c, 0x2592, 0x25c6, 0x25cb, 0x260e, 0x2640, 0x2642, 0x2663, 0x2665, 0x2666, 0x266d, 0x266f, 0x2713, 0x2717, 0x271d, 0x2720, 0x3001, 0x3002, 0x300c, 0x300d, 0x309b, 0x309c, 0x30a1, 0x30a2, 0x30a3, 0x30a4, 0x30a5, 0x30a6, 0x30a7, 0x30a8, 0x30a9, 0x30aa, 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9, 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c3, 0x30c4, 0x30c6, 0x30c8, 0x30ca, 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8, 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e3, 0x30e4, 0x30e5, 0x30e6, 0x30e7, 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f2, 0x30f3, 0x30fb, 0x30fc }; const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = { 0x03c0, 0x03e0, 0x01c3, 0x01e3, 0x01a1, 0x01b1, 0x01c6, 0x01e6, 0x02c6, 0x02e6, 0x02c5, 0x02e5, 0x01c8, 0x01e8, 0x01cf, 0x01ef, 0x01d0, 0x01f0, 0x03aa, 0x03ba, 0x03cc, 0x03ec, 0x01ca, 0x01ea, 0x01cc, 0x01ec, 0x02d8, 0x02f8, 0x02ab, 0x02bb, 0x02d5, 0x02f5, 0x03ab, 0x03bb, 0x02a6, 0x02b6, 0x02a1, 0x02b1, 0x03a5, 0x03b5, 0x03cf, 0x03ef, 0x03c7, 0x03e7, 0x02a9, 0x02b9, 0x02ac, 0x02bc, 0x03d3, 0x03f3, 0x03a2, 0x01c5, 0x01e5, 0x03a6, 0x03b6, 0x01a5, 0x01b5, 0x01a3, 0x01b3, 0x01d1, 0x01f1, 0x03d1, 0x03f1, 0x01d2, 0x01f2, 0x03bd, 0x03bf, 0x03d2, 0x03f2, 0x01d5, 0x01f5, 0x13bc, 0x13bd, 0x01c0, 0x01e0, 0x03a3, 0x03b3, 0x01d8, 0x01f8, 0x01a6, 0x01b6, 0x02de, 0x02fe, 0x01aa, 0x01ba, 0x01a9, 0x01b9, 0x01de, 0x01fe, 0x01ab, 0x01bb, 0x03ac, 0x03bc, 0x03dd, 0x03fd, 0x03de, 0x03fe, 0x02dd, 0x02fd, 0x01d9, 0x01f9, 0x01db, 0x01fb, 0x03d9, 0x03f9, 0x13be, 0x01ac, 0x01bc, 0x01af, 0x01bf, 0x01ae, 0x01be, 0x08f6, 0x01b7, 0x01a2, 0x01ff, 0x01b2, 0x01bd, 0x07ae, 0x07a1, 0x07a2, 0x07a3, 0x07a4, 0x07a7, 0x07a8, 0x07ab, 0x07b6, 0x07c1, 0x07c2, 0x07c3, 0x07c4, 0x07c5, 0x07c6, 0x07c7, 0x07c8, 0x07c9, 0x07ca, 0x07cb, 0x07cc, 0x07cd, 0x07ce, 0x07cf, 0x07d0, 0x07d1, 0x07d2, 0x07d4, 0x07d5, 0x07d6, 0x07d7, 0x07d8, 0x07d9, 0x07a5, 0x07a9, 0x07b1, 0x07b2, 0x07b3, 0x07b4, 0x07ba, 0x07e1, 0x07e2, 0x07e3, 0x07e4, 0x07e5, 0x07e6, 0x07e7, 0x07e8, 0x07e9, 0x07ea, 0x07eb, 0x07ec, 0x07ed, 0x07ee, 0x07ef, 0x07f0, 0x07f1, 0x07f3, 0x07f2, 0x07f4, 0x07f5, 0x07f6, 0x07f7, 0x07f8, 0x07f9, 0x07b5, 0x07b9, 0x07b7, 0x07b8, 0x07bb, 0x06b3, 0x06b1, 0x06b2, 0x06b4, 0x06b5, 0x06b6, 0x06b7, 0x06b8, 0x06b9, 0x06ba, 0x06bb, 0x06bc, 0x06be, 0x06bf, 0x06e1, 0x06e2, 0x06f7, 0x06e7, 0x06e4, 0x06e5, 0x06f6, 0x06fa, 0x06e9, 0x06ea, 0x06eb, 0x06ec, 0x06ed, 0x06ee, 0x06ef, 0x06f0, 0x06f2, 0x06f3, 0x06f4, 0x06f5, 0x06e6, 0x06e8, 0x06e3, 0x06fe, 0x06fb, 0x06fd, 0x06ff, 0x06f9, 0x06f8, 0x06fc, 0x06e0, 0x06f1, 0x06c1, 0x06c2, 0x06d7, 0x06c7, 0x06c4, 0x06c5, 0x06d6, 0x06da, 0x06c9, 0x06ca, 0x06cb, 0x06cc, 0x06cd, 0x06ce, 0x06cf, 0x06d0, 0x06d2, 0x06d3, 0x06d4, 0x06d5, 0x06c6, 0x06c8, 0x06c3, 0x06de, 0x06db, 0x06dd, 0x06df, 0x06d9, 0x06d8, 0x06dc, 0x06c0, 0x06d1, 0x06a3, 0x06a1, 0x06a2, 0x06a4, 0x06a5, 0x06a6, 0x06a7, 0x06a8, 0x06a9, 0x06aa, 0x06ab, 0x06ac, 0x06ae, 0x06af, 0x06bd, 0x06ad, 0x0ce0, 0x0ce1, 0x0ce2, 0x0ce3, 0x0ce4, 0x0ce5, 0x0ce6, 0x0ce7, 0x0ce8, 0x0ce9, 0x0cea, 0x0ceb, 0x0cec, 0x0ced, 0x0cee, 0x0cef, 0x0cf0, 0x0cf1, 0x0cf2, 0x0cf3, 0x0cf4, 0x0cf5, 0x0cf6, 0x0cf7, 0x0cf8, 0x0cf9, 0x0cfa, 0x05ac, 0x05bb, 0x05bf, 0x05c1, 0x05c2, 0x05c3, 0x05c4, 0x05c5, 0x05c6, 0x05c7, 0x05c8, 0x05c9, 0x05ca, 0x05cb, 0x05cc, 0x05cd, 0x05ce, 0x05cf, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, 0x05e8, 0x05e9, 0x05ea, 0x05eb, 0x05ec, 0x05ed, 0x05ee, 0x05ef, 0x05f0, 0x05f1, 0x05f2, 0x0da1, 0x0da2, 0x0da3, 0x0da4, 0x0da5, 0x0da6, 0x0da7, 0x0da8, 0x0da9, 0x0daa, 0x0dab, 0x0dac, 0x0dad, 0x0dae, 0x0daf, 0x0db0, 0x0db1, 0x0db2, 0x0db3, 0x0db4, 0x0db5, 0x0db6, 0x0db7, 0x0db8, 0x0db9, 0x0dba, 0x0dbb, 0x0dbc, 0x0dbd, 0x0dbe, 0x0dbf, 0x0dc0, 0x0dc1, 0x0dc2, 0x0dc3, 0x0dc4, 0x0dc5, 0x0dc6, 0x0dc7, 0x0dc8, 0x0dc9, 0x0dca, 0x0dcb, 0x0dcc, 0x0dcd, 0x0dce, 0x0dcf, 0x0dd0, 0x0dd1, 0x0dd2, 0x0dd3, 0x0dd4, 0x0dd5, 0x0dd6, 0x0dd7, 0x0dd8, 0x0dd9, 0x0dda, 0x0ddf, 0x0de0, 0x0de1, 0x0de2, 0x0de3, 0x0de4, 0x0de5, 0x0de6, 0x0de7, 0x0de8, 0x0de9, 0x0dea, 0x0deb, 0x0dec, 0x0ded, 0x0df0, 0x0df1, 0x0df2, 0x0df3, 0x0df4, 0x0df5, 0x0df6, 0x0df7, 0x0df8, 0x0df9, 0x0aa2, 0x0aa1, 0x0aa3, 0x0aa4, 0x0aa5, 0x0aa6, 0x0aa7, 0x0aa8, 0x0abb, 0x0aaa, 0x0aa9, 0x07af, 0x0cdf, 0x0ad0, 0x0ad1, 0x0afd, 0x0ad2, 0x0ad3, 0x0afe, 0x0af1, 0x0af2, 0x0aaf, 0x0aae, 0x0ad5, 0x0ad6, 0x0ad7, 0x0afc, 0x047e, 0x20ac, 0x0ab8, 0x06b0, 0x0afb, 0x0ad4, 0x0ac9, 0x0ab0, 0x0ab1, 0x0ab2, 0x0ab3, 0x0ab4, 0x0ab5, 0x0ab6, 0x0ab7, 0x0ac3, 0x0ac4, 0x0ac5, 0x0ac6, 0x08fb, 0x08fc, 0x08fd, 0x08fe, 0x08ce, 0x08cd, 0x08ef, 0x08c5, 0x0bca, 0x08d6, 0x08c1, 0x08c2, 0x08de, 0x08df, 0x08dc, 0x08dd, 0x08bf, 0x08c0, 0x08c8, 0x08c9, 0x08bd, 0x08cf, 0x08bc, 0x08be, 0x08da, 0x08db, 0x0bfc, 0x0bdc, 0x0bc2, 0x0bce, 0x0bd3, 0x0bc4, 0x0afa, 0x08a4, 0x08a5, 0x0bcc, 0x08ab, 0x08ac, 0x08ad, 0x08ae, 0x08a7, 0x08a8, 0x08a9, 0x08aa, 0x08af, 0x08b0, 0x08a1, 0x09ef, 0x09f0, 0x09f2, 0x09f3, 0x09e2, 0x09e5, 0x09e9, 0x09e3, 0x09e4, 0x09e8, 0x09f1, 0x09f8, 0x09ec, 0x09eb, 0x09ed, 0x09ea, 0x09f4, 0x09f5, 0x09f7, 0x09f6, 0x09ee, 0x09e1, 0x09e0, 0x0bcf, 0x0af9, 0x0af8, 0x0af7, 0x0aec, 0x0aee, 0x0aed, 0x0af6, 0x0af5, 0x0af3, 0x0af4, 0x0ad9, 0x0af0, 0x04a4, 0x04a1, 0x04a2, 0x04a3, 0x04de, 0x04df, 0x04a7, 0x04b1, 0x04a8, 0x04b2, 0x04a9, 0x04b3, 0x04aa, 0x04b4, 0x04ab, 0x04b5, 0x04b6, 0x04b7, 0x04b8, 0x04b9, 0x04ba, 0x04bb, 0x04bc, 0x04bd, 0x04be, 0x04bf, 0x04c0, 0x04c1, 0x04af, 0x04c2, 0x04c3, 0x04c4, 0x04c5, 0x04c6, 0x04c7, 0x04c8, 0x04c9, 0x04ca, 0x04cb, 0x04cc, 0x04cd, 0x04ce, 0x04cf, 0x04d0, 0x04d1, 0x04d2, 0x04d3, 0x04ac, 0x04d4, 0x04ad, 0x04d5, 0x04ae, 0x04d6, 0x04d7, 0x04d8, 0x04d9, 0x04da, 0x04db, 0x04dc, 0x04a6, 0x04dd, 0x04a5, 0x04b0 }; keepassx-2.0.3/src/autotype/x11/keysymmap.py000077500000000000000000000053611276304217300210170ustar00rootroot00000000000000#!/usr/bin/python3 # # Copyright (C) 2013 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # # Parses keysymdef.h to construct a unicode symbol -> keysym mapping table. # # The lines that are parsed look like this: # #define XK_Aogonek 0x01a1 /* U+0104 LATIN CAPITAL LETTER A WITH OGONEK */ # # This would create a 0x0104 -> 0x01a1 mapping. # import sys import re import collections cols = 8 if len(sys.argv) >= 2: keysymdef = sys.argv[1] else: keysymdef = "/usr/include/X11/keysymdef.h" keysymMap = {} f = open(keysymdef, "r") for line in f: match = re.search(r'0x([0-9a-fA-F]+)\s+/\* U\+([0-9a-fA-F]+)', line) if match: keysym = int(match.group(1), 16) unicodeVal = int(match.group(2), 16) # ignore 1:1 mappings if keysym >= 0x0020 and keysym <= 0x007e: continue if keysym >= 0x00a0 and keysym <= 0x00ff: continue # ignore unicode | 0x01000000 mappings if keysym >= 0x1000000: continue keysymMap[unicodeVal] = keysym keysymMap = collections.OrderedDict(sorted(keysymMap.items(), key=lambda t: t[0])) print("""/* * Automatically generated by keysymmap.py from parsing keysymdef.h. */ """) print("const int AutoTypePlatformX11::m_unicodeToKeysymLen = " + str(len(keysymMap)) + ";") print() print("const uint AutoTypePlatformX11::m_unicodeToKeysymKeys[] = {") keys = keysymMap.keys() keyLen = len(keys) i = 1 for val in keys: hexVal = "{0:#0{1}x}".format(val, 6) if i == keyLen: print(hexVal) elif (i % cols) == 0: print(hexVal + ",") elif ((i - 1) % cols) == 0: print(" " + hexVal + ", ", end="") else: print(hexVal + ", ", end="") i += 1 print("};") print() print("const uint AutoTypePlatformX11::m_unicodeToKeysymValues[] = {") values = keysymMap.values() valuesLen = len(values) i = 1 for val in values: hexVal = "{0:#0{1}x}".format(val, 6) if i == valuesLen: print(hexVal) elif (i % cols) == 0: print(hexVal + ",") elif ((i - 1) % cols) == 0: print(" " + hexVal + ", ", end="") else: print(hexVal + ", ", end="") i += 1 print("};") keepassx-2.0.3/src/config-keepassx.h.cmake000066400000000000000000000011571276304217300204550ustar00rootroot00000000000000/* config-keepassx.h. Generated by cmake from config-keepassx.h.cmake */ #ifndef KEEPASSX_CONFIG_KEEPASSX_H #define KEEPASSX_CONFIG_KEEPASSX_H #define KEEPASSX_VERSION "${KEEPASSX_VERSION}" #define KEEPASSX_SOURCE_DIR "${CMAKE_SOURCE_DIR}" #define KEEPASSX_BINARY_DIR "${CMAKE_BINARY_DIR}" #define KEEPASSX_PREFIX_DIR "${CMAKE_INSTALL_PREFIX}" #define KEEPASSX_PLUGIN_DIR "${PLUGIN_INSTALL_DIR}" #define KEEPASSX_DATA_DIR "${DATA_INSTALL_DIR}" #cmakedefine HAVE_PR_SET_DUMPABLE 1 #cmakedefine HAVE_RLIMIT_CORE 1 #cmakedefine HAVE_PT_DENY_ATTACH 1 #cmakedefine GCRYPT_HAS_SALSA20 #endif // KEEPASSX_CONFIG_KEEPASSX_H keepassx-2.0.3/src/core/000077500000000000000000000000001276304217300150635ustar00rootroot00000000000000keepassx-2.0.3/src/core/AutoTypeAssociations.cpp000066400000000000000000000056571276304217300217360ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeAssociations.h" bool AutoTypeAssociations::Association::operator==(const AutoTypeAssociations::Association& other) const { return window == other.window && sequence == other.sequence; } bool AutoTypeAssociations::Association::operator!=(const AutoTypeAssociations::Association& other) const { return window != other.window || sequence != other.sequence; } AutoTypeAssociations::AutoTypeAssociations(QObject* parent) : QObject(parent) { } void AutoTypeAssociations::copyDataFrom(const AutoTypeAssociations* other) { if (m_associations == other->m_associations) { return; } Q_EMIT aboutToReset(); m_associations = other->m_associations; Q_EMIT reset(); Q_EMIT modified(); } void AutoTypeAssociations::add(const AutoTypeAssociations::Association& association) { int index = m_associations.size(); Q_EMIT aboutToAdd(index); m_associations.append(association); Q_EMIT added(index); Q_EMIT modified(); } void AutoTypeAssociations::remove(int index) { Q_ASSERT(index >= 0 && index < m_associations.size()); Q_EMIT aboutToRemove(index); m_associations.removeAt(index); Q_EMIT removed(index); Q_EMIT modified(); } void AutoTypeAssociations::removeEmpty() { QMutableListIterator i(m_associations); while (i.hasNext()) { const Association& assoc = i.next(); if (assoc.window.isEmpty() && assoc.sequence.isEmpty()) { i.remove(); } } } void AutoTypeAssociations::update(int index, const AutoTypeAssociations::Association& association) { Q_ASSERT(index >= 0 && index < m_associations.size()); if (m_associations.at(index) != association) { m_associations[index] = association; Q_EMIT dataChanged(index); Q_EMIT modified(); } } AutoTypeAssociations::Association AutoTypeAssociations::get(int index) const { Q_ASSERT(index >= 0 && index < m_associations.size()); return m_associations.at(index); } QList AutoTypeAssociations::getAll() const { return m_associations; } int AutoTypeAssociations::size() const { return m_associations.size(); } void AutoTypeAssociations::clear() { m_associations.clear(); } keepassx-2.0.3/src/core/AutoTypeAssociations.h000066400000000000000000000040111276304217300213620ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPEASSOCIATIONS_H #define KEEPASSX_AUTOTYPEASSOCIATIONS_H #include #include "core/Global.h" class AutoTypeAssociations : public QObject { Q_OBJECT public: struct Association { QString window; QString sequence; bool operator==(const AutoTypeAssociations::Association& other) const; bool operator!=(const AutoTypeAssociations::Association& other) const; }; explicit AutoTypeAssociations(QObject* parent = Q_NULLPTR); void copyDataFrom(const AutoTypeAssociations* other); void add(const AutoTypeAssociations::Association& association); void remove(int index); void removeEmpty(); void update(int index, const AutoTypeAssociations::Association& association); AutoTypeAssociations::Association get(int index) const; QList getAll() const; int size() const; void clear(); private: QList m_associations; Q_SIGNALS: void modified(); void dataChanged(int index); void aboutToAdd(int index); void added(int index); void aboutToRemove(int index); void removed(int index); void aboutToReset(); void reset(); }; Q_DECLARE_TYPEINFO(AutoTypeAssociations::Association, Q_MOVABLE_TYPE); #endif // KEEPASSX_AUTOTYPEASSOCIATIONS_H keepassx-2.0.3/src/core/Config.cpp000066400000000000000000000075151276304217300170040ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Config.h" #include #include #include #include #include Config* Config::m_instance(Q_NULLPTR); QVariant Config::get(const QString& key) { return m_settings->value(key, m_defaults.value(key)); } QVariant Config::get(const QString& key, const QVariant& defaultValue) { return m_settings->value(key, defaultValue); } void Config::set(const QString& key, const QVariant& value) { m_settings->setValue(key, value); } Config::Config(const QString& fileName, QObject* parent) : QObject(parent) { init(fileName); } Config::Config(QObject* parent) : QObject(parent) { QString userPath; QString homePath = QDir::homePath(); #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) // we can't use QDesktopServices on X11 as it uses XDG_DATA_HOME instead of XDG_CONFIG_HOME QByteArray env = qgetenv("XDG_CONFIG_HOME"); if (env.isEmpty()) { userPath = homePath; userPath += "/.config"; } else if (env[0] == '/') { userPath = QFile::decodeName(env); } else { userPath = homePath; userPath += '/'; userPath += QFile::decodeName(env); } userPath += "/keepassx/"; #else userPath = QDir::fromNativeSeparators(QDesktopServices::storageLocation(QDesktopServices::DataLocation)); // storageLocation() appends the application name ("/keepassx") to the end userPath += "/"; #endif userPath += "keepassx2.ini"; init(userPath); } Config::~Config() { } void Config::init(const QString& fileName) { m_settings.reset(new QSettings(fileName, QSettings::IniFormat)); m_defaults.insert("RememberLastDatabases", true); m_defaults.insert("RememberLastKeyFiles", true); m_defaults.insert("OpenPreviousDatabasesOnStartup", true); m_defaults.insert("AutoSaveAfterEveryChange", false); m_defaults.insert("AutoSaveOnExit", false); m_defaults.insert("ShowToolbar", true); m_defaults.insert("MinimizeOnCopy", false); m_defaults.insert("UseGroupIconOnEntryCreation", false); m_defaults.insert("AutoTypeEntryTitleMatch", true); m_defaults.insert("security/clearclipboard", true); m_defaults.insert("security/clearclipboardtimeout", 10); m_defaults.insert("security/lockdatabaseidle", false); m_defaults.insert("security/lockdatabaseidlesec", 10); m_defaults.insert("security/passwordscleartext", false); m_defaults.insert("security/autotypeask", true); m_defaults.insert("GUI/Language", "system"); m_defaults.insert("GUI/ShowTrayIcon", false); m_defaults.insert("GUI/MinimizeToTray", false); } Config* Config::instance() { if (!m_instance) { m_instance = new Config(qApp); } return m_instance; } void Config::createConfigFromFile(const QString& file) { Q_ASSERT(!m_instance); m_instance = new Config(file, qApp); } void Config::createTempFileInstance() { Q_ASSERT(!m_instance); QTemporaryFile* tmpFile = new QTemporaryFile(); bool openResult = tmpFile->open(); Q_ASSERT(openResult); Q_UNUSED(openResult); m_instance = new Config(tmpFile->fileName(), qApp); tmpFile->setParent(m_instance); } keepassx-2.0.3/src/core/Config.h000066400000000000000000000030751276304217300164460ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CONFIG_H #define KEEPASSX_CONFIG_H #include #include #include "core/Global.h" class QSettings; class Config : public QObject { Q_OBJECT public: ~Config(); QVariant get(const QString& key); QVariant get(const QString& key, const QVariant& defaultValue); void set(const QString& key, const QVariant& value); static Config* instance(); static void createConfigFromFile(const QString& file); static void createTempFileInstance(); private: Config(const QString& fileName, QObject* parent); explicit Config(QObject* parent); void init(const QString& fileName); static Config* m_instance; QScopedPointer m_settings; QHash m_defaults; Q_DISABLE_COPY(Config) }; inline Config* config() { return Config::instance(); } #endif // KEEPASSX_CONFIG_H keepassx-2.0.3/src/core/Database.cpp000066400000000000000000000153261276304217300173020ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Database.h" #include #include #include #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/Random.h" #include "format/KeePass2.h" QHash Database::m_uuidMap; Database::Database() : m_metadata(new Metadata(this)) , m_timer(new QTimer(this)) , m_emitModified(false) , m_uuid(Uuid::random()) { m_data.cipher = KeePass2::CIPHER_AES; m_data.compressionAlgo = CompressionGZip; m_data.transformRounds = 100000; m_data.hasKey = false; setRootGroup(new Group()); rootGroup()->setUuid(Uuid::random()); m_timer->setSingleShot(true); m_uuidMap.insert(m_uuid, this); connect(m_metadata, SIGNAL(modified()), this, SIGNAL(modifiedImmediate())); connect(m_metadata, SIGNAL(nameTextChanged()), this, SIGNAL(nameTextChanged())); connect(this, SIGNAL(modifiedImmediate()), this, SLOT(startModifiedTimer())); connect(m_timer, SIGNAL(timeout()), SIGNAL(modified())); } Database::~Database() { m_uuidMap.remove(m_uuid); } Group* Database::rootGroup() { return m_rootGroup; } const Group* Database::rootGroup() const { return m_rootGroup; } void Database::setRootGroup(Group* group) { Q_ASSERT(group); m_rootGroup = group; m_rootGroup->setParent(this); } Metadata* Database::metadata() { return m_metadata; } const Metadata* Database::metadata() const { return m_metadata; } Entry* Database::resolveEntry(const Uuid& uuid) { return recFindEntry(uuid, m_rootGroup); } Entry* Database::recFindEntry(const Uuid& uuid, Group* group) { Q_FOREACH (Entry* entry, group->entries()) { if (entry->uuid() == uuid) { return entry; } } Q_FOREACH (Group* child, group->children()) { Entry* result = recFindEntry(uuid, child); if (result) { return result; } } return Q_NULLPTR; } Group* Database::resolveGroup(const Uuid& uuid) { return recFindGroup(uuid, m_rootGroup); } Group* Database::recFindGroup(const Uuid& uuid, Group* group) { if (group->uuid() == uuid) { return group; } Q_FOREACH (Group* child, group->children()) { Group* result = recFindGroup(uuid, child); if (result) { return result; } } return Q_NULLPTR; } QList Database::deletedObjects() { return m_deletedObjects; } void Database::addDeletedObject(const DeletedObject& delObj) { Q_ASSERT(delObj.deletionTime.timeSpec() == Qt::UTC); m_deletedObjects.append(delObj); } void Database::addDeletedObject(const Uuid& uuid) { DeletedObject delObj; delObj.deletionTime = Tools::currentDateTimeUtc(); delObj.uuid = uuid; addDeletedObject(delObj); } Uuid Database::cipher() const { return m_data.cipher; } Database::CompressionAlgorithm Database::compressionAlgo() const { return m_data.compressionAlgo; } QByteArray Database::transformSeed() const { return m_data.transformSeed; } quint64 Database::transformRounds() const { return m_data.transformRounds; } QByteArray Database::transformedMasterKey() const { return m_data.transformedMasterKey; } void Database::setCipher(const Uuid& cipher) { Q_ASSERT(!cipher.isNull()); m_data.cipher = cipher; } void Database::setCompressionAlgo(Database::CompressionAlgorithm algo) { Q_ASSERT(static_cast(algo) <= CompressionAlgorithmMax); m_data.compressionAlgo = algo; } bool Database::setTransformRounds(quint64 rounds) { if (m_data.transformRounds != rounds) { quint64 oldRounds = m_data.transformRounds; m_data.transformRounds = rounds; if (m_data.hasKey) { if (!setKey(m_data.key)) { m_data.transformRounds = oldRounds; return false; } } } return true; } bool Database::setKey(const CompositeKey& key, const QByteArray& transformSeed, bool updateChangedTime) { bool ok; QString errorString; QByteArray transformedMasterKey = key.transform(transformSeed, transformRounds(), &ok, &errorString); if (!ok) { return false; } m_data.key = key; m_data.transformSeed = transformSeed; m_data.transformedMasterKey = transformedMasterKey; m_data.hasKey = true; if (updateChangedTime) { m_metadata->setMasterKeyChanged(Tools::currentDateTimeUtc()); } Q_EMIT modifiedImmediate(); return true; } bool Database::setKey(const CompositeKey& key) { return setKey(key, randomGen()->randomArray(32)); } bool Database::hasKey() const { return m_data.hasKey; } bool Database::verifyKey(const CompositeKey& key) const { Q_ASSERT(hasKey()); return (m_data.key.rawKey() == key.rawKey()); } void Database::createRecycleBin() { Group* recycleBin = Group::createRecycleBin(); recycleBin->setParent(rootGroup()); m_metadata->setRecycleBin(recycleBin); } void Database::recycleEntry(Entry* entry) { if (m_metadata->recycleBinEnabled()) { if (!m_metadata->recycleBin()) { createRecycleBin(); } entry->setGroup(metadata()->recycleBin()); } else { delete entry; } } void Database::recycleGroup(Group* group) { if (m_metadata->recycleBinEnabled()) { if (!m_metadata->recycleBin()) { createRecycleBin(); } group->setParent(metadata()->recycleBin()); } else { delete group; } } void Database::setEmitModified(bool value) { if (m_emitModified && !value) { m_timer->stop(); } m_emitModified = value; } void Database::copyAttributesFrom(const Database* other) { m_data = other->m_data; m_metadata->copyAttributesFrom(other->m_metadata); } Uuid Database::uuid() { return m_uuid; } Database* Database::databaseByUuid(const Uuid& uuid) { return m_uuidMap.value(uuid, 0); } void Database::startModifiedTimer() { if (!m_emitModified) { return; } if (m_timer->isActive()) { m_timer->stop(); } m_timer->start(150); } keepassx-2.0.3/src/core/Database.h000066400000000000000000000100241276304217300167350ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASE_H #define KEEPASSX_DATABASE_H #include #include #include "core/Uuid.h" #include "keys/CompositeKey.h" class Entry; class Group; class Metadata; class QTimer; struct DeletedObject { Uuid uuid; QDateTime deletionTime; }; Q_DECLARE_TYPEINFO(DeletedObject, Q_MOVABLE_TYPE); class Database : public QObject { Q_OBJECT public: enum CompressionAlgorithm { CompressionNone = 0, CompressionGZip = 1 }; static const quint32 CompressionAlgorithmMax = CompressionGZip; struct DatabaseData { Uuid cipher; CompressionAlgorithm compressionAlgo; QByteArray transformSeed; quint64 transformRounds; QByteArray transformedMasterKey; CompositeKey key; bool hasKey; }; Database(); ~Database(); Group* rootGroup(); const Group* rootGroup() const; /** * Sets group as the root group and takes ownership of it. * Warning: Be careful when calling this method as it doesn't * emit any notifications so e.g. models aren't updated. * The caller is responsible for cleaning up the previous root group. */ void setRootGroup(Group* group); Metadata* metadata(); const Metadata* metadata() const; Entry* resolveEntry(const Uuid& uuid); Group* resolveGroup(const Uuid& uuid); QList deletedObjects(); void addDeletedObject(const DeletedObject& delObj); void addDeletedObject(const Uuid& uuid); Uuid cipher() const; Database::CompressionAlgorithm compressionAlgo() const; QByteArray transformSeed() const; quint64 transformRounds() const; QByteArray transformedMasterKey() const; void setCipher(const Uuid& cipher); void setCompressionAlgo(Database::CompressionAlgorithm algo); bool setTransformRounds(quint64 rounds); bool setKey(const CompositeKey& key, const QByteArray& transformSeed, bool updateChangedTime = true); /** * Sets the database key and generates a random transform seed. */ bool setKey(const CompositeKey& key); bool hasKey() const; bool verifyKey(const CompositeKey& key) const; void recycleEntry(Entry* entry); void recycleGroup(Group* group); void setEmitModified(bool value); void copyAttributesFrom(const Database* other); /** * Returns a unique id that is only valid as long as the Database exists. */ Uuid uuid(); static Database* databaseByUuid(const Uuid& uuid); Q_SIGNALS: void groupDataChanged(Group* group); void groupAboutToAdd(Group* group, int index); void groupAdded(); void groupAboutToRemove(Group* group); void groupRemoved(); void groupAboutToMove(Group* group, Group* toGroup, int index); void groupMoved(); void nameTextChanged(); void modified(); void modifiedImmediate(); private Q_SLOTS: void startModifiedTimer(); private: Entry* recFindEntry(const Uuid& uuid, Group* group); Group* recFindGroup(const Uuid& uuid, Group* group); void createRecycleBin(); Metadata* const m_metadata; Group* m_rootGroup; QList m_deletedObjects; QTimer* m_timer; DatabaseData m_data; bool m_emitModified; Uuid m_uuid; static QHash m_uuidMap; }; #endif // KEEPASSX_DATABASE_H keepassx-2.0.3/src/core/DatabaseIcons.cpp000066400000000000000000000076151276304217300203000ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseIcons.h" #include "core/FilePath.h" DatabaseIcons* DatabaseIcons::m_instance(Q_NULLPTR); const int DatabaseIcons::IconCount(69); const int DatabaseIcons::ExpiredIconIndex(45); const char* const DatabaseIcons::m_indexToName[] = { "C00_Password.png", "C01_Package_Network.png", "C02_MessageBox_Warning.png", "C03_Server.png", "C04_Klipper.png", "C05_Edu_Languages.png", "C06_KCMDF.png", "C07_Kate.png", "C08_Socket.png", "C09_Identity.png", "C10_Kontact.png", "C11_Camera.png", "C12_IRKickFlash.png", "C13_KGPG_Key3.png", "C14_Laptop_Power.png", "C15_Scanner.png", "C16_Mozilla_Firebird.png", "C17_CDROM_Unmount.png", "C18_Display.png", "C19_Mail_Generic.png", "C20_Misc.png", "C21_KOrganizer.png", "C22_ASCII.png", "C23_Icons.png", "C24_Connect_Established.png", "C25_Folder_Mail.png", "C26_FileSave.png", "C27_NFS_Unmount.png", "C28_QuickTime.png", "C29_KGPG_Term.png", "C30_Konsole.png", "C31_FilePrint.png", "C32_FSView.png", "C33_Run.png", "C34_Configure.png", "C35_KRFB.png", "C36_Ark.png", "C37_KPercentage.png", "C38_Samba_Unmount.png", "C39_History.png", "C40_Mail_Find.png", "C41_VectorGfx.png", "C42_KCMMemory.png", "C43_EditTrash.png", "C44_KNotes.png", "C45_Cancel.png", "C46_Help.png", "C47_KPackage.png", "C48_Folder.png", "C49_Folder_Blue_Open.png", "C50_Folder_Tar.png", "C51_Decrypted.png", "C52_Encrypted.png", "C53_Apply.png", "C54_Signature.png", "C55_Thumbnail.png", "C56_KAddressBook.png", "C57_View_Text.png", "C58_KGPG.png", "C59_Package_Development.png", "C60_KFM_Home.png", "C61_Services.png", "C62_Tux.png", "C63_Feather.png", "C64_Apple.png", "C65_W.png", "C66_Money.png", "C67_Certificate.png", "C68_BlackBerry.png" }; QImage DatabaseIcons::icon(int index) { if (index < 0 || index >= IconCount) { qWarning("DatabaseIcons::icon: invalid icon index %d", index); return QImage(); } if (!m_iconCache[index].isNull()) { return m_iconCache[index]; } else { QString iconPath = QString("icons/database/").append(m_indexToName[index]); QImage icon(filePath()->dataPath(iconPath)); m_iconCache[index] = icon; return icon; } } QPixmap DatabaseIcons::iconPixmap(int index) { if (index < 0 || index >= IconCount) { qWarning("DatabaseIcons::iconPixmap: invalid icon index %d", index); return QPixmap(); } QPixmap pixmap; if (!QPixmapCache::find(m_pixmapCacheKeys[index], &pixmap)) { pixmap = QPixmap::fromImage(icon(index)); m_pixmapCacheKeys[index] = QPixmapCache::insert(pixmap); } return pixmap; } DatabaseIcons::DatabaseIcons() { Q_STATIC_ASSERT(sizeof(m_indexToName) == IconCount * sizeof(m_indexToName[0])); m_iconCache.reserve(IconCount); m_iconCache.resize(IconCount); m_pixmapCacheKeys.reserve(IconCount); m_pixmapCacheKeys.resize(IconCount); } DatabaseIcons* DatabaseIcons::instance() { if (!m_instance) { m_instance = new DatabaseIcons(); } return m_instance; } keepassx-2.0.3/src/core/DatabaseIcons.h000066400000000000000000000026431276304217300177410ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASEICONS_H #define KEEPASSX_DATABASEICONS_H #include #include #include #include #include "core/Global.h" class DatabaseIcons { public: QImage icon(int index); QPixmap iconPixmap(int index); static DatabaseIcons* instance(); static const int IconCount; static const int ExpiredIconIndex; private: DatabaseIcons(); static DatabaseIcons* m_instance; static const char* const m_indexToName[]; QVector m_iconCache; QVector m_pixmapCacheKeys; Q_DISABLE_COPY(DatabaseIcons) }; inline DatabaseIcons* databaseIcons() { return DatabaseIcons::instance(); } #endif // KEEPASSX_DATABASEICONS_H keepassx-2.0.3/src/core/Endian.cpp000066400000000000000000000121161276304217300167660ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Endian.h" #include #include namespace Endian { qint16 bytesToInt16(const QByteArray& ba, QSysInfo::Endian byteOrder) { Q_ASSERT(ba.size() == 2); if (byteOrder == QSysInfo::LittleEndian) { return qFromLittleEndian(reinterpret_cast(ba.constData())); } else { return qFromBigEndian(reinterpret_cast(ba.constData())); } } qint32 bytesToInt32(const QByteArray& ba, QSysInfo::Endian byteOrder) { Q_ASSERT(ba.size() == 4); if (byteOrder == QSysInfo::LittleEndian) { return qFromLittleEndian(reinterpret_cast(ba.constData())); } else { return qFromBigEndian(reinterpret_cast(ba.constData())); } } qint64 bytesToInt64(const QByteArray& ba, QSysInfo::Endian byteOrder) { Q_ASSERT(ba.size() == 8); if (byteOrder == QSysInfo::LittleEndian) { return qFromLittleEndian(reinterpret_cast(ba.constData())); } else { return qFromBigEndian(reinterpret_cast(ba.constData())); } } quint16 bytesToUInt16(const QByteArray& ba, QSysInfo::Endian byteOrder) { return static_cast(bytesToInt16(ba, byteOrder)); } quint32 bytesToUInt32(const QByteArray& ba, QSysInfo::Endian byteOrder) { return static_cast(bytesToInt32(ba, byteOrder)); } quint64 bytesToUInt64(const QByteArray& ba, QSysInfo::Endian byteOrder) { return static_cast(bytesToInt64(ba, byteOrder)); } qint16 readInt16(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { QByteArray ba = device->read(2); if (ba.size() != 2) { *ok = false; return 0; } else { *ok = true; return bytesToInt16(ba, byteOrder); } } qint32 readInt32(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { QByteArray ba = device->read(4); if (ba.size() != 4) { *ok = false; return 0; } else { *ok = true; return bytesToInt32(ba, byteOrder); } } qint64 readInt64(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { QByteArray ba = device->read(8); if (ba.size() != 8) { *ok = false; return 0; } else { *ok = true; return bytesToInt64(ba, byteOrder); } } quint16 readUInt16(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { return static_cast(readInt16(device, byteOrder, ok)); } quint32 readUInt32(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { return static_cast(readInt32(device, byteOrder, ok)); } quint64 readUInt64(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok) { return static_cast(readInt64(device, byteOrder, ok)); } QByteArray int16ToBytes(qint16 num, QSysInfo::Endian byteOrder) { QByteArray ba; ba.resize(2); if (byteOrder == QSysInfo::LittleEndian) { qToLittleEndian(num, reinterpret_cast(ba.data())); } else { qToBigEndian(num, reinterpret_cast(ba.data())); } return ba; } QByteArray int32ToBytes(qint32 num, QSysInfo::Endian byteOrder) { QByteArray ba; ba.resize(4); if (byteOrder == QSysInfo::LittleEndian) { qToLittleEndian(num, reinterpret_cast(ba.data())); } else { qToBigEndian(num, reinterpret_cast(ba.data())); } return ba; } QByteArray int64ToBytes(qint64 num, QSysInfo::Endian byteOrder) { QByteArray ba; ba.resize(8); if (byteOrder == QSysInfo::LittleEndian) { qToLittleEndian(num, reinterpret_cast(ba.data())); } else { qToBigEndian(num, reinterpret_cast(ba.data())); } return ba; } bool writeInt16(qint16 num, QIODevice* device, QSysInfo::Endian byteOrder) { QByteArray ba = int16ToBytes(num, byteOrder); int bytesWritten = device->write(ba); return (bytesWritten == ba.size()); } bool writeInt32(qint32 num, QIODevice* device, QSysInfo::Endian byteOrder) { QByteArray ba = int32ToBytes(num, byteOrder); int bytesWritten = device->write(ba); return (bytesWritten == ba.size()); } bool writeInt64(qint64 num, QIODevice* device, QSysInfo::Endian byteOrder) { QByteArray ba = int64ToBytes(num, byteOrder); int bytesWritten = device->write(ba); return (bytesWritten == ba.size()); } } // namespace Endian keepassx-2.0.3/src/core/Endian.h000066400000000000000000000043521276304217300164360ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENDIAN_H #define KEEPASSX_ENDIAN_H #include #include class QIODevice; namespace Endian { qint16 bytesToInt16(const QByteArray& ba, QSysInfo::Endian byteOrder); quint16 bytesToUInt16(const QByteArray& ba, QSysInfo::Endian byteOrder); qint32 bytesToInt32(const QByteArray& ba, QSysInfo::Endian byteOrder); quint32 bytesToUInt32(const QByteArray& ba, QSysInfo::Endian byteOrder); qint64 bytesToInt64(const QByteArray& ba, QSysInfo::Endian byteOrder); quint64 bytesToUInt64(const QByteArray& ba, QSysInfo::Endian byteOrder); qint16 readInt16(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); quint16 readUInt16(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); qint32 readInt32(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); quint32 readUInt32(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); qint64 readInt64(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); quint64 readUInt64(QIODevice* device, QSysInfo::Endian byteOrder, bool* ok); QByteArray int16ToBytes(qint16 num, QSysInfo::Endian byteOrder); QByteArray int32ToBytes(qint32 num, QSysInfo::Endian byteOrder); QByteArray int64ToBytes(qint64 num, QSysInfo::Endian byteOrder); bool writeInt16(qint16 num, QIODevice* device, QSysInfo::Endian byteOrder); bool writeInt32(qint32 num, QIODevice* device, QSysInfo::Endian byteOrder); bool writeInt64(qint64 num, QIODevice* device, QSysInfo::Endian byteOrder); } // namespace Endian #endif // KEEPASSX_ENDIAN_H keepassx-2.0.3/src/core/Entry.cpp000066400000000000000000000335451276304217300167020ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Entry.h" #include "core/Database.h" #include "core/DatabaseIcons.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" const int Entry::DefaultIconNumber = 0; Entry::Entry() : m_attributes(new EntryAttributes(this)) , m_attachments(new EntryAttachments(this)) , m_autoTypeAssociations(new AutoTypeAssociations(this)) , m_tmpHistoryItem(Q_NULLPTR) , m_modifiedSinceBegin(false) , m_updateTimeinfo(true) { m_data.iconNumber = DefaultIconNumber; m_data.autoTypeEnabled = true; m_data.autoTypeObfuscation = 0; connect(m_attributes, SIGNAL(modified()), this, SIGNAL(modified())); connect(m_attributes, SIGNAL(defaultKeyModified()), SLOT(emitDataChanged())); connect(m_attachments, SIGNAL(modified()), this, SIGNAL(modified())); connect(m_autoTypeAssociations, SIGNAL(modified()), SIGNAL(modified())); connect(this, SIGNAL(modified()), SLOT(updateTimeinfo())); connect(this, SIGNAL(modified()), SLOT(updateModifiedSinceBegin())); } Entry::~Entry() { if (m_group) { m_group->removeEntry(this); if (m_group->database()) { m_group->database()->addDeletedObject(m_uuid); } } qDeleteAll(m_history); } template inline bool Entry::set(T& property, const T& value) { if (property != value) { property = value; Q_EMIT modified(); return true; } else { return false; } } void Entry::updateTimeinfo() { if (m_updateTimeinfo) { m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc()); m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc()); } } void Entry::setUpdateTimeinfo(bool value) { m_updateTimeinfo = value; } Uuid Entry::uuid() const { return m_uuid; } QImage Entry::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); } else { Q_ASSERT(database()); if (database()) { return database()->metadata()->customIcon(m_data.customIcon); } else { return QImage(); } } } QPixmap Entry::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(database()); if (database()) { return database()->metadata()->customIconPixmap(m_data.customIcon); } else { return QPixmap(); } } } QPixmap Entry::iconScaledPixmap() const { if (m_data.customIcon.isNull()) { // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(database()); return database()->metadata()->customIconScaledPixmap(m_data.customIcon); } } int Entry::iconNumber() const { return m_data.iconNumber; } Uuid Entry::iconUuid() const { return m_data.customIcon; } QColor Entry::foregroundColor() const { return m_data.foregroundColor; } QColor Entry::backgroundColor() const { return m_data.backgroundColor; } QString Entry::overrideUrl() const { return m_data.overrideUrl; } QString Entry::tags() const { return m_data.tags; } TimeInfo Entry::timeInfo() const { return m_data.timeInfo; } bool Entry::autoTypeEnabled() const { return m_data.autoTypeEnabled; } int Entry::autoTypeObfuscation() const { return m_data.autoTypeObfuscation; } QString Entry::defaultAutoTypeSequence() const { return m_data.defaultAutoTypeSequence; } AutoTypeAssociations* Entry::autoTypeAssociations() { return m_autoTypeAssociations; } const AutoTypeAssociations* Entry::autoTypeAssociations() const { return m_autoTypeAssociations; } QString Entry::title() const { return m_attributes->value(EntryAttributes::TitleKey); } QString Entry::url() const { return m_attributes->value(EntryAttributes::URLKey); } QString Entry::username() const { return m_attributes->value(EntryAttributes::UserNameKey); } QString Entry::password() const { return m_attributes->value(EntryAttributes::PasswordKey); } QString Entry::notes() const { return m_attributes->value(EntryAttributes::NotesKey); } bool Entry::isExpired() const { return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc(); } EntryAttributes* Entry::attributes() { return m_attributes; } const EntryAttributes* Entry::attributes() const { return m_attributes; } EntryAttachments* Entry::attachments() { return m_attachments; } const EntryAttachments* Entry::attachments() const { return m_attachments; } void Entry::setUuid(const Uuid& uuid) { Q_ASSERT(!uuid.isNull()); set(m_uuid, uuid); } void Entry::setIcon(int iconNumber) { Q_ASSERT(iconNumber >= 0); if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { m_data.iconNumber = iconNumber; m_data.customIcon = Uuid(); Q_EMIT modified(); emitDataChanged(); } } void Entry::setIcon(const Uuid& uuid) { Q_ASSERT(!uuid.isNull()); if (m_data.customIcon != uuid) { m_data.customIcon = uuid; m_data.iconNumber = 0; Q_EMIT modified(); emitDataChanged(); } } void Entry::setForegroundColor(const QColor& color) { set(m_data.foregroundColor, color); } void Entry::setBackgroundColor(const QColor& color) { set(m_data.backgroundColor, color); } void Entry::setOverrideUrl(const QString& url) { set(m_data.overrideUrl, url); } void Entry::setTags(const QString& tags) { set(m_data.tags, tags); } void Entry::setTimeInfo(const TimeInfo& timeInfo) { m_data.timeInfo = timeInfo; } void Entry::setAutoTypeEnabled(bool enable) { set(m_data.autoTypeEnabled, enable); } void Entry::setAutoTypeObfuscation(int obfuscation) { set(m_data.autoTypeObfuscation, obfuscation); } void Entry::setDefaultAutoTypeSequence(const QString& sequence) { set(m_data.defaultAutoTypeSequence, sequence); } void Entry::setTitle(const QString& title) { m_attributes->set(EntryAttributes::TitleKey, title, m_attributes->isProtected(EntryAttributes::TitleKey)); } void Entry::setUrl(const QString& url) { m_attributes->set(EntryAttributes::URLKey, url, m_attributes->isProtected(EntryAttributes::URLKey)); } void Entry::setUsername(const QString& username) { m_attributes->set(EntryAttributes::UserNameKey, username, m_attributes->isProtected(EntryAttributes::UserNameKey)); } void Entry::setPassword(const QString& password) { m_attributes->set(EntryAttributes::PasswordKey, password, m_attributes->isProtected(EntryAttributes::PasswordKey)); } void Entry::setNotes(const QString& notes) { m_attributes->set(EntryAttributes::NotesKey, notes, m_attributes->isProtected(EntryAttributes::NotesKey)); } void Entry::setExpires(const bool& value) { if (m_data.timeInfo.expires() != value) { m_data.timeInfo.setExpires(value); Q_EMIT modified(); } } void Entry::setExpiryTime(const QDateTime& dateTime) { if (m_data.timeInfo.expiryTime() != dateTime) { m_data.timeInfo.setExpiryTime(dateTime); Q_EMIT modified(); } } QList Entry::historyItems() { return m_history; } const QList& Entry::historyItems() const { return m_history; } void Entry::addHistoryItem(Entry* entry) { Q_ASSERT(!entry->parent()); m_history.append(entry); Q_EMIT modified(); } void Entry::removeHistoryItems(const QList& historyEntries) { if (historyEntries.isEmpty()) { return; } Q_FOREACH (Entry* entry, historyEntries) { Q_ASSERT(!entry->parent()); Q_ASSERT(entry->uuid() == uuid()); Q_ASSERT(m_history.contains(entry)); m_history.removeOne(entry); delete entry; } Q_EMIT modified(); } void Entry::truncateHistory() { const Database* db = database(); if (!db) { return; } int histMaxItems = db->metadata()->historyMaxItems(); if (histMaxItems > -1) { int historyCount = 0; QMutableListIterator i(m_history); i.toBack(); while (i.hasPrevious()) { historyCount++; Entry* entry = i.previous(); if (historyCount > histMaxItems) { delete entry; i.remove(); } } } int histMaxSize = db->metadata()->historyMaxSize(); if (histMaxSize > -1) { int size = 0; QSet foundAttachements = attachments()->values().toSet(); QMutableListIterator i(m_history); i.toBack(); while (i.hasPrevious()) { Entry* historyItem = i.previous(); // don't calculate size if it's already above the maximum if (size <= histMaxSize) { size += historyItem->attributes()->attributesSize(); QSet newAttachments = historyItem->attachments()->values().toSet() - foundAttachements; Q_FOREACH (const QByteArray& attachment, newAttachments) { size += attachment.size(); } foundAttachements += newAttachments; } if (size > histMaxSize) { delete historyItem; i.remove(); } } } } Entry* Entry::clone(CloneFlags flags) const { Entry* entry = new Entry(); entry->setUpdateTimeinfo(false); if (flags & CloneNewUuid) { entry->m_uuid = Uuid::random(); } else { entry->m_uuid = m_uuid; } entry->m_data = m_data; entry->m_attributes->copyDataFrom(m_attributes); entry->m_attachments->copyDataFrom(m_attachments); entry->m_autoTypeAssociations->copyDataFrom(this->m_autoTypeAssociations); if (flags & CloneIncludeHistory) { Q_FOREACH (Entry* historyItem, m_history) { Entry* historyItemClone = historyItem->clone(flags & ~CloneIncludeHistory & ~CloneNewUuid); historyItemClone->setUpdateTimeinfo(false); historyItemClone->setUuid(entry->uuid()); historyItemClone->setUpdateTimeinfo(true); entry->addHistoryItem(historyItemClone); } } entry->setUpdateTimeinfo(true); if (flags & CloneResetTimeInfo) { QDateTime now = Tools::currentDateTimeUtc(); entry->m_data.timeInfo.setCreationTime(now); entry->m_data.timeInfo.setLastModificationTime(now); entry->m_data.timeInfo.setLastAccessTime(now); entry->m_data.timeInfo.setLocationChanged(now); } return entry; } void Entry::copyDataFrom(const Entry* other) { setUpdateTimeinfo(false); m_data = other->m_data; m_attributes->copyDataFrom(other->m_attributes); m_attachments->copyDataFrom(other->m_attachments); m_autoTypeAssociations->copyDataFrom(other->m_autoTypeAssociations); setUpdateTimeinfo(true); } void Entry::beginUpdate() { Q_ASSERT(!m_tmpHistoryItem); m_tmpHistoryItem = new Entry(); m_tmpHistoryItem->setUpdateTimeinfo(false); m_tmpHistoryItem->m_uuid = m_uuid; m_tmpHistoryItem->m_data = m_data; m_tmpHistoryItem->m_attributes->copyDataFrom(m_attributes); m_tmpHistoryItem->m_attachments->copyDataFrom(m_attachments); m_modifiedSinceBegin = false; } void Entry::endUpdate() { Q_ASSERT(m_tmpHistoryItem); if (m_modifiedSinceBegin) { m_tmpHistoryItem->setUpdateTimeinfo(true); addHistoryItem(m_tmpHistoryItem); truncateHistory(); } else { delete m_tmpHistoryItem; } m_tmpHistoryItem = Q_NULLPTR; } void Entry::updateModifiedSinceBegin() { m_modifiedSinceBegin = true; } Group* Entry::group() { return m_group; } const Group* Entry::group() const { return m_group; } void Entry::setGroup(Group* group) { Q_ASSERT(group); if (m_group == group) { return; } if (m_group) { m_group->removeEntry(this); if (m_group->database() && m_group->database() != group->database()) { m_group->database()->addDeletedObject(m_uuid); // copy custom icon to the new database if (!iconUuid().isNull() && group->database() && m_group->database()->metadata()->containsCustomIcon(iconUuid()) && !group->database()->metadata()->containsCustomIcon(iconUuid())) { group->database()->metadata()->addCustomIcon(iconUuid(), icon()); } } } m_group = group; group->addEntry(this); QObject::setParent(group); if (m_updateTimeinfo) { m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc()); } } void Entry::emitDataChanged() { Q_EMIT dataChanged(this); } const Database* Entry::database() const { if (m_group) { return m_group->database(); } else { return Q_NULLPTR; } } QString Entry::resolvePlaceholders(const QString& str) const { QString result = str; result.replace("{TITLE}", title(), Qt::CaseInsensitive); result.replace("{USERNAME}", username(), Qt::CaseInsensitive); result.replace("{URL}", url(), Qt::CaseInsensitive); result.replace("{PASSWORD}", password(), Qt::CaseInsensitive); result.replace("{NOTES}", notes(), Qt::CaseInsensitive); // TODO: lots of other placeholders missing return result; } keepassx-2.0.3/src/core/Entry.h000066400000000000000000000120761276304217300163430ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRY_H #define KEEPASSX_ENTRY_H #include #include #include #include #include #include #include #include "core/AutoTypeAssociations.h" #include "core/EntryAttachments.h" #include "core/EntryAttributes.h" #include "core/Global.h" #include "core/TimeInfo.h" #include "core/Uuid.h" class Database; class Group; struct EntryData { int iconNumber; Uuid customIcon; QColor foregroundColor; QColor backgroundColor; QString overrideUrl; QString tags; bool autoTypeEnabled; int autoTypeObfuscation; QString defaultAutoTypeSequence; TimeInfo timeInfo; }; class Entry : public QObject { Q_OBJECT public: Entry(); ~Entry(); Uuid uuid() const; QImage icon() const; QPixmap iconPixmap() const; QPixmap iconScaledPixmap() const; int iconNumber() const; Uuid iconUuid() const; QColor foregroundColor() const; QColor backgroundColor() const; QString overrideUrl() const; QString tags() const; TimeInfo timeInfo() const; bool autoTypeEnabled() const; int autoTypeObfuscation() const; QString defaultAutoTypeSequence() const; AutoTypeAssociations* autoTypeAssociations(); const AutoTypeAssociations* autoTypeAssociations() const; QString title() const; QString url() const; QString username() const; QString password() const; QString notes() const; bool isExpired() const; EntryAttributes* attributes(); const EntryAttributes* attributes() const; EntryAttachments* attachments(); const EntryAttachments* attachments() const; static const int DefaultIconNumber; void setUuid(const Uuid& uuid); void setIcon(int iconNumber); void setIcon(const Uuid& uuid); void setForegroundColor(const QColor& color); void setBackgroundColor(const QColor& color); void setOverrideUrl(const QString& url); void setTags(const QString& tags); void setTimeInfo(const TimeInfo& timeInfo); void setAutoTypeEnabled(bool enable); void setAutoTypeObfuscation(int obfuscation); void setDefaultAutoTypeSequence(const QString& sequence); void setTitle(const QString& title); void setUrl(const QString& url); void setUsername(const QString& username); void setPassword(const QString& password); void setNotes(const QString& notes); void setExpires(const bool& value); void setExpiryTime(const QDateTime& dateTime); QList historyItems(); const QList& historyItems() const; void addHistoryItem(Entry* entry); void removeHistoryItems(const QList& historyEntries); void truncateHistory(); enum CloneFlag { CloneNoFlags = 0, CloneNewUuid = 1, // generate a random uuid for the clone CloneResetTimeInfo = 2, // set all TimeInfo attributes to the current time CloneIncludeHistory = 4 // clone the history items }; Q_DECLARE_FLAGS(CloneFlags, CloneFlag) /** * Creates a duplicate of this entry except that the returned entry isn't * part of any group. * Note that you need to copy the custom icons manually when inserting the * new entry into another database. */ Entry* clone(CloneFlags flags) const; void copyDataFrom(const Entry* other); QString resolvePlaceholders(const QString& str) const; /** * Call before and after set*() methods to create a history item * if the entry has been changed. */ void beginUpdate(); void endUpdate(); Group* group(); const Group* group() const; void setGroup(Group* group); void setUpdateTimeinfo(bool value); Q_SIGNALS: /** * Emitted when a default attribute has been changed. */ void dataChanged(Entry* entry); void modified(); private Q_SLOTS: void emitDataChanged(); void updateTimeinfo(); void updateModifiedSinceBegin(); private: const Database* database() const; template bool set(T& property, const T& value); Uuid m_uuid; EntryData m_data; EntryAttributes* const m_attributes; EntryAttachments* const m_attachments; AutoTypeAssociations* const m_autoTypeAssociations; QList m_history; Entry* m_tmpHistoryItem; bool m_modifiedSinceBegin; QPointer m_group; bool m_updateTimeinfo; }; Q_DECLARE_OPERATORS_FOR_FLAGS(Entry::CloneFlags) #endif // KEEPASSX_ENTRY_H keepassx-2.0.3/src/core/EntryAttachments.cpp000066400000000000000000000051731276304217300210720ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryAttachments.h" EntryAttachments::EntryAttachments(QObject* parent) : QObject(parent) { } QList EntryAttachments::keys() const { return m_attachments.keys(); } bool EntryAttachments::hasKey(const QString& key) const { return m_attachments.keys().contains(key); } QList EntryAttachments::values() const { return m_attachments.values(); } QByteArray EntryAttachments::value(const QString& key) const { return m_attachments.value(key); } void EntryAttachments::set(const QString& key, const QByteArray& value) { bool emitModified = false; bool addAttachment = !m_attachments.contains(key); if (addAttachment) { Q_EMIT aboutToBeAdded(key); } if (addAttachment || m_attachments.value(key) != value) { m_attachments.insert(key, value); emitModified = true; } if (addAttachment) { Q_EMIT added(key); } else { Q_EMIT keyModified(key); } if (emitModified) { Q_EMIT modified(); } } void EntryAttachments::remove(const QString& key) { if (!m_attachments.contains(key)) { Q_ASSERT(false); return; } Q_EMIT aboutToBeRemoved(key); m_attachments.remove(key); Q_EMIT removed(key); Q_EMIT modified(); } void EntryAttachments::clear() { if (m_attachments.isEmpty()) { return; } Q_EMIT aboutToBeReset(); m_attachments.clear(); Q_EMIT reset(); Q_EMIT modified(); } void EntryAttachments::copyDataFrom(const EntryAttachments* other) { if (*this != *other) { Q_EMIT aboutToBeReset(); m_attachments = other->m_attachments; Q_EMIT reset(); Q_EMIT modified(); } } bool EntryAttachments::operator==(const EntryAttachments& other) const { return m_attachments == other.m_attachments; } bool EntryAttachments::operator!=(const EntryAttachments& other) const { return m_attachments != other.m_attachments; } keepassx-2.0.3/src/core/EntryAttachments.h000066400000000000000000000034061276304217300205340ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYATTACHMENTS_H #define KEEPASSX_ENTRYATTACHMENTS_H #include #include #include "core/Global.h" class EntryAttachments : public QObject { Q_OBJECT public: explicit EntryAttachments(QObject* parent = Q_NULLPTR); QList keys() const; bool hasKey(const QString& key) const; QList values() const; QByteArray value(const QString& key) const; void set(const QString& key, const QByteArray& value); void remove(const QString& key); void clear(); void copyDataFrom(const EntryAttachments* other); bool operator==(const EntryAttachments& other) const; bool operator!=(const EntryAttachments& other) const; Q_SIGNALS: void modified(); void keyModified(const QString& key); void aboutToBeAdded(const QString& key); void added(const QString& key); void aboutToBeRemoved(const QString& key); void removed(const QString& key); void aboutToBeReset(); void reset(); private: QMap m_attachments; }; #endif // KEEPASSX_ENTRYATTACHMENTS_H keepassx-2.0.3/src/core/EntryAttributes.cpp000066400000000000000000000145261276304217300207470ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryAttributes.h" const QString EntryAttributes::TitleKey = "Title"; const QString EntryAttributes::UserNameKey = "UserName"; const QString EntryAttributes::PasswordKey = "Password"; const QString EntryAttributes::URLKey = "URL"; const QString EntryAttributes::NotesKey = "Notes"; const QStringList EntryAttributes::DefaultAttributes(QStringList() << TitleKey << UserNameKey << PasswordKey << URLKey << NotesKey); EntryAttributes::EntryAttributes(QObject* parent) : QObject(parent) { clear(); } QList EntryAttributes::keys() const { return m_attributes.keys(); } bool EntryAttributes::hasKey(const QString& key) const { return m_attributes.keys().contains(key); } QList EntryAttributes::customKeys() { QList customKeys; Q_FOREACH (const QString& key, keys()) { if (!isDefaultAttribute(key)) { customKeys.append(key); } } return customKeys; } QString EntryAttributes::value(const QString& key) const { return m_attributes.value(key); } bool EntryAttributes::isProtected(const QString& key) const { return m_protectedAttributes.contains(key); } void EntryAttributes::set(const QString& key, const QString& value, bool protect) { bool emitModified = false; bool addAttribute = !m_attributes.contains(key); bool changeValue = !addAttribute && (m_attributes.value(key) != value); bool defaultAttribute = isDefaultAttribute(key); if (addAttribute && !defaultAttribute) { Q_EMIT aboutToBeAdded(key); } if (addAttribute || changeValue) { m_attributes.insert(key, value); emitModified = true; } if (protect) { if (!m_protectedAttributes.contains(key)) { emitModified = true; } m_protectedAttributes.insert(key); } else if (m_protectedAttributes.remove(key)) { emitModified = true; } if (emitModified) { Q_EMIT modified(); } if (defaultAttribute && changeValue) { Q_EMIT defaultKeyModified(); } else if (addAttribute) { Q_EMIT added(key); } else if (emitModified) { Q_EMIT customKeyModified(key); } } void EntryAttributes::remove(const QString& key) { Q_ASSERT(!isDefaultAttribute(key)); if (!m_attributes.contains(key)) { Q_ASSERT(false); return; } Q_EMIT aboutToBeRemoved(key); m_attributes.remove(key); m_protectedAttributes.remove(key); Q_EMIT removed(key); Q_EMIT modified(); } void EntryAttributes::rename(const QString& oldKey, const QString& newKey) { Q_ASSERT(!isDefaultAttribute(oldKey)); Q_ASSERT(!isDefaultAttribute(newKey)); if (!m_attributes.contains(oldKey)) { Q_ASSERT(false); return; } if (m_attributes.contains(newKey)) { Q_ASSERT(false); return; } QString data = value(oldKey); bool protect = isProtected(oldKey); Q_EMIT aboutToRename(oldKey, newKey); m_attributes.remove(oldKey); m_attributes.insert(newKey, data); if (protect) { m_protectedAttributes.remove(oldKey); m_protectedAttributes.insert(newKey); } Q_EMIT modified(); Q_EMIT renamed(oldKey, newKey); } void EntryAttributes::copyCustomKeysFrom(const EntryAttributes* other) { if (!areCustomKeysDifferent(other)) { return; } Q_EMIT aboutToBeReset(); // remove all non-default keys Q_FOREACH (const QString& key, keys()) { if (!isDefaultAttribute(key)) { m_attributes.remove(key); m_protectedAttributes.remove(key); } } Q_FOREACH (const QString& key, other->keys()) { if (!isDefaultAttribute(key)) { m_attributes.insert(key, other->value(key)); if (other->isProtected(key)) { m_protectedAttributes.insert(key); } } } Q_EMIT reset(); Q_EMIT modified(); } bool EntryAttributes::areCustomKeysDifferent(const EntryAttributes* other) { // check if they are equal ignoring the order of the keys if (keys().toSet() != other->keys().toSet()) { return true; } Q_FOREACH (const QString& key, keys()) { if (isDefaultAttribute(key)) { continue; } if (isProtected(key) != other->isProtected(key) || value(key) != other->value(key)) { return true; } } return false; } void EntryAttributes::copyDataFrom(const EntryAttributes* other) { if (*this != *other) { Q_EMIT aboutToBeReset(); m_attributes = other->m_attributes; m_protectedAttributes = other->m_protectedAttributes; Q_EMIT reset(); Q_EMIT modified(); } } bool EntryAttributes::operator==(const EntryAttributes& other) const { return (m_attributes == other.m_attributes && m_protectedAttributes == other.m_protectedAttributes); } bool EntryAttributes::operator!=(const EntryAttributes& other) const { return (m_attributes != other.m_attributes || m_protectedAttributes != other.m_protectedAttributes); } void EntryAttributes::clear() { Q_EMIT aboutToBeReset(); m_attributes.clear(); m_protectedAttributes.clear(); Q_FOREACH (const QString& key, DefaultAttributes) { m_attributes.insert(key, ""); } Q_EMIT reset(); Q_EMIT modified(); } int EntryAttributes::attributesSize() { int size = 0; QMapIterator i(m_attributes); while (i.hasNext()) { i.next(); size += i.value().toUtf8().size(); } return size; } bool EntryAttributes::isDefaultAttribute(const QString& key) { return DefaultAttributes.contains(key); } keepassx-2.0.3/src/core/EntryAttributes.h000066400000000000000000000050371276304217300204110ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYATTRIBUTES_H #define KEEPASSX_ENTRYATTRIBUTES_H #include #include #include #include #include "core/Global.h" class EntryAttributes : public QObject { Q_OBJECT public: explicit EntryAttributes(QObject* parent = Q_NULLPTR); QList keys() const; bool hasKey(const QString& key) const; QList customKeys(); QString value(const QString& key) const; bool isProtected(const QString& key) const; void set(const QString& key, const QString& value, bool protect = false); void remove(const QString& key); void rename(const QString& oldKey, const QString& newKey); void copyCustomKeysFrom(const EntryAttributes* other); bool areCustomKeysDifferent(const EntryAttributes* other); void clear(); int attributesSize(); void copyDataFrom(const EntryAttributes* other); bool operator==(const EntryAttributes& other) const; bool operator!=(const EntryAttributes& other) const; static const QString TitleKey; static const QString UserNameKey; static const QString PasswordKey; static const QString URLKey; static const QString NotesKey; static const QStringList DefaultAttributes; static bool isDefaultAttribute(const QString& key); Q_SIGNALS: void modified(); void defaultKeyModified(); void customKeyModified(const QString& key); void aboutToBeAdded(const QString& key); void added(const QString& key); void aboutToBeRemoved(const QString& key); void removed(const QString& key); void aboutToRename(const QString& oldKey, const QString& newKey); void renamed(const QString& oldKey, const QString& newKey); void aboutToBeReset(); void reset(); private: QMap m_attributes; QSet m_protectedAttributes; }; #endif // KEEPASSX_ENTRYATTRIBUTES_H keepassx-2.0.3/src/core/EntrySearcher.cpp000066400000000000000000000044441276304217300203530ustar00rootroot00000000000000/* * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntrySearcher.h" #include "core/Group.h" QList EntrySearcher::search(const QString &searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) { if (!group->resolveSearchingEnabled()) { return QList(); } return searchEntries(searchTerm, group, caseSensitivity); } QList EntrySearcher::searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity) { QList searchResult; Q_FOREACH (Entry* entry, group->entries()) { searchResult.append(matchEntry(searchTerm, entry, caseSensitivity)); } Q_FOREACH (Group* childGroup, group->children()) { if (childGroup->searchingEnabled() != Group::Disable) { searchResult.append(searchEntries(searchTerm, childGroup, caseSensitivity)); } } return searchResult; } QList EntrySearcher::matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity) { QStringList wordList = searchTerm.split(QRegExp("\\s"), QString::SkipEmptyParts); Q_FOREACH (const QString& word, wordList) { if (!wordMatch(word, entry, caseSensitivity)) { return QList(); } } return QList() << entry; } bool EntrySearcher::wordMatch(const QString& word, Entry* entry, Qt::CaseSensitivity caseSensitivity) { return entry->title().contains(word, caseSensitivity) || entry->username().contains(word, caseSensitivity) || entry->url().contains(word, caseSensitivity) || entry->notes().contains(word, caseSensitivity); } keepassx-2.0.3/src/core/EntrySearcher.h000066400000000000000000000024641276304217300200200ustar00rootroot00000000000000/* * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYSEARCHER_H #define KEEPASSX_ENTRYSEARCHER_H #include class Group; class Entry; class EntrySearcher { public: QList search(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); private: QList searchEntries(const QString& searchTerm, const Group* group, Qt::CaseSensitivity caseSensitivity); QList matchEntry(const QString& searchTerm, Entry* entry, Qt::CaseSensitivity caseSensitivity); bool wordMatch(const QString &word, Entry *entry, Qt::CaseSensitivity caseSensitivity); }; #endif // KEEPASSX_ENTRYSEARCHER_H keepassx-2.0.3/src/core/Exporter.h000066400000000000000000000003421276304217300170430ustar00rootroot00000000000000#ifndef KEEPASSX_EXPORTER_H #define KEEPASSX_EXPORTER_H class Database; class Group; class Exporter { public: virtual Database* exportGroup(Group* group) = 0; virtual ~Exporter() {} }; #endif // KEEPASSX_EXPORTER_H keepassx-2.0.3/src/core/FilePath.cpp000066400000000000000000000145751276304217300172770ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "FilePath.h" #include #include #include #include "config-keepassx.h" FilePath* FilePath::m_instance(Q_NULLPTR); QString FilePath::dataPath(const QString& name) { if (name.isEmpty() || name.startsWith('/')) { return m_dataPath + name; } else { return m_dataPath + "/" + name; } } QString FilePath::pluginPath(const QString& name) { QStringList pluginPaths; QDir buildDir(QCoreApplication::applicationDirPath() + "/autotype"); Q_FOREACH (const QString& dir, buildDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { pluginPaths << QCoreApplication::applicationDirPath() + "/autotype/" + dir; } // for TestAutoType pluginPaths << QCoreApplication::applicationDirPath() + "/../src/autotype/test"; pluginPaths << QCoreApplication::applicationDirPath(); QString configuredPluginDir = KEEPASSX_PLUGIN_DIR; if (configuredPluginDir != ".") { if (QDir(configuredPluginDir).isAbsolute()) { pluginPaths << configuredPluginDir; } else { QString relativePluginDir = QString("%1/../%2") .arg(QCoreApplication::applicationDirPath(), configuredPluginDir); pluginPaths << QDir(relativePluginDir).canonicalPath(); QString absolutePluginDir = QString("%1/%2") .arg(KEEPASSX_PREFIX_DIR, configuredPluginDir); pluginPaths << QDir(absolutePluginDir).canonicalPath(); } } QStringList dirFilter; dirFilter << QString("*%1*").arg(name); Q_FOREACH (const QString& path, pluginPaths) { QStringList fileCandidates = QDir(path).entryList(dirFilter, QDir::Files); Q_FOREACH (const QString& file, fileCandidates) { QString filePath = path + "/" + file; if (QLibrary::isLibrary(filePath)) { return filePath; } } } return QString(); } QIcon FilePath::applicationIcon() { return icon("apps", "keepassx"); } QIcon FilePath::icon(const QString& category, const QString& name, bool fromTheme) { QString combinedName = category + "/" + name; QIcon icon = m_iconCache.value(combinedName); if (!icon.isNull()) { return icon; } if (fromTheme) { icon = QIcon::fromTheme(name); } if (icon.isNull()) { QList pngSizes; pngSizes << 16 << 22 << 24 << 32 << 48 << 64 << 128; QString filename; Q_FOREACH (int size, pngSizes) { filename = QString("%1/icons/application/%2x%2/%3.png").arg(m_dataPath, QString::number(size), combinedName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(size, size)); } } filename = QString("%1/icons/application/scalable/%2.svgz").arg(m_dataPath, combinedName); if (QFile::exists(filename)) { icon.addFile(filename); } } m_iconCache.insert(combinedName, icon); return icon; } QIcon FilePath::onOffIcon(const QString& category, const QString& name) { QString combinedName = category + "/" + name; QString cacheName = "onoff/" + combinedName; QIcon icon = m_iconCache.value(cacheName); if (!icon.isNull()) { return icon; } for (int i = 0; i < 2; i++) { QIcon::State state; QString stateName; if (i == 0) { state = QIcon::Off; stateName = "off"; } else { state = QIcon::On; stateName = "on"; } QList pngSizes; pngSizes << 16 << 22 << 24 << 32 << 48 << 64 << 128; QString filename; Q_FOREACH (int size, pngSizes) { filename = QString("%1/icons/application/%2x%2/%3-%4.png").arg(m_dataPath, QString::number(size), combinedName, stateName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(size, size), QIcon::Normal, state); } } filename = QString("%1/icons/application/scalable/%2-%3.svgz").arg(m_dataPath, combinedName, stateName); if (QFile::exists(filename)) { icon.addFile(filename, QSize(), QIcon::Normal, state); } } m_iconCache.insert(cacheName, icon); return icon; } FilePath::FilePath() { const QString appDirPath = QCoreApplication::applicationDirPath(); bool isDataDirAbsolute = QDir::isAbsolutePath(KEEPASSX_DATA_DIR); Q_UNUSED(isDataDirAbsolute); if (false) { } #ifdef QT_DEBUG else if (testSetDir(QString(KEEPASSX_SOURCE_DIR) + "/share")) { } #endif #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) else if (isDataDirAbsolute && testSetDir(KEEPASSX_DATA_DIR)) { } else if (!isDataDirAbsolute && testSetDir(QString("%1/../%2").arg(appDirPath, KEEPASSX_DATA_DIR))) { } else if (!isDataDirAbsolute && testSetDir(QString("%1/%2").arg(KEEPASSX_PREFIX_DIR, KEEPASSX_DATA_DIR))) { } #endif #ifdef Q_OS_MAC else if (testSetDir(appDirPath + "/../Resources")) { } #endif #ifdef Q_OS_WIN else if (testSetDir(appDirPath + "/share")) { } #endif if (m_dataPath.isEmpty()) { qWarning("FilePath::DataPath: can't find data dir"); } else { m_dataPath = QDir::cleanPath(m_dataPath); } } bool FilePath::testSetDir(const QString& dir) { if (QFile::exists(dir + "/icons/database/C00_Password.png")) { m_dataPath = dir; return true; } else { return false; } } FilePath* FilePath::instance() { if (!m_instance) { m_instance = new FilePath(); } return m_instance; } keepassx-2.0.3/src/core/FilePath.h000066400000000000000000000026761276304217300167430ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_FILEPATH_H #define KEEPASSX_FILEPATH_H #include #include #include #include "core/Global.h" class FilePath { public: QString dataPath(const QString& name); QString pluginPath(const QString& name); QIcon applicationIcon(); QIcon icon(const QString& category, const QString& name, bool fromTheme = true); QIcon onOffIcon(const QString& category, const QString& name); static FilePath* instance(); private: FilePath(); bool testSetDir(const QString& dir); static FilePath* m_instance; QString m_dataPath; QHash m_iconCache; Q_DISABLE_COPY(FilePath) }; inline FilePath* filePath() { return FilePath::instance(); } #endif // KEEPASSX_FILEPATH_H keepassx-2.0.3/src/core/Global.h000066400000000000000000000101261276304217300164340ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) * Copyright (C) 2012 Intel Corporation * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_GLOBAL_H #define KEEPASSX_GLOBAL_H // mostly copied from qcompilerdetection.h which is part of Qt 5 #include #ifdef Q_CC_CLANG # if __cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__) # if __has_feature(cxx_strong_enums) # define COMPILER_CLASS_ENUM # endif # if __has_feature(cxx_constexpr) # define COMPILER_CONSTEXPR # endif # if __has_feature(cxx_decltype) /* && __has_feature(cxx_decltype_incomplete_return_types) */ # define COMPILER_DECLTYPE # endif # if __has_feature(cxx_override_control) # define COMPILER_EXPLICIT_OVERRIDES # endif # if __has_feature(cxx_nullptr) # define COMPILER_NULLPTR # endif # if __has_feature(cxx_static_assert) # define COMPILER_STATIC_ASSERT # endif # endif #endif // Q_CC_CLANG #if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && !defined(Q_CC_CLANG) # if defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 403 # define COMPILER_DECLTYPE # define COMPILER_STATIC_ASSERT # endif # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 404 # define COMPILER_CLASS_ENUM # endif # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 406 # define COMPILER_CONSTEXPR # define COMPILER_NULLPTR # endif # if (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 # define COMPILER_EXPLICIT_OVERRIDES # endif # endif #endif /* * C++11 keywords and expressions */ #if !defined(Q_NULLPTR) # ifdef COMPILER_NULLPTR # define Q_NULLPTR nullptr # else # define Q_NULLPTR 0 # endif #endif #if !defined(Q_DECL_CONSTEXPR) # ifdef COMPILER_CONSTEXPR # define Q_DECL_CONSTEXPR constexpr # else # define Q_DECL_CONSTEXPR # endif #endif #if !defined(Q_DECL_OVERRIDE) && !defined(Q_DECL_FINAL) && !defined(Q_DECL_FINAL_CLASS) # ifdef COMPILER_EXPLICIT_OVERRIDES # define Q_DECL_OVERRIDE override # define Q_DECL_FINAL final # ifdef COMPILER_DECLTYPE # define Q_DECL_FINAL_CLASS final # else # define Q_DECL_FINAL_CLASS # endif # else # define Q_DECL_OVERRIDE # define Q_DECL_FINAL # define Q_DECL_FINAL_CLASS # endif #endif #if !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X) #ifdef COMPILER_STATIC_ASSERT #define Q_STATIC_ASSERT(Condition) static_assert(static_cast(Condition), #Condition) #define Q_STATIC_ASSERT_X(Condition, Message) static_assert(static_cast(Condition), Message) #else // Intentionally undefined template class QStaticAssertFailure; template <> class QStaticAssertFailure {}; #define Q_STATIC_ASSERT_PRIVATE_JOIN(A, B) Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) #define Q_STATIC_ASSERT_PRIVATE_JOIN_IMPL(A, B) A ## B #define Q_STATIC_ASSERT(Condition) \ enum {Q_STATIC_ASSERT_PRIVATE_JOIN(q_static_assert_result, __LINE__) = sizeof(QStaticAssertFailure)} #define Q_STATIC_ASSERT_X(Condition, Message) Q_STATIC_ASSERT(Condition) #endif // COMPILER_STATIC_ASSERT #endif // !defined(Q_STATIC_ASSERT) && !defined(Q_STATIC_ASSERT_X) #if defined(Q_OS_WIN) # if defined(KEEPASSX_BUILDING_CORE) # define KEEPASSX_EXPORT Q_DECL_EXPORT # else # define KEEPASSX_EXPORT Q_DECL_IMPORT # endif #else # define KEEPASSX_EXPORT Q_DECL_EXPORT #endif #ifndef QUINT32_MAX #define QUINT32_MAX 4294967295U #endif #endif // KEEPASSX_GLOBAL_H keepassx-2.0.3/src/core/Group.cpp000066400000000000000000000352171276304217300166730ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Group.h" #include "core/Config.h" #include "core/DatabaseIcons.h" #include "core/Metadata.h" #include "core/Tools.h" const int Group::DefaultIconNumber = 48; const int Group::RecycleBinIconNumber = 43; Group::Group() : m_updateTimeinfo(true) { m_data.iconNumber = DefaultIconNumber; m_data.isExpanded = true; m_data.autoTypeEnabled = Inherit; m_data.searchingEnabled = Inherit; } Group::~Group() { // Destroy entries and children manually so DeletedObjects can be added // to database. QList entries = m_entries; Q_FOREACH (Entry* entry, entries) { delete entry; } QList children = m_children; Q_FOREACH (Group* group, children) { delete group; } if (m_db && m_parent) { DeletedObject delGroup; delGroup.deletionTime = Tools::currentDateTimeUtc(); delGroup.uuid = m_uuid; m_db->addDeletedObject(delGroup); } cleanupParent(); } Group* Group::createRecycleBin() { Group* recycleBin = new Group(); recycleBin->setUuid(Uuid::random()); recycleBin->setName(tr("Recycle Bin")); recycleBin->setIcon(RecycleBinIconNumber); recycleBin->setSearchingEnabled(Group::Disable); recycleBin->setAutoTypeEnabled(Group::Disable); return recycleBin; } template inline bool Group::set(P& property, const V& value) { if (property != value) { property = value; updateTimeinfo(); Q_EMIT modified(); return true; } else { return false; } } void Group::updateTimeinfo() { if (m_updateTimeinfo) { m_data.timeInfo.setLastModificationTime(Tools::currentDateTimeUtc()); m_data.timeInfo.setLastAccessTime(Tools::currentDateTimeUtc()); } } void Group::setUpdateTimeinfo(bool value) { m_updateTimeinfo = value; } Uuid Group::uuid() const { return m_uuid; } QString Group::name() const { return m_data.name; } QString Group::notes() const { return m_data.notes; } QImage Group::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIcon(m_data.customIcon); } else { return QImage(); } } } QPixmap Group::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconPixmap(m_data.customIcon); } else { return QPixmap(); } } } QPixmap Group::iconScaledPixmap() const { if (m_data.customIcon.isNull()) { // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconScaledPixmap(m_data.customIcon); } else { return QPixmap(); } } } int Group::iconNumber() const { return m_data.iconNumber; } Uuid Group::iconUuid() const { return m_data.customIcon; } TimeInfo Group::timeInfo() const { return m_data.timeInfo; } bool Group::isExpanded() const { return m_data.isExpanded; } QString Group::defaultAutoTypeSequence() const { return m_data.defaultAutoTypeSequence; } Group::TriState Group::autoTypeEnabled() const { return m_data.autoTypeEnabled; } Group::TriState Group::searchingEnabled() const { return m_data.searchingEnabled; } Entry* Group::lastTopVisibleEntry() const { return m_lastTopVisibleEntry; } bool Group::isExpired() const { return m_data.timeInfo.expires() && m_data.timeInfo.expiryTime() < Tools::currentDateTimeUtc(); } void Group::setUuid(const Uuid& uuid) { set(m_uuid, uuid); } void Group::setName(const QString& name) { if (set(m_data.name, name)) { Q_EMIT dataChanged(this); } } void Group::setNotes(const QString& notes) { set(m_data.notes, notes); } void Group::setIcon(int iconNumber) { Q_ASSERT(iconNumber >= 0); if (m_data.iconNumber != iconNumber || !m_data.customIcon.isNull()) { m_data.iconNumber = iconNumber; m_data.customIcon = Uuid(); updateTimeinfo(); Q_EMIT modified(); Q_EMIT dataChanged(this); } } void Group::setIcon(const Uuid& uuid) { Q_ASSERT(!uuid.isNull()); if (m_data.customIcon != uuid) { m_data.customIcon = uuid; m_data.iconNumber = 0; updateTimeinfo(); Q_EMIT modified(); Q_EMIT dataChanged(this); } } void Group::setTimeInfo(const TimeInfo& timeInfo) { m_data.timeInfo = timeInfo; } void Group::setExpanded(bool expanded) { if (m_data.isExpanded != expanded) { m_data.isExpanded = expanded; updateTimeinfo(); Q_EMIT modified(); } } void Group::setDefaultAutoTypeSequence(const QString& sequence) { set(m_data.defaultAutoTypeSequence, sequence); } void Group::setAutoTypeEnabled(TriState enable) { set(m_data.autoTypeEnabled, enable); } void Group::setSearchingEnabled(TriState enable) { set(m_data.searchingEnabled, enable); } void Group::setLastTopVisibleEntry(Entry* entry) { set(m_lastTopVisibleEntry, entry); } void Group::setExpires(bool value) { if (m_data.timeInfo.expires() != value) { m_data.timeInfo.setExpires(value); updateTimeinfo(); Q_EMIT modified(); } } void Group::setExpiryTime(const QDateTime& dateTime) { if (m_data.timeInfo.expiryTime() != dateTime) { m_data.timeInfo.setExpiryTime(dateTime); updateTimeinfo(); Q_EMIT modified(); } } Group* Group::parentGroup() { return m_parent; } const Group* Group::parentGroup() const { return m_parent; } void Group::setParent(Group* parent, int index) { Q_ASSERT(parent); Q_ASSERT(index >= -1 && index <= parent->children().size()); // setting a new parent for root groups is not allowed Q_ASSERT(!m_db || (m_db->rootGroup() != this)); bool moveWithinDatabase = (m_db && m_db == parent->m_db); if (index == -1) { index = parent->children().size(); if (parentGroup() == parent) { index--; } } if (m_parent == parent && parent->children().indexOf(this) == index) { return; } if (!moveWithinDatabase) { cleanupParent(); m_parent = parent; if (m_db) { recCreateDelObjects(); // copy custom icon to the new database if (!iconUuid().isNull() && parent->m_db && m_db->metadata()->containsCustomIcon(iconUuid()) && !parent->m_db->metadata()->containsCustomIcon(iconUuid())) { parent->m_db->metadata()->addCustomIcon(iconUuid(), icon()); } } if (m_db != parent->m_db) { recSetDatabase(parent->m_db); } QObject::setParent(parent); Q_EMIT aboutToAdd(this, index); Q_ASSERT(index <= parent->m_children.size()); parent->m_children.insert(index, this); } else { Q_EMIT aboutToMove(this, parent, index); m_parent->m_children.removeAll(this); m_parent = parent; QObject::setParent(parent); Q_ASSERT(index <= parent->m_children.size()); parent->m_children.insert(index, this); } if (m_updateTimeinfo) { m_data.timeInfo.setLocationChanged(Tools::currentDateTimeUtc()); } Q_EMIT modified(); if (!moveWithinDatabase) { Q_EMIT added(); } else { Q_EMIT moved(); } } void Group::setParent(Database* db) { Q_ASSERT(db); Q_ASSERT(db->rootGroup() == this); cleanupParent(); m_parent = Q_NULLPTR; recSetDatabase(db); QObject::setParent(db); } Database* Group::database() { return m_db; } const Database* Group::database() const { return m_db; } QList Group::children() { return m_children; } const QList& Group::children() const { return m_children; } QList Group::entries() { return m_entries; } const QList& Group::entries() const { return m_entries; } QList Group::entriesRecursive(bool includeHistoryItems) const { QList entryList; entryList.append(m_entries); if (includeHistoryItems) { Q_FOREACH (Entry* entry, m_entries) { entryList.append(entry->historyItems()); } } Q_FOREACH (Group* group, m_children) { entryList.append(group->entriesRecursive(includeHistoryItems)); } return entryList; } QList Group::groupsRecursive(bool includeSelf) const { QList groupList; if (includeSelf) { groupList.append(this); } Q_FOREACH (const Group* group, m_children) { groupList.append(group->groupsRecursive(true)); } return groupList; } QList Group::groupsRecursive(bool includeSelf) { QList groupList; if (includeSelf) { groupList.append(this); } Q_FOREACH (Group* group, m_children) { groupList.append(group->groupsRecursive(true)); } return groupList; } QSet Group::customIconsRecursive() const { QSet result; if (!iconUuid().isNull()) { result.insert(iconUuid()); } Q_FOREACH (Entry* entry, entriesRecursive(true)) { if (!entry->iconUuid().isNull()) { result.insert(entry->iconUuid()); } } Q_FOREACH (Group* group, m_children) { result.unite(group->customIconsRecursive()); } return result; } Group* Group::clone(Entry::CloneFlags entryFlags) const { Group* clonedGroup = new Group(); clonedGroup->setUpdateTimeinfo(false); clonedGroup->setUuid(Uuid::random()); clonedGroup->m_data = m_data; Q_FOREACH (Entry* entry, entries()) { Entry* clonedEntry = entry->clone(entryFlags); clonedEntry->setGroup(clonedGroup); } Q_FOREACH (Group* groupChild, children()) { Group* clonedGroupChild = groupChild->clone(entryFlags); clonedGroupChild->setParent(clonedGroup); } clonedGroup->setUpdateTimeinfo(true); QDateTime now = Tools::currentDateTimeUtc(); clonedGroup->m_data.timeInfo.setCreationTime(now); clonedGroup->m_data.timeInfo.setLastModificationTime(now); clonedGroup->m_data.timeInfo.setLastAccessTime(now); clonedGroup->m_data.timeInfo.setLocationChanged(now); return clonedGroup; } void Group::copyDataFrom(const Group* other) { m_data = other->m_data; m_lastTopVisibleEntry = other->m_lastTopVisibleEntry; } void Group::addEntry(Entry* entry) { Q_ASSERT(entry); Q_ASSERT(!m_entries.contains(entry)); Q_EMIT entryAboutToAdd(entry); m_entries << entry; connect(entry, SIGNAL(dataChanged(Entry*)), SIGNAL(entryDataChanged(Entry*))); if (m_db) { connect(entry, SIGNAL(modified()), m_db, SIGNAL(modifiedImmediate())); } Q_EMIT modified(); Q_EMIT entryAdded(entry); } void Group::removeEntry(Entry* entry) { Q_ASSERT(m_entries.contains(entry)); Q_EMIT entryAboutToRemove(entry); entry->disconnect(this); if (m_db) { entry->disconnect(m_db); } m_entries.removeAll(entry); Q_EMIT modified(); Q_EMIT entryRemoved(entry); } void Group::recSetDatabase(Database* db) { if (m_db) { disconnect(SIGNAL(dataChanged(Group*)), m_db); disconnect(SIGNAL(aboutToRemove(Group*)), m_db); disconnect(SIGNAL(removed()), m_db); disconnect(SIGNAL(aboutToAdd(Group*,int)), m_db); disconnect(SIGNAL(added()), m_db); disconnect(SIGNAL(aboutToMove(Group*,Group*,int)), m_db); disconnect(SIGNAL(moved()), m_db); disconnect(SIGNAL(modified()), m_db); } Q_FOREACH (Entry* entry, m_entries) { if (m_db) { entry->disconnect(m_db); } if (db) { connect(entry, SIGNAL(modified()), db, SIGNAL(modifiedImmediate())); } } if (db) { connect(this, SIGNAL(dataChanged(Group*)), db, SIGNAL(groupDataChanged(Group*))); connect(this, SIGNAL(aboutToRemove(Group*)), db, SIGNAL(groupAboutToRemove(Group*))); connect(this, SIGNAL(removed()), db, SIGNAL(groupRemoved())); connect(this, SIGNAL(aboutToAdd(Group*,int)), db, SIGNAL(groupAboutToAdd(Group*,int))); connect(this, SIGNAL(added()), db, SIGNAL(groupAdded())); connect(this, SIGNAL(aboutToMove(Group*,Group*,int)), db, SIGNAL(groupAboutToMove(Group*,Group*,int))); connect(this, SIGNAL(moved()), db, SIGNAL(groupMoved())); connect(this, SIGNAL(modified()), db, SIGNAL(modifiedImmediate())); } m_db = db; Q_FOREACH (Group* group, m_children) { group->recSetDatabase(db); } } void Group::cleanupParent() { if (m_parent) { Q_EMIT aboutToRemove(this); m_parent->m_children.removeAll(this); Q_EMIT modified(); Q_EMIT removed(); } } void Group::recCreateDelObjects() { if (m_db) { Q_FOREACH (Entry* entry, m_entries) { m_db->addDeletedObject(entry->uuid()); } Q_FOREACH (Group* group, m_children) { group->recCreateDelObjects(); } m_db->addDeletedObject(m_uuid); } } bool Group::resolveSearchingEnabled() const { switch (m_data.searchingEnabled) { case Inherit: if (!m_parent) { return true; } else { return m_parent->resolveSearchingEnabled(); } case Enable: return true; case Disable: return false; default: Q_ASSERT(false); return false; } } bool Group::resolveAutoTypeEnabled() const { switch (m_data.autoTypeEnabled) { case Inherit: if (!m_parent) { return true; } else { return m_parent->resolveAutoTypeEnabled(); } case Enable: return true; case Disable: return false; default: Q_ASSERT(false); return false; } } keepassx-2.0.3/src/core/Group.h000066400000000000000000000115551276304217300163370ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_GROUP_H #define KEEPASSX_GROUP_H #include #include #include #include #include "core/Database.h" #include "core/Entry.h" #include "core/TimeInfo.h" #include "core/Uuid.h" class Group : public QObject { Q_OBJECT public: enum TriState { Inherit, Enable, Disable }; struct GroupData { QString name; QString notes; int iconNumber; Uuid customIcon; TimeInfo timeInfo; bool isExpanded; QString defaultAutoTypeSequence; Group::TriState autoTypeEnabled; Group::TriState searchingEnabled; }; Group(); ~Group(); static Group* createRecycleBin(); Uuid uuid() const; QString name() const; QString notes() const; QImage icon() const; QPixmap iconPixmap() const; QPixmap iconScaledPixmap() const; int iconNumber() const; Uuid iconUuid() const; TimeInfo timeInfo() const; bool isExpanded() const; QString defaultAutoTypeSequence() const; Group::TriState autoTypeEnabled() const; Group::TriState searchingEnabled() const; bool resolveSearchingEnabled() const; bool resolveAutoTypeEnabled() const; Entry* lastTopVisibleEntry() const; bool isExpired() const; static const int DefaultIconNumber; static const int RecycleBinIconNumber; void setUuid(const Uuid& uuid); void setName(const QString& name); void setNotes(const QString& notes); void setIcon(int iconNumber); void setIcon(const Uuid& uuid); void setTimeInfo(const TimeInfo& timeInfo); void setExpanded(bool expanded); void setDefaultAutoTypeSequence(const QString& sequence); void setAutoTypeEnabled(TriState enable); void setSearchingEnabled(TriState enable); void setLastTopVisibleEntry(Entry* entry); void setExpires(bool value); void setExpiryTime(const QDateTime& dateTime); void setUpdateTimeinfo(bool value); Group* parentGroup(); const Group* parentGroup() const; void setParent(Group* parent, int index = -1); Database* database(); const Database* database() const; QList children(); const QList& children() const; QList entries(); const QList& entries() const; QList entriesRecursive(bool includeHistoryItems = false) const; QList groupsRecursive(bool includeSelf) const; QList groupsRecursive(bool includeSelf); QSet customIconsRecursive() const; /** * Creates a duplicate of this group including all child entries and groups. * The exceptions are that the returned group doesn't have a parent group * and all TimeInfo attributes are set to the current time. * Note that you need to copy the custom icons manually when inserting the * new group into another database. */ Group* clone(Entry::CloneFlags entryFlags = Entry::CloneNewUuid | Entry::CloneResetTimeInfo) const; void copyDataFrom(const Group* other); Q_SIGNALS: void dataChanged(Group* group); void aboutToAdd(Group* group, int index); void added(); void aboutToRemove(Group* group); void removed(); /** * Group moved within the database. */ void aboutToMove(Group* group, Group* toGroup, int index); void moved(); void entryAboutToAdd(Entry* entry); void entryAdded(Entry* entry); void entryAboutToRemove(Entry* entry); void entryRemoved(Entry* entry); void entryDataChanged(Entry* entry); void modified(); private: template bool set(P& property, const V& value); void addEntry(Entry* entry); void removeEntry(Entry* entry); void setParent(Database* db); void recSetDatabase(Database* db); void cleanupParent(); void recCreateDelObjects(); void updateTimeinfo(); QPointer m_db; Uuid m_uuid; GroupData m_data; QPointer m_lastTopVisibleEntry; QList m_children; QList m_entries; QPointer m_parent; bool m_updateTimeinfo; friend void Database::setRootGroup(Group* group); friend Entry::~Entry(); friend void Entry::setGroup(Group* group); }; #endif // KEEPASSX_GROUP_H keepassx-2.0.3/src/core/InactivityTimer.cpp000066400000000000000000000040661276304217300207210ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "InactivityTimer.h" #include #include InactivityTimer::InactivityTimer(QObject* parent) : QObject(parent) , m_timer(new QTimer(this)) , m_active(false) { m_timer->setSingleShot(true); connect(m_timer, SIGNAL(timeout()), SLOT(timeout())); } void InactivityTimer::setInactivityTimeout(int inactivityTimeout) { Q_ASSERT(inactivityTimeout > 0); m_timer->setInterval(inactivityTimeout); } void InactivityTimer::activate() { if (!m_active) { qApp->installEventFilter(this); } m_active = true; m_timer->start(); } void InactivityTimer::deactivate() { qApp->removeEventFilter(this); m_active = false; m_timer->stop(); } bool InactivityTimer::eventFilter(QObject* watched, QEvent* event) { const QEvent::Type type = event->type(); if ( (type >= QEvent::MouseButtonPress && type <= QEvent::KeyRelease) || (type >= QEvent::HoverEnter && type <= QEvent::HoverMove) || (type == QEvent::Wheel) ) { m_timer->start(); } return QObject::eventFilter(watched, event); } void InactivityTimer::timeout() { // make sure we don't emit the signal a second time while it's still processed if (!m_emitMutx.tryLock()) { return; } if (m_active && !m_timer->isActive()) { Q_EMIT inactivityDetected(); } m_emitMutx.unlock(); } keepassx-2.0.3/src/core/InactivityTimer.h000066400000000000000000000024761276304217300203710ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_INACTIVITYTIMER_H #define KEEPASSX_INACTIVITYTIMER_H #include #include #include "core/Global.h" class QTimer; class InactivityTimer : public QObject { Q_OBJECT public: explicit InactivityTimer(QObject* parent = Q_NULLPTR); void setInactivityTimeout(int inactivityTimeout); void activate(); void deactivate(); Q_SIGNALS: void inactivityDetected(); protected: bool eventFilter(QObject* watched, QEvent* event); private Q_SLOTS: void timeout(); private: QTimer* m_timer; bool m_active; QMutex m_emitMutx; }; #endif // KEEPASSX_INACTIVITYTIMER_H keepassx-2.0.3/src/core/ListDeleter.h000066400000000000000000000020171276304217300174540ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_LISTDELETER_H #define KEEPASSX_LISTDELETER_H #include template class ListDeleter { public: inline explicit ListDeleter(QList* list) : m_list(list) {} inline ~ListDeleter() { qDeleteAll(*m_list); } private: QList* m_list; }; #endif // KEEPASSX_LISTDELETER_H keepassx-2.0.3/src/core/Metadata.cpp000066400000000000000000000263111276304217300173120ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Metadata.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Tools.h" const int Metadata::DefaultHistoryMaxItems = 10; const int Metadata::DefaultHistoryMaxSize = 6 * 1024 * 1024; Metadata::Metadata(QObject* parent) : QObject(parent) , m_updateDatetime(true) { m_data.generator = "KeePassX"; m_data.maintenanceHistoryDays = 365; m_data.masterKeyChangeRec = -1; m_data.masterKeyChangeForce = -1; m_data.historyMaxItems = DefaultHistoryMaxItems; m_data.historyMaxSize = DefaultHistoryMaxSize; m_data.recycleBinEnabled = true; m_data.protectTitle = false; m_data.protectUsername = false; m_data.protectPassword = true; m_data.protectUrl = false; m_data.protectNotes = false; // m_data.autoEnableVisualHiding = false; QDateTime now = Tools::currentDateTimeUtc(); m_data.nameChanged = now; m_data.descriptionChanged = now; m_data.defaultUserNameChanged = now; m_recycleBinChanged = now; m_entryTemplatesGroupChanged = now; m_masterKeyChanged = now; } template bool Metadata::set(P& property, const V& value) { if (property != value) { property = value; Q_EMIT modified(); return true; } else { return false; } } template bool Metadata::set(P& property, const V& value, QDateTime& dateTime) { if (property != value) { property = value; if (m_updateDatetime) { dateTime = Tools::currentDateTimeUtc(); } Q_EMIT modified(); return true; } else { return false; } } void Metadata::setUpdateDatetime(bool value) { m_updateDatetime = value; } void Metadata::copyAttributesFrom(const Metadata* other) { m_data = other->m_data; } QString Metadata::generator() const { return m_data.generator; } QString Metadata::name() const { return m_data.name; } QDateTime Metadata::nameChanged() const { return m_data.nameChanged; } QString Metadata::description() const { return m_data.description; } QDateTime Metadata::descriptionChanged() const { return m_data.descriptionChanged; } QString Metadata::defaultUserName() const { return m_data.defaultUserName; } QDateTime Metadata::defaultUserNameChanged() const { return m_data.defaultUserNameChanged; } int Metadata::maintenanceHistoryDays() const { return m_data.maintenanceHistoryDays; } QColor Metadata::color() const { return m_data.color; } bool Metadata::protectTitle() const { return m_data.protectTitle; } bool Metadata::protectUsername() const { return m_data.protectUsername; } bool Metadata::protectPassword() const { return m_data.protectPassword; } bool Metadata::protectUrl() const { return m_data.protectUrl; } bool Metadata::protectNotes() const { return m_data.protectNotes; } /*bool Metadata::autoEnableVisualHiding() const { return m_autoEnableVisualHiding; }*/ QImage Metadata::customIcon(const Uuid& uuid) const { return m_customIcons.value(uuid); } QPixmap Metadata::customIconPixmap(const Uuid& uuid) const { QPixmap pixmap; if (!m_customIcons.contains(uuid)) { return pixmap; } QPixmapCache::Key& cacheKey = m_customIconCacheKeys[uuid]; if (!QPixmapCache::find(cacheKey, &pixmap)) { pixmap = QPixmap::fromImage(m_customIcons.value(uuid)); cacheKey = QPixmapCache::insert(pixmap); } return pixmap; } QPixmap Metadata::customIconScaledPixmap(const Uuid& uuid) const { QPixmap pixmap; if (!m_customIcons.contains(uuid)) { return pixmap; } QPixmapCache::Key& cacheKey = m_customIconScaledCacheKeys[uuid]; if (!QPixmapCache::find(cacheKey, &pixmap)) { QImage image = m_customIcons.value(uuid).scaled(16, 16, Qt::KeepAspectRatio, Qt::SmoothTransformation); pixmap = QPixmap::fromImage(image); cacheKey = QPixmapCache::insert(pixmap); } return pixmap; } bool Metadata::containsCustomIcon(const Uuid& uuid) const { return m_customIcons.contains(uuid); } QHash Metadata::customIcons() const { return m_customIcons; } QHash Metadata::customIconsScaledPixmaps() const { QHash result; Q_FOREACH (const Uuid& uuid, m_customIconsOrder) { result.insert(uuid, customIconScaledPixmap(uuid)); } return result; } QList Metadata::customIconsOrder() const { return m_customIconsOrder; } bool Metadata::recycleBinEnabled() const { return m_data.recycleBinEnabled; } Group* Metadata::recycleBin() { return m_recycleBin; } const Group* Metadata::recycleBin() const { return m_recycleBin; } QDateTime Metadata::recycleBinChanged() const { return m_recycleBinChanged; } const Group* Metadata::entryTemplatesGroup() const { return m_entryTemplatesGroup; } QDateTime Metadata::entryTemplatesGroupChanged() const { return m_entryTemplatesGroupChanged; } const Group* Metadata::lastSelectedGroup() const { return m_lastSelectedGroup; } const Group* Metadata::lastTopVisibleGroup() const { return m_lastTopVisibleGroup; } QDateTime Metadata::masterKeyChanged() const { return m_masterKeyChanged; } int Metadata::masterKeyChangeRec() const { return m_data.masterKeyChangeRec; } int Metadata::masterKeyChangeForce() const { return m_data.masterKeyChangeForce; } int Metadata::historyMaxItems() const { return m_data.historyMaxItems; } int Metadata::historyMaxSize() const { return m_data.historyMaxSize; } QHash Metadata::customFields() const { return m_customFields; } void Metadata::setGenerator(const QString& value) { set(m_data.generator, value); } void Metadata::setName(const QString& value) { if (set(m_data.name, value, m_data.nameChanged)) { Q_EMIT nameTextChanged(); } } void Metadata::setNameChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_data.nameChanged = value; } void Metadata::setDescription(const QString& value) { set(m_data.description, value, m_data.descriptionChanged); } void Metadata::setDescriptionChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_data.descriptionChanged = value; } void Metadata::setDefaultUserName(const QString& value) { set(m_data.defaultUserName, value, m_data.defaultUserNameChanged); } void Metadata::setDefaultUserNameChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_data.defaultUserNameChanged = value; } void Metadata::setMaintenanceHistoryDays(int value) { set(m_data.maintenanceHistoryDays, value); } void Metadata::setColor(const QColor& value) { set(m_data.color, value); } void Metadata::setProtectTitle(bool value) { set(m_data.protectTitle, value); } void Metadata::setProtectUsername(bool value) { set(m_data.protectUsername, value); } void Metadata::setProtectPassword(bool value) { set(m_data.protectPassword, value); } void Metadata::setProtectUrl(bool value) { set(m_data.protectUrl, value); } void Metadata::setProtectNotes(bool value) { set(m_data.protectNotes, value); } /*void Metadata::setAutoEnableVisualHiding(bool value) { set(m_autoEnableVisualHiding, value); }*/ void Metadata::addCustomIcon(const Uuid& uuid, const QImage& icon) { Q_ASSERT(!uuid.isNull()); Q_ASSERT(!m_customIcons.contains(uuid)); m_customIcons.insert(uuid, icon); // reset cache in case there is also an icon with that uuid m_customIconCacheKeys[uuid] = QPixmapCache::Key(); m_customIconScaledCacheKeys[uuid] = QPixmapCache::Key(); m_customIconsOrder.append(uuid); Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); Q_EMIT modified(); } void Metadata::addCustomIconScaled(const Uuid& uuid, const QImage& icon) { QImage iconScaled; // scale down to 128x128 if icon is larger if (icon.width() > 128 || icon.height() > 128) { iconScaled = icon.scaled(QSize(128, 128), Qt::KeepAspectRatio, Qt::SmoothTransformation); } else { iconScaled = icon; } addCustomIcon(uuid, iconScaled); } void Metadata::removeCustomIcon(const Uuid& uuid) { Q_ASSERT(!uuid.isNull()); Q_ASSERT(m_customIcons.contains(uuid)); m_customIcons.remove(uuid); QPixmapCache::remove(m_customIconCacheKeys.value(uuid)); m_customIconCacheKeys.remove(uuid); QPixmapCache::remove(m_customIconScaledCacheKeys.value(uuid)); m_customIconScaledCacheKeys.remove(uuid); m_customIconsOrder.removeAll(uuid); Q_ASSERT(m_customIcons.count() == m_customIconsOrder.count()); Q_EMIT modified(); } void Metadata::copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata) { Q_FOREACH (const Uuid& uuid, iconList) { Q_ASSERT(otherMetadata->containsCustomIcon(uuid)); if (!containsCustomIcon(uuid) && otherMetadata->containsCustomIcon(uuid)) { addCustomIcon(uuid, otherMetadata->customIcon(uuid)); } } } void Metadata::setRecycleBinEnabled(bool value) { set(m_data.recycleBinEnabled, value); } void Metadata::setRecycleBin(Group* group) { set(m_recycleBin, group, m_recycleBinChanged); } void Metadata::setRecycleBinChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_recycleBinChanged = value; } void Metadata::setEntryTemplatesGroup(Group* group) { set(m_entryTemplatesGroup, group, m_entryTemplatesGroupChanged); } void Metadata::setEntryTemplatesGroupChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_entryTemplatesGroupChanged = value; } void Metadata::setLastSelectedGroup(Group* group) { set(m_lastSelectedGroup, group); } void Metadata::setLastTopVisibleGroup(Group* group) { set(m_lastTopVisibleGroup, group); } void Metadata::setMasterKeyChanged(const QDateTime& value) { Q_ASSERT(value.timeSpec() == Qt::UTC); m_masterKeyChanged = value; } void Metadata::setMasterKeyChangeRec(int value) { set(m_data.masterKeyChangeRec, value); } void Metadata::setMasterKeyChangeForce(int value) { set(m_data.masterKeyChangeForce, value); } void Metadata::setHistoryMaxItems(int value) { set(m_data.historyMaxItems, value); } void Metadata::setHistoryMaxSize(int value) { set(m_data.historyMaxSize, value); } void Metadata::addCustomField(const QString& key, const QString& value) { Q_ASSERT(!m_customFields.contains(key)); m_customFields.insert(key, value); Q_EMIT modified(); } void Metadata::removeCustomField(const QString& key) { Q_ASSERT(m_customFields.contains(key)); m_customFields.remove(key); Q_EMIT modified(); } keepassx-2.0.3/src/core/Metadata.h000066400000000000000000000135631276304217300167640ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_METADATA_H #define KEEPASSX_METADATA_H #include #include #include #include #include #include #include #include "core/Global.h" #include "core/Uuid.h" class Database; class Group; class Metadata : public QObject { Q_OBJECT public: explicit Metadata(QObject* parent = Q_NULLPTR); struct MetadataData { QString generator; QString name; QDateTime nameChanged; QString description; QDateTime descriptionChanged; QString defaultUserName; QDateTime defaultUserNameChanged; int maintenanceHistoryDays; QColor color; bool recycleBinEnabled; int historyMaxItems; int historyMaxSize; int masterKeyChangeRec; int masterKeyChangeForce; bool protectTitle; bool protectUsername; bool protectPassword; bool protectUrl; bool protectNotes; // bool autoEnableVisualHiding; }; QString generator() const; QString name() const; QDateTime nameChanged() const; QString description() const; QDateTime descriptionChanged() const; QString defaultUserName() const; QDateTime defaultUserNameChanged() const; int maintenanceHistoryDays() const; QColor color() const; bool protectTitle() const; bool protectUsername() const; bool protectPassword() const; bool protectUrl() const; bool protectNotes() const; // bool autoEnableVisualHiding() const; QImage customIcon(const Uuid& uuid) const; QPixmap customIconPixmap(const Uuid& uuid) const; QPixmap customIconScaledPixmap(const Uuid& uuid) const; bool containsCustomIcon(const Uuid& uuid) const; QHash customIcons() const; QList customIconsOrder() const; bool recycleBinEnabled() const; QHash customIconsScaledPixmaps() const; Group* recycleBin(); const Group* recycleBin() const; QDateTime recycleBinChanged() const; const Group* entryTemplatesGroup() const; QDateTime entryTemplatesGroupChanged() const; const Group* lastSelectedGroup() const; const Group* lastTopVisibleGroup() const; QDateTime masterKeyChanged() const; int masterKeyChangeRec() const; int masterKeyChangeForce() const; int historyMaxItems() const; int historyMaxSize() const; QHash customFields() const; static const int DefaultHistoryMaxItems; static const int DefaultHistoryMaxSize; void setGenerator(const QString& value); void setName(const QString& value); void setNameChanged(const QDateTime& value); void setDescription(const QString& value); void setDescriptionChanged(const QDateTime& value); void setDefaultUserName(const QString& value); void setDefaultUserNameChanged(const QDateTime& value); void setMaintenanceHistoryDays(int value); void setColor(const QColor& value); void setProtectTitle(bool value); void setProtectUsername(bool value); void setProtectPassword(bool value); void setProtectUrl(bool value); void setProtectNotes(bool value); // void setAutoEnableVisualHiding(bool value); void addCustomIcon(const Uuid& uuid, const QImage& icon); void addCustomIconScaled(const Uuid& uuid, const QImage& icon); void removeCustomIcon(const Uuid& uuid); void copyCustomIcons(const QSet& iconList, const Metadata* otherMetadata); void setRecycleBinEnabled(bool value); void setRecycleBin(Group* group); void setRecycleBinChanged(const QDateTime& value); void setEntryTemplatesGroup(Group* group); void setEntryTemplatesGroupChanged(const QDateTime& value); void setLastSelectedGroup(Group* group); void setLastTopVisibleGroup(Group* group); void setMasterKeyChanged(const QDateTime& value); void setMasterKeyChangeRec(int value); void setMasterKeyChangeForce(int value); void setHistoryMaxItems(int value); void setHistoryMaxSize(int value); void addCustomField(const QString& key, const QString& value); void removeCustomField(const QString& key); void setUpdateDatetime(bool value); /* * Copy all attributes from other except: * - Group pointers/uuids * - Master key changed date * - Custom icons * - Custom fields */ void copyAttributesFrom(const Metadata* other); Q_SIGNALS: void nameTextChanged(); void modified(); private: template bool set(P& property, const V& value); template bool set(P& property, const V& value, QDateTime& dateTime); MetadataData m_data; QHash m_customIcons; mutable QHash m_customIconCacheKeys; mutable QHash m_customIconScaledCacheKeys; QList m_customIconsOrder; QPointer m_recycleBin; QDateTime m_recycleBinChanged; QPointer m_entryTemplatesGroup; QDateTime m_entryTemplatesGroupChanged; QPointer m_lastSelectedGroup; QPointer m_lastTopVisibleGroup; QDateTime m_masterKeyChanged; QHash m_customFields; bool m_updateDatetime; }; #endif // KEEPASSX_METADATA_H keepassx-2.0.3/src/core/PasswordGenerator.cpp000066400000000000000000000110131276304217300212340ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "PasswordGenerator.h" #include "crypto/Random.h" PasswordGenerator::PasswordGenerator() : m_length(0) , m_classes(0) , m_flags(0) { } void PasswordGenerator::setLength(int length) { m_length = length; } void PasswordGenerator::setCharClasses(const CharClasses& classes) { m_classes = classes; } void PasswordGenerator::setFlags(const GeneratorFlags& flags) { m_flags = flags; } QString PasswordGenerator::generatePassword() const { Q_ASSERT(isValid()); QVector groups = passwordGroups(); QVector passwordChars; Q_FOREACH (const PasswordGroup& group, groups) { Q_FOREACH (QChar ch, group) { passwordChars.append(ch); } } QString password; if (m_flags & CharFromEveryGroup) { for (int i = 0; i < groups.size(); i++) { int pos = randomGen()->randomUInt(groups[i].size()); password.append(groups[i][pos]); } for (int i = groups.size(); i < m_length; i++) { int pos = randomGen()->randomUInt(passwordChars.size()); password.append(passwordChars[pos]); } // shuffle chars for (int i = (password.size() - 1); i >= 1; i--) { int j = randomGen()->randomUInt(i + 1); QChar tmp = password[i]; password[i] = password[j]; password[j] = tmp; } } else { for (int i = 0; i < m_length; i++) { int pos = randomGen()->randomUInt(passwordChars.size()); password.append(passwordChars[pos]); } } return password; } bool PasswordGenerator::isValid() const { if (m_classes == 0) { return false; } else if (m_length == 0) { return false; } if ((m_flags & CharFromEveryGroup) && (m_length < numCharClasses())) { return false; } return true; } QVector PasswordGenerator::passwordGroups() const { QVector passwordGroups; if (m_classes & LowerLetters) { PasswordGroup group; for (int i = 97; i < (97 + 26); i++) { if ((m_flags & ExcludeLookAlike) && (i == 108)) { // "l" continue; } group.append(i); } passwordGroups.append(group); } if (m_classes & UpperLetters) { PasswordGroup group; for (int i = 65; i < (65 + 26); i++) { if ((m_flags & ExcludeLookAlike) && (i == 73 || i == 79)) { // "I" and "O" continue; } group.append(i); } passwordGroups.append(group); } if (m_classes & Numbers) { PasswordGroup group; for (int i = 48; i < (48 + 10); i++) { if ((m_flags & ExcludeLookAlike) && (i == 48 || i == 49)) { // "0" and "1" continue; } group.append(i); } passwordGroups.append(group); } if (m_classes & SpecialCharacters) { PasswordGroup group; for (int i = 33; i <= 47; i++) { group.append(i); } for (int i = 58; i <= 64; i++) { group.append(i); } for (int i = 91; i <= 96; i++) { group.append(i); } for (int i = 123; i <= 126; i++) { if ((m_flags & ExcludeLookAlike) && (i == 124)) { // "|" continue; } group.append(i); } passwordGroups.append(group); } return passwordGroups; } int PasswordGenerator::numCharClasses() const { int numClasses = 0; if (m_classes & LowerLetters) { numClasses++; } if (m_classes & UpperLetters) { numClasses++; } if (m_classes & Numbers) { numClasses++; } if (m_classes & SpecialCharacters) { numClasses++; } return numClasses; } keepassx-2.0.3/src/core/PasswordGenerator.h000066400000000000000000000035731276304217300207150ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_PASSWORDGENERATOR_H #define KEEPASSX_PASSWORDGENERATOR_H #include #include #include #include "core/Global.h" typedef QVector PasswordGroup; class PasswordGenerator { public: enum CharClass { LowerLetters = 0x1, UpperLetters = 0x2, Numbers = 0x4, SpecialCharacters = 0x8 }; Q_DECLARE_FLAGS(CharClasses, CharClass) enum GeneratorFlag { ExcludeLookAlike = 0x1, CharFromEveryGroup = 0x2 }; Q_DECLARE_FLAGS(GeneratorFlags, GeneratorFlag) public: PasswordGenerator(); void setLength(int length); void setCharClasses(const CharClasses& classes); void setFlags(const GeneratorFlags& flags); bool isValid() const; QString generatePassword() const; private: QVector passwordGroups() const; int numCharClasses() const; int m_length; CharClasses m_classes; GeneratorFlags m_flags; Q_DISABLE_COPY(PasswordGenerator) }; Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::CharClasses) Q_DECLARE_OPERATORS_FOR_FLAGS(PasswordGenerator::GeneratorFlags) #endif // KEEPASSX_PASSWORDGENERATOR_H keepassx-2.0.3/src/core/SignalMultiplexer.cpp000066400000000000000000000072701276304217300212450ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SignalMultiplexer.h" SignalMultiplexer::SignalMultiplexer() { } SignalMultiplexer::~SignalMultiplexer() { // disconnect all connections setCurrentObject(Q_NULLPTR); } QObject* SignalMultiplexer::currentObject() const { return m_currentObject; } void SignalMultiplexer::setCurrentObject(QObject* object) { // remove all Connections from the list whoes senders/receivers have been deleted QMutableListIterator i = m_connections; while (i.hasNext()) { const Connection& con = i.next(); if (!con.sender && !con.receiver) { i.remove(); } } if (m_currentObject) { Q_FOREACH (const Connection& con, m_connections) { disconnect(con); } } m_currentObject = object; if (object) { Q_FOREACH (const Connection& con, m_connections) { connect(con); } } } void SignalMultiplexer::connect(QObject* sender, const char* signal, const char* slot) { Q_ASSERT(sender); Connection con; con.slot = slot; con.sender = sender; con.signal = signal; m_connections << con; if (m_currentObject) { connect(con); } } void SignalMultiplexer::connect(const char* signal, QObject* receiver, const char* slot) { Q_ASSERT(receiver); Connection con; con.receiver = receiver; con.signal = signal; con.slot = slot; m_connections << con; if (m_currentObject) { connect(con); } } void SignalMultiplexer::disconnect(QObject* sender, const char* signal, const char* slot) { Q_ASSERT(sender); QMutableListIterator i = m_connections; while (i.hasNext()) { const Connection& con = i.next(); if (con.sender == sender && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { if (m_currentObject) { disconnect(con); } i.remove(); } } } void SignalMultiplexer::disconnect(const char* signal, QObject* receiver, const char* slot) { Q_ASSERT(receiver); QMutableListIterator i = m_connections; while (i.hasNext()) { const Connection& con = i.next(); if (con.receiver == receiver && qstrcmp(con.signal, signal) == 0 && qstrcmp(con.slot, slot) == 0) { if (m_currentObject) { disconnect(con); } i.remove(); } } } void SignalMultiplexer::connect(const Connection& con) { Q_ASSERT(con.sender || con.receiver); if (con.sender) { QObject::connect(con.sender, con.signal, m_currentObject, con.slot); } else { QObject::connect(m_currentObject, con.signal, con.receiver, con.slot); } } void SignalMultiplexer::disconnect(const Connection& con) { Q_ASSERT(con.sender || con.receiver); if (con.sender) { QObject::disconnect(con.sender, con.signal, m_currentObject, con.slot); } else { QObject::disconnect(m_currentObject, con.signal, con.receiver, con.slot); } } keepassx-2.0.3/src/core/SignalMultiplexer.h000066400000000000000000000033061276304217300207060ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SIGNALMULTIPLEXER_H #define KEEPASSX_SIGNALMULTIPLEXER_H #include #include #include "core/Global.h" class SignalMultiplexer { public: SignalMultiplexer(); ~SignalMultiplexer(); QObject* currentObject() const; void setCurrentObject(QObject* object); void connect(QObject* sender, const char* signal, const char* slot); void disconnect(QObject* sender, const char* signal, const char* slot); void connect(const char* signal, QObject* receiver, const char* slot); void disconnect(const char* signal, QObject* receiver, const char* slot); private: struct Connection { QPointer sender; QPointer receiver; const char* signal; const char* slot; }; void connect(const Connection& con); void disconnect(const Connection& con); QPointer m_currentObject; QList m_connections; Q_DISABLE_COPY(SignalMultiplexer) }; #endif // KEEPASSX_SIGNALMULTIPLEXER_H keepassx-2.0.3/src/core/TimeDelta.cpp000066400000000000000000000030471276304217300174430ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TimeDelta.h" #include QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta) { return dateTime.addDays(delta.getDays()) .addMonths(delta.getMonths()) .addYears(delta.getYears()); } TimeDelta TimeDelta::fromDays(int days) { return TimeDelta(days, 0, 0); } TimeDelta TimeDelta::fromMonths(int months) { return TimeDelta(0, months, 0); } TimeDelta TimeDelta::fromYears(int years) { return TimeDelta(0, 0, years); } TimeDelta::TimeDelta() : m_days(0) , m_months(0) , m_years(0) { } TimeDelta::TimeDelta(int days, int months, int years) : m_days(days) , m_months(months) , m_years(years) { } int TimeDelta::getDays() const { return m_days; } int TimeDelta::getMonths() const { return m_months; } int TimeDelta::getYears() const { return m_years; } keepassx-2.0.3/src/core/TimeDelta.h000066400000000000000000000024561276304217300171130ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TIMEDELTA_H #define KEEPASSX_TIMEDELTA_H #include class QDateTime; class TimeDelta; QDateTime operator+(const QDateTime& dateTime, const TimeDelta& delta); class TimeDelta { public: static TimeDelta fromDays(int days); static TimeDelta fromMonths(int months); static TimeDelta fromYears(int years); TimeDelta(); TimeDelta(int days, int months, int years); int getDays() const; int getMonths() const; int getYears() const; private: int m_days; int m_months; int m_years; }; Q_DECLARE_METATYPE(TimeDelta) #endif // KEEPASSX_TIMEDELTA_H keepassx-2.0.3/src/core/TimeInfo.cpp000066400000000000000000000045251276304217300173070ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TimeInfo.h" #include "core/Tools.h" TimeInfo::TimeInfo() : m_expires(false) , m_usageCount(0) { QDateTime now = Tools::currentDateTimeUtc(); m_lastModificationTime = now; m_creationTime = now; m_lastAccessTime = now; m_expiryTime = now; m_locationChanged = now; } QDateTime TimeInfo::lastModificationTime() const { return m_lastModificationTime; } QDateTime TimeInfo::creationTime() const { return m_creationTime; } QDateTime TimeInfo::lastAccessTime() const { return m_lastAccessTime; } QDateTime TimeInfo::expiryTime() const { return m_expiryTime; } bool TimeInfo::expires() const { return m_expires; } int TimeInfo::usageCount() const { return m_usageCount; } QDateTime TimeInfo::locationChanged() const { return m_locationChanged; } void TimeInfo::setLastModificationTime(const QDateTime& dateTime) { Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_lastModificationTime = dateTime; } void TimeInfo::setCreationTime(const QDateTime& dateTime) { Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_creationTime = dateTime; } void TimeInfo::setLastAccessTime(const QDateTime& dateTime) { Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_lastAccessTime = dateTime; } void TimeInfo::setExpiryTime(const QDateTime& dateTime) { Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_expiryTime = dateTime; } void TimeInfo::setExpires(bool expires) { m_expires = expires; } void TimeInfo::setUsageCount(int count) { m_usageCount = count; } void TimeInfo::setLocationChanged(const QDateTime& dateTime) { Q_ASSERT(dateTime.timeSpec() == Qt::UTC); m_locationChanged = dateTime; } keepassx-2.0.3/src/core/TimeInfo.h000066400000000000000000000032061276304217300167470ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TIMEINFO_H #define KEEPASSX_TIMEINFO_H #include class TimeInfo { public: TimeInfo(); QDateTime lastModificationTime() const; QDateTime creationTime() const; QDateTime lastAccessTime() const; QDateTime expiryTime() const; bool expires() const; int usageCount() const; QDateTime locationChanged() const; void setLastModificationTime(const QDateTime& dateTime); void setCreationTime(const QDateTime& dateTime); void setLastAccessTime(const QDateTime& dateTime); void setExpiryTime(const QDateTime& dateTime); void setExpires(bool expires); void setUsageCount(int count); void setLocationChanged(const QDateTime& dateTime); private: QDateTime m_lastModificationTime; QDateTime m_creationTime; QDateTime m_lastAccessTime; QDateTime m_expiryTime; bool m_expires; int m_usageCount; QDateTime m_locationChanged; }; #endif // KEEPASSX_TIMEINFO_H keepassx-2.0.3/src/core/ToDbExporter.cpp000066400000000000000000000024731276304217300201560ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "ToDbExporter.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" Database* ToDbExporter::exportGroup(Group* group) { Database* oldDb = group->database(); Q_ASSERT(oldDb); Database* db = new Database(); Group* clonedGroup = group->clone(Entry::CloneNewUuid | Entry::CloneIncludeHistory); clonedGroup->setParent(db->rootGroup()); QSet customIcons = group->customIconsRecursive(); db->metadata()->copyCustomIcons(customIcons, oldDb->metadata()); db->copyAttributesFrom(oldDb); return db; } keepassx-2.0.3/src/core/ToDbExporter.h000066400000000000000000000017601276304217300176210ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TODBEXPORTER_H #define KEEPASSX_TODBEXPORTER_H #include "core/Exporter.h" class Database; class Group; class ToDbExporter : Exporter { public: Database* exportGroup(Group* group); }; #endif // KEEPASSX_TODBEXPORTER_H keepassx-2.0.3/src/core/Tools.cpp000066400000000000000000000136511276304217300166750ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Tools.h" #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) #include #else #include #endif #ifdef Q_OS_WIN #include // for Sleep(), SetDllDirectoryA() and SetSearchPathMode() #endif #ifdef Q_OS_UNIX #include // for nanosleep() #endif #include "config-keepassx.h" #if defined(HAVE_RLIMIT_CORE) #include #endif #if defined(HAVE_PR_SET_DUMPABLE) #include #endif #ifdef HAVE_PT_DENY_ATTACH #include #include #endif namespace Tools { QString humanReadableFileSize(qint64 bytes) { double size = bytes; QStringList units = QStringList() << "B" << "KiB" << "MiB" << "GiB"; int i = 0; int maxI = units.size() - 1; while ((size >= 1024) && (i < maxI)) { size /= 1024; i++; } return QString("%1 %2").arg(QLocale().toString(size, 'f', 2), units.at(i)); } bool hasChild(const QObject* parent, const QObject* child) { if (!parent || !child) { return false; } Q_FOREACH (QObject* c, parent->children()) { if (child == c || hasChild(c, child)) { return true; } } return false; } bool readFromDevice(QIODevice* device, QByteArray& data, int size) { QByteArray buffer; buffer.resize(size); qint64 readResult = device->read(buffer.data(), size); if (readResult == -1) { return false; } else { buffer.resize(readResult); data = buffer; return true; } } bool readAllFromDevice(QIODevice* device, QByteArray& data) { QByteArray result; qint64 readBytes = 0; qint64 readResult; do { result.resize(result.size() + 16384); readResult = device->read(result.data() + readBytes, result.size() - readBytes); if (readResult > 0) { readBytes += readResult; } } while (readResult > 0); if (readResult == -1) { return false; } else { result.resize(static_cast(readBytes)); data = result; return true; } } QDateTime currentDateTimeUtc() { #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) return QDateTime::currentDateTimeUtc(); #else return QDateTime::currentDateTime().toUTC(); #endif } QString imageReaderFilter() { QList formats = QImageReader::supportedImageFormats(); QStringList formatsStringList; Q_FOREACH (const QByteArray& format, formats) { for (int i = 0; i < format.size(); i++) { if (!QChar(format.at(i)).isLetterOrNumber()) { continue; } } formatsStringList.append("*." + QString::fromLatin1(format).toLower()); } return formatsStringList.join(" "); } bool isHex(const QByteArray& ba) { Q_FOREACH (char c, ba) { if ( !( (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F') ) ) { return false; } } return true; } bool isBase64(const QByteArray& ba) { QRegExp regexp("^(?:[a-z0-9+/]{4})*(?:[a-z0-9+/]{3}=|[a-z0-9+/]{2}==)?$", Qt::CaseInsensitive, QRegExp::RegExp2); QString base64 = QString::fromLatin1(ba.constData(), ba.size()); return regexp.exactMatch(base64); } void sleep(int ms) { Q_ASSERT(ms >= 0); if (ms == 0) { return; } #ifdef Q_OS_WIN Sleep(uint(ms)); #else timespec ts; ts.tv_sec = ms / 1000; ts.tv_nsec = (ms % 1000) * 1000 * 1000; nanosleep(&ts, Q_NULLPTR); #endif } void wait(int ms) { Q_ASSERT(ms >= 0); if (ms == 0) { return; } #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) QElapsedTimer timer; #else QTime timer; #endif timer.start(); if (ms <= 50) { QCoreApplication::processEvents(QEventLoop::AllEvents, ms); sleep(qMax(ms - static_cast(timer.elapsed()), 0)); } else { int timeLeft; do { timeLeft = ms - timer.elapsed(); if (timeLeft > 0) { QCoreApplication::processEvents(QEventLoop::AllEvents, timeLeft); sleep(10); } } while (timer.elapsed() < ms); } } QString platform() { #if defined(Q_WS_X11) return "x11"; #elif defined(Q_WS_MAC) return "mac"; #elif defined(Q_WS_WIN) return "win"; #else return QString(); #endif } void disableCoreDumps() { // default to true // there is no point in printing a warning if this is not implemented on the platform bool success = true; #if defined(HAVE_RLIMIT_CORE) struct rlimit limit; limit.rlim_cur = 0; limit.rlim_max = 0; success = success && (setrlimit(RLIMIT_CORE, &limit) == 0); #endif #if defined(HAVE_PR_SET_DUMPABLE) success = success && (prctl(PR_SET_DUMPABLE, 0) == 0); #endif // Mac OS X #ifdef HAVE_PT_DENY_ATTACH success = success && (ptrace(PT_DENY_ATTACH, 0, 0, 0) == 0); #endif if (!success) { qWarning("Unable to disable core dumps."); } } void setupSearchPaths() { #ifdef Q_OS_WIN // Make sure Windows doesn't load DLLs from the current working directory SetDllDirectoryA(""); SetSearchPathMode(BASE_SEARCH_PATH_ENABLE_SAFE_SEARCHMODE); #endif } } // namespace Tools keepassx-2.0.3/src/core/Tools.h000066400000000000000000000026111276304217300163340ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TOOLS_H #define KEEPASSX_TOOLS_H #include #include #include #include "core/Global.h" class QIODevice; namespace Tools { QString humanReadableFileSize(qint64 bytes); bool hasChild(const QObject* parent, const QObject* child); bool readFromDevice(QIODevice* device, QByteArray& data, int size = 16384); bool readAllFromDevice(QIODevice* device, QByteArray& data); QDateTime currentDateTimeUtc(); QString imageReaderFilter(); bool isHex(const QByteArray& ba); bool isBase64(const QByteArray& ba); void sleep(int ms); void wait(int ms); QString platform(); void disableCoreDumps(); void setupSearchPaths(); } // namespace Tools #endif // KEEPASSX_TOOLS_H keepassx-2.0.3/src/core/Translator.cpp000066400000000000000000000074611276304217300177300ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Translator.h" #include #include #include #include #include #include #include "config-keepassx.h" #include "core/Config.h" #include "core/FilePath.h" void Translator::installTranslator() { QString language = config()->get("GUI/Language").toString(); if (language == "system" || language.isEmpty()) { language = QLocale::system().name(); } if (!installTranslator(language)) { // English fallback still needs translations for plurals if (!installTranslator("en_plurals")) { qWarning("Couldn't load translations."); } } installQtTranslator(language); availableLanguages(); } QList > Translator::availableLanguages() { QStringList paths; #ifdef QT_DEBUG paths.append(QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR)); #endif paths.append(filePath()->dataPath("translations")); QList > languages; languages.append(QPair("system", "System default")); QRegExp regExp("keepassx_([a-zA-Z_]+)\\.qm", Qt::CaseInsensitive, QRegExp::RegExp2); Q_FOREACH (const QString& path, paths) { Q_FOREACH (const QString& filename, QDir(path).entryList()) { if (regExp.exactMatch(filename)) { QString langcode = regExp.cap(1); if (langcode == "en_plurals") { langcode = "en"; } QLocale locale(langcode); QString languageStr = QLocale::languageToString(locale.language()); QString countryStr; if (langcode.contains("_")) { countryStr = QString(" (%1)").arg(QLocale::countryToString(locale.country())); } QPair language(langcode, languageStr + countryStr); languages.append(language); } } } return languages; } bool Translator::installTranslator(const QString& language) { QStringList paths; #ifdef QT_DEBUG paths.append(QString("%1/share/translations").arg(KEEPASSX_BINARY_DIR)); #endif paths.append(filePath()->dataPath("translations")); Q_FOREACH (const QString& path, paths) { if (installTranslator(language, path)) { return true; } } return false; } bool Translator::installTranslator(const QString& language, const QString& path) { QTranslator* translator = new QTranslator(qApp); if (translator->load(QString("keepassx_").append(language), path)) { QCoreApplication::installTranslator(translator); return true; } else { delete translator; return false; } } bool Translator::installQtTranslator(const QString& language) { QTranslator* qtTranslator = new QTranslator(qApp); if (qtTranslator->load(QString("%1/qt_%2").arg(QLibraryInfo::location(QLibraryInfo::TranslationsPath), language))) { QCoreApplication::installTranslator(qtTranslator); return true; } else { delete qtTranslator; return false; } } keepassx-2.0.3/src/core/Translator.h000066400000000000000000000022421276304217300173650ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TRANSLATOR_H #define KEEPASSX_TRANSLATOR_H #include #include class Translator { public: static void installTranslator(); static QList > availableLanguages(); private: static bool installTranslator(const QString& language); static bool installTranslator(const QString& language, const QString& path); static bool installQtTranslator(const QString& language); }; #endif // KEEPASSX_TRANSLATOR_H keepassx-2.0.3/src/core/Uuid.cpp000066400000000000000000000042071276304217300165000ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Uuid.h" #include #include "crypto/Random.h" const int Uuid::Length = 16; Uuid::Uuid() : m_data(Length, 0) { } Uuid::Uuid(const QByteArray& data) { Q_ASSERT(data.size() == Length); m_data = data; } Uuid Uuid::random() { return Uuid(randomGen()->randomArray(Length)); } QString Uuid::toBase64() const { return QString::fromLatin1(m_data.toBase64()); } QString Uuid::toHex() const { return QString::fromLatin1(m_data.toHex()); } QByteArray Uuid::toByteArray() const { return m_data; } bool Uuid::isNull() const { for (int i = 0; i < m_data.size(); ++i) { if (m_data[i] != 0) { return false; } } return true; } Uuid& Uuid::operator=(const Uuid& other) { m_data = other.m_data; return *this; } bool Uuid::operator==(const Uuid& other) const { return m_data == other.m_data; } bool Uuid::operator!=(const Uuid& other) const { return !operator==(other); } Uuid Uuid::fromBase64(const QString& str) { QByteArray data = QByteArray::fromBase64(str.toLatin1()); return Uuid(data); } uint qHash(const Uuid& key) { return qHash(key.toByteArray()); } QDataStream& operator<<(QDataStream& stream, const Uuid& uuid) { return stream << uuid.toByteArray(); } QDataStream& operator>>(QDataStream& stream, Uuid& uuid) { QByteArray data; stream >> data; if (data.size() == Uuid::Length) { uuid = Uuid(data); } return stream; } keepassx-2.0.3/src/core/Uuid.h000066400000000000000000000027221276304217300161450ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_UUID_H #define KEEPASSX_UUID_H #include #include class Uuid { public: Uuid(); explicit Uuid(const QByteArray& data); static Uuid random(); QString toBase64() const; QString toHex() const; QByteArray toByteArray() const; bool isNull() const; Uuid& operator=(const Uuid& other); bool operator==(const Uuid& other) const; bool operator!=(const Uuid& other) const; static const int Length; static Uuid fromBase64(const QString& str); private: QByteArray m_data; }; Q_DECLARE_TYPEINFO(Uuid, Q_MOVABLE_TYPE); uint qHash(const Uuid& key); QDataStream& operator<<(QDataStream& stream, const Uuid& uuid); QDataStream& operator>>(QDataStream& stream, Uuid& uuid); #endif // KEEPASSX_UUID_H keepassx-2.0.3/src/core/qcommandlineoption.cpp000066400000000000000000000226161276304217300214760ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Laszlo Papp ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qcommandlineoption.h" #include class QCommandLineOptionPrivate : public QSharedData { public: inline QCommandLineOptionPrivate() { } void setNames(const QStringList &nameList); //! The list of names used for this option. QStringList names; //! The documentation name for the value, if one is expected //! Example: "-o " means valueName == "file" QString valueName; //! The description used for this option. QString description; //! The list of default values used for this option. QStringList defaultValues; }; /*! \since 5.2 \class QCommandLineOption \brief The QCommandLineOption class defines a possible command-line option. \inmodule QtCore \ingroup shared \ingroup tools This class is used to describe an option on the command line. It allows different ways of defining the same option with multiple aliases possible. It is also used to describe how the option is used - it may be a flag (e.g. \c{-v}) or take an argument (e.g. \c{-o file}). Examples: \snippet code/src_corelib_tools_qcommandlineoption.cpp 0 \sa QCommandLineParser */ /*! Constructs a command line option object with the given arguments. The name of the option is set to \a name. The name can be either short or long. If the name is one character in length, it is considered a short name. Option names must not be empty, must not start with a dash or a slash character, must not contain a \c{=} and cannot be repeated. The description is set to \a description. It is customary to add a "." at the end of the description. In addition, the \a valueName can be set if the option expects a value. The default value for the option is set to \a defaultValue. \sa setDescription(), setValueName(), setDefaultValues() */ QCommandLineOption::QCommandLineOption(const QString &name, const QString &description, const QString &valueName, const QString &defaultValue) : d(new QCommandLineOptionPrivate) { d->setNames(QStringList(name)); setValueName(valueName); setDescription(description); setDefaultValue(defaultValue); } /*! Constructs a command line option object with the given arguments. This overload allows to set multiple names for the option, for instance \c{o} and \c{output}. The names of the option are set to \a names. The names can be either short or long. Any name in the list that is one character in length is a short name. Option names must not be empty, must not start with a dash or a slash character, must not contain a \c{=} and cannot be repeated. The description is set to \a description. It is customary to add a "." at the end of the description. In addition, the \a valueName can be set if the option expects a value. The default value for the option is set to \a defaultValue. \sa setDescription(), setValueName(), setDefaultValues() */ QCommandLineOption::QCommandLineOption(const QStringList &names, const QString &description, const QString &valueName, const QString &defaultValue) : d(new QCommandLineOptionPrivate) { d->setNames(names); setValueName(valueName); setDescription(description); setDefaultValue(defaultValue); } /*! Constructs a QCommandLineOption object that is a copy of the QCommandLineOption object \a other. \sa operator=() */ QCommandLineOption::QCommandLineOption(const QCommandLineOption &other) : d(other.d) { } /*! Destroys the command line option object. */ QCommandLineOption::~QCommandLineOption() { } /*! Makes a copy of the \a other object and assigns it to this QCommandLineOption object. */ QCommandLineOption &QCommandLineOption::operator=(const QCommandLineOption &other) { d = other.d; return *this; } /*! Returns the names set for this option. */ QStringList QCommandLineOption::names() const { return d->names; } void QCommandLineOptionPrivate::setNames(const QStringList &nameList) { QStringList newNames; if (nameList.isEmpty()) qWarning("QCommandLineOption: Options must have at least one name"); Q_FOREACH (const QString &name, nameList) { if (name.isEmpty()) { qWarning("QCommandLineOption: Option names cannot be empty"); } else { const QChar c = name.at(0); if (c == QLatin1Char('-')) qWarning("QCommandLineOption: Option names cannot start with a '-'"); else if (c == QLatin1Char('/')) qWarning("QCommandLineOption: Option names cannot start with a '/'"); else if (name.contains(QLatin1Char('='))) qWarning("QCommandLineOption: Option names cannot contain a '='"); else newNames.append(name); } } // commit names = newNames; } /*! Sets the name of the expected value, for the documentation, to \a valueName. Options without a value assigned have a boolean-like behavior: either the user specifies --option or they don't. Options with a value assigned need to set a name for the expected value, for the documentation of the option in the help output. An option with names \c{o} and \c{output}, and a value name of \c{file} will appear as \c{-o, --output }. Call QCommandLineParser::argument() if you expect the option to be present only once, and QCommandLineParser::arguments() if you expect that option to be present multiple times. \sa valueName() */ void QCommandLineOption::setValueName(const QString &valueName) { d->valueName = valueName; } /*! Returns the name of the expected value. If empty, the option doesn't take a value. \sa setValueName() */ QString QCommandLineOption::valueName() const { return d->valueName; } /*! Sets the description used for this option to \a description. It is customary to add a "." at the end of the description. The description is used by QCommandLineParser::showHelp(). \sa description() */ void QCommandLineOption::setDescription(const QString &description) { d->description = description; } /*! Returns the description set for this option. \sa setDescription() */ QString QCommandLineOption::description() const { return d->description; } /*! Sets the default value used for this option to \a defaultValue. The default value is used if the user of the application does not specify the option on the command line. If \a defaultValue is empty, the option has no default values. \sa defaultValues() setDefaultValues() */ void QCommandLineOption::setDefaultValue(const QString &defaultValue) { QStringList newDefaultValues; if (!defaultValue.isEmpty()) { newDefaultValues << defaultValue; } // commit: d->defaultValues = newDefaultValues; } /*! Sets the list of default values used for this option to \a defaultValues. The default values are used if the user of the application does not specify the option on the command line. \sa defaultValues() setDefaultValue() */ void QCommandLineOption::setDefaultValues(const QStringList &defaultValues) { d->defaultValues = defaultValues; } /*! Returns the default values set for this option. \sa setDefaultValues() */ QStringList QCommandLineOption::defaultValues() const { return d->defaultValues; } keepassx-2.0.3/src/core/qcommandlineoption.h000066400000000000000000000062171276304217300211420ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Laszlo Papp ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QCOMMANDLINEOPTION_H #define QCOMMANDLINEOPTION_H #include #include class QCommandLineOptionPrivate; class QCommandLineOption { public: explicit QCommandLineOption(const QString &name, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString()); explicit QCommandLineOption(const QStringList &names, const QString &description = QString(), const QString &valueName = QString(), const QString &defaultValue = QString()); QCommandLineOption(const QCommandLineOption &other); ~QCommandLineOption(); QCommandLineOption &operator=(const QCommandLineOption &other); QStringList names() const; void setValueName(const QString &name); QString valueName() const; void setDescription(const QString &description); QString description() const; void setDefaultValue(const QString &defaultValue); void setDefaultValues(const QStringList &defaultValues); QStringList defaultValues() const; private: QSharedDataPointer d; }; #endif // QCOMMANDLINEOPTION_H keepassx-2.0.3/src/core/qcommandlineparser.cpp000066400000000000000000001023301276304217300214520ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Laszlo Papp ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qcommandlineparser.h" #include #include #include #include #include typedef QHash NameHash_t; class QCommandLineParserPrivate { public: inline QCommandLineParserPrivate() : singleDashWordOptionMode(QCommandLineParser::ParseAsCompactedShortOptions), builtinVersionOption(false), builtinHelpOption(false), needsParsing(true) { } bool parse(const QStringList &args); void checkParsed(const char *method); QStringList aliases(const QString &name) const; QString helpText() const; bool registerFoundOption(const QString &optionName); bool parseOptionValue(const QString &optionName, const QString &argument, QStringList::const_iterator *argumentIterator, QStringList::const_iterator argsEnd); //! Error text set when parse() returns false QString errorText; //! The command line options used for parsing QList commandLineOptionList; //! Hash mapping option names to their offsets in commandLineOptionList and optionArgumentList. NameHash_t nameHash; //! Option values found (only for options with a value) QHash optionValuesHash; //! Names of options found on the command line. QStringList optionNames; //! Arguments which did not belong to any option. QStringList positionalArgumentList; //! Names of options which were unknown. QStringList unknownOptionNames; //! Application description QString description; //! Documentation for positional arguments struct PositionalArgumentDefinition { QString name; QString description; QString syntax; }; QVector positionalArgumentDefinitions; //! The parsing mode for "-abc" QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode; //! Whether addVersionOption was called bool builtinVersionOption; //! Whether addHelpOption was called bool builtinHelpOption; //! True if parse() needs to be called bool needsParsing; }; QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const { const NameHash_t::const_iterator it = nameHash.find(optionName); if (it == nameHash.end()) { qWarning("QCommandLineParser: option not defined: \"%s\"", qPrintable(optionName)); return QStringList(); } return commandLineOptionList.at(*it).names(); } /*! \since 5.2 \class QCommandLineParser \inmodule QtCore \ingroup tools \brief The QCommandLineParser class provides a means for handling the command line options. QCoreApplication provides the command-line arguments as a simple list of strings. QCommandLineParser provides the ability to define a set of options, parse the command-line arguments, and store which options have actually been used, as well as option values. Any argument that isn't an option (i.e. doesn't start with a \c{-}) is stored as a "positional argument". The parser handles short names, long names, more than one name for the same option, and option values. Options on the command line are recognized as starting with a single or double \c{-} character(s). The option \c{-} (single dash alone) is a special case, often meaning standard input, and not treated as an option. The parser will treat everything after the option \c{--} (double dash) as positional arguments. Short options are single letters. The option \c{v} would be specified by passing \c{-v} on the command line. In the default parsing mode, short options can be written in a compact form, for instance \c{-abc} is equivalent to \c{-a -b -c}. The parsing mode for can be set to ParseAsLongOptions, in which case \c{-abc} will be parsed as the long option \c{abc}. Long options are more than one letter long and cannot be compacted together. The long option \c{verbose} would be passed as \c{--verbose} or \c{-verbose}. Passing values to options can be done using the assignment operator: \c{-v=value} \c{--verbose=value}, or a space: \c{-v value} \c{--verbose value}, i.e. the next argument is used as value (even if it starts with a \c{-}). The parser does not support optional values - if an option is set to require a value, one must be present. If such an option is placed last and has no value, the option will be treated as if it had not been specified. The parser does not automatically support negating or disabling long options by using the format \c{--disable-option} or \c{--no-option}. However, it is possible to handle this case explicitly by making an option with \c{no-option} as one of its names, and handling the option explicitly. Example: \snippet code/src_corelib_tools_qcommandlineparser_main.cpp 0 Known limitation: the parsing of Qt options inside QCoreApplication and subclasses happens before QCommandLineParser exists, so it can't take it into account. This means any option value that looks like a builtin Qt option, will be treated by QCoreApplication as a builtin Qt option. Example: \c{--profile -reverse} will lead to QGuiApplication seeing the -reverse option set, and removing it from QCoreApplication::arguments() before QCommandLineParser defines the \c{profile} option and parses the command line. \sa QCommandLineOption, QCoreApplication */ /*! Constructs a command line parser object. */ QCommandLineParser::QCommandLineParser() : d(new QCommandLineParserPrivate) { } /*! Destroys the command line parser object. */ QCommandLineParser::~QCommandLineParser() { delete d; } /*! \enum QCommandLineParser::SingleDashWordOptionMode This enum describes the way the parser interprets command-line options that use a single dash followed by multiple letters, as as \c{-abc}. \value ParseAsCompactedShortOptions \c{-abc} is interpreted as \c{-a -b -c}, i.e. as three short options that have been compacted on the command-line, if none of the options take a value. If \c{a} takes a value, then it is interpreted as \c{-a bc}, i.e. the short option \c{a} followed by the value \c{bc}. This is typically used in tools that behave like compilers, in order to handle options such as \c{-DDEFINE=VALUE} or \c{-I/include/path}. This is the default parsing mode. New applications are recommended to use this mode. \value ParseAsLongOptions \c{-abc} is interpreted as \c{--abc}, i.e. as the long option named \c{abc}. This is how Qt's own tools (uic, rcc...) have always been parsing arguments. This mode should be used for preserving compatibility in applications that were parsing arguments in such a way. \sa setSingleDashWordOptionMode() */ /*! Sets the parsing mode to \a singleDashWordOptionMode. This must be called before process() or parse(). */ void QCommandLineParser::setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode singleDashWordOptionMode) { d->singleDashWordOptionMode = singleDashWordOptionMode; } /*! Adds the option \a option to look for while parsing. Returns \c true if adding the option was successful; otherwise returns \c false. Adding the option fails if there is no name attached to the option, or the option has a name that clashes with an option name added before. */ bool QCommandLineParser::addOption(const QCommandLineOption &option) { QStringList optionNames = option.names(); if (!optionNames.isEmpty()) { Q_FOREACH (const QString &name, optionNames) { if (d->nameHash.contains(name)) return false; } d->commandLineOptionList.append(option); const int offset = d->commandLineOptionList.size() - 1; Q_FOREACH (const QString &name, optionNames) d->nameHash.insert(name, offset); return true; } return false; } /*! Adds the \c{-v} / \c{--version} option, which displays the version string of the application. This option is handled automatically by QCommandLineParser. You can set the actual version string by using QCoreApplication::setApplicationVersion(). Returns the option instance, which can be used to call isSet(). */ QCommandLineOption QCommandLineParser::addVersionOption() { QCommandLineOption opt(QStringList() << "v" << "version", tr("Displays version information.")); addOption(opt); d->builtinVersionOption = true; return opt; } /*! Adds the help option (\c{-h}, \c{--help} and \c{-?} on Windows) This option is handled automatically by QCommandLineParser. Remember to use setApplicationDescription to set the application description, which will be displayed when this option is used. Example: \snippet code/src_corelib_tools_qcommandlineparser_main.cpp 0 Returns the option instance, which can be used to call isSet(). */ QCommandLineOption QCommandLineParser::addHelpOption() { QCommandLineOption opt(QStringList() #ifdef Q_OS_WIN << "?" #endif << "h" << "help", tr("Displays this help.")); addOption(opt); d->builtinHelpOption = true; return opt; } /*! Sets the application \a description shown by helpText(). */ void QCommandLineParser::setApplicationDescription(const QString &description) { d->description = description; } /*! Returns the application description set in setApplicationDescription(). */ QString QCommandLineParser::applicationDescription() const { return d->description; } /*! Defines an additional argument to the application, for the benefit of the help text. The argument \a name and \a description will appear under the \c{Arguments:} section of the help. If \a syntax is specified, it will be appended to the Usage line, otherwise the \a name will be appended. Example: \snippet code/src_corelib_tools_qcommandlineparser.cpp 2 \sa addHelpOption(), helpText() */ void QCommandLineParser::addPositionalArgument(const QString &name, const QString &description, const QString &syntax) { QCommandLineParserPrivate::PositionalArgumentDefinition arg; arg.name = name; arg.description = description; arg.syntax = syntax.isEmpty() ? name : syntax; d->positionalArgumentDefinitions.append(arg); } /*! Clears the definitions of additional arguments from the help text. This is only needed for the special case of tools which support multiple commands with different options. Once the actual command has been identified, the options for this command can be defined, and the help text for the command can be adjusted accordingly. Example: \snippet code/src_corelib_tools_qcommandlineparser.cpp 3 */ void QCommandLineParser::clearPositionalArguments() { d->positionalArgumentDefinitions.clear(); } /*! Parses the command line \a arguments. Most programs don't need to call this, a simple call to process() is enough. parse() is more low-level, and only does the parsing. The application will have to take care of the error handling, using errorText() if parse() returns \c false. This can be useful for instance to show a graphical error message in graphical programs. Calling parse() instead of process() can also be useful in order to ignore unknown options temporarily, because more option definitions will be provided later on (depending on one of the arguments), before calling process(). Don't forget that \a arguments must start with the name of the executable (ignored, though). Returns \c false in case of a parse error (unknown option or missing value); returns \c true otherwise. \sa process() */ bool QCommandLineParser::parse(const QStringList &arguments) { return d->parse(arguments); } /*! Returns a translated error text for the user. This should only be called when parse() returns \c false. */ QString QCommandLineParser::errorText() const { if (!d->errorText.isEmpty()) return d->errorText; if (d->unknownOptionNames.count() == 1) return tr("Unknown option '%1'.").arg(d->unknownOptionNames.first()); if (d->unknownOptionNames.count() > 1) return tr("Unknown options: %1.").arg(d->unknownOptionNames.join(", ")); return QString(); } /*! Processes the command line \a arguments. In addition to parsing the options (like parse()), this function also handles the builtin options and handles errors. The builtin options are \c{--version} if addVersionOption was called and \c{--help} if addHelpOption was called. When invoking one of these options, or when an error happens (for instance an unknown option was passed), the current process will then stop, using the exit() function. \sa QCoreApplication::arguments(), parse() */ void QCommandLineParser::process(const QStringList &arguments) { if (!d->parse(arguments)) { fprintf(stderr, "%s\n", qPrintable(errorText())); ::exit(EXIT_FAILURE); } if (d->builtinVersionOption && isSet("version")) { printf("%s %s\n", qPrintable(QCoreApplication::applicationName()), qPrintable(QCoreApplication::applicationVersion())); ::exit(EXIT_SUCCESS); } if (d->builtinHelpOption && isSet("help")) showHelp(EXIT_SUCCESS); } /*! \overload The command line is obtained from the QCoreApplication instance \a app. */ void QCommandLineParser::process(const QCoreApplication &app) { // QCoreApplication::arguments() is static, but the app instance must exist so we require it as parameter Q_UNUSED(app); process(QCoreApplication::arguments()); } void QCommandLineParserPrivate::checkParsed(const char *method) { if (needsParsing) qWarning("QCommandLineParser: call process() or parse() before %s", method); } /*! \internal Looks up the option \a optionName (found on the command line) and register it as found. Returns \c true on success. */ bool QCommandLineParserPrivate::registerFoundOption(const QString &optionName) { if (nameHash.contains(optionName)) { optionNames.append(optionName); return true; } else { unknownOptionNames.append(optionName); return false; } } /*! \internal \brief Parse the value for a given option, if it was defined to expect one. The value is taken from the next argument, or after the equal sign in \a argument. \param optionName the short option name \param argument the argument from the command line currently parsed. Only used for -k=value parsing. \param argumentIterator iterator to the currently parsed argument. Incremented if the next argument contains the value. \param argsEnd args.end(), to check if ++argumentIterator goes out of bounds Returns \c true on success. */ bool QCommandLineParserPrivate::parseOptionValue(const QString &optionName, const QString &argument, QStringList::const_iterator *argumentIterator, QStringList::const_iterator argsEnd) { const QLatin1Char assignChar('='); const NameHash_t::const_iterator nameHashIt = nameHash.constFind(optionName); if (nameHashIt != nameHash.constEnd()) { const int assignPos = argument.indexOf(assignChar); const NameHash_t::mapped_type optionOffset = *nameHashIt; const bool withValue = !commandLineOptionList.at(optionOffset).valueName().isEmpty(); if (withValue) { if (assignPos == -1) { ++(*argumentIterator); if (*argumentIterator == argsEnd) { errorText = QCommandLineParser::tr("Missing value after '%1'.").arg(argument); return false; } optionValuesHash[optionOffset].append(*(*argumentIterator)); } else { optionValuesHash[optionOffset].append(argument.mid(assignPos + 1)); } } else { if (assignPos != -1) { errorText = QCommandLineParser::tr("Unexpected value after '%1'.").arg(argument.left(assignPos)); return false; } } } return true; } /*! \internal Parse the list of arguments \a args, and fills in optionNames, optionValuesHash, unknownOptionNames, positionalArguments, and errorText. Any results from a previous parse operation are removed. The parser will not look for further options once it encounters the option \c{--}; this does not include when \c{--} follows an option that requires a value. */ bool QCommandLineParserPrivate::parse(const QStringList &args) { needsParsing = false; bool error = false; const QString doubleDashString("--"); const QLatin1Char dashChar('-'); const QLatin1Char assignChar('='); bool doubleDashFound = false; errorText.clear(); positionalArgumentList.clear(); optionNames.clear(); unknownOptionNames.clear(); optionValuesHash.clear(); if (args.isEmpty()) { qWarning("QCommandLineParser: argument list cannot be empty, it should contain at least the executable name"); return false; } QStringList::const_iterator argumentIterator = args.begin(); ++argumentIterator; // skip executable name for (; argumentIterator != args.end() ; ++argumentIterator) { QString argument = *argumentIterator; if (doubleDashFound) { positionalArgumentList.append(argument); } else if (argument.startsWith(doubleDashString)) { if (argument.length() > 2) { QString optionName = argument.mid(2).section(assignChar, 0, 0); if (registerFoundOption(optionName)) { if (!parseOptionValue(optionName, argument, &argumentIterator, args.end())) error = true; } else { error = true; } } else { doubleDashFound = true; } } else if (argument.startsWith(dashChar)) { if (argument.size() == 1) { // single dash ("stdin") positionalArgumentList.append(argument); continue; } switch (singleDashWordOptionMode) { case QCommandLineParser::ParseAsCompactedShortOptions: { QString optionName; bool valueFound = false; for (int pos = 1 ; pos < argument.size(); ++pos) { optionName = argument.mid(pos, 1); if (!registerFoundOption(optionName)) { error = true; } else { const NameHash_t::const_iterator nameHashIt = nameHash.constFind(optionName); Q_ASSERT(nameHashIt != nameHash.constEnd()); // checked by registerFoundOption const NameHash_t::mapped_type optionOffset = *nameHashIt; const bool withValue = !commandLineOptionList.at(optionOffset).valueName().isEmpty(); if (withValue) { if (pos + 1 < argument.size()) { if (argument.at(pos + 1) == assignChar) ++pos; optionValuesHash[optionOffset].append(argument.mid(pos + 1)); valueFound = true; } break; } if (pos + 1 < argument.size() && argument.at(pos + 1) == assignChar) break; } } if (!valueFound && !parseOptionValue(optionName, argument, &argumentIterator, args.end())) error = true; break; } case QCommandLineParser::ParseAsLongOptions: { const QString optionName = argument.mid(1).section(assignChar, 0, 0); if (registerFoundOption(optionName)) { if (!parseOptionValue(optionName, argument, &argumentIterator, args.end())) error = true; } else { error = true; } break; } } } else { positionalArgumentList.append(argument); } if (argumentIterator == args.end()) break; } return !error; } /*! Checks whether the option \a name was passed to the application. Returns \c true if the option \a name was set, false otherwise. The name provided can be any long or short name of any option that was added with \c addOption(). All the options names are treated as being equivalent. If the name is not recognized or that option was not present, false is returned. Example: \snippet code/src_corelib_tools_qcommandlineparser.cpp 0 */ bool QCommandLineParser::isSet(const QString &name) const { d->checkParsed("isSet"); if (d->optionNames.contains(name)) return true; const QStringList aliases = d->aliases(name); Q_FOREACH (const QString &optionName, d->optionNames) { if (aliases.contains(optionName)) return true; } return false; } /*! Returns the option value found for the given option name \a optionName, or an empty string if not found. The name provided can be any long or short name of any option that was added with \c addOption(). All the option names are treated as being equivalent. If the name is not recognized or that option was not present, an empty string is returned. For options found by the parser, the last value found for that option is returned. If the option wasn't specified on the command line, the default value is returned. An empty string is returned if the option does not take a value. \sa values(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() */ QString QCommandLineParser::value(const QString &optionName) const { d->checkParsed("value"); const QStringList valueList = values(optionName); if (!valueList.isEmpty()) return valueList.last(); return QString(); } /*! Returns a list of option values found for the given option name \a optionName, or an empty list if not found. The name provided can be any long or short name of any option that was added with \c addOption(). All the options names are treated as being equivalent. If the name is not recognized or that option was not present, an empty list is returned. For options found by the parser, the list will contain an entry for each time the option was encountered by the parser. If the option wasn't specified on the command line, the default values are returned. An empty list is returned if the option does not take a value. \sa value(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() */ QStringList QCommandLineParser::values(const QString &optionName) const { d->checkParsed("values"); const NameHash_t::const_iterator it = d->nameHash.constFind(optionName); if (it != d->nameHash.constEnd()) { const int optionOffset = *it; QStringList values = d->optionValuesHash.value(optionOffset); if (values.isEmpty()) values = d->commandLineOptionList.at(optionOffset).defaultValues(); return values; } qWarning("QCommandLineParser: option not defined: \"%s\"", qPrintable(optionName)); return QStringList(); } /*! \overload Checks whether the \a option was passed to the application. Returns \c true if the \a option was set, false otherwise. This is the recommended way to check for options with no values. Example: \snippet code/src_corelib_tools_qcommandlineparser.cpp 1 */ bool QCommandLineParser::isSet(const QCommandLineOption &option) const { // option.names() might be empty if the constructor failed return !option.names().isEmpty() && isSet(option.names().first()); } /*! \overload Returns the option value found for the given \a option, or an empty string if not found. For options found by the parser, the last value found for that option is returned. If the option wasn't specified on the command line, the default value is returned. An empty string is returned if the option does not take a value. \sa values(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() */ QString QCommandLineParser::value(const QCommandLineOption &option) const { return value(option.names().first()); } /*! \overload Returns a list of option values found for the given \a option, or an empty list if not found. For options found by the parser, the list will contain an entry for each time the option was encountered by the parser. If the option wasn't specified on the command line, the default values are returned. An empty list is returned if the option does not take a value. \sa value(), QCommandLineOption::setDefaultValue(), QCommandLineOption::setDefaultValues() */ QStringList QCommandLineParser::values(const QCommandLineOption &option) const { return values(option.names().first()); } /*! Returns a list of positional arguments. These are all of the arguments that were not recognized as part of an option. */ QStringList QCommandLineParser::positionalArguments() const { d->checkParsed("positionalArguments"); return d->positionalArgumentList; } /*! Returns a list of option names that were found. This returns a list of all the recognized option names found by the parser, in the order in which they were found. For any long options that were in the form {--option=value}, the value part will have been dropped. The names in this list do not include the preceding dash characters. Names may appear more than once in this list if they were encountered more than once by the parser. Any entry in the list can be used with \c value() or with \c values() to get any relevant option values. */ QStringList QCommandLineParser::optionNames() const { d->checkParsed("optionNames"); return d->optionNames; } /*! Returns a list of unknown option names. This list will include both long an short name options that were not recognized. For any long options that were in the form {--option=value}, the value part will have been dropped and only the long name is added. The names in this list do not include the preceding dash characters. Names may appear more than once in this list if they were encountered more than once by the parser. \sa optionNames() */ QStringList QCommandLineParser::unknownOptionNames() const { d->checkParsed("unknownOptionNames"); return d->unknownOptionNames; } /*! Displays the help information, and exits the application. This is automatically triggered by the --help option, but can also be used to display the help when the user is not invoking the application correctly. The exit code is set to \a exitCode. It should be set to 0 if the user requested to see the help, and to any other value in case of an error. \sa helpText() */ void QCommandLineParser::showHelp(int exitCode) { fprintf(stdout, "%s", qPrintable(d->helpText())); ::exit(exitCode); } /*! Returns a string containing the complete help information. \sa showHelp() */ QString QCommandLineParser::helpText() const { return d->helpText(); } static QString wrapText(const QString &names, int longestOptionNameString, const QString &description) { const QLatin1Char nl('\n'); QString text = QString(" ") + names.leftJustified(longestOptionNameString) + QLatin1Char(' '); const int indent = text.length(); int lineStart = 0; int lastBreakable = -1; const int max = 79 - indent; int x = 0; const int len = description.length(); for (int i = 0; i < len; ++i) { ++x; const QChar c = description.at(i); if (c.isSpace()) lastBreakable = i; int breakAt = -1; int nextLineStart = -1; if (x > max && lastBreakable != -1) { // time to break and we know where breakAt = lastBreakable; nextLineStart = lastBreakable + 1; } else if ((x > max - 1 && lastBreakable == -1) || i == len - 1) { // time to break but found nowhere [-> break here], or end of last line breakAt = i + 1; nextLineStart = breakAt; } else if (c == nl) { // forced break breakAt = i; nextLineStart = i + 1; } if (breakAt != -1) { const int numChars = breakAt - lineStart; //qDebug() << "breakAt=" << description.at(breakAt) << "breakAtSpace=" << breakAtSpace << lineStart << "to" << breakAt << description.mid(lineStart, numChars); if (lineStart > 0) text += QString(indent, QLatin1Char(' ')); text += description.mid(lineStart, numChars) + nl; x = 0; lastBreakable = -1; lineStart = nextLineStart; if (lineStart < len && description.at(lineStart).isSpace()) ++lineStart; // don't start a line with a space i = lineStart; } } return text; } QString QCommandLineParserPrivate::helpText() const { const QLatin1Char nl('\n'); QString text; const QString exeName = QCoreApplication::instance()->arguments().first(); QString usage = exeName; if (!commandLineOptionList.isEmpty()) { usage += QLatin1Char(' '); usage += QCommandLineParser::tr("[options]"); } Q_FOREACH (const PositionalArgumentDefinition &arg, positionalArgumentDefinitions) { usage += QLatin1Char(' '); usage += arg.syntax; } text += QCommandLineParser::tr("Usage: %1").arg(usage) + nl; if (!description.isEmpty()) text += description + nl; text += nl; if (!commandLineOptionList.isEmpty()) text += QCommandLineParser::tr("Options:") + nl; QStringList optionNameList; int longestOptionNameString = 0; Q_FOREACH (const QCommandLineOption &option, commandLineOptionList) { QStringList optionNames; Q_FOREACH (const QString &optionName, option.names()) { if (optionName.length() == 1) optionNames.append(QLatin1Char('-') + optionName); else optionNames.append(QString("--") + optionName); } QString optionNamesString = optionNames.join(", "); if (!option.valueName().isEmpty()) optionNamesString += QString(" <") + option.valueName() + QLatin1Char('>'); optionNameList.append(optionNamesString); longestOptionNameString = qMax(longestOptionNameString, optionNamesString.length()); } ++longestOptionNameString; for (int i = 0; i < commandLineOptionList.count(); ++i) { const QCommandLineOption &option = commandLineOptionList.at(i); text += wrapText(optionNameList.at(i), longestOptionNameString, option.description()); } if (!positionalArgumentDefinitions.isEmpty()) { if (!commandLineOptionList.isEmpty()) text += nl; text += QCommandLineParser::tr("Arguments:") + nl; Q_FOREACH (const PositionalArgumentDefinition &arg, positionalArgumentDefinitions) { text += wrapText(arg.name, longestOptionNameString, arg.description); } } return text; } keepassx-2.0.3/src/core/qcommandlineparser.h000066400000000000000000000071731276304217300211300ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Laszlo Papp ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QCOMMANDLINEPARSER_H #define QCOMMANDLINEPARSER_H #include #include #include "qcommandlineoption.h" class QCommandLineParserPrivate; class QCoreApplication; class QCommandLineParser { Q_DECLARE_TR_FUNCTIONS(QCommandLineParser) public: QCommandLineParser(); ~QCommandLineParser(); enum SingleDashWordOptionMode { ParseAsCompactedShortOptions, ParseAsLongOptions }; void setSingleDashWordOptionMode(SingleDashWordOptionMode parsingMode); bool addOption(const QCommandLineOption &commandLineOption); QCommandLineOption addVersionOption(); QCommandLineOption addHelpOption(); void setApplicationDescription(const QString &description); QString applicationDescription() const; void addPositionalArgument(const QString &name, const QString &description, const QString &syntax = QString()); void clearPositionalArguments(); void process(const QStringList &arguments); void process(const QCoreApplication &app); bool parse(const QStringList &arguments); QString errorText() const; bool isSet(const QString &name) const; QString value(const QString &name) const; QStringList values(const QString &name) const; bool isSet(const QCommandLineOption &option) const; QString value(const QCommandLineOption &option) const; QStringList values(const QCommandLineOption &option) const; QStringList positionalArguments() const; QStringList optionNames() const; QStringList unknownOptionNames() const; void showHelp(int exitCode = 0); QString helpText() const; private: Q_DISABLE_COPY(QCommandLineParser) QCommandLineParserPrivate * const d; }; #endif // QCOMMANDLINEPARSER_H keepassx-2.0.3/src/core/qlockfile.cpp000066400000000000000000000277031276304217300175510ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qlockfile.h" #include "qlockfile_p.h" #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) # include #else # include #endif #include QT_BEGIN_NAMESPACE /*! \class QLockFile \inmodule QtCore \brief The QLockFile class provides locking between processes using a file. \since 5.1 A lock file can be used to prevent multiple processes from accessing concurrently the same resource. For instance, a configuration file on disk, or a socket, a port, a region of shared memory... Serialization is only guaranteed if all processes that access the shared resource use QLockFile, with the same file path. QLockFile supports two use cases: to protect a resource for a short-term operation (e.g. verifying if a configuration file has changed before saving new settings), and for long-lived protection of a resource (e.g. a document opened by a user in an editor) for an indefinite amount of time. When protecting for a short-term operation, it is acceptable to call lock() and wait until any running operation finishes. When protecting a resource over a long time, however, the application should always call setStaleLockTime(0) and then tryLock() with a short timeout, in order to warn the user that the resource is locked. If the process holding the lock crashes, the lock file stays on disk and can prevent any other process from accessing the shared resource, ever. For this reason, QLockFile tries to detect such a "stale" lock file, based on the process ID written into the file, and (in case that process ID got reused meanwhile), on the last modification time of the lock file (30s by default, for the use case of a short-lived operation). If the lock file is found to be stale, it will be deleted. For the use case of protecting a resource over a long time, you should therefore call setStaleLockTime(0), and when tryLock() returns LockFailedError, inform the user that the document is locked, possibly using getLockInfo() for more details. */ /*! \enum QLockFile::LockError This enum describes the result of the last call to lock() or tryLock(). \value NoError The lock was acquired successfully. \value LockFailedError The lock could not be acquired because another process holds it. \value PermissionError The lock file could not be created, for lack of permissions in the parent directory. \value UnknownError Another error happened, for instance a full partition prevented writing out the lock file. */ /*! Constructs a new lock file object. The object is created in an unlocked state. When calling lock() or tryLock(), a lock file named \a fileName will be created, if it doesn't already exist. \sa lock(), unlock() */ QLockFile::QLockFile(const QString &fileName) : d_ptr(new QLockFilePrivate(fileName)) { } /*! Destroys the lock file object. If the lock was acquired, this will release the lock, by deleting the lock file. */ QLockFile::~QLockFile() { unlock(); } /*! Sets \a staleLockTime to be the time in milliseconds after which a lock file is considered stale. The default value is 30000, i.e. 30 seconds. If your application typically keeps the file locked for more than 30 seconds (for instance while saving megabytes of data for 2 minutes), you should set a bigger value using setStaleLockTime(). The value of \a staleLockTime is used by lock() and tryLock() in order to determine when an existing lock file is considered stale, i.e. left over by a crashed process. This is useful for the case where the PID got reused meanwhile, so the only way to detect a stale lock file is by the fact that it has been around for a long time. \sa staleLockTime() */ void QLockFile::setStaleLockTime(int staleLockTime) { Q_D(QLockFile); d->staleLockTime = staleLockTime; } /*! Returns the time in milliseconds after which a lock file is considered stale. \sa setStaleLockTime() */ int QLockFile::staleLockTime() const { Q_D(const QLockFile); return d->staleLockTime; } /*! Returns \c true if the lock was acquired by this QLockFile instance, otherwise returns \c false. \sa lock(), unlock(), tryLock() */ bool QLockFile::isLocked() const { Q_D(const QLockFile); return d->isLocked; } /*! Creates the lock file. If another process (or another thread) has created the lock file already, this function will block until that process (or thread) releases it. Calling this function multiple times on the same lock from the same thread without unlocking first is not allowed. This function will \e dead-lock when the file is locked recursively. Returns \c true if the lock was acquired, false if it could not be acquired due to an unrecoverable error, such as no permissions in the parent directory. \sa unlock(), tryLock() */ bool QLockFile::lock() { return tryLock(-1); } /*! Attempts to create the lock file. This function returns \c true if the lock was obtained; otherwise it returns \c false. If another process (or another thread) has created the lock file already, this function will wait for at most \a timeout milliseconds for the lock file to become available. Note: Passing a negative number as the \a timeout is equivalent to calling lock(), i.e. this function will wait forever until the lock file can be locked if \a timeout is negative. If the lock was obtained, it must be released with unlock() before another process (or thread) can successfully lock it. Calling this function multiple times on the same lock from the same thread without unlocking first is not allowed, this function will \e always return false when attempting to lock the file recursively. \sa lock(), unlock() */ bool QLockFile::tryLock(int timeout) { Q_D(QLockFile); #if QT_VERSION >= QT_VERSION_CHECK(4, 7, 0) QElapsedTimer timer; #else QTime timer; #endif if (timeout > 0) timer.start(); int sleepTime = 100; Q_FOREVER { d->lockError = d->tryLock_sys(); switch (d->lockError) { case NoError: d->isLocked = true; return true; case PermissionError: case UnknownError: return false; case LockFailedError: if (!d->isLocked && d->isApparentlyStale()) { // Stale lock from another thread/process // Ensure two processes don't remove it at the same time QLockFile rmlock(d->fileName + QLatin1String(".rmlock")); if (rmlock.tryLock()) { if (d->isApparentlyStale() && d->removeStaleLock()) continue; } } break; } if (timeout == 0 || (timeout > 0 && (timer.elapsed() > timeout))) return false; QLockFileThread::msleep(sleepTime); if (sleepTime < 5 * 1000) sleepTime *= 2; } // not reached return false; } /*! \fn void QLockFile::unlock() Releases the lock, by deleting the lock file. Calling unlock() without locking the file first, does nothing. \sa lock(), tryLock() */ /*! Retrieves information about the current owner of the lock file. If tryLock() returns \c false, and error() returns LockFailedError, this function can be called to find out more information about the existing lock file: \list \li the PID of the application (returned in \a pid) \li the \a hostname it's running on (useful in case of networked filesystems), \li the name of the application which created it (returned in \a appname), \endlist Note that tryLock() automatically deleted the file if there is no running application with this PID, so LockFailedError can only happen if there is an application with this PID (it could be unrelated though). This can be used to inform users about the existing lock file and give them the choice to delete it. After removing the file using removeStaleLockFile(), the application can call tryLock() again. This function returns \c true if the information could be successfully retrieved, false if the lock file doesn't exist or doesn't contain the expected data. This can happen if the lock file was deleted between the time where tryLock() failed and the call to this function. Simply call tryLock() again if this happens. */ bool QLockFile::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const { Q_D(const QLockFile); return d->getLockInfo(pid, hostname, appname); } bool QLockFilePrivate::getLockInfo(qint64 *pid, QString *hostname, QString *appname) const { QFile reader(fileName); if (!reader.open(QIODevice::ReadOnly)) return false; QByteArray pidLine = reader.readLine(); pidLine.chop(1); QByteArray appNameLine = reader.readLine(); appNameLine.chop(1); QByteArray hostNameLine = reader.readLine(); hostNameLine.chop(1); if (pidLine.isEmpty()) return false; qint64 thePid = pidLine.toLongLong(); if (pid) *pid = thePid; if (appname) *appname = QString::fromUtf8(appNameLine); if (hostname) *hostname = QString::fromUtf8(hostNameLine); return thePid > 0; } /*! Attempts to forcefully remove an existing lock file. Calling this is not recommended when protecting a short-lived operation: QLockFile already takes care of removing lock files after they are older than staleLockTime(). This method should only be called when protecting a resource for a long time, i.e. with staleLockTime(0), and after tryLock() returned LockFailedError, and the user agreed on removing the lock file. Returns \c true on success, false if the lock file couldn't be removed. This happens on Windows, when the application owning the lock is still running. */ bool QLockFile::removeStaleLockFile() { Q_D(QLockFile); if (d->isLocked) { qWarning("removeStaleLockFile can only be called when not holding the lock"); return false; } return d->removeStaleLock(); } /*! Returns the lock file error status. If tryLock() returns \c false, this function can be called to find out the reason why the locking failed. */ QLockFile::LockError QLockFile::error() const { Q_D(const QLockFile); return d->lockError; } QT_END_NAMESPACE keepassx-2.0.3/src/core/qlockfile.h000066400000000000000000000045661276304217300172200ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QLOCKFILE_H #define QLOCKFILE_H #include #include QT_BEGIN_NAMESPACE class QLockFilePrivate; class QLockFile { public: QLockFile(const QString &fileName); ~QLockFile(); bool lock(); bool tryLock(int timeout = 0); void unlock(); void setStaleLockTime(int); int staleLockTime() const; bool isLocked() const; bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; bool removeStaleLockFile(); enum LockError { NoError = 0, LockFailedError = 1, PermissionError = 2, UnknownError = 3 }; LockError error() const; protected: QScopedPointer d_ptr; private: Q_DECLARE_PRIVATE(QLockFile) Q_DISABLE_COPY(QLockFile) }; QT_END_NAMESPACE #endif // QLOCKFILE_H keepassx-2.0.3/src/core/qlockfile_p.h000066400000000000000000000060631276304217300175310ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QLOCKFILE_P_H #define QLOCKFILE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include "qlockfile.h" #include #include #ifdef Q_OS_WIN #include #endif QT_BEGIN_NAMESPACE class QLockFileThread : public QThread { public: static void msleep(unsigned long msecs) { QThread::msleep(msecs); } }; class QLockFilePrivate { public: QLockFilePrivate(const QString &fn) : fileName(fn), #ifdef Q_OS_WIN fileHandle(INVALID_HANDLE_VALUE), #else fileHandle(-1), #endif staleLockTime(30 * 1000), // 30 seconds lockError(QLockFile::NoError), isLocked(false) { } QLockFile::LockError tryLock_sys(); bool removeStaleLock(); bool getLockInfo(qint64 *pid, QString *hostname, QString *appname) const; // Returns \c true if the lock belongs to dead PID, or is old. // The attempt to delete it will tell us if it was really stale or not, though. bool isApparentlyStale() const; static QString processNameByPid(qint64 pid); QString fileName; #ifdef Q_OS_WIN Qt::HANDLE fileHandle; #else int fileHandle; #endif int staleLockTime; // "int milliseconds" is big enough for 24 days QLockFile::LockError lockError; bool isLocked; }; QT_END_NAMESPACE #endif /* QLOCKFILE_P_H */ keepassx-2.0.3/src/core/qlockfile_unix.cpp000066400000000000000000000177341276304217300206170ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qlockfile_p.h" #include #include #include #include #include #include // flock #include // kill #include // kill #include // gethostname #include #if defined(Q_OS_MAC) # include #elif defined(Q_OS_LINUX) # include # include #endif QT_BEGIN_NAMESPACE #define EINTR_LOOP(var, cmd) \ do { \ var = cmd; \ } while (var == -1 && errno == EINTR) // don't call QT_OPEN or ::open // call qt_safe_open static inline int qt_safe_open(const char *pathname, int flags, mode_t mode = 0777) { #ifdef O_CLOEXEC flags |= O_CLOEXEC; #endif int fd; EINTR_LOOP(fd, ::open(pathname, flags, mode)); // unknown flags are ignored, so we have no way of verifying if // O_CLOEXEC was accepted if (fd != -1) ::fcntl(fd, F_SETFD, FD_CLOEXEC); return fd; } static inline qint64 qt_safe_write(int fd, const void *data, qint64 len) { qint64 ret = 0; EINTR_LOOP(ret, ::write(fd, data, len)); return ret; } static QByteArray localHostName() // from QHostInfo::localHostName(), modified to return a QByteArray { QByteArray hostName(512, Qt::Uninitialized); if (gethostname(hostName.data(), hostName.size()) == -1) return QByteArray(); hostName.truncate(strlen(hostName.data())); return hostName; } // ### merge into qt_safe_write? static qint64 qt_write_loop(int fd, const char *data, qint64 len) { qint64 pos = 0; while (pos < len) { const qint64 ret = qt_safe_write(fd, data + pos, len - pos); if (ret == -1) // e.g. partition full return pos; pos += ret; } return pos; } static bool setNativeLocks(int fd) { #if defined(LOCK_EX) && defined(LOCK_NB) if (flock(fd, LOCK_EX | LOCK_NB) == -1) // other threads, and other processes on a local fs return false; #endif struct flock flockData; flockData.l_type = F_WRLCK; flockData.l_whence = SEEK_SET; flockData.l_start = 0; flockData.l_len = 0; // 0 = entire file flockData.l_pid = getpid(); if (fcntl(fd, F_SETLK, &flockData) == -1) // for networked filesystems return false; return true; } QLockFile::LockError QLockFilePrivate::tryLock_sys() { // Assemble data, to write in a single call to write // (otherwise we'd have to check every write call) // Use operator% from the fast builder to avoid multiple memory allocations. QByteArray fileData = QByteArray::number(QCoreApplication::applicationPid()) + '\n' + QCoreApplication::applicationName().toUtf8() + '\n' + localHostName() + '\n'; const QByteArray lockFileName = QFile::encodeName(fileName); const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY | O_CREAT | O_EXCL, 0644); if (fd < 0) { switch (errno) { case EEXIST: return QLockFile::LockFailedError; case EACCES: case EROFS: return QLockFile::PermissionError; default: return QLockFile::UnknownError; } } // Ensure nobody else can delete the file while we have it if (!setNativeLocks(fd)) qWarning() << "setNativeLocks failed:" << strerror(errno); if (qt_write_loop(fd, fileData.constData(), fileData.size()) < fileData.size()) { close(fd); if (!QFile::remove(fileName)) qWarning("QLockFile: Could not remove our own lock file %s.", qPrintable(fileName)); return QLockFile::UnknownError; // partition full } // We hold the lock, continue. fileHandle = fd; return QLockFile::NoError; } bool QLockFilePrivate::removeStaleLock() { const QByteArray lockFileName = QFile::encodeName(fileName); const int fd = qt_safe_open(lockFileName.constData(), O_WRONLY, 0644); if (fd < 0) // gone already? return false; #ifdef Q_OS_MAC // ugly workaround: ignore setNativeLocks() result on Mac since it's broken there setNativeLocks(fd); bool success = (::unlink(lockFileName) == 0); #else bool success = setNativeLocks(fd) && (::unlink(lockFileName) == 0); #endif close(fd); return success; } bool QLockFilePrivate::isApparentlyStale() const { qint64 pid; QString hostname, appname; if (getLockInfo(&pid, &hostname, &appname)) { if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) { if (::kill(pid, 0) == -1 && errno == ESRCH) return true; // PID doesn't exist anymore const QString processName = processNameByPid(pid); if (!processName.isEmpty()) { QFileInfo fi(appname); if (fi.isSymLink()) fi.setFile(fi.symLinkTarget()); if (processName.toLower() != fi.fileName().toLower()) return true; // PID got reused by a different application. } } } const qint64 age = QFileInfo(fileName).lastModified().secsTo(QDateTime::currentDateTime()) * 1000; return staleLockTime > 0 && age > staleLockTime; } QString QLockFilePrivate::processNameByPid(qint64 pid) { #if defined(Q_OS_MAC) char name[1024]; proc_name(pid, name, sizeof(name) / sizeof(char)); return QFile::decodeName(name); #elif defined(Q_OS_LINUX) if (!QFile::exists(QString("/proc/version"))) return QString(); char exePath[64]; char buf[PATH_MAX + 1]; sprintf(exePath, "/proc/%lld/exe", pid); size_t len = static_cast(readlink(exePath, buf, sizeof(buf))); if (len >= sizeof(buf)) { // The pid is gone. Return some invalid process name to fail the test. return QString("/ERROR/"); } buf[len] = 0; return QFileInfo(QFile::decodeName(buf)).fileName(); #else return QString(); #endif } void QLockFile::unlock() { Q_D(QLockFile); if (!d->isLocked) return; close(d->fileHandle); d->fileHandle = -1; if (!QFile::remove(d->fileName)) { qWarning() << "Could not remove our own lock file" << d->fileName << "maybe permissions changed meanwhile?"; // This is bad because other users of this lock file will now have to wait for the stale-lock-timeout... } d->lockError = QLockFile::NoError; d->isLocked = false; } QT_END_NAMESPACE keepassx-2.0.3/src/core/qlockfile_win.cpp000066400000000000000000000202461276304217300204210ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL21$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 or version 3 as published by the Free ** Software Foundation and appearing in the file LICENSE.LGPLv21 and ** LICENSE.LGPLv3 included in the packaging of this file. Please review the ** following information to ensure the GNU Lesser General Public License ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** As a special exception, The Qt Company gives you certain additional ** rights. These rights are described in The Qt Company LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef _UNICODE #define _UNICODE #endif #ifndef UNICODE #define UNICODE #endif #include "qlockfile_p.h" #include #include #include #include #include #include QT_BEGIN_NAMESPACE static inline QByteArray localHostName() { return qgetenv("COMPUTERNAME"); } static inline bool fileExists(const wchar_t *fileName) { WIN32_FILE_ATTRIBUTE_DATA data; return GetFileAttributesEx(fileName, GetFileExInfoStandard, &data); } QLockFile::LockError QLockFilePrivate::tryLock_sys() { const ushort* nativePath = QDir::toNativeSeparators(fileName).utf16(); // When writing, allow others to read. // When reading, QFile will allow others to read and write, all good. // Adding FILE_SHARE_DELETE would allow forceful deletion of stale files, // but Windows doesn't allow recreating it while this handle is open anyway, // so this would only create confusion (can't lock, but no lock file to read from). const DWORD dwShareMode = FILE_SHARE_READ; #ifndef Q_OS_WINRT SECURITY_ATTRIBUTES securityAtts = { sizeof(SECURITY_ATTRIBUTES), NULL, FALSE }; HANDLE fh = CreateFile((const wchar_t*)nativePath, GENERIC_WRITE, dwShareMode, &securityAtts, CREATE_NEW, // error if already exists FILE_ATTRIBUTE_NORMAL, NULL); #else // !Q_OS_WINRT HANDLE fh = CreateFile2((const wchar_t*)nativePath, GENERIC_WRITE, dwShareMode, CREATE_NEW, // error if already exists NULL); #endif // Q_OS_WINRT if (fh == INVALID_HANDLE_VALUE) { const DWORD lastError = GetLastError(); switch (lastError) { case ERROR_SHARING_VIOLATION: case ERROR_ALREADY_EXISTS: case ERROR_FILE_EXISTS: return QLockFile::LockFailedError; case ERROR_ACCESS_DENIED: // readonly file, or file still in use by another process. // Assume the latter if the file exists, since we don't create it readonly. return fileExists((const wchar_t*)nativePath) ? QLockFile::LockFailedError : QLockFile::PermissionError; default: qWarning() << "Got unexpected locking error" << lastError; return QLockFile::UnknownError; } } // We hold the lock, continue. fileHandle = fh; // Assemble data, to write in a single call to write // (otherwise we'd have to check every write call) QByteArray fileData; fileData += QByteArray::number(QCoreApplication::applicationPid()); fileData += '\n'; fileData += QCoreApplication::applicationName().toUtf8(); fileData += '\n'; fileData += localHostName(); fileData += '\n'; DWORD bytesWritten = 0; QLockFile::LockError error = QLockFile::NoError; if (!WriteFile(fh, fileData.constData(), fileData.size(), &bytesWritten, NULL) || !FlushFileBuffers(fh)) error = QLockFile::UnknownError; // partition full return error; } bool QLockFilePrivate::removeStaleLock() { // QFile::remove fails on Windows if the other process is still using the file, so it's not stale. return QFile::remove(fileName); } bool QLockFilePrivate::isApparentlyStale() const { qint64 pid; QString hostname, appname; // On WinRT there seems to be no way of obtaining information about other // processes due to sandboxing #ifndef Q_OS_WINRT if (getLockInfo(&pid, &hostname, &appname)) { if (hostname.isEmpty() || hostname == QString::fromLocal8Bit(localHostName())) { HANDLE procHandle = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); if (!procHandle) return true; // We got a handle but check if process is still alive DWORD dwR = ::WaitForSingleObject(procHandle, 0); ::CloseHandle(procHandle); if (dwR == WAIT_TIMEOUT) return true; const QString processName = processNameByPid(pid); if (!processName.isEmpty() && processName != appname) return true; // PID got reused by a different application. } } #else // !Q_OS_WINRT Q_UNUSED(pid); Q_UNUSED(hostname); Q_UNUSED(appname); #endif // Q_OS_WINRT const qint64 age = QFileInfo(fileName).lastModified().msecsTo(QDateTime::currentDateTime()); return staleLockTime > 0 && age > staleLockTime; } QString QLockFilePrivate::processNameByPid(qint64 pid) { #if !defined(Q_OS_WINRT) && !defined(Q_OS_WINCE) typedef DWORD (WINAPI *GetModuleFileNameExFunc)(HANDLE, HMODULE, LPTSTR, DWORD); HMODULE hPsapi = LoadLibraryA("psapi"); if (!hPsapi) return QString(); GetModuleFileNameExFunc qGetModuleFileNameEx = (GetModuleFileNameExFunc)GetProcAddress(hPsapi, "GetModuleFileNameExW"); if (!qGetModuleFileNameEx) { FreeLibrary(hPsapi); return QString(); } HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, DWORD(pid)); if (!hProcess) { FreeLibrary(hPsapi); return QString(); } wchar_t buf[MAX_PATH]; const DWORD length = qGetModuleFileNameEx(hProcess, NULL, buf, sizeof(buf) / sizeof(wchar_t)); CloseHandle(hProcess); FreeLibrary(hPsapi); if (!length) return QString(); QString name = QString::fromWCharArray(buf, length); int i = name.lastIndexOf(QLatin1Char('\\')); if (i >= 0) name.remove(0, i + 1); i = name.lastIndexOf(QLatin1Char('.')); if (i >= 0) name.truncate(i); return name; #else Q_UNUSED(pid); return QString(); #endif } void QLockFile::unlock() { Q_D(QLockFile); if (!d->isLocked) return; CloseHandle(d->fileHandle); int attempts = 0; static const int maxAttempts = 500; // 500ms while (!QFile::remove(d->fileName) && ++attempts < maxAttempts) { // Someone is reading the lock file right now (on Windows this prevents deleting it). QLockFileThread::msleep(1); } if (attempts == maxAttempts) { qWarning() << "Could not remove our own lock file" << d->fileName << ". Either other users of the lock file are reading it constantly for 500 ms, or we (no longer) have permissions to delete the file"; // This is bad because other users of this lock file will now have to wait for the stale-lock-timeout... } d->lockError = QLockFile::NoError; d->isLocked = false; } QT_END_NAMESPACE keepassx-2.0.3/src/core/qsavefile.cpp000066400000000000000000000273241276304217300175560ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "qsavefile.h" #include "qsavefile_p.h" #include #include #include #ifdef Q_OS_WIN # include #else # include #endif QSaveFilePrivate::QSaveFilePrivate() : tempFile(0), error(QFile::NoError) { } QSaveFilePrivate::~QSaveFilePrivate() { } /*! \class QSaveFile \brief The QSaveFile class provides an interface for safely writing to files. \ingroup io \reentrant QSaveFile is an I/O device for writing text and binary files, without losing existing data if the writing operation fails. While writing, the contents will be written to a temporary file, and if no error happened, commit() will move it to the final file. This ensures that no data at the final file is lost in case an error happens while writing, and no partially-written file is ever present at the final location. Always use QSaveFile when saving entire documents to disk. QSaveFile automatically detects errors while writing, such as the full partition situation, where write() cannot write all the bytes. It will remember that an error happened, and will discard the temporary file in commit(). Much like with QFile, the file is opened with open(). Data is usually read and written using QDataStream or QTextStream, but you can also call the QIODevice-inherited functions read(), readLine(), readAll(), write(). Unlike QFile, calling close() is not allowed. commit() replaces it. If commit() was not called and the QSaveFile instance is destroyed, the temporary file is discarded. \sa QTextStream, QDataStream, QFileInfo, QDir, QFile, QTemporaryFile */ /*! \internal */ QSaveFile::QSaveFile() : QIODevice(), d_ptr(new QSaveFilePrivate) { } /*! Constructs a new file object with the given \a parent. */ QSaveFile::QSaveFile(QObject *parent) : QIODevice(parent), d_ptr(new QSaveFilePrivate) { } /*! Constructs a new file object to represent the file with the given \a name. */ QSaveFile::QSaveFile(const QString &name) : QIODevice(0), d_ptr(new QSaveFilePrivate) { Q_D(QSaveFile); d->fileName = name; } /*! Constructs a new file object with the given \a parent to represent the file with the specified \a name. */ QSaveFile::QSaveFile(const QString &name, QObject *parent) : QIODevice(parent), d_ptr(new QSaveFilePrivate) { Q_D(QSaveFile); d->fileName = name; } /*! Destroys the file object, discarding the saved contents unless commit() was called. */ QSaveFile::~QSaveFile() { Q_D(QSaveFile); if (d->tempFile) { d->tempFile->setAutoRemove(true); delete d->tempFile; } QIODevice::close(); delete d; } /*! Returns false since temporary files support random access. \sa QIODevice::isSequential() */ bool QSaveFile::isSequential() const { return false; } /*! Returns the file error status. The I/O device status returns an error code. For example, if open() returns false, or a read/write operation returns -1, this function can be called to find out the reason why the operation failed. Unlike QFile which clears the error on the next operation, QSaveFile remembers the error until the file is closed, in order to discard the file contents in close(). \sa unsetError() */ QFile::FileError QSaveFile::error() const { return d_func()->error; } /*! Sets the file's error to QFile::NoError. This will make QSaveFile forget that an error happened during saving, so you probably don't want to call this, unless you're really sure that you want to save the file anyway. \sa error() */ void QSaveFile::unsetError() { d_func()->error = QFile::NoError; setErrorString(QString()); } /*! Returns the name set by setFileName() or to the QSaveFile constructor. \sa setFileName() */ QString QSaveFile::fileName() const { return d_func()->fileName; } /*! Sets the \a name of the file. The name can have no path, a relative path, or an absolute path. \sa QFile::setFileName(), fileName() */ void QSaveFile::setFileName(const QString &name) { d_func()->fileName = name; } /*! Opens the file using OpenMode \a mode, returning true if successful; otherwise false. Important: the \a mode must be QIODevice::WriteOnly. It may also have additional flags, such as QIODevice::Text and QIODevice::Unbuffered. QIODevice::ReadWrite and QIODevice::Append are not supported at the moment. \sa QIODevice::OpenMode, setFileName() */ bool QSaveFile::open(OpenMode mode) { Q_D(QSaveFile); if (isOpen()) { qWarning("QSaveFile::open: File (%s) already open", qPrintable(fileName())); return false; } unsetError(); if ((mode & (ReadOnly | WriteOnly)) == 0) { qWarning("QSaveFile::open: Open mode not specified"); return false; } // In the future we could implement Append and ReadWrite by copying from the existing file to the temp file... if ((mode & ReadOnly) || (mode & Append)) { qWarning("QSaveFile::open: Unsupported open mode %d", int(mode)); return false; } // check if existing file is writable QFileInfo existingFile(d->fileName); if (existingFile.exists() && !existingFile.isWritable()) { d->error = QFile::WriteError; setErrorString(QSaveFile::tr("Existing file %1 is not writable").arg(d->fileName)); return false; } d->tempFile = new QTemporaryFile; d->tempFile->setAutoRemove(false); d->tempFile->setFileTemplate(d->fileName); if (!d->tempFile->open()) { d->error = d->tempFile->error(); setErrorString(d->tempFile->errorString()); delete d->tempFile; d->tempFile = 0; return false; } QIODevice::open(mode); if (existingFile.exists()) d->tempFile->setPermissions(existingFile.permissions()); return true; } /*! \reimp Cannot be called. Call commit() instead. */ void QSaveFile::close() { qFatal("QSaveFile::close called"); } /* Commits the changes to disk, if all previous writes were successful. It is mandatory to call this at the end of the saving operation, otherwise the file will be discarded. If an error happened during writing, deletes the temporary file and returns false. Otherwise, renames it to the final fileName and returns true on success. Finally, closes the device. \sa cancelWriting() */ bool QSaveFile::commit() { Q_D(QSaveFile); if (!d->tempFile) return false; if (!isOpen()) { qWarning("QSaveFile::commit: File (%s) is not open", qPrintable(fileName())); return false; } flush(); #ifdef Q_OS_WIN FlushFileBuffers(reinterpret_cast(handle())); #elif defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0 fdatasync(d->tempFile->handle()); #else fsync(d->tempFile->handle()); #endif QIODevice::close(); if (d->error != QFile::NoError) { d->tempFile->remove(); unsetError(); delete d->tempFile; d->tempFile = 0; return false; } d->tempFile->close(); #ifdef Q_OS_WIN // On Windows QAbstractFileEngine::rename() fails if the the target exists, // so we have to rename the target. // Ideally the winapi ReplaceFile() method should be used. QString bakname = d->fileName + "~"; QFile::remove(bakname); QFile::rename(d->fileName, bakname); #endif QAbstractFileEngine* fileEngine = d->tempFile->fileEngine(); Q_ASSERT(fileEngine); if (!fileEngine->rename(d->fileName)) { d->error = fileEngine->error(); setErrorString(fileEngine->errorString()); d->tempFile->remove(); delete d->tempFile; d->tempFile = 0; #ifdef Q_OS_WIN QFile::rename(bakname, d->fileName); #endif return false; } delete d->tempFile; d->tempFile = 0; #ifdef Q_OS_WIN QFile::remove(bakname); #endif return true; } /*! Sets an error code so that commit() discards the temporary file. Further write operations are possible after calling this method, but none of it will have any effect, the written file will be discarded. \sa commit() */ void QSaveFile::cancelWriting() { if (!isOpen()) return; d_func()->error = QFile::WriteError; setErrorString(QSaveFile::tr("Writing canceled by application")); } /*! Returns the size of the file. \sa QFile::size() */ qint64 QSaveFile::size() const { Q_D(const QSaveFile); return d->tempFile ? d->tempFile->size() : qint64(-1); } /*! \reimp */ qint64 QSaveFile::pos() const { Q_D(const QSaveFile); return d->tempFile ? d->tempFile->pos() : qint64(-1); } /*! \reimp */ bool QSaveFile::seek(qint64 offset) { Q_D(QSaveFile); return d->tempFile ? d->tempFile->seek(offset) : false; } /*! \reimp */ bool QSaveFile::atEnd() const { Q_D(const QSaveFile); return d->tempFile ? d->tempFile->atEnd() : true; } /*! Flushes any buffered data to the file. Returns true if successful; otherwise returns false. */ bool QSaveFile::flush() { Q_D(QSaveFile); if (d->tempFile) { if (!d->tempFile->flush()) { d->error = d->tempFile->error(); setErrorString(d->tempFile->errorString()); return false; } return true; } return false; } /*! Returns the file handle of the temporary file. \sa QFile::handle() */ int QSaveFile::handle() const { Q_D(const QSaveFile); return d->tempFile ? d->tempFile->handle() : -1; } /*! \reimp */ qint64 QSaveFile::readData(char *data, qint64 maxlen) { Q_D(QSaveFile); return d->tempFile ? d->tempFile->read(data, maxlen) : -1; } /*! \reimp */ qint64 QSaveFile::writeData(const char *data, qint64 len) { Q_D(QSaveFile); if (!d->tempFile) return -1; const qint64 written = d->tempFile->write(data, len); if (written != len) { d->error = QFile::WriteError; setErrorString(QSaveFile::tr("Partial write. Partition full?")); } return written; } /*! \reimp */ qint64 QSaveFile::readLineData(char *data, qint64 maxlen) { Q_D(QSaveFile); return d->tempFile ? d->tempFile->readLine(data, maxlen) : -1; } keepassx-2.0.3/src/core/qsavefile.h000066400000000000000000000055351276304217300172230ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSAVEFILE_H #define QSAVEFILE_H #include #include #ifdef open #error qsavefile.h must be included before any header file that defines open #endif class QAbstractFileEngine; class QSaveFilePrivate; class QSaveFile : public QIODevice { Q_OBJECT Q_DECLARE_PRIVATE(QSaveFile) public: QSaveFile(); explicit QSaveFile(const QString &name); explicit QSaveFile(QObject *parent); QSaveFile(const QString &name, QObject *parent); ~QSaveFile(); QFile::FileError error() const; void unsetError(); QString fileName() const; void setFileName(const QString &name); bool isSequential() const; virtual bool open(OpenMode flags); bool commit(); void cancelWriting(); qint64 size() const; qint64 pos() const; bool seek(qint64 offset); bool atEnd() const; bool flush(); bool resize(qint64 sz); int handle() const; protected: qint64 readData(char *data, qint64 maxlen); qint64 writeData(const char *data, qint64 len); qint64 readLineData(char *data, qint64 maxlen); private: virtual void close(); private: Q_DISABLE_COPY(QSaveFile) QSaveFilePrivate* const d_ptr; }; #endif // QSAVEFILE_H keepassx-2.0.3/src/core/qsavefile_p.h000066400000000000000000000042241276304217300175340ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSAVEFILE_P_H #define QSAVEFILE_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include class QSaveFilePrivate { public: QSaveFilePrivate(); ~QSaveFilePrivate(); QString fileName; QTemporaryFile *tempFile; QFile::FileError error; }; #endif // QSAVEFILE_P_H keepassx-2.0.3/src/crypto/000077500000000000000000000000001276304217300154535ustar00rootroot00000000000000keepassx-2.0.3/src/crypto/Crypto.cpp000066400000000000000000000240061276304217300174410ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Crypto.h" #include #include #include "config-keepassx.h" #include "crypto/CryptoHash.h" #include "crypto/SymmetricCipher.h" bool Crypto::m_initalized(false); QString Crypto::m_errorStr; QString Crypto::m_backendVersion; #if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600) static int gcry_qt_mutex_init(void** p_sys) { *p_sys = new QMutex(); return 0; } static int gcry_qt_mutex_destroy(void** p_sys) { delete reinterpret_cast(*p_sys); return 0; } static int gcry_qt_mutex_lock(void** p_sys) { reinterpret_cast(*p_sys)->lock(); return 0; } static int gcry_qt_mutex_unlock(void** p_sys) { reinterpret_cast(*p_sys)->unlock(); return 0; } static const struct gcry_thread_cbs gcry_threads_qt = { GCRY_THREAD_OPTION_USER, 0, gcry_qt_mutex_init, gcry_qt_mutex_destroy, gcry_qt_mutex_lock, gcry_qt_mutex_unlock, 0, 0, 0, 0, 0, 0, 0, 0 }; #endif Crypto::Crypto() { } bool Crypto::init() { if (m_initalized) { qWarning("Crypto::init: already initalized"); return true; } // libgcrypt >= 1.6 doesn't allow custom thread callbacks anymore. #if !defined(GCRYPT_VERSION_NUMBER) || (GCRYPT_VERSION_NUMBER < 0x010600) gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_qt); #endif m_backendVersion = QString::fromLocal8Bit(gcry_check_version(0)); gcry_control(GCRYCTL_INITIALIZATION_FINISHED, 0); if (!checkAlgorithms()) { return false; } // has to be set before testing Crypto classes m_initalized = true; if (!selfTest()) { m_initalized = false; return false; } return true; } bool Crypto::initalized() { return m_initalized; } QString Crypto::errorString() { return m_errorStr; } QString Crypto::backendVersion() { return QString("libgcrypt ").append(m_backendVersion); } bool Crypto::backendSelfTest() { return (gcry_control(GCRYCTL_SELFTEST) == 0); } bool Crypto::checkAlgorithms() { if (gcry_cipher_algo_info(GCRY_CIPHER_AES256, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { m_errorStr = "GCRY_CIPHER_AES256 not found."; qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); return false; } if (gcry_cipher_algo_info(GCRY_CIPHER_TWOFISH, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { m_errorStr = "GCRY_CIPHER_TWOFISH not found."; qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); return false; } #ifdef GCRYPT_HAS_SALSA20 if (gcry_cipher_algo_info(GCRY_CIPHER_SALSA20, GCRYCTL_TEST_ALGO, Q_NULLPTR, Q_NULLPTR) != 0) { m_errorStr = "GCRY_CIPHER_SALSA20 not found."; qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); return false; } #endif if (gcry_md_test_algo(GCRY_MD_SHA256) != 0) { m_errorStr = "GCRY_MD_SHA256 not found."; qWarning("Crypto::checkAlgorithms: %s", qPrintable(m_errorStr)); return false; } return true; } bool Crypto::selfTest() { return testSha256() && testAes256Cbc() && testAes256Ecb() && testTwofish() && testSalsa20(); } void Crypto::raiseError(const QString& str) { m_errorStr = str; qWarning("Crypto::selfTest: %s", qPrintable(m_errorStr)); } bool Crypto::testSha256() { QByteArray sha256Test = CryptoHash::hash("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", CryptoHash::Sha256); if (sha256Test != QByteArray::fromHex("248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1")) { raiseError("SHA-256 mismatch."); return false; } return true; } bool Crypto::testAes256Cbc() { QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); QByteArray cipherText = QByteArray::fromHex("f58c4c04d6e5f1ba779eabfb5f7bfbd6"); cipherText.append(QByteArray::fromHex("9cfc4e967edb808d679f777bc6702c7d")); bool ok; SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); if (!aes256Encrypt.init(key, iv)) { raiseError(aes256Encrypt.errorString()); return false; } QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); if (!ok) { raiseError(aes256Encrypt.errorString()); return false; } if (encryptedText != cipherText) { raiseError("AES-256 CBC encryption mismatch."); return false; } SymmetricCipher aes256Descrypt(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); if (!aes256Descrypt.init(key, iv)) { raiseError(aes256Descrypt.errorString()); return false; } QByteArray decryptedText = aes256Descrypt.process(cipherText, &ok); if (!ok) { raiseError(aes256Descrypt.errorString()); return false; } if (decryptedText != plainText) { raiseError("AES-256 CBC decryption mismatch."); return false; } return true; } bool Crypto::testAes256Ecb() { QByteArray key = QByteArray::fromHex("000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F"); QByteArray iv = QByteArray::fromHex("00000000000000000000000000000000"); QByteArray plainText = QByteArray::fromHex("00112233445566778899AABBCCDDEEFF"); plainText.append(QByteArray::fromHex("00112233445566778899AABBCCDDEEFF")); QByteArray cipherText = QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089"); cipherText.append(QByteArray::fromHex("8EA2B7CA516745BFEAFC49904B496089")); bool ok; SymmetricCipher aes256Encrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); if (!aes256Encrypt.init(key, iv)) { raiseError(aes256Encrypt.errorString()); return false; } QByteArray encryptedText = aes256Encrypt.process(plainText, &ok); if (!ok) { raiseError(aes256Encrypt.errorString()); return false; } if (encryptedText != cipherText) { raiseError("AES-256 ECB encryption mismatch."); return false; } SymmetricCipher aes256Descrypt(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Decrypt); if (!aes256Descrypt.init(key, iv)) { raiseError(aes256Descrypt.errorString()); return false; } QByteArray decryptedText = aes256Descrypt.process(cipherText, &ok); if (!ok) { raiseError(aes256Descrypt.errorString()); return false; } if (decryptedText != plainText) { raiseError("AES-256 ECB decryption mismatch."); return false; } return true; } bool Crypto::testTwofish() { QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); QByteArray cipherText = QByteArray::fromHex("e0227c3cc80f3cb1b2ed847cc6f57d3c"); cipherText.append(QByteArray::fromHex("657b1e7960b30fb7c8d62e72ae37c3a0")); bool ok; SymmetricCipher twofishEncrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); if (!twofishEncrypt.init(key, iv)) { raiseError(twofishEncrypt.errorString()); return false; } QByteArray encryptedText = twofishEncrypt.process(plainText, &ok); if (!ok) { raiseError(twofishEncrypt.errorString()); return false; } if (encryptedText != cipherText) { raiseError("Twofish encryption mismatch."); return false; } SymmetricCipher twofishDecrypt(SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); if (!twofishDecrypt.init(key, iv)) { raiseError(twofishEncrypt.errorString()); return false; } QByteArray decryptedText = twofishDecrypt.process(cipherText, &ok); if (!ok) { raiseError(twofishDecrypt.errorString()); return false; } if (decryptedText != plainText) { raiseError("Twofish encryption mismatch."); return false; } return true; } bool Crypto::testSalsa20() { QByteArray salsa20Key = QByteArray::fromHex("F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112"); QByteArray salsa20iv = QByteArray::fromHex("0000000000000000"); QByteArray salsa20Plain = QByteArray::fromHex("00000000000000000000000000000000"); QByteArray salsa20Cipher = QByteArray::fromHex("B4C0AFA503BE7FC29A62058166D56F8F"); bool ok; SymmetricCipher salsa20Stream(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); if (!salsa20Stream.init(salsa20Key, salsa20iv)) { raiseError(salsa20Stream.errorString()); return false; } QByteArray salsaProcessed = salsa20Stream.process(salsa20Plain, &ok); if (!ok) { raiseError(salsa20Stream.errorString()); return false; } if (salsaProcessed != salsa20Cipher) { raiseError("Salsa20 stream cipher mismatch."); return false; } return true; } keepassx-2.0.3/src/crypto/Crypto.h000066400000000000000000000026101276304217300171030ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CRYPTO_H #define KEEPASSX_CRYPTO_H #include #include "core/Global.h" class Crypto { public: static bool init(); static bool initalized(); static bool backendSelfTest(); static QString errorString(); static QString backendVersion(); private: Crypto(); static bool checkAlgorithms(); static bool selfTest(); static void raiseError(const QString& str); static bool testSha256(); static bool testAes256Cbc(); static bool testAes256Ecb(); static bool testTwofish(); static bool testSalsa20(); static bool m_initalized; static QString m_errorStr; static QString m_backendVersion; }; #endif // KEEPASSX_CRYPTO_H keepassx-2.0.3/src/crypto/CryptoHash.cpp000066400000000000000000000041611276304217300202450ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "CryptoHash.h" #include #include "crypto/Crypto.h" class CryptoHashPrivate { public: gcry_md_hd_t ctx; int hashLen; }; CryptoHash::CryptoHash(CryptoHash::Algorithm algo) : d_ptr(new CryptoHashPrivate()) { Q_D(CryptoHash); Q_ASSERT(Crypto::initalized()); int algoGcrypt; switch (algo) { case CryptoHash::Sha256: algoGcrypt = GCRY_MD_SHA256; break; default: Q_ASSERT(false); break; } gcry_error_t error = gcry_md_open(&d->ctx, algoGcrypt, 0); Q_ASSERT(error == 0); // TODO: error handling Q_UNUSED(error); d->hashLen = gcry_md_get_algo_dlen(algoGcrypt); } CryptoHash::~CryptoHash() { Q_D(CryptoHash); gcry_md_close(d->ctx); delete d_ptr; } void CryptoHash::addData(const QByteArray& data) { Q_D(CryptoHash); if (data.isEmpty()) { return; } gcry_md_write(d->ctx, data.constData(), data.size()); } void CryptoHash::reset() { Q_D(CryptoHash); gcry_md_reset(d->ctx); } QByteArray CryptoHash::result() const { Q_D(const CryptoHash); const char* result = reinterpret_cast(gcry_md_read(d->ctx, 0)); return QByteArray(result, d->hashLen); } QByteArray CryptoHash::hash(const QByteArray& data, CryptoHash::Algorithm algo) { // replace with gcry_md_hash_buffer()? CryptoHash cryptoHash(algo); cryptoHash.addData(data); return cryptoHash.result(); } keepassx-2.0.3/src/crypto/CryptoHash.h000066400000000000000000000023501276304217300177100ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CRYPTOHASH_H #define KEEPASSX_CRYPTOHASH_H #include class CryptoHashPrivate; class CryptoHash { public: enum Algorithm { Sha256 }; explicit CryptoHash(CryptoHash::Algorithm algo); ~CryptoHash(); void addData(const QByteArray& data); void reset(); QByteArray result() const; static QByteArray hash(const QByteArray& data, CryptoHash::Algorithm algo); private: CryptoHashPrivate* const d_ptr; Q_DECLARE_PRIVATE(CryptoHash) }; #endif // KEEPASSX_CRYPTOHASH_H keepassx-2.0.3/src/crypto/Random.cpp000066400000000000000000000041661276304217300174060ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Random.h" #include #include "crypto/Crypto.h" class RandomBackendGcrypt : public RandomBackend { public: void randomize(void* data, int len) Q_DECL_OVERRIDE; }; Random* Random::m_instance(Q_NULLPTR); void Random::randomize(QByteArray& ba) { m_backend->randomize(ba.data(), ba.size()); } QByteArray Random::randomArray(int len) { QByteArray ba; ba.resize(len); randomize(ba); return ba; } quint32 Random::randomUInt(quint32 limit) { Q_ASSERT(limit != 0); Q_ASSERT(limit <= QUINT32_MAX); quint32 rand; const quint32 ceil = QUINT32_MAX - (QUINT32_MAX % limit) - 1; // To avoid modulo bias: // Make sure rand is below the largest number where rand%limit==0 do { m_backend->randomize(&rand, 4); } while (rand > ceil); return (rand % limit); } quint32 Random::randomUIntRange(quint32 min, quint32 max) { return min + randomUInt(max - min); } Random* Random::instance() { if (!m_instance) { m_instance = new Random(new RandomBackendGcrypt()); } return m_instance; } void Random::createWithBackend(RandomBackend* backend) { Q_ASSERT(backend); Q_ASSERT(!m_instance); m_instance = new Random(backend); } Random::Random(RandomBackend* backend) : m_backend(backend) { } void RandomBackendGcrypt::randomize(void* data, int len) { Q_ASSERT(Crypto::initalized()); gcry_randomize(data, len, GCRY_STRONG_RANDOM); } keepassx-2.0.3/src/crypto/Random.h000066400000000000000000000031301276304217300170410ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_RANDOM_H #define KEEPASSX_RANDOM_H #include #include class RandomBackend { public: virtual void randomize(void* data, int len) = 0; virtual ~RandomBackend() {} }; class Random { public: void randomize(QByteArray& ba); QByteArray randomArray(int len); /** * Generate a random quint32 in the range [0, @p limit) */ quint32 randomUInt(quint32 limit); /** * Generate a random quint32 in the range [@p min, @p max) */ quint32 randomUIntRange(quint32 min, quint32 max); static Random* instance(); static void createWithBackend(RandomBackend* backend); private: explicit Random(RandomBackend* backend); QScopedPointer m_backend; static Random* m_instance; Q_DISABLE_COPY(Random) }; inline Random* randomGen() { return Random::instance(); } #endif // KEEPASSX_RANDOM_H keepassx-2.0.3/src/crypto/SymmetricCipher.cpp000066400000000000000000000045351276304217300212750ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SymmetricCipher.h" #include "config-keepassx.h" #include "crypto/SymmetricCipherGcrypt.h" #include "crypto/SymmetricCipherSalsa20.h" SymmetricCipher::SymmetricCipher(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) : m_backend(createBackend(algo, mode, direction)) , m_initialized(false) { } SymmetricCipher::~SymmetricCipher() { } bool SymmetricCipher::init(const QByteArray& key, const QByteArray& iv) { if (!m_backend->init()) { return false; } if (!m_backend->setKey(key)) { return false; } if (!m_backend->setIv(iv)) { return false; } m_initialized = true; return true; } bool SymmetricCipher::isInitalized() const { return m_initialized; } SymmetricCipherBackend* SymmetricCipher::createBackend(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) { switch (algo) { case SymmetricCipher::Aes256: case SymmetricCipher::Twofish: #if defined(GCRYPT_HAS_SALSA20) case SymmetricCipher::Salsa20: #endif return new SymmetricCipherGcrypt(algo, mode, direction); #if !defined(GCRYPT_HAS_SALSA20) case SymmetricCipher::Salsa20: return new SymmetricCipherSalsa20(algo, mode, direction); #endif default: Q_ASSERT(false); return Q_NULLPTR; } } bool SymmetricCipher::reset() { return m_backend->reset(); } int SymmetricCipher::blockSize() const { return m_backend->blockSize(); } QString SymmetricCipher::errorString() const { return m_backend->errorString(); } keepassx-2.0.3/src/crypto/SymmetricCipher.h000066400000000000000000000043461276304217300207420ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SYMMETRICCIPHER_H #define KEEPASSX_SYMMETRICCIPHER_H #include #include #include #include "core/Global.h" #include "crypto/SymmetricCipherBackend.h" class SymmetricCipher { public: enum Algorithm { Aes256, Twofish, Salsa20 }; enum Mode { Cbc, Ecb, Stream }; enum Direction { Decrypt, Encrypt }; SymmetricCipher(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); ~SymmetricCipher(); bool init(const QByteArray& key, const QByteArray& iv); bool isInitalized() const; inline QByteArray process(const QByteArray& data, bool* ok) { return m_backend->process(data, ok); } inline bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT { return m_backend->processInPlace(data); } inline bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT { Q_ASSERT(rounds > 0); return m_backend->processInPlace(data, rounds); } bool reset(); int blockSize() const; QString errorString() const; private: static SymmetricCipherBackend* createBackend(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); const QScopedPointer m_backend; bool m_initialized; Q_DISABLE_COPY(SymmetricCipher) }; #endif // KEEPASSX_SYMMETRICCIPHER_H keepassx-2.0.3/src/crypto/SymmetricCipherBackend.h000066400000000000000000000026031276304217300222040ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SYMMETRICCIPHERBACKEND_H #define KEEPASSX_SYMMETRICCIPHERBACKEND_H #include class SymmetricCipherBackend { public: virtual ~SymmetricCipherBackend() {} virtual bool init() = 0; virtual bool setKey(const QByteArray& key) = 0; virtual bool setIv(const QByteArray& iv) = 0; virtual QByteArray process(const QByteArray& data, bool* ok) = 0; virtual bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT = 0; virtual bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT = 0; virtual bool reset() = 0; virtual int blockSize() const = 0; virtual QString errorString() const = 0; }; #endif // KEEPASSX_SYMMETRICCIPHERBACKEND_H keepassx-2.0.3/src/crypto/SymmetricCipherGcrypt.cpp000066400000000000000000000130431276304217300224600ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SymmetricCipherGcrypt.h" #include "config-keepassx.h" #include "crypto/Crypto.h" SymmetricCipherGcrypt::SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) : m_ctx(Q_NULLPTR) , m_algo(gcryptAlgo(algo)) , m_mode(gcryptMode(mode)) , m_direction(direction) , m_blockSize(-1) { } SymmetricCipherGcrypt::~SymmetricCipherGcrypt() { gcry_cipher_close(m_ctx); } int SymmetricCipherGcrypt::gcryptAlgo(SymmetricCipher::Algorithm algo) { switch (algo) { case SymmetricCipher::Aes256: return GCRY_CIPHER_AES256; case SymmetricCipher::Twofish: return GCRY_CIPHER_TWOFISH; #ifdef GCRYPT_HAS_SALSA20 case SymmetricCipher::Salsa20: return GCRY_CIPHER_SALSA20; #endif default: Q_ASSERT(false); return -1; } } int SymmetricCipherGcrypt::gcryptMode(SymmetricCipher::Mode mode) { switch (mode) { case SymmetricCipher::Ecb: return GCRY_CIPHER_MODE_ECB; case SymmetricCipher::Cbc: return GCRY_CIPHER_MODE_CBC; case SymmetricCipher::Stream: return GCRY_CIPHER_MODE_STREAM; default: Q_ASSERT(false); return -1; } } void SymmetricCipherGcrypt::setErrorString(gcry_error_t err) { const char* gcryptError = gcry_strerror(err); const char* gcryptErrorSource = gcry_strsource(err); m_errorString = QString("%1/%2").arg(QString::fromLocal8Bit(gcryptErrorSource), QString::fromLocal8Bit(gcryptError)); } bool SymmetricCipherGcrypt::init() { Q_ASSERT(Crypto::initalized()); gcry_error_t error; error = gcry_cipher_open(&m_ctx, m_algo, m_mode, 0); if (error != 0) { setErrorString(error); return false; } size_t blockSizeT; error = gcry_cipher_algo_info(m_algo, GCRYCTL_GET_BLKLEN, Q_NULLPTR, &blockSizeT); if (error != 0) { setErrorString(error); return false; } m_blockSize = blockSizeT; return true; } bool SymmetricCipherGcrypt::setKey(const QByteArray& key) { m_key = key; gcry_error_t error = gcry_cipher_setkey(m_ctx, m_key.constData(), m_key.size()); if (error != 0) { setErrorString(error); return false; } return true; } bool SymmetricCipherGcrypt::setIv(const QByteArray& iv) { m_iv = iv; gcry_error_t error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); if (error != 0) { setErrorString(error); return false; } return true; } QByteArray SymmetricCipherGcrypt::process(const QByteArray& data, bool* ok) { // TODO: check block size QByteArray result; result.resize(data.size()); gcry_error_t error; if (m_direction == SymmetricCipher::Decrypt) { error = gcry_cipher_decrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); } else { error = gcry_cipher_encrypt(m_ctx, result.data(), data.size(), data.constData(), data.size()); } if (error != 0) { setErrorString(error); *ok = false; } *ok = true; return result; } bool SymmetricCipherGcrypt::processInPlace(QByteArray& data) { // TODO: check block size gcry_error_t error; if (m_direction == SymmetricCipher::Decrypt) { error = gcry_cipher_decrypt(m_ctx, data.data(), data.size(), Q_NULLPTR, 0); } else { error = gcry_cipher_encrypt(m_ctx, data.data(), data.size(), Q_NULLPTR, 0); } if (error != 0) { setErrorString(error); return false; } return true; } bool SymmetricCipherGcrypt::processInPlace(QByteArray& data, quint64 rounds) { // TODO: check block size gcry_error_t error; char* rawData = data.data(); int size = data.size(); if (m_direction == SymmetricCipher::Decrypt) { for (quint64 i = 0; i != rounds; ++i) { error = gcry_cipher_decrypt(m_ctx, rawData, size, Q_NULLPTR, 0); if (error != 0) { setErrorString(error); return false; } } } else { for (quint64 i = 0; i != rounds; ++i) { error = gcry_cipher_encrypt(m_ctx, rawData, size, Q_NULLPTR, 0); if (error != 0) { setErrorString(error); return false; } } } return true; } bool SymmetricCipherGcrypt::reset() { gcry_error_t error; error = gcry_cipher_reset(m_ctx); if (error != 0) { setErrorString(error); return false; } error = gcry_cipher_setiv(m_ctx, m_iv.constData(), m_iv.size()); if (error != 0) { setErrorString(error); return false; } return true; } int SymmetricCipherGcrypt::blockSize() const { return m_blockSize; } QString SymmetricCipherGcrypt::errorString() const { return m_errorString; } keepassx-2.0.3/src/crypto/SymmetricCipherGcrypt.h000066400000000000000000000036151276304217300221310ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SYMMETRICCIPHERGCRYPT_H #define KEEPASSX_SYMMETRICCIPHERGCRYPT_H #include #include "crypto/SymmetricCipher.h" #include "crypto/SymmetricCipherBackend.h" class SymmetricCipherGcrypt : public SymmetricCipherBackend { public: SymmetricCipherGcrypt(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); ~SymmetricCipherGcrypt(); bool init(); bool setKey(const QByteArray& key); bool setIv(const QByteArray& iv); QByteArray process(const QByteArray& data, bool* ok); bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT; bool processInPlace(QByteArray& data, quint64 rounds) Q_REQUIRED_RESULT; bool reset(); int blockSize() const; QString errorString() const; private: static int gcryptAlgo(SymmetricCipher::Algorithm algo); static int gcryptMode(SymmetricCipher::Mode mode); void setErrorString(gcry_error_t err); gcry_cipher_hd_t m_ctx; const int m_algo; const int m_mode; const SymmetricCipher::Direction m_direction; QByteArray m_key; QByteArray m_iv; int m_blockSize; QString m_errorString; }; #endif // KEEPASSX_SYMMETRICCIPHERGCRYPT_H keepassx-2.0.3/src/crypto/SymmetricCipherSalsa20.cpp000066400000000000000000000057451276304217300224270ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SymmetricCipherSalsa20.h" SymmetricCipherSalsa20::SymmetricCipherSalsa20(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) { Q_ASSERT(algo == SymmetricCipher::Salsa20); Q_UNUSED(algo); Q_ASSERT(mode == SymmetricCipher::Stream); Q_UNUSED(mode); Q_UNUSED(direction); } SymmetricCipherSalsa20::~SymmetricCipherSalsa20() { } bool SymmetricCipherSalsa20::init() { return true; } bool SymmetricCipherSalsa20::setKey(const QByteArray& key) { Q_ASSERT((key.size() == 16) || (key.size() == 32)); m_key = key; ECRYPT_keysetup(&m_ctx, reinterpret_cast(m_key.constData()), m_key.size()*8, 64); return true; } bool SymmetricCipherSalsa20::setIv(const QByteArray& iv) { Q_ASSERT(iv.size() == 8); m_iv = iv; ECRYPT_ivsetup(&m_ctx, reinterpret_cast(m_iv.constData())); return true; } QByteArray SymmetricCipherSalsa20::process(const QByteArray& data, bool* ok) { Q_ASSERT((data.size() < blockSize()) || ((data.size() % blockSize()) == 0)); QByteArray result; result.resize(data.size()); ECRYPT_encrypt_bytes(&m_ctx, reinterpret_cast(data.constData()), reinterpret_cast(result.data()), data.size()); *ok = true; return result; } bool SymmetricCipherSalsa20::processInPlace(QByteArray& data) { Q_ASSERT((data.size() < blockSize()) || ((data.size() % blockSize()) == 0)); ECRYPT_encrypt_bytes(&m_ctx, reinterpret_cast(data.constData()), reinterpret_cast(data.data()), data.size()); return true; } bool SymmetricCipherSalsa20::processInPlace(QByteArray& data, quint64 rounds) { Q_ASSERT((data.size() < blockSize()) || ((data.size() % blockSize()) == 0)); for (quint64 i = 0; i != rounds; ++i) { ECRYPT_encrypt_bytes(&m_ctx, reinterpret_cast(data.constData()), reinterpret_cast(data.data()), data.size()); } return true; } bool SymmetricCipherSalsa20::reset() { ECRYPT_ivsetup(&m_ctx, reinterpret_cast(m_iv.constData())); return true; } int SymmetricCipherSalsa20::blockSize() const { return 64; } QString SymmetricCipherSalsa20::errorString() const { return QString(); } keepassx-2.0.3/src/crypto/SymmetricCipherSalsa20.h000066400000000000000000000033621276304217300220650ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SYMMETRICCIPHERSALSA20_H #define KEEPASSX_SYMMETRICCIPHERSALSA20_H #include "crypto/SymmetricCipher.h" #include "crypto/SymmetricCipherBackend.h" #include "crypto/salsa20/ecrypt-sync.h" class SymmetricCipherSalsa20 : public SymmetricCipherBackend { public: SymmetricCipherSalsa20(SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); ~SymmetricCipherSalsa20(); bool init(); void setAlgorithm(SymmetricCipher::Algorithm algo); void setMode(SymmetricCipher::Mode mode); void setDirection(SymmetricCipher::Direction direction); bool setKey(const QByteArray& key); bool setIv(const QByteArray& iv); QByteArray process(const QByteArray& data, bool* ok); bool processInPlace(QByteArray& data); bool processInPlace(QByteArray& data, quint64 rounds); bool reset(); int blockSize() const; QString errorString() const; private: ECRYPT_ctx m_ctx; QByteArray m_key; QByteArray m_iv; }; #endif // KEEPASSX_SYMMETRICCIPHERSALSA20_H keepassx-2.0.3/src/crypto/salsa20/000077500000000000000000000000001276304217300167205ustar00rootroot00000000000000keepassx-2.0.3/src/crypto/salsa20/ecrypt-config.h000066400000000000000000000101521276304217300216410ustar00rootroot00000000000000/* ecrypt-config.h */ /* *** Normally, it should not be necessary to edit this file. *** */ #ifndef ECRYPT_CONFIG #define ECRYPT_CONFIG /* ------------------------------------------------------------------------- */ /* Guess the endianness of the target architecture. */ #include #if Q_BYTE_ORDER == Q_LITTLE_ENDIAN #define ECRYPT_LITTLE_ENDIAN #elif Q_BYTE_ORDER == Q_BIG_ENDIAN #define ECRYPT_BIG_ENDIAN #else #define ECRYPT_UNKNOWN #endif /* ------------------------------------------------------------------------- */ /* * Find minimal-width types to store 8-bit, 16-bit, 32-bit, and 64-bit * integers. * * Note: to enable 64-bit types on 32-bit compilers, it might be * necessary to switch from ISO C90 mode to ISO C99 mode (e.g., gcc * -std=c99), or to allow compiler-specific extensions. */ #include /* --- check char --- */ #if (UCHAR_MAX / 0xFU > 0xFU) #ifndef I8T #define I8T char #define U8C(v) (v##U) #if (UCHAR_MAX == 0xFFU) #define ECRYPT_I8T_IS_BYTE #endif #endif #if (UCHAR_MAX / 0xFFU > 0xFFU) #ifndef I16T #define I16T char #define U16C(v) (v##U) #endif #if (UCHAR_MAX / 0xFFFFU > 0xFFFFU) #ifndef I32T #define I32T char #define U32C(v) (v##U) #endif #if (UCHAR_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) #ifndef I64T #define I64T char #define U64C(v) (v##U) #define ECRYPT_NATIVE64 #endif #endif #endif #endif #endif /* --- check short --- */ #if (USHRT_MAX / 0xFU > 0xFU) #ifndef I8T #define I8T short #define U8C(v) (v##U) #if (USHRT_MAX == 0xFFU) #define ECRYPT_I8T_IS_BYTE #endif #endif #if (USHRT_MAX / 0xFFU > 0xFFU) #ifndef I16T #define I16T short #define U16C(v) (v##U) #endif #if (USHRT_MAX / 0xFFFFU > 0xFFFFU) #ifndef I32T #define I32T short #define U32C(v) (v##U) #endif #if (USHRT_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) #ifndef I64T #define I64T short #define U64C(v) (v##U) #define ECRYPT_NATIVE64 #endif #endif #endif #endif #endif /* --- check int --- */ #if (UINT_MAX / 0xFU > 0xFU) #ifndef I8T #define I8T int #define U8C(v) (v##U) #if (ULONG_MAX == 0xFFU) #define ECRYPT_I8T_IS_BYTE #endif #endif #if (UINT_MAX / 0xFFU > 0xFFU) #ifndef I16T #define I16T int #define U16C(v) (v##U) #endif #if (UINT_MAX / 0xFFFFU > 0xFFFFU) #ifndef I32T #define I32T int #define U32C(v) (v##U) #endif #if (UINT_MAX / 0xFFFFFFFFU > 0xFFFFFFFFU) #ifndef I64T #define I64T int #define U64C(v) (v##U) #define ECRYPT_NATIVE64 #endif #endif #endif #endif #endif /* --- check long --- */ #if (ULONG_MAX / 0xFUL > 0xFUL) #ifndef I8T #define I8T long #define U8C(v) (v##UL) #if (ULONG_MAX == 0xFFUL) #define ECRYPT_I8T_IS_BYTE #endif #endif #if (ULONG_MAX / 0xFFUL > 0xFFUL) #ifndef I16T #define I16T long #define U16C(v) (v##UL) #endif #if (ULONG_MAX / 0xFFFFUL > 0xFFFFUL) #ifndef I32T #define I32T long #define U32C(v) (v##UL) #endif #if (ULONG_MAX / 0xFFFFFFFFUL > 0xFFFFFFFFUL) #ifndef I64T #define I64T long #define U64C(v) (v##UL) #define ECRYPT_NATIVE64 #endif #endif #endif #endif #endif /* --- check long long --- */ #ifdef ULLONG_MAX #if (ULLONG_MAX / 0xFULL > 0xFULL) #ifndef I8T #define I8T long long #define U8C(v) (v##ULL) #if (ULLONG_MAX == 0xFFULL) #define ECRYPT_I8T_IS_BYTE #endif #endif #if (ULLONG_MAX / 0xFFULL > 0xFFULL) #ifndef I16T #define I16T long long #define U16C(v) (v##ULL) #endif #if (ULLONG_MAX / 0xFFFFULL > 0xFFFFULL) #ifndef I32T #define I32T long long #define U32C(v) (v##ULL) #endif #if (ULLONG_MAX / 0xFFFFFFFFULL > 0xFFFFFFFFULL) #ifndef I64T #define I64T long long #define U64C(v) (v##ULL) #endif #endif #endif #endif #endif #endif /* --- check __int64 --- */ #if !defined(__STDC__) && defined(_UI64_MAX) #ifndef I64T #define I64T __int64 #define U64C(v) (v##ui64) #endif #endif /* ------------------------------------------------------------------------- */ /* find the largest type on this platform (used for alignment) */ #if defined(__SSE__) || (defined(_MSC_VER) && (_MSC_VER >= 1300)) #include #define MAXT __m128 #elif defined(__MMX__) #include #define MAXT __m64 #elif defined(__ALTIVEC__) #define MAXT __vector int #else #define MAXT long #endif /* ------------------------------------------------------------------------- */ #endif keepassx-2.0.3/src/crypto/salsa20/ecrypt-machine.h000066400000000000000000000022361276304217300220040ustar00rootroot00000000000000/* ecrypt-machine.h */ /* * This file is included by 'ecrypt-portable.h'. It allows to override * the default macros for specific platforms. Please carefully check * the machine code generated by your compiler (with optimisations * turned on) before deciding to edit this file. */ /* ------------------------------------------------------------------------- */ #if (defined(ECRYPT_DEFAULT_ROT) && !defined(ECRYPT_MACHINE_ROT)) #define ECRYPT_MACHINE_ROT #if (defined(WIN32) && defined(_MSC_VER)) #undef ROTL32 #undef ROTR32 #undef ROTL64 #undef ROTR64 #include #pragma intrinsic(_lrotl) /* compile rotations "inline" */ #pragma intrinsic(_lrotr) #define ROTL32(v, n) _lrotl(v, n) #define ROTR32(v, n) _lrotr(v, n) #define ROTL64(v, n) _rotl64(v, n) #define ROTR64(v, n) _rotr64(v, n) #endif #endif /* ------------------------------------------------------------------------- */ #if (defined(ECRYPT_DEFAULT_SWAP) && !defined(ECRYPT_MACHINE_SWAP)) #define ECRYPT_MACHINE_SWAP /* * If you want to overwrite the default swap macros, put it here. And so on. */ #endif /* ------------------------------------------------------------------------- */ keepassx-2.0.3/src/crypto/salsa20/ecrypt-portable.h000066400000000000000000000166551276304217300222220ustar00rootroot00000000000000/* ecrypt-portable.h */ /* * WARNING: the conversions defined below are implemented as macros, * and should be used carefully. They should NOT be used with * parameters which perform some action. E.g., the following two lines * are not equivalent: * * 1) ++x; y = ROTL32(x, n); * 2) y = ROTL32(++x, n); */ /* * *** Please do not edit this file. *** * * The default macros can be overridden for specific architectures by * editing 'ecrypt-machine.h'. */ #ifndef ECRYPT_PORTABLE #define ECRYPT_PORTABLE #include "ecrypt-config.h" /* ------------------------------------------------------------------------- */ /* * The following types are defined (if available): * * u8: unsigned integer type, at least 8 bits * u16: unsigned integer type, at least 16 bits * u32: unsigned integer type, at least 32 bits * u64: unsigned integer type, at least 64 bits * * s8, s16, s32, s64 -> signed counterparts of u8, u16, u32, u64 * * The selection of minimum-width integer types is taken care of by * 'ecrypt-config.h'. Note: to enable 64-bit types on 32-bit * compilers, it might be necessary to switch from ISO C90 mode to ISO * C99 mode (e.g., gcc -std=c99). */ #ifdef I8T typedef signed I8T s8; typedef unsigned I8T u8; #endif #ifdef I16T typedef signed I16T s16; typedef unsigned I16T u16; #endif #ifdef I32T typedef signed I32T s32; typedef unsigned I32T u32; #endif #ifdef I64T typedef signed I64T s64; typedef unsigned I64T u64; #endif /* * The following macros are used to obtain exact-width results. */ #define U8V(v) ((u8)(v) & U8C(0xFF)) #define U16V(v) ((u16)(v) & U16C(0xFFFF)) #define U32V(v) ((u32)(v) & U32C(0xFFFFFFFF)) #define U64V(v) ((u64)(v) & U64C(0xFFFFFFFFFFFFFFFF)) /* ------------------------------------------------------------------------- */ /* * The following macros return words with their bits rotated over n * positions to the left/right. */ #define ECRYPT_DEFAULT_ROT #define ROTL8(v, n) \ (U8V((v) << (n)) | ((v) >> (8 - (n)))) #define ROTL16(v, n) \ (U16V((v) << (n)) | ((v) >> (16 - (n)))) #define ROTL32(v, n) \ (U32V((v) << (n)) | ((v) >> (32 - (n)))) #define ROTL64(v, n) \ (U64V((v) << (n)) | ((v) >> (64 - (n)))) #define ROTR8(v, n) ROTL8(v, 8 - (n)) #define ROTR16(v, n) ROTL16(v, 16 - (n)) #define ROTR32(v, n) ROTL32(v, 32 - (n)) #define ROTR64(v, n) ROTL64(v, 64 - (n)) #include "ecrypt-machine.h" /* ------------------------------------------------------------------------- */ /* * The following macros return a word with bytes in reverse order. */ #define ECRYPT_DEFAULT_SWAP #define SWAP16(v) \ ROTL16(v, 8) #define SWAP32(v) \ ((ROTL32(v, 8) & U32C(0x00FF00FF)) | \ (ROTL32(v, 24) & U32C(0xFF00FF00))) #ifdef ECRYPT_NATIVE64 #define SWAP64(v) \ ((ROTL64(v, 8) & U64C(0x000000FF000000FF)) | \ (ROTL64(v, 24) & U64C(0x0000FF000000FF00)) | \ (ROTL64(v, 40) & U64C(0x00FF000000FF0000)) | \ (ROTL64(v, 56) & U64C(0xFF000000FF000000))) #else #define SWAP64(v) \ (((u64)SWAP32(U32V(v)) << 32) | (u64)SWAP32(U32V(v >> 32))) #endif #include "ecrypt-machine.h" #define ECRYPT_DEFAULT_WTOW #ifdef ECRYPT_LITTLE_ENDIAN #define U16TO16_LITTLE(v) (v) #define U32TO32_LITTLE(v) (v) #define U64TO64_LITTLE(v) (v) #define U16TO16_BIG(v) SWAP16(v) #define U32TO32_BIG(v) SWAP32(v) #define U64TO64_BIG(v) SWAP64(v) #endif #ifdef ECRYPT_BIG_ENDIAN #define U16TO16_LITTLE(v) SWAP16(v) #define U32TO32_LITTLE(v) SWAP32(v) #define U64TO64_LITTLE(v) SWAP64(v) #define U16TO16_BIG(v) (v) #define U32TO32_BIG(v) (v) #define U64TO64_BIG(v) (v) #endif #include "ecrypt-machine.h" /* * The following macros load words from an array of bytes with * different types of endianness, and vice versa. */ #define ECRYPT_DEFAULT_BTOW #if (!defined(ECRYPT_UNKNOWN) && defined(ECRYPT_I8T_IS_BYTE)) #define U8TO16_LITTLE(p) U16TO16_LITTLE(((u16*)(p))[0]) #define U8TO32_LITTLE(p) U32TO32_LITTLE(((u32*)(p))[0]) #define U8TO64_LITTLE(p) U64TO64_LITTLE(((u64*)(p))[0]) #define U8TO16_BIG(p) U16TO16_BIG(((u16*)(p))[0]) #define U8TO32_BIG(p) U32TO32_BIG(((u32*)(p))[0]) #define U8TO64_BIG(p) U64TO64_BIG(((u64*)(p))[0]) #define U16TO8_LITTLE(p, v) (((u16*)(p))[0] = U16TO16_LITTLE(v)) #define U32TO8_LITTLE(p, v) (((u32*)(p))[0] = U32TO32_LITTLE(v)) #define U64TO8_LITTLE(p, v) (((u64*)(p))[0] = U64TO64_LITTLE(v)) #define U16TO8_BIG(p, v) (((u16*)(p))[0] = U16TO16_BIG(v)) #define U32TO8_BIG(p, v) (((u32*)(p))[0] = U32TO32_BIG(v)) #define U64TO8_BIG(p, v) (((u64*)(p))[0] = U64TO64_BIG(v)) #else #define U8TO16_LITTLE(p) \ (((u16)((p)[0]) ) | \ ((u16)((p)[1]) << 8)) #define U8TO32_LITTLE(p) \ (((u32)((p)[0]) ) | \ ((u32)((p)[1]) << 8) | \ ((u32)((p)[2]) << 16) | \ ((u32)((p)[3]) << 24)) #ifdef ECRYPT_NATIVE64 #define U8TO64_LITTLE(p) \ (((u64)((p)[0]) ) | \ ((u64)((p)[1]) << 8) | \ ((u64)((p)[2]) << 16) | \ ((u64)((p)[3]) << 24) | \ ((u64)((p)[4]) << 32) | \ ((u64)((p)[5]) << 40) | \ ((u64)((p)[6]) << 48) | \ ((u64)((p)[7]) << 56)) #else #define U8TO64_LITTLE(p) \ ((u64)U8TO32_LITTLE(p) | ((u64)U8TO32_LITTLE((p) + 4) << 32)) #endif #define U8TO16_BIG(p) \ (((u16)((p)[0]) << 8) | \ ((u16)((p)[1]) )) #define U8TO32_BIG(p) \ (((u32)((p)[0]) << 24) | \ ((u32)((p)[1]) << 16) | \ ((u32)((p)[2]) << 8) | \ ((u32)((p)[3]) )) #ifdef ECRYPT_NATIVE64 #define U8TO64_BIG(p) \ (((u64)((p)[0]) << 56) | \ ((u64)((p)[1]) << 48) | \ ((u64)((p)[2]) << 40) | \ ((u64)((p)[3]) << 32) | \ ((u64)((p)[4]) << 24) | \ ((u64)((p)[5]) << 16) | \ ((u64)((p)[6]) << 8) | \ ((u64)((p)[7]) )) #else #define U8TO64_BIG(p) \ (((u64)U8TO32_BIG(p) << 32) | (u64)U8TO32_BIG((p) + 4)) #endif #define U16TO8_LITTLE(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ } while (0) #define U32TO8_LITTLE(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ (p)[2] = U8V((v) >> 16); \ (p)[3] = U8V((v) >> 24); \ } while (0) #ifdef ECRYPT_NATIVE64 #define U64TO8_LITTLE(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ (p)[2] = U8V((v) >> 16); \ (p)[3] = U8V((v) >> 24); \ (p)[4] = U8V((v) >> 32); \ (p)[5] = U8V((v) >> 40); \ (p)[6] = U8V((v) >> 48); \ (p)[7] = U8V((v) >> 56); \ } while (0) #else #define U64TO8_LITTLE(p, v) \ do { \ U32TO8_LITTLE((p), U32V((v) )); \ U32TO8_LITTLE((p) + 4, U32V((v) >> 32)); \ } while (0) #endif #define U16TO8_BIG(p, v) \ do { \ (p)[0] = U8V((v) ); \ (p)[1] = U8V((v) >> 8); \ } while (0) #define U32TO8_BIG(p, v) \ do { \ (p)[0] = U8V((v) >> 24); \ (p)[1] = U8V((v) >> 16); \ (p)[2] = U8V((v) >> 8); \ (p)[3] = U8V((v) ); \ } while (0) #ifdef ECRYPT_NATIVE64 #define U64TO8_BIG(p, v) \ do { \ (p)[0] = U8V((v) >> 56); \ (p)[1] = U8V((v) >> 48); \ (p)[2] = U8V((v) >> 40); \ (p)[3] = U8V((v) >> 32); \ (p)[4] = U8V((v) >> 24); \ (p)[5] = U8V((v) >> 16); \ (p)[6] = U8V((v) >> 8); \ (p)[7] = U8V((v) ); \ } while (0) #else #define U64TO8_BIG(p, v) \ do { \ U32TO8_BIG((p), U32V((v) >> 32)); \ U32TO8_BIG((p) + 4, U32V((v) )); \ } while (0) #endif #endif #include "ecrypt-machine.h" /* ------------------------------------------------------------------------- */ #define AT_LEAST_ONE(n) (((n) < 1) ? 1 : (n)) #define ALIGN(t, v, n) \ union { t b[n]; MAXT l[AT_LEAST_ONE(n * sizeof(t) / sizeof(MAXT))]; } v /* ------------------------------------------------------------------------- */ #endif keepassx-2.0.3/src/crypto/salsa20/ecrypt-sync.h000066400000000000000000000167121276304217300213600ustar00rootroot00000000000000/* ecrypt-sync.h */ /* * Header file for synchronous stream ciphers without authentication * mechanism. * * *** Please only edit parts marked with "[edit]". *** */ #ifndef ECRYPT_SYNC #define ECRYPT_SYNC #ifdef __cplusplus extern "C" { #endif #include "ecrypt-portable.h" /* ------------------------------------------------------------------------- */ /* Cipher parameters */ /* * The name of your cipher. */ #define ECRYPT_NAME "Salsa20" /* [edit] */ #define ECRYPT_PROFILE "S!_H." /* * Specify which key and IV sizes are supported by your cipher. A user * should be able to enumerate the supported sizes by running the * following code: * * for (i = 0; ECRYPT_KEYSIZE(i) <= ECRYPT_MAXKEYSIZE; ++i) * { * keysize = ECRYPT_KEYSIZE(i); * * ... * } * * All sizes are in bits. */ #define ECRYPT_MAXKEYSIZE 256 /* [edit] */ #define ECRYPT_KEYSIZE(i) (128 + (i)*128) /* [edit] */ #define ECRYPT_MAXIVSIZE 64 /* [edit] */ #define ECRYPT_IVSIZE(i) (64 + (i)*64) /* [edit] */ /* ------------------------------------------------------------------------- */ /* Data structures */ /* * ECRYPT_ctx is the structure containing the representation of the * internal state of your cipher. */ typedef struct { u32 input[16]; /* could be compressed */ /* * [edit] * * Put here all state variable needed during the encryption process. */ } ECRYPT_ctx; /* ------------------------------------------------------------------------- */ /* Mandatory functions */ /* * Key and message independent initialization. This function will be * called once when the program starts (e.g., to build expanded S-box * tables). */ void ECRYPT_init(); /* * Key setup. It is the user's responsibility to select the values of * keysize and ivsize from the set of supported values specified * above. */ void ECRYPT_keysetup( ECRYPT_ctx* ctx, const u8* key, u32 keysize, /* Key size in bits. */ u32 ivsize); /* IV size in bits. */ /* * IV setup. After having called ECRYPT_keysetup(), the user is * allowed to call ECRYPT_ivsetup() different times in order to * encrypt/decrypt different messages with the same key but different * IV's. */ void ECRYPT_ivsetup( ECRYPT_ctx* ctx, const u8* iv); /* * Encryption/decryption of arbitrary length messages. * * For efficiency reasons, the API provides two types of * encrypt/decrypt functions. The ECRYPT_encrypt_bytes() function * (declared here) encrypts byte strings of arbitrary length, while * the ECRYPT_encrypt_blocks() function (defined later) only accepts * lengths which are multiples of ECRYPT_BLOCKLENGTH. * * The user is allowed to make multiple calls to * ECRYPT_encrypt_blocks() to incrementally encrypt a long message, * but he is NOT allowed to make additional encryption calls once he * has called ECRYPT_encrypt_bytes() (unless he starts a new message * of course). For example, this sequence of calls is acceptable: * * ECRYPT_keysetup(); * * ECRYPT_ivsetup(); * ECRYPT_encrypt_blocks(); * ECRYPT_encrypt_blocks(); * ECRYPT_encrypt_bytes(); * * ECRYPT_ivsetup(); * ECRYPT_encrypt_blocks(); * ECRYPT_encrypt_blocks(); * * ECRYPT_ivsetup(); * ECRYPT_encrypt_bytes(); * * The following sequence is not: * * ECRYPT_keysetup(); * ECRYPT_ivsetup(); * ECRYPT_encrypt_blocks(); * ECRYPT_encrypt_bytes(); * ECRYPT_encrypt_blocks(); */ void ECRYPT_encrypt_bytes( ECRYPT_ctx* ctx, const u8* plaintext, u8* ciphertext, u32 msglen); /* Message length in bytes. */ void ECRYPT_decrypt_bytes( ECRYPT_ctx* ctx, const u8* ciphertext, u8* plaintext, u32 msglen); /* Message length in bytes. */ /* ------------------------------------------------------------------------- */ /* Optional features */ /* * For testing purposes it can sometimes be useful to have a function * which immediately generates keystream without having to provide it * with a zero plaintext. If your cipher cannot provide this function * (e.g., because it is not strictly a synchronous cipher), please * reset the ECRYPT_GENERATES_KEYSTREAM flag. */ #define ECRYPT_GENERATES_KEYSTREAM #ifdef ECRYPT_GENERATES_KEYSTREAM void ECRYPT_keystream_bytes( ECRYPT_ctx* ctx, u8* keystream, u32 length); /* Length of keystream in bytes. */ #endif /* ------------------------------------------------------------------------- */ /* Optional optimizations */ /* * By default, the functions in this section are implemented using * calls to functions declared above. However, you might want to * implement them differently for performance reasons. */ /* * All-in-one encryption/decryption of (short) packets. * * The default definitions of these functions can be found in * "ecrypt-sync.c". If you want to implement them differently, please * undef the ECRYPT_USES_DEFAULT_ALL_IN_ONE flag. */ #define ECRYPT_USES_DEFAULT_ALL_IN_ONE /* [edit] */ void ECRYPT_encrypt_packet( ECRYPT_ctx* ctx, const u8* iv, const u8* plaintext, u8* ciphertext, u32 msglen); void ECRYPT_decrypt_packet( ECRYPT_ctx* ctx, const u8* iv, const u8* ciphertext, u8* plaintext, u32 msglen); /* * Encryption/decryption of blocks. * * By default, these functions are defined as macros. If you want to * provide a different implementation, please undef the * ECRYPT_USES_DEFAULT_BLOCK_MACROS flag and implement the functions * declared below. */ #define ECRYPT_BLOCKLENGTH 64 /* [edit] */ #define ECRYPT_USES_DEFAULT_BLOCK_MACROS /* [edit] */ #ifdef ECRYPT_USES_DEFAULT_BLOCK_MACROS #define ECRYPT_encrypt_blocks(ctx, plaintext, ciphertext, blocks) \ ECRYPT_encrypt_bytes(ctx, plaintext, ciphertext, \ (blocks) * ECRYPT_BLOCKLENGTH) #define ECRYPT_decrypt_blocks(ctx, ciphertext, plaintext, blocks) \ ECRYPT_decrypt_bytes(ctx, ciphertext, plaintext, \ (blocks) * ECRYPT_BLOCKLENGTH) #ifdef ECRYPT_GENERATES_KEYSTREAM #define ECRYPT_keystream_blocks(ctx, keystream, blocks) \ ECRYPT_keystream_bytes(ctx, keystream, \ (blocks) * ECRYPT_BLOCKLENGTH) #endif #else void ECRYPT_encrypt_blocks( ECRYPT_ctx* ctx, const u8* plaintext, u8* ciphertext, u32 blocks); /* Message length in blocks. */ void ECRYPT_decrypt_blocks( ECRYPT_ctx* ctx, const u8* ciphertext, u8* plaintext, u32 blocks); /* Message length in blocks. */ #ifdef ECRYPT_GENERATES_KEYSTREAM void ECRYPT_keystream_blocks( ECRYPT_ctx* ctx, const u8* keystream, u32 blocks); /* Keystream length in blocks. */ #endif #endif /* * If your cipher can be implemented in different ways, you can use * the ECRYPT_VARIANT parameter to allow the user to choose between * them at compile time (e.g., gcc -DECRYPT_VARIANT=3 ...). Please * only use this possibility if you really think it could make a * significant difference and keep the number of variants * (ECRYPT_MAXVARIANT) as small as possible (definitely not more than * 10). Note also that all variants should have exactly the same * external interface (i.e., the same ECRYPT_BLOCKLENGTH, etc.). */ #define ECRYPT_MAXVARIANT 1 /* [edit] */ #ifndef ECRYPT_VARIANT #define ECRYPT_VARIANT 1 #endif #if (ECRYPT_VARIANT > ECRYPT_MAXVARIANT) #error this variant does not exist #endif /* ------------------------------------------------------------------------- */ #ifdef __cplusplus } #endif #endif keepassx-2.0.3/src/crypto/salsa20/salsa20.c000066400000000000000000000077761276304217300203520ustar00rootroot00000000000000/* salsa20-ref.c version 20051118 D. J. Bernstein Public domain. */ #include "ecrypt-sync.h" #define ROTATE(v,c) (ROTL32(v,c)) #define XOR(v,w) ((v) ^ (w)) #define PLUS(v,w) (U32V((v) + (w))) #define PLUSONE(v) (PLUS((v),1)) static void salsa20_wordtobyte(u8 output[64],const u32 input[16]) { u32 x[16]; int i; for (i = 0;i < 16;++i) x[i] = input[i]; for (i = 20;i > 0;i -= 2) { x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 0],x[12]), 7)); x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[ 4],x[ 0]), 9)); x[12] = XOR(x[12],ROTATE(PLUS(x[ 8],x[ 4]),13)); x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[12],x[ 8]),18)); x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 5],x[ 1]), 7)); x[13] = XOR(x[13],ROTATE(PLUS(x[ 9],x[ 5]), 9)); x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[13],x[ 9]),13)); x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 1],x[13]),18)); x[14] = XOR(x[14],ROTATE(PLUS(x[10],x[ 6]), 7)); x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[14],x[10]), 9)); x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 2],x[14]),13)); x[10] = XOR(x[10],ROTATE(PLUS(x[ 6],x[ 2]),18)); x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[15],x[11]), 7)); x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 3],x[15]), 9)); x[11] = XOR(x[11],ROTATE(PLUS(x[ 7],x[ 3]),13)); x[15] = XOR(x[15],ROTATE(PLUS(x[11],x[ 7]),18)); x[ 1] = XOR(x[ 1],ROTATE(PLUS(x[ 0],x[ 3]), 7)); x[ 2] = XOR(x[ 2],ROTATE(PLUS(x[ 1],x[ 0]), 9)); x[ 3] = XOR(x[ 3],ROTATE(PLUS(x[ 2],x[ 1]),13)); x[ 0] = XOR(x[ 0],ROTATE(PLUS(x[ 3],x[ 2]),18)); x[ 6] = XOR(x[ 6],ROTATE(PLUS(x[ 5],x[ 4]), 7)); x[ 7] = XOR(x[ 7],ROTATE(PLUS(x[ 6],x[ 5]), 9)); x[ 4] = XOR(x[ 4],ROTATE(PLUS(x[ 7],x[ 6]),13)); x[ 5] = XOR(x[ 5],ROTATE(PLUS(x[ 4],x[ 7]),18)); x[11] = XOR(x[11],ROTATE(PLUS(x[10],x[ 9]), 7)); x[ 8] = XOR(x[ 8],ROTATE(PLUS(x[11],x[10]), 9)); x[ 9] = XOR(x[ 9],ROTATE(PLUS(x[ 8],x[11]),13)); x[10] = XOR(x[10],ROTATE(PLUS(x[ 9],x[ 8]),18)); x[12] = XOR(x[12],ROTATE(PLUS(x[15],x[14]), 7)); x[13] = XOR(x[13],ROTATE(PLUS(x[12],x[15]), 9)); x[14] = XOR(x[14],ROTATE(PLUS(x[13],x[12]),13)); x[15] = XOR(x[15],ROTATE(PLUS(x[14],x[13]),18)); } for (i = 0;i < 16;++i) x[i] = PLUS(x[i],input[i]); for (i = 0;i < 16;++i) U32TO8_LITTLE(output + 4 * i,x[i]); } void ECRYPT_init(void) { return; } static const char sigma[16] = "expand 32-byte k"; static const char tau[16] = "expand 16-byte k"; void ECRYPT_keysetup(ECRYPT_ctx *x,const u8 *k,u32 kbits,u32 ivbits) { (void)ivbits; const char *constants; x->input[1] = U8TO32_LITTLE(k + 0); x->input[2] = U8TO32_LITTLE(k + 4); x->input[3] = U8TO32_LITTLE(k + 8); x->input[4] = U8TO32_LITTLE(k + 12); if (kbits == 256) { /* recommended */ k += 16; constants = sigma; } else { /* kbits == 128 */ constants = tau; } x->input[11] = U8TO32_LITTLE(k + 0); x->input[12] = U8TO32_LITTLE(k + 4); x->input[13] = U8TO32_LITTLE(k + 8); x->input[14] = U8TO32_LITTLE(k + 12); x->input[0] = U8TO32_LITTLE(constants + 0); x->input[5] = U8TO32_LITTLE(constants + 4); x->input[10] = U8TO32_LITTLE(constants + 8); x->input[15] = U8TO32_LITTLE(constants + 12); } void ECRYPT_ivsetup(ECRYPT_ctx *x,const u8 *iv) { x->input[6] = U8TO32_LITTLE(iv + 0); x->input[7] = U8TO32_LITTLE(iv + 4); x->input[8] = 0; x->input[9] = 0; } void ECRYPT_encrypt_bytes(ECRYPT_ctx *x,const u8 *m,u8 *c,u32 bytes) { u8 output[64]; u32 i; if (!bytes) return; for (;;) { salsa20_wordtobyte(output,x->input); x->input[8] = PLUSONE(x->input[8]); if (!x->input[8]) { x->input[9] = PLUSONE(x->input[9]); /* stopping at 2^70 bytes per nonce is user's responsibility */ } if (bytes <= 64) { for (i = 0;i < bytes;++i) c[i] = m[i] ^ output[i]; return; } for (i = 0;i < 64;++i) c[i] = m[i] ^ output[i]; bytes -= 64; c += 64; m += 64; } } void ECRYPT_decrypt_bytes(ECRYPT_ctx *x,const u8 *c,u8 *m,u32 bytes) { ECRYPT_encrypt_bytes(x,c,m,bytes); } void ECRYPT_keystream_bytes(ECRYPT_ctx *x,u8 *stream,u32 bytes) { u32 i; for (i = 0;i < bytes;++i) stream[i] = 0; ECRYPT_encrypt_bytes(x,stream,stream,bytes); } keepassx-2.0.3/src/format/000077500000000000000000000000001276304217300154235ustar00rootroot00000000000000keepassx-2.0.3/src/format/CsvExporter.cpp000066400000000000000000000053301276304217300204140ustar00rootroot00000000000000/* * Copyright (C) 2015 Florian Geyer * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "CsvExporter.h" #include #include "core/Database.h" #include "core/Group.h" bool CsvExporter::exportDatabase(const QString& filename, const Database* db) { QFile file(filename); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { m_error = file.errorString(); return false; } return exportDatabase(&file, db); } bool CsvExporter::exportDatabase(QIODevice* device, const Database* db) { QString header; addColumn(header, "Group"); addColumn(header, "Title"); addColumn(header, "Username"); addColumn(header, "Password"); addColumn(header, "URL"); addColumn(header, "Notes"); header.append("\n"); if (device->write(header.toUtf8()) == -1) { m_error = device->errorString(); return false; } return writeGroup(device, db->rootGroup()); } QString CsvExporter::errorString() const { return m_error; } bool CsvExporter::writeGroup(QIODevice* device, const Group* group, QString groupPath) { if (!groupPath.isEmpty()) { groupPath.append("/"); } groupPath.append(group->name()); Q_FOREACH (const Entry* entry, group->entries()) { QString line; addColumn(line, groupPath); addColumn(line, entry->title()); addColumn(line, entry->username()); addColumn(line, entry->password()); addColumn(line, entry->url()); addColumn(line, entry->notes()); line.append("\n"); if (device->write(line.toUtf8()) == -1) { m_error = device->errorString(); return false; } } Q_FOREACH (const Group* child, group->children()) { if (!writeGroup(device, child, groupPath)) { return false; } } return true; } void CsvExporter::addColumn(QString& str, const QString& column) { if (!str.isEmpty()) { str.append(","); } str.append("\""); str.append(QString(column).replace("\"", "\"\"")); str.append("\""); } keepassx-2.0.3/src/format/CsvExporter.h000066400000000000000000000024341276304217300200630ustar00rootroot00000000000000/* * Copyright (C) 2015 Florian Geyer * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CSVEXPORTER_H #define KEEPASSX_CSVEXPORTER_H #include class Database; class Group; class QIODevice; class CsvExporter { public: bool exportDatabase(const QString& filename, const Database* db); bool exportDatabase(QIODevice* device, const Database* db); QString errorString() const; private: bool writeGroup(QIODevice* device, const Group* group, QString groupPath = QString()); void addColumn(QString& str, const QString& column); QString m_error; }; #endif // KEEPASSX_CSVEXPORTER_H keepassx-2.0.3/src/format/KeePass1.h000066400000000000000000000022711276304217300172120ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS1_H #define KEEPASSX_KEEPASS1_H #include namespace KeePass1 { const quint32 SIGNATURE_1 = 0x9AA2D903; const quint32 SIGNATURE_2 = 0xB54BFB65; const quint32 PWM_DBVER_DW = 0x00030002; const quint32 FILE_VERSION = 0x00030002; const quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFFFF00; const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; enum EncryptionFlags { Rijndael = 2, Twofish = 8 }; } #endif // KEEPASSX_KEEPASS1_H keepassx-2.0.3/src/format/KeePass1Reader.cpp000066400000000000000000000736321276304217300207010ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass1Reader.h" #include #include #include #include "core/Database.h" #include "core/Endian.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/CryptoHash.h" #include "format/KeePass1.h" #include "keys/CompositeKey.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" #include "streams/SymmetricCipherStream.h" class KeePass1Key : public CompositeKey { public: virtual QByteArray rawKey() const; virtual void clear(); void setPassword(const QByteArray& password); void setKeyfileData(const QByteArray& keyfileData); private: QByteArray m_password; QByteArray m_keyfileData; }; KeePass1Reader::KeePass1Reader() : m_db(Q_NULLPTR) , m_tmpParent(Q_NULLPTR) , m_device(Q_NULLPTR) , m_encryptionFlags(0) , m_transformRounds(0) , m_error(false) { } Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice) { m_error = false; m_errorStr.clear(); QByteArray keyfileData; FileKey newFileKey; if (keyfileDevice) { keyfileData = readKeyfile(keyfileDevice); if (keyfileData.isEmpty()) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); return Q_NULLPTR; } if (!keyfileDevice->seek(0)) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); return Q_NULLPTR; } if (!newFileKey.load(keyfileDevice)) { raiseError(tr("Unable to read keyfile.").append("\n").append(keyfileDevice->errorString())); return Q_NULLPTR; } } QScopedPointer db(new Database()); QScopedPointer tmpParent(new Group()); m_db = db.data(); m_tmpParent = tmpParent.data(); m_device = device; bool ok; quint32 signature1 = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok || signature1 != KeePass1::SIGNATURE_1) { raiseError(tr("Not a KeePass database.")); return Q_NULLPTR; } quint32 signature2 = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok || signature2 != KeePass1::SIGNATURE_2) { raiseError(tr("Not a KeePass database.")); return Q_NULLPTR; } m_encryptionFlags = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok || !(m_encryptionFlags & KeePass1::Rijndael || m_encryptionFlags & KeePass1::Twofish)) { raiseError(tr("Unsupported encryption algorithm.")); return Q_NULLPTR; } quint32 version = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok || (version & KeePass1::FILE_VERSION_CRITICAL_MASK) != (KeePass1::FILE_VERSION & KeePass1::FILE_VERSION_CRITICAL_MASK)) { raiseError(tr("Unsupported KeePass database version.")); return Q_NULLPTR; } m_masterSeed = m_device->read(16); if (m_masterSeed.size() != 16) { raiseError("Unable to read master seed"); return Q_NULLPTR; } m_encryptionIV = m_device->read(16); if (m_encryptionIV.size() != 16) { raiseError("Unable to read encryption IV"); return Q_NULLPTR; } quint32 numGroups = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError("Invalid number of groups"); return Q_NULLPTR; } quint32 numEntries = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError("Invalid number of entries"); return Q_NULLPTR; } m_contentHashHeader = m_device->read(32); if (m_contentHashHeader.size() != 32) { raiseError("Invalid content hash size"); return Q_NULLPTR; } m_transformSeed = m_device->read(32); if (m_transformSeed.size() != 32) { raiseError("Invalid transform seed size"); return Q_NULLPTR; } m_transformRounds = Endian::readUInt32(m_device, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError("Invalid number of transform rounds"); return Q_NULLPTR; } if (!m_db->setTransformRounds(m_transformRounds)) { raiseError(tr("Unable to calculate master key")); return Q_NULLPTR; } qint64 contentPos = m_device->pos(); QScopedPointer cipherStream(testKeys(password, keyfileData, contentPos)); if (!cipherStream) { return Q_NULLPTR; } QList groups; for (quint32 i = 0; i < numGroups; i++) { Group* group = readGroup(cipherStream.data()); if (!group) { return Q_NULLPTR; } groups.append(group); } QList entries; for (quint32 i = 0; i < numEntries; i++) { Entry* entry = readEntry(cipherStream.data()); if (!entry) { return Q_NULLPTR; } entries.append(entry); } if (!constructGroupTree(groups)) { raiseError("Unable to construct group tree"); return Q_NULLPTR; } Q_FOREACH (Entry* entry, entries) { if (isMetaStream(entry)) { parseMetaStream(entry); delete entry; } else { quint32 groupId = m_entryGroupIds.value(entry); if (!m_groupIds.contains(groupId)) { qWarning("Orphaned entry found, assigning to root group."); entry->setGroup(m_db->rootGroup()); } else { entry->setGroup(m_groupIds.value(groupId)); } entry->setUuid(Uuid::random()); } } db->rootGroup()->setName(tr("Root")); Q_FOREACH (Group* group, db->rootGroup()->children()) { if (group->name() == "Backup") { group->setSearchingEnabled(Group::Disable); group->setAutoTypeEnabled(Group::Disable); } } Q_ASSERT(m_tmpParent->children().isEmpty()); Q_ASSERT(m_tmpParent->entries().isEmpty()); Q_FOREACH (Group* group, groups) { group->setUpdateTimeinfo(true); } Q_FOREACH (Entry* entry, m_db->rootGroup()->entriesRecursive()) { entry->setUpdateTimeinfo(true); } CompositeKey key; if (!password.isEmpty()) { key.addKey(PasswordKey(password)); } if (keyfileDevice) { key.addKey(newFileKey); } if (!db->setKey(key)) { raiseError(tr("Unable to calculate master key")); return Q_NULLPTR; } return db.take(); } Database* KeePass1Reader::readDatabase(QIODevice* device, const QString& password, const QString& keyfileName) { QScopedPointer keyFile; if (!keyfileName.isEmpty()) { keyFile.reset(new QFile(keyfileName)); if (!keyFile->open(QFile::ReadOnly)) { raiseError(keyFile->errorString()); return Q_NULLPTR; } } QScopedPointer db(readDatabase(device, password, keyFile.data())); return db.take(); } Database* KeePass1Reader::readDatabase(const QString& filename, const QString& password, const QString& keyfileName) { QFile dbFile(filename); if (!dbFile.open(QFile::ReadOnly)) { raiseError(dbFile.errorString()); return Q_NULLPTR; } Database* db = readDatabase(&dbFile, password, keyfileName); if (dbFile.error() != QFile::NoError) { raiseError(dbFile.errorString()); return Q_NULLPTR; } return db; } bool KeePass1Reader::hasError() { return m_error; } QString KeePass1Reader::errorString() { return m_errorStr; } SymmetricCipherStream* KeePass1Reader::testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos) { QList encodings; encodings << Windows1252 << Latin1 << UTF8; QScopedPointer cipherStream; QByteArray passwordData; QTextCodec* codec = QTextCodec::codecForName("Windows-1252"); QByteArray passwordDataCorrect = codec->fromUnicode(password); Q_FOREACH (PasswordEncoding encoding, encodings) { if (encoding == Windows1252) { passwordData = passwordDataCorrect; } else if (encoding == Latin1) { // KeePassX used Latin-1 encoding for passwords until version 0.3.1 // but KeePass/Win32 uses Windows Codepage 1252. passwordData = password.toLatin1(); if (passwordData == passwordDataCorrect) { continue; } else { qWarning("Testing password encoded as Latin-1."); } } else if (encoding == UTF8) { // KeePassX used UTF-8 encoding for passwords until version 0.2.2 // but KeePass/Win32 uses Windows Codepage 1252. passwordData = password.toUtf8(); if (passwordData == passwordDataCorrect) { continue; } else { qWarning("Testing password encoded as UTF-8."); } } QByteArray finalKey = key(passwordData, keyfileData); if (finalKey.isEmpty()) { return Q_NULLPTR; } if (m_encryptionFlags & KeePass1::Rijndael) { cipherStream.reset(new SymmetricCipherStream(m_device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); } else { cipherStream.reset(new SymmetricCipherStream(m_device, SymmetricCipher::Twofish, SymmetricCipher::Cbc, SymmetricCipher::Decrypt)); } if (!cipherStream->init(finalKey, m_encryptionIV)) { raiseError(cipherStream->errorString()); return Q_NULLPTR; } if (!cipherStream->open(QIODevice::ReadOnly)) { raiseError(cipherStream->errorString()); return Q_NULLPTR; } bool success = verifyKey(cipherStream.data()); cipherStream->reset(); cipherStream->close(); if (!m_device->seek(contentPos)) { QString msg = "unable to seek to content position"; if (!m_device->errorString().isEmpty()) { msg.append("\n").append(m_device->errorString()); } raiseError(msg); return Q_NULLPTR; } cipherStream->open(QIODevice::ReadOnly); if (success) { break; } else { cipherStream.reset(); } } if (!cipherStream) { raiseError(tr("Wrong key or database file is corrupt.")); } return cipherStream.take(); } QByteArray KeePass1Reader::key(const QByteArray& password, const QByteArray& keyfileData) { Q_ASSERT(!m_masterSeed.isEmpty()); Q_ASSERT(!m_transformSeed.isEmpty()); KeePass1Key key; key.setPassword(password); key.setKeyfileData(keyfileData); bool ok; QString errorString; QByteArray transformedKey = key.transform(m_transformSeed, m_transformRounds, &ok, &errorString); if (!ok) { raiseError(errorString); return QByteArray(); } CryptoHash hash(CryptoHash::Sha256); hash.addData(m_masterSeed); hash.addData(transformedKey); return hash.result(); } bool KeePass1Reader::verifyKey(SymmetricCipherStream* cipherStream) { CryptoHash contentHash(CryptoHash::Sha256); QByteArray buffer; do { if (!Tools::readFromDevice(cipherStream, buffer)) { return false; } contentHash.addData(buffer); } while (!buffer.isEmpty()); return contentHash.result() == m_contentHashHeader; } Group* KeePass1Reader::readGroup(QIODevice* cipherStream) { QScopedPointer group(new Group()); group->setUpdateTimeinfo(false); group->setParent(m_tmpParent); TimeInfo timeInfo; quint32 groupId = 0; quint32 groupLevel = 0; bool groupIdSet = false; bool groupLevelSet = false; bool ok; bool reachedEnd = false; do { quint16 fieldType = Endian::readUInt16(cipherStream, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError("Invalid group field type number"); return Q_NULLPTR; } int fieldSize = static_cast(Endian::readUInt32(cipherStream, KeePass1::BYTEORDER, &ok)); if (!ok) { raiseError("Invalid group field size"); return Q_NULLPTR; } QByteArray fieldData = cipherStream->read(fieldSize); if (fieldData.size() != fieldSize) { raiseError("Read group field data doesn't match size"); return Q_NULLPTR; } switch (fieldType) { case 0x0000: // ignore field break; case 0x0001: if (fieldSize != 4) { raiseError("Incorrect group id field size"); return Q_NULLPTR; } groupId = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); groupIdSet = true; break; case 0x0002: group->setName(QString::fromUtf8(fieldData.constData())); break; case 0x0003: { if (fieldSize != 5) { raiseError("Incorrect group creation time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setCreationTime(dateTime); } break; } case 0x0004: { if (fieldSize != 5) { raiseError("Incorrect group modification time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setLastModificationTime(dateTime); } break; } case 0x0005: { if (fieldSize != 5) { raiseError("Incorrect group access time field size"); } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setLastAccessTime(dateTime); } break; } case 0x0006: { if (fieldSize != 5) { raiseError("Incorrect group expiry time field size"); } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setExpires(true); timeInfo.setExpiryTime(dateTime); } break; } case 0x0007: { if (fieldSize != 4) { raiseError("Incorrect group icon field size"); return Q_NULLPTR; } quint32 iconNumber = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); group->setIcon(iconNumber); break; } case 0x0008: { if (fieldSize != 2) { raiseError("Incorrect group level field size"); return Q_NULLPTR; } groupLevel = Endian::bytesToUInt16(fieldData, KeePass1::BYTEORDER); groupLevelSet = true; break; } case 0x0009: // flags, ignore field break; case 0xFFFF: reachedEnd = true; break; default: // invalid field raiseError("Invalid group field type"); return Q_NULLPTR; } } while (!reachedEnd); if (!groupIdSet || !groupLevelSet) { raiseError("Missing group id or level"); return Q_NULLPTR; } group->setUuid(Uuid::random()); group->setTimeInfo(timeInfo); m_groupIds.insert(groupId, group.data()); m_groupLevels.insert(group.data(), groupLevel); return group.take(); } Entry* KeePass1Reader::readEntry(QIODevice* cipherStream) { QScopedPointer entry(new Entry()); entry->setUpdateTimeinfo(false); entry->setGroup(m_tmpParent); TimeInfo timeInfo; QString binaryName; bool ok; bool reachedEnd = false; do { quint16 fieldType = Endian::readUInt16(cipherStream, KeePass1::BYTEORDER, &ok); if (!ok) { raiseError("Missing entry field type number"); return Q_NULLPTR; } int fieldSize = static_cast(Endian::readUInt32(cipherStream, KeePass1::BYTEORDER, &ok)); if (!ok) { raiseError("Invalid entry field size"); return Q_NULLPTR; } QByteArray fieldData = cipherStream->read(fieldSize); if (fieldData.size() != fieldSize) { raiseError("Read entry field data doesn't match size"); return Q_NULLPTR; } switch (fieldType) { case 0x0000: // ignore field break; case 0x0001: if (fieldSize != 16) { raiseError("Invalid entry uuid field size"); return Q_NULLPTR; } m_entryUuids.insert(fieldData, entry.data()); break; case 0x0002: { if (fieldSize != 4) { raiseError("Invalid entry group id field size"); return Q_NULLPTR; } quint32 groupId = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); m_entryGroupIds.insert(entry.data(), groupId); break; } case 0x0003: { if (fieldSize != 4) { raiseError("Invalid entry icon field size"); return Q_NULLPTR; } quint32 iconNumber = Endian::bytesToUInt32(fieldData, KeePass1::BYTEORDER); entry->setIcon(iconNumber); break; } case 0x0004: entry->setTitle(QString::fromUtf8(fieldData.constData())); break; case 0x0005: entry->setUrl(QString::fromUtf8(fieldData.constData())); break; case 0x0006: entry->setUsername(QString::fromUtf8(fieldData.constData())); break; case 0x0007: entry->setPassword(QString::fromUtf8(fieldData.constData())); break; case 0x0008: parseNotes(QString::fromUtf8(fieldData.constData()), entry.data()); break; case 0x0009: { if (fieldSize != 5) { raiseError("Invalid entry creation time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setCreationTime(dateTime); } break; } case 0x000A: { if (fieldSize != 5) { raiseError("Invalid entry modification time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setLastModificationTime(dateTime); } break; } case 0x000B: { if (fieldSize != 5) { raiseError("Invalid entry creation time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setLastAccessTime(dateTime); } break; } case 0x000C: { if (fieldSize != 5) { raiseError("Invalid entry expiry time field size"); return Q_NULLPTR; } QDateTime dateTime = dateFromPackedStruct(fieldData); if (dateTime.isValid()) { timeInfo.setExpires(true); timeInfo.setExpiryTime(dateTime); } break; } case 0x000D: binaryName = QString::fromUtf8(fieldData.constData()); break; case 0x000E: if (fieldSize != 0) { entry->attachments()->set(binaryName, fieldData); } break; case 0xFFFF: reachedEnd = true; break; default: // invalid field raiseError("Invalid entry field type"); return Q_NULLPTR; } } while (!reachedEnd); entry->setTimeInfo(timeInfo); return entry.take(); } void KeePass1Reader::parseNotes(const QString& rawNotes, Entry* entry) { QRegExp sequenceRegexp("Auto-Type(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); QRegExp windowRegexp("Auto-Type-Window(?:-(\\d+))?: (.+)", Qt::CaseInsensitive, QRegExp::RegExp2); QHash sequences; QMap windows; QStringList notes; bool lastLineAutoType = false; Q_FOREACH (QString line, rawNotes.split("\n")) { line.remove("\r"); if (sequenceRegexp.exactMatch(line)) { if (sequenceRegexp.cap(1).isEmpty()) { entry->setDefaultAutoTypeSequence(sequenceRegexp.cap(2)); } else { sequences[sequenceRegexp.cap(1).toInt()] = sequenceRegexp.cap(2); } lastLineAutoType = true; } else if (windowRegexp.exactMatch(line)) { int nr; if (windowRegexp.cap(1).isEmpty()) { nr = -1; // special number that matches no other sequence } else { nr = windowRegexp.cap(1).toInt(); } windows[nr].append(windowRegexp.cap(2)); lastLineAutoType = true; } else { // don't add empty lines following a removed auto-type line if (!lastLineAutoType || !line.isEmpty()) { notes.append(line); } lastLineAutoType = false; } } entry->setNotes(notes.join("\n")); QMapIterator i(windows); while (i.hasNext()) { i.next(); QString sequence = sequences.value(i.key()); Q_FOREACH (const QString& window, i.value()) { AutoTypeAssociations::Association assoc; assoc.window = window; assoc.sequence = sequence; entry->autoTypeAssociations()->add(assoc); } } } bool KeePass1Reader::constructGroupTree(const QList& groups) { for (int i = 0; i < groups.size(); i++) { quint32 level = m_groupLevels.value(groups[i]); if (level == 0) { groups[i]->setParent(m_db->rootGroup()); } else { for (int j = (i - 1); j >= 0; j--) { if (m_groupLevels.value(groups[j]) < level) { if ((level - m_groupLevels.value(groups[j])) != 1) { return false; } groups[i]->setParent(groups[j]); break; } } } if (groups[i]->parentGroup() == m_tmpParent) { return false; } } return true; } void KeePass1Reader::parseMetaStream(const Entry* entry) { QByteArray data = entry->attachments()->value("bin-stream"); if (entry->notes() == "KPX_GROUP_TREE_STATE") { if (!parseGroupTreeState(data)) { qWarning("Unable to parse group tree state metastream."); } } else if (entry->notes() == "KPX_CUSTOM_ICONS_4") { if (!parseCustomIcons4(data)) { qWarning("Unable to parse custom icons metastream."); } } else { qWarning("Ignoring unknown metastream \"%s\".", entry->notes().toLocal8Bit().constData()); } } bool KeePass1Reader::parseGroupTreeState(const QByteArray& data) { if (data.size() < 4) { return false; } int pos = 0; quint32 num = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (static_cast(data.size() - 4) != (num * 5)) { return false; } for (quint32 i = 0; i < num; i++) { quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; bool expanded = data.at(pos); pos += 1; if (m_groupIds.contains(groupId)) { m_groupIds[groupId]->setExpanded(expanded); } } return true; } bool KeePass1Reader::parseCustomIcons4(const QByteArray& data) { if (data.size() < 12) { return false; } int pos = 0; quint32 numIcons = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; quint32 numEntries = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; quint32 numGroups = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; QList iconUuids; for (quint32 i = 0; i < numIcons; i++) { if (data.size() < (pos + 4)) { return false; } quint32 iconSize = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (static_cast(data.size()) < (pos + iconSize)) { return false; } QImage icon = QImage::fromData(data.mid(pos, iconSize)); pos += iconSize; if (icon.width() != 16 || icon.height() != 16) { icon = icon.scaled(16, 16); } Uuid uuid = Uuid::random(); iconUuids.append(uuid); m_db->metadata()->addCustomIcon(uuid, icon); } if (static_cast(data.size()) < (pos + numEntries * 20)) { return false; } for (quint32 i = 0; i < numEntries; i++) { QByteArray entryUuid = data.mid(pos, 16); pos += 16; quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (m_entryUuids.contains(entryUuid) && (iconId < static_cast(iconUuids.size()))) { m_entryUuids[entryUuid]->setIcon(iconUuids[iconId]); } } if (static_cast(data.size()) < (pos + numGroups * 8)) { return false; } for (quint32 i = 0; i < numGroups; i++) { quint32 groupId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; quint32 iconId = Endian::bytesToUInt32(data.mid(pos, 4), KeePass1::BYTEORDER); pos += 4; if (m_groupIds.contains(groupId) && (iconId < static_cast(iconUuids.size()))) { m_groupIds[groupId]->setIcon(iconUuids[iconId]); } } return true; } void KeePass1Reader::raiseError(const QString& errorMessage) { m_error = true; m_errorStr = errorMessage; } QDateTime KeePass1Reader::dateFromPackedStruct(const QByteArray& data) { Q_ASSERT(data.size() == 5); quint32 dw1 = static_cast(data.at(0)); quint32 dw2 = static_cast(data.at(1)); quint32 dw3 = static_cast(data.at(2)); quint32 dw4 = static_cast(data.at(3)); quint32 dw5 = static_cast(data.at(4)); int y = (dw1 << 6) | (dw2 >> 2); int mon = ((dw2 & 0x00000003) << 2) | (dw3 >> 6); int d = (dw3 >> 1) & 0x0000001F; int h = ((dw3 & 0x00000001) << 4) | (dw4 >> 4); int min = ((dw4 & 0x0000000F) << 2) | (dw5 >> 6); int s = dw5 & 0x0000003F; QDateTime dateTime = QDateTime(QDate(y, mon, d), QTime(h, min, s), Qt::UTC); // check for the special "never" datetime if (dateTime == QDateTime(QDate(2999, 12, 28), QTime(23, 59, 59), Qt::UTC)) { return QDateTime(); } else { return dateTime; } } bool KeePass1Reader::isMetaStream(const Entry* entry) { return entry->attachments()->keys().contains("bin-stream") && !entry->notes().isEmpty() && entry->title() == "Meta-Info" && entry->username() == "SYSTEM" && entry->url() == "$" && entry->iconNumber() == 0; } QByteArray KeePass1Reader::readKeyfile(QIODevice* device) { if (device->size() == 0) { return QByteArray(); } if (device->size() == 32) { QByteArray data = device->read(32); if (data.size() != 32) { return QByteArray(); } return data; } if (device->size() == 64) { QByteArray data = device->read(64); if (data.size() != 64) { return QByteArray(); } if (Tools::isHex(data)) { return QByteArray::fromHex(data); } else { device->seek(0); } } CryptoHash cryptoHash(CryptoHash::Sha256); QByteArray buffer; do { if (!Tools::readFromDevice(device, buffer)) { return QByteArray(); } cryptoHash.addData(buffer); } while (!buffer.isEmpty()); return cryptoHash.result(); } QByteArray KeePass1Key::rawKey() const { if (m_keyfileData.isEmpty()) { return CryptoHash::hash(m_password, CryptoHash::Sha256); } else if (m_password.isEmpty()) { return m_keyfileData; } else { CryptoHash keyHash(CryptoHash::Sha256); keyHash.addData(CryptoHash::hash(m_password, CryptoHash::Sha256)); keyHash.addData(m_keyfileData); return keyHash.result(); } } void KeePass1Key::clear() { CompositeKey::clear(); m_password.clear(); m_keyfileData.clear(); } void KeePass1Key::setPassword(const QByteArray& password) { m_password = password; } void KeePass1Key::setKeyfileData(const QByteArray& keyfileData) { m_keyfileData = keyfileData; } keepassx-2.0.3/src/format/KeePass1Reader.h000066400000000000000000000056021276304217300203360ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS1READER_H #define KEEPASSX_KEEPASS1READER_H #include #include #include class Database; class Entry; class Group; class SymmetricCipherStream; class QIODevice; class KeePass1Reader { Q_DECLARE_TR_FUNCTIONS(KeePass1Reader) public: KeePass1Reader(); Database* readDatabase(QIODevice* device, const QString& password, QIODevice* keyfileDevice); Database* readDatabase(QIODevice* device, const QString& password, const QString& keyfileName); Database* readDatabase(const QString& filename, const QString& password, const QString& keyfileName); bool hasError(); QString errorString(); private: enum PasswordEncoding { Windows1252, Latin1, UTF8 }; SymmetricCipherStream* testKeys(const QString& password, const QByteArray& keyfileData, qint64 contentPos); QByteArray key(const QByteArray& password, const QByteArray& keyfileData); bool verifyKey(SymmetricCipherStream* cipherStream); Group* readGroup(QIODevice* cipherStream); Entry* readEntry(QIODevice* cipherStream); void parseNotes(const QString& rawNotes, Entry* entry); bool constructGroupTree(const QList& groups); void parseMetaStream(const Entry* entry); bool parseGroupTreeState(const QByteArray& data); bool parseCustomIcons4(const QByteArray& data); void raiseError(const QString& errorMessage); static QByteArray readKeyfile(QIODevice* device); static QDateTime dateFromPackedStruct(const QByteArray& data); static bool isMetaStream(const Entry* entry); Database* m_db; Group* m_tmpParent; QIODevice* m_device; quint32 m_encryptionFlags; QByteArray m_masterSeed; QByteArray m_encryptionIV; QByteArray m_contentHashHeader; QByteArray m_transformSeed; quint32 m_transformRounds; QHash m_groupIds; QHash m_groupLevels; QHash m_entryUuids; QHash m_entryGroupIds; bool m_error; QString m_errorStr; }; #endif // KEEPASSX_KEEPASS1READER_H keepassx-2.0.3/src/format/KeePass2.h000066400000000000000000000033561276304217300172200ustar00rootroot00000000000000 /* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2_H #define KEEPASSX_KEEPASS2_H #include #include "core/Uuid.h" namespace KeePass2 { const quint32 SIGNATURE_1 = 0x9AA2D903; const quint32 SIGNATURE_2 = 0xB54BFB67; const quint32 FILE_VERSION = 0x00030001; const quint32 FILE_VERSION_MIN = 0x00020000; const quint32 FILE_VERSION_CRITICAL_MASK = 0xFFFF0000; const QSysInfo::Endian BYTEORDER = QSysInfo::LittleEndian; const Uuid CIPHER_AES = Uuid(QByteArray::fromHex("31c1f2e6bf714350be5805216afc5aff")); const QByteArray INNER_STREAM_SALSA20_IV("\xE8\x30\x09\x4B\x97\x20\x5D\x2A"); enum HeaderFieldID { EndOfHeader = 0, Comment = 1, CipherID = 2, CompressionFlags = 3, MasterSeed = 4, TransformSeed = 5, TransformRounds = 6, EncryptionIV = 7, ProtectedStreamKey = 8, StreamStartBytes = 9, InnerRandomStreamID = 10 }; enum ProtectedStreamAlgo { ArcFourVariant = 1, Salsa20 = 2 }; } #endif // KEEPASSX_KEEPASS2_H keepassx-2.0.3/src/format/KeePass2RandomStream.cpp000066400000000000000000000053611276304217300220660ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2RandomStream.h" #include "crypto/CryptoHash.h" #include "format/KeePass2.h" KeePass2RandomStream::KeePass2RandomStream() : m_cipher(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt) , m_offset(0) { } bool KeePass2RandomStream::init(const QByteArray& key) { return m_cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV); } QByteArray KeePass2RandomStream::randomBytes(int size, bool* ok) { QByteArray result; int bytesRemaining = size; while (bytesRemaining > 0) { if (m_buffer.size() == m_offset) { if (!loadBlock()) { *ok = false; return QByteArray(); } } int bytesToCopy = qMin(bytesRemaining, m_buffer.size() - m_offset); result.append(m_buffer.mid(m_offset, bytesToCopy)); m_offset += bytesToCopy; bytesRemaining -= bytesToCopy; } *ok = true; return result; } QByteArray KeePass2RandomStream::process(const QByteArray& data, bool* ok) { bool randomBytesOk; QByteArray randomData = randomBytes(data.size(), &randomBytesOk); if (!randomBytesOk) { *ok = false; return QByteArray(); } QByteArray result; result.resize(data.size()); for (int i = 0; i < data.size(); i++) { result[i] = data[i] ^ randomData[i]; } *ok = true; return result; } bool KeePass2RandomStream::processInPlace(QByteArray& data) { bool ok; QByteArray randomData = randomBytes(data.size(), &ok); if (!ok) { return false; } for (int i = 0; i < data.size(); i++) { data[i] = data[i] ^ randomData[i]; } return true; } QString KeePass2RandomStream::errorString() const { return m_cipher.errorString(); } bool KeePass2RandomStream::loadBlock() { Q_ASSERT(m_offset == m_buffer.size()); m_buffer.fill('\0', m_cipher.blockSize()); if (!m_cipher.processInPlace(m_buffer)) { return false; } m_offset = 0; return true; } keepassx-2.0.3/src/format/KeePass2RandomStream.h000066400000000000000000000024321276304217300215270ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2RANDOMSTREAM_H #define KEEPASSX_KEEPASS2RANDOMSTREAM_H #include #include "crypto/SymmetricCipher.h" class KeePass2RandomStream { public: KeePass2RandomStream(); bool init(const QByteArray& key); QByteArray randomBytes(int size, bool* ok); QByteArray process(const QByteArray& data, bool* ok); bool processInPlace(QByteArray& data) Q_REQUIRED_RESULT; QString errorString() const; private: bool loadBlock(); SymmetricCipher m_cipher; QByteArray m_buffer; int m_offset; }; #endif // KEEPASSX_KEEPASS2RANDOMSTREAM_H keepassx-2.0.3/src/format/KeePass2Reader.cpp000066400000000000000000000264621276304217300207010ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2Reader.h" #include #include #include #include "core/Database.h" #include "core/Endian.h" #include "crypto/CryptoHash.h" #include "format/KeePass1.h" #include "format/KeePass2.h" #include "format/KeePass2RandomStream.h" #include "format/KeePass2XmlReader.h" #include "streams/HashedBlockStream.h" #include "streams/QtIOCompressor" #include "streams/StoreDataStream.h" #include "streams/SymmetricCipherStream.h" KeePass2Reader::KeePass2Reader() : m_device(Q_NULLPTR) , m_headerStream(Q_NULLPTR) , m_error(false) , m_headerEnd(false) , m_saveXml(false) , m_db(Q_NULLPTR) { } Database* KeePass2Reader::readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase) { QScopedPointer db(new Database()); m_db = db.data(); m_device = device; m_error = false; m_errorStr.clear(); m_headerEnd = false; m_xmlData.clear(); m_masterSeed.clear(); m_transformSeed.clear(); m_encryptionIV.clear(); m_streamStartBytes.clear(); m_protectedStreamKey.clear(); StoreDataStream headerStream(m_device); headerStream.open(QIODevice::ReadOnly); m_headerStream = &headerStream; bool ok; quint32 signature1 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok); if (!ok || signature1 != KeePass2::SIGNATURE_1) { raiseError(tr("Not a KeePass database.")); return Q_NULLPTR; } quint32 signature2 = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok); if (ok && signature2 == KeePass1::SIGNATURE_2) { raiseError(tr("The selected file is an old KeePass 1 database (.kdb).\n\n" "You can import it by clicking on Database > 'Import KeePass 1 database'.\n" "This is a one-way migration. You won't be able to open the imported " "database with the old KeePassX 0.4 version.")); return Q_NULLPTR; } else if (!ok || signature2 != KeePass2::SIGNATURE_2) { raiseError(tr("Not a KeePass database.")); return Q_NULLPTR; } quint32 version = Endian::readUInt32(m_headerStream, KeePass2::BYTEORDER, &ok) & KeePass2::FILE_VERSION_CRITICAL_MASK; quint32 maxVersion = KeePass2::FILE_VERSION & KeePass2::FILE_VERSION_CRITICAL_MASK; if (!ok || (version < KeePass2::FILE_VERSION_MIN) || (version > maxVersion)) { raiseError(tr("Unsupported KeePass database version.")); return Q_NULLPTR; } while (readHeaderField() && !hasError()) { } headerStream.close(); if (hasError()) { return Q_NULLPTR; } // check if all required headers were present if (m_masterSeed.isEmpty() || m_transformSeed.isEmpty() || m_encryptionIV.isEmpty() || m_streamStartBytes.isEmpty() || m_protectedStreamKey.isEmpty() || m_db->cipher().isNull()) { raiseError("missing database headers"); return Q_NULLPTR; } if (!m_db->setKey(key, m_transformSeed, false)) { raiseError(tr("Unable to calculate master key")); return Q_NULLPTR; } CryptoHash hash(CryptoHash::Sha256); hash.addData(m_masterSeed); hash.addData(m_db->transformedMasterKey()); QByteArray finalKey = hash.result(); SymmetricCipherStream cipherStream(m_device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); if (!cipherStream.init(finalKey, m_encryptionIV)) { raiseError(cipherStream.errorString()); return Q_NULLPTR; } if (!cipherStream.open(QIODevice::ReadOnly)) { raiseError(cipherStream.errorString()); return Q_NULLPTR; } QByteArray realStart = cipherStream.read(32); if (realStart != m_streamStartBytes) { raiseError(tr("Wrong key or database file is corrupt.")); return Q_NULLPTR; } HashedBlockStream hashedStream(&cipherStream); if (!hashedStream.open(QIODevice::ReadOnly)) { raiseError(hashedStream.errorString()); return Q_NULLPTR; } QIODevice* xmlDevice; QScopedPointer ioCompressor; if (m_db->compressionAlgo() == Database::CompressionNone) { xmlDevice = &hashedStream; } else { ioCompressor.reset(new QtIOCompressor(&hashedStream)); ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); if (!ioCompressor->open(QIODevice::ReadOnly)) { raiseError(ioCompressor->errorString()); return Q_NULLPTR; } xmlDevice = ioCompressor.data(); } KeePass2RandomStream randomStream; if (!randomStream.init(m_protectedStreamKey)) { raiseError(randomStream.errorString()); return Q_NULLPTR; } QScopedPointer buffer; if (m_saveXml) { m_xmlData = xmlDevice->readAll(); buffer.reset(new QBuffer(&m_xmlData)); buffer->open(QIODevice::ReadOnly); xmlDevice = buffer.data(); } KeePass2XmlReader xmlReader; xmlReader.readDatabase(xmlDevice, m_db, &randomStream); if (xmlReader.hasError()) { raiseError(xmlReader.errorString()); if (keepDatabase) { return db.take(); } else { return Q_NULLPTR; } } Q_ASSERT(version < 0x00030001 || !xmlReader.headerHash().isEmpty()); if (!xmlReader.headerHash().isEmpty()) { QByteArray headerHash = CryptoHash::hash(headerStream.storedData(), CryptoHash::Sha256); if (headerHash != xmlReader.headerHash()) { raiseError("Header doesn't match hash"); return Q_NULLPTR; } } return db.take(); } Database* KeePass2Reader::readDatabase(const QString& filename, const CompositeKey& key) { QFile file(filename); if (!file.open(QFile::ReadOnly)) { raiseError(file.errorString()); return Q_NULLPTR; } QScopedPointer db(readDatabase(&file, key)); if (file.error() != QFile::NoError) { raiseError(file.errorString()); return Q_NULLPTR; } return db.take(); } bool KeePass2Reader::hasError() { return m_error; } QString KeePass2Reader::errorString() { return m_errorStr; } void KeePass2Reader::setSaveXml(bool save) { m_saveXml = save; } QByteArray KeePass2Reader::xmlData() { return m_xmlData; } QByteArray KeePass2Reader::streamKey() { return m_protectedStreamKey; } void KeePass2Reader::raiseError(const QString& errorMessage) { m_error = true; m_errorStr = errorMessage; } bool KeePass2Reader::readHeaderField() { QByteArray fieldIDArray = m_headerStream->read(1); if (fieldIDArray.size() != 1) { raiseError("Invalid header id size"); return false; } quint8 fieldID = fieldIDArray.at(0); bool ok; quint16 fieldLen = Endian::readUInt16(m_headerStream, KeePass2::BYTEORDER, &ok); if (!ok) { raiseError("Invalid header field length"); return false; } QByteArray fieldData; if (fieldLen != 0) { fieldData = m_headerStream->read(fieldLen); if (fieldData.size() != fieldLen) { raiseError("Invalid header data length"); return false; } } switch (fieldID) { case KeePass2::EndOfHeader: m_headerEnd = true; break; case KeePass2::CipherID: setCipher(fieldData); break; case KeePass2::CompressionFlags: setCompressionFlags(fieldData); break; case KeePass2::MasterSeed: setMasterSeed(fieldData); break; case KeePass2::TransformSeed: setTransformSeed(fieldData); break; case KeePass2::TransformRounds: setTansformRounds(fieldData); break; case KeePass2::EncryptionIV: setEncryptionIV(fieldData); break; case KeePass2::ProtectedStreamKey: setProtectedStreamKey(fieldData); break; case KeePass2::StreamStartBytes: setStreamStartBytes(fieldData); break; case KeePass2::InnerRandomStreamID: setInnerRandomStreamID(fieldData); break; default: qWarning("Unknown header field read: id=%d", fieldID); break; } return !m_headerEnd; } void KeePass2Reader::setCipher(const QByteArray& data) { if (data.size() != Uuid::Length) { raiseError("Invalid cipher uuid length"); } else { Uuid uuid(data); if (uuid != KeePass2::CIPHER_AES) { raiseError("Unsupported cipher"); } else { m_db->setCipher(uuid); } } } void KeePass2Reader::setCompressionFlags(const QByteArray& data) { if (data.size() != 4) { raiseError("Invalid compression flags length"); } else { quint32 id = Endian::bytesToUInt32(data, KeePass2::BYTEORDER); if (id > Database::CompressionAlgorithmMax) { raiseError("Unsupported compression algorithm"); } else { m_db->setCompressionAlgo(static_cast(id)); } } } void KeePass2Reader::setMasterSeed(const QByteArray& data) { if (data.size() != 32) { raiseError("Invalid master seed size"); } else { m_masterSeed = data; } } void KeePass2Reader::setTransformSeed(const QByteArray& data) { if (data.size() != 32) { raiseError("Invalid transform seed size"); } else { m_transformSeed = data; } } void KeePass2Reader::setTansformRounds(const QByteArray& data) { if (data.size() != 8) { raiseError("Invalid transform rounds size"); } else { if (!m_db->setTransformRounds(Endian::bytesToUInt64(data, KeePass2::BYTEORDER))) { raiseError(tr("Unable to calculate master key")); } } } void KeePass2Reader::setEncryptionIV(const QByteArray& data) { if (data.size() != 16) { raiseError("Invalid encryption iv size"); } else { m_encryptionIV = data; } } void KeePass2Reader::setProtectedStreamKey(const QByteArray& data) { if (data.size() != 32) { raiseError("Invalid stream key size"); } else { m_protectedStreamKey = data; } } void KeePass2Reader::setStreamStartBytes(const QByteArray& data) { if (data.size() != 32) { raiseError("Invalid start bytes size"); } else { m_streamStartBytes = data; } } void KeePass2Reader::setInnerRandomStreamID(const QByteArray& data) { if (data.size() != 4) { raiseError("Invalid random stream id size"); } else { quint32 id = Endian::bytesToUInt32(data, KeePass2::BYTEORDER); if (id != KeePass2::Salsa20) { raiseError("Unsupported random stream algorithm"); } } } keepassx-2.0.3/src/format/KeePass2Reader.h000066400000000000000000000042661276304217300203440ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2READER_H #define KEEPASSX_KEEPASS2READER_H #include #include "keys/CompositeKey.h" class Database; class QIODevice; class KeePass2Reader { Q_DECLARE_TR_FUNCTIONS(KeePass2Reader) public: KeePass2Reader(); Database* readDatabase(QIODevice* device, const CompositeKey& key, bool keepDatabase = false); Database* readDatabase(const QString& filename, const CompositeKey& key); bool hasError(); QString errorString(); void setSaveXml(bool save); QByteArray xmlData(); QByteArray streamKey(); private: void raiseError(const QString& errorMessage); bool readHeaderField(); void setCipher(const QByteArray& data); void setCompressionFlags(const QByteArray& data); void setMasterSeed(const QByteArray& data); void setTransformSeed(const QByteArray& data); void setTansformRounds(const QByteArray& data); void setEncryptionIV(const QByteArray& data); void setProtectedStreamKey(const QByteArray& data); void setStreamStartBytes(const QByteArray& data); void setInnerRandomStreamID(const QByteArray& data); QIODevice* m_device; QIODevice* m_headerStream; bool m_error; QString m_errorStr; bool m_headerEnd; bool m_saveXml; QByteArray m_xmlData; Database* m_db; QByteArray m_masterSeed; QByteArray m_transformSeed; QByteArray m_encryptionIV; QByteArray m_streamStartBytes; QByteArray m_protectedStreamKey; }; #endif // KEEPASSX_KEEPASS2READER_H keepassx-2.0.3/src/format/KeePass2Repair.cpp000066400000000000000000000057441276304217300207210ustar00rootroot00000000000000/* * Copyright (C) 2016 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2Repair.h" #include #include #include "format/KeePass2RandomStream.h" #include "format/KeePass2Reader.h" #include "format/KeePass2XmlReader.h" KeePass2Repair::KeePass2Repair() : m_db(Q_NULLPTR) { } KeePass2Repair::RepairResult KeePass2Repair::repairDatabase(QIODevice* device, const CompositeKey& key) { m_db = Q_NULLPTR; m_errorStr.clear(); KeePass2Reader reader; reader.setSaveXml(true); Database* db = reader.readDatabase(device, key, true); if (!reader.hasError()) { delete db; return NothingTodo; } QByteArray xmlData = reader.xmlData(); if (!db || xmlData.isEmpty()) { delete db; m_errorStr = reader.errorString(); return UnableToOpen; } bool repairAction = false; QString xmlStart = QString::fromLatin1(xmlData.constData(), qMin(100, xmlData.size())); QRegExp encodingRegExp("encoding=\"([^\"]+)\"", Qt::CaseInsensitive, QRegExp::RegExp2); if (encodingRegExp.indexIn(xmlStart) != -1) { if (encodingRegExp.cap(1).compare("utf-8", Qt::CaseInsensitive) != 0 && encodingRegExp.cap(1).compare("utf8", Qt::CaseInsensitive) != 0) { // database is not utf-8 encoded, we don't support repairing that delete db; return RepairFailed; } } // try to fix broken databases because of bug #392 for (int i = (xmlData.size() - 1); i >= 0; i--) { quint8 ch = static_cast(xmlData.at(i)); if (ch < 0x20 && ch != 0x09 && ch != 0x0A && ch != 0x0D) { xmlData.remove(i, 1); repairAction = true; } } if (!repairAction) { // we were unable to find the problem delete db; return RepairFailed; } KeePass2RandomStream randomStream; randomStream.init(reader.streamKey()); KeePass2XmlReader xmlReader; QBuffer buffer(&xmlData); buffer.open(QIODevice::ReadOnly); xmlReader.readDatabase(&buffer, db, &randomStream); if (xmlReader.hasError()) { delete db; return RepairFailed; } else { m_db = db; return RepairSuccess; } } Database* KeePass2Repair::database() const { return m_db; } QString KeePass2Repair::errorString() const { return m_errorStr; } keepassx-2.0.3/src/format/KeePass2Repair.h000066400000000000000000000025001276304217300203510ustar00rootroot00000000000000/* * Copyright (C) 2016 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2REPAIR_H #define KEEPASSX_KEEPASS2REPAIR_H #include #include #include "core/Database.h" #include "keys/CompositeKey.h" class KeePass2Repair { Q_DECLARE_TR_FUNCTIONS(KeePass2Repair) public: enum RepairResult { NothingTodo, UnableToOpen, RepairSuccess, RepairFailed }; KeePass2Repair(); RepairResult repairDatabase(QIODevice* device, const CompositeKey& key); Database* database() const; QString errorString() const; private: Database* m_db; QString m_errorStr; }; #endif // KEEPASSX_KEEPASS2REPAIR_H keepassx-2.0.3/src/format/KeePass2Writer.cpp000066400000000000000000000147371276304217300207550ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2Writer.h" #include #include #include #include "core/Database.h" #include "core/Endian.h" #include "crypto/CryptoHash.h" #include "crypto/Random.h" #include "format/KeePass2RandomStream.h" #include "format/KeePass2XmlWriter.h" #include "streams/HashedBlockStream.h" #include "streams/QtIOCompressor" #include "streams/SymmetricCipherStream.h" #define CHECK_RETURN(x) if (!(x)) return; #define CHECK_RETURN_FALSE(x) if (!(x)) return false; KeePass2Writer::KeePass2Writer() : m_device(0) , m_error(false) { } void KeePass2Writer::writeDatabase(QIODevice* device, Database* db) { m_error = false; m_errorStr.clear(); QByteArray masterSeed = randomGen()->randomArray(32); QByteArray encryptionIV = randomGen()->randomArray(16); QByteArray protectedStreamKey = randomGen()->randomArray(32); QByteArray startBytes = randomGen()->randomArray(32); QByteArray endOfHeader = "\r\n\r\n"; CryptoHash hash(CryptoHash::Sha256); hash.addData(masterSeed); Q_ASSERT(!db->transformedMasterKey().isEmpty()); hash.addData(db->transformedMasterKey()); QByteArray finalKey = hash.result(); QBuffer header; header.open(QIODevice::WriteOnly); m_device = &header; CHECK_RETURN(writeData(Endian::int32ToBytes(KeePass2::SIGNATURE_1, KeePass2::BYTEORDER))); CHECK_RETURN(writeData(Endian::int32ToBytes(KeePass2::SIGNATURE_2, KeePass2::BYTEORDER))); CHECK_RETURN(writeData(Endian::int32ToBytes(KeePass2::FILE_VERSION, KeePass2::BYTEORDER))); CHECK_RETURN(writeHeaderField(KeePass2::CipherID, db->cipher().toByteArray())); CHECK_RETURN(writeHeaderField(KeePass2::CompressionFlags, Endian::int32ToBytes(db->compressionAlgo(), KeePass2::BYTEORDER))); CHECK_RETURN(writeHeaderField(KeePass2::MasterSeed, masterSeed)); CHECK_RETURN(writeHeaderField(KeePass2::TransformSeed, db->transformSeed())); CHECK_RETURN(writeHeaderField(KeePass2::TransformRounds, Endian::int64ToBytes(db->transformRounds(), KeePass2::BYTEORDER))); CHECK_RETURN(writeHeaderField(KeePass2::EncryptionIV, encryptionIV)); CHECK_RETURN(writeHeaderField(KeePass2::ProtectedStreamKey, protectedStreamKey)); CHECK_RETURN(writeHeaderField(KeePass2::StreamStartBytes, startBytes)); CHECK_RETURN(writeHeaderField(KeePass2::InnerRandomStreamID, Endian::int32ToBytes(KeePass2::Salsa20, KeePass2::BYTEORDER))); CHECK_RETURN(writeHeaderField(KeePass2::EndOfHeader, endOfHeader)); header.close(); m_device = device; QByteArray headerHash = CryptoHash::hash(header.data(), CryptoHash::Sha256); CHECK_RETURN(writeData(header.data())); SymmetricCipherStream cipherStream(device, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); cipherStream.init(finalKey, encryptionIV); if (!cipherStream.open(QIODevice::WriteOnly)) { raiseError(cipherStream.errorString()); return; } m_device = &cipherStream; CHECK_RETURN(writeData(startBytes)); HashedBlockStream hashedStream(&cipherStream); if (!hashedStream.open(QIODevice::WriteOnly)) { raiseError(hashedStream.errorString()); return; } QScopedPointer ioCompressor; if (db->compressionAlgo() == Database::CompressionNone) { m_device = &hashedStream; } else { ioCompressor.reset(new QtIOCompressor(&hashedStream)); ioCompressor->setStreamFormat(QtIOCompressor::GzipFormat); if (!ioCompressor->open(QIODevice::WriteOnly)) { raiseError(ioCompressor->errorString()); return; } m_device = ioCompressor.data(); } KeePass2RandomStream randomStream; if (!randomStream.init(protectedStreamKey)) { raiseError(randomStream.errorString()); return; } KeePass2XmlWriter xmlWriter; xmlWriter.writeDatabase(m_device, db, &randomStream, headerHash); // Explicitly close/reset streams so they are flushed and we can detect // errors. QIODevice::close() resets errorString() etc. if (ioCompressor) { ioCompressor->close(); } if (!hashedStream.reset()) { raiseError(hashedStream.errorString()); return; } if (!cipherStream.reset()) { raiseError(cipherStream.errorString()); return; } if (xmlWriter.hasError()) { raiseError(xmlWriter.errorString()); } } bool KeePass2Writer::writeData(const QByteArray& data) { if (m_device->write(data) != data.size()) { raiseError(m_device->errorString()); return false; } else { return true; } } bool KeePass2Writer::writeHeaderField(KeePass2::HeaderFieldID fieldId, const QByteArray& data) { Q_ASSERT(data.size() <= 65535); QByteArray fieldIdArr; fieldIdArr[0] = fieldId; CHECK_RETURN_FALSE(writeData(fieldIdArr)); CHECK_RETURN_FALSE(writeData(Endian::int16ToBytes(static_cast(data.size()), KeePass2::BYTEORDER))); CHECK_RETURN_FALSE(writeData(data)); return true; } void KeePass2Writer::writeDatabase(const QString& filename, Database* db) { QFile file(filename); if (!file.open(QIODevice::WriteOnly|QIODevice::Truncate)) { raiseError(file.errorString()); return; } writeDatabase(&file, db); } bool KeePass2Writer::hasError() { return m_error; } QString KeePass2Writer::errorString() { return m_errorStr; } void KeePass2Writer::raiseError(const QString& errorMessage) { m_error = true; m_errorStr = errorMessage; } keepassx-2.0.3/src/format/KeePass2Writer.h000066400000000000000000000025571276304217300204170ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2WRITER_H #define KEEPASSX_KEEPASS2WRITER_H #include "format/KeePass2.h" #include "keys/CompositeKey.h" class Database; class QIODevice; class KeePass2Writer { public: KeePass2Writer(); void writeDatabase(QIODevice* device, Database* db); void writeDatabase(const QString& filename, Database* db); bool hasError(); QString errorString(); private: bool writeData(const QByteArray& data); bool writeHeaderField(KeePass2::HeaderFieldID fieldId, const QByteArray& data); void raiseError(const QString& errorMessage); QIODevice* m_device; bool m_error; QString m_errorStr; }; #endif // KEEPASSX_KEEPASS2WRITER_H keepassx-2.0.3/src/format/KeePass2XmlReader.cpp000066400000000000000000001014261276304217300213540ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2XmlReader.h" #include #include #include "core/Database.h" #include "core/DatabaseIcons.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "format/KeePass2RandomStream.h" #include "streams/QtIOCompressor" typedef QPair StringPair; KeePass2XmlReader::KeePass2XmlReader() : m_randomStream(Q_NULLPTR) , m_db(Q_NULLPTR) , m_meta(Q_NULLPTR) , m_tmpParent(Q_NULLPTR) , m_error(false) , m_strictMode(false) { } void KeePass2XmlReader::setStrictMode(bool strictMode) { m_strictMode = strictMode; } void KeePass2XmlReader::readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream) { m_error = false; m_errorStr.clear(); m_xml.clear(); m_xml.setDevice(device); m_db = db; m_meta = m_db->metadata(); m_meta->setUpdateDatetime(false); m_randomStream = randomStream; m_headerHash.clear(); m_tmpParent = new Group(); bool rootGroupParsed = false; if (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "KeePassFile") { rootGroupParsed = parseKeePassFile(); } } if (!m_xml.error() && !rootGroupParsed) { raiseError("No root group"); } if (!m_xml.error()) { if (!m_tmpParent->children().isEmpty()) { qWarning("KeePass2XmlReader::readDatabase: found %d invalid group reference(s)", m_tmpParent->children().size()); } if (!m_tmpParent->entries().isEmpty()) { qWarning("KeePass2XmlReader::readDatabase: found %d invalid entry reference(s)", m_tmpParent->children().size()); } } QSet poolKeys = m_binaryPool.keys().toSet(); QSet entryKeys = m_binaryMap.keys().toSet(); QSet unmappedKeys = entryKeys - poolKeys; QSet unusedKeys = poolKeys - entryKeys; if (!unmappedKeys.isEmpty()) { raiseError("Unmapped keys left."); } if (!m_xml.error()) { Q_FOREACH (const QString& key, unusedKeys) { qWarning("KeePass2XmlReader::readDatabase: found unused key \"%s\"", qPrintable(key)); } } QHash >::const_iterator i; for (i = m_binaryMap.constBegin(); i != m_binaryMap.constEnd(); ++i) { const QPair& target = i.value(); target.first->attachments()->set(target.second, m_binaryPool[i.key()]); } m_meta->setUpdateDatetime(true); QHash::const_iterator iGroup; for (iGroup = m_groups.constBegin(); iGroup != m_groups.constEnd(); ++iGroup) { iGroup.value()->setUpdateTimeinfo(true); } QHash::const_iterator iEntry; for (iEntry = m_entries.constBegin(); iEntry != m_entries.constEnd(); ++iEntry) { iEntry.value()->setUpdateTimeinfo(true); Q_FOREACH (Entry* histEntry, iEntry.value()->historyItems()) { histEntry->setUpdateTimeinfo(true); } } delete m_tmpParent; } Database* KeePass2XmlReader::readDatabase(QIODevice* device) { Database* db = new Database(); readDatabase(device, db); return db; } Database* KeePass2XmlReader::readDatabase(const QString& filename) { QFile file(filename); file.open(QIODevice::ReadOnly); return readDatabase(&file); } bool KeePass2XmlReader::hasError() { return m_error || m_xml.hasError(); } QString KeePass2XmlReader::errorString() { if (m_error) { return m_errorStr; } else if (m_xml.hasError()) { return QString("XML error:\n%1\nLine %2, column %3") .arg(m_xml.errorString()) .arg(m_xml.lineNumber()) .arg(m_xml.columnNumber()); } else { return QString(); } } void KeePass2XmlReader::raiseError(const QString& errorMessage) { m_error = true; m_errorStr = errorMessage; } QByteArray KeePass2XmlReader::headerHash() { return m_headerHash; } bool KeePass2XmlReader::parseKeePassFile() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "KeePassFile"); bool rootElementFound = false; bool rootParsedSuccesfully = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Meta") { parseMeta(); } else if (m_xml.name() == "Root") { if (rootElementFound) { rootParsedSuccesfully = false; raiseError("Multiple root elements"); } else { rootParsedSuccesfully = parseRoot(); rootElementFound = true; } } else { skipCurrentElement(); } } return rootParsedSuccesfully; } void KeePass2XmlReader::parseMeta() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Meta"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Generator") { m_meta->setGenerator(readString()); } else if (m_xml.name() == "HeaderHash") { m_headerHash = readBinary(); } else if (m_xml.name() == "DatabaseName") { m_meta->setName(readString()); } else if (m_xml.name() == "DatabaseNameChanged") { m_meta->setNameChanged(readDateTime()); } else if (m_xml.name() == "DatabaseDescription") { m_meta->setDescription(readString()); } else if (m_xml.name() == "DatabaseDescriptionChanged") { m_meta->setDescriptionChanged(readDateTime()); } else if (m_xml.name() == "DefaultUserName") { m_meta->setDefaultUserName(readString()); } else if (m_xml.name() == "DefaultUserNameChanged") { m_meta->setDefaultUserNameChanged(readDateTime()); } else if (m_xml.name() == "MaintenanceHistoryDays") { m_meta->setMaintenanceHistoryDays(readNumber()); } else if (m_xml.name() == "Color") { m_meta->setColor(readColor()); } else if (m_xml.name() == "MasterKeyChanged") { m_meta->setMasterKeyChanged(readDateTime()); } else if (m_xml.name() == "MasterKeyChangeRec") { m_meta->setMasterKeyChangeRec(readNumber()); } else if (m_xml.name() == "MasterKeyChangeForce") { m_meta->setMasterKeyChangeForce(readNumber()); } else if (m_xml.name() == "MemoryProtection") { parseMemoryProtection(); } else if (m_xml.name() == "CustomIcons") { parseCustomIcons(); } else if (m_xml.name() == "RecycleBinEnabled") { m_meta->setRecycleBinEnabled(readBool()); } else if (m_xml.name() == "RecycleBinUUID") { m_meta->setRecycleBin(getGroup(readUuid())); } else if (m_xml.name() == "RecycleBinChanged") { m_meta->setRecycleBinChanged(readDateTime()); } else if (m_xml.name() == "EntryTemplatesGroup") { m_meta->setEntryTemplatesGroup(getGroup(readUuid())); } else if (m_xml.name() == "EntryTemplatesGroupChanged") { m_meta->setEntryTemplatesGroupChanged(readDateTime()); } else if (m_xml.name() == "LastSelectedGroup") { m_meta->setLastSelectedGroup(getGroup(readUuid())); } else if (m_xml.name() == "LastTopVisibleGroup") { m_meta->setLastTopVisibleGroup(getGroup(readUuid())); } else if (m_xml.name() == "HistoryMaxItems") { int value = readNumber(); if (value >= -1) { m_meta->setHistoryMaxItems(value); } else { raiseError("HistoryMaxItems invalid number"); } } else if (m_xml.name() == "HistoryMaxSize") { int value = readNumber(); if (value >= -1) { m_meta->setHistoryMaxSize(value); } else { raiseError("HistoryMaxSize invalid number"); } } else if (m_xml.name() == "Binaries") { parseBinaries(); } else if (m_xml.name() == "CustomData") { parseCustomData(); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseMemoryProtection() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "MemoryProtection"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "ProtectTitle") { m_meta->setProtectTitle(readBool()); } else if (m_xml.name() == "ProtectUserName") { m_meta->setProtectUsername(readBool()); } else if (m_xml.name() == "ProtectPassword") { m_meta->setProtectPassword(readBool()); } else if (m_xml.name() == "ProtectURL") { m_meta->setProtectUrl(readBool()); } else if (m_xml.name() == "ProtectNotes") { m_meta->setProtectNotes(readBool()); } /*else if (m_xml.name() == "AutoEnableVisualHiding") { m_meta->setAutoEnableVisualHiding(readBool()); }*/ else { skipCurrentElement(); } } } void KeePass2XmlReader::parseCustomIcons() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomIcons"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Icon") { parseIcon(); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseIcon() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Icon"); Uuid uuid; QImage icon; bool uuidSet = false; bool iconSet = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { uuid = readUuid(); uuidSet = !uuid.isNull(); } else if (m_xml.name() == "Data") { icon.loadFromData(readBinary()); iconSet = true; } else { skipCurrentElement(); } } if (uuidSet && iconSet) { m_meta->addCustomIcon(uuid, icon); } else { raiseError("Missing icon uuid or data"); } } void KeePass2XmlReader::parseBinaries() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binaries"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Binary") { QXmlStreamAttributes attr = m_xml.attributes(); QString id = attr.value("ID").toString(); QByteArray data; if (attr.value("Compressed").compare("True", Qt::CaseInsensitive) == 0) { data = readCompressedBinary(); } else { data = readBinary(); } if (m_binaryPool.contains(id)) { qWarning("KeePass2XmlReader::parseBinaries: overwriting binary item \"%s\"", qPrintable(id)); } m_binaryPool.insert(id, data); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseCustomData() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "CustomData"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Item") { parseCustomDataItem(); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseCustomDataItem() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Item"); QString key; QString value; bool keySet = false; bool valueSet = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Key") { key = readString(); keySet = true; } else if (m_xml.name() == "Value") { value = readString(); valueSet = true; } else { skipCurrentElement(); } } if (keySet && valueSet) { m_meta->addCustomField(key, value); } else { raiseError("Missing custom data key or value"); } } bool KeePass2XmlReader::parseRoot() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Root"); bool groupElementFound = false; bool groupParsedSuccesfully = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Group") { if (groupElementFound) { groupParsedSuccesfully = false; raiseError("Multiple group elements"); continue; } Group* rootGroup = parseGroup(); if (rootGroup) { Group* oldRoot = m_db->rootGroup(); m_db->setRootGroup(rootGroup); delete oldRoot; groupParsedSuccesfully = true; } groupElementFound = true; } else if (m_xml.name() == "DeletedObjects") { parseDeletedObjects(); } else { skipCurrentElement(); } } return groupParsedSuccesfully; } Group* KeePass2XmlReader::parseGroup() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Group"); Group* group = new Group(); group->setUpdateTimeinfo(false); QList children; QList entries; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { Uuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError("Null group uuid"); } else { group->setUuid(Uuid::random()); } } else { group->setUuid(uuid); } } else if (m_xml.name() == "Name") { group->setName(readString()); } else if (m_xml.name() == "Notes") { group->setNotes(readString()); } else if (m_xml.name() == "IconID") { int iconId = readNumber(); if (iconId < 0) { if (m_strictMode) { raiseError("Invalid group icon number"); } iconId = 0; } else { if (iconId >= DatabaseIcons::IconCount) { qWarning("KeePass2XmlReader::parseGroup: icon id \"%d\" not supported", iconId); } group->setIcon(iconId); } } else if (m_xml.name() == "CustomIconUUID") { Uuid uuid = readUuid(); if (!uuid.isNull()) { group->setIcon(uuid); } } else if (m_xml.name() == "Times") { group->setTimeInfo(parseTimes()); } else if (m_xml.name() == "IsExpanded") { group->setExpanded(readBool()); } else if (m_xml.name() == "DefaultAutoTypeSequence") { group->setDefaultAutoTypeSequence(readString()); } else if (m_xml.name() == "EnableAutoType") { QString str = readString(); if (str.compare("null", Qt::CaseInsensitive) == 0) { group->setAutoTypeEnabled(Group::Inherit); } else if (str.compare("true", Qt::CaseInsensitive) == 0) { group->setAutoTypeEnabled(Group::Enable); } else if (str.compare("false", Qt::CaseInsensitive) == 0) { group->setAutoTypeEnabled(Group::Disable); } else { raiseError("Invalid EnableAutoType value"); } } else if (m_xml.name() == "EnableSearching") { QString str = readString(); if (str.compare("null", Qt::CaseInsensitive) == 0) { group->setSearchingEnabled(Group::Inherit); } else if (str.compare("true", Qt::CaseInsensitive) == 0) { group->setSearchingEnabled(Group::Enable); } else if (str.compare("false", Qt::CaseInsensitive) == 0) { group->setSearchingEnabled(Group::Disable); } else { raiseError("Invalid EnableSearching value"); } } else if (m_xml.name() == "LastTopVisibleEntry") { group->setLastTopVisibleEntry(getEntry(readUuid())); } else if (m_xml.name() == "Group") { Group* newGroup = parseGroup(); if (newGroup) { children.append(newGroup); } } else if (m_xml.name() == "Entry") { Entry* newEntry = parseEntry(false); if (newEntry) { entries.append(newEntry); } } else { skipCurrentElement(); } } if (group->uuid().isNull() && !m_strictMode) { group->setUuid(Uuid::random()); } if (!group->uuid().isNull()) { Group* tmpGroup = group; group = getGroup(tmpGroup->uuid()); group->copyDataFrom(tmpGroup); group->setUpdateTimeinfo(false); delete tmpGroup; } else if (!hasError()) { raiseError("No group uuid found"); } Q_FOREACH (Group* child, children) { child->setParent(group); } Q_FOREACH (Entry* entry, entries) { entry->setGroup(group); } return group; } void KeePass2XmlReader::parseDeletedObjects() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObjects"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "DeletedObject") { parseDeletedObject(); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseDeletedObject() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "DeletedObject"); DeletedObject delObj; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { Uuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError("Null DeleteObject uuid"); } } else { delObj.uuid = uuid; } } else if (m_xml.name() == "DeletionTime") { delObj.deletionTime = readDateTime(); } else { skipCurrentElement(); } } if (!delObj.uuid.isNull() && !delObj.deletionTime.isNull()) { m_db->addDeletedObject(delObj); } else if (m_strictMode) { raiseError("Missing DeletedObject uuid or time"); } } Entry* KeePass2XmlReader::parseEntry(bool history) { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Entry"); Entry* entry = new Entry(); entry->setUpdateTimeinfo(false); QList historyItems; QList binaryRefs; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "UUID") { Uuid uuid = readUuid(); if (uuid.isNull()) { if (m_strictMode) { raiseError("Null entry uuid"); } else { entry->setUuid(Uuid::random()); } } else { entry->setUuid(uuid); } } else if (m_xml.name() == "IconID") { int iconId = readNumber(); if (iconId < 0) { if (m_strictMode) { raiseError("Invalid entry icon number"); } iconId = 0; } else { entry->setIcon(iconId); } } else if (m_xml.name() == "CustomIconUUID") { Uuid uuid = readUuid(); if (!uuid.isNull()) { entry->setIcon(uuid); } } else if (m_xml.name() == "ForegroundColor") { entry->setForegroundColor(readColor()); } else if (m_xml.name() == "BackgroundColor") { entry->setBackgroundColor(readColor()); } else if (m_xml.name() == "OverrideURL") { entry->setOverrideUrl(readString()); } else if (m_xml.name() == "Tags") { entry->setTags(readString()); } else if (m_xml.name() == "Times") { entry->setTimeInfo(parseTimes()); } else if (m_xml.name() == "String") { parseEntryString(entry); } else if (m_xml.name() == "Binary") { QPair ref = parseEntryBinary(entry); if (!ref.first.isNull() && !ref.second.isNull()) { binaryRefs.append(ref); } } else if (m_xml.name() == "AutoType") { parseAutoType(entry); } else if (m_xml.name() == "History") { if (history) { raiseError("History element in history entry"); } else { historyItems = parseEntryHistory(); } } else { skipCurrentElement(); } } if (entry->uuid().isNull() && !m_strictMode) { entry->setUuid(Uuid::random()); } if (!entry->uuid().isNull()) { if (history) { entry->setUpdateTimeinfo(false); } else { Entry* tmpEntry = entry; entry = getEntry(tmpEntry->uuid()); entry->copyDataFrom(tmpEntry); entry->setUpdateTimeinfo(false); delete tmpEntry; } } else if (!hasError()) { raiseError("No entry uuid found"); } Q_FOREACH (Entry* historyItem, historyItems) { if (historyItem->uuid() != entry->uuid()) { if (m_strictMode) { raiseError("History element with different uuid"); } else { historyItem->setUuid(entry->uuid()); } } entry->addHistoryItem(historyItem); } Q_FOREACH (const StringPair& ref, binaryRefs) { m_binaryMap.insertMulti(ref.first, qMakePair(entry, ref.second)); } return entry; } void KeePass2XmlReader::parseEntryString(Entry* entry) { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "String"); QString key; QString value; bool protect = false; bool keySet = false; bool valueSet = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Key") { key = readString(); keySet = true; } else if (m_xml.name() == "Value") { QXmlStreamAttributes attr = m_xml.attributes(); value = readString(); bool isProtected = attr.value("Protected") == "True"; bool protectInMemory = attr.value("ProtectInMemory") == "True"; if (isProtected && !value.isEmpty()) { if (m_randomStream) { QByteArray ciphertext = QByteArray::fromBase64(value.toLatin1()); bool ok; QByteArray plaintext = m_randomStream->process(ciphertext, &ok); if (!ok) { value.clear(); raiseError(m_randomStream->errorString()); } else { value = QString::fromUtf8(plaintext); } } else { raiseError("Unable to decrypt entry string"); } } protect = isProtected || protectInMemory; valueSet = true; } else { skipCurrentElement(); } } if (keySet && valueSet) { // the default attributes are always there so additionally check if it's empty if (entry->attributes()->hasKey(key) && !entry->attributes()->value(key).isEmpty()) { raiseError("Duplicate custom attribute found"); } else { entry->attributes()->set(key, value, protect); } } else { raiseError("Entry string key or value missing"); } } QPair KeePass2XmlReader::parseEntryBinary(Entry* entry) { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Binary"); QPair poolRef; QString key; QByteArray value; bool keySet = false; bool valueSet = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Key") { key = readString(); keySet = true; } else if (m_xml.name() == "Value") { QXmlStreamAttributes attr = m_xml.attributes(); if (attr.hasAttribute("Ref")) { poolRef = qMakePair(attr.value("Ref").toString(), key); m_xml.skipCurrentElement(); } else { // format compatibility value = readBinary(); bool isProtected = attr.hasAttribute("Protected") && (attr.value("Protected") == "True"); if (isProtected && !value.isEmpty()) { if (!m_randomStream->processInPlace(value)) { raiseError(m_randomStream->errorString()); } } } valueSet = true; } else { skipCurrentElement(); } } if (keySet && valueSet) { if (entry->attachments()->hasKey(key)) { raiseError("Duplicate attachment found"); } else { entry->attachments()->set(key, value); } } else { raiseError("Entry binary key or value missing"); } return poolRef; } void KeePass2XmlReader::parseAutoType(Entry* entry) { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "AutoType"); while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Enabled") { entry->setAutoTypeEnabled(readBool()); } else if (m_xml.name() == "DataTransferObfuscation") { entry->setAutoTypeObfuscation(readNumber()); } else if (m_xml.name() == "DefaultSequence") { entry->setDefaultAutoTypeSequence(readString()); } else if (m_xml.name() == "Association") { parseAutoTypeAssoc(entry); } else { skipCurrentElement(); } } } void KeePass2XmlReader::parseAutoTypeAssoc(Entry* entry) { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Association"); AutoTypeAssociations::Association assoc; bool windowSet = false; bool sequenceSet = false; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Window") { assoc.window = readString(); windowSet = true; } else if (m_xml.name() == "KeystrokeSequence") { assoc.sequence = readString(); sequenceSet = true; } else { skipCurrentElement(); } } if (windowSet && sequenceSet) { entry->autoTypeAssociations()->add(assoc); } else { raiseError("Auto-type association window or sequence missing"); } } QList KeePass2XmlReader::parseEntryHistory() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "History"); QList historyItems; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "Entry") { historyItems.append(parseEntry(true)); } else { skipCurrentElement(); } } return historyItems; } TimeInfo KeePass2XmlReader::parseTimes() { Q_ASSERT(m_xml.isStartElement() && m_xml.name() == "Times"); TimeInfo timeInfo; while (!m_xml.error() && m_xml.readNextStartElement()) { if (m_xml.name() == "LastModificationTime") { timeInfo.setLastModificationTime(readDateTime()); } else if (m_xml.name() == "CreationTime") { timeInfo.setCreationTime(readDateTime()); } else if (m_xml.name() == "LastAccessTime") { timeInfo.setLastAccessTime(readDateTime()); } else if (m_xml.name() == "ExpiryTime") { timeInfo.setExpiryTime(readDateTime()); } else if (m_xml.name() == "Expires") { timeInfo.setExpires(readBool()); } else if (m_xml.name() == "UsageCount") { timeInfo.setUsageCount(readNumber()); } else if (m_xml.name() == "LocationChanged") { timeInfo.setLocationChanged(readDateTime()); } else { skipCurrentElement(); } } return timeInfo; } QString KeePass2XmlReader::readString() { return m_xml.readElementText(); } bool KeePass2XmlReader::readBool() { QString str = readString(); if (str.compare("True", Qt::CaseInsensitive) == 0) { return true; } else if (str.compare("False", Qt::CaseInsensitive) == 0) { return false; } else { raiseError("Invalid bool value"); return false; } } QDateTime KeePass2XmlReader::readDateTime() { QString str = readString(); QDateTime dt = QDateTime::fromString(str, Qt::ISODate); if (!dt.isValid()) { if (m_strictMode) { raiseError("Invalid date time value"); } else { dt = Tools::currentDateTimeUtc(); } } return dt; } QColor KeePass2XmlReader::readColor() { QString colorStr = readString(); if (colorStr.isEmpty()) { return QColor(); } if (colorStr.length() != 7 || colorStr[0] != '#') { if (m_strictMode) { raiseError("Invalid color value"); } return QColor(); } QColor color; for (int i = 0; i <= 2; i++) { QString rgbPartStr = colorStr.mid(1 + 2*i, 2); bool ok; int rgbPart = rgbPartStr.toInt(&ok, 16); if (!ok || rgbPart > 255) { if (m_strictMode) { raiseError("Invalid color rgb part"); } return QColor(); } if (i == 0) { color.setRed(rgbPart); } else if (i == 1) { color.setGreen(rgbPart); } else { color.setBlue(rgbPart); } } return color; } int KeePass2XmlReader::readNumber() { bool ok; int result = readString().toInt(&ok); if (!ok) { raiseError("Invalid number value"); } return result; } Uuid KeePass2XmlReader::readUuid() { QByteArray uuidBin = readBinary(); if (uuidBin.isEmpty()) { return Uuid(); } else if (uuidBin.length() != Uuid::Length) { if (m_strictMode) { raiseError("Invalid uuid value"); } return Uuid(); } else { return Uuid(uuidBin); } } QByteArray KeePass2XmlReader::readBinary() { return QByteArray::fromBase64(readString().toLatin1()); } QByteArray KeePass2XmlReader::readCompressedBinary() { QByteArray rawData = readBinary(); QBuffer buffer(&rawData); buffer.open(QIODevice::ReadOnly); QtIOCompressor compressor(&buffer); compressor.setStreamFormat(QtIOCompressor::GzipFormat); compressor.open(QIODevice::ReadOnly); QByteArray result; if (!Tools::readAllFromDevice(&compressor, result)) { raiseError("Unable to decompress binary"); } return result; } Group* KeePass2XmlReader::getGroup(const Uuid& uuid) { if (uuid.isNull()) { return Q_NULLPTR; } if (m_groups.contains(uuid)) { return m_groups.value(uuid); } else { Group* group = new Group(); group->setUpdateTimeinfo(false); group->setUuid(uuid); group->setParent(m_tmpParent); m_groups.insert(uuid, group); return group; } } Entry* KeePass2XmlReader::getEntry(const Uuid& uuid) { if (uuid.isNull()) { return Q_NULLPTR; } if (m_entries.contains(uuid)) { return m_entries.value(uuid); } else { Entry* entry = new Entry(); entry->setUpdateTimeinfo(false); entry->setUuid(uuid); entry->setGroup(m_tmpParent); m_entries.insert(uuid, entry); return entry; } } void KeePass2XmlReader::skipCurrentElement() { qWarning("KeePass2XmlReader::skipCurrentElement: skip element \"%s\"", qPrintable(m_xml.name().toString())); m_xml.skipCurrentElement(); } keepassx-2.0.3/src/format/KeePass2XmlReader.h000066400000000000000000000056071276304217300210250ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2XMLREADER_H #define KEEPASSX_KEEPASS2XMLREADER_H #include #include #include #include #include #include #include "core/Global.h" #include "core/TimeInfo.h" #include "core/Uuid.h" class Database; class Entry; class Group; class KeePass2RandomStream; class Metadata; class KeePass2XmlReader { Q_DECLARE_TR_FUNCTIONS(KeePass2XmlReader) public: KeePass2XmlReader(); Database* readDatabase(QIODevice* device); void readDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = Q_NULLPTR); Database* readDatabase(const QString& filename); bool hasError(); QString errorString(); QByteArray headerHash(); void setStrictMode(bool strictMode); private: bool parseKeePassFile(); void parseMeta(); void parseMemoryProtection(); void parseCustomIcons(); void parseIcon(); void parseBinaries(); void parseCustomData(); void parseCustomDataItem(); bool parseRoot(); Group* parseGroup(); void parseDeletedObjects(); void parseDeletedObject(); Entry* parseEntry(bool history); void parseEntryString(Entry* entry); QPair parseEntryBinary(Entry* entry); void parseAutoType(Entry* entry); void parseAutoTypeAssoc(Entry* entry); QList parseEntryHistory(); TimeInfo parseTimes(); QString readString(); bool readBool(); QDateTime readDateTime(); QColor readColor(); int readNumber(); Uuid readUuid(); QByteArray readBinary(); QByteArray readCompressedBinary(); Group* getGroup(const Uuid& uuid); Entry* getEntry(const Uuid& uuid); void raiseError(const QString& errorMessage); void skipCurrentElement(); QXmlStreamReader m_xml; KeePass2RandomStream* m_randomStream; Database* m_db; Metadata* m_meta; Group* m_tmpParent; QHash m_groups; QHash m_entries; QHash m_binaryPool; QHash > m_binaryMap; QByteArray m_headerHash; bool m_error; QString m_errorStr; bool m_strictMode; }; #endif // KEEPASSX_KEEPASS2XMLREADER_H keepassx-2.0.3/src/format/KeePass2XmlWriter.cpp000066400000000000000000000405351276304217300214310ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass2XmlWriter.h" #include #include #include "core/Metadata.h" #include "format/KeePass2RandomStream.h" #include "streams/QtIOCompressor" KeePass2XmlWriter::KeePass2XmlWriter() : m_db(Q_NULLPTR) , m_meta(Q_NULLPTR) , m_randomStream(Q_NULLPTR) , m_error(false) { m_xml.setAutoFormatting(true); m_xml.setAutoFormattingIndent(-1); // 1 tab m_xml.setCodec("UTF-8"); } void KeePass2XmlWriter::writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream, const QByteArray& headerHash) { m_db = db; m_meta = db->metadata(); m_randomStream = randomStream; m_headerHash = headerHash; generateIdMap(); m_xml.setDevice(device); m_xml.writeStartDocument("1.0", true); m_xml.writeStartElement("KeePassFile"); writeMetadata(); writeRoot(); m_xml.writeEndElement(); m_xml.writeEndDocument(); #if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0) if (m_xml.hasError()) { raiseError(device->errorString()); } #endif } void KeePass2XmlWriter::writeDatabase(const QString& filename, Database* db) { QFile file(filename); file.open(QIODevice::WriteOnly|QIODevice::Truncate); writeDatabase(&file, db); } bool KeePass2XmlWriter::hasError() { return m_error; } QString KeePass2XmlWriter::errorString() { return m_errorStr; } void KeePass2XmlWriter::generateIdMap() { QList allEntries = m_db->rootGroup()->entriesRecursive(true); int nextId = 0; Q_FOREACH (Entry* entry, allEntries) { Q_FOREACH (const QString& key, entry->attachments()->keys()) { QByteArray data = entry->attachments()->value(key); if (!m_idMap.contains(data)) { m_idMap.insert(data, nextId++); } } } } void KeePass2XmlWriter::writeMetadata() { m_xml.writeStartElement("Meta"); writeString("Generator", m_meta->generator()); if (!m_headerHash.isEmpty()) { writeBinary("HeaderHash", m_headerHash); } writeString("DatabaseName", m_meta->name()); writeDateTime("DatabaseNameChanged", m_meta->nameChanged()); writeString("DatabaseDescription", m_meta->description()); writeDateTime("DatabaseDescriptionChanged", m_meta->descriptionChanged()); writeString("DefaultUserName", m_meta->defaultUserName()); writeDateTime("DefaultUserNameChanged", m_meta->defaultUserNameChanged()); writeNumber("MaintenanceHistoryDays", m_meta->maintenanceHistoryDays()); writeColor("Color", m_meta->color()); writeDateTime("MasterKeyChanged", m_meta->masterKeyChanged()); writeNumber("MasterKeyChangeRec", m_meta->masterKeyChangeRec()); writeNumber("MasterKeyChangeForce", m_meta->masterKeyChangeForce()); writeMemoryProtection(); writeCustomIcons(); writeBool("RecycleBinEnabled", m_meta->recycleBinEnabled()); writeUuid("RecycleBinUUID", m_meta->recycleBin()); writeDateTime("RecycleBinChanged", m_meta->recycleBinChanged()); writeUuid("EntryTemplatesGroup", m_meta->entryTemplatesGroup()); writeDateTime("EntryTemplatesGroupChanged", m_meta->entryTemplatesGroupChanged()); writeUuid("LastSelectedGroup", m_meta->lastSelectedGroup()); writeUuid("LastTopVisibleGroup", m_meta->lastTopVisibleGroup()); writeNumber("HistoryMaxItems", m_meta->historyMaxItems()); writeNumber("HistoryMaxSize", m_meta->historyMaxSize()); writeBinaries(); writeCustomData(); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeMemoryProtection() { m_xml.writeStartElement("MemoryProtection"); writeBool("ProtectTitle", m_meta->protectTitle()); writeBool("ProtectUserName", m_meta->protectUsername()); writeBool("ProtectPassword", m_meta->protectPassword()); writeBool("ProtectURL", m_meta->protectUrl()); writeBool("ProtectNotes", m_meta->protectNotes()); // writeBool("AutoEnableVisualHiding", m_meta->autoEnableVisualHiding()); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeCustomIcons() { m_xml.writeStartElement("CustomIcons"); Q_FOREACH (const Uuid& uuid, m_meta->customIconsOrder()) { writeIcon(uuid, m_meta->customIcon(uuid)); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeIcon(const Uuid& uuid, const QImage& icon) { m_xml.writeStartElement("Icon"); writeUuid("UUID", uuid); QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); // TODO: check !icon.save() icon.save(&buffer, "PNG"); buffer.close(); writeBinary("Data", ba); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeBinaries() { m_xml.writeStartElement("Binaries"); QHash::const_iterator i; for (i = m_idMap.constBegin(); i != m_idMap.constEnd(); ++i) { m_xml.writeStartElement("Binary"); m_xml.writeAttribute("ID", QString::number(i.value())); QByteArray data; if (m_db->compressionAlgo() == Database::CompressionGZip) { m_xml.writeAttribute("Compressed", "True"); QBuffer buffer; buffer.open(QIODevice::ReadWrite); QtIOCompressor compressor(&buffer); compressor.setStreamFormat(QtIOCompressor::GzipFormat); compressor.open(QIODevice::WriteOnly); qint64 bytesWritten = compressor.write(i.key()); Q_ASSERT(bytesWritten == i.key().size()); Q_UNUSED(bytesWritten); compressor.close(); buffer.seek(0); data = buffer.readAll(); } else { data = i.key(); } if (!data.isEmpty()) { m_xml.writeCharacters(QString::fromLatin1(data.toBase64())); } m_xml.writeEndElement(); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeCustomData() { m_xml.writeStartElement("CustomData"); QHash customFields = m_meta->customFields(); Q_FOREACH (const QString& key, customFields.keys()) { writeCustomDataItem(key, customFields.value(key)); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeCustomDataItem(const QString& key, const QString& value) { m_xml.writeStartElement("Item"); writeString("Key", key); writeString("Value", value); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeRoot() { Q_ASSERT(m_db->rootGroup()); m_xml.writeStartElement("Root"); writeGroup(m_db->rootGroup()); writeDeletedObjects(); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeGroup(const Group* group) { Q_ASSERT(!group->uuid().isNull()); m_xml.writeStartElement("Group"); writeUuid("UUID", group->uuid()); writeString("Name", group->name()); writeString("Notes", group->notes()); writeNumber("IconID", group->iconNumber()); if (!group->iconUuid().isNull()) { writeUuid("CustomIconUUID", group->iconUuid()); } writeTimes(group->timeInfo()); writeBool("IsExpanded", group->isExpanded()); writeString("DefaultAutoTypeSequence", group->defaultAutoTypeSequence()); writeTriState("EnableAutoType", group->autoTypeEnabled()); writeTriState("EnableSearching", group->searchingEnabled()); writeUuid("LastTopVisibleEntry", group->lastTopVisibleEntry()); Q_FOREACH (const Entry* entry, group->entries()) { writeEntry(entry); } Q_FOREACH (const Group* child, group->children()) { writeGroup(child); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeTimes(const TimeInfo& ti) { m_xml.writeStartElement("Times"); writeDateTime("LastModificationTime", ti.lastModificationTime()); writeDateTime("CreationTime", ti.creationTime()); writeDateTime("LastAccessTime", ti.lastAccessTime()); writeDateTime("ExpiryTime", ti.expiryTime()); writeBool("Expires", ti.expires()); writeNumber("UsageCount", ti.usageCount()); writeDateTime("LocationChanged", ti.locationChanged()); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeDeletedObjects() { m_xml.writeStartElement("DeletedObjects"); Q_FOREACH (const DeletedObject& delObj, m_db->deletedObjects()) { writeDeletedObject(delObj); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeDeletedObject(const DeletedObject& delObj) { m_xml.writeStartElement("DeletedObject"); writeUuid("UUID", delObj.uuid); writeDateTime("DeletionTime", delObj.deletionTime); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeEntry(const Entry* entry) { Q_ASSERT(!entry->uuid().isNull()); m_xml.writeStartElement("Entry"); writeUuid("UUID", entry->uuid()); writeNumber("IconID", entry->iconNumber()); if (!entry->iconUuid().isNull()) { writeUuid("CustomIconUUID", entry->iconUuid()); } writeColor("ForegroundColor", entry->foregroundColor()); writeColor("BackgroundColor", entry->backgroundColor()); writeString("OverrideURL", entry->overrideUrl()); writeString("Tags", entry->tags()); writeTimes(entry->timeInfo()); Q_FOREACH (const QString& key, entry->attributes()->keys()) { m_xml.writeStartElement("String"); bool protect = ( ((key == "Title") && m_meta->protectTitle()) || ((key == "UserName") && m_meta->protectUsername()) || ((key == "Password") && m_meta->protectPassword()) || ((key == "URL") && m_meta->protectUrl()) || ((key == "Notes") && m_meta->protectNotes()) || entry->attributes()->isProtected(key) ); writeString("Key", key); m_xml.writeStartElement("Value"); QString value; if (protect) { if (m_randomStream) { m_xml.writeAttribute("Protected", "True"); bool ok; QByteArray rawData = m_randomStream->process(entry->attributes()->value(key).toUtf8(), &ok); if (!ok) { raiseError(m_randomStream->errorString()); } value = QString::fromLatin1(rawData.toBase64()); } else { m_xml.writeAttribute("ProtectInMemory", "True"); value = entry->attributes()->value(key); } } else { value = entry->attributes()->value(key); } if (!value.isEmpty()) { m_xml.writeCharacters(stripInvalidXml10Chars(value)); } m_xml.writeEndElement(); m_xml.writeEndElement(); } Q_FOREACH (const QString& key, entry->attachments()->keys()) { m_xml.writeStartElement("Binary"); writeString("Key", key); m_xml.writeStartElement("Value"); m_xml.writeAttribute("Ref", QString::number(m_idMap[entry->attachments()->value(key)])); m_xml.writeEndElement(); m_xml.writeEndElement(); } writeAutoType(entry); // write history only for entries that are not history items if (entry->parent()) { writeEntryHistory(entry); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeAutoType(const Entry* entry) { m_xml.writeStartElement("AutoType"); writeBool("Enabled", entry->autoTypeEnabled()); writeNumber("DataTransferObfuscation", entry->autoTypeObfuscation()); writeString("DefaultSequence", entry->defaultAutoTypeSequence()); Q_FOREACH (const AutoTypeAssociations::Association& assoc, entry->autoTypeAssociations()->getAll()) { writeAutoTypeAssoc(assoc); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc) { m_xml.writeStartElement("Association"); writeString("Window", assoc.window); writeString("KeystrokeSequence", assoc.sequence); m_xml.writeEndElement(); } void KeePass2XmlWriter::writeEntryHistory(const Entry* entry) { m_xml.writeStartElement("History"); const QList& historyItems = entry->historyItems(); Q_FOREACH (const Entry* item, historyItems) { writeEntry(item); } m_xml.writeEndElement(); } void KeePass2XmlWriter::writeString(const QString& qualifiedName, const QString& string) { if (string.isEmpty()) { m_xml.writeEmptyElement(qualifiedName); } else { m_xml.writeTextElement(qualifiedName, stripInvalidXml10Chars(string)); } } void KeePass2XmlWriter::writeNumber(const QString& qualifiedName, int number) { writeString(qualifiedName, QString::number(number)); } void KeePass2XmlWriter::writeBool(const QString& qualifiedName, bool b) { if (b) { writeString(qualifiedName, "True"); } else { writeString(qualifiedName, "False"); } } void KeePass2XmlWriter::writeDateTime(const QString& qualifiedName, const QDateTime& dateTime) { Q_ASSERT(dateTime.isValid()); Q_ASSERT(dateTime.timeSpec() == Qt::UTC); QString dateTimeStr = dateTime.toString(Qt::ISODate); // Qt < 4.8 doesn't append a 'Z' at the end if (!dateTimeStr.isEmpty() && dateTimeStr[dateTimeStr.size() - 1] != 'Z') { dateTimeStr.append('Z'); } writeString(qualifiedName, dateTimeStr); } void KeePass2XmlWriter::writeUuid(const QString& qualifiedName, const Uuid& uuid) { writeString(qualifiedName, uuid.toBase64()); } void KeePass2XmlWriter::writeUuid(const QString& qualifiedName, const Group* group) { if (group) { writeUuid(qualifiedName, group->uuid()); } else { writeUuid(qualifiedName, Uuid()); } } void KeePass2XmlWriter::writeUuid(const QString& qualifiedName, const Entry* entry) { if (entry) { writeUuid(qualifiedName, entry->uuid()); } else { writeUuid(qualifiedName, Uuid()); } } void KeePass2XmlWriter::writeBinary(const QString& qualifiedName, const QByteArray& ba) { writeString(qualifiedName, QString::fromLatin1(ba.toBase64())); } void KeePass2XmlWriter::writeColor(const QString& qualifiedName, const QColor& color) { QString colorStr; if (color.isValid()) { colorStr = QString("#%1%2%3").arg(colorPartToString(color.red())) .arg(colorPartToString(color.green())) .arg(colorPartToString(color.blue())); } writeString(qualifiedName, colorStr); } void KeePass2XmlWriter::writeTriState(const QString& qualifiedName, Group::TriState triState) { QString value; if (triState == Group::Inherit) { value = "null"; } else if (triState == Group::Enable) { value = "true"; } else { value = "false"; } writeString(qualifiedName, value); } QString KeePass2XmlWriter::colorPartToString(int value) { QString str = QString::number(value, 16).toUpper(); if (str.length() == 1) { str.prepend("0"); } return str; } QString KeePass2XmlWriter::stripInvalidXml10Chars(QString str) { for (int i = str.size() - 1; i >= 0; i--) { const QChar ch = str.at(i); const ushort uc = ch.unicode(); if (ch.isLowSurrogate() && i != 0 && str.at(i - 1).isHighSurrogate()) { // keep valid surrogate pair i--; } else if ((uc < 0x20 && uc != 0x09 && uc != 0x0A && uc != 0x0D) // control chracters || (uc >= 0x7F && uc <= 0x84) // control chracters, valid but discouraged by XML || (uc >= 0x86 && uc <= 0x9F) // control chracters, valid but discouraged by XML || (uc > 0xFFFD) // noncharacter || ch.isLowSurrogate() // single low surrogate || ch.isHighSurrogate()) // single high surrogate { qWarning("Stripping invalid XML 1.0 codepoint %x", uc); str.remove(i, 1); } } return str; } void KeePass2XmlWriter::raiseError(const QString& errorMessage) { m_error = true; m_errorStr = errorMessage; } keepassx-2.0.3/src/format/KeePass2XmlWriter.h000066400000000000000000000062211276304217300210700ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS2XMLWRITER_H #define KEEPASSX_KEEPASS2XMLWRITER_H #include #include #include #include #include "core/Database.h" #include "core/Entry.h" #include "core/Group.h" #include "core/TimeInfo.h" #include "core/Uuid.h" class KeePass2RandomStream; class Metadata; class KeePass2XmlWriter { public: KeePass2XmlWriter(); void writeDatabase(QIODevice* device, Database* db, KeePass2RandomStream* randomStream = Q_NULLPTR, const QByteArray& headerHash = QByteArray()); void writeDatabase(const QString& filename, Database* db); bool hasError(); QString errorString(); private: void generateIdMap(); void writeMetadata(); void writeMemoryProtection(); void writeCustomIcons(); void writeIcon(const Uuid& uuid, const QImage& icon); void writeBinaries(); void writeCustomData(); void writeCustomDataItem(const QString& key, const QString& value); void writeRoot(); void writeGroup(const Group* group); void writeTimes(const TimeInfo& ti); void writeDeletedObjects(); void writeDeletedObject(const DeletedObject& delObj); void writeEntry(const Entry* entry); void writeAutoType(const Entry* entry); void writeAutoTypeAssoc(const AutoTypeAssociations::Association& assoc); void writeEntryHistory(const Entry* entry); void writeString(const QString& qualifiedName, const QString& string); void writeNumber(const QString& qualifiedName, int number); void writeBool(const QString& qualifiedName, bool b); void writeDateTime(const QString& qualifiedName, const QDateTime& dateTime); void writeUuid(const QString& qualifiedName, const Uuid& uuid); void writeUuid(const QString& qualifiedName, const Group* group); void writeUuid(const QString& qualifiedName, const Entry* entry); void writeBinary(const QString& qualifiedName, const QByteArray& ba); void writeColor(const QString& qualifiedName, const QColor& color); void writeTriState(const QString& qualifiedName, Group::TriState triState); QString colorPartToString(int value); QString stripInvalidXml10Chars(QString str); void raiseError(const QString& errorMessage); QXmlStreamWriter m_xml; Database* m_db; Metadata* m_meta; KeePass2RandomStream* m_randomStream; QByteArray m_headerHash; QHash m_idMap; bool m_error; QString m_errorStr; }; #endif // KEEPASSX_KEEPASS2XMLWRITER_H keepassx-2.0.3/src/gui/000077500000000000000000000000001276304217300147175ustar00rootroot00000000000000keepassx-2.0.3/src/gui/AboutDialog.cpp000066400000000000000000000040211276304217300176120ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AboutDialog.h" #include "ui_AboutDialog.h" #include "config-keepassx.h" #include "version.h" #include "core/FilePath.h" #include "crypto/Crypto.h" AboutDialog::AboutDialog(QWidget* parent) : QDialog(parent) , m_ui(new Ui::AboutDialog()) { m_ui->setupUi(this); m_ui->nameLabel->setText(m_ui->nameLabel->text() + " " + KEEPASSX_VERSION); QFont nameLabelFont = m_ui->nameLabel->font(); nameLabelFont.setBold(true); nameLabelFont.setPointSize(nameLabelFont.pointSize() + 4); m_ui->nameLabel->setFont(nameLabelFont); m_ui->iconLabel->setPixmap(filePath()->applicationIcon().pixmap(48)); QString commitHash; if (!QString(GIT_HEAD).isEmpty()) { commitHash = GIT_HEAD; } else if (!QString(DIST_HASH).contains("Format")) { commitHash = DIST_HASH; } if (!commitHash.isEmpty()) { QString labelText = tr("Revision").append(": ").append(commitHash); m_ui->label_git->setText(labelText); } QString libs = QString("%1\n- Qt %2\n- %3") .arg(m_ui->label_libs->text()) .arg(QString::fromLocal8Bit(qVersion())) .arg(Crypto::backendVersion()); m_ui->label_libs->setText(libs); setAttribute(Qt::WA_DeleteOnClose); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(close())); } AboutDialog::~AboutDialog() { } keepassx-2.0.3/src/gui/AboutDialog.h000066400000000000000000000021251276304217300172620ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ABOUTDIALOG_H #define KEEPASSX_ABOUTDIALOG_H #include #include #include "core/Global.h" namespace Ui { class AboutDialog; } class AboutDialog : public QDialog { Q_OBJECT public: explicit AboutDialog(QWidget* parent = Q_NULLPTR); ~AboutDialog(); private: QScopedPointer m_ui; }; #endif // KEEPASSX_ABOUTDIALOG_H keepassx-2.0.3/src/gui/AboutDialog.ui000066400000000000000000000057511276304217300174600ustar00rootroot00000000000000 AboutDialog 0 0 366 210 About KeePassX QLayout::SetFixedSize 0 0 0 0 KeePassX 0 0 <a href="http://www.keepassx.org/">http://www.keepassx.org/</a> true 0 0 KeePassX is distributed under the term of the GNU General Public License (GPL) version 2 or (at your option) version 3. true Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse Using: QDialogButtonBox::Close keepassx-2.0.3/src/gui/Application.cpp000066400000000000000000000037531276304217300176760ustar00rootroot00000000000000/* * Copyright (C) 2012 Tobias Tangemann * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Application.h" #include #include "autotype/AutoType.h" Application::Application(int& argc, char** argv) : QApplication(argc, argv) , m_mainWindow(Q_NULLPTR) { } void Application::setMainWindow(QWidget* mainWindow) { m_mainWindow = mainWindow; } bool Application::event(QEvent* event) { // Handle Apple QFileOpenEvent from finder (double click on .kdbx file) if (event->type() == QEvent::FileOpen) { Q_EMIT openFile(static_cast(event)->file()); return true; } #ifdef Q_OS_MAC // restore main window when clicking on the docker icon else if ((event->type() == QEvent::ApplicationActivate) && m_mainWindow) { m_mainWindow->ensurePolished(); m_mainWindow->setWindowState(m_mainWindow->windowState() & ~Qt::WindowMinimized); m_mainWindow->show(); m_mainWindow->raise(); m_mainWindow->activateWindow(); } #endif return QApplication::event(event); } #ifdef Q_WS_X11 bool Application::x11EventFilter(XEvent* event) { int retCode = autoType()->callEventFilter(event); if (retCode == 0) { return false; } else if (retCode == 1) { return true; } return QApplication::x11EventFilter(event); } #endif keepassx-2.0.3/src/gui/Application.h000066400000000000000000000023671276304217300173430ustar00rootroot00000000000000/* * Copyright (C) 2012 Tobias Tangemann * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_APPLICATION_H #define KEEPASSX_APPLICATION_H #include #include "core/Global.h" class Application : public QApplication { Q_OBJECT public: Application(int& argc, char** argv); void setMainWindow(QWidget* mainWindow); bool event(QEvent* event) Q_DECL_OVERRIDE; #ifdef Q_WS_X11 bool x11EventFilter(XEvent* event) Q_DECL_OVERRIDE; #endif Q_SIGNALS: void openFile(const QString& filename); private: QWidget* m_mainWindow; }; #endif // KEEPASSX_APPLICATION_H keepassx-2.0.3/src/gui/ChangeMasterKeyWidget.cpp000066400000000000000000000110471276304217300216040ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "ChangeMasterKeyWidget.h" #include "ui_ChangeMasterKeyWidget.h" #include "core/FilePath.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" ChangeMasterKeyWidget::ChangeMasterKeyWidget(QWidget* parent) : DialogyWidget(parent) , m_ui(new Ui::ChangeMasterKeyWidget()) { m_ui->setupUi(this); connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(generateKey())); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show")); connect(m_ui->togglePasswordButton, SIGNAL(toggled(bool)), m_ui->enterPasswordEdit, SLOT(setShowPassword(bool))); m_ui->repeatPasswordEdit->enableVerifyMode(m_ui->enterPasswordEdit); connect(m_ui->createKeyFileButton, SIGNAL(clicked()), SLOT(createKeyFile())); connect(m_ui->browseKeyFileButton, SIGNAL(clicked()), SLOT(browseKeyFile())); } ChangeMasterKeyWidget::~ChangeMasterKeyWidget() { } void ChangeMasterKeyWidget::createKeyFile() { QString filters = QString("%1 (*.key);;%2 (*)").arg(tr("Key files"), tr("All files")); QString fileName = fileDialog()->getSaveFileName(this, tr("Create Key File..."), QString(), filters); if (!fileName.isEmpty()) { QString errorMsg; bool created = FileKey::create(fileName, &errorMsg); if (!created) { MessageBox::warning(this, tr("Error"), tr("Unable to create Key File : ") + errorMsg); } else { m_ui->keyFileCombo->setEditText(fileName); } } } void ChangeMasterKeyWidget::browseKeyFile() { QString filters = QString("%1 (*.key);;%2 (*)").arg(tr("Key files"), tr("All files")); QString fileName = fileDialog()->getOpenFileName(this, tr("Select a key file"), QString(), filters); if (!fileName.isEmpty()) { m_ui->keyFileCombo->setEditText(fileName); } } void ChangeMasterKeyWidget::clearForms() { m_key.clear(); m_ui->passwordGroup->setChecked(true); m_ui->enterPasswordEdit->setText(""); m_ui->repeatPasswordEdit->setText(""); m_ui->keyFileGroup->setChecked(false); m_ui->togglePasswordButton->setChecked(false); // TODO: clear m_ui->keyFileCombo m_ui->enterPasswordEdit->setFocus(); } CompositeKey ChangeMasterKeyWidget::newMasterKey() { return m_key; } QLabel* ChangeMasterKeyWidget::headlineLabel() { return m_ui->headlineLabel; } void ChangeMasterKeyWidget::generateKey() { m_key.clear(); if (m_ui->passwordGroup->isChecked()) { if (m_ui->enterPasswordEdit->text() == m_ui->repeatPasswordEdit->text()) { if (m_ui->enterPasswordEdit->text().isEmpty()) { if (MessageBox::question(this, tr("Question"), tr("Do you really want to use an empty string as password?"), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes) { return; } } m_key.addKey(PasswordKey(m_ui->enterPasswordEdit->text())); } else { MessageBox::warning(this, tr("Error"), tr("Different passwords supplied.")); m_ui->enterPasswordEdit->setText(""); m_ui->repeatPasswordEdit->setText(""); return; } } if (m_ui->keyFileGroup->isChecked()) { FileKey fileKey; QString errorMsg; if (!fileKey.load(m_ui->keyFileCombo->currentText(), &errorMsg)) { MessageBox::critical(this, tr("Failed to set key file"), tr("Failed to set %1 as the Key file:\n%2") .arg(m_ui->keyFileCombo->currentText(), errorMsg)); return; } m_key.addKey(fileKey); } Q_EMIT editFinished(true); } void ChangeMasterKeyWidget::reject() { Q_EMIT editFinished(false); } keepassx-2.0.3/src/gui/ChangeMasterKeyWidget.h000066400000000000000000000030141276304217300212440ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CHANGEMASTERKEYWIDGET_H #define KEEPASSX_CHANGEMASTERKEYWIDGET_H #include #include "gui/DialogyWidget.h" #include "keys/CompositeKey.h" class QLabel; namespace Ui { class ChangeMasterKeyWidget; } class ChangeMasterKeyWidget : public DialogyWidget { Q_OBJECT public: explicit ChangeMasterKeyWidget(QWidget* parent = Q_NULLPTR); ~ChangeMasterKeyWidget(); void clearForms(); CompositeKey newMasterKey(); QLabel* headlineLabel(); Q_SIGNALS: void editFinished(bool accepted); private Q_SLOTS: void generateKey(); void reject(); void createKeyFile(); void browseKeyFile(); private: const QScopedPointer m_ui; CompositeKey m_key; Q_DISABLE_COPY(ChangeMasterKeyWidget) }; #endif // KEEPASSX_CHANGEMASTERKEYWIDGET_H keepassx-2.0.3/src/gui/ChangeMasterKeyWidget.ui000066400000000000000000000107721276304217300214430ustar00rootroot00000000000000 ChangeMasterKeyWidget 0 0 438 256 Qt::Vertical QSizePolicy::Fixed 1 3 Password true true Enter password: QLineEdit::Password true Repeat password: QLineEdit::Password Key file true Browse Create 0 0 true Qt::Vertical 20 40 QDialogButtonBox::Cancel|QDialogButtonBox::Ok PasswordEdit QLineEdit

gui/PasswordEdit.h
passwordGroup enterPasswordEdit repeatPasswordEdit togglePasswordButton keyFileGroup keyFileCombo browseKeyFileButton createKeyFileButton buttonBox keepassx-2.0.3/src/gui/Clipboard.cpp000066400000000000000000000045741276304217300173340ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "Clipboard.h" #include #include #include #include "core/Config.h" Clipboard* Clipboard::m_instance(Q_NULLPTR); Clipboard::Clipboard(QObject* parent) : QObject(parent) , m_timer(new QTimer(this)) { m_timer->setSingleShot(true); connect(m_timer, SIGNAL(timeout()), SLOT(clearClipboard())); connect(qApp, SIGNAL(aboutToQuit()), SLOT(clearCopiedText())); } void Clipboard::setText(const QString& text) { QClipboard* clipboard = QApplication::clipboard(); clipboard->setText(text, QClipboard::Clipboard); if (clipboard->supportsSelection()) { clipboard->setText(text, QClipboard::Selection); } if (config()->get("security/clearclipboard").toBool()) { int timeout = config()->get("security/clearclipboardtimeout").toInt(); if (timeout > 0) { m_lastCopied = text; m_timer->start(timeout * 1000); } } } void Clipboard::clearCopiedText() { if (m_timer->isActive()) { m_timer->stop(); clearClipboard(); } } void Clipboard::clearClipboard() { QClipboard* clipboard = QApplication::clipboard(); if (!clipboard) { qWarning("Unable to access the clipboard."); return; } if (clipboard->text(QClipboard::Clipboard) == m_lastCopied) { clipboard->clear(QClipboard::Clipboard); } if (clipboard->supportsSelection() && (clipboard->text(QClipboard::Selection) == m_lastCopied)) { clipboard->clear(QClipboard::Selection); } m_lastCopied.clear(); } Clipboard* Clipboard::instance() { if (!m_instance) { m_instance = new Clipboard(qApp); } return m_instance; } keepassx-2.0.3/src/gui/Clipboard.h000066400000000000000000000024251276304217300167720ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_CLIPBOARD_H #define KEEPASSX_CLIPBOARD_H #include #include "core/Global.h" class QTimer; class Clipboard : public QObject { Q_OBJECT public: void setText(const QString& text); static Clipboard* instance(); public Q_SLOTS: void clearCopiedText(); private Q_SLOTS: void clearClipboard(); private: explicit Clipboard(QObject* parent = Q_NULLPTR); static Clipboard* m_instance; QTimer* m_timer; QString m_lastCopied; }; inline Clipboard* clipboard() { return Clipboard::instance(); } #endif // KEEPASSX_CLIPBOARD_H keepassx-2.0.3/src/gui/DatabaseOpenWidget.cpp000066400000000000000000000123071276304217300211200ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseOpenWidget.h" #include "ui_DatabaseOpenWidget.h" #include "core/Config.h" #include "core/Database.h" #include "core/FilePath.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" #include "format/KeePass2Reader.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" DatabaseOpenWidget::DatabaseOpenWidget(QWidget* parent) : DialogyWidget(parent) , m_ui(new Ui::DatabaseOpenWidget()) , m_db(Q_NULLPTR) { m_ui->setupUi(this); QFont font = m_ui->labelHeadline->font(); font.setBold(true); font.setPointSize(font.pointSize() + 2); m_ui->labelHeadline->setFont(font); m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false); m_ui->buttonTogglePassword->setIcon(filePath()->onOffIcon("actions", "password-show")); connect(m_ui->buttonTogglePassword, SIGNAL(toggled(bool)), m_ui->editPassword, SLOT(setShowPassword(bool))); connect(m_ui->buttonBrowseFile, SIGNAL(clicked()), SLOT(browseKeyFile())); connect(m_ui->editPassword, SIGNAL(textChanged(QString)), SLOT(activatePassword())); connect(m_ui->comboKeyFile, SIGNAL(editTextChanged(QString)), SLOT(activateKeyFile())); connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(openDatabase())); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); } DatabaseOpenWidget::~DatabaseOpenWidget() { } void DatabaseOpenWidget::load(const QString& filename) { m_filename = filename; m_ui->labelFilename->setText(filename); if (config()->get("RememberLastKeyFiles").toBool()) { QHash lastKeyFiles = config()->get("LastKeyFiles").toHash(); if (lastKeyFiles.contains(m_filename)) { m_ui->checkKeyFile->setChecked(true); m_ui->comboKeyFile->addItem(lastKeyFiles[m_filename].toString()); } } m_ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); m_ui->editPassword->setFocus(); } Database* DatabaseOpenWidget::database() { return m_db; } void DatabaseOpenWidget::enterKey(const QString& pw, const QString& keyFile) { if (!pw.isNull()) { m_ui->editPassword->setText(pw); } if (!keyFile.isEmpty()) { m_ui->comboKeyFile->setEditText(keyFile); } openDatabase(); } void DatabaseOpenWidget::openDatabase() { KeePass2Reader reader; CompositeKey masterKey = databaseKey(); QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(file.errorString())); return; } if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(&file, masterKey); QApplication::restoreOverrideCursor(); if (m_db) { Q_EMIT editFinished(true); } else { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(reader.errorString())); m_ui->editPassword->clear(); } } CompositeKey DatabaseOpenWidget::databaseKey() { CompositeKey masterKey; if (m_ui->checkPassword->isChecked()) { masterKey.addKey(PasswordKey(m_ui->editPassword->text())); } QHash lastKeyFiles = config()->get("LastKeyFiles").toHash(); if (m_ui->checkKeyFile->isChecked()) { FileKey key; QString keyFilename = m_ui->comboKeyFile->currentText(); QString errorMsg; if (!key.load(keyFilename, &errorMsg)) { MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg)); return CompositeKey(); } masterKey.addKey(key); lastKeyFiles[m_filename] = keyFilename; } else { lastKeyFiles.remove(m_filename); } if (config()->get("RememberLastKeyFiles").toBool()) { config()->set("LastKeyFiles", lastKeyFiles); } return masterKey; } void DatabaseOpenWidget::reject() { Q_EMIT editFinished(false); } void DatabaseOpenWidget::activatePassword() { m_ui->checkPassword->setChecked(true); } void DatabaseOpenWidget::activateKeyFile() { m_ui->checkKeyFile->setChecked(true); } void DatabaseOpenWidget::browseKeyFile() { QString filters = QString("%1 (*);;%2 (*.key)").arg(tr("All files"), tr("Key files")); QString filename = fileDialog()->getOpenFileName(this, tr("Select key file"), QString(), filters); if (!filename.isEmpty()) { m_ui->comboKeyFile->lineEdit()->setText(filename); } } keepassx-2.0.3/src/gui/DatabaseOpenWidget.h000066400000000000000000000032631276304217300205660ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASEOPENWIDGET_H #define KEEPASSX_DATABASEOPENWIDGET_H #include #include "gui/DialogyWidget.h" #include "keys/CompositeKey.h" class Database; class QFile; namespace Ui { class DatabaseOpenWidget; } class DatabaseOpenWidget : public DialogyWidget { Q_OBJECT public: explicit DatabaseOpenWidget(QWidget* parent = Q_NULLPTR); ~DatabaseOpenWidget(); void load(const QString& filename); void enterKey(const QString& pw, const QString& keyFile); Database* database(); Q_SIGNALS: void editFinished(bool accepted); protected: CompositeKey databaseKey(); protected Q_SLOTS: virtual void openDatabase(); void reject(); private Q_SLOTS: void activatePassword(); void activateKeyFile(); void browseKeyFile(); protected: const QScopedPointer m_ui; Database* m_db; QString m_filename; private: Q_DISABLE_COPY(DatabaseOpenWidget) }; #endif // KEEPASSX_DATABASEOPENWIDGET_H keepassx-2.0.3/src/gui/DatabaseOpenWidget.ui000066400000000000000000000100761276304217300207540ustar00rootroot00000000000000 DatabaseOpenWidget 0 0 596 250 8 Qt::Vertical 20 40 Enter master key Qt::Vertical 20 40 8 Key File: Password: QLineEdit::Password true 0 0 true Browse Qt::Horizontal QDialogButtonBox::Cancel|QDialogButtonBox::Ok Qt::Vertical 20 40 PasswordEdit QLineEdit
gui/PasswordEdit.h
checkPassword editPassword buttonTogglePassword checkKeyFile comboKeyFile buttonBrowseFile buttonBox
keepassx-2.0.3/src/gui/DatabaseRepairWidget.cpp000066400000000000000000000065651276304217300214520ustar00rootroot00000000000000/* * Copyright (C) 2016 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseRepairWidget.h" #include #include #include "ui_DatabaseOpenWidget.h" #include "core/Database.h" #include "core/Metadata.h" #include "format/KeePass2Repair.h" #include "gui/MessageBox.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" DatabaseRepairWidget::DatabaseRepairWidget(QWidget* parent) : DatabaseOpenWidget(parent) { m_ui->labelHeadline->setText(tr("Repair database")); connect(this, SIGNAL(editFinished(bool)), this, SLOT(processEditFinished(bool))); } void DatabaseRepairWidget::openDatabase() { CompositeKey masterKey; if (m_ui->checkPassword->isChecked()) { masterKey.addKey(PasswordKey(m_ui->editPassword->text())); } if (m_ui->checkKeyFile->isChecked()) { FileKey key; QString keyFilename = m_ui->comboKeyFile->currentText(); QString errorMsg; if (!key.load(keyFilename, &errorMsg)) { MessageBox::warning(this, tr("Error"), tr("Can't open key file").append(":\n").append(errorMsg)); Q_EMIT editFinished(false); return; } masterKey.addKey(key); } KeePass2Repair repair; QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(file.errorString())); Q_EMIT editFinished(false); return; } if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); KeePass2Repair::RepairResult repairResult = repair.repairDatabase(&file, masterKey); QApplication::restoreOverrideCursor(); switch (repairResult) { case KeePass2Repair::NothingTodo: MessageBox::information(this, tr("Error"), tr("Database opened fine. Nothing to do.")); Q_EMIT editFinished(false); return; case KeePass2Repair::UnableToOpen: MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(repair.errorString())); Q_EMIT editFinished(false); return; case KeePass2Repair::RepairSuccess: m_db = repair.database(); MessageBox::warning(this, tr("Success"), tr("The database has been successfully repaired\nYou can now save it.")); Q_EMIT editFinished(true); return; case KeePass2Repair::RepairFailed: MessageBox::warning(this, tr("Error"), tr("Unable to repair the database.")); Q_EMIT editFinished(false); return; } } void DatabaseRepairWidget::processEditFinished(bool result) { if (result) { Q_EMIT success(); } else { Q_EMIT error(); } } keepassx-2.0.3/src/gui/DatabaseRepairWidget.h000066400000000000000000000022351276304217300211050ustar00rootroot00000000000000/* * Copyright (C) 2016 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASEREPAIRWIDGET_H #define KEEPASSX_DATABASEREPAIRWIDGET_H #include "gui/DatabaseOpenWidget.h" class DatabaseRepairWidget : public DatabaseOpenWidget { Q_OBJECT public: explicit DatabaseRepairWidget(QWidget* parent = Q_NULLPTR); Q_SIGNALS: void success(); void error(); protected: void openDatabase() Q_DECL_OVERRIDE; private Q_SLOTS: void processEditFinished(bool result); }; #endif // KEEPASSX_DATABASEREPAIRWIDGET_H keepassx-2.0.3/src/gui/DatabaseSettingsWidget.cpp000066400000000000000000000113211276304217300220120ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseSettingsWidget.h" #include "ui_DatabaseSettingsWidget.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "keys/CompositeKey.h" DatabaseSettingsWidget::DatabaseSettingsWidget(QWidget* parent) : DialogyWidget(parent) , m_ui(new Ui::DatabaseSettingsWidget()) , m_db(Q_NULLPTR) { m_ui->setupUi(this); connect(m_ui->buttonBox, SIGNAL(accepted()), SLOT(save())); connect(m_ui->buttonBox, SIGNAL(rejected()), SLOT(reject())); connect(m_ui->historyMaxItemsCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxItemsSpinBox, SLOT(setEnabled(bool))); connect(m_ui->historyMaxSizeCheckBox, SIGNAL(toggled(bool)), m_ui->historyMaxSizeSpinBox, SLOT(setEnabled(bool))); connect(m_ui->transformBenchmarkButton, SIGNAL(clicked()), SLOT(transformRoundsBenchmark())); } DatabaseSettingsWidget::~DatabaseSettingsWidget() { } void DatabaseSettingsWidget::load(Database* db) { m_db = db; Metadata* meta = m_db->metadata(); m_ui->dbNameEdit->setText(meta->name()); m_ui->dbDescriptionEdit->setText(meta->description()); m_ui->recycleBinEnabledCheckBox->setChecked(meta->recycleBinEnabled()); m_ui->defaultUsernameEdit->setText(meta->defaultUserName()); m_ui->transformRoundsSpinBox->setValue(m_db->transformRounds()); if (meta->historyMaxItems() > -1) { m_ui->historyMaxItemsSpinBox->setValue(meta->historyMaxItems()); m_ui->historyMaxItemsCheckBox->setChecked(true); } else { m_ui->historyMaxItemsSpinBox->setValue(Metadata::DefaultHistoryMaxItems); m_ui->historyMaxItemsCheckBox->setChecked(false); } int historyMaxSizeMiB = qRound(meta->historyMaxSize() / qreal(1048576)); if (historyMaxSizeMiB > 0) { m_ui->historyMaxSizeSpinBox->setValue(historyMaxSizeMiB); m_ui->historyMaxSizeCheckBox->setChecked(true); } else { m_ui->historyMaxSizeSpinBox->setValue(Metadata::DefaultHistoryMaxSize); m_ui->historyMaxSizeCheckBox->setChecked(false); } m_ui->dbNameEdit->setFocus(); } void DatabaseSettingsWidget::save() { Metadata* meta = m_db->metadata(); meta->setName(m_ui->dbNameEdit->text()); meta->setDescription(m_ui->dbDescriptionEdit->text()); meta->setDefaultUserName(m_ui->defaultUsernameEdit->text()); meta->setRecycleBinEnabled(m_ui->recycleBinEnabledCheckBox->isChecked()); if (static_cast(m_ui->transformRoundsSpinBox->value()) != m_db->transformRounds()) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db->setTransformRounds(m_ui->transformRoundsSpinBox->value()); QApplication::restoreOverrideCursor(); } bool truncate = false; int historyMaxItems; if (m_ui->historyMaxItemsCheckBox->isChecked()) { historyMaxItems = m_ui->historyMaxItemsSpinBox->value(); } else { historyMaxItems = -1; } if (historyMaxItems != meta->historyMaxItems()) { meta->setHistoryMaxItems(historyMaxItems); truncate = true; } int historyMaxSize; if (m_ui->historyMaxSizeCheckBox->isChecked()) { historyMaxSize = m_ui->historyMaxSizeSpinBox->value() * 1048576; } else { historyMaxSize = -1; } if (historyMaxSize != meta->historyMaxSize()) { meta->setHistoryMaxSize(historyMaxSize); truncate = true; } if (truncate) { truncateHistories(); } Q_EMIT editFinished(true); } void DatabaseSettingsWidget::reject() { Q_EMIT editFinished(false); } void DatabaseSettingsWidget::transformRoundsBenchmark() { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); int rounds = CompositeKey::transformKeyBenchmark(1000); if (rounds != -1) { m_ui->transformRoundsSpinBox->setValue(rounds); } QApplication::restoreOverrideCursor(); } void DatabaseSettingsWidget::truncateHistories() { QList allEntries = m_db->rootGroup()->entriesRecursive(false); Q_FOREACH (Entry* entry, allEntries) { entry->truncateHistory(); } } keepassx-2.0.3/src/gui/DatabaseSettingsWidget.h000066400000000000000000000027071276304217300214670ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASESETTINGSWIDGET_H #define KEEPASSX_DATABASESETTINGSWIDGET_H #include #include "gui/DialogyWidget.h" class Database; namespace Ui { class DatabaseSettingsWidget; } class DatabaseSettingsWidget : public DialogyWidget { Q_OBJECT public: explicit DatabaseSettingsWidget(QWidget* parent = Q_NULLPTR); ~DatabaseSettingsWidget(); void load(Database* db); Q_SIGNALS: void editFinished(bool accepted); private Q_SLOTS: void save(); void reject(); void transformRoundsBenchmark(); private: void truncateHistories(); const QScopedPointer m_ui; Database* m_db; Q_DISABLE_COPY(DatabaseSettingsWidget) }; #endif // KEEPASSX_DATABASESETTINGSWIDGET_H keepassx-2.0.3/src/gui/DatabaseSettingsWidget.ui000066400000000000000000000134421276304217300216530ustar00rootroot00000000000000 DatabaseSettingsWidget 0 0 500 399 Qt::Vertical QSizePolicy::Fixed 1 3 Database name: Database description: Transform rounds: Default username: true Use recycle bin: 0 0 MiB 1 2000000000 0 0 2000000000 0 0 1 1000000000 Benchmark Max. history items: Max. history size: Qt::Vertical 20 40 QDialogButtonBox::Cancel|QDialogButtonBox::Ok dbNameEdit dbDescriptionEdit transformRoundsSpinBox transformBenchmarkButton defaultUsernameEdit recycleBinEnabledCheckBox historyMaxItemsCheckBox historyMaxItemsSpinBox historyMaxSizeCheckBox historyMaxSizeSpinBox buttonBox keepassx-2.0.3/src/gui/DatabaseTabWidget.cpp000066400000000000000000000571771276304217300207430ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseTabWidget.h" #include #include #include "autotype/AutoType.h" #include "core/Config.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/qsavefile.h" #include "format/CsvExporter.h" #include "gui/Clipboard.h" #include "gui/DatabaseWidget.h" #include "gui/DatabaseWidgetStateSync.h" #include "gui/DragTabBar.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" #include "gui/entry/EntryView.h" #include "gui/group/GroupView.h" DatabaseManagerStruct::DatabaseManagerStruct() : dbWidget(Q_NULLPTR) , lockFile(Q_NULLPTR) , saveToFilename(false) , modified(false) , readOnly(false) { } const int DatabaseTabWidget::LastDatabasesCount = 5; DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) : QTabWidget(parent) , m_dbWidgetSateSync(new DatabaseWidgetStateSync(this)) { DragTabBar* tabBar = new DragTabBar(this); setTabBar(tabBar); setDocumentMode(true); connect(this, SIGNAL(tabCloseRequested(int)), SLOT(closeDatabase(int))); connect(this, SIGNAL(currentChanged(int)), SLOT(emitActivateDatabaseChanged())); connect(this, SIGNAL(activateDatabaseChanged(DatabaseWidget*)), m_dbWidgetSateSync, SLOT(setActive(DatabaseWidget*))); connect(autoType(), SIGNAL(globalShortcutTriggered()), SLOT(performGlobalAutoType())); } DatabaseTabWidget::~DatabaseTabWidget() { QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); deleteDatabase(i.key()); } } void DatabaseTabWidget::toggleTabbar() { if (count() > 1) { if (!tabBar()->isVisible()) { tabBar()->show(); } } else { if (tabBar()->isVisible()) { tabBar()->hide(); } } } void DatabaseTabWidget::newDatabase() { DatabaseManagerStruct dbStruct; Database* db = new Database(); db->rootGroup()->setName(tr("Root")); dbStruct.dbWidget = new DatabaseWidget(db, this); insertDatabase(db, dbStruct); dbStruct.dbWidget->switchToMasterKeyChange(); } void DatabaseTabWidget::openDatabase() { QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(), filter); if (!fileName.isEmpty()) { openDatabase(fileName); } } void DatabaseTabWidget::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) { QFileInfo fileInfo(fileName); QString canonicalFilePath = fileInfo.canonicalFilePath(); if (canonicalFilePath.isEmpty()) { MessageBox::warning(this, tr("Warning"), tr("File not found!")); return; } QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); if (i.value().canonicalFilePath == canonicalFilePath) { setCurrentIndex(databaseIndex(i.key())); return; } } DatabaseManagerStruct dbStruct; // test if we can read/write or read the file QFile file(fileName); if (!file.open(QIODevice::ReadWrite)) { if (!file.open(QIODevice::ReadOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(file.errorString())); return; } else { // can only open read-only dbStruct.readOnly = true; } } file.close(); QLockFile* lockFile = new QLockFile(QString("%1/.%2.lock").arg(fileInfo.canonicalPath(), fileInfo.fileName())); lockFile->setStaleLockTime(0); if (!dbStruct.readOnly && !lockFile->tryLock()) { // for now silently ignore if we can't create a lock file // due to lack of permissions if (lockFile->error() != QLockFile::PermissionError) { QMessageBox::StandardButton result = MessageBox::question(this, tr("Open database"), tr("The database you are trying to open is locked by another instance of KeePassX.\n" "Do you want to open it anyway? Alternatively the database is opened read-only."), QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::No) { dbStruct.readOnly = true; delete lockFile; lockFile = Q_NULLPTR; } else { // take over the lock file if possible if (lockFile->removeStaleLockFile()) { lockFile->tryLock(); } } } } Database* db = new Database(); dbStruct.dbWidget = new DatabaseWidget(db, this); dbStruct.lockFile = lockFile; dbStruct.saveToFilename = !dbStruct.readOnly; dbStruct.filePath = fileInfo.absoluteFilePath(); dbStruct.canonicalFilePath = canonicalFilePath; dbStruct.fileName = fileInfo.fileName(); insertDatabase(db, dbStruct); updateLastDatabases(dbStruct.filePath); if (!pw.isNull() || !keyFile.isEmpty()) { dbStruct.dbWidget->switchToOpenDatabase(dbStruct.filePath, pw, keyFile); } else { dbStruct.dbWidget->switchToOpenDatabase(dbStruct.filePath); } } void DatabaseTabWidget::importKeePass1Database() { QString fileName = fileDialog()->getOpenFileName(this, tr("Open KeePass 1 database"), QString(), tr("KeePass 1 database") + " (*.kdb);;" + tr("All files (*)")); if (fileName.isEmpty()) { return; } Database* db = new Database(); DatabaseManagerStruct dbStruct; dbStruct.dbWidget = new DatabaseWidget(db, this); dbStruct.modified = true; insertDatabase(db, dbStruct); dbStruct.dbWidget->switchToImportKeepass1(fileName); } bool DatabaseTabWidget::closeDatabase(Database* db) { Q_ASSERT(db); const DatabaseManagerStruct& dbStruct = m_dbList.value(db); int index = databaseIndex(db); Q_ASSERT(index != -1); QString dbName = tabText(index); if (dbName.right(1) == "*") { dbName.chop(1); } if (dbStruct.dbWidget->isInEditMode() && db->hasKey()) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Close?"), tr("\"%1\" is in edit mode.\nDiscard changes and close anyway?").arg(dbName), QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); if (result == QMessageBox::Cancel) { return false; } } if (dbStruct.modified) { if (config()->get("AutoSaveOnExit").toBool()) { if (!saveDatabase(db)) { return false; } } else { QMessageBox::StandardButton result = MessageBox::question( this, tr("Save changes?"), tr("\"%1\" was modified.\nSave changes?").arg(dbName), QMessageBox::Yes | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Yes); if (result == QMessageBox::Yes) { if (!saveDatabase(db)) { return false; } } else if (result == QMessageBox::Cancel) { return false; } } } deleteDatabase(db); return true; } void DatabaseTabWidget::deleteDatabase(Database* db) { const DatabaseManagerStruct dbStruct = m_dbList.value(db); bool emitDatabaseWithFileClosed = dbStruct.saveToFilename; QString filePath = dbStruct.filePath; int index = databaseIndex(db); removeTab(index); toggleTabbar(); m_dbList.remove(db); delete dbStruct.lockFile; delete dbStruct.dbWidget; delete db; if (emitDatabaseWithFileClosed) { Q_EMIT databaseWithFileClosed(filePath); } } bool DatabaseTabWidget::closeAllDatabases() { while (!m_dbList.isEmpty()) { if (!closeDatabase()) { return false; } } return true; } bool DatabaseTabWidget::saveDatabase(Database* db) { DatabaseManagerStruct& dbStruct = m_dbList[db]; if (dbStruct.saveToFilename) { QSaveFile saveFile(dbStruct.canonicalFilePath); if (saveFile.open(QIODevice::WriteOnly)) { m_writer.writeDatabase(&saveFile, db); if (m_writer.hasError()) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + m_writer.errorString()); return false; } if (!saveFile.commit()) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + saveFile.errorString()); return false; } } else { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + saveFile.errorString()); return false; } dbStruct.modified = false; updateTabName(db); return true; } else { return saveDatabaseAs(db); } } bool DatabaseTabWidget::saveDatabaseAs(Database* db) { DatabaseManagerStruct& dbStruct = m_dbList[db]; QString oldFileName; if (dbStruct.saveToFilename) { oldFileName = dbStruct.filePath; } else { oldFileName = tr("New database").append(".kdbx"); } QString fileName = fileDialog()->getSaveFileName(this, tr("Save database as"), oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)"), Q_NULLPTR, 0, "kdbx"); if (!fileName.isEmpty()) { QFileInfo fileInfo(fileName); QString lockFilePath; if (fileInfo.exists()) { // returns empty string when file doesn't exist lockFilePath = fileInfo.canonicalPath(); } else { lockFilePath = fileInfo.absolutePath(); } QString lockFileName = QString("%1/.%2.lock").arg(lockFilePath, fileInfo.fileName()); QScopedPointer lockFile(new QLockFile(lockFileName)); lockFile->setStaleLockTime(0); if (!lockFile->tryLock()) { // for now silently ignore if we can't create a lock file // due to lack of permissions if (lockFile->error() != QLockFile::PermissionError) { QMessageBox::StandardButton result = MessageBox::question(this, tr("Save database as"), tr("The database you are trying to save as is locked by another instance of KeePassX.\n" "Do you want to save it anyway?"), QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::No) { return false; } else { // take over the lock file if possible if (lockFile->removeStaleLockFile()) { lockFile->tryLock(); } } } } QSaveFile saveFile(fileName); if (!saveFile.open(QIODevice::WriteOnly)) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + saveFile.errorString()); return false; } m_writer.writeDatabase(&saveFile, db); if (m_writer.hasError()) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + m_writer.errorString()); return false; } if (!saveFile.commit()) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + saveFile.errorString()); return false; } // refresh fileinfo since the file didn't exist before fileInfo.refresh(); dbStruct.modified = false; dbStruct.saveToFilename = true; dbStruct.readOnly = false; dbStruct.filePath = fileInfo.absoluteFilePath(); dbStruct.canonicalFilePath = fileInfo.canonicalFilePath(); dbStruct.fileName = fileInfo.fileName(); dbStruct.dbWidget->updateFilename(dbStruct.filePath); delete dbStruct.lockFile; dbStruct.lockFile = lockFile.take(); updateTabName(db); updateLastDatabases(dbStruct.filePath); return true; } else { return false; } } bool DatabaseTabWidget::closeDatabase(int index) { if (index == -1) { index = currentIndex(); } setCurrentIndex(index); return closeDatabase(indexDatabase(index)); } void DatabaseTabWidget::closeDatabaseFromSender() { Q_ASSERT(sender()); DatabaseWidget* dbWidget = static_cast(sender()); Database* db = databaseFromDatabaseWidget(dbWidget); int index = databaseIndex(db); setCurrentIndex(index); closeDatabase(db); } bool DatabaseTabWidget::saveDatabase(int index) { if (index == -1) { index = currentIndex(); } return saveDatabase(indexDatabase(index)); } bool DatabaseTabWidget::saveDatabaseAs(int index) { if (index == -1) { index = currentIndex(); } return saveDatabaseAs(indexDatabase(index)); } void DatabaseTabWidget::exportToCsv() { Database* db = indexDatabase(currentIndex()); if (!db) { Q_ASSERT(false); return; } QString fileName = fileDialog()->getSaveFileName(this, tr("Export database to CSV file"), QString(), tr("CSV file").append(" (*.csv)"), Q_NULLPTR, 0, "csv"); if (fileName.isEmpty()) { return; } CsvExporter csvExporter; if (!csvExporter.exportDatabase(fileName, db)) { MessageBox::critical(this, tr("Error"), tr("Writing the CSV file failed.") + "\n\n" + csvExporter.errorString()); } } void DatabaseTabWidget::changeMasterKey() { currentDatabaseWidget()->switchToMasterKeyChange(); } void DatabaseTabWidget::changeDatabaseSettings() { currentDatabaseWidget()->switchToDatabaseSettings(); } bool DatabaseTabWidget::readOnly(int index) { if (index == -1) { index = currentIndex(); } return indexDatabaseManagerStruct(index).readOnly; } void DatabaseTabWidget::updateTabName(Database* db) { int index = databaseIndex(db); Q_ASSERT(index != -1); const DatabaseManagerStruct& dbStruct = m_dbList.value(db); QString tabName; if (dbStruct.saveToFilename || dbStruct.readOnly) { if (db->metadata()->name().isEmpty()) { tabName = dbStruct.fileName; } else { tabName = db->metadata()->name(); } setTabToolTip(index, dbStruct.filePath); } else { if (db->metadata()->name().isEmpty()) { tabName = tr("New database"); } else { tabName = QString("%1 [%2]").arg(db->metadata()->name(), tr("New database")); } } if (dbStruct.dbWidget->currentMode() == DatabaseWidget::LockedMode) { tabName.append(QString(" [%1]").arg(tr("locked"))); } if (dbStruct.modified) { tabName.append("*"); } setTabText(index, tabName); Q_EMIT tabNameChanged(); } void DatabaseTabWidget::updateTabNameFromDbSender() { Q_ASSERT(qobject_cast(sender())); updateTabName(static_cast(sender())); } void DatabaseTabWidget::updateTabNameFromDbWidgetSender() { Q_ASSERT(qobject_cast(sender())); Q_ASSERT(databaseFromDatabaseWidget(qobject_cast(sender()))); DatabaseWidget* dbWidget = static_cast(sender()); updateTabName(databaseFromDatabaseWidget(dbWidget)); } int DatabaseTabWidget::databaseIndex(Database* db) { QWidget* dbWidget = m_dbList.value(db).dbWidget; return indexOf(dbWidget); } Database* DatabaseTabWidget::indexDatabase(int index) { QWidget* dbWidget = widget(index); QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); if (i.value().dbWidget == dbWidget) { return i.key(); } } return Q_NULLPTR; } DatabaseManagerStruct DatabaseTabWidget::indexDatabaseManagerStruct(int index) { QWidget* dbWidget = widget(index); QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); if (i.value().dbWidget == dbWidget) { return i.value(); } } return DatabaseManagerStruct(); } Database* DatabaseTabWidget::databaseFromDatabaseWidget(DatabaseWidget* dbWidget) { QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); if (i.value().dbWidget == dbWidget) { return i.key(); } } return Q_NULLPTR; } void DatabaseTabWidget::insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct) { m_dbList.insert(db, dbStruct); addTab(dbStruct.dbWidget, ""); toggleTabbar(); updateTabName(db); int index = databaseIndex(db); setCurrentIndex(index); connectDatabase(db); connect(dbStruct.dbWidget, SIGNAL(closeRequest()), SLOT(closeDatabaseFromSender())); connect(dbStruct.dbWidget, SIGNAL(databaseChanged(Database*)), SLOT(changeDatabase(Database*))); connect(dbStruct.dbWidget, SIGNAL(unlockedDatabase()), SLOT(updateTabNameFromDbWidgetSender())); } DatabaseWidget* DatabaseTabWidget::currentDatabaseWidget() { Database* db = indexDatabase(currentIndex()); if (db) { return m_dbList[db].dbWidget; } else { return Q_NULLPTR; } } bool DatabaseTabWidget::hasLockableDatabases() const { QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); DatabaseWidget::Mode mode = i.value().dbWidget->currentMode(); if ((mode == DatabaseWidget::ViewMode || mode == DatabaseWidget::EditMode) && i.value().dbWidget->dbHasKey()) { return true; } } return false; } void DatabaseTabWidget::lockDatabases() { clipboard()->clearCopiedText(); for (int i = 0; i < count(); i++) { DatabaseWidget* dbWidget = static_cast(widget(i)); Database* db = databaseFromDatabaseWidget(dbWidget); DatabaseWidget::Mode mode = dbWidget->currentMode(); if ((mode != DatabaseWidget::ViewMode && mode != DatabaseWidget::EditMode) || !dbWidget->dbHasKey()) { continue; } // show the correct tab widget before we are asking questions about it setCurrentWidget(dbWidget); if (mode == DatabaseWidget::EditMode) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Lock database"), tr("Can't lock the database as you are currently editing it.\nPlease press cancel to finish your changes or discard them."), QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); if (result == QMessageBox::Cancel) { continue; } } if (m_dbList[db].modified && !m_dbList[db].saveToFilename) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Lock database"), tr("This database has never been saved.\nYou can save the database or stop locking it."), QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Cancel); if (result == QMessageBox::Save) { if (!saveDatabase(db)) { continue; } } else if (result == QMessageBox::Cancel) { continue; } } else if (m_dbList[db].modified) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Lock database"), tr("This database has been modified.\nDo you want to save the database before locking it?\nOtherwise your changes are lost."), QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel); if (result == QMessageBox::Save) { if (!saveDatabase(db)) { continue; } } else if (result == QMessageBox::Discard) { m_dbList[db].modified = false; } else if (result == QMessageBox::Cancel) { continue; } } dbWidget->lock(); // database has changed so we can't use the db variable anymore updateTabName(dbWidget->database()); } } void DatabaseTabWidget::modified() { Q_ASSERT(qobject_cast(sender())); Database* db = static_cast(sender()); DatabaseManagerStruct& dbStruct = m_dbList[db]; if (config()->get("AutoSaveAfterEveryChange").toBool() && dbStruct.saveToFilename) { saveDatabase(db); return; } if (!dbStruct.modified) { dbStruct.modified = true; updateTabName(db); } } void DatabaseTabWidget::updateLastDatabases(const QString& filename) { if (!config()->get("RememberLastDatabases").toBool()) { config()->set("LastDatabases", QVariant()); } else { QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); lastDatabases.prepend(filename); lastDatabases.removeDuplicates(); while (lastDatabases.count() > LastDatabasesCount) { lastDatabases.removeLast(); } config()->set("LastDatabases", lastDatabases); } } void DatabaseTabWidget::changeDatabase(Database* newDb) { Q_ASSERT(sender()); Q_ASSERT(!m_dbList.contains(newDb)); DatabaseWidget* dbWidget = static_cast(sender()); Database* oldDb = databaseFromDatabaseWidget(dbWidget); DatabaseManagerStruct dbStruct = m_dbList[oldDb]; m_dbList.remove(oldDb); m_dbList.insert(newDb, dbStruct); updateTabName(newDb); connectDatabase(newDb, oldDb); } void DatabaseTabWidget::emitActivateDatabaseChanged() { Q_EMIT activateDatabaseChanged(currentDatabaseWidget()); } void DatabaseTabWidget::connectDatabase(Database* newDb, Database* oldDb) { if (oldDb) { oldDb->disconnect(this); } connect(newDb, SIGNAL(nameTextChanged()), SLOT(updateTabNameFromDbSender())); connect(newDb, SIGNAL(modified()), SLOT(modified())); newDb->setEmitModified(true); } void DatabaseTabWidget::performGlobalAutoType() { QList unlockedDatabases; QHashIterator i(m_dbList); while (i.hasNext()) { i.next(); DatabaseWidget::Mode mode = i.value().dbWidget->currentMode(); if (mode != DatabaseWidget::LockedMode) { unlockedDatabases.append(i.key()); } } autoType()->performGlobalAutoType(unlockedDatabases); } keepassx-2.0.3/src/gui/DatabaseTabWidget.h000066400000000000000000000064751276304217300204030ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASETABWIDGET_H #define KEEPASSX_DATABASETABWIDGET_H #include #include #include "core/qlockfile.h" #include "format/KeePass2Writer.h" #include "gui/DatabaseWidget.h" class DatabaseWidget; class DatabaseWidgetStateSync; class DatabaseOpenWidget; class QFile; struct DatabaseManagerStruct { DatabaseManagerStruct(); DatabaseWidget* dbWidget; QLockFile* lockFile; QString filePath; QString canonicalFilePath; QString fileName; bool saveToFilename; bool modified; bool readOnly; }; Q_DECLARE_TYPEINFO(DatabaseManagerStruct, Q_MOVABLE_TYPE); class DatabaseTabWidget : public QTabWidget { Q_OBJECT public: explicit DatabaseTabWidget(QWidget* parent = Q_NULLPTR); ~DatabaseTabWidget(); void openDatabase(const QString& fileName, const QString& pw = QString(), const QString& keyFile = QString()); DatabaseWidget* currentDatabaseWidget(); bool hasLockableDatabases() const; static const int LastDatabasesCount; public Q_SLOTS: void newDatabase(); void openDatabase(); void importKeePass1Database(); bool saveDatabase(int index = -1); bool saveDatabaseAs(int index = -1); void exportToCsv(); bool closeDatabase(int index = -1); void closeDatabaseFromSender(); bool closeAllDatabases(); void changeMasterKey(); void changeDatabaseSettings(); bool readOnly(int index = -1); void performGlobalAutoType(); void lockDatabases(); Q_SIGNALS: void tabNameChanged(); void databaseWithFileClosed(QString filePath); void activateDatabaseChanged(DatabaseWidget* dbWidget); private Q_SLOTS: void updateTabName(Database* db); void updateTabNameFromDbSender(); void updateTabNameFromDbWidgetSender(); void modified(); void toggleTabbar(); void changeDatabase(Database* newDb); void emitActivateDatabaseChanged(); private: bool saveDatabase(Database* db); bool saveDatabaseAs(Database* db); bool closeDatabase(Database* db); void deleteDatabase(Database* db); int databaseIndex(Database* db); Database* indexDatabase(int index); DatabaseManagerStruct indexDatabaseManagerStruct(int index); Database* databaseFromDatabaseWidget(DatabaseWidget* dbWidget); void insertDatabase(Database* db, const DatabaseManagerStruct& dbStruct); void updateLastDatabases(const QString& filename); void connectDatabase(Database* newDb, Database* oldDb = Q_NULLPTR); KeePass2Writer m_writer; QHash m_dbList; DatabaseWidgetStateSync* m_dbWidgetSateSync; }; #endif // KEEPASSX_DATABASETABWIDGET_H keepassx-2.0.3/src/gui/DatabaseWidget.cpp000066400000000000000000000716351276304217300203070ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseWidget.h" #include "ui_SearchWidget.h" #include #include #include #include #include #include #include #include #include #include "autotype/AutoType.h" #include "core/Config.h" #include "core/EntrySearcher.h" #include "core/FilePath.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "gui/ChangeMasterKeyWidget.h" #include "gui/Clipboard.h" #include "gui/DatabaseOpenWidget.h" #include "gui/DatabaseSettingsWidget.h" #include "gui/KeePass1OpenWidget.h" #include "gui/MessageBox.h" #include "gui/UnlockDatabaseWidget.h" #include "gui/entry/EditEntryWidget.h" #include "gui/entry/EntryView.h" #include "gui/group/EditGroupWidget.h" #include "gui/group/GroupView.h" DatabaseWidget::DatabaseWidget(Database* db, QWidget* parent) : QStackedWidget(parent) , m_db(db) , m_searchUi(new Ui::SearchWidget()) , m_searchWidget(new QWidget()) , m_newGroup(Q_NULLPTR) , m_newEntry(Q_NULLPTR) , m_newParent(Q_NULLPTR) { m_searchUi->setupUi(m_searchWidget); m_searchTimer = new QTimer(this); m_searchTimer->setSingleShot(true); m_mainWidget = new QWidget(this); QLayout* layout = new QHBoxLayout(m_mainWidget); m_splitter = new QSplitter(m_mainWidget); m_splitter->setChildrenCollapsible(false); QWidget* rightHandSideWidget = new QWidget(m_splitter); m_searchWidget->setParent(rightHandSideWidget); m_groupView = new GroupView(db, m_splitter); m_groupView->setObjectName("groupView"); m_groupView->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_groupView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitGroupContextMenuRequested(QPoint))); m_entryView = new EntryView(rightHandSideWidget); m_entryView->setObjectName("entryView"); m_entryView->setContextMenuPolicy(Qt::CustomContextMenu); m_entryView->setGroup(db->rootGroup()); connect(m_entryView, SIGNAL(customContextMenuRequested(QPoint)), SLOT(emitEntryContextMenuRequested(QPoint))); QAction* closeAction = new QAction(m_searchWidget); QIcon closeIcon = filePath()->icon("actions", "dialog-close"); closeAction->setIcon(closeIcon); m_searchUi->closeSearchButton->setDefaultAction(closeAction); m_searchUi->closeSearchButton->setShortcut(Qt::Key_Escape); m_searchWidget->hide(); m_searchUi->caseSensitiveCheckBox->setVisible(false); m_searchUi->searchEdit->installEventFilter(this); QVBoxLayout* vLayout = new QVBoxLayout(rightHandSideWidget); vLayout->setMargin(0); vLayout->addWidget(m_searchWidget); vLayout->addWidget(m_entryView); rightHandSideWidget->setLayout(vLayout); setTabOrder(m_searchUi->searchRootRadioButton, m_entryView); setTabOrder(m_entryView, m_groupView); setTabOrder(m_groupView, m_searchWidget); m_splitter->addWidget(m_groupView); m_splitter->addWidget(rightHandSideWidget); m_splitter->setStretchFactor(0, 30); m_splitter->setStretchFactor(1, 70); layout->addWidget(m_splitter); m_mainWidget->setLayout(layout); m_editEntryWidget = new EditEntryWidget(); m_editEntryWidget->setObjectName("editEntryWidget"); m_historyEditEntryWidget = new EditEntryWidget(); m_editGroupWidget = new EditGroupWidget(); m_editGroupWidget->setObjectName("editGroupWidget"); m_changeMasterKeyWidget = new ChangeMasterKeyWidget(); m_changeMasterKeyWidget->headlineLabel()->setText(tr("Change master key")); QFont headlineLabelFont = m_changeMasterKeyWidget->headlineLabel()->font(); headlineLabelFont.setBold(true); headlineLabelFont.setPointSize(headlineLabelFont.pointSize() + 2); m_changeMasterKeyWidget->headlineLabel()->setFont(headlineLabelFont); m_databaseSettingsWidget = new DatabaseSettingsWidget(); m_databaseSettingsWidget->setObjectName("databaseSettingsWidget"); m_databaseOpenWidget = new DatabaseOpenWidget(); m_databaseOpenWidget->setObjectName("databaseOpenWidget"); m_keepass1OpenWidget = new KeePass1OpenWidget(); m_keepass1OpenWidget->setObjectName("keepass1OpenWidget"); m_unlockDatabaseWidget = new UnlockDatabaseWidget(); m_unlockDatabaseWidget->setObjectName("unlockDatabaseWidget"); addWidget(m_mainWidget); addWidget(m_editEntryWidget); addWidget(m_editGroupWidget); addWidget(m_changeMasterKeyWidget); addWidget(m_databaseSettingsWidget); addWidget(m_historyEditEntryWidget); addWidget(m_databaseOpenWidget); addWidget(m_keepass1OpenWidget); addWidget(m_unlockDatabaseWidget); connect(m_splitter, SIGNAL(splitterMoved(int,int)), SIGNAL(splitterSizesChanged())); connect(m_entryView->header(), SIGNAL(sectionResized(int,int,int)), SIGNAL(entryColumnSizesChanged())); connect(m_groupView, SIGNAL(groupChanged(Group*)), this, SLOT(clearLastGroup(Group*))); connect(m_groupView, SIGNAL(groupChanged(Group*)), SIGNAL(groupChanged())); connect(m_groupView, SIGNAL(groupChanged(Group*)), m_entryView, SLOT(setGroup(Group*))); connect(m_entryView, SIGNAL(entryActivated(Entry*, EntryModel::ModelColumn)), SLOT(entryActivationSignalReceived(Entry*, EntryModel::ModelColumn))); connect(m_entryView, SIGNAL(entrySelectionChanged()), SIGNAL(entrySelectionChanged())); connect(m_editEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); connect(m_editEntryWidget, SIGNAL(historyEntryActivated(Entry*)), SLOT(switchToHistoryView(Entry*))); connect(m_historyEditEntryWidget, SIGNAL(editFinished(bool)), SLOT(switchBackToEntryEdit())); connect(m_editGroupWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); connect(m_changeMasterKeyWidget, SIGNAL(editFinished(bool)), SLOT(updateMasterKey(bool))); connect(m_databaseSettingsWidget, SIGNAL(editFinished(bool)), SLOT(switchToView(bool))); connect(m_databaseOpenWidget, SIGNAL(editFinished(bool)), SLOT(openDatabase(bool))); connect(m_keepass1OpenWidget, SIGNAL(editFinished(bool)), SLOT(openDatabase(bool))); connect(m_unlockDatabaseWidget, SIGNAL(editFinished(bool)), SLOT(unlockDatabase(bool))); connect(this, SIGNAL(currentChanged(int)), this, SLOT(emitCurrentModeChanged())); connect(m_searchUi->searchEdit, SIGNAL(textChanged(QString)), this, SLOT(startSearchTimer())); connect(m_searchUi->caseSensitiveCheckBox, SIGNAL(toggled(bool)), this, SLOT(startSearch())); connect(m_searchUi->searchCurrentRadioButton, SIGNAL(toggled(bool)), this, SLOT(startSearch())); connect(m_searchUi->searchRootRadioButton, SIGNAL(toggled(bool)), this, SLOT(startSearch())); connect(m_searchUi->searchEdit, SIGNAL(returnPressed()), m_entryView, SLOT(setFocus())); connect(m_searchTimer, SIGNAL(timeout()), this, SLOT(search())); connect(closeAction, SIGNAL(triggered()), this, SLOT(closeSearch())); setCurrentWidget(m_mainWidget); } DatabaseWidget::~DatabaseWidget() { } DatabaseWidget::Mode DatabaseWidget::currentMode() const { if (currentWidget() == Q_NULLPTR) { return DatabaseWidget::None; } else if (currentWidget() == m_mainWidget) { return DatabaseWidget::ViewMode; } else if (currentWidget() == m_unlockDatabaseWidget) { return DatabaseWidget::LockedMode; } else { return DatabaseWidget::EditMode; } } bool DatabaseWidget::isInEditMode() const { return currentMode() == DatabaseWidget::EditMode; } QList DatabaseWidget::splitterSizes() const { return m_splitter->sizes(); } void DatabaseWidget::setSplitterSizes(const QList& sizes) { m_splitter->setSizes(sizes); } QList DatabaseWidget::entryHeaderViewSizes() const { QList sizes; for (int i = 0; i < m_entryView->header()->count(); i++) { sizes.append(m_entryView->header()->sectionSize(i)); } return sizes; } void DatabaseWidget::setEntryViewHeaderSizes(const QList& sizes) { if (sizes.size() != m_entryView->header()->count()) { Q_ASSERT(false); return; } for (int i = 0; i < sizes.size(); i++) { m_entryView->header()->resizeSection(i, sizes[i]); } } void DatabaseWidget::clearAllWidgets() { m_editEntryWidget->clear(); m_historyEditEntryWidget->clear(); m_editGroupWidget->clear(); } void DatabaseWidget::emitCurrentModeChanged() { Q_EMIT currentModeChanged(currentMode()); } Database* DatabaseWidget::database() { return m_db; } void DatabaseWidget::createEntry() { if (!m_groupView->currentGroup()) { Q_ASSERT(false); return; } m_newEntry = new Entry(); m_newEntry->setUuid(Uuid::random()); m_newEntry->setUsername(m_db->metadata()->defaultUserName()); m_newParent = m_groupView->currentGroup(); setIconFromParent(); switchToEntryEdit(m_newEntry, true); } void DatabaseWidget::setIconFromParent() { if (!config()->get("UseGroupIconOnEntryCreation").toBool()) { return; } if (m_newParent->iconNumber() == Group::DefaultIconNumber && m_newParent->iconUuid().isNull()) { return; } if (m_newParent->iconUuid().isNull()) { m_newEntry->setIcon(m_newParent->iconNumber()); } else { m_newEntry->setIcon(m_newParent->iconUuid()); } } void DatabaseWidget::replaceDatabase(Database* db) { Database* oldDb = m_db; m_db = db; m_groupView->changeDatabase(m_db); Q_EMIT databaseChanged(m_db); delete oldDb; } void DatabaseWidget::cloneEntry() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } Entry* entry = currentEntry->clone(Entry::CloneNewUuid | Entry::CloneResetTimeInfo); entry->setGroup(currentEntry->group()); m_entryView->setFocus(); m_entryView->setCurrentEntry(entry); } void DatabaseWidget::deleteEntries() { const QModelIndexList selected = m_entryView->selectionModel()->selectedRows(); if (selected.isEmpty()) { Q_ASSERT(false); return; } // get all entry pointers as the indexes change when removing multiple entries QList selectedEntries; Q_FOREACH (const QModelIndex& index, selected) { selectedEntries.append(m_entryView->entryFromIndex(index)); } bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), selectedEntries.first()); if (inRecylceBin || !m_db->metadata()->recycleBinEnabled()) { QMessageBox::StandardButton result; if (selected.size() == 1) { result = MessageBox::question( this, tr("Delete entry?"), tr("Do you really want to delete the entry \"%1\" for good?") .arg(selectedEntries.first()->title()), QMessageBox::Yes | QMessageBox::No); } else { result = MessageBox::question( this, tr("Delete entries?"), tr("Do you really want to delete %1 entries for good?") .arg(selected.size()), QMessageBox::Yes | QMessageBox::No); } if (result == QMessageBox::Yes) { Q_FOREACH (Entry* entry, selectedEntries) { delete entry; } } } else { QMessageBox::StandardButton result; if (selected.size() == 1) { result = MessageBox::question( this, tr("Move entry to recycle bin?"), tr("Do you really want to move entry \"%1\" to the recycle bin?") .arg(selectedEntries.first()->title()), QMessageBox::Yes | QMessageBox::No); } else { result = MessageBox::question( this, tr("Move entries to recycle bin?"), tr("Do you really want to move %n entry(s) to the recycle bin?", 0, selected.size()), QMessageBox::Yes | QMessageBox::No); } if (result == QMessageBox::No) { return; } Q_FOREACH (Entry* entry, selectedEntries) { m_db->recycleEntry(entry); } } } void DatabaseWidget::copyTitle() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->title()); } void DatabaseWidget::copyUsername() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->username()); } void DatabaseWidget::copyPassword() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->password()); } void DatabaseWidget::copyURL() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->url()); } void DatabaseWidget::copyNotes() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->notes()); } void DatabaseWidget::copyAttribute(QAction* action) { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } setClipboardTextAndMinimize(currentEntry->attributes()->value(action->text())); } void DatabaseWidget::setClipboardTextAndMinimize(const QString& text) { clipboard()->setText(text); if (config()->get("MinimizeOnCopy").toBool()) { window()->showMinimized(); } } void DatabaseWidget::performAutoType() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } autoType()->performAutoType(currentEntry, window()); } void DatabaseWidget::openUrl() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return; } openUrlForEntry(currentEntry); } void DatabaseWidget::openUrlForEntry(Entry* entry) { QString urlString = entry->resolvePlaceholders(entry->url()); if (urlString.isEmpty()) { return; } if (urlString.startsWith("cmd://")) { if (urlString.length() > 6) { QProcess::startDetached(urlString.mid(6)); } } else { QUrl url = QUrl::fromUserInput(urlString); QDesktopServices::openUrl(url); } } void DatabaseWidget::createGroup() { if (!m_groupView->currentGroup()) { Q_ASSERT(false); return; } m_newGroup = new Group(); m_newGroup->setUuid(Uuid::random()); m_newParent = m_groupView->currentGroup(); switchToGroupEdit(m_newGroup, true); } void DatabaseWidget::deleteGroup() { Group* currentGroup = m_groupView->currentGroup(); if (!currentGroup || !canDeleteCurrentGroup()) { Q_ASSERT(false); return; } bool inRecylceBin = Tools::hasChild(m_db->metadata()->recycleBin(), currentGroup); bool isRecycleBin = (currentGroup == m_db->metadata()->recycleBin()); bool isRecycleBinSubgroup = Tools::hasChild(currentGroup, m_db->metadata()->recycleBin()); if (inRecylceBin || isRecycleBin || isRecycleBinSubgroup || !m_db->metadata()->recycleBinEnabled()) { QMessageBox::StandardButton result = MessageBox::question( this, tr("Delete group?"), tr("Do you really want to delete the group \"%1\" for good?") .arg(currentGroup->name()), QMessageBox::Yes | QMessageBox::No); if (result == QMessageBox::Yes) { delete currentGroup; } } else { m_db->recycleGroup(currentGroup); } } int DatabaseWidget::addWidget(QWidget* w) { w->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); int index = QStackedWidget::addWidget(w); adjustSize(); return index; } void DatabaseWidget::setCurrentIndex(int index) { // use setCurrentWidget() instead // index is not reliable Q_UNUSED(index); Q_ASSERT(false); } void DatabaseWidget::setCurrentWidget(QWidget* widget) { if (currentWidget()) { currentWidget()->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); } QStackedWidget::setCurrentWidget(widget); if (currentWidget()) { currentWidget()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); } adjustSize(); } void DatabaseWidget::switchToView(bool accepted) { if (m_newGroup) { if (accepted) { m_newGroup->setParent(m_newParent); m_groupView->setCurrentGroup(m_newGroup); m_groupView->expandGroup(m_newParent); } else { delete m_newGroup; } m_newGroup = Q_NULLPTR; m_newParent = Q_NULLPTR; } else if (m_newEntry) { if (accepted) { m_newEntry->setGroup(m_newParent); m_entryView->setFocus(); m_entryView->setCurrentEntry(m_newEntry); } else { delete m_newEntry; } m_newEntry = Q_NULLPTR; m_newParent = Q_NULLPTR; } setCurrentWidget(m_mainWidget); } void DatabaseWidget::switchToHistoryView(Entry* entry) { m_historyEditEntryWidget->loadEntry(entry, false, true, m_editEntryWidget->entryTitle(), m_db); setCurrentWidget(m_historyEditEntryWidget); } void DatabaseWidget::switchBackToEntryEdit() { setCurrentWidget(m_editEntryWidget); } void DatabaseWidget::switchToEntryEdit(Entry* entry) { switchToEntryEdit(entry, false); } void DatabaseWidget::switchToEntryEdit(Entry* entry, bool create) { Group* group = m_groupView->currentGroup(); if (!group) { Q_ASSERT(m_entryView->inEntryListMode()); group = m_lastGroup; } Q_ASSERT(group); m_editEntryWidget->loadEntry(entry, create, false, group->name(), m_db); setCurrentWidget(m_editEntryWidget); } void DatabaseWidget::switchToGroupEdit(Group* group, bool create) { m_editGroupWidget->loadGroup(group, create, m_db); setCurrentWidget(m_editGroupWidget); } void DatabaseWidget::updateMasterKey(bool accepted) { if (accepted) { QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); bool result = m_db->setKey(m_changeMasterKeyWidget->newMasterKey()); QApplication::restoreOverrideCursor(); if (!result) { MessageBox::critical(this, tr("Error"), tr("Unable to calculate master key")); return; } } else if (!m_db->hasKey()) { Q_EMIT closeRequest(); return; } setCurrentWidget(m_mainWidget); } void DatabaseWidget::openDatabase(bool accepted) { if (accepted) { replaceDatabase(static_cast(sender())->database()); setCurrentWidget(m_mainWidget); // We won't need those anymore and KeePass1OpenWidget closes // the file in its dtor. delete m_databaseOpenWidget; m_databaseOpenWidget = Q_NULLPTR; delete m_keepass1OpenWidget; m_keepass1OpenWidget = Q_NULLPTR; } else { if (m_databaseOpenWidget->database()) { delete m_databaseOpenWidget->database(); } Q_EMIT closeRequest(); } } void DatabaseWidget::unlockDatabase(bool accepted) { if (!accepted) { Q_EMIT closeRequest(); return; } replaceDatabase(static_cast(sender())->database()); QList groups = m_db->rootGroup()->groupsRecursive(true); Q_FOREACH (Group* group, groups) { if (group->uuid() == m_groupBeforeLock) { m_groupView->setCurrentGroup(group); break; } } m_groupBeforeLock = Uuid(); setCurrentWidget(m_mainWidget); m_unlockDatabaseWidget->clearForms(); Q_EMIT unlockedDatabase(); } void DatabaseWidget::entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column) { if (column == EntryModel::Url && !entry->url().isEmpty()) { openUrlForEntry(entry); } else { switchToEntryEdit(entry); } } void DatabaseWidget::switchToEntryEdit() { Entry* entry = m_entryView->currentEntry(); Q_ASSERT(entry); if (!entry) { return; } switchToEntryEdit(entry, false); } void DatabaseWidget::switchToGroupEdit() { Group* group = m_groupView->currentGroup(); Q_ASSERT(group); if (!group) { return; } switchToGroupEdit(group, false); } void DatabaseWidget::switchToMasterKeyChange() { m_changeMasterKeyWidget->clearForms(); setCurrentWidget(m_changeMasterKeyWidget); } void DatabaseWidget::switchToDatabaseSettings() { m_databaseSettingsWidget->load(m_db); setCurrentWidget(m_databaseSettingsWidget); } void DatabaseWidget::switchToOpenDatabase(const QString& fileName) { updateFilename(fileName); m_databaseOpenWidget->load(fileName); setCurrentWidget(m_databaseOpenWidget); } void DatabaseWidget::switchToOpenDatabase(const QString& fileName, const QString& password, const QString& keyFile) { updateFilename(fileName); switchToOpenDatabase(fileName); m_databaseOpenWidget->enterKey(password, keyFile); } void DatabaseWidget::switchToImportKeepass1(const QString& fileName) { updateFilename(fileName); m_keepass1OpenWidget->load(fileName); setCurrentWidget(m_keepass1OpenWidget); } void DatabaseWidget::openSearch() { if (isInSearchMode()) { m_searchUi->searchEdit->selectAll(); if (!m_searchUi->searchEdit->hasFocus()) { m_searchUi->searchEdit->setFocus(); // make sure the search action is checked again emitCurrentModeChanged(); } } else { showSearch(); } } void DatabaseWidget::closeSearch() { Q_ASSERT(m_lastGroup); Q_EMIT listModeAboutToActivate(); m_groupView->setCurrentGroup(m_lastGroup); m_searchTimer->stop(); Q_EMIT listModeActivated(); } void DatabaseWidget::showSearch() { Q_EMIT searchModeAboutToActivate(); m_searchUi->searchEdit->blockSignals(true); m_searchUi->searchEdit->clear(); m_searchUi->searchEdit->blockSignals(false); m_searchUi->searchCurrentRadioButton->blockSignals(true); m_searchUi->searchRootRadioButton->blockSignals(true); m_searchUi->searchRootRadioButton->setChecked(true); m_searchUi->searchCurrentRadioButton->blockSignals(false); m_searchUi->searchRootRadioButton->blockSignals(false); m_lastGroup = m_groupView->currentGroup(); Q_ASSERT(m_lastGroup); if (m_lastGroup == m_db->rootGroup()) { m_searchUi->optionsWidget->hide(); m_searchUi->searchCurrentRadioButton->hide(); m_searchUi->searchRootRadioButton->hide(); } else { m_searchUi->optionsWidget->show(); m_searchUi->searchCurrentRadioButton->show(); m_searchUi->searchRootRadioButton->show(); m_searchUi->searchCurrentRadioButton->setText(tr("Current group") .append(" (") .append(m_lastGroup->name()) .append(")")); } m_groupView->setCurrentIndex(QModelIndex()); m_searchWidget->show(); search(); m_searchUi->searchEdit->setFocus(); Q_EMIT searchModeActivated(); } void DatabaseWidget::search() { Q_ASSERT(m_lastGroup); Group* searchGroup; if (m_searchUi->searchCurrentRadioButton->isChecked()) { searchGroup = m_lastGroup; } else if (m_searchUi->searchRootRadioButton->isChecked()) { searchGroup = m_db->rootGroup(); } else { Q_ASSERT(false); return; } Qt::CaseSensitivity sensitivity; if (m_searchUi->caseSensitiveCheckBox->isChecked()) { sensitivity = Qt::CaseSensitive; } else { sensitivity = Qt::CaseInsensitive; } QList searchResult = EntrySearcher().search(m_searchUi->searchEdit->text(), searchGroup, sensitivity); m_entryView->setEntryList(searchResult); } void DatabaseWidget::startSearchTimer() { if (!m_searchTimer->isActive()) { m_searchTimer->stop(); } m_searchTimer->start(100); } void DatabaseWidget::startSearch() { if (!m_searchTimer->isActive()) { m_searchTimer->stop(); } search(); } void DatabaseWidget::emitGroupContextMenuRequested(const QPoint& pos) { Q_EMIT groupContextMenuRequested(m_groupView->viewport()->mapToGlobal(pos)); } void DatabaseWidget::emitEntryContextMenuRequested(const QPoint& pos) { Q_EMIT entryContextMenuRequested(m_entryView->viewport()->mapToGlobal(pos)); } bool DatabaseWidget::dbHasKey() const { return m_db->hasKey(); } bool DatabaseWidget::canDeleteCurrentGroup() const { bool isRootGroup = m_db->rootGroup() == m_groupView->currentGroup(); return !isRootGroup; } bool DatabaseWidget::isInSearchMode() const { return m_entryView->inEntryListMode(); } void DatabaseWidget::clearLastGroup(Group* group) { if (group) { m_lastGroup = Q_NULLPTR; m_searchWidget->hide(); } } void DatabaseWidget::lock() { Q_ASSERT(currentMode() != DatabaseWidget::LockedMode); if (isInSearchMode()) { closeSearch(); } if (m_groupView->currentGroup()) { m_groupBeforeLock = m_groupView->currentGroup()->uuid(); } else { m_groupBeforeLock = m_db->rootGroup()->uuid(); } clearAllWidgets(); m_unlockDatabaseWidget->load(m_filename); setCurrentWidget(m_unlockDatabaseWidget); Database* newDb = new Database(); newDb->metadata()->setName(m_db->metadata()->name()); replaceDatabase(newDb); } void DatabaseWidget::updateFilename(const QString& fileName) { m_filename = fileName; } int DatabaseWidget::numberOfSelectedEntries() const { return m_entryView->numberOfSelectedEntries(); } QStringList DatabaseWidget::customEntryAttributes() const { Entry* entry = m_entryView->currentEntry(); if (!entry) { return QStringList(); } return entry->attributes()->customKeys(); } bool DatabaseWidget::isGroupSelected() const { return m_groupView->currentGroup() != Q_NULLPTR; } bool DatabaseWidget::currentEntryHasTitle() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return false; } return !currentEntry->title().isEmpty(); } bool DatabaseWidget::currentEntryHasUsername() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return false; } return !currentEntry->username().isEmpty(); } bool DatabaseWidget::currentEntryHasPassword() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return false; } return !currentEntry->password().isEmpty(); } bool DatabaseWidget::currentEntryHasUrl() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return false; } return !currentEntry->url().isEmpty(); } bool DatabaseWidget::currentEntryHasNotes() { Entry* currentEntry = m_entryView->currentEntry(); if (!currentEntry) { Q_ASSERT(false); return false; } return !currentEntry->notes().isEmpty(); } bool DatabaseWidget::eventFilter(QObject* object, QEvent* event) { if (object == m_searchUi->searchEdit) { if (event->type() == QEvent::KeyPress) { QKeyEvent* keyEvent = static_cast(event); if (keyEvent->matches(QKeySequence::Copy)) { // If Control+C is pressed in the search edit when no // text is selected, copy the password of the current // entry. Entry* currentEntry = m_entryView->currentEntry(); if (currentEntry && !m_searchUi->searchEdit->hasSelectedText()) { setClipboardTextAndMinimize(currentEntry->password()); return true; } } else if (keyEvent->matches(QKeySequence::MoveToNextLine)) { // If Down is pressed at EOL in the search edit, move // the focus to the entry view. if (!m_searchUi->searchEdit->hasSelectedText() && m_searchUi->searchEdit->cursorPosition() == m_searchUi->searchEdit->text().size()) { m_entryView->setFocus(); return true; } } } } return false; } keepassx-2.0.3/src/gui/DatabaseWidget.h000066400000000000000000000126661276304217300177530ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DATABASEWIDGET_H #define KEEPASSX_DATABASEWIDGET_H #include #include #include "core/Global.h" #include "core/Uuid.h" #include "gui/entry/EntryModel.h" class ChangeMasterKeyWidget; class DatabaseOpenWidget; class DatabaseSettingsWidget; class Database; class EditEntryWidget; class EditGroupWidget; class Entry; class EntryView; class Group; class GroupView; class KeePass1OpenWidget; class QFile; class QMenu; class QSplitter; class UnlockDatabaseWidget; namespace Ui { class SearchWidget; } class DatabaseWidget : public QStackedWidget { Q_OBJECT public: enum Mode { None, ViewMode, EditMode, LockedMode }; explicit DatabaseWidget(Database* db, QWidget* parent = Q_NULLPTR); ~DatabaseWidget(); Database* database(); bool dbHasKey() const; bool canDeleteCurrentGroup() const; bool isInSearchMode() const; int addWidget(QWidget* w); void setCurrentIndex(int index); void setCurrentWidget(QWidget* widget); DatabaseWidget::Mode currentMode() const; void lock(); void updateFilename(const QString& filename); int numberOfSelectedEntries() const; QStringList customEntryAttributes() const; bool isGroupSelected() const; bool isInEditMode() const; QList splitterSizes() const; void setSplitterSizes(const QList& sizes); QList entryHeaderViewSizes() const; void setEntryViewHeaderSizes(const QList& sizes); void clearAllWidgets(); bool currentEntryHasTitle(); bool currentEntryHasUsername(); bool currentEntryHasPassword(); bool currentEntryHasUrl(); bool currentEntryHasNotes(); Q_SIGNALS: void closeRequest(); void currentModeChanged(DatabaseWidget::Mode mode); void groupChanged(); void entrySelectionChanged(); void databaseChanged(Database* newDb); void groupContextMenuRequested(const QPoint& globalPos); void entryContextMenuRequested(const QPoint& globalPos); void unlockedDatabase(); void listModeAboutToActivate(); void listModeActivated(); void searchModeAboutToActivate(); void searchModeActivated(); void splitterSizesChanged(); void entryColumnSizesChanged(); protected: bool eventFilter(QObject* object, QEvent* event) Q_DECL_OVERRIDE; public Q_SLOTS: void createEntry(); void cloneEntry(); void deleteEntries(); void copyTitle(); void copyUsername(); void copyPassword(); void copyURL(); void copyNotes(); void copyAttribute(QAction* action); void performAutoType(); void openUrl(); void openUrlForEntry(Entry* entry); void createGroup(); void deleteGroup(); void switchToEntryEdit(); void switchToGroupEdit(); void switchToMasterKeyChange(); void switchToDatabaseSettings(); void switchToOpenDatabase(const QString& fileName); void switchToOpenDatabase(const QString& fileName, const QString& password, const QString& keyFile); void switchToImportKeepass1(const QString& fileName); void openSearch(); private Q_SLOTS: void entryActivationSignalReceived(Entry* entry, EntryModel::ModelColumn column); void switchBackToEntryEdit(); void switchToView(bool accepted); void switchToHistoryView(Entry* entry); void switchToEntryEdit(Entry* entry); void switchToEntryEdit(Entry* entry, bool create); void switchToGroupEdit(Group* entry, bool create); void emitGroupContextMenuRequested(const QPoint& pos); void emitEntryContextMenuRequested(const QPoint& pos); void updateMasterKey(bool accepted); void openDatabase(bool accepted); void unlockDatabase(bool accepted); void emitCurrentModeChanged(); void clearLastGroup(Group* group); void search(); void startSearch(); void startSearchTimer(); void showSearch(); void closeSearch(); private: void setClipboardTextAndMinimize(const QString& text); void setIconFromParent(); void replaceDatabase(Database* db); Database* m_db; const QScopedPointer m_searchUi; QWidget* const m_searchWidget; QWidget* m_mainWidget; EditEntryWidget* m_editEntryWidget; EditEntryWidget* m_historyEditEntryWidget; EditGroupWidget* m_editGroupWidget; ChangeMasterKeyWidget* m_changeMasterKeyWidget; DatabaseSettingsWidget* m_databaseSettingsWidget; DatabaseOpenWidget* m_databaseOpenWidget; KeePass1OpenWidget* m_keepass1OpenWidget; UnlockDatabaseWidget* m_unlockDatabaseWidget; QSplitter* m_splitter; GroupView* m_groupView; EntryView* m_entryView; Group* m_newGroup; Entry* m_newEntry; Group* m_newParent; Group* m_lastGroup; QTimer* m_searchTimer; QString m_filename; Uuid m_groupBeforeLock; }; #endif // KEEPASSX_DATABASEWIDGET_H keepassx-2.0.3/src/gui/DatabaseWidgetStateSync.cpp000066400000000000000000000103271276304217300221340ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DatabaseWidgetStateSync.h" #include "core/Config.h" DatabaseWidgetStateSync::DatabaseWidgetStateSync(QObject* parent) : QObject(parent) , m_activeDbWidget(Q_NULLPTR) , m_blockUpdates(false) { m_splitterSizes = variantToIntList(config()->get("GUI/SplitterState")); m_columnSizesList = variantToIntList(config()->get("GUI/EntryListColumnSizes")); m_columnSizesSearch = variantToIntList(config()->get("GUI/EntrySearchColumnSizes")); } DatabaseWidgetStateSync::~DatabaseWidgetStateSync() { config()->set("GUI/SplitterState", intListToVariant(m_splitterSizes)); config()->set("GUI/EntryListColumnSizes", intListToVariant(m_columnSizesList)); config()->set("GUI/EntrySearchColumnSizes", intListToVariant(m_columnSizesSearch)); } void DatabaseWidgetStateSync::setActive(DatabaseWidget* dbWidget) { if (m_activeDbWidget) { disconnect(m_activeDbWidget, 0, this, 0); } m_activeDbWidget = dbWidget; if (m_activeDbWidget) { m_blockUpdates = true; if (!m_splitterSizes.isEmpty()) { m_activeDbWidget->setSplitterSizes(m_splitterSizes); } if (m_activeDbWidget->isGroupSelected()) { restoreListView(); } else { restoreSearchView(); } m_blockUpdates = false; connect(m_activeDbWidget, SIGNAL(splitterSizesChanged()), SLOT(updateSplitterSizes())); connect(m_activeDbWidget, SIGNAL(entryColumnSizesChanged()), SLOT(updateColumnSizes())); connect(m_activeDbWidget, SIGNAL(listModeActivated()), SLOT(restoreListView())); connect(m_activeDbWidget, SIGNAL(searchModeActivated()), SLOT(restoreSearchView())); connect(m_activeDbWidget, SIGNAL(listModeAboutToActivate()), SLOT(blockUpdates())); connect(m_activeDbWidget, SIGNAL(searchModeAboutToActivate()), SLOT(blockUpdates())); } } void DatabaseWidgetStateSync::restoreListView() { if (!m_columnSizesList.isEmpty()) { m_activeDbWidget->setEntryViewHeaderSizes(m_columnSizesList); } m_blockUpdates = false; } void DatabaseWidgetStateSync::restoreSearchView() { if (!m_columnSizesSearch.isEmpty()) { m_activeDbWidget->setEntryViewHeaderSizes(m_columnSizesSearch); } m_blockUpdates = false; } void DatabaseWidgetStateSync::blockUpdates() { m_blockUpdates = true; } void DatabaseWidgetStateSync::updateSplitterSizes() { if (m_blockUpdates) { return; } m_splitterSizes = m_activeDbWidget->splitterSizes(); } void DatabaseWidgetStateSync::updateColumnSizes() { if (m_blockUpdates) { return; } if (m_activeDbWidget->isGroupSelected()) { m_columnSizesList = m_activeDbWidget->entryHeaderViewSizes(); } else { m_columnSizesSearch = m_activeDbWidget->entryHeaderViewSizes(); } } QList DatabaseWidgetStateSync::variantToIntList(const QVariant& variant) { QVariantList list = variant.toList(); QList result; Q_FOREACH (const QVariant& var, list) { bool ok; int size = var.toInt(&ok); if (ok) { result.append(size); } else { result.clear(); break; } } return result; } QVariant DatabaseWidgetStateSync::intListToVariant(const QList& list) { QVariantList result; Q_FOREACH (int value, list) { result.append(value); } return result; } keepassx-2.0.3/src/gui/DatabaseWidgetStateSync.h000066400000000000000000000031101276304217300215710ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_HEADERVIEWSYNC_H #define KEEPASSX_HEADERVIEWSYNC_H #include "gui/DatabaseWidget.h" class DatabaseWidgetStateSync : public QObject { Q_OBJECT public: explicit DatabaseWidgetStateSync(QObject* parent = Q_NULLPTR); ~DatabaseWidgetStateSync(); public Q_SLOTS: void setActive(DatabaseWidget* dbWidget); void restoreListView(); void restoreSearchView(); private Q_SLOTS: void blockUpdates(); void updateSplitterSizes(); void updateColumnSizes(); private: static QList variantToIntList(const QVariant& variant); static QVariant intListToVariant(const QList& list); DatabaseWidget* m_activeDbWidget; bool m_blockUpdates; QList m_splitterSizes; QList m_columnSizesList; QList m_columnSizesSearch; }; #endif // KEEPASSX_HEADERVIEWSYNC_H keepassx-2.0.3/src/gui/DialogyWidget.cpp000066400000000000000000000047761276304217300201750ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DialogyWidget.h" #include #include #include DialogyWidget::DialogyWidget(QWidget* parent) : QWidget(parent) { } void DialogyWidget::keyPressEvent(QKeyEvent* e) { #ifdef Q_OS_MAC if (e->modifiers() == Qt::ControlModifier && e->key() == Qt::Key_Period) { if (!clickButton(QDialogButtonBox::Cancel)) { e->ignore(); } } else #endif if (!e->modifiers() || (e->modifiers() & Qt::KeypadModifier && e->key() == Qt::Key_Enter)) { switch (e->key()) { case Qt::Key_Enter: case Qt::Key_Return: if (!clickButton(QDialogButtonBox::Ok)) { e->ignore(); } break; case Qt::Key_Escape: if (!clickButton(QDialogButtonBox::Cancel)) { if (!clickButton(QDialogButtonBox::Close)) { e->ignore(); } } break; default: e->ignore(); } } else { e->ignore(); } } bool DialogyWidget::clickButton(QDialogButtonBox::StandardButton standardButton) { QPushButton* pb; if (standardButton == QDialogButtonBox::Ok) { pb = qobject_cast(focusWidget()); if (pb && pb->isVisible() && pb->isEnabled() && pb->hasFocus()) { pb->click(); return true; } } QList buttonBoxes = findChildren(); for (int i = 0; i < buttonBoxes.size(); ++i) { QDialogButtonBox* buttonBox = buttonBoxes.at(i); pb = buttonBox->button(standardButton); if (pb && pb->isVisible() && pb->isEnabled()) { pb->click(); return true; } } return false; } keepassx-2.0.3/src/gui/DialogyWidget.h000066400000000000000000000022131276304217300176220ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DIALOGYWIDGET_H #define KEEPASSX_DIALOGYWIDGET_H #include #include #include "core/Global.h" class DialogyWidget : public QWidget { Q_OBJECT public: explicit DialogyWidget(QWidget* parent = Q_NULLPTR); protected: virtual void keyPressEvent(QKeyEvent* e) Q_DECL_OVERRIDE; private: bool clickButton(QDialogButtonBox::StandardButton standardButton); }; #endif // KEEPASSX_DIALOGYWIDGET_H keepassx-2.0.3/src/gui/DragTabBar.cpp000066400000000000000000000050701276304217300173560ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "DragTabBar.h" #include #include #include DragTabBar::DragTabBar(QWidget* parent) : QTabBar(parent) , m_tabSwitchTimer(new QTimer(this)) , m_tabSwitchIndex(-1) { m_tabSwitchTimer->setSingleShot(true); connect(m_tabSwitchTimer, SIGNAL(timeout()), SLOT(dragSwitchTab())); setAcceptDrops(true); } void DragTabBar::dragEnterEvent(QDragEnterEvent* event) { int tab = tabAt(event->pos()); if (tab != -1) { if (tab != currentIndex()) { m_tabSwitchIndex = tab; m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); } event->setAccepted(true); } else { QTabBar::dragEnterEvent(event); } } void DragTabBar::dragMoveEvent(QDragMoveEvent* event) { int tab = tabAt(event->pos()); if (tab != -1) { if (tab == currentIndex()) { m_tabSwitchTimer->stop(); } else if (tab != m_tabSwitchIndex) { m_tabSwitchIndex = tab; m_tabSwitchTimer->start(QApplication::doubleClickInterval() * 2); } event->setAccepted(true); } else { m_tabSwitchIndex = -1; m_tabSwitchTimer->stop(); QTabBar::dragMoveEvent(event); } } void DragTabBar::dragLeaveEvent(QDragLeaveEvent* event) { m_tabSwitchIndex = -1; m_tabSwitchTimer->stop(); QTabBar::dragLeaveEvent(event); } void DragTabBar::dropEvent(QDropEvent* event) { m_tabSwitchIndex = -1; m_tabSwitchTimer->stop(); QTabBar::dropEvent(event); } void DragTabBar::tabLayoutChange() { m_tabSwitchIndex = -1; m_tabSwitchTimer->stop(); QTabBar::tabLayoutChange(); } void DragTabBar::dragSwitchTab() { int tab = tabAt(mapFromGlobal(QCursor::pos())); if (tab != -1 && tab == m_tabSwitchIndex) { m_tabSwitchIndex = -1; setCurrentIndex(tab); } } keepassx-2.0.3/src/gui/DragTabBar.h000066400000000000000000000025511276304217300170240ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_DRAGTABBAR_H #define KEEPASSX_DRAGTABBAR_H #include #include "core/Global.h" class DragTabBar : public QTabBar { Q_OBJECT public: explicit DragTabBar(QWidget* parent = Q_NULLPTR); protected: void dragEnterEvent(QDragEnterEvent* event) Q_DECL_OVERRIDE; void dragMoveEvent(QDragMoveEvent* event) Q_DECL_OVERRIDE; void dragLeaveEvent(QDragLeaveEvent* event) Q_DECL_OVERRIDE; void dropEvent(QDropEvent* event) Q_DECL_OVERRIDE; void tabLayoutChange() Q_DECL_OVERRIDE; private Q_SLOTS: void dragSwitchTab(); private: QTimer* const m_tabSwitchTimer; int m_tabSwitchIndex; }; #endif // KEEPASSX_DRAGTABBAR_H keepassx-2.0.3/src/gui/EditWidget.cpp000066400000000000000000000045121276304217300174560ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EditWidget.h" #include "ui_EditWidget.h" EditWidget::EditWidget(QWidget* parent) : DialogyWidget(parent) , m_ui(new Ui::EditWidget()) { m_ui->setupUi(this); setReadOnly(false); QFont headerLabelFont = m_ui->headerLabel->font(); headerLabelFont.setBold(true); headerLabelFont.setPointSize(headerLabelFont.pointSize() + 2); headlineLabel()->setFont(headerLabelFont); connect(m_ui->categoryList, SIGNAL(currentRowChanged(int)), m_ui->stackedWidget, SLOT(setCurrentIndex(int))); connect(m_ui->buttonBox, SIGNAL(accepted()), SIGNAL(accepted())); connect(m_ui->buttonBox, SIGNAL(rejected()), SIGNAL(rejected())); } EditWidget::~EditWidget() { } void EditWidget::add(const QString& labelText, QWidget* widget) { m_ui->categoryList->addItem(labelText); m_ui->stackedWidget->addWidget(widget); } void EditWidget::setRowHidden(QWidget* widget, bool hide) { int row = m_ui->stackedWidget->indexOf(widget); if (row != -1) { m_ui->categoryList->item(row)->setHidden(hide); } } void EditWidget::setCurrentRow(int index) { m_ui->categoryList->setCurrentRow(index); } void EditWidget::setHeadline(const QString& text) { m_ui->headerLabel->setText(text); } QLabel* EditWidget::headlineLabel() { return m_ui->headerLabel; } void EditWidget::setReadOnly(bool readOnly) { m_readOnly = readOnly; if (readOnly) { m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Close); } else { m_ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); } } bool EditWidget::readOnly() const { return m_readOnly; } keepassx-2.0.3/src/gui/EditWidget.h000066400000000000000000000027361276304217300171310ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITWIDGET_H #define KEEPASSX_EDITWIDGET_H #include #include "gui/DialogyWidget.h" class QLabel; namespace Ui { class EditWidget; } class EditWidget : public DialogyWidget { Q_OBJECT public: explicit EditWidget(QWidget* parent = Q_NULLPTR); ~EditWidget(); void add(const QString& labelText, QWidget* widget); void setRowHidden(QWidget* widget, bool hide); void setCurrentRow(int index); void setHeadline(const QString& text); QLabel* headlineLabel(); void setReadOnly(bool readOnly); bool readOnly() const; Q_SIGNALS: void accepted(); void rejected(); private: const QScopedPointer m_ui; bool m_readOnly; Q_DISABLE_COPY(EditWidget) }; #endif // KEEPASSX_EDITWIDGET_H keepassx-2.0.3/src/gui/EditWidget.ui000066400000000000000000000033331276304217300173110ustar00rootroot00000000000000 EditWidget 0 0 612 255 Qt::Vertical QSizePolicy::Fixed 1 3 -1 QDialogButtonBox::Cancel|QDialogButtonBox::Ok CategoryListWidget QListWidget
gui/entry/EditEntryWidget_p.h
categoryList buttonBox
keepassx-2.0.3/src/gui/EditWidgetIcons.cpp000066400000000000000000000206601276304217300204540ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EditWidgetIcons.h" #include "ui_EditWidgetIcons.h" #include #include #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "gui/IconModels.h" #include "gui/MessageBox.h" IconStruct::IconStruct() : uuid(Uuid()) , number(0) { } EditWidgetIcons::EditWidgetIcons(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EditWidgetIcons()) , m_database(Q_NULLPTR) , m_defaultIconModel(new DefaultIconModel(this)) , m_customIconModel(new CustomIconModel(this)) { m_ui->setupUi(this); m_ui->defaultIconsView->setModel(m_defaultIconModel); m_ui->customIconsView->setModel(m_customIconModel); connect(m_ui->defaultIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonDefaultIcons())); connect(m_ui->customIconsView, SIGNAL(clicked(QModelIndex)), this, SLOT(updateRadioButtonCustomIcons())); connect(m_ui->defaultIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsDefaultIcons(bool))); connect(m_ui->customIconsRadio, SIGNAL(toggled(bool)), this, SLOT(updateWidgetsCustomIcons(bool))); connect(m_ui->addButton, SIGNAL(clicked()), SLOT(addCustomIcon())); connect(m_ui->deleteButton, SIGNAL(clicked()), SLOT(removeCustomIcon())); } EditWidgetIcons::~EditWidgetIcons() { } IconStruct EditWidgetIcons::save() { Q_ASSERT(m_database); Q_ASSERT(!m_currentUuid.isNull()); IconStruct iconStruct; if (m_ui->defaultIconsRadio->isChecked()) { QModelIndex index = m_ui->defaultIconsView->currentIndex(); if (index.isValid()) { iconStruct.number = index.row(); } else { Q_ASSERT(false); } } else { QModelIndex index = m_ui->customIconsView->currentIndex(); if (index.isValid()) { iconStruct.uuid = m_customIconModel->uuidFromIndex(m_ui->customIconsView->currentIndex()); } else { iconStruct.number = -1; } } m_database = Q_NULLPTR; m_currentUuid = Uuid(); return iconStruct; } void EditWidgetIcons::load(Uuid currentUuid, Database* database, IconStruct iconStruct) { Q_ASSERT(database); Q_ASSERT(!currentUuid.isNull()); m_database = database; m_currentUuid = currentUuid; m_customIconModel->setIcons(database->metadata()->customIconsScaledPixmaps(), database->metadata()->customIconsOrder()); Uuid iconUuid = iconStruct.uuid; if (iconUuid.isNull()) { int iconNumber = iconStruct.number; m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(iconNumber, 0)); m_ui->defaultIconsRadio->setChecked(true); } else { QModelIndex index = m_customIconModel->indexFromUuid(iconUuid); if (index.isValid()) { m_ui->customIconsView->setCurrentIndex(index); m_ui->customIconsRadio->setChecked(true); } else { m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); m_ui->defaultIconsRadio->setChecked(true); } } } void EditWidgetIcons::addCustomIcon() { if (m_database) { QString filter = QString("%1 (%2);;%3 (*)").arg(tr("Images"), Tools::imageReaderFilter(), tr("All files")); QString filename = QFileDialog::getOpenFileName( this, tr("Select Image"), "", filter); if (!filename.isEmpty()) { QImageReader imageReader(filename); // detect from content, otherwise reading fails if file extension is wrong imageReader.setDecideFormatFromContent(true); QImage image = imageReader.read(); if (!image.isNull()) { Uuid uuid = Uuid::random(); m_database->metadata()->addCustomIconScaled(uuid, image); m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(), m_database->metadata()->customIconsOrder()); QModelIndex index = m_customIconModel->indexFromUuid(uuid); m_ui->customIconsView->setCurrentIndex(index); } else { MessageBox::critical(this, tr("Error"), tr("Can't read icon:").append("\n").append(imageReader.errorString())); } } } } void EditWidgetIcons::removeCustomIcon() { if (m_database) { QModelIndex index = m_ui->customIconsView->currentIndex(); if (index.isValid()) { Uuid iconUuid = m_customIconModel->uuidFromIndex(index); int iconUsedCount = 0; QList allEntries = m_database->rootGroup()->entriesRecursive(true); QList historyEntriesWithSameIcon; Q_FOREACH (Entry* entry, allEntries) { bool isHistoryEntry = !entry->group(); if (iconUuid == entry->iconUuid()) { if (isHistoryEntry) { historyEntriesWithSameIcon << entry; } else if (m_currentUuid != entry->uuid()) { iconUsedCount++; } } } QList allGroups = m_database->rootGroup()->groupsRecursive(true); Q_FOREACH (const Group* group, allGroups) { if (iconUuid == group->iconUuid() && m_currentUuid != group->uuid()) { iconUsedCount++; } } if (iconUsedCount == 0) { Q_FOREACH (Entry* entry, historyEntriesWithSameIcon) { entry->setUpdateTimeinfo(false); entry->setIcon(0); entry->setUpdateTimeinfo(true); } m_database->metadata()->removeCustomIcon(iconUuid); m_customIconModel->setIcons(m_database->metadata()->customIconsScaledPixmaps(), m_database->metadata()->customIconsOrder()); if (m_customIconModel->rowCount() > 0) { m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0)); } else { updateRadioButtonDefaultIcons(); } } else { MessageBox::information(this, tr("Can't delete icon!"), tr("Can't delete icon. Still used by %n item(s).", 0, iconUsedCount)); } } } } void EditWidgetIcons::updateWidgetsDefaultIcons(bool check) { if (check) { QModelIndex index = m_ui->defaultIconsView->currentIndex(); if (!index.isValid()) { m_ui->defaultIconsView->setCurrentIndex(m_defaultIconModel->index(0, 0)); } else { m_ui->defaultIconsView->setCurrentIndex(index); } m_ui->customIconsView->selectionModel()->clearSelection(); m_ui->addButton->setEnabled(false); m_ui->deleteButton->setEnabled(false); } } void EditWidgetIcons::updateWidgetsCustomIcons(bool check) { if (check) { QModelIndex index = m_ui->customIconsView->currentIndex(); if (!index.isValid()) { m_ui->customIconsView->setCurrentIndex(m_customIconModel->index(0, 0)); } else { m_ui->customIconsView->setCurrentIndex(index); } m_ui->defaultIconsView->selectionModel()->clearSelection(); m_ui->addButton->setEnabled(true); m_ui->deleteButton->setEnabled(true); } } void EditWidgetIcons::updateRadioButtonDefaultIcons() { m_ui->defaultIconsRadio->setChecked(true); } void EditWidgetIcons::updateRadioButtonCustomIcons() { m_ui->customIconsRadio->setChecked(true); } keepassx-2.0.3/src/gui/EditWidgetIcons.h000066400000000000000000000034321276304217300201170ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITWIDGETICONS_H #define KEEPASSX_EDITWIDGETICONS_H #include #include "core/Global.h" #include "core/Uuid.h" class Database; class DefaultIconModel; class CustomIconModel; namespace Ui { class EditWidgetIcons; } struct IconStruct { IconStruct(); Uuid uuid; int number; }; class EditWidgetIcons : public QWidget { Q_OBJECT public: explicit EditWidgetIcons(QWidget* parent = Q_NULLPTR); ~EditWidgetIcons(); IconStruct save(); void load(Uuid currentUuid, Database* database, IconStruct iconStruct); private Q_SLOTS: void addCustomIcon(); void removeCustomIcon(); void updateWidgetsDefaultIcons(bool checked); void updateWidgetsCustomIcons(bool checked); void updateRadioButtonDefaultIcons(); void updateRadioButtonCustomIcons(); private: const QScopedPointer m_ui; Database* m_database; Uuid m_currentUuid; DefaultIconModel* const m_defaultIconModel; CustomIconModel* const m_customIconModel; Q_DISABLE_COPY(EditWidgetIcons) }; #endif // KEEPASSX_EDITWIDGETICONS_H keepassx-2.0.3/src/gui/EditWidgetIcons.ui000066400000000000000000000054461276304217300203140ustar00rootroot00000000000000 EditWidgetIcons 0 0 400 300 Use default icon QAbstractItemView::NoEditTriggers QListView::Static QListView::LeftToRight true QListView::Adjust 8 QListView::IconMode Use custom icon QAbstractItemView::NoEditTriggers QListView::Static QListView::LeftToRight true QListView::Adjust 8 QListView::IconMode Add custom icon Delete custom icon defaultIconsRadio defaultIconsView customIconsRadio customIconsView addButton deleteButton keepassx-2.0.3/src/gui/EditWidgetProperties.cpp000066400000000000000000000027201276304217300215320ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EditWidgetProperties.h" #include "ui_EditWidgetProperties.h" EditWidgetProperties::EditWidgetProperties(QWidget* parent) : QWidget(parent) , m_ui(new Ui::EditWidgetProperties()) { m_ui->setupUi(this); } EditWidgetProperties::~EditWidgetProperties() { } void EditWidgetProperties::setFields(TimeInfo timeInfo, Uuid uuid) { QString timeFormat("d MMM yyyy HH:mm:ss"); m_ui->modifiedEdit->setText( timeInfo.lastModificationTime().toLocalTime().toString(timeFormat)); m_ui->createdEdit->setText( timeInfo.creationTime().toLocalTime().toString(timeFormat)); m_ui->accessedEdit->setText( timeInfo.lastAccessTime().toLocalTime().toString(timeFormat)); m_ui->uuidEdit->setText(uuid.toHex()); } keepassx-2.0.3/src/gui/EditWidgetProperties.h000066400000000000000000000024301276304217300211750ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITWIDGETPROPERTIES_H #define KEEPASSX_EDITWIDGETPROPERTIES_H #include #include "core/Global.h" #include "core/TimeInfo.h" #include "core/Uuid.h" namespace Ui { class EditWidgetProperties; } class EditWidgetProperties : public QWidget { Q_OBJECT public: explicit EditWidgetProperties(QWidget* parent = Q_NULLPTR); ~EditWidgetProperties(); void setFields(TimeInfo timeInfo, Uuid uuid); private: const QScopedPointer m_ui; Q_DISABLE_COPY(EditWidgetProperties) }; #endif // KEEPASSX_EDITWIDGETPROPERTIES_H keepassx-2.0.3/src/gui/EditWidgetProperties.ui000066400000000000000000000046231276304217300213710ustar00rootroot00000000000000 EditWidgetProperties 0 0 614 328 QFormLayout::ExpandingFieldsGrow 0 0 true 0 0 true Created: Modified: Accessed: true Uuid: true createdEdit modifiedEdit accessedEdit uuidEdit keepassx-2.0.3/src/gui/FileDialog.cpp000066400000000000000000000071761276304217300174350ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "FileDialog.h" #include "core/Config.h" FileDialog* FileDialog::m_instance(Q_NULLPTR); QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QString dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options) { if (!m_nextFileName.isEmpty()) { QString result = m_nextFileName; m_nextFileName = ""; return result; } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } QString result = QFileDialog::getOpenFileName(parent, caption, dir, filter, selectedFilter, options); // on Mac OS X the focus is lost after closing the native dialog if (parent) { parent->activateWindow(); } if (!result.isEmpty()) { config()->set("LastDir", QFileInfo(result).absolutePath()); } return result; } } QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QString dir, const QString& filter, QString* selectedFilter, QFileDialog::Options options, const QString& defaultExtension) { if (!m_nextFileName.isEmpty()) { QString result = m_nextFileName; m_nextFileName = ""; return result; } else { if (dir.isEmpty()) { dir = config()->get("LastDir").toString(); } QString result; #if defined(Q_OS_MAC) || defined(Q_OS_WIN) Q_UNUSED(defaultExtension); // the native dialogs on these platforms already append the file extension result = QFileDialog::getSaveFileName(parent, caption, dir, filter, selectedFilter, options); #else QFileDialog dialog(parent, caption, dir, filter); dialog.setAcceptMode(QFileDialog::AcceptSave); dialog.setFileMode(QFileDialog::AnyFile); if (selectedFilter) { dialog.selectNameFilter(*selectedFilter); } dialog.setOptions(options); dialog.setDefaultSuffix(defaultExtension); QStringList results; if (dialog.exec()) { results = dialog.selectedFiles(); if (!results.isEmpty()) { result = results[0]; } } #endif // on Mac OS X the focus is lost after closing the native dialog if (parent) { parent->activateWindow(); } if (!result.isEmpty()) { config()->set("LastDir", QFileInfo(result).absolutePath()); } return result; } } void FileDialog::setNextFileName(const QString& fileName) { m_nextFileName = fileName; } FileDialog::FileDialog() { } FileDialog* FileDialog::instance() { if (!m_instance) { m_instance = new FileDialog(); } return m_instance; } keepassx-2.0.3/src/gui/FileDialog.h000066400000000000000000000035551276304217300170770ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_FILEDIALOG_H #define KEEPASSX_FILEDIALOG_H #include #include "core/Global.h" class FileDialog { public: QString getOpenFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(), QString dir = QString(), const QString& filter = QString(), QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0); QString getSaveFileName(QWidget* parent = Q_NULLPTR, const QString& caption = QString(), QString dir = QString(), const QString& filter = QString(), QString* selectedFilter = Q_NULLPTR, QFileDialog::Options options = 0, const QString& defaultExtension = QString()); /** * Sets the result of the next get* method call. * Use only for testing. */ void setNextFileName(const QString& fileName); static FileDialog* instance(); private: FileDialog(); QString m_nextFileName; static FileDialog* m_instance; Q_DISABLE_COPY(FileDialog) }; inline FileDialog* fileDialog() { return FileDialog::instance(); } #endif // KEEPASSX_FILEDIALOG_H keepassx-2.0.3/src/gui/IconModels.cpp000066400000000000000000000047321276304217300174650ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "IconModels.h" #include "core/DatabaseIcons.h" DefaultIconModel::DefaultIconModel(QObject* parent) : QAbstractListModel(parent) { } int DefaultIconModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { return DatabaseIcons::IconCount; } else { return 0; } } QVariant DefaultIconModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } Q_ASSERT(index.row() < DatabaseIcons::IconCount); if (role == Qt::DecorationRole) { return databaseIcons()->iconPixmap(index.row()); } return QVariant(); } CustomIconModel::CustomIconModel(QObject* parent) : QAbstractListModel(parent) { } void CustomIconModel::setIcons(const QHash& icons, const QList& iconsOrder) { beginResetModel(); m_icons = icons; m_iconsOrder = iconsOrder; Q_ASSERT(m_icons.count() == m_iconsOrder.count()); endResetModel(); } int CustomIconModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { return m_icons.size(); } else { return 0; } } QVariant CustomIconModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DecorationRole) { Uuid uuid = uuidFromIndex(index); return m_icons.value(uuid); } return QVariant(); } Uuid CustomIconModel::uuidFromIndex(const QModelIndex& index) const { Q_ASSERT(index.isValid()); return m_iconsOrder.value(index.row()); } QModelIndex CustomIconModel::indexFromUuid(const Uuid& uuid) const { int idx = m_iconsOrder.indexOf(uuid); if (idx > -1) { return index(idx, 0); } else { return QModelIndex(); } } keepassx-2.0.3/src/gui/IconModels.h000066400000000000000000000034361276304217300171320ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ICONMODELS_H #define KEEPASSX_ICONMODELS_H #include #include #include "core/Global.h" #include "core/Uuid.h" class DefaultIconModel : public QAbstractListModel { Q_OBJECT public: explicit DefaultIconModel(QObject* parent = Q_NULLPTR); int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; }; class CustomIconModel : public QAbstractListModel { Q_OBJECT public: explicit CustomIconModel(QObject* parent = Q_NULLPTR); virtual int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; void setIcons(const QHash& icons, const QList& iconsOrder); Uuid uuidFromIndex(const QModelIndex& index) const; QModelIndex indexFromUuid(const Uuid& uuid) const; private: QHash m_icons; QList m_iconsOrder; }; #endif // KEEPASSX_ICONMODELS_H keepassx-2.0.3/src/gui/KeePass1OpenWidget.cpp000066400000000000000000000042541276304217300210320ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "KeePass1OpenWidget.h" #include #include #include "ui_DatabaseOpenWidget.h" #include "core/Database.h" #include "core/Metadata.h" #include "format/KeePass1Reader.h" #include "gui/MessageBox.h" KeePass1OpenWidget::KeePass1OpenWidget(QWidget* parent) : DatabaseOpenWidget(parent) { m_ui->labelHeadline->setText(tr("Import KeePass1 database")); } void KeePass1OpenWidget::openDatabase() { KeePass1Reader reader; QString password; QString keyFileName; if (m_ui->checkPassword->isChecked()) { password = m_ui->editPassword->text(); } if (m_ui->checkKeyFile->isChecked()) { keyFileName = m_ui->comboKeyFile->currentText(); } QFile file(m_filename); if (!file.open(QIODevice::ReadOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(file.errorString())); return; } if (m_db) { delete m_db; } QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); m_db = reader.readDatabase(&file, password, keyFileName); QApplication::restoreOverrideCursor(); if (m_db) { m_db->metadata()->setName(QFileInfo(m_filename).completeBaseName()); Q_EMIT editFinished(true); } else { MessageBox::warning(this, tr("Error"), tr("Unable to open the database.").append("\n") .append(reader.errorString())); m_ui->editPassword->clear(); } } keepassx-2.0.3/src/gui/KeePass1OpenWidget.h000066400000000000000000000020441276304217300204720ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEEPASS1OPENWIDGET_H #define KEEPASSX_KEEPASS1OPENWIDGET_H #include "gui/DatabaseOpenWidget.h" class KeePass1OpenWidget : public DatabaseOpenWidget { Q_OBJECT public: explicit KeePass1OpenWidget(QWidget* parent = Q_NULLPTR); protected: void openDatabase() Q_DECL_OVERRIDE; }; #endif // KEEPASSX_KEEPASS1OPENWIDGET_H keepassx-2.0.3/src/gui/LineEdit.cpp000066400000000000000000000054211276304217300171220ustar00rootroot00000000000000/* * Copyright (C) 2007 Trolltech ASA * Copyright (C) 2012 Felix Geyer * Copyright (C) 2012 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "LineEdit.h" #include #include #include "core/FilePath.h" LineEdit::LineEdit(QWidget* parent) : QLineEdit(parent) , m_clearButton(new QToolButton(this)) { m_clearButton->setObjectName("clearButton"); QIcon icon; QString iconNameDirected = QString("edit-clear-locationbar-").append( (layoutDirection() == Qt::LeftToRight) ? "rtl" : "ltr"); icon = QIcon::fromTheme(iconNameDirected); if (icon.isNull()) { icon = QIcon::fromTheme("edit-clear"); if (icon.isNull()) { icon = filePath()->icon("actions", iconNameDirected, false); } } m_clearButton->setIcon(icon); m_clearButton->setCursor(Qt::ArrowCursor); m_clearButton->setStyleSheet("QToolButton { border: none; padding: 0px; }"); m_clearButton->hide(); connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clear())); connect(this, SIGNAL(textChanged(QString)), this, SLOT(updateCloseButton(QString))); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); setStyleSheet(QString("QLineEdit { padding-right: %1px; } ") .arg(m_clearButton->sizeHint().width() + frameWidth + 1)); QSize msz = minimumSizeHint(); setMinimumSize(qMax(msz.width(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2), qMax(msz.height(), m_clearButton->sizeHint().height() + frameWidth * 2 + 2)); } void LineEdit::resizeEvent(QResizeEvent* event) { QSize sz = m_clearButton->sizeHint(); int frameWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth); int y = (rect().bottom() + 1 - sz.height()) / 2; if (layoutDirection() == Qt::LeftToRight) { m_clearButton->move(rect().right() - frameWidth - sz.width(), y); } else { m_clearButton->move(rect().left() + frameWidth, y); } QLineEdit::resizeEvent(event); } void LineEdit::updateCloseButton(const QString& text) { m_clearButton->setVisible(!text.isEmpty()); } keepassx-2.0.3/src/gui/LineEdit.h000066400000000000000000000023771276304217300165760ustar00rootroot00000000000000/* * Copyright (C) 2007 Trolltech ASA * Copyright (C) 2012 Felix Geyer * Copyright (C) 2012 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_LINEEDIT_H #define KEEPASSX_LINEEDIT_H #include #include "core/Global.h" class QToolButton; class LineEdit : public QLineEdit { Q_OBJECT public: explicit LineEdit(QWidget* parent = Q_NULLPTR); protected: void resizeEvent(QResizeEvent* event) Q_DECL_OVERRIDE; private Q_SLOTS: void updateCloseButton(const QString& text); private: QToolButton* const m_clearButton; }; #endif // KEEPASSX_LINEEDIT_H keepassx-2.0.3/src/gui/MainWindow.cpp000066400000000000000000000620241276304217300175030ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "MainWindow.h" #include "ui_MainWindow.h" #include #include #include #include "autotype/AutoType.h" #include "core/Config.h" #include "core/FilePath.h" #include "core/InactivityTimer.h" #include "core/Metadata.h" #include "format/KeePass2Writer.h" #include "gui/AboutDialog.h" #include "gui/DatabaseWidget.h" #include "gui/DatabaseRepairWidget.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" const QString MainWindow::BaseWindowTitle = "KeePassX"; MainWindow::MainWindow() : m_ui(new Ui::MainWindow()) , m_trayIcon(Q_NULLPTR) { m_ui->setupUi(this); m_countDefaultAttributes = m_ui->menuEntryCopyAttribute->actions().size(); restoreGeometry(config()->get("GUI/MainWindowGeometry").toByteArray()); setWindowIcon(filePath()->applicationIcon()); QAction* toggleViewAction = m_ui->toolBar->toggleViewAction(); toggleViewAction->setText(tr("Show toolbar")); m_ui->menuView->addAction(toggleViewAction); bool showToolbar = config()->get("ShowToolbar").toBool(); m_ui->toolBar->setVisible(showToolbar); connect(m_ui->toolBar, SIGNAL(visibilityChanged(bool)), this, SLOT(saveToolbarState(bool))); m_clearHistoryAction = new QAction("Clear history", m_ui->menuFile); m_lastDatabasesActions = new QActionGroup(m_ui->menuRecentDatabases); connect(m_clearHistoryAction, SIGNAL(triggered()), this, SLOT(clearLastDatabases())); connect(m_lastDatabasesActions, SIGNAL(triggered(QAction*)), this, SLOT(openRecentDatabase(QAction*))); connect(m_ui->menuRecentDatabases, SIGNAL(aboutToShow()), this, SLOT(updateLastDatabasesMenu())); m_copyAdditionalAttributeActions = new QActionGroup(m_ui->menuEntryCopyAttribute); m_actionMultiplexer.connect(m_copyAdditionalAttributeActions, SIGNAL(triggered(QAction*)), SLOT(copyAttribute(QAction*))); connect(m_ui->menuEntryCopyAttribute, SIGNAL(aboutToShow()), this, SLOT(updateCopyAttributesMenu())); Qt::Key globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); Qt::KeyboardModifiers globalAutoTypeModifiers = static_cast( config()->get("GlobalAutoTypeModifiers").toInt()); if (globalAutoTypeKey > 0 && globalAutoTypeModifiers > 0) { autoType()->registerGlobalShortcut(globalAutoTypeKey, globalAutoTypeModifiers); } m_ui->actionEntryAutoType->setVisible(autoType()->isAvailable()); m_inactivityTimer = new InactivityTimer(this); connect(m_inactivityTimer, SIGNAL(inactivityDetected()), this, SLOT(lockDatabasesAfterInactivity())); applySettingsChanges(); setShortcut(m_ui->actionDatabaseOpen, QKeySequence::Open, Qt::CTRL + Qt::Key_O); setShortcut(m_ui->actionDatabaseSave, QKeySequence::Save, Qt::CTRL + Qt::Key_S); setShortcut(m_ui->actionDatabaseSaveAs, QKeySequence::SaveAs); setShortcut(m_ui->actionDatabaseClose, QKeySequence::Close, Qt::CTRL + Qt::Key_W); m_ui->actionLockDatabases->setShortcut(Qt::CTRL + Qt::Key_L); setShortcut(m_ui->actionQuit, QKeySequence::Quit, Qt::CTRL + Qt::Key_Q); setShortcut(m_ui->actionSearch, QKeySequence::Find, Qt::CTRL + Qt::Key_F); m_ui->actionEntryNew->setShortcut(Qt::CTRL + Qt::Key_N); m_ui->actionEntryEdit->setShortcut(Qt::CTRL + Qt::Key_E); m_ui->actionEntryDelete->setShortcut(Qt::CTRL + Qt::Key_D); m_ui->actionEntryClone->setShortcut(Qt::CTRL + Qt::Key_K); m_ui->actionEntryCopyUsername->setShortcut(Qt::CTRL + Qt::Key_B); m_ui->actionEntryCopyPassword->setShortcut(Qt::CTRL + Qt::Key_C); setShortcut(m_ui->actionEntryAutoType, QKeySequence::Paste, Qt::CTRL + Qt::Key_V); m_ui->actionEntryOpenUrl->setShortcut(Qt::CTRL + Qt::Key_U); m_ui->actionEntryCopyURL->setShortcut(Qt::CTRL + Qt::ALT + Qt::Key_U); new QShortcut(Qt::CTRL + Qt::Key_M, this, SLOT(showMinimized())); m_ui->actionDatabaseNew->setIcon(filePath()->icon("actions", "document-new")); m_ui->actionDatabaseOpen->setIcon(filePath()->icon("actions", "document-open")); m_ui->actionDatabaseSave->setIcon(filePath()->icon("actions", "document-save")); m_ui->actionDatabaseSaveAs->setIcon(filePath()->icon("actions", "document-save-as")); m_ui->actionDatabaseClose->setIcon(filePath()->icon("actions", "document-close")); m_ui->actionChangeDatabaseSettings->setIcon(filePath()->icon("actions", "document-edit")); m_ui->actionChangeMasterKey->setIcon(filePath()->icon("actions", "database-change-key", false)); m_ui->actionLockDatabases->setIcon(filePath()->icon("actions", "document-encrypt", false)); m_ui->actionQuit->setIcon(filePath()->icon("actions", "application-exit")); m_ui->actionEntryNew->setIcon(filePath()->icon("actions", "entry-new", false)); m_ui->actionEntryClone->setIcon(filePath()->icon("actions", "entry-clone", false)); m_ui->actionEntryEdit->setIcon(filePath()->icon("actions", "entry-edit", false)); m_ui->actionEntryDelete->setIcon(filePath()->icon("actions", "entry-delete", false)); m_ui->actionEntryAutoType->setIcon(filePath()->icon("actions", "auto-type", false)); m_ui->actionEntryCopyUsername->setIcon(filePath()->icon("actions", "username-copy", false)); m_ui->actionEntryCopyPassword->setIcon(filePath()->icon("actions", "password-copy", false)); m_ui->actionGroupNew->setIcon(filePath()->icon("actions", "group-new", false)); m_ui->actionGroupEdit->setIcon(filePath()->icon("actions", "group-edit", false)); m_ui->actionGroupDelete->setIcon(filePath()->icon("actions", "group-delete", false)); m_ui->actionSettings->setIcon(filePath()->icon("actions", "configure")); m_ui->actionAbout->setIcon(filePath()->icon("actions", "help-about")); m_ui->actionSearch->setIcon(filePath()->icon("actions", "system-search")); m_actionMultiplexer.connect(SIGNAL(currentModeChanged(DatabaseWidget::Mode)), this, SLOT(setMenuActionState(DatabaseWidget::Mode))); m_actionMultiplexer.connect(SIGNAL(groupChanged()), this, SLOT(setMenuActionState())); m_actionMultiplexer.connect(SIGNAL(entrySelectionChanged()), this, SLOT(setMenuActionState())); m_actionMultiplexer.connect(SIGNAL(groupContextMenuRequested(QPoint)), this, SLOT(showGroupContextMenu(QPoint))); m_actionMultiplexer.connect(SIGNAL(entryContextMenuRequested(QPoint)), this, SLOT(showEntryContextMenu(QPoint))); connect(m_ui->tabWidget, SIGNAL(tabNameChanged()), SLOT(updateWindowTitle())); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(databaseTabChanged(int))); connect(m_ui->tabWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(setMenuActionState())); connect(m_ui->stackedWidget, SIGNAL(currentChanged(int)), SLOT(updateWindowTitle())); connect(m_ui->settingsWidget, SIGNAL(editFinished(bool)), SLOT(switchToDatabases())); connect(m_ui->settingsWidget, SIGNAL(accepted()), SLOT(applySettingsChanges())); connect(m_ui->actionDatabaseNew, SIGNAL(triggered()), m_ui->tabWidget, SLOT(newDatabase())); connect(m_ui->actionDatabaseOpen, SIGNAL(triggered()), m_ui->tabWidget, SLOT(openDatabase())); connect(m_ui->actionDatabaseSave, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabase())); connect(m_ui->actionDatabaseSaveAs, SIGNAL(triggered()), m_ui->tabWidget, SLOT(saveDatabaseAs())); connect(m_ui->actionDatabaseClose, SIGNAL(triggered()), m_ui->tabWidget, SLOT(closeDatabase())); connect(m_ui->actionChangeMasterKey, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeMasterKey())); connect(m_ui->actionChangeDatabaseSettings, SIGNAL(triggered()), m_ui->tabWidget, SLOT(changeDatabaseSettings())); connect(m_ui->actionImportKeePass1, SIGNAL(triggered()), m_ui->tabWidget, SLOT(importKeePass1Database())); connect(m_ui->actionRepairDatabase, SIGNAL(triggered()), this, SLOT(repairDatabase())); connect(m_ui->actionExportCsv, SIGNAL(triggered()), m_ui->tabWidget, SLOT(exportToCsv())); connect(m_ui->actionLockDatabases, SIGNAL(triggered()), m_ui->tabWidget, SLOT(lockDatabases())); connect(m_ui->actionQuit, SIGNAL(triggered()), SLOT(close())); m_actionMultiplexer.connect(m_ui->actionEntryNew, SIGNAL(triggered()), SLOT(createEntry())); m_actionMultiplexer.connect(m_ui->actionEntryClone, SIGNAL(triggered()), SLOT(cloneEntry())); m_actionMultiplexer.connect(m_ui->actionEntryEdit, SIGNAL(triggered()), SLOT(switchToEntryEdit())); m_actionMultiplexer.connect(m_ui->actionEntryDelete, SIGNAL(triggered()), SLOT(deleteEntries())); m_actionMultiplexer.connect(m_ui->actionEntryCopyTitle, SIGNAL(triggered()), SLOT(copyTitle())); m_actionMultiplexer.connect(m_ui->actionEntryCopyUsername, SIGNAL(triggered()), SLOT(copyUsername())); m_actionMultiplexer.connect(m_ui->actionEntryCopyPassword, SIGNAL(triggered()), SLOT(copyPassword())); m_actionMultiplexer.connect(m_ui->actionEntryCopyURL, SIGNAL(triggered()), SLOT(copyURL())); m_actionMultiplexer.connect(m_ui->actionEntryCopyNotes, SIGNAL(triggered()), SLOT(copyNotes())); m_actionMultiplexer.connect(m_ui->actionEntryAutoType, SIGNAL(triggered()), SLOT(performAutoType())); m_actionMultiplexer.connect(m_ui->actionEntryOpenUrl, SIGNAL(triggered()), SLOT(openUrl())); m_actionMultiplexer.connect(m_ui->actionGroupNew, SIGNAL(triggered()), SLOT(createGroup())); m_actionMultiplexer.connect(m_ui->actionGroupEdit, SIGNAL(triggered()), SLOT(switchToGroupEdit())); m_actionMultiplexer.connect(m_ui->actionGroupDelete, SIGNAL(triggered()), SLOT(deleteGroup())); connect(m_ui->actionSettings, SIGNAL(triggered()), SLOT(switchToSettings())); connect(m_ui->actionAbout, SIGNAL(triggered()), SLOT(showAboutDialog())); m_actionMultiplexer.connect(m_ui->actionSearch, SIGNAL(triggered()), SLOT(openSearch())); updateTrayIcon(); } MainWindow::~MainWindow() { } void MainWindow::updateLastDatabasesMenu() { m_ui->menuRecentDatabases->clear(); QStringList lastDatabases = config()->get("LastDatabases", QVariant()).toStringList(); Q_FOREACH (const QString& database, lastDatabases) { QAction* action = m_ui->menuRecentDatabases->addAction(database); m_lastDatabasesActions->addAction(action); } m_ui->menuRecentDatabases->addSeparator(); m_ui->menuRecentDatabases->addAction(m_clearHistoryAction); } void MainWindow::updateCopyAttributesMenu() { DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); if (!dbWidget) { return; } if (dbWidget->numberOfSelectedEntries() != 1) { return; } QList actions = m_ui->menuEntryCopyAttribute->actions(); for (int i = m_countDefaultAttributes; i < actions.size(); i++) { delete actions[i]; } Q_FOREACH (const QString& key, dbWidget->customEntryAttributes()) { QAction* action = m_ui->menuEntryCopyAttribute->addAction(key); m_copyAdditionalAttributeActions->addAction(action); } } void MainWindow::openRecentDatabase(QAction* action) { openDatabase(action->text()); } void MainWindow::clearLastDatabases() { config()->set("LastDatabases", QVariant()); } void MainWindow::openDatabase(const QString& fileName, const QString& pw, const QString& keyFile) { m_ui->tabWidget->openDatabase(fileName, pw, keyFile); } void MainWindow::setMenuActionState(DatabaseWidget::Mode mode) { bool inDatabaseTabWidget = (m_ui->stackedWidget->currentIndex() == 0); bool inWelcomeWidget = (m_ui->stackedWidget->currentIndex() == 2); if (inDatabaseTabWidget && m_ui->tabWidget->currentIndex() != -1) { DatabaseWidget* dbWidget = m_ui->tabWidget->currentDatabaseWidget(); Q_ASSERT(dbWidget); if (mode == DatabaseWidget::None) { mode = dbWidget->currentMode(); } switch (mode) { case DatabaseWidget::ViewMode: { bool inSearch = dbWidget->isInSearchMode(); bool singleEntrySelected = dbWidget->numberOfSelectedEntries() == 1; bool entriesSelected = dbWidget->numberOfSelectedEntries() > 0; bool groupSelected = dbWidget->isGroupSelected(); m_ui->actionEntryNew->setEnabled(!inSearch); m_ui->actionEntryClone->setEnabled(singleEntrySelected && !inSearch); m_ui->actionEntryEdit->setEnabled(singleEntrySelected); m_ui->actionEntryDelete->setEnabled(entriesSelected); m_ui->actionEntryCopyTitle->setEnabled(singleEntrySelected && dbWidget->currentEntryHasTitle()); m_ui->actionEntryCopyUsername->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUsername()); m_ui->actionEntryCopyPassword->setEnabled(singleEntrySelected && dbWidget->currentEntryHasPassword()); m_ui->actionEntryCopyURL->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); m_ui->actionEntryCopyNotes->setEnabled(singleEntrySelected && dbWidget->currentEntryHasNotes()); m_ui->menuEntryCopyAttribute->setEnabled(singleEntrySelected); m_ui->actionEntryAutoType->setEnabled(singleEntrySelected); m_ui->actionEntryOpenUrl->setEnabled(singleEntrySelected && dbWidget->currentEntryHasUrl()); m_ui->actionGroupNew->setEnabled(groupSelected); m_ui->actionGroupEdit->setEnabled(groupSelected); m_ui->actionGroupDelete->setEnabled(groupSelected && dbWidget->canDeleteCurrentGroup()); // TODO: get checked state from db widget m_ui->actionSearch->setEnabled(true); m_ui->actionChangeMasterKey->setEnabled(true); m_ui->actionChangeDatabaseSettings->setEnabled(true); m_ui->actionDatabaseSave->setEnabled(true); m_ui->actionDatabaseSaveAs->setEnabled(true); m_ui->actionExportCsv->setEnabled(true); break; } case DatabaseWidget::EditMode: case DatabaseWidget::LockedMode: Q_FOREACH (QAction* action, m_ui->menuEntries->actions()) { action->setEnabled(false); } Q_FOREACH (QAction* action, m_ui->menuGroups->actions()) { action->setEnabled(false); } m_ui->actionEntryCopyTitle->setEnabled(false); m_ui->actionEntryCopyUsername->setEnabled(false); m_ui->actionEntryCopyPassword->setEnabled(false); m_ui->actionEntryCopyURL->setEnabled(false); m_ui->actionEntryCopyNotes->setEnabled(false); m_ui->menuEntryCopyAttribute->setEnabled(false); m_ui->actionSearch->setEnabled(false); m_ui->actionChangeMasterKey->setEnabled(false); m_ui->actionChangeDatabaseSettings->setEnabled(false); m_ui->actionDatabaseSave->setEnabled(false); m_ui->actionDatabaseSaveAs->setEnabled(false); m_ui->actionExportCsv->setEnabled(false); break; default: Q_ASSERT(false); } m_ui->actionDatabaseClose->setEnabled(true); } else { Q_FOREACH (QAction* action, m_ui->menuEntries->actions()) { action->setEnabled(false); } Q_FOREACH (QAction* action, m_ui->menuGroups->actions()) { action->setEnabled(false); } m_ui->actionEntryCopyTitle->setEnabled(false); m_ui->actionEntryCopyUsername->setEnabled(false); m_ui->actionEntryCopyPassword->setEnabled(false); m_ui->actionEntryCopyURL->setEnabled(false); m_ui->actionEntryCopyNotes->setEnabled(false); m_ui->menuEntryCopyAttribute->setEnabled(false); m_ui->actionSearch->setEnabled(false); m_ui->actionChangeMasterKey->setEnabled(false); m_ui->actionChangeDatabaseSettings->setEnabled(false); m_ui->actionDatabaseSave->setEnabled(false); m_ui->actionDatabaseSaveAs->setEnabled(false); m_ui->actionDatabaseClose->setEnabled(false); m_ui->actionExportCsv->setEnabled(false); } bool inDatabaseTabWidgetOrWelcomeWidget = inDatabaseTabWidget || inWelcomeWidget; m_ui->actionDatabaseNew->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->actionDatabaseOpen->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->menuRecentDatabases->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->actionImportKeePass1->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->actionRepairDatabase->setEnabled(inDatabaseTabWidgetOrWelcomeWidget); m_ui->actionLockDatabases->setEnabled(m_ui->tabWidget->hasLockableDatabases()); } void MainWindow::updateWindowTitle() { QString customWindowTitlePart; int stackedWidgetIndex = m_ui->stackedWidget->currentIndex(); int tabWidgetIndex = m_ui->tabWidget->currentIndex(); if (stackedWidgetIndex == 0 && tabWidgetIndex != -1) { customWindowTitlePart = m_ui->tabWidget->tabText(tabWidgetIndex); if (m_ui->tabWidget->readOnly(tabWidgetIndex)) { customWindowTitlePart.append(QString(" [%1]").arg(tr("read-only"))); } } else if (stackedWidgetIndex == 1) { customWindowTitlePart = tr("Settings"); } QString windowTitle; if (customWindowTitlePart.isEmpty()) { windowTitle = BaseWindowTitle; } else { windowTitle = QString("%1 - %2").arg(customWindowTitlePart, BaseWindowTitle); } setWindowTitle(windowTitle); } void MainWindow::showAboutDialog() { AboutDialog* aboutDialog = new AboutDialog(this); aboutDialog->show(); } void MainWindow::switchToDatabases() { if (m_ui->tabWidget->currentIndex() == -1) { m_ui->stackedWidget->setCurrentIndex(2); } else { m_ui->stackedWidget->setCurrentIndex(0); } } void MainWindow::switchToSettings() { m_ui->settingsWidget->loadSettings(); m_ui->stackedWidget->setCurrentIndex(1); } void MainWindow::databaseTabChanged(int tabIndex) { if (tabIndex != -1 && m_ui->stackedWidget->currentIndex() == 2) { m_ui->stackedWidget->setCurrentIndex(0); } else if (tabIndex == -1 && m_ui->stackedWidget->currentIndex() == 0) { m_ui->stackedWidget->setCurrentIndex(2); } m_actionMultiplexer.setCurrentObject(m_ui->tabWidget->currentDatabaseWidget()); } void MainWindow::closeEvent(QCloseEvent* event) { bool accept = saveLastDatabases(); if (accept) { saveWindowInformation(); event->accept(); QApplication::quit(); } else { event->ignore(); } } void MainWindow::changeEvent(QEvent *event) { if ((event->type() == QEvent::WindowStateChange) && isMinimized() && isTrayIconEnabled() && m_trayIcon && m_trayIcon->isVisible() && config()->get("GUI/MinimizeToTray").toBool()) { event->ignore(); QTimer::singleShot(0, this, SLOT(hide())); } else { QMainWindow::changeEvent(event); } } void MainWindow::saveWindowInformation() { config()->set("GUI/MainWindowGeometry", saveGeometry()); } bool MainWindow::saveLastDatabases() { bool accept; m_openDatabases.clear(); bool openPreviousDatabasesOnStartup = config()->get("OpenPreviousDatabasesOnStartup").toBool(); if (openPreviousDatabasesOnStartup) { connect(m_ui->tabWidget, SIGNAL(databaseWithFileClosed(QString)), this, SLOT(rememberOpenDatabases(QString))); } if (!m_ui->tabWidget->closeAllDatabases()) { accept = false; } else { accept = true; } if (openPreviousDatabasesOnStartup) { disconnect(m_ui->tabWidget, SIGNAL(databaseWithFileClosed(QString)), this, SLOT(rememberOpenDatabases(QString))); config()->set("LastOpenedDatabases", m_openDatabases); } return accept; } void MainWindow::updateTrayIcon() { if (isTrayIconEnabled()) { if (!m_trayIcon) { m_trayIcon = new QSystemTrayIcon(filePath()->applicationIcon(), this); QMenu* menu = new QMenu(this); QAction* actionToggle = new QAction(tr("Toggle window"), menu); menu->addAction(actionToggle); menu->addAction(m_ui->actionQuit); connect(m_trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(trayIconTriggered(QSystemTrayIcon::ActivationReason))); connect(actionToggle, SIGNAL(triggered()), SLOT(toggleWindow())); m_trayIcon->setContextMenu(menu); m_trayIcon->show(); } } else { if (m_trayIcon) { m_trayIcon->hide(); delete m_trayIcon; m_trayIcon = Q_NULLPTR; } } } void MainWindow::showEntryContextMenu(const QPoint& globalPos) { m_ui->menuEntries->popup(globalPos); } void MainWindow::showGroupContextMenu(const QPoint& globalPos) { m_ui->menuGroups->popup(globalPos); } void MainWindow::saveToolbarState(bool value) { config()->set("ShowToolbar", value); } void MainWindow::setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback) { if (!QKeySequence::keyBindings(standard).isEmpty()) { action->setShortcuts(standard); } else if (fallback != 0) { action->setShortcut(QKeySequence(fallback)); } } void MainWindow::rememberOpenDatabases(const QString& filePath) { m_openDatabases.append(filePath); } void MainWindow::applySettingsChanges() { int timeout = config()->get("security/lockdatabaseidlesec").toInt() * 1000; if (timeout <= 0) { timeout = 60; } m_inactivityTimer->setInactivityTimeout(timeout); if (config()->get("security/lockdatabaseidle").toBool()) { m_inactivityTimer->activate(); } else { m_inactivityTimer->deactivate(); } updateTrayIcon(); } void MainWindow::trayIconTriggered(QSystemTrayIcon::ActivationReason reason) { if (reason == QSystemTrayIcon::Trigger) { toggleWindow(); } } void MainWindow::toggleWindow() { if ((QApplication::activeWindow() == this) && isVisible() && !isMinimized()) { hide(); } else { ensurePolished(); setWindowState(windowState() & ~Qt::WindowMinimized); show(); raise(); activateWindow(); } } void MainWindow::lockDatabasesAfterInactivity() { // ignore event if a modal dialog is open (such as a message box or file dialog) if (QApplication::activeModalWidget()) { return; } m_ui->tabWidget->lockDatabases(); } void MainWindow::repairDatabase() { QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(), filter); if (fileName.isEmpty()) { return; } QScopedPointer dialog(new QDialog(this)); DatabaseRepairWidget* dbRepairWidget = new DatabaseRepairWidget(dialog.data()); connect(dbRepairWidget, SIGNAL(success()), dialog.data(), SLOT(accept())); connect(dbRepairWidget, SIGNAL(error()), dialog.data(), SLOT(reject())); dbRepairWidget->load(fileName); if (dialog->exec() == QDialog::Accepted && dbRepairWidget->database()) { QString saveFileName = fileDialog()->getSaveFileName(this, tr("Save repaired database"), QString(), tr("KeePass 2 Database").append(" (*.kdbx)"), Q_NULLPTR, 0, "kdbx"); if (!saveFileName.isEmpty()) { KeePass2Writer writer; writer.writeDatabase(saveFileName, dbRepairWidget->database()); if (writer.hasError()) { MessageBox::critical(this, tr("Error"), tr("Writing the database failed.") + "\n\n" + writer.errorString()); } } } } bool MainWindow::isTrayIconEnabled() const { #ifdef Q_OS_MAC // systray not useful on OS X return false; #else return config()->get("GUI/ShowTrayIcon").toBool() && QSystemTrayIcon::isSystemTrayAvailable(); #endif } keepassx-2.0.3/src/gui/MainWindow.h000066400000000000000000000054741276304217300171560ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_MAINWINDOW_H #define KEEPASSX_MAINWINDOW_H #include #include #include #include "core/SignalMultiplexer.h" #include "gui/DatabaseWidget.h" namespace Ui { class MainWindow; } class InactivityTimer; class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(); ~MainWindow(); public Q_SLOTS: void openDatabase(const QString& fileName, const QString& pw = QString(), const QString& keyFile = QString()); protected: void closeEvent(QCloseEvent* event) Q_DECL_OVERRIDE; void changeEvent(QEvent* event) Q_DECL_OVERRIDE; private Q_SLOTS: void setMenuActionState(DatabaseWidget::Mode mode = DatabaseWidget::None); void updateWindowTitle(); void showAboutDialog(); void switchToDatabases(); void switchToSettings(); void databaseTabChanged(int tabIndex); void openRecentDatabase(QAction* action); void clearLastDatabases(); void updateLastDatabasesMenu(); void updateCopyAttributesMenu(); void showEntryContextMenu(const QPoint& globalPos); void showGroupContextMenu(const QPoint& globalPos); void saveToolbarState(bool value); void rememberOpenDatabases(const QString& filePath); void applySettingsChanges(); void trayIconTriggered(QSystemTrayIcon::ActivationReason reason); void toggleWindow(); void lockDatabasesAfterInactivity(); void repairDatabase(); private: static void setShortcut(QAction* action, QKeySequence::StandardKey standard, int fallback = 0); static const QString BaseWindowTitle; void saveWindowInformation(); bool saveLastDatabases(); void updateTrayIcon(); bool isTrayIconEnabled() const; const QScopedPointer m_ui; SignalMultiplexer m_actionMultiplexer; QAction* m_clearHistoryAction; QActionGroup* m_lastDatabasesActions; QActionGroup* m_copyAdditionalAttributeActions; QStringList m_openDatabases; InactivityTimer* m_inactivityTimer; int m_countDefaultAttributes; QSystemTrayIcon* m_trayIcon; Q_DISABLE_COPY(MainWindow) }; #endif // KEEPASSX_MAINWINDOW_H keepassx-2.0.3/src/gui/MainWindow.ui000066400000000000000000000301201276304217300173260ustar00rootroot00000000000000 MainWindow 0 0 800 600 KeePassX 0 0 0 0 2 0 0 0 0 -1 true true 0 0 0 0 0 0 800 20 Database Recent databases Help Entries false Copy attribute to clipboard Groups Tools View false TopToolBarArea false Quit About Open database false Save database false Close database New database false Add new entry false View/Edit entry false Delete entry false Add new group false Edit group false Delete group false Save database as false Change master key false Database settings Database settings Import KeePass 1 database false Clone entry false Find false Copy username Copy username to clipboard false Copy password Copy password to clipboard Settings false Perform Auto-Type false Open URL false Lock databases false Title false URL false Notes false Export to CSV file Repair database DatabaseTabWidget QTabWidget
gui/DatabaseTabWidget.h
1
SettingsWidget QWidget
gui/SettingsWidget.h
1
WelcomeWidget QWidget
gui/WelcomeWidget.h
1
keepassx-2.0.3/src/gui/MessageBox.cpp000066400000000000000000000066151276304217300174700ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "MessageBox.h" QMessageBox::StandardButton MessageBox::m_nextAnswer(QMessageBox::NoButton); QMessageBox::StandardButton MessageBox::critical(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (m_nextAnswer == QMessageBox::NoButton) { return QMessageBox::critical(parent, title, text, buttons, defaultButton); } else { QMessageBox::StandardButton returnButton = m_nextAnswer; m_nextAnswer = QMessageBox::NoButton; return returnButton; } } QMessageBox::StandardButton MessageBox::information(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (m_nextAnswer == QMessageBox::NoButton) { return QMessageBox::information(parent, title, text, buttons, defaultButton); } else { QMessageBox::StandardButton returnButton = m_nextAnswer; m_nextAnswer = QMessageBox::NoButton; return returnButton; } } QMessageBox::StandardButton MessageBox::question(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (m_nextAnswer == QMessageBox::NoButton) { return QMessageBox::question(parent, title, text, buttons, defaultButton); } else { QMessageBox::StandardButton returnButton = m_nextAnswer; m_nextAnswer = QMessageBox::NoButton; return returnButton; } } QMessageBox::StandardButton MessageBox::warning(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton) { if (m_nextAnswer == QMessageBox::NoButton) { return QMessageBox::warning(parent, title, text, buttons, defaultButton); } else { QMessageBox::StandardButton returnButton = m_nextAnswer; m_nextAnswer = QMessageBox::NoButton; return returnButton; } } void MessageBox::setNextAnswer(QMessageBox::StandardButton button) { m_nextAnswer = button; } keepassx-2.0.3/src/gui/MessageBox.h000066400000000000000000000047371276304217300171400ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_MESSAGEBOX_H #define KEEPASSX_MESSAGEBOX_H #include #include "core/Global.h" class MessageBox { public: static QMessageBox::StandardButton critical(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); static QMessageBox::StandardButton information(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); static QMessageBox::StandardButton question(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); static QMessageBox::StandardButton warning(QWidget* parent, const QString& title, const QString& text, QMessageBox::StandardButtons buttons = QMessageBox::Ok, QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); static void setNextAnswer(QMessageBox::StandardButton button); private: static QMessageBox::StandardButton m_nextAnswer; }; #endif // KEEPASSX_MESSAGEBOX_H keepassx-2.0.3/src/gui/PasswordComboBox.cpp000066400000000000000000000051401276304217300206560ustar00rootroot00000000000000/* * Copyright (C) 2013 Michael Curtis * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "PasswordComboBox.h" #include #include "core/PasswordGenerator.h" PasswordComboBox::PasswordComboBox(QWidget* parent) : QComboBox(parent) , m_generator(Q_NULLPTR) , m_alternatives(10) { setEditable(true); setEcho(false); } PasswordComboBox::~PasswordComboBox() { } void PasswordComboBox::setEcho(bool echo) { lineEdit()->setEchoMode(echo ? QLineEdit::Normal : QLineEdit::Password); QString current = currentText(); if (echo) { // add fake item to show visual indication that a popup is available addItem(""); #ifdef Q_OS_MAC // Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6) setStyleSheet("QComboBox { font-family: monospace,Menlo,Monaco; }"); #else setStyleSheet("QComboBox { font-family: monospace,Courier New; }"); #endif } else { // clear items so the combobox indicates that no popup menu is available clear(); setStyleSheet("QComboBox { font-family: initial; }"); } setEditText(current); } void PasswordComboBox::setGenerator(PasswordGenerator* generator) { m_generator = generator; } void PasswordComboBox::setNumberAlternatives(int alternatives) { m_alternatives = alternatives; } void PasswordComboBox::showPopup() { // no point in showing a bunch of hidden passwords if (lineEdit()->echoMode() == QLineEdit::Password) { hidePopup(); return; } // keep existing password as the first item in the popup QString current = currentText(); clear(); addItem(current); if (m_generator && m_generator->isValid()) { for (int alternative = 0; alternative < m_alternatives; alternative++) { QString password = m_generator->generatePassword(); addItem(password); } } QComboBox::showPopup(); } keepassx-2.0.3/src/gui/PasswordComboBox.h000066400000000000000000000025161276304217300203270ustar00rootroot00000000000000/* * Copyright (C) 2013 Michael Curtis * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_PASSWORDCOMBOBOX_H #define KEEPASSX_PASSWORDCOMBOBOX_H #include #include "core/Global.h" class PasswordGenerator; class PasswordComboBox : public QComboBox { Q_OBJECT public: explicit PasswordComboBox(QWidget* parent = Q_NULLPTR); ~PasswordComboBox(); void setGenerator(PasswordGenerator* generator); void setNumberAlternatives(int alternatives); void showPopup(); public Q_SLOTS: void setEcho(bool echo); private: PasswordGenerator* m_generator; int m_alternatives; }; #endif // KEEPASSX_PASSWORDCOMBOBOX_H keepassx-2.0.3/src/gui/PasswordEdit.cpp000066400000000000000000000046351276304217300200430ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "PasswordEdit.h" #include "core/Global.h" const QColor PasswordEdit::CorrectSoFarColor = QColor(255, 205, 15); const QColor PasswordEdit::ErrorColor = QColor(255, 125, 125); PasswordEdit::PasswordEdit(QWidget* parent) : QLineEdit(parent) , m_basePasswordEdit(Q_NULLPTR) { } void PasswordEdit::enableVerifyMode(PasswordEdit* basePasswordEdit) { m_basePasswordEdit = basePasswordEdit; updateStylesheet(); connect(m_basePasswordEdit, SIGNAL(textChanged(QString)), SLOT(updateStylesheet())); connect(this, SIGNAL(textChanged(QString)), SLOT(updateStylesheet())); connect(m_basePasswordEdit, SIGNAL(showPasswordChanged(bool)), SLOT(setShowPassword(bool))); } void PasswordEdit::setShowPassword(bool show) { setEchoMode(show ? QLineEdit::Normal : QLineEdit::Password); updateStylesheet(); Q_EMIT showPasswordChanged(show); } bool PasswordEdit::passwordsEqual() const { return text() == m_basePasswordEdit->text(); } void PasswordEdit::updateStylesheet() { QString stylesheet("QLineEdit { "); if (echoMode() == QLineEdit::Normal) { #ifdef Q_OS_MAC // Qt on Mac OS doesn't seem to know the generic monospace family (tested with 4.8.6) stylesheet.append("font-family: monospace,Menlo,Monaco; "); #else stylesheet.append("font-family: monospace,Courier New; "); #endif } if (m_basePasswordEdit && !passwordsEqual()) { stylesheet.append("background: %1; "); if (m_basePasswordEdit->text().startsWith(text())) { stylesheet = stylesheet.arg(CorrectSoFarColor.name()); } else { stylesheet = stylesheet.arg(ErrorColor.name()); } } stylesheet.append("}"); setStyleSheet(stylesheet); } keepassx-2.0.3/src/gui/PasswordEdit.h000066400000000000000000000025021276304217300174770ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_PASSWORDEDIT_H #define KEEPASSX_PASSWORDEDIT_H #include #include "core/Global.h" class PasswordEdit : public QLineEdit { Q_OBJECT public: static const QColor CorrectSoFarColor; static const QColor ErrorColor; explicit PasswordEdit(QWidget* parent = Q_NULLPTR); void enableVerifyMode(PasswordEdit* baseEdit); public Q_SLOTS: void setShowPassword(bool show); Q_SIGNALS: void showPasswordChanged(bool show); private Q_SLOTS: void updateStylesheet(); private: bool passwordsEqual() const; PasswordEdit* m_basePasswordEdit; }; #endif // KEEPASSX_PASSWORDEDIT_H keepassx-2.0.3/src/gui/PasswordGeneratorWidget.cpp000066400000000000000000000150241276304217300222420ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "PasswordGeneratorWidget.h" #include "ui_PasswordGeneratorWidget.h" #include #include "core/Config.h" #include "core/PasswordGenerator.h" #include "core/FilePath.h" PasswordGeneratorWidget::PasswordGeneratorWidget(QWidget* parent) : QWidget(parent) , m_updatingSpinBox(false) , m_generator(new PasswordGenerator()) , m_ui(new Ui::PasswordGeneratorWidget()) { m_ui->setupUi(this); m_ui->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show")); connect(m_ui->editNewPassword->lineEdit(), SIGNAL(textChanged(QString)), SLOT(updateApplyEnabled(QString))); connect(m_ui->togglePasswordButton, SIGNAL(toggled(bool)), m_ui->editNewPassword, SLOT(setEcho(bool))); connect(m_ui->buttonApply, SIGNAL(clicked()), SLOT(emitNewPassword())); connect(m_ui->buttonApply, SIGNAL(clicked()), SLOT(saveSettings())); connect(m_ui->sliderLength, SIGNAL(valueChanged(int)), SLOT(sliderMoved())); connect(m_ui->spinBoxLength, SIGNAL(valueChanged(int)), SLOT(spinBoxChanged())); connect(m_ui->optionButtons, SIGNAL(buttonClicked(int)), SLOT(updateGenerator())); m_ui->editNewPassword->setGenerator(m_generator.data()); loadSettings(); reset(); } PasswordGeneratorWidget::~PasswordGeneratorWidget() { } void PasswordGeneratorWidget::loadSettings() { m_ui->checkBoxLower->setChecked(config()->get("generator/LowerCase", true).toBool()); m_ui->checkBoxUpper->setChecked(config()->get("generator/UpperCase", true).toBool()); m_ui->checkBoxNumbers->setChecked(config()->get("generator/Numbers", true).toBool()); m_ui->checkBoxSpecialChars->setChecked(config()->get("generator/SpecialChars", false).toBool()); m_ui->checkBoxExcludeAlike->setChecked(config()->get("generator/ExcludeAlike", true).toBool()); m_ui->checkBoxEnsureEvery->setChecked(config()->get("generator/EnsureEvery", true).toBool()); m_ui->spinBoxLength->setValue(config()->get("generator/Length", 16).toInt()); } void PasswordGeneratorWidget::saveSettings() { config()->set("generator/LowerCase", m_ui->checkBoxLower->isChecked()); config()->set("generator/UpperCase", m_ui->checkBoxUpper->isChecked()); config()->set("generator/Numbers", m_ui->checkBoxNumbers->isChecked()); config()->set("generator/SpecialChars", m_ui->checkBoxSpecialChars->isChecked()); config()->set("generator/ExcludeAlike", m_ui->checkBoxExcludeAlike->isChecked()); config()->set("generator/EnsureEvery", m_ui->checkBoxEnsureEvery->isChecked()); config()->set("generator/Length", m_ui->spinBoxLength->value()); } void PasswordGeneratorWidget::reset() { m_ui->editNewPassword->lineEdit()->setText(""); m_ui->togglePasswordButton->setChecked(config()->get("security/passwordscleartext").toBool()); updateGenerator(); } void PasswordGeneratorWidget::regeneratePassword() { if (m_generator->isValid()) { QString password = m_generator->generatePassword(); m_ui->editNewPassword->setEditText(password); } } void PasswordGeneratorWidget::updateApplyEnabled(const QString& password) { m_ui->buttonApply->setEnabled(!password.isEmpty()); } void PasswordGeneratorWidget::emitNewPassword() { Q_EMIT newPassword(m_ui->editNewPassword->lineEdit()->text()); } void PasswordGeneratorWidget::sliderMoved() { if (m_updatingSpinBox) { return; } m_ui->spinBoxLength->setValue(m_ui->sliderLength->value()); updateGenerator(); } void PasswordGeneratorWidget::spinBoxChanged() { if (m_updatingSpinBox) { return; } // Interlock so that we don't update twice - this causes issues as the spinbox can go higher than slider m_updatingSpinBox = true; m_ui->sliderLength->setValue(m_ui->spinBoxLength->value()); m_updatingSpinBox = false; updateGenerator(); } PasswordGenerator::CharClasses PasswordGeneratorWidget::charClasses() { PasswordGenerator::CharClasses classes; if (m_ui->checkBoxLower->isChecked()) { classes |= PasswordGenerator::LowerLetters; } if (m_ui->checkBoxUpper->isChecked()) { classes |= PasswordGenerator::UpperLetters; } if (m_ui->checkBoxNumbers->isChecked()) { classes |= PasswordGenerator::Numbers; } if (m_ui->checkBoxSpecialChars->isChecked()) { classes |= PasswordGenerator::SpecialCharacters; } return classes; } PasswordGenerator::GeneratorFlags PasswordGeneratorWidget::generatorFlags() { PasswordGenerator::GeneratorFlags flags; if (m_ui->checkBoxExcludeAlike->isChecked()) { flags |= PasswordGenerator::ExcludeLookAlike; } if (m_ui->checkBoxEnsureEvery->isChecked()) { flags |= PasswordGenerator::CharFromEveryGroup; } return flags; } void PasswordGeneratorWidget::updateGenerator() { PasswordGenerator::CharClasses classes = charClasses(); PasswordGenerator::GeneratorFlags flags = generatorFlags(); int minLength = 0; if (flags.testFlag(PasswordGenerator::CharFromEveryGroup)) { if (classes.testFlag(PasswordGenerator::LowerLetters)) { minLength++; } if (classes.testFlag(PasswordGenerator::UpperLetters)) { minLength++; } if (classes.testFlag(PasswordGenerator::Numbers)) { minLength++; } if (classes.testFlag(PasswordGenerator::SpecialCharacters)) { minLength++; } } minLength = qMax(minLength, 1); if (m_ui->spinBoxLength->value() < minLength) { m_updatingSpinBox = true; m_ui->spinBoxLength->setValue(minLength); m_ui->sliderLength->setValue(minLength); m_updatingSpinBox = false; } m_ui->spinBoxLength->setMinimum(minLength); m_ui->sliderLength->setMinimum(minLength); m_generator->setLength(m_ui->spinBoxLength->value()); m_generator->setCharClasses(classes); m_generator->setFlags(flags); regeneratePassword(); } keepassx-2.0.3/src/gui/PasswordGeneratorWidget.h000066400000000000000000000034101276304217300217030ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_PASSWORDGENERATORWIDGET_H #define KEEPASSX_PASSWORDGENERATORWIDGET_H #include #include #include "core/Global.h" #include "core/PasswordGenerator.h" namespace Ui { class PasswordGeneratorWidget; } class PasswordGenerator; class PasswordGeneratorWidget : public QWidget { Q_OBJECT public: explicit PasswordGeneratorWidget(QWidget* parent = Q_NULLPTR); ~PasswordGeneratorWidget(); void loadSettings(); void reset(); void regeneratePassword(); Q_SIGNALS: void newPassword(const QString& password); private Q_SLOTS: void updateApplyEnabled(const QString& password); void emitNewPassword(); void saveSettings(); void sliderMoved(); void spinBoxChanged(); void updateGenerator(); private: bool m_updatingSpinBox; PasswordGenerator::CharClasses charClasses(); PasswordGenerator::GeneratorFlags generatorFlags(); const QScopedPointer m_generator; const QScopedPointer m_ui; }; #endif // KEEPASSX_PASSWORDGENERATORWIDGET_H keepassx-2.0.3/src/gui/PasswordGeneratorWidget.ui000066400000000000000000000164441276304217300221040ustar00rootroot00000000000000 PasswordGeneratorWidget 0 0 434 250 Password: QLayout::SetNoConstraint true true Length: 1 64 Qt::Horizontal QSlider::TicksBelow 8 1 999 Character Types Upper Case Letters A-Z true optionButtons Lower Case Letters a-z true optionButtons Numbers 0-9 true optionButtons Special Characters /*_& ... true optionButtons Qt::Horizontal 40 20 Exclude look-alike characters optionButtons Ensure that the password contains characters from every group optionButtons Qt::Horizontal 40 20 false Accept PasswordComboBox QComboBox
gui/PasswordComboBox.h
editNewPassword togglePasswordButton sliderLength spinBoxLength checkBoxUpper checkBoxLower checkBoxNumbers checkBoxSpecialChars checkBoxExcludeAlike checkBoxEnsureEvery buttonApply false
keepassx-2.0.3/src/gui/SearchWidget.ui000066400000000000000000000063441276304217300176360ustar00rootroot00000000000000 SearchWidget 0 0 630 87 0 0 0 0 Qt::ClickFocus true Find: 0 0 0 0 Case sensitive Current group false Root group true Qt::Horizontal 255 1 LineEdit QLineEdit
gui/LineEdit.h
closeSearchButton searchEdit caseSensitiveCheckBox searchCurrentRadioButton searchRootRadioButton
keepassx-2.0.3/src/gui/SettingsWidget.cpp000066400000000000000000000171531276304217300203760ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SettingsWidget.h" #include "ui_SettingsWidgetGeneral.h" #include "ui_SettingsWidgetSecurity.h" #include "autotype/AutoType.h" #include "core/Config.h" #include "core/Translator.h" SettingsWidget::SettingsWidget(QWidget* parent) : EditWidget(parent) , m_secWidget(new QWidget()) , m_generalWidget(new QWidget()) , m_secUi(new Ui::SettingsWidgetSecurity()) , m_generalUi(new Ui::SettingsWidgetGeneral()) , m_globalAutoTypeKey(static_cast(0)) , m_globalAutoTypeModifiers(Qt::NoModifier) { setHeadline(tr("Application Settings")); m_secUi->setupUi(m_secWidget); m_generalUi->setupUi(m_generalWidget); add(tr("General"), m_generalWidget); add(tr("Security"), m_secWidget); m_generalUi->autoTypeShortcutWidget->setVisible(autoType()->isAvailable()); m_generalUi->autoTypeShortcutLabel->setVisible(autoType()->isAvailable()); #ifdef Q_OS_MAC // systray not useful on OS X m_generalUi->systrayShowCheckBox->setVisible(false); m_generalUi->systrayMinimizeToTrayCheckBox->setVisible(false); #endif connect(this, SIGNAL(accepted()), SLOT(saveSettings())); connect(this, SIGNAL(rejected()), SLOT(reject())); connect(m_generalUi->autoSaveAfterEveryChangeCheckBox, SIGNAL(toggled(bool)), this, SLOT(enableAutoSaveOnExit(bool))); connect(m_generalUi->systrayShowCheckBox, SIGNAL(toggled(bool)), m_generalUi->systrayMinimizeToTrayCheckBox, SLOT(setEnabled(bool))); connect(m_secUi->clearClipboardCheckBox, SIGNAL(toggled(bool)), m_secUi->clearClipboardSpinBox, SLOT(setEnabled(bool))); connect(m_secUi->lockDatabaseIdleCheckBox, SIGNAL(toggled(bool)), m_secUi->lockDatabaseIdleSpinBox, SLOT(setEnabled(bool))); } SettingsWidget::~SettingsWidget() { } void SettingsWidget::loadSettings() { m_generalUi->rememberLastDatabasesCheckBox->setChecked(config()->get("RememberLastDatabases").toBool()); m_generalUi->rememberLastKeyFilesCheckBox->setChecked(config()->get("RememberLastKeyFiles").toBool()); m_generalUi->openPreviousDatabasesOnStartupCheckBox->setChecked( config()->get("OpenPreviousDatabasesOnStartup").toBool()); m_generalUi->autoSaveAfterEveryChangeCheckBox->setChecked(config()->get("AutoSaveAfterEveryChange").toBool()); m_generalUi->autoSaveOnExitCheckBox->setChecked(config()->get("AutoSaveOnExit").toBool()); m_generalUi->minimizeOnCopyCheckBox->setChecked(config()->get("MinimizeOnCopy").toBool()); m_generalUi->useGroupIconOnEntryCreationCheckBox->setChecked(config()->get("UseGroupIconOnEntryCreation").toBool()); m_generalUi->autoTypeEntryTitleMatchCheckBox->setChecked(config()->get("AutoTypeEntryTitleMatch").toBool()); m_generalUi->languageComboBox->clear(); QList > languages = Translator::availableLanguages(); for (int i = 0; i < languages.size(); i++) { m_generalUi->languageComboBox->addItem(languages[i].second, languages[i].first); } int defaultIndex = m_generalUi->languageComboBox->findData(config()->get("GUI/Language")); if (defaultIndex > 0) { m_generalUi->languageComboBox->setCurrentIndex(defaultIndex); } m_generalUi->systrayShowCheckBox->setChecked(config()->get("GUI/ShowTrayIcon").toBool()); m_generalUi->systrayMinimizeToTrayCheckBox->setChecked(config()->get("GUI/MinimizeToTray").toBool()); if (autoType()->isAvailable()) { m_globalAutoTypeKey = static_cast(config()->get("GlobalAutoTypeKey").toInt()); m_globalAutoTypeModifiers = static_cast(config()->get("GlobalAutoTypeModifiers").toInt()); if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { m_generalUi->autoTypeShortcutWidget->setShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); } } m_secUi->clearClipboardCheckBox->setChecked(config()->get("security/clearclipboard").toBool()); m_secUi->clearClipboardSpinBox->setValue(config()->get("security/clearclipboardtimeout").toInt()); m_secUi->lockDatabaseIdleCheckBox->setChecked(config()->get("security/lockdatabaseidle").toBool()); m_secUi->lockDatabaseIdleSpinBox->setValue(config()->get("security/lockdatabaseidlesec").toInt()); m_secUi->passwordCleartextCheckBox->setChecked(config()->get("security/passwordscleartext").toBool()); m_secUi->autoTypeAskCheckBox->setChecked(config()->get("security/autotypeask").toBool()); setCurrentRow(0); } void SettingsWidget::saveSettings() { config()->set("RememberLastDatabases", m_generalUi->rememberLastDatabasesCheckBox->isChecked()); config()->set("RememberLastKeyFiles", m_generalUi->rememberLastKeyFilesCheckBox->isChecked()); config()->set("OpenPreviousDatabasesOnStartup", m_generalUi->openPreviousDatabasesOnStartupCheckBox->isChecked()); config()->set("AutoSaveAfterEveryChange", m_generalUi->autoSaveAfterEveryChangeCheckBox->isChecked()); config()->set("AutoSaveOnExit", m_generalUi->autoSaveOnExitCheckBox->isChecked()); config()->set("MinimizeOnCopy", m_generalUi->minimizeOnCopyCheckBox->isChecked()); config()->set("UseGroupIconOnEntryCreation", m_generalUi->useGroupIconOnEntryCreationCheckBox->isChecked()); config()->set("AutoTypeEntryTitleMatch", m_generalUi->autoTypeEntryTitleMatchCheckBox->isChecked()); int currentLangIndex = m_generalUi->languageComboBox->currentIndex(); config()->set("GUI/Language", m_generalUi->languageComboBox->itemData(currentLangIndex).toString()); config()->set("GUI/ShowTrayIcon", m_generalUi->systrayShowCheckBox->isChecked()); config()->set("GUI/MinimizeToTray", m_generalUi->systrayMinimizeToTrayCheckBox->isChecked()); if (autoType()->isAvailable()) { config()->set("GlobalAutoTypeKey", m_generalUi->autoTypeShortcutWidget->key()); config()->set("GlobalAutoTypeModifiers", static_cast(m_generalUi->autoTypeShortcutWidget->modifiers())); } config()->set("security/clearclipboard", m_secUi->clearClipboardCheckBox->isChecked()); config()->set("security/clearclipboardtimeout", m_secUi->clearClipboardSpinBox->value()); config()->set("security/lockdatabaseidle", m_secUi->lockDatabaseIdleCheckBox->isChecked()); config()->set("security/lockdatabaseidlesec", m_secUi->lockDatabaseIdleSpinBox->value()); config()->set("security/passwordscleartext", m_secUi->passwordCleartextCheckBox->isChecked()); config()->set("security/autotypeask", m_secUi->autoTypeAskCheckBox->isChecked()); Q_EMIT editFinished(true); } void SettingsWidget::reject() { // register the old key again as it might have changed if (m_globalAutoTypeKey > 0 && m_globalAutoTypeModifiers > 0) { autoType()->registerGlobalShortcut(m_globalAutoTypeKey, m_globalAutoTypeModifiers); } Q_EMIT editFinished(false); } void SettingsWidget::enableAutoSaveOnExit(bool checked) { m_generalUi->autoSaveOnExitCheckBox->setEnabled(!checked); } keepassx-2.0.3/src/gui/SettingsWidget.h000066400000000000000000000030201276304217300200270ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SETTINGSWIDGET_H #define KEEPASSX_SETTINGSWIDGET_H #include "gui/EditWidget.h" namespace Ui { class SettingsWidgetGeneral; class SettingsWidgetSecurity; } class SettingsWidget : public EditWidget { Q_OBJECT public: explicit SettingsWidget(QWidget* parent = Q_NULLPTR); ~SettingsWidget(); void loadSettings(); Q_SIGNALS: void editFinished(bool accepted); private Q_SLOTS: void saveSettings(); void reject(); void enableAutoSaveOnExit(bool checked); private: QWidget* const m_secWidget; QWidget* const m_generalWidget; const QScopedPointer m_secUi; const QScopedPointer m_generalUi; Qt::Key m_globalAutoTypeKey; Qt::KeyboardModifiers m_globalAutoTypeModifiers; }; #endif // KEEPASSX_SETTINGSWIDGET_H keepassx-2.0.3/src/gui/SettingsWidgetGeneral.ui000066400000000000000000000077761276304217300215410ustar00rootroot00000000000000 SettingsWidgetGeneral 0 0 456 313 QFormLayout::AllNonFixedFieldsGrow Remember last databases true Remember last key files true Open previous databases on startup Automatically save on exit Automatically save after every change Minimize when copying to clipboard Use group icon on entry creation Global Auto-Type shortcut Use entry title to match windows for global auto-type Language Show a system tray icon false Hide window to system tray when minimized ShortcutWidget QLineEdit
autotype/ShortcutWidget.h
rememberLastDatabasesCheckBox rememberLastKeyFilesCheckBox openPreviousDatabasesOnStartupCheckBox autoSaveOnExitCheckBox autoSaveAfterEveryChangeCheckBox minimizeOnCopyCheckBox autoTypeShortcutWidget
keepassx-2.0.3/src/gui/SettingsWidgetSecurity.ui000066400000000000000000000042321276304217300217530ustar00rootroot00000000000000 SettingsWidgetSecurity 0 0 374 303 Clear clipboard after false sec 1 999 Lock databases after inactivity of false sec 10 9999 Show passwords in cleartext by default Always ask before performing auto-type clearClipboardCheckBox clearClipboardSpinBox keepassx-2.0.3/src/gui/SortFilterHideProxyModel.cpp000066400000000000000000000023521276304217300223370ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SortFilterHideProxyModel.h" SortFilterHideProxyModel::SortFilterHideProxyModel(QObject* parent) : QSortFilterProxyModel(parent) { } void SortFilterHideProxyModel::hideColumn(int column, bool hide) { m_hiddenColumns.resize(column + 1); m_hiddenColumns[column] = hide; invalidateFilter(); } bool SortFilterHideProxyModel::filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const { Q_UNUSED(sourceParent); return sourceColumn >= m_hiddenColumns.size() || !m_hiddenColumns.at(sourceColumn); } keepassx-2.0.3/src/gui/SortFilterHideProxyModel.h000066400000000000000000000024041276304217300220020ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SORTFILTERHIDEPROXYMODEL_H #define KEEPASSX_SORTFILTERHIDEPROXYMODEL_H #include #include #include "core/Global.h" class SortFilterHideProxyModel : public QSortFilterProxyModel { Q_OBJECT public: explicit SortFilterHideProxyModel(QObject* parent = Q_NULLPTR); void hideColumn(int column, bool hide); protected: bool filterAcceptsColumn(int sourceColumn, const QModelIndex& sourceParent) const Q_DECL_OVERRIDE; private: QBitArray m_hiddenColumns; }; #endif // KEEPASSX_SORTFILTERHIDEPROXYMODEL_H keepassx-2.0.3/src/gui/UnlockDatabaseWidget.cpp000066400000000000000000000023551276304217300214540ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "UnlockDatabaseWidget.h" #include "ui_DatabaseOpenWidget.h" #include "core/Database.h" #include "gui/MessageBox.h" UnlockDatabaseWidget::UnlockDatabaseWidget(QWidget* parent) : DatabaseOpenWidget(parent) { m_ui->labelHeadline->setText(tr("Unlock database")); } void UnlockDatabaseWidget::clearForms() { m_ui->editPassword->clear(); m_ui->comboKeyFile->clear(); m_ui->checkPassword->setChecked(false); m_ui->checkKeyFile->setChecked(false); m_ui->buttonTogglePassword->setChecked(false); m_db = Q_NULLPTR; } keepassx-2.0.3/src/gui/UnlockDatabaseWidget.h000066400000000000000000000020201276304217300211060ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_UNLOCKDATABASEWIDGET_H #define KEEPASSX_UNLOCKDATABASEWIDGET_H #include "gui/DatabaseOpenWidget.h" class UnlockDatabaseWidget : public DatabaseOpenWidget { Q_OBJECT public: explicit UnlockDatabaseWidget(QWidget* parent = Q_NULLPTR); void clearForms(); }; #endif // KEEPASSX_UNLOCKDATABASEWIDGET_H keepassx-2.0.3/src/gui/WelcomeWidget.cpp000066400000000000000000000016521276304217300201660ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "WelcomeWidget.h" #include "ui_WelcomeWidget.h" WelcomeWidget::WelcomeWidget(QWidget* parent) : QWidget(parent) , m_ui(new Ui::WelcomeWidget()) { m_ui->setupUi(this); } WelcomeWidget::~WelcomeWidget() { } keepassx-2.0.3/src/gui/WelcomeWidget.h000066400000000000000000000021211276304217300176230ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_WELCOMEWIDGET_H #define KEEPASSX_WELCOMEWIDGET_H #include #include "core/Global.h" namespace Ui { class WelcomeWidget; } class WelcomeWidget : public QWidget { Q_OBJECT public: explicit WelcomeWidget(QWidget* parent = Q_NULLPTR); ~WelcomeWidget(); private: const QScopedPointer m_ui; }; #endif // KEEPASSX_WELCOMEWIDGET_H keepassx-2.0.3/src/gui/WelcomeWidget.ui000066400000000000000000000007521276304217300200210ustar00rootroot00000000000000 WelcomeWidget Welcome! Qt::AlignCenter keepassx-2.0.3/src/gui/entry/000077500000000000000000000000001276304217300160605ustar00rootroot00000000000000keepassx-2.0.3/src/gui/entry/AutoTypeAssociationsModel.cpp000066400000000000000000000073271276304217300237100ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "AutoTypeAssociationsModel.h" AutoTypeAssociationsModel::AutoTypeAssociationsModel(QObject* parent) : QAbstractListModel(parent) , m_autoTypeAssociations(Q_NULLPTR) { } void AutoTypeAssociationsModel::setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations) { beginResetModel(); if (m_autoTypeAssociations) { m_autoTypeAssociations->disconnect(this); } m_autoTypeAssociations = autoTypeAssociations; if (m_autoTypeAssociations) { connect(m_autoTypeAssociations, SIGNAL(dataChanged(int)), SLOT(associationChange(int))); connect(m_autoTypeAssociations, SIGNAL(aboutToAdd(int)), SLOT(associationAboutToAdd(int))); connect(m_autoTypeAssociations, SIGNAL(added(int)), SLOT(associationAdd())); connect(m_autoTypeAssociations, SIGNAL(aboutToRemove(int)), SLOT(associationAboutToRemove(int))); connect(m_autoTypeAssociations, SIGNAL(removed(int)), SLOT(associationRemove())); connect(m_autoTypeAssociations, SIGNAL(aboutToReset()), SLOT(aboutToReset())); connect(m_autoTypeAssociations, SIGNAL(reset()), SLOT(reset())); } endResetModel(); } int AutoTypeAssociationsModel::rowCount(const QModelIndex& parent) const { if (!m_autoTypeAssociations || parent.isValid()) { return 0; } else { return m_autoTypeAssociations->size(); } } int AutoTypeAssociationsModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 2; } QVariant AutoTypeAssociationsModel::headerData(int section, Qt::Orientation orientation, int role) const { if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole)) { if (section == 0) { return tr("Window"); } else { return tr("Sequence"); } } else { return QVariant(); } } QVariant AutoTypeAssociationsModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole) { if (index.column() == 0) { return m_autoTypeAssociations->get(index.row()).window; } else { QString sequence = m_autoTypeAssociations->get(index.row()).sequence; if (sequence.isEmpty()) { sequence = tr("Default sequence"); } return sequence; } } else { return QVariant(); } } void AutoTypeAssociationsModel::associationChange(int i) { Q_EMIT dataChanged(index(i, 0), index(i, columnCount() - 1)); } void AutoTypeAssociationsModel::associationAboutToAdd(int i) { beginInsertRows(QModelIndex(), i, i); } void AutoTypeAssociationsModel::associationAdd() { endInsertRows(); } void AutoTypeAssociationsModel::associationAboutToRemove(int i) { beginRemoveRows(QModelIndex(), i, i); } void AutoTypeAssociationsModel::associationRemove() { endRemoveRows(); } void AutoTypeAssociationsModel::aboutToReset() { beginResetModel(); } void AutoTypeAssociationsModel::reset() { endResetModel(); } keepassx-2.0.3/src/gui/entry/AutoTypeAssociationsModel.h000066400000000000000000000034741276304217300233540ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H #define KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H #include #include "core/AutoTypeAssociations.h" class EntryAttributes; class AutoTypeAssociationsModel : public QAbstractListModel { Q_OBJECT public: explicit AutoTypeAssociationsModel(QObject* parent = Q_NULLPTR); void setAutoTypeAssociations(AutoTypeAssociations* autoTypeAssociations); int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; public Q_SLOTS: void associationChange(int i); void associationAboutToAdd(int i); void associationAdd(); void associationAboutToRemove(int i); void associationRemove(); void aboutToReset(); void reset(); private: AutoTypeAssociations* m_autoTypeAssociations; }; #endif // KEEPASSX_AUTOTYPEASSOCIATIONSMODEL_H keepassx-2.0.3/src/gui/entry/EditEntryWidget.cpp000066400000000000000000000743241276304217300216510ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EditEntryWidget.h" #include "ui_EditEntryWidgetAdvanced.h" #include "ui_EditEntryWidgetAutoType.h" #include "ui_EditEntryWidgetHistory.h" #include "ui_EditEntryWidgetMain.h" #include #include #include #include #include #include "core/Config.h" #include "core/Database.h" #include "core/Entry.h" #include "core/FilePath.h" #include "core/Metadata.h" #include "core/TimeDelta.h" #include "core/Tools.h" #include "gui/EditWidgetIcons.h" #include "gui/EditWidgetProperties.h" #include "gui/FileDialog.h" #include "gui/MessageBox.h" #include "gui/entry/AutoTypeAssociationsModel.h" #include "gui/entry/EntryAttachmentsModel.h" #include "gui/entry/EntryAttributesModel.h" #include "gui/entry/EntryHistoryModel.h" EditEntryWidget::EditEntryWidget(QWidget* parent) : EditWidget(parent) , m_entry(Q_NULLPTR) , m_mainUi(new Ui::EditEntryWidgetMain()) , m_advancedUi(new Ui::EditEntryWidgetAdvanced()) , m_autoTypeUi(new Ui::EditEntryWidgetAutoType()) , m_historyUi(new Ui::EditEntryWidgetHistory()) , m_mainWidget(new QWidget()) , m_advancedWidget(new QWidget()) , m_iconsWidget(new EditWidgetIcons()) , m_autoTypeWidget(new QWidget()) , m_editWidgetProperties(new EditWidgetProperties()) , m_historyWidget(new QWidget()) , m_entryAttachments(new EntryAttachments(this)) , m_attachmentsModel(new EntryAttachmentsModel(m_advancedWidget)) , m_entryAttributes(new EntryAttributes(this)) , m_attributesModel(new EntryAttributesModel(m_advancedWidget)) , m_historyModel(new EntryHistoryModel(this)) , m_sortModel(new QSortFilterProxyModel(this)) , m_autoTypeAssoc(new AutoTypeAssociations(this)) , m_autoTypeAssocModel(new AutoTypeAssociationsModel(this)) , m_autoTypeDefaultSequenceGroup(new QButtonGroup(this)) , m_autoTypeWindowSequenceGroup(new QButtonGroup(this)) { setupMain(); setupAdvanced(); setupIcon(); setupAutoType(); setupProperties(); setupHistory(); connect(this, SIGNAL(accepted()), SLOT(saveEntry())); connect(this, SIGNAL(rejected()), SLOT(cancel())); } EditEntryWidget::~EditEntryWidget() { } void EditEntryWidget::setupMain() { m_mainUi->setupUi(m_mainWidget); add(tr("Entry"), m_mainWidget); m_mainUi->togglePasswordButton->setIcon(filePath()->onOffIcon("actions", "password-show")); connect(m_mainUi->togglePasswordButton, SIGNAL(toggled(bool)), m_mainUi->passwordEdit, SLOT(setShowPassword(bool))); connect(m_mainUi->tooglePasswordGeneratorButton, SIGNAL(toggled(bool)), SLOT(togglePasswordGeneratorButton(bool))); connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool))); m_mainUi->passwordRepeatEdit->enableVerifyMode(m_mainUi->passwordEdit); connect(m_mainUi->passwordGenerator, SIGNAL(newPassword(QString)), SLOT(setGeneratedPassword(QString))); m_mainUi->expirePresets->setMenu(createPresetsMenu()); connect(m_mainUi->expirePresets->menu(), SIGNAL(triggered(QAction*)), this, SLOT(useExpiryPreset(QAction*))); m_mainUi->passwordGenerator->hide(); m_mainUi->passwordGenerator->reset(); } void EditEntryWidget::setupAdvanced() { m_advancedUi->setupUi(m_advancedWidget); add(tr("Advanced"), m_advancedWidget); m_attachmentsModel->setEntryAttachments(m_entryAttachments); m_advancedUi->attachmentsView->setModel(m_attachmentsModel); connect(m_advancedUi->attachmentsView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(updateAttachmentButtonsEnabled(QModelIndex))); connect(m_advancedUi->attachmentsView, SIGNAL(doubleClicked(QModelIndex)), SLOT(openAttachment(QModelIndex))); connect(m_advancedUi->saveAttachmentButton, SIGNAL(clicked()), SLOT(saveCurrentAttachment())); connect(m_advancedUi->openAttachmentButton, SIGNAL(clicked()), SLOT(openCurrentAttachment())); connect(m_advancedUi->addAttachmentButton, SIGNAL(clicked()), SLOT(insertAttachment())); connect(m_advancedUi->removeAttachmentButton, SIGNAL(clicked()), SLOT(removeCurrentAttachment())); m_attributesModel->setEntryAttributes(m_entryAttributes); m_advancedUi->attributesView->setModel(m_attributesModel); connect(m_advancedUi->addAttributeButton, SIGNAL(clicked()), SLOT(insertAttribute())); connect(m_advancedUi->editAttributeButton, SIGNAL(clicked()), SLOT(editCurrentAttribute())); connect(m_advancedUi->removeAttributeButton, SIGNAL(clicked()), SLOT(removeCurrentAttribute())); connect(m_advancedUi->attributesView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(updateCurrentAttribute())); } void EditEntryWidget::setupIcon() { add(tr("Icon"), m_iconsWidget); } void EditEntryWidget::setupAutoType() { m_autoTypeUi->setupUi(m_autoTypeWidget); add(tr("Auto-Type"), m_autoTypeWidget); m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton); m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton); m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->defaultWindowSequenceButton); m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton); m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc); m_autoTypeUi->assocView->setModel(m_autoTypeAssocModel); m_autoTypeUi->assocView->setColumnHidden(1, true); connect(m_autoTypeUi->enableButton, SIGNAL(toggled(bool)), SLOT(updateAutoTypeEnabled())); connect(m_autoTypeUi->customSequenceButton, SIGNAL(toggled(bool)), m_autoTypeUi->sequenceEdit, SLOT(setEnabled(bool))); connect(m_autoTypeUi->customWindowSequenceButton, SIGNAL(toggled(bool)), m_autoTypeUi->windowSequenceEdit, SLOT(setEnabled(bool))); connect(m_autoTypeUi->assocAddButton, SIGNAL(clicked()), SLOT(insertAutoTypeAssoc())); connect(m_autoTypeUi->assocRemoveButton, SIGNAL(clicked()), SLOT(removeAutoTypeAssoc())); connect(m_autoTypeUi->assocView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), SLOT(updateAutoTypeEnabled())); connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(updateAutoTypeEnabled())); connect(m_autoTypeUi->assocView->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), SLOT(loadCurrentAssoc(QModelIndex))); connect(m_autoTypeAssocModel, SIGNAL(modelReset()), SLOT(clearCurrentAssoc())); connect(m_autoTypeUi->windowTitleCombo, SIGNAL(editTextChanged(QString)), SLOT(applyCurrentAssoc())); connect(m_autoTypeUi->defaultWindowSequenceButton, SIGNAL(toggled(bool)), SLOT(applyCurrentAssoc())); connect(m_autoTypeUi->windowSequenceEdit, SIGNAL(textChanged(QString)), SLOT(applyCurrentAssoc())); } void EditEntryWidget::setupProperties() { add(tr("Properties"), m_editWidgetProperties); } void EditEntryWidget::setupHistory() { m_historyUi->setupUi(m_historyWidget); add(tr("History"), m_historyWidget); m_sortModel->setSourceModel(m_historyModel); m_sortModel->setDynamicSortFilter(true); m_sortModel->setSortLocaleAware(true); m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_sortModel->setSortRole(Qt::UserRole); m_historyUi->historyView->setModel(m_sortModel); m_historyUi->historyView->setRootIsDecorated(false); connect(m_historyUi->historyView, SIGNAL(activated(QModelIndex)), SLOT(histEntryActivated(QModelIndex))); connect(m_historyUi->historyView->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(updateHistoryButtons(QModelIndex,QModelIndex))); connect(m_historyUi->showButton, SIGNAL(clicked()), SLOT(showHistoryEntry())); connect(m_historyUi->restoreButton, SIGNAL(clicked()), SLOT(restoreHistoryEntry())); connect(m_historyUi->deleteButton, SIGNAL(clicked()), SLOT(deleteHistoryEntry())); connect(m_historyUi->deleteAllButton, SIGNAL(clicked()), SLOT(deleteAllHistoryEntries())); } void EditEntryWidget::emitHistoryEntryActivated(const QModelIndex& index) { Q_ASSERT(!m_history); Entry* entry = m_historyModel->entryFromIndex(index); Q_EMIT historyEntryActivated(entry); } void EditEntryWidget::histEntryActivated(const QModelIndex& index) { Q_ASSERT(!m_history); QModelIndex indexMapped = m_sortModel->mapToSource(index); if (indexMapped.isValid()) { emitHistoryEntryActivated(indexMapped); } } void EditEntryWidget::updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous) { Q_UNUSED(previous); if (current.isValid()) { m_historyUi->showButton->setEnabled(true); m_historyUi->restoreButton->setEnabled(true); m_historyUi->deleteButton->setEnabled(true); } else { m_historyUi->showButton->setEnabled(false); m_historyUi->restoreButton->setEnabled(false); m_historyUi->deleteButton->setEnabled(false); } } void EditEntryWidget::useExpiryPreset(QAction* action) { m_mainUi->expireCheck->setChecked(true); TimeDelta delta = action->data().value(); QDateTime now = Tools::currentDateTimeUtc().toLocalTime(); QDateTime expiryDateTime = now + delta; m_mainUi->expireDatePicker->setDateTime(expiryDateTime); } void EditEntryWidget::updateAttachmentButtonsEnabled(const QModelIndex& current) { bool enable = current.isValid(); m_advancedUi->saveAttachmentButton->setEnabled(enable); m_advancedUi->openAttachmentButton->setEnabled(enable); m_advancedUi->removeAttachmentButton->setEnabled(enable && !m_history); } QString EditEntryWidget::entryTitle() const { if (m_entry) { return m_entry->title(); } else { return QString(); } } void EditEntryWidget::loadEntry(Entry* entry, bool create, bool history, const QString& parentName, Database* database) { m_entry = entry; m_database = database; m_create = create; m_history = history; if (history) { setHeadline(QString("%1 > %2").arg(parentName, tr("Entry history"))); } else { if (create) { setHeadline(QString("%1 > %2").arg(parentName, tr("Add entry"))); } else { setHeadline(QString("%1 > %2 > %3").arg(parentName, entry->title(), tr("Edit entry"))); } } setForms(entry); setReadOnly(m_history); setCurrentRow(0); setRowHidden(m_historyWidget, m_history); } void EditEntryWidget::setForms(const Entry* entry, bool restore) { m_mainUi->titleEdit->setReadOnly(m_history); m_mainUi->usernameEdit->setReadOnly(m_history); m_mainUi->urlEdit->setReadOnly(m_history); m_mainUi->passwordEdit->setReadOnly(m_history); m_mainUi->passwordRepeatEdit->setReadOnly(m_history); m_mainUi->expireCheck->setEnabled(!m_history); m_mainUi->expireDatePicker->setReadOnly(m_history); m_mainUi->notesEdit->setReadOnly(m_history); m_mainUi->tooglePasswordGeneratorButton->setChecked(false); m_mainUi->tooglePasswordGeneratorButton->setDisabled(m_history); m_mainUi->passwordGenerator->reset(); m_advancedUi->addAttachmentButton->setEnabled(!m_history); updateAttachmentButtonsEnabled(m_advancedUi->attachmentsView->currentIndex()); m_advancedUi->addAttributeButton->setEnabled(!m_history); m_advancedUi->editAttributeButton->setEnabled(false); m_advancedUi->removeAttributeButton->setEnabled(false); m_advancedUi->attributesEdit->setReadOnly(m_history); QAbstractItemView::EditTriggers editTriggers; if (m_history) { editTriggers = QAbstractItemView::NoEditTriggers; } else { editTriggers = QAbstractItemView::DoubleClicked; } m_advancedUi->attributesView->setEditTriggers(editTriggers); m_iconsWidget->setEnabled(!m_history); m_autoTypeUi->sequenceEdit->setReadOnly(m_history); m_autoTypeUi->windowTitleCombo->lineEdit()->setReadOnly(m_history); m_autoTypeUi->windowSequenceEdit->setReadOnly(m_history); m_historyWidget->setEnabled(!m_history); m_mainUi->titleEdit->setText(entry->title()); m_mainUi->usernameEdit->setText(entry->username()); m_mainUi->urlEdit->setText(entry->url()); m_mainUi->passwordEdit->setText(entry->password()); m_mainUi->passwordRepeatEdit->setText(entry->password()); m_mainUi->expireCheck->setChecked(entry->timeInfo().expires()); m_mainUi->expireDatePicker->setDateTime(entry->timeInfo().expiryTime().toLocalTime()); m_mainUi->expirePresets->setEnabled(!m_history); m_mainUi->togglePasswordButton->setChecked(config()->get("security/passwordscleartext").toBool()); m_mainUi->notesEdit->setPlainText(entry->notes()); m_entryAttachments->copyDataFrom(entry->attachments()); m_entryAttributes->copyCustomKeysFrom(entry->attributes()); if (m_attributesModel->rowCount() != 0) { m_advancedUi->attributesView->setCurrentIndex(m_attributesModel->index(0, 0)); } else { m_advancedUi->attributesEdit->setPlainText(""); m_advancedUi->attributesEdit->setEnabled(false); } IconStruct iconStruct; iconStruct.uuid = entry->iconUuid(); iconStruct.number = entry->iconNumber(); m_iconsWidget->load(entry->uuid(), m_database, iconStruct); m_autoTypeUi->enableButton->setChecked(entry->autoTypeEnabled()); if (entry->defaultAutoTypeSequence().isEmpty()) { m_autoTypeUi->inheritSequenceButton->setChecked(true); m_autoTypeUi->sequenceEdit->setText(""); } else { m_autoTypeUi->customSequenceButton->setChecked(true); m_autoTypeUi->sequenceEdit->setText(entry->defaultAutoTypeSequence()); } m_autoTypeUi->windowTitleCombo->lineEdit()->clear(); m_autoTypeUi->defaultWindowSequenceButton->setChecked(true); m_autoTypeUi->windowSequenceEdit->setText(""); m_autoTypeAssoc->copyDataFrom(entry->autoTypeAssociations()); if (m_autoTypeAssoc->size() != 0) { m_autoTypeUi->assocView->setCurrentIndex(m_autoTypeAssocModel->index(0, 0)); } if (!m_history) { m_autoTypeUi->windowTitleCombo->refreshWindowList(); } updateAutoTypeEnabled(); m_editWidgetProperties->setFields(entry->timeInfo(), entry->uuid()); if (!m_history && !restore) { m_historyModel->setEntries(entry->historyItems()); m_historyUi->historyView->sortByColumn(0, Qt::DescendingOrder); } if (m_historyModel->rowCount() > 0) { m_historyUi->deleteAllButton->setEnabled(true); } else { m_historyUi->deleteAllButton->setEnabled(false); } updateHistoryButtons(m_historyUi->historyView->currentIndex(), QModelIndex()); m_mainUi->titleEdit->setFocus(); } void EditEntryWidget::saveEntry() { if (m_history) { clear(); Q_EMIT editFinished(false); return; } if (!passwordsEqual()) { MessageBox::warning(this, tr("Error"), tr("Different passwords supplied.")); return; } if (m_advancedUi->attributesView->currentIndex().isValid()) { QString key = m_attributesModel->keyByIndex(m_advancedUi->attributesView->currentIndex()); m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key)); } m_currentAttribute = QPersistentModelIndex(); // must stand before beginUpdate() // we don't want to create a new history item, if only the history has changed m_entry->removeHistoryItems(m_historyModel->deletedEntries()); if (!m_create) { m_entry->beginUpdate(); } m_entry->setTitle(m_mainUi->titleEdit->text()); m_entry->setUsername(m_mainUi->usernameEdit->text()); m_entry->setUrl(m_mainUi->urlEdit->text()); m_entry->setPassword(m_mainUi->passwordEdit->text()); m_entry->setExpires(m_mainUi->expireCheck->isChecked()); m_entry->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); m_entry->setNotes(m_mainUi->notesEdit->toPlainText()); m_entry->attributes()->copyCustomKeysFrom(m_entryAttributes); m_entry->attachments()->copyDataFrom(m_entryAttachments); IconStruct iconStruct = m_iconsWidget->save(); if (iconStruct.number < 0) { m_entry->setIcon(Entry::DefaultIconNumber); } else if (iconStruct.uuid.isNull()) { m_entry->setIcon(iconStruct.number); } else { m_entry->setIcon(iconStruct.uuid); } m_entry->setAutoTypeEnabled(m_autoTypeUi->enableButton->isChecked()); if (m_autoTypeUi->inheritSequenceButton->isChecked()) { m_entry->setDefaultAutoTypeSequence(QString()); } else { m_entry->setDefaultAutoTypeSequence(m_autoTypeUi->sequenceEdit->text()); } m_autoTypeAssoc->removeEmpty(); m_entry->autoTypeAssociations()->copyDataFrom(m_autoTypeAssoc); if (!m_create) { m_entry->endUpdate(); } clear(); Q_EMIT editFinished(true); } void EditEntryWidget::cancel() { if (m_history) { clear(); Q_EMIT editFinished(false); return; } if (!m_entry->iconUuid().isNull() && !m_database->metadata()->containsCustomIcon(m_entry->iconUuid())) { m_entry->setIcon(Entry::DefaultIconNumber); } clear(); Q_EMIT editFinished(false); } void EditEntryWidget::clear() { m_entry = Q_NULLPTR; m_database = Q_NULLPTR; m_entryAttributes->clear(); m_entryAttachments->clear(); m_autoTypeAssoc->clear(); m_historyModel->clear(); } void EditEntryWidget::togglePasswordGeneratorButton(bool checked) { m_mainUi->passwordGenerator->regeneratePassword(); m_mainUi->passwordGenerator->setVisible(checked); } bool EditEntryWidget::passwordsEqual() { return m_mainUi->passwordEdit->text() == m_mainUi->passwordRepeatEdit->text(); } void EditEntryWidget::setGeneratedPassword(const QString& password) { m_mainUi->passwordEdit->setText(password); m_mainUi->passwordRepeatEdit->setText(password); m_mainUi->tooglePasswordGeneratorButton->setChecked(false); } void EditEntryWidget::insertAttribute() { Q_ASSERT(!m_history); QString name = tr("New attribute"); int i = 1; while (m_entryAttributes->keys().contains(name)) { name = QString("%1 %2").arg(tr("New attribute")).arg(i); i++; } m_entryAttributes->set(name, ""); QModelIndex index = m_attributesModel->indexByKey(name); m_advancedUi->attributesView->setCurrentIndex(index); m_advancedUi->attributesView->edit(index); } void EditEntryWidget::editCurrentAttribute() { Q_ASSERT(!m_history); QModelIndex index = m_advancedUi->attributesView->currentIndex(); if (index.isValid()) { m_advancedUi->attributesView->edit(index); } } void EditEntryWidget::removeCurrentAttribute() { Q_ASSERT(!m_history); QModelIndex index = m_advancedUi->attributesView->currentIndex(); if (index.isValid()) { m_entryAttributes->remove(m_attributesModel->keyByIndex(index)); } } void EditEntryWidget::updateCurrentAttribute() { QModelIndex newIndex = m_advancedUi->attributesView->currentIndex(); if (m_history) { if (newIndex.isValid()) { QString key = m_attributesModel->keyByIndex(newIndex); m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); m_advancedUi->attributesEdit->setEnabled(true); } else { m_advancedUi->attributesEdit->setPlainText(""); m_advancedUi->attributesEdit->setEnabled(false); } } else { if (m_currentAttribute != newIndex) { if (m_currentAttribute.isValid()) { QString key = m_attributesModel->keyByIndex(m_currentAttribute); m_entryAttributes->set(key, m_advancedUi->attributesEdit->toPlainText(), m_entryAttributes->isProtected(key)); } if (newIndex.isValid()) { QString key = m_attributesModel->keyByIndex(newIndex); m_advancedUi->attributesEdit->setPlainText(m_entryAttributes->value(key)); m_advancedUi->attributesEdit->setEnabled(true); } else { m_advancedUi->attributesEdit->setPlainText(""); m_advancedUi->attributesEdit->setEnabled(false); } m_advancedUi->editAttributeButton->setEnabled(newIndex.isValid()); m_advancedUi->removeAttributeButton->setEnabled(newIndex.isValid()); m_currentAttribute = newIndex; } } } void EditEntryWidget::insertAttachment() { Q_ASSERT(!m_history); QString defaultDir = config()->get("LastAttachmentDir").toString(); if (defaultDir.isEmpty() || !QDir(defaultDir).exists()) { defaultDir = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); } QString filename = fileDialog()->getOpenFileName(this, tr("Select file"), defaultDir); if (filename.isEmpty() || !QFile::exists(filename)) { return; } QFile file(filename); if (!file.open(QIODevice::ReadOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to open file").append(":\n").append(file.errorString())); return; } QByteArray data; if (!Tools::readAllFromDevice(&file, data)) { MessageBox::warning(this, tr("Error"), tr("Unable to open file").append(":\n").append(file.errorString())); return; } m_entryAttachments->set(QFileInfo(filename).fileName(), data); } void EditEntryWidget::saveCurrentAttachment() { QModelIndex index = m_advancedUi->attachmentsView->currentIndex(); if (!index.isValid()) { return; } QString filename = m_attachmentsModel->keyByIndex(index); QString defaultDirName = config()->get("LastAttachmentDir").toString(); if (defaultDirName.isEmpty() || !QDir(defaultDirName).exists()) { defaultDirName = QDesktopServices::storageLocation(QDesktopServices::DocumentsLocation); } QDir dir(defaultDirName); QString savePath = fileDialog()->getSaveFileName(this, tr("Save attachment"), dir.filePath(filename)); if (!savePath.isEmpty()) { QByteArray attachmentData = m_entryAttachments->value(filename); QFile file(savePath); if (!file.open(QIODevice::WriteOnly)) { MessageBox::warning(this, tr("Error"), tr("Unable to save the attachment:\n").append(file.errorString())); return; } if (file.write(attachmentData) != attachmentData.size()) { MessageBox::warning(this, tr("Error"), tr("Unable to save the attachment:\n").append(file.errorString())); return; } } } void EditEntryWidget::openAttachment(const QModelIndex& index) { if (!index.isValid()) { Q_ASSERT(false); return; } QString filename = m_attachmentsModel->keyByIndex(index); QByteArray attachmentData = m_entryAttachments->value(filename); // tmp file will be removed once the database (or the application) has been closed QString tmpFileTemplate = QDir::temp().absoluteFilePath(QString("XXXXXX.").append(filename)); QTemporaryFile* file = new QTemporaryFile(tmpFileTemplate, this); if (!file->open()) { MessageBox::warning(this, tr("Error"), tr("Unable to save the attachment:\n").append(file->errorString())); return; } if (file->write(attachmentData) != attachmentData.size()) { MessageBox::warning(this, tr("Error"), tr("Unable to save the attachment:\n").append(file->errorString())); return; } if (!file->flush()) { MessageBox::warning(this, tr("Error"), tr("Unable to save the attachment:\n").append(file->errorString())); return; } file->close(); QDesktopServices::openUrl(QUrl::fromLocalFile(file->fileName())); } void EditEntryWidget::openCurrentAttachment() { QModelIndex index = m_advancedUi->attachmentsView->currentIndex(); openAttachment(index); } void EditEntryWidget::removeCurrentAttachment() { Q_ASSERT(!m_history); QModelIndex index = m_advancedUi->attachmentsView->currentIndex(); if (!index.isValid()) { return; } QString key = m_attachmentsModel->keyByIndex(index); m_entryAttachments->remove(key); } void EditEntryWidget::updateAutoTypeEnabled() { bool autoTypeEnabled = m_autoTypeUi->enableButton->isChecked(); bool validIndex = m_autoTypeUi->assocView->currentIndex().isValid() && m_autoTypeAssoc->size() != 0; m_autoTypeUi->enableButton->setEnabled(!m_history); m_autoTypeUi->inheritSequenceButton->setEnabled(!m_history && autoTypeEnabled); m_autoTypeUi->customSequenceButton->setEnabled(!m_history && autoTypeEnabled); m_autoTypeUi->sequenceEdit->setEnabled(autoTypeEnabled && m_autoTypeUi->customSequenceButton->isChecked()); m_autoTypeUi->assocView->setEnabled(autoTypeEnabled); m_autoTypeUi->assocAddButton->setEnabled(!m_history); m_autoTypeUi->assocRemoveButton->setEnabled(!m_history && validIndex); m_autoTypeUi->windowTitleLabel->setEnabled(autoTypeEnabled && validIndex); m_autoTypeUi->windowTitleCombo->setEnabled(autoTypeEnabled && validIndex); m_autoTypeUi->defaultWindowSequenceButton->setEnabled(!m_history && autoTypeEnabled && validIndex); m_autoTypeUi->customWindowSequenceButton->setEnabled(!m_history && autoTypeEnabled && validIndex); m_autoTypeUi->windowSequenceEdit->setEnabled(autoTypeEnabled && validIndex && m_autoTypeUi->customWindowSequenceButton->isChecked()); } void EditEntryWidget::insertAutoTypeAssoc() { AutoTypeAssociations::Association assoc; m_autoTypeAssoc->add(assoc); QModelIndex newIndex = m_autoTypeAssocModel->index(m_autoTypeAssoc->size() - 1, 0); m_autoTypeUi->assocView->setCurrentIndex(newIndex); loadCurrentAssoc(newIndex); m_autoTypeUi->windowTitleCombo->setFocus(); } void EditEntryWidget::removeAutoTypeAssoc() { QModelIndex currentIndex = m_autoTypeUi->assocView->currentIndex(); if (currentIndex.isValid()) { m_autoTypeAssoc->remove(currentIndex.row()); } } void EditEntryWidget::loadCurrentAssoc(const QModelIndex& current) { if (current.isValid() && current.row() < m_autoTypeAssoc->size()) { AutoTypeAssociations::Association assoc = m_autoTypeAssoc->get(current.row()); m_autoTypeUi->windowTitleCombo->setEditText(assoc.window); if (assoc.sequence.isEmpty()) { m_autoTypeUi->defaultWindowSequenceButton->setChecked(true); } else { m_autoTypeUi->customWindowSequenceButton->setChecked(true); } m_autoTypeUi->windowSequenceEdit->setText(assoc.sequence); updateAutoTypeEnabled(); } else { clearCurrentAssoc(); } } void EditEntryWidget::clearCurrentAssoc() { m_autoTypeUi->windowTitleCombo->setEditText(""); m_autoTypeUi->defaultWindowSequenceButton->setChecked(true); m_autoTypeUi->windowSequenceEdit->setText(""); updateAutoTypeEnabled(); } void EditEntryWidget::applyCurrentAssoc() { QModelIndex index = m_autoTypeUi->assocView->currentIndex(); if (!index.isValid() || m_autoTypeAssoc->size() == 0 || m_history) { return; } AutoTypeAssociations::Association assoc; assoc.window = m_autoTypeUi->windowTitleCombo->currentText(); if (m_autoTypeUi->customWindowSequenceButton->isChecked()) { assoc.sequence = m_autoTypeUi->windowSequenceEdit->text(); } m_autoTypeAssoc->update(index.row(), assoc); } void EditEntryWidget::showHistoryEntry() { QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); if (index.isValid()) { emitHistoryEntryActivated(index); } } void EditEntryWidget::restoreHistoryEntry() { QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); if (index.isValid()) { setForms(m_historyModel->entryFromIndex(index), true); } } void EditEntryWidget::deleteHistoryEntry() { QModelIndex index = m_sortModel->mapToSource(m_historyUi->historyView->currentIndex()); if (index.isValid()) { m_historyModel->deleteIndex(index); if (m_historyModel->rowCount() > 0) { m_historyUi->deleteAllButton->setEnabled(true); } else { m_historyUi->deleteAllButton->setEnabled(false); } } } void EditEntryWidget::deleteAllHistoryEntries() { m_historyModel->deleteAll(); if (m_historyModel->rowCount() > 0) { m_historyUi->deleteAllButton->setEnabled(true); } else { m_historyUi->deleteAllButton->setEnabled(false); } } QMenu* EditEntryWidget::createPresetsMenu() { QMenu* expirePresetsMenu = new QMenu(this); expirePresetsMenu->addAction(tr("Tomorrow"))->setData(QVariant::fromValue(TimeDelta::fromDays(1))); expirePresetsMenu->addSeparator(); expirePresetsMenu->addAction(tr("%n week(s)", 0, 1))->setData(QVariant::fromValue(TimeDelta::fromDays(7))); expirePresetsMenu->addAction(tr("%n week(s)", 0, 2))->setData(QVariant::fromValue(TimeDelta::fromDays(14))); expirePresetsMenu->addAction(tr("%n week(s)", 0, 3))->setData(QVariant::fromValue(TimeDelta::fromDays(21))); expirePresetsMenu->addSeparator(); expirePresetsMenu->addAction(tr("%n month(s)", 0, 1))->setData(QVariant::fromValue(TimeDelta::fromMonths(1))); expirePresetsMenu->addAction(tr("%n month(s)", 0, 3))->setData(QVariant::fromValue(TimeDelta::fromMonths(3))); expirePresetsMenu->addAction(tr("%n month(s)", 0, 6))->setData(QVariant::fromValue(TimeDelta::fromMonths(6))); expirePresetsMenu->addSeparator(); expirePresetsMenu->addAction(tr("1 year"))->setData(QVariant::fromValue(TimeDelta::fromYears(1))); return expirePresetsMenu; } keepassx-2.0.3/src/gui/entry/EditEntryWidget.h000066400000000000000000000106401276304217300213050ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITENTRYWIDGET_H #define KEEPASSX_EDITENTRYWIDGET_H #include #include #include "gui/EditWidget.h" class AutoTypeAssociations; class AutoTypeAssociationsModel; class Database; class EditWidgetIcons; class EditWidgetProperties; class Entry; class EntryAttachments; class EntryAttachmentsModel; class EntryAttributes; class EntryAttributesModel; class EntryHistoryModel; class QButtonGroup; class QMenu; class QSortFilterProxyModel; class QStackedLayout; namespace Ui { class EditEntryWidgetAdvanced; class EditEntryWidgetAutoType; class EditEntryWidgetMain; class EditEntryWidgetHistory; class EditWidget; } class EditEntryWidget : public EditWidget { Q_OBJECT public: explicit EditEntryWidget(QWidget* parent = Q_NULLPTR); ~EditEntryWidget(); void loadEntry(Entry* entry, bool create, bool history, const QString& parentName, Database* database); void createPresetsMenu(QMenu* expirePresetsMenu); QString entryTitle() const; void clear(); Q_SIGNALS: void editFinished(bool accepted); void historyEntryActivated(Entry* entry); private Q_SLOTS: void saveEntry(); void cancel(); void togglePasswordGeneratorButton(bool checked); void setGeneratedPassword(const QString& password); void insertAttribute(); void editCurrentAttribute(); void removeCurrentAttribute(); void updateCurrentAttribute(); void insertAttachment(); void saveCurrentAttachment(); void openAttachment(const QModelIndex& index); void openCurrentAttachment(); void removeCurrentAttachment(); void updateAutoTypeEnabled(); void insertAutoTypeAssoc(); void removeAutoTypeAssoc(); void loadCurrentAssoc(const QModelIndex& current); void clearCurrentAssoc(); void applyCurrentAssoc(); void showHistoryEntry(); void restoreHistoryEntry(); void deleteHistoryEntry(); void deleteAllHistoryEntries(); void emitHistoryEntryActivated(const QModelIndex& index); void histEntryActivated(const QModelIndex& index); void updateHistoryButtons(const QModelIndex& current, const QModelIndex& previous); void useExpiryPreset(QAction* action); void updateAttachmentButtonsEnabled(const QModelIndex& current); private: void setupMain(); void setupAdvanced(); void setupIcon(); void setupAutoType(); void setupProperties(); void setupHistory(); bool passwordsEqual(); void setForms(const Entry* entry, bool restore = false); QMenu* createPresetsMenu(); Entry* m_entry; Database* m_database; bool m_create; bool m_history; const QScopedPointer m_mainUi; const QScopedPointer m_advancedUi; const QScopedPointer m_autoTypeUi; const QScopedPointer m_historyUi; QWidget* const m_mainWidget; QWidget* const m_advancedWidget; EditWidgetIcons* const m_iconsWidget; QWidget* const m_autoTypeWidget; EditWidgetProperties* const m_editWidgetProperties; QWidget* const m_historyWidget; EntryAttachments* const m_entryAttachments; EntryAttachmentsModel* const m_attachmentsModel; EntryAttributes* const m_entryAttributes; EntryAttributesModel* const m_attributesModel; EntryHistoryModel* const m_historyModel; QSortFilterProxyModel* const m_sortModel; QPersistentModelIndex m_currentAttribute; AutoTypeAssociations* const m_autoTypeAssoc; AutoTypeAssociationsModel* const m_autoTypeAssocModel; QButtonGroup* const m_autoTypeDefaultSequenceGroup; QButtonGroup* const m_autoTypeWindowSequenceGroup; Q_DISABLE_COPY(EditEntryWidget) }; #endif // KEEPASSX_EDITENTRYWIDGET_H keepassx-2.0.3/src/gui/entry/EditEntryWidgetAdvanced.ui000066400000000000000000000113511276304217300231210ustar00rootroot00000000000000 EditEntryWidgetAdvanced 0 0 400 315 Additional attributes false Add false Edit false Remove Qt::Vertical 20 40 Attachments QListView::LeftToRight true Add false Remove false Open false Save Qt::Vertical 20 40 AttributesListView QListView
gui/entry/EditEntryWidget_p.h
attributesView attributesEdit addAttributeButton editAttributeButton removeAttributeButton attachmentsView addAttachmentButton removeAttachmentButton saveAttachmentButton
keepassx-2.0.3/src/gui/entry/EditEntryWidgetAutoType.ui000066400000000000000000000160041276304217300231660ustar00rootroot00000000000000 EditEntryWidgetAutoType 0 0 567 347 Enable Auto-Type for this entry Qt::Vertical QSizePolicy::Fixed 1 10 Inherit default Auto-Type sequence from the group Use custom Auto-Type sequence: Qt::Horizontal QSizePolicy::Fixed 20 1 false false true false 0 0 + false 0 0 - Qt::Horizontal 40 20 Window title: Qt::Vertical QSizePolicy::Fixed 1 10 Use default sequence Set custom sequence: Qt::Horizontal QSizePolicy::Fixed 20 1 false Qt::Vertical 20 40 WindowSelectComboBox QComboBox
autotype/WindowSelectComboBox.h
enableButton inheritSequenceButton customSequenceButton sequenceEdit assocView windowTitleCombo defaultWindowSequenceButton customWindowSequenceButton windowSequenceEdit assocAddButton assocRemoveButton
keepassx-2.0.3/src/gui/entry/EditEntryWidgetHistory.ui000066400000000000000000000035341276304217300230610ustar00rootroot00000000000000 EditEntryWidgetHistory 0 0 400 300 true false Show false Restore false Delete false Delete all historyView showButton restoreButton deleteButton deleteAllButton keepassx-2.0.3/src/gui/entry/EditEntryWidgetMain.ui000066400000000000000000000113641276304217300223040ustar00rootroot00000000000000 EditEntryWidgetMain 0 0 372 301 QFormLayout::ExpandingFieldsGrow Title: Username: Password: QLineEdit::Password true Repeat: QLineEdit::Password Gen. true URL: Expires false true Presets Notes: 0 1 PasswordGeneratorWidget QWidget
gui/PasswordGeneratorWidget.h
1
PasswordEdit QLineEdit
gui/PasswordEdit.h
titleEdit usernameEdit passwordEdit passwordRepeatEdit togglePasswordButton tooglePasswordGeneratorButton urlEdit expireCheck expireDatePicker expirePresets notesEdit
keepassx-2.0.3/src/gui/entry/EditEntryWidget_p.h000066400000000000000000000047431276304217300216330ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITENTRYWIDGET_P_H #define KEEPASSX_EDITENTRYWIDGET_P_H #include #include #include #include class CategoryListViewDelegate : public QStyledItemDelegate { public: explicit CategoryListViewDelegate(QObject* parent) : QStyledItemDelegate(parent) {} QSize sizeHint(const QStyleOptionViewItem& option, const QModelIndex& index) const { QSize size = QStyledItemDelegate::sizeHint(option, index); size.setHeight(qMax(size.height(), 22)); return size; } }; class CategoryListWidget : public QListWidget { public: explicit CategoryListWidget(QWidget* parent = 0) : QListWidget(parent) { setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); setItemDelegate(new CategoryListViewDelegate(this)); } virtual QSize sizeHint() const { QSize sizeHint = QListWidget::sizeHint(); int width = sizeHintForColumn(0) + frameWidth() * 2 + 5; if (verticalScrollBar()->isVisible()) { width += verticalScrollBar()->width(); } sizeHint.setWidth(width); return sizeHint; } }; class AttributesListView : public QListView { public: explicit AttributesListView(QWidget* parent = 0) : QListView(parent) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); setItemDelegate(new CategoryListViewDelegate(this)); } virtual QSize sizeHint() const { QSize sizeHint = QListView::sizeHint(); int width = sizeHintForColumn(0) + frameWidth() * 2 + 5; if (verticalScrollBar()->isVisible()) { width += verticalScrollBar()->width(); } sizeHint.setWidth(width); return sizeHint; } }; #endif // KEEPASSX_EDITENTRYWIDGET_P_H keepassx-2.0.3/src/gui/entry/EntryAttachmentsModel.cpp000066400000000000000000000072051276304217300230460ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryAttachmentsModel.h" #include "core/Entry.h" #include "core/Tools.h" EntryAttachmentsModel::EntryAttachmentsModel(QObject* parent) : QAbstractListModel(parent) , m_entryAttachments(Q_NULLPTR) { } void EntryAttachmentsModel::setEntryAttachments(EntryAttachments* entryAttachments) { beginResetModel(); if (m_entryAttachments) { m_entryAttachments->disconnect(this); } m_entryAttachments = entryAttachments; if (m_entryAttachments) { connect(m_entryAttachments, SIGNAL(keyModified(QString)), SLOT(attachmentChange(QString))); connect(m_entryAttachments, SIGNAL(aboutToBeAdded(QString)), SLOT(attachmentAboutToAdd(QString))); connect(m_entryAttachments, SIGNAL(added(QString)), SLOT(attachmentAdd())); connect(m_entryAttachments, SIGNAL(aboutToBeRemoved(QString)), SLOT(attachmentAboutToRemove(QString))); connect(m_entryAttachments, SIGNAL(removed(QString)), SLOT(attachmentRemove())); connect(m_entryAttachments, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); connect(m_entryAttachments, SIGNAL(reset()), SLOT(reset())); } endResetModel(); } int EntryAttachmentsModel::rowCount(const QModelIndex& parent) const { if (!m_entryAttachments || parent.isValid()) { return 0; } else { return m_entryAttachments->keys().size(); } } int EntryAttachmentsModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 1; } QVariant EntryAttachmentsModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole && index.column() == 0) { QString key = keyByIndex(index); return QString("%1 (%2)").arg(key, Tools::humanReadableFileSize(m_entryAttachments->value(key).size())); } else { return QVariant(); } } QString EntryAttachmentsModel::keyByIndex(const QModelIndex& index) const { if (!index.isValid()) { return QString(); } return m_entryAttachments->keys().at(index.row()); } void EntryAttachmentsModel::attachmentChange(const QString& key) { int row = m_entryAttachments->keys().indexOf(key); Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1)); } void EntryAttachmentsModel::attachmentAboutToAdd(const QString& key) { QList rows = m_entryAttachments->keys(); rows.append(key); qSort(rows); int row = rows.indexOf(key); beginInsertRows(QModelIndex(), row, row); } void EntryAttachmentsModel::attachmentAdd() { endInsertRows(); } void EntryAttachmentsModel::attachmentAboutToRemove(const QString& key) { int row = m_entryAttachments->keys().indexOf(key); beginRemoveRows(QModelIndex(), row, row); } void EntryAttachmentsModel::attachmentRemove() { endRemoveRows(); } void EntryAttachmentsModel::aboutToReset() { beginResetModel(); } void EntryAttachmentsModel::reset() { endResetModel(); } keepassx-2.0.3/src/gui/entry/EntryAttachmentsModel.h000066400000000000000000000033421276304217300225110ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYATTACHMENTSMODEL_H #define KEEPASSX_ENTRYATTACHMENTSMODEL_H #include #include "core/Global.h" class EntryAttachments; class EntryAttachmentsModel : public QAbstractListModel { Q_OBJECT public: explicit EntryAttachmentsModel(QObject* parent = Q_NULLPTR); void setEntryAttachments(EntryAttachments* entry); int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QString keyByIndex(const QModelIndex& index) const; private Q_SLOTS: void attachmentChange(const QString& key); void attachmentAboutToAdd(const QString& key); void attachmentAdd(); void attachmentAboutToRemove(const QString& key); void attachmentRemove(); void aboutToReset(); void reset(); private: EntryAttachments* m_entryAttachments; }; #endif // KEEPASSX_ENTRYATTACHMENTSMODEL_H keepassx-2.0.3/src/gui/entry/EntryAttributesModel.cpp000066400000000000000000000143241276304217300227210ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryAttributesModel.h" #include "core/Entry.h" #include "core/Tools.h" EntryAttributesModel::EntryAttributesModel(QObject* parent) : QAbstractListModel(parent) , m_entryAttributes(Q_NULLPTR) , m_nextRenameDataChange(false) { } void EntryAttributesModel::setEntryAttributes(EntryAttributes* entryAttributes) { beginResetModel(); if (m_entryAttributes) { m_entryAttributes->disconnect(this); } m_entryAttributes = entryAttributes; if (m_entryAttributes) { updateAttributes(); connect(m_entryAttributes, SIGNAL(customKeyModified(QString)), SLOT(attributeChange(QString))); connect(m_entryAttributes, SIGNAL(aboutToBeAdded(QString)), SLOT(attributeAboutToAdd(QString))); connect(m_entryAttributes, SIGNAL(added(QString)), SLOT(attributeAdd())); connect(m_entryAttributes, SIGNAL(aboutToBeRemoved(QString)), SLOT(attributeAboutToRemove(QString))); connect(m_entryAttributes, SIGNAL(removed(QString)), SLOT(attributeRemove())); connect(m_entryAttributes, SIGNAL(aboutToRename(QString,QString)), SLOT(attributeAboutToRename(QString,QString))); connect(m_entryAttributes, SIGNAL(renamed(QString,QString)), SLOT(attributeRename(QString,QString))); connect(m_entryAttributes, SIGNAL(aboutToBeReset()), SLOT(aboutToReset())); connect(m_entryAttributes, SIGNAL(reset()), SLOT(reset())); } endResetModel(); } int EntryAttributesModel::rowCount(const QModelIndex& parent) const { if (!m_entryAttributes || parent.isValid()) { return 0; } else { return m_attributes.size(); } } int EntryAttributesModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 1; } QVariant EntryAttributesModel::headerData(int section, Qt::Orientation orientation, int role) const { if ((orientation == Qt::Horizontal) && (role == Qt::DisplayRole) && (section == 0)) { return tr("Name"); } else { return QVariant(); } } QVariant EntryAttributesModel::data(const QModelIndex& index, int role) const { if (!index.isValid() || (role != Qt::DisplayRole && role != Qt::EditRole)) { return QVariant(); } return m_attributes.at(index.row()); } bool EntryAttributesModel::setData(const QModelIndex& index, const QVariant& value, int role) { if (!index.isValid() || role != Qt::EditRole || value.type() != QVariant::String || value.toString().isEmpty()) { return false; } QString oldKey = m_attributes.at(index.row()); QString newKey = value.toString(); if (EntryAttributes::isDefaultAttribute(newKey) || m_entryAttributes->keys().contains(newKey)) { return false; } m_entryAttributes->rename(oldKey, newKey); return true; } Qt::ItemFlags EntryAttributesModel::flags(const QModelIndex& index) const { if (!index.isValid()) { return Qt::NoItemFlags; } else { return QAbstractItemModel::flags(index) | Qt::ItemIsEditable; } } QModelIndex EntryAttributesModel::indexByKey(const QString& key) const { int row = m_attributes.indexOf(key); if (row == -1) { return QModelIndex(); } else { return index(row, 0); } } QString EntryAttributesModel::keyByIndex(const QModelIndex& index) const { if (!index.isValid()) { return QString(); } else { return m_attributes.at(index.row()); } } void EntryAttributesModel::attributeChange(const QString& key) { int row = m_attributes.indexOf(key); Q_ASSERT(row != -1); Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1)); } void EntryAttributesModel::attributeAboutToAdd(const QString& key) { QList rows = m_attributes; rows.append(key); qSort(rows); int row = rows.indexOf(key); beginInsertRows(QModelIndex(), row, row); } void EntryAttributesModel::attributeAdd() { updateAttributes(); endInsertRows(); } void EntryAttributesModel::attributeAboutToRemove(const QString& key) { int row = m_attributes.indexOf(key); beginRemoveRows(QModelIndex(), row, row); } void EntryAttributesModel::attributeRemove() { updateAttributes(); endRemoveRows(); } void EntryAttributesModel::attributeAboutToRename(const QString& oldKey, const QString& newKey) { int oldRow = m_attributes.indexOf(oldKey); QList rows = m_attributes; rows.removeOne(oldKey); rows.append(newKey); qSort(rows); int newRow = rows.indexOf(newKey); if (newRow > oldRow) { newRow++; } if (oldRow != newRow) { bool result = beginMoveRows(QModelIndex(), oldRow, oldRow, QModelIndex(), newRow); Q_UNUSED(result); Q_ASSERT(result); } else { m_nextRenameDataChange = true; } } void EntryAttributesModel::attributeRename(const QString& oldKey, const QString& newKey) { Q_UNUSED(oldKey); updateAttributes(); if (!m_nextRenameDataChange) { endMoveRows(); } else { m_nextRenameDataChange = false; QModelIndex keyIndex = index(m_attributes.indexOf(newKey), 0); Q_EMIT dataChanged(keyIndex, keyIndex); } } void EntryAttributesModel::aboutToReset() { beginResetModel(); } void EntryAttributesModel::reset() { updateAttributes(); endResetModel(); } void EntryAttributesModel::updateAttributes() { m_attributes.clear(); Q_FOREACH (const QString& key, m_entryAttributes->keys()) { if (!EntryAttributes::isDefaultAttribute(key)) { m_attributes.append(key); } } } keepassx-2.0.3/src/gui/entry/EntryAttributesModel.h000066400000000000000000000044641276304217300223720ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYATTRIBUTESMODEL_H #define KEEPASSX_ENTRYATTRIBUTESMODEL_H #include #include "core/Global.h" class EntryAttributes; class EntryAttributesModel : public QAbstractListModel { Q_OBJECT public: explicit EntryAttributesModel(QObject* parent = Q_NULLPTR); void setEntryAttributes(EntryAttributes* entryAttributes); int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) Q_DECL_OVERRIDE; Qt::ItemFlags flags(const QModelIndex& index) const Q_DECL_OVERRIDE; QModelIndex indexByKey(const QString& key) const; QString keyByIndex(const QModelIndex& index) const; private Q_SLOTS: void attributeChange(const QString& key); void attributeAboutToAdd(const QString& key); void attributeAdd(); void attributeAboutToRemove(const QString& key); void attributeRemove(); void attributeAboutToRename(const QString& oldKey, const QString& newKey); void attributeRename(const QString& oldKey, const QString& newKey); void aboutToReset(); void reset(); private: void updateAttributes(); EntryAttributes* m_entryAttributes; QList m_attributes; bool m_nextRenameDataChange; }; #endif // KEEPASSX_ENTRYATTRIBUTESMODEL_H keepassx-2.0.3/src/gui/entry/EntryHistoryModel.cpp000066400000000000000000000072131276304217300222330ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryHistoryModel.h" #include "core/Entry.h" EntryHistoryModel::EntryHistoryModel(QObject* parent) : QAbstractTableModel(parent) { } Entry* EntryHistoryModel::entryFromIndex(const QModelIndex& index) const { Q_ASSERT(index.isValid() && index.row() < m_historyEntries.size()); return m_historyEntries.at(index.row()); } int EntryHistoryModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 4; } int EntryHistoryModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { return m_historyEntries.count(); } else { return 0; } } QVariant EntryHistoryModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } if (role == Qt::DisplayRole || role == Qt::UserRole) { Entry* entry = entryFromIndex(index); TimeInfo timeInfo = entry->timeInfo(); QDateTime lastModificationLocalTime = timeInfo.lastModificationTime().toLocalTime(); switch (index.column()) { case 0: if (role == Qt::DisplayRole) { return lastModificationLocalTime.toString(Qt::SystemLocaleShortDate); } else { return lastModificationLocalTime; } case 1: return entry->title(); case 2: return entry->username(); case 3: return entry->url(); } } return QVariant(); } QVariant EntryHistoryModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case 0: return tr("Last modified"); case 1: return tr("Title"); case 2: return tr("Username"); case 3: return tr("URL"); } } return QVariant(); } void EntryHistoryModel::setEntries(const QList& entries) { beginResetModel(); m_historyEntries = entries; m_deletedHistoryEntries.clear(); endResetModel(); } void EntryHistoryModel::clear() { beginResetModel(); m_historyEntries.clear(); m_deletedHistoryEntries.clear(); endResetModel(); } QList EntryHistoryModel::deletedEntries() { return m_deletedHistoryEntries; } void EntryHistoryModel::deleteIndex(QModelIndex index) { if (index.isValid()) { Entry* entry = entryFromIndex(index); beginRemoveRows(QModelIndex(), m_historyEntries.indexOf(entry), m_historyEntries.indexOf(entry)); m_historyEntries.removeAll(entry); m_deletedHistoryEntries << entry; endRemoveRows(); } } void EntryHistoryModel::deleteAll() { Q_ASSERT(m_historyEntries.count() > 0); beginRemoveRows(QModelIndex(), 0, m_historyEntries.size() - 1); Q_FOREACH (Entry* entry, m_historyEntries) { m_deletedHistoryEntries << entry; } m_historyEntries.clear(); endRemoveRows(); } keepassx-2.0.3/src/gui/entry/EntryHistoryModel.h000066400000000000000000000032671276304217300217050ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYHISTORYMODEL_H #define KEEPASSX_ENTRYHISTORYMODEL_H #include #include "core/Global.h" class Entry; class EntryHistoryModel : public QAbstractTableModel { Q_OBJECT public: explicit EntryHistoryModel(QObject* parent = Q_NULLPTR); Entry* entryFromIndex(const QModelIndex& index) const; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE; void setEntries(const QList& entries); void clear(); QList deletedEntries(); void deleteIndex(QModelIndex index); void deleteAll(); private: QList m_historyEntries; QList m_deletedHistoryEntries; }; #endif // KEEPASSX_ENTRYHISTORYMODEL_H keepassx-2.0.3/src/gui/entry/EntryModel.cpp000066400000000000000000000166071276304217300206600ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryModel.h" #include #include #include "core/DatabaseIcons.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" EntryModel::EntryModel(QObject* parent) : QAbstractTableModel(parent) , m_group(Q_NULLPTR) { setSupportedDragActions(Qt::MoveAction | Qt::CopyAction); } Entry* EntryModel::entryFromIndex(const QModelIndex& index) const { Q_ASSERT(index.isValid() && index.row() < m_entries.size()); return m_entries.at(index.row()); } QModelIndex EntryModel::indexFromEntry(Entry* entry) const { int row = m_entries.indexOf(entry); Q_ASSERT(row != -1); return index(row, 1); } void EntryModel::setGroup(Group* group) { if (!group || group == m_group) { return; } beginResetModel(); severConnections(); m_group = group; m_allGroups.clear(); m_entries = group->entries(); m_orgEntries.clear(); makeConnections(group); endResetModel(); Q_EMIT switchedToGroupMode(); } void EntryModel::setEntryList(const QList& entries) { beginResetModel(); severConnections(); m_group = Q_NULLPTR; m_allGroups.clear(); m_entries = entries; m_orgEntries = entries; QSet databases; Q_FOREACH (Entry* entry, m_entries) { databases.insert(entry->group()->database()); } Q_FOREACH (Database* db, databases) { Q_ASSERT(db); Q_FOREACH (const Group* group, db->rootGroup()->groupsRecursive(true)) { m_allGroups.append(group); } if (db->metadata()->recycleBin()) { m_allGroups.removeOne(db->metadata()->recycleBin()); } } Q_FOREACH (const Group* group, m_allGroups) { makeConnections(group); } endResetModel(); Q_EMIT switchedToEntryListMode(); } int EntryModel::rowCount(const QModelIndex& parent) const { if (parent.isValid()) { return 0; } else { return m_entries.size(); } } int EntryModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 4; } QVariant EntryModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } Entry* entry = entryFromIndex(index); if (role == Qt::DisplayRole) { switch (index.column()) { case ParentGroup: if (entry->group()) { return entry->group()->name(); } break; case Title: return entry->title(); case Username: return entry->username(); case Url: return entry->url(); } } else if (role == Qt::DecorationRole) { switch (index.column()) { case ParentGroup: if (entry->group()) { return entry->group()->iconScaledPixmap(); } break; case Title: if (entry->isExpired()) { return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex); } else { return entry->iconScaledPixmap(); } } } else if (role == Qt::FontRole) { QFont font; if (entry->isExpired()) { font.setStrikeOut(true); } return font; } return QVariant(); } QVariant EntryModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { switch (section) { case ParentGroup: return tr("Group"); case Title: return tr("Title"); case Username: return tr("Username"); case Url: return tr("URL"); } } return QVariant(); } Qt::DropActions EntryModel::supportedDropActions() const { return 0; } Qt::ItemFlags EntryModel::flags(const QModelIndex& modelIndex) const { if (!modelIndex.isValid()) { return Qt::NoItemFlags; } else { return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDragEnabled; } } QStringList EntryModel::mimeTypes() const { QStringList types; types << QLatin1String("application/x-keepassx-entry"); return types; } QMimeData* EntryModel::mimeData(const QModelIndexList& indexes) const { if (indexes.isEmpty()) { return Q_NULLPTR; } QMimeData* data = new QMimeData(); QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); QSet seenEntries; Q_FOREACH (const QModelIndex& index, indexes) { if (!index.isValid()) { continue; } Entry* entry = entryFromIndex(index); if (!seenEntries.contains(entry)) { // make sure we don't add entries multiple times when we get indexes // with the same row but different columns stream << entry->group()->database()->uuid() << entry->uuid(); seenEntries.insert(entry); } } if (seenEntries.isEmpty()) { delete data; return Q_NULLPTR; } else { data->setData(mimeTypes().at(0), encoded); return data; } } void EntryModel::entryAboutToAdd(Entry* entry) { if (!m_group && !m_orgEntries.contains(entry)) { return; } beginInsertRows(QModelIndex(), m_entries.size(), m_entries.size()); if (!m_group) { m_entries.append(entry); } } void EntryModel::entryAdded(Entry* entry) { if (!m_group && !m_orgEntries.contains(entry)) { return; } if (m_group) { m_entries = m_group->entries(); } endInsertRows(); } void EntryModel::entryAboutToRemove(Entry* entry) { beginRemoveRows(QModelIndex(), m_entries.indexOf(entry), m_entries.indexOf(entry)); if (!m_group) { m_entries.removeAll(entry); } } void EntryModel::entryRemoved() { if (m_group) { m_entries = m_group->entries(); } endRemoveRows(); } void EntryModel::entryDataChanged(Entry* entry) { int row = m_entries.indexOf(entry); Q_EMIT dataChanged(index(row, 0), index(row, columnCount()-1)); } void EntryModel::severConnections() { if (m_group) { disconnect(m_group, Q_NULLPTR, this, Q_NULLPTR); } Q_FOREACH (const Group* group, m_allGroups) { disconnect(group, Q_NULLPTR, this, Q_NULLPTR); } } void EntryModel::makeConnections(const Group* group) { connect(group, SIGNAL(entryAboutToAdd(Entry*)), SLOT(entryAboutToAdd(Entry*))); connect(group, SIGNAL(entryAdded(Entry*)), SLOT(entryAdded(Entry*))); connect(group, SIGNAL(entryAboutToRemove(Entry*)), SLOT(entryAboutToRemove(Entry*))); connect(group, SIGNAL(entryRemoved(Entry*)), SLOT(entryRemoved())); connect(group, SIGNAL(entryDataChanged(Entry*)), SLOT(entryDataChanged(Entry*))); } keepassx-2.0.3/src/gui/entry/EntryModel.h000066400000000000000000000046721276304217300203240ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYMODEL_H #define KEEPASSX_ENTRYMODEL_H #include #include "core/Global.h" class Entry; class Group; class EntryModel : public QAbstractTableModel { Q_OBJECT public: enum ModelColumn { ParentGroup = 0, Title = 1, Username = 2, Url = 3 }; explicit EntryModel(QObject* parent = Q_NULLPTR); Entry* entryFromIndex(const QModelIndex& index) const; QModelIndex indexFromEntry(Entry* entry) const; int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; Qt::ItemFlags flags(const QModelIndex& modelIndex) const Q_DECL_OVERRIDE; QStringList mimeTypes() const Q_DECL_OVERRIDE; QMimeData* mimeData(const QModelIndexList& indexes) const Q_DECL_OVERRIDE; void setEntryList(const QList& entries); Q_SIGNALS: void switchedToEntryListMode(); void switchedToGroupMode(); public Q_SLOTS: void setGroup(Group* group); private Q_SLOTS: void entryAboutToAdd(Entry* entry); void entryAdded(Entry* entry); void entryAboutToRemove(Entry* entry); void entryRemoved(); void entryDataChanged(Entry* entry); private: void severConnections(); void makeConnections(const Group* group); Group* m_group; QList m_entries; QList m_orgEntries; QList m_allGroups; }; #endif // KEEPASSX_ENTRYMODEL_H keepassx-2.0.3/src/gui/entry/EntryView.cpp000066400000000000000000000105651276304217300205270ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EntryView.h" #include #include #include "gui/SortFilterHideProxyModel.h" EntryView::EntryView(QWidget* parent) : QTreeView(parent) , m_model(new EntryModel(this)) , m_sortModel(new SortFilterHideProxyModel(this)) , m_inEntryListMode(false) { m_sortModel->setSourceModel(m_model); m_sortModel->setDynamicSortFilter(true); m_sortModel->setSortLocaleAware(true); m_sortModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_sortModel->setSupportedDragActions(m_model->supportedDragActions()); QTreeView::setModel(m_sortModel); setUniformRowHeights(true); setRootIsDecorated(false); setAlternatingRowColors(true); setDragEnabled(true); setSortingEnabled(true); setSelectionMode(QAbstractItemView::ExtendedSelection); header()->setDefaultSectionSize(150); // QAbstractItemView::startDrag() uses this property as the default drag action setDefaultDropAction(Qt::MoveAction); connect(this, SIGNAL(doubleClicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); connect(selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), SIGNAL(entrySelectionChanged())); connect(m_model, SIGNAL(switchedToEntryListMode()), SLOT(switchToEntryListMode())); connect(m_model, SIGNAL(switchedToGroupMode()), SLOT(switchToGroupMode())); } void EntryView::keyPressEvent(QKeyEvent* event) { if ((event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) && currentIndex().isValid()) { emitEntryActivated(currentIndex()); } QTreeView::keyPressEvent(event); } void EntryView::setGroup(Group* group) { m_model->setGroup(group); setFirstEntryActive(); } void EntryView::setEntryList(const QList& entries) { m_model->setEntryList(entries); setFirstEntryActive(); } void EntryView::setFirstEntryActive() { if(m_model->rowCount() > 0) { QModelIndex index = m_sortModel->mapToSource(m_sortModel->index(0, 0)); setCurrentEntry(m_model->entryFromIndex(index)); } else { Q_EMIT entrySelectionChanged(); } } bool EntryView::inEntryListMode() { return m_inEntryListMode; } void EntryView::emitEntryActivated(const QModelIndex& index) { Entry* entry = entryFromIndex(index); Q_EMIT entryActivated(entry, static_cast(m_sortModel->mapToSource(index).column())); } void EntryView::setModel(QAbstractItemModel* model) { Q_UNUSED(model); Q_ASSERT(false); } Entry* EntryView::currentEntry() { QModelIndexList list = selectionModel()->selectedRows(); if (list.size() == 1) { return m_model->entryFromIndex(m_sortModel->mapToSource(list.first())); } else { return Q_NULLPTR; } } int EntryView::numberOfSelectedEntries() { return selectionModel()->selectedRows().size(); } void EntryView::setCurrentEntry(Entry* entry) { selectionModel()->setCurrentIndex(m_sortModel->mapFromSource(m_model->indexFromEntry(entry)), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); } Entry* EntryView::entryFromIndex(const QModelIndex& index) { if (index.isValid()) { return m_model->entryFromIndex(m_sortModel->mapToSource(index)); } else { return Q_NULLPTR; } } void EntryView::switchToEntryListMode() { m_sortModel->hideColumn(0, false); sortByColumn(1, Qt::AscendingOrder); // TODO: should probably be improved sortByColumn(0, Qt::AscendingOrder); m_inEntryListMode = true; } void EntryView::switchToGroupMode() { m_sortModel->hideColumn(0, true); sortByColumn(-1, Qt::AscendingOrder); sortByColumn(0, Qt::AscendingOrder); m_inEntryListMode = false; } keepassx-2.0.3/src/gui/entry/EntryView.h000066400000000000000000000035521276304217300201720ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_ENTRYVIEW_H #define KEEPASSX_ENTRYVIEW_H #include #include "core/Global.h" #include "gui/entry/EntryModel.h" class Entry; class EntryModel; class Group; class SortFilterHideProxyModel; class EntryView : public QTreeView { Q_OBJECT public: explicit EntryView(QWidget* parent = Q_NULLPTR); void setModel(QAbstractItemModel* model) Q_DECL_OVERRIDE; Entry* currentEntry(); void setCurrentEntry(Entry* entry); Entry* entryFromIndex(const QModelIndex& index); void setEntryList(const QList& entries); bool inEntryListMode(); int numberOfSelectedEntries(); void setFirstEntryActive(); public Q_SLOTS: void setGroup(Group* group); Q_SIGNALS: void entryActivated(Entry* entry, EntryModel::ModelColumn column); void entrySelectionChanged(); protected: void keyPressEvent(QKeyEvent* event) Q_DECL_OVERRIDE; private Q_SLOTS: void emitEntryActivated(const QModelIndex& index); void switchToEntryListMode(); void switchToGroupMode(); private: EntryModel* const m_model; SortFilterHideProxyModel* const m_sortModel; bool m_inEntryListMode; }; #endif // KEEPASSX_ENTRYVIEW_H keepassx-2.0.3/src/gui/group/000077500000000000000000000000001276304217300160535ustar00rootroot00000000000000keepassx-2.0.3/src/gui/group/EditGroupWidget.cpp000066400000000000000000000134401276304217300216270ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "EditGroupWidget.h" #include "ui_EditGroupWidgetMain.h" #include "core/Metadata.h" #include "gui/EditWidgetIcons.h" #include "gui/EditWidgetProperties.h" EditGroupWidget::EditGroupWidget(QWidget* parent) : EditWidget(parent) , m_mainUi(new Ui::EditGroupWidgetMain()) , m_editGroupWidgetMain(new QWidget()) , m_editGroupWidgetIcons(new EditWidgetIcons()) , m_editWidgetProperties(new EditWidgetProperties()) , m_group(Q_NULLPTR) , m_database(Q_NULLPTR) { m_mainUi->setupUi(m_editGroupWidgetMain); add(tr("Group"), m_editGroupWidgetMain); add(tr("Icon"), m_editGroupWidgetIcons); add(tr("Properties"), m_editWidgetProperties); connect(m_mainUi->expireCheck, SIGNAL(toggled(bool)), m_mainUi->expireDatePicker, SLOT(setEnabled(bool))); connect(m_mainUi->autoTypeSequenceCustomRadio, SIGNAL(toggled(bool)), m_mainUi->autoTypeSequenceCustomEdit, SLOT(setEnabled(bool))); connect(this, SIGNAL(accepted()), SLOT(save())); connect(this, SIGNAL(rejected()), SLOT(cancel())); } EditGroupWidget::~EditGroupWidget() { } void EditGroupWidget::loadGroup(Group* group, bool create, Database* database) { m_group = group; m_database = database; if (create) { setHeadline(tr("Add group")); } else { setHeadline(tr("Edit group")); } if (m_group->parentGroup()) { addTriStateItems(m_mainUi->searchComboBox, m_group->parentGroup()->resolveSearchingEnabled()); addTriStateItems(m_mainUi->autotypeComboBox, m_group->parentGroup()->resolveAutoTypeEnabled()); } else { addTriStateItems(m_mainUi->searchComboBox, true); addTriStateItems(m_mainUi->autotypeComboBox, true); } m_mainUi->editName->setText(m_group->name()); m_mainUi->editNotes->setPlainText(m_group->notes()); m_mainUi->expireCheck->setChecked(group->timeInfo().expires()); m_mainUi->expireDatePicker->setDateTime(group->timeInfo().expiryTime().toLocalTime()); m_mainUi->searchComboBox->setCurrentIndex(indexFromTriState(group->searchingEnabled())); m_mainUi->autotypeComboBox->setCurrentIndex(indexFromTriState(group->autoTypeEnabled())); if (group->defaultAutoTypeSequence().isEmpty()) { m_mainUi->autoTypeSequenceInherit->setChecked(true); } else { m_mainUi->autoTypeSequenceCustomRadio->setChecked(true); } m_mainUi->autoTypeSequenceCustomEdit->setText(group->defaultAutoTypeSequence()); IconStruct iconStruct; iconStruct.uuid = group->iconUuid(); iconStruct.number = group->iconNumber(); m_editGroupWidgetIcons->load(group->uuid(), database, iconStruct); m_editWidgetProperties->setFields(group->timeInfo(), group->uuid()); setCurrentRow(0); m_mainUi->editName->setFocus(); } void EditGroupWidget::save() { m_group->setName(m_mainUi->editName->text()); m_group->setNotes(m_mainUi->editNotes->toPlainText()); m_group->setExpires(m_mainUi->expireCheck->isChecked()); m_group->setExpiryTime(m_mainUi->expireDatePicker->dateTime().toUTC()); m_group->setSearchingEnabled(triStateFromIndex(m_mainUi->searchComboBox->currentIndex())); m_group->setAutoTypeEnabled(triStateFromIndex(m_mainUi->autotypeComboBox->currentIndex())); if (m_mainUi->autoTypeSequenceInherit->isChecked()) { m_group->setDefaultAutoTypeSequence(QString()); } else { m_group->setDefaultAutoTypeSequence(m_mainUi->autoTypeSequenceCustomEdit->text()); } IconStruct iconStruct = m_editGroupWidgetIcons->save(); if (iconStruct.number < 0) { m_group->setIcon(Group::DefaultIconNumber); } else if (iconStruct.uuid.isNull()) { m_group->setIcon(iconStruct.number); } else { m_group->setIcon(iconStruct.uuid); } clear(); Q_EMIT editFinished(true); } void EditGroupWidget::cancel() { if (!m_group->iconUuid().isNull() && !m_database->metadata()->containsCustomIcon(m_group->iconUuid())) { m_group->setIcon(Entry::DefaultIconNumber); } clear(); Q_EMIT editFinished(false); } void EditGroupWidget::clear() { m_group = Q_NULLPTR; m_database = Q_NULLPTR; } void EditGroupWidget::addTriStateItems(QComboBox* comboBox, bool inheritDefault) { QString inheritDefaultString; if (inheritDefault) { inheritDefaultString = tr("Enable"); } else { inheritDefaultString = tr("Disable"); } comboBox->clear(); comboBox->addItem(tr("Inherit from parent group (%1)").arg(inheritDefaultString)); comboBox->addItem(tr("Enable")); comboBox->addItem(tr("Disable")); } int EditGroupWidget::indexFromTriState(Group::TriState triState) { switch (triState) { case Group::Inherit: return 0; case Group::Enable: return 1; case Group::Disable: return 2; default: Q_ASSERT(false); return 0; } } Group::TriState EditGroupWidget::triStateFromIndex(int index) { switch (index) { case 0: return Group::Inherit; case 1: return Group::Enable; case 2: return Group::Disable; default: Q_ASSERT(false); return Group::Inherit; } } keepassx-2.0.3/src/gui/group/EditGroupWidget.h000066400000000000000000000035021276304217300212720ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_EDITGROUPWIDGET_H #define KEEPASSX_EDITGROUPWIDGET_H #include #include #include "core/Group.h" #include "gui/EditWidget.h" class EditWidgetIcons; class EditWidgetProperties; namespace Ui { class EditGroupWidgetMain; class EditWidget; } class EditGroupWidget : public EditWidget { Q_OBJECT public: explicit EditGroupWidget(QWidget* parent = Q_NULLPTR); ~EditGroupWidget(); void loadGroup(Group* group, bool create, Database* database); void clear(); Q_SIGNALS: void editFinished(bool accepted); private Q_SLOTS: void save(); void cancel(); private: void addTriStateItems(QComboBox* comboBox, bool inheritValue); int indexFromTriState(Group::TriState triState); Group::TriState triStateFromIndex(int index); const QScopedPointer m_mainUi; QWidget* const m_editGroupWidgetMain; EditWidgetIcons* const m_editGroupWidgetIcons; EditWidgetProperties* const m_editWidgetProperties; Group* m_group; Database* m_database; Q_DISABLE_COPY(EditGroupWidget) }; #endif // KEEPASSX_EDITGROUPWIDGET_H keepassx-2.0.3/src/gui/group/EditGroupWidgetMain.ui000066400000000000000000000072001276304217300222640ustar00rootroot00000000000000 EditGroupWidgetMain 0 0 676 356 QFormLayout::ExpandingFieldsGrow Name Notes Expires false true Search Auto-type Use default auto-type sequence of parent group Set default auto-type sequence Qt::Horizontal QSizePolicy::Fixed 20 1 false editName editNotes expireCheck expireDatePicker searchComboBox autotypeComboBox keepassx-2.0.3/src/gui/group/GroupModel.cpp000066400000000000000000000253651276304217300206470ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "GroupModel.h" #include #include #include "core/Database.h" #include "core/DatabaseIcons.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" GroupModel::GroupModel(Database* db, QObject* parent) : QAbstractItemModel(parent) , m_db(Q_NULLPTR) { changeDatabase(db); } void GroupModel::changeDatabase(Database* newDb) { beginResetModel(); if (m_db) { m_db->disconnect(this); } m_db = newDb; connect(m_db, SIGNAL(groupDataChanged(Group*)), SLOT(groupDataChanged(Group*))); connect(m_db, SIGNAL(groupAboutToAdd(Group*,int)), SLOT(groupAboutToAdd(Group*,int))); connect(m_db, SIGNAL(groupAdded()), SLOT(groupAdded())); connect(m_db, SIGNAL(groupAboutToRemove(Group*)), SLOT(groupAboutToRemove(Group*))); connect(m_db, SIGNAL(groupRemoved()), SLOT(groupRemoved())); connect(m_db, SIGNAL(groupAboutToMove(Group*,Group*,int)), SLOT(groupAboutToMove(Group*,Group*,int))); connect(m_db, SIGNAL(groupMoved()), SLOT(groupMoved())); endResetModel(); } int GroupModel::rowCount(const QModelIndex& parent) const { if (!parent.isValid()) { // we have exactly 1 root item return 1; } else { const Group* group = groupFromIndex(parent); return group->children().size(); } } int GroupModel::columnCount(const QModelIndex& parent) const { Q_UNUSED(parent); return 1; } QModelIndex GroupModel::index(int row, int column, const QModelIndex& parent) const { if (!hasIndex(row, column, parent)) { return QModelIndex(); } Group* group; if (!parent.isValid()) { group = m_db->rootGroup(); } else { group = groupFromIndex(parent)->children().at(row); } return createIndex(row, column, group); } QModelIndex GroupModel::parent(const QModelIndex& index) const { if (!index.isValid()) { return QModelIndex(); } return parent(groupFromIndex(index)); } QModelIndex GroupModel::parent(Group* group) const { Group* parentGroup = group->parentGroup(); if (!parentGroup) { // index is already the root group return QModelIndex(); } else { const Group* grandParentGroup = parentGroup->parentGroup(); if (!grandParentGroup) { // parent is the root group return createIndex(0, 0, parentGroup); } else { return createIndex(grandParentGroup->children().indexOf(parentGroup), 0, parentGroup); } } } QVariant GroupModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } Group* group = groupFromIndex(index); if (role == Qt::DisplayRole) { return group->name(); } else if (role == Qt::DecorationRole) { if (group->isExpired()) { return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex); } else { return group->iconScaledPixmap(); } } else if (role == Qt::FontRole) { QFont font; if (group->isExpired()) { font.setStrikeOut(true); } return font; } else { return QVariant(); } } QVariant GroupModel::headerData(int section, Qt::Orientation orientation, int role) const { Q_UNUSED(section); Q_UNUSED(orientation); Q_UNUSED(role); return QVariant(); } QModelIndex GroupModel::index(Group* group) const { int row; if (!group->parentGroup()) { row = 0; } else { row = group->parentGroup()->children().indexOf(group); } return createIndex(row, 0, group); } Group* GroupModel::groupFromIndex(const QModelIndex& index) const { Q_ASSERT(index.internalPointer()); return static_cast(index.internalPointer()); } Qt::DropActions GroupModel::supportedDropActions() const { return Qt::MoveAction | Qt::CopyAction; } Qt::ItemFlags GroupModel::flags(const QModelIndex& modelIndex) const { if (!modelIndex.isValid()) { return Qt::NoItemFlags; } else if (modelIndex == index(0, 0)) { return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled; } else { return QAbstractItemModel::flags(modelIndex) | Qt::ItemIsDropEnabled | Qt::ItemIsDragEnabled; } } bool GroupModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) { Q_UNUSED(column); if (action == Qt::IgnoreAction) { return true; } if (!data || (action != Qt::MoveAction && action != Qt::CopyAction) || !parent.isValid()) { return false; } // check if the format is supported QStringList types = mimeTypes(); Q_ASSERT(types.size() == 2); bool isGroup = data->hasFormat(types.at(0)); bool isEntry = data->hasFormat(types.at(1)); if (!isGroup && !isEntry) { return false; } if (row > rowCount(parent)) { row = rowCount(parent); } // decode and insert QByteArray encoded = data->data(isGroup ? types.at(0) : types.at(1)); QDataStream stream(&encoded, QIODevice::ReadOnly); Group* parentGroup = groupFromIndex(parent); if (isGroup) { Uuid dbUuid; Uuid groupUuid; stream >> dbUuid >> groupUuid; Database* db = Database::databaseByUuid(dbUuid); if (!db) { return false; } Group* dragGroup = db->resolveGroup(groupUuid); if (!dragGroup || !Tools::hasChild(db, dragGroup) || dragGroup == db->rootGroup()) { return false; } if (dragGroup == parentGroup || Tools::hasChild(dragGroup, parentGroup)) { return false; } if (parentGroup == dragGroup->parent() && row > parentGroup->children().indexOf(dragGroup)) { row--; } Group* group; if (action == Qt::MoveAction) { group = dragGroup; } else { group = dragGroup->clone(); } Database* sourceDb = dragGroup->database(); Database* targetDb = parentGroup->database(); if (sourceDb != targetDb) { QSet customIcons = group->customIconsRecursive(); targetDb->metadata()->copyCustomIcons(customIcons, sourceDb->metadata()); } group->setParent(parentGroup, row); } else { if (row != -1) { return false; } while (!stream.atEnd()) { Uuid dbUuid; Uuid entryUuid; stream >> dbUuid >> entryUuid; Database* db = Database::databaseByUuid(dbUuid); if (!db) { continue; } Entry* dragEntry = db->resolveEntry(entryUuid); if (!dragEntry || !Tools::hasChild(db, dragEntry)) { continue; } Entry* entry; if (action == Qt::MoveAction) { entry = dragEntry; } else { entry = dragEntry->clone(Entry::CloneNewUuid | Entry::CloneResetTimeInfo); } Database* sourceDb = dragEntry->group()->database(); Database* targetDb = parentGroup->database(); Uuid customIcon = entry->iconUuid(); if (sourceDb != targetDb && !customIcon.isNull() && !targetDb->metadata()->containsCustomIcon(customIcon)) { targetDb->metadata()->addCustomIcon(customIcon, sourceDb->metadata()->customIcon(customIcon)); } entry->setGroup(parentGroup); } } return true; } QStringList GroupModel::mimeTypes() const { QStringList types; types << "application/x-keepassx-group"; types << "application/x-keepassx-entry"; return types; } QMimeData* GroupModel::mimeData(const QModelIndexList& indexes) const { if (indexes.isEmpty()) { return Q_NULLPTR; } QMimeData* data = new QMimeData(); QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); QSet seenGroups; Q_FOREACH (const QModelIndex& index, indexes) { if (!index.isValid()) { continue; } Group* group = groupFromIndex(index); if (!seenGroups.contains(group)) { // make sure we don't add groups multiple times when we get indexes // with the same row but different columns stream << m_db->uuid() << group->uuid(); seenGroups.insert(group); } } if (seenGroups.isEmpty()) { delete data; return Q_NULLPTR; } else { data->setData(mimeTypes().at(0), encoded); return data; } } void GroupModel::groupDataChanged(Group* group) { QModelIndex ix = index(group); Q_EMIT dataChanged(ix, ix); } void GroupModel::groupAboutToRemove(Group* group) { Q_ASSERT(group->parentGroup()); QModelIndex parentIndex = parent(group); Q_ASSERT(parentIndex.isValid()); int pos = group->parentGroup()->children().indexOf(group); Q_ASSERT(pos != -1); beginRemoveRows(parentIndex, pos, pos); } void GroupModel::groupRemoved() { endRemoveRows(); } void GroupModel::groupAboutToAdd(Group* group, int index) { Q_ASSERT(group->parentGroup()); QModelIndex parentIndex = parent(group); beginInsertRows(parentIndex, index, index); } void GroupModel::groupAdded() { endInsertRows(); } void GroupModel::groupAboutToMove(Group* group, Group* toGroup, int pos) { Q_ASSERT(group->parentGroup()); QModelIndex oldParentIndex = parent(group); QModelIndex newParentIndex = index(toGroup); int oldPos = group->parentGroup()->children().indexOf(group); if (group->parentGroup() == toGroup && pos > oldPos) { // beginMoveRows() has a bit different semantics than Group::setParent() and // QList::move() when the new position is greater than the old pos++; } bool moveResult = beginMoveRows(oldParentIndex, oldPos, oldPos, newParentIndex, pos); Q_UNUSED(moveResult); Q_ASSERT(moveResult); } void GroupModel::groupMoved() { endMoveRows(); } keepassx-2.0.3/src/gui/group/GroupModel.h000066400000000000000000000047551276304217300203140ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_GROUPMODEL_H #define KEEPASSX_GROUPMODEL_H #include #include "core/Global.h" class Database; class Group; class GroupModel : public QAbstractItemModel { Q_OBJECT public: explicit GroupModel(Database* db, QObject* parent = Q_NULLPTR); void changeDatabase(Database* newDb); QModelIndex index(Group* group) const; Group* groupFromIndex(const QModelIndex& index) const; int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE; QModelIndex parent(const QModelIndex& index) const Q_DECL_OVERRIDE; QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE; Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE; Qt::ItemFlags flags(const QModelIndex& modelIndex) const Q_DECL_OVERRIDE; bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) Q_DECL_OVERRIDE; QStringList mimeTypes() const Q_DECL_OVERRIDE; QMimeData* mimeData(const QModelIndexList& indexes) const Q_DECL_OVERRIDE; private: QModelIndex parent(Group* group) const; private Q_SLOTS: void groupDataChanged(Group* group); void groupAboutToRemove(Group* group); void groupRemoved(); void groupAboutToAdd(Group* group, int index); void groupAdded(); void groupAboutToMove(Group* group, Group* toGroup, int pos); void groupMoved(); private: Database* m_db; }; #endif // KEEPASSX_GROUPMODEL_H keepassx-2.0.3/src/gui/group/GroupView.cpp000066400000000000000000000075471276304217300205230ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "GroupView.h" #include #include #include "core/Database.h" #include "core/Group.h" #include "gui/group/GroupModel.h" GroupView::GroupView(Database* db, QWidget* parent) : QTreeView(parent) , m_model(new GroupModel(db, this)) , m_updatingExpanded(false) { QTreeView::setModel(m_model); setHeaderHidden(true); setUniformRowHeights(true); connect(this, SIGNAL(expanded(QModelIndex)), this, SLOT(expandedChanged(QModelIndex))); connect(this, SIGNAL(collapsed(QModelIndex)), this, SLOT(expandedChanged(QModelIndex))); connect(m_model, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(syncExpandedState(QModelIndex,int,int))); connect(m_model, SIGNAL(modelReset()), SLOT(modelReset())); connect(selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(emitGroupChanged())); modelReset(); setDragEnabled(true); viewport()->setAcceptDrops(true); setDropIndicatorShown(true); setDefaultDropAction(Qt::MoveAction); } void GroupView::changeDatabase(Database* newDb) { m_model->changeDatabase(newDb); } void GroupView::dragMoveEvent(QDragMoveEvent* event) { if (event->keyboardModifiers() & Qt::ControlModifier) { event->setDropAction(Qt::CopyAction); } else { event->setDropAction(Qt::MoveAction); } QTreeView::dragMoveEvent(event); // entries may only be dropped on groups if (event->isAccepted() && event->mimeData()->hasFormat("application/x-keepassx-entry") && (dropIndicatorPosition() == AboveItem || dropIndicatorPosition() == BelowItem)) { event->ignore(); } } Group* GroupView::currentGroup() { if (currentIndex() == QModelIndex()) { return Q_NULLPTR; } else { return m_model->groupFromIndex(currentIndex()); } } void GroupView::expandedChanged(const QModelIndex& index) { if (m_updatingExpanded) { return; } Group* group = m_model->groupFromIndex(index); group->setExpanded(isExpanded(index)); } void GroupView::recInitExpanded(Group* group) { m_updatingExpanded = true; expandGroup(group, group->isExpanded()); m_updatingExpanded = false; Q_FOREACH (Group* child, group->children()) { recInitExpanded(child); } } void GroupView::expandGroup(Group* group, bool expand) { QModelIndex index = m_model->index(group); setExpanded(index, expand); } void GroupView::emitGroupChanged(const QModelIndex& index) { Q_EMIT groupChanged(m_model->groupFromIndex(index)); } void GroupView::setModel(QAbstractItemModel* model) { Q_UNUSED(model); Q_ASSERT(false); } void GroupView::emitGroupChanged() { Q_EMIT groupChanged(currentGroup()); } void GroupView::syncExpandedState(const QModelIndex& parent, int start, int end) { for (int row = start; row <= end; row++) { Group* group = m_model->groupFromIndex(m_model->index(row, 0, parent)); recInitExpanded(group); } } void GroupView::setCurrentGroup(Group* group) { setCurrentIndex(m_model->index(group)); } void GroupView::modelReset() { recInitExpanded(m_model->groupFromIndex(m_model->index(0, 0))); setCurrentIndex(m_model->index(0, 0)); } keepassx-2.0.3/src/gui/group/GroupView.h000066400000000000000000000033121276304217300201520ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_GROUPVIEW_H #define KEEPASSX_GROUPVIEW_H #include #include "core/Global.h" class Database; class Group; class GroupModel; class GroupView : public QTreeView { Q_OBJECT public: explicit GroupView(Database* db, QWidget* parent = Q_NULLPTR); void changeDatabase(Database* newDb); void setModel(QAbstractItemModel* model) Q_DECL_OVERRIDE; Group* currentGroup(); void setCurrentGroup(Group* group); void expandGroup(Group* group, bool expand = true); Q_SIGNALS: void groupChanged(Group* group); private Q_SLOTS: void expandedChanged(const QModelIndex& index); void emitGroupChanged(const QModelIndex& index); void emitGroupChanged(); void syncExpandedState(const QModelIndex& parent, int start, int end); void modelReset(); protected: void dragMoveEvent(QDragMoveEvent* event) Q_DECL_OVERRIDE; private: void recInitExpanded(Group* group); GroupModel* const m_model; bool m_updatingExpanded; }; #endif // KEEPASSX_GROUPVIEW_H keepassx-2.0.3/src/keys/000077500000000000000000000000001276304217300151065ustar00rootroot00000000000000keepassx-2.0.3/src/keys/CompositeKey.cpp000066400000000000000000000106301276304217300202250ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "CompositeKey.h" #include "CompositeKey_p.h" #include #include #include "crypto/CryptoHash.h" #include "crypto/SymmetricCipher.h" CompositeKey::CompositeKey() { } CompositeKey::CompositeKey(const CompositeKey& key) { *this = key; } CompositeKey::~CompositeKey() { clear(); } void CompositeKey::clear() { qDeleteAll(m_keys); m_keys.clear(); } bool CompositeKey::isEmpty() const { return m_keys.isEmpty(); } CompositeKey* CompositeKey::clone() const { return new CompositeKey(*this); } CompositeKey& CompositeKey::operator=(const CompositeKey& key) { // handle self assignment as that would break when calling clear() if (this == &key) { return *this; } clear(); Q_FOREACH (const Key* subKey, key.m_keys) { addKey(*subKey); } return *this; } QByteArray CompositeKey::rawKey() const { CryptoHash cryptoHash(CryptoHash::Sha256); Q_FOREACH (const Key* key, m_keys) { cryptoHash.addData(key->rawKey()); } return cryptoHash.result(); } QByteArray CompositeKey::transform(const QByteArray& seed, quint64 rounds, bool* ok, QString* errorString) const { Q_ASSERT(seed.size() == 32); Q_ASSERT(rounds > 0); bool okLeft; QString errorStringLeft; bool okRight; QString errorStringRight; QByteArray key = rawKey(); QFuture future = QtConcurrent::run(transformKeyRaw, key.left(16), seed, rounds, &okLeft, &errorStringLeft); QByteArray result2 = transformKeyRaw(key.right(16), seed, rounds, &okRight, &errorStringRight); QByteArray transformed; transformed.append(future.result()); transformed.append(result2); *ok = (okLeft && okRight); if (!okLeft) { *errorString = errorStringLeft; return QByteArray(); } if (!okRight) { *errorString = errorStringRight; return QByteArray(); } return CryptoHash::hash(transformed, CryptoHash::Sha256); } QByteArray CompositeKey::transformKeyRaw(const QByteArray& key, const QByteArray& seed, quint64 rounds, bool* ok, QString* errorString) { QByteArray iv(16, 0); SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); if (!cipher.init(seed, iv)) { *ok = false; *errorString = cipher.errorString(); return QByteArray(); } QByteArray result = key; if (!cipher.processInPlace(result, rounds)) { *ok = false; *errorString = cipher.errorString(); return QByteArray(); } *ok = true; return result; } void CompositeKey::addKey(const Key& key) { m_keys.append(key.clone()); } int CompositeKey::transformKeyBenchmark(int msec) { TransformKeyBenchmarkThread thread1(msec); TransformKeyBenchmarkThread thread2(msec); thread1.start(); thread2.start(); thread1.wait(); thread2.wait(); return qMin(thread1.rounds(), thread2.rounds()); } TransformKeyBenchmarkThread::TransformKeyBenchmarkThread(int msec) : m_msec(msec) , m_rounds(0) { Q_ASSERT(msec > 0); } int TransformKeyBenchmarkThread::rounds() { return m_rounds; } void TransformKeyBenchmarkThread::run() { QByteArray key = QByteArray(16, '\x7E'); QByteArray seed = QByteArray(32, '\x4B'); QByteArray iv(16, 0); SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Ecb, SymmetricCipher::Encrypt); cipher.init(seed, iv); QTime t; t.start(); do { if (!cipher.processInPlace(key, 10000)) { m_rounds = -1; return; } m_rounds += 10000; } while (t.elapsed() < m_msec); } keepassx-2.0.3/src/keys/CompositeKey.h000066400000000000000000000030121276304217300176660ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_COMPOSITEKEY_H #define KEEPASSX_COMPOSITEKEY_H #include #include "keys/Key.h" class CompositeKey : public Key { public: CompositeKey(); CompositeKey(const CompositeKey& key); ~CompositeKey(); void clear(); bool isEmpty() const; CompositeKey* clone() const; CompositeKey& operator=(const CompositeKey& key); QByteArray rawKey() const; QByteArray transform(const QByteArray& seed, quint64 rounds, bool* ok, QString* errorString) const; void addKey(const Key& key); static int transformKeyBenchmark(int msec); private: static QByteArray transformKeyRaw(const QByteArray& key, const QByteArray& seed, quint64 rounds, bool* ok, QString* errorString); QList m_keys; }; #endif // KEEPASSX_COMPOSITEKEY_H keepassx-2.0.3/src/keys/CompositeKey_p.h000066400000000000000000000020211276304217300202040ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_COMPOSITEKEY_P_H #define KEEPASSX_COMPOSITEKEY_P_H #include class TransformKeyBenchmarkThread : public QThread { Q_OBJECT public: explicit TransformKeyBenchmarkThread(int msec); int rounds(); protected: void run(); private: int m_msec; int m_rounds; }; #endif // KEEPASSX_COMPOSITEKEY_P_H keepassx-2.0.3/src/keys/FileKey.cpp000066400000000000000000000134001276304217300171400ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "FileKey.h" #include #include #include "core/Tools.h" #include "crypto/CryptoHash.h" #include "crypto/Random.h" FileKey::FileKey() { } bool FileKey::load(QIODevice* device) { // we may need to read the file multiple times if (device->isSequential()) { return false; } if (device->size() == 0) { return false; } // try different key file formats if (!device->reset()) { return false; } if (loadXml(device)) { return true; } if (!device->reset()) { return false; } if (loadBinary(device)) { return true; } if (!device->reset()) { return false; } if (loadHex(device)) { return true; } if (!device->reset()) { return false; } if (loadHashed(device)) { return true; } return false; } bool FileKey::load(const QString& fileName, QString* errorMsg) { QFile file(fileName); if (!file.open(QFile::ReadOnly)) { if (errorMsg) { *errorMsg = file.errorString(); } return false; } bool result = load(&file); file.close(); if (file.error()) { result = false; if (errorMsg) { *errorMsg = file.errorString(); } } return result; } QByteArray FileKey::rawKey() const { return m_key; } FileKey* FileKey::clone() const { return new FileKey(*this); } void FileKey::create(QIODevice* device) { QXmlStreamWriter xmlWriter(device); xmlWriter.writeStartDocument("1.0"); xmlWriter.writeStartElement("KeyFile"); xmlWriter.writeStartElement("Meta"); xmlWriter.writeTextElement("Version", "1.00"); xmlWriter.writeEndElement(); xmlWriter.writeStartElement("Key"); QByteArray data = randomGen()->randomArray(32); xmlWriter.writeTextElement("Data", QString::fromLatin1(data.toBase64())); xmlWriter.writeEndElement(); xmlWriter.writeEndDocument(); } bool FileKey::create(const QString& fileName, QString* errorMsg) { QFile file(fileName); if (!file.open(QFile::WriteOnly)) { if (errorMsg) { *errorMsg = file.errorString(); } return false; } create(&file); file.close(); if (file.error()) { if (errorMsg) { *errorMsg = file.errorString(); } return false; } else { return true; } } bool FileKey::loadXml(QIODevice* device) { QXmlStreamReader xmlReader(device); if (!xmlReader.error() && xmlReader.readNextStartElement()) { if (xmlReader.name() != "KeyFile") { return false; } } else { return false; } bool correctMeta = false; QByteArray data; while (!xmlReader.error() && xmlReader.readNextStartElement()) { if (xmlReader.name() == "Meta") { correctMeta = loadXmlMeta(xmlReader); } else if (xmlReader.name() == "Key") { data = loadXmlKey(xmlReader); } } if (!xmlReader.error() && correctMeta && !data.isEmpty()) { m_key = data; return true; } else { return false; } } bool FileKey::loadXmlMeta(QXmlStreamReader& xmlReader) { bool corectVersion = false; while (!xmlReader.error() && xmlReader.readNextStartElement()) { if (xmlReader.name() == "Version") { // TODO: error message about incompatible key file version if (xmlReader.readElementText() == "1.00") { corectVersion = true; } } } return corectVersion; } QByteArray FileKey::loadXmlKey(QXmlStreamReader& xmlReader) { QByteArray data; while (!xmlReader.error() && xmlReader.readNextStartElement()) { if (xmlReader.name() == "Data") { // TODO: do we need to enforce a specific data.size()? QByteArray rawData = xmlReader.readElementText().toLatin1(); if (Tools::isBase64(rawData)) { data = QByteArray::fromBase64(rawData); } } } return data; } bool FileKey::loadBinary(QIODevice* device) { if (device->size() != 32) { return false; } QByteArray data; if (!Tools::readAllFromDevice(device, data) || data.size() != 32) { return false; } else { m_key = data; return true; } } bool FileKey::loadHex(QIODevice* device) { if (device->size() != 64) { return false; } QByteArray data; if (!Tools::readAllFromDevice(device, data) || data.size() != 64) { return false; } if (!Tools::isHex(data)) { return false; } QByteArray key = QByteArray::fromHex(data); if (key.size() != 32) { return false; } m_key = key; return true; } bool FileKey::loadHashed(QIODevice* device) { CryptoHash cryptoHash(CryptoHash::Sha256); QByteArray buffer; do { if (!Tools::readFromDevice(device, buffer)) { return false; } cryptoHash.addData(buffer); } while (!buffer.isEmpty()); m_key = cryptoHash.result(); return true; } keepassx-2.0.3/src/keys/FileKey.h000066400000000000000000000027471276304217300166210ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_FILEKEY_H #define KEEPASSX_FILEKEY_H #include #include "core/Global.h" #include "keys/Key.h" class QIODevice; class FileKey : public Key { public: FileKey(); bool load(QIODevice* device); bool load(const QString& fileName, QString* errorMsg = Q_NULLPTR); QByteArray rawKey() const; FileKey* clone() const; static void create(QIODevice* device); static bool create(const QString& fileName, QString* errorMsg = Q_NULLPTR); private: bool loadXml(QIODevice* device); bool loadXmlMeta(QXmlStreamReader& xmlReader); QByteArray loadXmlKey(QXmlStreamReader& xmlReader); bool loadBinary(QIODevice* device); bool loadHex(QIODevice* device); bool loadHashed(QIODevice* device); QByteArray m_key; }; #endif // KEEPASSX_FILEKEY_H keepassx-2.0.3/src/keys/Key.h000066400000000000000000000016231276304217300160110ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_KEY_H #define KEEPASSX_KEY_H #include class Key { public: virtual ~Key() {} virtual QByteArray rawKey() const = 0; virtual Key* clone() const = 0; }; #endif // KEEPASSX_KEY_H keepassx-2.0.3/src/keys/PasswordKey.cpp000066400000000000000000000021611276304217300200650ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "PasswordKey.h" #include "crypto/CryptoHash.h" PasswordKey::PasswordKey() { } PasswordKey::PasswordKey(const QString& password) { setPassword(password); } QByteArray PasswordKey::rawKey() const { return m_key; } void PasswordKey::setPassword(const QString& password) { m_key = CryptoHash::hash(password.toUtf8(), CryptoHash::Sha256); } PasswordKey* PasswordKey::clone() const { return new PasswordKey(*this); } keepassx-2.0.3/src/keys/PasswordKey.h000066400000000000000000000021031276304217300175260ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_PASSWORDKEY_H #define KEEPASSX_PASSWORDKEY_H #include #include "keys/Key.h" class PasswordKey : public Key { public: PasswordKey(); explicit PasswordKey(const QString& password); QByteArray rawKey() const; void setPassword(const QString& password); PasswordKey* clone() const; private: QByteArray m_key; }; #endif // KEEPASSX_PASSWORDKEY_H keepassx-2.0.3/src/main.cpp000066400000000000000000000074011276304217300155650ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include "config-keepassx.h" #include "core/Config.h" #include "core/qcommandlineparser.h" #include "core/Tools.h" #include "core/Translator.h" #include "crypto/Crypto.h" #include "gui/Application.h" #include "gui/MainWindow.h" #include "gui/MessageBox.h" int main(int argc, char** argv) { #ifdef QT_NO_DEBUG Tools::disableCoreDumps(); #endif Tools::setupSearchPaths(); Application app(argc, argv); Application::setApplicationName("keepassx"); Application::setApplicationVersion(KEEPASSX_VERSION); // don't set organizationName as that changes the return value of // QDesktopServices::storageLocation(QDesktopServices::DataLocation) QApplication::setQuitOnLastWindowClosed(false); if (!Crypto::init()) { QString error = QCoreApplication::translate("Main", "Fatal error while testing the cryptographic functions."); error.append("\n"); error.append(Crypto::errorString()); MessageBox::critical(Q_NULLPTR, QCoreApplication::translate("Main", "KeePassX - Error"), error); return 1; } QCommandLineParser parser; parser.setApplicationDescription(QCoreApplication::translate("main", "KeePassX - cross-platform password manager")); parser.addPositionalArgument("filename", QCoreApplication::translate("main", "filename of the password database to open (*.kdbx)")); QCommandLineOption configOption("config", QCoreApplication::translate("main", "path to a custom config file"), "config"); QCommandLineOption keyfileOption("keyfile", QCoreApplication::translate("main", "key file of the database"), "keyfile"); parser.addHelpOption(); parser.addVersionOption(); parser.addOption(configOption); parser.addOption(keyfileOption); parser.process(app); const QStringList args = parser.positionalArguments(); if (parser.isSet(configOption)) { Config::createConfigFromFile(parser.value(configOption)); } Translator::installTranslator(); #ifdef Q_OS_MAC // Don't show menu icons on OSX QApplication::setAttribute(Qt::AA_DontShowIconsInMenus); #endif MainWindow mainWindow; mainWindow.show(); app.setMainWindow(&mainWindow); QObject::connect(&app, SIGNAL(openFile(QString)), &mainWindow, SLOT(openDatabase(QString))); if (!args.isEmpty()) { QString filename = args[0]; if (!filename.isEmpty() && QFile::exists(filename)) { mainWindow.openDatabase(filename, QString(), parser.value(keyfileOption)); } } if (config()->get("OpenPreviousDatabasesOnStartup").toBool()) { QStringList filenames = config()->get("LastOpenedDatabases").toStringList(); Q_FOREACH (const QString& filename, filenames) { if (!filename.isEmpty() && QFile::exists(filename)) { mainWindow.openDatabase(filename, QString(), QString()); } } } return app.exec(); } keepassx-2.0.3/src/streams/000077500000000000000000000000001276304217300156115ustar00rootroot00000000000000keepassx-2.0.3/src/streams/HashedBlockStream.cpp000066400000000000000000000141001276304217300216340ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "HashedBlockStream.h" #include #include "core/Endian.h" #include "crypto/CryptoHash.h" const QSysInfo::Endian HashedBlockStream::ByteOrder = QSysInfo::LittleEndian; HashedBlockStream::HashedBlockStream(QIODevice* baseDevice) : LayeredStream(baseDevice) , m_blockSize(1024*1024) { init(); } HashedBlockStream::HashedBlockStream(QIODevice* baseDevice, qint32 blockSize) : LayeredStream(baseDevice) , m_blockSize(blockSize) { init(); } HashedBlockStream::~HashedBlockStream() { close(); } void HashedBlockStream::init() { m_buffer.clear(); m_bufferPos = 0; m_blockIndex = 0; m_eof = false; m_error = false; } bool HashedBlockStream::reset() { // Write final block(s) only if device is writable and we haven't // already written a final block. if (isWritable() && (!m_buffer.isEmpty() || m_blockIndex != 0)) { if (!m_buffer.isEmpty()) { if (!writeHashedBlock()) { return false; } } // write empty final block if (!writeHashedBlock()) { return false; } } init(); return true; } void HashedBlockStream::close() { // Write final block(s) only if device is writable and we haven't // already written a final block. if (isWritable() && (!m_buffer.isEmpty() || m_blockIndex != 0)) { if (!m_buffer.isEmpty()) { writeHashedBlock(); } // write empty final block writeHashedBlock(); } LayeredStream::close(); } qint64 HashedBlockStream::readData(char* data, qint64 maxSize) { if (m_error) { return -1; } else if (m_eof) { return 0; } qint64 bytesRemaining = maxSize; qint64 offset = 0; while (bytesRemaining > 0) { if (m_bufferPos == m_buffer.size()) { if (!readHashedBlock()) { if (m_error) { return -1; } else { return maxSize - bytesRemaining; } } } int bytesToCopy = qMin(bytesRemaining, static_cast(m_buffer.size() - m_bufferPos)); memcpy(data + offset, m_buffer.constData() + m_bufferPos, bytesToCopy); offset += bytesToCopy; m_bufferPos += bytesToCopy; bytesRemaining -= bytesToCopy; } return maxSize; } bool HashedBlockStream::readHashedBlock() { bool ok; quint32 index = Endian::readUInt32(m_baseDevice, ByteOrder, &ok); if (!ok || index != m_blockIndex) { m_error = true; setErrorString("Invalid block index."); return false; } QByteArray hash = m_baseDevice->read(32); if (hash.size() != 32) { m_error = true; setErrorString("Invalid hash size."); return false; } m_blockSize = Endian::readInt32(m_baseDevice, ByteOrder, &ok); if (!ok || m_blockSize < 0) { m_error = true; setErrorString("Invalid block size."); return false; } if (m_blockSize == 0) { if (hash.count('\0') != 32) { m_error = true; setErrorString("Invalid hash of final block."); return false; } m_eof = true; return false; } m_buffer = m_baseDevice->read(m_blockSize); if (m_buffer.size() != m_blockSize) { m_error = true; setErrorString("Block too short."); return false; } if (hash != CryptoHash::hash(m_buffer, CryptoHash::Sha256)) { m_error = true; setErrorString("Mismatch between hash and data."); return false; } m_bufferPos = 0; m_blockIndex++; return true; } qint64 HashedBlockStream::writeData(const char* data, qint64 maxSize) { Q_ASSERT(maxSize >= 0); if (m_error) { return 0; } qint64 bytesRemaining = maxSize; qint64 offset = 0; while (bytesRemaining > 0) { int bytesToCopy = qMin(bytesRemaining, static_cast(m_blockSize - m_buffer.size())); m_buffer.append(data + offset, bytesToCopy); offset += bytesToCopy; bytesRemaining -= bytesToCopy; if (m_buffer.size() == m_blockSize) { if (!writeHashedBlock()) { if (m_error) { return -1; } else { return maxSize - bytesRemaining; } } } } return maxSize; } bool HashedBlockStream::writeHashedBlock() { if (!Endian::writeInt32(m_blockIndex, m_baseDevice, ByteOrder)) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } m_blockIndex++; QByteArray hash; if (!m_buffer.isEmpty()) { hash = CryptoHash::hash(m_buffer, CryptoHash::Sha256); } else { hash.fill(0, 32); } if (m_baseDevice->write(hash) != hash.size()) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } if (!Endian::writeInt32(m_buffer.size(), m_baseDevice, ByteOrder)) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } if (!m_buffer.isEmpty()) { if (m_baseDevice->write(m_buffer) != m_buffer.size()) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } m_buffer.clear(); } return true; } keepassx-2.0.3/src/streams/HashedBlockStream.h000066400000000000000000000030341276304217300213050ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_HASHEDBLOCKSTREAM_H #define KEEPASSX_HASHEDBLOCKSTREAM_H #include #include "streams/LayeredStream.h" class HashedBlockStream : public LayeredStream { Q_OBJECT public: explicit HashedBlockStream(QIODevice* baseDevice); HashedBlockStream(QIODevice* baseDevice, qint32 blockSize); ~HashedBlockStream(); bool reset() Q_DECL_OVERRIDE; void close() Q_DECL_OVERRIDE; protected: qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; private: void init(); bool readHashedBlock(); bool writeHashedBlock(); static const QSysInfo::Endian ByteOrder; qint32 m_blockSize; QByteArray m_buffer; int m_bufferPos; quint32 m_blockIndex; bool m_eof; bool m_error; }; #endif // KEEPASSX_HASHEDBLOCKSTREAM_H keepassx-2.0.3/src/streams/LayeredStream.cpp000066400000000000000000000050111276304217300210530ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "LayeredStream.h" LayeredStream::LayeredStream(QIODevice* baseDevice) : QIODevice(baseDevice) , m_baseDevice(baseDevice) { connect(baseDevice, SIGNAL(aboutToClose()), SLOT(closeStream())); } LayeredStream::~LayeredStream() { close(); } bool LayeredStream::isSequential() const { return true; } bool LayeredStream::open(QIODevice::OpenMode mode) { if (isOpen()) { qWarning("LayeredStream::open: Device is already open."); return false; } bool readMode = (mode & QIODevice::ReadOnly); bool writeMode = (mode & QIODevice::WriteOnly); if (readMode && writeMode) { qWarning("LayeredStream::open: Reading and writing at the same time is not supported."); return false; } else if (!readMode && !writeMode) { qWarning("LayeredStream::open: Must be opened in read or write mode."); return false; } else if ((readMode && !m_baseDevice->isReadable()) || (writeMode && !m_baseDevice->isWritable())) { qWarning("LayeredStream::open: Base device is not opened correctly."); return false; } else { if (mode & QIODevice::Append) { qWarning("LayeredStream::open: QIODevice::Append is not supported."); mode = mode & ~QIODevice::Append; } if (mode & QIODevice::Truncate) { qWarning("LayeredStream::open: QIODevice::Truncate is not supported."); mode = mode & ~QIODevice::Truncate; } mode = mode | QIODevice::Unbuffered; return QIODevice::open(mode); } } qint64 LayeredStream::readData(char* data, qint64 maxSize) { return m_baseDevice->read(data, maxSize); } qint64 LayeredStream::writeData(const char* data, qint64 maxSize) { return m_baseDevice->write(data, maxSize); } void LayeredStream::closeStream() { close(); } keepassx-2.0.3/src/streams/LayeredStream.h000066400000000000000000000024551276304217300205310ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_LAYEREDSTREAM_H #define KEEPASSX_LAYEREDSTREAM_H #include #include "core/Global.h" class LayeredStream : public QIODevice { Q_OBJECT public: explicit LayeredStream(QIODevice* baseDevice); virtual ~LayeredStream(); bool isSequential() const Q_DECL_OVERRIDE; bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; protected: qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; QIODevice* const m_baseDevice; private Q_SLOTS: void closeStream(); }; #endif // KEEPASSX_LAYEREDSTREAM_H keepassx-2.0.3/src/streams/QtIOCompressor000066400000000000000000000000341276304217300204220ustar00rootroot00000000000000#include "qtiocompressor.h" keepassx-2.0.3/src/streams/StoreDataStream.cpp000066400000000000000000000025341276304217300213630ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "StoreDataStream.h" StoreDataStream::StoreDataStream(QIODevice* baseDevice) : LayeredStream(baseDevice) { } bool StoreDataStream::open(QIODevice::OpenMode mode) { bool result = LayeredStream::open(mode); if (result) { m_storedData.clear(); } return result; } QByteArray StoreDataStream::storedData() const { return m_storedData; } qint64 StoreDataStream::readData(char* data, qint64 maxSize) { qint64 bytesRead = LayeredStream::readData(data, maxSize); if (bytesRead == -1) { setErrorString(m_baseDevice->errorString()); return -1; } m_storedData.append(data, bytesRead); return bytesRead; } keepassx-2.0.3/src/streams/StoreDataStream.h000066400000000000000000000022251276304217300210250ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_STOREDATASTREAM_H #define KEEPASSX_STOREDATASTREAM_H #include "streams/LayeredStream.h" class StoreDataStream : public LayeredStream { Q_OBJECT public: explicit StoreDataStream(QIODevice* baseDevice); bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; QByteArray storedData() const; protected: qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; private: QByteArray m_storedData; }; #endif // KEEPASSX_STOREDATASTREAM_H keepassx-2.0.3/src/streams/SymmetricCipherStream.cpp000066400000000000000000000145241276304217300226060ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "SymmetricCipherStream.h" SymmetricCipherStream::SymmetricCipherStream(QIODevice* baseDevice, SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction) : LayeredStream(baseDevice) , m_cipher(new SymmetricCipher(algo, mode, direction)) , m_bufferPos(0) , m_bufferFilling(false) , m_error(false) , m_isInitalized(false) , m_dataWritten(false) { } SymmetricCipherStream::~SymmetricCipherStream() { close(); } bool SymmetricCipherStream::init(const QByteArray& key, const QByteArray& iv) { m_isInitalized = m_cipher->init(key, iv); if (!m_isInitalized) { setErrorString(m_cipher->errorString()); } return m_isInitalized; } void SymmetricCipherStream::resetInternalState() { m_buffer.clear(); m_bufferPos = 0; m_bufferFilling = false; m_error = false; m_dataWritten = false; m_cipher->reset(); } bool SymmetricCipherStream::open(QIODevice::OpenMode mode) { if (!m_isInitalized) { return false; } return LayeredStream::open(mode); } bool SymmetricCipherStream::reset() { if (isWritable() && m_dataWritten) { if (!writeBlock(true)) { return false; } } resetInternalState(); return true; } void SymmetricCipherStream::close() { if (isWritable() && m_dataWritten) { writeBlock(true); } resetInternalState(); LayeredStream::close(); } qint64 SymmetricCipherStream::readData(char* data, qint64 maxSize) { Q_ASSERT(maxSize >= 0); if (m_error) { return -1; } qint64 bytesRemaining = maxSize; qint64 offset = 0; while (bytesRemaining > 0) { if ((m_bufferPos == m_buffer.size()) || m_bufferFilling) { if (!readBlock()) { if (m_error) { return -1; } else { return maxSize - bytesRemaining; } } } int bytesToCopy = qMin(bytesRemaining, static_cast(m_buffer.size() - m_bufferPos)); memcpy(data + offset, m_buffer.constData() + m_bufferPos, bytesToCopy); offset += bytesToCopy; m_bufferPos += bytesToCopy; bytesRemaining -= bytesToCopy; } return maxSize; } bool SymmetricCipherStream::readBlock() { QByteArray newData; if (m_bufferFilling) { newData.resize(m_cipher->blockSize() - m_buffer.size()); } else { m_buffer.clear(); newData.resize(m_cipher->blockSize()); } int readResult = m_baseDevice->read(newData.data(), newData.size()); if (readResult == -1) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } else { m_buffer.append(newData.left(readResult)); } if (m_buffer.size() != m_cipher->blockSize()) { m_bufferFilling = true; return false; } else { if (!m_cipher->processInPlace(m_buffer)) { m_error = true; setErrorString(m_cipher->errorString()); return false; } m_bufferPos = 0; m_bufferFilling = false; if (m_baseDevice->atEnd()) { // PKCS7 padding quint8 padLength = m_buffer.at(m_buffer.size() - 1); if (padLength == m_cipher->blockSize()) { Q_ASSERT(m_buffer == QByteArray(m_cipher->blockSize(), m_cipher->blockSize())); // full block with just padding: discard m_buffer.clear(); return false; } else if (padLength > m_cipher->blockSize()) { // invalid padding m_error = true; setErrorString("Invalid padding."); return false; } else { Q_ASSERT(m_buffer.right(padLength) == QByteArray(padLength, padLength)); // resize buffer to strip padding m_buffer.resize(m_cipher->blockSize() - padLength); return true; } } else { return true; } } } qint64 SymmetricCipherStream::writeData(const char* data, qint64 maxSize) { Q_ASSERT(maxSize >= 0); if (m_error) { return -1; } m_dataWritten = true; qint64 bytesRemaining = maxSize; qint64 offset = 0; while (bytesRemaining > 0) { int bytesToCopy = qMin(bytesRemaining, static_cast(m_cipher->blockSize() - m_buffer.size())); m_buffer.append(data + offset, bytesToCopy); offset += bytesToCopy; bytesRemaining -= bytesToCopy; if (m_buffer.size() == m_cipher->blockSize()) { if (!writeBlock(false)) { if (m_error) { return -1; } else { return maxSize - bytesRemaining; } } } } return maxSize; } bool SymmetricCipherStream::writeBlock(bool lastBlock) { Q_ASSERT(lastBlock || (m_buffer.size() == m_cipher->blockSize())); if (lastBlock) { // PKCS7 padding int padLen = m_cipher->blockSize() - m_buffer.size(); for (int i = 0; i < padLen; i++) { m_buffer.append(static_cast(padLen)); } } if (!m_cipher->processInPlace(m_buffer)) { m_error = true; setErrorString(m_cipher->errorString()); return false; } if (m_baseDevice->write(m_buffer) != m_buffer.size()) { m_error = true; setErrorString(m_baseDevice->errorString()); return false; } else { m_buffer.clear(); return true; } } keepassx-2.0.3/src/streams/SymmetricCipherStream.h000066400000000000000000000035131276304217300222470ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_SYMMETRICCIPHERSTREAM_H #define KEEPASSX_SYMMETRICCIPHERSTREAM_H #include #include #include "crypto/SymmetricCipher.h" #include "streams/LayeredStream.h" class SymmetricCipherStream : public LayeredStream { Q_OBJECT public: SymmetricCipherStream(QIODevice* baseDevice, SymmetricCipher::Algorithm algo, SymmetricCipher::Mode mode, SymmetricCipher::Direction direction); ~SymmetricCipherStream(); bool init(const QByteArray& key, const QByteArray& iv); bool open(QIODevice::OpenMode mode) Q_DECL_OVERRIDE; bool reset() Q_DECL_OVERRIDE; void close() Q_DECL_OVERRIDE; protected: qint64 readData(char* data, qint64 maxSize) Q_DECL_OVERRIDE; qint64 writeData(const char* data, qint64 maxSize) Q_DECL_OVERRIDE; private: void resetInternalState(); bool readBlock(); bool writeBlock(bool lastBlock); const QScopedPointer m_cipher; QByteArray m_buffer; int m_bufferPos; bool m_bufferFilling; bool m_error; bool m_isInitalized; bool m_dataWritten; }; #endif // KEEPASSX_SYMMETRICCIPHERSTREAM_H keepassx-2.0.3/src/streams/qtiocompressor.cpp000066400000000000000000000506211276304217300214120ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of a Qt Solutions component. ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.1, included in the file LICENSE.NOKIA-LGPL-EXCEPTION ** in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL-3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact Nokia at qt-info@nokia.com. ** ****************************************************************************/ #include "qtiocompressor.h" #include typedef Bytef ZlibByte; typedef uInt ZlibSize; class QtIOCompressorPrivate { QtIOCompressor *q_ptr; Q_DECLARE_PUBLIC(QtIOCompressor) public: enum State { // Read state NotReadFirstByte, InStream, EndOfStream, // Write state NoBytesWritten, BytesWritten, // Common Closed, Error }; QtIOCompressorPrivate(QtIOCompressor *q_ptr, QIODevice *device, int compressionLevel, int bufferSize); ~QtIOCompressorPrivate(); void flushZlib(int flushMode); bool writeBytes(ZlibByte *buffer, ZlibSize outputSize); void setZlibError(const QString &erroMessage, int zlibErrorCode); QIODevice *device; bool manageDevice; z_stream zlibStream; const int compressionLevel; const ZlibSize bufferSize; ZlibByte *buffer; State state; QtIOCompressor::StreamFormat streamFormat; }; /*! \internal */ QtIOCompressorPrivate::QtIOCompressorPrivate(QtIOCompressor *q_ptr, QIODevice *device, int compressionLevel, int bufferSize) :q_ptr(q_ptr) ,device(device) ,compressionLevel(compressionLevel) ,bufferSize(bufferSize) ,buffer(new ZlibByte[bufferSize]) ,state(Closed) ,streamFormat(QtIOCompressor::ZlibFormat) { // Use default zlib memory management. zlibStream.zalloc = Z_NULL; zlibStream.zfree = Z_NULL; zlibStream.opaque = Z_NULL; } /*! \internal */ QtIOCompressorPrivate::~QtIOCompressorPrivate() { delete[] buffer; } /*! \internal Flushes the zlib stream. */ void QtIOCompressorPrivate::flushZlib(int flushMode) { // No input. zlibStream.next_in = 0; zlibStream.avail_in = 0; int status; do { zlibStream.next_out = buffer; zlibStream.avail_out = bufferSize; status = deflate(&zlibStream, flushMode); if (status != Z_OK && status != Z_STREAM_END) { state = QtIOCompressorPrivate::Error; setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when compressing: "), status); return; } ZlibSize outputSize = bufferSize - zlibStream.avail_out; // Try to write data from the buffer to to the underlying device, return on failure. if (!writeBytes(buffer, outputSize)) return; // If the mode is Z_FNISH we must loop until we get Z_STREAM_END, // else we loop as long as zlib is able to fill the output buffer. } while ((flushMode == Z_FINISH && status != Z_STREAM_END) || (flushMode != Z_FINISH && zlibStream.avail_out == 0)); if (flushMode == Z_FINISH) Q_ASSERT(status == Z_STREAM_END); else Q_ASSERT(status == Z_OK); } /*! \internal Writes outputSize bytes from buffer to the underlying device. */ bool QtIOCompressorPrivate::writeBytes(ZlibByte *buffer, ZlibSize outputSize) { Q_Q(QtIOCompressor); ZlibSize totalBytesWritten = 0; // Loop until all bytes are written to the underlying device. do { const qint64 bytesWritten = device->write(reinterpret_cast(buffer), outputSize); if (bytesWritten == -1) { q->setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error writing to underlying device: ") + device->errorString()); return false; } totalBytesWritten += bytesWritten; } while (totalBytesWritten != outputSize); // put up a flag so that the device will be flushed on close. state = BytesWritten; return true; } /*! \internal Sets the error string to errorMessage + zlib error string for zlibErrorCode */ void QtIOCompressorPrivate::setZlibError(const QString &errorMessage, int zlibErrorCode) { Q_Q(QtIOCompressor); // Watch out, zlibErrorString may be null. const char * const zlibErrorString = zError(zlibErrorCode); QString errorString; if (zlibErrorString) errorString = errorMessage + zlibErrorString; else errorString = errorMessage + " Unknown error, code " + QString::number(zlibErrorCode); q->setErrorString(errorString); } /*! \class QtIOCompressor \brief The QtIOCompressor class is a QIODevice that compresses data streams. A QtIOCompressor object is constructed with a pointer to an underlying QIODevice. Data written to the QtIOCompressor object will be compressed before it is written to the underlying QIODevice. Similarly, if you read from the QtIOCompressor object, the data will be read from the underlying device and then decompressed. QtIOCompressor is a sequential device, which means that it does not support seeks or random access. Internally, QtIOCompressor uses the zlib library to compress and uncompress data. Usage examples: Writing compressed data to a file: \code QFile file("foo"); QtIOCompressor compressor(&file); compressor.open(QIODevice::WriteOnly); compressor.write(QByteArray() << "The quick brown fox"); compressor.close(); \endcode Reading compressed data from a file: \code QFile file("foo"); QtIOCompressor compressor(&file); compressor.open(QIODevice::ReadOnly); const QByteArray text = compressor.readAll(); compressor.close(); \endcode QtIOCompressor can also read and write compressed data in different compressed formats, ref. StreamFormat. Use setStreamFormat() before open() to select format. */ /*! \enum QtIOCompressor::StreamFormat This enum specifies which stream format to use. \value ZlibFormat: This is the default and has the smallest overhead. \value GzipFormat: This format is compatible with the gzip file format, but has more overhead than ZlibFormat. Note: requires zlib version 1.2.x or higher at runtime. \value RawZipFormat: This is compatible with the most common compression method of the data blocks contained in ZIP archives. Note: ZIP file headers are not read or generated, so setting this format, by itself, does not let QtIOCompressor read or write ZIP files. Ref. the ziplist example program. \sa setStreamFormat() */ /*! Constructs a QtIOCompressor using the given \a device as the underlying device. The allowed value range for \a compressionLevel is 0 to 9, where 0 means no compression and 9 means maximum compression. The default value is 6. \a bufferSize specifies the size of the internal buffer used when reading from and writing to the underlying device. The default value is 65KB. Using a larger value allows for faster compression and decompression at the expense of memory usage. */ QtIOCompressor::QtIOCompressor(QIODevice *device, int compressionLevel, int bufferSize) :d_ptr(new QtIOCompressorPrivate(this, device, compressionLevel, bufferSize)) {} /*! Destroys the QtIOCompressor, closing it if necessary. */ QtIOCompressor::~QtIOCompressor() { Q_D(QtIOCompressor); close(); delete d; } /*! Sets the format on the compressed stream to \a format. \sa QtIOCompressor::StreamFormat */ void QtIOCompressor::setStreamFormat(StreamFormat format) { Q_D(QtIOCompressor); // Print a waning if the compile-time version of zlib does not support gzip. if (format == GzipFormat && checkGzipSupport(ZLIB_VERSION) == false) qWarning("QtIOCompressor::setStreamFormat: zlib 1.2.x or higher is " "required to use the gzip format. Current version is: %s", ZLIB_VERSION); d->streamFormat = format; } /*! Returns the format set on the compressed stream. \sa QtIOCompressor::StreamFormat */ QtIOCompressor::StreamFormat QtIOCompressor::streamFormat() const { Q_D(const QtIOCompressor); return d->streamFormat; } /*! Returns true if the zlib library in use supports the gzip format, false otherwise. */ bool QtIOCompressor::isGzipSupported() { return checkGzipSupport(zlibVersion()); } /*! \reimp */ bool QtIOCompressor::isSequential() const { return true; } /*! Opens the QtIOCompressor in \a mode. Only ReadOnly and WriteOnly is supported. This function will return false if you try to open in other modes. If the underlying device is not opened, this function will open it in a suitable mode. If this happens the device will also be closed when close() is called. If the underlying device is already opened, its openmode must be compatible with \a mode. Returns true on success, false on error. \sa close() */ bool QtIOCompressor::open(OpenMode mode) { Q_D(QtIOCompressor); if (isOpen()) { qWarning("QtIOCompressor::open: device already open"); return false; } // Check for correct mode: ReadOnly xor WriteOnly const bool read = (mode & ReadOnly); const bool write = (mode & WriteOnly); const bool both = (read && write); const bool neither = !(read || write); if (both || neither) { qWarning("QtIOCompressor::open: QtIOCompressor can only be opened in the ReadOnly or WriteOnly modes"); return false; } // If the underlying device is open, check that is it opened in a compatible mode. if (d->device->isOpen()) { d->manageDevice = false; const OpenMode deviceMode = d->device->openMode(); if (read && !(deviceMode & ReadOnly)) { qWarning("QtIOCompressor::open: underlying device must be open in one of the ReadOnly or WriteOnly modes"); return false; } else if (write && !(deviceMode & WriteOnly)) { qWarning("QtIOCompressor::open: underlying device must be open in one of the ReadOnly or WriteOnly modes"); return false; } // If the underlying device is closed, open it. } else { d->manageDevice = true; if (d->device->open(mode) == false) { setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error opening underlying device: ") + d->device->errorString()); return false; } } // Initialize zlib for deflating or inflating. // The second argument to inflate/deflateInit2 is the windowBits parameter, // which also controls what kind of compression stream headers to use. // The default value for this is 15. Passing a value greater than 15 // enables gzip headers and then subtracts 16 form the windowBits value. // (So passing 31 gives gzip headers and 15 windowBits). Passing a negative // value selects no headers hand then negates the windowBits argument. int windowBits; switch (d->streamFormat) { case QtIOCompressor::GzipFormat: windowBits = 31; break; case QtIOCompressor::RawZipFormat: windowBits = -15; break; default: windowBits = 15; } int status; if (read) { d->state = QtIOCompressorPrivate::NotReadFirstByte; d->zlibStream.avail_in = 0; d->zlibStream.next_in = 0; if (d->streamFormat == QtIOCompressor::ZlibFormat) { status = inflateInit(&d->zlibStream); } else { if (checkGzipSupport(zlibVersion()) == false) { setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor::open", "The gzip format not supported in this version of zlib.")); return false; } status = inflateInit2(&d->zlibStream, windowBits); } } else { d->state = QtIOCompressorPrivate::NoBytesWritten; if (d->streamFormat == QtIOCompressor::ZlibFormat) status = deflateInit(&d->zlibStream, d->compressionLevel); else status = deflateInit2(&d->zlibStream, d->compressionLevel, Z_DEFLATED, windowBits, 8, Z_DEFAULT_STRATEGY); } // Handle error. if (status != Z_OK) { d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor::open", "Internal zlib error: "), status); return false; } return QIODevice::open(mode); } /*! Closes the QtIOCompressor, and also the underlying device if it was opened by QtIOCompressor. \sa open() */ void QtIOCompressor::close() { Q_D(QtIOCompressor); if (isOpen() == false) return; // Flush and close the zlib stream. if (openMode() & ReadOnly) { d->state = QtIOCompressorPrivate::NotReadFirstByte; inflateEnd(&d->zlibStream); } else { if (d->state == QtIOCompressorPrivate::BytesWritten) { // Only flush if we have written anything. d->state = QtIOCompressorPrivate::NoBytesWritten; d->flushZlib(Z_FINISH); } deflateEnd(&d->zlibStream); } // Close the underlying device if we are managing it. if (d->manageDevice) d->device->close(); QIODevice::close(); } /*! Flushes the internal buffer. Each time you call flush, all data written to the QtIOCompressor is compressed and written to the underlying device. Calling this function can reduce the compression ratio. The underlying device is not flushed. Calling this function when QtIOCompressor is in ReadOnly mode has no effect. */ void QtIOCompressor::flush() { Q_D(QtIOCompressor); if (isOpen() == false || openMode() & ReadOnly) return; d->flushZlib(Z_SYNC_FLUSH); } /*! Returns 1 if there might be data available for reading, or 0 if there is no data available. There is unfortunately no way of knowing how much data there is available when dealing with compressed streams. Also, since the remaining compressed data might be a part of the meta-data that ends the compressed stream (and therefore will yield no uncompressed data), you cannot assume that a read after getting a 1 from this function will return data. */ qint64 QtIOCompressor::bytesAvailable() const { Q_D(const QtIOCompressor); if ((openMode() & ReadOnly) == false) return 0; int numBytes = 0; switch (d->state) { case QtIOCompressorPrivate::NotReadFirstByte: numBytes = d->device->bytesAvailable(); break; case QtIOCompressorPrivate::InStream: numBytes = 1; break; case QtIOCompressorPrivate::EndOfStream: case QtIOCompressorPrivate::Error: default: numBytes = 0; break; }; numBytes += QIODevice::bytesAvailable(); if (numBytes > 0) return 1; else return 0; } /*! \internal Reads and decompresses data from the underlying device. */ qint64 QtIOCompressor::readData(char *data, qint64 maxSize) { Q_D(QtIOCompressor); if (d->state == QtIOCompressorPrivate::EndOfStream) return 0; if (d->state == QtIOCompressorPrivate::Error) return -1; // We are going to try to fill the data buffer d->zlibStream.next_out = reinterpret_cast(data); d->zlibStream.avail_out = maxSize; int status; do { // Read data if if the input buffer is empty. There could be data in the buffer // from a previous readData call. if (d->zlibStream.avail_in == 0) { qint64 bytesAvalible = d->device->read(reinterpret_cast(d->buffer), d->bufferSize); d->zlibStream.next_in = d->buffer; d->zlibStream.avail_in = bytesAvalible; if (bytesAvalible == -1) { d->state = QtIOCompressorPrivate::Error; setErrorString(QT_TRANSLATE_NOOP("QtIOCompressor", "Error reading data from underlying device: ") + d->device->errorString()); return -1; } if (d->state != QtIOCompressorPrivate::InStream) { // If we are not in a stream and get 0 bytes, we are probably trying to read from an empty device. if(bytesAvalible == 0) return 0; else if (bytesAvalible > 0) d->state = QtIOCompressorPrivate::InStream; } } // Decompress. status = inflate(&d->zlibStream, Z_SYNC_FLUSH); switch (status) { case Z_NEED_DICT: case Z_DATA_ERROR: case Z_MEM_ERROR: d->state = QtIOCompressorPrivate::Error; d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when decompressing: "), status); return -1; case Z_BUF_ERROR: // No more input and zlib can not provide more output - Not an error, we can try to read again when we have more input. return 0; } // Loop util data buffer is full or we reach the end of the input stream. } while (d->zlibStream.avail_out != 0 && status != Z_STREAM_END); if (status == Z_STREAM_END) { d->state = QtIOCompressorPrivate::EndOfStream; // Unget any data left in the read buffer. for (int i = d->zlibStream.avail_in; i >= 0; --i) d->device->ungetChar(*reinterpret_cast(d->zlibStream.next_in + i)); } const ZlibSize outputSize = maxSize - d->zlibStream.avail_out; return outputSize; } /*! \internal Compresses and writes data to the underlying device. */ qint64 QtIOCompressor::writeData(const char *data, qint64 maxSize) { if (maxSize < 1) return 0; Q_D(QtIOCompressor); d->zlibStream.next_in = reinterpret_cast(const_cast(data)); d->zlibStream.avail_in = maxSize; if (d->state == QtIOCompressorPrivate::Error) return -1; do { d->zlibStream.next_out = d->buffer; d->zlibStream.avail_out = d->bufferSize; const int status = deflate(&d->zlibStream, Z_NO_FLUSH); if (status != Z_OK) { d->state = QtIOCompressorPrivate::Error; d->setZlibError(QT_TRANSLATE_NOOP("QtIOCompressor", "Internal zlib error when compressing: "), status); return -1; } ZlibSize outputSize = d->bufferSize - d->zlibStream.avail_out; // Try to write data from the buffer to to the underlying device, return -1 on failure. if (d->writeBytes(d->buffer, outputSize) == false) return -1; } while (d->zlibStream.avail_out == 0); // run until output is not full. Q_ASSERT(d->zlibStream.avail_in == 0); return maxSize; } /* \internal Checks if the run-time zlib version is 1.2.x or higher. */ bool QtIOCompressor::checkGzipSupport(const char * const versionString) { if (strlen(versionString) < 3) return false; if (versionString[0] == '0' || (versionString[0] == '1' && (versionString[2] == '0' || versionString[2] == '1' ))) return false; return true; } keepassx-2.0.3/src/streams/qtiocompressor.h000066400000000000000000000061071276304217300210570ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of a Qt Solutions component. ** ** Commercial Usage ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Solutions Commercial License Agreement provided ** with the Software or, alternatively, in accordance with the terms ** contained in a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain ** additional rights. These rights are described in the Nokia Qt LGPL ** Exception version 1.1, included in the file LICENSE.NOKIA-LGPL-EXCEPTION ** in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL-3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** Please note Third Party Software included with Qt Solutions may impose ** additional restrictions and it is the user's responsibility to ensure ** that they have met the licensing requirements of the GPL, LGPL, or Qt ** Solutions Commercial license and the relevant license of the Third ** Party Software they are using. ** ** If you are unsure which license is appropriate for your use, please ** contact Nokia at qt-info@nokia.com. ** ****************************************************************************/ #ifndef QTIOCOMPRESSOR_H #define QTIOCOMPRESSOR_H #include class QtIOCompressorPrivate; class QtIOCompressor : public QIODevice { Q_OBJECT public: enum StreamFormat { ZlibFormat, GzipFormat, RawZipFormat }; QtIOCompressor(QIODevice *device, int compressionLevel = 6, int bufferSize = 65500); ~QtIOCompressor(); void setStreamFormat(StreamFormat format); StreamFormat streamFormat() const; static bool isGzipSupported(); bool isSequential() const; bool open(OpenMode mode); void close(); void flush(); qint64 bytesAvailable() const; protected: qint64 readData(char * data, qint64 maxSize); qint64 writeData(const char * data, qint64 maxSize); private: static bool checkGzipSupport(const char * const versionString); QtIOCompressorPrivate *d_ptr; Q_DECLARE_PRIVATE(QtIOCompressor) Q_DISABLE_COPY(QtIOCompressor) }; #endif keepassx-2.0.3/src/version.h.cmake000066400000000000000000000002411276304217300170450ustar00rootroot00000000000000#define GIT_HEAD "@GIT_HEAD@" #define GIT_DESCRIBE "@GIT_DESCRIBE@" #define DIST_HASH "c8857ac2babcc392f04f1b9e38d65d7ab39ba1bf" #define DIST_DATE "1473004667" keepassx-2.0.3/tests/000077500000000000000000000000001276304217300145065ustar00rootroot00000000000000keepassx-2.0.3/tests/CMakeLists.txt000066400000000000000000000145641276304217300172600ustar00rootroot00000000000000# Copyright (C) 2010 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}/src) add_definitions(-DQT_TEST_LIB) set(KEEPASSX_TEST_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR}/data) configure_file(config-keepassx-tests.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-keepassx-tests.h) macro(parse_arguments prefix arg_names option_names) set(DEFAULT_ARGS) foreach(arg_name ${arg_names}) set(${prefix}_${arg_name}) endforeach(arg_name) foreach(option ${option_names}) set(${prefix}_${option} FALSE) endforeach(option) set(current_arg_name DEFAULT_ARGS) set(current_arg_list) foreach(arg ${ARGN}) set(larg_names ${arg_names}) list(FIND larg_names "${arg}" is_arg_name) if(is_arg_name GREATER -1) set(${prefix}_${current_arg_name} ${current_arg_list}) set(current_arg_name ${arg}) set(current_arg_list) else() set(loption_names ${option_names}) list(FIND loption_names "${arg}" is_option) if(is_option GREATER -1) set(${prefix}_${arg} TRUE) else(is_option GREATER -1) set(current_arg_list ${current_arg_list} ${arg}) endif() endif() endforeach(arg) set(${prefix}_${current_arg_name} ${current_arg_list}) endmacro(parse_arguments) macro(add_unit_test) parse_arguments(TEST "NAME;SOURCES;MOCS;LIBS" "" ${ARGN}) set(_test_NAME ${TEST_NAME}) set(_srcList ${TEST_SOURCES}) qt4_wrap_cpp(_srcList ${TEST_MOCS}) add_executable(${_test_NAME} ${_srcList}) target_link_libraries(${_test_NAME} ${TEST_LIBS}) if(NOT TEST_OUTPUT) set(TEST_OUTPUT plaintext) endif(NOT TEST_OUTPUT) set(TEST_OUTPUT ${TEST_OUTPUT} CACHE STRING "The output to generate when running the QTest unit tests") if(KDE4_TEST_OUTPUT STREQUAL "xml") add_test(${_test_NAME} ${_test_NAME} -xml -o ${_test_NAME}.tml) else(KDE4_TEST_OUTPUT STREQUAL "xml") add_test(${_test_NAME} ${_test_NAME}) endif(KDE4_TEST_OUTPUT STREQUAL "xml") if(NOT MSVC_IDE) #not needed for the ide # if the tests are EXCLUDE_FROM_ALL, add a target "buildtests" to build all tests if(NOT WITH_TESTS) get_directory_property(_buildtestsAdded BUILDTESTS_ADDED) if(NOT _buildtestsAdded) add_custom_target(buildtests) set_directory_properties(PROPERTIES BUILDTESTS_ADDED TRUE) endif() add_dependencies(buildtests ${_test_NAME}) endif() endif() endmacro(add_unit_test) set(TEST_LIBRARIES keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTTEST_LIBRARY} ${GCRYPT_LIBRARIES} ${ZLIB_LIBRARIES} ) set(testsupport_SOURCES modeltest.cpp FailDevice.cpp) qt4_wrap_cpp(testsupport_SOURCES modeltest.h FailDevice.h) add_library(testsupport STATIC ${testsupport_SOURCES}) add_unit_test(NAME testgroup SOURCES TestGroup.cpp MOCS TestGroup.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkeepass2xmlreader SOURCES TestKeePass2XmlReader.cpp MOCS TestKeePass2XmlReader.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkeys SOURCES TestKeys.cpp MOCS TestKeys.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkeepass2reader SOURCES TestKeePass2Reader.cpp MOCS TestKeePass2Reader.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkeepass2writer SOURCES TestKeePass2Writer.cpp MOCS TestKeePass2Writer.h LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testgroupmodel SOURCES TestGroupModel.cpp MOCS TestGroupModel.h LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testentrymodel SOURCES TestEntryModel.cpp MOCS TestEntryModel.h LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testcryptohash SOURCES TestCryptoHash.cpp MOCS TestCryptoHash.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testsymmetriccipher SOURCES TestSymmetricCipher.cpp MOCS TestSymmetricCipher.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testhashedblockstream SOURCES TestHashedBlockStream.cpp MOCS TestHashedBlockStream.h LIBS testsupport ${TEST_LIBRARIES}) add_unit_test(NAME testkeepass2randomstream SOURCES TestKeePass2RandomStream.cpp MOCS TestKeePass2RandomStream.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testmodified SOURCES TestModified.cpp MOCS TestModified.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testdeletedobjects SOURCES TestDeletedObjects.cpp MOCS TestDeletedObjects.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testkeepass1reader SOURCES TestKeePass1Reader.cpp MOCS TestKeePass1Reader.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testqsavefile SOURCES TestQSaveFile.cpp MOCS TestQSaveFile.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testwildcardmatcher SOURCES TestWildcardMatcher.cpp MOCS TestWildcardMatcher.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testautotype SOURCES TestAutoType.cpp MOCS TestAutoType.h LIBS ${TEST_LIBRARIES}) set_target_properties(testautotype PROPERTIES ENABLE_EXPORTS ON) add_unit_test(NAME testentry SOURCES TestEntry.cpp MOCS TestEntry.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testqcommandlineparser SOURCES TestQCommandLineParser.cpp MOCS TestQCommandLineParser.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testrandom SOURCES TestRandom.cpp MOCS TestRandom.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testentrysearcher SOURCES TestEntrySearcher.cpp MOCS TestEntrySearcher.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testexporter SOURCES TestExporter.cpp MOCS TestExporter.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testcsvexporter SOURCES TestCsvExporter.cpp MOCS TestCsvExporter.h LIBS ${TEST_LIBRARIES}) if(WITH_GUI_TESTS) add_subdirectory(gui) endif(WITH_GUI_TESTS) keepassx-2.0.3/tests/FailDevice.cpp000066400000000000000000000032031276304217300172030ustar00rootroot00000000000000/* * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "FailDevice.h" FailDevice::FailDevice(int failAfter, QObject* parent) : QBuffer(parent) , m_failAfter(failAfter) , m_readCount(0) , m_writeCount(0) { } bool FailDevice::open(QIODevice::OpenMode openMode) { return QBuffer::open(openMode | QIODevice::Unbuffered); } qint64 FailDevice::readData(char* data, qint64 len) { if (m_readCount >= m_failAfter) { setErrorString("FAILDEVICE"); return -1; } else { qint64 result = QBuffer::readData(data, len); if (result != -1) { m_readCount += result; } return result; } } qint64 FailDevice::writeData(const char* data, qint64 len) { if (m_writeCount >= m_failAfter) { setErrorString("FAILDEVICE"); return -1; } else { qint64 result = QBuffer::writeData(data, len); if (result != -1) { m_writeCount += result; } return result; } } keepassx-2.0.3/tests/FailDevice.h000066400000000000000000000023501276304217300166520ustar00rootroot00000000000000/* * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_FAILDEVICE_H #define KEEPASSX_FAILDEVICE_H #include #include "core/Global.h" class FailDevice : public QBuffer { Q_OBJECT public: explicit FailDevice(int failAfter, QObject* parent = Q_NULLPTR); bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE; protected: qint64 readData(char* data, qint64 len) Q_DECL_OVERRIDE; qint64 writeData(const char* data, qint64 len) Q_DECL_OVERRIDE; private: int m_failAfter; int m_readCount; int m_writeCount; }; #endif // KEEPASSX_FAILDEVICE_H keepassx-2.0.3/tests/TestAutoType.cpp000066400000000000000000000134671276304217300176370ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestAutoType.h" #include #include #include "tests.h" #include "core/Config.h" #include "core/FilePath.h" #include "core/Entry.h" #include "core/Group.h" #include "crypto/Crypto.h" #include "autotype/AutoType.h" #include "autotype/AutoTypePlatformPlugin.h" #include "autotype/test/AutoTypeTestInterface.h" #include "gui/MessageBox.h" QTEST_GUILESS_MAIN(TestAutoType) void TestAutoType::initTestCase() { QVERIFY(Crypto::init()); Config::createTempFileInstance(); AutoType::createTestInstance(); config()->set("security/autotypeask", false); QPluginLoader loader(filePath()->pluginPath("keepassx-autotype-test")); loader.setLoadHints(QLibrary::ResolveAllSymbolsHint); QVERIFY(loader.instance()); m_platform = qobject_cast(loader.instance()); QVERIFY(m_platform); m_test = qobject_cast(loader.instance()); QVERIFY(m_test); m_autoType = AutoType::instance(); } void TestAutoType::init() { config()->set("AutoTypeEntryTitleMatch", false); m_test->clearActions(); m_db = new Database(); m_dbList.clear(); m_dbList.append(m_db); m_group = new Group(); m_db->setRootGroup(m_group); AutoTypeAssociations::Association association; m_entry1 = new Entry(); m_entry1->setGroup(m_group); m_entry1->setUsername("myuser"); m_entry1->setPassword("mypass"); association.window = "custom window"; association.sequence = "{username}association{password}"; m_entry1->autoTypeAssociations()->add(association); m_entry2 = new Entry(); m_entry2->setGroup(m_group); m_entry2->setPassword("myuser"); m_entry2->setTitle("entry title"); m_entry3 = new Entry(); m_entry3->setGroup(m_group); m_entry3->setPassword("regex"); association.window = "//REGEX1//"; association.sequence = "regex1"; m_entry3->autoTypeAssociations()->add(association); association.window = "//^REGEX2$//"; association.sequence = "regex2"; m_entry3->autoTypeAssociations()->add(association); association.window = "//^REGEX3-([rd]\\d){2}$//"; association.sequence = "regex3"; m_entry3->autoTypeAssociations()->add(association); } void TestAutoType::cleanup() { delete m_db; } void TestAutoType::testInternal() { QVERIFY(m_platform->activeWindowTitle().isEmpty()); m_test->setActiveWindowTitle("Test"); QCOMPARE(m_platform->activeWindowTitle(), QString("Test")); } void TestAutoType::testAutoTypeWithoutSequence() { m_autoType->performAutoType(m_entry1, Q_NULLPTR); QCOMPARE(m_test->actionCount(), 14); QCOMPARE(m_test->actionChars(), QString("myuser%1mypass%2") .arg(m_test->keyToString(Qt::Key_Tab)) .arg(m_test->keyToString(Qt::Key_Enter))); } void TestAutoType::testAutoTypeWithSequence() { m_autoType->performAutoType(m_entry1, Q_NULLPTR, "{Username}abc{PaSsWoRd}"); QCOMPARE(m_test->actionCount(), 15); QCOMPARE(m_test->actionChars(), QString("%1abc%2") .arg(m_entry1->username()) .arg(m_entry1->password())); } void TestAutoType::testGlobalAutoTypeWithNoMatch() { m_test->setActiveWindowTitle("nomatch"); MessageBox::setNextAnswer(QMessageBox::Ok); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString()); } void TestAutoType::testGlobalAutoTypeWithOneMatch() { m_test->setActiveWindowTitle("custom window"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("%1association%2") .arg(m_entry1->username()) .arg(m_entry1->password())); } void TestAutoType::testGlobalAutoTypeTitleMatch() { config()->set("AutoTypeEntryTitleMatch", true); m_test->setActiveWindowTitle("An Entry Title!"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("%1%2").arg(m_entry2->password(), m_test->keyToString(Qt::Key_Enter))); } void TestAutoType::testGlobalAutoTypeTitleMatchDisabled() { m_test->setActiveWindowTitle("An Entry Title!"); MessageBox::setNextAnswer(QMessageBox::Ok); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString()); } void TestAutoType::testGlobalAutoTypeRegExp() { // substring matches are ok m_test->setActiveWindowTitle("lorem REGEX1 ipsum"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("regex1")); m_test->clearActions(); // should be case-insensitive m_test->setActiveWindowTitle("lorem regex1 ipsum"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("regex1")); m_test->clearActions(); // exact match m_test->setActiveWindowTitle("REGEX2"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("regex2")); m_test->clearActions(); // a bit more complicated regex m_test->setActiveWindowTitle("REGEX3-R2D2"); m_autoType->performGlobalAutoType(m_dbList); QCOMPARE(m_test->actionChars(), QString("regex3")); m_test->clearActions(); } keepassx-2.0.3/tests/TestAutoType.h000066400000000000000000000031601276304217300172710ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTAUTOTYPE_H #define KEEPASSX_TESTAUTOTYPE_H #include class AutoType; class AutoTypePlatformInterface; class AutoTypeTestInterface; class Database; class Entry; class Group; class TestAutoType : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testInternal(); void testAutoTypeWithoutSequence(); void testAutoTypeWithSequence(); void testGlobalAutoTypeWithNoMatch(); void testGlobalAutoTypeWithOneMatch(); void testGlobalAutoTypeTitleMatch(); void testGlobalAutoTypeTitleMatchDisabled(); void testGlobalAutoTypeRegExp(); private: AutoTypePlatformInterface* m_platform; AutoTypeTestInterface* m_test; AutoType* m_autoType; Database* m_db; QList m_dbList; Group* m_group; Entry* m_entry1; Entry* m_entry2; Entry* m_entry3; }; #endif // KEEPASSX_TESTAUTOTYPE_H keepassx-2.0.3/tests/TestCryptoHash.cpp000066400000000000000000000032361276304217300201420ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestCryptoHash.h" #include #include "tests.h" #include "crypto/Crypto.h" #include "crypto/CryptoHash.h" QTEST_GUILESS_MAIN(TestCryptoHash) void TestCryptoHash::initTestCase() { QVERIFY(Crypto::init()); } void TestCryptoHash::test() { CryptoHash cryptoHash1(CryptoHash::Sha256); QCOMPARE(cryptoHash1.result(), QByteArray::fromHex("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")); QByteArray source2 = QString("KeePassX").toLatin1(); QByteArray result2 = CryptoHash::hash(source2, CryptoHash::Sha256); QCOMPARE(result2, QByteArray::fromHex("0b56e5f65263e747af4a833bd7dd7ad26a64d7a4de7c68e52364893dca0766b4")); CryptoHash cryptoHash3(CryptoHash::Sha256); cryptoHash3.addData(QString("KeePa").toLatin1()); cryptoHash3.addData(QString("ssX").toLatin1()); QCOMPARE(cryptoHash3.result(), QByteArray::fromHex("0b56e5f65263e747af4a833bd7dd7ad26a64d7a4de7c68e52364893dca0766b4")); } keepassx-2.0.3/tests/TestCryptoHash.h000066400000000000000000000016701276304217300176070ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTCRYPTOHASH_H #define KEEPASSX_TESTCRYPTOHASH_H #include class TestCryptoHash : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void test(); }; #endif // KEEPASSX_TESTCRYPTOHASH_H keepassx-2.0.3/tests/TestCsvExporter.cpp000066400000000000000000000062041276304217300203400ustar00rootroot00000000000000/* * Copyright (C) 2015 Florian Geyer * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestCsvExporter.h" #include #include #include "tests.h" #include "core/Database.h" #include "core/Entry.h" #include "core/Group.h" #include "crypto/Crypto.h" #include "format/CsvExporter.h" QTEST_GUILESS_MAIN(TestCsvExporter) const QString TestCsvExporter::ExpectedHeaderLine = QString("\"Group\",\"Title\",\"Username\",\"Password\",\"URL\",\"Notes\"\n"); void TestCsvExporter::init() { m_db = new Database(); m_csvExporter = new CsvExporter(); } void TestCsvExporter::initTestCase() { Crypto::init(); } void TestCsvExporter::cleanUp() { delete m_db; delete m_csvExporter; } void TestCsvExporter::testExport() { Group* groupRoot = m_db->rootGroup(); Group* group= new Group(); group->setName("Test Group Name"); group->setParent(groupRoot); Entry* entry = new Entry(); entry->setGroup(group); entry->setTitle("Test Entry Title"); entry->setUsername("Test Username"); entry->setPassword("Test Password"); entry->setUrl("http://test.url"); entry->setNotes("Test Notes"); QBuffer buffer; QVERIFY(buffer.open(QIODevice::ReadWrite)); m_csvExporter->exportDatabase(&buffer, m_db); QString expectedResult = QString().append(ExpectedHeaderLine).append("\"Test Group Name\",\"Test Entry Title\",\"Test Username\",\"Test Password\",\"http://test.url\",\"Test Notes\"\n"); QCOMPARE(QString::fromUtf8(buffer.buffer().constData()), expectedResult); } void TestCsvExporter::testEmptyDatabase() { QBuffer buffer; QVERIFY(buffer.open(QIODevice::ReadWrite)); m_csvExporter->exportDatabase(&buffer, m_db); QCOMPARE(QString::fromUtf8(buffer.buffer().constData()), ExpectedHeaderLine); } void TestCsvExporter::testNestedGroups() { Group* groupRoot = m_db->rootGroup(); Group* group= new Group(); group->setName("Test Group Name"); group->setParent(groupRoot); Group* childGroup= new Group(); childGroup->setName("Test Sub Group Name"); childGroup->setParent(group); Entry* entry = new Entry(); entry->setGroup(childGroup); entry->setTitle("Test Entry Title"); QBuffer buffer; QVERIFY(buffer.open(QIODevice::ReadWrite)); m_csvExporter->exportDatabase(&buffer, m_db); QCOMPARE(QString::fromUtf8(buffer.buffer().constData()), QString().append(ExpectedHeaderLine).append("\"Test Group Name/Test Sub Group Name\",\"Test Entry Title\",\"\",\"\",\"\",\"\"\n")); } keepassx-2.0.3/tests/TestCsvExporter.h000066400000000000000000000023631276304217300200070ustar00rootroot00000000000000/* * Copyright (C) 2015 Florian Geyer * Copyright (C) 2015 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTCSVEXPORTER_H #define KEEPASSX_TESTCSVEXPORTER_H #include class Database; class CsvExporter; class TestCsvExporter : public QObject { Q_OBJECT public: static const QString ExpectedHeaderLine; private Q_SLOTS: void init(); void initTestCase(); void cleanUp(); void testExport(); void testEmptyDatabase(); void testNestedGroups(); private: Database* m_db; CsvExporter* m_csvExporter; }; #endif // KEEPASSX_TESTCSVEXPORTER_H keepassx-2.0.3/tests/TestDeletedObjects.cpp000066400000000000000000000112301276304217300207270ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestDeletedObjects.h" #include #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "crypto/Crypto.h" #include "format/KeePass2XmlReader.h" #include "config-keepassx-tests.h" QTEST_GUILESS_MAIN(TestDeletedObjects) void TestDeletedObjects::initTestCase() { QVERIFY(Crypto::init()); } void TestDeletedObjects::createAndDelete(Database* db, int delObjectsSize) { QCOMPARE(db->deletedObjects().size(), delObjectsSize); Group* root = db->rootGroup(); int rootChildrenCount = root->children().size(); Group* g = new Group(); g->setParent(root); Uuid gUuid = Uuid::random(); g->setUuid(gUuid); delete g; QCOMPARE(db->deletedObjects().size(), ++delObjectsSize); QCOMPARE(db->deletedObjects().at(delObjectsSize-1).uuid, gUuid); QCOMPARE(rootChildrenCount, root->children().size()); Group* g1 = new Group(); g1->setParent(root); Uuid g1Uuid = Uuid::random(); g1->setUuid(g1Uuid); Entry* e1 = new Entry(); e1->setGroup(g1); Uuid e1Uuid = Uuid::random(); e1->setUuid(e1Uuid); Group* g2 = new Group(); g2->setParent(g1); Uuid g2Uuid = Uuid::random(); g2->setUuid(g2Uuid); Entry* e2 = new Entry(); e2->setGroup(g2); Uuid e2Uuid = Uuid::random(); e2->setUuid(e2Uuid); delete g1; delObjectsSize += 4; QCOMPARE(db->deletedObjects().size(), delObjectsSize); QCOMPARE(db->deletedObjects().at(delObjectsSize-4).uuid, e1Uuid); QCOMPARE(db->deletedObjects().at(delObjectsSize-3).uuid, e2Uuid); QCOMPARE(db->deletedObjects().at(delObjectsSize-2).uuid, g2Uuid); QCOMPARE(db->deletedObjects().at(delObjectsSize-1).uuid, g1Uuid); QCOMPARE(rootChildrenCount, root->children().size()); Entry* e3 = new Entry(); e3->setGroup(root); Uuid e3Uuid = Uuid::random(); e3->setUuid(e3Uuid); delete e3; QCOMPARE(db->deletedObjects().size(), ++delObjectsSize); QCOMPARE(db->deletedObjects().at(delObjectsSize-1).uuid, e3Uuid); QCOMPARE(rootChildrenCount, root->children().size()); } void TestDeletedObjects::testDeletedObjectsFromFile() { KeePass2XmlReader reader; reader.setStrictMode(true); QString xmlFile = QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.xml"); Database* db = reader.readDatabase(xmlFile); createAndDelete(db, 2); delete db; } void TestDeletedObjects::testDeletedObjectsFromNewDb() { Database* db = new Database(); createAndDelete(db, 0); delete db; } void TestDeletedObjects::testDatabaseChange() { Database* db = new Database(); Group* root = db->rootGroup(); int delObjectsSize = 0; Database* db2 = new Database(); Group* root2 = db2->rootGroup(); int delObjectsSize2 = 0; Entry* e = new Entry(); e->setGroup(root); QCOMPARE(db->deletedObjects().size(), delObjectsSize); QCOMPARE(db2->deletedObjects().size(), delObjectsSize2); e->setGroup(root2); QCOMPARE(db->deletedObjects().size(), ++delObjectsSize); QCOMPARE(db2->deletedObjects().size(), delObjectsSize2); delete e; QCOMPARE(db->deletedObjects().size(), delObjectsSize); QCOMPARE(db2->deletedObjects().size(), ++delObjectsSize2); Group* g1 = new Group(); g1->setParent(root); Uuid g1Uuid = Uuid::random(); g1->setUuid(g1Uuid); Entry* e1 = new Entry(); e1->setGroup(g1); Uuid e1Uuid = Uuid::random(); e1->setUuid(e1Uuid); g1->setParent(root2); delObjectsSize += 2; QCOMPARE(db->deletedObjects().size(), delObjectsSize); QCOMPARE(db2->deletedObjects().size(), delObjectsSize2); QCOMPARE(db->deletedObjects().at(delObjectsSize-2).uuid, e1Uuid); QCOMPARE(db->deletedObjects().at(delObjectsSize-1).uuid, g1Uuid); Group* group = new Group(); Entry* entry = new Entry(); entry->setGroup(group); entry->setGroup(root); QCOMPARE(db->deletedObjects().size(), delObjectsSize); QCOMPARE(db2->deletedObjects().size(), delObjectsSize2); delete group; delete db; delete db2; } keepassx-2.0.3/tests/TestDeletedObjects.h000066400000000000000000000021741276304217300204030ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTDELETEDOBJECTS_H #define KEEPASSX_TESTDELETEDOBJECTS_H #include class Database; class TestDeletedObjects : public QObject { Q_OBJECT private: void createAndDelete(Database* db, int delObjectsSize); private Q_SLOTS: void initTestCase(); void testDeletedObjectsFromFile(); void testDeletedObjectsFromNewDb(); void testDatabaseChange(); }; #endif // KEEPASSX_TESTDELETEDOBJECTS_H keepassx-2.0.3/tests/TestEntry.cpp000066400000000000000000000107701276304217300171600ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestEntry.h" #include #include "tests.h" #include "core/Entry.h" #include "crypto/Crypto.h" QTEST_GUILESS_MAIN(TestEntry) void TestEntry::initTestCase() { QVERIFY(Crypto::init()); } void TestEntry::testHistoryItemDeletion() { Entry* entry = new Entry(); QPointer historyEntry = new Entry(); entry->addHistoryItem(historyEntry); QCOMPARE(entry->historyItems().size(), 1); QList historyEntriesToRemove; historyEntriesToRemove.append(historyEntry); entry->removeHistoryItems(historyEntriesToRemove); QCOMPARE(entry->historyItems().size(), 0); QVERIFY(historyEntry.isNull()); delete entry; } void TestEntry::testCopyDataFrom() { Entry* entry = new Entry(); entry->setTitle("testtitle"); entry->attributes()->set("attr1", "abc"); entry->attributes()->set("attr2", "def"); entry->attachments()->set("test", "123"); entry->attachments()->set("test2", "456"); AutoTypeAssociations::Association assoc; assoc.window = "1"; assoc.sequence = "2"; entry->autoTypeAssociations()->add(assoc); assoc.window = "3"; assoc.sequence = "4"; entry->autoTypeAssociations()->add(assoc); Entry* entry2 = new Entry(); entry2->copyDataFrom(entry); delete entry; QCOMPARE(entry2->title(), QString("testtitle")); QCOMPARE(entry2->attributes()->value("attr1"), QString("abc")); QCOMPARE(entry2->attributes()->value("attr2"), QString("def")); QCOMPARE(entry2->attachments()->keys().size(), 2); QCOMPARE(entry2->attachments()->value("test"), QByteArray("123")); QCOMPARE(entry2->attachments()->value("test2"), QByteArray("456")); QCOMPARE(entry2->autoTypeAssociations()->size(), 2); QCOMPARE(entry2->autoTypeAssociations()->get(0).window, QString("1")); QCOMPARE(entry2->autoTypeAssociations()->get(1).window, QString("3")); } void TestEntry::testClone() { Entry* entryOrg = new Entry(); entryOrg->setUuid(Uuid::random()); entryOrg->setTitle("Original Title"); entryOrg->beginUpdate(); entryOrg->setTitle("New Title"); entryOrg->endUpdate(); TimeInfo entryOrgTime = entryOrg->timeInfo(); QDateTime dateTime; dateTime.setTimeSpec(Qt::UTC); dateTime.setTime_t(60); entryOrgTime.setCreationTime(dateTime); entryOrg->setTimeInfo(entryOrgTime); Entry* entryCloneNone = entryOrg->clone(Entry::CloneNoFlags); QCOMPARE(entryCloneNone->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneNone->title(), QString("New Title")); QCOMPARE(entryCloneNone->historyItems().size(), 0); QCOMPARE(entryCloneNone->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); Entry* entryCloneNewUuid = entryOrg->clone(Entry::CloneNewUuid); QVERIFY(entryCloneNewUuid->uuid() != entryOrg->uuid()); QVERIFY(!entryCloneNewUuid->uuid().isNull()); QCOMPARE(entryCloneNewUuid->title(), QString("New Title")); QCOMPARE(entryCloneNewUuid->historyItems().size(), 0); QCOMPARE(entryCloneNewUuid->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); Entry* entryCloneResetTime = entryOrg->clone(Entry::CloneResetTimeInfo); QCOMPARE(entryCloneNone->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneResetTime->title(), QString("New Title")); QCOMPARE(entryCloneResetTime->historyItems().size(), 0); QVERIFY(entryCloneResetTime->timeInfo().creationTime() != entryOrg->timeInfo().creationTime()); Entry* entryCloneHistory = entryOrg->clone(Entry::CloneIncludeHistory); QCOMPARE(entryCloneNone->uuid(), entryOrg->uuid()); QCOMPARE(entryCloneHistory->title(), QString("New Title")); QCOMPARE(entryCloneHistory->historyItems().size(), 1); QCOMPARE(entryCloneHistory->historyItems().at(0)->title(), QString("Original Title")); QCOMPARE(entryCloneHistory->timeInfo().creationTime(), entryOrg->timeInfo().creationTime()); } keepassx-2.0.3/tests/TestEntry.h000066400000000000000000000017701276304217300166250ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTENTRY_H #define KEEPASSX_TESTENTRY_H #include class Entry; class TestEntry : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testHistoryItemDeletion(); void testCopyDataFrom(); void testClone(); }; #endif // KEEPASSX_TESTENTRY_H keepassx-2.0.3/tests/TestEntryModel.cpp000066400000000000000000000243661276304217300201470ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestEntryModel.h" #include #include #include "modeltest.h" #include "tests.h" #include "core/DatabaseIcons.h" #include "core/Entry.h" #include "core/Group.h" #include "crypto/Crypto.h" #include "gui/IconModels.h" #include "gui/SortFilterHideProxyModel.h" #include "gui/entry/AutoTypeAssociationsModel.h" #include "gui/entry/EntryModel.h" #include "gui/entry/EntryAttachmentsModel.h" #include "gui/entry/EntryAttributesModel.h" QTEST_GUILESS_MAIN(TestEntryModel) void TestEntryModel::initTestCase() { qRegisterMetaType("QModelIndex"); QVERIFY(Crypto::init()); } void TestEntryModel::test() { Group* group1 = new Group(); Group* group2 = new Group(); Entry* entry1 = new Entry(); entry1->setGroup(group1); entry1->setTitle("testTitle1"); Entry* entry2 = new Entry(); entry2->setGroup(group1); entry2->setTitle("testTitle2"); EntryModel* model = new EntryModel(this); ModelTest* modelTest = new ModelTest(model, this); model->setGroup(group1); QCOMPARE(model->rowCount(), 2); QSignalSpy spyDataChanged(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); entry1->setTitle("changed"); QCOMPARE(spyDataChanged.count(), 1); QModelIndex index1 = model->index(0, 1); QModelIndex index2 = model->index(1, 1); QCOMPARE(model->data(index1).toString(), entry1->title()); QCOMPARE(model->data(index2).toString(), entry2->title()); QSignalSpy spyAboutToAdd(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); QSignalSpy spyAdded(model, SIGNAL(rowsInserted(QModelIndex,int,int))); QSignalSpy spyAboutToRemove(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); QSignalSpy spyRemoved(model, SIGNAL(rowsRemoved(QModelIndex,int,int))); Entry* entry3 = new Entry(); entry3->setGroup(group1); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); entry2->setGroup(group2); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 1); QCOMPARE(spyRemoved.count(), 1); QSignalSpy spyReset(model, SIGNAL(modelReset())); model->setGroup(group2); QCOMPARE(spyReset.count(), 1); delete group1; delete group2; delete modelTest; delete model; } void TestEntryModel::testAttachmentsModel() { EntryAttachments* entryAttachments = new EntryAttachments(this); EntryAttachmentsModel* model = new EntryAttachmentsModel(this); ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); model->setEntryAttachments(entryAttachments); QCOMPARE(model->rowCount(), 0); QSignalSpy spyDataChanged(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); QSignalSpy spyAboutToAdd(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); QSignalSpy spyAdded(model, SIGNAL(rowsInserted(QModelIndex,int,int))); QSignalSpy spyAboutToRemove(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); QSignalSpy spyRemoved(model, SIGNAL(rowsRemoved(QModelIndex,int,int))); entryAttachments->set("first", QByteArray("123")); entryAttachments->set("2nd", QByteArray("456")); entryAttachments->set("2nd", QByteArray("789")); QCOMPARE(model->data(model->index(0, 0)).toString().left(4), QString("2nd ")); entryAttachments->remove("first"); QCOMPARE(spyDataChanged.count(), 1); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 1); QCOMPARE(spyRemoved.count(), 1); QSignalSpy spyReset(model, SIGNAL(modelReset())); entryAttachments->clear(); model->setEntryAttachments(0); QCOMPARE(spyReset.count(), 2); QCOMPARE(model->rowCount(), 0); delete modelTest; delete model; delete entryAttachments; } void TestEntryModel::testAttributesModel() { EntryAttributes* entryAttributes = new EntryAttributes(this); EntryAttributesModel* model = new EntryAttributesModel(this); ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); model->setEntryAttributes(entryAttributes); QCOMPARE(model->rowCount(), 0); QSignalSpy spyDataChanged(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); QSignalSpy spyAboutToAdd(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); QSignalSpy spyAdded(model, SIGNAL(rowsInserted(QModelIndex,int,int))); QSignalSpy spyAboutToRemove(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); QSignalSpy spyRemoved(model, SIGNAL(rowsRemoved(QModelIndex,int,int))); entryAttributes->set("first", "123"); entryAttributes->set("2nd", "456"); entryAttributes->set("2nd", "789"); QCOMPARE(model->data(model->index(0, 0)).toString(), QString("2nd")); entryAttributes->remove("first"); // make sure these don't generate messages entryAttributes->set("Title", "test"); entryAttributes->set("Notes", "test"); QCOMPARE(spyDataChanged.count(), 1); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 1); QCOMPARE(spyRemoved.count(), 1); QSignalSpy spyReset(model, SIGNAL(modelReset())); entryAttributes->clear(); model->setEntryAttributes(0); QCOMPARE(spyReset.count(), 2); QCOMPARE(model->rowCount(), 0); delete modelTest; delete model; } void TestEntryModel::testDefaultIconModel() { DefaultIconModel* model = new DefaultIconModel(this); ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), DatabaseIcons::IconCount); delete modelTest; delete model; } void TestEntryModel::testCustomIconModel() { CustomIconModel* model = new CustomIconModel(this); ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); QHash icons; QList iconsOrder; Uuid iconUuid(QByteArray(16, '2')); icons.insert(iconUuid, QPixmap()); iconsOrder << iconUuid; Uuid iconUuid2(QByteArray(16, '1')); QImage icon2; icons.insert(iconUuid2, QPixmap()); iconsOrder << iconUuid2; model->setIcons(icons, iconsOrder); QCOMPARE(model->uuidFromIndex(model->index(0, 0)), iconUuid); QCOMPARE(model->uuidFromIndex(model->index(1, 0)), iconUuid2); delete modelTest; delete model; } void TestEntryModel::testAutoTypeAssociationsModel() { AutoTypeAssociationsModel* model = new AutoTypeAssociationsModel(this); ModelTest* modelTest = new ModelTest(model, this); QCOMPARE(model->rowCount(), 0); AutoTypeAssociations* assocications = new AutoTypeAssociations(this); model->setAutoTypeAssociations(assocications); QCOMPARE(model->rowCount(), 0); AutoTypeAssociations::Association assoc; assoc.window = "1"; assoc.sequence = "2"; assocications->add(assoc); QCOMPARE(model->rowCount(), 1); QCOMPARE(model->data(model->index(0, 0)).toString(), QString("1")); QCOMPARE(model->data(model->index(0, 1)).toString(), QString("2")); assoc.window = "3"; assoc.sequence = "4"; assocications->update(0, assoc); QCOMPARE(model->data(model->index(0, 0)).toString(), QString("3")); QCOMPARE(model->data(model->index(0, 1)).toString(), QString("4")); assocications->add(assoc); assocications->remove(0); QCOMPARE(model->rowCount(), 1); delete modelTest; delete model; delete assocications; } void TestEntryModel::testProxyModel() { EntryModel* modelSource = new EntryModel(this); SortFilterHideProxyModel* modelProxy = new SortFilterHideProxyModel(this); modelProxy->setSourceModel(modelSource); ModelTest* modelTest = new ModelTest(modelProxy, this); Database* db = new Database(); Entry* entry = new Entry(); entry->setTitle("Test Title"); entry->setGroup(db->rootGroup()); modelSource->setGroup(db->rootGroup()); QSignalSpy spyColumnRemove(modelProxy, SIGNAL(columnsAboutToBeRemoved(QModelIndex,int,int))); modelProxy->hideColumn(0, true); QCOMPARE(modelProxy->columnCount(), 3); QVERIFY(spyColumnRemove.size() >= 1); int oldSpyColumnRemoveSize = spyColumnRemove.size(); modelProxy->hideColumn(0, true); QCOMPARE(spyColumnRemove.size(), oldSpyColumnRemoveSize); modelProxy->hideColumn(100, true); QCOMPARE(spyColumnRemove.size(), oldSpyColumnRemoveSize); QList entryList; entryList << entry; modelSource->setEntryList(entryList); QSignalSpy spyColumnInsert(modelProxy, SIGNAL(columnsAboutToBeInserted(QModelIndex,int,int))); modelProxy->hideColumn(0, false); QCOMPARE(modelProxy->columnCount(), 4); QVERIFY(spyColumnInsert.size() >= 1); int oldSpyColumnInsertSize = spyColumnInsert.size(); modelProxy->hideColumn(0, false); QCOMPARE(spyColumnInsert.size(), oldSpyColumnInsertSize); delete modelTest; delete modelProxy; delete modelSource; delete db; } void TestEntryModel::testDatabaseDelete() { EntryModel* model = new EntryModel(this); ModelTest* modelTest = new ModelTest(model, this); Database* db1 = new Database(); Group* group1 = new Group(); group1->setParent(db1->rootGroup()); Entry* entry1 = new Entry(); entry1->setGroup(group1); Database* db2 = new Database(); Entry* entry2 = new Entry(); entry2->setGroup(db2->rootGroup()); model->setEntryList(QList() << entry1 << entry2); QCOMPARE(model->rowCount(), 2); delete db1; QCOMPARE(model->rowCount(), 1); delete entry2; QCOMPARE(model->rowCount(), 0); delete db2; delete modelTest; delete model; } keepassx-2.0.3/tests/TestEntryModel.h000066400000000000000000000022361276304217300176040ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTENTRYMODEL_H #define KEEPASSX_TESTENTRYMODEL_H #include class TestEntryModel : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void test(); void testAttachmentsModel(); void testAttributesModel(); void testDefaultIconModel(); void testCustomIconModel(); void testAutoTypeAssociationsModel(); void testProxyModel(); void testDatabaseDelete(); }; #endif // KEEPASSX_TESTENTRYMODEL_H keepassx-2.0.3/tests/TestEntrySearcher.cpp000066400000000000000000000104251276304217300206320ustar00rootroot00000000000000/* * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestEntrySearcher.h" #include #include "tests.h" QTEST_GUILESS_MAIN(TestEntrySearcher) void TestEntrySearcher::initTestCase() { m_groupRoot = new Group(); } void TestEntrySearcher::cleanupTestCase() { delete m_groupRoot; } void TestEntrySearcher::testSearch() { Group* group1 = new Group(); Group* group2 = new Group(); Group* group3 = new Group(); group1->setParent(m_groupRoot); group2->setParent(m_groupRoot); group3->setParent(m_groupRoot); Group* group11 = new Group(); group11->setParent(group1); Group* group21 = new Group(); Group* group211 = new Group(); Group* group2111 = new Group(); group21->setParent(group2); group211->setParent(group21); group2111->setParent(group211); group1->setSearchingEnabled(Group::Disable); group11->setSearchingEnabled(Group::Enable); Entry* eRoot = new Entry(); eRoot->setNotes("test search term test"); eRoot->setGroup(m_groupRoot); Entry* eRoot2 = new Entry(); eRoot2->setNotes("test term test"); eRoot2->setGroup(m_groupRoot); Entry* e1 = new Entry(); e1->setNotes("test search term test"); e1->setGroup(group1); Entry* e11 = new Entry(); e11->setNotes("test search term test"); e11->setGroup(group11); Entry* e2111 = new Entry(); e2111->setNotes("test search term test"); e2111->setGroup(group2111); Entry* e2111b = new Entry(); e2111b->setNotes("test search test"); e2111b->setGroup(group2111); Entry* e3 = new Entry(); e3->setNotes("test search term test"); e3->setGroup(group3); Entry* e3b = new Entry(); e3b->setNotes("test search test"); e3b->setGroup(group3); m_searchResult = m_entrySearcher.search("search term", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 3); m_searchResult = m_entrySearcher.search("search term", group211, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search("search term", group11, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search("search term", group1, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 0); } void TestEntrySearcher::testAndConcatenationInSearch() { Entry* entry = new Entry(); entry->setNotes("abc def ghi"); entry->setTitle("jkl"); entry->setGroup(m_groupRoot); m_searchResult = m_entrySearcher.search("", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search("def", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search(" abc ghi ", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search("ghi ef", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); m_searchResult = m_entrySearcher.search("abc ef xyz", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 0); m_searchResult = m_entrySearcher.search("abc kl", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); } void TestEntrySearcher::testAllAttributesAreSearched() { Entry* entry = new Entry(); entry->setGroup(m_groupRoot); entry->setTitle("testTitle"); entry->setUsername("testUsername"); entry->setUrl("testUrl"); entry->setNotes("testNote"); m_searchResult = m_entrySearcher.search("testTitle testUsername testUrl testNote", m_groupRoot, Qt::CaseInsensitive); QCOMPARE(m_searchResult.count(), 1); } keepassx-2.0.3/tests/TestEntrySearcher.h000066400000000000000000000023361276304217300203010ustar00rootroot00000000000000/* * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTENTRYSEARCHER_H #define KEEPASSX_TESTENTRYSEARCHER_H #include #include "core/EntrySearcher.h" #include "core/Group.h" class TestEntrySearcher : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void testAndConcatenationInSearch(); void testSearch(); void testAllAttributesAreSearched(); private: Group* m_groupRoot; EntrySearcher m_entrySearcher; QList m_searchResult; }; #endif // KEEPASSX_TESTENTRYSEARCHER_H keepassx-2.0.3/tests/TestExporter.cpp000066400000000000000000000051151276304217300176640ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestExporter.h" #include #include "tests.h" #include "core/ToDbExporter.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" QTEST_GUILESS_MAIN(TestExporter) void TestExporter::initTestCase() { QVERIFY(Crypto::init()); } void TestExporter::testToDbExporter() { QImage iconImage(1, 1, QImage::Format_RGB32); iconImage.setPixel(0, 0, qRgb(1, 2, 3)); Uuid iconUuid = Uuid::random(); QImage iconUnusedImage(1, 1, QImage::Format_RGB32); iconUnusedImage.setPixel(0, 0, qRgb(1, 2, 3)); Uuid iconUnusedUuid = Uuid::random(); Database* dbOrg = new Database(); Group* groupOrg = new Group(); groupOrg->setParent(dbOrg->rootGroup()); groupOrg->setName("GTEST"); Entry* entryOrg = new Entry(); entryOrg->setGroup(groupOrg); entryOrg->setTitle("ETEST"); dbOrg->metadata()->addCustomIcon(iconUuid, iconImage); dbOrg->metadata()->addCustomIcon(iconUnusedUuid, iconUnusedImage); entryOrg->setIcon(iconUuid); entryOrg->beginUpdate(); entryOrg->setIcon(Entry::DefaultIconNumber); entryOrg->endUpdate(); Database* dbExp = ToDbExporter().exportGroup(groupOrg); QCOMPARE(dbExp->rootGroup()->children().size(), 1); Group* groupExp = dbExp->rootGroup()->children().at(0); QVERIFY(groupExp != groupOrg); QCOMPARE(groupExp->name(), groupOrg->name()); QCOMPARE(groupExp->entries().size(), 1); Entry* entryExp = groupExp->entries().at(0); QCOMPARE(entryExp->title(), entryOrg->title()); QCOMPARE(dbExp->metadata()->customIcons().size(), 1); QVERIFY(dbExp->metadata()->containsCustomIcon(iconUuid)); QCOMPARE(entryExp->iconNumber(), entryOrg->iconNumber()); QCOMPARE(entryExp->historyItems().size(), 1); QCOMPARE(entryExp->historyItems().at(0)->iconUuid(), iconUuid); delete dbOrg; delete dbExp; } keepassx-2.0.3/tests/TestExporter.h000066400000000000000000000017641276304217300173370ustar00rootroot00000000000000/* * Copyright (C) 2014 Felix Geyer * Copyright (C) 2014 Florian Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTEXPORTER_H #define KEEPASSX_TESTEXPORTER_H #include class TestExporter : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testToDbExporter(); }; #endif // KEEPASSX_TESTEXPORTER_H keepassx-2.0.3/tests/TestGroup.cpp000066400000000000000000000343661276304217300171620ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestGroup.h" #include #include #include #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" QTEST_GUILESS_MAIN(TestGroup) void TestGroup::initTestCase() { qRegisterMetaType("Entry*"); qRegisterMetaType("Group*"); QVERIFY(Crypto::init()); } void TestGroup::testParenting() { Database* db = new Database(); QPointer rootGroup = db->rootGroup(); Group* tmpRoot = new Group(); QPointer g1 = new Group(); QPointer g2 = new Group(); QPointer g3 = new Group(); QPointer g4 = new Group(); g1->setParent(tmpRoot); g2->setParent(tmpRoot); g3->setParent(tmpRoot); g4->setParent(tmpRoot); g2->setParent(g1); g4->setParent(g3); g3->setParent(g1); g1->setParent(db->rootGroup()); QVERIFY(g1->parent() == rootGroup); QVERIFY(g2->parent() == g1); QVERIFY(g3->parent() == g1); QVERIFY(g4->parent() == g3); QVERIFY(g1->database() == db); QVERIFY(g2->database() == db); QVERIFY(g3->database() == db); QVERIFY(g4->database() == db); QCOMPARE(tmpRoot->children().size(), 0); QCOMPARE(rootGroup->children().size(), 1); QCOMPARE(g1->children().size(), 2); QCOMPARE(g2->children().size(), 0); QCOMPARE(g3->children().size(), 1); QCOMPARE(g4->children().size(), 0); QVERIFY(rootGroup->children().at(0) == g1); QVERIFY(g1->children().at(0) == g2); QVERIFY(g1->children().at(1) == g3); QVERIFY(g3->children().contains(g4)); Group* g5 = new Group(); Group* g6 = new Group(); g5->setParent(db->rootGroup()); g6->setParent(db->rootGroup()); QVERIFY(db->rootGroup()->children().at(1) == g5); QVERIFY(db->rootGroup()->children().at(2) == g6); g5->setParent(db->rootGroup()); QVERIFY(db->rootGroup()->children().at(1) == g6); QVERIFY(db->rootGroup()->children().at(2) == g5); QSignalSpy spy(db, SIGNAL(groupDataChanged(Group*))); g2->setName("test"); g4->setName("test"); g3->setName("test"); g1->setName("test"); g3->setIcon(Uuid::random()); g1->setIcon(2); QCOMPARE(spy.count(), 6); delete db; QVERIFY(rootGroup.isNull()); QVERIFY(g1.isNull()); QVERIFY(g2.isNull()); QVERIFY(g3.isNull()); QVERIFY(g4.isNull()); delete tmpRoot; } void TestGroup::testSignals() { Database* db = new Database(); Database* db2 = new Database(); QPointer root = db->rootGroup(); QSignalSpy spyAboutToAdd(db, SIGNAL(groupAboutToAdd(Group*,int))); QSignalSpy spyAdded(db, SIGNAL(groupAdded())); QSignalSpy spyAboutToRemove(db, SIGNAL(groupAboutToRemove(Group*))); QSignalSpy spyRemoved(db, SIGNAL(groupRemoved())); QSignalSpy spyAboutToMove(db, SIGNAL(groupAboutToMove(Group*,Group*,int))); QSignalSpy spyMoved(db, SIGNAL(groupMoved())); QSignalSpy spyAboutToAdd2(db2, SIGNAL(groupAboutToAdd(Group*,int))); QSignalSpy spyAdded2(db2, SIGNAL(groupAdded())); QSignalSpy spyAboutToRemove2(db2, SIGNAL(groupAboutToRemove(Group*))); QSignalSpy spyRemoved2(db2, SIGNAL(groupRemoved())); QSignalSpy spyAboutToMove2(db2, SIGNAL(groupAboutToMove(Group*,Group*,int))); QSignalSpy spyMoved2(db2, SIGNAL(groupMoved())); Group* g1 = new Group(); Group* g2 = new Group(); g1->setParent(root); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 0); QCOMPARE(spyMoved.count(), 0); g2->setParent(root); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 0); QCOMPARE(spyMoved.count(), 0); g2->setParent(root); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 0); QCOMPARE(spyMoved.count(), 0); g2->setParent(root, 0); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 1); QCOMPARE(spyMoved.count(), 1); g1->setParent(g2); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); delete g1; QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 1); QCOMPARE(spyRemoved.count(), 1); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); g2->setParent(db2->rootGroup()); QCOMPARE(spyAboutToAdd.count(), 2); QCOMPARE(spyAdded.count(), 2); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); QCOMPARE(spyAboutToAdd2.count(), 1); QCOMPARE(spyAdded2.count(), 1); QCOMPARE(spyAboutToRemove2.count(), 0); QCOMPARE(spyRemoved2.count(), 0); QCOMPARE(spyAboutToMove2.count(), 0); QCOMPARE(spyMoved2.count(), 0); Group* g3 = new Group(); Group* g4 = new Group(); g3->setParent(root); QCOMPARE(spyAboutToAdd.count(), 3); QCOMPARE(spyAdded.count(), 3); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); g4->setParent(root); QCOMPARE(spyAboutToAdd.count(), 4); QCOMPARE(spyAdded.count(), 4); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); g3->setParent(root); QCOMPARE(spyAboutToAdd.count(), 4); QCOMPARE(spyAdded.count(), 4); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); QCOMPARE(spyAboutToMove.count(), 3); QCOMPARE(spyMoved.count(), 3); delete db; delete db2; QVERIFY(root.isNull()); } void TestGroup::testEntries() { Group* group = new Group(); QPointer entry1 = new Entry(); entry1->setGroup(group); QPointer entry2 = new Entry(); entry2->setGroup(group); QCOMPARE(group->entries().size(), 2); QVERIFY(group->entries().at(0) == entry1); QVERIFY(group->entries().at(1) == entry2); delete group; QVERIFY(entry1.isNull()); QVERIFY(entry2.isNull()); } void TestGroup::testDeleteSignals() { Database* db = new Database(); Group* groupRoot = db->rootGroup(); Group* groupChild = new Group(); Group* groupChildChild = new Group(); groupRoot->setObjectName("groupRoot"); groupChild->setObjectName("groupChild"); groupChildChild->setObjectName("groupChildChild"); groupChild->setParent(groupRoot); groupChildChild->setParent(groupChild); QSignalSpy spyAboutToRemove(db, SIGNAL(groupAboutToRemove(Group*))); QSignalSpy spyRemoved(db, SIGNAL(groupRemoved())); delete groupChild; QVERIFY(groupRoot->children().isEmpty()); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); delete db; Group* group = new Group(); Entry* entry = new Entry(); entry->setGroup(group); QSignalSpy spyEntryAboutToRemove(group, SIGNAL(entryAboutToRemove(Entry*))); QSignalSpy spyEntryRemoved(group, SIGNAL(entryRemoved(Entry*))); delete entry; QVERIFY(group->entries().isEmpty()); QCOMPARE(spyEntryAboutToRemove.count(), 1); QCOMPARE(spyEntryRemoved.count(), 1); delete group; Database* db2 = new Database(); Group* groupRoot2 = db2->rootGroup(); Group* group2 = new Group(); group2->setParent(groupRoot2); Entry* entry2 = new Entry(); entry2->setGroup(group2); QSignalSpy spyEntryAboutToRemove2(group2, SIGNAL(entryAboutToRemove(Entry*))); QSignalSpy spyEntryRemoved2(group2, SIGNAL(entryRemoved(Entry*))); delete group2; QCOMPARE(spyEntryAboutToRemove2.count(), 1); QCOMPARE(spyEntryRemoved2.count(), 1); delete db2; } void TestGroup::testCopyCustomIcon() { Database* dbSource = new Database(); Uuid groupIconUuid = Uuid::random(); QImage groupIcon(16, 16, QImage::Format_RGB32); groupIcon.setPixel(0, 0, qRgb(255, 0, 0)); dbSource->metadata()->addCustomIcon(groupIconUuid, groupIcon); Uuid entryIconUuid = Uuid::random(); QImage entryIcon(16, 16, QImage::Format_RGB32); entryIcon.setPixel(0, 0, qRgb(255, 0, 0)); dbSource->metadata()->addCustomIcon(entryIconUuid, entryIcon); Group* group = new Group(); group->setParent(dbSource->rootGroup()); group->setIcon(groupIconUuid); QCOMPARE(group->icon(), groupIcon); Entry* entry = new Entry(); entry->setGroup(dbSource->rootGroup()); entry->setIcon(entryIconUuid); QCOMPARE(entry->icon(), entryIcon); Database* dbTarget = new Database(); group->setParent(dbTarget->rootGroup()); QVERIFY(dbTarget->metadata()->containsCustomIcon(groupIconUuid)); QCOMPARE(dbTarget->metadata()->customIcon(groupIconUuid), groupIcon); QCOMPARE(group->icon(), groupIcon); entry->setGroup(dbTarget->rootGroup()); QVERIFY(dbTarget->metadata()->containsCustomIcon(entryIconUuid)); QCOMPARE(dbTarget->metadata()->customIcon(entryIconUuid), entryIcon); QCOMPARE(entry->icon(), entryIcon); delete dbSource; delete dbTarget; } void TestGroup::testClone() { Database* db = new Database(); Group* originalGroup = new Group(); originalGroup->setParent(db->rootGroup()); originalGroup->setName("Group"); originalGroup->setIcon(42); Entry* originalGroupEntry = new Entry(); originalGroupEntry->setGroup(originalGroup); originalGroupEntry->setTitle("GroupEntryOld"); originalGroupEntry->setIcon(43); originalGroupEntry->beginUpdate(); originalGroupEntry->setTitle("GroupEntry"); originalGroupEntry->endUpdate(); Group* subGroup = new Group(); subGroup->setParent(originalGroup); subGroup->setName("SubGroup"); Entry* subGroupEntry = new Entry(); subGroupEntry->setGroup(subGroup); subGroupEntry->setTitle("SubGroupEntry"); Group* clonedGroup = originalGroup->clone(); QVERIFY(!clonedGroup->parentGroup()); QVERIFY(!clonedGroup->database()); QVERIFY(clonedGroup->uuid() != originalGroup->uuid()); QCOMPARE(clonedGroup->name(), QString("Group")); QCOMPARE(clonedGroup->iconNumber(), 42); QCOMPARE(clonedGroup->children().size(), 1); QCOMPARE(clonedGroup->entries().size(), 1); Entry* clonedGroupEntry = clonedGroup->entries().at(0); QVERIFY(clonedGroupEntry->uuid() != originalGroupEntry->uuid()); QCOMPARE(clonedGroupEntry->title(), QString("GroupEntry")); QCOMPARE(clonedGroupEntry->iconNumber(), 43); QCOMPARE(clonedGroupEntry->historyItems().size(), 0); Group* clonedSubGroup = clonedGroup->children().at(0); QVERIFY(clonedSubGroup->uuid() != subGroup->uuid()); QCOMPARE(clonedSubGroup->name(), QString("SubGroup")); QCOMPARE(clonedSubGroup->children().size(), 0); QCOMPARE(clonedSubGroup->entries().size(), 1); Entry* clonedSubGroupEntry = clonedSubGroup->entries().at(0); QVERIFY(clonedSubGroupEntry->uuid() != subGroupEntry->uuid()); QCOMPARE(clonedSubGroupEntry->title(), QString("SubGroupEntry")); Group* clonedGroupKeepUuid = originalGroup->clone(Entry::CloneNoFlags); QCOMPARE(clonedGroupKeepUuid->entries().at(0)->uuid(), originalGroupEntry->uuid()); QCOMPARE(clonedGroupKeepUuid->children().at(0)->entries().at(0)->uuid(), subGroupEntry->uuid()); delete clonedGroup; delete clonedGroupKeepUuid; delete db; } void TestGroup::testCopyCustomIcons() { Database* dbSource = new Database(); Database* dbTarget = new Database(); QImage iconImage1(1, 1, QImage::Format_RGB32); iconImage1.setPixel(0, 0, qRgb(1, 2, 3)); QImage iconImage2(1, 1, QImage::Format_RGB32); iconImage2.setPixel(0, 0, qRgb(4, 5, 6)); Group* group1 = new Group(); group1->setParent(dbSource->rootGroup()); Uuid group1Icon = Uuid::random(); dbSource->metadata()->addCustomIcon(group1Icon, iconImage1); group1->setIcon(group1Icon); Group* group2 = new Group(); group2->setParent(group1); Uuid group2Icon = Uuid::random(); dbSource->metadata()->addCustomIcon(group2Icon, iconImage1); group2->setIcon(group2Icon); Entry* entry1 = new Entry(); entry1->setGroup(group2); Uuid entry1IconOld = Uuid::random(); dbSource->metadata()->addCustomIcon(entry1IconOld, iconImage1); entry1->setIcon(entry1IconOld); // add history item entry1->beginUpdate(); Uuid entry1IconNew = Uuid::random(); dbSource->metadata()->addCustomIcon(entry1IconNew, iconImage1); entry1->setIcon(entry1IconNew); entry1->endUpdate(); // test that we don't overwrite icons dbTarget->metadata()->addCustomIcon(group2Icon, iconImage2); dbTarget->metadata()->copyCustomIcons(group1->customIconsRecursive(), dbSource->metadata()); Metadata* metaTarget = dbTarget->metadata(); QCOMPARE(metaTarget->customIcons().size(), 4); QVERIFY(metaTarget->containsCustomIcon(group1Icon)); QVERIFY(metaTarget->containsCustomIcon(group2Icon)); QVERIFY(metaTarget->containsCustomIcon(entry1IconOld)); QVERIFY(metaTarget->containsCustomIcon(entry1IconNew)); QCOMPARE(metaTarget->customIcon(group1Icon).pixel(0, 0), qRgb(1, 2, 3)); QCOMPARE(metaTarget->customIcon(group2Icon).pixel(0, 0), qRgb(4, 5, 6)); } keepassx-2.0.3/tests/TestGroup.h000066400000000000000000000021201276304217300166060ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTGROUP_H #define KEEPASSX_TESTGROUP_H #include class TestGroup : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testParenting(); void testSignals(); void testEntries(); void testDeleteSignals(); void testCopyCustomIcon(); void testClone(); void testCopyCustomIcons(); }; #endif // KEEPASSX_TESTGROUP_H keepassx-2.0.3/tests/TestGroupModel.cpp000066400000000000000000000123061276304217300201310ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestGroupModel.h" #include #include #include "modeltest.h" #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "crypto/Crypto.h" #include "gui/group/GroupModel.h" QTEST_GUILESS_MAIN(TestGroupModel) void TestGroupModel::initTestCase() { qRegisterMetaType("QModelIndex"); QVERIFY(Crypto::init()); } void TestGroupModel::test() { Database* db = new Database(); Group* groupRoot = db->rootGroup(); groupRoot->setObjectName("groupRoot"); groupRoot->setName("groupRoot"); Group* group1 = new Group(); group1->setObjectName("group1"); group1->setName("group1"); group1->setParent(groupRoot); Group* group11 = new Group(); group1->setObjectName("group11"); group11->setName("group11"); group11->setParent(group1); Group* group12 = new Group(); group1->setObjectName("group12"); group12->setName("group12"); group12->setParent(group1); Group* group121 = new Group(); group1->setObjectName("group121"); group121->setName("group121"); group121->setParent(group12); GroupModel* model = new GroupModel(db, this); ModelTest* modelTest = new ModelTest(model, this); QModelIndex indexRoot = model->index(0, 0); QModelIndex index1 = model->index(0, 0, indexRoot); QModelIndex index11 = model->index(0, 0, index1); QPersistentModelIndex index12 = model->index(1, 0, index1); QModelIndex index121 = model->index(0, 0, index12); QCOMPARE(model->data(indexRoot).toString(), QString("groupRoot")); QCOMPARE(model->data(index1).toString(), QString("group1")); QCOMPARE(model->data(index11).toString(), QString("group11")); QCOMPARE(model->data(index12).toString(), QString("group12")); QCOMPARE(model->data(index121).toString(), QString("group121")); QSignalSpy spy1(model, SIGNAL(dataChanged(QModelIndex,QModelIndex))); group11->setName("test"); group121->setIcon(4); QCOMPARE(spy1.count(), 2); QCOMPARE(model->data(index11).toString(), QString("test")); QSignalSpy spyAboutToAdd(model, SIGNAL(rowsAboutToBeInserted(QModelIndex,int,int))); QSignalSpy spyAdded(model, SIGNAL(rowsInserted(QModelIndex,int,int))); QSignalSpy spyAboutToRemove(model, SIGNAL(rowsAboutToBeRemoved(QModelIndex,int,int))); QSignalSpy spyRemoved(model, SIGNAL(rowsRemoved(QModelIndex,int,int))); QSignalSpy spyAboutToMove(model, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int))); QSignalSpy spyMoved(model, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int))); Group* group2 = new Group(); group2->setObjectName("group2"); group2->setName("group2"); group2->setParent(groupRoot); QModelIndex index2 = model->index(1, 0, indexRoot); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 0); QCOMPARE(spyMoved.count(), 0); QCOMPARE(model->data(index2).toString(), QString("group2")); group12->setParent(group1, 0); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 1); QCOMPARE(spyMoved.count(), 1); QCOMPARE(model->data(index12).toString(), QString("group12")); group12->setParent(group1, 1); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 2); QCOMPARE(spyMoved.count(), 2); QCOMPARE(model->data(index12).toString(), QString("group12")); group12->setParent(group2); QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 0); QCOMPARE(spyRemoved.count(), 0); QCOMPARE(spyAboutToMove.count(), 3); QCOMPARE(spyMoved.count(), 3); QVERIFY(index12.isValid()); QCOMPARE(model->data(index12).toString(), QString("group12")); QCOMPARE(model->data(index12.child(0, 0)).toString(), QString("group121")); delete group12; QCOMPARE(spyAboutToAdd.count(), 1); QCOMPARE(spyAdded.count(), 1); QCOMPARE(spyAboutToRemove.count(), 2); QCOMPARE(spyRemoved.count(), 2); QCOMPARE(spyAboutToMove.count(), 3); QCOMPARE(spyMoved.count(), 3); QVERIFY(!index12.isValid()); // test removing a group that has children delete group1; delete db; delete modelTest; delete model; } keepassx-2.0.3/tests/TestGroupModel.h000066400000000000000000000016701276304217300176000ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTGROUPMODEL_H #define KEEPASSX_TESTGROUPMODEL_H #include class TestGroupModel : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void test(); }; #endif // KEEPASSX_TESTGROUPMODEL_H keepassx-2.0.3/tests/TestHashedBlockStream.cpp000066400000000000000000000061121276304217300213750ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestHashedBlockStream.h" #include #include #include "tests.h" #include "FailDevice.h" #include "crypto/Crypto.h" #include "streams/HashedBlockStream.h" QTEST_GUILESS_MAIN(TestHashedBlockStream) void TestHashedBlockStream::initTestCase() { QVERIFY(Crypto::init()); } void TestHashedBlockStream::testWriteRead() { QByteArray data = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QBuffer buffer; QVERIFY(buffer.open(QIODevice::ReadWrite)); HashedBlockStream writer(&buffer, 16); QVERIFY(writer.open(QIODevice::WriteOnly)); HashedBlockStream reader(&buffer); QVERIFY(reader.open(QIODevice::ReadOnly)); QCOMPARE(writer.write(data.left(16)), qint64(16)); QVERIFY(writer.reset()); buffer.reset(); QCOMPARE(reader.read(17), data.left(16)); QVERIFY(reader.reset()); buffer.reset(); buffer.buffer().clear(); QCOMPARE(writer.write(data.left(10)), qint64(10)); QVERIFY(writer.reset()); buffer.reset(); QCOMPARE(reader.read(5), data.left(5)); QCOMPARE(reader.read(5), data.mid(5, 5)); QCOMPARE(reader.read(1).size(), 0); QVERIFY(reader.reset()); buffer.reset(); buffer.buffer().clear(); QCOMPARE(writer.write(data.left(20)), qint64(20)); QVERIFY(writer.reset()); buffer.reset(); QCOMPARE(reader.read(20), data.left(20)); QCOMPARE(reader.read(1).size(), 0); QVERIFY(reader.reset()); buffer.reset(); buffer.buffer().clear(); } void TestHashedBlockStream::testReset() { QBuffer buffer; QVERIFY(buffer.open(QIODevice::WriteOnly)); HashedBlockStream writer(&buffer, 16); QVERIFY(writer.open(QIODevice::WriteOnly)); QCOMPARE(writer.write(QByteArray(8, 'Z')), qint64(8)); // test if reset() and close() write only one final block QVERIFY(writer.reset()); QVERIFY(writer.reset()); writer.close(); QCOMPARE(buffer.buffer().size(), 8 + (32 + 4 + 4) * 2); } void TestHashedBlockStream::testWriteFailure() { FailDevice failDevice(1500); QVERIFY(failDevice.open(QIODevice::WriteOnly)); QByteArray input(2000, 'Z'); HashedBlockStream writer(&failDevice, 500); QVERIFY(writer.open(QIODevice::WriteOnly)); QCOMPARE(writer.write(input.left(900)), qint64(900)); writer.write(input.left(900)); QVERIFY(!writer.reset()); QCOMPARE(writer.errorString(), QString("FAILDEVICE")); } keepassx-2.0.3/tests/TestHashedBlockStream.h000066400000000000000000000020201276304217300210340ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTHASHEDBLOCKSTREAM_H #define KEEPASSX_TESTHASHEDBLOCKSTREAM_H #include class TestHashedBlockStream : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testWriteRead(); void testReset(); void testWriteFailure(); }; #endif // KEEPASSX_TESTHASHEDBLOCKSTREAM_H keepassx-2.0.3/tests/TestKeePass1Reader.cpp000066400000000000000000000235671276304217300206260ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeePass1Reader.h" #include #include #include "config-keepassx-tests.h" #include "tests.h" #include "core/Database.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" #include "format/KeePass1Reader.h" #include "format/KeePass2Reader.h" #include "format/KeePass2Writer.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" QTEST_GUILESS_MAIN(TestKeePass1Reader) void TestKeePass1Reader::initTestCase() { QVERIFY(Crypto::init()); QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/basic.kdb"); KeePass1Reader reader; m_db = reader.readDatabase(filename, "masterpw", 0); QVERIFY(m_db); QVERIFY(!reader.hasError()); } void TestKeePass1Reader::testBasic() { QVERIFY(m_db->deletedObjects().isEmpty()); QCOMPARE(m_db->rootGroup()->children().size(), 2); Group* group1 = m_db->rootGroup()->children().at(0); QVERIFY(!group1->uuid().isNull()); QCOMPARE(group1->name(), QString("Internet")); QCOMPARE(group1->children().size(), 2); QCOMPARE(group1->entries().size(), 2); QCOMPARE(group1->iconNumber(), 1); Entry* entry11 = group1->entries().at(0); QVERIFY(!entry11->uuid().isNull()); QCOMPARE(entry11->title(), QString("Test entry")); QCOMPARE(entry11->iconNumber(), 1); QCOMPARE(entry11->username(), QString("I")); QCOMPARE(entry11->url(), QString("http://example.com/")); QCOMPARE(entry11->password(), QString("secretpassword")); QCOMPARE(entry11->notes(), QString("Lorem ipsum\ndolor sit amet")); QVERIFY(entry11->timeInfo().expires()); QCOMPARE(entry11->timeInfo().expiryTime(), genDT(2012, 5, 9, 10, 32)); QCOMPARE(entry11->attachments()->keys().size(), 1); QCOMPARE(entry11->attachments()->keys().at(0), QString("attachment.txt")); QCOMPARE(entry11->attachments()->value("attachment.txt"), QByteArray("hello world\n")); Entry* entry12 = group1->entries().at(1); QCOMPARE(entry12->title(), QString("")); QCOMPARE(entry12->iconNumber(), 0); QCOMPARE(entry12->username(), QString("")); QCOMPARE(entry12->url(), QString("")); QCOMPARE(entry12->password(), QString("")); QCOMPARE(entry12->notes(), QString("")); QVERIFY(!entry12->timeInfo().expires()); QCOMPARE(entry12->attachments()->keys().size(), 0); Group* group11 = group1->children().at(0); QCOMPARE(group11->name(), QString("Subgroup 1")); QCOMPARE(group11->children().size(), 1); Group* group111 = group11->children().at(0); QCOMPARE(group111->name(), QString("Unexpanded")); QCOMPARE(group111->children().size(), 1); Group* group1111 = group111->children().at(0); QCOMPARE(group1111->name(), QString("abc")); QCOMPARE(group1111->children().size(), 0); Group* group12 = group1->children().at(1); QCOMPARE(group12->name(), QString("Subgroup 2")); QCOMPARE(group12->children().size(), 0); Group* group2 = m_db->rootGroup()->children().at(1); QCOMPARE(group2->name(), QString("eMail")); QCOMPARE(group2->entries().size(), 1); QCOMPARE(group2->iconNumber(), 19); reopenDatabase(m_db, "masterpw", QString()); } void TestKeePass1Reader::testMasterKey() { QVERIFY(m_db->hasKey()); QCOMPARE(m_db->transformRounds(), static_cast(713)); } void TestKeePass1Reader::testCustomIcons() { QCOMPARE(m_db->metadata()->customIcons().size(), 1); Entry* entry = m_db->rootGroup()->children().at(1)->entries().at(0); QCOMPARE(entry->icon().width(), 16); QCOMPARE(entry->icon().height(), 16); for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { QRgb rgb = entry->icon().pixel(x, y); QCOMPARE(qRed(rgb), 8); QCOMPARE(qGreen(rgb), 160); QCOMPARE(qBlue(rgb), 60); } } } void TestKeePass1Reader::testGroupExpanded() { QCOMPARE(m_db->rootGroup()->children().at(0)->isExpanded(), true); QCOMPARE(m_db->rootGroup()->children().at(0)->children().at(0)->isExpanded(), true); QCOMPARE(m_db->rootGroup()->children().at(0)->children().at(0)->children().at(0)->isExpanded(), false); } void TestKeePass1Reader::testAutoType() { Group* group = m_db->rootGroup()->children().at(0)->children().at(0); QCOMPARE(group->entries().size(), 2); Entry* entry1 = group->entries().at(0); QCOMPARE(entry1->notes(), QString("last line")); QCOMPARE(entry1->defaultAutoTypeSequence(), QString("{USERNAME}{ENTER}")); QCOMPARE(entry1->autoTypeAssociations()->size(), 5); QCOMPARE(entry1->autoTypeAssociations()->get(0).sequence, QString("")); QCOMPARE(entry1->autoTypeAssociations()->get(0).window, QString("a window")); QCOMPARE(entry1->autoTypeAssociations()->get(1).sequence, QString("")); QCOMPARE(entry1->autoTypeAssociations()->get(1).window, QString("a second window")); QCOMPARE(entry1->autoTypeAssociations()->get(2).sequence, QString("{PASSWORD}{ENTER}")); QCOMPARE(entry1->autoTypeAssociations()->get(2).window, QString("Window Nr 1a")); QCOMPARE(entry1->autoTypeAssociations()->get(3).sequence, QString("{PASSWORD}{ENTER}")); QCOMPARE(entry1->autoTypeAssociations()->get(3).window, QString("Window Nr 1b")); QCOMPARE(entry1->autoTypeAssociations()->get(4).sequence, QString("")); QCOMPARE(entry1->autoTypeAssociations()->get(4).window, QString("Window 2")); Entry* entry2 = group->entries().at(1); QCOMPARE(entry2->notes(), QString("start line\nend line")); QCOMPARE(entry2->defaultAutoTypeSequence(), QString("")); QCOMPARE(entry2->autoTypeAssociations()->size(), 2); QCOMPARE(entry2->autoTypeAssociations()->get(0).sequence, QString("")); QCOMPARE(entry2->autoTypeAssociations()->get(0).window, QString("Main Window")); QCOMPARE(entry2->autoTypeAssociations()->get(1).sequence, QString("")); QCOMPARE(entry2->autoTypeAssociations()->get(1).window, QString("Test Window")); } void TestKeePass1Reader::testFileKey() { QFETCH(QString, type); QString name = QString("FileKey").append(type); KeePass1Reader reader; QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); QString keyFilename = QString("%1/%2.key").arg(QString(KEEPASSX_TEST_DATA_DIR), name); Database* db = reader.readDatabase(dbFilename, QString(), keyFilename); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); QCOMPARE(db->rootGroup()->children().at(0)->name(), name); reopenDatabase(db, QString(), keyFilename); delete db; } void TestKeePass1Reader::testFileKey_data() { QTest::addColumn("type"); QTest::newRow("Binary") << QString("Binary"); QTest::newRow("Hex") << QString("Hex"); QTest::newRow("Hashed") << QString("Hashed"); } void TestKeePass1Reader::testCompositeKey() { QString name = "CompositeKey"; KeePass1Reader reader; QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); QString keyFilename = QString("%1/FileKeyHex.key").arg(QString(KEEPASSX_TEST_DATA_DIR)); Database* db = reader.readDatabase(dbFilename, "mypassword", keyFilename); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); QCOMPARE(db->rootGroup()->children().at(0)->name(), name); reopenDatabase(db, "mypassword", keyFilename); delete db; } void TestKeePass1Reader::testTwofish() { QString name = "Twofish"; KeePass1Reader reader; QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); Database* db = reader.readDatabase(dbFilename, "masterpw", 0); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); QCOMPARE(db->rootGroup()->children().at(0)->name(), name); delete db; } void TestKeePass1Reader::testCP1252Password() { QString name = "CP-1252"; KeePass1Reader reader; QString dbFilename = QString("%1/%2.kdb").arg(QString(KEEPASSX_TEST_DATA_DIR), name); QString password = QString::fromUtf8("\xe2\x80\x9e\x70\x61\x73\x73\x77\x6f\x72\x64\xe2\x80\x9d"); Database* db = reader.readDatabase(dbFilename, password, 0); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->children().size(), 1); QCOMPARE(db->rootGroup()->children().at(0)->name(), name); delete db; } void TestKeePass1Reader::cleanupTestCase() { delete m_db; } QDateTime TestKeePass1Reader::genDT(int year, int month, int day, int hour, int min) { QDate date(year, month, day); QTime time(hour, min, 0); return QDateTime(date, time, Qt::UTC); } void TestKeePass1Reader::reopenDatabase(Database* db, const QString& password, const QString& keyfileName) { QBuffer buffer; buffer.open(QIODevice::ReadWrite); KeePass2Writer writer; writer.writeDatabase(&buffer, db); QVERIFY(!writer.hasError()); QVERIFY(buffer.seek(0)); CompositeKey key; if (!password.isNull()) { key.addKey(PasswordKey(password)); } if (!keyfileName.isEmpty()) { FileKey fileKey; QVERIFY(fileKey.load(keyfileName)); key.addKey(fileKey); } KeePass2Reader reader; Database* newDb = reader.readDatabase(&buffer, key); QVERIFY(newDb); QVERIFY(!reader.hasError()); delete newDb; } keepassx-2.0.3/tests/TestKeePass1Reader.h000066400000000000000000000027241276304217300202630ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEEPASS1READER_H #define KEEPASSX_TESTKEEPASS1READER_H #include #include class Database; class TestKeePass1Reader : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testBasic(); void testMasterKey(); void testCustomIcons(); void testGroupExpanded(); void testAutoType(); void testFileKey(); void testFileKey_data(); void testCompositeKey(); void testTwofish(); void testCP1252Password(); void cleanupTestCase(); private: static QDateTime genDT(int year, int month, int day, int hour, int min); static void reopenDatabase(Database* db, const QString& password, const QString& keyfileName); Database* m_db; }; #endif // KEEPASSX_TESTKEEPASS1READER_H keepassx-2.0.3/tests/TestKeePass2RandomStream.cpp000066400000000000000000000061671276304217300220160ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeePass2RandomStream.h" #include #include "tests.h" #include "crypto/Crypto.h" #include "crypto/CryptoHash.h" #include "crypto/SymmetricCipher.h" #include "format/KeePass2.h" #include "format/KeePass2RandomStream.h" QTEST_GUILESS_MAIN(TestKeePass2RandomStream) void TestKeePass2RandomStream::initTestCase() { QVERIFY(Crypto::init()); } void TestKeePass2RandomStream::test() { const QByteArray key("\x11\x22\x33\x44\x55\x66\x77\x88"); const int Size = 128; SymmetricCipher cipher(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); QVERIFY(cipher.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV)); const QByteArray data(QByteArray::fromHex("601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c5" "2b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6" "1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e94" "1e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050")); QByteArray cipherPad; cipherPad.fill('\0', Size); QVERIFY(cipher.processInPlace(cipherPad)); QByteArray cipherData; cipherData.resize(Size); for (int i = 0; i < Size; i++) { cipherData[i] = data[i] ^ cipherPad[i]; } KeePass2RandomStream randomStream; bool ok; QVERIFY(randomStream.init(key)); QByteArray randomStreamData; randomStreamData.append(randomStream.process(data.mid(0, 7), &ok)); QVERIFY(ok); randomStreamData.append(randomStream.process(data.mid(7, 1), &ok)); QVERIFY(ok); QByteArray tmpData = data.mid(8, 12); QVERIFY(randomStream.processInPlace(tmpData)); randomStreamData.append(tmpData); randomStreamData.append(randomStream.process(data.mid(20, 44), &ok)); QVERIFY(ok); randomStreamData.append(randomStream.process(data.mid(64, 64), &ok)); QVERIFY(ok); SymmetricCipher cipherEncrypt(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); QVERIFY(cipherEncrypt.init(CryptoHash::hash(key, CryptoHash::Sha256), KeePass2::INNER_STREAM_SALSA20_IV)); QByteArray cipherDataEncrypt = cipherEncrypt.process(data, &ok); QVERIFY(ok); QCOMPARE(randomStreamData.size(), Size); QCOMPARE(cipherData, cipherDataEncrypt); QCOMPARE(randomStreamData, cipherData); } keepassx-2.0.3/tests/TestKeePass2RandomStream.h000066400000000000000000000017401276304217300214530ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEEPASS2RANDOMSTREAM_H #define KEEPASSX_TESTKEEPASS2RANDOMSTREAM_H #include class TestKeePass2RandomStream : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void test(); }; #endif // KEEPASSX_TESTKEEPASS2RANDOMSTREAM_H keepassx-2.0.3/tests/TestKeePass2Reader.cpp000066400000000000000000000123551276304217300206200ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeePass2Reader.h" #include #include "config-keepassx-tests.h" #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" #include "format/KeePass2Reader.h" #include "keys/PasswordKey.h" QTEST_GUILESS_MAIN(TestKeePass2Reader) void TestKeePass2Reader::initTestCase() { QVERIFY(Crypto::init()); } void TestKeePass2Reader::testNonAscii() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/NonAscii.kdbx"); CompositeKey key; key.addKey(PasswordKey(QString::fromUtf8("\xce\x94\xc3\xb6\xd8\xb6"))); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->metadata()->name(), QString("NonAsciiTest")); QCOMPARE(db->compressionAlgo(), Database::CompressionNone); delete db; } void TestKeePass2Reader::testCompressed() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/Compressed.kdbx"); CompositeKey key; key.addKey(PasswordKey("")); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->metadata()->name(), QString("Compressed")); QCOMPARE(db->compressionAlgo(), Database::CompressionGZip); delete db; } void TestKeePass2Reader::testProtectedStrings() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/ProtectedStrings.kdbx"); CompositeKey key; key.addKey(PasswordKey("masterpw")); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->metadata()->name(), QString("Protected Strings Test")); Entry* entry = db->rootGroup()->entries().at(0); QCOMPARE(entry->title(), QString("Sample Entry")); QCOMPARE(entry->username(), QString("Protected User Name")); QCOMPARE(entry->password(), QString("ProtectedPassword")); QCOMPARE(entry->attributes()->value("TestProtected"), QString("ABC")); QCOMPARE(entry->attributes()->value("TestUnprotected"), QString("DEF")); QVERIFY(db->metadata()->protectPassword()); QVERIFY(entry->attributes()->isProtected("TestProtected")); QVERIFY(!entry->attributes()->isProtected("TestUnprotected")); delete db; } void TestKeePass2Reader::testBrokenHeaderHash() { // The protected stream key has been modified in the header. // Make sure the database won't open. QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/BrokenHeaderHash.kdbx"); CompositeKey key; key.addKey(PasswordKey("")); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(!db); QVERIFY(reader.hasError()); delete db; } void TestKeePass2Reader::testFormat200() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/Format200.kdbx"); CompositeKey key; key.addKey(PasswordKey("a")); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->name(), QString("Format200")); QVERIFY(!db->metadata()->protectTitle()); QVERIFY(db->metadata()->protectUsername()); QVERIFY(!db->metadata()->protectPassword()); QVERIFY(db->metadata()->protectUrl()); QVERIFY(!db->metadata()->protectNotes()); QCOMPARE(db->rootGroup()->entries().size(), 1); Entry* entry = db->rootGroup()->entries().at(0); QCOMPARE(entry->title(), QString("Sample Entry")); QCOMPARE(entry->username(), QString("User Name")); QCOMPARE(entry->attachments()->keys().size(), 2); QCOMPARE(entry->attachments()->value("myattach.txt"), QByteArray("abcdefghijk")); QCOMPARE(entry->attachments()->value("test.txt"), QByteArray("this is a test")); QCOMPARE(entry->historyItems().size(), 2); QCOMPARE(entry->historyItems().at(0)->attachments()->keys().size(), 0); QCOMPARE(entry->historyItems().at(1)->attachments()->keys().size(), 1); QCOMPARE(entry->historyItems().at(1)->attachments()->value("myattach.txt"), QByteArray("abcdefghijk")); delete db; } void TestKeePass2Reader::testFormat300() { QString filename = QString(KEEPASSX_TEST_DATA_DIR).append("/Format300.kdbx"); CompositeKey key; key.addKey(PasswordKey("a")); KeePass2Reader reader; Database* db = reader.readDatabase(filename, key); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->rootGroup()->name(), QString("Format300")); QCOMPARE(db->metadata()->name(), QString("Test Database Format 0x00030000")); delete db; } keepassx-2.0.3/tests/TestKeePass2Reader.h000066400000000000000000000021411276304217300202550ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEEPASS2READER_H #define KEEPASSX_TESTKEEPASS2READER_H #include class TestKeePass2Reader : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testNonAscii(); void testCompressed(); void testProtectedStrings(); void testBrokenHeaderHash(); void testFormat200(); void testFormat300(); }; #endif // KEEPASSX_TESTKEEPASS2READER_H keepassx-2.0.3/tests/TestKeePass2Writer.cpp000066400000000000000000000127671276304217300207010ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeePass2Writer.h" #include #include #include #include "config-keepassx-tests.h" #include "tests.h" #include "FailDevice.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" #include "format/KeePass2Reader.h" #include "format/KeePass2Repair.h" #include "format/KeePass2Writer.h" #include "format/KeePass2XmlWriter.h" #include "keys/PasswordKey.h" QTEST_GUILESS_MAIN(TestKeePass2Writer) void TestKeePass2Writer::initTestCase() { QVERIFY(Crypto::init()); CompositeKey key; key.addKey(PasswordKey("test")); m_dbOrg = new Database(); m_dbOrg->setKey(key); m_dbOrg->metadata()->setName("TESTDB"); Group* group = m_dbOrg->rootGroup(); group->setUuid(Uuid::random()); group->setNotes("I'm a note!"); Entry* entry = new Entry(); entry->setPassword(QString::fromUtf8("\xc3\xa4\xa3\xb6\xc3\xbc\xe9\x9b\xbb\xe7\xb4\x85")); entry->setUuid(Uuid::random()); entry->attributes()->set("test", "protectedTest", true); QVERIFY(entry->attributes()->isProtected("test")); entry->attachments()->set("myattach.txt", QByteArray("this is an attachment")); entry->attachments()->set("aaa.txt", QByteArray("also an attachment")); entry->setGroup(group); Group* groupNew = new Group(); groupNew->setUuid(Uuid::random()); groupNew->setName("TESTGROUP"); groupNew->setNotes("I'm a sub group note!"); groupNew->setParent(group); QBuffer buffer; buffer.open(QBuffer::ReadWrite); KeePass2Writer writer; writer.writeDatabase(&buffer, m_dbOrg); QVERIFY(!writer.hasError()); buffer.seek(0); KeePass2Reader reader; m_dbTest = reader.readDatabase(&buffer, key); QVERIFY(!reader.hasError()); QVERIFY(m_dbTest); } void TestKeePass2Writer::testBasic() { QCOMPARE(m_dbTest->metadata()->name(), m_dbOrg->metadata()->name()); QVERIFY(m_dbTest->rootGroup()); QCOMPARE(m_dbTest->rootGroup()->children()[0]->name(), m_dbOrg->rootGroup()->children()[0]->name()); QCOMPARE(m_dbTest->rootGroup()->notes(), m_dbOrg->rootGroup()->notes()); QCOMPARE(m_dbTest->rootGroup()->children()[0]->notes(), m_dbOrg->rootGroup()->children()[0]->notes()); } void TestKeePass2Writer::testProtectedAttributes() { QCOMPARE(m_dbTest->rootGroup()->entries().size(), 1); Entry* entry = m_dbTest->rootGroup()->entries().at(0); QCOMPARE(entry->attributes()->value("test"), QString("protectedTest")); QCOMPARE(entry->attributes()->isProtected("test"), true); } void TestKeePass2Writer::testAttachments() { Entry* entry = m_dbTest->rootGroup()->entries().at(0); QCOMPARE(entry->attachments()->keys().size(), 2); QCOMPARE(entry->attachments()->value("myattach.txt"), QByteArray("this is an attachment")); QCOMPARE(entry->attachments()->value("aaa.txt"), QByteArray("also an attachment")); } void TestKeePass2Writer::testNonAsciiPasswords() { QCOMPARE(m_dbTest->rootGroup()->entries()[0]->password(), m_dbOrg->rootGroup()->entries()[0]->password()); } void TestKeePass2Writer::testDeviceFailure() { CompositeKey key; key.addKey(PasswordKey("test")); Database* db = new Database(); db->setKey(key); // Disable compression so we write a predictable number of bytes. db->setCompressionAlgo(Database::CompressionNone); Entry* entry = new Entry(); entry->setParent(db->rootGroup()); QByteArray attachment(4096, 'Z'); entry->attachments()->set("test", attachment); FailDevice failDevice(512); QVERIFY(failDevice.open(QIODevice::WriteOnly)); KeePass2Writer writer; writer.writeDatabase(&failDevice, db); QVERIFY(writer.hasError()); QCOMPARE(writer.errorString(), QString("FAILDEVICE")); delete db; } void TestKeePass2Writer::testRepair() { QString brokenDbFilename = QString(KEEPASSX_TEST_DATA_DIR).append("/bug392.kdbx"); // master password = test // entry username: testuser\x10\x20AC // entry password: testpw CompositeKey key; key.addKey(PasswordKey("test")); // test that we can't open the broken database KeePass2Reader reader; Database* dbBroken = reader.readDatabase(brokenDbFilename, key); QVERIFY(!dbBroken); QVERIFY(reader.hasError()); // test if we can repair the database KeePass2Repair repair; QFile file(brokenDbFilename); file.open(QIODevice::ReadOnly); QCOMPARE(repair.repairDatabase(&file, key), KeePass2Repair::RepairSuccess); Database* dbRepaired = repair.database(); QVERIFY(dbRepaired); QCOMPARE(dbRepaired->rootGroup()->entries().size(), 1); QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->username(), QString("testuser").append(QChar(0x20AC))); QCOMPARE(dbRepaired->rootGroup()->entries().at(0)->password(), QString("testpw")); } void TestKeePass2Writer::cleanupTestCase() { delete m_dbOrg; delete m_dbTest; } keepassx-2.0.3/tests/TestKeePass2Writer.h000066400000000000000000000023121276304217300203270ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEEPASS2WRITER_H #define KEEPASSX_TESTKEEPASS2WRITER_H #include class Database; class TestKeePass2Writer : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testBasic(); void testProtectedAttributes(); void testAttachments(); void testNonAsciiPasswords(); void testDeviceFailure(); void testRepair(); void cleanupTestCase(); private: Database* m_dbOrg; Database* m_dbTest; }; #endif // KEEPASSX_TESTKEEPASS2WRITER_H keepassx-2.0.3/tests/TestKeePass2XmlReader.cpp000066400000000000000000000540671276304217300213070ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeePass2XmlReader.h" #include #include #include #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" #include "format/KeePass2XmlReader.h" #include "format/KeePass2XmlWriter.h" #include "config-keepassx-tests.h" QTEST_GUILESS_MAIN(TestKeePass2XmlReader) namespace QTest { template<> char* toString(const Uuid& uuid) { QByteArray ba = "Uuid("; ba += uuid.toBase64().toLatin1().constData(); ba += ")"; return qstrdup(ba.constData()); } template<> char* toString(const Group::TriState& triState) { QString value; if (triState == Group::Inherit) { value = "null"; } else if (triState == Group::Enable) { value = "true"; } else { value = "false"; } return qstrdup(value.toLocal8Bit().constData()); } } QDateTime TestKeePass2XmlReader::genDT(int year, int month, int day, int hour, int min, int second) { QDate date(year, month, day); QTime time(hour, min, second); return QDateTime(date, time, Qt::UTC); } QByteArray TestKeePass2XmlReader::strToBytes(const QString& str) { QByteArray result; for (int i = 0; i < str.size(); i++) { result.append(str.at(i).unicode() >> 8); result.append(str.at(i).unicode() & 0xFF); } return result; } void TestKeePass2XmlReader::initTestCase() { QVERIFY(Crypto::init()); KeePass2XmlReader reader; reader.setStrictMode(true); QString xmlFile = QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.xml"); m_db = reader.readDatabase(xmlFile); QVERIFY(m_db); QVERIFY(!reader.hasError()); } void TestKeePass2XmlReader::testMetadata() { QCOMPARE(m_db->metadata()->generator(), QString("KeePass")); QCOMPARE(m_db->metadata()->name(), QString("ANAME")); QCOMPARE(m_db->metadata()->nameChanged(), genDT(2010, 8, 8, 17, 24, 53)); QCOMPARE(m_db->metadata()->description(), QString("ADESC")); QCOMPARE(m_db->metadata()->descriptionChanged(), genDT(2010, 8, 8, 17, 27, 12)); QCOMPARE(m_db->metadata()->defaultUserName(), QString("DEFUSERNAME")); QCOMPARE(m_db->metadata()->defaultUserNameChanged(), genDT(2010, 8, 8, 17, 27, 45)); QCOMPARE(m_db->metadata()->maintenanceHistoryDays(), 127); QCOMPARE(m_db->metadata()->color(), QColor(0xff, 0xef, 0x00)); QCOMPARE(m_db->metadata()->masterKeyChanged(), genDT(2012, 4, 5, 17, 9, 34)); QCOMPARE(m_db->metadata()->masterKeyChangeRec(), 101); QCOMPARE(m_db->metadata()->masterKeyChangeForce(), -1); QCOMPARE(m_db->metadata()->protectTitle(), false); QCOMPARE(m_db->metadata()->protectUsername(), true); QCOMPARE(m_db->metadata()->protectPassword(), false); QCOMPARE(m_db->metadata()->protectUrl(), true); QCOMPARE(m_db->metadata()->protectNotes(), false); QCOMPARE(m_db->metadata()->recycleBinEnabled(), true); QVERIFY(m_db->metadata()->recycleBin() != Q_NULLPTR); QCOMPARE(m_db->metadata()->recycleBin()->name(), QString("Recycle Bin")); QCOMPARE(m_db->metadata()->recycleBinChanged(), genDT(2010, 8, 25, 16, 12, 57)); QVERIFY(m_db->metadata()->entryTemplatesGroup() == Q_NULLPTR); QCOMPARE(m_db->metadata()->entryTemplatesGroupChanged(), genDT(2010, 8, 8, 17, 24, 19)); QVERIFY(m_db->metadata()->lastSelectedGroup() != Q_NULLPTR); QCOMPARE(m_db->metadata()->lastSelectedGroup()->name(), QString("NewDatabase")); QVERIFY(m_db->metadata()->lastTopVisibleGroup() == m_db->metadata()->lastSelectedGroup()); QCOMPARE(m_db->metadata()->historyMaxItems(), -1); QCOMPARE(m_db->metadata()->historyMaxSize(), 5242880); } void TestKeePass2XmlReader::testCustomIcons() { QCOMPARE(m_db->metadata()->customIcons().size(), 1); Uuid uuid = Uuid::fromBase64("++vyI+daLk6omox4a6kQGA=="); QVERIFY(m_db->metadata()->customIcons().contains(uuid)); QImage icon = m_db->metadata()->customIcon(uuid); QCOMPARE(icon.width(), 16); QCOMPARE(icon.height(), 16); for (int x = 0; x < 16; x++) { for (int y = 0; y < 16; y++) { QRgb rgb = icon.pixel(x, y); QCOMPARE(qRed(rgb), 128); QCOMPARE(qGreen(rgb), 0); QCOMPARE(qBlue(rgb), 128); } } } void TestKeePass2XmlReader::testCustomData() { QHash customFields = m_db->metadata()->customFields(); QCOMPARE(customFields.size(), 2); QCOMPARE(customFields.value("A Sample Test Key"), QString("valu")); QCOMPARE(customFields.value("custom key"), QString("blub")); } void TestKeePass2XmlReader::testGroupRoot() { const Group* group = m_db->rootGroup(); QVERIFY(group); QCOMPARE(group->uuid().toBase64(), QString("lmU+9n0aeESKZvcEze+bRg==")); QCOMPARE(group->name(), QString("NewDatabase")); QCOMPARE(group->notes(), QString("")); QCOMPARE(group->iconNumber(), 49); QCOMPARE(group->iconUuid(), Uuid()); QVERIFY(group->isExpanded()); TimeInfo ti = group->timeInfo(); QCOMPARE(ti.lastModificationTime(), genDT(2010, 8, 8, 17, 24, 27)); QCOMPARE(ti.creationTime(), genDT(2010, 8, 7, 17, 24, 27)); QCOMPARE(ti.lastAccessTime(), genDT(2010, 8, 9, 9, 9, 44)); QCOMPARE(ti.expiryTime(), genDT(2010, 8, 8, 17, 24, 17)); QVERIFY(!ti.expires()); QCOMPARE(ti.usageCount(), 52); QCOMPARE(ti.locationChanged(), genDT(2010, 8, 8, 17, 24, 27)); QCOMPARE(group->defaultAutoTypeSequence(), QString("")); QCOMPARE(group->autoTypeEnabled(), Group::Inherit); QCOMPARE(group->searchingEnabled(), Group::Inherit); QCOMPARE(group->lastTopVisibleEntry()->uuid().toBase64(), QString("+wSUOv6qf0OzW8/ZHAs2sA==")); QCOMPARE(group->children().size(), 3); QVERIFY(m_db->metadata()->recycleBin() == m_db->rootGroup()->children().at(2)); QCOMPARE(group->entries().size(), 2); } void TestKeePass2XmlReader::testGroup1() { const Group* group = m_db->rootGroup()->children().at(0); QCOMPARE(group->uuid().toBase64(), QString("AaUYVdXsI02h4T1RiAlgtg==")); QCOMPARE(group->name(), QString("General")); QCOMPARE(group->notes(), QString("Group Notez")); QCOMPARE(group->iconNumber(), 48); QCOMPARE(group->iconUuid(), Uuid()); QCOMPARE(group->isExpanded(), true); QCOMPARE(group->defaultAutoTypeSequence(), QString("{Password}{ENTER}")); QCOMPARE(group->autoTypeEnabled(), Group::Enable); QCOMPARE(group->searchingEnabled(), Group::Disable); QVERIFY(!group->lastTopVisibleEntry()); } void TestKeePass2XmlReader::testGroup2() { const Group* group = m_db->rootGroup()->children().at(1); QCOMPARE(group->uuid().toBase64(), QString("1h4NtL5DK0yVyvaEnN//4A==")); QCOMPARE(group->name(), QString("Windows")); QCOMPARE(group->isExpanded(), false); QCOMPARE(group->children().size(), 1); const Group* child = group->children().first(); QCOMPARE(child->uuid().toBase64(), QString("HoYE/BjLfUSW257pCHJ/eA==")); QCOMPARE(child->name(), QString("Subsub")); QCOMPARE(child->entries().size(), 1); const Entry* entry = child->entries().first(); QCOMPARE(entry->uuid().toBase64(), QString("GZpdQvGXOU2kaKRL/IVAGg==")); QCOMPARE(entry->title(), QString("Subsub Entry")); } void TestKeePass2XmlReader::testEntry1() { const Entry* entry = m_db->rootGroup()->entries().at(0); QCOMPARE(entry->uuid().toBase64(), QString("+wSUOv6qf0OzW8/ZHAs2sA==")); QCOMPARE(entry->historyItems().size(), 2); QCOMPARE(entry->iconNumber(), 0); QCOMPARE(entry->iconUuid(), Uuid()); QVERIFY(!entry->foregroundColor().isValid()); QVERIFY(!entry->backgroundColor().isValid()); QCOMPARE(entry->overrideUrl(), QString("")); QCOMPARE(entry->tags(), QString("a b c")); const TimeInfo ti = entry->timeInfo(); QCOMPARE(ti.lastModificationTime(), genDT(2010, 8, 25, 16, 19, 25)); QCOMPARE(ti.creationTime(), genDT(2010, 8, 25, 16, 13, 54)); QCOMPARE(ti.lastAccessTime(), genDT(2010, 8, 25, 16, 19, 25)); QCOMPARE(ti.expiryTime(), genDT(2010, 8, 25, 16, 12, 57)); QVERIFY(!ti.expires()); QCOMPARE(ti.usageCount(), 8); QCOMPARE(ti.locationChanged(), genDT(2010, 8, 25, 16, 13, 54)); QList attrs = entry->attributes()->keys(); QCOMPARE(entry->attributes()->value("Notes"), QString("Notes")); QVERIFY(!entry->attributes()->isProtected("Notes")); QVERIFY(attrs.removeOne("Notes")); QCOMPARE(entry->attributes()->value("Password"), QString("Password")); QVERIFY(!entry->attributes()->isProtected("Password")); QVERIFY(attrs.removeOne("Password")); QCOMPARE(entry->attributes()->value("Title"), QString("Sample Entry 1")); QVERIFY(!entry->attributes()->isProtected("Title")); QVERIFY(attrs.removeOne("Title")); QCOMPARE(entry->attributes()->value("URL"), QString("")); QVERIFY(entry->attributes()->isProtected("URL")); QVERIFY(attrs.removeOne("URL")); QCOMPARE(entry->attributes()->value("UserName"), QString("User Name")); QVERIFY(entry->attributes()->isProtected("UserName")); QVERIFY(attrs.removeOne("UserName")); QVERIFY(attrs.isEmpty()); QCOMPARE(entry->title(), entry->attributes()->value("Title")); QCOMPARE(entry->url(), entry->attributes()->value("URL")); QCOMPARE(entry->username(), entry->attributes()->value("UserName")); QCOMPARE(entry->password(), entry->attributes()->value("Password")); QCOMPARE(entry->notes(), entry->attributes()->value("Notes")); QCOMPARE(entry->attachments()->keys().size(), 1); QCOMPARE(entry->attachments()->value("myattach.txt"), QByteArray("abcdefghijk")); QCOMPARE(entry->historyItems().at(0)->attachments()->keys().size(), 1); QCOMPARE(entry->historyItems().at(0)->attachments()->value("myattach.txt"), QByteArray("0123456789")); QCOMPARE(entry->historyItems().at(1)->attachments()->keys().size(), 1); QCOMPARE(entry->historyItems().at(1)->attachments()->value("myattach.txt"), QByteArray("abcdefghijk")); QCOMPARE(entry->autoTypeEnabled(), false); QCOMPARE(entry->autoTypeObfuscation(), 0); QCOMPARE(entry->defaultAutoTypeSequence(), QString("")); QCOMPARE(entry->autoTypeAssociations()->size(), 1); const AutoTypeAssociations::Association assoc1 = entry->autoTypeAssociations()->get(0); QCOMPARE(assoc1.window, QString("Target Window")); QCOMPARE(assoc1.sequence, QString("")); } void TestKeePass2XmlReader::testEntry2() { const Entry* entry = m_db->rootGroup()->entries().at(1); QCOMPARE(entry->uuid().toBase64(), QString("4jbADG37hkiLh2O0qUdaOQ==")); QCOMPARE(entry->iconNumber(), 0); QCOMPARE(entry->iconUuid().toBase64(), QString("++vyI+daLk6omox4a6kQGA==")); // TODO: test entry->icon() QCOMPARE(entry->foregroundColor(), QColor(255, 0, 0)); QCOMPARE(entry->backgroundColor(), QColor(255, 255, 0)); QCOMPARE(entry->overrideUrl(), QString("http://override.net/")); QCOMPARE(entry->tags(), QString("")); const TimeInfo ti = entry->timeInfo(); QCOMPARE(ti.usageCount(), 7); QList attrs = entry->attributes()->keys(); QCOMPARE(entry->attributes()->value("CustomString"), QString("isavalue")); QVERIFY(attrs.removeOne("CustomString")); QCOMPARE(entry->attributes()->value("Notes"), QString("")); QVERIFY(attrs.removeOne("Notes")); QCOMPARE(entry->attributes()->value("Password"), QString("Jer60Hz8o9XHvxBGcRqT")); QVERIFY(attrs.removeOne("Password")); QCOMPARE(entry->attributes()->value("Protected String"), QString("y")); // TODO: should have a protection attribute QVERIFY(attrs.removeOne("Protected String")); QCOMPARE(entry->attributes()->value("Title"), QString("Sample Entry 2")); QVERIFY(attrs.removeOne("Title")); QCOMPARE(entry->attributes()->value("URL"), QString("http://www.keepassx.org/")); QVERIFY(attrs.removeOne("URL")); QCOMPARE(entry->attributes()->value("UserName"), QString("notDEFUSERNAME")); QVERIFY(attrs.removeOne("UserName")); QVERIFY(attrs.isEmpty()); QCOMPARE(entry->attachments()->keys().size(), 1); QCOMPARE(QString::fromLatin1(entry->attachments()->value("myattach.txt")), QString("abcdefghijk")); QCOMPARE(entry->autoTypeEnabled(), true); QCOMPARE(entry->autoTypeObfuscation(), 1); QCOMPARE(entry->defaultAutoTypeSequence(), QString("{USERNAME}{TAB}{PASSWORD}{ENTER}")); QCOMPARE(entry->autoTypeAssociations()->size(), 2); const AutoTypeAssociations::Association assoc1 = entry->autoTypeAssociations()->get(0); QCOMPARE(assoc1.window, QString("Target Window")); QCOMPARE(assoc1.sequence, QString("{Title}{UserName}")); const AutoTypeAssociations::Association assoc2 = entry->autoTypeAssociations()->get(1); QCOMPARE(assoc2.window, QString("Target Window 2")); QCOMPARE(assoc2.sequence, QString("{Title}{UserName} test")); } void TestKeePass2XmlReader::testEntryHistory() { const Entry* entryMain = m_db->rootGroup()->entries().at(0); QCOMPARE(entryMain->historyItems().size(), 2); { const Entry* entry = entryMain->historyItems().at(0); QCOMPARE(entry->uuid(), entryMain->uuid()); QVERIFY(!entry->parent()); QCOMPARE(entry->timeInfo().lastModificationTime(), genDT(2010, 8, 25, 16, 13, 54)); QCOMPARE(entry->timeInfo().usageCount(), 3); QCOMPARE(entry->title(), QString("Sample Entry")); QCOMPARE(entry->url(), QString("http://www.somesite.com/")); } { const Entry* entry = entryMain->historyItems().at(1); QCOMPARE(entry->uuid(), entryMain->uuid()); QVERIFY(!entry->parent()); QCOMPARE(entry->timeInfo().lastModificationTime(), genDT(2010, 8, 25, 16, 15, 43)); QCOMPARE(entry->timeInfo().usageCount(), 7); QCOMPARE(entry->title(), QString("Sample Entry 1")); QCOMPARE(entry->url(), QString("http://www.somesite.com/")); } } void TestKeePass2XmlReader::testDeletedObjects() { QList objList = m_db->deletedObjects(); DeletedObject delObj; delObj = objList.takeFirst(); QCOMPARE(delObj.uuid.toBase64(), QString("5K/bzWCSmkCv5OZxYl4N/w==")); QCOMPARE(delObj.deletionTime, genDT(2010, 8, 25, 16, 14, 12)); delObj = objList.takeFirst(); QCOMPARE(delObj.uuid.toBase64(), QString("80h8uSNWgkKhKCp1TgXF7g==")); QCOMPARE(delObj.deletionTime, genDT(2010, 8, 25, 16, 14, 14)); QVERIFY(objList.isEmpty()); } void TestKeePass2XmlReader::testBroken() { QFETCH(QString, baseName); QFETCH(bool, strictMode); QFETCH(bool, expectError); KeePass2XmlReader reader; reader.setStrictMode(strictMode); QString xmlFile = QString("%1/%2.xml").arg(KEEPASSX_TEST_DATA_DIR, baseName); QVERIFY(QFile::exists(xmlFile)); QScopedPointer db(reader.readDatabase(xmlFile)); if (reader.hasError()) { qWarning("Reader error: %s", qPrintable(reader.errorString())); } QCOMPARE(reader.hasError(), expectError); } void TestKeePass2XmlReader::testBroken_data() { QTest::addColumn("baseName"); QTest::addColumn("strictMode"); QTest::addColumn("expectError"); // testfile strict? error? QTest::newRow("BrokenNoGroupUuid (strict)") << "BrokenNoGroupUuid" << true << true; QTest::newRow("BrokenNoGroupUuid (not strict)") << "BrokenNoGroupUuid" << false << false; QTest::newRow("BrokenNoEntryUuid (strict)") << "BrokenNoEntryUuid" << true << true; QTest::newRow("BrokenNoEntryUuid (not strict)") << "BrokenNoEntryUuid" << false << false; QTest::newRow("BrokenNoRootGroup (strict)") << "BrokenNoRootGroup" << true << true; QTest::newRow("BrokenNoRootGroup (not strict)") << "BrokenNoRootGroup" << false << true; QTest::newRow("BrokenTwoRoots (strict)") << "BrokenTwoRoots" << true << true; QTest::newRow("BrokenTwoRoots (not strict)") << "BrokenTwoRoots" << false << true; QTest::newRow("BrokenTwoRootGroups (strict)") << "BrokenTwoRootGroups" << true << true; QTest::newRow("BrokenTwoRootGroups (not strict)") << "BrokenTwoRootGroups" << false << true; QTest::newRow("BrokenGroupReference (strict)") << "BrokenGroupReference" << true << false; QTest::newRow("BrokenGroupReference (not strict)") << "BrokenGroupReference" << false << false; QTest::newRow("BrokenDeletedObjects (strict)") << "BrokenDeletedObjects" << true << true; QTest::newRow("BrokenDeletedObjects (not strict)") << "BrokenDeletedObjects" << false << false; QTest::newRow("BrokenDifferentEntryHistoryUuid (strict)") << "BrokenDifferentEntryHistoryUuid" << true << true; QTest::newRow("BrokenDifferentEntryHistoryUuid (not strict)") << "BrokenDifferentEntryHistoryUuid" << false << false; } void TestKeePass2XmlReader::testEmptyUuids() { KeePass2XmlReader reader; reader.setStrictMode(true); QString xmlFile = QString("%1/%2.xml").arg(KEEPASSX_TEST_DATA_DIR, "EmptyUuids"); QVERIFY(QFile::exists(xmlFile)); QScopedPointer db(reader.readDatabase(xmlFile)); if (reader.hasError()) { qWarning("Reader error: %s", qPrintable(reader.errorString())); } QVERIFY(!reader.hasError()); } void TestKeePass2XmlReader::testInvalidXmlChars() { QScopedPointer dbWrite(new Database()); QString strPlainInvalid = QString().append(QChar(0x02)).append(QChar(0x19)) .append(QChar(0xFFFE)).append(QChar(0xFFFF)); QString strPlainValid = QString().append(QChar(0x09)).append(QChar(0x0A)) .append(QChar(0x20)).append(QChar(0xD7FF)) .append(QChar(0xE000)).append(QChar(0xFFFD)); // U+10437 in UTF-16: D801 DC37 // high low surrogate QString strSingleHighSurrogate1 = QString().append(QChar(0xD801)); QString strSingleHighSurrogate2 = QString().append(QChar(0x31)).append(QChar(0xD801)).append(QChar(0x32)); QString strHighHighSurrogate = QString().append(QChar(0xD801)).append(QChar(0xD801)); QString strSingleLowSurrogate1 = QString().append(QChar(0xDC37)); QString strSingleLowSurrogate2 = QString().append(QChar((0x31))).append(QChar(0xDC37)).append(QChar(0x32)); QString strLowLowSurrogate = QString().append(QChar(0xDC37)).append(QChar(0xDC37)); QString strSurrogateValid1 = QString().append(QChar(0xD801)).append(QChar(0xDC37)); QString strSurrogateValid2 = QString().append(QChar(0x31)).append(QChar(0xD801)).append(QChar(0xDC37)).append(QChar(0x32)); Entry* entry = new Entry(); entry->setUuid(Uuid::random()); entry->setGroup(dbWrite->rootGroup()); entry->attributes()->set("PlainInvalid", strPlainInvalid); entry->attributes()->set("PlainValid", strPlainValid); entry->attributes()->set("SingleHighSurrogate1", strSingleHighSurrogate1); entry->attributes()->set("SingleHighSurrogate2", strSingleHighSurrogate2); entry->attributes()->set("HighHighSurrogate", strHighHighSurrogate); entry->attributes()->set("SingleLowSurrogate1", strSingleLowSurrogate1); entry->attributes()->set("SingleLowSurrogate2", strSingleLowSurrogate2); entry->attributes()->set("LowLowSurrogate", strLowLowSurrogate); entry->attributes()->set("SurrogateValid1", strSurrogateValid1); entry->attributes()->set("SurrogateValid2", strSurrogateValid2); QBuffer buffer; buffer.open(QIODevice::ReadWrite); KeePass2XmlWriter writer; writer.writeDatabase(&buffer, dbWrite.data()); QVERIFY(!writer.hasError()); buffer.seek(0); KeePass2XmlReader reader; reader.setStrictMode(true); QScopedPointer dbRead(reader.readDatabase(&buffer)); if (reader.hasError()) { qWarning("Database read error: %s", qPrintable(reader.errorString())); } QVERIFY(!reader.hasError()); QVERIFY(!dbRead.isNull()); QCOMPARE(dbRead->rootGroup()->entries().size(), 1); Entry* entryRead = dbRead->rootGroup()->entries().at(0); EntryAttributes* attrRead = entryRead->attributes(); QCOMPARE(strToBytes(attrRead->value("PlainInvalid")), QByteArray()); QCOMPARE(strToBytes(attrRead->value("PlainValid")), strToBytes(strPlainValid)); QCOMPARE(strToBytes(attrRead->value("SingleHighSurrogate1")), QByteArray()); QCOMPARE(strToBytes(attrRead->value("SingleHighSurrogate2")), strToBytes(QString("12"))); QCOMPARE(strToBytes(attrRead->value("HighHighSurrogate")), QByteArray()); QCOMPARE(strToBytes(attrRead->value("SingleLowSurrogate1")), QByteArray()); QCOMPARE(strToBytes(attrRead->value("SingleLowSurrogate2")), strToBytes(QString("12"))); QCOMPARE(strToBytes(attrRead->value("LowLowSurrogate")), QByteArray()); QCOMPARE(strToBytes(attrRead->value("SurrogateValid1")), strToBytes(strSurrogateValid1)); QCOMPARE(strToBytes(attrRead->value("SurrogateValid2")), strToBytes(strSurrogateValid2)); } void TestKeePass2XmlReader::testRepairUuidHistoryItem() { KeePass2XmlReader reader; QString xmlFile = QString("%1/%2.xml").arg(KEEPASSX_TEST_DATA_DIR, "BrokenDifferentEntryHistoryUuid"); QVERIFY(QFile::exists(xmlFile)); QScopedPointer db(reader.readDatabase(xmlFile)); if (reader.hasError()) { qWarning("Database read error: %s", qPrintable(reader.errorString())); } QVERIFY(!reader.hasError()); QList entries = db.data()->rootGroup()->entries(); QCOMPARE(entries.size(), 1); Entry* entry = entries.at(0); QList historyItems = entry->historyItems(); QCOMPARE(historyItems.size(), 1); Entry* historyItem = historyItems.at(0); QVERIFY(!entry->uuid().isNull()); QVERIFY(!historyItem->uuid().isNull()); QCOMPARE(historyItem->uuid(), entry->uuid()); } void TestKeePass2XmlReader::cleanupTestCase() { delete m_db; } keepassx-2.0.3/tests/TestKeePass2XmlReader.h000066400000000000000000000031111276304217300207340ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEEPASS2XMLREADER_H #define KEEPASSX_TESTKEEPASS2XMLREADER_H #include #include class Database; class TestKeePass2XmlReader : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testMetadata(); void testCustomIcons(); void testCustomData(); void testGroupRoot(); void testGroup1(); void testGroup2(); void testEntry1(); void testEntry2(); void testEntryHistory(); void testDeletedObjects(); void testBroken(); void testBroken_data(); void testEmptyUuids(); void testInvalidXmlChars(); void testRepairUuidHistoryItem(); void cleanupTestCase(); private: static QDateTime genDT(int year, int month, int day, int hour, int min, int second); static QByteArray strToBytes(const QString& str); Database* m_db; }; #endif // KEEPASSX_TESTKEEPASS2XMLREADER_H keepassx-2.0.3/tests/TestKeys.cpp000066400000000000000000000125531276304217300167730ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestKeys.h" #include #include #include "config-keepassx-tests.h" #include "tests.h" #include "core/Database.h" #include "core/Metadata.h" #include "crypto/Crypto.h" #include "format/KeePass2Reader.h" #include "format/KeePass2Writer.h" #include "keys/CompositeKey.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" QTEST_GUILESS_MAIN(TestKeys) void TestKeys::initTestCase() { QVERIFY(Crypto::init()); } void TestKeys::testComposite() { CompositeKey* compositeKey1 = new CompositeKey(); PasswordKey* passwordKey1 = new PasswordKey(); PasswordKey* passwordKey2 = new PasswordKey("test"); bool ok; QString errorString; // make sure that addKey() creates a copy of the keys compositeKey1->addKey(*passwordKey1); compositeKey1->addKey(*passwordKey2); delete passwordKey1; delete passwordKey2; QByteArray transformed = compositeKey1->transform(QByteArray(32, '\0'), 1, &ok, &errorString); QVERIFY(ok); QCOMPARE(transformed.size(), 32); // make sure the subkeys are copied CompositeKey* compositeKey2 = compositeKey1->clone(); delete compositeKey1; QCOMPARE(compositeKey2->transform(QByteArray(32, '\0'), 1, &ok, &errorString), transformed); QVERIFY(ok); delete compositeKey2; CompositeKey* compositeKey3 = new CompositeKey(); CompositeKey* compositeKey4 = new CompositeKey(); // test clear() compositeKey3->addKey(PasswordKey("test")); compositeKey3->clear(); QCOMPARE(compositeKey3->rawKey(), compositeKey4->rawKey()); // test assignment operator compositeKey3->addKey(PasswordKey("123")); *compositeKey4 = *compositeKey3; QCOMPARE(compositeKey3->rawKey(), compositeKey4->rawKey()); // test self-assignment *compositeKey3 = *compositeKey3; QCOMPARE(compositeKey3->rawKey(), compositeKey4->rawKey()); delete compositeKey3; delete compositeKey4; } void TestKeys::testFileKey() { QFETCH(QString, type); QString name = QString("FileKey").append(type); KeePass2Reader reader; QString dbFilename = QString("%1/%2.kdbx").arg(QString(KEEPASSX_TEST_DATA_DIR), name); QString keyFilename = QString("%1/%2.key").arg(QString(KEEPASSX_TEST_DATA_DIR), name); CompositeKey compositeKey; FileKey fileKey; QVERIFY(fileKey.load(keyFilename)); QCOMPARE(fileKey.rawKey().size(), 32); compositeKey.addKey(fileKey); Database* db = reader.readDatabase(dbFilename, compositeKey); QVERIFY(db); QVERIFY(!reader.hasError()); QCOMPARE(db->metadata()->name(), QString("%1 Database").arg(name)); delete db; } void TestKeys::testFileKey_data() { QTest::addColumn("type"); QTest::newRow("Xml") << QString("Xml"); QTest::newRow("XmlBrokenBase64") << QString("XmlBrokenBase64"); QTest::newRow("Binary") << QString("Binary"); QTest::newRow("Hex") << QString("Hex"); QTest::newRow("Hashed") << QString("Hashed"); } void TestKeys::testCreateFileKey() { const QString dbName("testCreateFileKey database"); QBuffer keyBuffer; keyBuffer.open(QBuffer::ReadWrite); FileKey::create(&keyBuffer); keyBuffer.reset(); FileKey fileKey; QVERIFY(fileKey.load(&keyBuffer)); CompositeKey compositeKey; compositeKey.addKey(fileKey); Database* dbOrg = new Database(); QVERIFY(dbOrg->setKey(compositeKey)); dbOrg->metadata()->setName(dbName); QBuffer dbBuffer; dbBuffer.open(QBuffer::ReadWrite); KeePass2Writer writer; writer.writeDatabase(&dbBuffer, dbOrg); dbBuffer.reset(); delete dbOrg; KeePass2Reader reader; Database* dbRead = reader.readDatabase(&dbBuffer, compositeKey); QVERIFY(dbRead); QVERIFY(!reader.hasError()); QCOMPARE(dbRead->metadata()->name(), dbName); delete dbRead; } void TestKeys::testFileKeyError() { bool result; QString errorMsg; const QString fileName(QString(KEEPASSX_TEST_DATA_DIR).append("/does/not/exist")); FileKey fileKey; result = fileKey.load(fileName, &errorMsg); QVERIFY(!result); QVERIFY(!errorMsg.isEmpty()); errorMsg = ""; result = FileKey::create(fileName, &errorMsg); QVERIFY(!result); QVERIFY(!errorMsg.isEmpty()); errorMsg = ""; } void TestKeys::benchmarkTransformKey() { QByteArray env = qgetenv("BENCHMARK"); if (env.isEmpty() || env == "0" || env == "no") { QSKIP("Benchmark skipped. Set env variable BENCHMARK=1 to enable.", SkipAll); } PasswordKey pwKey; pwKey.setPassword("password"); CompositeKey compositeKey; compositeKey.addKey(pwKey); QByteArray seed(32, '\x4B'); bool ok; QString errorString; QBENCHMARK { compositeKey.transform(seed, 1e6, &ok, &errorString); } } keepassx-2.0.3/tests/TestKeys.h000066400000000000000000000020731276304217300164340ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTKEYS_H #define KEEPASSX_TESTKEYS_H #include class TestKeys : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testComposite(); void testFileKey(); void testFileKey_data(); void testCreateFileKey(); void testFileKeyError(); void benchmarkTransformKey(); }; #endif // KEEPASSX_TESTKEYS_H keepassx-2.0.3/tests/TestModified.cpp000066400000000000000000000342141276304217300175760ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestModified.h" #include #include #include "tests.h" #include "core/Database.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/Crypto.h" QTEST_GUILESS_MAIN(TestModified) void TestModified::initTestCase() { QVERIFY(Crypto::init()); } void TestModified::testSignals() { int spyCount = 0; int spyCount2 = 0; CompositeKey compositeKey; Database* db = new Database(); Group* root = db->rootGroup(); QSignalSpy spyModified(db, SIGNAL(modifiedImmediate())); db->setKey(compositeKey); QCOMPARE(spyModified.count(), ++spyCount); Group* g1 = new Group(); g1->setParent(root); QCOMPARE(spyModified.count(), ++spyCount); Group* g2 = new Group(); g2->setParent(root); QCOMPARE(spyModified.count(), ++spyCount); g2->setParent(root, 0); QCOMPARE(spyModified.count(), ++spyCount); Entry* entry1 = new Entry(); entry1->setGroup(g1); QCOMPARE(spyModified.count(), ++spyCount); Database* db2 = new Database(); Group* root2 = db2->rootGroup(); QSignalSpy spyModified2(db2, SIGNAL(modifiedImmediate())); g1->setParent(root2); QCOMPARE(spyModified.count(), ++spyCount); QCOMPARE(spyModified2.count(), ++spyCount2); entry1->setTitle("test"); QCOMPARE(spyModified.count(), spyCount); QCOMPARE(spyModified2.count(), ++spyCount2); Entry* entry2 = new Entry(); entry2->setGroup(g2); QCOMPARE(spyModified.count(), ++spyCount); QCOMPARE(spyModified2.count(), spyCount2); entry2->setGroup(root2); QCOMPARE(spyModified.count(), ++spyCount); QCOMPARE(spyModified2.count(), ++spyCount2); entry2->setTitle("test2"); QCOMPARE(spyModified.count(), spyCount); QCOMPARE(spyModified2.count(), ++spyCount2); Group* g3 = new Group(); g3->setParent(root); QCOMPARE(spyModified.count(), ++spyCount); Group* g4 = new Group(); g4->setParent(g3); QCOMPARE(spyModified.count(), ++spyCount); delete g4; QCOMPARE(spyModified.count(), ++spyCount); delete entry2; QCOMPARE(spyModified2.count(), ++spyCount2); QCOMPARE(spyModified.count(), spyCount); QCOMPARE(spyModified2.count(), spyCount2); delete db; delete db2; } void TestModified::testGroupSets() { int spyCount = 0; Database* db = new Database(); Group* root = db->rootGroup(); Group* g = new Group(); g->setParent(root); QSignalSpy spyModified(db, SIGNAL(modifiedImmediate())); root->setUuid(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); root->setUuid(root->uuid()); QCOMPARE(spyModified.count(), spyCount); root->setName("test"); QCOMPARE(spyModified.count(), ++spyCount); root->setName(root->name()); QCOMPARE(spyModified.count(), spyCount); root->setNotes("test"); QCOMPARE(spyModified.count(), ++spyCount); root->setNotes(root->notes()); QCOMPARE(spyModified.count(), spyCount); root->setIcon(1); QCOMPARE(spyModified.count(), ++spyCount); root->setIcon(root->iconNumber()); QCOMPARE(spyModified.count(), spyCount); root->setIcon(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); root->setIcon(root->iconUuid()); QCOMPARE(spyModified.count(), spyCount); g->setUuid(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); g->setUuid(g->uuid()); QCOMPARE(spyModified.count(), spyCount); g->setName("test"); QCOMPARE(spyModified.count(), ++spyCount); g->setName(g->name()); QCOMPARE(spyModified.count(), spyCount); g->setNotes("test"); QCOMPARE(spyModified.count(), ++spyCount); g->setNotes(g->notes()); QCOMPARE(spyModified.count(), spyCount); g->setIcon(1); QCOMPARE(spyModified.count(), ++spyCount); g->setIcon(g->iconNumber()); QCOMPARE(spyModified.count(), spyCount); g->setIcon(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); g->setIcon(g->iconUuid()); QCOMPARE(spyModified.count(), spyCount); delete db; } void TestModified::testEntrySets() { int spyCount = 0; Database* db = new Database(); Group* root = db->rootGroup(); Group* g = new Group(); g->setParent(root); Entry* entry = new Entry(); entry->setGroup(g); QSignalSpy spyModified(db, SIGNAL(modifiedImmediate())); entry->setUuid(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); entry->setUuid(entry->uuid()); QCOMPARE(spyModified.count(), spyCount); entry->setTitle("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setTitle(entry->title()); QCOMPARE(spyModified.count(), spyCount); entry->setUrl("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setUrl(entry->url()); QCOMPARE(spyModified.count(), spyCount); entry->setUsername("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setUsername(entry->username()); QCOMPARE(spyModified.count(), spyCount); entry->setPassword("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setPassword(entry->password()); QCOMPARE(spyModified.count(), spyCount); entry->setNotes("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setNotes(entry->notes()); QCOMPARE(spyModified.count(), spyCount); entry->setIcon(1); QCOMPARE(spyModified.count(), ++spyCount); entry->setIcon(entry->iconNumber()); QCOMPARE(spyModified.count(), spyCount); entry->setIcon(Uuid::random()); QCOMPARE(spyModified.count(), ++spyCount); entry->setIcon(entry->iconUuid()); QCOMPARE(spyModified.count(), spyCount); entry->setTags("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setTags(entry->tags()); QCOMPARE(spyModified.count(), spyCount); entry->setExpires(true); QCOMPARE(spyModified.count(), ++spyCount); entry->setExpires(entry->timeInfo().expires()); QCOMPARE(spyModified.count(), spyCount); entry->setExpiryTime(Tools::currentDateTimeUtc().addYears(1)); QCOMPARE(spyModified.count(), ++spyCount); entry->setExpiryTime(entry->timeInfo().expiryTime()); QCOMPARE(spyModified.count(), spyCount); entry->setAutoTypeEnabled(false); QCOMPARE(spyModified.count(), ++spyCount); entry->setAutoTypeEnabled(entry->autoTypeEnabled()); QCOMPARE(spyModified.count(), spyCount); entry->setAutoTypeObfuscation(1); QCOMPARE(spyModified.count(), ++spyCount); entry->setAutoTypeObfuscation(entry->autoTypeObfuscation()); QCOMPARE(spyModified.count(), spyCount); entry->setDefaultAutoTypeSequence("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setDefaultAutoTypeSequence(entry->defaultAutoTypeSequence()); QCOMPARE(spyModified.count(), spyCount); entry->setForegroundColor(Qt::red); QCOMPARE(spyModified.count(), ++spyCount); entry->setForegroundColor(entry->foregroundColor()); QCOMPARE(spyModified.count(), spyCount); entry->setBackgroundColor(Qt::red); QCOMPARE(spyModified.count(), ++spyCount); entry->setBackgroundColor(entry->backgroundColor()); QCOMPARE(spyModified.count(), spyCount); entry->setOverrideUrl("test"); QCOMPARE(spyModified.count(), ++spyCount); entry->setOverrideUrl(entry->overrideUrl()); QCOMPARE(spyModified.count(), spyCount); entry->attributes()->set("test key", "test value", false); QCOMPARE(spyModified.count(), ++spyCount); entry->attributes()->set("test key", entry->attributes()->value("test key"), false); QCOMPARE(spyModified.count(), spyCount); entry->attributes()->set("test key", entry->attributes()->value("test key"), true); QCOMPARE(spyModified.count(), ++spyCount); entry->attributes()->set("test key", "new test value", true); QCOMPARE(spyModified.count(), ++spyCount); entry->attributes()->set("test key2", "test value2", true); QCOMPARE(spyModified.count(), ++spyCount); entry->attributes()->set("test key2", entry->attributes()->value("test key2"), true); QCOMPARE(spyModified.count(), spyCount); delete db; } void TestModified::testHistoryItem() { Entry* entry = new Entry(); QDateTime created = entry->timeInfo().creationTime(); entry->setUuid(Uuid::random()); entry->setTitle("a"); entry->setTags("a"); EntryAttributes* attributes = new EntryAttributes(); attributes->copyCustomKeysFrom(entry->attributes()); Entry* historyEntry; int historyItemsSize = 0; entry->beginUpdate(); entry->setTitle("a"); entry->setTags("a"); entry->setOverrideUrl(""); entry->endUpdate(); QCOMPARE(entry->historyItems().size(), historyItemsSize); QDateTime modified = entry->timeInfo().lastModificationTime(); QTest::qSleep(10); entry->beginUpdate(); entry->setTitle("b"); entry->endUpdate(); QCOMPARE(entry->historyItems().size(), ++historyItemsSize); historyEntry = entry->historyItems().at(historyItemsSize - 1); QCOMPARE(historyEntry->title(), QString("a")); QCOMPARE(historyEntry->uuid(), entry->uuid()); QCOMPARE(historyEntry->tags(), entry->tags()); QCOMPARE(historyEntry->overrideUrl(), entry->overrideUrl()); QCOMPARE(historyEntry->timeInfo().creationTime(), created); QCOMPARE(historyEntry->timeInfo().lastModificationTime(), modified); QCOMPARE(historyEntry->historyItems().size(), 0); entry->beginUpdate(); entry->setTags("b"); entry->endUpdate(); QCOMPARE(entry->historyItems().size(), ++historyItemsSize); QCOMPARE(entry->historyItems().at(historyItemsSize - 1)->tags(), QString("a")); entry->beginUpdate(); entry->attachments()->set("test", QByteArray("value")); entry->endUpdate(); QCOMPARE(entry->historyItems().size(), ++historyItemsSize); QCOMPARE(entry->historyItems().at(historyItemsSize - 1)->attachments()->keys().size(), 0); attributes->set("k", "myvalue"); entry->beginUpdate(); entry->attributes()->copyCustomKeysFrom(attributes); entry->endUpdate(); QCOMPARE(entry->historyItems().size(), ++historyItemsSize); QVERIFY(!entry->historyItems().at(historyItemsSize - 1)->attributes()->keys().contains("k")); delete attributes; delete entry; Database* db = new Database(); Group* root = db->rootGroup(); db->metadata()->setHistoryMaxItems(3); db->metadata()->setHistoryMaxSize(-1); Entry* historyEntry2; Entry* entry2 = new Entry(); entry2->setGroup(root); entry2->beginUpdate(); entry2->setTitle("1"); entry2->endUpdate(); entry2->beginUpdate(); entry2->setTitle("2"); entry2->endUpdate(); entry2->beginUpdate(); entry2->setTitle("3"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 3); entry2->beginUpdate(); entry2->setTitle("4"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 3); db->metadata()->setHistoryMaxItems(1); entry2->beginUpdate(); entry2->setTitle("5"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 1); historyEntry2 = entry2->historyItems().at(0); QCOMPARE(historyEntry2->title(), QString("4")); db->metadata()->setHistoryMaxItems(-1); for (int i = 0; i < 20; i++) { entry2->beginUpdate(); entry2->setTitle("6"); entry2->endUpdate(); entry2->beginUpdate(); entry2->setTitle("6b"); entry2->endUpdate(); } QCOMPARE(entry2->historyItems().size(), 41); db->metadata()->setHistoryMaxItems(0); entry2->beginUpdate(); entry2->setTitle("7"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 0); db->metadata()->setHistoryMaxItems(-1); db->metadata()->setHistoryMaxSize(17000); entry2->beginUpdate(); entry2->attachments()->set("test", QByteArray(18000, 'X')); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 1); historyEntry2 = entry2->historyItems().at(0); QCOMPARE(historyEntry2->title(), QString("7")); entry2->beginUpdate(); entry2->setTitle("8"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 2); entry2->beginUpdate(); entry2->attachments()->remove("test"); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 0); entry2->beginUpdate(); entry2->attachments()->set("test2", QByteArray(6000, 'a')); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 1); entry2->beginUpdate(); entry2->attachments()->set("test3", QByteArray(6000, 'b')); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 2); entry2->beginUpdate(); entry2->attachments()->set("test4", QByteArray(6000, 'c')); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 3); entry2->beginUpdate(); entry2->attachments()->set("test5", QByteArray(6000, 'd')); entry2->endUpdate(); QCOMPARE(entry2->historyItems().size(), 4); Entry* entry3 = new Entry(); entry3->setGroup(root); QCOMPARE(entry3->historyItems().size(), 0); entry3->beginUpdate(); entry3->attachments()->set("test", QByteArray(6000, 'a')); entry3->endUpdate(); QCOMPARE(entry3->historyItems().size(), 1); entry3->beginUpdate(); entry3->attachments()->set("test", QByteArray(6000, 'b')); entry3->endUpdate(); QCOMPARE(entry3->historyItems().size(), 2); entry3->beginUpdate(); entry3->attachments()->set("test", QByteArray(6000, 'c')); entry3->endUpdate(); QCOMPARE(entry3->historyItems().size(), 3); entry3->beginUpdate(); entry3->attachments()->set("test", QByteArray(6000, 'd')); entry3->endUpdate(); QCOMPARE(entry3->historyItems().size(), 2); delete db; } keepassx-2.0.3/tests/TestModified.h000066400000000000000000000020071276304217300172360ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTMODIFIED_H #define KEEPASSX_TESTMODIFIED_H #include class TestModified : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testSignals(); void testGroupSets(); void testEntrySets(); void testHistoryItem(); }; #endif // KEEPASSX_TESTMODIFIED_H keepassx-2.0.3/tests/TestQCommandLineParser.cpp000066400000000000000000000457571276304217300215600ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "TestQCommandLineParser.h" #include #include "tests.h" #include "core/qcommandlineparser.h" QTEST_GUILESS_MAIN(TestQCommandLineParser) Q_DECLARE_METATYPE(char**) static char *empty_argv[] = { 0 }; static int empty_argc = 1; void TestQCommandLineParser::initTestCase() { Q_ASSERT(!empty_argv[0]); empty_argv[0] = const_cast("TestQCommandLineParser"); } Q_DECLARE_METATYPE(QCommandLineParser::SingleDashWordOptionMode) void TestQCommandLineParser::parsingModes_data() { QTest::addColumn("parsingMode"); QTest::newRow("collapsed") << QCommandLineParser::ParseAsCompactedShortOptions; QTest::newRow("implicitlylong") << QCommandLineParser::ParseAsLongOptions; } void TestQCommandLineParser::testInvalidOptions() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QTest::ignoreMessage(QtWarningMsg, "QCommandLineOption: Option names cannot start with a '-'"); parser.addOption(QCommandLineOption("-v", "Displays version information.")); } void TestQCommandLineParser::testPositionalArguments() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "file.txt")); QCOMPARE(parser.positionalArguments(), QStringList() << "file.txt"); } void TestQCommandLineParser::testBooleanOption_data() { QTest::addColumn("args"); QTest::addColumn("expectedOptionNames"); QTest::addColumn("expectedIsSet"); QTest::newRow("set") << (QStringList() << "TestQCommandLineParser" << "-b") << (QStringList() << "b") << true; QTest::newRow("unset") << (QStringList() << "TestQCommandLineParser") << QStringList() << false; } void TestQCommandLineParser::testBooleanOption() { QFETCH(QStringList, args); QFETCH(QStringList, expectedOptionNames); QFETCH(bool, expectedIsSet); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QVERIFY(parser.addOption(QCommandLineOption("b", "a boolean option"))); QVERIFY(parser.parse(args)); QCOMPARE(parser.optionNames(), expectedOptionNames); QCOMPARE(parser.isSet("b"), expectedIsSet); QCOMPARE(parser.values("b"), QStringList()); QCOMPARE(parser.positionalArguments(), QStringList()); // Should warn on typos QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not defined: \"c\""); QVERIFY(!parser.isSet("c")); } void TestQCommandLineParser::testMultipleNames_data() { QTest::addColumn("args"); QTest::addColumn("expectedOptionNames"); QTest::newRow("short") << (QStringList() << "TestQCommandLineParser" << "-v") << (QStringList() << "v"); QTest::newRow("long") << (QStringList() << "TestQCommandLineParser" << "--version") << (QStringList() << "version"); QTest::newRow("not_set") << (QStringList() << "TestQCommandLineParser") << QStringList(); } void TestQCommandLineParser::testMultipleNames() { QFETCH(QStringList, args); QFETCH(QStringList, expectedOptionNames); QCoreApplication app(empty_argc, empty_argv); QCommandLineOption option(QStringList() << "v" << "version", "Show version information"); QCOMPARE(option.names(), QStringList() << "v" << "version"); QCommandLineParser parser; QVERIFY(parser.addOption(option)); QVERIFY(parser.parse(args)); QCOMPARE(parser.optionNames(), expectedOptionNames); const bool expectedIsSet = !expectedOptionNames.isEmpty(); QCOMPARE(parser.isSet("v"), expectedIsSet); QCOMPARE(parser.isSet("version"), expectedIsSet); } void TestQCommandLineParser::testSingleValueOption_data() { QTest::addColumn("args"); QTest::addColumn("defaults"); QTest::addColumn("expectedIsSet"); QTest::newRow("short") << (QStringList() << "tst" << "-s" << "oxygen") << QStringList() << true; QTest::newRow("long") << (QStringList() << "tst" << "--style" << "oxygen") << QStringList() << true; QTest::newRow("longequal") << (QStringList() << "tst" << "--style=oxygen") << QStringList() << true; QTest::newRow("default") << (QStringList() << "tst") << (QStringList() << "oxygen") << false; } void TestQCommandLineParser::testSingleValueOption() { QFETCH(QStringList, args); QFETCH(QStringList, defaults); QFETCH(bool, expectedIsSet); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QCommandLineOption option(QStringList() << "s" << "style", "style name", "styleName"); option.setDefaultValues(defaults); QVERIFY(parser.addOption(option)); for (int mode = 0; mode < 2; ++mode) { parser.setSingleDashWordOptionMode(QCommandLineParser::SingleDashWordOptionMode(mode)); QVERIFY(parser.parse(args)); QCOMPARE(parser.isSet("s"), expectedIsSet); QCOMPARE(parser.isSet("style"), expectedIsSet); QCOMPARE(parser.isSet(option), expectedIsSet); QCOMPARE(parser.value("s"), QString("oxygen")); QCOMPARE(parser.value("style"), QString("oxygen")); QCOMPARE(parser.values("s"), QStringList() << "oxygen"); QCOMPARE(parser.values("style"), QStringList() << "oxygen"); QCOMPARE(parser.values(option), QStringList() << "oxygen"); QCOMPARE(parser.positionalArguments(), QStringList()); } // Should warn on typos QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not defined: \"c\""); QVERIFY(parser.values("c").isEmpty()); } void TestQCommandLineParser::testValueNotSet() { QCoreApplication app(empty_argc, empty_argv); // Not set, no default value QCommandLineParser parser; QCommandLineOption option(QStringList() << "s" << "style", "style name"); option.setValueName("styleName"); QVERIFY(parser.addOption(option)); QVERIFY(parser.parse(QStringList() << "tst")); QCOMPARE(parser.optionNames(), QStringList()); QVERIFY(!parser.isSet("s")); QVERIFY(!parser.isSet("style")); QCOMPARE(parser.value("s"), QString()); QCOMPARE(parser.value("style"), QString()); QCOMPARE(parser.values("s"), QStringList()); QCOMPARE(parser.values("style"), QStringList()); } void TestQCommandLineParser::testMultipleValuesOption() { QCoreApplication app(empty_argc, empty_argv); QCommandLineOption option("param", "Pass parameter to the backend."); option.setValueName("key=value"); QCommandLineParser parser; QVERIFY(parser.addOption(option)); { QVERIFY(parser.parse(QStringList() << "tst" << "--param" << "key1=value1")); QVERIFY(parser.isSet("param")); QCOMPARE(parser.values("param"), QStringList() << "key1=value1"); QCOMPARE(parser.value("param"), QString("key1=value1")); } { QVERIFY(parser.parse(QStringList() << "tst" << "--param" << "key1=value1" << "--param" << "key2=value2")); QVERIFY(parser.isSet("param")); QCOMPARE(parser.values("param"), QStringList() << "key1=value1" << "key2=value2"); QCOMPARE(parser.value("param"), QString("key2=value2")); } QString expected = "Usage: TestQCommandLineParser [options]\n" "\n" "Options:\n" " --param Pass parameter to the backend.\n"; const QString exeName = QCoreApplication::instance()->arguments().first(); // e.g. debug\tst_qcommandlineparser.exe on Windows expected.replace("TestQCommandLineParser", exeName); QCOMPARE(parser.helpText(), expected); } void TestQCommandLineParser::testUnknownOptionErrorHandling_data() { QTest::addColumn("parsingMode"); QTest::addColumn("args"); QTest::addColumn("expectedUnknownOptionNames"); QTest::addColumn("expectedErrorText"); const QStringList args_hello = QStringList() << "TestQCommandLineParser" << "--hello"; const QString error_hello("Unknown option 'hello'."); QTest::newRow("unknown_name_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_hello << QStringList("hello") << error_hello; QTest::newRow("unknown_name_long") << QCommandLineParser::ParseAsLongOptions << args_hello << QStringList("hello") << error_hello; const QStringList args_value = QStringList() << "TestQCommandLineParser" << "-b=1"; QTest::newRow("bool_with_value_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_value << QStringList() << QString("Unexpected value after '-b'."); QTest::newRow("bool_with_value_long") << QCommandLineParser::ParseAsLongOptions << args_value << QStringList() << QString("Unexpected value after '-b'."); const QStringList args_dash_long = QStringList() << "TestQCommandLineParser" << "-bool"; const QString error_bool("Unknown options: o, o, l."); QTest::newRow("unknown_name_long_collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << args_dash_long << (QStringList() << "o" << "o" << "l") << error_bool; } void TestQCommandLineParser::testUnknownOptionErrorHandling() { QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); QFETCH(QStringList, args); QFETCH(QStringList, expectedUnknownOptionNames); QFETCH(QString, expectedErrorText); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; parser.setSingleDashWordOptionMode(parsingMode); QVERIFY(parser.addOption(QCommandLineOption(QStringList() << "b" << "bool", "a boolean option"))); QCOMPARE(parser.parse(args), expectedErrorText.isEmpty()); QCOMPARE(parser.unknownOptionNames(), expectedUnknownOptionNames); QCOMPARE(parser.errorText(), expectedErrorText); } void TestQCommandLineParser::testDoubleDash_data() { parsingModes_data(); } void TestQCommandLineParser::testDoubleDash() { QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; parser.addOption(QCommandLineOption(QStringList() << "o" << "output", "Output file", "filename")); parser.setSingleDashWordOptionMode(parsingMode); QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--output" << "foo")); QCOMPARE(parser.value("output"), QString("foo")); QCOMPARE(parser.positionalArguments(), QStringList()); QCOMPARE(parser.unknownOptionNames(), QStringList()); QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--" << "--output" << "bar" << "-b" << "bleh")); QCOMPARE(parser.value("output"), QString()); QCOMPARE(parser.positionalArguments(), QStringList() << "--output" << "bar" << "-b" << "bleh"); QCOMPARE(parser.unknownOptionNames(), QStringList()); } void TestQCommandLineParser::testDefaultValue() { QCommandLineOption opt("name", "desc", "valueName", "default"); QCOMPARE(opt.defaultValues(), QStringList("default")); opt.setDefaultValue(""); QCOMPARE(opt.defaultValues(), QStringList()); opt.setDefaultValue("default"); QCOMPARE(opt.defaultValues(), QStringList("default")); } void TestQCommandLineParser::testProcessNotCalled() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QVERIFY(parser.addOption(QCommandLineOption("b", "a boolean option"))); QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before isSet"); QVERIFY(!parser.isSet("b")); QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before values"); QCOMPARE(parser.values("b"), QStringList()); } void TestQCommandLineParser::testEmptyArgsList() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: argument list cannot be empty, it should contain at least the executable name"); QVERIFY(!parser.parse(QStringList())); // invalid call, argv[0] is missing } void TestQCommandLineParser::testMissingOptionValue() { QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; parser.addOption(QCommandLineOption("option", "An option", "value")); QVERIFY(!parser.parse(QStringList() << "argv0" << "--option")); // the user forgot to pass a value for --option QCOMPARE(parser.value("option"), QString()); QCOMPARE(parser.errorText(), QString("Missing value after '--option'.")); } void TestQCommandLineParser::testStdinArgument_data() { parsingModes_data(); } void TestQCommandLineParser::testStdinArgument() { QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; parser.setSingleDashWordOptionMode(parsingMode); parser.addOption(QCommandLineOption(QStringList() << "i" << "input", "Input file.", "filename")); parser.addOption(QCommandLineOption("b", "Boolean option.")); QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--input" << "-")); QCOMPARE(parser.value("input"), QString("-")); QCOMPARE(parser.positionalArguments(), QStringList()); QCOMPARE(parser.unknownOptionNames(), QStringList()); QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "--input" << "-" << "-b" << "arg")); QCOMPARE(parser.value("input"), QString("-")); QVERIFY(parser.isSet("b")); QCOMPARE(parser.positionalArguments(), QStringList() << "arg"); QCOMPARE(parser.unknownOptionNames(), QStringList()); QVERIFY(parser.parse(QStringList() << "TestQCommandLineParser" << "-")); QCOMPARE(parser.value("input"), QString()); QVERIFY(!parser.isSet("b")); QCOMPARE(parser.positionalArguments(), QStringList() << "-"); QCOMPARE(parser.unknownOptionNames(), QStringList()); } void TestQCommandLineParser::testSingleDashWordOptionModes_data() { QTest::addColumn("parsingMode"); QTest::addColumn("commandLine"); QTest::addColumn("expectedOptionNames"); QTest::addColumn("expectedOptionValues"); QTest::newRow("collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc" << "val") << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val"); QTest::newRow("collapsed_with_equalsign_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc=val") << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val"); QTest::newRow("collapsed_explicit_longoption") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("--nn") << QStringList("nn") << QStringList(); QTest::newRow("collapsed_longoption_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "--abc" << "val") << QStringList("abc") << QStringList("val"); QTest::newRow("compiler") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("-cab") << QStringList("c") << QStringList("ab"); QTest::newRow("compiler_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val") << QStringList("c") << QStringList("val"); QTest::newRow("implicitlylong") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc" << "val") << QStringList("abc") << QStringList("val"); QTest::newRow("implicitlylong_equal") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc=val") << QStringList("abc") << QStringList("val"); QTest::newRow("implicitlylong_longoption") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--nn") << QStringList("nn") << QStringList(); QTest::newRow("implicitlylong_longoption_value") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--abc" << "val") << QStringList("abc") << QStringList("val"); QTest::newRow("implicitlylong_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val") << QStringList("c") << QStringList("val"); } void TestQCommandLineParser::testSingleDashWordOptionModes() { QFETCH(QCommandLineParser::SingleDashWordOptionMode, parsingMode); QFETCH(QStringList, commandLine); QFETCH(QStringList, expectedOptionNames); QFETCH(QStringList, expectedOptionValues); commandLine.prepend("TestQCommandLineParser"); QCoreApplication app(empty_argc, empty_argv); QCommandLineParser parser; parser.setSingleDashWordOptionMode(parsingMode); parser.addOption(QCommandLineOption("a", "a option.")); parser.addOption(QCommandLineOption("b", "b option.")); parser.addOption(QCommandLineOption(QStringList() << "c" << "abc", "c option.", "value")); parser.addOption(QCommandLineOption("nn", "nn option.")); QVERIFY(parser.parse(commandLine)); QCOMPARE(parser.optionNames(), expectedOptionNames); for (int i = 0; i < expectedOptionValues.count(); ++i) QCOMPARE(parser.value(parser.optionNames().at(i)), expectedOptionValues.at(i)); QCOMPARE(parser.unknownOptionNames(), QStringList()); } keepassx-2.0.3/tests/TestQCommandLineParser.h000066400000000000000000000057521276304217300212140ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 David Faure ** Contact: http://www.qt-project.org/legal ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Digia. For licensing terms and ** conditions see http://qt.digia.com/licensing. For further information ** use the contact form at http://qt.digia.com/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Digia gives you certain additional ** rights. These rights are described in the Digia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3.0 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU General Public License version 3.0 requirements will be ** met: http://www.gnu.org/copyleft/gpl.html. ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef KEEPASSX_TESTQCOMMANDLINEPARSER_H #define KEEPASSX_TESTQCOMMANDLINEPARSER_H #include class TestQCommandLineParser : public QObject { Q_OBJECT public Q_SLOTS: void initTestCase(); private Q_SLOTS: void parsingModes_data(); // In-process tests void testInvalidOptions(); void testPositionalArguments(); void testBooleanOption_data(); void testBooleanOption(); void testMultipleNames_data(); void testMultipleNames(); void testSingleValueOption_data(); void testSingleValueOption(); void testValueNotSet(); void testMultipleValuesOption(); void testUnknownOptionErrorHandling_data(); void testUnknownOptionErrorHandling(); void testDoubleDash_data(); void testDoubleDash(); void testDefaultValue(); void testProcessNotCalled(); void testEmptyArgsList(); void testMissingOptionValue(); void testStdinArgument_data(); void testStdinArgument(); void testSingleDashWordOptionModes_data(); void testSingleDashWordOptionModes(); }; #endif // KEEPASSX_TESTQCOMMANDLINEPARSER_H keepassx-2.0.3/tests/TestQSaveFile.cpp000066400000000000000000000140571276304217300177000ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestQSaveFile.h" #include #include #if defined(Q_OS_WIN) # include #endif #include "tests.h" #include "core/qsavefile.h" QTEST_GUILESS_MAIN(TestQSaveFile) class DirCleanup { public: DirCleanup(const QString& dir, const QString& filePrefix) : m_dir(dir), m_filePrefix(filePrefix) {} ~DirCleanup() { QDir dir(m_dir); QStringList files = dir.entryList(QStringList() << (m_filePrefix + "*"), QDir::Files); Q_FOREACH (const QString& file, files) { QFile::remove(m_dir + "/" + file); } QDir().rmdir(m_dir); } private: QString m_dir; QString m_filePrefix; }; void TestQSaveFile::transactionalWrite() { const QString dir = tmpDir(); QVERIFY(!dir.isEmpty()); const QString targetFile = dir + QString::fromLatin1("/outfile"); DirCleanup dirCleanup(dir, "outfile"); QFile::remove(targetFile); QSaveFile file(targetFile); QVERIFY(file.open(QIODevice::WriteOnly)); QVERIFY(file.isOpen()); QCOMPARE(file.fileName(), targetFile); QVERIFY(!QFile::exists(targetFile)); QTextStream ts(&file); ts << "This is test data one.\n"; ts.flush(); QCOMPARE(file.error(), QFile::NoError); QVERIFY(!QFile::exists(targetFile)); QVERIFY(file.commit()); QVERIFY(QFile::exists(targetFile)); QCOMPARE(file.fileName(), targetFile); // Check that we can reuse a QSaveFile object // (and test the case of an existing target file) QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("Hello"), 5LL); QVERIFY(file.commit()); QFile reader(targetFile); QVERIFY(reader.open(QIODevice::ReadOnly)); QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Hello")); reader.close(); QVERIFY(QFile::remove(targetFile)); } void TestQSaveFile::autoFlush() { const QString dir = tmpDir(); QVERIFY(!dir.isEmpty()); const QString targetFile = dir + QString::fromLatin1("/outfile"); DirCleanup dirCleanup(dir, "outfile"); QFile::remove(targetFile); QSaveFile file(targetFile); QVERIFY(file.open(QIODevice::WriteOnly)); QTextStream ts(&file); ts << "Auto-flush."; // no flush QVERIFY(file.commit()); // close will emit aboutToClose, which will flush the stream QFile reader(targetFile); QVERIFY(reader.open(QIODevice::ReadOnly)); QCOMPARE(QString::fromLatin1(reader.readAll().constData()), QString::fromLatin1("Auto-flush.")); reader.close(); QVERIFY(QFile::remove(targetFile)); } void TestQSaveFile::transactionalWriteNoPermissions() { #ifdef Q_OS_UNIX if (::geteuid() == 0) { QSKIP("not valid running this test as root", SkipAll); } // You can write into /dev/zero, but you can't create a /dev/zero.XXXXXX temp file. QSaveFile file("/dev/zero"); if (!QDir("/dev").exists()) { QSKIP("/dev doesn't exist on this system", SkipAll); } QVERIFY(!file.open(QIODevice::WriteOnly)); QCOMPARE(static_cast(file.error()), static_cast(QFile::OpenError)); QVERIFY(!file.commit()); #endif } void TestQSaveFile::transactionalWriteCanceled() { const QString dir = tmpDir(); QVERIFY(!dir.isEmpty()); const QString targetFile = dir + QString::fromLatin1("/outfile"); DirCleanup dirCleanup(dir, "outfile"); QFile::remove(targetFile); QSaveFile file(targetFile); QVERIFY(file.open(QIODevice::WriteOnly)); QTextStream ts(&file); ts << "This writing operation will soon be canceled.\n"; ts.flush(); QCOMPARE(file.error(), QFile::NoError); QVERIFY(!QFile::exists(targetFile)); // We change our mind, let's abort writing file.cancelWriting(); QVERIFY(!file.commit()); QVERIFY(!QFile::exists(targetFile)); // temp file was discarded QCOMPARE(file.fileName(), targetFile); } void TestQSaveFile::transactionalWriteErrorRenaming() { #ifndef Q_OS_WIN if (::geteuid() == 0) { QSKIP("not valid running this test as root", SkipAll); } const QString dir = tmpDir(); QVERIFY(!dir.isEmpty()); const QString targetFile = dir + QString::fromLatin1("/outfile"); DirCleanup dirCleanup(dir, "outfile"); QSaveFile file(targetFile); QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("Hello"), qint64(5)); QVERIFY(!QFile::exists(targetFile)); #ifdef Q_OS_UNIX QFile dirAsFile(dir); // yay, I have to use QFile to change a dir's permissions... QVERIFY(dirAsFile.setPermissions(QFile::Permissions(0))); // no permissions #else QVERIFY(file.setPermissions(QFile::ReadOwner)); #endif QVERIFY(!file.commit()); QVERIFY(!QFile::exists(targetFile)); // renaming failed QCOMPARE(file.error(), QFile::RenameError); // Restore permissions so that the cleanup can happen #ifdef Q_OS_UNIX QVERIFY(dirAsFile.setPermissions(QFile::Permissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner))); #else QVERIFY(file.setPermissions(QFile::ReadOwner | QFile::WriteOwner)); #endif #endif // !Q_OS_WIN } QString TestQSaveFile::tmpDir() { QTemporaryFile* tmpFile = new QTemporaryFile(QDir::tempPath() + "/qttest_temp.XXXXXX"); if (!tmpFile->open()) { return QString(); } QString dirName = tmpFile->fileName(); delete tmpFile; if (!QDir().mkdir(dirName)) { return QString(); } return dirName; } keepassx-2.0.3/tests/TestQSaveFile.h000066400000000000000000000022431276304217300173370ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies) * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTQSAVEFILE_H #define KEEPASSX_TESTQSAVEFILE_H #include class TestQSaveFile : public QObject { Q_OBJECT private Q_SLOTS: void transactionalWrite(); void autoFlush(); void transactionalWriteNoPermissions(); void transactionalWriteCanceled(); void transactionalWriteErrorRenaming(); private: QString tmpDir(); }; #endif // KEEPASSX_TESTQSAVEFILE_H keepassx-2.0.3/tests/TestRandom.cpp000066400000000000000000000054531276304217300173010ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestRandom.h" #include "tests.h" #include "core/Endian.h" #include QTEST_GUILESS_MAIN(TestRandom) void TestRandom::initTestCase() { m_backend = new RandomBackendTest(); Random::createWithBackend(m_backend); } void TestRandom::testUInt() { QByteArray nextBytes; nextBytes = Endian::int32ToBytes(42, QSysInfo::ByteOrder); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUInt(100), 42U); nextBytes = Endian::int32ToBytes(117, QSysInfo::ByteOrder); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUInt(100), 17U); nextBytes = Endian::int32ToBytes(1001, QSysInfo::ByteOrder); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUInt(1), 0U); nextBytes.clear(); nextBytes.append(Endian::int32ToBytes(QUINT32_MAX, QSysInfo::ByteOrder)); nextBytes.append(Endian::int32ToBytes(QUINT32_MAX - 70000U, QSysInfo::ByteOrder)); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUInt(100000U), (QUINT32_MAX - 70000U) % 100000U); nextBytes.clear(); for (int i = 0; i < 10000; i++) { nextBytes.append(Endian::int32ToBytes((QUINT32_MAX / 2U) + 1U + i, QSysInfo::ByteOrder)); } nextBytes.append(Endian::int32ToBytes(QUINT32_MAX / 2U, QSysInfo::ByteOrder)); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUInt((QUINT32_MAX / 2U) + 1U), QUINT32_MAX / 2U); } void TestRandom::testUIntRange() { QByteArray nextBytes; nextBytes = Endian::int32ToBytes(42, QSysInfo::ByteOrder); m_backend->setNextBytes(nextBytes); QCOMPARE(randomGen()->randomUIntRange(100, 200), 142U); } RandomBackendTest::RandomBackendTest() : m_bytesIndex(0) { } void RandomBackendTest::randomize(void* data, int len) { QVERIFY(len <= (m_nextBytes.size() - m_bytesIndex)); char* charData = reinterpret_cast(data); for (int i = 0; i < len; i++) { charData[i] = m_nextBytes[m_bytesIndex + i]; } m_bytesIndex += len; } void RandomBackendTest::setNextBytes(const QByteArray& nextBytes) { m_nextBytes = nextBytes; m_bytesIndex = 0; } keepassx-2.0.3/tests/TestRandom.h000066400000000000000000000024461276304217300167450ustar00rootroot00000000000000/* * Copyright (C) 2013 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTRANDOM_H #define KEEPASSX_TESTRANDOM_H #include "core/Global.h" #include "crypto/Random.h" #include class RandomBackendTest : public RandomBackend { public: RandomBackendTest(); void randomize(void* data, int len) Q_DECL_OVERRIDE; void setNextBytes(const QByteArray& nextBytes); private: QByteArray m_nextBytes; int m_bytesIndex; }; class TestRandom : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testUInt(); void testUIntRange(); private: RandomBackendTest* m_backend; }; #endif // KEEPASSX_TESTRANDOM_H keepassx-2.0.3/tests/TestSymmetricCipher.cpp000066400000000000000000000221001276304217300211540ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestSymmetricCipher.h" #include #include #include "tests.h" #include "crypto/Crypto.h" #include "crypto/SymmetricCipher.h" #include "streams/SymmetricCipherStream.h" QTEST_GUILESS_MAIN(TestSymmetricCipher) void TestSymmetricCipher::initTestCase() { QVERIFY(Crypto::init()); } void TestSymmetricCipher::testAes256CbcEncryption() { // http://csrc.nist.gov/publications/nistpubs/800-38a/sp800-38a.pdf QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); QByteArray cipherText = QByteArray::fromHex("f58c4c04d6e5f1ba779eabfb5f7bfbd6"); cipherText.append(QByteArray::fromHex("9cfc4e967edb808d679f777bc6702c7d")); bool ok; SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); QVERIFY(cipher.init(key, iv)); QCOMPARE(cipher.blockSize(), 16); QCOMPARE(cipher.process(plainText, &ok), cipherText); QVERIFY(ok); QBuffer buffer; SymmetricCipherStream stream(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); QVERIFY(stream.init(key, iv)); buffer.open(QIODevice::WriteOnly); QVERIFY(stream.open(QIODevice::WriteOnly)); QVERIFY(stream.reset()); buffer.reset(); buffer.buffer().clear(); QCOMPARE(stream.write(plainText.left(16)), qint64(16)); QCOMPARE(buffer.data(), cipherText.left(16)); QVERIFY(stream.reset()); // make sure padding is written QCOMPARE(buffer.data().size(), 32); buffer.reset(); buffer.buffer().clear(); QCOMPARE(stream.write(plainText.left(10)), qint64(10)); QVERIFY(buffer.data().isEmpty()); QVERIFY(stream.reset()); buffer.reset(); buffer.buffer().clear(); QCOMPARE(stream.write(plainText.left(10)), qint64(10)); stream.close(); QCOMPARE(buffer.data().size(), 16); } void TestSymmetricCipher::testAes256CbcDecryption() { QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QByteArray cipherText = QByteArray::fromHex("f58c4c04d6e5f1ba779eabfb5f7bfbd6"); cipherText.append(QByteArray::fromHex("9cfc4e967edb808d679f777bc6702c7d")); QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d7e117393172a"); plainText.append(QByteArray::fromHex("ae2d8a571e03ac9c9eb76fac45af8e51")); bool ok; SymmetricCipher cipher(SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); QVERIFY(cipher.init(key, iv)); QCOMPARE(cipher.blockSize(), 16); QCOMPARE(cipher.process(cipherText, &ok), plainText); QVERIFY(ok); // padded with 16 0x16 bytes QByteArray cipherTextPadded = cipherText + QByteArray::fromHex("3a3aa5e0213db1a9901f9036cf5102d2"); QBuffer buffer(&cipherTextPadded); SymmetricCipherStream stream(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); QVERIFY(stream.init(key, iv)); buffer.open(QIODevice::ReadOnly); QVERIFY(stream.open(QIODevice::ReadOnly)); QCOMPARE(stream.read(10), plainText.left(10)); buffer.reset(); QVERIFY(stream.reset()); QCOMPARE(stream.read(20), plainText.left(20)); buffer.reset(); QVERIFY(stream.reset()); QCOMPARE(stream.read(16), plainText.left(16)); buffer.reset(); QVERIFY(stream.reset()); QCOMPARE(stream.read(100), plainText); } void TestSymmetricCipher::testSalsa20() { // http://www.ecrypt.eu.org/stream/svn/viewcvs.cgi/ecrypt/trunk/submissions/salsa20/full/verified.test-vectors?logsort=rev&rev=210&view=markup QByteArray key = QByteArray::fromHex("F3F4F5F6F7F8F9FAFBFCFDFEFF000102030405060708090A0B0C0D0E0F101112"); QByteArray iv = QByteArray::fromHex("0000000000000000"); bool ok; SymmetricCipher cipher(SymmetricCipher::Salsa20, SymmetricCipher::Stream, SymmetricCipher::Encrypt); QVERIFY(cipher.init(key, iv)); QByteArray cipherTextA; for (int i = 0; i < 8; i++) { cipherTextA.append(cipher.process(QByteArray(64, '\0'), &ok)); QVERIFY(ok); } cipher.reset(); QByteArray cipherTextB = cipher.process(QByteArray(512, '\0'), &ok); QVERIFY(ok); cipher.reset(); QByteArray expectedCipherText1; expectedCipherText1.append(QByteArray::fromHex("B4C0AFA503BE7FC29A62058166D56F8F")); expectedCipherText1.append(QByteArray::fromHex("5D27DC246F75B9AD8760C8C39DFD8749")); expectedCipherText1.append(QByteArray::fromHex("2D3B76D5D9637F009EADA14458A52DFB")); expectedCipherText1.append(QByteArray::fromHex("09815337E72672681DDDC24633750D83")); QByteArray expectedCipherText2; expectedCipherText2.append(QByteArray::fromHex("DBBA0683DF48C335A9802EEF02522563")); expectedCipherText2.append(QByteArray::fromHex("54C9F763C3FDE19131A6BB7B85040624")); expectedCipherText2.append(QByteArray::fromHex("B1D6CD4BF66D16F7482236C8602A6D58")); expectedCipherText2.append(QByteArray::fromHex("505EEDCCA0B77AED574AB583115124B9")); QByteArray expectedCipherText3; expectedCipherText3.append(QByteArray::fromHex("F0C5F98BAE05E019764EF6B65E0694A9")); expectedCipherText3.append(QByteArray::fromHex("04CB9EC9C10C297B1AB1A6052365BB78")); expectedCipherText3.append(QByteArray::fromHex("E55D3C6CB9F06184BA7D425A92E7E987")); expectedCipherText3.append(QByteArray::fromHex("757FC5D9AFD7082418DD64125CA6F2B6")); QByteArray expectedCipherText4; expectedCipherText4.append(QByteArray::fromHex("5A5FB5C8F0AFEA471F0318A4A2792F7A")); expectedCipherText4.append(QByteArray::fromHex("A5C67B6D6E0F0DDB79961C34E3A564BA")); expectedCipherText4.append(QByteArray::fromHex("2EECE78D9AFF45E510FEAB1030B102D3")); expectedCipherText4.append(QByteArray::fromHex("9DFCECB77F5798F7D2793C0AB09C7A04")); QCOMPARE(cipherTextA.mid(0, 64), expectedCipherText1); QCOMPARE(cipherTextA.mid(192, 64), expectedCipherText2); QCOMPARE(cipherTextA.mid(256, 64), expectedCipherText3); QCOMPARE(cipherTextA.mid(448, 64), expectedCipherText4); QCOMPARE(cipherTextB.mid(0, 64), expectedCipherText1); QCOMPARE(cipherTextB.mid(192, 64), expectedCipherText2); QCOMPARE(cipherTextB.mid(256, 64), expectedCipherText3); QCOMPARE(cipherTextB.mid(448, 64), expectedCipherText4); } void TestSymmetricCipher::testPadding() { QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QByteArray plainText = QByteArray::fromHex("6bc1bee22e409f96e93d"); QBuffer buffer; buffer.open(QIODevice::ReadWrite); SymmetricCipherStream streamEnc(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); QVERIFY(streamEnc.init(key, iv)); streamEnc.open(QIODevice::WriteOnly); streamEnc.write(plainText); streamEnc.close(); buffer.reset(); // make sure padding is written QCOMPARE(buffer.buffer().size(), 16); SymmetricCipherStream streamDec(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Decrypt); QVERIFY(streamDec.init(key, iv)); streamDec.open(QIODevice::ReadOnly); QByteArray decrypted = streamDec.readAll(); QCOMPARE(decrypted, plainText); } void TestSymmetricCipher::testStreamReset() { QByteArray key = QByteArray::fromHex("603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"); QByteArray iv = QByteArray::fromHex("000102030405060708090a0b0c0d0e0f"); QBuffer buffer; QVERIFY(buffer.open(QIODevice::WriteOnly)); SymmetricCipherStream writer(&buffer, SymmetricCipher::Aes256, SymmetricCipher::Cbc, SymmetricCipher::Encrypt); QVERIFY(writer.init(key, iv)); QVERIFY(writer.open(QIODevice::WriteOnly)); QCOMPARE(writer.write(QByteArray(4, 'Z')), qint64(4)); // test if reset() and close() write only one block QVERIFY(writer.reset()); QVERIFY(writer.reset()); writer.close(); QCOMPARE(buffer.buffer().size(), 16); } keepassx-2.0.3/tests/TestSymmetricCipher.h000066400000000000000000000021171276304217300206270ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTSYMMETRICCIPHER_H #define KEEPASSX_TESTSYMMETRICCIPHER_H #include class TestSymmetricCipher : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testAes256CbcEncryption(); void testAes256CbcDecryption(); void testSalsa20(); void testPadding(); void testStreamReset(); }; #endif // KEEPASSX_TESTSYMMETRICCIPHER_H keepassx-2.0.3/tests/TestWildcardMatcher.cpp000066400000000000000000000062001276304217300211050ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestWildcardMatcher.h" #include #include "tests.h" #include "autotype/WildcardMatcher.h" QTEST_GUILESS_MAIN(TestWildcardMatcher) const QString TestWildcardMatcher::DefaultText = QString("some text"); const QString TestWildcardMatcher::AlternativeText = QString("some other text"); void TestWildcardMatcher::testMatcher_data() { QTest::addColumn("text"); QTest::addColumn("pattern"); QTest::addColumn("match"); QTest::newRow("MatchWithoutWildcard") << DefaultText << DefaultText << true; QTest::newRow("NoMatchWithoutWildcard") << DefaultText << QString("no match text") << false; QTest::newRow("MatchWithOneWildcardInTheMiddle") << AlternativeText << QString("some*text") << true; QTest::newRow("NoMatchWithOneWildcardInTheMiddle") << AlternativeText << QString("differen*text") << false; QTest::newRow("MatchWithOneWildcardAtBegin") << DefaultText << QString("*text") << true; QTest::newRow("NoMatchWithOneWildcardAtBegin") << DefaultText << QString("*text something else") << false; QTest::newRow("NatchWithOneWildcardAtEnd") << DefaultText << QString("some*") << true; QTest::newRow("NoMatchWithOneWildcardAtEnd") << DefaultText << QString("some other*") << false; QTest::newRow("MatchWithMultipleWildcards") << AlternativeText << QString("some*th*text") << true; QTest::newRow("NoMatchWithMultipleWildcards") << AlternativeText << QString("some*abc*text") << false; QTest::newRow("MatchJustWildcard") << DefaultText << QString("*") << true; QTest::newRow("MatchFollowingWildcards") << DefaultText << QString("some t**t") << true; QTest::newRow("CaseSensitivity") << DefaultText.toUpper() << QString("some t**t") << true; } void TestWildcardMatcher::testMatcher() { QFETCH(QString, text); QFETCH(QString, pattern); QFETCH(bool, match); initMatcher(text); verifyMatchResult(pattern, match); } void TestWildcardMatcher::initMatcher(QString text) { m_matcher = new WildcardMatcher(text); } void TestWildcardMatcher::verifyMatchResult(QString pattern, bool expected) { if (expected) { verifyMatch(pattern); } else { verifyNoMatch(pattern); } } void TestWildcardMatcher::verifyMatch(QString pattern) { bool matchResult = m_matcher->match(pattern); QVERIFY(matchResult); } void TestWildcardMatcher::verifyNoMatch(QString pattern) { bool matchResult = m_matcher->match(pattern); QVERIFY(!matchResult); } keepassx-2.0.3/tests/TestWildcardMatcher.h000066400000000000000000000024331276304217300205560ustar00rootroot00000000000000/* * Copyright (C) 2012 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTWILDCARDMATCHER_H #define KEEPASSX_TESTWILDCARDMATCHER_H #include class WildcardMatcher; class TestWildcardMatcher : public QObject { Q_OBJECT private Q_SLOTS: void testMatcher(); void testMatcher_data(); private: static const QString DefaultText; static const QString AlternativeText; void initMatcher(QString text); void verifyMatchResult(QString pattern, bool expected); void verifyMatch(QString pattern); void verifyNoMatch(QString pattern); WildcardMatcher* m_matcher; }; #endif // KEEPASSX_TESTWILDCARDMATCHER_H keepassx-2.0.3/tests/config-keepassx-tests.h.cmake000066400000000000000000000003651276304217300221700ustar00rootroot00000000000000/* config-keepassx-tests.h. Generated by cmake from config-keepassx-tests.h.cmake */ #ifndef KEEPASSX_CONFIG_TESTS_H #define KEEPASSX_CONFIG_TESTS_H #define KEEPASSX_TEST_DATA_DIR "${KEEPASSX_TEST_DATA_DIR}" #endif // KEEPASSX_CONFIG_TESTS_H keepassx-2.0.3/tests/data/000077500000000000000000000000001276304217300154175ustar00rootroot00000000000000keepassx-2.0.3/tests/data/BrokenDeletedObjects.xml000066400000000000000000000011271276304217300221630ustar00rootroot00000000000000 lmU+9n0aeESKZvcEze+bRg== Test AaUYVdXsI02h4T1RiAlgtg== Title Sample Entry 1 2010-08-25T16:14:12Z 5K/bzWCSmkCv5OZxYl4N/w== keepassx-2.0.3/tests/data/BrokenDifferentEntryHistoryUuid.xml000066400000000000000000000005361276304217300244470ustar00rootroot00000000000000 lmU+9n0aeESKZvcEze+bRg== Test MTExMTExMTExMTExMTExMQ== MjIyMjIyMjIyMjIyMjIyMg== keepassx-2.0.3/tests/data/BrokenGroupReference.xml000066400000000000000000000007111276304217300222140ustar00rootroot00000000000000 True 6w7wZdhAp0qVlXjkemuCYw== lmU+9n0aeESKZvcEze+bRg== Test AaUYVdXsI02h4T1RiAlgtg== Title Sample Entry 1 keepassx-2.0.3/tests/data/BrokenHeaderHash.kdbx000066400000000000000000000036761276304217300214420ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ 6¤µƒm14¯Túo¹ÆçõþÄîäù3Ãó…Õ !˜hxónVàβˆZl?ã °Õ²i“yÆäVpZ(ËâŠx ÖÒâËÐêì:S +š“ÂÛ¬âYDùû,Â:ç $øgÌJ ù;Uœ i%Ln ±ŠQ¶t⃃üüEÃÚ¿Ð Äa“#~¶  ]w)×X‹¯Õ·¾ê@x1z×Í[ÿr"Wí¡5#ÿ„ñl^É"Æò1àeRú Ï4¶þKÌH7Ä'’.4»×”à8ëYO_k0 U¦õE«ˆKuö„@˜s—½5SY_§0KcÃý‡øœæõëX‚a¦8f5íÛëàìéðT×ÁÉû{'lŸ/`ÝbbÄH!Ð$ºWÐocÃíÔþùO)¾˜¤Ô® ñO“óÝsäׄ0ßÒÖ1 ø“m,õJŠh>Sq}Æ~'¨J;ƒ#òazjzýè#>C,e]ÕÁ傾¤(@6BB÷;–Hz#YKÅ&ºÚ®Î÷Âä5#Ïü}ô¤Ý7ÿi]=¢™;“Y–ë¤jw!&ß2Ødt‹Ô€R´òs¸«ŸÚVosœV4A¯ö× ª, ³©×²¼{àPe^”´+€è£è¢öDÝ$Ïeé#ãª0!k†:çÓófXã)-<‰×s¼!¶ï²&ŸFù“§QªG±Öcq5âë㈮*æ\+MÛ·@ÀÁY§ÚË´FÁWe/RnÄ®“C'v-]Òa>w»Åùû u§k‡G•(ùù%J©‡FIK)Ë‘ Cp .G¬Ñ—79,´SPßHÖ*lZç¦N“(1ÇB8•‚$mÚ ¥5ÉÖÅ?%«-îŒmÀ,íðÇ“±a_¹™Ùp³<Ž'15“8™£ÌÝæ¦[°™e ÇdJB2úTâ³~#–3æÊ¸Jé¤åŽ cßEÆDøp¬©[ È„ˆ ¼! ÊŒÒü"åø˜u~‹crP#g§áŸµF¦¤cú°<é¥P^Ë$Él[å§ UæÏrO(eNþÿH¾wAßz8Ü™BÂ|øâ]äUþK`HõÌqß7 ­pÆïåy/¶~‹ ô})¢­œÞÚƒUIÒüµ™¼ FÙ\›ÓçØ“Í…d&s·˜x‚kʼnIÉRHáØí kg¨zu ZªÈHä?¥‹À œì÷™£DlØÚ¥á¸@”ðŒl¾‡Ïù5"üþßçòÈÂE§k:–ÔÉõ\öØû1•(Y óÿÚ.¥€W··ÈÏdåí½·†m½ˆ”Zöv\Z ÷ÃAÕ!°Å/)]î)yÌú´´<ù“P.œÒ_ŸÉ²¢òÝw±dK¹â–OOØéfhìÃói€M3æÛ<1iƉš:£s½½Ú¹|Ü×Yåa»®Œ™¬‚à“¨ô´`;ã]™? Ä¿ž‹—ø8ÔMŸìe¶zÀu°Íƨ@èv¡/CEað(â¥ó/õÔKr3×ëò°û7&fçNP,÷7aªZm_i× ¦*ºù䱇š¶Q@rþ M"vÒz˜Ç”w¯÷ŽôÙ[MÉ_;ž:1:…ÝŠæWŒ˜×1Í èCŸã+p¹5«}äš…yºãžþ#K‘7C€™ë–ù™ ¸ÔBâåÔà• Ý±ŽƒÚ=ûªÅkŠ7ˆ*»ÍC ê(„›„eJ\OVÀ0×{Wy*RŒëÈР*Á¤Œ­ì³PíäÐØÚÁ»„õ[Õ¢Z¡@.Xœô>¶o¨¥¬ìð"[®%Pÿ¯º»ïÄy*}Ÿ–{AôÐÄÓí x- x4‘I7hŸz¡ˆ²áeáðìo}Í5`¹Ë}ߤ"U§.^ÎJT)Ù|D¯Ï{îP´¶¸©¨1š×àO¯tðÅ/ q3ÿMµ[PtÁî ì©Zpý[À§qŽÄCÅþ{õuëèYÖLìjÔ<uF’iÏÇB'Û9i{ŒÙÓÞˆ<<¦­ãϯãó"/ù­¤¡FÞ¸è|]é'¾`S|è<¼ è!ï®`¢« Þ,±³ÈzÆ—†›9×Ìé=%J c>7Òd'ç jóõ»ëP¯6$yá5ÔÈ*…>+ޤMÕœ®çÍå¤úp¦ê†ÄB­€frú ÐÒf>´À0ùëŠÀš/Œ¹é‹!¬Öþݼís½·ÅÐgxÒs¤1áÃB@û!r-U¦q'keepassx-2.0.3/tests/data/BrokenNoEntryUuid.xml000066400000000000000000000004441276304217300215310ustar00rootroot00000000000000 lmU+9n0aeESKZvcEze+bRg== Test Title Sample Entry 1 keepassx-2.0.3/tests/data/BrokenNoGroupUuid.xml000066400000000000000000000002201276304217300215140ustar00rootroot00000000000000 Test keepassx-2.0.3/tests/data/BrokenNoRootGroup.xml000066400000000000000000000001461276304217300215400ustar00rootroot00000000000000 keepassx-2.0.3/tests/data/BrokenTwoRootGroups.xml000066400000000000000000000004141276304217300221160ustar00rootroot00000000000000 lmU+9n0aeESKZvcEze+bRg== Test AaUYVdXsI02h4T1RiAlgtg== Test keepassx-2.0.3/tests/data/BrokenTwoRoots.xml000066400000000000000000000004351276304217300211040ustar00rootroot00000000000000 lmU+9n0aeESKZvcEze+bRg== Test AaUYVdXsI02h4T1RiAlgtg== Test keepassx-2.0.3/tests/data/CP-1252.kdb000066400000000000000000000011541276304217300167730ustar00rootroot00000000000000Ù¢šeûKµæô.LkU÷€¶*|ôú2õ¹I\¹öÛe² Û¸×¾(âi•(fñ4ï‡QÚ³©z5cH¶óḙ̂¦>*¡è–¡‘¿è¾™­¸!ÜË8L•»r¯ u„®šüf½›¥5!Pr ½Þñ·SM+>«u-62 2å™l¦Êâ½6¢^R[æÄ -¡39ÎÅIV¬±Çko€Ü$9’¢^Å+ëf=32PËEµàÕèúÀ9ÞÆ‚(õº_‘â£Y¶ZìÕ"ãŒq–Pª!Õ2v].Í42çJ-ùãôcð<¥é»S×y†¯åo%ªáç–ÿŽ}bá`:¬fõ8=#Îö ~EîŸ÷¹RúÛ,hÕl"z§ã~=‘%ü`E oÛJ®øÍÐ-v‡¹°R;ø$¦‚ ã5~vV a!Ÿ§Ï6ÓOM‚„Ý©pþ³ùûÎ×Bg7ÒùJŸ…·réâ餀çã°×#Ó-ºÉÞ—CÝ*+c¬õ¡pöÓ ùX†…ì–Ãø, 扺©¸ÄOÃ42pðúH~ö÷$ó˜%pÕKc£–kÐ}ž­ÀÏé¡xÇy5Š*p(|¤.KkßiÛ£­ûžÙ³öoÈ'=5DdΪW‹^Sê{CÆ„1ì‹i;.\èÐ$H¤Q&ÅSMP À!½¶ìâ!/N™©ñër~‘Qþë…³Óà4 ¼§å¡Ú¦‚Ïàˆu&o›‡Kp¸Þ!Xƒ;œjPH #ÅŽ$^3PÅxrÆOÝxgà[ˆãkeepassx-2.0.3/tests/data/CP-1252.kdb.key000066400000000000000000000000161276304217300175560ustar00rootroot00000000000000„passwordâ€keepassx-2.0.3/tests/data/CompositeKey.kdb000066400000000000000000000011741276304217300205170ustar00rootroot00000000000000Ù¢šeûKµ}BuU~Ë žôŸßÙô÷… ¾OòÐAÇj¦Æq¿¨ŠMXŠNNó©j‚¶z؆€äÄGÙ°×B-þü`‹â™<'0ÍÒ"¸ùñØx “p¢öV´·â˜òó¢Vd³£ÎAÜ(¹*ñ_Ô™Úe3/gÁ¬b%+Þ,óåf¸x¢ˆ3?f_E£âO•³¤ð s’Å­Â 8Íp “Ö½½SÕ„ïÙE<)0"äýRÁÓMÉR0—Ÿôo»ñåXœ_¼ê­¡É⥠£•ÕÍ…b?à¯j¢¸»èœû[}Üçk(É»ì⫪‘ÁÜ™íÞÎVv ­psšåÔ¡ãkL®­µDÂIçƒ;"§Î W='ìÈx´RDüΚ{Ó5Vd4ö-§Š1†[ÄÐG$"Fƒô¼´é_‡v·³’ÚÕƒGHÆŸ˜hô éÖä\Þc sï§4—÷…‹)¥hš$ÛK™G–$“dHT*ëC¢09”ÿfMÁ{œ•}Ñ)ËV1½Ü4cµóÿ4zgOìôîýen˯;LÒÜ~!³®¿C#˜!Àü)\ÔA›,öžl¿ÙTpWù*š`A •¦ 7zÚ NéÄýð\ƒþ­œÄ·P , &9ö6õqW Ïy|^ÒÒà?*ƒ2>pÊøBàôQé²¥øúŠ ·4ãÃ6¡œ½ØŒv2Ú¨ šÚiâh"Î=‹õ$"æI îãZÁWkIÑCQ²h„½„>«ðl…B'‡âLpÛ`Ôyëp?Í(^$‹–ŒblI ©µ¼keepassx-2.0.3/tests/data/Compressed.kdbx000066400000000000000000000036761276304217300204110ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ 6¤µƒm14¯Túo¹ÆçõþÄîäù3Ãó…Õ !˜hxónVàβˆZl?ã °Õ²i“yÆäVpZ(ËâŠx ÖÒâËÐêì:S +š’ÂÛ¬âYDùû,Â:ç $øgÌJ ù;Uœ i%Ln ±ŠQ¶t⃃üüEÃÚ¿Ð Äa“#~¶  ]w)×X‹¯Õ·¾ê@x1z×Í[ÿr"Wí¡5#ÿ„ñl^É"Æò1àeRú Ï4¶þKÌH7Ä'’.4»×”à8ëYO_k0 U¦õE«ˆKuö„@˜s—½5SY_§0KcÃý‡øœæõëX‚a¦8f5íÛëàìéðT×ÁÉû{'lŸ/`ÝbbÄH!Ð$ºWÐocÃíÔþùO)¾˜¤Ô® ñO“óÝsäׄ0ßÒÖ1 ø“m,õJŠh>Sq}Æ~'¨J;ƒ#òazjzýè#>C,e]ÕÁ傾¤(@6BB÷;–Hz#YKÅ&ºÚ®Î÷Âä5#Ïü}ô¤Ý7ÿi]=¢™;“Y–ë¤jw!&ß2Ødt‹Ô€R´òs¸«ŸÚVosœV4A¯ö× ª, ³©×²¼{àPe^”´+€è£è¢öDÝ$Ïeé#ãª0!k†:çÓófXã)-<‰×s¼!¶ï²&ŸFù“§QªG±Öcq5âë㈮*æ\+MÛ·@ÀÁY§ÚË´FÁWe/RnÄ®“C'v-]Òa>w»Åùû u§k‡G•(ùù%J©‡FIK)Ë‘ Cp .G¬Ñ—79,´SPßHÖ*lZç¦N“(1ÇB8•‚$mÚ ¥5ÉÖÅ?%«-îŒmÀ,íðÇ“±a_¹™Ùp³<Ž'15“8™£ÌÝæ¦[°™e ÇdJB2úTâ³~#–3æÊ¸Jé¤åŽ cßEÆDøp¬©[ È„ˆ ¼! ÊŒÒü"åø˜u~‹crP#g§áŸµF¦¤cú°<é¥P^Ë$Él[å§ UæÏrO(eNþÿH¾wAßz8Ü™BÂ|øâ]äUþK`HõÌqß7 ­pÆïåy/¶~‹ ô})¢­œÞÚƒUIÒüµ™¼ FÙ\›ÓçØ“Í…d&s·˜x‚kʼnIÉRHáØí kg¨zu ZªÈHä?¥‹À œì÷™£DlØÚ¥á¸@”ðŒl¾‡Ïù5"üþßçòÈÂE§k:–ÔÉõ\öØû1•(Y óÿÚ.¥€W··ÈÏdåí½·†m½ˆ”Zöv\Z ÷ÃAÕ!°Å/)]î)yÌú´´<ù“P.œÒ_ŸÉ²¢òÝw±dK¹â–OOØéfhìÃói€M3æÛ<1iƉš:£s½½Ú¹|Ü×Yåa»®Œ™¬‚à“¨ô´`;ã]™? Ä¿ž‹—ø8ÔMŸìe¶zÀu°Íƨ@èv¡/CEað(â¥ó/õÔKr3×ëò°û7&fçNP,÷7aªZm_i× ¦*ºù䱇š¶Q@rþ M"vÒz˜Ç”w¯÷ŽôÙ[MÉ_;ž:1:…ÝŠæWŒ˜×1Í èCŸã+p¹5«}äš…yºãžþ#K‘7C€™ë–ù™ ¸ÔBâåÔà• Ý±ŽƒÚ=ûªÅkŠ7ˆ*»ÍC ê(„›„eJ\OVÀ0×{Wy*RŒëÈР*Á¤Œ­ì³PíäÐØÚÁ»„õ[Õ¢Z¡@.Xœô>¶o¨¥¬ìð"[®%Pÿ¯º»ïÄy*}Ÿ–{AôÐÄÓí x- x4‘I7hŸz¡ˆ²áeáðìo}Í5`¹Ë}ߤ"U§.^ÎJT)Ù|D¯Ï{îP´¶¸©¨1š×àO¯tðÅ/ q3ÿMµ[PtÁî ì©Zpý[À§qŽÄCÅþ{õuëèYÖLìjÔ<uF’iÏÇB'Û9i{ŒÙÓÞˆ<<¦­ãϯãó"/ù­¤¡FÞ¸è|]é'¾`S|è<¼ è!ï®`¢« Þ,±³ÈzÆ—†›9×Ìé=%J c>7Òd'ç jóõ»ëP¯6$yá5ÔÈ*…>+ޤMÕœ®çÍå¤úp¦ê†ÄB­€frú ÐÒf>´À0ùëŠÀš/Œ¹é‹!¬Öþݼís½·ÅÐgxÒs¤1áÃB@û!r-U¦q'keepassx-2.0.3/tests/data/EmptyUuids.xml000066400000000000000000000027201276304217300202520ustar00rootroot00000000000000 KeePass ANAME 2010-08-08T17:24:53Z ADESC 2010-08-08T17:27:12Z DEFUSERNAME 2010-08-08T17:27:45Z 127 #FFEF00 2012-04-05T17:09:34Z 101 -1 True 2010-08-25T16:12:57Z 2010-08-08T17:24:19Z -1 5242880 lmU+9n0aeESKZvcEze+bRg== NewDatabase 49 True null null keepassx-2.0.3/tests/data/FileKeyBinary.kdb000066400000000000000000000011741276304217300206010ustar00rootroot00000000000000Ù¢šeûKµ•¼ï9`g⸢¸Ê©»MÅ5¥yW–—7üïÈU¦{l¦ì@X—mˆîìäùü!+HÑTÈ¡ýL\lfÖÃøŽŸ¶Õ•×r·aßáçG)4$/¯Ëðêá§jæ8ƒQPÃÞí¸øò÷&*àê·¼Ï+97=Û}"ÊJ¸b"õ ÃB(]k~Tß_4–~C—… *ÌèlÚQÌò¾’!—ÖD/Ó›"˜¨à/7žq튶 ½/LŽrg*ßíDà Žr9Oæ¦}…@ 0ýý~‰lc0é7VksT\'1y7OÈl‡ ×™/djŸ¢Ø‘2VzMh¦2S ‰©O\|‘ Žyg€½´ö§gŽù4 ‡ö+(1¯¦S<ð•Ä:×”õ€“ëi/áµäÀž2yâ_‡¢‹„˧õöÔ¶oÑ+Ö‚û‡ƒi <.rT-h¡*ãbÇH¸] ›îUÍo–’z´éò÷.×*w9ÃXŒE”~ÒÎ*â]¦$³p M¿& >^1c)Õ_$˜–¬¿6vFž±"*n±ë£1“l¿ZR” £”Øh˜}J©‹œPç{}1纙xäx iÞ’z§uЇ<ÝÄ£ŒqÙR­‡×Ö‰$)hß8ª$-u™ëB,dRs:S ^f5mþjç^+Õ‹Å+·pO_Ûæ†ñ·JxÄ™æff”g‡«#Y~?>¸^k¦2ÜlâÃ[kZnºZ9ãƒQÞá6"9z¬2«ñ8ó‘Ž')Q‡"y,­¯/>?.⬉ïNSÞêøkeepassx-2.0.3/tests/data/FileKeyBinary.kdbx000066400000000000000000000030561276304217300207720ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ ˆh “(¬ÝRV–©æ¾ŒÒî 4¼sÏàW‘öü°Ù z1-÷õpÙÏXü%Õ3se˜@­Å(A£¡K~ù\»ÏpÑ4žÙ¦CA ‚G§*Àvžf ±¢?£ãÌ4ÖQaedƒcÔZLŸÍAœ‘Rç J ¦ñ– c'KýüCbÈèKw€§y[ÀLX1  ÐY¦‘i¢›¾k,,ÿ’NÚs%õ>Z MgClö°â޳d_θU銅n­Ö@(ͳÈ€öÛIe¼®Mšäˆ ¿‘øQz‹ :w¡ÿqþšUîV¾ˆÈ–( •{–Ä!»6Ëðj=ÖØèؼë=¥Ý}vÖY%âi‹é6²à‰ôé޹›Içµ9ûˆêÌâ¯Ò÷—%ÉúøA2ÖdÌ;ãe˜u ¡ieµ†È‹±³ü¥:e xœËíS#•„Ã%c˜QðPTgŽ‘³Þ¢…Y ˜Þ¹èDm;ælr|®×£cs’òÒÏz~û,2FWùJm Ð"ÍKh1³ð.Ç8çQ ¢4öÆþE¸_xšäL}á@«ùàfvv—ÀI¶DãºÒ“Tø_’ôdýÙŽy’½¢ûT3Áç³\`§[´7’%×1‰ÿïÿHš’üå0üL´Ã=L±´Uáwëãdt1ÂZ‰Ò€)‰êЭ¾oað0W‚´¼L©×›Ô*"Tx€ŽHÜïÄË£û£pã™u{û ï4VÇb…ƒ”:ó©±§ ûý„:Ù#К]áü&ûC²ÐDÙߊWh±„n8ÚoËUÁ@¶ah-‡6šñ†hE)Sðü×IY»êFz՚ѧuÝÊZ™|ࢤڤ¥ð¢¾MU+uyžµa]&VÂ7çÍùå“쎰  —Üh…íŸFôIÿé»7”†Õ6q¼?ˆ^æÚç]‚XýЮ#ŸöÈ· š¶êgLÀmT!ƒõ§žKÄFU”•Y×…d¸rW(ÒOÖBb VawB4•†âeÚoÏÒ£ ªúÀêöª„XqïýýeBæÆRœ½ó”ÊBð¯‚s¯ÅX•qq-'‚¾…T6{>o7ƒ%hÚ%ÀB‚æ‰de(Î\' ï&Ll æjjÞÀKø y­Ä\9Á™›bŸ~I%:Ôsç%€Å×Jý‹fA]úúÁ>Þíø¡È#ɵÿéï4 4‚PµÕÐ=}HKw¾¼_½Û7†=Õ%î(¨¶õBƒt.x³ýöƒ4‚Q˜b<ïO(†pëb`3úÖCµÇðwë=• šÏ8ó¶ ÑäŠ,3‹s¿F(TMQ_Ûzaðh¼¬‚ç´Òˆs©ós🎽îÓÊ 7}¦CšË~fÌi¬ÓÈ,ìíá¹MªòÞïÅp^G‡Ž¢ÑQèž~ˆ:Òµå]%´*Ä`éK¢Æ^,E˜ÓôÉ‘ïi ð†Þño™rEd€âDìøeþÀwP!ô®žØty“í6ÿ•v+Ô¿ƒ7A(»Þ)h0ÀëåìÛ.>AxüY*O9)ñn΃IHqXÐMîŒ:›ê*¸N‘‘ t²å6£¾¢p†c’Hgzù”æÁxÕЂÍòŸz l'ÕüýiâÖÍ1)އq±Gi¬$Ϊ{/'¶Ç9ëØJ+…"q0Û÷ÕâÏÏíxTÒJÒG#‡€-“Ç;8LNFj‰Ö&s#í[’)ì¾²yJ&ê±s&j@ŽlÙ¯ ½|oÚ•¨ ðå+Õ™e^A.Öúåyó¤r)tbK¤GåÛ®P¯Æ5mNûÖ”ç C/PP:ë؇ `Ô8Û®t¯á|øŒŠ\Gi†ÿ$ŒÌðh¦“Ïr]a9>%7Ê «]×$Õ™A5v“+RóùIæ4®Ú×T ‹r5¥íâ~«¡@]µ"&ë]>o ÄÎV5½£d”¸Úª|urC³ç‘žhcuá‚keepassx-2.0.3/tests/data/FileKeyBinary.key000066400000000000000000000000401276304217300206200ustar00rootroot00000000000000  !"#$%&'()012keepassx-2.0.3/tests/data/FileKeyHashed.kdb000066400000000000000000000011741276304217300205510ustar00rootroot00000000000000Ù¢šeûKµÓï#87æ·˜‰4 ÞVÔÿÅÝÞ/ºK­Ð*ÿÒ\‰ a[¡;ëLŽiŠÔ4ìC@¢¶pQ`ÆŠ‘ï§Otý²!‚ ;HÖ`%9U®½Vsè~<ÅmSýÄb_qÉ êPÃÔtFÁ‹>.EW³¿Æh;v-DQh’ò;/UžÊv¿E‚û‹{cÆ&-C#Ú@ÛÞ’ÜÕÀ´8Ô`E{:æ4ý\ŵtÿ︌ïæJïêûÒk5æZ ʼn2錈ÓarÉ;¿!çlËâ¤ÊiúòTZÈ2>‡¯ת}!Rk¯mÂÉþG}b–ûœÅîÄgŒÇÅNœÜ!=^4 Žåvú+ê5IE¤NÞoÜØã\^S±,Í5¸ôìÏ`ó eThšyO®apò P”üùgõ™>´ëÎhãô ®l8¥Kc=:CóÒn¯…™­ÆûœÝ—Í+ZÒ2p”VV2ýCìnð¥”ìÃP½sZ-?õÖÆ¥Ýª¹è9ùægÊDâN½‚e)ñEëÄSæB?¥M,È×Σç›eS•n ݘÎÔ-½=7Ï‚åôµepS&ãù}»©þ½ŠßEÆ›lr·€ùOìÌ?æH&í-³¡º[û 2ײlñbcfë[³Ò?2ò}6f*œ+è Ìxù(;:®¼>W>X—xjSà›Ã¢§ YÕÎð—aÛ›íϪÝ"|½¿žõo/·ÍgÊkÇ0bLß\Ÿ8µ’&1Õ'c]fÆûÆr!0 Ákõô÷,?ˆtµìCkeepassx-2.0.3/tests/data/FileKeyHashed.kdbx000066400000000000000000000030561276304217300207420ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ a±X_b)TVÑPÇFR¡TsËEÊâšõ&÷:†1ŒC wòY²²2×E 6|ߦU³‡ææu¶öb ï3÷>p%+­i›§°y‡rKý )voí"ÅË:Èkzˆ9JMÏ€ÅêÞÔÙ¦ÎÕ$Œõ ø7ÞUúOÅ”¦Kª¸cÐQàÐO¾ŒÁ¯¶.µ  ’”é®1¨–?ê”6ˆ¦¯ œÐôKž¯«æ™¡@=ñ÷éh[pµÃnÓÕÎz+[¨©,7Ô¿áž Ç_Ҵر-\L…ˆzÛÚ“\I3‰•ܘ;9ÞËC¼¼_Ý¥Ä,¸Ñ1Mx’Ý;ŽxÂØ¨]ülŽ(!­ê.â'H DèKcuë ØÖŠ¨ÈjʶÇO2D­à%µ2C–îÍíý•²gA0ðT§ÔLü¥æô¶´ÕT '{f'æ0c J7[.ºÝn#¸ˆPï;Ä•§`Ä´WOæÃà– ²åº–üצ CŒ±ÌÉBàms1¾<|c¼å§[Î:¦>B·ŸrÔb' .o­ÙJÄ–ìwãû‚d Uü+{¢d¢j¡†ú‘”+}K,ÏId ‡¡“‚öRi”²½@U˜;è’—zþÄ|lI#3¹73Ã%tB×ÿÒêüë\ºkñ«“Å€‚·y5“Â`gój_¾\ïûÚ˜o#N½ïÍSAGøœlÚ¿°»x:L£Ž; 1SÞ™›YÉ4h`A¾“žó·;’Øþ—£šº&3#±=Øm2Ä>Ê"TÐhàWu"Œ•Ö“"-½0z›ö^«Ä&†°‰@!åôkÆ–Dœ›,™Ëú¿æPõ\z“ð–;ZI|°%Iǘà8Ž4Ò×ÒmgöÖG$ZÙ2œh÷~òÑ‹ óEûpë䏨427œ&ùœ=æt¥°ù˜\³ƒƒ«R„áÐ@i"#è®Ú¯¦ïÁÔ ¥Ñßë£.¸lÑî9^O©ðP&]JD.´¥û¥Ä‰sÍŒ´WüáR³·]#ç²ÐV¦†ÒBCgîæoŒœLoÿ~¦2¤¶lèxzaH‡Ã°úáßFC Ù‘;ÊçÄY™³ ÀS`HŸJÇž¤ ÔÌÌK—:ÎB;y Ü'g>±©,d®õ½ÜTp¨¹x&‚I v[ÞDùAÓ|óÂ'_eœU3N˜¶ñ.‡âw}-¨a¶Wäo¯’ñËîóÔ˜‰’»vp9θ@[Ó’ÿ®•Ù¿†‘^Üá0G1ýóV§É˜CmAñÌÂF‡¸–¨ Ëõ.f.MïÑýI;ûàW‹Óêgú"‚«±óñ›©áÕÑä»K¯ó¯NT…Í—¸&rV¾£^øÇèÖÚGö ½“ÎóF£‹ÜÄ·b|ëž}¾‘Jç u½jí…rB 3i–sø°?:Ϭ°*"â¶|`êë€Ú¹éêW 枸“‚“Ô2BrûH ƒ÷ "3 u–!¹SÔªÈt>AÌFeÑU*ÇÎÕ–ª(S:NxxXÚåyWm!`T«ãUk²+w#å :€½¯'öÆq·L -ìñ{áG_ZäyÒºokúbŒø {u=å½á2Ðá@XBÅ­]|zv:¦»mÕ²7_øÌË#µ´ÀLsÔ±±ícçg 9«z ¼t…-h›¬¤º!xé‡C³ÛÖoaR³¼ û`áÅ]/Š—³¹”tñ¬°ôÙMÄtUÌ©™tRyº/kJ§Ë…LÇlnåÞýBÝÐË)?:HmïíöÚ&}f(£DH6Ï‹~Êq}7ÏÕïžÓU¦E&è‘«Ÿ_Y[h±GÁ~Ÿ=Ëæid[,ÆE É ÀÛ\=IOÌÒ>LÕ’³Ý•ü»¢Orx °~”Û½—7 1jÛLÊ0e¾õ3C7t;3åX:Íä”ku-ß ×¸c)0þ?°­Ùv·û¿½% …½¥Ÿ—û•¾4Deãkeepassx-2.0.3/tests/data/FileKeyHashed.key000066400000000000000000000032401276304217300205750ustar00rootroot00000000000000‰PNG  IHDR†A”ÜsBIT|dˆ pHYsÄÄ•+BIDATxœíÜ_HSmðï9Û\Z ­¢Ù„ÊDéÏE’eJV åˆòB)¼ úKäEÔM”uÓEAxBPH…a† àˆQ¦£…áæÎðû^ÄNn{tg½Ûë{ñûÀ¹ñüÎóü<ûžçD$!D}¶ÿO ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ ¡$ÁJ †¦iÐ4M¹ïÔ©SÐ4 º®ãÒ¥K™šrÚb›ÝnÇ’%K°{÷n dm^«vîÜ MÓ°}ûö¤}$QUUMÓàõzg¡»ä†2‡‹F£lnn&ÚívÞºu+SÓÍØƒjs8|öìYVçOehhˆsçÎ%Þ¹s'nß•+W€n·›@`–:ü#kÁ…Bܵk0//÷ïßÏÔT–{‡Ã|õê·lÙBܼysÖ{H¥­­XXXȱ±1’ä»w›KìêêšåËJ0‚Á +++ €.—‹>Ÿ/SÓXîaªááa3 ³Í0 ®ZµŠxìØ1†Áòòr`SSÓl·gÊx0¾~ýʵkךWÅÛ·o•õ¬¬¬d~~>srr¸bÅ ž8q‚Á`ð¯kÓ ÆóçϹoß>z<Úívº\.VWW³»»;îXÃ0xõêUVTTpÑ¢Et8,((`]]?~l¹f*ŸÏGMÓh·Û¹ÿ~àÒ¥KùóçÏÔ'ú?’ñ`KJJ844”T799ɽ{÷N»(++3OP:µS{ˆ™˜˜ààà «ªª’n%Ó©iïÞ½kÖ555͸v±Z“èÀqs>}úôß}–ñ` ÓéäçÏŸ•uííí@ÇÃÎÎN~ÿþãããôù|æWêÉ“'Ó®Mì!ÕâsÛ¶m|øð!ƒÁ #‘GFFxùòe`yy¹Y———GGGGg¬ÿ¯e<~¿Ÿn·›X[[ËH$W»ºl6m6u]§®ëÔ4-îêN·vj©Ü¾};nŒ™¾þûúú¸lÙ²¤ý[·nå·oß,×LÕÛÛK]×i³Ù¸zõj`ccã_÷lÉÊSÉ›7o¸`Áàž={FͺØcYª-ÝÚÄfRZZJlii¡ßïg("IþúõK9†aìëëc[[ëëë9oÞ< ×ëM«†$ÇÆÆÌuXkk+ý~?N'°§§'ͳž=Y{100Àüü|ój˜œœ$I®[·ŽøâÅ‹”c¦S«êa:±"ñ©æÞ½{–ÆˆÝÆ\.WÚ5±Eçš5k811A’<}ú4°´´4év¶dõÍg¿yå´´´$oÞ¼Ià÷¾ööv~üø‘ããã ‡Ãôûý¼~ý:7lØvít=¨¬\¹Ò¼büøÁÎÎN.^¼8iŒM›6±££ƒÃÃÃ4 ƒ£££¼pá?¿VjHòÁƒÀœœ¾~ýÚüy(2{:þü_œýÌËj0H²§§Ç¼%9r„$yèÐ!Ë·‡tj­#öö1qkllœvLÕvðàAË5@€ÀsçÎ%õôèÑ#3HŸ>}²xÖ³'ëÁ Éîînó뻵µ•äï§‚úúzz<:æææ²¬¬ŒGåàà`ÜñVk­#òâÅ‹,..¦ÓédQQÏž=KÃ0’Æèïïgss3—/_N‡ÃÁ… rãÆ¼víš¹v²RÓÐÐ@¬¨¨ˆ[sMåõz €;vìHù;d›FÊÉäï1„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(I0„’C(ý:£ñ–‘îãbIEND®B`‚keepassx-2.0.3/tests/data/FileKeyHex.kdb000066400000000000000000000011741276304217300201010ustar00rootroot00000000000000Ù¢šeûKµÇ®³´Ùµö"XLÇŒßᎦûá…ØühyX¦¿‘(éu/Ô¦¡.˜4ïlx͈Èþ¾'h¨?2ÛŽ³…RM¥9ü&ï3ž’•®¨`É9ü]u“2ß$à’,ONPÃXQÄ‘Øÿé±qhj_u³š¦H·wØóö'äÃï[yåŸ#‚á%ÛÉócsâ}Šzˆøø XÚAŒ‘+ É¼æ ¦ Ô"ª6É44Á”FØæf—§Ri^Ô…Ñ–`¹™è;]yŸ#ÚÖ̘7©²Bß ‡Óƒ1w½D䤙sѵÕa{‚n)iˆËö•ÂÁÊ8ž8T+$ãhÈ ¤J#~ض ð¾Ÿë]oœâ»žïsŒCb™1&Ì'—A]½½Boà‹¹YæD̓ü©›Ê^?oxlXÛ-zÛ8bMìU*ÅUÔ¢¾ù-~¦íƒÚÙ¯VãútrCú;Jѱt­}.)Ãüz hÊ7oäN¤E½æ.®:Cû†^…þÇ>1@øÒ¦Æfmïj´*ƒt º:lƒS Õ)iz‚tˆ|Š{‰¶’×gåÀ÷w‚ë²Ó!†§þ²;ÇŒ;7+Ñ‘Ë×…ÑXRî6¥æ[¶Í--€*&ÉÙà‚6DÿÀi¯O­šy…ÈãTqñCÔN´˜ÔD “ï¡óÐ2’t% 8‚Â3BÖ (·ïj&›Û€îlÉê¸3ò3…{íATmõQ4˾ý¤@t™ n¼[E#èd B≮hU—æsÓð AT/­Û:_{Ð=ž/ô¬J÷ûkeepassx-2.0.3/tests/data/FileKeyHex.kdbx000066400000000000000000000031161276304217300202670ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ ðJKŽ—rGÁ¶]ž‡½óÆæ¿µˆYPøœ«ž»Š¬EEÎ ¦²ŠëiÔY°N*7³„N#Iù!Ö™äKÈä Gzp˜¬‚ ó .œ@ª©(ú ØÎ„䡸0ôWp÷*[ö-ß¼¨<^>]¨Ãò{‡ÿˆƒß ÒØâ¶“tk›«ŒÜ^fÚ³ÆU<×S£€Eᩇ"/  €Ê¬‹ÿ“%’ʬNFdTð-@..874WZn- YoÓVÔ•[©©¾w®¹Ü½1 À5±J~Ã^OîGÇÐhD-B+M¯/ã¼Aí&lÎÞGÄ›K«×¾qÂ0Š Õ=+í;cÊsý= XèÜø¸M›¾«+Fu‰Ò¼î%¶T;ßx‚êîþ”,ÿ0„ÝcG*ckÕ/ÖsTÞ[KeÕ®[hØ’ÓÕé¥c^°6ˆZC¼JåP>žZ²)˵þ/:ŒJ[Éñ´`6ÿ¨œ4lÿ€òƒ£:ù”ßnƒ²º ζÿ½gšï—ËÔlç¥àsÐÑD›Ã‚(‚f×É Ù¡–Óš ñT‰2gï jî>ìØ74gØE{ZX¶-0 )¡¹½ûµ™L0öz}Œ¯'€ÏI&ÎT£æ~z¼fíDð¼v$6á‰Ç†ÚÂvîD½ù@.UÏq½Éø4 ‡l3{"ìæí\j$Fª3ƒ]jÂÖúmHðŸÌbú`·ðr.%˜*÷6p¢Š×ØóÍLr¦aS«œÞ46R¬fËvWrËqÞFD+ bRì%ëã]ñ-ÛÑuІF™‰YÑoÓÚѿçÓ¶Z)f [Á”£ñX¦q˜]Jõ³Âóil¨‚ß$àüžó›ô2HŽf®`Âè|²’uŠ5keepassx-2.0.3/tests/data/FileKeyHex.key000066400000000000000000000001001276304217300201150ustar00rootroot000000000000000123456789abcdeffedcba98765432100123456789abcdeffedcba9876543210keepassx-2.0.3/tests/data/FileKeyXml.kdbx000066400000000000000000000030561276304217300203060ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ ÅWÿ¿Ð• $ÓWnTögƒylÿHØŽnÆ2DØq¬" Ž1QÞ0¤Ê´k­ÒkÏ£=+ë]²˜ÌSÒ OÃI@â·pš³ .¼ïàшpël »juR­M‚Î?©^gבö¼ùPX ¼oéšGHUø'c ß_ C`åR~ÉûUi]ÁMçÀ»røºšo+bšOÉ  pÍéO´êŒÁgpýY‘d2:F¾FÜ)RÜÅy6§x ‰®&3“Ø ¥ñÕ«<ôÜ"€ÿVt*0`ë/@6yL ÙÇRÞ`i.1+ìáR‘ñe¢ GEǶNå¨|põ¥Ÿ †çÒOÊ?2N®2} æ¦3†·W¾a†: uEJÂ+F¸få¨QÝÚìI€Žé¢Ž•4/¹z—ùç'™ñlpD[OÿU5Q¿zTï‡4øÓî­‰ øš!y]m°Ë5‰{-‹ XO-ïÙlb§`‡Ó¶UÿÝi mÑCÞn±5‹1öÄ~"À<¢)¶­ª>@1À?¥Ä¸ÆQ QÎ$¹S¼H£bhÿ…~ÕJ[••ôð&b³Íˆ¯)ׯ…úÍ46D§cB>g•*Ê•_þÆçø7³ã~×:¯Uq ǸÖMv <:ÑÕ(•-»uFOw•—Fg4f:úœøßÙÒÆ¸2vªÄe°sþ»ýh&ëÈzäh½ÏI£Y–¡D³6+±E§êPv:ŽO@=úŠ­D¸GVÐ8úZÁ¥|šH56@NØ9éDBݸÑrå [âG™K!útP>÷!UïÄ”·ŠœíË‚¥”IäiÀ¾ÞH_0LpG„Ö@ìûÅ(þl?(i‰5F€ŸWï÷Ï2¶5®íßêßñi%˜ükÕO‹”sÎÕâùÜê_E€P÷>öN?èÖ¿GZªÞêpÍÚ¼³bZú‡2]¥ðNsÖøä')mèÆ Ö{v4žð½Bw”ÞtZ(VñUŒ«ZÌVþL —.füÿ^ µ3;޽zâÖ=ÌÊlªBzˆ ý³ñÁ•Í| õ—–çt‘±n3rÞ_™Ö¦VÐièûw–T>wߥ§p½Lâå –˜é”Åu\«E†et‡ÄâØóβªæ`2ä Ø‘`2¤=(×븂gøŠžaÌaö¦;P¿{—ít«S.¶Ì2åÔF0ŸˆI•®òvåX¡ ·˜ AôÚv¨1Ú’ã $¶¢ÛåPW÷« ÍØ³î5-d˜Ò§1åRXQ¶Ç˜Æí†7)ië)tG#6¬vaGæxä3 ³Ä!ªÎįÞ(1kÞW"B«Í$µn\O'"´–õmƒ…æ¦bѧ¸«a˜±J¶§åa÷Ë8À'5èt ~eœXA\¤ „RgÀâR¹)vRº} ï}擹ÚG>jÞ^p¯š‘¸s½‘)9$,FßSðü_wž‡Æ›cEÎbŽgSmÌîS“h ¨AŸÑãœÿîb(XË9¶sÒ‘™!ž=YAÞÄ<˜ë¤NŒuÐÚ¿yŒ…8³$žܧj1Å]#m®£Ö‡žÈ)ñZ”ª»ú> Œ®@„ÑêH©õÀñÔƒb{59vèLEOõ/Ó˼áo‰ ñŠK&X_k¿Â¢þ[,¼ø3Ñú®Éõ°H¬™‚Á6Ü›} –ysðǯÿ³µL?ª¶4HÞàÞø(^œæ:NÈÍí­0à5­!k;”üŠJúØðÚ­keepassx-2.0.3/tests/data/FileKeyXml.key000066400000000000000000000002731276304217300201440ustar00rootroot00000000000000 1.00 nhNal+U9p6h1rWAAJ5YrNkMazMTZkIWLi3WC4JQv5jk= keepassx-2.0.3/tests/data/FileKeyXmlBrokenBase64.kdbx000066400000000000000000000030561276304217300224140ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ òj§ñ ûmƒ}«Ìä5Ã28 ñIžÜd?½n¹S &`â&±{lÇÀXNùªÄ"6cµ gß5‰]DÞÁñå@p—Ó.my­•9ôòŒ”g mz t"*ðã‘©(Wÿ]aLcC>³•#ßîS g3PÀ2 ó¹v³ ƪjØLè2c ÌÖ… "K)ƒÂíUÓü©ø4  ’ZÜÞ#ö)_±Lã¡?õÚº-ñÞµhÝ’Á\MúÄ„ ‡ozï­Xt Ç0ßà¶ÿìÑÛW¯g-Át*˜dk Ñj9æ'5Ò?M/Xí¼ ¹¬²‘‚ê›°|Å·†¢;µŸŒÿF>LU»CÄê5‘Ë5é6µê%Í–J³ãúmLx³uôc©‹Ã‚û4á°·µÏ†ùoùâZѲb Ç¡˜jÀ]­Êí“(+›Ì †æŸ y¹O½@É.ìÛÒHú„£bæ—®ØY'U¤€*R”€}™þx®•ÕÄ Åc"Å$ï–7áwÌ0hë~ãÈò"ãÓŽ…1TÚðx%V€ãBËSÓ¾$ÅÐkï}mZð*{¬´Á¿©ñ!u•õFë¤ö™ ]{ï 3W˜ßÄì„ãÐrk_þ¸ŠD‹FfÄÔìÞLÛ>¤¾¤XY¾£¹k#É//ÿ%ÌCüfÃ;g–¤±´L•Ñw²âB¬FX¹þ”«ÁMqìñ?Ï4Ífå¬dD~¨ €T,]•Mw+dšúÚÍÑʤ…°®4°Zq ˆ RôÇedø¼ý¦5пŽ¬¯‚½)Wo*ï•¥«îžB¹¥†ëfD·kô§:Wž‘Ü~{­@s^Þs2Dt–Zs2›="­Ùr Îö™XË‘oýç¨ç­·å­Ó°øI÷R]D—çîÔ.Fñýû«>k{2Ûß¹¸Y¥˜@ž÷Oo•®U&¹ÅèsˆC ¼nv¯l½q¶áÖJìg]"ÕiÎI®„ëàÖ:ãª†Ž¦7* sÊ žùUÎö¤±Š%l8.fJˆ¨okJ½ÌØ­,•m?^A|à½Y3?h€J[YëPlÁ9‚cØÖ²<ªÇ·(ZÒB"±ÎîtȦâ5€{ š¶¶ –ä~Òƒ|ô§…«ªJUtŸª7¶6KHv*1ù#¥à›¯"pLû˜)ô+mš=]½×ÍÊÃ;˪"K&™òiöéÅtØ%‘Ý’o÷ÍÁé_½95g™#jÛ»!å[7„+0´l*Üè µÆA¦Èh^€mÇŠv×?šû±Ùóܱ+¯ÐOIsQ€…Jÿƒ`ûËÍ›ïs|”§­Ð”Öٌ̋…åôíºæ¨nƒc&OßH–ýxrKhÙmÒBùéc(ÐK-í[À:妡aiê=V™Å}¸ÚY¶n NRÿ‰¨÷ÝÞû²lYÞx Ä©å14À"õgöÕQ¤™äü½—I“( ÁÁºô)ùæ'–L\þ¶‰(›¥šKf¢pýf¨Ü#Ž ¨¹zNoÍ _å@d­¸¸†F/í»ˆç…D±VQ$¶už "Äcˆžjf†Ù/«¨>ŽÂ‚+Èx^MÈõ›Mÿjî@ÜN0¾weí¥†ÌÎ×c鯫n“â/o&¯—ÛÕæTnÄ[±KfÁBšâ*)ðB Bº·»>° +šÒlnúùõŠMy £è ÙrêÛE x%¦›œøž|îœÚIM·t‰ ×<%™Æ5Ez ´ÊÀßE#û—šÈ>Ôã Xü)?É õô: ‚búTøÛO‹òþ@>¼Ò•Âg´>’á¿“»ÿ|qz«8^ÂëP‰ Ql#b×àtXW`¼¹þëðîhÇ&keepassx-2.0.3/tests/data/FileKeyXmlBrokenBase64.key000066400000000000000000000002211276304217300222430ustar00rootroot00000000000000 1.00 yy keepassx-2.0.3/tests/data/Format200.kdbx000066400000000000000000000043761276304217300177550ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ «!¡ *|{—6Lx\úd¬­*rþ©Ë+gMIã S‚‡Aç5µÙ³[ÜÖõÔB\’2zb-f³mÛSñLÚpD+VZ¿¼>–K•Ó7­™ ŒW«ò<æn`³l¥ëT±BnFpïÝ(búz™bí WÖ2oU >¢B¶6:™ÿë MØU÷|'˜÷‘^  g^)òÏž_,¼5Bé§1'ARLÿÎNºîÒïHôÿî·;ù)±ð¶£yU4ÆRƒ í71à±D‡äÆÛ)-ÜÕ±çy1ô|›°åOÕ¾p:)†Îþ>ûj²’èbÀ,Sð¨]òEía›ú¨ŸšXÉHÕuŸ­ŠÔ«UêÖÉ…”½ìh0¢¨Ó½Z/‡üªáÙp>ò9ˆñN½ã+FÔ¯ñ”«ù¤ÂÙÄÞÊpÎ@mxž›v‰WîO¹ócµé\ñ ½al=»°©-p«•ÈE{¥e?˜f4gdÞ>< õ=«êœdd÷¬ÎW^jX´5Xâ¸ÅÒ’jŽk`ƒðl54ñeð÷ð¡~è̼/Ãáº7¨ÙÇп§h¦#¦Æ† Y—éA[¡uû@Sže(?þð´–áR2Fµ¬ $08BábéøHwã̺ÿ®•7ùÐ…ÔwF°¦,üþZˆeïõ`@ʈ'<5QYÃCo‘~øÔô%ë |bH`Üú;«¬à'Ý8!þD‹D ð|Æt™3æ¬èãDºx9i²íüÑÂT;Yº4€aÍSÈü{/ؘΦcô·¿åK3‰û4…1 ø5Pþj¨úò‚…f®F ”Å=pǹ:)i>Lû¡B˜½[ß˹øv“J‹ÓÍVã—ĺϻ» ý¦öˆ^í|ž¿šMÒ o¬Ð1·Q”ÅmŽkDqö•\RKïpƽR-øøÌwäêHòPpµŸ^ÖM™±4Ý‘á»3âkC0ðøÂ ]Hâ^^k³kH{klr›%å°Š–¥zy_O.ž{Cá;ÄàS@WÍ¡ÀŠƒá¨x´É'"Ë@H¬Ö#Wuê÷8@´NŒ©#¢Þsï’—]Ò°”ú&ŒÆÁ,_“•YL2åŠM*t=nß%Ú9óõ ØÝtÛ;ÒƒÀ­<Ý‘ K¦Úà Íć¿êvm,I²3ÿVûŒ¼…²áå&ÿHŽü×Q’²¼¤dQ šä_RU徯˜ª_ôÁÇ6‚¿r£@À ]YO¶¸×=¸â…‘žºõ·é!®ø05eA%Þ’+þ2Ž«~Â¥¬¸¿èãp¯ùWƒ:ÆPyI²R¡Z…¶¡nmwNzßúpáFå.ì`wÙÚ —¾÷ VÀ€G^?ĀкùÂÓVÌ5‹+ìaŠ6 “7ÍkJÅ“²¢:ù´_”’Dÿ“mVõ<¹f{kQ\ ½Wjʇ…¼0½Éfn! c>½øþÂW„)ÒÌ [ÎÍ€!½™i—"­!š4Ê,ØÎHöatËYøÔ¬˜U!~”éì ¥Ý´ %Iíœç\;qÙ48ò²ÍÏé•ÅÅæ¶ CûlÑÃí!þ·ˆíÀøü«í‡š–‡¦çG¡îd‰Žú÷ÝlÒ ¸çh+<)Öƒ'%Cë<ªUGuG¯òžˆŠ›,ßê"ØU&'; |/ñ\ŒƒLÒ~‰9ÐIˆïq2Ü`þž”ºÆüNËL™4 C'Ÿ€¤ï=DzFÉ3Ã\Þìñç“ᙣelúe‰ln}æðÿÛ/«¿¦Xht·áVãßÈvg eXGØt¦ŸÓ°}˜o23¬þ²¨eŽHÓ¹_¶\{né"–îYšk­Ë  äç'£Kp)AO Ü‹P Qq0¤áÍ4‚ñŸøvŸ ¥n.ÄÝ 9\»7l;zÿiq´÷¬ô"N‡îoŽ¯ÃŸ¯îc£ñs#ªön•ÏW”­¯{0P@ä[Ú:3SGž€yîï8ûUYRVvÕ+Õ PA‘0´w‡T¥¨Å. ŽÛÞLãÏÖ´¤ßós!ÇœÌ"WÍk/`£žg¯ƒ™åU¼P¹ºÞ#ñƒïsÁ³ÒÜ"I %·Ùð|Êl»´¨ µr þ% –xIUÈ“˜vwEÞƒZd¨´õǧ׿æ; Té†õ¼Zq L}Ah©¿¶‡·„íþyTû®¥§dø\D§È:…ÛBçŠse“YŽ8Qš‘?×"ÌîÁÛþõ÷+cÖhžÃï ©“ÜÅ¡Þ`k†kÛXÒ3iúDùÂIX3*B¿£¦šœz­×G»t¿$ºE÷Ø÷"Àçs°efÇÙé=ä“âa÷ä¡-Fr<¤›-·ÑíГG¢KÐefÐÙî–ÆøZvs}<õóGyóÔí(àµÈ·„öäçäP€ª5€r}gÊÚ›ü¸€. õ=¯ƒÖöØNLüÆc¹Öe˜”Ñüßßù&Æ”å†[zg NûA= ÓŸµ-º*Ä™ Gß HÛd^Å0±]Z§«^»wµ“ÆñÀZ?ƒ–ëtP»¶0A4WÚ0þx–TÈêbuUÞh‡¯CÒ çNçÇGŽ€×ûÍÄ"ˆk¥ü«Ê#mÀÏLnwÊ‚ÅBˆž<‘-ü¡/eõu­^¯E*\5 ÞÜý"áÿRØ_âÇ 3÷ç¼ÍLAŠßX;XÙ…Õj\x­°è»ã¼ãJéáªöaÆʼX$±qÜH²¡X­s"ÅÚíå'!)Àv Îa?”é¥Å P·lœ Ž^—Ø@g— vZå;Âì(çÝU,RŒšm²u¶Tü¹'Ö PN‹½4ÍÌ]j÷ê$Ðú7¦G_Ö>äàì«Ë“ìúö“ü:¶—¯-°Ûcy7¸‚Á³X „bÃ{é€ýA꩘dhkeepassx-2.0.3/tests/data/Format300.kdbx000066400000000000000000000037361276304217300177550ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ Z˜íë˜3ñŸ-pånMÒ¬M…ØÁf[!—Ë þSã™'¼Ñçê[/³@KA|¢Y¹V ¡‹Jâ‡øwÅ|> is˜Q¡dëÉhcâA<Öfá ªãÇ4ò¾†Òd“x;aóVoš>ýöP.“!;,mãgOxÒ…+âU!ªRTëŸ+º –,k¿6§iL¨Æ=Šøn’}×Hèá¿B&;µÐ…¢¢¬q—݉N¸-&1÷Íá“0(EÞu[„ñ—n»‘mÏ¡jî‘1ÛtI+ªS™žsÄšÇÁ¶RîªËå¿‹I€H*Æ1B´éõS¯ )õ!ëÍð/’С—ðºú]PÉ:« àÖº( Ø^'Y:N|SOb=rð—0 \9iÔ›eNgÅmyŦ¡ôاàKA¯ù ŸJÏáLŽÅ„œ˜¥‡–å«jVàÉÊøê"П34ZÆŒp¿ß‚Ì=miyÕÎä¦u~«k<£°K0Ž­|°Ø’©w¾1“˜‰ƒ5`yVÌÓFhk›×܈¤Q7–Ð`‚•U'ç£Rl!­ü2B¿U|V½Ø¢‡:%Ñ3®’KUðC ÞÉÖ1+ÛGV“IÀEítf<¬RÑ3:¢J”@‡ô>e:»†q~«­:Óȇ'„+µÂOx'Èa2Uá¾1QìnJ:4ÂiB0ÙØBψ“ŠõRžuÃÙf½ÐàmøYƆ±qS ùÞ÷¢˜Ö‚Ò;õœãß5<Édpœ`JØÄðÆxgMáî¬"©ÄL3\d[^'©²³×ˆL¯,Îí£-f]”ØÂ7ƒ×â€.nÇò'”¢PF*¯lå-ÌHy£œNŽU’Ät{³kË\º šÕÏ·L{KŸ}6©Í¥™^$Ë‘j¤û«˜ößêz~ÖšDø ,(5pä{²}«N[ ;ÒÝ";»yñïTCKö–Œfýs›•u¾;šÀÒ¼Œ¦¸˜UrüÏ|×ÙcßÍÿ·§A_è$’$ÃNöὉÄZ`ŽNœ–1Ã4q¹´~,¹ÝÖU &rePY LÐÔ-“a˃&;ÔfÚvP·ém#(ô„ Ö©4 ¦å³aÐYC ÝLH†¼™œ;óvzG¸kçk‹¹êÕË»n¼¸ã”Ø_cÂ…LÆlpËéÛë(›û­§""ê-¹õ\¢=BuÉaCÉœ§™"KHŒ]e¤qX ªâ$†‹2šlw61Ê™àt¢Â&Ôñ0˜ L¥"m©›‚éÁT{¿óÖÐS]PµïóË--‰Ú,ó¡ üi `õÞöÙ…À€™L=ýxÍYÞ.^÷”Nu˽f‡@ŸA¹/Ô,“à3HŒN7î¥3_°%Њv?çS!çÕµg!r¤þ—üžJ"øÄ[ò|"ÅrVa9ì6;¤éGè«¿Ö 4 ×…FÎðWMš¹'u“õ²ó°Ïwµ'žW½£#„ßI6.·ÁÑ¥Cþ7›1u´zq/Y% ‚6ñê”>™Â¹¨Á‚ÝÄJ%»Ñß@L›`ÆV+º,™–Â#“Ë’±Șç 9’å¡ÕY-ÂÏdô¾™ A»Ÿ²ûæš0LL­P”¢scÝ!wEB=B³Óóò;[3M¯Õ§ÑcˆžÎø³~‘üè}Ž’°²‹ÓÿtÀ*Ó‚•¯À #¥‚­ñÃìfùCvföKLÏ,tM¯<' É*¯ISRÿE"P[]ˆ‰»r<Þf •̵ í½"¿ˆ+Þ3ýæ#Kƒ s›cJV4| åT¶ø Ö~"ŽŒ†ås:Ô6´«‘+:˜d9N—ºòð˜0?Äkí!!©T·¨ÚÉ~ÿft3;íÆÖò9¤aƒŠ\zó.œw  ¿™vèï_ót'+8œ ½#K†/uÑ‹É]ºÇüß•UC0}T¥ë€þ,¬F&KD”»ÔCT•2E©”EÞ—¹v„hòëT¡ªõ¼ I :‰†ÑjU5{‰st²ô0kò,ùˆ²»é…ÿ9`Ï'²ö˜äD¬2ÌÅ\×´!ßáÿ0§OͬÃë]o¾Ò@ÞçCîùw›Ë]âD†J·†áY¶XAõm0 Úèû¢ÏŒªlný^Œ!aï½w¢%ÌË›[Ñ nÆ„'Ф*þúho³UÝÙX €L´p,tû3w•Éù½:ñr;E¹vxÉ‘Ýüï9q]ŠÇe8ߺr{̕͹ù{CÃ¥ Ž@¼³ð=¶ ©{ç­E‘«ßæýÎ2òŸ Á¦B¶OÅ®7ÑšLÑi½FÐe‘ðõؼ²Ž=Tàyþúãì3üÒú/•keepassx-2.0.3/tests/data/NewDatabase.kdbx000066400000000000000000000202361276304217300204520ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ pJÿÇŸ ‰“‡*®WßVŒ¢EÛµç_ ¥À!£ÏŤ¯ãŠ1qaNÙKÓ;ápMÉT°ë²pF>Y¡0¦=Îb(€ÀâÑ ‡•e®±ŽÚ 4üÍÆ%úY®à©¸ib&Ù±2!ÙÏ?l ï+zz ¼˜ÜÓFÄ¢±\#0PZܨ®ÿà ôü‰:  U…d uîÍÛ. ¡ì|Õd³G}ŠDO o^•¸²,¬³|²¿À £8Z 1)H~õµµïÌ×{Áo …O··<¡íaD5°©}J1`sëGM¨ŽÀ€f4^JAOÛqMr¢´J®pà(¸=ˆ¥›bÎÄÞ5—¦[l"o &aYªv\5V¥ß4xìýóEÝÀÆÃ”PÌ~|¨]Üþ£ç€¾@ù„Áœ1xlZ*>ò¨Üæ²o?ƒž·…ƒ/v^fy Ñyl2Œ”"ƒŽöøŽ©ˆ|f¤D~¤ß1nRa¯C *]-iʘ>*µïÂ8ÐÖ'ÂH}ž€_ätàåo¥w»å¸k;=C°4™ñ/õ °“-¡'pŇ²mû8<à 9«tZ¹½éB‚±UëG¼»¯ yL§°ÞÀ‡yyÍ’Ì•’ÀÕÄà‘0Ü,4äéT§Iš‹3œ{o™*@\-*¯J…Ƕø½ñWqÿ%&ÌñÔ¤7áÙÓÚÈ¿ <äñƒ³=6ý¸%è}*s¢©)ÙD¾v§}?ÖêjB±§içy®QB¬߃(—F¡-NM{´ Æ­óŒ™Âµvá]üPÅ‘NN1&µP•]í唟iÐA3MD~M[z ‰y.m-s‰«k¡sˆv«™(4<2Å ‹z7Ëaæå2·uÒÎZöi~š®åµb‡ìž^ÑÌ}ža‰d¼Ì9Ç´£èò0£odütG¿03Í”¦³¬ç«ÓZ½óû´©&ß½urJâþ?hØ$ñO—d4‹¾±1AQÚð´š8]v6û§ÉƒÍl¯ÝÕæŒÐdy÷÷‘ƒÔ Ÿ"x¬ôò‡B¾B¦EŸ³Î9x%|tÖ QLûü*~æ¡YjäÊÈ ÅÖ˜~ ÷q^· f‡\R€Ù¦œñE30³©Š&?Nz¢mx"ÉÛAC‹ђçO'5Îd½Hª¬ž_–5æ'ŠCž¾ø¯™€KG^«¦ÿË(•ŽWÅTI°ñ~“‰`:üÙñ‘“¾ñÉô¿éV‹›RS¯›†éä‚ʸœ²A) 5P ;áÿªó¥t?<¢Ycj¼Ú[%6‡Á­!¸’Åä¾ZTTÒà½cÛyÁýr zE<èâq¢ñ[ˆºIýÛd,F]C³+Jôã4«×Œ+Ëu#¿©s\H¶Ñ³D „æDU7/þK6y,\ÅõÕ1JPë&~Ž-ÒJÏ%Ñ-G»®qÛ0k¦<†PbTüîc§ðB(”Ÿk *îÊÝN² ψ_N§a¦"=ÁšfÅaË/˜mánŠ¡ãö ¹aÑ@™¦7¬øà¨Àö…*Ì} 3Öë ðQMÀUt~C=XxÕC.¼qÍ{¯0på"÷Ü DWÈŒ Ï0‰:+D=ydÔ1‰WýÏ÷HÖa7™ŠZ¤^;ûÂ9À*©;i^@Y&ýñŠ Ï½€#óK1o¶ˆ!>ðmiS…ÃG 1žýµ©™ÕdÎ\q*=š÷"÷‚YxwJíl9E‘È.Õ–](²ÂU=Hf‡ÎNà!p?Ù¸ŽiÔK…ÖiPC* Í¢-Ÿ8©Õ=±ý¹Å£Kk ;ŸI[¤³Ÿ„abÊè\ݺ&“PK/¨ý>ê×Ú(³¬ƒ/R…=Ü&C¹Y—W÷3çi汆S¥¬.6Xö¯{ÚÛƒ²#­3‡ã× pÉ’ñ«ºX`½‰4œ¾Q5 iѨ¸r娓‡hÜ 9™JO<¡;÷õ Û @V·Ê s@p¯]LÕìýT h¯ÈçÞêaçV±éù†ÊKG²[=¦É[%ÓÅ™oö†Çï‘2 ͈ñ\\ðÙ‰-Ç~4~e~þ2ªÇkäH¸ÚÃ%dŒz‰‡BöíA³HjˆvÎÐS·o_I[´×kM¨œ]MÏ *4Do^׿Ió½3(ïŽÞ$ÕÿÔ=EÓ‚”KЮˆvh&=æû¹„ ü±Iþ4éì#T%z×E ½|œHžBX50­Ú>âw³8P¾j™ Ý5ŒçLò» W¨ñÊ.ðìÊG³³â ´åów>ˆ«M›?"£ì’Hg-¶ÙŠG7Êͼ[þ†ºŸô]ÝÑs¡£ÿTçÍš³óùO=@&ÀR¥)B&bvgýÉpš`ïÎ$=.‡9¿Vç¢NF®Üï{†x&mëcJ“º tDñl7@<žmx0ѻ˪í¸¶+ÿw÷Ý„¨[إࠊ§$feyÁïõ8.KãÄ¡ún’aþ{¸ËÓÿàm4æê@ð® «“ÏÞjå8•ƒœ(™`bÎnbÙ7œM< 5àç=’ìçý<Ï–»+EL]«`M£@±Ð˜>3Ü{j|ý.nÐw—©>³e´¶Ø¶`‰–n€â¢Ø¤¼«Ì H@$hãþ gÄÈÌÇçûZ#Æ Ñ ÄÖ’ðª:«Õ!Ã`›ïŽ«ÇéM¿9ª&ó)ÿ ò Qxš¶ƒ‘ÚW\“^c£å×à(zÄõ3óvùø®oVçþG¨a×br“Ð,©]Yk³„¨hýÀ{Ï5’Ùô{à-*)!0'Uy²ÓP±’‚ÑÀà\2@ÌEÀÉEjØg7ˆh¡xŒ£”-6µ.°¦‘ó*Ÿ(ÐÍׂ6y(ž“Pñ·íã .̃Ž=øï¿OXŸúlN*Ce2¼×Ǥ{Òž—ƒG¿:›‹%.nåÖþ³!©;`íáû–4åã(u!#«Uû¿¸µ—ç3ýÞÉöe°ˆ ùê(u”Ä[u6àÙŒµqˆÈ(ù~KxÅÁ~íË(ù°=š*ýÆa× '"ß3؆=÷Þ”]Íìâ•ˤÙÔ›™Ž—=Ùͺ@ ˜JíåÝ–%¨·å>âvÜŸ©ü¿Wy»@ ˜•'91;ù^:O°\‡¤JA?L–~-B—‚Õ‘k†Aƒ¿]xã5Û4FÇ“ÉÁŸt˜le˜,%×»µØÁY`ánâBw˘ ;ÕTŸWñL¼TLÍ£†¯=é+ÛØ#øm:‚ Éì¶W7KÔ„ja/eS ^Ym_â³#×BœjéœÝ—J ðuQÂSTe¹“5«xXþ »;mÂDBXïº4ÿ?;~(BC2’®Ò‰-Zg·J(†D}¦¡¢––ÀPžþ“:{ ¶šAZº¬±WðäT~^ÙF™)t"&ì³­ð(‚׺Pª©©ÖÈˬ õؼâ$v,=SöKë gH!VŒaóNÜt¾I\Ò%ÀI¿Ë’]‚³#Ùšr¬3ž:‹õNV¦ö¬úáÐyŸ²9L‘7qPíŸÃ¡+[Î8Ho~œÆè gè ÁêS»²ÜGÛïU) ÌVéE¬ÿ`h· ï†Ú)µ²'¥¯2}­â+I« ˆq@ƒ7*YÖù\‚› •TÔþ/ H{`-©=Þ¶;C¹“…F³ z††ò¿2Ú,ð …òPj#SŸa¼m|Ï#·Ý”Á•ºÎÀb¡AL(ôg±';@ѹYW£;ù"¶Æ÷0Š 4)OAcq4}œó+,tħjîg.ß’'Á¹Ps …ª3KŸùwC#™ð®0–°Åàÿ“gÔr˜qïp{,žƒZ~È2€\öåqLÑ¡ü)–¶U§ö¨Ac'‹âNÎ&¶­ÖQu½nLz2ÌÖâ(Û]þÁ÷âcªJ5úlfXŠß_ÄZùnÕuHôz Ô_\§Ñæ÷;~.¹žïÈXVh_L†U¶#lt§]•sŽæÒÔ‰o(Ø(mMåB:ŠÖßJe=Ÿ$V Pߟ_iM—Ô˜fo£Pº>Üò¿ H[Ûtþ*Î/(«WÔÖ4†4#ׄµ– ™r:1!1ï9s.‚‡›eÈN}$¾ß“›Nîè="ÜÌ'Ïí¸‚àí%ïö™ü ý‚¾jÔ;÷hÝ›êc"ƒBÉøúà^\È®F€¨Íˆ)tîj•ä­ø”ˆ'ü‚²æÛÿ‡>Ö"†”N¾éè’´x/goÀ§Ý_Vã“À Ú=k¸ønu=䥫aÓøÄZ²Wò3Å÷ A[Ç`ÖŒ€, "=ŠuZÔ^·€F4’„þ˜Æ¬Ü‹ùöôHtjšïw„s¤þ²yäLhm ܳ%í,^ õˆ(E”—w¨°Kh Ý÷¬NékNÞl¦:ü¸ø…–<ñZN’~æÒúF â°@w‰¡Ï ´Ò1›ýä7ˆñAHŽá”:¸m A¯QhÂ+Ê.{{DÝ\èH„oÇ»²Ñ¸€%iFû<ŠJWJͬŽì¥ž²‰àëýfèâé-±Ló-ѱ$Èô9É<ö‹‰b/ñÅ ³À×Þá@É‚‰%tþ}OX³²m}6†tŽìüù<ÒoE0ëÓ 8,êÛ¿f5v56MŸ÷ý\Ya à'¿AôY/¤©¥ ±i!)Ä…<‘éw«#£RhfËdÞÜŽú»Œ6† m„PU!73ið–'Ý0úÑF8Jà±M†[dNô²‘V+¤Úe Ú¸Ã_5u¾þ"0Ð0Ôì} y7ª¢j“,{½q°Xµáb 3pëñ}}s}’L¹ñ`=õ„;5¼ÀÒòµTÀüPÜ,òÛüé»XÜ %+C0Àzh?÷p’¦z5®¸šå¼ •>'Ž»ëJ>Âôp@‘®ç W®æ˜³*Ë’>‘Ò˜s'‡Wúæ eÍ÷»È.Á Ƥ’>JNº¦'}TÄ®QÏ{*öJ¿þŒ–©ÛiËeZÍy[m(GÒš×­,=°6ÇÆþ‚»É©ïàdÙ°ªMd<Ý ŠlÙ[Ÿ,ÀÆ·]{f§Á$äÝÁ@ Tè„U3àqE´WUS²›œB@íÚ¬œ»X¨Uâ@A©U3VYwåäÅM8ÚšonEõ”v ÄüñKÀªÑªÄú5Ó^%ê$‘6‰/Á~¨çº*À3ÔjCóîÉ@Zÿõ¾ÏÀõËêG—P€²/¹}yÇÉA>5ÚqE/j½Á €›Ià[)Ì=‡<Š:ñ˜8;íd‚ô¯7NßeU¢)H˜2#«Ò‡!Žah?\ˆ€„  h—ý¦=!-_ñË¶Ž­au§$çðÙpßÝcÉyÆ2ŒúÉ%Œæ(x~Ù<µ¼1iÔŽ…6BÕ¢ÈÏ™—ƒŠñ-$Y«þá=*]¾öèÒ ž¡¿Ê¯¦k J}‰–n½[âõã´ìÌ#¸Æuo†û~ wòmÔÒ¶Tü³±. e^.Ãkð3LãÇöõª 5¹âj©^9oÇõ»p7*+ÂÕ™5f¨‹$´w éŸj…²ê§[Ü›ÐÒÐÏñ¼R‡ik-Â/—‡ü q«ß³Õn¼oR“Gjg«#-uKÝZ{ç.ðª=I«YädÍÊ£ ›ÎͼëcŠ˜Ÿdä×à™Òÿuƪ˜µÃÛ†´èX°È) >Œq+¯in›m¬‘9é`Ê™¤‘¯JP²—Z¡¤Æôî|À0 Hé cøªiö™å©Ça”¤ ÀÞŸ)|%Ó Av™N¹®`“ãÓz±s#ðá€,iz ù”Vc„ë€F0”ÑÞTþ󙺅€¬ºGïgiPé?V§i1:¼vТŽI=šA”aäB´ée¿S?é;qÌ-'4Ï¡á=G HŽí2'ÆÊí“Á—P:7]6Í8FÏ*`®Èt'A?[žpùB‰rZ»  À«·’>©Ãý64¾¿æîù—oT‹„ûiš¨ö  Râ-8­^ðyTœ »€¹-W)ξ+´W¶¡zXÄMNjùÛüy W¬F^ž2 ÊÏæã~VÂ+ÀåvýâôŒR“8Åö÷XA€oñêïB¼{_/÷ÍhV‹æA¯§j  ؤ¶ ªØ@àÇ®  %+ç“=RÂ0GÉ-‹PðthÔ?„b$ RÔB@˜B—sþ¯ê¦z°ë±H9^•‰!‡B »i‰üÐaíÕ)ëgµ(fA3:ÈÊO¥CñÊ&oUjâkçz9onÃi4£Ö›ª¯Gu˜øÖ(Ý*5bÊ…ýMâ¬tk{«î<'¯ü„üî´þÈ¡¦üf‚Ì‹4vü‡ˆ-F+›eE¢@Íì(Ñï÷®¼Gç–ð‡l3÷{D.„äÕ'5µŠ­6}9X7^J<Ã2×,-2¯ ÈÍ¿B€]‡ ’¨ úM¢Òß×TUìЄ_'(Ç'5\&Å…þ^/å~&áçè-Š„ú†{v\ì4E=_®²d k§tåN¶W/,Ÿ(ø Ñ5‹¶Ø4ÊúT«® ´A¢Å¨ß_ÞÓ¯>ò`§ïS­@…„Õ+>¸èåÐN ¤•i¤Òq…Ž)à]¿ý©6AUË’á5Ès§ðò㸸ÜÒN)€ÊløN382~÷Zù°†Ü¦%àŸTaûq[“…‚”Éÿ°ÿâÃÁF'ž$9èj²Ä¬}]©AˆLüFå¸X n ï5Ê¿fg{2d®m”¼gŸ •ôuï×y`RŸÁ1ñ>A~pÞÚ«$s—‡Dº[Êû(”ñ¨M]>B¼úVjUG$dA×–£CÉÁáÍBDg)sË¡˜TìÿÅ<.œ»oŸ„‹Ï¡|p<åvŽB×RZ`H—ýç"äþ­„¸õ~`îíÜæDT×¹åäãs¦ª|1«ysFØýDó¯øp³bj‚{’c>'¡?;³g#W¶øañK † öÀ(!?îÒå±jtJÊÙ;¥•œ¶î egþ8šDJ¢v1<öqZ¢¿-Þ}Y9J¡|aµòçeÞ$'¡qj*„?»!+õêFS[ÇÒÜZ:®‹65#uI†|„ƒiS°µ²¤At–!wûöü Û[êø¬ýŒ ÆÕˆ_Î÷ Žéð¼a+(µ)‚„¹çû ý|ïЊndƒþÑ á~ÿ¹Z&Ȳïw–oñèï í¹hf¨a©ÄªtZ…ok‘Šƒª Å\™È/D´ç]8EL0qÀŽåÇG…Þ]*’š^ÕRÈ8Æ4ë_!ñÑÅí¡BÐ1¤†’ƒ§ú{iÕ£ê-2”‘såD7Aà´áXÅ]œI:ó~›°X'8g¾T](ñÖ'xƒAèÏvÁº+ô½ª6ÓÖ=;»é¿?Ñ7÷’ЍPp¡ x©žù©L.Ù#ß(V6×Oò^ÕÆ S#Ÿõ¬ÎTŽ¥¾#×§-l¯Ä-:hŠÀŠv[‡ @€fáøÔyêÓ“[ñ7øsƒZŒ®Ú©I¡a¥aî©Â ÁºrŠJâ d‡£p Ÿi]µ’¡B%R¯‘WâYŠh¦.ç¢Aï·xå3ÿ&ö$»1Ût¯v.à&ÄÛdqD—óBBbÆ|p’ŒI²¦6ÒƒHCÈÐÿ\-«”#“c n#Â4²–$åc‡û²„‡ÔçÎa¡pCß®hk­çö¯\èXxŸvV…²§ÂBg)0=©;hïwŸZµ¸yc7é¶êßÇ*úí/bbÇ}¡œ lK%xßÕ³‚½£…à½Ù0JÇÆm $ ø‹œ¦;%ŽÞ!`éòÌYF²H›s(­‡|g¬ÝMCfÃé÷µû¥$Å¿ŒÒüg¯Ê“Ú èÿ‘Ť-L'èãwYÌ28O@¼Öc ´öVš†Å›~I>l¹r®ØICŸý”Ë2Nk®ÊR䮡µBøýŒ7Ù]ø?Èü"¢L†›xèB—1ŽþhÇð8÷Yœô/ [mI¸ˆd?ÂêÇ%¡¢=r•r7/ni»štËo(ô3þ ²¹w÷}¥¿½ù8všŽÓ³Òó¼\¬âç®#ñ¡I)!|ÆÒh,B<%M»8ç®mr£öûÍùè<‚‘/ =KÜÏbK–{½ùF¾Ýbña˜HÄÏ@š‹ö}BÇà"‚ „û'÷ÐÝk}ª¨/>ÐSIfb˜²ì3H¸Òhu%Çû6”±ª ª“«çs_¿ìálg3±gõÜÜ=*¥ñímΧ-a®â¡:¶W' ¹Ÿs@A(€Ÿ¨4p–ÿkaoYžK090½Yÿõ ÝL4ó·EFY‚©ËWد;ø|°¶Î¤×"ë0ɯ÷~Nê÷P|êŸ 9 ²îþ çà¾ö§•@ s–Ä9á>ÊRõŸ©.É Qœ\4P—‚°¡šc ¢äNGÏP¤k ø{HŠ„wOÓÆYù‚ar·¡á†Åž‹KdjÏl>ÃX.®`ná.Fm‡mòÕ²ýWvS£±7ƒh]Šãw7#ü¼J‘[u aé{CA$çE­ý@Óɯ•ÍĤ3ކ ¡ÿ—q¼4왞îÞ\MMIçÆ¿æ —׳S0%aª*—9j^LÑXƨ!±ÓmÜz½_ˆµüÂBy;sYì#BŠQ Ò]#fa×ÿêo$¥€þ£ô4˜âÄîF‘‰ b3ÙTíòÑf,hk> ií1[…¡ÕJ?µÒXÆû˜ˆ n]ìÉ›ƆՅ›SåbB svy¤_Âxeó‹•HX¸(¦´b”pu€Y“8 uCkÀcü d)úÈŒÕ JžcG»?:È6ö¨Ø3¡`&üdh¨Û‡LÚ(7¤¡㯪Æs£Nu2‘FññF(ï­‡+Rñ×ìFÒñF&#¯ÞN=´ê&GD‹yŒŽ/ŽqIBÎJ’,ÁVÒSŸ%#U‡Xá'Kâ·v4‘ÎG[X¾nd}u.z‰oÄJ0rp€|&"®:ŒM›Øˆ++<0è-Ç ÈªÍäÌ)Ûãû*Z¨!Œ+È%éËöÂR ,óÀÙ”weÏ.bl&¡´>¦6rUo½ l_€¦­Á{ÓemvnuvŽ«{æ$1Ûºn'Ï4ÆŽSyrË` Mò½{„ê]Jn†ü 9*³÷îÌY¦N‡ gü‡*´Ufæ7ÑY”J.&™Gökeepassx-2.0.3/tests/data/NewDatabase.xml000066400000000000000000000373301276304217300203250ustar00rootroot00000000000000 KeePass ANAME 2010-08-08T17:24:53Z ADESC 2010-08-08T17:27:12Z DEFUSERNAME 2010-08-08T17:27:45Z 127 #FFEF00 2012-04-05T17:09:34Z 101 -1 False True False True False ++vyI+daLk6omox4a6kQGA== iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAACZJREFUOE9jbGBo+M9ACQAZQAlmoEQz2PWjBoyGwWg6AGdCivMCAKxN4SAQ+6S+AAAAAElFTkSuQmCC True 6w7wZdhAp0qVlXjkemuCYw== 2010-08-25T16:12:57Z AAAAAAAAAAAAAAAAAAAAAA== 2010-08-08T17:24:19Z lmU+9n0aeESKZvcEze+bRg== lmU+9n0aeESKZvcEze+bRg== -1 5242880 H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/InZ29+7t3//0wcHD/wfGx4SmCgAAAA== H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/IrLJdJafX8yLn377/wCfD1fOCwAAAA== A Sample Test Key valu custom key blub lmU+9n0aeESKZvcEze+bRg== NewDatabase 49 2010-08-08T17:24:27Z 2010-08-07T17:24:27Z 2010-08-09T09:09:44Z 2010-08-08T17:24:17Z False 52 2010-08-08T17:24:27Z True null null +wSUOv6qf0OzW8/ZHAs2sA== +wSUOv6qf0OzW8/ZHAs2sA== 0 a b c 2010-08-25T16:19:25Z 2010-08-25T16:13:54Z 2010-08-25T16:19:25Z 2010-08-25T16:12:57Z False 8 2010-08-25T16:13:54Z Notes Notes Password Password Title Sample Entry 1 URL UserName User Name myattach.txt False 0 Target Window +wSUOv6qf0OzW8/ZHAs2sA== 0 2010-08-25T16:13:54Z 2010-08-25T16:13:54Z 2010-08-25T16:15:37Z 2010-08-25T16:12:57Z False 3 2010-08-25T16:13:54Z Notes Notes Password Password Title Sample Entry URL http://www.somesite.com/ UserName User Name myattach.txt True 0 Target Window {USERNAME}{TAB}{PASSWORD}{TAB}{ENTER} +wSUOv6qf0OzW8/ZHAs2sA== 0 2010-08-25T16:15:43Z 2010-08-25T16:13:54Z 2010-08-25T16:18:40Z 2010-08-25T16:12:57Z False 7 2010-08-25T16:13:54Z Notes Notes Password Password Title Sample Entry 1 URL http://www.somesite.com/ UserName User Name myattach.txt True 0 Target Window {USERNAME}{TAB}{PASSWORD}{TAB}{ENTER} 4jbADG37hkiLh2O0qUdaOQ== 0 ++vyI+daLk6omox4a6kQGA== #FF0000 #FFFF00 http://override.net/ 2010-08-25T16:20:24Z 2010-08-25T16:15:45Z 2010-08-25T16:20:24Z 2010-09-01T16:16:20Z True 7 2010-08-25T16:15:45Z CustomString isavalue Notes Password Jer60Hz8o9XHvxBGcRqT Protected String y Title Sample Entry 2 URL http://www.keepassx.org/ UserName notDEFUSERNAME myattach.txt True 1 {USERNAME}{TAB}{PASSWORD}{ENTER} Target Window {Title}{UserName} Target Window 2 {Title}{UserName} test AaUYVdXsI02h4T1RiAlgtg== General Group Notez 48 2010-08-25T16:22:20Z 2010-08-25T16:13:54Z 2010-08-25T16:22:29Z 2010-08-20T16:21:51Z True 12 2010-08-25T16:13:54Z True {Password}{ENTER} true false AAAAAAAAAAAAAAAAAAAAAA== 1h4NtL5DK0yVyvaEnN//4A== Windows 38 2010-08-25T16:13:54Z 2010-08-25T16:13:54Z 2010-08-25T16:22:24Z 2010-08-25T16:12:57Z False 15 2010-08-25T16:13:54Z False null null AAAAAAAAAAAAAAAAAAAAAA== HoYE/BjLfUSW257pCHJ/eA== Subsub 68 2010-08-25T16:21:33Z 2010-08-25T16:14:31Z 2010-08-25T16:21:41Z 2010-08-25T16:21:21Z False 8 2010-08-25T16:14:31Z True null null AAAAAAAAAAAAAAAAAAAAAA== GZpdQvGXOU2kaKRL/IVAGg== 0 2010-08-25T16:21:15Z 2010-08-25T16:20:45Z 2010-08-25T16:21:41Z 2010-08-25T16:12:57Z False 3 2010-08-25T16:20:45Z Notes Password Title Subsub Entry URL UserName True 0 6w7wZdhAp0qVlXjkemuCYw== Recycle Bin 43 2010-08-25T16:13:57Z 2010-08-25T16:13:57Z 2010-08-25T16:20:55Z 2010-08-25T16:12:57Z False 10 2010-08-25T16:13:57Z True false false AAAAAAAAAAAAAAAAAAAAAA== Wh3kfvnEqE2VqK+5KIiPXg== 0 2010-08-25T16:20:32Z 2010-08-25T16:20:27Z 2010-08-25T16:20:37Z 2010-08-25T16:12:57Z False 2 2010-08-25T16:20:37Z Notes Password gJBbkrCsiLBftfocQbNM Title delentry URL UserName DEFUSERNAME True 0 KtRKIna41ky8WkqrAUXPig== Network 3 2010-08-25T16:13:54Z 2010-08-25T16:13:54Z 2010-08-25T16:20:55Z 2010-08-25T16:12:57Z False 3 2010-08-25T16:14:09Z True null null AAAAAAAAAAAAAAAAAAAAAA== 5K/bzWCSmkCv5OZxYl4N/w== 2010-08-25T16:14:12Z 80h8uSNWgkKhKCp1TgXF7g== 2010-08-25T16:14:14Z keepassx-2.0.3/tests/data/NonAscii.kdbx000066400000000000000000000054561276304217300200060ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ èøŒ{6dvW[HºÝÿî½N"A1ô‹–ŸÃM l¬¨­ UËôÞÎ#¬Æ™ %U‡J½¨36¡ÀÚp´®ˆmÉÊs¼U† ^‚Óõ] Z¤]û `ˆ8=> ”éûξ«Ïzî W6Qö, Ph"h›^³mfÛ9²UËžzF 9Óæ=ºÅ}) T  SÅ•xgLp5P¼cƒ£8È)NKùëîWj/Q¹A½Äq’GVVT©ñÍ­C¼¦…kæJu=Á&iývàò¼¢Är Aû›{ÜÍ ¿)0ÆáÄ/0Q-¥^¼·Ëh×å-‡?}§î(‹ŸcãÏRuh—Ì—ùÇVj´Žˆ¸¬§‚µ&XR¿±» !9“tñx_å)ðþ¦àK·Ž\#QB­éÞôáYÚ™Q1h^)ì]°ñ—fãñ͕D Zð2”?6`¤ZÜz>¦²äîÇ7ó°ÔŒæW,†ÁfpÌï(BxÂ)ºúÄ cÿ k¨Av3(üV~ÑÐ$Ðóˆ¡-=êNÑXñ®<7µ¦fô‡)ÄiðrØÎ²õJÛ.§Èœ)nþBª „ÕGždmqGž- 7z?w4y·™'ÅVékÌk^Ò´´¯Cy¥äÈ/—h ´}Áð D¤1KXF žøÝ~xÊ徿ÊÇ.[ “æ¬*úº‰NGðYê{sæÙð†¶a`S°JÉÿ½Èów•¨‚‘c1ÇxjÅG;iÏÍí1ñ$^±°õDÝÑßЂˆÔÿäh¢W…Fl'™‡ßp¸hÉ9¿G­mP€-ä¬MŸ—øèd€Ü=nj·1Õ›Áá¢îzþu î¾Ñüð@.Ma­¡‹ÁÀà†]’9‹=CÏ➟¤IÉ[Z¥ä|/SSþ=Æ”Tn/<9XÂ&]©®¶ Ùcû 5òI,ˆÞËLïœÚdñA%ÛYHtœ!Žà!Ð6\@@…XË‘éC¿rÈE±'*9ecj5ÀÓeL:gIN Æ 4œæpÙTÊŽðøeì²öZ4§HPß@<ˆ(˜å^”¢M.A.§dXôÍÉñ­¡[—ßÌɃÙð?ç%q”´‚¿ÈÜjYº HÅ€‡i]ÚÜ’;߉CË.O™Ê™Y¨x€”§’$ðø*€°>·º7 '®Ç»Ðyû1xKöT³¨·£)NÇÖVu²8ëÇÏ?tÇR»w±` †N·†è¢Ï &i€v‚ “æ“07ùÌ'ä ·»/33×1ܰ$dãÜfk×abø-¼€4zi6.o— ßèzkY©X½^nO:kKvÐç âJ¦ñŠÌò…: TÌÚdRèÛܸ>N‚.Y¿© Äܡ ôKiÅ> ›¢L˜ê1óçòÈ­¨G¡—tË`)ŸØû?µ£øºÚxrØÀ‹À—a[p‹èVð(õ¹1*žÿB&‚Ì oòã~Ù°.Õw ²ív}Ëáâ¼Ì[1‘ªŠè0di†ˆ¾Syu󥽇Ä&Ñ+ÙqËbY‡9KùŠUÄ‹-y¬áð}è-4LiÄÞUŠ}\Ì5‚¼q ó•UßÅx«z}ØÞ_¼‰ˆ•'îÀaWNc¦û×;k"?{† aP/\,bÍæ×©Õ›†E§i̺òút[©èÓºjy縌[®‘eØ™s,Ÿ7(v°‹ I\ðOXõÄ;G(6ÇS:\v –ü‡ÃþJ䡃‡ÿ5{Ý,*© ñ±†*?º´uAp~ÔBü;º ú°T4ó‡ 'Ó»¾¼¤D”üòÓèîThƒ™¤š×h«ÅgÔò’r6ÙeÙÃh>=CÕè$û¿EÄ d( Äb­M|¼ }WÞ† _3ŠýF”¿ÁÅk¾ ‹×Þ÷…ì³ú3¸¨¾ñ É==fÇKä­»Fo³Ï¢)¶¼ Iç¿/¸ô-‰›lD4‚*Ò±ÔyÈÅó¶vö0ñ>R!ÄDÉLиWúÕ‚x}>Šlo¢ L¹Z­¾]„"$f/BjP¢½:J*taCÈXGÍJö&‡r65vÇüÝ›‹Œ$1;O¼'Y!&bš®ÃpÍ$þ;k˜Ì+V"V£oâüÆk3ÃÛ8ƒ9ýÙà‹bn]Onû•ï¼]Ȧß5"™–b¼·ÒC`ù5)]EúÈ‘ÍfW#ŽUç Ó·Ì\’4û€©I?= 'ÜÈ.¹påK–㉘Œé §:ÈNÌØ:!¦ÄëÒ©& å‹+w²ù`o™g0ý€7¹7؉K DC§ç*à¼ÏWÂ…œ!lFmËà@YUÖÍù±KLäUÐþtDßÊMÛ<ïð› š4e{‡#¹»ø\Ï÷Žd"½Iw¶Öô“Þ-ØÊÙR†×3dǸå<#$púdÎX}³ÇÃD¸P#ññ|OŒ"³d&îFÜïe ûã”Þjðø°ÜÒU‡W·`£˜PRÔ“d©<㜠Ú(beÃQù  Šø°èûù4\iœß?‰ƒ’ê ‡4wþéýaýa„…½YÇ ”iÀb Íé¥gÉ-SmW{0 ñÚ ŠGgÁÊe‹¤qÁ;4YËæ?òÜAëño¹ç-ULÝ^¹É²IÇ}>nvná_lŒ…l¸Ì|ׄ üv¤)“rQ>‹C4šnµ>—7åδ#p\²µM“™ù-E“ DPëž Ã&åÂq%•#”"†fÙÜà²(Ýp´è…hs]YxØlFýT䋨,#Îì’uèUƒ¹zµøOUDDبÍNº9ÍQK6t ¸x¶W¥WÑq\]²xW\¥xn( •8ý)ñ‹^ë{ðhqå,QƒG”ã©"w’´Éƈç~B¨7‚3o §Á“ …²j¡Ó…MÁ£YPý©[bS>lè¶Ô^&AEá½ëýq\TÐ1˜MÏë!0M*¼IØZÙ·dÐXXhSUCð~äªÕrŇSPÖbâzvÚRYà>ð ’jšÛù6Ÿ‘ª&ûd3]—ì„,a•š·e_è,HV?-¬…ëî‚<,ÌãЊž¸‘½ïÒzÙÊ$–5ŒÍµPßhø°ù¡®|kùV|ð°kÍï‡oÌð¼´Ì–x££$DcW ô™-¯Á®©2Ÿû×ôÿZÜÙ1J ÇõZZ ɸrËË!tp7îSòLb@¨7k-8‘ÌQ;£ÊI½F) ™Û iÊBw•î…fW<ëÕL‡ iõ)¸¿4Y3žêÀÜ[k=äaØҽؚ[ †ìVÿDPLO]ÚˆIÊCüË,2w–dM"ø%«b-k]Yk±§ÌWÀÆ_µuGʃ|‘1ÌLO¶òJ ðй üÉñÎÞÕXQ $€¢´.@W_†VÒFöx@w_o7:tù*ùݹµƒ·îbBÕÀ=/ñ%N°¨Z‰.»è®€]ÿИ˜îÌ"Í ‘çf¯ÚÊ›UÏ–Ýžjj=Üv·“z?´e'Ìï¡»ÁÞŸ:Zÿ¿Ò¹\]:”¸øýüS½ïà\„w‹š‘=ÁÅ>{´Çí£KÀg\í`þ¡—õÐ墡8?­Wþv•…'V]“ ¢·ªáÈÛië£?û·39 Õº9ãžMŸÄ}üõGÊ(/Ó˜‚2q°£ U¿æ4ðHÓI:áó[7ëyf@eňò*F¸¼RlÛ3ïÌB°  Òÿ|Îõ6ö@€´ÕXµ|e‡%"‚:pxïÁ/{p 5?£jPÀ9sÇ€ŸÍ­ÔM½êhêK <)Þ¾a_ ‹%˜“…ÁQ«þÞÐMÈ­n¼)Ì CX¥ž¦­uøYÓxKÈDñ—,f™Ï½]Šî#×€•IpLÂÓ/ß[oÿ[hb¹Š“ä´.ûÅb׉ÀGÎKÛT—Tf6l°ð­1°‰—¬@½$œbÓ,ìf(íÁó³®p½Å¬¢óÒ0–ÀIsEþD„3(çuc¡&mÃë.£ÍE¼];&Ð5m ‘nÇ—$ÿ(æ»“Š†²ÞEi¿·¬ÉD°Öä™We¨YÊÞâ.µpPúŒéG´Ì_mÖuJ®6{»Ø*J‚›Á zÚ¥´2ŸwkJ€ïsáN&ŸT]¾6«€Q” ¡¬†l#¦–ØL=-òÒ¿|Þ)\æ!Ì"™§b·Cô™"펙ˆˆˆQr¢,0C4J¥§î ©W~d£xBíl¦E蜰@Hœöˆ’6‡Ò¯}–Î$ápúhˆV´üUø j)êq…ÖéY!ÓŽ“ç$—í[Ê÷Ù—(½†ûkΤ×"«÷<Ûbå6#™¢èuÜ„êÊ\ÐÛ3 44IøoøÞ¬Õ@ÁÆU$G?;äk‡öÞë#î„2Åý-*G Nt}^=<©?ÿB"¯^_xÇ fk^'ÿ÷É< į û®K‚ûXþ0ñEª4ÕâÞÒƒˆËî×™Á&:4ú~PjßHn’–¢NƒŠ‰V¹íõ YË]«Î]ƒ8Ôö÷Y`pI×ÁÂ-§Z;f‹Öp53*9%‘…ˆ½–Ñÿî¬ÑŽïŸ8Ê\^y˜·“„dIÕ¨œü5 ¼f³éÁîYýÁ¶ †¼,nâð›y¿örc¼Ï…ë_·ùS$J™ÛÔx«Êy-¤€øætv•-é²`9µiÔh§?¹ƒì£( °kùb:ÄÞˆËÿµY88áä2až†þõú…E§îöÁÁ¡‹ñÈzú¡mÇÑ36ÀŽhå¡bls‰"/@œ>RÃi-$ŠÀŒG`±ÖkUkeepassx-2.0.3/tests/data/Twofish.kdb000066400000000000000000000011541276304217300175250ustar00rootroot00000000000000Ù¢šeûKµ ñsî¨s¹¥Ö4Çü„`êP_¼íÕÆ![³}ç:kmºïÞ” Sžòú£|à—¨® ?ô…òå8ß J± D,AáS‹@àç°Üo\‚óK÷óJì~ÈRÕÐ[—„'s'‰åE<‚Äm9ÑtÊuÅÆ${˜ie¦'½}ÒjݵÚ!˜&«ë}ÉÒYö;¶õœÃ¿y„…¨ÊÃV^ ªîÎ¹ê¹ ÒŠ¯t„Sª·ÎYøÜ¿£î*¦³ ðNÚå»IÕžú¦Øx:DÊ€J¬~Z‰v-ÉZáCxO+Vƒ½Ý‚,Q…CÚk:FÐ-½-dˆø‹D"E+óøÊgáJHè^ÒÆ¸ ­¨:yåèµ °‚ï0 Ìz»ÀÆŽu˜sÚº°¿ç"f ˆ¨æò˜jŠÏ¡}É¿AŠeg BZù^BÔÒy¥q{ÖHc§KPÄuÐ’]*b øî>ójˆ(xU ôâcö]2{Ï¥¶9‡¬)›ýF‚\xzCý‹ƒ²™-ƒ{PJ?³ÒL˜þiÐEÂúôÖ ÅÛðW«¢‡ˆ Øãl¶[‡™' ܦMÉy:À˦;±'…à)Q*"Ú–I   s-Ëï"7'e-sù½(R¯,™ó*F™>VÜ4Ÿ¶–8ùޤƒúÝVÆï¢)é“ ð¹Ò”;!¡ùÝrâŽyøM_ßB ìé… Æ¶¢R$¡[‹+ÿ}«Ÿý=>èsLý(¨ºü·Ÿ¸ë”-âOCº‚uæ_úÕ/`hkeepassx-2.0.3/tests/data/basic.kdb000066400000000000000000000046541276304217300171730ustar00rootroot00000000000000Ù¢šeûKµŠzî®à+ £ms2ô'!7ލìqò §ë§’!šôLjÍw`UnMêF›ž G‹Yõñ ú)Ñ%XóÄùã-ô»ö8Ì—´ ^˜Á:!fôÞ©¿¡[`ÌRGãUÛÅeT3: ¯É¸›6AmÇèó’ÛŒN ÉQ2Ø}±šºÉIÌl_O‡÷¥zŒØÈcóÎd¢ª‚ax&!¥ú¦ûðĆÌBm»ŠH6燻ß0Q_¯b‚UÓmL=»D .¦ŸÏBüÄD‚j±Ïܨí‹ÉíÝÈëJÉ'g_ë8§^ˆ+bç$5…ƒP¨«Ò)’gQ“Ôë¸@ §`#f8cjñ³µè7 ÆUn¬Ç°÷žïZINFõ狼›nÚ.¡¬nhá¶ö×!Ùuü¦´Ãøú!z=&4ÎçÖÖrÏg©Šº8pu¥Žàg²Ä&*µÄ‰–V-™lM° R¨Ÿøäªhªlsçf3,À$Exê¦wRÿ1€dÂÞa0ˆÃù»Y†wûf -§“zFþ%ŠžgqÞ§—<½îOø"‘Óp § œÜò*Q O¥´×ÍAÀDùw¹ñ™9$»9¨±¿ ŽEyí ËRè»6Á2&ÔZ¾zˆy îí®Ïùp/û7šB2Oëè»UXÖRà Û:?.Ÿ;=;ñÙQTb …ùn±§Gªƒ¥ºO@ûØ ˆ™º•% Êñ9þ=»D¢€’mkX¸ú›§"@åŽî¹UêêO}[eôÞF¼—ÛYz¥œ*G%bÃlÚmépc™}oê­º3çkU0Ü'ç7E"d:)؉f?ÙµìïLµ»ÂI€ó~΂KefÒwX¦„@Þqe Ý ó)9pxeÁáà(FàOH/†,ų ÌoðãKÁ²<Ôø}*ëyN3ßAäg1˜„ix"®’m³uÙ¿šº ªøVCŠåŠ]êjëX.ž¯aLÛùe*Dö³ÔÙßñ§‚ÈôZŃ­ÆŽ—²E¼E™ S5u[Jpy.夑!ù³ÕcÐ㉠’rª3T ÿ|ë•xl| ;>Ïú—Í›@Λ:Ùçãsn©EB/õÁä£ ÖžÎ}Š¿4Kz¾ÕsÛ*„äoCdÓ:ùmKçþ1Ý´l)2eªŠ† (ù c Qͺømù„ØŒHüÒ¥!Q) t N¬-gL§Å§3õv%êÏÉýHH:lÀM‚àçµ)5ߣÒk“nê}å¢ÅÎúLÞ`½ÛÈÀ侂Fó}½ ZyÅœ×þQ²JçÞ·ul,Øíˆ-[óeð|ÚÆhr#kÑû³Ä0Ä[f}çÌýÝêY³Ææ Ž;HÉ䣴Ó~žçCj‡Ú¨&"BhµWªñ&HZ•â9®RKÚX‹dЙºŽ”ÐÛüY”¤ÞÁß3>dÎ+ñкúLÐ}ù]¼â+¨âi¼ðÁ/ëáëö7êÑV¯j2£½Æã”­Lãbñn9“'2˸2Ò¸Âã5{Ø,¶We¯ÜƒšC`„ÝÓ$Ä\V¸U`b곟`Ñh¢¥×-[®ˆÜÀÏO˜¾Û òLÉ\N"‘}G{v.Gµ÷Þ_ª¿hüGòYYCT7{c/nÂ=Q « ¸+0*|iúz×oÙ~âI—ÙÒÔ&ï.) 9Øç×/wÓJûtß[>3ÏØº—Båá•ãw˜7Õ¥mñCq¡š8µT )z‡dxôÖ¶†jàÙÙªJ” %úz–Ôm*÷¼ ìfOÐÖä»ÓQzüB½Ô7_Üú\ow”ijm†P”a“n0fKˆwëýð¹èiEYî\´H'›‚ýpöF(GÐëœwHMØ™2„pZ¨yÈvêМ_”À—kÇô‹c’wû1È•ºtóHÈÕ»èº)©Qø¨Ö!¨©!|Äzл«Û9ã´ÅÿªÈr.›VÓ1çðºmQÚêK猭4ºÊÍŸœñËHƒõ$z™ß$¼×ÝX_f¼ó€˜¦[Nºé?ßBW‡2—÷néØ6áuoÛ÷OØP×T°*8ýZY £N¡ ì«ÿ0 »,lû¨8ݬã3ºuŽò¡yå|ë‰Ñ7P:‰t[T/ýù®¤Èrð'ÑwÚx³zÉÄ¿7?f'tê–aûlÕ:–‹:»$¤ý®‘C†á~pò˜[;ZF~ÞJ2AaSü*îuS•A×wf¥øGïó.[(ö!Ïù!Æn%ëwrTy o“xCWüé-l;pñfòéñ»žì>@– ×í':H\±'4 ÁKœG*’@ÿ¶ø rO•¼-O]L8j{ãF rLLßð¼Ôæ™%¸Ÿg‰£uVÈúGó"A'6bÂÉàxá¡erÛ?‹ÆiI¾qBJb›‘Ì—Ej9½øA07Ðêš4U ”yë]Y}Ä:@H¯Þ­ù&h]‘»€I¾Ò; ¯s<>T{0·«+¤Ê ü*Wúp<©’£‰öƒ¶ÿcÑkeepassx-2.0.3/tests/data/bug392.kdbx000066400000000000000000000025361276304217300173120ustar00rootroot00000000000000Ù¢šgûKµ1Áòæ¿qCP¾X!jüZÿ _Àeä#·ô^>¼e:­ž\c)= 5Ðrÿ=—j CÉ%Ìmó¨ŒWû3ò ŸH9¹Ÿ†Æ Ø~¿;T^y#bµ †g‘aÈÞ¡&N0b݉ Õ‡Úh ì™Ò$pÄ‹>Û~ êHÚÀº;Øö¦§ tZ$¦©Ð?ËïRšŽÓ3Çw¬á0Ssí²Ù*ª¨  €»#׈ی*> X½î %ñÿ™2wu4ÌO/O©B±[Öè¬Ë4Óóˆa“!Ç›o’Qhëí/W¹v)uRÉ/8¾ÎDQê† è.³ ¬x« 1Å×”7Q)þÕæÕcÒ 7¢ÝÝL ðÇ+±Â% xŸ*Ú Ò8§ßg¨¢ÇÝŠ¬~0I¤›ð)·ð϶ýKA)®–œcò"g{¾ª\Kè(a-éœRÜk M"­*ç³ÓèÜ›¤Å†‹ð@©8á×G°Á ÇQ,±‘,$Ä‘oæýÍTu†çà F£L1:yœ,H‡™ëT0X(ƒ Óã¡)$7,6@³ŠÏ~su¾ü ÞzB”(eGÚȰۼ3·AÄn”›œšíì›òõf¶0°Wy×™ ÒÁ|ö=šyX¼Ñ=½&àÊ6îÓ æmŒ·L$Ù5Œ—Îö¨-í„X7vÒ ´LÖú‡ ÷'H´<Ñ rÞ ˆíiHV;ó±ËFl#‰/R¶Åm`ÈR8•¦ˆ>¸ðÆÙ3 µg&øš*n8µ¬q^ëòŒ›œãâ¢ÝÊZÁòB‚dB™¨%QSØ8œ,ÀîlÝúݸ] ‘mä"7íøRud¨VFëTÚm~Ú´ËêA+R5ŒðÄù•ŠÞ%ªCîL.ÍIV÷&—vXÚ0]Ðy•„Ètü2!è›kþ… ÷=ô/6£bÑÜik# é¦Â(ŸZ8w^|Õ°E¸œˆô‚7¨Ðg,ýÌt…3h/‚ïD!`2¥_&ó4öÎbÁRnŠ¡á ¿dãå>=á>7¾ ‰lT´›’LÖ-Õ†Qø‰ŠKÚûìÄ;¡¿©— £„KeÔ ¥ÿ`cÊXüokwÚîr™ð†QÝ*uå–¨ÿÿ÷lë[h3fwƶÍa™³ˆÉ¼³ŽÚÌÇÖœ5M–š‚ä33‰KÞ%yê˜Qš6ò×*üç FY)‘Þ„PBU½ß~A›E½"æ²àµŸ%®¬„º‹jžê¤ƒð‹lâ¼é’×î¹NCˆà¤7©/·qžîõ<+‡BlñmXÑ.<ò°Åo¦,d[ —½ÁÐö4SæçìZ#Þ éÌ‘lª0¯¬ÇaU8d3_uu¾æ2.x$ãìÞ6åYÚ#jÖžwú‘‡™¹‰¾ÐB µQssXQKðØqì@Ûxõ\ú&¿‘½×jf:Œ¦ÖqѪæ¥mOM@ÆÕsc g› #ìüУañbeÉ?ßó¶Š ²ÞLÜï_¦$qÊotLµ¤é ’p€¶eÇêw±QƉtÕ Ærš2ärÜÀ‰'¨ŒpYý¥4t¤7²ø% ¤_ƒ ˆ›³2`oóGªÐãÕ"…d-(|Ëkeepassx-2.0.3/tests/gui/000077500000000000000000000000001276304217300152725ustar00rootroot00000000000000keepassx-2.0.3/tests/gui/CMakeLists.txt000066400000000000000000000015631276304217300200370ustar00rootroot00000000000000# Copyright (C) 2011 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . add_unit_test(NAME testgui SOURCES TestGui.cpp MOCS TestGui.h LIBS ${TEST_LIBRARIES}) add_unit_test(NAME testguipixmaps SOURCES TestGuiPixmaps.cpp MOCS TestGuiPixmaps.h LIBS ${TEST_LIBRARIES}) keepassx-2.0.3/tests/gui/TestGui.cpp000066400000000000000000000470121276304217300173660ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestGui.h" #include #include #include #include #include #include #include #include #include #include #include "config-keepassx-tests.h" #include "tests.h" #include "core/Config.h" #include "core/Database.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" #include "core/Tools.h" #include "crypto/Crypto.h" #include "format/KeePass2Reader.h" #include "gui/DatabaseTabWidget.h" #include "gui/DatabaseWidget.h" #include "gui/FileDialog.h" #include "gui/MainWindow.h" #include "gui/MessageBox.h" #include "gui/entry/EditEntryWidget.h" #include "gui/entry/EntryView.h" #include "gui/group/GroupModel.h" #include "gui/group/GroupView.h" #include "keys/PasswordKey.h" void TestGui::initTestCase() { QVERIFY(Crypto::init()); Config::createTempFileInstance(); m_mainWindow = new MainWindow(); m_tabWidget = m_mainWindow->findChild("tabWidget"); m_mainWindow->show(); Tools::wait(50); QByteArray tmpData; QFile sourceDbFile(QString(KEEPASSX_TEST_DATA_DIR).append("/NewDatabase.kdbx")); QVERIFY(sourceDbFile.open(QIODevice::ReadOnly)); QVERIFY(Tools::readAllFromDevice(&sourceDbFile, tmpData)); QVERIFY(m_orgDbFile.open()); m_orgDbFileName = QFileInfo(m_orgDbFile.fileName()).fileName(); QCOMPARE(m_orgDbFile.write(tmpData), static_cast((tmpData.size()))); m_orgDbFile.close(); } void TestGui::testOpenDatabase() { fileDialog()->setNextFileName(m_orgDbFile.fileName()); triggerAction("actionDatabaseOpen"); QWidget* databaseOpenWidget = m_mainWindow->findChild("databaseOpenWidget"); QLineEdit* editPassword = databaseOpenWidget->findChild("editPassword"); QVERIFY(editPassword); QTest::keyClicks(editPassword, "a"); QTest::keyClick(editPassword, Qt::Key_Enter); } void TestGui::testTabs() { QCOMPARE(m_tabWidget->count(), 1); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), m_orgDbFileName); m_dbWidget = m_tabWidget->currentDatabaseWidget(); m_db = m_dbWidget->database(); } void TestGui::testEditEntry() { EntryView* entryView = m_dbWidget->findChild("entryView"); QModelIndex item = entryView->model()->index(0, 1); QRect itemRect = entryView->visualRect(item); QTest::mouseClick(entryView->viewport(), Qt::LeftButton, Qt::NoModifier, itemRect.center()); QAction* entryEditAction = m_mainWindow->findChild("actionEntryEdit"); QVERIFY(entryEditAction->isEnabled()); QToolBar* toolBar = m_mainWindow->findChild("toolBar"); QWidget* entryEditWidget = toolBar->widgetForAction(entryEditAction); QVERIFY(entryEditWidget->isVisible()); QVERIFY(entryEditWidget->isEnabled()); QTest::mouseClick(entryEditWidget, Qt::LeftButton); EditEntryWidget* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); QVERIFY(m_dbWidget->currentWidget() == editEntryWidget); QDialogButtonBox* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); QVERIFY(editEntryWidgetButtonBox); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); // make sure the database isn't marked as modified // wait for modified timer QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), m_orgDbFileName); } void TestGui::testAddEntry() { EntryView* entryView = m_dbWidget->findChild("entryView"); QAction* entryNewAction = m_mainWindow->findChild("actionEntryNew"); QVERIFY(entryNewAction->isEnabled()); QToolBar* toolBar = m_mainWindow->findChild("toolBar"); QWidget* entryNewWidget = toolBar->widgetForAction(entryNewAction); QVERIFY(entryNewWidget->isVisible()); QVERIFY(entryNewWidget->isEnabled()); QTest::mouseClick(entryNewWidget, Qt::LeftButton); QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::EditMode); EditEntryWidget* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); QLineEdit* titleEdit = editEntryWidget->findChild("titleEdit"); QTest::keyClicks(titleEdit, "test"); QDialogButtonBox* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::ViewMode); QModelIndex item = entryView->model()->index(1, 1); Entry* entry = entryView->entryFromIndex(item); QCOMPARE(entry->title(), QString("test")); QCOMPARE(entry->historyItems().size(), 0); // wait for modified timer QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("%1*").arg(m_orgDbFileName)); QAction* entryEditAction = m_mainWindow->findChild("actionEntryEdit"); QVERIFY(entryEditAction->isEnabled()); QWidget* entryEditWidget = toolBar->widgetForAction(entryEditAction); QVERIFY(entryEditWidget->isVisible()); QVERIFY(entryEditWidget->isEnabled()); QTest::mouseClick(entryEditWidget, Qt::LeftButton); QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::EditMode); QTest::keyClicks(titleEdit, "something"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QCOMPARE(entry->title(), QString("testsomething")); QCOMPARE(entry->historyItems().size(), 1); QTest::mouseClick(entryNewWidget, Qt::LeftButton); QTest::keyClicks(titleEdit, "something 2"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QTest::mouseClick(entryNewWidget, Qt::LeftButton); QTest::keyClicks(titleEdit, "something 3"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QTRY_COMPARE(entryView->model()->rowCount(), 4); } void TestGui::testSearch() { QAction* searchAction = m_mainWindow->findChild("actionSearch"); QVERIFY(searchAction->isEnabled()); QToolBar* toolBar = m_mainWindow->findChild("toolBar"); QWidget* searchActionWidget = toolBar->widgetForAction(searchAction); EntryView* entryView = m_dbWidget->findChild("entryView"); QLineEdit* searchEdit = m_dbWidget->findChild("searchEdit"); QToolButton* clearSearch = m_dbWidget->findChild("clearButton"); QVERIFY(!searchEdit->hasFocus()); // Enter search QTest::mouseClick(searchActionWidget, Qt::LeftButton); QTRY_VERIFY(searchEdit->hasFocus()); // Search for "ZZZ" QTest::keyClicks(searchEdit, "ZZZ"); QTRY_COMPARE(entryView->model()->rowCount(), 0); // Escape QTest::keyClick(m_mainWindow, Qt::Key_Escape); QTRY_VERIFY(!searchEdit->hasFocus()); // Enter search again QTest::mouseClick(searchActionWidget, Qt::LeftButton); QTRY_VERIFY(searchEdit->hasFocus()); // Input and clear QTest::keyClicks(searchEdit, "ZZZ"); QTRY_COMPARE(searchEdit->text(), QString("ZZZ")); QTest::mouseClick(clearSearch, Qt::LeftButton); QTRY_COMPARE(searchEdit->text(), QString("")); // Triggering search should select the existing text QTest::keyClicks(searchEdit, "ZZZ"); QTest::mouseClick(searchActionWidget, Qt::LeftButton); QTRY_VERIFY(searchEdit->hasFocus()); // Search for "some" QTest::keyClicks(searchEdit, "some"); QTRY_COMPARE(entryView->model()->rowCount(), 4); // Press Down to focus on the entry view QVERIFY(!entryView->hasFocus()); QTest::keyClick(searchEdit, Qt::Key_Down); QVERIFY(entryView->hasFocus()); clickIndex(entryView->model()->index(0, 1), entryView, Qt::LeftButton); QAction* entryEditAction = m_mainWindow->findChild("actionEntryEdit"); QVERIFY(entryEditAction->isEnabled()); QWidget* entryEditWidget = toolBar->widgetForAction(entryEditAction); QVERIFY(entryEditWidget->isVisible()); QVERIFY(entryEditWidget->isEnabled()); QTest::mouseClick(entryEditWidget, Qt::LeftButton); QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::EditMode); EditEntryWidget* editEntryWidget = m_dbWidget->findChild("editEntryWidget"); QDialogButtonBox* editEntryWidgetButtonBox = editEntryWidget->findChild("buttonBox"); QTest::mouseClick(editEntryWidgetButtonBox->button(QDialogButtonBox::Ok), Qt::LeftButton); QCOMPARE(m_dbWidget->currentMode(), DatabaseWidget::ViewMode); clickIndex(entryView->model()->index(1, 0), entryView, Qt::LeftButton); QAction* entryDeleteAction = m_mainWindow->findChild("actionEntryDelete"); QWidget* entryDeleteWidget = toolBar->widgetForAction(entryDeleteAction); QVERIFY(entryDeleteWidget->isVisible()); QVERIFY(entryDeleteWidget->isEnabled()); QVERIFY(!m_db->metadata()->recycleBin()); MessageBox::setNextAnswer(QMessageBox::Yes); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 3); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); clickIndex(entryView->model()->index(1, 0), entryView, Qt::LeftButton); clickIndex(entryView->model()->index(2, 0), entryView, Qt::LeftButton, Qt::ControlModifier); QCOMPARE(entryView->selectionModel()->selectedRows().size(), 2); MessageBox::setNextAnswer(QMessageBox::No); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 3); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 1); MessageBox::setNextAnswer(QMessageBox::Yes); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 1); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); QWidget* closeSearchButton = m_dbWidget->findChild("closeSearchButton"); QTest::mouseClick(closeSearchButton, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 1); } void TestGui::testDeleteEntry() { GroupView* groupView = m_dbWidget->findChild("groupView"); EntryView* entryView = m_dbWidget->findChild("entryView"); QToolBar* toolBar = m_mainWindow->findChild("toolBar"); QAction* entryDeleteAction = m_mainWindow->findChild("actionEntryDelete"); QWidget* entryDeleteWidget = toolBar->widgetForAction(entryDeleteAction); QCOMPARE(groupView->currentGroup(), m_db->rootGroup()); QModelIndex rootGroupIndex = groupView->model()->index(0, 0); clickIndex(groupView->model()->index(groupView->model()->rowCount(rootGroupIndex) - 1, 0, rootGroupIndex), groupView, Qt::LeftButton); QCOMPARE(groupView->currentGroup()->name(), m_db->metadata()->recycleBin()->name()); clickIndex(entryView->model()->index(0, 0), entryView, Qt::LeftButton); MessageBox::setNextAnswer(QMessageBox::No); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 3); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 3); MessageBox::setNextAnswer(QMessageBox::Yes); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 2); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 2); clickIndex(entryView->model()->index(0, 0), entryView, Qt::LeftButton); clickIndex(entryView->model()->index(1, 0), entryView, Qt::LeftButton, Qt::ControlModifier); MessageBox::setNextAnswer(QMessageBox::Yes); QTest::mouseClick(entryDeleteWidget, Qt::LeftButton); QCOMPARE(entryView->model()->rowCount(), 0); QCOMPARE(m_db->metadata()->recycleBin()->entries().size(), 0); clickIndex(groupView->model()->index(0, 0), groupView, Qt::LeftButton); QCOMPARE(groupView->currentGroup(), m_db->rootGroup()); } void TestGui::testCloneEntry() { EntryView* entryView = m_dbWidget->findChild("entryView"); QCOMPARE(entryView->model()->rowCount(), 1); QModelIndex item = entryView->model()->index(0, 1); Entry* entryOrg = entryView->entryFromIndex(item); clickIndex(item, entryView, Qt::LeftButton); triggerAction("actionEntryClone"); QCOMPARE(entryView->model()->rowCount(), 2); Entry* entryClone = entryView->entryFromIndex(entryView->model()->index(1, 1)); QVERIFY(entryOrg->uuid() != entryClone->uuid()); QCOMPARE(entryClone->title(), entryOrg->title()); } void TestGui::testDragAndDropEntry() { EntryView* entryView = m_dbWidget->findChild("entryView"); GroupView* groupView = m_dbWidget->findChild("groupView"); QAbstractItemModel* groupModel = groupView->model(); QModelIndex sourceIndex = entryView->model()->index(0, 1); QModelIndex targetIndex = groupModel->index(0, 0, groupModel->index(0, 0)); QVERIFY(sourceIndex.isValid()); QVERIFY(targetIndex.isValid()); QMimeData mimeData; QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); Entry* entry = entryView->entryFromIndex(sourceIndex); stream << entry->group()->database()->uuid() << entry->uuid(); mimeData.setData("application/x-keepassx-entry", encoded); QVERIFY(groupModel->dropMimeData(&mimeData, Qt::MoveAction, -1, 0, targetIndex)); QCOMPARE(entry->group()->name(), QString("General")); } void TestGui::testDragAndDropGroup() { QAbstractItemModel* groupModel = m_dbWidget->findChild("groupView")->model(); QModelIndex rootIndex = groupModel->index(0, 0); dragAndDropGroup(groupModel->index(0, 0, rootIndex), groupModel->index(1, 0, rootIndex), -1, true, "Windows", 0); // dropping parent on child is supposed to fail dragAndDropGroup(groupModel->index(0, 0, rootIndex), groupModel->index(0, 0, groupModel->index(0, 0, rootIndex)), -1, false, "NewDatabase", 0); dragAndDropGroup(groupModel->index(1, 0, rootIndex), rootIndex, 0, true, "NewDatabase", 0); dragAndDropGroup(groupModel->index(0, 0, rootIndex), rootIndex, -1, true, "NewDatabase", 5); } void TestGui::testSaveAs() { QFileInfo fileInfo(m_orgDbFile.fileName()); QDateTime lastModified = fileInfo.lastModified(); m_db->metadata()->setName("SaveAs"); QTemporaryFile* tmpFile = new QTemporaryFile(); // open temporary file so it creates a filename QVERIFY(tmpFile->open()); m_tmpFileName = tmpFile->fileName(); delete tmpFile; fileDialog()->setNextFileName(m_tmpFileName); triggerAction("actionDatabaseSaveAs"); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("SaveAs")); checkDatabase(); fileInfo.refresh(); QCOMPARE(fileInfo.lastModified(), lastModified); } void TestGui::testSave() { m_db->metadata()->setName("Save"); // wait for modified timer QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("Save*")); triggerAction("actionDatabaseSave"); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("Save")); checkDatabase(); } void TestGui::testDatabaseSettings() { triggerAction("actionChangeDatabaseSettings"); QWidget* dbSettingsWidget = m_dbWidget->findChild("databaseSettingsWidget"); QSpinBox* transformRoundsSpinBox = dbSettingsWidget->findChild("transformRoundsSpinBox"); transformRoundsSpinBox->setValue(100); QTest::keyClick(transformRoundsSpinBox, Qt::Key_Enter); // wait for modified timer QTRY_COMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("Save*")); QCOMPARE(m_db->transformRounds(), Q_UINT64_C(100)); triggerAction("actionDatabaseSave"); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("Save")); checkDatabase(); } void TestGui::testKeePass1Import() { fileDialog()->setNextFileName(QString(KEEPASSX_TEST_DATA_DIR).append("/basic.kdb")); triggerAction("actionImportKeePass1"); QWidget* keepass1OpenWidget = m_mainWindow->findChild("keepass1OpenWidget"); QLineEdit* editPassword = keepass1OpenWidget->findChild("editPassword"); QVERIFY(editPassword); QTest::keyClicks(editPassword, "masterpw"); QTest::keyClick(editPassword, Qt::Key_Enter); QCOMPARE(m_tabWidget->count(), 2); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("basic [New database]*")); } void TestGui::testDatabaseLocking() { MessageBox::setNextAnswer(QMessageBox::Cancel); triggerAction("actionLockDatabases"); QCOMPARE(m_tabWidget->tabText(0), QString("Save [locked]")); QCOMPARE(m_tabWidget->tabText(1), QString("basic [New database]*")); QWidget* dbWidget = m_tabWidget->currentDatabaseWidget(); QWidget* unlockDatabaseWidget = dbWidget->findChild("unlockDatabaseWidget"); QWidget* editPassword = unlockDatabaseWidget->findChild("editPassword"); QVERIFY(editPassword); QTest::keyClicks(editPassword, "masterpw"); QTest::keyClick(editPassword, Qt::Key_Enter); QCOMPARE(m_tabWidget->tabText(m_tabWidget->currentIndex()), QString("basic [New database]*")); } void TestGui::cleanupTestCase() { delete m_mainWindow; QFile::remove(m_tmpFileName); } void TestGui::checkDatabase() { CompositeKey key; key.addKey(PasswordKey("a")); KeePass2Reader reader; QScopedPointer dbSaved(reader.readDatabase(m_tmpFileName, key)); QVERIFY(dbSaved); QVERIFY(!reader.hasError()); QCOMPARE(dbSaved->metadata()->name(), m_db->metadata()->name()); } void TestGui::triggerAction(const QString& name) { QAction* action = m_mainWindow->findChild(name); QVERIFY(action); QVERIFY(action->isEnabled()); action->trigger(); } void TestGui::dragAndDropGroup(const QModelIndex& sourceIndex, const QModelIndex& targetIndex, int row, bool expectedResult, const QString& expectedParentName, int expectedPos) { QVERIFY(sourceIndex.isValid()); QVERIFY(targetIndex.isValid()); GroupModel* groupModel = qobject_cast(m_dbWidget->findChild("groupView")->model()); QMimeData mimeData; QByteArray encoded; QDataStream stream(&encoded, QIODevice::WriteOnly); Group* group = groupModel->groupFromIndex(sourceIndex); stream << group->database()->uuid() << group->uuid(); mimeData.setData("application/x-keepassx-group", encoded); QCOMPARE(groupModel->dropMimeData(&mimeData, Qt::MoveAction, row, 0, targetIndex), expectedResult); QCOMPARE(group->parentGroup()->name(), expectedParentName); QCOMPARE(group->parentGroup()->children().indexOf(group), expectedPos); } void TestGui::clickIndex(const QModelIndex& index, QAbstractItemView* view, Qt::MouseButton button, Qt::KeyboardModifiers stateKey) { QTest::mouseClick(view->viewport(), button, stateKey, view->visualRect(index).center()); } QTEST_MAIN(TestGui) keepassx-2.0.3/tests/gui/TestGui.h000066400000000000000000000041121276304217300170250ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTGUI_H #define KEEPASSX_TESTGUI_H #include #include #include class Database; class DatabaseTabWidget; class DatabaseWidget; class QAbstractItemView; class MainWindow; class TestGui : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testOpenDatabase(); void testTabs(); void testEditEntry(); void testAddEntry(); void testSearch(); void testDeleteEntry(); void testCloneEntry(); void testDragAndDropEntry(); void testDragAndDropGroup(); void testSaveAs(); void testSave(); void testDatabaseSettings(); void testKeePass1Import(); void testDatabaseLocking(); void cleanupTestCase(); private: void checkDatabase(); void triggerAction(const QString& name); void dragAndDropGroup(const QModelIndex& sourceIndex, const QModelIndex& targetIndex, int row, bool expectedResult, const QString& expectedParentName, int expectedPos); void clickIndex(const QModelIndex& index, QAbstractItemView* view, Qt::MouseButton button, Qt::KeyboardModifiers stateKey = 0); MainWindow* m_mainWindow; DatabaseTabWidget* m_tabWidget; DatabaseWidget* m_dbWidget; QTemporaryFile m_orgDbFile; QString m_orgDbFileName; QString m_tmpFileName; Database* m_db; }; #endif // KEEPASSX_TESTGUI_H keepassx-2.0.3/tests/gui/TestGuiPixmaps.cpp000066400000000000000000000105371276304217300207320ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "TestGuiPixmaps.h" #include #include "tests.h" #include "core/Database.h" #include "core/DatabaseIcons.h" #include "core/Entry.h" #include "core/Group.h" #include "core/Metadata.h" #include "crypto/Crypto.h" void TestGuiPixmaps::initTestCase() { QVERIFY(Crypto::init()); } void TestGuiPixmaps::testDatabaseIcons() { QImage image; QPixmap pixmap; QPixmap pixmapCached; image = databaseIcons()->icon(0); pixmap = databaseIcons()->iconPixmap(0); compareImages(pixmap, image); // check if the cache works correctly pixmapCached = databaseIcons()->iconPixmap(0); compareImages(pixmapCached, image); QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); pixmap = databaseIcons()->iconPixmap(1); image = databaseIcons()->icon(1); compareImages(pixmap, image); pixmapCached = databaseIcons()->iconPixmap(1); compareImages(pixmapCached, image); QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); } void TestGuiPixmaps::testEntryIcons() { Database* db = new Database(); Entry* entry = new Entry(); entry->setGroup(db->rootGroup()); QImage icon; QImage image; QPixmap pixmap; QPixmap pixmapCached1; QPixmap pixmapCached2; icon = databaseIcons()->icon(10); entry->setIcon(10); image = entry->icon(); pixmap = entry->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = entry->iconPixmap(); pixmapCached2 = databaseIcons()->iconPixmap(10); compareImages(pixmapCached1, icon); compareImages(pixmapCached2, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey()); Uuid iconUuid = Uuid::random(); icon = QImage(2, 1, QImage::Format_RGB32); icon.setPixel(0, 0, qRgb(0, 0, 0)); icon.setPixel(1, 0, qRgb(0, 0, 50)); db->metadata()->addCustomIcon(iconUuid, icon); entry->setIcon(iconUuid); image = entry->icon(); pixmap = entry->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = entry->iconPixmap(); compareImages(pixmapCached1, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); delete db; } void TestGuiPixmaps::testGroupIcons() { Database* db = new Database(); Group* group = db->rootGroup(); QImage icon; QImage image; QPixmap pixmap; QPixmap pixmapCached1; QPixmap pixmapCached2; icon = databaseIcons()->icon(10); group->setIcon(10); image = group->icon(); pixmap = group->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = group->iconPixmap(); pixmapCached2 = databaseIcons()->iconPixmap(10); compareImages(pixmapCached1, icon); compareImages(pixmapCached2, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey()); Uuid iconUuid = Uuid::random(); icon = QImage(2, 1, QImage::Format_RGB32); icon.setPixel(0, 0, qRgb(0, 0, 0)); icon.setPixel(1, 0, qRgb(0, 0, 50)); db->metadata()->addCustomIcon(iconUuid, icon); group->setIcon(iconUuid); image = group->icon(); pixmap = group->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = group->iconPixmap(); compareImages(pixmapCached1, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); delete db; } void TestGuiPixmaps::compareImages(const QPixmap& pixmap, const QImage& image) { QCOMPARE(pixmap.toImage().convertToFormat(QImage::Format_ARGB32_Premultiplied), image.convertToFormat(QImage::Format_ARGB32_Premultiplied)); } QTEST_MAIN(TestGuiPixmaps) keepassx-2.0.3/tests/gui/TestGuiPixmaps.h000066400000000000000000000021561276304217300203750ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTGUIPIXMAPS_H #define KEEPASSX_TESTGUIPIXMAPS_H #include #include #include class TestGuiPixmaps : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testDatabaseIcons(); void testEntryIcons(); void testGroupIcons(); private: void compareImages(const QPixmap& pixmap, const QImage& image); }; #endif // KEEPASSX_TESTGUIPIXMAPS_H keepassx-2.0.3/tests/modeltest.cpp000066400000000000000000000562421276304217300172230ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include "modeltest.h" #include #include Q_DECLARE_METATYPE ( QModelIndex ) /*! Connect to all of the models signals. Whenever anything happens recheck everything. */ ModelTest::ModelTest ( QAbstractItemModel *_model, QObject *parent ) : QObject ( parent ), model ( _model ), fetchingMore ( false ) { if (!model) qFatal("%s: model must not be null", Q_FUNC_INFO); connect ( model, SIGNAL ( columnsAboutToBeInserted ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( columnsAboutToBeRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( columnsInserted ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( columnsRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( dataChanged ( const QModelIndex &, const QModelIndex & ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( headerDataChanged ( Qt::Orientation, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( layoutAboutToBeChanged () ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( layoutChanged () ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( modelReset () ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( rowsInserted ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); connect ( model, SIGNAL ( rowsRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( runAllTests() ) ); // Special checks for inserting/removing connect ( model, SIGNAL ( layoutAboutToBeChanged() ), this, SLOT ( layoutAboutToBeChanged() ) ); connect ( model, SIGNAL ( layoutChanged() ), this, SLOT ( layoutChanged() ) ); connect ( model, SIGNAL ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ), this, SLOT ( rowsAboutToBeInserted ( const QModelIndex &, int, int ) ) ); connect ( model, SIGNAL ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( rowsAboutToBeRemoved ( const QModelIndex &, int, int ) ) ); connect ( model, SIGNAL ( rowsInserted ( const QModelIndex &, int, int ) ), this, SLOT ( rowsInserted ( const QModelIndex &, int, int ) ) ); connect ( model, SIGNAL ( rowsRemoved ( const QModelIndex &, int, int ) ), this, SLOT ( rowsRemoved ( const QModelIndex &, int, int ) ) ); connect ( model, SIGNAL (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)), this, SLOT (rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)) ); connect ( model, SIGNAL (rowsMoved(QModelIndex,int,int,QModelIndex,int)), this, SLOT (rowsMoved(QModelIndex,int,int,QModelIndex,int)) ); runAllTests(); } void ModelTest::runAllTests() { if ( fetchingMore ) return; nonDestructiveBasicTest(); rowCount(); columnCount(); hasIndex(); index(); parent(); data(); } /*! nonDestructiveBasicTest tries to call a number of the basic functions (not all) to make sure the model doesn't outright segfault, testing the functions that makes sense. */ void ModelTest::nonDestructiveBasicTest() { QVERIFY( model->buddy ( QModelIndex() ) == QModelIndex() ); model->canFetchMore ( QModelIndex() ); QVERIFY( model->columnCount ( QModelIndex() ) >= 0 ); QVERIFY( model->data ( QModelIndex() ) == QVariant() ); fetchingMore = true; model->fetchMore ( QModelIndex() ); fetchingMore = false; Qt::ItemFlags flags = model->flags ( QModelIndex() ); QVERIFY( flags == Qt::ItemIsDropEnabled || flags == 0 ); model->hasChildren ( QModelIndex() ); model->hasIndex ( 0, 0 ); model->headerData ( 0, Qt::Horizontal ); model->index ( 0, 0 ); model->itemData ( QModelIndex() ); QVariant cache; model->match ( QModelIndex(), -1, cache ); model->mimeTypes(); QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() ); QVERIFY( model->rowCount() >= 0 ); QVariant variant; model->setData ( QModelIndex(), variant, -1 ); model->setHeaderData ( -1, Qt::Horizontal, QVariant() ); model->setHeaderData ( 999999, Qt::Horizontal, QVariant() ); QMap roles; model->sibling ( 0, 0, QModelIndex() ); model->span ( QModelIndex() ); model->supportedDropActions(); } /*! Tests model's implementation of QAbstractItemModel::rowCount() and hasChildren() Models that are dynamically populated are not as fully tested here. */ void ModelTest::rowCount() { // qDebug() << "rc"; // check top row QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); int rows = model->rowCount ( topIndex ); QVERIFY( rows >= 0 ); if ( rows > 0 ) QVERIFY( model->hasChildren ( topIndex ) ); QModelIndex secondLevelIndex = model->index ( 0, 0, topIndex ); if ( secondLevelIndex.isValid() ) { // not the top level // check a row count where parent is valid rows = model->rowCount ( secondLevelIndex ); QVERIFY( rows >= 0 ); if ( rows > 0 ) QVERIFY( model->hasChildren ( secondLevelIndex ) ); } // The models rowCount() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::columnCount() and hasChildren() */ void ModelTest::columnCount() { // check top row QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); QVERIFY( model->columnCount ( topIndex ) >= 0 ); // check a column count where parent is valid QModelIndex childIndex = model->index ( 0, 0, topIndex ); if ( childIndex.isValid() ) QVERIFY( model->columnCount ( childIndex ) >= 0 ); // columnCount() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::hasIndex() */ void ModelTest::hasIndex() { // qDebug() << "hi"; // Make sure that invalid values returns an invalid index QVERIFY( !model->hasIndex ( -2, -2 ) ); QVERIFY( !model->hasIndex ( -2, 0 ) ); QVERIFY( !model->hasIndex ( 0, -2 ) ); int rows = model->rowCount(); int columns = model->columnCount(); // check out of bounds QVERIFY( !model->hasIndex ( rows, columns ) ); QVERIFY( !model->hasIndex ( rows + 1, columns + 1 ) ); if ( rows > 0 ) QVERIFY( model->hasIndex ( 0, 0 ) ); // hasIndex() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::index() */ void ModelTest::index() { // qDebug() << "i"; // Make sure that invalid values returns an invalid index QVERIFY( model->index ( -2, -2 ) == QModelIndex() ); QVERIFY( model->index ( -2, 0 ) == QModelIndex() ); QVERIFY( model->index ( 0, -2 ) == QModelIndex() ); int rows = model->rowCount(); int columns = model->columnCount(); if ( rows == 0 ) return; // Catch off by one errors QVERIFY( model->index ( rows, columns ) == QModelIndex() ); QVERIFY( model->index ( 0, 0 ).isValid() ); // Make sure that the same index is *always* returned QModelIndex a = model->index ( 0, 0 ); QModelIndex b = model->index ( 0, 0 ); QVERIFY( a == b ); // index() is tested more extensively in checkChildren(), // but this catches the big mistakes } /*! Tests model's implementation of QAbstractItemModel::parent() */ void ModelTest::parent() { // qDebug() << "p"; // Make sure the model wont crash and will return an invalid QModelIndex // when asked for the parent of an invalid index. QVERIFY( model->parent ( QModelIndex() ) == QModelIndex() ); if ( model->rowCount() == 0 ) return; // Column 0 | Column 1 | // QModelIndex() | | // \- topIndex | topIndex1 | // \- childIndex | childIndex1 | // Common error test #1, make sure that a top level index has a parent // that is a invalid QModelIndex. QModelIndex topIndex = model->index ( 0, 0, QModelIndex() ); QVERIFY( model->parent ( topIndex ) == QModelIndex() ); // Common error test #2, make sure that a second level index has a parent // that is the first level index. if ( model->rowCount ( topIndex ) > 0 ) { QModelIndex childIndex = model->index ( 0, 0, topIndex ); QVERIFY( model->parent ( childIndex ) == topIndex ); } // Common error test #3, the second column should NOT have the same children // as the first column in a row. // Usually the second column shouldn't have children. QModelIndex topIndex1 = model->index ( 0, 1, QModelIndex() ); if ( model->rowCount ( topIndex1 ) > 0 ) { QModelIndex childIndex = model->index ( 0, 0, topIndex ); QModelIndex childIndex1 = model->index ( 0, 0, topIndex1 ); QVERIFY( childIndex != childIndex1 ); } // Full test, walk n levels deep through the model making sure that all // parent's children correctly specify their parent. checkChildren ( QModelIndex() ); } /*! Called from the parent() test. A model that returns an index of parent X should also return X when asking for the parent of the index. This recursive function does pretty extensive testing on the whole model in an effort to catch edge cases. This function assumes that rowCount(), columnCount() and index() already work. If they have a bug it will point it out, but the above tests should have already found the basic bugs because it is easier to figure out the problem in those tests then this one. */ void ModelTest::checkChildren ( const QModelIndex &parent, int currentDepth ) { // First just try walking back up the tree. QModelIndex p = parent; while ( p.isValid() ) p = p.parent(); // For models that are dynamically populated if ( model->canFetchMore ( parent ) ) { fetchingMore = true; model->fetchMore ( parent ); fetchingMore = false; } int rows = model->rowCount ( parent ); int columns = model->columnCount ( parent ); if ( rows > 0 ) QVERIFY( model->hasChildren ( parent ) ); // Some further testing against rows(), columns(), and hasChildren() QVERIFY( rows >= 0 ); QVERIFY( columns >= 0 ); if ( rows > 0 ) QVERIFY( model->hasChildren ( parent ) ); //qDebug() << "parent:" << model->data(parent).toString() << "rows:" << rows // << "columns:" << columns << "parent column:" << parent.column(); QVERIFY( !model->hasIndex ( rows + 1, 0, parent ) ); for ( int r = 0; r < rows; ++r ) { if ( model->canFetchMore ( parent ) ) { fetchingMore = true; model->fetchMore ( parent ); fetchingMore = false; } QVERIFY( !model->hasIndex ( r, columns + 1, parent ) ); for ( int c = 0; c < columns; ++c ) { QVERIFY( model->hasIndex ( r, c, parent ) ); QModelIndex index = model->index ( r, c, parent ); // rowCount() and columnCount() said that it existed... QVERIFY( index.isValid() ); // index() should always return the same index when called twice in a row QModelIndex modifiedIndex = model->index ( r, c, parent ); QVERIFY( index == modifiedIndex ); // Make sure we get the same index if we request it twice in a row QModelIndex a = model->index ( r, c, parent ); QModelIndex b = model->index ( r, c, parent ); QVERIFY( a == b ); // Some basic checking on the index that is returned QVERIFY( index.model() == model ); QCOMPARE( index.row(), r ); QCOMPARE( index.column(), c ); // While you can technically return a QVariant usually this is a sign // of a bug in data(). Disable if this really is ok in your model. // QVERIFY( model->data ( index, Qt::DisplayRole ).isValid() ); // If the next test fails here is some somewhat useful debug you play with. if (model->parent(index) != parent) { qDebug() << r << c << currentDepth << model->data(index).toString() << model->data(parent).toString(); qDebug() << index << parent << model->parent(index); // And a view that you can even use to show the model. // QTreeView view; // view.setModel(model); // view.show(); } // Check that we can get back our real parent. QCOMPARE( model->parent ( index ), parent ); // recursively go down the children if ( model->hasChildren ( index ) && currentDepth < 10 ) { //qDebug() << r << c << "has children" << model->rowCount(index); checkChildren ( index, ++currentDepth ); }/* else { if (currentDepth >= 10) qDebug() << "checked 10 deep"; };*/ // make sure that after testing the children that the index doesn't change. QModelIndex newerIndex = model->index ( r, c, parent ); QVERIFY( index == newerIndex ); } } } /*! Tests model's implementation of QAbstractItemModel::data() */ void ModelTest::data() { // Invalid index should return an invalid qvariant QVERIFY( !model->data ( QModelIndex() ).isValid() ); if ( model->rowCount() == 0 ) return; // A valid index should have a valid QVariant data QVERIFY( model->index ( 0, 0 ).isValid() ); // shouldn't be able to set data on an invalid index QVERIFY( !model->setData ( QModelIndex(), QLatin1String ( "foo" ), Qt::DisplayRole ) ); // General Purpose roles that should return a QString QVariant variant = model->data ( model->index ( 0, 0 ), Qt::ToolTipRole ); if ( variant.isValid() ) { QVERIFY( variant.canConvert() ); } variant = model->data ( model->index ( 0, 0 ), Qt::StatusTipRole ); if ( variant.isValid() ) { QVERIFY( variant.canConvert() ); } variant = model->data ( model->index ( 0, 0 ), Qt::WhatsThisRole ); if ( variant.isValid() ) { QVERIFY( variant.canConvert() ); } // General Purpose roles that should return a QSize variant = model->data ( model->index ( 0, 0 ), Qt::SizeHintRole ); if ( variant.isValid() ) { QVERIFY( variant.canConvert() ); } // General Purpose roles that should return a QFont QVariant fontVariant = model->data ( model->index ( 0, 0 ), Qt::FontRole ); if ( fontVariant.isValid() ) { QVERIFY( fontVariant.canConvert() ); } // Check that the alignment is one we know about QVariant textAlignmentVariant = model->data ( model->index ( 0, 0 ), Qt::TextAlignmentRole ); if ( textAlignmentVariant.isValid() ) { int alignment = textAlignmentVariant.toInt(); QCOMPARE( alignment, ( alignment & ( Qt::AlignHorizontal_Mask | Qt::AlignVertical_Mask ) ) ); } // General Purpose roles that should return a QColor QVariant colorVariant = model->data ( model->index ( 0, 0 ), Qt::BackgroundColorRole ); if ( colorVariant.isValid() ) { QVERIFY( colorVariant.canConvert() ); } colorVariant = model->data ( model->index ( 0, 0 ), Qt::TextColorRole ); if ( colorVariant.isValid() ) { QVERIFY( colorVariant.canConvert() ); } // Check that the "check state" is one we know about. QVariant checkStateVariant = model->data ( model->index ( 0, 0 ), Qt::CheckStateRole ); if ( checkStateVariant.isValid() ) { int state = checkStateVariant.toInt(); QVERIFY( state == Qt::Unchecked || state == Qt::PartiallyChecked || state == Qt::Checked ); } } /*! Store what is about to be inserted to make sure it actually happens \sa rowsInserted() */ void ModelTest::rowsAboutToBeInserted ( const QModelIndex &parent, int start, int end ) { Q_UNUSED(end); // qDebug() << "rowsAboutToBeInserted" << "start=" << start << "end=" << end << "parent=" << model->data ( parent ).toString() // << "current count of parent=" << model->rowCount ( parent ); // << "display of last=" << model->data( model->index(start-1, 0, parent) ); // qDebug() << model->index(start-1, 0, parent) << model->data( model->index(start-1, 0, parent) ); Changing c; c.parent = parent; c.oldSize = model->rowCount ( parent ); c.last = model->data ( model->index ( start - 1, 0, parent ) ); c.next = model->data ( model->index ( start, 0, parent ) ); insert.push ( c ); } /*! Confirm that what was said was going to happen actually did \sa rowsAboutToBeInserted() */ void ModelTest::rowsInserted ( const QModelIndex & parent, int start, int end ) { Changing c = insert.pop(); QVERIFY( c.parent == parent ); // qDebug() << "rowsInserted" << "start=" << start << "end=" << end << "oldsize=" << c.oldSize // << "parent=" << model->data ( parent ).toString() << "current rowcount of parent=" << model->rowCount ( parent ); // for (int ii=start; ii <= end; ii++) // { // qDebug() << "itemWasInserted:" << ii << model->data ( model->index ( ii, 0, parent )); // } // qDebug(); QVERIFY( c.oldSize + ( end - start + 1 ) == model->rowCount ( parent ) ); QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); if (c.next != model->data(model->index(end + 1, 0, c.parent))) { qDebug() << start << end; for (int i=0; i < model->rowCount(); ++i) qDebug() << model->index(i, 0).data().toString(); qDebug() << c.next << model->data(model->index(end + 1, 0, c.parent)); } QVERIFY( c.next == model->data ( model->index ( end + 1, 0, c.parent ) ) ); } void ModelTest::layoutAboutToBeChanged() { for ( int i = 0; i < qBound ( 0, model->rowCount(), 100 ); ++i ) changing.append ( QPersistentModelIndex ( model->index ( i, 0 ) ) ); } void ModelTest::layoutChanged() { for ( int i = 0; i < changing.count(); ++i ) { QPersistentModelIndex p = changing[i]; QVERIFY( p == model->index ( p.row(), p.column(), p.parent() ) ); } changing.clear(); } /*! Store what is about to be inserted to make sure it actually happens \sa rowsRemoved() */ void ModelTest::rowsAboutToBeRemoved ( const QModelIndex &parent, int start, int end ) { //qDebug() << "ratbr" << parent << start << end; Changing c; c.parent = parent; c.oldSize = model->rowCount ( parent ); c.last = model->data ( model->index ( start - 1, 0, parent ) ); c.next = model->data ( model->index ( end + 1, 0, parent ) ); remove.push ( c ); } /*! Confirm that what was said was going to happen actually did \sa rowsAboutToBeRemoved() */ void ModelTest::rowsRemoved ( const QModelIndex & parent, int start, int end ) { // qDebug() << "rr" << parent << start << end; Changing c = remove.pop(); QVERIFY( c.parent == parent ); QVERIFY( c.oldSize - ( end - start + 1 ) == model->rowCount ( parent ) ); QVERIFY( c.last == model->data ( model->index ( start - 1, 0, c.parent ) ) ); QVERIFY( c.next == model->data ( model->index ( start, 0, c.parent ) ) ); } void ModelTest::rowsAboutToBeMoved( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ) { Changing cs; cs.parent = srcParent; cs.oldSize = model->rowCount ( srcParent ); cs.last = model->data ( model->index ( start - 1, 0, srcParent ) ); cs.next = model->data ( model->index ( end + 1, 0, srcParent ) ); remove.push ( cs ); Changing cd; cd.parent = destParent; cd.oldSize = model->rowCount ( destParent ); cd.last = model->data ( model->index ( destinationRow - 1, 0, destParent ) ); cd.next = model->data ( model->index ( destinationRow, 0, destParent ) ); insert.push ( cd ); } void ModelTest::rowsMoved( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ) { Changing cd = insert.pop(); QVERIFY ( cd.parent == destParent ); if (srcParent == destParent) { QVERIFY ( cd.oldSize == model->rowCount ( destParent ) ); // TODO: Find out what I can assert here about last and next. // QVERIFY ( cd.last == model->data ( model->index ( destinationRow - 1, 0, cd.parent ) ) ); // QVERIFY ( cd.next == model->data ( model->index ( destinationRow + (end - start + 1), 0, cd.parent ) ) ); } else { QVERIFY ( cd.oldSize + ( end - start + 1 ) == model->rowCount ( destParent ) ); QVERIFY ( cd.last == model->data ( model->index ( destinationRow - 1, 0, cd.parent ) ) ); QVERIFY ( cd.next == model->data ( model->index ( destinationRow + (end - start + 1), 0, cd.parent ) ) ); } Changing cs = remove.pop(); QVERIFY ( cs.parent == srcParent ); if (srcParent == destParent) { QVERIFY ( cs.oldSize == model->rowCount ( srcParent ) ); } else { QVERIFY ( cs.oldSize - ( end - start + 1 ) == model->rowCount ( srcParent ) ); QVERIFY ( cs.last == model->data ( model->index ( start - 1, 0, srcParent ) ) ); QVERIFY ( cs.next == model->data ( model->index ( start, 0, srcParent ) ) ); } } keepassx-2.0.3/tests/modeltest.h000066400000000000000000000060341276304217300166620ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** GNU Lesser General Public License Usage ** This file may be used under the terms of the GNU Lesser General Public ** License version 2.1 as published by the Free Software Foundation and ** appearing in the file LICENSE.LGPL included in the packaging of this ** file. Please review the following information to ensure the GNU Lesser ** General Public License version 2.1 requirements will be met: ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU General ** Public License version 3.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of this ** file. Please review the following information to ensure the GNU General ** Public License version 3.0 requirements will be met: ** http://www.gnu.org/copyleft/gpl.html. ** ** Other Usage ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** ** ** ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef MODELTEST_H #define MODELTEST_H #include #include #include class ModelTest : public QObject { Q_OBJECT public: ModelTest( QAbstractItemModel *model, QObject *parent = 0 ); private Q_SLOTS: void nonDestructiveBasicTest(); void rowCount(); void columnCount(); void hasIndex(); void index(); void parent(); void data(); protected Q_SLOTS: void runAllTests(); void layoutAboutToBeChanged(); void layoutChanged(); void rowsAboutToBeInserted( const QModelIndex &parent, int start, int end ); void rowsInserted( const QModelIndex & parent, int start, int end ); void rowsAboutToBeRemoved( const QModelIndex &parent, int start, int end ); void rowsRemoved( const QModelIndex & parent, int start, int end ); void rowsAboutToBeMoved ( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ); void rowsMoved ( const QModelIndex &srcParent, int start, int end, const QModelIndex &destParent, int destinationRow ); private: void checkChildren( const QModelIndex &parent, int currentDepth = 0 ); QAbstractItemModel *model; struct Changing { QModelIndex parent; int oldSize; QVariant last; QVariant next; }; QStack insert; QStack remove; bool fetchingMore; QList changing; }; #endif keepassx-2.0.3/tests/tests.h000066400000000000000000000042301276304217300160200ustar00rootroot00000000000000/* * Copyright (C) 2011 Felix Geyer * Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef KEEPASSX_TESTS_H #define KEEPASSX_TESTS_H #include // backport QTEST_GUILESS_MAIN, QTRY_VERIFY and QTRY_COMPARE from Qt 5 #ifndef QTEST_GUILESS_MAIN #define QTEST_GUILESS_MAIN(TestObject) \ int main(int argc, char* argv[]) \ { \ QCoreApplication app(argc, argv); \ TestObject tc; \ return QTest::qExec(&tc, argc, argv); \ } #endif // QTEST_GUILESS_MAIN #ifndef QTRY_VERIFY #define KEEPASSX_VERIFY_WITH_TIMEOUT(__expr, __timeout) \ do { \ const int __step = 50; \ const int __timeoutValue = __timeout; \ if (!(__expr)) { \ QTest::qWait(0); \ } \ for (int __i = 0; __i < __timeoutValue && !(__expr); __i+=__step) { \ QTest::qWait(__step); \ } \ QVERIFY(__expr); \ } while (0) #define QTRY_VERIFY(__expr) KEEPASSX_VERIFY_WITH_TIMEOUT(__expr, 5000) #endif // QTRY_VERIFY #ifndef QTRY_COMPARE #define KEEPASSX_COMPARE_WITH_TIMEOUT(__expr, __expected, __timeout) \ do { \ const int __step = 50; \ const int __timeoutValue = __timeout; \ if ((__expr) != (__expected)) { \ QTest::qWait(0); \ } \ for (int __i = 0; __i < __timeoutValue && ((__expr) != (__expected)); __i+=__step) { \ QTest::qWait(__step); \ } \ QCOMPARE(__expr, __expected); \ } while (0) #define QTRY_COMPARE(__expr, __expected) KEEPASSX_COMPARE_WITH_TIMEOUT(__expr, __expected, 5000) #endif // QTRY_COMPARE #endif // KEEPASSX_TESTS_H keepassx-2.0.3/utils/000077500000000000000000000000001276304217300145045ustar00rootroot00000000000000keepassx-2.0.3/utils/CMakeLists.txt000066400000000000000000000017531276304217300172520ustar00rootroot00000000000000# Copyright (C) 2010 Felix Geyer # # 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 or (at your option) # version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . include_directories(../src) add_executable(kdbx-extract kdbx-extract.cpp) target_link_libraries(kdbx-extract keepassx_core ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${GCRYPT_LIBRARIES} ${ZLIB_LIBRARIES}) keepassx-2.0.3/utils/kdbx-extract.cpp000066400000000000000000000046731276304217300176220ustar00rootroot00000000000000/* * Copyright (C) 2010 Felix Geyer * * 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 or (at your option) * version 3 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "core/Database.h" #include "crypto/Crypto.h" #include "format/KeePass2Reader.h" #include "keys/CompositeKey.h" #include "keys/FileKey.h" #include "keys/PasswordKey.h" int main(int argc, char **argv) { QCoreApplication app(argc, argv); if (app.arguments().size() != 3) { qCritical("Usage: kdbx-extract "); return 1; } if (!Crypto::init()) { qFatal("Fatal error while testing the cryptographic functions:\n%s", qPrintable(Crypto::errorString())); } CompositeKey key; if (QFile::exists(app.arguments().at(1))) { FileKey fileKey; fileKey.load(app.arguments().at(1)); key.addKey(fileKey); } else { PasswordKey password; password.setPassword(app.arguments().at(1)); key.addKey(password); } QFile dbFile(app.arguments().at(2)); if (!dbFile.exists()) { qCritical("File does not exist."); return 1; } if (!dbFile.open(QIODevice::ReadOnly)) { qCritical("Unable to open file."); return 1; } KeePass2Reader reader; reader.setSaveXml(true); Database* db = reader.readDatabase(&dbFile, key); delete db; QByteArray xmlData = reader.xmlData(); if (reader.hasError()) { if (xmlData.isEmpty()) { qCritical("Error while reading the database:\n%s", qPrintable(reader.errorString())); return 1; } else { qWarning("Error while parsing the database:\n%s\n", qPrintable(reader.errorString())); } } QTextStream out(stdout); out << xmlData.constData() << "\n"; return 0; }