libpdb-redo-3.0.5/0000775000175000017500000000000014364232314013546 5ustar maartenmaartenlibpdb-redo-3.0.5/.gitignore0000664000175000017500000000010214364232314015527 0ustar maartenmaarten.vscode/ .gdb_history data/ .gitignore **/build/ src/revision.hpp libpdb-redo-3.0.5/.gitmodules0000664000175000017500000000012714364232314015723 0ustar maartenmaarten[submodule "newuoa-cpp"] path = newuoa url = https://github.com/elsid/newuoa-cpp.git libpdb-redo-3.0.5/CMakeLists.txt0000664000175000017500000002264114364232314016313 0ustar maartenmaarten# SPDX-License-Identifier: BSD-2-Clause # Copyright (c) 2021 NKI/AVL, Netherlands Cancer Institute # Redistribution 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 above copyright notice, this # list of conditions and the following disclaimer # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cmake_minimum_required(VERSION 3.16) # set the project name project(pdb-redo VERSION 3.0.5 LANGUAGES CXX C) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake") # Unit tests option(ENABLE_TESTING "Build test exectuables" OFF) include(GNUInstallDirs) include(CheckFunctionExists) include(CheckIncludeFiles) include(CheckLibraryExists) include(CMakePackageConfigHelpers) include(CheckCXXSourceCompiles) include(GenerateExportHeader) set(CXX_EXTENSIONS OFF) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter -Wno-missing-field-initializers") elseif(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") endif() # Building shared libraries? option(BUILD_SHARED_LIBS "Build a shared library instead of a static one" OFF) # We do not want to write an export file for all our symbols... set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON) # Optionally build a version to be installed inside CCP4 option(BUILD_FOR_CCP4 "Build a version to be installed in CCP4" OFF) # Unit tests option(ENABLE_TESTING "Build test exectuables" OFF) if(BUILD_FOR_CCP4) if("$ENV{CCP4}" STREQUAL "" OR NOT EXISTS $ENV{CCP4}) message(FATAL_ERROR "A CCP4 built was requested but CCP4 was not sourced") else() list(APPEND CMAKE_MODULE_PATH "$ENV{CCP4}") list(APPEND CMAKE_PREFIX_PATH "$ENV{CCP4}") set(CMAKE_INSTALL_PREFIX "$ENV{CCP4}") # This is the only option: if(WIN32) set(BUILD_SHARED_LIBS ON) endif() endif("$ENV{CCP4}" STREQUAL "" OR NOT EXISTS $ENV{CCP4}) endif() # Check if CCP4 is available if(EXISTS "$ENV{CCP4}") set(CCP4 $ENV{CCP4}) set(CLIBD ${CCP4}/lib/data) endif() if(CCP4 AND NOT CLIBD) set(CLIBD ${CCP4}/lib/data) endif() if(MSVC) # make msvc standards compliant... add_compile_options(/permissive-) macro(get_WIN32_WINNT version) if(WIN32 AND CMAKE_SYSTEM_VERSION) set(ver ${CMAKE_SYSTEM_VERSION}) string(REPLACE "." "" ver ${ver}) string(REGEX REPLACE "([0-9])" "0\\1" ver ${ver}) set(${version} "0x${ver}") endif() endmacro() get_WIN32_WINNT(ver) add_definitions(-D_WIN32_WINNT=${ver}) endif() # Libraries find_package(CCP4 REQUIRED ccp4c clipper-core clipper-ccp4 clipper-contrib) if(NOT PDB_REDO_META) find_package(newuoa REQUIRED) find_package(cifpp 5.0.4 REQUIRED) endif() find_package(GSL REQUIRED) # Create a revision file, containing the current git version info include(VersionString) write_version_header("${PROJECT_SOURCE_DIR}/src" "LibPDBREDO") # Sources set(project_sources ${PROJECT_SOURCE_DIR}/src/AtomShape.cpp ${PROJECT_SOURCE_DIR}/src/BondMap.cpp ${PROJECT_SOURCE_DIR}/src/ClipperWrapper.cpp ${PROJECT_SOURCE_DIR}/src/Compound.cpp ${PROJECT_SOURCE_DIR}/src/DistanceMap.cpp ${PROJECT_SOURCE_DIR}/src/MapMaker.cpp ${PROJECT_SOURCE_DIR}/src/Ramachandran.cpp ${PROJECT_SOURCE_DIR}/src/ResolutionCalculator.cpp ${PROJECT_SOURCE_DIR}/src/SkipList.cpp ${PROJECT_SOURCE_DIR}/src/Statistics.cpp ${PROJECT_SOURCE_DIR}/src/Symmetry-2.cpp ${PROJECT_SOURCE_DIR}/src/Minimizer.cpp ${PROJECT_SOURCE_DIR}/src/Restraints.cpp ) set(project_headers ${PROJECT_SOURCE_DIR}/include/pdb-redo/AtomShape.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/BondMap.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/ClipperWrapper.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Compound.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/DistanceMap.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/MapMaker.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Ramachandran.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/ResolutionCalculator.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/SkipList.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Statistics.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Symmetry-2.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Minimizer.hpp ${PROJECT_SOURCE_DIR}/include/pdb-redo/Restraints.hpp ) add_library(pdb-redo ${project_sources} ${project_headers}) add_library(pdb-redo::pdb-redo ALIAS pdb-redo) set_target_properties(pdb-redo PROPERTIES POSITION_INDEPENDENT_CODE ON) generate_export_header(pdb-redo EXPORT_FILE_NAME pdb-redo/exports.hpp) target_include_directories(pdb-redo PUBLIC "$" "$" ${CCP4_INCLUDE_DIRS}) target_link_libraries(pdb-redo PUBLIC cifpp::cifpp newuoa::newuoa ${CCP4_LIBRARIES} ${GSL_LIBRARIES}) if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") target_link_options(pdb-redo PRIVATE -undefined dynamic_lookup) endif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}) set(LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) # Install rules install(TARGETS pdb-redo EXPORT pdb-redoTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT pdb-redoTargets FILE "pdb-redoTargets.cmake" NAMESPACE pdb-redo:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pdb-redo ) install( DIRECTORY include/pdb-redo DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} COMPONENT Devel ) install( FILES ${PROJECT_BINARY_DIR}/pdb-redo/exports.hpp DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/pdb-redo/ COMPONENT Devel ) configure_package_config_file(${PROJECT_SOURCE_DIR}/cmake/pdb-redoConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/pdb-redo/pdb-redoConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pdb-redo PATH_VARS INCLUDE_INSTALL_DIR LIBRARY_INSTALL_DIR ) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pdb-redo/pdb-redoConfig.cmake" "${CMAKE_CURRENT_BINARY_DIR}/pdb-redo/pdb-redoConfigVersion.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pdb-redo COMPONENT Devel ) set(pdb-redo_MAJOR_VERSION ${CMAKE_PROJECT_VERSION_MAJOR}) set_target_properties(pdb-redo PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${pdb-redo_MAJOR_VERSION} INTERFACE_pdb-redo_MAJOR_VERSION ${pdb-redo_MAJOR_VERSION}) set_property(TARGET pdb-redo APPEND PROPERTY COMPATIBLE_INTERFACE_STRING pdb-redo_MAJOR_VERSION ) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/pdb-redo/pdb-redoConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY AnyNewerVersion ) # pkgconfig support set(prefix ${CMAKE_INSTALL_PREFIX}) set(exec_prefix ${CMAKE_INSTALL_PREFIX}) set(libdir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}) set(includedir ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}) configure_file(${PROJECT_SOURCE_DIR}/cmake/libpdb-redo.pc.in ${CMAKE_CURRENT_BINARY_DIR}/libpdb-redo.pc.in @ONLY) file(GENERATE OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/libpdb-redo.pc INPUT ${CMAKE_CURRENT_BINARY_DIR}/libpdb-redo.pc.in) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpdb-redo.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) if(ENABLE_TESTING) enable_testing() list(APPEND PDB_REDO_tests pdb-redo-unit rsr) foreach(PDB_REDO_TEST IN LISTS PDB_REDO_tests) set(PDB_REDO_TEST "${PDB_REDO_TEST}-test") set(PDB_REDO_TEST_SOURCE "${PROJECT_SOURCE_DIR}/test/${PDB_REDO_TEST}.cpp") add_executable(${PDB_REDO_TEST} ${PDB_REDO_TEST_SOURCE}) target_link_libraries(${PDB_REDO_TEST} PRIVATE pdb-redo) if(MSVC) # Specify unwind semantics so that MSVC knowns how to handle exceptions target_compile_options(${PDB_REDO_TEST} PRIVATE /EHsc) endif() add_custom_target("run-${PDB_REDO_TEST}" DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/Run${PDB_REDO_TEST}.touch ${PDB_REDO_TEST}) add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Run${PDB_REDO_TEST}.touch COMMAND $ -- ${PROJECT_SOURCE_DIR}/test) add_test(NAME ${PDB_REDO_TEST} COMMAND $ -- ${PROJECT_SOURCE_DIR}/test) endforeach() endif() # Tarball generation set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") set(CPACK_SOURCE_TGZ ON) set(CPACK_SOURCE_TBZ2 OFF) set(CPACK_SOURCE_TXZ OFF) set(CPACK_SOURCE_TZ OFF) set(CPACK_SOURCE_IGNORE_FILES "/data/components.cif;/build;/.vscode;/.git;/regex/doc;/regex/example;/regex/meta;/regex/performance;/regex/test") set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-${PROJECT_VERSION}") set(CPACK_SOURCE_PACKAGE_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}) include(CPack) libpdb-redo-3.0.5/LICENSE0000664000175000017500000000247714364232314014565 0ustar maartenmaartenBSD-2-Clause License Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute All rights reserved. Redistribution 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 above copyright notice, this list of conditions and the following disclaimer 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. libpdb-redo-3.0.5/README.md0000664000175000017500000001616514364232314015036 0ustar maartenmaartenlibpdb-redo =========== This is the README file for libpdb-redo. This library contains code shared by the various tools we develop at the NKI for the [PDB-REDO](https://pdb-redo.eu/) project. Requirements ------------ The code for this library was written in C++17. You therefore need a recent compiler to build it. For the development gcc with version 8.4.0 and up and clang 9.0 have been used. On MS Windows you'll need at least the 2019 version of MSVC. Other requirements are: - The clipper library, either the latest from CCP4 or version 2020-11-09 - [newuoa-cpp](https://github.com/elsid/newuoa-cpp), required to calculate atom radii - [libcifpp](https://github.com/PDB-REDO/libcifpp.git), a library containing code to read and manipulate macro molecular models in mmCIF and PDB format. - [cmake](https://cmake.org) Building -------- This recipe assumes you're building on a Unix like operating system and will build only static libraries which will be installed in the `.local` folder in your home directory, which means you do not need super user powers to build and install. However, this also means you should have the `$HOME/.local/bin` path in your _PATH_ environment variable. To set the path correctly, add the following line to your .bashrc file. ```bash export PATH="$HOME/.local/bin:$PATH" ``` This tutorial is building on Ubuntu 18.04 LTS which comes with a very old build environment. We therefore `apt-get install g++-8` to make sure we have a usable compiler. If you have a different compiler you should replace the `g++-8` string with the appropriate compiler name. cmake ----- Building the libraries and tools is done using [CMake](https://cmake.org/). Please make sure you have at least version 3.16. If not, you will have to build and install cmake yourself and use it instead of the system provided version. Building and installing cmake is done as follows: ```bash wget https://github.com/Kitware/CMake/releases/download/v3.21.3/cmake-3.21.3.tar.gz tar xf cmake-3.21.3.tar.gz cd cmake-3.21.3 ./configure --prefix=$HOME/.local make make install ``` After installing cmake, make sure it is found and works correctly. In the terminal type `cmake --version` and the result should be: ```bash $ cmake --version cmake version 3.21.3 CMake suite maintained and supported by Kitware (kitware.com/cmake). ``` boost ----- So assuming you have a good compiler, we start by making sure you have the correct boost. This is perhaps the most tricky part and most often results in link errors or crashing applications. If your system comes with a packages boost version 1.70 or higher I suggest you use that and skip this step. If however the OS is bundled with an older version you will have to build boost yourself. Start by downloading the boost source code, extract, build and then install it. However, before building boost make sure you have the development packages for libz and bzip2 installed! For Ubuntu use `apt-get install zlib1g-dev libbz2-dev`. (In this example I'm leaving out the python module of boost since it takes a long time to build and is not needed by any of my code.) ```bash wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2 tar xf boost_1_77_0.tar.bz2 cd boost_1_77 ./bootstrap.sh ./b2 stage link=static --prefix=$HOME/.local --without-python ./b2 install link=static --prefix=$HOME/.local --without-python ``` That should install a recent boost in your .local folder. I've used boost version 1.77 in this example, but anything since 1.70 should work. Please check the output of the `b2` command above to make sure the zlib and bzip2 components are included. mrc --- Although not strictly required, and not supported at all on MacOS, the tool [`mrc`](https://github.com/mhekkel/mrc.git) is highly recommended. It can be used to bundle data files into an executable making the executable more easily deployable. If you decide not to use this tool, you must make sure you have the data files for libcifpp available at run time. ```bash git clone https://github.com/mhekkel/mrc.git cd mrc mkdir build cd build cmake .. -DCMAKE_CXX_COMPILER=g++-8 -DCMAKE_INSTALL_PREFIX=$HOME/.local cmake --build . ctest . cmake --install . ``` Now run the tests: ```bash ctest . ``` There should be no errors and all tests should pass. ```bash cmake --install . ``` libcifpp -------- We will build libcifpp with cmake as well. Every dependency should be up to date by now, so we can simply fetch, extract, configure and build the lib: ```bash git clone https://github.com/PDB-REDO/libcifpp.git cd libcifpp mkdir build cd build cmake .. -DCMAKE_CXX_COMPILER=g++-8 -DCIFPP_BUILD_TESTS=ON cmake --build . ``` Again, we've opted to build tests. Make sure they work without errors: ```bash ctest . ``` If all is OK, install: ```bash cmake --install . ``` An optional step here is to install the update script for CCD and pdbx dictionary files. To do this, you can add the -DINSTALL_UPDATE_SCRIPT=ON flag to the configure step: ```bash cmake .. -DCMAKE_CXX_COMPILER=g++-8 -DCIFPP_BUILD_TESTS=ON -DINSTALL_UPDATE_SCRIPT=ON ``` If you then run `sudo cmake --install .` the cron script will be installed. However, you will need to have sudo rights to do so. At this stage you can already build tools like [`DSSP`](https://github.com/PDB-REDO/dssp.git) and [`tortoize`](https://github.com/PDB-REDO/tortoize.git). clipper ------- The pdb-redo library depends on a recent version of clipper. If your system contains version 2.1.20201109 of clipper, you can simply install the system supplied development package for clipper and skip this step. On Debian 10 you would e.g. type `apt-get install libclipper-dev` to do this. But we're using Ubuntu 18.04 here, so we need to build clipper ourselves. Note that clipper depends on _ccp4_ and _fftw_. These libraries are hopefully supported by your operating system. On Ubuntu 18.04 I had to install - fftw-dev - sfftw-dev - libccp4-dev Unfortunately, this is the only step where I'm using `sudo`. If you cannot use sudo, you'll have to build the packages yourself installing them in `$(HOME)/.local`. ```bash sudo apt-get install fftw-dev sfftw-dev libccp4-dev ``` Then the steps required were: ```bash wget ftp://ftp.ccp4.ac.uk/opensource/clipper-2.1.20201109.tar.gz tar xf clipper-2.1.20201109.tar.gz cd clipper-2.1/ ./configure --prefix=$HOME/.local --enable-ccp4 make make install ``` newuoa ------ This library contains a C++ implementation of the NEWUOA algorithm. This is required to calculate atom radii. The default package will build a shared library, but we prefer a static one: ```bash git clone https://github.com/elsid/newuoa-cpp.git cd newuoa-cpp mkdir build cd build sed -e's/ SHARED / STATIC /g' -i.bak ../CMakeLists.txt cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/.local cmake --build . cmake --install . ``` libpdb-redo ----------- Finally, we've arrived at building [`libpdb-redo`](https://github.com/PDB-REDO/libpdb-redo.git). The steps required now are perhaps familiar: ```bash git clone https://github.com/PDB-REDO/libpdb-redo.git cd libpdb-redo mkdir build cd build cmake .. -DCMAKE_CXX_COMPILER=g++-8 -DPDB_REDO_BUILD_TESTS=ON cmake --build . ctest . cmake --install . ``` Again, errors should not happen here. libpdb-redo-3.0.5/changelog0000664000175000017500000000173214364232314015423 0ustar maartenmaartenVersion 3.0.5 - Refinement work - Fix regression in bondmap voor sugars Version 3.0.4 - Changes for packaging Version 3.0.3 - Based on new libcifpp Version 3.0.2 - Fix error in statistics calculation for atoms with an occupancy lower than 1. Version 3.0.1 - Fix error in sampling rate when recalculating maps Version 3.0.0 - Real space refinement update - Fix reading from maps instead of mtz Version 2.0.4 - Better real space refinement engine - bug fixes Version 2.0.3 - Fix version number, sorry. Version 2.0.2 - Changed more signatures to use std::filesystem::path instead of std::string. To ease compilation on MSVC Version 2.0.1 - Fix math problem, on some system combinations abs(x) would first truncate x to an integer. Replacing with std::abs(x) restores normal behaviour. Version 2.0.0 - Updated build configuration - removed bzip2 support Version 1.1.0 - Now with cmake instead of GNU configure Version 1.0.0 - First public release as a split-out library libpdb-redo-3.0.5/cmake/0000775000175000017500000000000014364232314014626 5ustar maartenmaartenlibpdb-redo-3.0.5/cmake/GetGitRevisionDescription.cmake0000664000175000017500000002245714364232314022750 0ustar maartenmaarten# - 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( [ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR]) # # 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_describe_working_tree( [ ...]) # # Returns the results of git describe on the working tree (--dirty option), # 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. # # git_local_changes() # # Returns either "CLEAN" or "DIRTY" with respect to uncommitted changes. # Uses the return code of "git diff-index --quiet HEAD --". # Does not regard untracked files. # # Requires CMake 2.6 or newer (uses the 'function' command) # # Original Author: # 2009-2020 Ryan Pavlik # http://academic.cleardefinition.com # # Copyright 2009-2013, Iowa State University. # Copyright 2013-2020, Ryan Pavlik # Copyright 2013-2020, Contributors # SPDX-License-Identifier: BSL-1.0 # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt 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 _git_find_closest_git_dir finds the next closest .git directory # that is part of any directory in the path defined by _start_dir. # The result is returned in the parent scope variable whose name is passed # as variable _git_dir_var. If no .git directory can be found, the # function returns an empty string via _git_dir_var. # # Example: Given a path C:/bla/foo/bar and assuming C:/bla/.git exists and # neither foo nor bar contain a file/directory .git. This wil return # C:/bla/.git # function(_git_find_closest_git_dir _start_dir _git_dir_var) set(cur_dir "${_start_dir}") set(git_dir "${_start_dir}/.git") while(NOT EXISTS "${git_dir}") # .git dir not found, search parent directories set(git_previous_parent "${cur_dir}") get_filename_component(cur_dir "${cur_dir}" DIRECTORY) if(cur_dir STREQUAL git_previous_parent) # We have reached the root directory, we are not in git set(${_git_dir_var} "" PARENT_SCOPE) return() endif() set(git_dir "${cur_dir}/.git") endwhile() set(${_git_dir_var} "${git_dir}" PARENT_SCOPE) endfunction() function(get_git_head_revision _refspecvar _hashvar) _git_find_closest_git_dir("${CMAKE_CURRENT_SOURCE_DIR}" GIT_DIR) if("${ARGN}" STREQUAL "ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR") set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR TRUE) else() set(ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR FALSE) endif() if(NOT "${GIT_DIR}" STREQUAL "") file(RELATIVE_PATH _relative_to_source_dir "${CMAKE_SOURCE_DIR}" "${GIT_DIR}") if("${_relative_to_source_dir}" MATCHES "[.][.]" AND NOT ALLOW_LOOKING_ABOVE_CMAKE_SOURCE_DIR) # We've gone above the CMake root dir. set(GIT_DIR "") endif() endif() if("${GIT_DIR}" STREQUAL "") set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE) set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE) return() endif() # Check if the current source dir is a git submodule or a worktree. # In both cases .git is a file instead of a directory. # if(NOT IS_DIRECTORY ${GIT_DIR}) # The following git command will return a non empty string that # points to the super project working tree if the current # source dir is inside a git submodule. # Otherwise the command will return an empty string. # execute_process( COMMAND "${GIT_EXECUTABLE}" rev-parse --show-superproject-working-tree WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(NOT "${out}" STREQUAL "") # If out is empty, GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a submodule file(READ ${GIT_DIR} submodule) string(REGEX REPLACE "gitdir: (.*)$" "\\1" GIT_DIR_RELATIVE ${submodule}) string(STRIP ${GIT_DIR_RELATIVE} GIT_DIR_RELATIVE) get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH) get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE) set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD") else() # GIT_DIR/CMAKE_CURRENT_SOURCE_DIR is in a worktree file(READ ${GIT_DIR} worktree_ref) # The .git directory contains a path to the worktree information directory # inside the parent git repo of the worktree. # string(REGEX REPLACE "gitdir: (.*)$" "\\1" git_worktree_dir ${worktree_ref}) string(STRIP ${git_worktree_dir} git_worktree_dir) _git_find_closest_git_dir("${git_worktree_dir}" GIT_DIR) set(HEAD_SOURCE_FILE "${git_worktree_dir}/HEAD") endif() else() set(HEAD_SOURCE_FILE "${GIT_DIR}/HEAD") 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 "${HEAD_SOURCE_FILE}") return() endif() set(HEAD_FILE "${GIT_DATA}/HEAD") configure_file("${HEAD_SOURCE_FILE}" "${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 --tags --always ${hash} ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_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_describe_working_tree _var) if(NOT GIT_FOUND) find_package(Git QUIET) endif() if(NOT GIT_FOUND) set(${_var} "GIT-NOTFOUND" PARENT_SCOPE) return() endif() execute_process( COMMAND "${GIT_EXECUTABLE}" describe --dirty ${ARGN} WORKING_DIRECTORY "${CMAKE_CURRENT_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() function(git_local_changes _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() execute_process( COMMAND "${GIT_EXECUTABLE}" diff-index --quiet HEAD -- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" RESULT_VARIABLE res OUTPUT_VARIABLE out ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) if(res EQUAL 0) set(${_var} "CLEAN" PARENT_SCOPE) else() set(${_var} "DIRTY" PARENT_SCOPE) endif() endfunction() libpdb-redo-3.0.5/cmake/GetGitRevisionDescription.cmake.in0000664000175000017500000000251214364232314023343 0ustar maartenmaarten# # 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 2009-2012, Iowa State University # Copyright 2011-2015, Contributors # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) # SPDX-License-Identifier: BSL-1.0 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() libpdb-redo-3.0.5/cmake/VersionString.cmake0000664000175000017500000000627414364232314020455 0ustar maartenmaarten# SPDX-License-Identifier: BSD-2-Clause # Copyright (c) 2021 NKI/AVL, Netherlands Cancer Institute # Redistribution 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 above copyright notice, this # list of conditions and the following disclaimer # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR # ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cmake_minimum_required(VERSION 3.15) # Create a revision file, containing the current git version info, if any function(write_version_header dir) # parameter check if(NOT IS_DIRECTORY ${dir}) message(FATAL_ERROR "First parameter to write_version_header should be a directory where the final revision.hpp file will be placed") endif() include(GetGitRevisionDescription) if(NOT(GIT-NOTFOUND OR HEAD-HASH-NOTFOUND)) git_describe_working_tree(BUILD_VERSION_STRING --match=build --dirty) if(BUILD_VERSION_STRING MATCHES "build-([0-9]+)-g([0-9a-f]+)(-dirty)?") set(BUILD_GIT_TAGREF "${CMAKE_MATCH_2}") if(CMAKE_MATCH_3) set(BUILD_VERSION_STRING "${CMAKE_MATCH_1}*") else() set(BUILD_VERSION_STRING "${CMAKE_MATCH_1}") endif() endif() else() message(WARNING "no git info available, cannot update version string") endif() string(TIMESTAMP BUILD_DATE_TIME "%Y-%m-%dT%H:%M:%SZ" UTC) if(ARGC GREATER 1) set(VAR_PREFIX "${ARGV1}") endif() file(WRITE "${PROJECT_BINARY_DIR}/revision.hpp.in" [[// Generated revision file #pragma once #include const char k@VAR_PREFIX@ProjectName[] = "@PROJECT_NAME@"; const char k@VAR_PREFIX@VersionNumber[] = "@PROJECT_VERSION@"; const char k@VAR_PREFIX@VersionGitTag[] = "@BUILD_GIT_TAGREF@"; const char k@VAR_PREFIX@BuildInfo[] = "@BUILD_VERSION_STRING@"; const char k@VAR_PREFIX@BuildDate[] = "@BUILD_DATE_TIME@"; inline void write_version_string(std::ostream &os, bool verbose) { os << k@VAR_PREFIX@ProjectName << " version " << k@VAR_PREFIX@VersionNumber << std::endl; if (verbose) { os << "build: " << k@VAR_PREFIX@BuildInfo << ' ' << k@VAR_PREFIX@BuildDate << std::endl; if (k@VAR_PREFIX@VersionGitTag[0] != 0) os << "git tag: " << k@VAR_PREFIX@VersionGitTag << std::endl; } } ]]) configure_file("${PROJECT_BINARY_DIR}/revision.hpp.in" "${dir}/revision.hpp" @ONLY) endfunction() libpdb-redo-3.0.5/cmake/libpdb-redo.pc.in0000664000175000017500000000055314364232314017745 0ustar maartenmaartenprefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: @PROJECT_NAME@ Description: Library containing shared code for the various programs in the PDB-REDO project Version: @PROJECT_VERSION@ Libs: -L${libdir} -lpdb-redo -lgsl Cflags: -I${includedir} Requires: @AX_PACKAGE_REQUIRES@ Requires.private: @AX_PACKAGE_REQUIRES_PRIVATE@libpdb-redo-3.0.5/cmake/pdb-redoConfig.cmake.in0000664000175000017500000000076414364232314021066 0ustar maartenmaarten@PACKAGE_INIT@ include(CMakeFindDependencyMacro) find_dependency(newuoa 0.1.2 REQUIRED) find_dependency(cifpp 5.0.4 REQUIRED) find_dependency(CCP4 REQUIRED ccp4c clipper-core clipper-ccp4 clipper-contrib) include(FindPkgConfig) pkg_check_modules(GSL gsl REQUIRED) INCLUDE("${CMAKE_CURRENT_LIST_DIR}/pdb-redoTargets.cmake") set_and_check(PDB-REDO_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set_and_check(PDB-REDO_LIBRARY_DIR "@PACKAGE_LIBRARY_INSTALL_DIR@") check_required_components(pdb-redo) libpdb-redo-3.0.5/examples/0000775000175000017500000000000014364232314015364 5ustar maartenmaartenlibpdb-redo-3.0.5/examples/1cbs.cif.gz0000664000175000017500000011047314364232314017324 0ustar maartenmaarten_1cbs.cif\s⸲Py`O్:@9@&@2ske|$[m<띙RZV-ޚi(UaP7O%`aqko${~3OP?=;2Èl}xK[HզoX8xh[ JO藸4㛤Kdž"˲SUX)_Mt-'*(S/c}j}l ۵Ct-=xBBD {Iߤ&Q iʾy.e:+"mQٜHB;t(_чf s釨s`ST5}S{k#_eyG6bj5|~Ʊ5J@.G%?MI{E}` > F,8Gzv=pXz.;R ȔLv CO;qZoA+MpV+5~o_EgnIxQC¦n&I}ˊZ4n S'DzG-a8hriڀȽnsȸ C`I7<./Txm S +sLC:SyeO #`:|=Gth0N6t? *FQ!B@+0/&vrlwǭ<$]ݘmBfW~]0/dsê<[껎5(\4A +{WT(XQUFUv3QU'8BTã4A}vMb*s%3QmØ$FUg&(VED>Ex{j0j#u) 6L]W e2}cr7^߾N֫eF}xLe|\4F p{x|Mxw!_wt~\h|y}YN >Ht2cّ.iXfs;,;#CpZg"('\b!gLy F:$݋ItdĺF7]zn D"Ut9ts w"˻Fځyo4۩lpd=DMw!F&<ȋ>oTTx'$\ H8Y7ip iLot. d:TNZM8nbh(h=NoZUd} c$X&5*h5x,|MsZFU^]^]%B* qvp1n[υ)qxe( (B_osk];\}^\p'6u0P8x Qfր'ASՀ `(O7EnsENDE z(ro ӎN1#DE Nt8 N1zb&(8EۀN1kb: KN1u(INg#Sn)èSXSNhP)r5]KEοS\ XT쇛 F}Hw&nU5qRu$:@m;Cbp9BTs Rvcy{> 1 F`{oUʣ˚i??s2Z74խj"uv/ApOGagŻ*M˫PgM6y@0 y!X9P:9]pgoKV;o?73j@3,R6fd.C*vz },~^yALR\&mlXcmZ6Sj+:&ɝrmquEx =5aXIh~ƴԓ+IԷFa$m % qۛV%JFa7Zc@uȳQpGKT &^7vt;.sKOxg|oef8{uCqR[PO{\ qJy?g7ObURC-O$3$G@gނjLmPHT|;Y7) oc%t[3vϒEt;+c\B8^Dk yr<| 84} Km-a ϤwjLR tio|NqHx}LS &w֠^ *nM:շ[5ɕ]rҸl?RCX&+'r+qaN{'LVcTY zoo̢ sņx A8)Ml,^}t#%Tqn/EPlŰf*s` *$,OkVo;5 gfn*$̯ 17xMӵ, b8rjXf@q-ճ$ڬ$@8pL9M$[>'ӹ\.GҐ/Ŭg+cSԉˣzh܋0MɚnCYJdj2`cbFp&`>0,cimv/À,(k17][2pȧ}>e)jvo0 0(&!E!Y Ր4.j %bk$ )$-8mF/Cˡ%ZW$|RhNZ͉|tkOV{v54ZjX5+W\^.b.5^ ~W[N/DWDDWug4rBnIun +Ȕ1~Lg:'l'>]}6k|ʿ:Y<׎[3{Q~Z(Wu"d\/o `!{j4{@-̎ '*LE>[v! A]y 'j,%c|; kE OuS ϜA`x N`_ `F߬<0\QK: Tl/Dt'?ѨMRAzoGgGsÌ'KuxK<ҰӅ< <!W45"ZXuSnBjx՝]]1@a0mOf Sg:j=d/Ҵ m?rcGJxEwYiZ vn&fە[Pfޓq'CZła^(mq.EǾ#)-,];r^{ooLD-S7اOhǡUAyhr  (g] By֙*VS1YiڋɊӟ:dy_+&w6D+60~iwI]u$=Ҡ9@P[:mJ۞_?V$SןvUUd e&y<>cw97y>>A,V,HZX!I>|)TOE1˟rC7|IOY!y;o'|)'?d,L> H.lǟrI7D}x7ǟ?bcW9ߕ2FؗO &CRO1>$dt L>tRZPB6+O-g?i%_ߗ/{̟{|9~qYe W{O?mD_9QWNueD_7QMue=>$O=̫OԎ>iI 3>$O~>̴O;N>P?5Svzl E>$f}v,#2~wfYn˾?.Aן߶:ϾoO*].&~?йm9mZYer?fO_׃?`t~l.m׍+W$}m=~u侈dòщ~76_ye~ؾoVop׍ΚaN l'+xi.aԖ%?>|aV4"{|w9=wwEh^ӟw_p$/ZܯQ,;T y+wyvބ]K?MOY Bouk ɀ~7w~o_qea{\R_-cT~7fT:3`/+M_|O_~M jH}cz.ScSyӠO&uP4[ Jj+DBђj=׼)P{ϻ%Rhn/S%Uz WrSm\f{[Uzj늢.D!iQ\T驭+zI B4YuEa 謧f蛃 5=bS_`4%iI+ޠ^?7}L"%i^9K@s1\MTiuܖ]7ĽLm)]RPLP$9;2A}PLߗzo~zÕRhP%)2]@{uAԙi~=3 ЦiI2 ~t#c#]*JMe}%@`j%οdx5̵hw~hϑ@4L{3^-T*Eo%o+^ ^~1ٟWT;M޻}A=t^Q(4s}}p ׿]t^Q (~'y_yCqTIeiw TWm u//;4-AKV/%J{x>Cm3:uJ%Iz1V:;c3cLoI(S(m0)HJ{,td_ oZV=q 4ܦ=:7K:<ԧIOPЀvwߗit 4Oz^[ߖ[t2zQ_u-*= פ 0-AMɘ(>p-JOC]Q6MrsKZ- Ь>{$1[Wz }P(b(~ ЬG1mVA/YvlBӴ~$+ I+͠JzF}|Sե%I"c%iv) K(p׾㘶>R.i@ٰp{r7]yBTzfڥ6PypͰOWP-vړ=׍#TRMj8@isXK=h~ڥ6΋q47]*{ܠ}El1UXWԛh1-{Uޯ4oh>?F;\XS-Y멺SW~~h}kRǿmm_&נ7LW$:8T+}}>U7( ˺一*I[@ͽm~A6]I׷KǍ-'I3;=P~\R핿&wGРgTj+g?ROCUx%hOS[QICh^͉)9s?;j%Xp~FJ~׷0KoT $F\LP~ɱ@堧]Ҁ<<Tiz:@1QNn>Un<YK4H긡d;(Af{ h \ }COYh1zAOA e)7>'=Y7(p1 G&v\4IO7P05b[RBWtiP9Nz&z{/jq;1 4MzFO㡧WP q t<yׁcE[*ߕIɘ^`ˆܟ@1Qɘ@Ᾰuҭ 2& 63g/Z1Q +nr `Tޣ>6'xo.Ғ~B?kF=.FeZfj%}W+TK:{&eݦ i6\2gt=:oIKOZ$!N8.Vt:pORj;$-qq1|]@]|\H}v i EOZz9M-OjwRot p'@/7hFBӸ.'@-cH\t p_am7tx&}]$]f?Mz( IʼnC*ieؤfݤv,Ik ʁOB@*\2 3r!+ABBʍEVvUQsH*6'5mڳ;D$xkLkՒ=c(?q^́xs=Q`K J:xrD[][$Džv~lY.ԙ-DeJ YJd|=RᢤYi]s[*Oƈ7QE%YljuwQP\@2u`Kj9dufQ붟Z8el)TlC["3-8!̣T($MlTz; 늊Om6ܝT42'/O4e#Ș"gĠ@A"(e`ՒzsP~MFIx} (o o.R[.I$V~ʟ2o|G.J9z)ʟ+Y& ڥApPʤg?7 YVV~ʟڿlOe[|ߙUE}o*h*=g?vaJJ@nt"#j]kE⦫񌊒lCURNqUby0ͯL>rLZzoOF&J6dNamo,Pc%{UzAOKS'du6p%-zAOEf%)G.zAOK{fxCjE|f1UKɊl堧nQܑC^FK4^=-uF0]4=f9(n^EEOACr9x0R툎zV=-{J-6"HDHty(eFq F=BpD9 _qT_#n_y^$ Nꅬ% o8qQKs j&'jj9'\_誧=jE0҉)\{Le)S͑[m)bK EO9'>{HPrZ8N='R-ARt eL;']$Gv_*^[8N?' 4#ݞ"4tcIT蕴Rzx8NZߋ\H I(83*O/\3Z%CDRl S[( q2PIpzۻImRxM> JgWf-#)Ԡ/qS.qa* t6|}[GwLXFK׷UuHm5-‘ TWל ]^iźW+yF=Q:njpow$2n368:njxZ%!m*is֜M7WeX:@W=͇E$2NS0F^ t`_鞖摈q)EOuz)b%lȤt7I 1;F`j5gBo}m T<Bzi^lsӅYЕX.g_9EX@o̺FIObd z<(އlIttL,%AL y? tU3"E U.U tQ3$e_P& 9Egg/>OT"(*<[w~Ly&< hdJ%pQ;MQ&L j7ܢY ^aR k@'uPlaKCDZwuIqFI>3,` 7 q8臈p8A-^s*sCDx5Pq^E̘(ABtv|yIA]s&/{)'qFuyH9g4K.h q{Lx}ʹH9s?XQ13@=s&P\K%9j!Hj" ;fFllF˹H9J~(Vj=s&/ariԠZO眉 Թ1hP ; ɈH?gRz?ui/^% 5@WEL" jɃl}nf %z^n֑17;!A陰-ц+ĶLT/!-]ut8GedrTG0vt|ZQM҄o؆TLT>VP$!g'*5|=I'*ݥR p!>$ϝIUAᏋEew)jVT\ͥ*~DD@I"N1ܖtiEmḨgBο<$-tWP9CQ.`mLC'JeϸG.<"YGc4R<MR4M&:9.<MR# L]trL}h\sE>IdT~9y&rrVyQ6S42'τz5XCB2jD9y&:(nn{} j՞rL1E n-əT{&tFƇndr аǮ;^k:LRkS,#~.tFmbi`߇$$+ZO_x}# >oإ% ?ML>&MmD To5gԱs hcZgU uw栥Lr-z5-I=M嬰˝`1w:aPh|~T:)9({Hq ( Hf eEDΓA+(>E9!M$eP-O띰 aV3JyF5V`f e}}NVn:T[(A"BQQX2 [=RWUmw0c͑*nJfR.y@M{# T^]Gy^^ ҊGftk]$\@8G05M]?y^R^QZC>)0=, }OMm/_y;n5GOAל mׯyURկ(4IcykT)3j#}j*%S\0Qv$ɧis(tzhIP7LlcW{Cܞ t4쥡 ۿ6hHm/g_gC%SyF0E:O"ю gYξ4, Ӏ\#"[AQ F"ڐniЋGa|M L|h$3J͙u|""^ dAv$Uf^?<:ooAT9gOni4 ݖrB[w=s&6,9x7yjr$颧5kvP#}yor%W3$lH%ճ\=oj铆GƣS.9Ӡt0̒<^*E=@#xK"=^ܬJJϩitQ05QWrTTvPC t ZA֗Aȴljr#xX?NTem{HLTР_&OS~0Y.rt9e@Q\,8,#[k{[@3[|X!@CCGb]$E4VQ5L˔)I nrvwTc,3q$e_p&PLKt"},^ADi噐 v9\T4k}޵L9HZؘi>812j>ekě؞+nH#:ZR; (&#eJڍ(Z%/3Ҧc+R7]gPdO/J{) [@ 3osuKk4(6Rp7Pp.itIVl҇wHKk1͒;_mLyՒW2B:|={34`WV7շ~!ؤ]Y@sEEX~w/&P/= ZI<8'uB*) tF-((1 :Q.zj3j~R1Qw~.{>HnC j#ٓ 픅FR+v7@rSؐy( IS_@4 IUpnB^ +Pq3Ljrn"E7_*IR/􋆈Rdž"qCq__-iYsqj4:__he7|-<7S2>l(뒢: gWuPac׏i$2__Ęv7]&jPA0'IAZu@ şΨV DOjGFwRtF5МT߈Er3*Ut`a–} [Z@IOgT-rۨe?Q@zz6$*'IJ莼dF?ևwtQժP$3f-RyOJ@EB:^S C-0I/v#w|Na: njIٓ+'& Hgpm(e]T*LgQlm9ZԻi>'_3D4cF)IV3aO [@7_4ܛF0|(Rd4˹ (ҁԳIa;hNjk;a|]$POFaKNƣRS^j&}H  Ͻ9PCN!P4"HZzs@/f pW'1Ț3fed͵`xR)}9@T\t3.Ӭ>+1IR}~g4a-beƄZdSV:beLA2s&qFV/Q=Fјs&vP˵9htYsE/)5|z%]3^H;?l}x]3>xBaӨ;1z&m)'שіO?ݘ{ fJ.)רb$;Twɷ"⹣J%PHb?T D6T a'ZER Z-ZΤU ~@)wg:`]r$.gIK{ :u ]@sE1~Z9e'Џ4htP8p7L֮:6Ԝ F: ҕ8QiJp=W2:IBDbҠ֫l1s%5y&u;&wr<,@*τ (ut{sS!6iw8Y]re3YQ\qܡP@=YrXJCšG0$_o|8Da8PHrKڛC*($e%Wi>Nj΄KGWwiNAJ P|ؕ_lbӀ#](p1 s0FE}ڕ_@=<S+iSYE'EҼ+Et/ax_vPVtNy$](y7\LI[)u'P/t}Rΐ%&u'-Zkoz$͟p4l ӘjnW&%!PNYUӻ{ٱK'BA@#{b !N6ral4&EҴ;(F:fP@;4ϬvB 4%]NW&zw@cL('B΍-eN3a7P%硒UZ5*=vw"h!,3 bPjěY"ʨ TKw'B%h #g=KH#&P}3ʊJQs˴劉a3f\@鹒, tYtF:Q1݅Q(C0e'׌S/*eU_!$FkT/t:lFµ.f6īÐNgT}TQÐNg$gŊ81+*Ψ*iFPՉRjnPfDbw-n' =x3τeL{G7CtQgʥ:WX?_&EtP~ה?0Ł0S{a]$MB΍3̧)C_@ٞ J?T-=V|G=A9(^ łMG_$< MxZ@g.&b|(5dG^FO;#qRFNjq:-Wg~)٤9/̽9O:5B9iPO9""JSLQZܛc%=cVf-IH-\y.VssoM\~#݉-7I{ :e!-Y:|A<@t;I RxMYHDUTgk~xHD՛3!WKi`N@D3__T9VP>P)AW:uP/9h|C3__T96X-a61e.*zsN'Ptחd*e$ tՠi__ESا*A0ʇ́x4$]lUzj9R"#mc7.T[!rG)P=>pOԥ@=5@1Lf"mN[XѠiuЫ`)`zJ8h,Ra8D)އ8X@/!"Rw cV eL(m®5I*8@qq$E h.c:@ᥴHq`D oT7#Y6c͙xs~}賂=hcJѠq/^Iz YaPaaIdaTaL򰡧BX4VQ!Ag'䒔aP@ܩ#[tl"Wi#z.: hbv Ji) tБ"=Ŏ3TtYБJ;`hfhI2ulmp53pC=?4^Б)=~^ ^sjTQ.y'˔%;8LhH#n $77@W_ wotU[_2IPjRs h tt-V)L|G;haxCsLGCiv\!  SfԞ:? (Xeu[]fźPb\#SGOz]$=5Pc==S:v1udZ)Wut"zQ2v&)A6nm?O Ś(lI9)T.@Ӕx:QKrTabni Cx6ix\JҌNTP1L-+( -yA 240@s zeIj-R ?{]$[4h`8$LLk򇉹E|ԋkzԜgUKJpF5IRa7ȓN|%j^Da@ٟVII[C!*َpՒƩ>jfVO8U0o.( ICT^I8GiPO|PgLݱI>J.& OQs&Рf~Pe9ח7N2qzmVi8`9gBfQ~x\1EO眉URja t{.wF[^)6kUOZ)M HL Z[Z;jOoaOatTT:Y}FE~FTJS )?nj,ȍ^z%Rd P`0&O³]$=Y}YrzZ%>,\tQtb=Mqd䕯[FJ()s<1lxM C$@֗NV_VnDS0VӇZNV_[Sl9IzdE+- ~{s_'SbAMmݔY͡A3myi27Mn A{so9C6iݥ"׷&mH@x@soq&Ye UZT-b ͱJZlPl`>FZv3s͡AIOS'*n[^IOTmҕg.ia3c6W?N.A?Q qͱHjSnY+Ng;PlnP&P@k'3%*>kI+AREl*m ?Xy0jI 齡"M@y{F &P-L\;]:QpFqș %c9d6P#b@Odr9dX 1c]s x~dza4pȘs`,L\0<>3% .Cl( IگYG)$M C ruMvg@_kCle&aa`Vm.$4Oc6t2eskA$mlwZ/!if>_3i͡Aʶ0T3Iso1_8Pkdš@I1@4Bn~+rc&ͽ9vIo<7fpmtQrp̴1R29L5gNOv$s```>oOAÊ*l*%~ -`]f*'%(4a C![2v6 =fp;pX}Pd:{t;z9$ճob]RYϾg e]f.6^X|">s`+ϙ/2}?5To}.AAW̎i2vU[)sSAbVƦfKƦJ3kSSw ,⅍YjoP~|tQ~;Ex7P QP[BH(sE S.-NlsBg.o"P08PߩJԒjSwM4K26 ߆2bmp%vBkemꯏtIӒ#YRvl]Hr1/vckd3C0{BF/Նy&;{5(bG_ Xo"!plͅTA 'F~\x%<ԱJ[ԝfEO=_A(iTi͙x}2-fcY@&]s&Ab('L \HD}ϠdF&=\N9͟w t)YΙX@TEx^m04sz}<"S&)yFuѽ+U?]Ι@9?3Zgm$+cFi;G!S}5p5UVYm pʄ5oJCKe#;(P, 5%iͱj 3=o&b3 E4e=td*'H4e* ``Rk(jI{shD*eRkbYHZ-$Fߊ:ZbAacOJ;vURgœ@ي `YE}LcLqB+ش%̌ao,Ӝv);}LSJ~Q1]4m_ΟiG²0KY,@I__eҕVśISU5O/E5yGiPþ҃!kPyGiPD2* LAwITMVQ"eTϏq$D ~^r~O-J׳(1@9U4&Ibu3B=@=J:qG0M@" t4jy4K"d*Z+y.ʟ{l(vBIE' RJXX\Z51_&vl!L/rǿ닳kjl4p!g,jy&}ѿ/Vtx3τ&IyX3f?I1]tXA܃?NJrE]j]$ %c +Ǽm}BР<2AI&;;$zZҮ~wMRtu 袧yZBD-zZv=mrjNTGI|3& -uFxeZe(s'c"_f7&(XT9ggGz/]RxVnR- !AInLI"=I\)ZwcI+|0O^ݘhc$`Z)A &Џ4h܍Z f?>o֠i7&ژ Km[;Ԏ wc2UfwLz-5VP-%VZl실H_5_#gPi(e<E!3_#5(y{IL@I|ԯD%EwrW9~)CC+I=6';Qb h"%0:h:]l(nRknqj"HwKM (uL~+Im$,cdNWy&&Ib z~GZ6PbAa0.=@b/Aa )}K~Su5ϕgB*a %7|ck VQ3:M+.hXCn9Q(ZUđb'6o,zqI.99E2oVq7XCY*QتfP@^9V8Ds-iګ8 'Ff%34Uc&Bb(ṟFE!BJ.w,:=:=4f!;ٿGX t٥9=Գ:CIhER{0{4ص3K+(9S.PGh@(IzJ`׿@$$_I`(rEPʓ3!^$fOY+-H.+>5кNL9,7BWAWY7;ʤ.iI4GVW,_]^]T*,uFRkn+Z$*gu5[\H=KT|yL,V+=(V_Z%Ț3*"H8|<% DFI52E@w53vIكԌ?~;104eFÉi,!iUpݔlkߞ#);@SBc]%Aep(32[=G$!SV@q)&ײ8iT(LڷcXRZkВeZ4K鋉lPj T/rȔf֪xBGS i9dvP{/x6j>T)A}OڝV6 Ry(.-ʴ.U/gs<\3J{5dAL?3@/"-UjШAI!~!)=l Ь@kJJ~FHBHTRIkйW8oI&Џ4=tP\qӠ~zSH Pu9+7CP+Ꮄbl=VI<@X!%}ApS-y^fԒV4?quJ,j=-3t`oU"i:ut8I.A]4&齇@00>Ӕh3avPO F@HH8nHby^%]K0}E{Hs0md:e4?ܩ~>jyg#-Q:\ET"ok@1jxנS}Xpx);)83Gm."ҁq4k2jh#j=&PU U_AttKIؖR{s.)<]eF-OJOLTw}V( $ڹO"AO< 41YhIЉX@1ʕl]$U< XFLts tS3H\xEzkz%zy&P12z(}$&PgBFyP)k=qo%vBl7j8nUzj!uZhdIP~HcrKra^l4qMb=j Av'v/crKq!FUJVO~K6Uǻiqt7mފ9Ts"Ԏ(tSNw,gTjZE_ "?M'YrKp'Z]4 WIwt7ͲK19nZj#(jCj}[V8֠t7./I. KQx7-gbTayfIB=-}UNw"*sLmḺLnZ9MK5bNNFwl-{{VPd^ww]lY@InZ_e$LX?GOJ^VI@6%mK Pc=x}/. #-'Q~N>I[w y_3:誧'__%D4H&骧'__{}ܾxe&@Z@='__r6H4|}ѧ=k^Z2fOgkIP+ cU*|}鉺rw4wARƓ϶IfLǢSԞ}}kH ҁҠƓO@##5?SB.6.|}otlhFj]^ӓI l)%qY$]khɢ̮!Og yV|H4ݣgAS24Jc7sw+iG-a"?r%I܃vG{j 8yAb\@I{~1)*tQ4ݣ1 ?hfo(}sG{H*BnCL- zCJWAs<yJr;頚Ԝ7PrU&,T4p>l}>5>9) ٥f*Zf<9) I@seJVH HzBnWE*.|$颧$')#A!̑OYH  0z9תxOC#iƋ$c T|}!̑,eq\#gs;JYHH75QLMRsE6HdzjE9 iT+>& vEʜi C9JZ9->XNi8qOmeLEţfPп "Ip#i[X*샟xm:j!TERw"y}Qڎ7gWQs/*_Sdjcїt(Ae@Nl+y}t[)# w-+h}_%-[Z;P/53P)e[1K) *}3u KtS]O+h[4'82:425aS<#! JjzZAiJhIjz4."w{phhP7?iwQOZs6@?Z@AO<Z~X3f+=5X׻`VhRh! k j5h(u~‰b W .YJ+ wMOK Kr9<9RvP$>gF>R5]O7P;'d-颧r hd5NٲGZ>[66j2REQAf6S4?uV)*U/8R%JٮR;}ֱI7J*KM'kdrtS|P:>~TT t[]<*UYȏpN:QJlD FSq~biAmW6 L7iU*FGEײ'kw to,4Kn]UʆR  CZxla!R=4 (*"M3jϖԦK^6|LYsAW/FB`Q~'wmZZ..LIE[~ѡUҼ[VqvPuMRz@\R8mkDbH,pd2,3Kò}3u\ߤ}\AJ;َ_%5E:%& >Q5i~N~gU1ASyedgm~)ߒ:RcBf6 y(v|,aRBvoJ8uLxϙiF5Gl4CUR7Pd`L )r!eTY]3R6]6ZWP+QRJ?w[$:U7i7Z i`vԣ[H:ΨMR3fH\ͶӴ.gmzԱ\HDgC 3AFQP 7xL4Pt&Xh]~TڹI4tJxHTDA6$'#K 8Iphe7I%\n'YzHph2-m.̝0P""Q+dBgoÔMSG฼I{~ZIicwE"EVr!W$GYOza{l'le;{C.KD u%e8..<Y2Ip-Qo* WpcQ׿U 5cjt,14Ы0W|?7'KD #n2_d+D5bvchKDF3rsa0jͥi g~@4Vc߿A?~_3`L͇//C蚜n8f^ +@/oޗ[Q#@厠`9mR0@3d PJ#½dM~ GI2 7]crK+*' d%T?kjиrEp2g{k=M'дGIAh֨sfr4.O]#lhY@y=w:);+AeEhNYut]QFrE{(W[DSPA;JK+G PA?;ilPAc$I*\SتR8vgPf)7bBJ<4jP@{Xsʄ)oY0fP{Yv)l{ᔉvO-L+MRqٳ_D e+3-RZy+0u:Sջԧ=QF8 =hܗN&P{ǟ~|@Mva6qhRtw6@hPx_tf_nZ 4>IjysD>Pa!$gs(h~r4嬌s@˓bB +@D-㸤ⰵ*H'h|5ϠE&ؾ6MO 4\ ;`) }PoIxt%} Aӊ DҘ`ouO+ S#H˚NP/m3HiE%!bm=Q.2Ɩ3O+^laY"Iv*Ϗ2Ч4$d5 }ZQqEa_c&EHuO+ ޞ{e$lwGIЧW4t5ԙVT$ ڢ΅;<@VKC5%r{l=>QAʬSNn|! <9m=>(x{-cLKD@3I:9iH7@VuIQ6iE3* aa{"oGk}ZQqE]dcsh2u.y}ZQqERoyxqI}j@Vg\Q uڧVT&! ^خ<6RpiE[H"O+?QۢJzhM"Ƅ{ZQiE7u[sO+?( p%RiESh%vA@rO+?(v+k@VT$eOt$%*AVTx0^\Q)n3oʹϨ[30L`Yx:QO+*(+9y%{")neƯx%ZQ/R (ʼnI8΅( =UV Hy}ZQL6YpQlGYq"oO-9O!F'piE[Hg ki fgg/\ycjЧ+T3$ia͸8iEupǜ(_}kׅWTbݨVZe~ZQCfhnA8tiE"!+\&WT^VT _HKLečJh1> Ϩ&$o4eVTz\QG>FӊB:B4Ҵ˘>x&vIϓFӊʏV!  ЋQAЧW$xZ2QO+*?(0,rI(!F,gDӊ?ᙈRBUAO:=d!sR6Fmӊ构6ZIiE{Ť;yILT9>>Qdm~l 4?xFE{ R[;NW.=b 覻ӊ*O+ } aE5nӊ*O+*I\Ivk?RO+t(#͔D .?Ykg"O+<<)q!yJ|(]c<ʋǴ0=>Oӊ*g*Ax. -tτ>()\kޞ,r{xK<?4?({=z&Xi]ש6VT~XQ0\H`ِ?&E[_~XQH~~F"Gqmb|)iyXQzj&JnJF!qaE'(a&Sm ~yXQz<.hUې| /+^O+ [=p;#l_)+ MKo8uLF2cHe8fn$@-E/O+<(VYn'ăZvS<(3d@m}ErzF},;VpC,.+꿼|W/|o޾|Ż^??o۟oW_yz˿_Ӳ,?ۯ~wş3y߽,탟o{g'|;{G?~L݇*}ZG[}* mM*?KؽD탟|탟?(#|{ؑ afgK|~"{lq+s};9( gϦ"9 #t>2sSx}VnÛ~탟;$[u9StD'ۇmtS0wg5G%(簩 X|~zwCJ|axAq>Wn!+>'TX5w2sؑesG9=VusзXusXOc|aÏ4w 9L30wP}ËX'd: w#|1#o9i9Uszւ9l5 6}i9 /}[M9B9İpT}9a탟 9x_}{'`s}v|FJ|axs}|I$|龐Eq>EBoZ^>^elnPꨓô~Nw'` j2͵~K~bRi9i9,Rm"|MsV\\+y =_E:$NQśBs]9׃~W ~x?QW*"5DV*"pS?,\ۅ}N[5_~NS_;}IT⩟w6Rn9M}m>G֝9ioZo>G4fB9[m&9HA&nÕ}NPə>DŽp[6U|ʶ9lAenHepwLe"cQe6ڨ%~h([>?/oVGy{]W^8W^Oq)X]ʇgG24/5R'7 w .nЁ|^=5^=@~^=@5x^O=` +6nN׹j90{o0akBYyI{Qj2kdo0p:V-<$ܺd2#FMt$^?.`$l>$ؘ0p٢`$(0pӢަ`$AphFYt#I,rH%LQ3z$IHa$zj5I𳸇a$h{I^ƥ@`$Z=Fқ^?СzF{#*z.F# w)[Hsϗy-}WcH2a$۞_?V0({F=FOb|T˭H1<$ܜ%#{{$LJS9-x#I #-wsw0# %i[N/rϏ`?D0pO"`$h:=$\ m?$ATI4O# #r"[^܍ol9I^凑y-p#y?0H# "rZ~F2?ig~'K=n#:0p"`$0$HH5< ?jy]?*0S-wjA JivUN_|oׯD3OO/}~{ۯO߼ }߿w~!ʟwVOſU8~xݷ?xD]&_67߾J</xoI u?V?<7_??WW/M;~u~o,7z_?7B????=N/'sq}ׯ{u_n{}/?W_} ?onn)o?{C׿AvڕwYw|J3nއRm;?;_' Oc|{Yow?~w /xs|?}jϨQӽ7c97-X c Ic̚~C7&7eB6t]tlj%V`IP߶JxA/Yjah;@MкC{R ґD:7@i'W]JîeDrh 0_rޯɖ.K{ VqX6Gu  K֞y2bY yp+,\)XKgt& u|J{>ٓUCE+' FmťM)eɧ?}5~G`=Smp5 g&=u0EqDW8;?) tP OeHXޚ+mL{AWAY?)c,g<|ĥ|JX8A 43J4v~ Tjo}&/.2J,81+o̩LSЖ!o! mWsA PPAu.r˒οAv2MO%Qy^ja*8:M40A}`i<"v1FD..| wUi4M*b!va9()9MZkF\` .F o΃n)a,01U@(VWTQ*L@θ$Ҵ@5H6#N܁AпޙH)^TQu FG>|/8/PHi4}DD9'Ұ Dyѵ ;W'<7I($`[[^(U/qʁ)D?-ə:Z1'stIvڃy +TLHr! `'m$G5FR8d%knw7UEql{]~=EVVQZkȫA\V_ e|G|Ʉ+clLU ;=k DbvP4jc3#ޯ,tD8DRnrr_BʮR$/U0Qu?JDMSQy!\ zQNy_fuYvOAzv6ۓ=-k$W,UpfS'--foq?ka2Q:%; N6nV(b>*]ͤ-&Fh)odaT%!̽%) I]Pp_|2ar~?ar& 1#VZA#drEOB; #vA,?뺲,!f@Ca$;IZ7*HbMCk gܻ-i ov藳1a'oONs,@CMr~tݏn'&Ph1aS {gzMC#c'}Wz :^r 1LDä}'4/L)Y8H3ךt 3\QI(V /o0ͩ1G 2A5 qęSLqZ ^Z4[Jd,Vu J '824TA898/9㭑M³oBInjp fiLEfM#/a4v] 1FĪ.2E2pC(f,zj59uzlԢrUI.Xꗶ.W6a KU8W²y+kL͠|ߝ@zJnh`Uu#/kJ.E%k}RG֖6rV ~#Ѵ\[h0wo9m$b>@UZGո ]S6TjWn@gMJV1 8w'ls.l:> ^*~_ֲl!׮&NruBY@ZB` a%un!,ϋ;l\>PǷjbݤȞf28ZY>ڣigjoԐoAa}YӺF ,&sE۾(mM96paFrpG o (`]n04W>oݚEx)y%#E,rdj}csh^"PfP8Dgj -L3v dGZ{e&>-oT=UE0] 5ghյG}۫Z y%#Ԭ@U0H$*„ |P.aoGyԌ󓌄2VC7+   4qo(yw1^G~=&Ƚ~!- 8fg2,~G n:δ#vƨh &&+Blۙ̚ V~U1~ ql[dpruHj801Pq_q]aTC^d9/ڡ^Jhq-hL51SAx ܼiP58~yH[P16q8jk=hy%, OlI#3n2^UsV˗A &D__ڗQkmS&e( ?hԾd OD8%hNu)zGeWљ_IH|Z$j͈{4*1?9Rl*Bf&'?|(}*]l(L6k|8 Yc ?7%?Y<؉*#cIڴы\U[N?O;F@lYr#f7#o7NPiJƋ,'6D^ƕI tނ|ZgKԫ 7S.;os l@ "ƒ@){Bh'rTYN,/Zkvi7hgFc?:u- sa7jE"JubfZ"1)a_7O0)+_ZvQM0L0\MK®QY ulңp\We+q4I%1ZJf`Q%pܞ*>q\!́X=YȍƍʈLJbv4[lOI;N%xʁ*ўW;~)cCr.8庙Un? /{Mq|+bU 6 l VjxL:zR9sl`zh}G|{EƙA 'uG R.0*MZfZKh*73~*l8r:26zU sN1' ^N< q_!㠮b6yf#2fWA'yamrt Xϟ-~cձw_Յ<lS݉ݔ@7sJR>kq(c|d{ A8+Fw@zϯݟótY Hϓc!$,i>qo0$Tmg0{)-oRL\'yv} ]xIUu 4PguV⛹"#62) %E/4>`Tn'‘3a"]|b{Ohkhg2ӫ1%@mH-d4Z<5\TLz>^wlbs7rnuQb0fVnB.'Vq6GB3$},ՎB&q;aHߤ |t_=7"OQOog Ta60I_Ȉgu!AʡD/}|ܕk/QLq15vlRPRg.E F89Gc[h"MKRU0&XPE L$^f<5@O'p .(A,襊X!ʏ"=aG95.8;PKw&!e"p42@=MDB =Sʡ|\8sJ?}RDOl3If*b4l0WFLa-|rPƝI H.:VE#MާƈipS .@_vj\1__O"5۟!%Kdfv¬Z'' ul< -PG7thzԣ qbݵ/{]JSAzwq?)n'~$1bӛcS5*X.C桎 |:wd*8}.V2" Ql\o7lо- ~Z{ڮR~F?kjY;;/'J-͢j37'&.s`etTcD),W G3~'p=5IKWs[Xn]H~qдiN\Dzy/7Xp ,u `~&ЅִFG$h7/P M:8q59irc9,,2_^jk. 1WwO?mHA#X3l2s4[,;#giW ޜ|Bacmnp"=AtCف/4Ǘ B7O&z36( Ӿy+yIX;OA5 JRP3ޠԵAj'ee* H6[I?D 7G#n _w-SEj#%#[x McT ].B׮1|\5)ϖ`t6_s2s:9#DV5Nͥìy?&!wľѫP?lje]BZL#>/v^@{#l-L;%=ƥq:g73fP%[di WLAfk򿖶[t% %ux\w߹cȲ7}Rg`쎺U!k J $>O '3iwD*],4X쀔\ 攱&Zǝɔǔ~g%Av^y1C[H^.: / 'PSO7.-ΰ.l_.qīn!aw#3K $#8cwf~:woŝ=Gp$pE1}*u2<P.|&Ds6]fܘ.q֖Nk2ojQVW^pVh@_ G*[82>oμ.) v֪l:m"ByC+I.%*مqFiiY;)o}Ӏoc]EPC/V2iigQ:qf!п5 T!Y/Ivӳeux N;Ic32oQFXa[=1j?F :g>δ9 we퀾߯> Wk%t2~=9V椠sq B |6wWo-X? eMnyp߭v$Mp @fzҋλg]:K)ոj;+u ,\V@i~ P[75&.ӆΕ8sO'vUCZ,ܪ;R>E#yML7TnH՚~U!pߪRlO*N+[yH'R5wFgP憟xW,u ("-c;BL_a)tlIWK&-bVr6l%H" IoF汜H6#Vȝ@ gcX&z3äC:mPrɓ ݟL"1kƯgjyK[@~TUT™iiiscLbAk 4GNx,iZ6Jrm|ZD % H!'Ih!5;RB 6Ɨgb Ft6ДhCN e5XPC'Bdb:h8x9?&XX/;o+"JhOqՐ;@]vߙO'/O> :a/%ި5>$R\86w=/ +{0vr =gn 3a`i n"s</Ad(6r?}W$jzն "c s.~!q}x'EuK^"K9AъW p!!U5륋rD1 mGG w>Bh8/N,7VG]>ٵme.ڄ8O^5v;S<2u#7HE iKq$*ZD%có1#H1)m!o?Γdmnh{/ݵ<,䝻йY8y1 JN'JG̉d)\Xu=z U2=^n$$I{ -_jhy-q][.IE{0 $ddٮ j7Fm)۩\341teqn'7eYU%8Jy<{n%n1_|9?A,Jp("LN ł$rlU$>])Cnځ0fYwZihZq"9ݖ2Onո)Ob:'FR zm-:܌5E->ym~ cgߞ,ZO]kbsҵ~(`3RbA ȩJ㯵{hˊ-5 p<ޜ6jxa.P.,`{+kO*Ծ; = >FC~M4i?b:d,{v#&8;T}`\Ȯ'B(!# b=[Ph37@%Ѕ* #>V-VAV,ࢳjkԜ#5i#7R>dm¨x= ^\K子cIlsP+,o! YsDY8p DKEV \W8cKLNbMz{q{9/2a5|(@O/ẍ́|c0]d^Uf@g//?diʁupŒY̍S8.W%rȷf#?(6QeB{R!؇!&l :yOlƥDڞx]F7{ 0# Kj==OP\'lڀW`EwVWfpI njF 9=]fXB"9`J`k<"eOܛXE-|`Ag:S>t$Z\<fEMhWi悞8GhWD'ITB ʻ+raQZwPYy?4%#9FܻAY3Wu+LJ~-FYb:0%Z&_h)- G}[3X6h|^HL8+J-JQ&d̬*}=\*ҹ+t5fu#k(|U f8}nj52|[P Rr ETsH3y:6?LҐ6 XGɩ W=le ,NDZ?<20<z68?GKű!xhbg!~߽ط(Ѥ uRJӋવt@k%* oLi=QaZAkekdINF$-Br㻗L2RT` ,݋f䅋0yBb,4,mG$Ƨ1:)9SJ2IEZZA-5VL5d5|$UwH7G\?Y 8-unb-x/X 2!\vbSzghvJG,T Kh.:ְw\f<Q3ۡ}6/lJ$Ϻ?Y>5nF'Nlgx q#P:| z@W-ʓաjZ<5 Wz-v>9Hvգm)8jl V|e:>CK%Ұ)ݬG o{moבČH%MxBmu &Kq Ҋbp@ExdXCd XJa M3P-^3}>3lӣ@l!Lt5z&8J5};Csvx̛sB!@} #곧p)%U[&Y|l,˜~2w{ak82PZJ~{&D2&&k /9(A+TټImjȿEޫw!ҫ?Ap gsf/?"?z.Eme`MPD;RCUJ g=@"/#Rr(_o\gE'u/n Ob\Ś:BoJ *G]}Q"c mz<^N4X&Ið\j-(T\k-wt7lQw!HLflhXe\B;%ݏ/{ԇϲvGܯPc?5t4#ۭa-FqzQn9KצTޜW$򞪡TA MA?q?Acex@g wMMRβh)=I[~,l2nPEMRH>G*)gWT]߱;Od~:,X>:?_uֳ*#MdCg+"@Hŕo~td_M@CZY3a)oHN IIo\I5 dRʿ_ b6kk(xBrgZxp9"YZqc°5uQLr -]aY6j)8@f$~mQzRu*_7`fʇtق97^wkޚM}h>r3qȪ<5H)Zj_.ތScA? , w*Z 2إe cu=<ɶIjRT ?k`NK7^N-5;G Ϣ% C" m;ZgD$2<5`@߁G.̤3M%? }ZbE }`dAY k/)I"揅w@91 O,2tb 6:=ppm4̀: `zFɏ1←欞mΑ}*I\_u{),'=fļ#Z+̹0"WtdcH؋B", :Y#:s0,Je]֯^(pv]:}&&sg 琦8B_l~PG%҃a4oSW6 .͑As[~_duiٱUJ@Udp@a2s"o8`5J,gYMorEaȗ2)f\&诲Y =#w> TZb‚C:[,,FSGl TudѪuel^>ZW QN Gu-gM{ + 6PL2 H- _CId4E%aT3_ǡ 0J+Dou3%dħnkf ^,7€-?p[br!٪%uwkI=U2xZ i1PHbit.Ky+Ӛ@\{|>yW[-Rwv[HOUsܚc(F&5s: 3fWȊ4UiBwWk\߹!x5Z]qHQc X!ytd#25O5Bye7A^IobTk=MV`z K, ]`qW-.Xdz,P#44d4o(D ]K*|I:8q~pd`tuuV9}#pPLȬ|r]fLD&9nǤь’m+b\;vƏVnݜmM@|힀;쀻u#;b.4Z]K( @?\.G~`uC[wC;˲U^$mM $goΣoɁ3y[Z=C@:քl Jz_N/vTWDɲ0O'*≚l .Y)+e57$KʧhE园m突D~,t"1[__p%0|A  \r(QMSm;j);OāUCg!ֹ]qڒz]!GMU;nnXublú7Ka3#>L]yŠ ê6m\O^i@u ~rw `d">:*1!VʨvR!Obrf.i fNԩUu80+F% ~f>Vֶ:2$OPjuv:m% q sec鵒ὕقf9%QnjKXb2>`p=X],UAჭU}h1GC\j3 3uG,(ewXdjaLoQ(m9.ϯ?.Udlj-TzC.m8$ok3+nPJz]]ሂE'}1>&&n\܋?lBq%lxw&/~@]8 a%#V0"lKN&ghmAD&ʾ$Y!XxByTmYۋ~?Π"].gftJNl$/ɍ"rNZdy^Ұ-٢5R3:U;xY/YxxR+A"3OwrZ?GQ'lCv=c\V”e6l|%D嵺-r\[ynijF w`7~=6 Q#PiUQCDkU*"gKW "[;smy1:r4 ZQ"*_ K| Xwt]\3p#ťGֹ}"BE&2{뚴ݑ bݪvLsj >P2Él߬͟=ҵ|7GxhéȶA3Kܠգ9‰);S!jwZM^b £28"E_<q?,@Zܓ6^-x{cL^:wdv*fQB2$`e5VI`IQBP(z}hPzd]`Ml%2g2Gn=ݩ9Hb7<&rn{ ?bʘJOia~;)zt6 / yIJ<t²,wb@EӰo&szMơ>}6ԛxQuL۷Sq ]$23<Nv TGϔ@Y_!1T%2UKE];~ o;L&/0‚pib{hK1@f|qR>=>iibN=5ǚ%#F؝oCQo}Q]+|̈, 9nѷu= KPDK;l0ɽ 8hڶ.RpD=;<ك=*l%k8~ysu"=^ma֌q Sl;-X23ҮٿFc'^ӸR ^dfhƸ+=3CjdHR_M :(gbL񊡌$Y&ƓLm̭*)s4M+W聭5+tX$ϬC _}=_V.f9pgI~ ևp͑@(B[AaŜ|]kwq9nUIxfݕHDnw]µ'Qq6F%IfXT}'T}3i *O1o1,tp,%WPY9TN0 j7`NmI7(.Q;{~ܫ J҈*]ޭD>c>S#ⱳԖdƏƆCjYA..$R}OcӼ䙢򃭆m]ovghvb F9HeO|HKN|g+ W.{Wy)>?Lߡi_~_T?$/`.Abp-4I16C-e^n kmKY _aʇ̵iF<s~QIm5m@)sz!)F =;"L+s`iUWX=BBwqVED'Õ?5 Q ʀՋ_, ~+|b>㈺$x1H.g%>\?Z`BKN~ŭ~Erϑ c%10[IX,ll9֧?9,\}rY_8 f>]D&Uq |gN[EM0@G ( 6AN_p B^=2wqw;B[Dvs=L,|8LՈIQČnw@ݟALHZ!+MEb`hrp/s?Y;ؼx5;\,)(" m$bRf"|:zDpSpCΨ{]b'^* Zqxe% ,UN oQںWsڌΑ97EI|hy=||/p7Cb[Hqi!z&N'|rc1Daf׬]w_!v1Ő/o0}9vh ibӌxVr}#1n]EӀX6IL† S-굨긥&Rt`N ˤOD>ke'y')`%g` Rg T}+5*vD<绑]l_|֤KʒKrbGI;IO0h{\]$v98M~G f7ʢz ur+O={Tf=$kvf2<4s] /4߅j)ac`vo}+@(16m hrliI8YxdKFw#-5<[#Pz*in#tP]pG\? #5뗢vR*J!tߠ/*_׶#in비HRjKmd*[j!yF8dCGM0}DBaRݼ/,.6[nmre7NI[fA829 O1KB9$!eT79jR}naVo ,J-}O5O|Sw\2ZSh 04wyZwb]{(ދ钜$F☑Y4|ggIUot x3I~͔.%Wx[ϑ~zt! -+XMʖaJ <>$3R⣿kZ*\9d KE!_~qV5%"[9~㝃GTon΄G74v,o;Dv M hlK4kfXq( 0RМGzgaduL;'5` l8'!>^dG!L#ҤbNM|KJ Ex2&dRnJm6Ё JP8k{+[)_1kRC[[yL.W1Fr#QChꆵlH!#OQ@grB!Dl}#`_UzPY>;; ד0nk 674/ ?z_B" קlzM'd/bU\6cv1tC?A'@liapj0oh!2@9n Wms ZmƳ#.ȜopW#5LD ɣnx:tRfv/8rLHyC Al!X]BN,22%1?zowPhkm]GJ({ T$avR#l&#}ľa^Ѓu6er.\zKZ<\A8 и^MZ6HAҬO T>^:8LC'|5c~ڝ=/u8CM-MƇ^BlZP'6VÓ廚{sW}~\+!@(1@mY+3m3v3!жr|`,LOXe,/>'r,XEvu SXM,[W_|^ L>N{}ͼQTm,i4rj@{֩O+&+50V5^l"_,p{f:`b'󫟸4vi!E 'ΰAy3vO@mȇXT8Ru ٗF~zfk ;D,5dB]t 3fotA$[tCM,9]<0W0Hs߾% *4r R &0PK&.$,/✺Cϻh{0)U:H )ZU-ς v+eG~t_z Ǜ1Wȓ"q0,ޣ?̋4 I%RK}Ȃ6sM{[dʦF= m B^^MD:\ _ ̢(4R/0gpZq -3uϳr=c 1ȃQg)) H%Uz؄8h|iQuޡGd3sNu%K?8z6̙lcڟC @,&n+:wuZٻ %pʛ|+ u~! l%ާH5{>z@- * *9FiFVL vaS"nZF1{3 JFhEɲ VR #+W y?$e@l+83BOطVMAX-qnk{3YȘδnK0q>B_E;7Y}!D*Z6>hme ;2}wV|gNDNǿ)1@CVvy O;3HG}h>e #ZX?7pF '<\d F9־O>{ހ+_n?pї@8p2.za'&V8HMk%r\J`& 1W3Qt(+~tw.Q9SM.hnp=7JT&ZnE ,Ȕou=H5[ s&^fXILpP^sF>#2,CY)\hQMi@k!Cls$y\π*2LI1ߠ+LfaH/R`$=>dZC$`O?(R}#.I"4+2hjU_gYZlibpdb-redo-3.0.5/examples/1cbs_map.mtz0000664000175000017500000362436014364232314017623 0ustar maartenmaartenMTZ DA@?G/C@ϊB"Cz5hǩB}5a5C4C4?C6A?5fC~@C4CRyC4C:C4C/C4C?C4C A?ԾUDPAC!ODEDCeDCCC?JDC@A?XA_ZA {B4CQ A 4C @3#9mA3#9MG7J@)7ߙ=A4CA?B|A5C#6 0C#68MoB#6B4C?.S7C,,"6A? APZAB4CWB4CCB"Ȼ74C"Ȼ76 ?EB4CA?늚AlWA A3CA3CLTACq BCi>A3C@??{WA@@3C#B4C²B̞79C̞79y> >B4C@?mB#@UBBdAB30BBZBB&?4ABA??: -BP@ZACPGB4Ct AY]8!nB]]8ʃ>/ fB4CA??<̵C߼}@TCB_CBf9CBPiBB?CB A??9DϏ@j;D?63D6@D6YB6?8j7DWW60A??CnM@LCCCCTDCoBC?CC@A??92 B}AAB4C!eB4CVAm+7Bm+7i>B4CPA??3CL@ =BB2BB$օCB01CB~?*BB`A??`CDG@C4C}wC4CIC4CpIB4C?fC4CpA??:_C{@arCCnjCCTCC`AB?;XsCCA??ICX@vC4CwqC4CN"C4CB7?GDwC4CA??T2AAiBBcBBtLBCBC>>jBBA?}KBF@AZ:BC7BC;+BC@M=@4Cz^?7BCA?? C@HƶBBy˭BBCCB=BB?޶BBA??l/BbcAƗB3CtB3C*A3C`|BCv?/B3CA?? B;O@tBBBB>nBB@B?WBBA??oC@EC+:7w FC֒:7$B֒:7 B4C?\EC:7A??8A.A̠BBBB1AClBC f?BBA??TBڄALB3CKCB3CB3CBcB3C?G|LB3CA??!BA BBABe!BBPVABa? BB@@?EC6`@CCbMCC>CC@6?'< Dw6PA@?3B @j>BC BCBCpaAC?BC`A@?+C#@e4}CA6*wCb63Cc6Ag6?GvC= 5pA@?{CƢ@ߧ6CCx/CCYCC:CC?o3CCA@?CbK@jB4C6B4CC4C j>A4C?G6B4CA@?;EBf BAABABAB6@C9>ABA@?mrB@sHB4CDB4CBB4CA4Cgr?PB4CA@?JCE@;CBe2CBmbCB >BB?'=CBA@?kBxAB4CB4Ct@A4C;^B:*7?`B4CA@?ԌBAMCBCB ACV.CC?c-CBA@?8BwA` A4C*A4CJ9 A4CaA 7;>9A4CA@?iCI@BCBCs)CCt'BC?&BCA@?o/B5AXCB4CB4C` @4C'OB%7?B4CA@B~@_{BB܈BBjBBAB?tBB@@@?HC _@ BByCB{CBBB?'CB@@@?[C<@F$ CoC6Z*B4CeDLC4C!C4C]?rB4C@@@?Bq@uCBuCBBCrMCC#D;>F;!9;4Cn>4C@;A@3CA@@?%B @6BBbzBBLYBBP0BB{?BBA@@?AKA^B3CI]B3C,CBC+BC&K6?B3CA@@?pQB2@##BCA$BC CCaBC\y?A!BCA@@?.C)@1Co651C6RB60TfB4C?s1C覭6A@@^'BA6F,BBm'BB&ABdACG?m8,BBA@@?A=ABC'ACbP4A3C*B3CT?lBCA@@?M$B@VBCVBCBClAC?<BC@@?9B@_BBcBCbyBCy@C??MBC@@h>B&f@)Bf6ꗫB4CtAس$8B׳$88?uOB4C@@?Ba@@?ͯBCBCvLBCt@C>tACA@?OvC`@|WC6iC75ڔC7|A7?EC7A@?C@ zCBCB`SCB :BC?CB A@?BT@jtCߍ6C6}B4CnC4C?2C60A@?,ZB1c@BB/BBSCB8١AB?BB@A@?Bu?@!lB4CnB4C޳B4C B=*7]l?1B4CPA@?SA3CpA@?Ň4CU|@Sn=CBπ2CB6CB@@B?7CBA@?VC2D@qC^5kC5mAC5(B4C?oC$5A@?AVfA YBCTBCHWABf{BBP/?)\bBCA@?X$C3@\C4C#C4C}iC4CX.BD&7?$C4CA@?>C)@rBCBC?>CC֎BC?L)BCA@?`BLA&B4C@B4C \-B4C踧A#7Bu?B4CA@?AA AC?ACȾ3@BABQ>]ACA@GsB=As@Cp@COgACK+ACG>K@CA@?BP AK]BCUBC?BCؙKBC|?]BCA@?B9-A<B4CA4CB4C B4C0?AB4C@@?C@YCCY8{CCqCCUBC?ʈCC@@?EC@CCXFCCDCCAC?CC@@?"C@i7C 6KSC6TB6B4C?`C-6@@?C@BCBCB䯾CB0BB?WCBA@?C2@%bBCDBCx$CC䬗BC|?HBCA@?E3C2o@zcCBCBCBPiCB?'CB A@?^B}Z@ HB4CA4CޯB4CeB4Cm?B4C0A@?B/@CBCvDBCG:BCP ACp?K$BC@A@ Dy@ C7D\7D\7?BW7?RCZ7PA@?FHC9@ BFBC_2BCMBCC4CC z?)9BC`A@?B!C@1*B4C4 B4C?9B4C|Ba<7x+~?yB4CpA@? LA2BA BB9BBreBCCC!>kBBA@?\Be@dBh7xBh7(Ch7l/Bh7Q&?B5g7A@?∨B@O?BCٚBCٵBCXAC ?]%BCA@? QAӠ3A=C4C< C4CBb%7vCa%7R?ҊC4CA@?hAgA BCEBC ?BIBBT?BCA@?)BP@smBP>7AjBG>7 %CG>7BH>7?JkB7A@?p $B4oA͎ABgAB\5eAB?CC,>ABA@?ˍB믋Ad_ACAC4aACNA3C/?ACA@?SPC@JCB8IAB@@?7.C ;@rhtC4CmC4CHGB4CPBӜ7?Œ|C4C@@?=hAf@'BB@?6B^?Cx1@Cp;`@C@@?SgCN@+rC4CxC4CVC4C@KBPS7?C4C@@?cBO@wBC]BCxCCoBCe?ܐBCA@?yӧC~@HgChb68C%d6C%d6@tA%d6?TCc6A@?C-W@-CBCBؗCB=AC?vCB A@?BCnn@ouCY6@nC+f5dC+f5HC+f5?]pC%60A@7:BCABt=k?%@BCA@?P\C*@08C6=3C6{C6 ?B4C?b4C5A@?A ^A`qBB-lBBԥACBCZ/5?+ eBBA@?ALAT@4ChX@4Ck@X8AY8j=ث@4CA@?yBABCvBCUBC;BC f?.# BCA@C3О@C3CQC3C#C3CwA3C? C3CA@?hϝB]\@oBB BBjUBB`[LBC?0BBA@[pAKZAqA4CA4Cv2AB%7<}#B@%7>wA4CA@?eNBHȃA%BBBBORBBJABHhe?&BBA@KoArA=BgH4U.BB4A4CzB4CUw?xdB?4?@?4byBo?ACeBBúABi/BC9?BB@@?uCJ@YC4C33C4C C4CC4C?;C4C@@@?xBeI@КBBBBݮCB§BBt?BB@@?B?fC"71C؝*7Aڝ*7C4C?R,HHBC A@?ICq`t@ C6ҿRC-6@C-6ݎA4C?kn>C%60A@?CB@moCC[+CC/CCVBC?iCC@A@?dB}@yBX6By6,A6jB4CO? B5.6PA@?Y#BNKFA;BC=fBCX=AB BB92?.BC`A@?CX@ACACj!YCCk9CC,W?>BCpA@?PC7@sCBmCBNCB0{BB?VEzCBA@?C@hCr6b/cC_r6<'B`r6C4C?gCv6A@?7װANAuBC/ӒBC)BB BB93?ݖBCA@?o=B@Bʦ6B.N6pa~A0N6xB4Ci?LB@6A@?.B]@FBBBBOBB@C? BBA@IkAw&Ap@3W8+@D6W8/u@4C-RA4C"k=b@f a8A@?:Bx}AoVAC^ACjACjAB?oA,8A@?"C֫@BCBCUCCBC?'BCA@pB A9 BCBC CC0BC? BCA?.B{?awyB3C-B3CDAC*lBC@>B3C?A? DgA!)DCDC3CCСBB?DC@A?HCo@fC,r 6XRC6dC6@B6?[Cߓ6@@A?佧B?dCBBCBChABZs?dBC@A?MB v@I>BCErVBC;A3C HB3C>XBC@A?q=vAA CB޲BBAC%}BCY =nBB@A?jBy'@$B\a7C_ɾ6#B^ɾ6B4CV~?UEBd6@A?%DԄ@=3DCaw"DCe)DCAC?(DCAA?+ D @ D4C D4CO D4CA@4C?i D4CAA?8CN5@]7KCCMCCpZBC7CB?JCC AA?ٸC@C4CI0C4CiAC4C$bA4C?HC4C0AA?9Be(@BCBC`C4CBe7?CC4CpAA?A1AbABABaACNAC=xABAA?kݣBĿ@1tfB4CaB4CB4C،FB4C}?wB4CAA?7:Bzn.A;BCvBCT*ACLE0BBe?6BCAA Cg%@ B0:6͐Bˣ6,Cˣ6 UqBˣ6?GB>6AA?S C_@"CC> CC BCa"BB?"CCAA?PBxmAYjp?4Cm? 4Clx> 4C/?h9<_&?,4CAA?B#@BCzBCPCCܚBC~?햅BCAA?'0BL?A.BB@A?SCAL@C4C!C4CC4C0XB7?FC4C@A?_ǂCCz@RCBc%CBPCB BC?"0CB@A?x.CP@UC+7[C7sC7tC7?C7@AbBws@BC`BCBCPAB 2?BCAA?^8B@a{B5lAC@>3CWA3C>;#BCAA?Cq@=)CCا7CCrCC W}BC0AA?fC @|CBzCBݖDBwCB?>CB@AAA.A[A4CA4C3AP8nEBP8x>䡷A4CPAA?A){ZA/̩A4CͥA4Cp??*7QA;*7D>A4CAA?MQzAUL*As'BB(BBĹACBC4>F #BBAA?݇Bd@fBP7 BP7T{'CP7ݞBP7?|B;OM7AA?/CO.@bCCCChCC51AB?ƝCCAA?RCn@vC4CrC4CC4CB4C?C4CAA?!0 BIA~ BC BCRəBz 7@ A?gK D`@ѥDBAxDBDB͂BC?DB@ A<CA8@k C}7H-CL7|=CL70CB4C?ȩC_7@ A?82Cg@ACBCBXCBeBC?CBA A?eC.@8C4CQC4C^NDC4C`B(!7?քC4CA A?Cy@CBCB7DBW CB?CB A A?RBrN@y3A3Cr~A3CB3Cf$B3C?NA3C0A A?A`EEAhBBeBBH!BCBC>vBB@A A?C (A#C9!6;Cʊ 6!Cʊ 60Bˊ 6?([C6PA A?YC?D@CB`A A?LBF@gB4C"ÚB4CV#C4C}B4C?KB4CpA A?-C*C@S_BCr)BC:CC\dBC?BCA A?v:CL@,Cl5gCl5UaCl5Bl5?uCz5A A? sBJ@BBbBBIBBAB?7BBA A?]Cы@CB@ C`\A?CA A??AOAngBCiBC?BB„BB?2gBCA A?AӧA[BwBCywBC%A3C\B3CZP?ʁvBCA AzBdO@AkCCGzCC`@CxBB?lCCA A?AyAY&A3C@A3C=@3CدACm?7A3CA A?B*ABBBBBBpAB?zBB?0A?Ca@ QCBuKCB4CBbAC?CB@0A?uB|?uB4CB3CC3C 8B3CPj?#B3C@@0A?CLk@gCBCBfCB1BC?|CB@0A?49B@( C3CB3CxpfBC^CC6?@B3C@0A?mDQAvDB;DBϜDB@j-BC?4DB@0A?/CO@x4C3Cy C3C-UC3C4TB3C?&C3C@0A?~C}k@NCC\CC꘏CC0xBC?9UCCA0A?B8e@)3BC3nBCBCQuBCfjS?LWBCA0A?4kB?p@"CC^Y CC7AC~r CB ?mCC A0A?EPB@aOA3CREA3C A3Ck@CsN>2A3C0A0A?DB>@qBBiBBCB$BB0[x?BB@A0A?[C@qC4CC4C*C4C@3A4C? C4CPA0A?MjB&@DBCBCF+>Cp[BBjk|?PBC`A0A?BZV@E:BC+-6BC^BC%BCWr?#(:BCpA0A?.B @BBHBB8BBLAB(?iBBA0A.tCt@@0C6&C<64C<6"C<6?9/C6A0AJCH%@ CCCC0CCA$BC?CCA0A?dC@b'CD7(C 7֣B7䑔B4C?&Cr7A0A?4C@u9CB:CB/CB@"0AC?9CBA0A?=AfuABC4tBCB3CdB3C:o?iBCA0AB AԹiBCw`BCX@C,`FBBW?M[iBCA0A?_كB[AOmB4C_[B4CB4C A4C?nB4C@@A?Cyy@UCC?\C\ 4PcC\ 4 B\ 4?WCC@@@A?BM@0 dBB2AB2yACBC->Ѵ BB@@A?iIB0@C4C6B4C~C4CfņB4CJ?jB4C@@A?5CWO@,CCk֝CC%CC($CC?CC@@A?DR AzbCW6 Db6Cb6B4C?ED^6@@A?QBv@MBB^BB@BBC,>9VBBA@A?0QC@5= AB4ABXS?B@C>AB A@A?BPCa@ȭC4CۀC4CħC4CछB4C?YC4C0A@A?\-B!A IBCCBC؏@C/BBW?gFBC@A@A?; MC \@ʸ[CJ5UCI5dlDCI5p=A4C?mZC~5PA@A? 0B)A [ABiABLriABr"@Ct>[vAB`A@A?"&C*@"C4CHC4C,C4C?[A4C?-$C4CpA@A?X5Ct@ CBgCBVCBʆBB?-CBA@A?mBx@B3CB3CC3Ct7B3C?B3CA@A?C@pSCCQCCBC`BB??SCCA@A?XRB JAB6>B6 A!6n}B4C:]~?B56A@A0vA-oAhABBBBBb4ACtUBC ?*jCBBA@A?B4A^BCBC@;BC`B3C?qBCA@AgB@_A]mBCBCS@CNbBB?qiBCA@A?5~A<6uA^l%A8sAx8ޖ@{8@4C/>|e&AΕ8?PA?Dd'AICB2CB DB@"CB?CB@PA?&D A֮ D6j D'j6xa@D'j68MC'j6? DML6@@PA?j6C^l@zBC!BC%CCV9ZCCC~?$BC@PA?ԟCq&@AZCxܝ58YCH 6 BH 6dB4C?WC5@PA?zCu@uwCBm{CBzCBl>C?9xCB@PA?`C0x@@C4CC4CC4CpB4C?^C4C@PA?qBD}@EBBt4BB\`BBFBC|? BBAPA?C= {@ C7 C^7r+C_7plA`7?Cz6APA?QCe#@N=BC,BCq8CCBCU|?әBC APA?{{B%-@mA37}A 7FBB`APA?[|'C"@iBC4C:C4CdC4C0B7?wEC4CpAPA?DMC;@$CC]CC|CCBC?%CCAPA?'_C@eC)6`C)6Q{]C)62V@4C?i,fC6APA?\B.AHBCRIBC-ABC?Be?FBCAPA?[C@B4C B4C1ZC4C6+B4C?B4CAPA?A%7A1ñAC+ACJABR6 BB>76ACAPA?A~wAU @C@Chy>C@3Ck>=Z@CAPA?TUBj@BBBBBB>C? BB@`A?qC?O@hCC*ECP40NBP4RC4C?(͂CC@@`A\{B= @SBBflBBA BBAC;?_jBB@`A?@aCvn@CCd CX?3CX?3ڸ'CW?3?CH4@`A?slC@2vCC _uCCdCCɊAB?|CC@`A? }0BLp@03A9ͬ7hAu`7Q@r`7 A4C >ȽAG7@`A͸BR3k@RBCխRBC8BCgBC./b?.suBCA`A?cpCN@ivAC4COCB?RSCBApA?> CVP@xhB4CB4C-C4CB4C?"$B4CApA?KrC@^CBCBZHCBHBC?KCB ApA:B@gBCץBC CC$gBC?(lBC0ApA? C*@y8CB4CBkBBBC?.9CB@ApA?XNC>@6CCS6H;C [6=bC [6(B[6?ACů6PApAmC$p@ W7CB/&/CB CB BC?}8CB`ApA?>Cy˲@B4C5yB4CyC4C C4C?mB4CpApA?7dCڻ@ͩ)CB9)CBCBoBB?)CBApA?SBu AHAL72KAL7 OAN7@4C>A7ApA?v*BHA:BBY;BBzMAB8iACS?|ңAtK5ApA?픀BcIAoBB BByBBg@C?ȁBBApA?SB$Aԍ{B>6S_B6:qB6Ž#B6S?:{BGJ6@A?ŠCbLA[C4CHXC4CB3C4CkB4C?5C4C@A?aTAC̝@fz:C3Cb4C3C`NC3CoA3C?V6C3C@A? CIAR,CCY)CChCCw-CC?;'CC@A?_^C_@/sC4CwmC4CGOC4C}A'7?ZyC4C@A?YrCq@ѩCC`CCCC`BC?v^CCAA?B6@B4CJB4CtB4CA4C[?B4CAA?C@6CBpCBpWCB;BB?ֆCB AA?B-@B3CB3C0B3CBCP?JB3C0AA?}B@f9BB01BBDaBBNAB^?7FBB BB~?UkBBAA?BAUB3C/B3Cm$B3CqBC?B3CAA?SB@BC}BC)kBCHbBB?۳BCAA?]BA, B3CwB3CCtB3C A3CHZ? B3CAA?LA‡A+AB-AB^2OABQ@CE?ABAA_qAv/AyA3CA3C".ACj9BCA?A3C@@A?@P@LAC ACoAB'XABN<_@C@A?KA.@\BCLUBCGB3CG4B3C;<>\BC@A?oEBܖ@BBBBBBpAB?BB@A?VTAA~KBCMFBC#B3CMB3CE>>yMBC@A?Br@_CBCB BB8AC?RCBAA?4QC@?9C4Ct5C4CnC4CVbB4C?:C4CAA?ҨAF DABBBB:BC.BCP'?BB AA?/C@CqN7C˃L7{+C˃L7AʃL7?/CK70AA?x3*B/%A7BBBBABe+AC'D?bBB@AA?B@6B4C٦B4CB4C5!A4C2?٩B4CPAA?BLZ@"BBJBBfBB@@C?BB`AA?B@B4C+B4CޚC4C uB4Cn?B4CpAA?"C/@ 9CBY9CBCBaBC?B8CBAA?YBAzA]}7dXAg}7Ai}7eA4CD?bAǪ7AA?ѡANoVAoy9BB?2BBV&ACBC ? :BBAA.B!ABs6B]s6hMA\s6NQB4C?zݦB:6AA}A\AACAC3>C;3ABrJ>WAC@A?VoCN AC>&7JCϞ&7bCϞ&7AҞ&7?׿C%7@A?lJcBKU@=BB`BBP*BBgAC5{?-BB@A?hC@Z`C/r7;ZCGs7,CGs7t\@C0AA?)BD@SuBCBrBCƿBCJ BC;}?8uBC@AA?qNCǻ@XtCT7uCn7Fa'Cn7B4C?tCH7PAA?TB@e&ABKABD۽BBBB{`K?AB`AAsB@PB;6mB;6zwB;6dB4C?4eB0;6pAA?AAnAPXBB*ACAA?l]BjeA^}BBoBB JBBAC?ш|BBAA?BC\AAC㐻ACAC@Hq@C\5?AC@@A?w&A?@oACHACOABBBY=AC@AAq6@6B4CB4CA)78B)7i0?B4C@A?oC\<AXCBuCBOCBCB?WCB@A\B@ `B3CwSB3C\d@ACȁBC"?^B3C@A?UCS@/)BCBC6CCL>BC?ĵBCAA?A6AP B4CB4C43EA+P8`8B+P82>+ B4CAA?l"A2AowACAC}Z@BlAB8>6AC AAZxBPO@a|B4C1}B4Cse^B4Cc@8u?Z#{B4C0AA?YBO @nBBBB`lBBAC~?BB@AA?{C1@%Be@.6B9}-6-C:}-6H_B9}-6?B_-6PAA?3Y9C@X,CB ,CB]FCBAB? R,CB`AA?AI_A*A4CJA4C`?%7@B%7]?A4CpAA?2BANBB~BBFABSBCeu?ɏBBAA?^B APB3C_mEB3CXB3CR*B3C?ԷPB3CAA?}A=ZrA$2BC:BC@3@CBBZT?"3BC@A?JCb'AfDC4CUO;ACAA?B~@ C4Ct C4CP TB4C@BN*7?Cl C4CAA?h.Cx@sLCCMCCpCCzBB?OLCC AA?Bʔ@YXBC)BCBCm2@Cw?=@BC0AA?ˇAC8AABKABaAC.BCg>AB@AA?ϋB̩@ojBF7(jB#F7ȘB#F7 B#F7٨?kjB\HG7PAA?eBzmAABCJ(BCAA?m,(Cɨ@RC4CC4CIOC4CrB4C?yC4CAA?6B5@.BB>BB<& BBŘ@ChQ?BB AA?HrA% A5տA4CQA4C+A8!B8">A4C0AA?BWAkWAB8ABbfABZ@C>*AB@AA?B@[BCBC BCFNB3C?ҾBCPAA?y*aBYLAѕABa-ABd͇BBHBBOC?w7AB`AA? BewAC4C,C4C%B4CPCB%7?<C4CpAA?"EAWjAOdBCOBCeX?C4LBB/u?-eBC@A?mtC@۾BCǓBCCCDTQBC?*TBC@AUB|К@BCBCaBCxACUa?sBCAA?9XBM7@tf`BCW`BCxmBC jAC?~?]cbBCAA? zA"A?B/?B?%C$,@%Cgt< ?B AA?ǛB@B4CB4CZB4C`#B4C?B4C@AA?)yB~*AtBgn6bByn6_B|n6LA4C?xSBo6PAA?B"@BCpBC:@B@AA?AK,AӃA4C`"oA4C.V@s%7VAr%7Ll>nA4C@A?\lAd> AB4CmA4C;A*7THB*7`>A4CAA?IBa@Bf6B6(B6.@6?BM6AA?AE9AqZBB,@BBPAC*BCtD?U [BB AA? C=@liCCBCXCCBC?/XCC@A?ApA@3C@3CD?C"-@C=@3C@A?ׁB7@`)BCBCDXBC< BB?BC@??߬C. AdCBCBt#CBPAB?ȈCB@??b9CX{@@8^CCd1CCqBC{BB?~9CCA??AVBP@ \u@CBB@@B"BCxb??JBBA??ީ:C]@CCZCCCCBB?PCC A??Dy@9V DBv2CBDBCB?CB0A??AD!@}CC$YCCPDCTCC?CC@A?b^C%k@ 9CB:GCBۊuCB?9BB??CBPA?BB@)FCC CCBC`jBB0~?xOCC`A??a܌C@)CCCC?ÒCCۼAC?9CCpA??MB@zCBYCB?^BB6BCm?#CBA??EB-@]BC8BC@BChABA?XBCA?W BAìBCѧBCABBBMK?JBCA?C@1CBX.CBDwCB3BC?*5CBA?A}RAd@AB4F@AB@CAC6=WABA??iBY~A^vBCloBC@@ChVBB_?gvBCA?? "B!@vAB(?ABnBB&LBBb>:ABA??VACA??;D C3@5BB47BBl'CBEqBB?zBBA??{B`@yBCBCBC@!@C?tBCA??AAWABABfAB k=ACu2? AB@???C@)CT[0CBC 8C[C 8CȂB8C}?SC}9C@??פQB@S(CCJA:BY@:B4yAC>)AABA???yMC@R.C(BtGCDBRHCDBa ?DBGBA???8uCr@C$KCϿC8ΑChC8ΑC C8ΑC2x?[C͎C A???C9@}CdrC C^qCVFC^qCB^qC/{? C#C0A???zCv@kC}CC$CgD$C/ C$CC~?1oCC@A???HC+@CBC BcC BB B~?ۭC̰BPA??;D@CECyC/C'D/C{C/C~?C%C`A???B@0ASCAzC3FBzCaAzC ?` B`CpA???T4CK@h:B B;TBBezCBGCB r?hUBpBA???WC9@!#CLC8 CC6ՃCCBC1{?$CwCA???BoX@IBϓBpBbГB2BBcГBlA2}C_?rB/BA???)B~@B\BZyBnBMgCoBBoBiw? B7BA???faB@B}B}oBI9Bv@I9B%BRNCd?B\BA??? C@B%CB%CGhC%CA%C.z?B)CA??ϧBDŽ@lcBCdBC_gBCx?Ce\?1dBCA???dB_@BYBYBxYBW BxYB BxYBB o?k@B `YBA???&4BJ+AyBcCzuBhC8yAgC 6BB(Z?XEzB0CA???B@BޔC|BܔCGiBܔC0BܔCsy?6BCA???hqBoAO;BBE(BB.oBB,AB}l?;BB@@?GC&@QC;uAC?'Ac*C?'AKARCG~?ClYB@@??I C<?VCWnA*CA%BAp=B09=Cs?!0CZ AA@??zB@C"CBeÇCخ? BvB B[?B!·CA@?fCm@`CCTCCm oCCFACY7z?sFCC A@??zCƏ@QCCztCtLCCtLCfBtLCX}?CqC0A@??$D?@\D"RC#DIOC? DHOCBFA}? DTPC@A@??o %D)@ DB DL$B;DM$B 7CO$B;g? DBPA@??kC{@(DCCZC~MCX}C~MC3pBMCy?OCVC`A@??C?5@GݍC|BsFCN(B3ǁCN(BAJC!B}?}CSBpA@?? Br@PGBpCB#:pCwIB$:pCjA$:pCk?̉BnCA@??G/B@qBAzBYA8B[Am?BYAne?sBOAA@?]Bw@CC]CC\VBC+BC]w?RCCA@??&ڌB(@(ߡBY5BtB,5B~JB.5BAK͘Cl?mB6BA@??dPB*A4?B CP5B CN@ߞCi:UBߞCJ ?g?B CA@??TeCh@ޙMCn@?HCn@ ~Cn@;YBn@`}?LCr@A@??JB_s@B ABiB AB7VB AB9SA ABt?gB^HBA@??B@B߅B5CB8CC8C~B8Cxr?B:CA@??@C,5P@/CPbC+CPbC[RCPbCDBObCyd}?]s/CdCA@??A-3AnBNHCncBJHCLAH:A7BM:A Q?oBZzHCA@??B>Y@%B6JBB6JB[C6JB]DA6JB|?KPBJB@@@??iC U@ DBcC=BC?B$B?B~?~C?C@@@??CpG@sC7ZCx3C iC7C iCpB WBI~?$C0kC@@@??CVJ@jCBȂCB:4CBBBe|?wCBA@@??[BX?@VBBlmB/Bۆ@ CսB Cz;?BBA@@??,C"O@CY CCtCgCtCBRC{}?uiC C A@@??-Cna@C_AC#A1C#AnNB`dOC|?CHA0A@@?? D;s@jDC\DCDC4'BBS ?DOzC@A@@??tBC{@CkC:C<(CփC<(CA=(C? CqCPA@@??4BD@-C=sC{?C8lCˆA8lC^c.C`Bgpo?7C#TnC`A@@?? C%OS@XQC+TC.C1SCC1SCGB1SCS}?0v~CRCpA@@??31Cc@}C:4C_1uC3CB3C]CVCz?CI|3CA@@??Bh@e]!C4SCq]CrSCzBrSC?BCU|x?!C`@CA@@??SCn@־CܾRCiCƾRCCƾRCCƾRC3{?`C0mRCA@@??L*Cn@.}#CVpCRCapCV0CapCA`pC"{?6'CCA@@??gk#CI@r%C*+BCT7B_"CT7B@]7BNVz?&C(=BA@@?1qCu@WCAC RCAC7CACNiBAC}? XCACA@@??fB"@UB"CBCZBCVA]Bwv?d6BCA@@??`BD@YNB C|NB>CB B>C2͋B>CKk?[MBbCA@@?MyB@C*CC'C1'ABl CBKjs?dCTCA@@??'sBVAItuBChB C[aB C?vCxq?OuBCA@@??XDWBs+Ay_zBd[CcBg[Cz/Bg[COAͶ Cp?zB(dC@@??h'C a@l2C*C֜CC賭CC+BC}? CRC@@??JC\JG@Cy9CCy9C^@-O@j~?)C>}9CA@??( CX? OC+FB<CC?mBCBBJiCNr?g%C? CA@??CYwT@C58xB CoxBCoxB;:BmxB}?!C]&xB A@?IGC?99CΪB&C[BQC[B))B\Bq?5-C;B0A@??ɗC}@C2CAC7CuC7C5?z0B,CA@??\B׍@BJCB JCB JCd@ JC\w?uNBJCA@??BEABxsCgBxsC2AxsC;#A/}B%S?"BSsC@@??کvC=@UC틲CAzmCͰCMuCͰCAͰC$z?ClC@@??B0?y=Bk@A #CgB #CXVB #C>pA7 'C@@??|CQ"@C[C[CxcCK{CxcCB#=B}?;C'dC@@?? C}|{@7CYCʸC|6CҳD|6C]7C|6C^0~?RCCA@??.`CTz?OmCaBFC$BEnC$B}B$Bmvy?_HSCSBA@??AkG@Q'B\'C;BgCB[CլB[C6>U_BoC A@??-( C*@5 C}B"$C"A$B"Ab B]$SCn?CB0A@?iC,^@~C1CCC#/A7CA@??̺B@ƏBoA9B\A;B\AAKCPl?gB>AA@??jB? AhB}Tu@_BWu@e!9BWu@jA`7C"_?hB@A@??!AA s2A ABA B(@ BAC?PAo~B?@??}B???B_B$A;hCZA;hCAv C >fA6C@@??l!C;E&@YB؋CB'CSCC'CB'CAm?-B(C@@@??!hCdz@LhC UBC"B!C"Bm8BVzC^~?5lC B@@??-B?B8x_C+ZBwC^BwCAwC b?BxC@@??CJ@IC AoCvB.KCvB}BxB"|?xCT\B@@??lB?OKC4C-C5C=A5Cw!CjDCzo?4C^C@@?? C|F@FC eC0^COCfjCOC y@?By}?ʴCCA@??sC @~C*=C"C_=CC_=C#8B_=CD7{?^CN=CA@??hBY])@mC.wCOBeCڿAeC7YB>GB1?wBhUmC A@??(OCk@/Cf*CCa+B'9 ARA CKAP CAP C\@Q Ck>PA CA@??E~B*@M\BqIfC ]B{IfC0KB{IfC{@%IBjU?\BqfCA@??pB}@BCdڌB¦CTϑB¦C@¦Cl?BCA@??A&AhdA}CّA}Ce9@{ CGA{ C{>렑A`CA@??0C&@2B6CB6C1C6C@B6Cz?8B)CA@??Au#AAΰBw=ΰB:WAB?@???B}@S#C$OC@B ClB C(BC6i?%CC@@??vC_@sC;B0Co%BqCo%B; Cn%B9:}?ȱCD#B@@@??ugC8@͗C:BoCk9AUCm9AA-QC z?v zCaA@@??O_rC$0@M"?CǖBLCBJCBUˀB B[z?0M[C*B@@??drCs@!C!C3C8CgC8CI9B9C}?2C2C@@?jB@BL5B!B%B`[?%BB}s]C?T?IBj)B@@?C @Q;C~CvCSԆCDSԆC5BSԆC~?CpCA@??U0DI@DУC6DiCHDiCP1KCiC~?DHCA@?=?D@rD}C->DlCm#DlCXA-B?D,ڎC A@?[C#{@,CdJCCLC DLChkBLCv~?uCZKC0A@?? ۤCzlu@qXCRBHEC7B?C7BD¢@zC}?ȻCB@A@??RB XF@3Bs BBٓBBC/tBCSB33Cq?oBCA@??!B}@BbCjBZC$ؽBZCQWj@ZC=Bt?-BCA@??Q2CyV@K:CX)Bdž;CX)BG$CX)BgA4V^C|?7:C{o)BA@??KfB @\B'CzԜB CtB C]@@ .Co?uBCA@??M(Bɣ@B1C@B1CxB1CACy?ߡBI1CA@??FOA&4A!.BwA&BA-̆@LC\7BLC2?-.BgAA@??IdABAjA2CoQA2Cw9A2C^?YCb>iA2C?A??}CEv@BVCUC*]LCECCECBEC%z?VCDC@A??LXC$K`@&C'5C&OC:CsC:ClB@|?Cjg:C@@A??w~B~?9CbB;B>BC>BB>B8?*BvKEB@A?CQ?̺CgBJBAQCA}CAeg?檐BaB@A??sWB,@P+BBfCBSCAABA @?gB7XC@A??[qC@j@WCFGGCWRsCHCpcCHCmuA?=Amy?qnC RHC@A??0$C?4{CZrCA]CUjCBUjCJCVYBtq?gClCAA?PB)$@A$C:C%CFCAACnA.B2yAo 1C2yAIB2yAt?BܑA`AA??љCC@!CTCC~ C&B~ CzMmBCw?ɻ'C&CpAA??sB#iw@˧B>BB!>BᳵB!>B?A>BRh?-BL4BAA??ecB A+UB[C5PB[C@[Ck7BtB5=?TB[]CAA??BK,t@B0ΧABЧA揸BЧAt0@HCr?}BAAA??އ%C{e@Bd BBBPJCB٣BBxz?}BBAA??6DBd<@vBޏ@jsB@!6A@Y&B8C-Q?)uB .@AA???BC k@(C@;{C^n*CE;{CVCE;{C0BD;{C'}?{)Cz;{CAA??ֽC @BHCuBHCCHCGAHCÐz?fBHCAA??B@B]BBtBFxBuB?WqCx?~BBAA?7B@HtBg\Ct,gBV\CBV\CxAV\C#t?9NtBy\CAA??OBE)AADB02Bܠ3B02BKJB02BW@02Bk?VdEB2BA??}Cj@ 9CBCB CBAC?CB?A???C@WC~ CNCcSC@A??SC/A@iC]UB̶ZC\BC\B*C]BA{?.+`CB@A??J&C?CU6BC7AC7A~@7An?BCB@A??jC>@JC`B8҂C8AbC8A:"C@AA??C,@fQCh_CC_C5weC_CB}G.B}?CEb`CPAA??OB@红BR\CB߬C @YC{BYCp#:?{DB/GC`AA??[Co@yCgByWsCgBД=CgB WBTC}?%7wCBpAA??v{B@x]BB?UBB ^ABxB |Cj?CdBRBAA??wBex@hBABkA BhAUuAdA$o?%B\AAA???bBn@;"-BgCJ%B CŭB CT@ZC47?90BӬCAA??Bf@>%CamC C^mCZB^mCBwfB5M{?x%CЧmCAA??q7B0@B{.C|Bq.C.Bq.CB\0Cve?ftBA CAA??lB@WBGCFBGCrAGC>EBʀA"g?.ɛB GCAA??7Bd;Av_7BB/6BBABC݌AjCpM?Kf6B.BAA?rB"NAA.BCs'BCjvBCQACEZ?.B3CAA??DAm-A,N?{A?(}AJ;?(}Ab?ICb8={u?A A??gfC?C@gC5ꌑC5nC50hRB4C?j,C75? A??CARCCC6?}?;hC CA A??>BNj*@dBrdC8BCJBCAKFCr`?B"sC A A??ȖC (@a5CBAdC4/:A|C1/:ACB?C!}?ϕCu8A0A A??CIȯ@緤CCwC4C#C4CXC5Ckq~? CC@A A??Q[B?@BķC*B܍C5@܍CpBIrB2j/?0ГBϊCPA A?TCF1@ 1BHC'wB HC>8C HCVyB HCw?B73JC`A A?? C]E@ CހoC.CoCCoCY#?nBpw? CdpCpA A??Bm@*BP~C݊&B~CދB~CBeA~C )T?f^#B ~CA A??MB%נ@B,CuB+Cl.B+C}C;BW"Ck?iBC5CA A??#?Cz@?C/C6C)C CC)COA)C1|?>CCA A??ǒCr*@cBA<B(ASBECA A??/\?BA]wYBm5CŸTBa5CLAa5CuAC9U?YBCA A??HKA@A0SA]CA]C~v)A]C@@cj'B>S.AM]CA A??B*GAqBW$CAW$CNAW$C<@+CyA?eB%$C0A??V%C.L@#GBC!BCTCCBCt|?m1BC?0A??\H7Ck?ANC_*BC{B5C{BA{Bn?jR/CB@0A??,B׵? C2CBwQCAwQCBBAN?bB"rFC@@0A??QB< ?1BDA%B wAsB wA)TJA.ICQ^?%BA@0A??>\Cs*@9mCCzUNCନCv^CନCBAନC%x?ZC/C@0A?"PCs @3[C3CиkCnr@M,Cmr@|B9CBVz?!cCt@@0A??'kC䓠@}C4ABC&BC&B|B]C~?KCL#B@0A??Cj@YnC1C1CvC|SCvCSvAvC ~?CꠦCA0A?OB@ CBBq&BbBq&BpvwBD]C+d?QCBA0A??uCҍ@lCBqCݲBCݲBQPCݲBg|?rCB A0A?`kC E@"BqCڙBpC):BpC @pCPs?jbB%_C0A0A??FC͵@ CE.CCY.C3CY.C#O{BY.C~?;Cl^/C@A0A??B/@B[cB4C?@A??JCj@|59BsBIBRGB_5CRGBElCRGBh?dBpB@@A??:wCy@CnBQCpoB#ȯCpoBBpoBSg}?C-oB@@@A??='C>@+CC%E C ,CC6CCkAqTC'w?&2CPr C@@A??1B@DzB`BLߓBBOBB3A8?B[?BB@@A??c4=Cy/@/B露C-BCnCCBCCu?HBC@@A?? CO@KCc$C2B(CFC(CWڻ@(Cl?VB&C@@A??[C#@5C .CPC .CC .C,@ .C{?kC%.CA@A??OCF&@!>CRHCCCICRCICpAICz? GCN,JCA@A??ACE@VCĭBCB"CB{ABvRw?N C)B A@A??h-CK@*B-C"B/C^cC/CsB/CBBr?+BMZ2C0A@A?=a\B. @BhCBXC+wAXC6bBOCB+K?=ދBC@A@A??Be@LPC# BC B ևB BJ*wBC.Cs?KkC BPA@A??2>CMg@#Cw CCf CWCf C^Be CY{?%C C`A@A??IB!Hb@҉B?CdB?CZ$B?C&0ABfx?:BCpA@A??i]C`@*7C2HUBQE.CUBBCUBBUB|? 6CnVBA@A??kC5P@" CpӋBr CBQCB@B}I{?GCYBA@A??EB֤@aZBCIB뿨CA뿨CY9!AC1? BcCA@A??"B.A3B?C\2B?C=A؟CB؟CSI`?ˮBCA@A??AH)A;BUjC/A_jC@x%ZBBz%ZBĎ>vAjCA@A??_+WB5"AйBFwC ؂B9wCA9wCV9BܵB;%b?0BFCA@A??oB{AqawBOC}lB!OCL OB!OC@ A!m?/xBOCA@A??pAc%?AIBH+Crw2BH+C?G+C+BCqI?HB+CPA??A8@*CBBeȚBB< BC BC"?BB?PA?ޟCݑ6A֊C}7nCCJklC2CJklC5YCBaB}?zCBmC@PA??CXd@R8CCޠ'CaCBaC^QBtC70u?*CC@@PA??$C@wC#CC@C)C@C@BX}?*UC C@PA??6[CX@#C*Cu"0CCjvCCBCںv?^>)C C@PA??^C?sC&CB&C]B&C @TCEk?E B&C@PA?.C=4@|CCAvC AGlC AGӊBOC}?hCZA@PA??;[C޼m@RCmߕC( NC!C|9aC!CʘA C`{?#NCCAPA??B3@B3aBBB`A/YCnQIB/YC>2BBAPA??p B@kBBGBBYBCtBC?bBTB APA??+C';@[+CBվ'C=BE'C=B?:>⯓C z?{.CB0APA??!Bv@MB CuJB C 13B CA^CZ?͘BsC@APA??BZ@wBƗyC$ByCkByCAyC;t?BxCPAPA??&XBs@pB[CkBSCBSC=HBSCȹk?:qBC`APA??I/Ck@Cr4C CI)CMCH)CQBH)C[z?CCpAPA??"GRB!@`BOA<\BEuA4AAuAEBJC@]?.BgAAPA??jDBЏ@B7gC1ֽB7gCIB7gC߾ALB_nr?BHgCAPA??D1rB3@ ;B6XCY}BC=m?#BC?`A?,!B}5@tBmC7BinCxBinC!AinCHT?aB1nC@`A??$ODCĎ@PCC@SĆC)ĆC7M'B@Cx?"RC)kC@@`A??I>B7@3B_K)C`>B,(C\?CABC>ڞ>B (C@`A?? \qC@|C3BuCmBgeCmB;;|A6CH|?sC?B@`A??_Cb@ BɋCBӃCӋ7CӃC(BӃCht?CۍC@`A?8:AN@BqV @B @fB*6CC*6C3?*|B>?@`A?C@Q|CaZB[?rCYBCYB^BYB^|?'xChSBA`A??[CX@%C0~AC(DCsAC~CsACZ5BsACt}?CACA`A??UCy^@ˀCJcCI}CcCP*CcCB BCA`A??dBd0ADjBuC^BvClFBvC|6@>"C#k?äjB$CA`A?+A,AI6AàCAàC8?z C SAz CZ>XTACԠCpA??B62=@&BBZBBPBBdZ|BCw?BB?pA??g!CE@gCy`CcCAaC"CAaCXBAaC|?ھgCbC@pA??uACnj@CXCCC]CCiBC7y?V`"C`C@@pA??lC@SC^9B Cp_9BCo_9BBk_9B|~?C'q9B@pA??'C@/CsCדCVsC`CVsCZaBUB}?MC3tC@pA??JCF&@|BLBZѻBB~CBXjBB^l?BfB@pA??,B4@N CeB~+CBquAC5CCad?j C7B@pA??G`fBy@eByC@o`CڦACIA`gCGAERBNC}?&CTAApA??QWCZ@i6CvB 1CvBMcvCvBBvBc{?n4CgB ApA??%Ap@V0BaBv,BfBAdC8ߒBdCA>&*B䳹B0ApA??IBpt@BB>kBBSshBBSƠA Ckl?BnB@ApA??Og:C2^@#C1C۬C /CQC /CTB /C{?s$CCPApA??s"BP@ BFCB8CTvC8CB8Co?DBC`ApA??=Ai!A B_9C_JB^9C J#A=ݫ@1B>ݫ@>; B6CpApA??nB<@}kBCkBC!BC0AuXCU?lBCApA??/ܝB@:B&PC B%PCCB%PCcA%PCk?CmBOCApA??)B@B< BۛB BhB BAVCin?uB BApA??; BMA-?B)ZC1B.@%+"CdVBCB]BBBC|Cv?CB@A??kC@$CB΄CBCB9ABW~?ˊCB@A??gCa@Cr;C7Cn;CԛCn;Cw!sBn;CU~? NCr;C@A??A]@dB 5A ^B\5ADlBf^?C;Bf^?C>oBr@AA??ĘC@`/ECBCk@C\C>B\CBo]B`{?HCCAA??SB60F@PA*#NBA?!NB`B?!NBwB?!NBivV?*AQFB AA??kB@MBNC`B+NCUHB+NCAUCUi?J1B)C0AA??{OCUS@^_jCAJ_CUA9CUAiBkMC<}?ޗjCIA@AA??(C1@ȕC`zCd&CZsCrCZsC6BYsC8~?CgCPAA??B)y@{BB9 CB CB CdlA CWs?۩B욝C`AA??¥CTq@r'COCK;CNCdCNCWBNCD~?|C˨CpAA?? C@,B̿pB)BpBLCpBTApB9y?BqBAA?GrB@,B,CXB,CQA,Cŋ{Br Cl?B,CAA??ģBY@BkB3BzB=w|ByBA>wCu? oB7BAA??aSBM/AeB"jC]BjC3BjCA CU]?fB8CAA??GB@~cB9BBABUBDBPAAaYCSC|?zBf?BԕB@@A??3B+@BgCnBlCBlC/A/CAn?vBC@A??kC@9CB3CBPRCBBB:{??B7!B6~?KCB@A?? wCm w@#oCC<jCC{0CCMAC~?7pC=CAA??AQ@>B VC4 B VCDA2B`=B2B> BQUCAA??tC@@BQCBQC CQCFAQCv?B0C AA??N^CIY@FC*Bf QBFvB@AA?? BD@WBEkCVB>kC *B>kC8@B#2r?KBOCPAA??B۽c@nQB(&C6B+&CPvB+&ChhA+&C=?r?+ZB2C`AA??5CT\S@z1CC3CC<3CC)L?C }?2C켨CpAA??vB1@VBICHBbIC< BbIC)B A_j?BICAA??2bB!ABOBu/3B*MBT/3BE@BT/3BY@`CbGa?)MB߯2BAA??>B,AB^AnCUAVnC8AVnC}qAVnC6>^AɌCAA??ꁧB[@HBVCednAZLC`AA??2C Fo@AC-CCCCCJAC"z?xC.CpAA?? B.@׆BC؅BC8BCĂ@C"p?-JBCAA??:3BA:wB{gC emB{gCwrA{gC+-BMBhW?HwBmgCAA??eBɢ@?)Bv"|Cc]By"|Ce.By"|CWBy"|C z?&HBo-|CAA?pJB9@TB&CvB&CruB&C">Bs?B~%C@@A??B@菄BեCBCtBCDUBC #l?wBxUC@A??TBn e@-CIvB&CO{BBP{BB}Cyy?/Ch&B@A??ӌBS@n.BSCnpBRCVHYBRC 1AAMc?qwBRC@A???AL@=BͯB5B=ڮBeACdoBCL?$ABe[B@A??1A@gRAKlCLA]VC>'C3WOA/C_V>7^A#CAA??MB7@CmCcBmCBmCXAkgBy?C^mCAA??eB7@%BQ|>C5B3|>C-B3|>C@A 'At?B=>C AA??oB*?@ }B4B]B.B B.BrBL9Co?]BNB0AA?#B?@aBTCkBTC,pBTCUBBHrw?zB֟TC@AA?? "BF_@*8B.ڧC[BCCOBCCACHq?(+BCPAA??L'B6@*|BPC|BPCo^BPC! BPCeo?[|Bi3C`AA??C@&C[ĮC_$C]ĮC\C]ĮCmB)C_|?Y&CʮCpAA?{B @qYBKCQBQC!BQC?BQCWj?jYBLÏCAA??0BUi?ACBiCBiCAiC@"CChT?KBCAA??_|B6ABCbACKBC?CI?uBsC@@A??&BHA@B BM=BӨB^BӨB߮AըB^9E?^B~bB@A??BƄ @kB`BjbBŭB,BŭBu BŭB%h?lB2JB@A??JC5ݥ@%JC _TBM(DC_TB*eLC_TBA^TB}?LKC+TB@A??BH"@፹BNBϴBNBVBNB<2$ANBXt?BMB@A?C1w@Q}CJBQyCJBCJBAJB;~?}CKBAA?BRE@B 8CKB8C{B8C|iA8Ce,i?WďBj8CAA??B$T@ЦB%C%BCB~B@A??j&B:@\BxcBNq^B}cBmu>A~cB.BC޷O?#^ByBAA?? Bx@^BEC?BCjM@C B1C#?:B#CAA??BY@ C~$C Cױ$CࠍBױ$CFBXCHy?( CD$C AA???Bm@r B&lC&EB&lCB&lCHAК`B0iu?=ϹBlKlC0AA??WB}@xBCdBC8=C`BBp?B4C@AA??Bq@{B)BSBu)BBu)Bw@})Bv?B)BPAA??tA8!AA鄪B'ABB&ABz PAECoH?A\$B`AA??F4B+AsBWuCQBWuC@WuC׳B;B>p?BguCpAA??#B @B~BC|B~BuB~B*A~BHw?BdB@A??%B8D@F.AfYCnA.YC:B.YCCXB2>CyeC2>CZA2>Cb}?7BM>CPAA?B@еBׯCyBگCIBگCvRAgB.w?صBNC@A?? CA@AIBСAByA+C-B+CC>|AmB@A??PB]4@bB&Cv,B&C\C&CPVB&C%w?B/&CAA??[B@RyBMOCKoBDOCbBDOCѹA=B`?uxBk/CAA??0A& A-)B|AV"BrA[ZA/RChmBB/RCS>(?(BGjA AA?uvBy@aB$?BUB7?BXB7?B%A4?Bs?bB@B0AA??AeYAALCAZLCM@YLC]ZAA>0ALC@AA??rACAhBxCdBxCwб@xCTA5BXZB?BkyC@A??IB U@8BCa0BC-ACA2+Cl#F?7BdC@A??zBU4x@Apl CA~l CA~l C@~l C ?쎒A C@A??B@n޼B{AzڳB{AuB{A'5B{Az?pBlAAA??&'Cϊ@CC B`4C BC BNAqWC~?^BC[ BAA??lB `D@q+BRC_bBRCUfCRCPBRCXz?b%Bh\C AA??3QB>@BCXsBCBCSACw? 8B{uC@A??00Bj@e]B؋BP_GB݋BB݋B8A݋Bt+s?]B֚BAA??4Be@ FzBՆCeB ՆCA ՆC^$B!TBq?*JzBۆC@@BM (@B4CcB4C B4CA4Cs|?B4C@@?C@`+C4C0uB4C.C4Cp$iB4Ck?5B4CA@~NCYLZ@ܻXC3C3C3C.;iC3CUB3C?6:C3CA@?ct C.@B4CC4CC4CAiA4C?VC4C A@?qB!98@PGC4CeZC4Ch A4CjFCc87E?%nC4C0A@?9OC5@ݣBcBCCC=jCC~?HBC@A@?67Cdmf@|CClCCׯCC\B3C?oCCPA@?D@j!D3C>D3CʜD3C@W>C?nD3C`A@?ïAԼZA$B3C,#B3C\ACZqBC>#B3CpA@?A`A/C(CCtB4C.C4CYXg?+CCA@?BC@%C!CCcCC1ACA@?8B~%A5A3C%úA3CA3Cz2@3Cd ?vA3CA@?5/BA B4CTB4CLA4CA%7D#? B4CA@?)Cf@.CCCOCCd9AC?CCA@?AzӄAB~69 B~6<A~6.A4CM?ZB6@?@?B@\BV!NCBB BBۨd?B5?BBA?@?yC`;@[DC΁BvC-HmBpCC/HmBB RoCM5|?_C}rB A?@?CX@ Cʲ@aߙCMXyA>CKXyAzBIXyA!{?CNA0A?@? B *Y@-B"CbwB7VCS B7VC-?>VCo>A̙xC@A?@?oC ]@`C BCU BPCU B7[BVwVCX|?CBPA?@?/D_@e$DIC'DtC26DtCyrBtC C?$DeRC`A?@?Ch@CBИCۓB$DۓBpBՓB?5zCŶBpA?@?kףB+@/BBнB"BEB"B5BȐC̈a?EBBA?@GB t@GBCuDB CC CVڪB C^?YBעCA?@?"uC[@ CC8CCT=aCC& BB}? XCqCA?@?J6CR@ad'CęC $CșCCCșC/pAșC|?I'CCA?@?A}APMBC@BJC$AoC BoC+>GBCA?@?PBɋ@yCHC0 CKCC_BKCB)CŚy?qqCCA?@??B@CpqAgoCgqAuBcqAB.nHCx?BCLAA?@?.B@)BĨCLB̨C#~B̨C@;AܙC/>r?VBШCA?@? Bn@BnC/BnC{CnCBnCVx?BukCA?@?CBAA0)-B&C%B&CA&C5AMC] N?[-BlsAB@@@?nCm@CC tCfFCPCDÅCPCCBQC y?pFC:C@@@?bCذ'@CzC{BC# CC# C C" C-ow?G#C(CA@@?ocCb@[CS.gCƪC|Cm.C|CBB{?aČCN|CA@@hC?lv Cߜ(C:Bk?C!Ck?CdZBk?Cm?PB@.8C A@@?ZCwk@C?!C`6C/CC/C;B0C{?;C C0A@@̩B}@ rB݁B!cB$6B7A8aC ıB8aCS>&hfBNWB@A@@h5C>C@aRCCr9CCbCCA'C}? uCtCPA@@?sC;y#@ICfgCwC(CfdC(CdzAQCy?){cCC`A@@1C4.@bB%CBCQWWCCBC$Cv?YCTCpA@@?ĵCp/H@^CC;C0CGB0CAlBu? CBڑCA@@?fOCd@h%CIC"C C,uC CSݥB C{?&CCA@@?TdTCY@UCC PCᴪCHSCᴪCN@䴪Cʷ|?UCuCA@@? `B+@sCϱBCFB0BGBGTB$vCy w?%C~BA@@?k۷B˳@\B&BB5B]YB5BV"A@CCzo?BOFBA@@?xBz@B6ۭCɠBRۭC2cBRۭCྼA'C'n?xB=DCA@@&Cw@BӎC#tBӎC9AHCӎCPBӎCAz?BCA@@?Bъ@VBXRBB&LRBB&LRBP B hCx?dBBRBA@@?KB&!AB{B)cBrB*@rB BCGi?TB{BA@@?'@+BA?AuBZCOiBZC1AZCQ!Bq.C d?uB|sCA@@BS@3B~Cy)qB~CB~CXB~CSx?!BhpC@@@@?B1@eh~CMKC&C/8CҜBe@j0SCe@%D7?6Cִ4C@@@@?sCob@@C3?C'CCFCC" CCx?6C#TC@@@@?gB @(CmCo'BކCAކC!B{B+`?q3BfqCA@@@?Q,Dg@;DrTBj0DRNB&DRNBBgCk?6DGOBA@@@?MC>O@:jYCA5{BCw'DAKCw'DAA{'DAw?IFJC3nA A@@@?MC@3(CCC^CǯgC^CoB^Cn?_CkC0A@@@?TC @p$C^:BGCjBTCjB^AjBux?6C{UWB@A@@@?uCM@CTCjC/9CC/9C:C^r,C~?C]ZCPA@@@?ưCx@nBCB,Cx7C,CI1B,Czk?RBuC`A@@@?`աBT4@줐Bd:AsB#A>B#AS@P<>C6MX?qB@pA@@@?n CGW@\BgBB-BC-B@!B-Bo?]BSBA@@@?r`Clwa@}qC֩BDmCA֩BOCA֩BmoAuC(}?,oCUBA@@@?ѺB҆@NӠBlCԜB0CB0CA1CIm?eFA>DCA@@@?WBw@bBBBBMBBZ 0>BMo?BBA@@@?uAq#AEAgAAAAA@@@?Bʴ@T\BABTB?BLB=B2?4VC;u?/lBBA@@@?A/AMBɞCBΞCE>ƞC)B:{B7?F B괙CA@@@?J0BFAA&CAC.BC{sACpQ?AC@@@?BCe@|FCk^BPCBsCB،Bg xCB}?CX"B@@@?S+RC@`CFC,0CECfCEC^ XBECZ/x?y7CEC@@@?{B+?vCfBC_vBA_vBUBqCi:j?uC@tBA@@?Bd@^uB8n@t_B?CÞB?CWB?CiII?wmBoCA@@?*lC<@ gC,A*yC^ATyC^A#Cz=C}?PmCSA A@@?B Ta@ABC]fA",C&@",CIAB%>@'AWC0A@@?CBV@ EC+BCBnCB́ABm"~?Cds#B@A@@? DϢ@DRBD@B D@B8A@B'? DGBPA@@?V,0C&@'*C}Bu,Cg9rBUz&Cg9rBg@[pCAv?+C:vB`A@@?~RCB@aMCB]HCBUBBBCt[y?HCjBpA@@?>BP@^B`CRBCLBC4ACqi?3B CA@@?XB-h@!C1CCCuBC%BgC{w?&CCA@@?2 Cy@yB!(B^`B )B,&C )BB )BWw?BBA@@?c26Cme@C]C,C]CaC]C\B]C{?C ^CA@@?D C)t@84C)ơCC͡CC͡Cvh@eCh6z?5CաCA@@?BĐ@3GBAJChPDBCHCs=CZCǎCZCzBjB4Lv?N;C:CPA@@?: Dxɏ@(3 DmT@? D~O@DO@i{AO@@?z DQN@`A@@?3B+AB䜧C޹B#CsAEC;BFC;F?-BCCpA@@?+>B{@^B6C B@CACRCiB[Axgz?VC TC@@@?p BH?"CzBnB=Am@PCsBPCW?a*BA@@@BFi?<:CkB#B(CNB(C'BNH3CQg?C^ֱC@@@?\C:<@CCdBńCCńC_-CńCu? CC@@@?\C(6@CC^VC-C|?C}C|?C#4B|?Cx?92C]vECA@@?QSC*@x6Cl@rCуCJ{CуCYBуCy?)_CCA@@?ClG @oCBGrCB@CBBBx?o}C[B A@@DBv&@BNCPBѪCBѪC8A!C%k?B9C0A@@?VD'@ D ChDW7CCW7CΒCnBE?D0|C@A@@?3/Cf;@CCCvCΗxCvCav:BvC{? C 5CPA@@?Ȍ CvC@BCB}B C}B A}B;r?BtB`A@@?b2B<AbAۑC~ACc?C6AҋBRGb>9ACpA@@?Bm@(%ChrC\!CrCٷBrCB{Bw?KCtCA@@?m(C{e@>oCt$ChCm$C5Bm$C jC7pC |?3hqC]$CA@@?A]BkD@ BՖBךBՖBAՖBr_BjCtd?nB6ԓBA@@?2C@KьCCMC8C:C8C~@7C&~?CaCA@@?GYBm@FhBvkAaBrkA BrkAލA*BCwb_?=[cBm[AA@@?]BF@eBBC,BBChFBBC'@ziA&t?+BBCA@@?Cq@;BoBB/BeK-C/B#~7B/Bz?]BBA@@7Cv}q@4C7#sCL\3C6#sCC6#sC8FBԌ|BQ}?4CsCA@@?tBAB>tCB6tC B6tCr5BjBo?\ǥBktCA@@?΅A(C>CUC ?CA2C ?C@0A.J|?g-C?CA@@?UCM@sCZCCN CgCN CHAb'C~?jC C A@@?CPR9@hC;CyjCjCÔCjC9|BjC]|?ynC!xC0A@@?iB֋@[mBcC7iBԵNCAԵNCAAM?ܓdB,}VC@A@@?G CVt!@=Cx CTCᕍCQBᕍCAWB s?xC&CPA@@?L CR@GB#BTB#B C#B>B#BKp?sB$B`A@@?)CC#h@-CCfJ&C C!C Cɮ@6Bpw?J,ClICpA@@?@B@fBIBWBB~mBBBB|C"X?aBiBA@@?!>CCA\@ &CY5Cj#CDY5CB]CDY5CdjBDY5CV5|?Hb&C6CA@@?!BF@2B$C֧Bb$CKxBb$CwAH&Cn?B[CA@@B%@6BCBCCŢBCACq?5B( CA@@?ĊpB@NBxCBgCfBgCAgCy??Bz]CA@@?ZcBA!rB2g?蒦BlAg?AqAg?ẃBB4Cd?vئBu?A@@?BC}{@PC8րC@CԀC/CԀCk@ԀC2z?BӀCA@@*Bx@zBȍC6BɍCBɍCX1AɍCAy?BCA@@?A6A%B=BQB=B4@?tC#BtC&2?%BI>BA@@?!8B?ABwBAwB2BwBdAwB.P?R BB?A@?RCu}@CCxCWZC~CWZC8[A+C5|?8ȏCC@A@?ԋCW@C?BzCABCABBAB{?RCcBGC@A@? B@*tB-6C BCMB~^CB~^CDP>B $CAA@?8D,@k.D!cC,DbC#CDbCܸBbCE?rQ-D,CAA@?74C^@lCBLCװB%CװBRACװB{?ΦVCjjB AA@?7CGb@ ]C}+B@C!6BSC!6BeBaC}?{C#3B0AA@?\Bⱝ@TBSBdBYB'@aCYBaC[#?*GB}B@AA@?U4CJ'@CiCCܩC[bBܩCUBCev? 8&CIrCPAA@?'+C5I@CцC&C=ݱCߟC=ݱCϕA=ݱCfs?CC`AA@?U2 C]@BCUBwCsCwCM BwCdKu?+BxQCpAA@?4Cn@`CR/iAi!A0#BABAiBHC^BHC"?BP.AAA@?K`C`@OCZCPC]CalC]CqA]C\}?7NCoCAA@hGBO@ BMC~BMC/g{BMCA Cs?αBACAA@?OC8@CCx[ CC-M+CCBC%{?=C)CAA@?]B%A B&A0}BA#BAL+AcPCTq?]BߑAAA@?IuB@$BۃB uB܃B}B܃BVB܃BCwx?"B؈B?A@?#CpO@(C1UBC/Ca6CU/CCU/C !WBC:x?HAQCAA@?ZB AUB$CTB$C<+B$C%AICl a?}hUB+CAA@;B0ACǟB0CVB3C(@f,!CdBf,!C2_?!BKCAA@? {B\A6BtpC BrpCgBppC(BppCXd?'*BpC A@?qEC7ACICұCB4C?C? A@?-xC(?ACCwwCp}CxCp}C8Bp}C-|?Ct C@ A@?CXe@C>cCC)]CC)]C`{AQ$B[}?CP^C@@ A@?EC$@zB* CCm(CWWCm(C=lBm(Cxp?|CC"C@ A@?8yCyme@uC;,C̞C Cz(C CCq(CZy?]C IC@ A@?)B?GB.CB\CC.B\CC:vA\CCQG?(B9C@ A@Dې@C=C{CCk DCuBCж~?1%C7ѡC@ A@?&MC"D@vCCvCCn;CCОCC|?+FtCaCA A@?`}C?%4@CC>ЫCCCC:C9C5}? CCA A@LC"@-C2CyDC7CDFC7C?7Cv?9CPC A A@?`I Cے'@HCsAxFCBdAOkB?dABNBC}w?FC`A0A A@?iFC%[@߫^CeC$XC֞eCAl-C֞eC,BT{FBn{?3UCEcC@A A@?sCӔ@7CzLCeCMCCMC|BMCr}?UC+tOCPA A@?tCmF@+~B VlC\BVlCح!CVlC +BVlCdw?BnC`A A@?EECOR@3&C*Bs!CI*BlhaCI*BBI*BV{?C"CW BpA A@?OC@qϘCV&CYCW&CCW&Cy@W&C~?vC:&CA A@?д>B@.(2A=C)*ANCnCFANC(?NCw>1AbCA A@?^B$ARBbCZ\BICvjAVCIBVCB,@uBNP3Ag vBJI4AIBHI4A$A@I4Ai?tB6AA A@?yLBM@*BLCJ&BNC̯BNC.8BNCZ_?8'+BCA A@?Cr@%BsCBsCI: CsCzYBsCC|?]BsCA A@RBzHAjAT@ܷAQ@_AQ@@";C;?A [@0A@?BC-@gBC CCPQNAC6CBju?CC?0A@?ݰC@RNCWCD~CYCCYCl;C[B4|?Cs9YC@0A@?ǜCZĥ@C@LCyԍ@]Cyԍ@$Cn8C{?ͶC@@@0A@?C8٥@CɲB-CBbCB:AB{?ЎCB@0A@? `Ch@ CѐCCҒCCҒCC HBz?CC@0A@?mC@@㭼CzBGCBjCFY#BBa?ԴBȉC0A0A@?`C<:@FCC CчC(CчC+BGB#|?oЎCXC@A0A@?-C-W@oCBtjCcʦB&CcʦB/BbʦBy}?HlCӥBPA0A@?XB~@`QB^EC]KB#DCZA#DCaA"C#1?6LBjB`A0A@?WrC^`@,\CC1{CCfCC0A C+~?AC֞CpA0A@?)CnE@rL6CZBʿ0CB CBA:XC+|?63CBA0A@?i1BD@n{BwCÀBCsBC*3AcCe?oBf=CA0A@?tYB%@pBT C3AjB3 C}B2 Cj[ACe^?/rB CA0A@?AOC \@\jC GClC GCC-C GCeyB^A\K}?VjCFCA0A@?$[ Cv@εCCXCCCkXC>BjXCBB>|?@~CCCXCA0A@?u5B\'A9B.ϚB5B3ϚB8E@2ϚB׊BͳCPc?BBA0A@?A,3'Au#/B[C6L(B[CA0CVnB0Cϑ?5/B7CA0A@!B4A=ABABBB'oABH;?AfeB@A@;DQ:A Dc|5vDʲ6.Dʲ6R@A4C?. D5?@A@? C@CJ*CBJ(CCJ(Cx{BK(Czh?ABu)C@@A@??C8@:C@BWC$BnC$BfBɊCcy?|kCtB@@@A@? Ca@C[0CCCjDCp7BC~?dCC@@A@?aCc@;(CiC)6C6CB6Cl sBm"Cxx?0.CC@@A@?eC"N@kCNYCyC1YC C1YCDCB/|?C'YC@@A@?`9Cr@MB[ACRAD*CRAH\ARAn?B"yA@@A@?dfB҅@BSBջB.B+@1BIBLC[N"?L B&BA@A@?ҠC-]@ C=A2ƊC A{ϳC A)%B A}?7UC qAA@A@?¢C?Q|@b=CH@\dC]K@HfpC]K@1B:/7Ci}?ySCxi@ A@A@?fVC!/m@SFCB=C oBeC oB`"B oBz?>BCIB0A@A@?4'Cp@(ѽCgBFCU/BCU/BkBT/Bt~?CB@A@A@?mCH3@6(Cc5AvC4A[ C4AE0e@o4AIv?CAPA@A@?/ԕB#y@BCsB CB C1r@ CTf?7BC`A@A@?&WCuD@YCr[CWTCS[CUCS[C;?_[C%}?uZC CpA@A@?CO@B,Cq B4Cl3C4CΖB4C w?IBECA@A@5BB@>…B(^{B"B{BZB{BTB{Bo?BovBA@A@?_QCtQ@#BCBCCC$BCLow?Rj?BbEBPA@?S:C@BCBCVCC8 CC?[BC?PA@?6CYAcXCC|ǯCC[CCkoo@C}?3.CnC@PA@?WCƸ@wtC<_B2CBCBn!BBT|?X2|C)/B@@PA@?oC?-@B;CB^C%C^C0 B^Co?B)C@PA@?A#@A)D)C[BEIC_?B3.A4 .B^DAC@PA@?,Cg@g BAB^AWC^AB^A]n?B @A@PA@?u ]C-[@ACBܤCXB+CXB1B+֙C{?C˂B@PA@?I vCn-@?CCpCCCpOCCCBC|?AC CAPA@?:eB@ ߆BDACЂB7ACtA7ACg2BzSA@?RBav:CAPA@?C@inCtXB cCmbUB CmbUBBmbUBs|?nCΩPB APA@?Q2C7A@>BCByC]kCyCByCw?BC0APA@?Cn!C3Cn!C .ABCI{?EC{HC@APA@?zsB@N BBK(B״BA״BNIB6-CRd?IBBPAPA@9C5@}BGACBAz=CAIBAkz?OBTA`APA@?c/B,@Bg&^CBwH^C1#BxH^C6B!)B5d?áB_CpAPA@?lBu@7Be-ECJ8BD$ECBD$EC,B"A&r?BECAPA@? MB,@ACuACBC^@ၢCE'?+ACAPA@?B}u@dB`CgB`C C`C-BB`CAt?,BCAPA@?bB"@s^BC]BdܲCiBdܲCGAdܲC5c?]BkٲCAPA@?P+C@F9CDC}8CFC'pCFCAB}?8C﵏CAPA@? A@A$fBCBi BCB;@átCTsBtC} ?_TBE$BAPA@?jBJJAn֖Av&C,6A&C؍A&C^@&C ?Q)AfC`A@?%C`#AC4CtiC4COC4C(RB4C?pC4C@`A@?C@π]CTCaYCCXܳCCVCCh{?XCKC@@`A@?TB@@rB~a@O2B6)CڧB6)CBlR2Czm?]B߲C@`A@?b'CZ`!@37C(Cen>C5Ar>C>ABA`A@?B.b@"|B0$!BtBB B9ńBB B@: B-L?yɀBa`BA`A@?JC.K@@CBgCB.!CBH6AB6Wx?wCB A`A@?Bey_@BB'BBBBABq?BB0A`A@?/B-@BeC7BAC$B@CA?Cu?4~B fC@A`A@?B8Z@PCѴCzCCCBCBpZC1x?CCPA`A@?uB̥@BփA CA`A@?&*vB A;eByC \BoCKBoCN@9C6\?beBCA`A@?AzRBA9AS@/AS@@S@@@uN7C>!7A9@A`A@TBB7&@GBCqBC'$CCݝBCz?BōCpA@?lBLb@o*CB'CB8KDBC&XCC ?LK(CB?pA@?CE@w~CkC{CCVCCACw|?C!C@pA@?C@\ C)PB~?5CgC@pA@?.C @ȌCC݄C CC CB C}?XCACApA@?MCB}@ BCC:>CC)WCCAC5{?jACȢCApA@;BT0>@[BhQ2BBQ2BBQ2B(90Bv`Czr?nB3B ApA@?eA2AcBCBsC?B8C#C8CGD=?mB`ΨC0ApA@?AA2AKC A2KCX}(@}A AAi>AVAOIC@ApA@?maLBQ`@B4CHBC1ACF(BLBuZ?BoCPApA@?EC:\@ C%BC BzC BAB7zy?B C7B`ApA@?mBA8?DBpzC6?BzCmU@zC)1B,B 4?-GBCpApA@)C&F@CCBC?hBC?A@?CZu@ CGAC)AlB)AA2PCq?C\A@A@?!C\LAݥ C* CkCR8CF-CR8CBR8Cs?[ CC@@A@.C@j,,Cz-C&CC*CCU"@C,x? X.CkC@A@?)X&C>@aUC̹iCOCiCrVBiCϼBWBz?;zTCLkC@A@?jdCrg@^aCSɀBq]CȀBfCȀBAȀBC}?bCQ~B@A@?bCW@pCTCێC4C C4CAid%C}?mC;C@A@?(WC"_@tC,BJmC=B0~;C;BQ1GBC|?vCBAA@?kBkr@k]BҜCBCΏ.BsBְCsB]?*~B&CAA@?C`3Cf7@yS(C:mC$CUmC$A@A@?SkCK"dA}CXYCG(wCXYCoZCXYC&ABcB|?2l|C='YC@@A@?tCN@7CC/2CC˃CCЈBC#!|?B8C QC@A@?3Bǘ4@LBDC8B&EC?B*BB'9?sB&C@A@?џCѧ@CcCѓCdCpCdC ACB~?hCτC@A@B @+wBBqBB#CBVBBm?vB!sB@A@?R{CK4@CQCVBPC6*CPCɱ0BPCnTz?CCAA@?mB˵J@xuB8ħCoByħCSByħC;ByħC9k?nBèCAA@?TBL"@HC "CC "CCB "C[3BNC0y?a(C"C AA@]C/FQ@7MCoC'BCoCfsCoCABoC|?0MCoC0AA@?29B>*E@NBWBB#BC#B$A$B\y?{BtB@AA@?M C5@4B.NCBNC1CNC BNCw?#BCPAA@?BBK@ۼB=E}CLǽB:E}CC C:E}CԀ1B;E}Caht?aB<}C`AA@BW@CECAuCECLBEC;?BԬAy?iCECpAA@AB ABbB BB[pABYB?Cw^?BBAA@?Bw@BCNBC'BCUACs?YBئCAA@?zB@=zBCmqBCH? CCBCr?]ZzBBCAA@?_/B}HA>~B+CcnnB+C?.V C*uB$V C<\`?5B(CAA@?QIBFABb\C BP\CAP\CV@A#BS?,_B\C?A@?DB|8@2BCB/C^B/C `YB/C`o?䖔B;C@A@?~ CF.@XBTC?AXB AA@?5!B@pA}DBAzCBjAzCB AߐC`?AuB0AA@? B>Q@̈́BIkC*BIkCKBIkC>YBIkCBm?BJ`jC@AA@?>Bt@cCB A+LBA=BAJAAwp?唤BdAPAA@?gnWAC`AA@?B=և@BB'BBBB~FABKSt?BcBpAA@B4@9BvKBUB}KBAʐBG>A飿BH>AdAJ>AKq?mB5@AAA@?`AYAmpA MCAMC?AAqAAy?AVNCAA@B @OByC-ByCByC݇@>ECy?ݼBC?A@?{mBE@mB|;B4B3;BB3;Be@/;B3t?NB62B@A@?B*@IB @3CqB 4CqBSBqBaBFpCo?{?{2CqB0AA@?OBW܇@BSB|BBvBBXBtCs?qB֢B@AA@yB8@]BjGCBSCPLASClMB)Ct?BTCPAA@?%*B$8 AUBBI7BB׭ABu A!C40? B:B`AA@7BAKB͢CSB͢CKB͢Ch;Ct8?BFҢCpAA@?wB@<B-RB BGRB-BHRB>BIRBsR?B9SBAA@?ŀB |@;B@C£B@C7B@Cn@@CEz?raBtCAA@?d3B;3ACBOCeBOC'BOC7Y AOC`]V?8tB^C@A@?qM5Cm6l@:BoCbBHApCqCHApCUCHApC ;y?i B;pC@@A@?C^@tCrfCBBe*fCCe*fCDAe*fCy?CRKfC@A@NFC@;CC4CCSCCfsACu!}?;;CC@A@?HBy"@rBҒC#{BђCpBђCC-@tGBέj?ԁB?C@A@?K C5@B㜟CBۜCF3CۜCI'BۜCOy?fyBLC@A@?c5B~@vB9n@@sBn@QAn@K>B7CO?$yBj@AA@?C'@eBͱC!BձCU,CձCIDBձC"x?ͼB`ϲCAA@?vBTU@BCBCP CLB>C'B>CAjCZt?B7CAA@?:FB%7ATB>zCB>BBzC`ABzC}JAB_?SBCzC@@A@*C@5CtB2CBJCBšA⬋C|?G6CB@A@?, >A@ $BA}C9$B}CpBCTBC"j>N#B?C@A@?B(L@*B{CKB{CKC{CLB{C%t?BC@A@?jB-@b2BKʼnAfBpƉABpƉA,dApƉAIo?BEAAA@?  B@G3BCi4B(CN?(CM.BB-?j3BCAA@BGX@`C!C}CoCtflBoCBB0x?C8C AA@?MBkx@§ByCBC*AC-BACk?B#C0AA@?TB@BxBBxB4MOBxB[B^Cv? B#B@AA@?wB@OBQt@CBSt@CATt@CVۗB%EGAq?CB{@CPAA@mƋAA6AvC~A vCf@BGAB%>#AĻvC`AA@?عA/A BkUC{AkUC @BɆBB!? BbUCpAA@?GB@˿BkC@IB.C4xB,CB,CyLAW#C[w?BCAA@?BlP@yjB~ALCjBABAgcBAp?&iBAAA@?vBhSH@6CWMB CcMB BcMBlhxBZӓC6{?M*CB AA@?KEAQ@ BȰCBȰCVPx<~ȰC:B-Cz ?Q{ B ͰC0AA@?tB8A@wcBIBZBGB sfBGBO:@EBj??cBB@AA@?CD|@hKC?6 B?C?`@ݝ?}?BCľ?PAA@?ՆBf@PB>Bu+B:B)=rB9B gAZuC}2u?ܻBWB@A@?8B5_@ӜB*C4 B*CePB*CtIBU,Cu?IB FC@A@?z C@* C\r/C C]r/CC]r/C@.C{?5 Cv/C@A@?+z=BƁ@33BA1BA&BA7A4SCX?]3B A@A@?jBrJ@vBFCxoBFC0BFCzAŗAyc?*wB2GCAA@?vB!\@B-CUB-C@>B-C*ZAܖCg?,BGCAA@-B#A@B8CVB8CZC8CZTB8Cy?xB@C AA@?A@AC NA|CuA|CA&2C3?0AC0AA@㛢BO~@BpBoB8dBJBoB?4BHBoBFY&BGBoBt?BnB@AA@?wlBmy@BRطAbBqطA~CA>CJ%@4 A:A5 An">A(e>CAA@?3Ch#8@eCC6CCICCAC}?hCC AA@?]B.t@B*C`B*C#VB*CQ>@*Cx?`{Bo$C@A@?!B`@BxCfBsCT:eAB*BB.g?AB%BBBCuICCs>sBB@@@?CJ@iYCB_CBCBtCB?CBA@@?#CX@3FCBBCBPnCBhBC?]ڳCBA@@?ܶC~@CBCBrCB BC?CB A@@C@cCBĉCBCBXBC?tCB0A@@?8'Cn.@`@ CC%CC*CC@@C?WCC@A@@DYRAyDBDB&DBCB?DBPA@@?GB@scBC8)BCRCCBC8 9?=BC`A@@?CR@J_4CCWK5CCtRCCY9CC?7CCpA@@?2B@BBcBBBB3@B?_BBA@@?;CB9ABC`aBC@CCBBLm?GBCA@@?pC@@OCBAnCBFNCBx&BC?CBA@@?CbB7A,=@Cn9@Co@C@C=?@CA@@ AiC;AqBCRyBC8BBWBB+>BCA@@IBwR@JBCBChCC0hjBC3?BCA@@?}Cɵ@.ECBnFCB|CBBB?tECBA@@?QAnfmA,}ABWAB<@C$ACm^>X ABA@@?A)AGBBBB@C*BC?BBA@@?lBA.BCBCSBCAAB?eiBCA@@? AB5AVBCWoBC:oACJ3BB~{?BC@?@@?bB5T@5חB|),CCC@A?@@?)бCv^@N΁CRZCZpC7]C)C7]CY^C7]C%f}?HsC \CPA?@@6eC&@'CmBaC:BA!C:BBC~z?C.wB`A?@@?9C|=@dBGABxB@?B(yNC??BB@?Bdp?o BB?BpA?@@?Cy@ӱB#UHC_B8GC C8GCB8GCk?QBFCA?@@? Bd@"9HCΘC&DC ИCR@ИC=C4@Bߒx?U(MCCA?@@?A՛AâAtCAAC(BAdBBdBr>2AGCA?@@?ٽAA颩A%>B Aa>B5BA0vC-A1vC>A$BA?@@?C,b@uC mC!;ClC1BlCAiDcBux?ClCA?@@?^B@0BC/BчCσLBчCr)BC;q?eB3 CA?@@?4C?u@CCCWM CCCCC BC{?zC֗CA?@@?BH@ͱBĔC BɔCZ CɔCAɔCaNx?B˔CA?@@?B@tBCҋBCWBC`^AChy?BCA?@@?[0BZ1B%C0A@@@?!B@B8CABoCy,AoCңBBT.?EBlݐC@A@@@?@C/+(@oEC=C3CBcDCB‡AB1y?6C'lCPA@@@?Cº@8ÇFCCDCiDDC BDC*1~?ڣCjEC`A@@@?nB6@p\BuCfCYC'@XCcZBF#CGi?Y CҫCpA@@@nCa@tCBliC߯B~kC߯B?߯B{?lCBA@@@?CD`@jICC2CECW2CJCW2CQBW2C,}?3FC2CA@@@?Bt@OB3ťBBĥB!qBĥB] )B2qCbIt?B&3BA@@@?r0B@%B C҈B CJB C@B Cn?PBrCA@@@?ǁ8C 5w@_C:CC |CCgUC |C͂B|Cz?җCmCA@@@?" Bu@vBeՃCBZՃCBZՃCZj@ZՃC x?:B=CA@@@?pCj@CzCCzCCzC1AMBkz?\C\zCA@@@?jB2@/BC$!B?C]B?CABx?rB CA@@@?%cB^+A BC BCNBClACA?g BICA@@@?ֿB@ BPːCЮBPːCoBPːCJAPːC!z? BɐCA@@@?PSB0ARBֲCwBֲC݁BֲCB61Cq?jBղC@@@@@?ďaC@(&Cz|Cp݀CC 8CCZBBz?%zCC@@@@@?֤BC9D@>"CC0CC,GCCiAC`w?D=C'C@@@@@?x;B̖BuC?㋮BB0A@@@@?JB=8@kJC4-C CCOACCB$l?CBC;C@A@@@@?HC5@KC\^C@kCwaC,CwaC#CwaC|?qz]C`CPA@@@@?jBH@,B`jCHMBA C@ CֽB!Cu3?B C`A@@@@?CAy@wGC4CXCu5C!Cu5CAu5C7\~?$C6CpA@@@@?E_CkE@+CL[CC[CC[C1QC[CMx?=C$[CA@@@@?,B6@SַBCBC9BCc^A C#k?>BCA@@@@?;C/rX@EpBBQBC䒫CΝC^xM@C[xM@B57C|?MCF@@@@@"Cl2@HeCD4C*Cc?Cr Cc?CA8Au?{0C֮@C@@@@?TC)@馝CDCEC73CQ C73C9CٳCJ{?xݏCPU3CA@@@?_C @]CCIECCpBC8DCB |?'C HCA@@@Cn@{/C?]CеC#ZCv C#ZC^B!ZC&}?CF[C A@@@?C HH@MC,HVCWnC[5^CC[5^CC[5^Cz?hTCZC0A@@@?wCJ$@n>KC_A1'JCACCAZBA {?>GC eA@A@@@?^lC¾5@]vCXoCqCwoCp6BCwoCYB\mBK{?.dCloCPA@@@?9 C35@C_eACJAFCJA7AJA|?nCOLA`A@@@?wCJx@]^CwќCYCɶC孇CɶCh?WBʶCW|?1_CcCpA@@@?PC{J@WTC(YBLC5sB9KC6sB(?ZClpz?WCDBA@@@ORSCZ@KC1`CgwFCQ`CYCP`CAN`CE|? xNCP;aCA@@@?e Cg@(Bq#CEBq#CCq#C2Bq#CFy?۽BT"CA@@@?Bc@`BCYC'YBYC:UBYCBYCLb?GaBt[CA@@@?B-K|@+;BosCBsCiCsCfLBsCu?5BڳsCA@@@?1Cۊ^@/6CjC3CjC*CjC4AbB^|?!7C{CA@@@?16C~@pBxCVBCW&CCJBCNz?&BCA@@@?B֍@8ϜBBWBBCB2ΎBBxgv?]BBA@@@?,CmA@> CC C CkC C!FA CBz? C=CA@@@?BABG@Q:BtF@8BvF@;LB4:Caw?B@@@@@@?Cw(AcC~grCc6CɾNCCɾNCiBIA3}?#CXKC@@@@?8C{1@.B CByBpC yBVbC yBi p?;vB B@@@@? cCV @dC2iBA4C CgTC CB Cx?/FCC@@@@?` 8CL@V?CwCEjCJ}CmBJ}CBBxy?dsC}C@@@@?Cg@XC7CrCCiCC*BCR}?CCåCA@@@?HB3$e@wC6CB"C BgCkh CgC7? B~ )CA@@@?zKC:@|8BRCzHCh'C iCh'C+Bh'C"m? C'C A@@@? MrC>"@CIBC>BC?Bͩ"C%Cp{?[CHVB0A@@@?C" Q@c C)CYC3CMC3C!Ab^C{*~?{C֛C@A@@@?nܼCOR@$CACACAPBAk}?^CYvAPA@@@?zBk@.BIB$ BEBBEB+(ZBEB+?BB`A@@@?ːgB@V(BhC9B{C@6C#B6CxY?B?CpA@@@?\CI@0HC/CuBC-CnC-C0B-C4q{?RHCk#CA@@@?Bf@ BCB4C'aB4C&BЬBRi?0BSzCA@@@?#VB d@SCu$B0CE$B@vBE$BCAəCu@y?+CkBA@@@?C@C*Bv,CBպCB A~C~?_CBA@@@?,By͎@+jB%B aBXBBWBwq`BUB- l?&hBAA@@@? BUd@ ƴBx{C墳Bo{CEAn{C'IqBܴB(i?TB({CA@@@?܇B@1BDCBe4C@YBe4CcBBTo?z2B:CA@@@?JtOBAyTBcCTBnCBnCAC3\?aTB+CA@@@? AQ-A7 AvsB'AsBuA眇Cq B眇Cx>aABA@@@? B=A,UIBpB35BgB^ԑBgBoAfB;l?"HBB?@@@?=CnJ@jWCRQBni\C27BC27BBMCx?xLwCѣB@@@@?CC@R CmoCߎC|CP^C|C{)B;Bu|?pC4}C@@@@@?BQ?Bc$Cd' BBFABOAFrwC)>b7BBWR[B@@@@?-2C/@FCKB@XnC>BdB>B%COC-y?xCB@@@@?ToB-T@CCqoBe@"|Ae@80BP7CV!? kBN@@@@@C2CU6@CtB:C2pB>LC2pBEsB2pBRt? CIB@@@@?4. DFB@#D~`CkkD/_CC/_C^TBg,B?blDW_CA@@@ˬC:N@o{CC*CCCCAC|?.C촣CA@@@?\jCI1@*CCħC7jCC7jCt6@TZB.l?8C2vC A@@@?JwD!@bCBFCM8B)DM8BjCK8B~?BCB0A@@@?_C&-@yCd_C"CCD#CCJB֨C |?JCCC@A@@@?PưCe@@|CiCC$CaBC$C C$C|?\C CPA@@@?tBB@ATڊAA3׿A[ A2׿AD,AKCޯ>=A B`A@@@?VBa@ BhaAJBK_AjAQ_AfBeAC`?YBD[ApA@@@?x?CB@z{cCVA¾_CUACUAKBHC؝|?aCJAA@@@?+B1 AAlxCNAxC}AxC!A#C>ֆA CA@@@?{aCY@NrC(CD&mC(C6qQC(CoAmC ~?rC(CA@@@?BZ@kLB3C^BB[ 4CK"B[ 4C8x B[ 4CEX?7LB)5CA@@@?)!CR@0fCCCCF-CCB"AC.|?CcCA@@@?ۚ9B%ABݞBuBٞB@nuCgBmuCV?BŽBA@@@?+*CG|i@.'Cf@Cc'C@C(C@C.?@CT|??'C,@CA@@@?dBi~@B\AGB\AM$C\ASB\A)x?XBUAA@@@?MBIA@B C.B CVyA C0B꿞Cfu?1B CA@@@lB>lAhB›C MBÛC( gBÛC@Ck?hBC@@@?C)AiCBFCBpCB@AC?`\CB?@@@?mC]AM DrYC C*VC C*VCEJABp}?㣼CUC@@@@?B8?C>vC6BZBf|AYBBW{C{_?CqB@@@@@?cBu?BBAC!+AC;1AC˛>;Ae}C@@@@?B+?VXBCv`sBpCbBpC,ApCE?B#~C@@@@?LCP@XCCCBgCBJBqCUz?ޅCMB@@@@S*Ch? CCè)C٤CUFC٤C&6A CJ&v?P$C'[C@@@@?%C=n@%Dڠ?& D}e@nmCe@zB;7C݁~??jD_;@A@@@?>CC@x CŗC CCވ_CCI`BC~bm??wCCA@@@CE@ލBHC)ύBCj0CCBC\]?.BўC A@@@?$Bd*@ؚBY C6 BCBCڋBC42?RABѝC0A@@@?CL@(C-RCCv@3sC0o?"uBNvCA@@@?t/=Bl8A(A$C/A$COEB$Co$A$CaH?4A[($CA@@?PAʏ@G-B?6*BC B3CC3C~>`ǧBC?A@@?vB?z6B低BB4sB B4sB/@pCd?_BQqB@A@@?C9@&C̏BhCFBVCFB-pBRlC~?CB@@A@@?0hBV?YPkBfrC0ApBApB@2\Cc>RAB@A@@?8Cw@DrC5CbuCCbuCbAbuC~?sC)MuC@A@@?aC @興CC~CD#CN",CD#C[IBCM{?L/C"C@A@@iC!ߔ@CB1CwBnCwBkWA wBφ}?C5}B@A@@? D@a DDBDsBlDsBgBsBrU~?\ DBAA@@?Y%B%(@9kBiBWB9BZB:BcACUCU?JZBd0BAA@@?ZClO<@[^C3AW8CdrA8ChrAhB}rANp}?BC ZA AA@@?]N C @DBCAzCmMSCCBC BECYw?JC.C0AA@@?nC@C3GC`CGC8mICGC BAR3{?ՄCGC@AA@@?}7C>@VMC(fUC :NCd+UCCd+UCYUBB8z?%WC?TCPAA@@?*SB½@dBEӂC \BJCxE(AJCN1Ba+B|?B9dBIC`AA@@?Cc@p1CZCCCYC BYC TACuv?a CHCpAA@@?e7Cj@KC+LC*C9LC# C9LCB9LCtC~?*՗C CAA@@?|Bc@8 B=BBe=BCe=Bv$ Be=Bbv?B-@BAA@@? CXd@B:CGEBCų#CCDpBCv?BE CAA@@?CB @N:BeCĎB[CܫB[CcBoB4x?yC92CAA@@?B`@UB)BWB)BQB)B|jA)Bh?LJBq)BAA@@?ŊB@6IBC@;B C` hB C~X1A 3Bj?F!BؖCAA@@?BW@ADP#BņC#BņC}LAņC2A:B-b1?C$BCAA@@B @tB@0CA BA0CGBA0C{MBA0CGKxAm~CAA@@?ΪBdKA+B{C3B{CB{C/@{Cx?BxC?A@@?CU@`K%C6 CC C C CqAsCt?>CC@A@@?CCs@srCFCݸCZCÌCZC&BZC22~?jC׊C@@A@@?־-B @ODBlfCTX_Br[C^AȝBBƝB> Bb_C@A@@?21Cv@3C5BجCQW%BdCQW%B BU]CO|?tĆ"B@A@@?B@D@EDCM0DC5ODCBC!?7DܞC@A@@ tCQ@CPBZC9B7B*C`AA@@?)CX?@QCBuChB3ChBAgBry?!CBpAA@@?}B7@/B~/BB:~/B0B8~/BA_Cqa?_B,BAA@@?B @BTWABLWA2BLWAmf;BLWAQ?1Bn;AAA@@?[CJO@zO C&GCCHCDžBHCcnB1@][B`CZBSvC ȖAGB? A@@?uC&@CCxC&CsfC&CcABwy?ԃCtC@ A@@?C3@Cq!BXC#BřC#BNgAyC, z?孊COB@@ A@@?OCA@+C$h,CyC&CC&C CbC<}?ljC@C@ B9o6C(;}?zCKk?@ A@@?Cܣ@C}CCyCR3DyC pBByC1~?C*){C@ A@@?!UC5@ꢂCTC3PqC cCL/C cCϟB'Bz?xC+юC@ A@@?ݰC@kC(C/CF&ChCF&C9bB C)9~?PC'CA A@@?lC@CCGCeCZCeCϥB鲥Cdx~?MCCA A@@?#C@NCK3CUSCy7CTlBy7CTpB]d@2u?OC|6C A A@@?SC X@CCCwCBwC/CC,d|?\CxC0A A@@?CO2@ΛB"ABыB BB$CBBeBBBzo?"BLRB@A A@@?]C)C@ޠCܓCCBC`CBCABTt?fCCPA A@@?Bvo@b-BLҢBĶBԢB* BԢB)JAԢBo?>BB`A A@@?cCC @V CBC B3C B*oAB~?#CBpA A@@?CJ@ CߋBHCߋBOCߋB3AyCAg{?pCWBA A@@?{B@KBo݊C-}yBCBCJ_@@C=\a?㪁B>CA A@@?֝Bf@ϰBƤCrBӤCKQ6BӤCiBCr?BCA A@@?;IC!]@Sz C!LCA A@@?o PBA[B&U3CA0B,U3C@,U3C%֬BC@s?Bl3CA A@@?C@JC[C B[CvC[CA[Ci}?C_C0A@@?v\MD|A_DBQDB]HDB BC?9WDB?0A@@?kC?-@`C2BsJCB OBBBƊ~CyAq?ŭRCuB@0A@@?qCw0@Ca.-@ C+iBQ CjBCjBv@\aC\w?^ICxBPA0A@@?PC \@5?C 'C=9C'Cݛ`C'C~B'Cv{?ACLk'C`A0A@@?%ZBK@S6BҺC7BC47BCkHBCp?f B[CpA0A@@?B@ BpC2NBnpCXA5sBmB5sB*BU?AB޿oCA0A@@?aCc@WCuC;DLCNC`KqCNCBNCN|?YXC=CA0A@@?ACA@jCݤBXCwݤB)BwݤBp@\7C'z?C BA0A@@?B@B8BB8BLPB8B8~B,NCs?aBcBA0A@@?.B6@omBQ}BoBBgBB"aABf?nB!CA0A@@?w*BI@C^RB3CHRBLBIRBD BhCSy?UCYRBA0A@@?Al.A!-7A<Cs 0A<Cg><C4*AZCJ>2A9CA0A@@?9_AAf=AuC;AuC8c @B%B8AD%BT>SA:uC?@A@@?[ C)^@eiBChAp33CZ$AUBU$ALBdICMt?7CA@@A@@?EPC E@vlCzNCdC%RC 3C%RC޶GB/Avz?eC"PC@@@A@@ beCN@iC~C23iC[C YC[C%azA C{?UfC@hC@@A@@BBCЫ@אC+LBCMB2CMBR?BMB}?}CMB@@A@@?Cд@CCaKCCVCBeDVC˝BVCS~?-C$֔C@@A@@?BC.-@CyC)CCʦCCAoBp?Cn}C@@A@@?B'@8B&C~B/"CB/"C@/"Cfi?fB"CA@A@@?sCT@O@C&EeC|hACfC~CfCݷBfCj{?DCgCA@A@@?n Cj7@'rCX=2C}kC*B2Cx!B*B2CCC!C]4z?srCB2C A@A@@?9Cs,@.>BL]BG.BJXBCKXBANXBam?B [PB0A@A@@?AC-L@C–@0 Cϖ@ToCϖ@jGBϖ@y?Ee Cc@@A@A@@?XtCH@g|C/C9uCHCmCHC[A@)Ct}? {CcCPA@A@@?YC"7B)>C8SBBnap?DBN2CA@A@@?BjAIBh8C*B8C٫OA8CMA~@?B9CA@A@@? CyJ@#OBӰC|tBӰCԚCӰC[BӰCx?BoCA@A@@:Be}@.BBBB"BBq{iAFąC_wv?2B5ۮBA@A@@?"Bw@/BYBͅBBBB\Ay?C`v?BWBA@A@@?[Ba;@uBB~oBBK4BBjAC)`?vB:BA@A@@?sBW6ArBSC;AVCTAVCAfC5?uKBCA@A@@?qBAHB^RBcI2B^RB*B^RBA^RB:Rl?7=HBo&RBPA@@?0C2@H՞CC:CCL4`CCPBB?5CC?PA@@%ZC8V!AisC_B2CYCOB)QCOBآAԧuC5z? _CB@PA@@?akB@; C C^C˅C"B˅CB\,Bbp?hCN|C@@PA@@?˪C @rC C;C)-#CC)-#CACK}?Cc@"C@PA@@?7D]@/hDjCqDkC:CkC@_Bp~?CkC@PA@@?HC @@C8C0ChDCpChDC0AΈ2Ch~?CcBC@PA@@?},C($@ͶSCB7UCBBBRjB>Cty?TVCB@PA@@?CA@wC46B.CY5BCX5B>CY5Bz?bC53BAPA@@?>MGCBD@$8C Cv2CC@RCC'BC%.z?|:CCAPA@@? $CH@@B#BCHBNECDNCNECBNECp?#B0JC APA@@?yLBC-9B@?C[C r;CZCBCZCc~@ZC¬{?ACfJC0APA@@?VC=@3'CsBE\"CLBBKB3BXCx?#C*B@APA@@?#qBa@BgC`BlC[BlCP 4BBu?BCPAPA@@?NgBF)@(\B4C{B4CS@4CA^aCA`A@@?BK@B=B~BBBB:(ABM u?BUB A`A@@?(= C<@ #C*BC?*B!B?*B.BʌCkx?Y!C-B0A`A@@ɔBq@|BXCBcXC?BYBcXC-Aİ&Cl?BC@A`A@@?CU?I@C BUC BT*C B\-B Bz?\CZBPA`A@@?C\@BnC0BsCO]JCsCBsC0x?1B|C`A`A@@?Cӝ6@CNCaSBWOC5CWOCDYBWOCz?C&OCpA`A@@39Bzr@/֮B:/CªB:/CB:/C8A CMp?B/CA`A@@?Av)A[!BE_BY"B˿_BC,AkCMBkC>#B]BA`A@@?B@̀@rBw CBUl CBTl CI]@Dl CO^w?+B2g CA`A@@? Ad\A&=ACCK=A%CR@J)CrAJ)C<>QAAxCA`A@@?UrBiD@BPiC ەBPiCoBPiCQAPiCp?WFBKiCA`A@@?fsBPA8B pCkn@0RCpA@@?}MBE@IBB$BB[9BBYAC:{?[BB?pA@@?CAEiCTB/CJBեCJB_mAJBA~?'C喲B@pA@@?tCGlA็CdBC葖BC鑖BeTBꑖB'}?WCB@@pA@@?s3B@A^CAXCڛ@bBRQ BbB>AsC@pA@@?]9hCڰ@5JcCB[CgBmCgBvAgBO{?M"`C(B@pA@@? C@ZCACÐCBCCBCn ABC }?zCBC@pA@@?B5@@4BCiB#CAC@@A@@?"FCҩ@K<'Ct#C{"C.$Cr_C.$CsB.$C_Ry?[*C%C@A@@? C=t@s:BWCvBSoCy0*CSoC.BSoCr?/BC@A@@?~Cx@CꧺBWHCBPECBnB"C~?CB@A@@?jZC@CE!BC2CrE!BS;CsE!B9 =U!B}?9CzK B@A@@?s HCHT@CC IC=CICeKCICVAIC{?%ICN_CAA@@? >Bb/@PNCBICA CBICzBBICB5Ax?GC#HCAA@@?}C@@aBCBC)kCCC["BCx?BC AA@@?B69@oB'NCB|'NCB|'NC@@'NCOu?i[BMC0AA@@?@B@.|BBǡoB BuA Be[2ByCH?2zBB@AA@@?C:@R3B-yCUBj;yCTCj;yC NAj;yCx?B\yCPAA@@?B@ztB'KWCgnBVKWCVBVKWC @F- Bib?;rB4WC`AA@@NB+@ IBNoAlmJBoAۿBoAJ5BoA^?EBLrApAA@@[B%_@BROCoBKOCl|AKOCB^Ar?B/:OCAA@@?xd/BjAA.nB!AnB)AnB߷@oC*&?A oBAA@@?8ΗB!@oIBGCtIBGC BGC?Ap?bBGCAA@@?^B{@j{HBQC@BQCDBQC͂?QC_?HB'CAA@@cAX:AipqBC[BCxhAOBBPBvN?qBCA@@?hC*A{ZCC_CCCC>CC?ӇCC?A@@?BNAN@B C CC CG|A Cw?( C C@@A@@? CbNk@=B}1Cp?B|1CHC|1CIA|1C!u?DB0C@A@@?9OB2@z C914CXC414CDB414CהBD> w?C4C@A@@?r]Ar@M\Bk=CsWBk=C4BABA>UB >C@A@@?oxzCt@aCCYhCG?CXhCCXhCsxBXhCu}?ϡDCdC@A@@?J6C.d@ICC҆CC%|CCNAB;|~?CƙCAA@@? 7B0@#BwB?yBABBAB&CPBl?&Cj>Bl?&CBC%v?JRB@&CpAA@@ AmA* BC BCs)BCZBCW/?|ϏBbCAA@@?BB@ BLcC@QBLcC{BLcCvBLcC.rs?BA;cCAA@@?5AVAlB(BcCbcBBcCMA|=BīB{=B$?rlB!cCAA@@?A9'A'BC|BCN@Cre(BC8=?g&BݙCAA@@?;IAB/A8BI!CEBJ!CAJ!CK$BCɺo?l'B!CA@@?Cxf@?B3CB3CF2C3CLB3C? B3C?A@@?VCٷ@0qCBژkCBɌCB7B B}?rCHB@A@@?gɉBq@RֵBhBϱBB-BB5rIB'Cl?BخB@@A@@?CUA7=Cf@Bn9C?BݢC?B˚ C?B;}?#==CIB@A@@? Bܙ@GB1SCȭB2SC 9B2SCBאAdm?BSC@A@@?6CT,@(Ca(AC{%Ca(ACQCCa(ACɡAa(AC-|?s-)C$(AC@A@@?_LBW;@^/sBϮCkBϮCAϮCUB)C%U? wBleC@A@@?&BF.@qBgTCBTC`fCTCF}BTCFs?UBb'TCAA@@?6B2@B`8C@BC{CCm_ BC(s?B}؏CAA@@?$B,5@:B䛨C̮BCBCRAx3C# u?BÔC AA@@?BF@:BSC֓BSC?!BSC/OAHBpAA@@?_Bƚ@B5,CB6,CB6,CE 8BmX&CFSy?PB2CAA@@?NJB@nBvCqeBC)BCHf:AC_i?[oBتCAA@@?zC'*@fC6B}o C6BOC6BfÁCI}?NC9FBAA@@?OBA?qBeCXB}eCGB}eC9A}eCs?$^qBH[CA@@B @ĄBBBBj/CBBB?FɁBB?A@@?UBX@̍wB BKpBU B iBU BdlBU Bk?/<|BB@A@@?Ao@TBOߠCMB9ߠCjAq C=Bq CΪ?HSBC@A@@?BY@#BCB*C}B+C6JA+Ci?I8BCC@A@@?C7@JBgB:nBD2Bbn9CD2BnBD2B3x?MRBB@A@@?IgSB<3@rB} BeBBABA~[C J?5yrBIeB@A@@?BI<@MBZpC!ݴBpC%BpCYf?pCHs??BNpCAA@@?_B@LBR(CBe(C @e(CBP"C*?tBVpCAA@@?2)CI@#C,CkC,C"3C,CA,C1{?ܳCNC AA@@?rCb@/ CAC C>CnC>C AlBwz?v CC0AA@@?gBb@DALKC榟AKKCHBKKCZAKKCx?3A)JC@AA@@?B9@2B珞CeNBCeBCusA3 CGj?/MBCPAA@@?Y;CRg@)FCCFCCBy-CCArܪB}?FCC`AA@@?xl CJ|@B7C]A:4C]Aw>B]AϥBHCB|?7CjApAA@@[Cq@BTCBTC^7CTCp%BTCJ{?B6TCAA@@?̊BA@BђCDBђC6&rBђCF)OADB"0w?.Bm’CAA@@?ڠB@BA9BAݵBArAA_Vw? BeGAA@@?v&Br@h)B4C!B4CDA@+7T-B+7a ?*B4C?A@@?Bw@B!qCxBrqCLjCrqC?'BrqC q?0B(qC@A@@?F&Cc*A)C0BYC9B C9B[lB9B;~?nACB@@A@@n^C A /CUC'C&ĊC&C?wB&Ct|?/C!C@A@@?XC5ٔ@oIC LBC1Bl%C1BA1BY{?CB@A@@?KCU?q@l{BioCBoC3CoCBoC1Nz?BC@A@@?YOgB}*X@ZBiJAw^BiKA3GAjKAUdBnIGCh?FB#A@A@@?rB'ª@B/BIBw/BV?b_CB__C| ?|B=s5BAA@@ICHA@ Bx+CwܶBx+C; Cx+CښBx+Ct?.B+CAA@@?B\{B@{gB3QC2UiB?QCOB?QCk#B?QCj?"gB,~C AA@@?wLB{I@BIkCtBhCNBhCY@hCw?B0gC0AA@@UBa@.^|B0ClT}B{CvA{CBBa?c}BpC@AA@@?VYB@SBBiRBB-BBABĻj?SSB2ZBPAA@@?-Bi@{.BT"CJBT"CqjCT"CV3BT"Cu?B;N"C`AA@@?`Be?&AfB)9CeB'9CEYAd@Bd@`?RB9CpAA@@?jB@ BCBC@#vBC4A{BZy?BCAA@@?QZC@g_C/BQC/B C/B @/BI}?9OC3B?A@@?Bg@$B^@BB?@BiB?@BTWAЕC|w?B4B@@A@@?lBN@+uBBsqBB'BBA ~C\?JwBƓB@A@@?ަB]0@ BB֨BBreBBACdPl?BtB@A@@E>B.@-uB+τ@QBn̄@3@d&8CBBd&8C?]?ŮB0t@@A@@?B}@[B4KC"]BKC/@KC$RBC׼??ىYBgC@A@@?NCLG@uBFCC7BiDCCiDCN@iDCz?#BucCAA@@?݁BZ]@fBCdBvC3@vC)BhعBr?B,qCAA@@? &B,C@B8CBCbPBC{&BCRr?KB{C AA@@Bj@BBBBi7AB.ACq7?0 BJ(B0AA@@r+B@WBoLC SBtLC8AtLC\%B;CDP?WBaC@AA@@?5YBv@RBܤ+ChBͤ+C] Bͤ+CAgүCl\c?6Bk+CPAA@@?]@Bz{@BxCB~C_B~CzAC{? BC`AA@@?TBi@CVBsCsBsC\8BsCXcBsC|w?ćBxCpAA@@?9BV@0B)7CnB+7C@lB+7CꛭA` d@ y?B>7C@A@@?BuE@B5ZARBA6OBAqB1ZBAA@@yx1B.ʃ@D.+BOyC*BFyCwAFyC_RABYP?+BUCAA@@?mfAF@!A8WAfAVAp%AۊMCAۊMCq>AA AA@@?95Co@CABA2CA +AA z?CA0AA@@OAB:@)zB;łCıpB6łCA6łC&BB Uh?zB6C@AA@@?BՋ@.B߃C:B߃CB߃C¨+B߃Cz? BTCPAA@@?OBN@mBAQBBDQBPBDQB#FARTC2w?9xBcB@@A@@?B#@G\B,<C_B:C^B:C+|-AUC#w?PB)C@A@@?eB{@B3*CD/B/*CmB/*Cm@pCNw?"B*C@A@@?V: Cg-@CRʸBsBbʸBECbʸB݇AbʸB.x{?C" B@A@@?KB#@B4dlC<BVdlCu&@VdlCtAXaBA?0kBlCAA@@?͙dB@y<~BqCzQtBqC$BqCgAƩBBU#C iBZ#CBZ#C@X#C>(z?*DB#C@A@@?HB@BCCBCCBCC|@XBUz{?BlDC@A@@?g1BAiAiBشABlABBABRL?Av BAA@@? 5B(ͳ@B$CۯB$C(B$ChA$CT|?qҾB $C@@?pC@(C4CBC4CIC4CC4C?\BC4C@@?[DG"A";ED!6MDCiDCxA3C? DCA@?lD0C<9@gC4CiCC4CC4C$By6!7?qKC4CA@?.AjLA;@BBvB4C2C4C_ ?hB A@??:.CR+@,C3C`C3CPAC3CB3C~? C3C0A@?C@6DDCC9CC6A3C?CC@A@?{D9 A@,DC+DCDCP-B4C?k)DCPA@?C:@\! C3CsB3C2C3ChZA3CD>~?B3C`A@?<&BzmA`A4CxfA4C?-T 7_B$T 73> B4CpA@?e7Cr?@%C4C|yC4C C4CA4C?CC4CA@?B@hƯBeBC&CC~BC?~֮BCA@HAAHAvCA`W0@4C3hA4CC>\Af:5A@?BW@BKQK6BPK6z CPK6APK6?јBH6A@?zA_-A-AC }&ACtA3CA3C='1ACA@?X?B@ԿB 5BN 5|BM 5AG 5r?[B:5A@?B0AV;B6KBwA&BB>HB*'Aeq?'BA@?BEKAfgB3CrQB3CB3CTp,B3C?ShB3C@?@?A@BCT6fBbCO.B CBB C.>T%bBC@?@?gCp@VC[C"\CbCQ"iCbCIAbCdz?jC|CA?@?Cnm@wC0ӝCmC!ʚC-C!ʚC?nB!ʚC^}?WCCA?@?XJC@Cf,CgCE2C"CE2CE؉B"Cy?ɝrCƖ0C A?@?8ACE@ CwC]CxCCxCeBBAs?`oC C0A?@?.C1@rBՏCIB2rC(C2rC+B2rC+tn?BLkC@A?@?"_C!@gjCQ7CcC7CZ8SC7CFAk~F@{?bCF7CPA?@?(7DҶ@/D굆Ce0DkCAAAC3AC (AC A|VCUY.?AC@@@?ObC@|DVtCuC5XCw~C5XCAA5XC}?ҦCSTC@@@?Cby@xCU4BCTfBCTfBĺ0ATfB|?CCaB@@@?DC;@] CC7sC"CxgC"C@A B.r?|C4CA@@8C @D%CC݊CC݊CdA݊C~?B$CCA@@?CdIa@cCaB\C,B8C,BqӚB,B8A|?Cd߾B A@@?MACGFg@=CB趑CBCBBBz?ȎC B0A@@?U?C"@)CYC,CCCCCp8ACsov?k*CzqC@A@@C,U@DCBCMhBCKhBB>hBl~?KCpBPA@@?ߍBf@>BdC qBwC:AwCBtC\?<B~C`A@@?}3CC@{yCϏC9qCꉏClhBꉏC C'B.{?LmCCpA@@?2ZBv<@9/B Cg(&B C#8fA C4ANРCD<?c(BCA@@MC9W@OCϝCKCCN(JCCn?vBb|?2QCjCA@@?%ZBRAh@DBK-CJBK-C[OCK-CڧBK-Ct??*Bn,CA@@?Cv@-Ci5BZzC4BC4BA4BP~?-~CBA@@?UB @;BGCϸBFCKAFCK@ŖA"F ?YBrFCA@@?"C ^@q#C!ZC0C!ZCe C!ZC4Y?!ZC{?P*$CuYCA@@BEA ;BlBՈ^BRG*C@@@@?KD AD`C$BDDCmODDCJjBDC< ?CDBC@@@@?ǒCs@ϳC6C:CpCXCpC|\@oCLH|?|?C °CA@@@?bBMc@+BtAZBCG)@U.C=BU.C{;?fBN>A@@@\C@Ck1CC*C9C*CBM`C~?-C֌,C A@@@NB@C C53BɜC2BeNCXWCeNC]?@BC0A@@@?X{BB-B/A&HB.CGJB.C|A.C9& B~VCD?FB.CA@@@nC@a@+CcPC^C$PCFC$PCΗB)A*~?<CPCA@@@?Ba@C>nCB>nCDB>nC<~AjBy?lCnCA@@@g Af+AAC|BCAC|BC%@D|BC A/gAZ>A}BC@@@?CpK @5 C\B)͡BBCBBBya?BB@@@?VC G@{CGCՊKC5CWC5C^7A5C4y?,SC{C@@@?mvC 7@CFBG#CUB`CUB yCUBLx?&C)B@@@?:nC@ACtCECCKCC}}sBZC{?8C^CA@@?9oFC*-@C-C[C&CKTC&C &B\KCmz?ɂCp(CA@@?ȀCȏ@<C1CpCM/CWDM/C~ CM/C%}?VCN0C A@@?Cg@JUCkB7CzBՋCzB *AtBfW}?iYCB0A@@?Cf@eeCdBƲCurBCurB]yAfurB`A~?5C~7mB@A@@?C=@cCAC~CWDA*7CWDAuUBTDAk|?EqC APA@@?FpC@y{COrC2jCDClCDC@[CvL{?9NiCC`A@@?~ CJ@sBk`CBpCK[CpCCBpCr?KNBBCpA@@?QİB׍@-B5#BRB^"Bo݋B_"BeA\CV_?YӸBB4R8C[B4R8CߌAfF@csw?BQ8CA@@?YGC%ACG|?jFCCA@@?B`&BAޤ2BLBm+BvBZNAvB^AC+?14BðBA@@?FB/'ABVY?djB\?;A5CB5CGd?gBi4?A@@?, B}f9AȚCBxLBB{?BBA@@?BB'FAxAsCͷAsC @sCz7A9C>ACQCA@@?@B4h4AhPBB"@BBBiBBAD$C;f?OB[B@@@? C9@6zCwCC=CMC=C8ؐBCoAb}?JC?C@@@@?ǰC8@bC9qBմC6uBHhC6uBܬ@6uBe}?w)CuB@@@?>CV)@D`C&qBCBpBB}CC {?׫CCB@@@?~CSA@+2CXCC[QC>C\QCB*A0[|?CBQC@@@? D#a@9C&sCVC/wCD/wC?B/wC~? DeuwC@@@?;Cs@lCݧCȑCCCCAC%}?"MCCA@@?YMCp(@&!CTtC(B.oCHC.oC}C.oCp?>BqCA@@?Cd~@+CV BS/CZBSCZB-CiC}?^CB A@@?*D@C;C :CACWDACCACh~?YC?C0A@@?yC@0@CHCCC;fCC;fCv@m C=~?{#CC@A@@? C5Q@o/C&XCCWCCWCBbHB2o|?<7CWCPA@@?LSBlB@%oBC{BC/C CC⨚BC_?‚BKC`A@@AAٜlBCcB<CAAxBiBxB$a>9eB{CpA@@?jBO@.BݫRCSBSCSEBSCTQB)tA2Gc?ڧBUCA@@?uBFm@BgBjBhBBhBACq?>B2BA@@?B"A:6BBf2B@Bdo>@AB&BPC'?e$BBA@@?hBJf@0ݓBr)CͿBa)CCa)CBa)Co?dB(CA@@?.C.@wCE6A8\CUACUAsBUA1?z?BP+BA@@?iA/AY7zBCG>`BC?A#!C4B$!CM?=zBC?@@?ICAGAC6CCJVCCJVCBJVC?~?C|EXC@@@^Ct@CcBC%qB C%qBdACBnCBApC#p|?nCpBA@@?CG”@CBCB2CBSABZr}?C!B A@@9$(C&G@c2C?BCMA %CMAm)@MAu?!C)B0A@@? Dw@;CYZA-PCqAz,+DqApCqA ~?A$CA@A@@?C3u@KCiPCڵCCuCCdBC}?!CyCPA@@?{&CW>@EC0@FC%@,1C%@36B%@?iw?ѸC@`A@@?BFtR@BTA-BNhDAoBNhDA%AF@CŤm?B"ApA@@?M:C}Z@TCzCϹPCyzCMCyzCXEBB/|?VCևCA@@?qBc@B:LCB^LCFC^LCB^LC\n?FB"ޢCA@@?sB@CELCCQLCQBQLC:BCfw?0C_wCA@@?*B^@9BqݝBRB؄BB؄B0@6aCřu?_BBA@@?hB4{@nB͐0BNcB0B%B0BNqA&$`CSy?+FB/BA@@?jC_@fCx"C[1Cx"CHCx"C@x"CXz??C"CA@@?}LB}6#A|BC }C8H}Bx}C~Ax}CyK!B0BJX?gG}B}CA@@?TC\@Bg~CU#B_~C*C_~CcB^~C0N{?fB_CA@@?3՝B,@YoBTBfBUB߬BUBKBUBqo?oBĉBA@@?]B3>A!BCBC*BC_B#CNx?GzBC?@@? Cz\@Y^C!CWCr#CBr#C^BFCw?_CΙC@@@?zC@CdtDCCC2CpC2CWB2Cе}?yCm0C@@@@?4iB$?pB6C Bf*C{Bf*CAf*Ckf?BBϣ)C@@@?TC8@qCCגCQCJCMCJC*y@C=y?YCC@@@?YC3M@QC3[3CRCm;CECm;C4B@}??DC*9C@@@?C@6CaCOC)CnB)CbBB_2w?U=CnC@@@?-DWn@D&C CC'CDC'CDBC'CS~?C*'CA@@?cdC'@C\XC#)CTCKCTCBTC(s?Ġ%C_VCA@@?!C@ CClC~CC~C=@~C\?|?ېC˒C A@@hC_@]rC,AACBKCBPB>TCw|?wwCA0A@@?&1Du@.;DQA QD(FADD(FAG"C(FA4?Db_JA@A@@?sC@p=C[AY4C^dAC^dABYdA]z?:2ChAPA@@?BxZ@g>B}%B B@BkB@BAcCp?B8hB`A@@?,JB&@ B)'AB6A /9B6AAa?CG/T?BbYApA@@?ZBk@B bBzBbB@1xCmB1xC^_?UBBA@@?%Bm@<CKC>QCJCn>BJCkB|C w?CCA@@? CK@l$CŸB[LC+BEC+B@hCn{?#C-BA@@?awCiie@`CU1CCh1CJBh1C"9~A4C+sx?CF1CA@@?[B0@$^B0L`BBFM`B=BFM`B)AFM`B*r?B`wdBA@@?[B!A]DACEAHCdAHC?_XAHC>FGAKCA@@?շ}B@:AriCAߥC BߥCgAߥC1> Ad'CA@@? Bd4GArAZB_AZB@ZBAC>>eABA@@?XA@AnBSB|?KC'XC@A@?Ba?#/CBGBLBJBKBmwB>Cj?'+ C1B@A@C0@C;CWC>C D>CjC>Cv~?_Ca=C@A@?@߬C9R@šCAxCACACA ?{?L CLA@A@?LCTU@*CxCHo[CByCCByC.CByCx?CpC( yCAA@?5CP @6qC:uC3PEC|CLC|C 0B*MBv?OWCnYyCAA@?nC>@=C%A78"C;APC;AKi C;Ay?q)CxA AA@?MCu6@VC߸A9QCA?CAAvLCy?PCA0AA@?9Cݡ]@uCCBC̿C폸C̿C:A̿C}?C8ƲC@AA@?~2Br@B4pCB;pCaB;pCn@rB%\?iB)qCPAA@?JCؚ\@PSCJC(KCIC?|@CIC7A׮A=z?oVCtIC`AA@'B?^@DCTȓC: CɓCѝBɓCB&Bdv?CmCCpAA@?^C R@jIC˾MCCC̾MCB̾MCBWAyz?GCMCAA@BqB@B,CYBCۣAC>pBhBIi?;٬B+dCAA@?<CF@@xB؋CBiЋCփ&CiЋCp0BhЋCx?dCCAA@?FB@BC)CBDܮCIBDܮC<5>)C܁B?3BBCAA@??%Cj@ CHCCHC;CHCJBHCǂz?c CnICAA@?A2A-B]C9e-BCք@0-C >B0-C ?~)BlCAA@?JC@mPBCCBC4KCCMCBC z?TBCAA@?n>A_@AAkCAkCk?^BϱA^B6>! AjCAA@?-B%JAfABŪAB"ABC>rxCC?GA#BA@?-CA}CCOCCCC(BB?CC?A@?kCp @ObCxC-C*CaB*C~BjCxs?;C'C@A@?"C#@ːC`DCRC3{@>C3{@㰷B2{@ZK}?0CJ @@@A@?C @ TCeCYCǁC^RCǁCZ-A)B}?SCO2C@A@?CLm@95CiB?C.BC.B,CKC*;}?SsCXB@A@?C@hPCVCyMCICCICRnTCICix?1OC#MC@A@#Du@DTB,%DABBr?DBBB_CBBB~?DiB@A@?Cߗ@~CCI#CCCCX$A C~?CWCAA@?xqB+a@ MB=Cұ;BRC٨ARC˺AKB?o=BʐCAA@?B;7@BhCGsBBC^'BCw?BCa@gC ߊCˆCߊC <4CߊCWBߊCx?G*CCpAA@?9B`@VA~nC QAtnC"BtnC̲BtnC?qAnvpCAA@hB A[BCBC)?oBBoB>f B㢘CAA@?p A Ab ByBQB{CARC&[BRC>wCB@CAA@?/ BOx Ay!|BdC'uBdClANCBOCbB?hfzBTCAA@?>VB Lr@UYBoC%[BoC #(CoC߀B ?@߀B@otC0I!>K@|BAA@B@B(CB(CN{B(CABQCvx?7gBrCAA@?AH%AAG)CVAG)C@@ˣC_mAˣC~ ?A6P)C A@?~IDtARKD4C"@D4CQD4CB4C?rED4C? A@?kCWu@eCy-CWC5Cc#'C5CB1?qy?זCQq3C@ A@?'>Dɶ@oDB] DB{*DB8BB~?DB@@ A@"&C?xCcojCBsCDfCaBDfC*CIBO0s?u/xCf^gC@ A@?bbC@+CAMC0;@,C0;@B4;@l|? Cв@@ A@?֤CW@CjC1KCVCCVC_lBUqBO~?CnC@ A@?xB+@@ߵBzuC'BoCû>lBBlBaG?%BqC@ A@?{Ci@*iCC꟡C'QCC'QC!$BN&C}?mCCA A@?B:@BRdC:BduCE`7BFɂB. CFɂB#r!?uBoCA A@?hDTͩ@ D4TBE DaBRDaB zBFuC,?3DB A A@?J[B+N@ C"CTC@עCZBAעC)BCo?ڪC nC0A A@?zBо@c CCg CSC=nAzC[CzCi?VCOͩC@A A@?,C1@ACvB 19CB)CBk BpCXx?AC?BPA A@?]Ba@-BuCBuCÛBuCdA'Bn?HB sC`A A@?PCF_@BgCfBCUCCBCGu?rlBUCpA A@?U5B$s@35 CCcCCBCB!aCEw?OCCA A@?^_Cm@!,CFuAC`A1C`A%C`Ap{?CՇAA A@? B@Q#C00CC30C˷A30CHCC)y?O4#CA0CA A@?̢B@%BKBBKBH(BKB:ACTn?[BҶBA A@?sD4CΘJ@ VCIECKXCECn CECBA}?UVCFCA A@?~DCWJ@?:C$C:C$C;JC$C3w|A$C}?|r:C$CA A@?B;AAnBΝAnBÌO@nB6AC>YABA A@?}C@CzBPCuB2 CuB!S7AuBG}?xCBA A@?2[B@.B_tBcB_tBbȭB_tB|A_tB\zx?ȜBtB?0A@?U#C5L7@BdC'BoB4CpBBqBh?"BB@0A@?JCO@<DߍC=CC52DCACd[~?CqC@@0A@?ʑBm?BB&BA0BAuBYNC#d?)5BA@0A@??B?BB:٨CwB\CRkB\CB\C~dH?~[BlġC@0A@? p,C(@OB@CK/C|EHC<C|EHCxA+Aw?"C FC@0A@?4iA8C A0A@?zCX@rCwCCaxCGCaxC]*@bxCK~?C>C0A0A@}B{@^ B"nCʪBroCBroCNaAqlBl?BpC@A0A@?@BW@!‘BBTBB CBVaBBo]l?uדBBPA0A@?B^@H C=\ZC=HjB=PB4CFs?;C?`A0A@?A([Cm@dVCQ@QCA@k`CA@iAD@ }?SC9@pA0A@?Bߑz@B-WC^BEWC٘BDWC 'B Bu?BXCA0A@?}BS@CeCCeCn}BeC9&BkFB6u?CeCA0A@?,CNR@Bf;BBRf;BNiCQf;BCQf;BOZz?B~9BA0A@?GB@BчCrBчCCчCJAчCv?xBׇCA0A@?BCv]@? 0C䈓C/CCPCCBC|?/C⊓CA0A@?T Ct@ C\EA$3 CFEABFEA*7BHNC$|?- !CTAA0A@?A?=ABHrnCiMBQrnC?iBzH?C}BnCA0A@?A;A*A^BmgAGBCeAFBLAUC)?YAB@A@:B|@1AzXBX؄@4CkiB4C/T ?By$B?@A@?bOC >J@lnC"CCC5CC]By%Cv{?JxC<"C@@A@?:BCPA@A@?cB@s@6y#C3CC3C/A3CCgCw?A%CdC`A@A@?B@}B؄KC=BUKC.BUKCx@A*A-l?*B[MCpA@A@?{Bv:@HB԰B1BB BB[)rBz>Ch?}BD$BA@A@?0hCq\@~CMC`CMC7CMC>eA_A~?CEMCA@A@? kB@BB͢BϑB+AϑBjBtdC2c? B7BA@A@?.0CIE@9C C3;C㛢C"C㛢C]VA7C}?9CQCA@A@?QbmB Z@fBCBރBÞC;#BÞCA* Cf?B֞CA@A@?sB/z@/BCBCzAC}BCBq?"=B) CA@A@?BT^=A=BhC/4BoC$AoC:ABT?>BCA@A@?2B8@ƬBfaC쒚BfaCsBfaCbRAI5B>7w?*B4jaC?PA@?M D3A."D Cq_D C.D CnB C.? Dq C@PA@aC9@9C5C6CpC:CpCBpCx?=5CC@@PA@?]lCSk@cC6C;~CY5C:QCY5C4Bث?`Rz?_qC5C@PA@6[Cf/@AC9yCNC qxChZC qxCc\9A qxCWLx?AHCxC@PA@?~CH@k?CFCFCuJCCuJCBuJC|Zz?e2ECJC@PA@?-3C9@̖C@RxCPC2yC澺B2yC,&CbxB%L{?%CzC@PA@*7LCp@aCpC]]CcC04CcCؚ#B2CDŽ{?|_C9CAPA@?zC׌@iC0'Cd4aC0'CVC0'C-B0'C0|?:dCn'CAPA@?N.C?@CߊC5CCR>CCt4BCdv?;C"C APA@?'C@]C@N1 CSCC\SC +C\SCgXA[SC-{z? CTC0APA@?%C9=f@ CCѺC=CʺCCʺC^YB%BYz?aBCC@APA@?A1 A B ABB.ABAz@LC /BLC? BBPAPA@?#CK@RC)BC)Bj(C)BWA)B[{?|CB`APA@?%7CjW@y+C&BgXB&Bw?hUB%BAPA@?nXCGQ@@LSCnCOCnC]CnC[AnCt}?|2TCZ(nCAPA@?ƙBx@BBp2BBKnBBJFB蟐Cρt?TBNBAPA@?Dx~BWP@ VBL*PC,[BXPC8qBXPCETBAk?-#BiPCAPA@?ABA<\At=CAt=C&Bt=C:At=CB۾C'>BS΅A'>B }?@CB@`A@?4C@]yCOC{CCRBC C*BhDz?y{CC@@`A@?7D @;DBDBDBC6@B$+?DgB@`A@?U C*G@ˠB\+_CYB\Cnb.C\C kB\Ci{m?WBYC@`A@HܶC@ۥCT8{CPD`AׯC`A`A@? C\R[@EICI>CvAC?C.B?C5B01A{?^KCR?CpA`A@? B/@$BbAīAcAإBcA}BcAtM?jB}AA`A@?dB@ĘBg0$CBQ0$C%BQ0$C1}@T0$Cl?B #CA`A@?C,w@xCB]%CɛB zCɛB*@Cz?C~BA`A@?:Cf@6 B+BfB+B!C+B lB+B5z?B,BA`A@?!qBk@BCBCBC g@kC w?B,CA`A@Bx@ЁB/TCB/TC>B/TC?/TCqsz?+B?)TCA`A@?=BECAB@B@?LB鹗B@pA@?3BUY@ KBa^CvB]CnB]C1XB.Cq?6BECApA@+A+@.BECTBCA6B6dYB6B>ZBCApA@?<5CWNF@CCp[CCp[CHCp[CJ4B p[Cz?I#CZC ApA@?TbB=@+B"B<B7"B4CB7"B!A7"BRE?BB0ApA@?ݣC@{@C5"CєC("CC("CSSB("C<~?h+Cʗ"C@ApA@?C5@=kACh B19CFAB.BEABx4BSWC{:{? DCzcBPApA@? Cb3@C CJB CoC C&RA Cy?'C[ C`ApA@?B A{xB@rB@ǯ[Aw8CsДBw8C=:?XuBLE@pApA@?B͕@B@CB@Cô4B@Cu`B<Cn? BvCApA@?B,@ńBNCB{ CB{ C2A| C l?P}BCApA@?PA AOA:C%zALC@F/C=BF/C,>McACApA@?ɨB@BCsBC#BCc1AC&tp?PBO CApA@?PZBAi B@BB%BaB%BfA%B3z^?U!BKBApA@?G^BbA{B>aBrB>aBF-B>aBAOlC!o?*aB`BA@ fB^@BdA,4NKB,48ܨA,4d?FA5?A@?3naCQ@CbDCZC DCC DC-CDCx?"CPEC@@A@?'bCl@O=C [C?7C [CUC [CQ#B [CQ{?CاB?CLA?CXw?Y}B nC AA@?C)@/C(CmC(CC(C4ƶA SC2z?|;C))C0AA@?Bm@{B^CB^CjB^C^A+B]n?3BH-_C@AA@?BtH@IB7C&^B2GCz"C2GCB2GCt?B-CPAA@?B_V@B|!BB{!BB{!B?B^\Cu?BX B`AA@?nCNF@M4CQz;C=CTz;CCSz;CHQ?J@Vx?rC҆;CpAA@?$B!CE ?PBFZBAA@HWB@,B^B BڋB؅BڋBkhAۋBJm?ނBxBAA@;BiX1AԋB *YCaB*YCs9XAdBiBgB\P?IB#YCAA@?ºA&AA%ANAAa@rNCaArNC>AAAA@?TuB@B^CМB^CbC^CxB^Cz?B^CA@?abKB@BC6BC(ACt-qBBsi?sBC?A@?.CQ@1 C +NCwC*NCkYKC*NCÅB*NCy?'T CLC@A@?gB@,߀B_CzB_C_җB_CaRA_C[?PB4C@@A@?mBzE@HB֫C[ BBC~BCoACF?Y >B۪C@A@?#C/@D\C:B%VCBBBcB{~CQ{?\CB@A@?JcC@BMCBHCBt#yCBDBB|?MCgB@A@?CTr@C0?9CC ?9C/#C ?9C6A ?9C z?C9C@A@2tC$7@C-C2C-CJaC-C)8 BC%Q~?C-CAA@?ŰBB/@WBCVBCBCw^A.Cu?:BCAA@?]HChD@fRCrC$ICʥCe BCʥCط@(B|?SCC AA@?NB gD@ @ CMC)C,MC B,MCFBWAu?CMC0AA@?%[CC@tTMC2CΞFC2Cc_lC2CTB2C!~?[EMC6bC@AA@?YBM@CF-Cf]CA-CBA-C-nNBͰCdy?dC܇-CPAA@?*RB @SBCR'UBC1ACrAiCsK?VBC`AA@?aAAwB/AB'/AX A|>C-lB|>C[>tkB.ApAA@? CBg@BiBBiB CiBҺBiB6@z?'GBhBAA@?B@5BBhB.BWB.B#~B ZC]w?mBBAA@?ZGcB@MB͟BB͟BoB͟BLAoCg?B˟BAA@?FvAD*A˛:BqBR,BpBE@=C/6B?CiG?k:BCBAA@?B7Aj85BbAAA@?_WB0Hn@Bz*1ALBA5AK@]?C!B]?CFc?B8AAA@? CO4@l CCJ CCÖCCXACuz? CVC AA@?"wBA{@RuBbC6BPC5}APC[נBCm%o?BBC0AA@??Cc@vW9C:A~C7C:A~CsAC:A~C:A:A~C>}|?9CB~C@AA@?B__L@ CBCBKBB B6Cpz?yCkiBPAA@?ٞB3@BI,C*ИB,Cx@B,C"@Y Cn?`BF-C`AA@?JCzg@{GuAK%fBAA@?`Bz@B6BB6Bv8,B6B%ByaCq?ɯB7BAA@?QB>ABqYCÍBhYC,AgYC3(BBs?6vB8XCAA@?BG@C=ܰCBC>ܰCB>ܰC A|-C}?zCC?A@? C|@BTCBhCCgC3< BgCx?BC@A@?Cx@isC1FCkC1FCC1FCaB1FC~?MrC̛FC@@A@?U WCͩAWCCC>OCCCYCCC0)ACC|?m3XCCC@A@?Ccc@:C饌Cɤ1C5C1gB4C`BҰBz?ϛ8CɌC@A@?2C@$"CByCmBP(DCmB^[&BnBz?d#CB@A@?B&@G\B/!C)B!; CȡB"; C{2A"; CGRn?^BC@A@?7Bro@?A~AsAArAAs@A%?|AAAA@?Q/CW@T{BC$BCtCCqCC[z?fBˑCAA@?)B;a@bATCKA"TCfΌA#TCYAB?AaUC AA@?JCXMI@48CcCl(9CcCQZWCcC%AcCT|?y#8CyC0AA@?Bf@2B1CdB1CVB1CͻIBCt?)2B1C@AA@?'C+^@iGBC BB/CXC/CHAB/C\z?YBaCPAA@?Bj@B~C B~CB~CBBzBx?&BsC`AA@?Bm>@BBS0C^űBAS0C CAS0COBAS0Ctw?DB:P0CpAA@?[;B ABcbC!OBfbCPAfbCBB:B>1d?1ىBbCAA@SrAQACB"gC5B"gC@ LB}PB LBJ?(DB!gCAA@?*)Bz@]B;CGB;C&2B;CA;Cxq??]B!CA@?Bp@ZB4C`3B4CX C4C@dB4C?m@BC濟B"CB"Cۮ BBMi?dBC@A@?MBD<@LBDBMB^BuB_B2A_BSa?KBz BAA@?4jB (@vB@ CmBl C Cl C`Bl C x?pXB CAA@?aDBt@!-TB ȕBUB˕B,A˕Bf A~CW?u]UB0ҕB AA@؝AaA7A-AZA?.A8]A>C{,B>C>A0?A0AA@?:B6p@fyBKB[ΨBKB{~BKBAAXCr?B+B@AA@?w!Ck,]@lCKBCKB*CKB>AKBd|?C%&LBPAA@?EaB@,BCV$BC^~uBChOACh?,BC`AA@?IZB N@$oB)B7B)B$6A)B]'Be Cr?^BCBpAA@?B8AtBB'_BBABB"Cl?juBgBA@?B~q@ѻB4C'?B4CB4C0@g%7? B4C?A@QC%@9CĒCb;CĒCٿBĒC'BB$|?.:CĒC@A@??BdAC@A@?۶AHV A>:4AQC3A$C4S?H,C+AAG,C:>)3A5C@A@?B@ȖB<1B4By2B,?By2B&(AE`C%k? BQ2B@A@?CWa@ C@C. C?@Cf.!C?@CA>@C{?? C@CAA@?7B<@ 7 CcA: CAƻBA/BsOCC{?rs CAAA@?M?hړBbB AA@Q#CЛX@+qC)%@*C(%@N5@C(%@*|B(%@b{?I6C~"@0AA@?ػB뗘@tByC4ĢByCByC-/AzCVw?B_C@AA@?gBڛ@BS"AVBX"AVBX"Ac@`"AIu?rB@1APAA@{_BuAB5qBudB[qBfvA[qB[L&BypCh?>BberB@A@?YBy(@B'CB'C9[B'C 2BCJx?4B'C@@A@kA$x@? BD{CR_BD{C"ABpsBB> B{C@A@?mB@ܓ4B~B4B~B&VA~BAjsCRG?86B5O~B@A@?B@ mB?AWlB7AiFB6AyOA/Aӛl?lBA@A@?%B|@QvBlCrBuC"(AuCIHBcC\?lvBoC@A@? B=M@toBCgB{C2B{C#A{Ce?1pByCAA@?wB܈@"Bn^dCPBo^dC²qAo^dCyByABAr?OB2gdCAA@?hnB@m&BJ:qC7BJ:qC߬BJ:qCCAJ:qCcf?&B!>qC AA@?%B C@qDBQ@BG7BF@BsBG@BmBG@Brt?:DB?B0AA@?#Bx@f'BmCdBmCBmCL3BmCgj?+(BfmC@AA@?,B @[B+CB.CvB.C/)AwC |?uPB\C@@A@?JwCtaw?ױB~C@A@XTOBkS[@BpSC|BoSCI+zBB A@?N\B@T%BBABT*ABx&@C0)>cAB0A@?C5@CBCB؁CBa@B?CB@A@jD@/aCCLCC_DCEBC?VCCPA@?C@QCC(CC CC@C?tCC`A@?yC6@hCBccCB_CBo-BB?j~bCBpA@? BC@nYBC8BCmBC-AB?BCA@?B@|BBwBBB CBBBB~?~BBA@?C#@RBB BB&RCBsCB?QBBA@?w+BֲnA`§ACACAACz@ Bы>rACA@?AXABBcBBsBCCC5?@,BBA@?CB8N|A* BB BB8qABAC7X ?/ BBA@BuB AyBB{BBپBB8TAB!~?wBBA@?Ɯ/BxA8BCGBCAC Q@BH-?zBBCA@?n"AEiAFnAC_̾ACAB4BB>8ACA@A:A"ACbAC AB2WBB1>*ACA@?APAeBCkBC @B~BB3AIC0i=)@ƫC`A?@?kB43@`BeTCNYBXtQCkBXtQC\AAmMW?(vBߡLCpA?@?{ECT@Uc C-BNC*xBBC*xB)[A*xBs?: C>BA?@?0Cf@!CCCcCCcC9j@ƮBy?^C}CA?@?3Bk@.Bs:CABs:CYBs:CA y@eq?,B:CA?@?B)@fpABCAU%B}H@B>%BAvCu?-BWFBA@@?h&BZAH!Bn%C'B?n%Co?!Bv%C@@@@?FCz@?qDAiCةCM7{CCM7{C!BN7{C<}?l,C}C@@@@? ۄCh@C;mACICP#C]CP#CB_C@|?C C@@@@?Cq@@Cd[C]dC,CaC,CʸB,Cz{?ShC`mC@@@@?D@DV{QCDJC DJCˮBJC5 ?k DgJCA@@@?*%C7@C~.CCU:CCU:CkB*@,O}?߲C7CA@@@?<[C 2@m\C@cC;CtCCtCv8CtC!Hx?.DCoC A@@@eC<@CZAyCСA}7CСA1B:HCx?bC,A0A@@@? C>^@FCB;C BEC Bi BŽC}?TDCB@A@@@?RnC3=@^C8Bs#Cp@'BʝCz BCCBCCFrBCCcM?kB4CA@@@?FɥB@t'BZ"B$B"BEB"BplB"BmbZ?%BҊBA@@@?C@&CNC,CNCCNC:A'C{?EyCMCA@@@?B.@jC'CC'CuB'C1BCy?$C'CA@@@?-#C~p@!CLBWCZB%CZB~ 'AZBa{?!CPBA@@@?k7B>@ΐB CB CB C7B CVx?֐B C@@@?2DqA%C /B$CBL, DBBB/~?qD4B@@@?>CI@ÛCTiBfC_B8B_B\B8CCxz?j7C7B@@@?َ[CP@33CUdCD`C>dC"C>dC^m?A|Bz=CA@@?mC?]@;?1CCuq-CcCnBcCsB?C3X{?0CwCA@@?BDBo@JBBT-BBzBBfACt?HBBBA@@?;C:J@&Ca$CCSc$CP [CSc$C[BRc$C:|?FPCg$CA@@?jB/@uB BpxB B@SA B@CB,CCa?µBD\BA@@?dBg[@9B={C B8{CB8{CLA5pB:y?B+{CA@@?B @?Ba CA:Bo C|Bo CwA8̞Cp?BT CA@@~B@BwCCBzC8ABzC+@CNy?oBCA@@?0BX@)^BvrBZlBvrB)BvrB-BvrB!v?3B rB?@@?B@uCbALBBéBB BB(z4?mvB>cB@@@?[C\@uC%CBϓCg1CϓCBϓC=n?MC\C@@@@?%C1@NB#CQBQCr/CQC 'eBQC Xo?\CƿTC@@@?qC?@RHCCbCCaC:CaCIC2Cz|?"ٰCsaC@@@?eC9u]@WCR=C}C{?C~=C{?C0Bw9As?{?Cm?C@@@?C@jClC|C˂CFD˂CqC˂C~?alCǂC@@@?pD@DDLCe DNC!DNCBNC$?s]DvMCA@@?C @C CEBZCBZC3@ZC׊g?CCA@@?kBD>A58DC&/D]CNTD]CC]C?q]3DC B4BCB1CBBBZy?-#?C[B0A@@? [Cܯ @"C"BGC]B,PfC^BA`BI{?8CiqB@A@@?dCM:@{C8ARƃC2AֵC1A|OB)Ad{?GeCAPA@@?}gCA@FCgBJCBECBrB5Cl|?JCB`A@@?oW8Ch@NC`BC1BMC1BnwWB1Bix?DaC\xBpA@@?B^!@6(BϒC~BʒC"aBʒCB(B49Z? ˞BfCA@@?dVPCR@7C*CnA2C_*C:gC_*CSB_*C {?* 6CCA@@?jBj@C NRB<CMRBDBMRBw!BshCy?CRQBA@@?6.BʁA,BC30#BC_VAC0A!CF?8$BnժCA@@CB9@-BX*CBW*C¹BV*CGA,CCx?rB!CA@@?Mf:CR@k!CHC7k!CHCSMCHCl.BHCQ{?| CwCA@@?*hCPJV@qG\C C7\CCoCCAC~?G\CbCA@@?rB@yB*BzhB*BͭB*B]jA CWy?3BʰBA@@?@bB,@H;B?CdBdž?Cd Cdž?CįBdž?Cs?iB%?CA@@?>B3@@CLҚB8BRҚBBSҚB@cҚBh|?.ZCB?@@?JC3sACųCuCZAC ZA1C ZA}?CqA@@@?a6B, ?_BC)AC AC?@C>ATC@@@@?pC\L@mYCvA dC9@A$C9@Cϑ9C|?VaC@@@@?7B?}7CC=B7=C A7=CBnz.CZ?hB˲C@@@?Ϊ:B[@B1CʮBwCQQAC٢BC?:BvC@@@?WBJ@C,BTB BDB B@DCye?BOB@@@CB@dBa-BB xBݛ/C xB;B xB;+b?2CBhBA@@?C@BCXA2|%CB\}BB{B;2TC+g?\/C>AA@@% CH;@dqCZi^CrChCpChCBhC+z?ƉqC8UdC A@@?GCHR[@UCɢC過CaCzCaCwBaCh8}?ΓC#C0A@@?;CM@kC< DC CyFCgCzFCJkAFC}?rCUEC@A@@?SCI0@=CBCURCܳBURCCURC܇BURCSv?䟸B]SCA@@?mBI@ƅ`BʭCۧSBإCvNBإC?K CzO?6^B[CA@@?IB@#HBߔC#BߔCvBߔCm4A~BB?p?BėCA@@vBo@'lBΉCKnBCIhBC0ո?}C@]? kB'MCA@@?RNBxAKBwBB{B>uA{B>BC d?q}B BA@@?t;Bp,AlBWCjBWC.AWCAB3B\? mByWCA@@?AխqBmIB%B\C*q?'+CDB@@@?R`CWm@C,C~!C=CC=CrpC=Cy?B6C[A@@@@@?p2C f@_CWACA_FCA]BAt? CB@@@?(~CY`@CaAJCArCA(?pA~?EClgA@@@?=Dվ@< DkIClDKC@DKCM|AKC~?uD[KC@@@?;CĔ@ʥCFB3CBbCB0AZC W}?׭C BtAPA@@?CZh@tCP)CꤻC,C19C,C᮹BBS~?iCKC`A@@?C CSd@Ĥ,CʐC`&CtCaBtC9zB C?w?};*C(CpA@@?,cBm@tBWBBB CBueBBi?nBBA@@?>B@rB>CֱB>CB>C|q A>Ct?BP@CA@@[CR@(glC\BdCvBWBvB..CyCJQ|?ˢlC?BA@@JCn'E@BtCcBIC$r1CICBICXw?/BCA@@FB@ĈBA:BPARBQAѵ BQLC2s?+BUAA@@?qo CfPm@B3BB.3BHC.3B)B.3By?7BԨBA@@?ԈB4AeBjbB"fBEbB߹2@EbBZBnlC!G?CieB7aBA@@?Am=A^B CB CL5@^C?"B_Cf?BB CA@@?R Câ@~B!~@TB ~@c(C~@wB~@|?sBC,@A@@?3B>4@oBCI YBCʓCCBCx?pBzC?A@?lB/?<C|BfByCwAyC BӚCcY?B2C@A@?jBF? |B͕C\BՏC"@uWB4{BuWBH?!BRC@@A@?KCB-@XC\LCjuvC$9@C%9@Bʙ8C{hz?}C~?@A@?KC5:P@=C{CˣC~:sCpC~:sCPA|:sC}z}?FǦCAuC@A@?<0C M@C] C]vC}CodC}CB}C@ {?CC@A@?5Q?CG6@3C@GPCB}CB UBfUC&s?;C A@A@?C|B@CıBZCܲBݣCܲBC1C?}?WCQBAA@?CO@-+[CIC#Ci/C=Bi/Cͽ&B㴱C_s?5C"Csr@Q]C3C@Ce.CCe.C%@BQe}?9C`.C@AA@?CjD[@ C=CqC?CyB?CA:0A=lt?p CzCCPAA@?*0CV@YԃCp+@Aٔ|CKGA8BJGAx C|@C_sz?C2TA`AA@?B"ڟ@ C#A8C CA8Cͳ@A8C] C @4Rr?|Cz7CpAA@?LWCO}@#FB CBCay&CC6BCrp?9dBCAA@?C\@*ECBl*ACūB=BūB&BjC |?5DC HBAA@?BX@@BވCeB݈CB݈C(A8vB­u?BBڈCAA@?ʈABjACACU)H>NAN{BAA@?ȅB @Bb=CBb=C]Bb=CeA-Au?MBB=C?A@?C@CC0C$CxC$CzBHC2}?:nC:-C@A@#C@"CB%CM Cr.DM CBM C{~?'@C҂C@@A@?C2'@ KCE`CC:iC=C:iCyi@4iC}?bȹCyfC@A@?C~l@;CX BdC6ۓB)C6ۓB4A}C>}?4{CB@A@tC'@@"CGsBЕCiBDiB-' CiB@7}?CkB@A@?C@݇B0AmAkCAA@?LDK"@&DƻCDlC-DlC:BlC0?1 DC AA@?*Cj,@wC8eDCΞpCJGCCJGC69BJGCw{?.pCFC0AA@?˄BZ@ѹBBB|Bs0BBt0BpaA9tCvk? Bk{B@AA@?)C]]@'JC>kBEC滽BB滽BBnC'tx?bTC BPAA@ CP@,B/CBC CC^BCQr?BeC`AA@?C^@v*C@CY%C@CC@CzAC9y?o-CCpAA@}CD#P@CCKn C?CRn C ӛCRn CCBRn CJ}?ڼCC CAA@?3AB-ApB-A\A>CT~j?HyB*AAA@?SXBKAڲoBl#CiBH#Cp@G#CZB%׫CG?hipB'#CAA@?hB2ABCCBDCHABzeBBb:?BHCAA@?Z%Cr@BэCBǍC\_-CǍCE+nBǍCUy?cBWōCAA@?XHCn@΋[Cx^nCYCx^nCgH4Cx^nC1ByiBQ~?r[C\nCAA@?JB$@A 6BŹ:C˝ Bѹ:CL=Aѹ:CJA:@2?MtB :CAA@j%[B !A+BЂqC`BЂqC2B΂qCqy8A> vBk?oBx}qC A@?|(8C]@oC3CB3C C3C~vC3C#}?ghB3C? A@?@Ca@CB㇐CBzCBACQz?=CbWB@ A@?kC^@C3+B!C+B7C+B^B+B r?q!C뙴B@@ A@?avCPܙ@?-CCCoC YCJC YCcO#C YC{?=C䲫C@ A@?]C$@;ClCʹNC҅[CW[C҅[CMAׅ[C v?aC{jbC@ A@?=C@}@/C3 CC@CC@CAB>C{?jC{7C@ A@?v&C6@1CᣏC4CC6 CCVB5Bv?1CVۏC@ A@?B$@Q$CaBd5CHBAHBϘC>Cq? C!BA A@?5-C@:.CVuCL[C~C,C~C);C~CO}?BJCp,{CA A@?}C-@OHC2cKCMCvHCCvHCʊBvHCy?JCvIC A A@?iCWI@QyCbAsCoAXCoAABC`>|?yrC,{A0A A@?$qCc@8jWC,C-PCCCCCCnBCC!{?LYMCeC@A A@? BhA횥A CA^&C@/CzA/C#<>pAL"BPA A@w_GC =\@[CBMVCB12CByBH{CQ|?XCchB`A A@?ljAC;@|/C8,C*C,C2RC,C'^B,C{?#0CV-CpA A@?fBU@ B~|CMQB*|C@+B*|C3SB*|CY?Bt}CA A@?eBW@)zBTB&^BǬB BǬBsAǬBys?OBBA A@?xCdO@/5Cm AU.C AC AxC A}?)B5C] AA A@?B@P.B*A3BL*ABK*AbjKAH*Ag?B|AA A@?B9}@oɖBBBdžBZ BdžBvNBdžBrs?ݖB]BA A@?aBw.@BJBBB=BP)B=B_JBPsC:q?XBmBA A@?/B5@#>BIC37BMCFBMCAMCJY?/=BCA A@Bn@ApABABABc@w}C=?}A/BA A@?IBMC9ABIBB6BB7BB3>Bh?CIBB0A@?&p*AS@ƭ_BC,+AB$ACAC+3C ǧCG*2CnCG*2Cy85BG*2C^}?:nC6W2CA0A@$@$C^6@/OC!WCCTC&CTCK|ATC>Jw?CRC A0A@NC1}@!eC[@C^CN@Cy7CN@CNB7DAԪ{?ǑkCD?C0A0A@?cBwV@B+NBC]BDACcBDAC@m0CDSC,C+SCB+SCBAB)CC{?2CCpA0A@?Bs@$BWA\CpB#A\CB"A\CHA"A\Cap?RBz~[CA0A@?rBL@BC BC;AC}nBCNl?B> CA0A@?B*@BVBX=BlVBkClVBBlVBq?WBBA0A@?RC3bF@,#C_C5$CdC |CdC?ׯBdC|?+#C>CA0A@?1A0AsBÜhCZB4hC;BDRBBDRB1?!DB;hCA0A@?A.AxDBB*CBBo!@C#MBCMkAߐC@A@?C9@^C66^]Ce_5nЃCg_59@_5?|sC_5?@A@?gDsA DJCCNCTDNCANCU?@CMC@@A@?2?C9\@CJC%C C+CC C4)B C^}?C C@@@A@?nC۶@ENCCC8CC8CWB8C~?Z|CWC@@A@?%7D)@C@C0C[CD[C%B[C8?iCC@@A@?C@gCgB,uC^)BOC^)BtAf)BI~?ٔCǯB@@A@?C;@u,C&CiC>CGϽC>CזB>C'|?2!CC@@A@?jSCGD@xvSCJBvUCBɗGCB cACEz?1UCɫBA@A@?B1@aBqA)BdACdA9GBdA2n?B;PAA@A@?+Byw@WeBƿ@ǂB@tA@4B\L8Ca?{Bc@ A@A@?79B U@,^BPB[B Bz@FC_lBFC73 ? pBםB0A@A@?"CPC@ N@CBC =CBCGoCBC gjB0^kA;{?IBéC5BéC"ACu?ñBݩCA@A@?zyBb@eBZBBZB]BZB\AZBu?B ZBA@A@? B@ZBeCvBeCaBeC3յAeCWr?VBnfCA@A@?2B}@fp C6.C C?.CB?.CB gCz?c? C.CA@A@?GA|)AژACACez@FCAFCtF>HACA@A@? Cl7@C8C&B8C}C8CۯA8CY}?65C8CA@A@?@B-:AkA(kC4TA(kCyLB(kCYA(kCI?AlCPA@N#CzJ@qdBBRABX$CBCBЯ?bAB?PA@?C.@~(C^CʵCLaCCLaCA=05B,}?SïCW`C@PA@?ALD].AwE DABXDbCBc#DcCB낊BhCBm?DBB@@PA@?B @eBo CBACWBACʬABNf?B|C@PA@?D$@D(U5CLDw5CDw5C(Bw5C?wDn5C@PA@?ЬC7@OvC>(CCK7)C]CK7)C2BK7)Ci}?C`@)C@PA@3m2BTɋ@=BWC&BsYCcA˝BӿB˝B}B?(B8[C@PA@?'^Cn@BUۧB"BWJB|CWJBh)jCWJBdv?̸BBAPA@?pB2@B=AC=xBECCBECC>`AECC `d?B(BICAPA@?MKBث@XBuCeEB1;vCv >;vC)BavB6?9VBvC APA@?sC:]@C^ArC.CArCUCArC*q)CArC~?wCrC0APA@?Ba[@3C BBBtiBB`B:C:q?CfB@APA@?/AA\BAH BAŜPAqNCy2PBqNC1>%BAPAPA@?0"Cx;@sACFC}cBB`A@?uCsIJAOC(6+qCA6CA6A4C?C7+6?`A@?:C@ CBBCUB8RCUBvBUBkv?<C@|B@`A@?: DkADFDADKAe)DKAwBJA+?DA@@`A@?ZB@<+ CqC P CTC˄BTC6*BP͟B[Hs?YC]BC@`A@?2B@WBKLB UB:BXOB:BlA0bC7?w\BB@`A@?B@C@8:C9dB{6CMncB/BCMncBCANncB)Xz?C9C\B@`A@;Ct@n$CBC6BqjMC6By7B4Bx?q'CB@`A@?$B&O@BA@)hB#;B@B%;B@A6;B@kj?BB@A`A@? Ay@ƱB^FDBSBCB!:B}dCKC|dC&(?гBB@-R?B^;@A`A@??B舥@u0B,@C2BMCgJBMCIBMCL_?2BCA`A@?aBh@@BqCBqCNBqCRAqCTp?RB]CA`A@?B@2 BBrAjNCApA@?;aB@8¿BWABWABWA%A~ACx?ԿBXAApA@?wBkAeB)CK KB$CB$CȯA$Cp?\dBUCA@V*Cx@ 2Crc5],C5~O(C5ρ@4C?}>4C5?A@?aC@(^CNCFWCNCcCNCSKMANCnA{?aC͵NC@@A@? CC@6gB,CBCCC&RBCn4s?B0xC@A@?gC7'@ C5e"CCe"C&/Ce"CB2C}?E;Cv"C@A@?15CuM@u-CC)CCR9CC2!xACz?+CC@A@?@fCӛ@âC90CDC/0C+C/0ClA^`C}?C C@A@?uB@3@BΊCtBΊCpBΊC An;Bn?&BCAA@?PJC@]fC CaCC /CCyJBxB҉}?fC CAA@?T.BD@kBMCQ}BzC*AzC.YB塦BT?yBYC AA@?BZ@e CŐ_CE8C_CbB_C %BzB.Bv?C_C0AA@?` B)@9{BGMB-%qBDB3]A?ZC]LB?ZCLd+?qBB@AA@?C)@>BVAB6A{C6AB6Aby?)TB9DAPAA@B$=@l CECΔCSC,BTC%A*QCny?V CC`AA@?ꏰAAKlBwֽBnB\ֽBoqBuCFBuC?znB{oBpAA@?]B@sB'CuBp'CjBp'CQA9Ckw?LB'CAA@?BB(t@B.BYBBjBBpAB v?SۺB[BAA@?`fA$AMAxCQAoCy?BBABG>Ai]CAA@?dB)@H]BC)ܶBC2rCCv BCy?*-BCAA@?O"B$A[BB:BBAB6\BBCGh?B䮖BA@?#B@}wBCÐqBC>CBopBBέ=?luBC?A@?xCݔ@aCP͓CCs͓CWuCs͓C A5B}?٘C;RC@A@V1B|!@XAOBATLBATLB1AӒC>AB@@A@?:1Cel@_pCAC CAC݄MCAC@BACxx?CzAC@A@?4bB.A@B}rC?B}rC)ŐA}rCpByBY?`B {rC@A@?)C\lY@bC4B7CB&BB C}Ch|}?ECVB@A@?dUCiC@CQB0CnBpCnB`BnBЖ|?C@%B@A@?U?C@)ECկCI ACկCY9CկC@(+C>#}?ȳDCxCAA@?OB$@ Bs6BB-7B4B-7BU@͔Cx :?%"BBAA@?!QB̭@8ӍBCBwCAwC@BCdU?nBMQC AA@?BS@իB gC$_BfCABR?NB XCpAA@?VgBoX@lBCBȫCCȫC23BȫCx?jB CAA@?PB,M@B CB Ch B C`xBA,C=r?,]B0CAA@?OBת@8BQCr1BQC7LBQC%+BQCg?S8B=CAA@BM1AANBNANBANB"w?;NB`B?AenOBAA@?AR1AB`=BC ,BC6?6Z)C94B6Z)C!O? ٌA޾BAA@QCn@X;CTCe4CtAbBpAA@?B=sc@CMA8 CfAqBgA.BmGCz?QCcAAA@?5AYd#AZAǠuBlnAhuB@hqC,AhqC~>A7tBAA@?7BhKAB]9C:lBY9CyؿAY9CM BdB,2h?!]B+CAA@?jBGANMBҭCh:BҭC2}BҭCBAҭCJp?l&MBԭCA@?nBy@ghBC`BC,CCkBC?tBC?A@ˮB?K@[BW;C웴BW;CDBW;C@9@A7B@A@?B C@rBCrBB"B*gSB"BA'CAA@?pA"AQB9C@B9Cg@둿@֌QB葿@bP?zQB:CAA@?f|B@pB+iC&fYB*iCyB*iCA+iC( MAOCAA@? C[)@4z CBClB:-ClBFAnB{?l C B AA@??C2F_@ CsC4 CC`YCCEbBC|?? CVC0AA@/BWW@WBH) CBS$ CյBS$ CiNA)CNDw?RsB% C@AA@?AB. A!tA< CrAW C'2?@C}A@C֭>knACPAA@?oA A9AsCc1AC?CAmBJL>н8AޙC`AA@??B$AA%AšCtAšC@šC@(@/C&Ǎ>%AКCpAA@?BAAuA}%nB:gC@A@?HB<@TB,aC%B)aC6CB)aCDkAR0CYg?z?dnB]CAA@?BB>?>B LC@AA@?RBt@uRB CB C5B C;B,Bs?BCPAA@?B(c@jlBC]BChBC-AC{?BC`AA@?NA_Aڮ.BCBC^AoC CNQBoC Co!?F/BmCpAA@?B0@]BVCZ^BVCBVCJ>VC|?zBLCA@?4 B AB3C%B3ClACBCLu?B3C?A@? ?C+@J.&CRCX'C[C RC[C)B[C6|?B|CB|Caj C|C2\B|Cby{?8B|CPAA@;Bf]@A')CuA')C+IB')C B')C2?RA)CA@?B[@#CBU$CBTةBBV.BC?j#CB?A@?`B+A@SBCFSB`CB`CB`Cl?hSBkC@A@+BXs@B1UCB TCB TCE~A Cw?5BTAC@@A@+yB愈@tSCBwCBoBBsBh#Cty?$CB@A@?ơBp@AMB:/C B;/CxB;/CO&BCaw?9BQ/C@A@?;B^jz@ B .AB.AB.AHA>Cw?B^-A@A@?eBb!@:ƓBϭC1ѐBϭCNMBϭCU B'C j?"BC@A@?;B[:@4'BEZC BEZCdBEZC0BBYv?TB&ZCAA@?lB.!\@/2B,;C^#+B1;CpB1;C1A1;C!L^?43Bh%;CAA@?B:g@܀B'+$CuB+$CB+$CB+$C44u?؀B $C AA@?BPrR@ B~BpB~Br^B~BA~B=z?mBB0AA@?%AǍ ABF0@UA.1@J0@1@LA:CQ#?xBW@@AA@?B@{BdӋCBbӋC CbӋC92BbӋCP}?Bz͋C?A@?MBxr@BK֡COBG֡CBH֡CM"AI֡Cu?BɡC@A@?=BJR@AlCAA_CaA_C$n@_C?}AqC@@A@? Br@)d;BX)B3BY)Bp@Y)Be$BWʈC3?;BK.B@A@?gBz@BAw"BHAAIAmMBiKCo?BA@A@?B;@ChB$C+:^B$ClB$CjcA#C;Mp?KhB1C@A@?Z6AZb@ A_S C?|ApS C@CQACk> $ Af CAA@?<A@)CBy7C 0By7CdTWAg^@eBg^@Ah@DAא@{Aw@RAx@HA@|;C3?!A\!@@A@?B@uPBFJB=BFJBcAFJB lAfCd?rPBJB@A@?B3@xZBA@BAйA}A-AKCMc?%[BnA@A@j.^B7@+nB[CBXCAYCTfBqCT>v?orBC@A@?AR+@*0B˓CG B˓C6hAy/BPLZBy/B 4C>@](8 =8%@CA@?ڔDPA~ D4CРD4CD4C@^B4C?tD4C A@?v CAp@sAö6A@?NB5XArFBB4BJB4Ct?BJBA@?AjAiCB4CA4CІ?%7@B%7D4?NB4C@?@?V/CG@)C05B(CFBVCFBB FBX|?C!HB@?@?mPBI@(Bu6CoXANC"@NC/A,AU>lGA8UC@?@?gB:@CxWBCBBBBWCn?'*C BA?@?{B(+@ĉB-CFB sAC[B sACQA sAC8S?Boe=CA?@?C@QC=(BGCp BϮCp BBp Bd}?͹CB A?@?~C C@]&CduCìC5C'C5C&4C5C:Es?+C:C0A?@~ʷBZp@Bq_BA?@?٥ C-_@BBB͢B!wC͢B>4B͢B\w?=BxBA?@? CCh@28CnCBnC.CnCcL@BnC?Dz?ՅCCA?@?-Cfi@B#CB"CFC"C7B"Cy?WBߘCA?@?}Bc@BVB EBB2BBABLw?eB>BA?@?B0@eB.)AsB(ArB(A AICjm?bBAA?@? A-@A]tAC˽fACAGtAǾCA?@?,B ϐAACAC BC@C8? AC@@@?OB@bCBCBBBfBzC//k? CB@@@?vECNa@5C XCaMCdC|2CdC AxBBx?TCheC@@@?ҒC5P@C؀ACSCs9CxCs9CERAt9C|?òC Y9CA@@?C@LBh/CB 9$CS;C 9$C%B 9$CTj?BJ&CA@@?)CfN@UTCC:CC CCRB=ҮBsr?ScCCC A@@?CBq[@C7CCq_CfCq_C#CC{?˲CwC0A@@?`C?@0C뉏Cn?CgCVlvCgC[BgCy?0CUC@A@@?C>@K=CgC?+C?v?%:CRCPA@@?CB@CqCfC?CC?C޳A|bCzs?CѨC`A@@?O׋C@>$kCtPXC6dCXC&CXC.BXC|?e_CZCpA@@?>CQ!l@$BB%BBi CB=CBBpj?BBA@@?PB@ZfBc3Cy`B/3CA/3C WBC{Cu&@ir9CLBGC DB(CDB AB&eCAx?@CPqGBPA@@@?oC}L@!CǖC!CC&CCUCCO/y? CwC`A@@@?|{C@1CFCyCLCwCLC?ۙC`|?,Cx CpA@@@?q CJGj@ V7C B0C9:BC9:B*BNCx?7C BA@@@?C= h@>yB'ArB0A/C0A9B0Ai?\BrFAA@@@ݿBĮ@CBN8\BFVBA@@@?:rB@$B ­CUB­C;B­CSB­C;Lb?Z&$B CA@@@?4Bx^DAFXBCBGBCYACUBB\?WXB׀C@@@@CA C_B^CQADQAx+BQA̓~?`CslA@@@?BK@WB#B"EBxdAʃ'BxdA@GBC?TIB/'A@@@?+C]@CoQB_C6zBulC6zBA/zB~?KCwB@@@?/CJ@2CmWAC`AeC`A.%C BC1}?;C?`A@@@?t fCZ*@q^CLBrKC3BuC3B)B3BEz?rKCBA@@?M#DYADBDҹBJ%DҹB쫤AҹB .?a DSBA@@?6cCM/@e*pCCzkCVC;JCVCBXBDv?pCL|C A@@?~C}E@8CC뉤Co C`Co CB1BL|?l3ClC0A@@?%C=@8BQT9CbB%%CDTC%%CiB%%CNr?B",C@A@@?-C=@B%@10B(C&C(C=B(CQl?BCPA@@?#wC9@iCcBC]BlC]BBaאCE}?|NC3+B`A@@bBMb@BbBB3B C3B{HB3B;d?$B_BpA@@?rBh@o3zBCʕtBKCeBKCu50BKC\?~[Bf"CA@@?8C\@9C\'@((4C!'@j5C '@G?'@-z?=BCJw?B:lBA@@?xB&@3BVCۍBYCVBYCAXC q?BCA@@?KBjB8A/B)BB(BODB(BAA(BE _?/BB?@@?E CF~@,QC*lCf[3C bbC1B bbC>B,9BKs?m?C`aC@@@CCH7@8YC;C4C8BjC8B3B7B |?BCB@@@@?!Cd@_Ch C42{CxDCO8CxDC|BxDC+{?ꟇCC@@@?2B@ECoByC؅B{vB؅BA~Cqm?CB@@@?Cs\@sCC"C_\CU)C:BU)C CRC1w?oC4C@@@Ch@C*@C`6AdC^6A? Cgl?C~}?Cj-A@@@?\C&@XBLPC0Ch?C{Ch?CT̖Bi?C׬x?- C BCA@@?6 D@QDB(B< D (B D (B5o@(Bΐ~?Dp(BA@@?X|CXK@VjCTBTrC#BʼwC#B@#Bx?$qC$EB A@@?C@[CB2C'"BsB'"B/?BzC=t?AC/B0A@@?CRk@vD@ߒC`DZCCZCB^jB.?9De1C@A@@楋B~@VcB̺CxzRBV:C>AV:CAWB'?`B`eCPA@@jC\@CjCZCFCIJCFC?LlBLB|?W;CC`A@@?fB@CEBDC-B5A+BBwCA4m?CBpA@@?泃B@ާbBmNB5^Bj[B% PBj[Bb@ܖCQ?DBuBA@@RCjU@}cC~Cs-]C~CCC~C7ADB|?y^C&DCA@@?˜A- AYA/C<^Am0Cٝ;ABBB$c>lA6CA@@?QAB$AA B辁AZCE@z-CAz-CVB>9ACA@@?WBMo@C<C9NB<C6%B<C AvCy?B bCA@@?Q2CF@u+;CcB=;CcB&#C cBAlC|?v3;C0dBA@@?iYBAa!BF5Ca!BC -BC:@CD?L!BCA@@?'B@R!Bea&C2&Bpa&CBpa&C2(?0Cty?wBъ&CA@@UAB+AŜBm$BŖBm$B@Am$BZ}Bt]Cg?B@$BA@@?rKBwg?@,C C@@@?xfC@֝CCAlCvCCvC&&kA, C)}?CqC@@@@?UTCg@v.CH+BۍC6BC C6B/C C<{?gC{B@@@?,QC]T@VkCMBC#BC#BiC#Bu?jCCB@@@?C$C@b#CqBr C'C-C'C B'Cs?w C-C@@@vZ%DI@D"Bu`D)B`7D(BC&ByC?ɶDIB@@@?91B\4@LBZAA@@?ZC@ܵC+KCTcCliC@?CliCPBB[u?\oCܖCA@@zBM_(@ B,AC cA_B"cA͖B;BCF5j?hCA A@@? Cx@CZB?C:sBD:sBYB8sB{?SCB0A@@??1CX#@JC?wxBCPA@@?S:Crh@=}CBCFBZCFBsBFBx?VC(B`A@@?"ZB@dBs+CpBv-CAv-CHB;C$?"`B>N0CpA@@?Co@mB,]CBG]C`(CG]CޣBG]Cr?jBáCA@@?H C]@_/C}"C`+CJ"Cw&CJ"CA&CA{?./CcCA@@?lLB|j@w CʌCmCʌCXBʌCB*BKLv?  C+CA@@?wJ C5T@9BCCBѐCCѐCAѐC.w?xBCA@@?JC@LBB1B%BfC&B؍5B&B{x? DBQbBA@@?(Bo"@mB:B[B:BB:BBiA:Bq?bB;BA@@?2˓Bv8@cOBƚ[CAOB-~[CB-~[CsaA-~[C'c?NBo[CA@@?Bj@EB|]C↥B|]C/LB|]C6A|]Cu?zB+]CA@@sB4 AůA8 DO"A8C?@@?ޜCA+Cq:CC΢C޲C΢CgBEC[A}?CC@@@?MCY@C7:CC93CSkC93CXBڳC{?jCq:3C@@@@?BCA @UCCHCbCL2CbC女A Cx?QCD\C@@@rQC/@TdxCêCejCLC>.CLCrB2C_Lz?+rCC@@@?rDKZ@l>3DzCD@zC D@zCMB8B+-?DEzC@@@?C'@CBϢCªBrDªB{\CªBr}?gƬCB@@@?PC@?HC;iCBCԋ[CICӋ[Ce@̋[C.s?@EC+_CA@@?Cb~@SC7VC;pC~.WCC~.WCAC~.WC '{?D˂CVCA@@?CKY@=v{CyC CUkCyCUkC6;AXkC,T|?؀C0C A@@?C!@@mCbBCX&]B[7CX&]B?&]Bb|?FWwC^B0A@@?eCvN@_CBeCLBNlfCLBUBSC|?nCB@A@@?S}C(7/@MC̱CJKCлCCлC;BлC>{?]MCņCPA@@?>-Ci4@vCIGCOmCf;CBf;CCBz? qC"C`A@@?C?@QC&CC`&C'C`&CB`&Cªv?rC$CpA@@?>Ae$AHA4CA4C\A?8A~?X!>lA;CA@@?/B@>I C띱CvQCĝC BĝCSB;/C2ix?cC CA@@?;C j@uCf~@ C]@ keC[@BY@9{?GC @A@@?b{Bz@R:BWCoBٚCLBٚCBCe?{ęBCA@@T[BAUxBCߟtBC|AC9ACuEW??xBCA@@?AC@@A@?xeC`s@l,B]{vC%CzhC\CzhCo34CzhC/v?jLC1akC@A@?MCsQ@MCmAcCܪA*oCܪA#Γ@[IC[`}?kOC>A@A@?яD<@]DpC8EC@NyCC?NyCBKB>NyC|?o_C>uCAA@?CS@ pC"BuCbB]CbBBؘCI~?(CCNBEBOB6s?aCOB0AA@?Cr@]C:yBCB(CB-9CC~?CC}B@AA@?DB?A_CkCBCw{CGBC DCCjQ?qC C5 CPAA@?iCu@S0C NC!{CMCY'CMCG:BMC:m|?yCvMC`AA@? CjNk@BFPU?HgBwGCAA@?sCFT@:2BV.CM"BH.C¹1CH.CndBH.CMz?_B@.CAA@?/wC6P@NC,CCa:CbCa:CBtCS}?郊CPCAA@?vo#CY@إ*C!k\CV%C'k\CbC'k\C@!B|?*{+C\CAA@?YCx?|~C+B@A@?NC@1C]>CCJCCODJCCBJCCN2~?GCD BC@@A@? yC(@c_CClCBxCB2AB5Jy?/cCB@A@?C0>l@#Co?BCŮBuCŮBE AkCB{?CCB@A@?e6HD0As[GDCEJDCDDCiA B9?AKDxׂC@A@?pCc@CCCI>CCI>CoB|Cx1~?&CC@A@?CҭJ@.^C/CbCCuACCɔIBC#{?~^C66CAA@?KC'@CBBC|B) D|B+C|B~?kCBAA@?C@@.CB)CBPCBzlAB!3|?,CCB AA@?t Cd$@TCC` BkFC 1BUbB 1B}:CnC`CKu?XEC0B0AA@?BR@hC BڙCܩB3 BܩBA'wC9s?YuC*B@AA@?.2BOA'B]՟COBC)A C޴B CH>?BBSCPAA@?C`$T@BC!BC;O CCQACIs?vNB7C`AA@?NRCpKP@t8CJ/CG2Cr/C&jCr/C]Br/CG{?d4C0CpAA@?OACCQ@5YC/-PCuC$-PCgyC$-PCFB$-PC{?[COCAA@?$?CNP@|Bא!ABo!A56+Cp!AkBp!A!u?VBtnAAA@?}CM=@L(CnB7C6ǚBkC6ǚB9B DB>Bط BPCPl?BSABAA@?-!GC5ha@G)Cp/C0|*Cs/C/^Cs/CPBs/C)|?m)Cw;CAA@?(C8U@Q(CC(Co{CX$Cp{C]U@C|?í'CqCAA@?ZBuA^BAfCC&7C¼CAy'C#Cy'CjV?10C8C@ A@?a'C,@^CaC:CLC^BLCNsB.BŁn?FCC@@ A@?!C6K@dCb~ICsnCDPC!CDPC<@A@z?`@C6{NC@ A@D5@D@D@* A D>* A49B3* A~?0D@@ A@?YwCE@CEBq)CBkSCB@DwC%{?CqUB@ A@?B@BC B CkB CB C?^?BBC@ A@?E;B`i@߱BDBXBaB7 BaBBlC]i?BGBA A@?!C!j@)C`oC%CPC)CPC|ABBw|?vCCA A@?BY'@C&ARCPA_BPAدBjKCl?CLA A A@?K]Cu]6@K C-C>2 C-CC-CеA-CMv?mFC.C0A A@?1IBABvC,BvC\ B%UBB%UB׼?,BzC@A A@?i6CXN@-C>yCiC9+C5C9+Ct>ArVCu?Cy7CPA A@?nB3@HBVCBVC6>BVCjBVCpg?BYC`A A@?HBV-C\BqC3\y?Cc-CA A@?_|B@lBpͯCy[BdͯCKBdͯC!Bƚ+Cic?JBCA A@?fC%j@vOBZu@܎B4@) C5@A:@&py?%Ba@A A@?AyAvBӢC#BԢCp8ACZiaBCNW?>B CA A@?%B)8AABTAB=pABlACv>ABA A@?23B1AV>B2eBU3B7eBg B6eBAumCyd? =BeBA A@?FB/@BzBB}B{B}Bg8`@C5v?]B?B0A@xC9ARCB_CBȠDB2>CB?XQCB?0A@?C?:VC|C܃jClȫCBlȫC+*Cא#C1u?h`Co֨C@0A@?0Cc@jqCg&CumCCΙCCXBCz?xCC@@0A@?'B?Bn\CCMCYFBMCDB]AQh?!BtRC@0A@?+YA)@GA A+ BK(CίA%C[B%Ct>RtA`C@0A@?UC72@N!C8B&C$B8B$BX/"B C2w?"C_B@0A@?qC+4@x2CC գCW}CCW}CxAZ}C0}?r+C?C@0A@?Dkm@5VC NBYC`QBs D`QBTB_QB~?C PBA0A@?C^@CD?'C³C9C³CaB³C%~?_CȳCA0A@?BƼ*@ CB CDBBDBaB~}C1s?CB A0A@?CO@C'CsB e"CsBCsBAP#BA0A@?_Bo@AfCA3fCwFB3fC6ۜB3fCO?\A.gCA0A@?DAAH-AA AA#A @:BAzPAA0A@?۪B G@^B2CB2CÅB2CT@e.Cou?B<,CA0A@?ՑAA BueCUBfeC>wA]DBJFB]DB>W BAdCA0A@?-B3AfAwPC8AwPC}BwPCÄAwPCLB+?APC@A@?XCs@QBC4C*C4C|C4C.B4C?0C4C?@A@?Cl@CۯBC "BC "BL!B\Ct~?0C B@@A@NCjĮ@fCA+CӋC˘-C|EVC˘-CTBf̰C?}?oC,C@@@A@?rC9X@ C=CGBHCGB2AӽC3}?9CˠB@@A@?fC dF@5CNcCC CC C=2C Cw?lCcC@@A@?5Coj@nCE.C[CEE+CJHCDE+C$ABE+C_}? Cg,C@@A@? ՌCY@=]CC TCڠCVCڠCBڠCz?@UCC@@A@?]lCZ4@tCBx9qCBR_CB/AC{?pCBA@A@iuCN@:CyCMCCPCC~mBr! C|?7CΟCA@A@?z^C7I@+CC CtCi0CtCbBѩBK|?։CfC A@A@?cA BARB(AFB@Aj2TBB@0A@A@?BҧL@,C(C)C(C4#B(C#CQ"CYw?)x*C C@A@A@?TCO@|v4C2EBF/C 4EBxB 4EB)|BMeCTy?N0C6IBPA@A@?CjY@sBnCոB nC&C nCRB nC\w?BoC`A@A@? HB]@@BרB56:BبBAبBpA16CC?{FBKBpA@A@?LCeH@tBC&+CjC+C}C+CiC+CDz?C*+CA@A@?jBU`@~*C2A@ OCBOC>ſ>/"A-|AA@A@?~%JBAB4%BM1BA%B #BA%B*?V%B'hK?vB%BA@A@?3B7|5AgB?AvB?A??C{B?C|F?nkBB?AA@A@?5JB(G AnLBdCABcC8 0BcCrԍ@fCi?MBeCA@A@?BC>B?B>B#Y{?v:lCEB@PA@?]@CpnAC;BEoCDB]CDBd@B6C^}? CB@@PA@?)C%v@BvxCJT$CjrCq&C`Cq&C,Bq&Cj{?WrC%&C@PA@?J)B׸k@P(BC/BCP{#AݢCqABݢC>|BuC@PA@?Cc@fCy|BsPCBCB5BB4+~?CPC^C=PClDC=PC:BC%C0A`A@?eFCu@#CA$@uK CL$@%gCL$@ BL$@|?\ CmK@@A`A@?̓Bu@_BUBlBUBr BUBrNBuiCCj?dBUBPA`A@?Cs,CCs,CCs,C@v,CG|?C; ,CA`A@?^B?@eM{B7B19jB7BLC7Bs{B7B2Yy?y{B]+7BA`A@?@ BJ@}BRA*BAAB@Aw[B?Abz?GBApA@?[C@TCCNCC`hCCAC?RCC?pA@?OCn^@SC~$C8B*$CȏB*$C?*$C>Es?B%C@pA@cC@kCPrCxCPtCCPtCiBPtC|?XC:C@@pA@?cȚC>@dԆC1B7C3BC4BB4B/}?C-B@pA@?>Cw@~y=CA6CA7;CABƢ@$ACdC>-mC>6AY>o|?-mC\CApA@?8BLh@.OBTHCK7JB*HCB*HC EB*HCj`?KBC ApA@?[B>=@u^Bi6CYBvi6C$Cvi6CBvi6Czn?]B$ 5C0ApA@?KyC_@QC*:C=C:C B:CY0B<@ z?LCB9C@ApA@?BDw@HBBBڸB1VB׸BNPB7YCtr?NB̂BPApA@?F%Cye@;"CKe@ CPe@{AI7C0q{?=%Cl@pApA@?jB}@#CB&CeDBCX;BC` @BCQ?L?B]CApA@?ArB8A^iBlCeChBlC Q@0$CauB0$CJ@?,gBCApA@?PAB(AD9>B,BE>B,B;wA'CeB'C*?>BBApA@?B@B4mC|B4mCB4mCQ,@sdBx?OBKmCApA@?HAf1ABVCy+BVCK@VC B B;?KB(VCApA@?v]BABdCH8BdC4BdCABq?1BYCA@?;BJ@.B4C¨B4CVB4C3A7Ct?BB4C?A@?#xvC@geC [BL_C*VYB(C(VYBJBVYB2|?iCZSB@A@?PCGQ@-dC~VB]CH>WB]=CG>WBijBiC6{?bCZB@@A@?B P@rBBB۞BCڞBaBڞBjq?BB@A@?GB`6!@B`*BPB-*B%+B/*B A˴^CW8]?cB>O=B@A@?0KC]@,C%9C`}(C%9CiQfC%9C%PwB%9C:{?0,C'9C@A@?A.@GZ?A'B 9A+B@CSAoJB@A@? #C'ō@{mC}AXgC1~AóB1~A(w CƯRC?,|?^mC!A@A@eBb@BC:|A8C0AA@?s(CUC@C%uCUB#uCNC#uC]B#uC{?C$uC@AA@?AAA(^hA3BeA#BA C=iA CL>cArBPAA@?A?]AtlB*WCCnB*WChwB BUKB B ?vmBMWC`AA@? BF@BmjC{BijC1CijCXAijCWx?BhjCpAA@?v8Cb@PCqC(CsCLXCsC7BrC|?"CCAA@? 'Bk AAUBCͿBC]>BC+WBBC\?zBeCAA@?BAr@CnrCCnrCBnrC>B{B5{?jCcrCAA@?B@"@BCjCBC|BCqJA 3C&sw?솭B?CAA@?;BhziAkBCWBCBCv<0BCr?:}kB.CA@?1B@51B6~BĹ6aCĹ6zbBù6Y?3OBݱ6?A@?*n|CF@T_CDLCNJCDLCqXBDLCQ}?XcCL9C@A@?`Br@w6XB8CàSBC BCOe)BCd?TBC@@A@?!Buk@NB0|C&B{C׀A{CX&A.C]7?BC@A@?C+}@ңCABCBUCBAB;{?nCB@A@?(6Cs@&C)&A!C&A-]FC&A,B&AR(|?E%CA@A@?$)CI7@\dCɱC [CɱC@BɱC#BI/Cٟ|?*eC䬱C@A@?Cwdž@qCc>C4eCPCCPC!BPC}?|qCpCAA@?{=$CQ@ CB1 CBV%B'O@#t?B‡C9BA‡CBA‡CBA‡CwTj?@?BuC AA@?-$Ca6@m Ca CgCa C;Ca C-UBa C`{?) C= C0AA@?EB M@B_BS(B_BB_BtA_B,iv?BB@AA@?B@ JB CYKBCqBCBAC24a?IBCPAA@?B$b@mBPynB*B9pBOOB;pB&A pC= v?'BpB`AA@?͟A A`!B2ZB!BYB^oA,yCtB,yC>I!BHBpAA@?-GB@DoBMhiCiBNhiCBNhiC)ANhiCg?boBniCAA@?cBF@"BRC BRCOBRC{9BDB@y?BCAA@?:BA6B "BjB"B# A"BGB<\Ce?܀B!BAA@Al0A;AK#CDA@#CA@#Co?A#C|>:ACA@?BjY@WBBOBBbCBٺBB}?1TBB?A@?-MB3@Bm0C:Bm0C*Bm0C;:@m0CJv?WB0C@A@?6C>sAaCХ&CiXCf&CGCf&C$bCf&CB}?ZbCz&C@@A@??BDܩ@nIB>/CjBn/C:Cn/C4,Bn/CSs?oBM.C@A@?6|lBjm@Bl C|BC>HAC UbBB`?BʦBC@A@BCW$CCBC&AhQcBAA@?sB0'AwUBPCABPC@PC.)BAW?UB=PCAA@? AAas"A"w`CA"w`C ?"w`C@1B!>H"Ax`CA@WCJ@ŸB$50B5HC5yC5?EPBC5?A@?BRbB!k@jRBVC.KBTVCj,BUVC*@L B>T?eWB}WC@A@?sBC(S6AP8C@`0C @NC @A @A|?7C.U@@@A@?0@B@3C"A Cu\ABu\AAKC׶z?CWRA@A@?&CtV@ CC8BCCCtQ@Cҵz?CC@A@?/Bb@1rC~BkC~BKB~BACzy?`C7B@A@?/rBW@ikBwBnsgBwBy9BwB7AzCZ\?YgBB@A@?L2Cn@xCGBPCGB3S@CGBBGBJp{?"^C{GBAA@BAO@yCМBWCќBA>BќBwBBH4CBx?KCbBAA@?DPCHrZ@ԩUCtnC$WCnCECnC[A+kBz}?)dUCZnC AA@?\B< AAeCDIA$VeCB@#VeCfAXEB ?*AIeC0AA@?lB G@MB\CLB\C%B\CNABr B5w?d-B'\C@AA@?RBg@~BByBB7-BB@B\t?oBBPAA@?>B~@ZBI#pBWBR#pB?~BP#pBpVBpCw? BXEpB`AA@?CB@qB4ǢCzfB8ǢC̨~B8ǢC@;ǢCp?:qBӢCpAA@?AA:B7lC;A>lCqm@ 6CtB 6CG?BCAA@?aB@vBd@nBaBW@nBBY@nBk!BY@nB^x?TvB7nBA@?!%CbS@6wBCBC7WCC&sBC?[BC?A@?;LoBc@ PB%IfBMBHfB&ABHfB=K@4mCmU?,OB.eB@A@?^=B!u@B1B,B)B2?CBC4_?ۨBPuB@@A@?B@]9sBC&#rB2CKuB3Cw;@3C`?rBƇC@A@?ȅB0@z:B#BB#BC#BUnA#Bku?y)B!B@A@? C@8CH BCs BR Cs Bw*Au B=Ny?]DCB@A@?iAAue0B\C1B٪\C_A_"B(B_"BO>0B]C@A@?#;BK@7KBh1CKBٱ1CnAٱ1CAزCP?!1JB2CAA@?B2N@8-B-?C/BACBBACm9BAC_?O/BBCAA@?Ca._@H2C3|C|2C{C/^B{CxB2Cu|?v2CiwC AA@?%CbD@!C5CC5C#7C5CB5C|?sC5C0AA@?kB!I@>B)C B)CvB)C˒A)Cq/w?BdC@AA@?WBf@zB+CB+CȤB+C`@C:v?B,CPAA@?9Bc@sBaRBfBkRBAkRBKACo?&.tBwB`AA@?\B5@\B9;CPDB6;CTB6;CAf@ y?Bo;CA@?FCP)TARKC4CgMC4Cw@C4CNA&7?tKC4C?A@?C׵@BH+"CB2,"C/C2,"C?B1,"C%,{?B6"C@A@?cA'@&TA(CAېCCAAoBtAAoBp>tA8C@@A@?B@TB%iB9-BiBBiBrL@iBu?B:iB@A@? 8BAY} B=3Cue B3C]A3C@ԳC*? B3C@A@?~qBaE@FaBzBlaBB DBB @oC_?VmaBB@A@gABZ=@B8CB.lB/B*A/BBKCd?BB@A@m B@Y\BgcC \B_cC.J5A_cC/B|BT?\BECAA@?oB@^BÞC~BʞCFBB AA@?:B0T@B aCBaC_CaChAaC^z?%BaC0AA@?BM@+ CNfBCOfBNBPfB NBC"}?ZC>jB@AA@?BB@B CUB C)}B C~@CWu?B CPAA@?O5B,@v BCBmC'4BmC AmCd?+ B!CA@?B@BCABCB-BCBB?zBC?A@?KBq@%9B@C㳃B?CL(A?CS%BB/c?6BC@A@?ƒB%]@BBlBBBLBByA{C l?BB@@A@?kaB@H2B.CS2B.C:QB.C @.C[?2B.C@A@?gB@ƂB7HCB2HCfB2HCA`BQy?B2C@A@?%B!Ai<`BB>^BB^AB?&B9CɰV?S`BB@A@?8AM@A\C,A\CnAJ BM?BJ BcQ>cAc0\C@A@?]B3@HUBۛBdMBۛBBۛBXBۛB_h? VBpBAA@?.B!o@EB(HCBHCTBHCbLB$CeTw?BtCAA@?U8hB*@&B(CgoA$C*IB$CB$C8c?B% C AA@އBx@ %B/BB/BqB/BvbA C߆z?oEBFB0AA@?1,AB'A}s$BȜCBǜClAǜCZ%ACO?$B-CA@?眷B{@BIBuBشB4C?+B?A@?RqBm@9uBCrBCV)BC9BcBg+u?BC@A@?_C@qCrC(dCrCI~BrC"(ACBy?CoC@@A@BA|@HBٷCE@BᷬCžAo%C-Bo%CJ-?.IBdԬC@A@?&BA@}BH DABG DA]BH DA@Z DAcs?~|B DA@A@WhBP=@BwA֧BYAZ{BYAQKBGCsny?KBAA@A@?xTB͜@AjCoAsCTC@L>TCAL>TCݚAL>TC;> AuSC?A@?B:@6BTmC4BXmCbBXmCgA`Bw?綖B~C@A@?MCRb@6Cg%C Cg%C#mCg%C9Ag%CL~?|C>a%C@@A@?&BCC?UCC0A@?|BHCzxb@v CBRCBBBPeCC?jCB@A@?OBb.A(.BBQAB@B(JzAC9t>*ABPA@?PC/@,BCzBC\CCPCCw?@}BC`A@? C@vCB pCB֥CBԯBB?vCBpA@?C@TՠCC:fCCCCBC?cCCA@?^C @[FCC#ACCK|CCXkBC?zGCCA@?{B0@nrBBmBBJBBpBBF~?S`rBBA@?B"mAvACLGACX@C6ABd?BCA@?:oBn(AjfkBB_BB˅BBp/ABdr?6djBBA@?A٣]AXf@ Cc@ C?3Bh@3BR#=ľh@ CA@?˪3Bp^zABC'BCp=@CPBBgfy?/BCA@?+Bx"@BC]CCBC\AB?|BCA@? 6HB|ݔAABNAB9BBм@B0e?dABA@?7XA:SA˞)BB!BB\&ACGBCLA?5)BB@?@?/̇CVh@CJtCxCCHCC0BCZ{? |CiC@?@?CVM @ B.``Cr B-C-C-CyQB-C0\?ܣB'C@?@?iscC/@ECyCl[CK~C&aCK~CuL@K~C=z?^ eC3~C@?@?/6LC%@E[CזCQ=CMCnOCMCZAMCmx?DC|9CA?@?C@gKCN5dBCMNB|CLNBACNB|? C_SBA?@?=Ce@CBCBCB?Bo}?[CB A?@?6CԳU@CPCʹoCCp4CC[BC$ y?wCC0A?@?bC&@ݔCl$BMFC(B*}C(BEBJ$CL|?3͔C$B@A?@?`C?<@MJC!C-hCCOCC]A5Cz?ZCCPA?@?ezC4@;!CGq6CI.C7CJ C7CJ C7C,y?q,C7C`A?@?CK@"CXCTCjCCjC*3CjCK ~?{CdשCpA?@?ՉB@RB9BKBD8Bu)BD8B A7bC]-?:VB5BA?@?YCb@C[CCw[C~ܟCw[C膽AֹB~?ڱC~[CA?@?BXp{@'BBbBBCBmDBB[s?BBA?@?2B>@|'BTBmpBrTB{BpTB6BSA,$`BR+yCQPBX+yC|BX+yC eAVBe?j_BCyC@@@?LC @CqCHC6 CDC6 C_Â@ICLvx?4SC C@@@?ܳB@ 1CكLB^B(yB{B(yB@)yBg?¸BǪB@@@?CN@>CqLB5C@LB2C?LB%&B:LBB}?CCKB@@@?N1CN@CiB+CGB`6CGBlCGB}?ՃC!BA@@?B@BBzaCCعvCABعvC.!BsBjn?ɇBQsCA@@?tC7ц@ŢC>A)CӬxAɌaC׬xAڌB͊CCr{?kqC(jA A@@?C,@C GCoC5IC)C5ICs"C5IC |?TXCfHC0A@@?0B |?Cx}C@@@@?&B@h(CNB*NC.9Bi\B,9BEB bbCg?CF%B@@@@?uCf|@CDB}Cp~@wB9aCBC|BCF2BPCZ?WBCPA@@@?WC@C6LCgCKCKDKC9 CKC~?iCۍKC`A@@@?[]B\@; C{C*Cj_ChBj_C!B}Bbo?.UCCCpA@@@?kύBUz@B/+CB9bCޯA9bCBC_?HB6CA@@@?CP@`B1CCB 1CH2C 1CFkaB 1Cv?BCA@@@?7C9]@5CAv1CiA7ChAA@dA|?1CXAA@@@?i]B[@B@Ck9BCX%AC`~BudCb?7B]CA@@@?-B@aBC4BOC^67BOC3BCbl?|jB/CA@@@?~Cx@BCzBCKCCBCut?:?BҀCA@@@?tfOBA-oB[A qBM_AZ5AM_ATBAC)Y?VoB%ddAA@@@?ҧBz}@Bڴ]CT Bش]CaCش]C~Bش]Cx?B]CA@@@?SA$@ASs@BWmCR8BWmC/@&^eBLVB(^eB$?E@B mCA@@@?״Ax&AÆ BB%ABRK[@zCBG BzC[?{ BB?@@?C ACTB CCBJCCBBCB|?ЗCB@@@? C]@CĜ}CCCaCC\BC|? C8C@@@@?Cl@C>FCaCXCZCXCnlBXC{|?AECwZC@@@?:BC0I@C`݄BB%Ct_BORCt_BZ34Bs_Bav?W&C.YB@@@?NC߆@=C@qXC>XjHC>F"C_4C>}?0%CNC_>@@@?p[KCC@xpC֠CAC'CHIC'CcA'CMx?DIC,C@@@?iiC8 q@COCPC{XCTEC{XCG{B8Bk\{?sCUVCA@@?n}C/4@L}CABiC*XBaC*XB4B CQz?WDCQBA@@?G%C@D}CKCCCVCCBC0}?CC C A@@?[DC|i'@bMC~BCBhebCBBBܝu?,CwB0A@@?CT@#C;@uCAJ@"C@J@[.AT 9C~?DCZx@@A@@?bnBz@dBd٦CjB?C/sJB?CIB~xC߼T?uXBvCPA@@sFCC@7Cy>@o7CD.@gBE.@ױBs:Cw?9C>M@`A@@?0RC9w@W CMZCQ|CQZC5!CQZC7BGEB{?fC[CpA@@?oCw@= qCQAC rkCACnCAC`@AC}?=nC=CA@@?`J9CLmG@<CiC ChCc]ChCb¢BhC^y?CCA@@?KBX5s@BCUBC`BCPHACDx?xBCA@@?BК@0&B7JlCH-yBkC>BkC4FBkC}h?eWBiCA@@?SB<@BB}BBʏBB?"BCw?B|BA@@TwB&p@UbBJCWbBJC9BJC i!AE%C U?2eBCA@@$!Ctg@D"CaȨAV$"C A9CAN@HC|?yp!CAA@@?JB !(A?B/CB/C,B/CA/CVB?OBA~/CA@@?F$C@HeBPYCBMYCZCMYC2'$BLYCCz?(BՐYCA@@?%B^DABW?CBX?C|A5AcB5Awl?>Bb?C?@@'C=A/C0@ vCC(PCCYBCv{?LCC@@@<ñBLL@m>CViCdBlC7͐BlC^sAlCy:?GBmC@@@@?JCsN)@:C{)C\,CTCہ[CTCT Bn? A@@?sBv5@BIBCBئBBH>B~C.r?i CKB0A@@?B_@[OcBH@+Bj{?JfBj{?Bh{?"?"Bi@@A@@?oCaI@>C89tCQCpsCHU=CpsCBBaBɉ{?n1CsCPA@@?<`C];@&CދCC1֋C *1C1֋C,XBXBI|?߆C`C`A@@?ACJ|@h`5CC0CCHCC8ACx?:p=CCpA@@?ژB}@ZBCBC3>ACSBC2n?̰BqCA@@? B$@B2B1B72BB72BZ@22B3i?לBBA@@?_B;w@NuBCLB\CWB\C A\CDu?sBd CA@@?Bjm@ByBgBcSBBcSBh @ԍCNZq?B+BA@@?B|@BUCbBsUCIBsUCr@uUCXx?qBCA@@?B\@S]CeC CeCBeC (B2CmQw?ޘC {CA@@?Lb%BOX;A9 B$CKBFC㦈?ڍ2CnBڍ2CO?GBICA@@?fCEۊ@9 B^B÷&AhB@Bk@=Ah@btUB=:Cm?B@A@@QA"UCA;AѹBAѹB#\ AѹBJAGtC?fA-̹B?@@?C_@~C CN?CCW@BC\BoBku?H~NCC@@@?W<C:@VCM~SC 5ClCBlCBB%bB/u?f;CZNoC@@@@?fC ^@TPCSC _3CCdžCC`BC$y?>ChC@@@?WC,@{(DzCC`C`D`C A`C~?ٟD?%C@@@?$9DAdWDȖCp4DPC >DPC[BPCv?=D&C@@@?~sC2v@ C̍CGCvC`CvC4BvC)z?52CC˭C@@@?y~jD%Aor_DNcC^D hC\uD hC3B!hCy?XaD fgCA@@?CkB@Ck_CCjC}bCjCBjC}?CfCA@@?[xC21@VC_?ȦCe?Ce?C1C4CK|?TC7? A@@?1C-@ CǦ CiCCQCCCH=BCw?;C9C0A@@?qsCc@]CJmC3VCmC-CmC*;BmC+Qy?!VC)mC@A@@?}Br@bBCW[BSC;BSC}ACo{d?:lB&CPA@@?cBP@y.BB)B-BF}B-BᝦA-BS5?f:B4B`A@@?ȏ'Cя\@(C^)Cا#CB)C CB)C5@ͮCw?+C,*CpA@@?ZLB @B{+CEBi+C2ABCB=oa?>BCA@@?@JBVAB8CB8C[Aa@^Ba@O?BBj8CA@@?ӤB-@}4B&C.BŶ&CBŶ&CW BŶ&C__? +8Bt%CA@@GA`'A!B%NC$BQMCǍA/@B͌A>\"B4LCA@@?|B@sBBCqBKCL-AKCWC}BB}BRy?BBA@@?(B5@ABCBC{@CBXdCh?BCA@@?rBR@ݺBMpCXBTpCBTpC@TpC{?ZBL qC?@@FCȍ?ZC CC~CokC~CឯB~CPtv?uCd+C@@@?C%AGCۂCFCzCCzC' BzC|?C.zC@@@@?oB?o\jB;oCBwB&]?!BCyB@@@?mjC @CoBP CS;BCT;Be )AuCu}?CB@@@?)GlCA@UhC!XC3CB\C$CA\CCI Bx?JCeZCA@@?5CEV@̮C{BC BC BK2@pB.}?ѮC_BA@@?Bq@SB#CB!CHA!CpBCsa?Btt"C A@@?C3Q@CCCC"tCCC$'$C}?_#CIC0A@@?P]B_T@ C,CoCߜCqBߜCBDCxm?^CXC@A@@?2CC@.8C&bC~4CDbCiBDbCqWB 8Bʹx?s4CԿ`CPA@@??C@e[@Pd_C&QCVC'QC C'QCռYB:Aadz?Q_CGQC`A@@?2C'K@[HUCؿAkPCApeBAe5BҕLCz?\SC]ApA@@?CEK@B?AjBcA+CeA\VBcAp?UBAA@@?B @BH`CbUB[H`C*nB[H`C c@aH`Ctu?B*qaCA@@?5XKCc@j58CwCj0C$yC `C$yC@B%yCj|?7CʼnCA@@?0Z/CoJ@?)C9C.#CG9C6CG9CAG9Cz|?5)C:CA@@?HvCLD@3CyCp1CyCCyCfCyC>}?3CuCA@@57AAiAQC AŋCAB\ABU R>"AvCA@@B*c@B 0CB0CwC0CZB0CRx?B06CA@@{AT7A@BcCBxBcCAT?B[BS?BQ(-?B5dCA@@?ØoB ABsCBrCGArCǣBBw?B`C@A@zCQ@ bCYC3CםdC=8CvCi0CCi0CVB4C~?Y;C2C@A@?=DUξ@LCʂCSCzC%TDzCBzCD~?CbC@A@tCQ@QTC(VBfC"VBC"VBotSC"VBy?7jcCTVB@A@C' @CCdlC'CeC'CBLZ%C}?CCAA@?ۃ-C6@= C߲aC/CB^C/5CB^CSAB^Cu?.6C_CAA@?ACSd@`CCR C크C*CCZCCu?C1C0AA@?C1–@YCCCCxCCmsAa/C}?C; C@AA@?B{@tBrf@Ba3@?Be3@B9Cm?B2@PAA@?֞IBxBj|?{`ICBpAA@?rC@~ACȇnCC‡nC :YC‡nCL;BjB ~?CqnCAA@?OCF@)NCLCvICLC!QCLC=ALCg}?PCkLCAA@?lBak@CCq^BC@J4CBe5CB4lCB`t]BB|?4CBAA@?EB4b@B?C B>Cx|B>C'(BpCzu?'B>CAA@?KBN@,dBkC3dcBkCZpBkC@BkC85q?cBVVCAA@?BU@4BfCBfCf4(BfCKBRKBOo?uBgCAA@?8@B p+ABbC{yBbCԖAbCB|R8B`k?=)BbC?A@?D93A6*C$'C/wCCtDCBC~?CC@A@?:!C/%@݇B24C~ C8C?C8Cn2A8Czn?B*7C@@A@?>CP.@CYBC-B C-BR;Aq C{??CnjB@A@?!D@@-DO4BG~D/B$D/B!A/B~?)#D@1B@A@?oϯCj@NxCC C~CC~CP-C~C{?C C@A@? D(#@K^C BsCBDBjBBӬ~?CVB@A@?D @D _Cm^ D`Z\C}0D`Z\CzC`Z\CI@? cD"[]CAA@?|C ,@-s*C08bBCܝRB#BڝRBf}BxhC҈t?:CXBAA@?\5Cv@CeCgCCCC .?CA|?CC AA@?BC@HBLqC糘B\/uCGC\/uCۍB\/uCRed?+BuC0AA@?{ Bv ACBCxBycB6ZCKC6ZC|K?CB@AA@?AAǍBQhC}B@CWOBfB(BfB<3>qBCPAA@?]bB@>B@>c@@>^Pw?@BCAA@?%zB@ zBOCzB;OCNCB;OCE\AՉAd?zB(OCAA@?:B%AAٛBABABGABM ?fİA@ыBAA@?xBAUBGCSLBGCO}BGCgBAGC`k?VB@GCAA@?+B͚KANnBrCUBgCAgC#A4ϣCc? oBvC? A@?1hBnV@$'BB2B77AeA}s?C6B}s?C ?>bBGۙA@ A@?fD AeDcCcDʙaC%DʙaC?aC~?>D*4bC@@ A@?Bb#B3P@ϑB2BnWBP{BArCaBrC >vdB"B@ A@?#C[@]CUkBCx cBCy cBBlCe|?C5gB@ A@?Ce@GCݳ[CC]UC>zC]UCp&CUtBu}?@C XC@ A@?DDf@2C"CCTCCDCNCC~?wCYC@ A@?~?LCC@0A@?uXBW @gC?CC^CqB^CsfB C7ip?"CS$C@0A@?C$@[C^lCY<~?CZlCA0A@?BkVAAR}BBCAPB,A:hCDB9hCv^>z"ARBA0A@?hLC]@!B-sC}jBCrCQCCrCb8CCrCVv?B?oC A0A@?IC @$C CC C &C CccC=ۮ C}?OCb C0A0A@?B1E@,4BݭCXuBgC2BgClR@$(Ctq?BYC@A0A@?@lBa@3B}ZBB{ZB B{ZB'AjCMt?hBUBPA0A@?BBH@sCA-C]AB\AôMBHC`x?bCzA`A0A@?B@FdB6AX_BA)CA+MBAo?~ mBApA0A@?s8C8@o)BgCB`CĦC`CC`Cx?B]CA0A@?5Ca `@@CdCx 9CdCT-CdC=5A C|?eBCeCA0A@?*;Chb@ּ CQ^Cr CY^Cx#CX^C3AW^CYz?|e CzCA0A@?DZB@BqCףBqC_qAqC[;BWwBif?TBaqCA0A@?w+ChX@6C~Co7CyC*ByCbBJB|?K7CXuCA0A@?wsBE܎@B,NASB-,NAB/,NAkAH,NAJx?~*BiLAA0A@?(3Bo%A 3Bl-BU+Bs-BAs-B=A] CS?Kb4BGBA0A@?6AiA0B\'QC+BW'QC<`A:AMSB:A#?^1BzQC@A@?C:AbCg9-6}C)5C)50B)5?3CL 6?@A@?=B$^@}B|ɩCBC: ]BC`A%CDV?IBܫC@@A@?-;B* @BXCBX܃CxSA[qBB\qB4I?NBjC@@@A@?CK@CwCRBzC%;7CzC#BzC6r?gB#XC@@A@?C ?@C BVCyBCzBEtABtb}?C+6B@@A@?6BM@sBĥC=7B֝CAA;'CB;'CЅ>pUKBMC@@A@?|)B5@;/TBCtBAАAbkXaoB@@@A@?pD*B@D)#CuDg#CMDg#Cn@g#C7?Dd#CA@A@?3WB[@]BrtC̛BچsCN]@܆sCvBc~B{I?T'BoCA@A@?JB4cM@YBMICqBܟICBܟIC BAÎg?B|HC A@A@?Bi@BڦBRBB|yBBABŜ!?KzB?B0A@A@?u~C`z@ݫvCBqC܌BGXC܌BBAڌBh}??#yCiB@A@A@?hPC$F@>:CdCo5C dCdC dCۙ@DC,CZ=C-Cx 8C-C#H@ B&|?ECJCpA@A@?oBaZH@fB4BBB2CBAK[BBs?B BA@A@?kA@SB'CFMB?'CWBɭCBɭCW>RBT(CA@A@?\Bu@BruCm8BguCVBguCBC#v?QBJCA@A@?mB^@VWBeTCWB:TC  C:TCVB:TCl?AWBPTCA@A@? Cv@ѵB ~BB~B\&C~BmB~B.y?B`ǯBA@A@?OB@BlYCBrYC7BsYCiMAB]w?ѬBYCA@A@?3B9@(BLxC2߆BLxC[DBLxCRJ>LxC v?#BoxCA@A@?BAo8ALA;4CA;4CA:A;4CP>Ao>#?3A94CPA@?BBXN@RBCB]qCCBAC[qTCC?ACB?PA@?IC)(A CCCCգC)YCգCשA5CY~?^hCcIC@PA@?a-CZh@!ACB?6OCAףBAȠBOCv? HC}A@@PA@?CCy@CZ4A,C]A7KC[A AJAwv?`%Ct.A@PA@?RnCܵ@^CKC;8CCѮCCvsAAtCp~? CC@PA@O#B@`B]BFIBCBBCBzACBpgm? BTޫB@PA@?:JC@[CٽB VCߌBRCߌB3ŸBߌBa|?VC{-B@PA@?aCd@tC3bCzC-bCAC-bC·dB:Bb|?$CaCAPA@ABr04@/C>tC (CkCNzBkCBC*s?.C=]CAPA@?߿iCҿd@GCSBFBChPBChPB&BhPB{?k?FClB APA@?/nB弜@sA=9CHNA9CA9C(A9C#>:A^JC0APA@?SwBi@BCE{BC=BC\B CTo?BwiC@APA@?pƭBR@BȆCbEB䆓CDB䆓C]/A䆓C o?$BTCPAPA@?@BAA>CzA >C:w? >CAP+A> FAf@C`APA@?.B4ABmCYBL^nCTx'??yiB;<B0yiBx>BnCpAPA@?nC/:r@zCICCICFCICrBIC~?CVCAPA@?-gB@pB+CдB +CRA +CwBV Cce?B1CAPA@?tA!AAsQB(AY&RBA@hCBhCI>AIUBAPA@?B@$BZ2CĦB}2C(B}2C @Bu?B2CAPA@?pA%ABC2BCDXAbBURBbB?B1CAPA@?AxA9 B\:C"BJ:C@(B7"B(Bq? BCAPA@?6 Bc:AATmCA`mChA`mCɛ@zB"?AC?`A@?fCS@C.CBCCW*CCCr+BCCt?ABrQC@`A@CCx@qXC|GCrVCYGCNCYGC,+DCYGC|?WCdHC@@`A@?fC}@Y1CBסC@%B{C?%BBwC5I}?ߏC&5B@`A@?}$CY0@pC9COCL9CzCL9CAL9C'}?C|9C@`A@?ɀC@sCADkCA7CAGBAÏ|?woCaxA@`A@?ACEY@lBC7 BسC2 CسCHCسCOjt?B C@`A@?B$@W:B_> 8BXvC=BXvC7BXvCL?IB˱CA`A@??C@C'CCVCCUC*BUCO? C= CA`A@?6ECj@+CVi^C@&CHi^Cj\CHi^CA9VBIi^Cz?d-C3^C A`A@UBC1@jn CWtC CFXtCBFXtCRPBBpyw? CuC0A`A@ C;!8@My)CC%CCBCmB.CW{?+CC@A`A@?.Bo@BmBA B3nB,B3nB.$@3nBVt?]BHBPA`A@?ܧBsc@Aq&B*AA&BkBA&BQgBA&B?ÓA&B`A`A@?B_@̊B3BBABFBAB"KBmCt?1BBpA`A@?}nC@wCЃ CdptCԃ C eCԃ CrmAAC}?wC` CA`A@VC4r@^CzÇCzC BzCvB C{?2CCA`A@?*@B#S@.BZBBqBbDAz܅CvBz܅Ch?%B}BA`A@?CB@?B`"CB`"CB`"ClA1[Cry?B^"CA`A@?xABFԣ@BtC9BtCBtC$A*$Bx?B>tCA`A@?ȸB,@mBABA`BA|{BaQCr{?!BzAA`A@?sB+{ AB^BH {BxBByBA~Bv?BeBpA@?:yC(@2CBBCB$SCBWBC?)kCB?pA@?bEBE?ٯBMC"BKMCBKMCPBXA{W?VBϜJC@pA@?okC^@0gC?jB_C0B1pC1BA4B{?1"iC(B@@pA@?uB:@uBC)iBCTCCBC]DX?FGlB4C@pA@?Cv@CaCC5C[C5CB5CM~?)CC@pA@?m C/@.C_OA(CmWABmWAT BvAC8w?/C?pA@pA@?պBB@ԣB72CΠB22CB22C--A22C\3k?MB'91C@pA@?d&kC@`aICcCrDCKcCߩCKcCBKcCr|?JC$dCApA@?CL"@aCn?C|CI?CcBI?CB#B(w?qQCCApA@?B*@AݍCACayBC!BC=!?>1AڛC ApA@?_ C.?@'FBQC5BCyCCACty?)BC0ApA@?(&C!@@ C%C;C C%B CQAzBx? CC@ApA@?0bC@YC{"CNC"CwqC"CqB"CZ|?DYCS"CPApA@?S {BW@ 1BbC,B bCӂB bCA bC+]?*4BƝC`ApA@?bhC@^@CZmCb@>CZmCgCZmCBZmCQ}?K@CcmCpApA@?BC^C@|%CƏC'CC*BCKB?Bx{?+%C7CApA@?,Bs@BB!DBB ؏BBkBB2*Q?MDB]BApA@?RA/A|AHC9AHCwBE>#B{ēAk#B2>'A~CApA@?VBT@,w^BCUB|CZB|CACW?!^B}ߝCApA@?(WC<w@xOC7CDC9C`iC9CWB8C?OCCApA@?_4AAA!OBPAOBb?OB8tAgCV>ANB@A@?[fBc@9B$DCB'CB'C֜(AOCHXk?SBC@@A@nOC@?39CC 6CCjbCC)1BC|??CC@A@? Cܱv@(C`BeT%C)BiB)B8~jB@Ck,y?O,C4B@A@?ֿCzW@C2RCEC RCߠC RCBB RC}?.CQC@A@?Bt4@DgBC8B»C%BûCòAûC%n?oBN¦C@A@FboCb@SYiC?kBRcC^kBIvC^kBǖAakB9}?MjCBAA@?B[ w@ǿpB(Q>kBkQ>sBkQ>?`kQ>b?]5uBCAA@?>NfB-Ն@BR(CB0(CA}A0(C?U}BaP0Cg?JBC AA@?HwOC!@5CIA-CzA"kCxA uBvAW|?. 6C+{A0AA@?B.Z@cB BB; B1&B9 BBVCsr?B) B@AA@?GCD6@BgA0(BgAx5CgAɘBgA.z?`B([APAA@?DBg@NB2BKBBNBBAB[?*JBB`AA@?%Bv0F@gBʘCB ʘCFB ʘC)AʘCRx?BfCpAA@?&UB,q@Z;BL`C9B\`C +B\`C'A[`Cx]4?E!B7`CAA@?vBxX@BpBBpBBBpBApBBUV?1BtBAA@B{n ABe.AHBe.AݥAZ>CBZ>C5J?xBD-AAA@?Bп@ENBpWCXEBmWCBmWC#{JBmWCq?MBVMCAA@? BZ@U^BdBDBmB[BmBG BmB"p?^^B1BA@?Cۇ@Db.CC(CCfBC((BB?_3CC?A@?#fC:@iCCuaCC>dCC#@C|?0hCVΘC@A@?TC@CBC gCXCCXCAZC}?ƑCؐC@@A@?sBb2@AEBeABFUBBAB)Z?^?A0ʷB@A@?GB7@QB ABVAGƈBWA B=C_q?`B:3A@A@?.B\@C$BAC0BCzRCCCACxw?8BC@A@?CtO@s?CbCO;CbC~BbCKoBB1Cn|?r?C`C@A@?wBV@buBDBmBB%BByAfC? e?[B4BAA@?qBu9@ђBFuCBuC CuCqpBuCAp?YBsCAA@?BA$>@Bn8BBjBBjBAjBs?BB AA@?=AQ#AABCB0AA@?CBQ@B?C4B?CGB?C@X1AESx?>B?C@AA@?5CnC@ֺCCCCsBCOBh`C*y?kCaCPAA@?޳B];w@|Bp1fC-BW1fCBW1fCNkfAW1fC@p?٘BeC`AA@?Z]BBj@v|B2:C;B-:C3@%@eB%@Bm?B:CpAA@?,(B AzA?Ac?&Af?{{@5C$Y'?A@AA@?tB@jB$AԘcB$AW, C$AEB$A`co?jBYAAA@?uB'K@ bBNƒC$XBJƒC6dlBJƒCH@JƒC l?bB.CAA@?NB~'AC'B}CB}C$A}C&%Ae BP?t'B%}CA@?8rB@eB*6jB)6B)6@)6D?B6?A@?CF@+C>pC'C!pCdC"pCA~rB|{?U,C.@pC@A@?@bC޿@PzCIC uCJCaLCJC1"B(B~?yCC@@A@?A.A$BaCL BaC;8A6B[=B6BL>BaC@A@?CCd@YCe>ǎCx>tqCx>j0B_&4C ~?C_>@A@?FB x@QBMzC KB`zCjA`zCACJ?TB¤C@A@?q%Cb@YCdCBdCFCdC3,BdCuy?pBcC@A@?wBŤ+@BB>CQwB.C߸B.CF,AIB˜r?JBCAA@?]Cφ@CUpC}CbpC?ϤCbpC BbpC$b~?[CqCAA@?B}-@EBB!?BB CBPBBAl?6DBB AA@?}AIA,%A ]C+A\C@ѹ,ChBѹ,C>vAA%ԯC0AA@?~BT@oQB[:CQB[:C5B[:CL^A[:Co?]Ba:C@AA@?%qB!Ə@3BktB>BtBAtBqOB01qCk?;BWptBPAA@?+B>@CKCCäCqBäC9ACy?RyCĤC`AA@?9Bp@ B/`BB1`BsB1`B[AsA CDv?BkBpAA@?KB]M@:BABQAuCRA BRA ku?ǡBAAA@?Bc@+B)>Be>#MBd>On@c4Cw?BS>AA@yB@QB$,C&_B",CҢB",C3A",C$w?lB,CAA@?Br=AuI4BNmCqx%BNmCANmC ZA7IdB?a? 4BmC?A@?B5I@QBsB BABoBAB A@Bn?BaB@A@?7By@vBbtB_8BtBt CtBaWBtB s?BR8ADB#t?άBFeC`AA@?tB2@(B5XCB5XC'TB5XCO,Am C\re?LB6ZCpAA@??Bف@B(9CpB(9CB(9C57A@+z?B.9CAA@?n Bnɑ@@BJ6C}BJ6C4BJ6C1]AJ6Cry?B=I6CAA@?51BM@\BP\#CUAH\#CBG\#CR|BG\#C.m?B>#CA@?9oBAF}B4CxB4CP?@4C.\BZ7Oe?cB4C?A@?CX@!BQCBaSC92CaSC"BaSCMv?B[C@A@?31C@+CiB CɲBkECɲB1BɲBq|?C B@@A@?BA>B&pC݅B&pCv@pBBBpB/U?[B pC@A@?(Clr@k$Ce. CC{. C27Cz. C Bz. C"-|?C C@A@?DB1@d>BC9BCYNAC\pBbm'Ci_? BC@A@?CZ@/LCAEICґA+uBӑA_)B;KC|?yLC&ѽA@A@? C8(D@uBYBA6]BAA{CAA}c7BAAVPw?BAAA@?91C'@w)@C_CAC_CvC_CwB|B|?@CsCAA@?Bl@{BZB4:BBB BBCv?4BB AA@?ݤBG@ $BpWC@BAЈCPAA@?DBeAXA4A5A4AE@4A`AFIC)>AMѪA`AA@?WlBм@BCŋBCh+BCEA_Bs?[BLCpAA@?tSBd"@߮B{C}B{CC/B{CBBu?BCA@?A0EAyACAC?BaAB> AC?A@?{C@ŀ!C>"C" CK"CCK"Cp5A%CC{? !Ct"C@A@?Bӣ@9"AC+@AC @C3oAB]>\A C@@A@?tCA/njCC%jCCoxCC4fAC$}?3SkCuC@A@?B+A'B2C'B2Cʨ@{^CEB{^C2i?'B2C@A@?Bj@B4B!BLBBMBMANBGfq?*ݞBYB@A@)-Ae~7AA9_CA6 _C@4,BB4,B=!>A~_C@A@? tB/!Q@%-BįCթBЯC4BЯC@IAB3+CR!v?;Bw֯CAA@?ˬBC@XfB˂CմBJ΂C SBJ΂C;A&9Bs?BςCAA@?IiB@BrCՏBrC BrC}BSCM4j?OBvnC AA@?(zA|A@AclBAclB?oCAoCH>AlB0AA@?SC3@CK CBQ C4CR CI@V Cyy? C C@AA@??Bo\@B:kBBo:kBԃCo:kB':Bm:kB?z?kBBKă@))B}Ń@bA|Ń@EA-8CW?h>B@A@?eBAdAd7B7}B7jA7|T?7B7?A@>(CqS@ CĀB~ CBgg=CB>BB{?4 CB@A@?,%C@|CB+C@BXZ=C@BXB@B_{{?uCAwB@@A@?-B H@9BBUBѓBqݲBғBdPBғBV?BB@A@?&uB/@jBCBCAC5{ZB#Bdi?BC@A@?BΤH@r:B)9B8Bw9BϱB w9BA]bCx?=B9q9B@A@AAڑA A*OABA@)PC͸A)PC?>AA@A@?L BHx@BCBCYBCA"CCx?B9CAA@?S >B`|@ܴBxC᭲B|C?jCMBjCl?rBbǦCAA@?.zxBMr@B({CEљB({C]B({CD"B QB[i?BF0{C AA@Bie@NBYCaBYC-BYC ?YC s?&ZB TC0AA@? C Q@zB%BB%BvC%B B%B&'}?B4B@AA@?B @?BPB}BiPBBjPB BjPB$.{?HB$OBPAA@dkB@=MB AjBu ALEBu A@A؜B\ B@@A@?LJBW@XBiCBiCBiCHAiCw?BhC@A@?3DB@ARCOAۿRC&AۿRCyAۿRC7>ATC@A@?"8 C6@YCByCBBB4B-ƒC|? QCB@A@?C=@+Cc4BYCb4BBb4B?BAaCNz?hC4B@A@?B@[ BB2OBB)SBBA5Cho?BbBAA@?fA"@,AՇNC,ANCE=@=AԻA=AB> ANCAA@?C/@@ C[NCC[NC2 C[NCQ@[NC}? CPC AA@?B@A=jACRACOACämAC?3lAӄC0AA@?B< l@#gBqB[ڤBqB~BqBmAqBz?qBqB?A@?9BJ$W@gB@zC/ןB@zCcB@zC|@@zC@Xq?XȦB9zC@A@?ZuNB@/A fCAfCn)BfCAfC&?A7*gC@@A@? B?9@FC+gCC+gCL^B+gC%BtNB y?2CvgC@A@%oB=@BvZC篖BmZCBmZCBB:Kn?ȜBcZC@A@?4AAA8BJA8BD@*ΊC[A*ΊC >AB@A@?ڊ4B׀@BBCBCAC+BG^Bo?BC@A@zBh@bBCBCŒBC:RAr>B?{?4BCAA@?+VBmā@ tkB]>ACOBx>A>Bz>A 4@G?Cm? lB>AAA@?:ZUBu @ݮbBvCLBvCEBvC?|Cq?lbBQCA@?֏3AMN@ҊAC>ACdAC?A@?B[@VBBSB4B~BѲB}B0B|Bs?HBB]B@@A@? Bt@CBBBB CBEBBd{?)BB@A@?.B{$Aտ,BHWRBBYWRB{BWWRBn@ڕhCZ?#,BRB@A@?! BN3AӗB>C,B>C@>C}B}CXl?B^ED4C]QD4C]#D4C7C 7?LD4C0AA?E C;@9 D3C }D3CrC3CۏCC?p~D3C@AA?HCf@IC%CCkCCn@4C?CCPAA?C@ ʦCْ.6OC]\%6JLlC]\%6dB4C?FC $6`AAXCՠ@~B7$6BN$6!1CN$6IfBP$6?Ba6pAAnB'?AJ7B4C[B4C+@4C/B!c7Ju?bB4CAA? nDC@NC`hU6HCShU6?CRhU6A4C?NC8U6AA?ʵKCڈ@C4CT C4C ŅC4CQB4C?? C4CAA?'BOdAB4CڤB4Ci@$7B$7l?XƯB4CAA?BA}4Cq>4C=p7?n7P;0d?4CAA?MB@B|x5EBFx5BFx5pEA4C?\B҉w5AA?kAdA^A4CΰA4ChmAa%73Bb%7dT> A4CAA?iBhAEA]6ACdBC3BC 3?ACAABy!ABR5mBR5BR5!?R5?Bv5@?A?C@C'CC޲C\C޲CSBnYC|?WYCM C@?A?_[B͈@4BȚB}pmBR,CeBR,CAR,C\@?B 1C@?A) B#@-B,sAB AaWPBʠBaWPBJMBaWPBζ ?JA1?pB@?A?@#~C=CnB+9zCbB{3zCsGC{3zCB{3zCmp?pB8=yCpA?A?B壥@BCBZCMA[CeB-C_h?*BCA?A?+B}@TBWBE]B@YBnC@YBB@YBen? BBA?A?HC]@ B`PCBdPC.CdPC"CdPCf9{?B-PCA?A?!;AW$)A*AXC8A XCF@`BIA`Bt>w6A)CA?A?<CL@BC BxCJCxC%MBxC=y?HBW˲CA?A?yEBAϊA^@pAZ@AZ@,d@Z@k>pAIf@A?A?AA@6A,:BBE;BB̼@cCFRBcCE$?9BBA?A?xGC ]@cBCH-CZBCF-C}ICF-C=@F-C}?{BC`#CA?A? B6@jB}VCăaB}VCmB}VC[A}VCVd?&kBm^VCA?A?A#A1A ʋCj!AʋC;?ʋCA(B}>]/AQmC@@@A?6B,@sCcCzC/C8B/CTB_CMg?CxC@@A?ơB'@ C2 CBCIBCA2C vG?B1ϰC@@A?jCݵ@ACrAݏC%VA/uC%VA&B^bAC@|?zCKA@@A?%&D@RFD텱Cy(D~C"D~C mA,1C]?.D⬲C@@A?feCDQ@D CPConCNCSCNC@A̗B#z?'zCCCA@A?]NDKAkBDSCdNDXCֻMDXCF@BC ?MDCA@A)WC&@ GCJCcCACBACc B?B _j?C7C A@A?МBsr@BBڳBeBBgBBC4?pfBceB0A@A?nCV@VCnCZC*mC{C*mCmAgB}?jCQNnC@A@A?'DCu@&OyC>CCNCBNC)CCy?zC9CPA@A?$dBI@ɀB.HC^BKCR=sCqBCCM?PeB9C`A@AoC$@9%C C_ CWC CWC0rAZݿB2w?4(CCpA@A?A*A&AA?CA@A??C"5X@jC iCCHiC4dCHiC&BGiCy?CѧjCA@A?B1m@,BxCBkxCCjxC8AjxCv?ByCA@A?o!CYpQ@ǧBQBwBމB@CCމB3 BBYy?uBB@@@A?C"iA CPMCŷCC(CGICC(C3CC(C%}?KC:%C@@@@A?K8C@R@qHC"C8>C~'C&$C~'CAwC;Kw?ȈMCb<)C@@@A?gB@%TB+C7pBEECcBEEC*BEECI?׻rBrWIC@@@A?yCަ@nCB- oC8BϱC8BB8B|?A|C B@@@A?igC$"@<`C[CؔUC׼CoC׼CsA׼Cbz?^CŊC@@@A?CB&@BF5CB]PCB]PCBQ@_PC'dk?BnKCA@@A?@C@,q1Ci`CA,C cCB cCGB 7D2OCG,D2OC쏐BA?d3DDDOC A@@A4BAJ@ C\BBzBBzB (BrCc?&BaB0A@@A?CDh@TC{ CkEC CEC CPC C|?+GCbj C@A@@A?UGCD1@C)C]pC*C|C*CA*CG:~?ZCR*CPA@@A? >B0@BMC BߒC%BߒC B=~Bj?ZCC`A@@A?\Bb@#SB@o@ Ba@4Ba@ Bˆ7CxV?~Be$@pA@@A?}wBX@HCBCB 4BBBstCGq?| C\BA@@A?C@CjɦC!-zCZɦCNCZɦCBZɦC@}?܁CCA@@A?B@8BDCjBaCi{BaCkkB1C8v?$BlCA@@A?"B(@}BUCFBWC]BWC4B_B#o?rBU`CA@@A?ZCʥn@KB BSB B894C BaB Bu?vB6 BA@@A?Cp^@VQBCBCmMCCF-BCְv?B^̔CA@@A?MlCy@:CiPBCB5 CBZ@/|XCE {?CBA@@A?$B)@EBX-C5(BX-C*BX-C/@AX-C x?zBD-CA@@A?A?ADiA gC2AgCBu?gCLjALB>mA\fCA@@A?j#B%PAB~B,\A~BA~B@~Bu;?aB}B@@A۶C8@EW7CR`iCKC[zCGBZzCrCBt?+s]CS{C@@@A?C@LDžC%CnCzC}CzCxc-BzCPE{?!CB@@A?3C@u*DSCA'D@TCBC@TCYBBM~?g DFTC@@A?yBJ@#C/CJApB BpB5BpB?v B+B@@A?07DAK]DQB Y;DW0B%H2DW0BB`Cz?eCD3B@@A?C:@OYC"CT,C$ CZB$ C1BiCiq?N %CjCA@A?DN DR@!DBp#DKsB~qDKsB(BpC~?&%DxBA@A?~CxW@nCRCCICF?CCF?CBF?Cnw?Z;Ci@C A@A?x$Bk=@CCC8dpCbB8dpC7BؐqB m?[CBwC0A@A?OjCd^@3C7>AC"A9C"AtHBANCs*|?CKA@A@A?j2 C7@/B乂@K C@g]$C@A@q?C>@PA@A?B-Yd@(L?C=B$?=CB ABC,CQAv?@CfyB`A@A?pGB^jC?B|ZBfo?a"CGhC@@@A?Ah@"B6B8BoCKA7CWB7CJ>Bl(C@@A?W/B U@[C6%}C?B{CPA)BB)B(?ﭰBzC@@A?wB 0@p B *CyBDC$BDC[ADCI?pBzC@@A?kD@w D2BHfCLBDLBÅBLB|~?QD2B@@A?NC @C7pC6C+xCD+xC{C+xC}?CTbvCA@A?jDe@ DLA}DA,kDABœHC4~?DXAA@A?ļBH@C#,BhBXdB^rBXdB\rB,2uCT?-gBXB A@A?Cڒ@9TCguAݲCACAnAA6~?ℴCֿA0A@A?6CI@%CFכC4C;Ci+C;CA)wCv?8-C,ɚC@A@A?TBk|@PrBSBuBURBBURB%@URB5b?sBELRBPA@A?oC9o@iұBC̬BCAL,CA@AvBE@sBC<-BFCۈBFC|nAFC r?<B.CA@A?OA0AXABAB_?*>CėA*>CS>hABA@A?BrBA AŒpC@pC\?UmA$pCA@A?PB̪@ B(@J B(@B(@w@6C\x?DBu)@@@A?|LJC^@^ˎCB juCGBTCGB=,BCB:{?xCB@@@A?UDQ@SCA@B;COTBPDOTB COTB~?p0CUB@@A?Ck>@CPC'CNCCNC*CNC9~?CNC@@A?_CC>_CC>_CDz?;#~CbCA@A?LC[@/CuBΪC΢B'0C΢B*BТB0}?CBA@A?>C=@zCjfCxCkC^CkCBkCzu??g C:iC A@A?AsAM9BmBB[BĎAC VBC$L>u5BB0A@A?15Cb@4C{MA8CASO$CAzCHCs.CGC)B C|?րCC`A@A?" A$%AA5CA9C Af@}Bc@e_>MAOPCpA@A?_CЊk@@nB,A)B,AHB,A[zxB#HCz?ЩBAA@A?Bp@:B^CaBú^CɦBú^Cz?;Aú^Cx?uB^C@@A?tgCl/@&cC$B1]6C^3BBC^3BMB^3BXy?EC1B@@@A?}oAC@B߁BQ_LB4B7B=aCwB=aC/>qB_&JB@@A?OB <@'CB=BiBh»A4~C'.B4~CA?;BߣB@@A?o$Ckv"@C'DžCiC2C*B2C#ziCʤBq>x?CC@@A?O?B4@%Z@B.wCBԷOCWQAA3:BAzY>}AiC@@A?uCH@C MCC=*UCC=*UC߿/B?*UC{?ԠC;RCA@A?C[L@2CbCyCC0[CCC,40C|?ڶC|װCA@A?gClm@$ZC'fC+ZCC_C!CC_CzAC_C|?WrCaC A@A?m%CWE@gBBBA;CA`BAo?BA0A@A?PC7Me@DC^B+C%BhC%BNuB%BYWx? *C=%B@A@A?ӍCRu@cOCo`BLC,OBdC,OBJC+OBc|?/WC BPA@A?]B\@B}'CdBq'CttBq'ChEA۸CW?ڤBۛ&C`A@A?.A~AA BLABtAuC`0BuC b>nABpA@A?wNB4c@BMCBBaCOeCaCBaC/s?BdhCA@A?϶B4@"BǽZC3BZC BZCQiABu?sB"[CA@A?*Q B- A B ,CBY+Cp@X+CA¯CO?? B)CA@A?.5CZ;@:aC1bCYC1bC# C1bCBz8B}?_C9bCA@A?Bࠎ@jB-B6B)BB)BmA wCfq?0gBBA@A?ATCPg@|C`QC7CaQC8+CaQCBaQC75{?1C+cQCA@A?nA$ #A BRKQC B_KQCIAZAL=BZAT>) BҁQCA@A?DdBe @^BPC٣BBCGBBCyB"ǩC4rn?+B]CA@A?}@B6@RBeӬC.BeӬCrѯBeӬC.A˦%CK{?EB֬C?AA?C^@oC6Cw~CKCǟCKC/BKC0|?xCC@AA? CIW@NcMBcC[B.GMCrC.GMCYB.GMCnmj?XBPC@@AA?lC1mh@C|@[CvCM.MCLJCN.MCH@R.MC_}?ȂCHPC@AA?C@pCCC"C=>Cy'C=>C5B;>C~?C?C@AA?Cب@^CSґAƃCoAX2CoAt5BoAa|?oָC}A@AA?B72@CBdCʫBCyBCȻAw C.B?l߳BC@AA?DlBd8@CC\CC˟]C_A˟]CB'&Buc?Cr\CAAA?CZ@&C9C~C4CqcD4C0@C4C~?sC]6CAAA?CK~@JoC tC }C/As_C0AAA?c_C{@CmCa\C>mC+C>mCBfBs|?oC$fnC@AAA?%B>Ge@&C9C C|]CuB|]CWצBC2r?}C+CPAAA?iBRm@oB7CIBjCb CjC.BjCtn?7B{(C`AAA?aV*C_X@WC[B0QC[BB[BԼBۭ|CG{? lWC|BpAAA?{$EB@A˃CAC˃C AC˃Cx@C˃C?jAiCAAA?CnV@BBBBǤ,CBKvBBx?BBAAA?Bi@BABWB)BSA)B:BHJYC|n?pBBAAA?CyX@`CĢBCĢB CĢBFkAĢBz?SC%BAAA?.B}@%>Bi1B ?Bh1BJBh1B8Bh1B]?2BW};C@AAA?[#C$D@ C]yB7GCBP4CB&@BB^t? C7 BPAAA?tZCFh@gB9TC0B:TCGC:TCu2C6C>?:%@x? Cd6CAAA?埚B@ɥB4CB4C"AB4Cl;?)F?*l?B=5CAAA?YCɗ3@CC<ƄCAC:ƄCelC:ƄC-B;ƄCF1}?CC.CAAA?wCc@ CjB CjB{CjB@jBY{?z CӌBAAA?B핌@5B*BB(BB(BYyA(B9x?BO!BAAA?:!B7AlB_ CeBl C @k CMB6WCI?YlB CAAA?4yB:@LBEB+4BEBJ^BEB@EB:cy?"ߴBDBAAA?.BMJABhv Cf|Bmv C4Bmv C@lv C.Q?+=B_ C? AA? JCJ@DCpCiCmC3CmCӛBfBv?fsCnC@ AA?CAu"DReYBDbniBcCdniBwB[nC5~?)D!cB@@ AA?onB(!@po!CBBB~בBA~בB,B|CT?CCFB@ AA?xCf@CCqCPCbPCPC C̡,Cc|?3CvC@ AA?8Cs@ѽCCzjC.Cd\C.CnpCdB8}?l:CPōC@ AA?$3Br2@U%CρB w CQBqAQBECCr?CB@ AA?YbC27@19CPC^BCqWCwCqWCRBqWC"my?mbRB:C0A AA?_Cc@)CKCytCJC擸CJC*BJC|?+C4IC@A AA?[jA7@B:BByBB|CCC|C?PB?BPA AA?)~B)x@+B430CB30CA30CHBCX?2Bָ1C`A AA?fCai@.nCB|CiC/|C[aC/|Cp@>C}?nnC 5CpA AA?e2C?@/C@0CCZ0CNCZ0CvBZ0CW{?gC|0CA AA?fv1ClK@ɊXCd*A-MC(A6C(AsB>Cr|?RYC1&AA AA?]Bi0@pBBiBBc`BBv¨A1C{ ]?foBBA AA?&B@UBwBj|BXBfBXBHAC/%l?wBBA AA?PIBAR}BdKCtBKC/AKC 'BDAY?QBKCA AA?mB>Z@ .B\BΥB!\B/B!\B‚A!\B(v?/pBYBA AA?ѥB&@4"BrsoCɤBgsoCʯBgsoC˺JBgsoC+^? #B8HoCA AA?PB@_.hBCETBC қBCACݓr?hBC?0AA?})CO4@b6C BCחBKY?CחBuBחB-r?>CB@0AA?CgB@0AA?UCK!@6|5CjCok/CqeCƑCqeCf3BGB+x?.C4gC@0AA?sC@.D.IB^DkEBDCjEBB`eC~?DFB@0AA?C@@CҽmC$CƖoCNCƖoC BƖoC|?CnC@0AA?C+U@AC&CC(CC(C7B(C{?CU'CA0AA?pC擜@4CB*C(B}C(B|(AKC|?7džCcBA0AA?^@C@JC}BLFC~B 2C~BۥAqCz?MQCSB A0AA?BL@/BICR\BՎCBՎC-?WB>>o?B6C0A0AA?+Bno@_BBb7BBBBߙABo?UBDB@A0AA?QCF@u rC?ykCۿ?ik2Cٿ?9dB5C|?^pC~?PA0AA?7CW/@uC@OC(@)C&@B%@I~?cCR@`A0AA?u(CF@2CޒC.CޒC CޒCCAAezB^|?)2CђCpA0AA?=B؊@B C|wB@ CkTB@ C(A? Cd?Bt CA0AA?GzB@B[CInB[C{"B[C`xBBs?Bx[CA0AA?;3BBAACkACƳACK A!B?AuACA0AA?IAB`AfC@AA?1D6^AC3C,C3C D3C:B3C?jkC3C?@AA?5"C@TX@BCrCviMC~C?B~CmCmB4Ww?FC~C@@AA?{B,@BCqBcCFBcCViA2ƣCh?bBC@@@AA?ەB|SA@}CMCeBN C BN Cb-AC*Ok?y&B؛C@@AA?R/C`;_@'CՠC43CQCrCQCA2Crt?-CC@@AAhjB@΂BALCmBNUCD CNUC BNUCM?qBRC@@AA?d/Cu'@@5BA9BA}aCABAGr?mXBhA@@AA?BOH@9C5`C4C]/_Cp̯A^/_C1Cq,B^t?"2Cf]CA@AA?6C@z@GnC5A!gC`A}B`A8BlLCna{?JBsChAA@AA?huBf@CBBMB4B6joA4BB8 C F?ƤBKB A@AA?C#j@PeCACADCAFj@%;OCGx?mCNA0A@AA?;C@DžC{eCW?|CpeC0CpeCBpeC}?(ЀC7C@A@AA?:C~@ʒCrBgC;rB}C;rBXB9rB6~?fCJpBPA@AAbBJ@tBђCChBCCV CCCEBCCs?BYCC`A@AA?eLB@+/BB&>Ck(B`">CA`">Cޭ.A%"AF7?V1B=CpA@AA?9QC.Bk@xOC7CGFCCNXCCC AC%}?PCrCA@AA?iAoAA吇CAKCuϒA*EB6B*EB>^ACA@AA?"CF_@ LCBpQMCB9BBBCm|?LKCDBA@AA?UCe@ExBf1"BZBt"B2Ct"B@@t"By?Bv"BA@AA?7_BAfBԱC#BӱChAұCĕBآCn?BnCA@AA?zsBABqC0BΚqCvBΚqCAΚqCFM??YBKqCA@AA?Ba$CAdBB B3B BA Bu]A{CΞW?jkBBaBA@AA8B;AR@FB?AC5B=ACB=ACP;A3ZASO\?pEB.ACPAA?Ca4ACCCCCCУ>BC?CC?PAAmB@z^B,CkBMC=B&CB'C1>pv:B CAPAA?Bg@1B!C[B"CkMB"C9@"Cr?vB_8C APAA?]CM@+CjC=5'CCC CC'AٺBy?/C/C0APAA?2a CH@kBBwBeB*/CdBBdBu?QBeB@APAA?B~@4BBVBQBBQBqB$C3.s?lBGBPAPAA? Cq@B6CcBLCCLC!BLC"mu?BC`APAA?9Bŀ@:BK@CnB?C*B?ClvB?Cg?9B+{?CpAPAA?ArA\)BTCo%BUCy AS)B4HBS)Bj?m &B䌋CAPAA?t$Ced@.HCw,CҫHC{,C)B{,C.BXC{?GC=CAPAA?sBw@9,EBcCi.C@`AA?)hCi@tCbA÷CWmACWmA*OBNCG~?#WC`aA@`AA?)CMU@eCyC CCpCC،BbCw}?MC>C@`AA?B(Ce6@MBA7HCPA`AA?Cg8@CkAn^C̖AT"B̖A5BFCx?CMA`A`AA?tBm@+B/CꟸB/CB/C]AЗCțt?/BCpA`AA?frC^p@yCl3BhxC*l3BhC*l3BA `C'}?ezC3BA`AA?qqBF}@EC[)bAhUC$bAHߗB$bAˆBI"BCfz?nCuaAA`AA8BA@AB'5B?B,BՅUB-BUSB xCWw?B|BA`AA?*1BLAEBEB.B EBQAEB@peC@?_BLGBA`AA?OB@BAC~BACAAC)wB^Bf?fB*CA`AA?'sB5@?˄BX_C~oBM_C o]BM_Cې@5M/Bnq?B_CpAA?%ɉAkAAAC$@ACA Bt+B B=dKAC?pAA?NCbO@mCj CeCnC/CnC XB#C-{?ZsC=C@pAA?h+CBG@BĔ}AeBVwA~B&xCCRC&xCC#qO?{vBkiA@@pAA?^C$@9sC.CC`lCfC`lC/B"C|?7COC@pAA?C<@b*CV|C"C{}|C_ۧB|}|ChBBK+u?1&C|C@pAAJECd*r@v=CC8CCzEJCCͦAC{?p EADBPApAA?5Buj@B%eC•B6eC곋B6eCQB$FBVx?U)B eC`ApAAp0BF@BBdC-BPCb!CPCBPCo?BqCpApAA?RBrR@1eBVC#¤BVChBVCt@VCr? B3CApAA?YxB@2BUC$BCՆBCd$BħC{i?_IBCApAA?`B@T,BɏCBɏCBɏCBV$B3k?B}CApAA?sB ~@B۱AlgBwS?PHSBRnBAAA?|iB+\@JBPC~BC-BC$>!B4jBYl?F+B CAAA?LCy^@=1C@5dC2+C5dCxhC5dCsB5dC|?,3C[{eC AAA?~!CG@Q2CCX*CʆCCʆCAA*B {?G_2CC0AAA?B5K@l CCBCpCBoCEABx?5# CC@AAA?CCF|? `Ch#A`AAA?/_C1N@AC8C[C 8C C 8C,A 8Cp {?jC8CpAAA?*AlABL(CdBZ(C)AV-CBV-CwE?YBf(CAAA?;CP~r@C|C9CC'=aCCBC#}?ICCAAA?EBV@7BӠCBӠCpBӠCQA Cqt?ydB߶CAAA?z,BABeBY BeBUBeBX(@eBU?BBAAA?_By@?AB]wC}+B]wC,B]wCB]wCr?.UABIwCAA? C@CBxCBpCB|)BC?CB?AA?CiAC]5CC]5CgC]5C@??1~?fSC 5C@AA?0CW=@iC0CzcCC CC5BCLx}?SjC^EC@@AA?C@@C hCSC hCMC hC>BPB-~?C8hC@AA?hBK;'@*Bc%BJxA"B|C"BB"BW?JKAIB@AA?8C+@bC TBպ]C4TBC2TBB1TB0~?{cC$UB@AAQyC@`BUCBNUC:CNUCɁrBNUCw?B|C@AA?CO&@"C@/A,C/AC/A4@RCj{?v"CdAAAA?C6@CCoCCX CCACz?CGCAAA?ArAl'7B{C 0/BCACBBCB>xK:BܗC AAA?>BV@!Bm CrGB o C⨠B o C@o CLHp?nB!x C0AAA?xBQ@|GBClBC"BC6&BB`k?DB C@AAA?a#B8f@wBBwB^BwB>(CwBBwBPo?8B-BPAAA?BF@ȅBsBBBV)BB@Bݯl?BvB`AAA?B>l@BPZC VB;ZCB;ZCT9B Bv?B?ZCpAAA9&B5@uBPCWBPC#BPC1APC| w?]B3kPCAAA?ԗB@}@BArBABA@A`j?ȹBvaAAAA?ACqc@B CB CN7C CB C|?BtCAAA?B@BYlCBWlC}BWlC(ATcBv?BjlCAA?CAC4C3@C4CC4C WjB%7?C4C?AA?AAgB!CcB!CB]CCƴB]CC@ ?zBC@AA?sCzC@2C^CjCC@xCCV@C{?CzC@@AA?C@[CeC=CeCCeCANGB%?gCeC@AA?/ZCH@.CNB)C&BC&B_wB&B|?5-CB@AA?]Ce@>CNC_7CFCȒBFCBB-z?I@CǕC@AA?6B,@BWBDBDBBDBe,ZA*WCs?OB B@AA?$ABO@BCiBHC&eA$C*%B$C$B_?AB+CAAA?5 CQ@B+B#BCqB"BC/C"BC#}B"BC˔y?BBCAAA?PB@9CRBCp~LB#Ck@#Cd-BE@CH$E?5SBAC AAA?$B1@xB"B.B"B#KB"B9BHCm?<ҳBB0AAA?lo-C޾H@vACǹ,B$BC,BC,B}9B{._CW|?oIACsM-B@AAA?vWBg@ rBdCVsB$dC)B$dCnB$dCh o?rBJdCPAAAb8CU@z5C=BA?5CBV7CB@׭B}?4CB`AAA?PB6,@FARC%ARCS/HBRC9ARCwA CAAA?&B[8AV:AC1A#CyTA#CP @"Ca¯>9`CďB?`CA!B?`CB?`C\j?BJ@`C@AA?WBlX@BCHB&fCB'fCJA'fCxs?ƼBC@AA?W\1C N[@O#CP_zBVCizB @CizBBizB|?%C9={B@AA?BY@BxC9B+C @/CBW Cb?ӣB툡C@AAA?B`@v}Bq2C~BW2C/CW2CBW2Cot?~B2CPAAA?XC:@B{bA?AArC6X@%?B]ABUACUA~MBUAy? &BCA@AA?/B@ BECkBECBECe5BFAw?ªBd^EC@@AA?˥}C|@.LC'CVFC"CC"CjB"C~?5LCC@AA>s@;zBa7CzPF?gxB{@@AA?^=Ctf@;YCېCkZCېCCېCzBlBu|?_XCOǐCAAA?CPCA|@SC;CuUC;CpGC;C&U`Aw,C!}?RC-GCAAA?Be@TBC,BHCSBIC`A5BNr?YlBC AAA?BU -@)B?C1BC]~BC=@,$ CfFw?;CB-C0AAA?\?Ch@ >C#ECt=C#ECP=C#EC;F>A}?E>CEC@AAA?EBw@2BCU.BC&zBCC`AAAUA'A`A=l_CAMl_C?6-BlFA2-B?"?A˧_CpAAA?HBJ@pcBN4CFIBP4C&BP4CU A(CQj?_cB9CAA?$C@ȑCBCBGCBBB?BfCB?AA?ܓBZj@BQ`@CBS`@C KBS`@C5B*FAj?Bh@C@AA? CAB RC`BRC)CRC_ARCgw?$BRC@@AA?2:By@n/AxFC5AFCAFC@=A > AHC@AA?HLBB@A5uB/YAuB [BuB„BuBՒF?#$A\yqB@AA?~BC`@OCCEQCC/CCBDCy}? OCSC@AA?hb`B<'@)BC_*BCݍEBC3r@CVQ?{)BşC@AAIB(`[@BQBMB>B7B=B]hAvC,r?BBAAAyB@B CB|CذB|C.BC9k?؝B4CAAAC5:a@N7BC3BCBCD?C {?`BC AAA?B^@BC7B@k^BC:GBC]+BCrAAIrBk?^B2CAA? C@B :B2"C2.B2?Bj2?AA?@2Bʬa@nl{B&zC|BdzC4BdzCsy@dzC5i?|B6zC@AA?+[B@͟@ArjBAZjB'>BZjBg:A\jB'9?Az2kB@@AA?iB@ B[C+&BCnOBC"AAC]I?BC@AA?>BX!@ϏBh\CBPoC'CPoCwBPoCRt?hBctC@AA?A]/@:fA6BhA5BK"@daCAdaC2o>!kA3B@AA?BƟ@BYkBcBfYkB'޻BdYkB+lA^nCLFx?ZfBjB@AA?k]BBÑ@KBP'rCKBT'rCMBT'rCALxB1^?JKBt6rCAAA?AAGWA7LCzACLCD@AAAI>ȾA*LCAAA?B8ZV@JBtCBB~Cv B~C CgB~C}g?~JBC AAA?C@6C݉C@ C݉CpC݉CQuA݉C5|?CC0AAA?AT/ ABCYABC%>C-BCЅ0?^BC@AAA? Bĥc@RBx`C&By`CNBy`CyHBB}z?OB)dCPAAA?@J-BHU AjhBA"TBAAA,AOCn?chB0AAA?)xB-%AABVAB8AB?C>AB?AA?C5M@=q CDC ^ CAC=5.CACx\BAC@|? CeћC@AA?)[C@BBrBB)YAC@AA?Bx@aS*B3(CC&B3(C]A3(CACW){ZCp?B*CAAA?AF@n`DBCܓ8B!C~@!C(BxB~[?,DBh*C AAA?IAAAWAuC=AuC|?uC+,A΃B2>,XAH vC0AAA? |A?A|BSC16nBSC@ArBAe?AB SCAA?4~B!@勎BBC HhBC&A4C~?DBC?AA?AoAANC\ANCV A;BA;B6A>sRAHC@AA?Bh@;}B*$C sB*$CTnB*$CV?QCi?~}B/$C@@AAB@BCBCn`CCMGBCDx?}ܳBVC@AA?ZHBM2A_A0}CVA#}C3"#A"}C=EAE`BQ?A~}C@AA?TA@B+[B4B*OB4B@;aCŁfB;aCg]?}ZB4B@AA?phAs@CAC>Cc@7$A~9A7$A>vIA*F>CAAA? yhB^@k5/B^.BxBD.BzfBD.BAE.Byj?N.B-BAAA?pACNYk?U>2BB?AA?yA@ACZA Cʽ? C~A/B?6A+C@AA?IBN@6BC %BCiIBC3ACGh?S7B'C@@AA?!6BKh@FWBHtBBPtBtHBPtBٝAPtBw?;BB@AA?XAWA+B|CB|CZ?3B! B 3Bf/?sHB|C@AA?c!B{@ !B\B]B \BA \B%AזC(d?!BMB@@A?!lC|:AnCBLCB9CBDMBB?3ZCB@A?ׅC%@CC`CCwCCX!BB?\ CC@A?( D5A0DCCCHDCBC?7FDC@A?NCR@%CCCCCfZCCFAC?ЎNCC@A?8DHg2AGCBmTCB:&DB܁CB?CBAA?"CWACBFCB2CBBB?r[CBAAfC @RBBzCBĜCB%CBG? CB AAC@FCB:CB4BBlBC?M>CB0AA? B!vAÁ`BC?BC0VABK=JBBȯ>x,BC@AA?0AWAY6BBABRחAC+BC]=ABPAA?[CR@CC CC< CCD@C?גCC`AA?ciCKO@7BCBCܬCCA`CC?iBCpAA?~A7AB9BCS2BCBBBBPt>,BCAA?<[BkA4BC/BCACLAB.?MBCAA?gBfAACS}AC@CAB)>툉ACAA?'pB%ABBBB#?BXBCj?UBBAA?$ B@%CBl CB>BB5BC?CBAA?cSB[VAVABKABAB AB%>jۡABAA?R|B]EANRABEBH)AcCc BcCsE>Aɞ6BA?A?׽B E@uBT CuB CliB C$A Cq? B CA?A?UB}+@BZ=CB\=C B\=CAz,Cu?MBHDCA?ATB=8 AACAC'BCBJAC$+?lA>CA?A?!A$8AA?JA5??,?1wA5C,>!A~?A?A?LB@>CՑCdBՑCBՑCAWBz?}CđCA?A?=Bdդ@$B2\ClB2\C.WC2\CB2\Cc{?\B\]C@@A?R8{C#@XCՐ8CxWChBC6ChBCmBhBCC>@§C BCCB(CC(C[A(CĬn?BBAC@@A?}CR@&DC8CCCCBCg~?CC@@A?ΟDu@#DfRCD@zCI%D@zC%eB@zC1?&D>j{CA@A?![C~8g@:C]>CC-+-ABCA@A?%0BA' DB-,CI>B,C@,Cc%BHGC=?@5B*CA@ACɦb@yCCCCCpCClACOz?>CdCA@A?lB~-A lBcBvBB|HBAC쭓BC0?IB((BA@A?"Bן@fCJO&B,eBSO&B\;BQO&BB֓]CAx?FBr&BA@A?'B!&ApBi+CmqBi+CA봯CBB봯CM?{B>+CA@A?JXB3 AyB߱C[IBӱCѱ0BӱCC@ӱC??3BαCA@A?gB;A*Bщ^C橭B։^CDAS'*BBV'*B_?B^CA@A?EBdI,A B#BB B"!B B @ Bw@?CB=BA@A?,&BT`UAC BCKAC=ACP^?C>?BC@@@A?CE@N, D>{BCCCCɬBC~?hCC@@@@A?o]C=6@ѾB#BgCcBCcB9CcBGu?wCˮB@@@A?WB2$d@޾BMABgDdB&i@eDdBAmC}>0BB@@@A?D@< D8ICDQ/KCDP/KCHAO/KCH?. DMKC@@@A?W }Cm@tCrjC~,CvCoCvCaCvCy?lx:C!ЀC@@@A?HAD3ApD0\VCP]oDYCˆDYC&CYC9?yrDXCA@@A?,C,%@CBuC_BC`B5C`Bf|?(ϲCw"BA@@A?C3@CCX,C""CϦ3C""C"CoC${?YCbC A@@A? иC7@CC,C+~CEC+~CAB~?ٹCAC0A@@AuC8G@CEC6C( CB( CE-BFCs?O C6 C@A@@A?B)D@CQB]C4BaD4B0B7BP~?̉COBPA@@A?C @?3C!BCBdCB[KAC~?Ce=B`A@@A?B@젒BrUCBlCBlC%4@b1CiU?BcCpA@@A?J#Cm@F-C)gCCgCb#CgC@gCJz? C ugCA@@AX C4-a@Y B"[CjwB=[C2C=[CuB=[C12r?KBnCA@@A?[CG0b@C1Y9C;CCY9CʯCCY9CuACY9C0z?C#9CA@@A?9sB!Ij@ȂBX'CwBCG*CC/QBCm?:gBCA@@A?BM@*BGnYC)BLnYC?ĸBLnYCV@2BZv?BpYCA@@A?4 Ce@: C}$C- C$CGVB$CSA(Bx?o\ CVCA@@A?âC@B BB+B C+B"2B+B=wx?ՙBB/BA@@ADB1+ABBBB抡@BBkC_j?*BƫBA@@AaBgA3B'@ƩB@!A@OBaG6CΉm?sBf@A@@A?l BBA B=(CtB=(CA=(CpAC:?FBT(C@@A?Cn@uCA C?@C?@ A6CDt?e&Cu>@@@A?4%Cf@QCkB.ChBbChBkBC:u? 7CHB@@A?C@yDFCDvCoCvC`BC~?$ DC@@A?=9CR@CBiCGYBGCGYB[ARVC{~?/CYB@@A?ϜCw@ CҸBCBCBd)~AB< }?$C eB@@A?D,@CC D蛙Cq D蛙C_&B蛙Cɿ~?pDCA@A?BbDp A| DALBqUD-BQD-BBu˒C\~?AjD8BA@A?2C@MCP[CFC2C'̟C2C*A2C7|?CC A@A?~rB@yBBЧCiVB&CA&CXAM$C"?HLBC0A@A?C&@C/7C CzCCzC#B zC^~?JCC@A@A?U|AB A}AC_BCAIlBqBIlB>BCPA@A?WCj@pCCfCLCډCLCxwNAJC4}?CC`A@A?C:|Z@1AC>C:C"CB"CBE Cv?DCCpA@A?CGr@YCYQCWCZQC2BZQC1BAw?C;RCA@A?\HC|@ϏCO$C~@CW$C]BW$CΫ#CPCը}?؏C$CA@A?ծBy@S_ABYABXmBB4BB6o?v?AOBA@A?(MCx@lKCC6ACðCTSCðCACf|?YJLC CA@A? Bѡ-ATBe@B>e@A 7C[B 7CW?Bb@A@A?iB'@XB-CB-CwB-C=AC̰CPw?VoBł-CA@A?oB@@C daCCZUaC/iBZUaCBcU5By?{CQaCA@A?Am!AAwCAjwC@dBgAdBw>icAvCA@A?A-AƂBgCzBgCAmBBmB3J?*ՂBkCA@A?GqBbABH-BjA}_C6r?B-B@@A? rCa @2C8\B2C=X CWC>X C%:B,Cs{?C\y C@@@A?k^SCL@UC'CplCC>{CC&BCzw?!C߳C@@A?C3O@fC"CdC/!C5C/!CXBªC }?IC|!C@@A?ǚB\^@"Bn2rC BvC:AvCdB5BMX?+kBZvC@@A?4Ci@ JC*CPBjKCgCjKCBjKCq?BbC@@A; D@@Va,D~tCV-D~CgD~C|'ByB?u.D|CA@A?]8,Dt=AQDuNBV?DZBLDZB_"CjC1?FDXVBA@A?DC@|CZCUEC-[C$VC-[C A-[CH~?ϘC8[C A@A?SC}q@J2CST3CCG2CCG2CBG2C~?޲C2C0A@A&JC@TCCРC$CluC$C*UB%CL|?5CpQC@A@A?`GC(T@B=4BB-=BC-=B9C.=B(bv?B lABPA@A?ĨC @-CB^CqBSCqBWBqBX}?CB`A@A?+C0n@0CCVG*CꔃC]#CꔃCIH@SBċx?w/CbCpA@A;4Ck@sC CǫlC CB CB+B|?"pCH)CA@ABAf@CmBk CIBBBIB'q.BCOy?7CVBA@A?B|@tBϏBBϏBCϏBKIBϏBr?BBA@A&rAGE&AvB;1C㱱Bk1C0)B6߲C;C6߲CTA?᜻B1CA@A?(M1BjA=BCN9BvCXAAvCBAB=;?9=B鞆CA@AbB@C=ވC>C;ވCo-B;ވC(BxBy?QCDֈCA@AB@BC4BCS+AC_,BCpu?PJBߥCA@A? B@rB[BLlBzBd^BzBRAyBj?&rBOBA@A?7NAJ A! B`QBy BjQB@[CB[C? B7xBA@A?pahBAO+?BǎC/H,BǎCٿBǎCTAǎCk?$?BηC@@A?.B5@C IC\BkCqBkCBkCO?BWoC@@@A?4FB@VkBUBBBKGBB,B宖CY?FBB@@A?pC]<@5DGCC4C{uC4C2C h*C~?DC@@A?n Bڱ@[wBb(CBC*l?X:BBA@A?LB@WBMCdB_CݸB_CA_C%!n?܏BCA@A?TCU@UCEC:CGCdCGCΧA(C-hz?JCCA@A?PЊB@BZe0CYBHe0CU BHe0Cp]sB2C p?Bd0CA@A?bBAs_A~JBCATDgCAWB禳A_Xy?Ы?CuA@@@A?C@5CtCC}qC C}qC2BvB]=~?oLC=frC@@A?(0pC.@[CBCvB/CvB1B8C:{?GC*B@@A?'6DEo@84DCL2DC8DCAC0?4DRC@@A?C @*BBfs?BaCA@A?B8^@B.+CݦB.+C4WC.+COOB.+Ct?|B+CA@A?AX A?B BX6B%B*@B[BA@A?AB@@OB C:HB CB C0A Cc?xNBQE CA@A&Bk@B[BSB[BPZ{B[B=MWBCLs?BqqBA@A?B@7}B5AS~BAAmBAz@{CC>{CQiC>{CA>{C5z?w C^{CAAA?Ы}B @ZBkCNBkC-AkC\RB0C>]i?8B\CAAA?#4CzNX@LCBiC7\C>iCږ_C>iCFuB>iCo{?"C^ BM$?Y{AuyCAAA?B@uuBzCBwC'BwC&6AB1y?BzC?AA? CZ@ CٮCKvC3CC3CXB3CH]z?cC>7C@AA?^C@0C;>CCC$CCBCz?C[C@@AA?gDVA`uDE':CjDR8C dDR8CAQ@g?pNpDX8C@AA?FAC@sBBNMBVABeMBAjgCOBjgCa ?NBBhC$]@QWCZC']CRUC iCRUC$FAUUC/'z?ZC{CA AA?C@OjCj\B$gC^BC^BB^B|?iC!_B A AA?8C`@[dBqCEBlqCDClqCBmqCn?rǧBdGsC0A AA?/TBZ@zPBTBBuUB@rUBsB^C 7)? BB@A AA?˗B@g)BSA&BSAUBSABSAu?I?6;%B9APA AA?"ǐCߍ@ChhBnChBRChBA"C,~?CڶB`A AA? tC ^@~DC_jB@C}jBDB}jB~BZC3|?FC۽BpA AA? _By߷@{BÜC@B9ÜC_I@uC)BqCsi?́B(CA AA?DpBR@VGBz_lC B=_?nwB:}C@A0AA?sC|}@wSC'CC,CRPC,C -BlB[}?eCHCPA0AA?CП@݉C/CنCC7hCCudBC~?DCC`A0AA?TTCB@/C)֧CC0֧C]DC0֧CAaC[~?CCuCpA0AA?-CU/X@הByCjB4C29C4CSB4C q?[4BCA0AA?qB4S@BACBACs|BAC@ACVz?BCA0AA?B;W@BP CBP CȼBP C~FFAP Cun?dBCA0AAݏB}@mڰB.C|CBC|7BC{-BX{Bkp?iʱB&CA0AA?Ee8CU@5*C-C*CA-CVACA-CJA@-Cw1}?K)C.CA0AA?V}CX@C}}AiBy}ACy}A<Bx}A0z?*'C!lAA0AA?1BL@ByC*{ByC?BByCi5AyCs?BByCA0AA?~Aa6A4An4B4AZ4B;AZ4Bc<8A.tC`?A#B?@AA?p;B䁞@BM(CxBg)yCzARBTBRB?B~C@@AA?CW;AuCAICACA=@%HC=~?\WCA@@@AAuBigE@p[BBC2uB9B2uBtBM]C)Id?MBBB@@AA?? D8A;C`C4.CaC0DaCBaC9~?RCBaC@@AA?FC>@hCcB!CoBF]CoBv&pBoBv?ClnB@@AA3Cý@3TBiCBC4CCv BCp?,B2C@@AA?8iC`C@uCiCy\CCHHCCoBݡC|?|C _CA@AA?!C@bC EC\C=ECˆC=EC$[@=EC}?]1CECA@AA?&C3@*pCJomCˆdCmCՏBmC@C{dBA CpA@AA?ˬBX͍@ElBuBdcB7BB7BϓA7Blf?3pBvJBA@AA?JBՐ@6BBNB%ԥB5BNBB4BNBAgCm?QBLBA@AA? ]BXt@BX@.B"\@9B \@A9C[i?B@A@AA? Cy~g@)C2IC_.*CBBt>7BCCYBCi>egB B@PAA?_C|@i`C2@C/`C5CA/XC5C͝@CD{?bkCC@PAA?fRCa@ĽCjCz"C/jC;C/jCyBp[B}?wCGlC@PAA?Y`C@d{CC..rC$CFC$C4-B0I C {?~CqCAPAA?2BV@C\CC\C%>2A="B CF"BTk?C> \CAPAA?Ś"C_@G2C C/C CC CNBCz?E8C C APAA?=CM@2Cֶ2Cci-C׶2C;C׶2C-Bl[C*vy?_8Cн2C0APAA?vvBZ@ʛB+CQB|+CFB|+CHB|+Cq?ZBU-C@APAA? CϨ@CWCCWCwCWCHBWC^~?CօCPAPAA?B) w@ xBаCyBΰCsBΰC.k#B-C6p?BC`APAA?ΉfB I@B慰C(B3ѰCA3ѰC͘wBe-Ce?lB'DCpAPAA?B* A<&JB=@pEB=@@=@|v&B6C`O:?'+KB+9@APAA?ֿB{z@BǶ2CơBö2CBö2CAö2Co?]_B2CAPAA?:A ACcBaCcB৐CB6CbB6CB6C,[A@s?Y9B"6CAPAA?jM*B2Aj-BNBc]$BRBARB#BA×Cg[?,B/BAPAA?A9A_~ALC" dALC0kALCA>LCZ>~AC`AA?zAo_Ap Cе6LC6@,BFB'B|FBk~B|FB䧧B|FByd?z,BmBpA`AA?XB`@=BC@B墜CMԈA墜CZ|kBEC.[?MB3]CA`AA?Bs@CxCCRxC:BRxCiAB z?CxCA`AA?&A*AԼHBICF$IBC' (AZCP,sBYC+?GB&CA`AA?@nB@BYC~B[CKB[C A[Cn?lBCA`AABw7@حB{ZCڦBvZCeCvZCBvZC;sy?2BEZCA`AA?ɐBӻ@k.BXCQfBXC=BXCQAXC#s?e1BTCpAA?WB-j@[BCBCF^tBCRBB}?;BC?pAA?5B@ AtBͻAB?B~AsCY>cAB@pAA?oC#A_gC|C^Cֺ{C{#xCֺ{CcAԺ{CQ{?iC~;{C@@pAA?6CCy@&CCTCC\CCWuBC x?$CC@pAA?֣wC@2gCTC)bC"4UC-C#4UCSB$4UC|?BmC=VC@pAA?8хCp@MC/uC'ICuC7ΣCuCBuC7}?&ICܘtC@pAA?NGC]@YC{BnTC4Bq3C4B cB !C8|?h9XCJuB@pAA?8(C<@*Cz Cڸ%Cz C$Cz C#?F=Cuy?w/C$ CApAA?ګBl@BBMBB[BBPB5C_q?BmBApAA?=hRC!K@s>C>C:CJCʧeCJC,BJC?}?AC-C ApAA?}NC5@CI[BgCC[B^ CC[BpsAI[BG{?bC[B0ApAA?B.{@RC'C5QB%+C6A%+CvCBBq?C4C@ApAA?Brl@l C%BC.BCpA/BABL.C/u?7 CBPApAA?^C)?@B3C֜B3CC3CA{B3Cw?B"C`ApAA?B,R@xBBmdBHBeCHB3BGBrCu?7 BrBpApAA?pBp@qBWC8BZWCBZWCFBC y?`BeUCApAA??%CQ?@dC_bCC/bCV7C/bCAz B0bC{?ChbCApAA?AD*AU˂APBݻA?PBaPU@rAoSBApAA?A"AF:B,BC0?BBApAA?iagB AbSB,CCB,CjB,CR,A,C&m?TB/CApAA?n B@ʞBTzBưBQzBFBQzBvB^CCy?aBqBAA?@B3$@$A@IA72DABA7,IBBA73 BBA7i;>"A\(,7?AA?++CD<@BC}iBҊC/TCҊCyBҊC-x?BC@AA?frCHC@Ct@~C C?~Ct%C?~C/A?~C?x?-CDX|C@@AA?^BR>@=SB0CBCڪAC@B6+Ck?sB C@AA?A%B5C@aBCBBC4BBCA*C-@s?wBC@AAC@oC BӝC B]C BKlB B.~?FCB@AA?;VC@!NCCICrC^Y^CrC۩ArC\}?KCC@AA?C"@EFCCBBCʍCCʍCtBʍC}?ZHCɰCAAA?|Cac@GC]CBC]CB]CB,CYq|?cGCMCAAA?wQCm@~YCnCQCnC9MCnC̹@oC*8}?dXCC AAA?yBr@6CXBO4 CBːBB윅BCv?%CB0AAA?C{8@=CãCCC;BCiٹA{BXz?CC@AAA?ABK@jBaCȀBaCYOfAaCm[B[B=.]?ЏBCPAAA?gB(s@k_BQռBifBNռB CNռBBOռBz?YB̼BAAA?*(C?5`@CBBCB&6CB BB;Y|?COBAAA?`B(@GeB7^BYB,^B9JNB+^BI6@kCynq?Y2fB^BAAA?$AABCBC^@&2CB&2Cx+?B2CAA?tbC|@fCB *CBܚCB@BB?cCB?AA?,*C.g<@zCC^tCC+BCCEB|?"wCΔC@AA?_\BN@Br^GCB^GCB^GC ?^GCe?ĐBqTIC@@AA?~;C+@W6+CjpCcJ'C8pCcJC8pC B8pC&|? /CoC@AA?C@:CO'CCz'C9UCz'C3BCs~?C;'C@AA?eA-@ݲB0#]CaB#]CAK$BMBK$B:[CUAz$VCTA,CTA^&BKCLo}?j]C/A@AA?"-B@L@ÊB߄CTׅB˄CP]B̄CUz9A)B\$d?B;CAAA?^C@^@5CÊCF-CCBHCCBC\~|?36C^CAAA?/BS@]0B\BԀBBBBWEABe?5B}B AAA?ǧBQJ@IBFOuC BNuCo#BNuCIBNuCs`?*BsC0AAA?/BN@HBC6NDBC@%CCf#BC[&j?6GBC@AAA?Bex@uB<[;ChBG[;CYpBG[;Cw(Bh@ap?BN;CPAAA?Csz5@B(-*BB >*Bf 4C >*B:xB >*B%z?eBn*B`AAA?fFCP@C1`C:C`CxC`CB`C|?C`CpAAA?BU@XBCWBC CCBCq?VXB4CAAA?9Bz@#BSC\BSCo1BSCV5BSCs?\(B{CAAA?pB@m>B2Cl5B2C]B2CuA2Cdo?>BT3CAAA?A'AABzaA.Bu@.B;AC>(AOBAA?B;o@PB<6B.?6B1?6cAA?6?ؗBG6?AA?$W0CH,@C;C Ad7CqA$CrA=APC|?6CA@AA?5B?pvBAܦ@xBԦ@BԦ@0B69C9r?A;Bb@@@AAB|#@?*BjBBfBBfBp]_BeBinp?PBB@AA?sCߣ@dC;Cb\C;C!C;Cy&&B;C}?YkdC@C@4C/@C0@\B8C{?E=Cx7@AAA| C@BSCB#SC=C$SC"qCW?0hBB AAA?sB@AЦ:BܩCK9BܩC-@ܩC{.BCa%?RBAAA?oBv@BNCC,>CC,>CDXA,>CCs~?كCh5CAAA?WB<@e}BB[{BdB9PBdBwDKBdBj?~BPHBAAA?,C 2@B#B+:B#BLfC#B_B#B~@y?UBl $B AAA{AAkBTC!YALB{BLB?fr?BWC0AAA? CN@.CCCCCCfjA^BY{?yCyC@AAA?BB86k@?BC3BC)[ZBC' 0BYCt?@BCPAAAlB,m@JB C-B CM"B C>AB CDr? B, C`AAANATAlAr}CvcAr}C@B5wABPI>#pA3}CpAAA?lABs@%BưB؂B°B C°BfB°By?GBBAAA?nfEB0,A BqC+BqClEHBqC.AqC>X?BdCAA?gTC-@gC[Y6ǢCX6JCX6@\A4C?Ck6?AA?9C@C,uCB"uCL&C"uCB#uC@!{?~CtC@AA?B!@B& |CxB< |CB< |C(A> |Clx?BYp|C@@AA?|B\@VBfrC;*|BrCsHBrC!NA:zB#ge?BUsC@AA{Bw@BBBBBBo@>+Cu?lBGB@AA?-@NC4@jC.TCC-TCs}C,TC-0B,TC](|? CSC@AA?C_X@CC6CCpCC@Cy?>nC C@AACE'@B'FClB'FCS C'FCA'FC1x?sBFCAAA?;C|@C@J.C4CY/C4CDC4CǥA4CC!}?-C%4CAAA?P@B2K@+6B_Ch6B_CwA_CYAvP/BPH?|q6B_C AAA?7Az@֡ BBP B۲B%A궆Cb`B궆C̝>* B/B0AAA?eB H@gBcCf'BcCBcC\AcCz?B4cC@AAA?PB-@mB('C8eB!'CB!'C[2A!'Ch? mB}'CPAAA?CF@ǔBBSBBY1CByƈBB/{?8xBB`AAA?KCCO@$BpsBB~sBFC~sBlAsB`}?*BsBpAAA?ӜB@8BTCBTCSBTCaATCOx?mBYCAA?ɾAHA6BABBABfɼ@CACż>sNAB?AA?F Cz@B\CKB\CC\CeA\CCx?sBCbC@AA?xCؘ@9"%C0C4%C,CC,CqԙAC{?$CC@@AA?;C* AxC#4C C#4CbfC#4CGB#4Cs{?PvCy4C@AA?*Cn@A(C)C)CC0&CC#,@CF|?T(CC@AA?:B#q@WBXCGBC18BCGB.!C4r?gB~C@AA?B}@wBaBNxBB ?C~BCv=M?8xBB@AA\jB)Y@KAiB(CVviB|(CWB|(C>rA|(Cg?RiB(CAAA?=(B$T@A%CAQ"CJAQ"C,"@D2C{?A CAAA?Z{B'D@ǾAHC(AHCB HC2,B HCP?A[8IC AAA? C,+@`CC5C}C>8C}CONUB}C5{?4CЩC0AAA?7C(,F@B .CB .Cx$C .CB .Cww?+B1/.C@AAA?NBi@*B_}n?ItB}n?/B}n?A~4CŻ{?:B6o?PAAA?"B\@B/_BB(_B4B(_BJ@(_Bz?EBGB`AAA?-.BhAMyXBcB DBzBAzB~ACfj?HXBhOBAA?`!C@BCBCxMCC_BC?/BC?AA?2B-@XBN(CB-CB-C,;Bp[C_l?4B!/C@AA?K,C@1 C6z CH Cs C3Cs ClAs Ccz?|7 Cs C@@AA?r!C8@'"CAV"CrA C rA@GnEC{?B"CA@AA?_SB@ʍB:UC鼎BRCeARCD@BWKBe?"BPC@AA?YNB @ BbCL BCJACsA,Cw/?7 BsC@AA?aC1@B[WCB[WCTC[WCp3B[WC~z?hBqWC@AA? Bߨ@BBBrBB7sBBA-nC s?JBBAAA?3Bd[@BCaABaA^XBaAúAaAq?鮗B7ϦAAAA?/B@kA7BaA7BA7Bu@7B>kAB AAA?.XAAYB-EC8RPB+ECS^ABBB)&D?UhYB=C0AAA?=3B1>@BgIBCgcBdIBC)BdIBC@@dAݖz?yB?BC@AAA?NB`@BtCφB"tCA"tCBBBr?#B'tCAAE,B@4(]BC\BCUBC0BC7]?o[BC?AA?%B"C;aC#EB;aC z?B=LaC@AA?aOA<AA}CӄA}C]@}CAm,C>A_C@@AA?nAQ A`BΘ#CXBƘ#C1&Ad̫CπBd̫CqF?4@`B#C@AA?M Bu@"B'4BJ?B'4BB'4BP?'4Bq?eKBV4B@AA?0bBS@MB+XA:AXAڷBXA!BXAWc?ZBiVA@AA?_Bҷp@`cBŭC8RBȭCBȭC BǭC^u?JcBVC@AA?SRrBn@By^C{B|^CBrB|^C҄%ByB+Pu?dBbgCAAA?7AE A]UBphCd?BphCACQB_BAQBO?UBwhCAAA?uB"@sxBgCcBgCBgCVAgC/x?A)xBpCAA?BO@1BCBC2BC8wAB@AA?A>AzA¤A[vAA̵AA%A4MC'6?@hAd0A@AA?3B8@VBVhCIEBVhC)AVhCiASXQBo?q-WBq5hC@ A?TB!5A,uLC4C:BCa@C+B3Cp>BC@@ A?#sB3C@ AB F@(VCCChBCp<8B3C`?cCCA A? D%JA2D4CD4CD4CZB4C?AD4CA AC@LUC4CC4CC4CA4C?qB~70A A C|@CC-zcC64C64gB34?FCC@A AWB@C3CM(C3C B3CCCZ?$C3CPA A?4+C̟@Fr'C,CM*C ?4C?Y6C`A A?$ B@ BC BCaCC0AC#z?QBCpA A?B?<AǢB4CB4C9kB4CϩA7 {?dB4CA A?.-C'ա@fC4CG`C4C\+B4CcBW%7?BjC4CA A?aeC\@BfnBCCC\SCC?BCA AAkA4-GB4Cթ>B4CP]sA27){B27n] ?AJB4CA A?GqAfABQA4CJA4C@;)7%opA>)7sP><;A4CA A?Bb@(\C4CC4Ct}B4CHXA%7?OC4CA AA\56A /BR§6I?/B §6zA4C\B4C3>.B6A A?C@vCkuCCbFCCBC?uCCA A?rAMiABR6BQ6{B4CB4C(Q?LB]6A A?C@ R,CVP4sCVP4fCVP4UAVP4?P[,CP4@? A?݆C&OvAJ\CwC^NC/bCC/bC bqC/bCt){?tZYCVC@@? A?2qC@@CogCFClcCClcC@=B{?yC9bC@? A?ӡB@2CɢACnBAٔBA4iAA0[?}mB`A@? A?{Cx@CRCIpCCrCC8BC"i|?wCaC@? A?CV@DCrC,1C>C,1C A%1C~?D`WC@? A?sDD.;AMLD7C 2>D#˦CNID#˦CKDC˖CDC5CDCADC|?sC CA? A? Bi/A5FBRC~=B44Cn@B XBBR?GBCA? APAkA&BiC BjCEGAC=BC>fL BCA? A?"BІ@B'2CB 2Cvn C 2C\BB 2CɁs?BH2CA? A?B|@xB.vBUBgBm9BgBh=AŁC]j?O*A@=A@@ A?g`Cil@$ D` B:CXBCXBn A[C~? FCDB@@@ A,C|@ڧCXjCKC'C5dC'CÜBǓCv|?]C= C@@ A?ەGCe@CC 4CkCMCkCnAkCw? 5CC@@ A?|C@.CRC1CCCC1mA.X%C~?C#C@@ A?\RCI@ACgAMCBNCBd?CBy?ѐPCB@@ A?&C:lj@Cfd,CCE(CmؤCE(CaAWC֖}?2C)CA@ A?BDAX@"D1CWh D3C2 D3CQB3Ce~?U Do&3CA@ A?Cё@ԖCCQCKCyCKC mB/Bs{?sCC A@ A?%MC&0@0CBHB DA`A@@ A?r1C5@v CpA)CW A}CW AbUASC~?CApA@@ A?_ǟBZA•CA@@ A?UB=@YDBBՋEBBBBBB e?ABiBA@@ A?rAA.B.CD-BӕC>AYNBWBYNBn>w-BʕCA@@ A?eBF$AIDBv BABv BJBv B] @v Bt%]?.EB~M BA@@ A?Bs@pBC{DBCrBC"A* C@x?BCA@@ A?o߆B/A-BiCqrBiCBBiCT@iCr?YBqC@@ A?Ae@-C۴#CܪoBC^BԩC݄BԩCR>ZB C@@@ A?bCP@'fC!CC~{C66C~{CAB}?+ICZC@@ A?C@W>CdA?CACA|A4PJCU~?JC߭A@@ A? C@CXBtCpB9CpB CpB~|?CB@@ A?{iC(@ICbDC6LCӑCyY{CӑC ):BӑC,z?^^NC1C@@ A?zCǏr@kͬCz7CCBC.|CBC&CBC{?3CX?CA@ A? D@&D&B&D BD BꌤA Bޙ~?`D»BA@ AC*@;CzCCMDC"CMDCAC*~?ҮCfC A@ A?@pB @+B CB C @ CSSBvC W? B C0A@ ALCg_@\yCTCoYC[QC' CZQCk%BAy?}CRC@A@ A?MBwX@4B|CӇBCўBC[AC&m?HB׭CPA@ AޯB}>@B݆B ҍBwrBBwrBy_.AxrBM^?w0BB`A@ A?mC/z@B_CB_Cl?C_C;B_Cq?BkCpA@ A?v Ch@],C,)B=(C+)BNB+)B,B{Cx?.C%BA@ A?qB¹@z-B C;B CaxB CB{Cq?B CA@ A?@8Bӑ@NAǫCAǫCaBǫC}BǫC?AyCA@ A?ICS a@CQC8BRC)CRC.ARCx?@CaRCA@ A?o?HCje@<3'C94B}v#C84BgC84BB84B|?'CX2BA@ A? IC{@ƬCQCCQCBU*CQCI"BQCyz?I!CoCA@ A?IBQ,@ `BtBEBlB-GBlBq XB[Cs?BhBA@ A?s!B n7AqAn[C^AAm[CAn[CJA-C4t?~ApWCA@ AͣB`@)BJC>BJCxBJCrJ@ C"w?MBKCA@ A?#BDAA NBZAMBŤAMB%ڣ@C/?{AdB@@ A?1.CJ@ECChC_~C^6C_~CA^~CqMu?iCUC@@@ A?dEC̾@C,_BFȲC۪BC۪Bj?BުB}?C B@@ A?DyA)'DQCDK=CDK=C.B"B(?9DC@@ A?HD|Ak?D:A~@DFEAkPDFEAvBFEAf?%BDUA@@ A?C 6@%NC9uCTɣCThsCGCCThsC`CL}B"z?uCBtCA@ ADK@CAc@ C> @ZD> @#C> @~?0C9-@ A@ A?=f@Ca@>CγCJFCݔ@0Cݔ@A8Cy?I@C?@0A@ A?AA=BPB1@B BcVBBZCcBBZCw{>BG*B@A@ A?CN@ECޛ+C,C+CC+CfmB+Cm}?9Ca(,CPA@ A?-xCn@F]C0lCcUC*lCC*lC?zB)lCd{?C[CnkC`A@ A? KB"@-*B#SCk$B@SCA@SCAAXr?3"BSCpA@ A۸0CW@HCA2BC2ABC1A*BJCz?EDECQLAA@ A?~ZB@6^jBC beBCª BCnACW?wB1 CA@ A?B@2ؾAxBuA|B2B|BƲB|B1?tA3-BA@ A?'B|L@OCTCsB\C A\CjBG.Cir?*CmCA@ A?]BB@hsBeF CoB~F CB}F CA}F C Jf?sBp CA@ A?wCPz@:+C:C,C:CؿB:CB@|?ic+C-:CA@ A?OBb5AFJBĩCBC>9ACA7zC?YBCA@ A?kGB)ALACF{EA CA C,A C׽>0JA6CA@ A?'A %A0AݝC'A睄C?杄CAwB)> [2ACA@ A?B}@ǪBB$BBBBAB|^{?BB@@ AC2@"DB/CBCBHƌBrC ~?<DB@@@ A?QD3AADMTACA DA{/BA~?=HD&A@@ A?/C~@U2C` C'CJHCCJHCèB&$C}~?Cc C@@ A?C?JC;KCQ.C?C+B?C);Bv:Avr?L 7CBCC@@ A?9eC@8.>CAC@-CdACdAƵBdAqs?(2CuA@@ A??D@uD@CCNDCDC^ ACd~?DCA@ A?9C@CכּA9CכּABuKC~?eCRAA@ A? BM8m@"B8'B%@r_pBvXAr_pBϋAq_pB0>A8B A@ A?ՎC@DZBv DH}BCH}B >CpsC ~?D-B0A@ A>Cѵ@wCxCJCxCFCxC{BxCC~?CC8BװC8B(qEC8BO|?CBpA@ A?4gCM܍@CCޮ.B=C .BxC'g/BA@ A?Bv@BHBBHBLBHBw[AqfCx?KBFBA@ A?T0BAlA|BgC|BgC}@`NB+BhNB0O?GbBۭgCA@ A?Br@+[B\ zCB zCC zCA zCy?tBczCA@ A?B@?BgCahBIC?BIC7^AICΗo?qBCA@ A?B+@Y6OBC PBC'CC)BC: o?NB-CA@ A?~BR@BBBBBBJ@Bn?}tBHBA@ A?mAA BjGCBGC[AMA PBMA.> BiHCA@ A?wBtF A8B B BBBB B{ABřCt?*B B?@ A?l+C#@2bBI4C< BVNCNCVNC˳BVNCq?BޑC@@ A?$!C]@CBuCCCC3i@[C~?C CC@@@ A?C$A D,C;CCUCCB@JwC~?E>DkC@@ A?t Cx@ CdsRCCc(PCCc(PCWBCA.|?CePC@@ A?E`Cs@ՁC6NBrCp͔B=Co͔BSBf~CHv?zCwB@@ A?"Dz@DB~DB5,DBzBB*~?DvB@@ A?DDWA@?D-G&BBDʊ'BFDˊ'BQNA'B[o?@D.'BA@ A?vCg=?@DCTzC)CtC|ZdCtCA.BM"|??CjvCA@ A?vB_@`&CΎCCzHCy>|BzHCƖB!BEq?^CpC A@ A?rCo@ CwCCRyCCRyC4>BRyC"~?mC8xC0A@ A?$CY@LCBPBԘBɖ8CҘB-}BҘBt?BB@A@ A?A_"AB `CzBf7`C B0B*B0B8V>EBCaCPA@ A?iB@q\BB]AB~>W"WA_[CA@ A?zKA7Aym1B4 B*B4 BW@* WC?B* WC\[(?.1Bi] BA@ A?M]B%@B`BB`B C`BoA`B*|?/NBQB@A A?TZDiPAUD^ALNDAq%eDA#BA\h?3SD,[A@@A A?BTf@BdBBB}#@XC*BXCH?V/B-B@A A?wClv@CjC^ȘCŲCqCŲCŋAŲC z?jCJC@A A?3Clo@|dCemCWvCF_CѐCF_CmkAF_Cʐz?ɀCcC@A A?hCO@C&CiĘC՝CgC՝C&A՝Cq|?CC C@A A?Co@C@SCC*CnC*CbB*C]~?CCAA A?yCr@u#CFCC.4C?C.4C.0C[h C~?CBC AA A?dCL@SCWC[CS~CjUCS~C :CS~C[p}?qC2,C0AA A?CT2@C#BCBRܤCB,BB!a}?C~B@AA A?9*Co`@ӣBwK;COB:GC{AϡAk?BhGCAA A?ˡA%AH}NBέJCEB&JCB/)AAWB/)AN>MBƛICAA A?X8Ccyg@BBBrBwCrBCrB"z?BBAA A?B(ABACC1CCoBCK~?GCs݀CAA A?={CM@$C7=C~6Cw7Cy+Cw7C`Bw7Cx?g-C9CAA A?pCx@&BiHC_PB"_MCC"_MC>C"_MCCAA A?s"B}}@BByBBCB&ABk'z?B̞BAA A?䴞B @BBygrA@ A A?cv'CY9@DDC֏C-\OCŢCBƢC BE!C(w?IC-C@@ A A?p Cb%@w0B-CgBejCg1CejCBejCDY?IBtC@ A A?\s)DADZCGDϚC9DϚCoCϚCa?GDhC@ A A?OCT@֐CbCCl[CICk[C5@Bi[Cy}?%CA^C@ A A?nCTBifCB$CBBCz? 2oCB@A A A?eCz3|@&:CBM6C BC BhB BP/|?f9CBPA A A?CS@ɯB CCZ_C^CZ_CBZ_C`w?CCBC@0A A?CΔ@CPXCCUCVCUCX@UC|?CVC@0A A?B'J)@-B|@`TBM?BM?P0?NL?<D?mӫB(@@0A A?=2C71a@ԎC6 CmC!CC!C B!Ch|?cC?!C@0A A?g7Ch=@BB4еB.Bk)B*gCk)B%bBk)B@u? MBBA0A A?BqJ@BC^BrCnrBrCQO"B-Ch?BBCA0A A?ҲC A(CIC(CqΓCZCqΓC1?bΓCE~?lCeC A0A A BY?@t ChCChCBhC- B4oPBzr?CfC0A0A A?eqC:j@ }C,CwC,CmeC,C?A~CSn}?9~C+-C@A0A A?mCYt@TCoMCNCMCŃCMC0eBMCX|?RC/MCPA0A A?g(Ci@6CCK{C~n?CZ{C CZ{CJBfBY|?AC{C`A0A A?pCVr@.ZCAC7SCMCs"CMC94\BNCz}?N[C"CpA0A A?LB@{ @hBc@ЍBY@(@эBr?ӍB;=x@pBA0A A?G+APjAŀBE,CقB`,C4B0C'B0CP-?M)BCA0A A?4Bv~@B \CB \C&B \CDB \Co?CB[CA0A A?_Bo'0ALtBCtBC5T@[hB BZhBwF?}sB&CA0A A?B6MAAO}CĕAH}CI@H}CxdhAB>?A`CA0A A?>7B@&B,B+B5BuB5BPB5Bq?*B]ɿBA0A A?gAAAdAҐC AҐC#oAҐCc(@JB?DA4CA0A A?AM3AiAJC_ZAJC]@JC/A+B> AAgC?@A A/cC@8iCNËBeCyBCyBHByBz?cCL{B@@A A?*aCy@TBd(C[2BB$C=CB$CM;CB$Ctr?ǠB*=&C@@@A A?yfEC@1CYtC,БC'vCsEB(vCECLBy?+1CuC@@A A?3BJ@B:|aCsBfC_BfC9wBJBxV?BeC@@A A?C6Q@~CPCtQCCCCp3AoC}?˨CO!C@@A A?C@>C CLC( CmC( CYB( C}?ǕCC@@A A?lBCJ@"Cߗ@B{C6@BJ\C5@B&muB3@By?=#COHBA@A A?wC@C4A[tC6A\ C6AGA6AMU|?]uC=AA@A A?I C%U@3#BcC@PB{bCJ+TC{bCUB{bCq?銺B7`C A@A A?|Bc@_B5CB5C$B5CA5C q?*BE6C0A@A A?B{@_B*܇C2B܇CUB܇C~@8BpB}k?IBNC@A@A A\Cd@t9CWeA2CWeA4!BWeAaV+BUBCmz?mwCʧfAPA@A A?WbC\ZG@8CưBB3CưBކCưBBưB8}?;CB`A@A A?yBi@PίB7xdCpצBXdCAXdC,`BpbABf)c?YB5dCpA@A ABa@ZBT?C}BT?C BT?C~_(AJ5Aw?B?CA@A A?pfB2@B/ CjB9 CG*?&C(Bp&Cj?BL/CA@A A?>B>$A}AסCAC00@C5SAkB>zACA@A A?o B -AXAPB=A [BƲ@ [B,dA֖CF>oACO8BCO8BBO8Ba~?CW8BAPA A?tsC$e@+j8C$C3Cf&CǕCf&CBe&C${?6C0CAPA A?#RC>A@UMCbSBHCSBf5UCSB_EARB7|?MC*B APA A<*BMkW@B C-B= C"B7O|?8S4CnZCPAPA A?CN@CuC 'wCB!0wCC!0wC@0wCw?BCAwC`APA A?vCd@VC|C,CxC+yCxC BBʰ~?-oCeCpAPA A?pAv!AE B7BUm BB4iACUCuCBCUCO>] B#MBAPA A?d7C@]@C`CYCaCCaCDzAIBd0{?3CCAPA Aw[BAZfBCnehBCΪ BC>uABXX?`ehBCAPA A?IC/I@'+C?C2A+C:CdC:C4eB:C}?`+CCAPA AVCR@C4BB4Bˤ%C4Bu*B4BBz?&C5BAPA A?Bg=B|-ABBuBBAB{B/C[r?{BB`A AmʼnBi@@^YBBCtQBCA4Cjq?vmBC?`A A?CIH@B@B- BMBDZCMB7CMB/W?h BTB@`A A?|CD2A+EC@,B+?C*B+rB*B,6BCTCx?ICoA@@`A A?EhCD@Ё%CwBTI C`RB2C`RBC`RBKz? &CMB@`A A5 Cp!}@<B9C B_6CvAǙC@A`A A?Cxd@CCaC CQaC9BQaC:BF56B~xz?KCaCA`A A?B@IB2Cp^B2C_B2CB2Ct?1BCA`A A?cMBA?BwC6BzC[6BzC.Ԣ=UBc?nF?B CA`A A?90BC4A+ެBCBC@CЃBPC %m?BCpA A?์AA30RBCU5BC;BBHBBR>BC?pA ACB@%YC-CQCSb-CCSb-CBSb-C{?e\CF-C@pA A?yB=@ͻBІCBdCUBdC BdCj?OQBZ{C@@pA A? VBTz@>BKB3EB BIA BD\Bu}CK??BpMB@pA A?; C@լ*CZxA7'C_IA-gB]IA,XB=Ca1y?$+CdA@pA A?B%@PBcC4B'cCB&cC\ B&cC(Ok?0B_C@pA A?BG6.@Q]BfFBBFBCFBwbAFBs?BB@pA A? 8CXպ@FC%A*C#AVC#A B@CC)?PC!lxAApA A?0CY@HC:CtC:CkBC:C;(B:C{?CCApA A?,Ct{7@ C@C"C(CC(C@ lA'Cz?> C0C ApA A?C j@C|](C~Cm](CYkCm](C Am](CT~? C#(C0ApA A?<BAhB'x@!Am@v>@A<`;C'>Aa@@ApA A?N!C:@=`CBPCBV!-CB8ABJ{?C7BPApA AĨ~COQ]@kCfCfCfCpCfCR0BfC+~?ClC\C`ApA A?QCgI@*CE_COCE_CK{CE_CAB_Cz?OpC}`CpApA A?ECrM@BUGCBGCxACGC(vBGCpz?zBGCApA A?AldABPCBƤCcA(C]{B'C>DBL,CApA A?MBt@!BaLBcBSLBlZBSLBQ BSLB>W?B@BApA A?A'ABC*CȽB C*Cd@A!C B!CY?@B{-*CApA A/1A5ARBB=BBW>YC?BYCTN?9SBBA AA%AA0AC`F4A4CA4Cql=$mAC?A A?B @CwBCBBB7BCt?CB@A A BJ?F@ Bl)@5@B2*@B2*@A2*@h?B͗@@@A A?Ay@cBC\BC6AʋC͞BʋC@?apB7C@A A?&GC Z@xCCQCC]vCCBC:-z?UCC@A A?C^@CnVYC8CWVYCţCWVYCwhLBWVYCE~? .CNXC@A ASCC>L@k0CѪJB,CgJBXUChJB"BhJB\|?=2CLB@A A?SCݓ@C@G~CDCDG~CPCDG~CCBDG~C[|?FCW~CAA A?SC M@BxCTBxCr5CxC}'BxCOVy?jBCAA A+CW3@k]C{{C4tB{C7,QC{C;B{Cz?=Cf{C AA A?xٔB@BC%zB/CB/C=s@.CM^?#BC0AA A?oA,AAƨA?A8AK@(ICSA(IC>R AA@AA A?n!C^&D@[C.BcC!B)C!B> A!BG{?^CaBPAA AϞ=B<@HB;BB;B@;B6BNCT?DٍBB`AA A?+C7@CvKCsCJC7CJC.AJCqN|?CICpAA A?KBG@ZrB;uCVqsBCuC޷BCuCABuCl?6sBuuCAA A?Bi@eB4͑CB5͑C qB6͑C%OA4Bo? BԑCAA A?DCx@ CʯCZWCʯChCʯCֽ@d+C{?lo C֯CAA A?CNv@۶C CV C CB C[AC}?ICCAA A?΄B@/B]|C9`B`|CB`|C@_|Cx?BjCA A?pA[nA>BCxBCBB}9CB!?ѴBC?A AoUCl@,C 8CJC7CxUC7C+@Bx?(C@EC@A A?wPB\@qAC,?ACޏBCACe(?_AQIC@@A A?koB@BLfCԸBLfCBLfC%&B2IBd?꣕BeC@A A߆IC~@*C~C8'Cp~CfCp~CV~Bp~Cȹ|?),C~C@A A?6.CS@ #CB+CGB$8CGBGAFBE|?_"CB@A A?Bb 6@}/ Cvg(CsCGg(C@Eg(C;B3C\Xt? C9'C@A A?B*@@, Bk^C?Bx^CI%yBx^Cg}A)Bi?zBɩ_CAA A?2C@,CXC#CC0;CC AC4{?j,CoCAA A?.Ca-@*ClC`w#CrC /3CrCz{ArC |?) +C~C AA A?+BCׁA@ȎC4UB^CVUBHBUUBPW@iiClz?RAC9&VB0AA A?CR@AnCQLClCZLCyCZLC{BZLC6~?nCuMC@AA A?JdCO@N)TC1B|UCP1B@oCQ1B A^1B}?.STC-1BPAA A?B^@B C_B CB Ci BdC w?3B0C`AA A!pBiAAA A?"B@?>B>.BEB@.BgxB@.Bs4AKCy?ۈBK4BA A?BHN5@X;B4C6B4CT/C4C3fC4Cɰ~?JB4C?A A?BAN?͒BqOB͆BOBZBOB#NAOBbm?BB@A A?PB~C@5BʪCBʪC`CʪCۯgBʪCt?$B4C@@A A?W*Co@9C2yCB 9B0OC 9B"B9BSp?VPBpB@A A?0BS@:RBtPCBPCEBPCJ%BAaj?C.BFPC@A A?B@B[BluBpBk BpBfBoBl?ׅBusBAA A?Au@*A)CBA *C{@ *CrA'B>A:CAA A`BT@1BUC ;BC >BCF7ACaF>?DB앞C AA A?NBV@_BwCWBwC5BwCAKBp?JnB8wC0AA A?ZeBF:n@*r]B`AG_BdaAѻBdaAP\BcaA )i?f\BOA@AA A?ޔBA@2@BCUBCxBC`BzkCMw?oUBCPAA A?`CTI@ $tCTjCtCVjCwICVjC&>,BQBl~?wtC rC`AA A?'%B:&A0BC0HBC<@CҜAQBC$?B%OCpAA A?~KBd@@nBl1Ca~Bq1CiBq1C@C2j?SB1CAA A?!CQD\@B?BB?BAC?BJNA?Bd}?^B9BAA AഛATA ,rA4CXA 4C_?<<}lA<pA3CA A?EqC@ҲCBΟCBcCBxAC?MCB?A A?룸A_+@iBPCg BvPCAAWBAp>B'JPC@A A?B @Bij@AA A?Bv/@vC#CkC#C\WB#CLBFCw?C >CAA A?Cԓp@,raCS$B cCE$BCE$BVcBH$B~?aC$B AA A?SGBA@4dBgC4eB'CpA'CAC4Y?eBB0AA A?HBU@~{B2*C\e|B"*CuRAMC}BMCD?:b|B*C@AA A?Bx@BCpjBC*BCACv?룮B~CPAA A?^9CeM@C?C>C?CC?C+VA?C {?}CZ?C`AA A?rAG AjAŝC(AyŝCt@C²AC#>yACSC:C"SCW_B#SC)C)Ce{?G?C_kC@@A A?+Bڑ1@ك[BCVBCXCCVFBCx}k?[BDC@A A?B{<0@OBʰLC5BͰLC6BBͰLC%AiAlt?EBƿLC@A A?cCB(i@BCB C>C CB Cv?OBUC@A A?WB !V@uB ECBDCBDC(@"Cw?v~BC@A A?wYBt9@ MBOCS{OBOCuBOCDA8A W?OBOCAA A?3_CA@)CRS CB*CV CJCV CBV Cn}?)CZ CAA A?CB}-@BJ̽A&B{A0C{Ap B{As?B5A AA A?&B+"@gBBABB,BB?IABex?BVB0AA AWBW@BCsBC)BC@CDx?BC@AA A?шBWt@(BBH=Cy:B<=CB<=C"UB<=C!c?vABOCPAA A?B7@>B|B86B|BB|BA|Bi?=B%B`AA A?P"`Ba@[-BBJBBziyBBE=ABh?FN-B$CpAA A?.A-A%%A}AA}AZA}A$ACC.? 9A˸{AA A?EA2A@)BC*BCèBBj3BB|:r>%BC?A A?CH@CTCqCTCECTCb!A^Bw(z?7C!TC@A A?CzAk CfCiT CfC/CfCv@fCy?Z C!fC@@A A?CL`@?8C&eBb9C6eB+9B6eBRBNCq{?7C%B@A A#BHw@hB#~lBؤBL~lBKBL~lBUBJ~lBt?ۢB?"mB@A A?'rCG4q@CrAeC_A,C_ArB_Ai{?CJA@A A?BLP@BpCBBCVBCA|8Bat?OBC@A A?_BV@+BL,3CͷB>3CV]B>3CiAXC6Rh?~jBO3CAA A?$C8<@DCC^BC|BYP*C|B{A|B|?ENCL@BAA A?懇Bm@BB)BBuBBg@~CMo?BBz˕B AA A$BGh@HBȜA 1{B^ɜA B]ɜAKA[ɜAGj?B_A0AA A?dCCl@)CVCCYCoCYCiLBYCY}?CċC@AA A? BY@׽bB>C0 WB>CՎB>CA>Cs?cbBw>CPAA A?*OB@ByC1fByCByC<A$[Bl?B2yC`AA A?VBu@;_BALBAIBAd?OCةr?:_BZAA A?,CUACGCCPCC.BC?CC?A A;CB-A+%B{C$BGCg@nĔBmB]BNB5<CNBBNBgu? 8BeBAA AQB`_@{BыA rBxыAByыA&}BzыAjn?}B2yAAA A?"BM@XBfaAĨzB?faABAfaAeSAPfaAn??тBFbA AA A?q`BDj@vVBTA&LB/A]B0A)A0Aq?[IWB́A0AA A?ڣBi@$BiCBiCTBiCmMAbTBdy?-B-hC@AA A?`Bt^@Bd|CRAd|CIBd|Cbj Bd|Cd?>BZ&|CA A?B\p*A BC3BCBC8AC?k[BC?A A?gHC@[2CfCP1CfCx[CfC'BfC;}?G2C^C@A A?B@~BF CBJ C4BJ CxAJ C.y?BC@@A A?;B@BCBC@КBCbaAyBnv?IB^C@A A?:Bk@r;BŬ_C-5BӬ_C CӬ_CDBҬ_Cֈi?,@BMBKBMBEBMB(AqSC}?B;BA A?YBA]fB]BCG7QBC4K@4Cr}??dBC?A A?e cB֪@ylB'aB cBaB.:BaBvc'A0~C Oi?!mB7B@A A?g)B:ڶ@:1BtBAu*BtBAtB;^A2ݙC W?n1BB@@A A?R.C@CzC?CzCnjGCzCEPBzC4}?Cn{C@A A?fA A8B9GC` B9GC AA\2BAi?z=BGC@A A?eB$@8B\AB:AB;A| Bh KCd{?sBA@A A?uB AnBCuBC,BC~YWACs?vB>xC@A A?TBi@7BBBBBBABv?n5BBAA A?dAcfA 4A0ECA A?^AACAB,AB@CiƄACbc4>XHAB?A A?YpAZ AÆA=@tA<@v&@<@EA:C>&A^v@@A A?SB@y1|Bm+B^Ba+BkBb+BSAb+B1Tt?{BPB@@A A?ALAIgB!C NB!Cn*AɪC5xBɪCNhQ?%gBߓ!C@A AQ'A^%A{"B yFBB-yFB[&@LeCBLeC39?"BFB@A A`PB<@"RB9BVW@B9B2GB9Bg?9B*Hp?RB9B@0A?REC݋@;CBNBBCBCBZ?TBB@@0A?OCG@`|ACCCC>CCJAC?CC@0A?ZB@UpAB<vAB@Br ACB>AB@0A?c'JC֪@,CBMECBXBBnXCC?aCB@0A?CE AʩCCCC3CCf@B?`xCC@0A?ADwA68DBp=DBDDBAB?j%>DBA0A?!FDnA/ڭBBpA0A?yNAf2eADžBC:dBCw)BB BB.L&?˥BCA0A?zB31A׼AC fACBC,aAC`L>}ACA0A?XBE@}BBBBBB @C?(hBBA0A?8A^HA,N^ACaAC/!ABmlAB=zACA0A?C@XCB?RRCBCB4BB?VCBA0A?BAQBB BBVBBD3%BC9?VBBA0ABA'nAC@?0A?UBj@sZCwPB CBACC'CCC_^?_CNB@@?0A?\B[@mB6gB`TB CAujCWBujCC?;B C@?0A?C:^@]CԪIC7+CQ?CeCQ?CCHB5A"u?z*C=C@?0A?CA@hCq BkC2CB>C@C>CYB>Cw?BuCA?0A? CC_f@SBoCJBoCCoCjBoCYw?*mB4oCA?0A?%B&AAPAvA+A4As%AA?0A?JBY @ȶPBNBEBBZBBӂAB*vS?QBBA?0A?Bz@+BvB#BB;iBB}B:C"AE"C"A'!4C"AB"A {?vCcHAA?0A?RKCE]@b)CA)CwAmiCsA(#BpA}?<)CAA?0A?_}B@SB(bCjXQB(bC_C(bC:B(bC!o?ZTB1bCA?0A?Bk@CCJBCBCkzaAKB{?C(CA?0A?NjBF7AߣBHC ڑBHCXBHC BAڱq?ڣBHC@@@0A?yKCrM@C2KB-mCNB@ CNBٙBCz?׌xC!yB@@0A?Bg?{A,CB:CPCЙ@CXBЙ@C$BIAi??CH2AC@@0A?[Bͱ+@BoCfB#CE/B#CyBB~c?^BَC@@0A?CB@+bCoCʝCsC CsCZBsC`}? CbrC@@0ACV=@DC@oBG<CA~dAu)C)An)C?n)CAC>\5A~ CA@0A?Bd@kmBBcBB7:BBAB_p?emBBA@0A?B@|&B8CB8C &B8CB8C[n?&Bs*C@@@0AZaC@CCcC摱CrCȴBrC_CB_|?CޕC@@@@0A? Cc@pCCT CCCCnAC*'r?C`sC@@@0A? 0CWK<@.vuC٪C vUCE A&CE ANBQkKCe?OBC`A@@0A?6x3Cq{@V(CB"CBĈ9CB AB@]x?I(C-BpA@@0A?Cf@dTCXvCCXvCf%CXvC&AXvCx?*CvCA@@0A?7/C L@CMCvBCMCza@CMC| BMC{?CxCA@@0A?xBAWӏBvkCFBՁC t2C>ՁCPGB?ՁCJz?BсCA@@0A?JvB A|ABTABBB~X?BB^]?3}AyBA@@0A?6B\z@ᒢB+BjPB+B쩍B+B@wCƓw?B}B7B@@0A?BCH@C,lCCPmC.CPmCH=APmC״|?WCP[mC@@@0A?C/@CqGCĨC^mLCԽC^mLC/>BjAc~?pNCpLC@@0A5CP;b@XgCرBoC9B%C9B_QA9B{?QvCֵB@@0ArCxm@C}ZCPCcCzCcCS{BcC}?C*aC@@0A?Cf@JCtgB)C҆BiC҆B֚A҆B\|?ߙC B@@0A?CZ@>C A0C>A=C>A 7A>MCV{?> C]AA@0A? DFo@#CEbB?DUB*xDUB^ϴBUB~?8DBA@0A?:aC C@RCuCbcCmDCkVCmDC5mOA݈C=z?ZC^WC A@0A?Cl@ɵC^>C ?ֱC ?޴@C5C>-~?lC8?0A@0A?<C̤@mC A]C^A2C^ARBy^A}?_C mA@A@0A?IBm@2 C8"C^ C<"CB<"C! BRCs? C@"CPA@0A?)C~i@,C͊^C}C^C:C^CB^CA}?YCs_C`A@0A?Y8Co@%0CwCP,C|wC+B|wCBPBXx?ׂ6CWwCpA@0A?jBF@"C B:|B B 4B B@wBk2WCp?wC?BA@0A?ڊBE@tBx9BoB{ 9B@B| 9BT~B{ 9Bl?`B^@BA@0A?.ǣB<@wgBIB^BBܲBBBBb?}cBU#BA@0A?Bv@jBCBPCBPC@N'Clt?nBۭCA@0A?(C c@oCpoB8JCoBFCoB BoB3z?f@CUpBA@0A?B0@EB=CYB=CS+B=CAPBAw?B[ CA@0A?&u)Cs@QC|AoCA2CA&AAE|?tlCnAA@0A?BŞ@BCBCBC#@wsCf v?BCA@0A?JBk@ӴB@CB@C?C@CA@C|?iB?CA@0A?tB@^CC(CB@(CWB@(Ce?<(Cs}?vC(C@@0A?}CuXA͌C1C/C5CC5C'msA5C'~?C C@@0A?qCQj@)CЈA8C)[AC)[AJғAAC |?CHfA@@0A?rD>AC@CC-C VCY7C_DY7C BY7C~?emC+"5C@@0A?D)@DT^CDi_C^Di_CBj_C3j~?Dx_CA@0A?xC{@7C RCEC[ECC[ECpB[ECRy?=CAJCA@0A?HCbu@sCŒCWCVCX1CVCg?(VCs}?z3ChC A@0A?DC@L@|CLBnCACAkB{OCy?8pCFA0A@0A?9WkB܎@BkbCZBgbC"@gbCXB;Bb/?RBbC@A@0A?xBy@~1CC*.CCBC CJB*"u?3C}CPA@0A?MCC1@N4CB,CBXOCBɎ BBx?Oh1ChB`A@0ANRCp3v@'CB|$CBzCB%BB{?A*CGBpA@0A?٥C@nlCqCeCxCˣCxCBwCt|}?HkCCA@0A?z2C˓H@ CBCBVCBmНBB{?, C"BA@0A?lB@{ZBQ4BB&M4B;B'M4BAJaCr?B*64BA@0A?<C Z@4g C"BcYC>B$C@BqA@Bf{?" CtBA@0A?ۡCS@7CLXA5C XAC XAHOB+HC{?"7C%bAA@0AZB&@FBcBBgB%BgBAYCBs?6yBmBA@0A?B>8@]B8 C9B; C|B< C+rApC:z?CB6 CA@0A?C|@E)CxC}"C xC}B xCPfaBB{?n)CxCA@0A?qnB A AsB(AsB@eBsBlMBsB`Z]?AIB@@0A?nC6l@CŝC.eCCѾCCN~CC|?]fCi+C@@@0A?xAA%@.C4rC7 CyCCmBCmBC>7C>{C@@0A D:@DYCx DXCok DXC@XC~?YDYC@@0A?C@(CC:fCg.CCg.Ce%C\C}?C?C@@0A?DGp@DqjCUD uC6D uC!A uC~?nDfrC@@0A? oC}z@bCP_CY3CgCJLCgC?cB1~?-CȃCA@0A?=Cꏛ@C)BC/B@C/BlA/BL~?@C1BA@0A?C>@FCCCzҡCCzҡCCHBC~?aCC A@0A?+C1=@`CCCXCMCXCd*BXC |?0ŊCC0A@0A?EB &@DBfzCBOCBOCĹQAOC#i?ĹB$C@A@0A? }C<@C\C}NCWCNCCNCŌBNCf|?jC@LCPA@0A?[C@;AC.*CYMC*CuC*CbB*C~?r"CS*C`A@0A?xOCy@8ICxYCDCQYCSCQYC7vASYC|?NHCXCpA@0A?[BAn@B#BʤB#B C#B\B#B?Sr?ƥB|-BA@0A79C9@^7CxB[C[xBۤC[xB㈃B\xBP~?aCmwBA@0A?>C-^@ CTAdCbA"CbA/IcAbA0lx? CGAA@0A??B@45KBbrCSEBrCE BrC`BrCsk?APBsCA@0A? B,ː@ B>CB>C]wB>Cs%B>C#k?VrB7CA@0A?4?BIA@Bu/CéB$Cm >ZBcBbBfsb?B!CA@0A?B@ABUeA;BA@0A?BB@n@D%C[yC7GCJyCUm_BJyCB%By?A%C8CA@0A?Bc@ .B3BhıBCBsBCB @ЊC(To?ڹBSBA@0A?ӑB@/BH-CJήBH-CBH-C AH-C(t??ɳB,I-CA@0A?XmA3A B^AC(CigC(C:ARCF}?胳CC@A0A?%VC*.@YCdbXCnC;[CVC;[CBB;[Cw?C ZC@A0A?5CA@nCICC C D Cȼ4C C~?ACCAA0A?>&BZ@Be[CBBXOeCtBXOeC;CB_=EBf?BaCAA0A?^C @,bC%C*sCW#CCW#CtBW#C{?;nC#C AA0A?C؝c@MBCtRCD!CCCCHCCDo7CCi9|?}FC.C0AA0A?B+_x@LCMBnqECPBC!&&C>C< C>CXPA)A{?(CG!?CAA0A?*FBw]@#BئBdBk BQBk BE Bj Br?ʌBBAA0A?nФB@q#BVTyB%B'yBIB'yB$A'yB<o?E,B{wBAA0A?IfC]@JCJCE}HC}JCcC}JC{0]B}JCTW}?O&JC7CAA0A?Cل@CBCBBB͎)A2C>z?(CBAA0A?A[,AsB.BtB-BԫA~_C\PB~_C.?tB-BAA0A?B@@B B)-B B>+B BBoBC&t?43BBAA0A?!JB)AN:BoAM21BJA2;BLA @nAf?R;BQ[AAA0A?ڒB Aj#(B C5'B C,B C#+B Cl?!(BC@A0A?kC2X@9TCC +CDCsCCCBCC[u?:CvxC@@A0A?C5@CC! ClCcCWCcC* B1C2~?4FC C@A0A?mdC<@1CC*CLCoCLCBLC-9x?3+CC@A0A?}C.F@%C^CC:\CC:\ClA8\C*}?]CoZ]C@A0ACU@ﱛC CCCt_CCѸB諿B}?ÚC~C@A0A?C@sCTBSCeBZCdBB!C|?( CJcBAA0A?B=m@BџCtBxC*~BxC}ACQO?aBcCAA0A?xCem@TdCvCmCwC|CwCӑpAwCL|?RuCKwC AA0A?4C=n@gJ$CNCCNCK@CNCjBNCAy?PCLC0AA0A?Bdq@BQCpBQsQC6 CQsQCXiBQsQC_d?3BPC@AA0A?[dC,C@HLBCnC>CnC CnC3BnC$|?ڜFCemCPAA0A Cޖ9@hCVFB8 aCFB6TBFBj+CeCz?gCECB`AA0A?Bqd@ptB0pCeXBߝpCBߝpCpa?pCx?B&ooCpAA0A?-¨B J@%!C<Ac8 CqAZAyABObNCwu?fCAAA0A?.CjQ>@!-CC+$C'C2C'CjA'CJ#{?r-C:CAA0A?BAdAWB=OAVB_@VBAՔC"!?TABAA0A?gB%@vBJC BJCZBJCRA&ŻB8ps?sIBICAA0A?o_BB@vvB2B68wB&BB&B B&B.k?wB BAA0A?3cB0AN_8BC7BC,KBC#/@CY?}8BCAA0A?bC+@DB}BB}BJC}B9B}B|y?BY}BAA0A?B!|@>BcCZBcC]BcCd-BBux?/B:dC? A0A?@D_ADDeBCDWBC@CCC& CX7C& C>/B& C}?%C:;C A A0A?h:C%9@MCCB<CBBB|)CByC[4{?čCB0A A0A1C R@CBH%C^B IC^BGfB^By? CB@A A0A?CY@DCܨB>C BB B>BHjC8z?pFCBPA A0A?۲8CYa@;CAN CA6]CACB Am{?C"A`A A0A?"C55R@rCwC0aC}CtC}CA}CRpz?CϮCpA A0A?LC7@CJ@[B@C@an@@w?^C@v@A A0A?wAA)A/CAI/CmVA%ױC'B%ױCM>A0CA A0A?BN@!BYBM B&Bf=B&BB&B\? !BBA A0A?B='@iB1AkB~4A6C}4AB|4A2.p?DjB=AA A0A?TB@7BUC|BCWCBCWCQBCWC]Mn?BZCA A0A?{DC#w]@ֳ>C'BCN:C'BC$JC'BCPA'BC.}?6>CBCA A0A?fB*@ӟBBBBBB̖A_C"w?BWBA A0A?s8Bɴ1ABgB qBgBAgBjBCDi?ȇBB?0A0A?vC7@wrCC޼aCJCDCJCY3BJC{?cCN)C@0A0A?aDCɣ@@CBUC QCɧC.CɧC BܓCz?#IC1C@@0A0A?Cg<@ K2Cv"B~ 7C%B_B%BjiB t]CHJv?& 3Cl$B@0A0A?5C[@CCC8C3mC8C@8Cy|? C-jC@0A0A?iC齫@CCE+ClD,CiC,C\;B Cޭ~?C++C@0A0A?WC@ Cp>Cb}XC0A0A0A?ڃ4C"W@HCl:CC:CzHC:CAB:C]y? GC:C@A0A0A?BW@C&B6ICޙBBܙBKE7BxC4v?(CBPA0A0A?}BA0vBRCqBRCBA]KB7B]KB:?qwBÔC`A0A0A?fBؚ@BzśCiBțC4AțCiBCKn?B|MCpA0A0A?^gCg@VS3CjC*CĶC4CĶCjBĶCq|?K2CCA0A0A?2CN[@z8CͬC?4CȬC{BȬCyBY C]{??8CICA0A0A?BFX@&BCBC HBCfAaiC8g?u֍BCA0A0A?bB0@:ubB+BgcBBGBBAZCZ?|bBBA0A0A?^B>K@B\C\B\ClB\C ^@+#BTw?2Bs\CA0A0A?#6Bk'AXB|BBBtA!C+C!C+i?BBA0A0A?ϯvB:!@BcTCBhTC2AhTC:B5Cwx?BAiCA0A0A?]BOAhBŒ6CTBŒ6C3FBŒ6Cc@J0#@am?ViBэ6C?@A0A?$CYAm@9ClCHCtvBYxBtvBKBCt?3ACeB@@A0A?mBCN~@U CE:PBC7UB|MZC7UBȷB7UBɇt?JSCSB@@@A0A?Ӑ\CyG@f+C;B_.Ci[B|Ci[B_@Bg[Bx?i,CUB@@A0A?xC@C?1CoC]NCJ C]NC(uB]NC"}?0CiC@@A0ANC|@/C&-C!3(C .CiC .C7B .C7y?7$CD0C@@A0A?*C I@tB6LCBULCPCULCBULCv?BwKC@@A0A? 1Cq@C C\BCC)lFCC5TBCw?uCXCA@A0A?t[C y@odC N6Cb[C 6CRC 6C!A"@z?efC6CA@A0A?%0BN!@zA?)AcA9ApA7AARC > AA A@A0A?C^@;B)FC維B)FCJ)CC)FCB)FCr?6\BFC0A@A0A?8B?@[B$B6BTB ҃A)C*B)Cj\?C&B©B@A@A0A?%C8CP@ߗ$C\A*!C\A#C\A @\AE{?$C@<[APA@A0A)CñJ@6C-rC^/CqCCqCZMA8C{?@5CDC`A@A0A?ԤBUA1 BBgBIBL&@C"BC3Y>!BBpA@A0A?iBW@BB!B>B!C>B麼B>BSt?OB(BA@A0A?YBb@AUC!A2C~B2CߥB2C+o!?ܟA%CA@A0A?bBnܭ@oCaCy CKC,ۀAKC'B) B-v?ԵCrCA@A0A?;CDZ@ BvuC܆BiuCACiuClBiuCwx?'BuCA@A0A??C!jj@8C5CC5CB5Ca@j?z?C4CA@A0A? B:ARB CB CLaA CAC{3;?oBܜCA@A0A?B@yBvC\BvC!BvCٴAvCNr?kyBm}C?PA0A?z=CqAGC pC2CJpCCJpCLCJpC~?׷CpC@PA0A?-C9EAbŠC~w-C"C.C C.CByCBd&COBd&COA1CdAo?B&+C@PA0A? (Cb@ ;C#A:4CSA CSArBB9e=Cx?=C*@@PA0A?qCC!ACS_CACG_CCH_C^BI_C~?JCѳ_CAPA0A?gCz@pjCkCfCkCq CkC^BkCR}?GiC]CAPA0A&B[@^BG C,fB CSB CJAICm?B3;C APA0A?[cBU@~B&A^BABA0A^LCp?BA0APA0A?#Bri@z+C0C (C0C8KqA0CWCZC$y?n.CMC@APA0A?ECPS~@#&CeC CCJcCCBC+:|?mn)CCPAPA0A?K0NC!m@|jC*KC*^C]KC"59C]KCBຼA|?gnjCqKC`APA0A?"IB+h@B|2BʜBn2BnvBp2BX#Bt2B@u?Bu6BpAPA0A?F0C:[@ MCd:CJCa:C\Ca:CigB @|?TmLC:CAPA0A?!CB4m@MB_CB_C8B_COMA_C"x?LBOCAPA0A?JB@ӼlAAlAD AA^BD A_"BD A2?άlAAAPA0A?Cs@1}BCnC=BCnC|CCCnCroBCnC{?+BZnCAPA0A?PBI@NTBB>BBBBWABN3x?gBqBAPA0A?WBNAB8ByB8BB8B*6A'NXC@p?WBpBAPA0A?ǿSB>AQjBECVBICz4BICkGA%Cn?:iB3C`A0A?BФ@C CCoCCpGEBC;B4C? CC?`A0A?XAɳAےBðCBCBfCBfC?"BC@`A0A?epBeL@B: CB C֢B Cf0B C&*/? BC@@`A0A?#C @C8B{CB8(CB㝸AB$v?pCIB@`A0A?&C}@ C0CC/Cz%!C/C A/CRs?CI.C@`A0AHCWn@tBBZBBĂCB\CBWYw?ζ CSB@`A0A?=\BkΧ@%AŔCAMC㖪AMCǗ@MC>- AC@`A0A?!BK@M*B|BKB(B\B(B3OAĀCs_?ϑBBA`A0A?5CO~@CYCPCYC)gwCYCAkB }?CZyYCA`A0A?3sCQ @2C1?R-C1?C1?)C1?#+}?|0C˳C A`A0A?:B5;k@<^BC)BC}BCbAC{k?uYBs[C0A`A0A?!.ZBk@4wB2?_$B? A?oCFBl5C]?nBY?@A`A0A?sKB@iBP;Bk[]BBzABB+C`\A7=C@pA0A?B]j@¯B*)5CZB)5C9^B)5C~wA&Ô?hh?YB|6C@pA0A?1mC@CC\fCCCC2ZACes}?u8CC@pA0A?`%CTH@/1BR@nB.=@+^C/=@ B/=@w?'BLC?ApA0A&BIF@CAB*BBB/tBBBAЉC(vx?C|{BApA0A?tCmPE@߰*CvC&CC@'CCAFeC {??,CC ApA0ACK@2)%CbeCxCaeCuBaeCnBEBy?c'C*eC0ApA0A?5PCzoV@GCB6=C/B5]C/BA/B)P|?CApA0A?\B@HBqB@=BjB%_BjB$A6~zCo? BpBApA0A?Bɪ@6BGBgBFBNBFB׉AFB|{?23BBApA0A?ANx*A!B9hBdB8hBIΧ@9hBAړCg56?"BbBA0A?B5@^B4CWB4C5B4C@{@4Cݕ? B4C?A0A?l3BJ;@I]UBC/_OB|CC|CB|C`?1emBwC@A0A?gC=$@CzMA#CMA0CMAzÐBMA}?ԆCj VA@@A0AfBLG@8֐BC=BC^lBCDCBC9h?jBmC@A0A?(XC^@sDC sC.?CsCj kCsCE/BsC:q|?|DCosC@A0A?SQBrF@ CAEBg| CEBoBEB|ABѕC y?r C\B@A0A? BD;@ǴB CC(bC>CsSB>Cb(|?{6C%^C AA0A?*CՐm@$C8BBjCBdCB""AB`b~?&C B0AA0A?<Cp-@%CXC4CXCBXCژAxcB"z?d!CeC@AA0A?uB^|z@جC}AmB}A B }A}BCCXv?CkvAPAA0A?AH2CbC@FC8[CFlGC<[CC=[C:BB|?S3FC-[C`AA0A?ȂB@_BCC:B$1C|iB$1CHBFbCAt?B*CpAA0A? tB@JAICȤA^CtqB^CxB^C)?wAזCAA0A?9 BA3AAA*AA+A5-Af=KC?,A""AAA0ABē@r;BVo'CpBWo'CBWo'CAVo'C!w?&ABp'CAA0A?NB @C/hC"C/hCUB/hC9B)PB}?C7hCAA0A?p BKA@䰴B4=&CDŭB*=&CB*=&C>=&Cmv?YB-&CAA0A?\(@C C>(@C\yB>(@Cs?ֶB.1@C`AA0A?zfB@BGCƵBGCS_AGC(BŜAs?ֽBҔGCpAA0A?AMX)A5AA B;?qACBJACB(@bCy>DAHBAA0AqSB[@BC $BCoBCvACx?ƜBCA0A?U*Cu@̞C]5qCY5ő:CY5PBY5?ȽCx5?A0A?sYBG?}9BFBy5BBJ*BB2@C?N?75:BB@A0A?/^A3@C@vyB?Y@wB+@ZC,AZCD=Ý@]KB@@A0A?B6|@bBd"CגBU"CٳBU"Cn ARB/s?ŅB"C@A0A?mCT/G@N$CwC#CwCBwCv)BBz?g%CwC@A0A?x`1CR8K@QC tB%CtBVCtBD BtBEz?0CB@A0A? AM@pBBrBBbAyC(&ByC!?ppB&B@A0A?B@zBz B0#}B>Bw?&BsvBBEBp;BtBnCtBjZBtBBOB AA0A?qB?C@B~CB~CB~C?~C u?ZBC0AA0A?I%A AAVC/AVC1G@C-AC>XAٜC@AA0AAABAXpCT#AXpC2XAXpC;(@cqB?1A]OpCPAA0A?7A@3A("Y?A Y?k0A!4CcB!4C?hAeT?A0A?B+@h#BCBCJaBCBCNi?~BC?A0A? ]B8@J6wBޱC(wBC? BC{Ar'C0L`?++wB˭C@A0A?UBf@52BB12B9BB9B/TB9Bb?f3BB@@A0A?SQB/@ذBcC_B]C/B]C@Cs?B[FC@A0A?BY@BAAxBAABAA4XA;SCx?SBA@A0A?{A#@/xB?:ChwB7:CAntC!BmtCKC?xBC@A0A?sB@ qB{ BBb BB` BmBVCx?Bg B@A0A?JBue@`TFB"B@BBCBBB;Jm?ݍFBBAA0A?mBY@4BHQABmQAsBoQA[3ApQAn?!B NAAA0A?IBeo@LfUBALB?AJB?A9A?A5l?0TB^A AA0A?BtA69BL7C̱/BH7CXAH7CAQf@]?mt:BD7C0AA0A?2B)@ B.@C)~B6@CB6@CDFA_s@A1w?B"@C@AA0A?KZBsn`@B{B)B{BB{B{A{B;[|?BoBA0A?&CA=BBaBBZNCBRBB?>BB?A0A?BHT@qBUBCWmB^BCMzB^BCkC@^BCƟi?$sB}BC@A0A? CJ@J 4C'7C0C$7CZ B$7C'Bk@]|?3CƤ7C@@A0A?sAA:~AECEvAHCHc@ BA!B n>iqAC@A0A?cCiP,@=CCCCBCɱABz?"CC@A0A?6Bali@BLB6BLBBLB^B-SCr?:B*DB@A0A?B @CBC<ѳBCJBCB`Bt?vBԜC@A0A?++C^@HB7CVB7C^C7CB7CY}?BA7CAA0A?Bq[ABjC)BjCBAjCy5ACڨC?= B=jCAA0A?޷AA=*bA{'C{FA'C?'CE,AOCW>dAI6(C AA0A?0B 5@CɷC*BʷCH3BʷC?o'Cq}?CﻭCA0A?/Bs@+B5 !B)5>B)5A4C?@9B5?A0A?PHBAkANrC/QA`rC9A`rCh@brCJ72?*ADsC@A0A?jBʗ@JB#UCʐB UCB UCA!UC!w?7BGC@@A0AA=6AGAs%C=A]%CE@^%C"t@ܬCA>|HJAk%C@A0A̕NACAA0A?g[Bs@nBJBYCBMBYCbBMBYCUA2 BTv?;BKLYCA0A?iB@_LBB5BBҺBBAB3?gLBB?A0A?rAB@B\͔C㍌B[͔CEfoB[͔C&Aj5BJv?BǔC@A0A??B@K.BD1B:BD1BBD1BtA0Q`CF$|?dB|1B@@A0A?{4B͵ A\V@BCG@B3ABn9ABٯ>@bAB@A0A?A4Av1B6LB́!BC4Cw*D4C8cCC4C?C4C@@A?ojC o@[?lC4Cg]C4CxwC4C`A4C? eC4C@@A?_C@WCbCC\CCAC?CC@@A?>C9l@B!78/C(i7P`C(i70DB(i7X?"C Y7A@A?6EDyAD6D6DA4C?FhDA@A?C@^C6 CY6CY6@b]AY6?[Cd6 A@A?͵ C-@$݀BC_BC\CC$CCׁ{?gBC0A@A?C-Ҳ@yBl77C 7C 7v@ 7.?8C#X7@A@A?CAAmlA7A,@C?@3Ct!@3CdB4C C4CPA4C7?B4CpA@A?x3lCe@>CW"6͎C{#6VI?C|#6B4C?vC{6A@A?v|Ck@]CBO5+XCO5ӐCO5BO5? ZC"C5A@A?B,@B4C[B4CUB4C`P@ &7?B4CA@A?5B}@5B3Cc)B3C`uB3CgB3CGi?0B3CA@A? sB[ALC`6B^6&,B^6lB4C}?D CW6A@A? AlABݸV6BV6EA4C6B4C>-#BR6A@A?LBgAB4CLJB4CorB4CT B4C?)OB4CA@A?ߺAiAA3C A3Cu`@CEAC]=\A3CA@A?Cи@rB&5)?B&5p&C&5l9B&5?vB5A@A?A6ZA-B4C]A4CxbQ@}%7VB%7%?jB4C@?@A?u*Cߥ@;&;CK²C C͛Cc|C$BB$B X\CICg{v? |CB@A?@A;CR@UYC6B[C B5C BɏBCUCnz?\Cg`BPA?@A?CB۲@C`_BvCCB/{CCBA吀CDc}?CħB`A?@A?zcC.@|XCĭB\CRCBkCBABf{?;]CBpA?@A?tC^@0 BCOVB8AޚCA?@A?±A~8ABuCqBuCLi@B?$BBΏ?BuCA?@A?N}WBIAjBSXC^BSXCT,BSXC޸HANBok?`jBdXCA?@A?$rC]@C)CC)CZC)CA)C}?C)})C@@@@A?aCp@(C>*$C%NCr%C&kCr%C Ar%CWy?TC'%C@@@A?$2Cc@f,Ce}CL5Cw }C"Cw }CuABWw?;C}C@@@A?{CSw@nsCNC Cf,]CCQCC"MBCz?leC|!C@@@A?~m2DTt;AX.D C!DCOBDC CC/H?&DfC@@@A=DԊA^DCQKDzC/DzCB=LC<?RDO CA@@A?oC%hD@BCCRClC3X2ClCq8C7C!{?oCCA@@A?C#@XCϐBc{C BC BCP|C3~?sC5B A@@A?p|rC9@YlCnʁC:cC4gC9zC4gCA4gC@&|?bCC0A@@A?C4`@CtCCLCCLC_"BLC#(}?CŒC@A@@A?F+uCU@+CjC+CCLCCCCz?,CuCPA@@A? cC@,BrBBnrBCnrB3BnrBp?BmB`A@@A?BH1AxfAB{C:B{C=A/WBނB/WB>^J>BzCpA@@A?UCP`@-C~B (CBBB7BfCWx?I-CwBA@@A?#B@B(C>B'CRөB'CZAO CEt?]SB CA@@A?MB@C7CB7CKB7Cs>=Ag@2x?\Cd8CA@@A?ŎBi@BB[BB+BBaBpCn?{tBBA@@A^$CuJ@BBEB0BKVC/B;B/By?3BzCBA@@A?BBݙ@CCKCC-BCPZB{Bby?!C镃CA@@A? C')q@B–C|BC CC-AC5_z?}BCA@@A?i5B|9Aǭ ALC# A\C|;A\CUVG@\Che>A.ACA@@A?C@BpCBpC!CpCbBpCO|?71BpCA@@A?w^BR!Av8BcCK'BcCpBcCБAcCBj?g69BdC@@@@A?"B@fC,BeCFTBBETB6B$uCGq?G%CvyB@@@@@A?Cl@BC'VAGC+AJ C*A1`AAR}~?9CëA@@@@A?[kC^=@6WC?B>CBDΆCB˝BBy?FCB@@@@A?BC9@'CsCC&TCC&TCG4hB*C}?)ʾCDC@@@@A?C>@ChaA]CՃ@ (CՃ@ *BՃ@)X}?C/@@@@@A?dY(C)]@)CpICCXC{#CXCAXCدi?C4SCA@@@A?pcCaF@wC +C,C%CɫC%CٟA%CY{?웑Cz'CA@@@A?C+Z@OC﫯CDTCjCUCjCB&C|?YCYC A@@@ACy@C@@'C("Z@FC%"Z@_TA!Z@r}?-ۗCۊQ@0A@@@A?`BSl@+CVX,Ch C@1CLB@1C4B!ϲC!m? "C0C@A@@@A?HC?ۣ@BC BC CCCCy?8BmCPA@@@A?VDCDY@*C6A.&CAXCA#GBA6y?1C@A`A@@@A?CF~@ABX#LC^BILC:CILCGAILCrt?^BTMCpA@@@A?;C̀@!3C]BÍ-C#]BqkAC#]BnA"]Bz?\5CߔBA@@@A?^BrD@sBsCanBHtC\ BHtC xA$:C3Z?pB CA@@@A?wBO@͸ CAUCWCUCBUC>BndBzw?CTCA@@@A&Ce[@CFC@BCrFCCT1BCبz?$$CGCA@@@A?6CErj@nC_Bd[C_BYWC_BB_Bv{?gC;BA@@@A?J,Cp@CÃAC)CACpCAC4AAC^{?!CTACA@@@A?[B+AATz,B4yC-B/yC#A/yC6B]\B2?,ByCA@@@A?ȠAA AKG*C(AOG*C[UA#CB#C}>|OAS*CA@@@A?IB2A#}BOCoBOC#BOC AOCM t?L|BBCA@@@A?BZ AB8(C'~B8(CB8(CmA8(Czw?ʋB(C@@@A?CF@ CA9CBurCBBfZCq}?#CB@@@@Agr}CdD@RCBC-DC B@@@A?, D9@ DMDBDhx B$] Dhx B/AVC~?DFB@@@A?*C4t@C8CCuC7CvC`AzC|?CCA@@A?WBVrq@$CKCpCvCAwCh4BChh?C!CA@@A?}93C/@w)CnCNC CIrRCPA@@A?wEBl@ CYByBjUBbB`CbB BbBwjV?0jBWC`A@@A?eCCy@-CBr*CBUCBDj-BB~{?M(CO)BpA@@A?6dBp@5BiBBiBfBiB˅ZBfڑC~o?BwBA@@A?2nB:@C,BC,BoB,BB#KCw??CBA@@A?WVB@JvB>C}B3>C5B4>CeA4>C^m?1B?CA@@A?ʢBN@B4 CBCwBCxAJBr?u9B[CA@@A?C@,BB BBh.%CBNBBs?LBdBA@@A?>1CT^@BC\BCوkCCBC&{?B:CA@@A?gB-A1N$BRטB$BUטBWZBUטBXAUטBS?W#BgBA@@A?FCV@[BiZCBiZCsCiZC)VBiZCXw?H?B|ZCA@@A?A8AK/BfC֐#BpCzp?kCB8LCNE?#0BԼC@@@A? B1v@_C)dBaCBBBDfwBC1j?DCB@@@@A?B{1@dCKC1 CVSCAVSC5vCAXn?1CQC@@@A?C@Ch]CCӄOC8CӄOCB&A9"~?C+SC@@@A??C@dC\#CC9!C~TD9!C1B9!C,~?C8"C@@@A? C+.@֓CBӁB BC BA BV?BHB@@@ACE@4oC:BČCB.CB0IT?B${?1CBA@@A?̿HCmM@o=C?BC4C"KB3?VC!KBBKB.|?=CZBA@@A?_xBth@*fDB1߉Cs>BU߉CoBU߉C[EAU߉CX]?+?B$kCA@@A?4C9r@CCҁCCwCCBCa~?9ŁCCA@@A?B \@RBt=>B-9=T!B-9=TuA 4Cx?dBGb<A@@A? B-:AA=CoA=CA=Cs@{ C]?A鬠CA@@A?ִB@VB a@̡Ba@ҶBa@/(Aa@s?B*@A@@A?P'B#HA26A&?B$A8AB@@@A?CEQ@BI(CbBL@J1CL@3BM@n?BWC@@@@A?WC@^gCITfB7C4sB"C4sBuB,pC|?ԟCUoB@@@A?xBR@@BBBNiB @LiB ACnC2> B6ZB@@@A?IEC(@iCtB-[CV8BCV8BxBNCcs?aC`B@@@A?)!D-@.DUC(/D?1CD?1C)BCe?$/DC@@@A? B@C؁CPKByCh8@yCgB͋By\?Bd_~CA@@A?ᏛC@<\C7.CɧC"%C|C"%CXBȬC{}?Cј(CA@@A?CF@ۖCC CCCCn9BC!|?(C GC A@@A?"܍AxA@zB] CpBCΊRBACuBACh[>pBC0A@@A?6eB;@A CJB C+8B B>8B ?/ΘBM\C A@@A? CM@0Ct5_CL,CaCCaCB>86B6w?ε*CxbC0A@@A?CKA C+ŮC-CCyӞCC]B)C(R~?CwC@A@@A?Cx@\7CC-C~?C.C~?CB~?C;~?C(CPA@@AB0@~B_ BB^ BkB] BfBVC dm?$ByB`A@@A?~yB@eKB^qFC2BqFC1@qFCOBČAQf?KBLGCpA@@A?xB9n@h-C䁄C*CいCQBいCDBB`qz?t1C|CA@@A?ϘBE^@9BxCԞBxCHB CxC `oBxC'q?BAxCA@@A?eBz@; BGCAB>CB>CeMB=Cq?^BCA@@A?s C y@ C^B C~B-C~B@Cy?ܫ C(\BA@@A?<#C_@PTC\ѦBC_ѦBo8C_ѦB1?B^ѦB٨{?CڦBA@@A?B3@PBqCIBmC<CmC]BmCx?]FB`CA@@A{C(@~ CCOCCBC*WBC{?R C*CA@@A?ڛB@B,oJCB,oJCZB-oJC-!fA.oJCT!|?}B}pJCA@@A?.Bg@~BB.BB]BB‹?Bv?BֻB@A@AƳ|B&Y@BUeFCCW7C@KBUn@kECUn@B?=C;C@@A@A?}BX@KCCCC?CCNCCsS?C C@A@A?CK4q@xkC؞B{Cj2B Ci2BBf2Bz?EtC-B@A@A?8BG@ACkCPoC[C7B[CBBn?d]+CzcC@A@A?}Cُ@ϘC$CCC[ףCC%ACUo}?5C'+C@A@A?CC@C4~CCCnmC+CnmC6CnmC]}?ZCCAA@A?XB6R@UtBAB@BBBBu@PC]?B2ҪBAA@A?BZ@v'BcB2BLB_6BLBuA:ZCng?Bx"B AA@A?{}C{Ħ@xZCͧB MXC2BBC2B*B2B$@|?`CB0AA@A?uB@ϣBPC]BblPCBblPCT)BblPC %e?˛BOC@AA@A?C}@C7LA-CcAaBbAAALCt?CAPAA@A?sB=½@IB?C:BC!AC>%)BVgBS?WBEC`AA@A?6C @tCBwoCBϢCBNBBKN~?tCBpAA@A?hB}@HcBC=]B-CS"iB-CH>@-CD)^?]8gByCAA@A?H`Bȑ@H\B5BPPQBB;Y BB)A2C G?\B:BAA@A?pB}@$Bm?B?B?A?0u?IBCAA@A?YB1c@jC@yC@~B@ BР:Cw?CF@AA@A?H,B.A,@˶CJY(@~C:@~C >~C_=Y$@xCAA@A?.B#Aȣ&BC­&BCACA#C'CC?)%B+CAA@A?RB@|BynC?B&ynCX B%ynCHSA%ynCjZs? BHnCAA@A?BB@BB]BB]BQbB]BdB.~Cx?IQBGBAA@A?DqBO-A_*NBLDC AA@A?B{@IBCBBIC -BIC R@'Bc0?ξBB@C0AA@A?^C)sW@ CbVC\ CdIWC'BdIWCFA% B}s?nC2YC@AA@A?C~@#CF?iTBHC@ A@A?*C@@CG@tHCQA/CRACgBkGCy?KBCAvA@@ A@A?!D zBAzUCxчBjDl;BR Dl;BAl;B6?CB@ A@A?C#@ŲCJAUCACAkAA}?bCA@ A@A?T9CBv@v C6oC)CdCUPCdC%k}BdCt? CGhC@ A@AxgC4@ŹB_CVBRCCRC>BRCTc?(BixC@ A@A?nwC ɉ@ iXCgB]CyB=.CyB))ByBZ{?)^CBA A@A?N"Cͪ@yC>CC>C7C>CPL^B>Cu?C+U=CA A@A'C@WkC2@~/dC@+C@PB@M|?gC@ A A@A?u>CYRA_BC BbXCCbXC;CbXCZp?ԮBC0A A@A?yC7@ nC-C[iC`CC`C 6B`C}?spCƾC@A A@A?4ZB}X@yBƚC!A&BA A@A? C _@CtCPCzC%CzCuRAzC{?CLCA A@A?|B›@wBXBABBhBB^A"sCu?VB߮BA A@A?x'B3\-A;MBh;CA0A@A?ZB @8XBSC7QB'CeaB'CA'CqD?DYBSCA0A@A?2zB[@B? B~BBABT B-XC7?BB A0A@A?#kC|@XCărCUCvrC0{CvrCPBvrC7}?YC.qC0A0A@A?,CV@EClQC> ClQCFCClQCת]BlQCx?|C8PPC@A0A@A?B>BGu@=BAy9B5 A[3B9 AB= AZ?H8BZAPA0A@A?zKB<@iieBq$BK`B$B&A$BpAJ{C\T?͸`BB`A0A@A?Bd@B=uCBfuCvPBfuCJbAfuCq?hBTuCpA0A@A?bQC${@ːC wC(CwC`CwCAwC~?ÐC|%wCA0A@A?LB_@]mBC?LB+CNC*C?FB*Cu?BfCCA0A@A?׍.CQ@'C~+Bp(C}+Ba/C}+Bl@}+B^|?c'C#+BA0A@A?GJ C跀@OBuB[B?eB"C?eB.bB?eBVy?BY_BA0A@A?Capm@kCPC?CNCWCNCQbAOCB|?fBCQxCA0A@AaB5 AV19BA2BAG\PBAb@A [?:BoAA0A@A?ABU-ACBBBB >_xCdB_xCer?TB,B?@A@A?5B @T8CsC K3C hC&@AC:C?Cmm?2CݘC@@A@A? C{@:!C3C!!CCBC`~wBGBs?\!C^C@@@A@A?t)CGא@8CC_EC_C<C_CH`B]Chx?FFCC@@A@A?gBV@B{CVB{$C4A{$C#^B=C;A?=|B-'C@@A@A?D AD#BnDUB- DUB;BVB4>?WdDB@@A@A?Bc[@BB-BC5BVBC5BR| BD5B`?!BB@@A@A?7C@MfCbCCrCʐCrC*@b9CR}?68CCA@A@A?(C=@B9CjBSdCBSdCߘ@RdC q?jBۙCA@A@A?B[@B@BR@;AL@B9Cl?BBף@ A@A@A?}CR@,C45AM C+4AC,4Ai(BC=C5~?cCQMA0A@A@A?dWWCq@1-C:3JCg=)C2JCC2JCB2JCl|?|.CHC@A@A@A?R3CH;G@ۭ/CջB*,CIB:5CIBiADB|?K/CuBPA@A@A?шB@dwB)ZsABA@A@A?yBvd@BlPC"B7PC9B7PCAC s?>B̓CA@A@A?eB@taiB?1CFjB<1CM[|B<1C@<1CJWd?iBP1CA@A@A?Bq@ԮB]C)B]CnB]CFA]Cv?BMhCA@A@A?jB1ʳ@HBCBC.BC~AC@&o?BCA@A@A?A1ATA8CnA8C.A8CxAzCD%*?A='CA@A@A?t!Bn-@B2hsC6`B2hsC{B2hsCdӆ?9hsCJx?B"fsC?PA@A?}CA)CPICCCuHC9 CuHC'aBuHC}?5WCFC@PA@A?*CPb@sB2.AB0U AԁC0U A B0U Auk?PŸBh!A@@PA@A?=:BKsp@B6BbxBFB)CFBkAFB0p?BuB@PA@A?rC1A4C~BC|BC|B%C|BO~?[CeB@PA@A?"OCPn@(Cyy;BY"C=BC=BkR BbcCFv?+CCB@PA@A?<C AP%C_C?CpCUCpCXBpCVk~?ȴCpC@PA@A?UC`@8BC BCtCC(FCC51x?#qBVCAPA@A?/*CQ@.BB8 B^B3PC^B[B]B]x?xB BBAPA@A?ԑAu@uAEBYA4EBnANVC2dZBNVC^R>BB APA@A?GA*AAC ~A:C@ѡCA BѡC6>4B>C0APA@A?ؘ6Cs7l@JlCECvgC6C"C6CB״B׋}?joCҵC@APA@A?^&C[&G@&C/ C*C, C&C, Cq@, C7{?='Cb CPAPA@ABk@cB BHB BtB BB Bq?BZ B`APA@A?;C?@>_CxBYCxB8CxBsB8rC}? _CFxBpAPA@A?C@@b C`?C3 CM?C*CM?CC@M?C[qy? Ct`?CAPA@A? 4AA{AcC|AC(KW>CyA|C݊>EwALCAPA@A?;{B@)ҢA'CUAm-CMqBm-C Bm-C$?A;CAPA@A?ZBʫ@+B5CB۵5CZB۵5C?۵5Ct?|B5CAPA@A?B8@иB6IBıB6IB;B6IB[A6IB x?kB5C@`A@AzCC@r"CXBCjBaCjBBjBY"~?QCwvB@`A@A?9CA@=w2CC8-CgC`QBgCQBկBNy?z 0CwC@`A@AcCb@mC]@hC@YC@{A^8CW}?nC@@`A@A?4CŌ@CXC.C\XCqC\XCzqB\XC}}?C]CA`A@A?:BJ@ B'JC7BJCDCJCQBJCq?BjLCA`A@A?}kgCV\U@CaC|CaCNCaC6B`6By~?C.faC A`A@A?zCz܅@$;CC6CCCCCCa}?]9C'C0A`A@A?VBv@NBpCFBnoCrBnoCX)BnoCQ|]?LMBbC@A`A@A7B @niBdUC ?XB _CB _C/A _CMX?_BfCPA`A@AƒCM@V CZyBʗC~yBxC~yBj-A~yBq{?, CB`A`A@A?AV}B@N{B CuB C&A CW\BzC&g?ɫB CpA`A@A?+BIߢ@ BΒCBΒC@BΒCqj?:Bk?DBrCA`A@A? Bki@BFBGCByGBXCyGBmAyGB,Gx?BdGBA`A@A?pB@WBJCBDCp;BDCA Co?ԖBCA`A@A?Cl@x %C.)CÛC0)C C0)CACcI|?$C )CA`A@A?BJCA+BC!BCEKAC A C;O?2,BlCA`A@A?- Bk@Ə-BQpUCn1BZpUCBZpUCCB[pUCs p?;E-BOUC?pA@A?MCLAC&CC'CC'C?'C~?TC.BC@pA@A?mBd,H@B>C&BlCBlCRAnCyu?B DC@@pA@A?XC|@TwCBrC.BC.BB.B}?OtC_B@pA@A˙C@ŊC@ScC@ԩC@cƉB @A~?-C@@pA@A?BRG(A.ݑBEB jB2B0tB1BA,CHZ?CC>CwC>C(B|*C}?ޔC<C@A@AiC1E@'RCpJwC+LCPJwCπCPJwCUBPJwC|?,SCvC@@A@A^B@B!7BێBi#7BCi#7B$Bh#7Bm?B)B~x?׍Bx?vCx?)Bx?x?lB@@A@A?;C$A%C,bC#C-bC5C-bCMfB -bC#?;CqbC@A@A?ѫCR@rCBmC,BPC,B|C,B~?x4tCB@A@AAAuA=CnA=Cc@AݳAA/>A9>CAA@A?pB@\+BdB$n$BQ eB@K eB*BCmC(?!.B?hBAA@ABg@ĥ.BtCZS'BԁCgɹ@1C>B1C?X2BC AA@A?/CI@'TCN{UCKCVxUCOqCWxUC%uBTB&}?GUClUC0AA@A?$ CbB@vBC>BC6%CCWBCy?uB~C@AA@A? QCZ_>@C AC9C ACC AC@!AC$z?#aCbACPAA@A?=B(Nc@vBL!BQxBH!BdRCI!B"SBI!Bcp?wBB`AA@A?< CUN@FCWPMBbCLBd!CLBALBb{?UC+LBpAA@A?\(C,N@Z-CCD?-CC%CCfaA ЦB;}?-CδCAA@A?LA92A B }$BB}$BI@B]CBC]C> Bqw$BAA@A?'߯Bڜ@j#BCEMBC}BC*BrCy?JBCAA@A?XBb@BbA@B bAB bAA)BbApv?BJbAA@A?SkC@@CBAC@A@A?cBz@Y3BҫC(.B,ӫC(>B,ӫCt@,ӫCM?0BfC@A@A?.B-h%@ KCB' CLBkBLBpBCw? CoZB@A@A?BZ@pB'B}BB7BB^A|C8u?B'B@A@A1gCHD@CB|CkB5FMCkB>B[lYC}?vCBAA@A?x#B֦@}:BC\2BpC1>ApC$BZC0?hK;BeCAA@A?VC!c@HgCCP`CCICCA%C"~?+gC C AA@A?BQ@pBDC~BDCYBDCbB@CjBk?MqBڨB@AA@A?hBu@1UBdC WBycCIN>BycCK@ލB^?VBL_CPAA@A?9C@BcB71BLdB,CLdBBLdB v?3BpdB`AA@AB[@,gBC/BCp!CCBCx?;լByCpAA@A?yBι@oBxCaZCJAo@W5C¶CB-C,CaC,CB,Cc|?P3C>șC@A@A?=cCR@# \C7;UAXRCVA.pCVAAVA4}?[C`A@@A@A?B㽃@vCۅCuBp΅CXBp΅CA9B w?CcC@A@A?BSB@KBCvBˠCBˠCF:@ Ct?]BC@A@A?Cu@-C?C,CCxCC!S@C-z?CC@A@A?SB2@ B̚CBBbӚChvAŦCܲBŦCn1M?BC@A@A?ۖC@8(CxCӶCxC$CxCAxC~? CRCAA@A?4BL@ C;ACI,CCCQ,CBQ,Ct9PB(Cz?iCb,C@AA@A?#APAA[{CxAVCŒ@uCvBuCQ>A!CPAA@A?uAA\A߸2CA׸2C@׸2C{Al\C ?A$2C`AA@A?fÄB@A,BA,BB,B &B,B=?AtBpAA@A?(BY@̊B_ C؄B_ C`B_ CaB_ Cv?}BsAB: ?@AtCAA@A?Bݫ@ BTCBTCAwBTCxATC{,|?\B;CA@A?1hAA1ACACsZAB[7AB>HAC?A@A?Bp@B:!CA B!CHB!CB!Cxu?EBQ} C@A@A?z8B@-@B-CtBfC BfC;5?" CtKy?BC@@A@A?6Bs=@mCCBC A?i C}Bn Cru?jCC@A@A0#Bq @AO6$CɄA'6$CA'6$Cg@C#?1_A#C@A@A($BU@HBCBGCBBqBBBBb?aGB B@A@A?_Bu5@xBʄC*B(ʄCBMC(ʄCaB(ʄC(r?#BC@A@A?Bޟ@BDnCBnCBnC BnClj?rBUmCAA@A?LB.@KB XC;B XCB XCA7Bcs?BlXCAA@A?wIBV-@ RBM>CRUBF>C'BF>Cf5BF>CPr?(B4>C AA@A?B7f@؊2BDCw2BDCyBDC=BDCjId?Z2BDC0AA@A?BTh^@ BCcBC`_BCAC҅v?BC@AA@A?d4BW@TsB[CpBXCCXCaBXC&s?vsBӊCPAA@A?hcmBsq@~B[CtB [CjB [CAA [C!M?PB [C`AA@A91gB@4BbCpW,BbC'wBbCmAbCh?s55B}bCpAA@A?JݶB1{@kgBN9BVBD9BzBE9BۼARCɵz?@BBAA@AdAp,A B]BCmBaBCAaBCлA„"CE? BPCA@ABCHA-B4CWB4CYC4C,~B4CP?6B4C?A@A?`B@&B1C䌳B1C~B1ClȃA1C(s?BKC@A@Ã,BjjZ@5ۇBbjBiBjBzQ@jBWBC10Q?FqBB@@A@A?.AP¸@h[B#CZBަ#CSApӫCϡBpӫCk?v]BFX$C@A@A?GA%@nBXCM;oB XCA"BB!Bm\ ?FpB-TYC@A@A?ǨB!O'@]BC*xBCFBCAOBo?B|C@A@A? QCs@B>Z"B>1 C>A>y?B}7>@A@A?%C m@DBeC!BjzCJCjzC BjzC!{?JBLCAA@A?ByT@׀BgtCހBQtCiTBQtCO5ArB#e?Q̀BXNtCAA@ALChU@FC٩@C2GCӪ@CMCӪ@Cׯ@Ϊ@CJ}?~FC@C AA@A?B.@!Cv]Cl Ct]C6Bt]CBuBQN|? CUC0AA@A?^%3B@MBT4C,YGBT4COϯAT4CAm'>%>M?[NBc4C@AA@A?"B^@wѻACACACSP@C ?{TACPAA@A?$AB%AwACaA Cq"@ CA3B??-tAC`AA@A?=Bm@ BS1CBS1CBS1C@穲C{?jBMQ1CA@A?zRALaAʵAC|^AC?BAB>AC?A@AB?:BCԛBCBCȜ@Cw?BC@A@A?ICJ E@/mC1^?J(oCǛ?Cƛ?kB8 5C ~?mCy?@@A@A?f BmYe@B큩CBuC@2IACBCT?nčB^C@A@A?)CZ@C=Bx"Cdh=BCgh=BBā?YcCQiz?8C,G=B@A@A?KB@8@BWBDpBBgBBxoB'Cp? VBޖB@A@A?yUB@ #BCw#BC1BCT ^@C".M?F"B&C@A@A?mC$JZ@tB/C!B/CWmEC/CB/C[y?B)/CAA@A?XBI,c@GBBSBgBBgBnBgB<0]?ӞB,BAA@A?EAnA> 0BehC=#+BRhC@OSB[ 5BGSBY.$?50BhC AA@A?A[@RA.uA#"AsALQ@sA9A@B5eC,B5eCxlwA5eCLw?BeCA@A?B7bABQBRBC܌MACB4CyY?OBC?A@A?BABfB2jB+Bct@+BRAJUCV?l'BB@A@A?rB1@B=GC#BTGC>BTGC\@A&x?LBGC@@A@A?KxB5B@N$B>C BDCBDC߹@rChy?t BѥC@A@A?AE@B=TCBTTCKI@UTCcAMIBP?BSnTC@A@A?%%B6s@B\CC)B37>B37>FB37>!Ce?0B@CAA@AAAB~[CB[CA#nB5B#nBa&?bB2C AA@A?"B-@BmBqAɊmBBˊmBI?@ϊmB@Y?B_(nB0AA@A?ءBT@HBYҊBR2B@ҊBtB?ҊBԖDB?ҊBwq?CIBzB@AA@A$nB馺@BCʇBCr=BCsFAI+Cw? BGCA@A?QU$BgQA\LBBTFBBPABX6ACv[?6nLBB?A@A?A´AAMCpAMC@4BuA4B>bACC@A@A?mB&@cZ C$?C?"B?7B4Cy? Cҩ ?@@A@A?@B#AB#C ͢B#C?B#CgZ(BCj?=B1C@A@A? Be@x-B CdB/'B9CdBv@IpA@bA(u*C]A7u*CįIA:C"B:C?:A*CAA@A0C B3CC?B3CA@A?=AqB JAxB4CB4CNB4CR>B4C}?B4C?A@A?=HB1@PZBƳCsOBƳC BƳC@A3Cj?XBճC@A@A?%fBf@,CB0=CB BB"ACC'1}?\CtB@@A@A?lB@B#a~Cq؈B"a~C)B"a~C]DA"a~Cnx? B[~C@A@A?JBP@Be_C8Ae_CQ Be_Cb@e_CO? BV_C@A@A?#A@4ARC.yARC@RCAAf(?*ARC@A@A?SAB{@+B~C9^B|CIB|CA?Cl|?BCA@A?-kBFA:BCiBC&}qBC:AB?D BC?A@A !B>Ai AC@CAC>AC>& A]C@A@A?:&BAھAUA짬A,VA-B-VA7gA-VAOlG?ADA@@A@A?LB@CRC#BRCEBRCxAǥ$Cc}?*CUC@A@A?Ae5A2BBw$BB@BB/CR? 3B[B@PA?BnA#BC6BCAAB}BBBK)>BC@@PA?[AC+@8CCZCC8'CC(;LBB?GdCC@PA?`ʷCo@԰CB;CBCB( BB? CB@PA?5CZ@fCBCBs؎CBHBC?CB@PA?27C?Dm@<8CC)>CCx:0CC^AB.?>CC@PA?h+QB(@$AC*BCjABeBBa>ưBCAPA?<&C|\@6CCB1sICBxCBBC?'GCBAPA?CC APA?&CbT@CC,CC&S.CCLVCB?CC0APA?;4CE@zCCl-eCCCChBB?EiCC@APA?x|BzAP}BBUhBBAC XBCAPAC>@'BB樫BBkKCBBB?PBBAPA?B@/CBCBBBP~MBC?GUCBAPA?ѹA]2AW|BBr}BBٝAC/BCxjJ?|BBAPA?pCO@:CC3CCBC$qBB?:CCAPA?8BA"8dBBXBBbBBTBB?^cBBAPA?BZ&AضBC BC8CCīGBC?BC@?PA?9B<%@-BBC‘BC6HBCACu*H?8'BkC@@?PA?(C@.CrʏC8$COCCOC^sBOCKL~?jC]C@?PA?DCN^@C' CC B C B)zB B}?CB@?PA?D_AF D(ATDACAbxB#FC?ADA@?PA?6CV5@CG >AJB@@PA?C}@CCֺ@CeCQC,CQCCQC5~?@ECkLC@@PA?C @($C3tBNCBCB`AB{?"CƹB@@PA?.C@CC bCCPCCALzCw}? CDACA@PA? D@C)BQDoBC{DoBgBoB;~?5)D3BA@PA?B/@k[C:AbKClABΠJCqCΠJCq?^NCQ9A A@PA?mB@i|$BBC?U7C& @U7C>V7C'Cd|C{Ci|CCi|CQB@i|Cy{?>C>|CA@PA?F/B+AԳ"B-C(#B-CHA-C(?AѰCI>?%u$BE-CA@PA?--B>0A!ACAC[]AC AeCh}?jA:CA@PA?A4A`B'DCB 'DCvn@ 'DCAW8A8?RBKDCA@PA?ҙBiABB;BBŇ@BBTBf"CQx?-BրB@@@PA?V'C@DUC*CCCCRBC~?BCTtC@@@@PA?]Cj@qCC%fDC&&C&C&&C/SC&&CS{?|OCcC@@@PA?g{RCw@C pCcdC)gCz6C)gCB6BILBz?uCiC@@@PA?wmCb@&CCCCtCCALAY>AxAgDC ?qB(DAA@@PA?iBJ@B,C׈B6)CA6)CBפB}Z?BCA@@PA?C`h[@ACt{B/C~B^C~BA~BW~?ŊCƴBA@@PA?xCKE@r]CrqBv\C~rqB=C~rqBANBrqBɵ}?%\CpBA@@PA?E]Bw AJBBYC"Bp9YCO,Ap9YCT/yBBg?SݠB,YCA@@PA?9CEbm@|=C0B=C0B z2C0BM2A$C}?==CTBA@@PA?0B@}B#ܥCB!ܥCzB!ܥC=B!ܥCnp?P*BԥCA@@PA?V՝B@SBCBCBCAA1'C<y?BC@@PA?9@Cp@v \CC;CCsH:CC_7?|B{-x?FDC C@@@PA?8 DX6ADCwDCmDCVwBC^??DC@@PA?_CM@DTƥC CC DCc1BCݪ~?>CNC@@PA?+C~7@?C^tC'AC C C CLrB@C0s?XC^?C@@PA?Ch@ŋCWt2CӅC7CC7C.dBGz@{|?MLCZ6C@@PA?T DZ@TD`dCBY D gC; D gC@@*LB ~?ADeCA@PA?Ce@CBÍCpB'DpB@CpB~?x[CBA@PAYB AVB%C.ljBCyABtBBT ?XaBC A@PA?LBzy@BĆ@)B>@4KQB>@3B8C R?%Bq@0A@PA? CT@ACi!C(CVC5CVCrr?]C Tv?CgC@A@PA?vCʆ@'',ChCޮ'CCOBCLBʁ-CCx?+CPCPA@PA?C @C BlApA@PA?C{@AԴB_COBcC-CcCNêBcCit?sBcCA@PA?ӮBş@ЊBCeBCV_BC BB=ep?BnCA@PA?1C'7A@CS) C}C* C8BC* CD%B* Cz?S"C, CA@PA?*nBʁ@?CBCκB BκBOB.CĂz?WC cBA@PA?'XCm@ tCAtCA$7CAwkvB]}RC}}?uCAA@PA?cB@=A,B.A B,B BB BLC? ADBA@PA? B)-@1 Cy?BDŽ C@@PA? `C:AyӕCCvC-CXC-C.1CX.C{?XCOC@@@PA?DyCVn@5 _C;Cxa^CCcCC<+BC z?i`CC@@PA?f7Cr8@ FC+HBYKC9UB$!BbC^BA_B?x?2CUBA@PAkC,@BA B\\AHC\\A2C[\Ae?O~B AA@PA? C18@BRC3CU:Cs;CU:C ?W:C.p?BC A@PA?<6:C)M@l^ Cu6BrC4QBUJC3QB BB3QBt?C%JB0A@PA?8C-@_C CԺC,C^C,CͩKBXCL\~?C#C@A@PA?`BW@ CClC'C!B'CEn)BBr?$CkCPA@PA?qB@B~C>BlmC8BlmCQAkmCõn?B-C`A@PA?zCw@CC(CC7 CCWBbBy~?oCCpA@PA?5A:)AJ B~C}BmCKA$C7oOB$C">+BVCA@PA?Ch@'}OC"C6?IC7CC7CC8Ch}?N-QC1 CA@PA?MB@BkBgkCr~\BgkCCgkCVfBgkCe?phBAkCA@PA?6B?@{BBB7BBRBB0AB~u?LBRBA@PA?VB=@ʴBfBYپBfB;BfBAfBt?ƁB2fBA@PA?6B@ߍBiCBhCaUBhCA@BpzSBw?BhCA@PA?A{Q%AkAӔCAӔC@OB H BOB>#A CA@PA?Q%B:=@1C:e|C8C8e|C\ hB8e|CkBnʐB${?C_|CA@PA?OB@B!CB!C%B!CA!Csx?BC@@PA?C_p@CgBѦCECB,CECBb;AC/|? ChAB@@@PA?EzHC^@+CChCCECC}BBIv?P rCpC@@PA?P1C1P1@XCETC4C\(C2C\(CA\(C1k?K C#C@@PA?KC̽@;C]@e C `@іC `@kB37Ci}?@C(@@@PA?p>Bm@OACy B^CN(@+B#B+B>W;ApC@@PA[CŅ@ژCrBCZpBwCZpBOB\pB7~?aCRqBA@PA?fC-@CCHC 1CCC 1C(0Bb Cr}?+CCA@PA`C=@CC)C CDD C?CB!CW?~?CC A@PA? B_@ƛBroC BK٦C(|BK٦C(XACдY?*BĦC0A@PA?ZC@jCg@B.pCTUBNBTUB:AVUCv?PC(õB@A@PA?C@3OBCBC,%CCEBCUe?S[BCPA@PA?C@ˊCЬCdCҬCRCҬCBҬCC~?CIBA@PA?"C@ CtC@xCsC"BsCh@Cg|? CCA@PA?DBG5A?PBB9BBw%BBj@Cx)e?OPBB@@PA?C\8A"XCC C>*C2C>*C[B=*C(\}?KC~;C@@@PA?гC;O@=CACAT{CAg3 @LCB|?KtCEA@@PA?NDfEA DJBUCHBDHBcɔBHBk~?D B@@PA?ݑCqh@\CmACAjCABHCO|?CA@@PA?AC.@B\CCO\CcKBD\CcKBU{BC-y?ȍYC`B@@PA?qBd@ByBQBkBǟ[@COBClv]?jBȐBA@PA?C&@kCNB nC;BC;BgC;BҺ{?jCBA@PA?BCCa(@qLCBC^EC/C.C/CABCNz?JC^C@A@PA?C|O@)5C3CZC'CꏊC'C @'CN+}?-CCPA@PA?CS@ydC"uC){_C"uCТC"uCKB"uCZ}?fC. uC`A@PA?NsC,&@LtsC"mCmCmCCmCBmC ~?`oCmCpA@PA?%C.<^@"CKmC LCKmCpCKmCIN@KmCNy?'CtFmCA@PA?]BbnT@|B{1CfBȰ1CvmBȰ1C:AȰ1Cv?eiBϿ1CA@PA?C|l@CqBBqB6CqBAqBQ{?C[BA@PA;'CS@3C>AoCA?6CA'@BAz?jCpAA@PA?CΓr@HBTOC;BDACSCDACCDACw?B#CA@PA?LC @ЅCpBCtBgCuB >AGXC`Q|?uC1BA@PA?7B(@|BBˤB"B4B"BdBɳCk?{B* BA@PA?>A.3AN#BoapBB+apB?QpC!BLpC\>?t#BgoBA@PA?56Bn@eBAC^BAC*BACδA\Az?nBAC@APA?C٫NA2C!sBC[BAC[Bu$B[BV/~?^yCjB@@APA?rC@SCB CBCBBB~?,?CLB@APA?橋CWɑ@}CBܿwC[BĖC[Bf'WB[B{?t|CB@APA?ղC.ܣ@BC{BCC눗CC눗CYhA눗C~?^BCC@APA?ԩ*CR0@ };CډC6~/CCVCC AAbBqx?30CC@APA(:C^'@5CC >CyC)CyC6AܼC-w?i9CrCAAPA?GRYCCB"RBqC{?QC)B0AAPA?~+Cp@KCcA@AAPA?B5@vBnlC@pBnlCxBnlCe@RaBO_?zBYjCPAAPA?B@~B+B롾BBoBBjBjCnf?+BhB`AAPAXBCfK@fJB2BǠBk2B^aCk2BCj2BLw?`B0 .BpAAPA?04B*#t@+Ce֥B%CեBbBեB?BnuC:y?tZ+CB*v@B՝ClB֝C B֝C*MBC2l?|B=CAAPA*XB @6CBãA B@ãACBãAeBCãAn?ׇBAAAPA?{Bp@O1BvSB2B%TBhB&TB]_B&TB`?W2B!TBAAPA?Bb8A-ACACKaACA'B?AقCAAPA?Bk/@B)C,ӛB$CB$Cn AJFCq?!BCAAPA?%Bn3A BCBC:>]BC,CA7Cts?}ŔBC?APA?hmKC@CWCdL)C4oC_C4oClmZB4oCiw?JC gC@APA?ϕ^D7ApUDECSD C|iD CcͳB C?k0RDC@@APA?PBk@+BhBApB2BB2BfƚA ŘCi\?ѨBWB@APA?C AhCֶ#B=CxQBDxQB6UCxQBM~?CBB@APA?Dw@C\QA;CJRA' DMRANBPRAL~?"COURA@APA CT@bCLCCCC!CCBCJ~?;C@C@APA? P_C>@ChOCgCNLCCNLCB1tAwz?CCLCAAPA? Ct@CXBVQCǖBCǖBBcC7S~? C: BAAPA?XCl@B|\C{ BT\C1BT\CA?m\Cas?6B `C AAPA?w C m@GBNCЯBMC17CMC!BMCg?gBVJC0AAPA?^ICfNR@xPC< CJCA1 CsACA1 CQLAC{?cKC C@AAPA?8?C*_@ CXBC깍BHB깍BBzC;w?)CBPAAPA?kCS@:PC_sbCœC^sbCrC^sbC5A\sbCz~?CobC`AAPA?&Bف@:BױC9BBC?١BCBXC]w?*BCpAAPA?lBc@BC*B.C8 C.CF-B.Cn?BnCAAPA?{v CH]@]B5JC̰B`]oA঳BAAPA?/CzU@4B/CRB /COC /CdGA /Cy?VB(N0CAAPA?B@'BBCYB6B,*B6B B{Cm? B؟BAAPA?AuBi?,B[ UCAAPA?WAo>AAZ)CA@)CJ@@)CɝA C?,}A(CAAPA?WSBǑAPB1]C A1]CkB1]CA1]C[?WBA]C@ APA?_>C]@CV\CpbCZCDCZCuBB9~?Co[C@@ APA?JB&@(BB.B)'C4A)'CbBC?_?BjB@ APA?C߮@v&C3&BICpBDCqB1CqBݠ|?C.Q"B@ APA?LC@_CDC{C"CC"CB"C8k}?CC@ APACP@{1C@C:CDCCDCq!WARCt?-CrC@ APA? CČ@öCBICǝBزCɝB|8.Aj'CTe~?֫CeBA APA?"CC@M@i*C4C&CC5 CCABBqx?$CCA APA?CiV@CZ BCB^CBkAUCZu?ClB A APA?gCK~@/ECC>CCZCCbBC/}{?C~?ZC^B`A APA?a|BCfj@y!C]C>C]CucC]CzmB]CC{?j CC\CpA APA`PB@BwABy:A׾Bx:AׇAQNCq?1Bk5AA APA?_ C a@ BABALCAt-BAy?uB(AA APA?:bCPV@ uC dC6wvCdC ICdCZ1BzBBй}?ttCƫdCA APA?B^v@BC?BXCrCXCB-@BFdzCABCLBC\B~k3CY?S=BkC@0APA?'Bl@YB>ͱC{B?CB?C^4A|1C6q?BIJC@0APA?̛C=]@BCTCC\CΧC\C\WB\C}?CjC@0APA?BH@+B\B$CVB7 CCfB7 C0B7 CdtS?VB1CA0APA -Bg ABAĜCBUeC6BCACC0"E?BꛛCA0APA?uaCN@BnC BcC!CdC]`BdCo?BJC A0APA?Ai(A.Bbو@Bˈ@JA`F8CQHB`F8C>L$B<(@0A0APA?5+C[Q@-\CBΉCKCQΉC%:CQΉC2BQΉCy?a C;C@A0APA?AB\@yB<C8[B<C|A<CG@RCN1?|BCPA0APA?puB2r@BBLLCnk A\CA0APA?]A:Ai B~hC BhCw @hCKA)RSBơ%? BiCA0APA?BB`@C[BWCߣBWC1BWCjAWC(y?OB`cC?@APA? NCߛ@0YCNCTCCnL>CC1kAӡClZz?SCZeC@@APA?hB?@Ia6B\$CJ.Bn#Ci?MBn#C@o#C5(?l+Bd:#C@@@APA?RC[@*C%B)چC\BխC\B BWC'|?dCrB@@APA?giB?@:~B'CJ}B X%CA X%CC!BC=?Bq C@@APA?\BLq@ BCuBC2xBCxwAJBo?BC@@APA?CEAHXCЂB OC&mB^-C&mBPIC&mB~|?INCd$B@@APA?B;=@әB',BbBķ'BBBŷ'B:@ӷ'Bk?B BA@APA?nC?[@CAeB5CBBߞCBB'CBB{?DC;BA@APA?@_CC~@?>QCeACELC!ACC lC!ACm2A!ACUt|?2NCbs~C A@APA?B5AACełA2C+,@2CZAcB{>=AvC0A@APA?AA~BxC$BxCAGBPYBGB~>BXxC@A@APA?׮'BB@~BhCwBhC3@hCBcB9CnL?BCCPA@APA?B@B'$B0BaB&zBaB:PA|Cf?BfB`A@APA?1C*R@DCC}=CC!CCeAV%Cw}?eECޣCpA@APA?Bb@BBkBrWBWkBBWkB]AnCBx?BkBA@APA?7B8ABB`BcB`BAClC_BClCSR?ڢBaBA@APA?1B@}CC3WC C8B C\ BQ3BS+z?QC'CA@APA?gBy@ƙBbC_BbCFCbCgBbCMv?1B]CA@APA?B#A#BA\C[BD\C`KAD\CA qBm,?<_$BWgCA@APA?YB~DAt*BbCU BbC5ۭAbCΒA;BWU? +BbCA@APA?uAΟ9A0 BC%AC$_ACAbBx@?BC?PAPA?PC)OAB*CƭC*&CƭCpCƭCÏBƭCy?)CĭC@PAPA?l$BADBBK?BB@/C6QB/C '?>BWB@@PAPA?N6C_@QC\BJCBUCBCBivUC;Iz?zMCB@PAPA?RՕBU@]q CgC<CC0?CRCkCwGh?>, CşC@PAPA? C &AC B!C BzxC} B~C!HVC=}?MBCB@PAPA?>A"VAj$AsCAC[A33/CdTB33/CM>z8 BC@PAPA?bCȬ@ܠC{B2C{BImC{B3B垀CG~?kC_BAPAPABa@9.CBC *CBCBBC?UC Bv? 1CwCAPAPA= CGh@C*xCC"xCuB"xC`яAE.Cx?C\C APAPA?;kB@EBnfCBpABLfCkO~BMfC|sANfC Z? ABXjC0APAPA?Cr7@ǸCC CCR%CC6ACz?iCyC@APAPA?B<@s`BC BC3OBCYAQC{'i?1Bi*BPAPAPA?. BuxS@qB*C^BCBCA Cv?BvC`APAPA?@Br@BDB)BDB=]ADB_kBCr?BoBpAPAPA?ˆCn2L@*CpCCpCtZ CpC9AáBz?,FCegCAPAPA?BT@BgBBA{B`APA?ڈC%AC5`C5+C5D,C5?LC35?`APA? C@JbCSC|YC|C%TB|Cr$CV#Cuw?dCC@`APA?Br@B'AXBAG?BAFA NC9X?BA@@`APA?QC8@ܗCC-CC1CCPA;B2}?~CBC@`APA?yiC}@Ɨ9CHYyCI:4CVyCCVyCBVyCe{?>P2CDyC@`APA?.aC'Ӽ@QD`CoC1\CoCL`CoC@oCJ|?eCJRC@`APA?'B$@5'CD8C[#C=8CaB=8CB@ w?q(%Cŕ8C@`APA?'CP/@Yd!C^ZCC^ZC*C^ZCu^A^ZCuy?P_%C^YCA`APA?TAA BTIC9BHC@r$CLPBr$C>; BMCA`APA? C/@eCſBj CBBBkAC!'z?aCmB A`APA?C) (@ *B DiC5BCiCkI:CCiC\BCiCzy?BھhC0A`APA?nJC%L@5C#SBC7CfBC:BfBCBofA\Uy? C9BC@A`APA?[B@!@BbyBۍBBi.AB͟4BEvCa?uBBPA`APAF[Bs@YxB-C׾B|-C @|-CmBBgj?BC`A`APA?FBQ@YBKABJA+BJA>@=C,)e?"B.ApA`APA?AAxBXByBB+B#BuCzBuC?ՙwB*BA`APAԵ COGe@AB= C̽B C.C C̟B C/x?~lB CA`APA?B@BguABhuAGBhuAXcBVCCe:r? eByAA`APABǥ@MWB`iCCBjiCXBjiCBTAliC4u?BXjCA`APA?BU@}&BפCwBդCBդCbAԤCzt?fBbCA`APA?jB)+AEBCZx5BCBCL5ACpo?WEBCpAPA?FBH2@%BC BCϿBCAC?UBC?pAPA"Bˁ@B;BB;BB;B1&AbC:Vo?BX3B@pAPA?Eb C|@( CC{CCCC Ű@bBR`w?CCC@@pAPA?>l9BLApB ܮCb|B(ܮC۔d@(ܮCnBP)C8? BRC@pAPA?ZC՘@5VnCA gC^A)C]AeB\AM.}?YnCv@@pAPA?Cu@CayCLCVyCCVyC=BVyC~?CѭyC@pAPA?߹BX@BCBC\3_BCOwBWCt?B%C@pAPA?$BCAPA?:BVuG@, Ca b3Csa3rBsa3x8A4C? CC?APA?4=HC|@TCSbC9NCfbCNCnB>NCH0HC>NC!B>NCy?|BNC0AAPA?mB@BB띵BBr(ABӒBCϦi?_BŨB@AAPA?_BB@vB;xBBxBoACBC[id?'BBPAAPA?B)k@BڞB烉BBw6BBeBBp?QBB`AAPA?.Bj@ CHTCO CDC{BBDC`IBB JB^?HBxC@AAPA?CHW@BD>4AC5AvC5A-@5A>z?rC>7APAAPA?sBEy@,BA|tBDACCAhBAAsv?kϨBؙA`AAPA?ECY@z:CѻC9CлCKMCлC AлC;}?b;CCpAAPA?$Bmh@BCCҬBCCCCCBCCa1u?BCCAAPA?Br@B0tRC䚥B/tRC+B/tRCB{AIZv?έBqRCAAPA?EB"@" BU)BPl B/)BB0)BB0)Bm?% B)BAPA?^)@4@8BCxACA4CvB4CGX=jBC?APA?]0C(@PC 0iCFCA,A@b@BzW@B=@CJBACm=@B?APA?4/C|>@BVCBfVCVdCfVCBeVC{?gBVC@APA?"C4@;PC=5CIC=5C\BB=5C'B6?&}?JOC35C@@APA?G$C|@Ct%CCq%Cr-Cq%CQAp%C|?<C7%C@APA?4iBҤ@WBECBECK@澏AB辏AdDp?BEC@APA7B>@PB#CxGB#C#B#COB#C\Up?YBC@APA?dB[r@ܡB{CB{C(A{C~nB=Cb?tȡBpC@APA?p:BҰ@vBB>BBL,BBhAC9hb?BdBAAPA?BDB@B7BB@7B'B@7BT@D7Bo?lGB8BAAPA?3C1@,XCjgCCygC/FCygC-BygC[|?DCgC AAPA?DB>@B OBB9B鮆B9BhB|Ca>x?XB B0AAPA?-^C~C@ p)Ce]B^:)Ce]BBe]BǞBlYkCzl|?)C7]B@AAPA?O&CE@H CτCxSC̈́C+C̈́C[wĀC,|?y C~CPAAPA?t Bk@wB!CDnB!CfmB!Ca_=CBSRj?[dxBh%C`AAPA?q WB8@^6BhKCS,BaKC$`BaKCGOAaKCl?m7B1CpAAPA?VAMA"B$CB%$C@XC''BXC/,?#B)$CAPA?:Ah@B3CB3Cy@C~*BC' ?/ B3C?APA?B$@BAHCBAHC#BAHCA) Am?BIHC@APA?2 Bd#@B3sBBrB)iCrB"ArBv?baBB@@APA?dBke@B CɋB) C#,B) CgA) Cv,?B C@APA?$FCIr@QCB`RCBh4CB7A*qC}?;nQCB@APA?BY@[HBB*BB4ABBh{Ct?*BB@APA?A|iAJBC BCF#AC4QBC>P BRC@APA?A AwAܛC!;ACACBCݙ>bAcCAAPA?Y9BP@ BFCCeBaHC8:BbHC}A!Bty?YB(NCAAPA?C6@MB@CB@C%l6C@C֙B@Cz?+B@C AAPA?]CtLU@2hC(B_ZeC/Bi8RC/BA̺Cz~?%hCB0AAPA?K|BJ@B;BXB;Bl^B;BAC n?GBB@AAPA?K B{AxkgB̟C9]B˟C/@̟CRB CW?(gBDCPAAPA?w"Bއ@J:BCdBCۀiBC AyCx?qBC`AAPA? BzAxBfC/AcC2AcC>@BG?BCAPAB@IBCq˔BCZCClBC{?[BC?APA?GC,@ CU`C+ C?^`C,C?^`CB?^`C {?G Cl`C@APA?AB@< BLCBNLCދBNLCIOAlzAu?CBLC@@APA?ӉA>\@֊BːCyXB⠐COFBB!cBB?BC@APA?C/@~BzgCkBWDgC CWDgC .AYDgCdy?JBmGgC@APA?A,@BW*CUB*CkADC baBDC>T3Bx*C@APA?*B[@D^B+B"BkB( CkB AjBy?BHgB@APA?MBn@B2CWB0CXbB0CVB^81C{u?"qB{CAAPA?BL@aB"B3B"BsB"BB"Bv?B BAAPA?`B(8@BZ,CBY,C>BY,CϊAY,Cs?ݲBt,C AAPA.B^|@$ABAB)BBJABD?zAyB0AAPA?eB̞@xBE&CG BD&CdhBD&C BD&Ci? BA#C@AAPA?"n BȒ@AC_A"ClB"C)A"CeD?!AJ CPAAPA??A) AXA-CA$CA$C <@̿B??ﭔA0щCAPA?B7|AB3C B3CB3C@` A3C?g B3C?APA?fBo@JBICzBICBIC*0AIC y?!Bd0C@APA?3B@>>BWB*MB^B#C^B B^Bv?ATBB@@APA?4B @sBB_BB BBJABb?y?@BǬB@APA?>AQ@[*BCE)BCr@CK BB 8?K)BC@APA?cA A@AdCPAmCr̽?mC+AB;A?VA5)C@APA?_BV@PBbC6BbCCbCBbCvx?aBlCAAPA?G+BvU@ CCc+CC_DBC:PAlB|?4 C6CAAPA?YBL@;#B` C;B!` CUB!` C7\B!` Cns?W"B| C AAPA?@A BA9=0?B> HCAPA? @B3N@7B4Cu-B4CB4CB4C?3%7B4C?APA?*B'T@CYCCB~YCCrB~YCCvAAuAO#}?MCOCC@APA?AAGACSAkC;AjCAC?AC@@APA?؁B A(AnC_AoCmAoCl0@nC*G?ANC@APA?WzBL@)BEB姚BEBBEBWaAEB= y?B YB@APA@B@"BMCL BMC'AMCkAA]M?tBMC@APA?>BS @C&sB VBMZB VBfB VBLBVBu?sBBLB@APA?x[Bck@;BCBC}BCjè@C{? B@C?APA?tAqAA1CA1CќYA1CWA~C ;?sCA#0C@APA?DAdG Ah\AOoCmA[oC@[oCLAlBw? `A4C@@?`A?'CZM@5BɕTC C6[CC6[C1?A6[Ccr?Z CQ=ZC@?`A?8C8@:@CƬxCCCCC̶BRB~?HpCx~C@?`A?tC@RսCC-CeCtKC#CtKCBtKC*|?^ѭCC@?`A?VCC@C\iC0yCroC)CroCg(BroC~y?MCOmCA?`A?3C8m@yCgC'@1C@BW C CB6B CBBPCq?CB`A?`A?B.V@BdvyCBBvyCABvyCSBBDn?gBxCpA?`A?B}@B\B+FB\BC\BB\Bul?k!ByqBA?`A?QbBP@XB C4zB C32C CKB CPp?pyB' CA?`A? ,C Q@ ,CJAW$C)A 4.C-ALAgAC{?+CAA?`A?,B@fJBm3C^SBl3CBl3CBl3CHv?&B2CA?`ASBt)@쮁B)C2eB)CBB)C=AaC9^?B)CA?`A? OA)AĊ|Bd֬C~BC9%B%CoB%C1?Z~BCA?`ARB1y@ BL@)BN@iBN@8Bx:Ct?{zB-@A?`A?uhAu+A>^BS%C͋UBi%CUA5CN[B5C~?d]BU%CA?`A?3C2@ZBA^BA ;CA޺BA#}?s#BiA@@`A?.BQ@ICNC!]BKCAKCIDBAg=?SB LC@@@`A?Cճ@?C쯅C ٝCsCn#iCsCBMB|?^ C:C@@`A?MCJh@yC'I CcnC!CE#C!CΈBCy?XsC+C@@`A?&C@|C;AtC@f;C@'C@7|?g CF@@@`A?UC&3@65C0،B GCBtCB&BBo?$CB@@`A?^nCYJ@@~BMiC_xBɎCK)CɎCgXCɎCp?BbCA@`A?9 C-;@kC C( CC.CC8_AqC0t?C[CA@`A?wC@sCuB2ڬCBCB CBݔ~?.C,B A@`AC[[N@:@CQ@CC@kAC@kA}/B@kA y?_?C!A0A@`A?dnCO@&C)uCCuCfTCuC,B9B8|?xCuC@A@`A?BŨ@z OCy!C5zJC8 CzLB9 C)Cp(Cw?^UCYCPA@`A?&;CI@B~C:uBhqC8=ChqC)pAhqC}o?&BC`A@`A?NCt@qeCHBW`CB7CBo&BsCk|?GacC=}BpA@`A?ՉC0@KBCCCFN=CQCC#CQCC&CQCCS}?$SBCiCCA@`A?kB.k@"BBCtBCXVBC^AC)K?"B-(CA@`A?l(B}AB֐C&:AC=)ACKAM\B>|ACA@`A?)'C?zf@2C %CPA@@`A?C@CdC,YCCk@CCsACx}?sCC`A@@`A?A+AkB] CoBK\ CR|A&.C\QB&.Cnv>Bӂ CpA@@`ACrb@N'DC@B|?C@BfB@BB=dCA{?,EC?BA@@`A?B:@pByBHBBBB0fuAB;4q?CB̦BA@@`A?_dBF<@mNB3C[nBBn4CBn4C|#Ah0CqB?KB5CA@@`A?yB9@eBTB֋B_B}!B_B0@CBCpo?JBBA@@`A?HJ"B&-AFBGKCCGBNKCCxcp@PKCC]7BܴtA?(? FB-hCCA@@`A?̠B@B$C61B%C3B%CZBK$Ct?B%CA@@`A=A4AK\AeͨC[AmͨC~8@mͨC]-AښC>6[AjCA@@`A?AB/AFqB^,CDgB_,C{?bB}C@@`A?COUAC3CpCl@CNCl@Cl2BNA3~?;FC0=C@@@`A?SQCy@C?CuNCBQCcB׆nCbB#:BٻCQE{?TCVB@@`A?~wB TD@z:CCCC7AtܚB+CuܚB_Q?_$CĀC@@`A?nCϔ@sDBCIȞCA} C3B} Cwj>gXBC`A@`A?o|3Ck@C_A5C^A| CC^AOB^Ay?CsպApA@`A?xOkB@B`2C(~B2CVQLB2CLCA2C-C?}RBH3CA@`A?5*C=a@/C1QC~'*C QC)&C!QCh@A'|? /CPCA@`A?IcB@BNCߗBWpNCMBWpNC'BAsh?B>NCA@`A?`&CjR@'SCx?\oCႊ?-Cႊ?ۛA䂊?R|?`Ck.?A@`A?tC5c@dC}@XeCm@OCl@Aa@}?OdCs@A@`A?ͣB@,BS|CBZg|CpBZg|C{CAYg|CBk?͑Bj|CA@`A?Ck@hC:jBbCEjBCCjB@.jB}|?uCjBA@`A?}B@ @v:BN@lB @=qB[B>B9vAUC#u?/ChAA@`AB@;E?CRXCOCBUCRBC^CCEj?s;GCC A@`A?ACȱ@~BC]|C6YC"CkC"C~BE&C}?CC0A@`A PC@ CZCxC CB C [/A8Cu?g CC@A@`A?OBCr?@2{CG CxRqC] C C] C&BϞC_z?w_|C CPA@`A?B!0@CdSC} CCaSC5BBaSCB AX=w?CSC`A@`A?B@ĴB`ޚChB`ޚCB`ޚC@aޚCk?EBښCpA@`A?21BAApC}AWoCW|AWoC="Cʶ>1$ACA@`A?l9#Cp@) Ci4CtCi4CF:Ci4C]UBi4CV8z?% C3CA@`A?; Cih@C>AJC3A C3A$5A3A:y?fC!AA@`A?B1A\GBKCA@`A?ƥC#׃@hҼCC7CCHCCػBBB}?CCA@`A?~C>@BBpB%CX>C%Ch?B%Cl?TB!B A@`A?w˳Cp@ 'C"B7CB=CBBB8}?ّCjB0A@`A?K@C@Cc8CD"CWCͰ_CWCBWC6x?~CC@A@`A?<]QB@uB CB C>8@ C6B^Cr2?%hB CPA@`A)Cq@BC}BCx)CC)ACgu?nBTC`A@`A?B@FBCBCzBCfAB6_r?BzCpA@`A?Cj@@!}C;C xC;CfC;Cm+B;Cq~?{CjCA@`ACnX@ʡB@~Bl@^YCl@ͻBl@v?/lB@A@`A?kKCԛ?@7QCv1C lJCs1C FHCs1C @زC}?SQCG1CA@`A?fC i@BoCBoC;CoCu@oC]DA*y@A@`A1Aic0AlBgOBzBOB@OBHASC_0?BkBA@`A?"0B(6ABGECsBGEC8AGECK7!B>Al?BOEC@@`A?C9@iBBBb|BBVsCBBB-Z?B%B@@@`A?t.DY0A;DHCmg/D#{CCW-D#{CCAwA,?4DTEC@@`A?SdBq@ OBXC( BߛCr@ߛCAC>H~BFC@@`A?,HBr@ BCC"ʡBxCQFA"C^B#CI.?ʗBC@@`A?:C@cJCkCBDBHBBHB9AGBB9V?ˋEBBA@`A?B@!B} LCBLC}3BLC9BwA}o?%BwLCA@`A?OnBHA BCTBCvBCAC.U?BCA@`A?/(CsP@1CIC*CIC:+"CIC AC|?i1CtBJBAJB AfC|PT?4xB LBAA`A?,-C8K@w,C”qC1%CxqC/CxqC,AxqC&|?,CL6qCAA`A?1C3M@CCsBCzCC`ACy?C˥CAA`A?hBxx@KBCOBCCCϞBCq?BCAA`A?B/@ )B};CٲBa;CLZCa;CE_Ba;Cv?9B;CAA`ABԞ@gBbCYBbC?BbC6AbCv?ԫB6]CAA`A?DB@3VBvCMBvC6BvCAvC_l?NzUBvCAA`A?LLB &A BkC(BkC]RBkCiC8CC8CgB8C}?tC~ C@A`A?×CSQ@ґCCC$CC$C<|@$C6}?iC:,CAA`A?Bא^@uCC=0-BC)B^A)BxB;A^C4%o?=HC!BAA`A?C|ACGCl?C$C,C$CKB#CR~? /C"C AA`AJXB@1BBiB~BtܙB~BÓ#ABC;C>C1vABw~?3dCiC@AA`A?HCtv@?BnaBhB(aBPCSC'aB7B&aBks?RBdBPAA`AfBL(@BBBBBB@Bogs?;¶B\B`AA`A?@2CAA`A6Cq@C yAn6CyA$#ByAqBB"ECt{?JCxAAA`AC]Z@YkBcBZB#cB;fC#cBcA#cBw?B1BAA`AUZB1;@CBmCDBmCBmCb8A:gB6p?HġBmCAA`A? BB_@bBVǽBFݳB+ǽBҕB+ǽBTpAqCott?B8BAA`A?=r&Bk B5B@ A`A?`;C`}@\CߒTC\Cz]CCz]CvښB'BRIw?oYC͂ZC@ A`A?C:@؂CӫC5qCC^CCRB1CC|? CŌC@ A`A?TB}@TB NCݨBfSC~$BfSC@B6AW?yB$VC@ A`A?׬B^h@}`C34/C \C.CZkUA.C*NCjC>x??I^C -CA A`A?-B@&#BSAB$njAz8B$njA#+@"njA@!?-BxAA A`A/Ct@0LC2OCHCUOC~VCTOC0&BAg}?ѲCNC A A`A?C@lCL@BgC2B C2BViB2B}}?slCM0B0A A`A?q?B^@ B ^C$yB ^CTB ^CH@*(Bvq?B`C@A A`A?,aIC,|@QCC\B3MCi\B"ACh\BoAAkC+}?OC\BPA A`A? CM@ CzpC> CYpCCZpC4q@JpBnpz?ACoC`A A`A?Cx@zCKOB:C`OBeɴC`OBPB`OB9~?COBpA A`A?2mC)j@3BCdёC9;CΑCCΑCcrBΑC}?tLCC‘CA A`A?- CP@YB8@C=B8@C )C8@C*B8@Cw? BH"@CA A`A?7AAA;)?bA?A4C,AB4C >AM=A A`A?4Ca@pfCBCzUB TCzUBAUB(z?CcBA A`A?v&C+V_@ CCN& CCA=CC8kDBC|? CCA A`A?~B\%.ASB/KB<B$KBOACBCD]?]B "BA A`A?B @f|BCFBCBJcBCMA Cu?BC?0A`A? |C@ `CQ^CCdC(CdCBdCX{?TC3cC@0A`A?&CC@>CiBlzCoBBoB1C[Cx?J{CB@@0A`A?YCEL@KLCaHBTPCEB$;YCEB AEBy?AOCEB@0A`A?VCy}@R?%Cj~CA C}CHC}CB}Coiy?TC}C@0A`A?/B@K0 CECCVߘC܀BWߘCBV}B6m?1B ęC@0A`A?jC쪃@}xWCu-CmRC,C{C,Ci$B,C |?n\C(,C@0A`A?|BYT@BbB`CBACBAC A!ΜCo?CyCA0A`A?nOBs@ĊBECBDCC?~A]B1~An8?YBACA0A`A? 9B@BZCɬBUC lBUC&'YB*Cc?1B]C A0A`A?[gB`@xCsACBsACBsAC:2Bb8WA4s?Bi@C0A0A`A?$Cm#g@j@BsCEBsCQCsCBsCx?{IB%C@A0A`AM[CeF@mtCh@CoCh@CMCCh@CX2BiFA~?TuC@CPA0A`A?C"P@-CHaiCC4aiC/C4aiCkA4aiCQz?CiC`A0A`A?LeC*2@ye\CfeAoQC2fAuC4fA! B?fADI}?/]CIgApA0A`A??w!(BCA0A`A?CT@tB&C_B.C<9C.C@B.CHx?GBAR\7Cs?؊BA7CA0A`A?.Bu@q^AI!BAb!BwBb!BWԤBb!B(Y?Az}BA0A`A?B}3@iBγ`CBԳ`CG{BԳ`CLAԳ`CLu?ЏBg`CA0A`A?dQBLc@SBFCwBFC;CFC!{BFCOx?f%BFCA0A`A,Bo;Am{yACP^A.CeuB.C!A.CG ?xAC?@A`A?{C,A1CcoB,CvBCvBB^Cw?^)CB@@A`A?T-Ck2AOCaBl8C&9BD'9BB'9B~?׍C#B@@@A`A[Cz8@&CK C$CC$CC dBC7Bz?'CC@@A`A?`CcA6C[͓C«C{ɓC*C{ɓC]AzɓC1T~?ƯC@lC@@A`A?i&CX@{5C))C!0C *ChC *CACx?9C*C@@A`A?1B3}_@XC!C CCBCzB\Bm?CHC@@A`A?cCeRw@fC1.CA@A`A?nzCrb@фCWC]CWC~lCWCALB¶}?qC^6XCA@A`A?JB @6BW ẢB[ AA[ A BCvo,C>CB>C/HBk*Akz?6Cq>C`A@A`A?uyBm@:BCnBz'BvnB&BvnB@xnBGw?Bb2BpA@A`A?]C{ X@C CCCȐCCBC?~?pCCA@A`AmBEE@"GBCg8BCpBC}@BBDx?>BׁCA@A`A?BE@sqB/B~qBBtoBB_?ayCe?pB3)BA@A`A?KB/@1CTC CTCoDBTCKBRBz?˧C4JCA@A`A?B;AMB<C0EB=C>TCKEBTCc=?MBCA@A`AlBZ©@B̂CB̂CB̂C_(ÂC'z?4޸BقC?PA`A?dCA@V7C8\B)C\cBpfC\cB1BؕC }?CB@PA`A?BCpAPA`A?OWIC\N@JCvBDKCvBEBCvB AlyCP}?ƻJCBAPA`A?.Bgc@uмBCUCBaUCFBaUC4@aUCt?uBaUCAPA`AEwB@B&@hB@n9CB@rA8C o?Bυ@APA`A?øA--$A2AذCWhAذC+.@-C3A-Cz>6AðCAPA`A?7 B2:A-AiC}#AaCjA`C^A`C׏?:AuCAPA`A?&B)AM4B1UCB3UC'j!B3UCE(BTBv?%B[C?`A`A?4hC@C>C8!CCBC B+1C2u?CtC@`A`A\/C@dC&mC`CC0mCDC0mCVB0mCPx?HCdmC@@`A`A?KC{@^CNCBCCCS$ACv?TB"C@`A`A?lNClW@1+CO-CJp(CO-CM`BO-CGBͧC=y?/Cd,C@`A`A?r|C@j_CECe,ZCCfCCzBC|?\CێC@`A`A?_ B@1OCA*ICA{AA%3C]A*>B;]AS)Bԥ=Cv?CA@A`A`A?nBM@,qBuB?BB+wBBe ABy?SBABPA`A`A!(C>M@,C%CL7)C%C!C%C:@B6{?(,C.C`A`A`A?B%}@NB#C#{B#C$B#C"BCSHv?gBjCpA`A`A?Bfo@^!By&C[Bm&CGBm&C@m&C`Lq? Bi&CA`A`A?CIj@6B$BBư$BCư$BAİ$Bz?BBH$BA`A`A?kBZZ@s'BrC)#B}CM`B}ChtA}CAR? 1)BCA`A`A?BƉ(A\BTCSBTCmATCuBKB:2Z? T\BoSCA`A`AFA&1A"[Aq _C!AA| _C4&A| _Ci?),B >fZA61_CpA`A?Bݕ@]ABAB0CBx@CBtD?UAB?pA`A?1Cx@2?CWC$:CWC!CWCVABz?>CnWC@pA`A?CS@CCCCipCCAh%$Cnv}?CC@@pA`A?#;C\@zCMCuCLMC*CMMC?6AY~?}CNC@pA`A?ʴC@C3I2C*UC(I2CtC(I2CA(I2C1~?TC!2C@pA`A?YBYh@ B(CB&CPB&C^GA&CIt?&BجC@pA`A?]>BcJV@!Cƫ-CJeC -CA -C-ICְC)w?UC.C@pA`A? Bdh@tBU|BfB?V|BB?V|BAsCt?BL&~BApA`A?Q C#@GC=CAC=CB=CӣBC#|?IC(CApA`A?ЦC젊@@CCCC!CC BC͂~?6CC ApA`A?hB7@BiKC!B^KCB^KC gA^KC7t?֢BUKC0ApA`A?;CmM@;C"SBCNSB&DCNSBPANSB7|?nCTB@ApA`A?Bħl@BBPBBnBBACw?BBPApA`A?$B/@ӷB(CB"CqxB"CeA8Bp?BC`ApA`A?GBL<@dBLC=dBh CBh C5Bh C]j?bB#CpApA`A?Bs0@C&CdC&CD B&CwB#LCdx?C"&CApA`A?4Cm@_0C2SB-C SBćC!SB<.BhC|?0CbSBApA`A?9OBT@UBC&BCcCC%AC{?׃B_CApA`A?BE@sBFC,"BFC/BFC6AFC){?)3BYCApA`A?bC$@BC IBCVCC4AC̼}?آBCA`A?^B8@sA3C&qA3CVHB3CCJ5Cj_>C|eCj_>CBj_>CS{?C>C0AA`A?As A݂&BRB.%BrB~&AݢC5B~BݢC>!)(B}B@AA`A?pnBh@IBǪBBȪBAȪBsmBCMk?HMBV/BPAA`A?&A~A >Bw @>B@K|A?6CB?6C$?6>B7@`AA`ABf@UsCAC|C CUWB CA@d1C\z?CCpAA`A?܎Bq@BrTBBeTBBeTB?qTBx?@.B%BAA`A?݅Bg@B CB C&dRB CA0B\n?8vBvCAA`A%gB{@<BN)C?A:)CŐB:)C$B:)C1ue?vB)CAA`A?.BcI@BUvB8߮B\vB>B\vBEAqCjz?5BTvBA`A?zIA7QA/ACZAC*۾ABBRSBBxP>OAC?A`A?Ct|@B΍CjB΍Cr>C΍Cz B΍Cy?B C@A`A33B@ϠB MCB%MC͘??C8FBICZ?BbC@@A`A?6B1p@BPTC!B%TCAdBA%BdBC?BovSC@A`A? Bލ@o&9BEC51BWCߢsBWCTAAWCM?/BҮC@A`A?LC@ B5A!BHACHA<@AHA>w?LBxA@A`A?:C@u~+CJَCH"CC{JLCC(BCR*{?+C8C@A`A?}Bn@CУCCУCBУC$AC y?iC:УCAA`A?S>C67@yaC{*C/ZC{*C2C{*CvnB=C}?aC*CAA`A?Q CN@? CTCOCTCu CTCń@TC z? C|TC AA`A?AKXA |7B8C7B^CAwCABwC4>G8BC0AA`A??3BP@,PBFBQB-BA-BBCdN? PB(B@AA`A?jMBQ_g@&ڲB)AvBYA.B\AM?AkA!s?mͱBAPAA`AV3BqAǂAECAEC AECW@EC!?wAhC`AA`A?0By@1AB"pC=B"pCB"pCB"pC=k?2ABoCpAA`A*B/b|@"BPLC|QBPLCpվBPLC?AUw?nkB3:LCAA`A?Bz@B(CB%CjC%Cx`B%Cs|?BCAA`A?i[Bޱ@Cw;CBw;CBw;C=X@@|?=CSb;CA`A?B[@6BlBC;BC@C:v?[BC?A`A?4B.@ںBZKCѰB7KCSB6KCZA6KCx\o?BKC@A`A?7vBak@\`BApBA`BBAyjAA+?WB$A@@A`A?(B@L1B3B)(BB CBܲBB 4_?t1BB@A`A?.8B@`|BKCbQrBCpAC6B CgQ?~BԪC@A`A?FCC@E9C@_BC2C=_BRVC=_Bf B=_B}?68C^B@A`A?B!Cx@~B3CbB3CjKC3CWsB3Cz?zBC@A`A?8C*m@.KC&fC_GC"fC%C"fCB|KBZ|?VYKC@fCAA`A?Bω.@DBF5CB;5C}B;5C$B;5C j?ƒBKCAA`A?\C@2@ CFBP CFBS-CFB l BFBz?a+ C+DB AA`A?'-C:Y@>WC/.BXCBBB۪BAECc}?WCB0AA`A?=rB]@iaCB}RB-5CB=BB=B&hB=B=Ch?ABB1B@AA`A?\B͌@)BkBBtBTBtBAuBcs?BϨBPAA`A?;6Ce;@MCqCNCqCcNLCqC"DBqCK|?NC]yC`AA`A?A*A0A(CA(Cq?`CKA`CT>=A(CpAA`A?gBA!BCBC^AC0iA CW?H!BgCAA`A?;B*@{HBSyBld3BYyBBXyB|AXyB7Ao?׽HB'BA`A?B,'V@J7BBJ`2BB#CBBB)?7BB?A`A?&AjD@AϖCAC9?CH}AT-C>E!AR C@A`A?=SCKy@/CBCB8BBL. A C%z?cUCMrB@@A`AZGB@KC BC B]B B AHVC8.y?pCID B@A`A?BÚ@hAcCAcC#tsBcC! BcC2+?AeC@A`AdC# @PqC)BOoCBGCBzfBB 5~?SqCHB@A`A?yBuY@6IB¬CJBC"٪BCu BC[?3JB C@A`A?JaB KA*B(SB,,BȏSB&Ɯ@hC?BhC ?S7,BRBAA`A?uBW@ BҤCnB|C+2zB|CbA?PCn?}BCAA`A?ixC$fw@sICC6}HCC ՑCCYBC}?]HCHC AA`A?zvB@BfCBgCkBgC>BB Chm?EBC0AA`A?2B2@SBCpAA`A?)B8@7BʍCBʍCBʍCA9(B/!{?o?BǍCA`A?_ԅB*K@&B4CDB4C~B4Cc=@Q%7Dy?QB4C?A`A?AʠA߆@7 ByC ByCuAy CfdBz Cag>l B/0C@A`A?}BDV@B BYB BoB B_AiBC`Gq? BqB@@A`A?-)Ci@CwD&BhCxD&Bg6B]CH|?)=C%B@A`A?BS@x3B*CنB)C/!B)CO/BPC m?M@BC@A`A?B-h@nzBUC3-BTCŸBTCDATC.m?B|PC@A`A?5C:@;m8C+C8CC.CC0&Al#!C|?Uo8C듪C@A`A?BF@{BCBCy$BCh?Cbv?/BLCAA`A?XA A3B;BntB;B*y AbC#AHCm'AHCA$C!+?B C`AA`A?\AABHCo8BHC@!Av!B#A;?~&B(vHCA`A?ANA[UACRAC29ABAB >3QAC?A`A?B+rJ@?BC+B*CyB*C̶ACw?wPBC@A`A?AwB@BEFlCٰB[lCNB[lCAnaBu?xB ]lC@@A`A? (HCߓ@>2CC!^2C(C=YC)C}B+C|?B2C7C@A`A?T$C@5C,aBCnaBN@CmaB7&xBjaBn{?%C~aB@A`A?^B@4pBd CpBoCaBoCiήABb?x/pB_׌C@A`A?%Cg_@#C|A8C|AxN0C|A@B|A{?BA@A`Ap \BO@ˉBGC9BGCJBGC)B\Ak?mB.GCAA`A+؄B @BusCξBusC3DAgA@@A`A?!XB6.@V|BB\{B~BzB~BA`ƌCj?{BӻB@A`A?E:B0@2B\@8B[@#B[@MyB:CWs?eTB@@A`A?&fA<@ƧA@BeAY@B%@CAC>GAB@A`A?Br?c@RBRBe?vBaC@A`A?: Bg@@oAEOB?XASOBtmASOBTw@C[?AB@@A`A? CN@`C6A/BACAfA A|?h[CzA@A`A?`*{Bp@xBCؐBCRZ9BCaAC1CQr?_BaC@A`A?BH@BC^BCBfBC CBCqz?\ BC@A`A?AB0-@ABABI3_BBKABa?AB@A`A?B?@IB8=BB3=BWB3=BcANϐC{?B*B@@A`A?MAM@ A&BOA?BF@?BSAkC[_?KAB@A`A? lsB!%@oBCSBC1vBC& ACA;q?loBѭC@A`A?;BoH:@'BrAGBAP}BAz*BpDC{?&BÄA@A`A?|A7@Z)BmCGBmCAK8dB_\BL8dB5?)BmC@@pA?2JDCЫ@u.CB BBĈCBCB?wCB@pA?FBZ@&BB9BBrACBC>>qBB@pA;AIACBpBB2BC^CC v>rCB@pA?DBĐ@*BC$BC_CC4ABCt?6BCApA?~C^k@O2CCM_CC`_BC CB?ELCCApA?$CF@OCBpCBCBBB?CB ApA?\UAVAEBBZUBBBCCCB>1BB0ApA?;"Cɠ@ոBBzBBqiCB4CBr?-BB@ApA?-ѰC9AcCClCCCCl+BC?)CCPApA?aB7@uxBCjBCJBCACd?qdBC`ApA?jCl@BC3BC"CCXBC+?BCpApA?DCfK@N|CCBC~9CC)jBC?{BCApA?{xEC@CC|CCr:CCCC?DCCApA?4B'@7CCjSCCACBB?aTCCApA>Ci$@=CC8CCJ>ECCKAC?WP3B?YC@?pA?ԑB|@IhC`CvC1CͪAXBG CXBR?LCǙC@?pA?!B2e@O`BCACfAChm@CAZ>BC@?pA?^}.C )#@~WC6ICP7IC@9LCD9C@9LCBA`fr?OOC3KC@?pA?]C[B@}CLhBlWCxBFVCxB@o7BCt BCBC&AFCp?5BpC`A?pA?T$Ba 1AyBFzBBsB*xBn@ CnB CH)?nBBpA?pA?dC\@jBCnBC_7CCBCx?UBCA?pA?zthC[ӓ@y7hC}C~aCC"-kCC?AC-}?gCCA?pA?B!Z@BgA'BTA{ATABSCn?B'AA?pA?-Co@:BGCEBHCӘCICBHCccy?EBCA?pA?Bv@)BWmC BWmCBWmCV>B^eBd?bBlCA?pA?C.@Bh9qCBXAqC.CXAqC+AXAqC y?aBAqCA?pA'Co@WCSC?TCNC?nCNC? ANC? |?C<3?A?pA?6C{@t6C)C./C+C :C+C#O/A+C\}?06Cz CA?pA?&0B88Aq:9B*CK,$B)CB)CtZ@RC*$Y?59BC@@@pA?*}CAQC CFC[CzC[CYB[CS!~?C<4C@@pA?Щ>BAA@pA?]Bz@B"C-6B"CB"C,M:A"Cbw?q#BĜ"CA@pA?TB#AB=CWzB*=CuykA)=CQ|BCb^?BCA@pA^&C2:M@}OCMBOCMB,fCMBBMB~?OCMBA@pA?bv C}@ COFUBS C^FUB)6C^FUB'AQiC@|?x CUBA@pA?oB>z@fBi4BBi4B1Bi4BiAj4Bow?B3BA@pA?Bv@sB&C:B&C B&C,mB&Cw?B&C@@@@pA?|NB@LhBnC1˱BRCjA3KB B3KB֜?|xB\C@@@pA?TDA)D%CCgC DgCbBgCD~?*DʦC@@@pA?C5@Ch!"BCBCB BB+z?- Cs B@@@pA?vC@RmCHCXC8HKC}D8HKC FC8HKC@R}?CZJC@@@pA?sKC3@K2CBC+aBEwC+aB]B,aBv?VCxBA@@pA?ʍB f@)Bl>TB@qRB@P:A@{g?Bƈ@A@@pA?WCA@eCsA{RCeܰA"PCfܰA4V@JCtx?>WC8A A@@pA? 2WC[I@-CC1CCCC2BC?fw?CC0A@@pA?;CX@QC>̓CMLC Ch$#C C$B0B-z?FKCC@A@@pA?Cr$@PClBA ;C A}C A]B#HC~?;wC⣮APA@@pA?_lC @We-CkCCq)CwCC;CwCCBwCC{?LR0ChCC`A@@pA?a.C&@,NCY@~HC(N@A` C'N@ylBr;Cz?kKCn,@pA@@pA?C:\~@)CUbB%CTVbBoCTVbB| BlC`{?1`+CSpdBA@@pA?Cb@4CJC&CUCCUC@SB9z?CӆCA@@pA?KB@hBcC4B>yC5pB=yCABu?6UBCA@@pA?OAA\@Cؿ@CQ@ɦCAɦC~="@<CA@@pA?c>Cu`@wC˗BeCB[>\CBՂBB)|?CcBA@@pA?ހ-B4AqBfzBpԃB0zBA@1zB`qB̠rC&R?ɃBzBA@@pA?]C@:BDȐCBEȐCz)CFȐC8BFȐCO{?BΐCA@@pA?'Co@DBwCHnBwCECgC5CCCCAnBfs?<":C&C@@@pA?=C̈@=C>GC9˙C CAMC CKBCnz?ݥC^C@@pA?C o@C7kCUCC!wCCACKx?MC C@@pA?qpCb@OC~B]LCUw^B8CUw^B$BUw^B;w?3NCUiB@@pA? B[@Ÿ6C@O{.CCնA< CVEC< CTh?-ClC@@pA?XB2&@]ІBlC8BB_C-A_CB/BjP ?B[BeCA@pA?!πC@5@TCE{A{cCA4CAgNBA{?-ZCcAA@pA?B7Q@lBn_CBJ#C@BJ#C~UA(B=d?aBC A@pA?KC(@CМBPCNBwCNB BNB<~?CB0A@pA?mJCL@2xC@BiTrC3B3C3B5K8B2B|?lrC엛B@A@pA?C@ zC(CnCr(C[Cr(CwBr(C7|?!wC^2(CPA@pAfC&X@xPCpC>MC{pCqzC{pCЁ3B{pC|?WCJBC`A@pA?7CQ9@:;B1UAV`BL.UA#.CN.UA6BP.UAg?t?B~HApA@pA?~B @; CaCC^aCLB^aC 4BwBx? C"fCA@pA?QB~@ qBCBChBC&=SACEv?IBACA@pA?ιBt@BEMABNA3BNAe18ANARo? BFQAA@pA?)Bw@/sB DCEBDC9BDCaPnAAyt?۪BjDCA@pA?CS@BBBBCBABx?CB[BA@pA?EC`S@[LCpCMC lC5 ;C lCAC}?eLCeCA@pA?B3A73BABCABtABCV{?qABCyB2dANS?+BxBCA@pA? Cz@ Cuٮ>:HC߮>i C߮>A߮>|?& CF>A@pA?JB_Y@j֠BFBHBCBBCB7?&Bv?QB4B@@pA?tC@?dCF_C£]CCxCCVACfv?*/bC1zC@@@pA?”C:n@+/TC"׋C}TC CC CC Cñw? MUC,C@@pA?I6Cי@ΙCSBܢCAvBYHCBvBB]YCz?L)CB@@pAaC@#CDCCJCe{CJCR oA.A"b~?CRHC@@pA?CC W@焏CBCNFCCCC٫AnCn|?{CC@@pA?B9)O@BCUɽBCBC$=ACP k?$B_CA@pA?*CT @BV#CCCCk+CCyAC |t?CCA@pA?C>Ci@X*CNC C^7OC֯2C^7OC?*+CAd|?dC$OC A@pA?"CY@CE=C^KC9CC9Ch>9Cw?fC6C0A@pA?BWU@vbBCABYCp BYCBaBKNe?BC@A@pA?B8C @c{EC̭C>CҦCm%(CҦCAACSxy?HCQ!CPA@pA?YB?@ BCs~B CACCC{f?)LB`ŤC`A@pA?%ZB-@0BAŔ+BA.BAdBA/N?*+BaApA@pA? B9ܬ@,B˴Co6BC/~BCH@CL q?BaCA@pA?~)TBYv@%BB֠B,~B .A+~BBCR\? JBN&BA@pA?#nC.T@#yCyECqCECiCECb@Ap~?yCECA@pA? &Cv@̡/C1CF.C1CuPC1CFAtB{?0CICA@pA?2BT@.BuNBBIBBIB&TAqҒCQt?κBq6BA@pA'#B 1ABoC, B;CXA;CAv.C,?BCA@pA?BV@QBHDBغIBTDBBTDB;BTDB4 d?UQBsBA@pAzBF#@BfBC`BfBCNBfBCKs]BmfAw?ҹBLBCA@pA?BSA7A9C%A9CA9C@P@J?RA8C@@pA?(OD-@D"C9DCDCsyACÿ~?D׳C@@@pA? kClţ@XdXCXCGxCYCAPCYC#BlCx?pmCy@C@@pA?!Cff@ `CFChC'@CC'@CB'@C|?P}CBC@@pA?C:xCc;@sC*OBJCR0BdVeCR0B}A`CT{?C`(B@@pA?rA}0AByC3gBܱC0B/CK9C/C\)?hB[C@@pA;$C+t@QClCCMmChbCMmC2B7eB[}?yClCA@pA?D܏@v1DQC@D7C=C7C.=BB~?4DDACA@pA?nCD?@ CBBCIʍBBCIʍBAIʍBs?M C|B A@pA? 2BÖ@#BoBhBB^BBYA$!Cl?BB0A@pA?4C8@~ECcB=CB4"CBzAC!y?*DCj:B@A@pA?3C@CCBC B'צC B BzBZC~?CRBPA@pA?OʙB)@UBXCB&XCE;B&XC0BBA~e?(JBCWC`A@pA?BSx@% C fCC fC6B fCbBo4HBx? CtfCpA@pA?}Cf@CZjC C:jC%C:jCA:jCz?nCiCA@pA?B!@!C'C CC>BC}BRCt?%CCA@pA? qB |@ \B?CȾB?C{B?CmA?CoIw?uB0CA@pA?/.C~m@7@CiC@CiCCiC+B4CK|? r@CTCA@pA?ZCw@}BȗC:lBC(6CCBCkps?s BRCA@pA?; C@`²BcC7BuC w5CuCNBuCjy?ƲBCA@pA; CZ@SCYA?QC YAH0(C YAHAYAA |?]CZAA@pA?PB\I(Al B)CB)CfB)C A)C)]?SB)C@@pA? XBsq@ӲC;1CʒBo$CNBo$CA7C(h?C *C@@@pA?CUyz@Z;CCDbCFCCFCBFC*{?KC C@@pA?TrC^@EC[B-CB.6CB,WB@iCA<|?LCB@@pA?ChAroD?C$ DEC CECBB_/?D0C@@pA?B-@B t9Bb9 C` sBx@U sB%CpCg?BbB@@pA?a3CB@GWC92C/uPCO4C6CO4CB>pv?0QCo3CA@pA?ECH@2KC CCF CfCF C AF C?q~?uCQ CA@pA?\BJ@ĿCcCkCĦbCh~AbC.C:B7q?%CtaC A@pA?v8C@,LCfCIFCTfC(CTfCCTfCS*|?=KCgC0A@pA?݃"CyP@=C;"AC'AE!C'AQA'A~v?C0A@A@pA?GB@ϴFBK&CBBG&C9]BG&C7@G&C G?PBA&CPA@pA?G9Cw@A8CFCH/3CܱFC8CݱFC @FC:l{?G;9Cc&GC`A@pA?61C}ʏBL)C Bo @ B+$C{CBhCCiBC41CC$ѱBCӪr?B+C@AApANBK,"AMAeŦC;AƦC)?C ACHњ>ACPAApA?ZCǃ@LCvC$HCvC+hCvC BvCg}?JCgC`AApA?/C }@6B"^B}uB^BIJC^BB^By?^B`SBpAApA{Bg3}@ZCiCmCiC֏BiCܛBWB v? CjCAApA?+OB(@BvBq~CnBq~C!YrBq~CPe?q~Cʸh?&yB$~CAApA?.BȖ@%)B?"CFB\"CNzB\"CATCo?B?#CAApA?OBW$AX6BۅC8B̅C ]@̅C"!B3B3?8BwCAApA?%Cn@ˈC!C\C̆!C7C̆!C-y"B̆!C'|? Cȕ!CAApA?8~>C `@0CRB͹+CTB MCTBPBTB,}?KB0CBAApA?JB @VJB,'CQAB,'CmaB,'C#]B,'C gq?`KB;'CAApA?BqBA1B56CɑB16CtmA16CAجBP?0B'C@ApA?bC:AoCĦCġCʤCԤDʤC' CCʤC:~?եCC@@ApA?#DC/kCC/kCB\B~? C&(kCAApA?%?Ce@K9Cy CPe?ޓBDCPAApAЄCꕩ@C>3C˂CG3Cg9CG3Cc@G3Cr~?;C[3C`AApA?ICLlZ@#ICB@CBMCB^KABp|?2HCBpAApA?tBh@BtCB,aC B,aC5\hAX&C m?.BJCAApA$CZ@cBY:BخB\:BWC[:BBZ:By?B;BAApA?bC2_@CDCҪ CDCCDCȔABLz?"@ CLCAApAmB@&BCB7CB7Csx @7Cx?zB;CAApA?mu?C|@CC9hCCIhCC]ëBC{-}?1CFCAApA?BQ@ C7uBBAuBBAuB2\APC\y?[CBAApA?EA.A,BCpAC:@CAA{/C"(?,LB±CAApAB[AwBQC2bBQCBQCCAQCMt?PswBTC? ApA?B&@B':dC B]CXXB]C|:BG$B?OV?B_C@ ApA?C4#8AC0}CCq=|C}Cq=|C vBq=|C*|?D8CF|C@@ ApA?L\Cg@jDCmC*UGCl;oC eCl;oCAl;oC3Nx?pDC.nC@ ApA??ZC5@~^CJB"_C-BwKC-BU ACz?{U^C B@ ApA?3C@FXCeRB7EC-/TBfC+/TBz*B/TBE~?/CTB@ ApA?N8Cb]@@08CXgC3CLfC3CLfC>KfCŲy?]2CsdC@ ApA?vBg@sB CB CMxB C'xBYCo?˿C CA ApAVGCX@{CH@CqCԐ?C*CԐ?C':B< 9At {?}C>CA ApA?iirC@:+bC+DB[CDEBE CDEBBDEBIJ|?{jcCѱFB A ApA?rBj@B B6HB BdlB B!B B\yBV]CzB[%BRkh?B\C@0ApA?7CuN@)WCAA0ApA?AB/@BCAyB\ AS AͥB(B^RRB: CnDz?Q7CX)B A@ApA?:CCBBI>CvBI>CXAnT!Ax?:B>CA@ApA?,B@BG BLB B4 C B8ZAB BYw?նBFBA@ApA?Ђ5CJp@7CdOCX&CeOCNCeOCfVBdOCj}? COCA@ApA?[B࿗@=B^BU_B^BB^BN|A^B!z?BQK^B?PApA? UBGh@kB#bCDB*cC5B*cCwBh"C{@YCx(KC4C.KC!C.KC@.KC]y?g}CNKC@PApA? *CL@+C!CA C!C&@C5BdwuCPAPApA?* B_@oyC2CC$CB$C3AEhCz?"LC}C`APApA?Bs@dLBṢC3B㹢CO>B㹢C%$AsCr?B(CpAPApA?ϫAAmA0CpA?Cl*@uBgAvB(-I>osAGCAPApA?LzB@=BB͟CBşC-AşCGB CBAPApA?)PBBAb1HBu?B(6Bq?B#LBp?Bد@o?Bfl?D]HB1B?`ApA?*PB3@ Cv4B: C4B"B4BSBaC'au?kCk+4B@`ApA? <:C@b C>"B C"BNbC"BIB"B(z?C (B@@`ApA?#OCA@5CPdECC1CcECuleCcEC|NBcEC{?-0CUBC@`ApA?{6Cy@BCgBCtCC'CCw?7BC@`ApA?ثBe@wlBGCeBHCPQgBHC^ ?HCN?Z`BEC@`ApA?oBj@BcB?B-cBB.cBRAlCڪt?vBaB@`ApA?ˁAXAhTAk- CA- CX2AC] AC]F>ŒA CA`ApA?B:@\ Bb8C\BO8CŹBO8CAʼn@v?_BZ8CA`ApA?JdB=o@SCZFA ]CGASߕBGA]Bz$S{AA/C@A`ApA]/ C=@E0 C0qCC0qCNB0qC"BFtBN{? CR+qCPA`ApA?vLC@@(C2C'C)C NkC)C B)CX|?A(C6C`A`ApA?Bn@>BB'BB[BBtY@ACw?_B2BpA`ApA?OX9C]@4CvAǢ4CA=9CA@A|??t4CAA`ApA0MA^C?pApA?SBEͣ@0BS|vBuB|vBP#C|vB@B|vBt p?3BNwB@pApA?bkC;@qCC,jCCVhCC?ZC}??pCC@@pApA?,C!7y@$BF=BBF=BCF=BBF=Bs?Be?B@pApA?.C>v@>BbBB:bB.^C:bBB:bBiy?@BB@pApA?fB @+BBikB B|q> CABC_l?2BVTB@pApA?Bl@?'CCu#CC\BC DB\ C6z? )C$ C@pApA?Ce@uvCB|oCBHCB*BB}4~?^tCaBApApA? XCJe@}LCA CACAHCA|?MCAApApA?"BF\@BE CBv Cq~Cv CBv CJs?BM C ApApA?}CQ@9C22C'C)CӌC)C @)C$~?юC C0ApApA!_xB9Ǔ@ ,B(BZxB(BmfB(BFBw=^Ch?BG)B@ApApA?6A!A=B9@BCPApApA?Az$AmjA,Bl\lA-B^@dˊCAdˊC]>cAqB`ApApA?C;@CC1C C C CJA Cz?CCpApApA?P CdP@BLC BPCCPC(7BPC9A{?)BĊCApApA?z Cz`@CC CCCC@ BRz?CCApApA?BjN@BCSBCgBCzNAB/s?ǓBCApApA?BH@B)6CXB'6CB'6C?J:@\{?AB6CApA?SLtB_@B4CQB4CPQA4CB^%7?U{B4C?ApA?&UBo@KBBhBBBBABVAl?$BMB@ApA?CN@HCC#CCBCCunA7ZBLz?~C%kC@@ApA?B@$ B5B B5BXB5B i?5Bt?fBB@ApA+CgÖ@mB^2CfBa2CUCa2C& Ba2C4z?2BS=C@ApA?)NB@LB=3.BqB0.BN B0.B'@0.B (? B%B@ApALB$w@BaHCBo[HCrCn[HCBn[HCԻu?BGC@ApA?jCBK@8B8C|B{rC: A|rCyBBjNQ?|ߖBXCAApA? B٭@@B\BX BB?BcB+$C?;BBAApA?BF@u CCOCCBC[BBy? CVC AApA?dB5@fCC),Cj?C3,CAOC@AApA? CS@TBBWBB_4CBrh^BBD.{?kvBO5BPAApA?YϙAI4 A}KAPCLEAǏCf@B@ABo6 >DAtC`AApA?srB@WԍB^A͍B^Ah#B^AeAMCk?|BApAApA?Bm@ BjeC~ӄBjeCBjeCvbBjeC?q?*B$eCAApA?[_B@tB@ڧjB@_.B@U qA9;Cgj?1tB@AApA?B7A].EBzC1BzC'YAzC\ACV?8EBmCAApA?`B*%@ByC!mBtCݐBtCPAuCv?uBCApA?PB#@KABAB"BB5BB 5?AB?ApA??Cf@9CS?C3C=?CjB=?CRBz~2Ca{?17CC@ApA¹BY@EBB=BB73BBAB:T?bFBJB@@ApA?xC}&A&BjCiHC._CHC-CHCZ1BHCp}?hCHC@ApA?UBO@蓾B2ZBBBoxBBBdAB[q?@B'B@ApA?;Bp@?vBTCyBTCrBTC5Z@W Br?8B `TC@ApA? 4Bq@fBZCZBZCBZCbBZCaNh?aBA"[C@ApA?؏B?k'AkBƦC:]cBƦCבBƦCAƦCf?RcgBCAApA?Bks*@ BE5BkEB5BEC5B=[B5B5ew?1"BBAApA?CF@1'CC6]&C CB CNBB/Cz?5(CbC AApA? B9^@B/&B!>B8&BoNB8&BԃgBICr?BIB0AApA?Q)_BF@8B}0C9BQC.9B QC*=C!U?8B~C@AApA?(Au: A&B+C&BA,CűA CDeB Cy>&B,CPAApADcB@АCBB{;CBB;\JBB?B_?DBB`AApA?B}@ZBՂCaBՂCBՂC@aVBm?7B0тCpAApA?C5S@uBglCxBflC3HCflCBflCMj|?ghBVlCAApA?[B0@SCGB)CFBBFBAdCC}?[CBAApA?&ԖB@uB>ZC^BB9 C+ B9 C}wAɜC jBɜC:?XB{ CAApA?PC<@^tCNG~B~vC1G~BC/G~B&hA%G~BX~?tC"}B AApA?BMx8@ByCXBCPBC]CACv?'BC0AApA?޳Al_AD6AޮC덶AeݮC8 Aʺ)Cf*Aʺ)C>A׮C@AApA?{BkL@<[B-C̭B-CC-CltB-C2u?Bw9CPAApA?3%]B@e.BM@x'B@x6B@7q@@J?.B/@`AApA?3BA OB 3?LFB3?A3?[A44CMp_?UOB ?pAApA?Y-oB@(4B^BA#BMB{fBMBANBk? :4B=BAApA?6B`v@AB+FC=B+FCC+FCB+FCi}?B,FCApA?BQ@CCwCCBC?BB?CC?ApAB/@CAڮCJ:C=ڮCˆB=ڮCBz)Cy?yCm̮C@ApAAA{PASC"LASSCg@bAAbAM>\ZAARC@@ApA?CU@CVW@ CXC: CXCGpCXC2BXCVu{?> CC@ApA?d,UBl@}-AtC{,A8tCA8tCA8tC7>Ӿ+AvC@ApA?W2C6@[| CC0C C70CϦRC70C)B70CIz?9 C>C@ApA?CiI@HBVgA=BqgA>CqgAPڥBqgAWx?BA@ApA?κA Ah`A]5C}aA55Cw@?VA?E7O>e`Az3CAApA? C5@DBEbECB@7CJC6w7CHCCHCmAZCj}?7C̥C0AApA?IBV=b@;BcuCٓBcuCGBcuC$'"BǂBw?B\uC@AApA?|jBTW@5rBBzBB[BBEɕAkCy?2PBBPAApA?o{iA @xAxC!AxCSJA%uBߗB%uB]>mA$xC`AApA?2AA6FBoYC[0BlYCB4C?ApA?zBI<@B=CgB=CRB=CyBA'x?^BA>C@ApA?vB.#@B}CB}CA}C>aBOBk?""BXC@@ApA?ABLv@6B_C*&B_CB_C$B_CvQo?eBC@ApA?dOB因@$A?KCAgC?,BgC8aAgC 1?oAmͳC@ApA?`B4Z@yBC־BC'CCBBC_t?#ِB8C@ApA?BÊ@nBBfBB2wBBS0BCt?J-BB@ApA?xB_@,5B{CY5BHqCxUBHqC++AHqC)'^?S5B)UCAApA?a5C^@&-CPB-C^BbI9C^B7A^Beg}?-CBAApA?NB#j@-B CcB C3|B CB CVRt?_B C AApA?AMB>@WBIhBB]IhBB_IhBaAVnCv?BdgB0AApA? AAA(T%BeCB_C4LQA/CESB0CE?$B<C@AApA?_6SB,u@u3B0zCDŽB/zCN B/zCusB^Bt?܌BXzCPAApA?3CB @BB YBBqBBmέA>Cw?BB`AApA?PBGGA.DBB۞BBߴBB="ABHTy?3BBApA?/B]@yBBzyBBBB sz@B|?7yBB?ApA? BW@@16B %8C%Br7CˋAox@Blx@bW?kGB<7C@ApA?K1C /@3CBCB[DCBQ,BBL|? CB@@ApA? B@sBYCBMjYC}A0BZB0BIT?WB;YC@ApA?dMCp@GCoCŔHCpCWNCpCP@pC}?9HCzC@ApA?]ݑBZ@@*CAApA?Q\B@sBB"BB)BB5Al+Cw?|BB AApA?i3Ck2s@iCOy%C CRy%CCRy%C\AQy%C }?Cr%C0AApA?VPB=:@CA5XBL`A:XBsB:XBLB9XBX?A=XB@AApA?bA.AzAjS"C!ݬAoS"C*AoS"CÇ@)CT%?ѿAg"CApA? B @©B4ClB4C@B4C@s%7e?B4C?ApAVBՐ@ABBŀC@B ŀChA ŀCB-BrR?sBBXۀC@ApA΢BM$@ԆB (CB (CB (CoACu?cB'C@@ApA? Bq7@B7 CYB7 CC7 C^B7 Cw?}B@ C@ApA?JB~\@BVBkBVBsLBVBzBVBzT? BB@ApA?>B@GA4C1AXC:BXC@XC9?%BAVC@ApA?ٸB ^@]BdB\ BdBFӭBdB`@(C_mv?zB#aB@ApA?B*b@uBB2 BBBB??BAx?B%BAApA?z?BN@`B~BCvB|BCEA|BC9B Bxq?TB9CAApA?*B9@BxTCȻBwTCB_QC AApA? Bܮ@BnCBoC1BoC(cAoCrCx?ݚBCApA?arBB@b]BCTBCBChACq;?]BC?ApA?IgKBMI.@ŊBcCzBcClAcC> BC%k? B)aC@ApA?QB%@nCw-C0Cw-CyyBw-C$BǻC{?HCs-C@@ApA?B_Q@ǒBLC:̔BNCfBNCZLANCv?6BfC@ApA?B)@O%BgCBgCqBgCK?NB=y?\B{gC@ApA?>B@jcB86CUB@6C@?6C?B3@g?0dB6C@ApA#ABˇ@yPBvCAH#C7AM#C@AM#C@'ޫC?A#C@ApA?묦B\ @uB8)CB5)CײB5)CA5)CSw?ɓB)C@@ApA?=B=?B+BB+BkB+BHA^Cwx?Bj+B@ApA?k*Bj0@B]pCEwB]pCCB]pC%A]pCzv?BbpC@ApA?bA¼A೹AޫBAϫBՏ?ΫBA*Cm ?%A=xB@@A?-(D%?8AQ>D!16I5Dv 6iDw 6@B4C?o9D 6@A?t D_AD4C D4Cd D4C@4C?WD4C@A?3B<|@BtB4CB4CB4CD?4C>2B4C@A?@C{@ԩB3CB3C.C3CB3CJg?B3C@A?JD @mD3C D3C(!D3C`B3C? D3CAA?+Ce @]C85GC5C5`A5?C95AACu@@C4CaOC4CC4CA7?C4C AAeCi @v\CCdgCC0CCBC?fCC0AA?^C/ AC4C]C4CD4CB4C?C4C@AA?B^@ BBC"1+BC_B4Cbv?BCPAA?y\C#@ZC=5dUC5N*dC5ZlA5?(YC@5`AA?2NCT@BC4CA4CAA?UBGWAvBˋ6mB6o>q6>gkB4CH?CuB46AA4:6Chs@Ħ5C4C5H-C4C3,?C4CA4C?sO6C4CAA?|C @BBy,CgB?BAA?C-@y:CMiCvC]nCr{CmCr{CdBr{Cz?KkC$yC@?Ap7C@NĖCBmCgBBgB1CZC9z?*ʋCBA?A?B=e@DC7C.CӓCAӓC>CyNBTp?C!CA?A?v*CP2@rt9Cp2CU8Cu7C Cu7C)Bi@t?U6CF5C A?A?)lCG@tCSC.CkSCTDCkSCBOcA({?VC~SC0A?A?$zCx@tC;TCnCTCkCTC0߇ATC͘|?oCFSC@A?A?kuB@j Bc?B`BZIB(AZIB2A{C>iH B4BPA?A$:B@}ߐAB~eABDBBUJBBm? FAvB`A?A?HcYCv@CrCی CrCލCrCN/CrCviz?9ClrCpA?A?ћ)Cs@>Z%CV,9C!C,9Cu,C,9C=#A,9C|?.&Ck8CA?A?.fB@v>B.BIP7B.By.B.B!k @ C]G??BBA?A?ECd%[@^xCC[mCCDCC.BPޢCf}?3zC4CA?A?N Cw@yBCBCTOCCax`AC/x? 9BCA?A?[9iCf`@hCbCnjCbCwdCbC6@0v8B ~?\hCFbCA?A? CZq@CzCCzCW !CzCZAzCz? CVzCA?AAIB@ɦB4\C'DB3\C6B3\CͶAB B s?/B\CA?A?D]B!@vBFCSBFC腑BFC~=f@FC @s?sBZLCA?A;B@PBC2BC_BCgbACCW@9C ,BGC;>DB!C:>DB4BeCq?UEC3e>B@@A?EC0@dCZCCC'CmC'C9BO Cz?+COnC@@A?FAA,BCIB VCBCk9CC|>FBDC@@A?D@D>CD C!D CB CT?OD06 CA@A?C @C@'pClCDnCgCDnCӈBBnC~?AӔCA@A?)B]@Z3Cy@GC@B@Be9Csx?" CA@A@A?7BǢ@ӏB CBD CBE CMAE C<1q?][B6 CA@A?ApC3j@5UC+.BPC.B.\C.BcpB.BrC~?$UCM[.BA@A?vB9A\qPB,CGB,C7}B,C[A,Cj?jPB,CA@A?ʀBA1)BP[BlBV[BinBV[BRp)BV[Bj?92*B6qB@@@@A?rCdj@{C'C3iC_CUjC_C>ECw?'qCxC@@@A?ɆCYd@= C& 4AtCJwACJwA&|3BtCC }?*CcA@@@A?zCf7@IuCSCCmxCFICJuCFICBFICmz?yvCQMC@@@A?eDn@C[NXCvjCR^Cpi1DR^CTCR^CV?/Cg \C@@@A?OCe@0.CC|+8CR C]CR C^BR Cy?Q1C{ȌCA@@A??BVG@C[A%Bl[B)BzUB(BA [Cm?8CY5!BA@@A? iC W@~C,CBjxCCNCCD&B0Bz?5wCCC A@@A?˦C@C]CCy^CUCy^C0Bz^CK}?>Ck_C0A@@A?1Bus@!BGC{B)CB)CA)CYm?BzC@A@@A?aC|@8TCTCICCہoCChBCz?NPC0CPA@@A?SC֓@WC"4CˏSC4CMC4CSֶ@8BU|?1VCC`A@@A?BJ@CsCCsCBsC[[A繦Ckv?z CCpA@@A?B|@@bB%C]B7%C HB7%CbB7%CDg?_Bǁ$CA@@A?CSS@)CCGCCcCCOIAC1~?/CCA@@A?, C T@[B-?BsB B<9C B sB BCw?x:B]BA@@A?7fB@1dBByBB1BBA Cav?BXBA@@A?66$C\@Cw,CCa,C I&Ca,C A^,Cb|?C[$CA@@A?}B@,B 'VCpB *VCB *VC?B`t?LB5VCA@@A?DdeC`W@eCRC;_CRC?hCRC<ARC\(~?eCDCA@@A?}A;A8`!B_CB_C[@_CAB-z?? BQCA@@A?͛B@.}B CͫcB CHB CB Cٽu?}B^ C@@@A?CI@6C CbCRB%CRBAS#C%|?OCKB@@A? B/@BYCX CbVCxbBbVCBT Bb?|7CdWC@@A?w Du@;iCCCt Cϛ(Dt C`9]Ct C~?CGC@@A?OrfA@᧝B}{BPBCBzقBCe CCtv>BBB@@A?Cl@Ξ C°CҀ4C C̲C CG1C C{?VS+C ^CA@A?mPdCOC@qCcCC,eCC,eCCCFB3{?aCmeCA@A?2Co@:CCCρCCρCi_B;B)}?֫CBC A@A?J[DB4@1ʖAY/)AkA]ZCA@^ZCA CA5@C>hAq_A0A@A?hCÆA^CݬBo#CfB DfBaBfB?CDB@A@A?C]@CFҦC}C"C C"CMAECdv?hC~CPA@A?B@)&B2BCQ0"BBC BBCڃBBCM?gB:=C`A@A?BT@BܠRCBRCXHBRC^tARCss?_.BESCpA@A?(AA)AS)Bu(?%B" )? @ 4C8B 4ChT?P%B?:@A@A? eJCZ@eeC]RCZCgRC&5CfRCGB?+A|?fC{RCA@A?Ć@#CcCǑCcCCcC+BcCy~?|چCCcCA@A?S~B@ oB̷CYBַCIBַChBBVBe?wBG܌CA@AB@WBe!Cy:B!C%zB!C^A!Ctq?B!CA@A?1aC*j@-TOCٞAOCA]@oCAAA'~?'OC!(AA@A?6BwAAtSC-AjSCBBjSCm*BjSC .?NOA 1CA@A?1B3AB{CA{C?T(B{C$'A{C|U?4BXzCA@A?$uBAfBlCQBlCJk|BlC W+AlC;q?fBC@@@A?DC@@A?7LCr@CCCLCCLCq:ByC@|?%C_AC@@A?bC@*C9AC"C%MCɇB%MCx:B-Awt?&CdHC@@A?QC=".@b-CB~CBBB. &C!)C_G|?MCzB@@A? r?C@;0@_m^C6C[C3CEC3C넁BuC y?%YCkCA@A?:D@OrDRC_ND[CcD[C}@o2C ?D!CA@A?mfChn@FB/UCBCbTC;CbTC\2CaTCx?CKOTC A@A?MCNY@`C#Cg\C\$C (8C\$CkB.C{?9`Cr%C0A@A?0 jB~@C*sCCHsCjA#}BsC#}B+J]?@CXqC@A@A?Cl?@=uC)BoCBdCBBB}?6gtCbBPA@A?wB@lBvoCikBHwoCBHwoC:u{?JBqC@@AIBC" @qC~WCqC߼mCC߼mCBBwfB7x?0mCdC@@@AՓB@pB C$XB7B6\B7Bx!kAMCӱ!?o|BC@@A?=C}@CAC)CfCuqCfC,CB}?CtfC@@A%C:AD]BɯD0!B8:C0!BhBL\C?jDLB@@A'C1(@6qCLB^EC<CЃ@ܴCg CCECmCEC BEC|w?j C@C0A@A?Bm@Bp"BBӭB}BӭB3AӭBLTn?@iB;B@A@A?B.[@BBgBBfvBB6ŋAlZC m?GBBPA@A?SC@L'dCLC]CLCaDCLCE$A^ Cy|?AcCaC`A@A?MBF׵@SB?B2?@B3?[A4C_j?B~ҳCpA@A?hBA7@dBs8VBCB!8VB % C!8VBBB!8VB0t?̞BTBA@A?&A< A?AВBEA2B vA}CB}C8B`>e=AڔBA@AD Br&APWB4ƃB̌RBŃB@uC_gBuCVN0?(VBUBA@A?|OBi~@]}B|:C B|:C )C|:C0cB|:Cp?(4B,:CA@A? C+@W CAY0 C"A C$Ac?gA z?X CAA@A?A0C[@~*B ݀CB݀C'`C݀CT|B݀Cr|?`B\CA@A?)Cm@BxBbBxB>[CxBBxBS'|?+BBA@A?uhA;AACACz8AC@GB?AӍC@@A?Bodl@[SCucCͯB@kCgB@kC]ŠB@^Bi? CgC@@@A?rZCz@#C&C~CC.CCwUBB{?.|CC@@A?FCCg@eZC]LCHCJCΞBJCgBAIqx?}KC4KC@@A?sC@qfCCjCCtCCAC7{?eC%uC@@A?ΟCڋ]@;@CsCEC3C%՗B3CBe*!Cs?4ACȪC@@A?nC~]@֔Cy+CC9C&C9C]CC*{?5CPCA@A?u,C_^@&`CTC aCC1cBC$)CgBJy?dC-CA@A?}qmC@7Cj;BtDCѱB&ϦCѱBYLCѱBՇy? CB A@A?{nCs@7JCKC$BCKCCKCyBKCyz?-JCLC0A@A?~:CӍ@l3NC A$WAA@A?t* Ctd@J>CX36C Cj36CPCj36Cq>Av @y?FCyy6CA@A?9B`AAA\vCAuvCHAuvCN@uvC" ?+AyCA@A?B@BBQzCdCB{C_B{CbZB{C%Qd?eBB~CA@A?ZCǕa@W#*C)CI&CȪ)C߄CȪ)CBȪ)C}?*C)CA@A?BO@26BǥC.BǥCBǥCvBǥCNm?W46BpCA@A?[CB%A?BH}Cf*BH}C؉/BH}C;.?H}Cb?K@B^|C@@AA'CnAqCKBxCB4=CBYBC^~?)CcB@AA?W9C@@ C Bth"CD$ABCD$AެBI$A6v?RC+B@AA?CC@eCB5CBrCB CB-qC-~?C~B@AA?EC"9@&C?cCC!C,B!CKCZC CS6z?`CC@AA?C~b@ϸCכCCC~CCBiC~?дCCAAA?퇰C@C!BҰC&BC&B4@BZ~?'/C(BAAA?QCG#@>CF4C#C#CC#CB̏Bf{?8C2C AAAOCs_~@}CB&؀CB/CB ĦBB B}?OCB0AAA3-B؎@KfkBsC@AA?uсCg@/%CBaC)MBrC)MBA{C@%{?C;YB@AA?12C5΍@ CE(BtCR9Bm:CR9B`AV9B v?ACKB@AA?ߤBfM@CBhC3CjCAjCB@[Bj?nCmlC@AA?:DC @KC@_C0FCy^C4h:Cy^CEA+BFz?[JC:^CAAA?JBg@8!CZ(6CwC86CڊA86C C @o? C 5CAAA?c1CI{c@\C~BSC~BW+BC~B>^7B~B0#w?+C9E|B AAA?B{@bB$AqBA CABAct?SBvA0AAA?B@ CȴhCtChCuBhCARBu?K CnTiC@AAA?B @B|C BCBCBCp?oB؍CPAAA??WB%@kdBtËC#BiËC@hËC|B Bg?B\C`AAA?>~C]@ECBrlC!BʮC!BA!B[)y?CiYBpAAA?5Bgn@CAD BCA}kkBEAjBICqw?sC$AAAA?TA,)ABފCJB抄C\@A+Ba^B+B4?BlCAAA?[X}Bb@CJBC~(LBCOgBC@C"[?KBCAAA?.BZ*AAcCͿAT3cC,AT3cCz@NAHuCAAA?3A1(A=ABBчAB%@}CdžA}C>UAjBAAA?FBW@"B`BB`BGB`B6B`B)i?+#B;B@ AA?/o4CzW@CA;$CA.5CAψAA=u?"CxA@@ AA?SC%@ҩCh[BCB&CBDBB}?CB@ AACށp@BhCƖmBA AA?|C˖@rNC)!CRѓC!C(4C!CZ,A!C.Y~?CKC A AA?n`Cw@zC9C%0sC?CHC?C)BC"|?~CPC0A AA?CJd@GHCP]B CCP]BBP]BtB!TkC{?ICs\B@A AA?yC˨@CHCŝCCCUCCCgBBC~?h^CDCPA AA?1C_H{@zCCB1C[C1CMB1C]z?9rCGC`A AA?B@GBmBBQBYFBdCe?0`B}CA0AA?NhC@iCxCAeCoCgCoC?kC1}?agCCA0AA 5C q@ưCsC@A0AA?LCWj@nBGB=B}GB DC}GB B}GBov?nBBPA0AA?B=@muC _C. C dC*B dCB@.Cu?%CfC`A0AA?mC8d@!Z&C#CyATuCA0AA?|o8Cz@CBCxBVZ^CxBBxBp5}?@CBA0AA?ofBgAT BwCBwCjBwC,AwC8L? BƧCA0AA?e=By;ABAx1@A1@EB1@3A1@0S?qQAх$@A0AA?%BArBlBYx_BlBIrBlBo@lB2i?rB B?@AA?` C;@BwCBC5+*CCtBCto?pB#C@@AAL|CNhAИCbA%yCA9LCArBGC|?VC A@@@AA?C6@ƵCK!C:~C>!CFC>!CwA"Cz~?Cp C@@AA-B@B箉CBCBCBBf?CljC@@AA?R0C;@yB)EBBLmFB CNmFBbJBOmFBl?1ӸBGB@@AA?gj"C͏C>"Ce"B="CĜ|?\ BpCA@AAyB͵@ B1NC/B}1NC[B}1NCA}1NC(y{?B&NC?PAA7C]@tCO,BwCWx*BdBWx*B2C^C2{?"C *&B@PAA?zBV@:BCBCſCCBC_(h?zBC@@PAA?fzC@zC.CCCVCCB?"CQ]}?CʪC@PAA?;CA—C6BC1BΗC1B{ج@1B>~?wRC HB@PAA?JC]@B2BsB1B@C1B4ϠB1B w?IB]B@PAA?: Cr,@~9CB4CBBB jB:C2y?<4C-B@PAA?qB@hBi-CBT-CuBT-CL,ACb?3B-CAPAA?kCVn@X{CCuCCc#CCYBC X~?|yC CAPAA?2C>@B$CB CB4aCBAxC{?'CYB APAA?gnCn:@&C+ WA C!WAv/B!WA)ArACy?.C<\A0APAA?>BP@BQB~BBBKAC8ȻAs^CAPAA?B̯@BT&CB&C4΢B&C~@&Cq?{͘B&CAPAA?EB73@BB:BB7sBB!LAzCOn?QnBHBAPAA?NBv3A80A߻B?`AA?BCɆ@b-,CK $B2R(C $BLUC $Bj<5B $Bc"{?)C$B@`AA?AN AnBC&hBRC0B*PCB)PC(>BC@@`AA?p~oC@k C#CC#C4C#CsC#Cd{?0 CAoC@`AA?B9/AڛB LC]BֳLC GAA oBAx4?%ݔBkKC@`AA?wЩBG@VB~BB笪BBBZBBBfmAYCj?iBB@`AA?T&Cuˠ@tCQ8BCS8B³DCS8BBS8Bz?QC2>B@`AA?YF;B4@sBBXBBQ@BABC^^?9BYBA`AA?QC+4@2tB 7CXB7CC7C7@7C)y?vqB7CA`AA?2A-AP#&B5C[BC;AַB%BַB۹>g(B؇C A`AA?Bj@7BAvBimABjmA4AkmA^b?ӁB0;A0A`AA?[B5@B*hCBhCj&BhCIB8 PBq?ʳBgC@A`AA? Bq@, FB.RBABVRB'imBVRB-A[RBW?GBWBPA`AA?xjB4@lgB7{BnhBa{BfBa{BArCeT?geBm|B`A`AA?%CN@rCF,CCL,CPBL,C{_Bz&C%z?fCX,CpA`AA?+BA AALacAuAj`AAj`A.?=b`A?A![AA`AA?B&AQBψCOBψC=>ψCMB(?B=F?RBCA`AA?6"Bd@yCAbpCA*BAe:AMCz?!CxAA`AA? jB]@ߖBFnCBEnCBEnCBFnCXoy?B"}nCA`AA?+ʘA-A A]LABOAB~1@~C&AC]?ABpAA$ܤBڞ@hBB bBBKBBo=BBy?#`BB?pAA?C@BC}BCu!CC=BC%w? B=C@pAA?QC2@2NmCƛC͉gCƛC4C7CƛCdABCW}?soCx@C@@pAA?C}@hCbBT^CB*ABB@)Cxy?W C B@pAA?pXUCI@bC]C'=]Cr]C~ICr]C)A'BB}?`Cx]C@pAA?=¶Bs@_B~CCB~CC#B~CC/BwA*u?|BDC@pAA??Ca @ CQB+O CQBR CQBIR@QB[z?n CFQB@pAA?sCz@w:Co`C%3Cv`CgCv`C"Bv`CU3}?=CtxCApAA?k,Czf@;*Ct:A"CA_/CAjGA A!{?,C>AApAA?_ȈB4@@B4„C7BrCJBrC6ArC2R?AB5C ApAA?YB(@VBvCOBvCF'BvC#A C4\?CTBC0ApAA?AdA]A3=A~C+9A~Cϖ@V;B AV;B-&>9A ~C@ApAAD C)P@B.C3JB.C C.C WA.C;x?\BP#/CPApAA?A-A6BGۇC7BԇCt@RB4TBRBHY!? 7BƇC`ApAA?_fB@0B}CKDBBtC:ABtC9 B"Cs g?BhCpApAA?B|@M|BPuC[BLuCcBLuC;BLuC? RB A@AA?[{CCل@^CBUCOBĊ,CMB$BfC|?4^CB@AA?\BK@z\BsCWQBdsCBdsCA|BjH?C¼CSsFB¼C{? *CCAAA;B|@BBw BBȅBB^ACty?qBBAAA?{A0AdAV CHAG C&AG CԃA͞C]!?:Ag CAA?8ZAYABClԁBC"WBB}BBc>݄BC?AAOBw@WoB>C\ndB?C7B?CA?C]a?RoB~EC@AA?eCu@#CMtC4C C)C CB CΝy?EOC C@@AA?6Bi@ӵBC,BUߤC/BUߤCAUߤC>t?vB^ؤC@AA?CU@CEC B6FCޢC6FCA6FC w?CWFC@AA?ط|B@BEB]B?B8.A?BuBϓC/m?*?B5B@AA?B@8pbBHgBZBhgBrBjgB@AjgBŽi?gBZkB@AA?Za=C?=}@C|B&C|B0fC|BB|B:V|?!CS[BAAA?B @_Bx*C9B{*CcqB{*C:ATCj?aB#4CAAA?gAC;@ CB'BkB'B%%B'BCj??BwnB`AAA?hBo@+BGbB5BGbBb{BFbBAlCvr?VBbBpAAA? +A,q4ADAOC"xAOC9 AOC@gAz>NAgOCAAA?B@9B^CU{B^CTB^CB^Cx?AB^CAA?44B,@BƧ 6"B: 6SB: 6 @0 6=?R Bd 6?AA?MBxi@ B]CnBCBCMB C*x?B4SC@AA?B@2AB}_CB^_C`B]_C@Z_Cl??B`C@@AAv8|B@AdBC,]BuCXdBuCe?tCd?֩dB|eC@AA?tB狄@?aBw1BdՁBM1Bq CM1B BM1Bq? BDB@AA?XBՐ@HB8"CW#Bn8"CCo8"C2sBo8"C q?X}B!C@AA?fB|@BqB{ϪB*qBh6B*qBD?NsCo?ABB@AA?ïB._]@B#0CB#0C׫B#0C$&BCev?Bs0CAAA? C:`@ШB=B2uBByWCB~sBB$y?BBAAAnC W@4C}CUCC,CCBC7_{?sCUC AAA?;C W@1BCPCNBCLCm81CLCgA.CG}?UACJC0AAA?3B@9;0BmB+ũC`AAA?=2A/AߺGBoC =BoC @oCKM,BCnBU?,wGBoCpAAA?Bs@FBB~rBBBB^aUBB`v?엉BɣBAAAB?AA?ARC@ј4Cv!CӢ2Cz!CDmCz!CelBz!CP|?3C3C@AA?DB\@BVWC%BWWCBWWC0AVWC/t?lBWC@@AA?^IBt@tBRC$tBRCAARC"B A+O? wBJgRC@AA?B$@\B6!7CjPBN!7CtBN!7CcAN!7CRs?B 7C@AA?H B0 AKBYBz^LBYB%L@l֔C YBl֔C<-?`GB͎B@AAaC!@BCBC7(CCB1BCz?QB~C@AA?EBx@)[BZBEw]B9YBڊB9YB`A:YB:Hd?o]BYBAAA?4B@B=3CqrB{?3CĢA{?3CC B܋>CV? B*APAAA?ЫB2"A3BQCBQCAQCsA\A+W?BmQC`AAA?:;B`AvB=CZB>CXA>CXɽA{'Cdoj?vBCAA?_C57^@_ C4 C_C2A?e C?AA?eBvi@BXCl!BXCBXC/nAXCX?K!ByXC@AA?ɅBJ@C}5BCBB6B5OB琉B5OB7A3OB^?(6BB@@AAB @"B,3ABP4A;&BP4AI@ E?CYgy?,B6A@AA?F2Cܹ@BVQC!5C QC]C QCyB QCg{?{B'+QC@AA?SAwA.ACAi)CXa@Bv BB\>hyAC@AA?vB;h@ŃBBMB@iBB@iBB@iBZo?BB@AA? ]C@cCC>C CC C$ C Ci}?JCCAAA?itB~@JtBY APrBArBAVAAwn?sB,AAAA?Co@#C, B3C+ B݀ C+ B@, BPz?C B AAA?FCc}@2BԳ`C(OB˳`C GC̳`C8B̳`CFz?;#B `C0AAA?3Bi@+B.2CB12CB12CCҚ@12Cw?桡B2C@AAA;HB@_B!C;oB!C|B!CAC2CMo?]B#CPAAA?]/DB@==BA*BǹAtC@AA? BB6@6B)BBMBwBMBh^8@=Bu?BB@@AA?eBC@^jB`ƪCBeƪCBeƪC?AɌ!CVw?B٪C@AA?;A AѢ BC BC7AC9-,BC9?>s BC@AA?0B.sG@DB YBCA⋩CZi?ApC@AABJ@ڎBBBB7cBBBz |Cv?B܏BAAA?vAA 4AFVBA@VBB@CjACW>,ABBAAA?srBԗ@BBfBB:BB\_BeCdx?EB@B AAA?B @rBC BCVBCk<B+Cuy? B!C0AAA?DB1z@cB.BB3B %B3BA3B{?D BB@AAA?.Bc@GSBOBmABOB@BOB*AOB5u?nBSBQBAA?xCPAT6C|CC{CC"A4C?2CC?AA?BD;@CvCCpCBoC\A9՜Clz?C$C@AA?YB@,BBn'BʼB{?ʼBR B3oCE*?{,BJB@@AA? C`@HB.BB[B`,C\B1B[Bex?rKBUB@AA?…B,d@CEBU@A B@AA?B@ _A&CA&C0B&C!TA&CaB0?'Au &C@AA?DB}@3MB:Bj BB CR?alA C@@AA?zB8'@^Ay]CXSAq]CoBq]C2-~Br]CIf?AAC@AA?yAQ@AC7@C?C.@uB Ws>A$C@@A?CTAc~CCuCCLCCAC?CC@A?Ce@9.CB1BB|?CBňBB~?l CB@A?pAhdJAZCBBCB*CC նCCo?pLCB@A?C%S@]BCE!CC%CCAB?~CC@A?sC@̇CCOCCCC%CC?7NCCAA?C@eCBCBǘCBBC?CBAA?)~D$@CCCCbDC̡ CC?MCC AA?7GCo@1pCBw{CBCBDBC?{CB0AA?Cvſ@[;CBE5CBRCB`yCB?פ7CB@AA?Rn(C@5CCE/CC!CCZAB?7CCPAA?E$C@ CC9 CCQB>CC`hMBC?F)CC`AA?ARC@(XCCRCCRCC<B?FWCCpAA?1CQ@%CC5"CC̚ACC-AC?)CCAA?Bs@BCmvBC BCABF?wBCAA?&EB>AVABAOAB,@B@C'<>^ABAA?NC7@-CBE,CB+ZqCB(BB?,CBAA/DC@V CC CCdoCCxBC?OCCAA?BAwBBBBhBBAB1?eؚBBAA?bBiuAY7BBz1BBVcBBIAB~d?;7BBAA?R[C@MCB:CB4CB.CB?CBAA?B&Ai~BBeBB9BB@BB?~BB@?A? _C{@&&C oBCBCBABBRy?CaB@?A?Cd~@u DVA~ D}A2C|A =CqFC͚~?~ DA@?A D58@r"C>RC@ D@q,C@)~?Cϕ?@?A?$+C-@?CCCYFCDYFCFBYFCI~?DCCA?A?[Cp@wC-CפCCCCBC@}?"C,CA?A?:C_@.^B#5C?1B8C~.C8ĊB8CZk?BQ7C A?A?pИC!݇@rCeC/C CC CA CK}?CC?C0A?A?C @䁍Cj{qB$CnpBCnpBAwpB j}? CjB@A?A?4C%\@flC鞪C.dCCSBC BYo!Ctz?nCLCPA?A?]C/@<ވC=CӅC6C)C6CߢBBUQ}?pCC`A?A?5C@_cCC^CC?CC*ByC|?cCCpA?A?B@YBtCЬButCxButCGAutC>t?c±BsCA?A?nzHB5'ATCBXB,B{[BIE@r[BUB֙CY?"`B@CA?A?7)Cےv@w[CrC-, CCLACC PBCF8|?V CdCA?A?bBw!@hB EB_BEBZAEBHBAeCj?dBFBA?A?IGCMb@"C-EC#CfBCfCfBC^GBfBC}?I"C7CA?A?cB@BSCZBSC7aBSCgA%GAvw?(B5aSCA?A?>C+Qp@CBCCBџ`CB|BBz|?C`BA?A?vBh@/^B2CB2CB2CP@eCcv?B;@WWCpzC~cCbxCuCbxC+jAbxC z?]CHyC@@A?_C``2@f*C4CyC圚CKC圚CB朚CI}?ߊC&C@@A7CxL@ wCWCMVC9CKC9Ck}B9Cj|?z\CCA@A?LBJ~@BPAnfC1hA A0hAIBGCNd?6CurAA@A?cC4@C}BC"BC"B2YBC}?CB A@A?<PC*Mu@tTCnB3SCݳBq1ECݳBj"`AhC0{?WC᮰B0A@A?C@ e0C>B +C^BB^BvVJBגCw?43CB@A@A?Bų@0BBѥBQABQAdAQAa2e?˯B'APA@A?pLCR~@CnmaC ؀CmaCӨCmaCB|5B|?aCC*bC`A@A?[CП@gC)/C!C)/C C)/CWA)/C-~?mCۃ/CpA@A?YfB0@keBjCm`BjC$)BjC"]ABOZ?3jbB+CA@A?4B@A9?6B \qCp,BWqC=xAWqCAo_uBe%? 3B,PqCA@A?X|VB3 ABBBB;IABBUxC2k?FuB'BA@A?̎EC;[@C BlC BK~C BB B%5{?6CBA@A?B>@(BzCEBotC]1BotC A8:Cs y?]BgCA@A?œB@CYdC:CUdCKBUdCx"ACOz?CTUCA@A? C@B޴nBfB״nBV$C״nBwqB״nB&x?BnBA@A?naC))@NGSC!CHC CVzC CMHB C ?(@SCCA@AlWiBA'BxB;6BxBEIBxBAxB5k?R9'BwB@@@@A?)vD":A!D C'DrClCrC1BāB~??D"+C@@@A?_`CRp@VCPC CJC=5CJCBذA~y?KFCLC@@@A?#&C@CCRh4C,C C,CB&B XCu?#CuC@@@A?xB6@U C(C3C4C(NB4C?B 1?$s?C m0C@@@A?D@C5DBD"=BD"=BiAA#=B#?D`BA@@A_ D #@}D&FCzDtECWDtECQBtECu~?]DECA@@A?`C5H@BLC9C=GC8CMC8CrB8Cz?GC+8C A@@A?.C;a@C6mC CmCDBmC(C$fBVj{?ՁCKnC0A@@A?WCTHz@Z$C`C% CMoC&CMoCgACv?j+CC@A@@A?S9C~<@FC&s}CCÃ}CCÃ}CAB ~?C\}CPA@@ABA|@fB4CٸBqCFCqC6ԑBqCo?XBC`A@@A? B@ZBѩfAJBfAϲ>BfAęB*kBC{i?cwBYkApA@@A?HgBGK@Q A'ޟCAޟC2EBޟCjyAޟC[,?9AbѡCA@@A?iB2@Cw.@Cu*@oHAw*@B{6Cvp?%C@Y&@A@@A?IDeB@AGC>ƚACCBCqAC"?A6CA@@A?B8@~BKCIBKC.8CKC$BKCt?'BDCA@@A?QC`@ )CC*C&CeC&C>lAaBTO|?>)C .CA@@A+\CW@ALBw?S?CJBA@A? xCs@OCB QCBZCBUBB{?fRC8B A@A?;C5@KCBCBCB#F-AB_?KC8B0A@A?) C"@C,CCSC ECSC}@LBFY}?CRϐC@A@A?D5@CF@GBC+BT>CDB;CDBh1@yC{?-?C<*BPA@A?B݊@ZB(B iB3)BSB3)Bq]+BMʈCbC}?BEfC6bCA@AMAS2AkA7jAAΤAza?@™HC=BÙHC>*A9AA@A?*B @2BJyAYB0JyAB.JyA͗BCCɆw?:ByAA@A?B4@'rBlC8hBlCa$ClCRBlCu?"sBGmCA@A'.Bi:FABDiC#tBCiCExACiC1B B+e?BdC@@@A?PC.@QCCCW C4CW CBXC~?xC C@@A?]C(@ÝCC%cCC}CCAC!}?C=C@@A?9CIi@ CC%CvC DvCOBvC~?3C3׉C@@A?cCQ:$@߇BMsBjBUSBj CUSB4\BUSB^?7B]B@@A?Ba_@CaCvwCibCj{QBibC71B 8BP]l?CaCA@A? 0?CC@"RCJCRCjCrY#CjCC >BKBz?3TC{CA@A?C_@cCKBClBQClBޣuAsB}?aCB A@A?C@U3CRW@],Cͼ|@͛B˼|@B7CeXu?4CA@0A@A?'B#@]9BCk6BVCVBVCvAVCGB?OHBmr C@A@A?BIy@ Q$C!B_CBcBBSB;tTCw?$$CAPA@A?=Bܸ@(AtdCAdC)rAdC.@cBb?)|BVC`A@A?B(@1BQMABA@A?9Ci@ۜBBCBpmCBBB |?BBA@A?7B@ܲB^vCB^vCPߴB^vC$?^vC5u?lB.hvCA@A?CǼ@2BXB9BXBBACXB BXB|?fBNnBA@A?hBb@9JBC3BC^BC UBCo?JJBC@@@A??XC@6DCC5`cCKCGCKCsA&VCb{?Q"VCC@@A?C@1C>C2Cy8CW By8CmBV;@s?`/C:C@@A?Dz6AmD wCDEDouC!CouCCB:~?u[DhFvC@@A?A(AB>6CBxJCSPB)Bw*B)B>KBC@@A?Cn@bBJZB B0YB1C0YBfB0YB/ek?BɦXBA@A?X C[4U@jB9vBnBB"CBfBBr?BǵBA@ABT@C@c@*CmB:+CP[BKCP[BBO[BX|?+CKBA@A?B@ BKC3=BKC~BKC|BKCbv?BLMCA@A?rZCEz@B*\CdѯB*\Ca+C*\CB*\Cw?B[CA@A? B@zCa[B \Bi[BcBi[BYAքC|?-iCzBA@A?6B@#B@~ECB@~ECeBB@~ECeDB@~EC/2p?#BEC@AA?yC@mۑCxC΋C4C C4C0A4Cfr|?C8C@@AA?2DX_'AbVDU2C*D2CDD2Cl!C2CD?6`Dl+2C@AA?߇ D,@D| ?D CD CoB Cd~?DC@AA? *CҸ@<-CˏCy(C!CC!C$.AxBPu?-(CmC@AA?B/AoBCBFCDZbB]#C~$%C^#C6?BC@AA? Ct<@6C42Cq3CnChBnCzBmB-w?Z)7CzCAAA?DCAC'OCwCOCSCOC4yAcA v~?CqiPCAAA?^C@ ?CA=:CPAKCPAXCOAz?j5HCA AAA?C\@B{B^B/B *C/BB/Bp?9BfB0AAA?ΤB@+9BaBOgBaB$EKBaBAFlCr`?xBheB@AAACL@,C4B (CYBCBYB/&B׀C6{?,C BPAAA?BJRCe>BOCe>Bv`?rBSBAAA?QjgC@9Cj;CC5C;%CڈC;%C0B;%C{?ACTuC AAA?BFq@BBߚBBCBaBBvl??BիB0AAA?BЈ@BfCVtBfC p}BfCAEKB$i?/BhC@AAA?qC V@ǘ CBCBCBVABz?E CnBPAAA?WBZ`@gBA1CFBx1C[Bx1Cd^AݲC+r?B2C`AAAL7Bj@/B]ACBW3CԸBW3CI=AW3C8u?rB-CpAAA?m3CXL@KB=A*ÙBA+CA9BA8v?QBlAAAA?*pB<@!wOB'QC6OB'QC+7B'QCY@JACAAA?Ar'AAtCAuC\ 2? B]AB0 ?YAVCAAA? BNAlAkuC\4AkuCԡAkuC~@ւBF"&?AduC@ AARB*@*C >C$C :BΔC>:B>bC}?CI7B@ AA?B1@BCǺBt1ClmBt1CKBt1CIk?}BC@ AA*Cc@C1C CыCCыCМ@C/Bs?CYCA AA?gC[k@MCB!HC8B C8BYB8B|?3KCݔ BA AA?zPB_@C;ÜCsA COÜC4doBOÜCРBCt?Ca C A AA??C @cSCB@9MCB>CBʅBB}?^TCkB0A AA?9%C=`@5'jC&=C%eC&=CB&=CeCrjA}?jC =C@A AA?cCa@'BCCBNC,CNC.JBNCy?DBCPA AA?RB@˸QBHhCHBdShC8BdShCIAfShC#U?(UBbhC`A AA?LB\!ABC?C6B?C~A?CAI8A@??BJACpA AA? B @BOC%BOCQBOCSB(Cvu? BmCA AA?epB.@UӧB%1CB1CO'A1CdvpBCg?ABCA AA?Bs@!B@C)BCCCBC&s?+BCA AA?yB@CUΊC{CPΊC6BPΊC3GNB?9B{?%CCA AA?QB)@'AoNCA}NCםB}NC0EB}NCzJ?υANCA AA>ZA/AZtB&BpdB&B5YA CsB CW?CNtB BA AA?UHBA݉BCzBCu5ACBAMC[q?C҉BC@0AANChm=AaCqC[CC:CCx^BRכCY{?0dC70C@@0AA?օC˯@3CΟBi.C BR]B BBxYC6_w?h7C%B@0AA?A8"Cf@]5C'B\)/CWTB!E CVTBBCnx?D5CB@0AA?UBؓ@BhCgB C3B C >{ Cmk?BtC@0AA?^CƵ@CjC\C~CC~ChlA,Chv?4CC@0AA?ArA5BiCIpBƙCXBLC-CLCKE?lB?CA0AA?Uq]Cމ@nCeAgC:eAkMCBAaLB BCB#BKaAHC:gBHC~?LBWOB`A0AA?eC2X@ܶB+CCB+CKeC+CP B+Cx?)BCpA0AA?N Bg#A]BgC C^BpC CE<@ C5^BC81?^Be CA0AA?B<@B'CB'C0yB'C"A'C`u?TB&CA0AA?hC'n@>CA)T?CAICAM?CA7~?"?C}AA0AA?$Bs@Cp#CWCp#CsBp#CP1BCz?wC%CA0AA?kB YIB(C A@AA?pGC@[CHClUCHCs6CHCAХA!k}?}ZCHC0A@AA?Cxj@hB'BBB1CBBBZ5v??BnB@A@AA?fWCm@uCNGCe;jC)\GCP@C)\GC<'B>Amx}?vCjGCPA@AA? CTz@^6BCBCZ.CCBCx?i'BcC`A@AAC|PR@>C)`C|C%`C:C%`CA3B[z?)-C`CpA@AA?SCUJ@" [CC]CCECCJ\A| C~?ZC}CA@AA?B>@BACkBXACBXACAl[As?KBACA@AA?/Y@B Aa|AC$ACv%BC4AC=?ACA@AAJlCۺq@;,%C@C\C@CC@C9-AfBݍ|?$C:ACA@AA?CYx@;Bc߶BBc߶B1Cc߶BjBc߶Bsh}?BsBA@AA?{TB ABSMCmBZMCqBYMCp AYMCz(h?C|BߝMC?PAA?t)CY@CxC2 CwCQYCwCA( C~?cҳC6hC@PAA? dC6>@C$C~C*CUC*CGB*C~?vҁCC@@PAAHB@eBf)B=yBf)BBf)BD@Y^Cr?lBt(B@PAA?GC|@'BCzBxCB=CxCoBxCJr?pB!߭C@PAA?VB@0C*?CTB>C}TA}2CC}2C̿c?ƇB2C@PAA?zC#:@FCe CYACd C"Cd CeBd C|?}ECٟC@PAA?վBQ@BwBBkwB\BkwBUBqCt?gBisBAPAA?B8Z@QBhB2BBABBb@Beu?B@BAPAA?DBs`h@BCBC>/BCpB[B'v? B*C APAA?7B@`P7BҎC’-BĎC4AĎCQ=AyB,? 0BC0APAA?C6>@oC TwCC7wC}C7wCA7wCz?CTwC@APAA?CN@9hC蘇B? CB6 CBJAB{?-CBPAPAA?NBa{@6B֣CB֣C5mB֣CϝBgCрt?B'ԣC`APAA?BFAtrB*hCXtBhCɂ@ HRBYBHRBUoE?boBhCpAPAA?DB @BB!HCeB HCqC HCk)A HC y?BICAPAA?$5B"%A>MB ِC)B ِC^A ِCVJB+dB]?B(ҐCAPAA?BA$A BECBEC]ElACuBBC > B%CAPAA?cA)AEBF]7Ca6B?HC@`AA?6IB@= A܀`C A`CrA`C!A`C>يA[CA`AA?#Baw@3BeA|}BABAШ@USCPh?GBa9AA`AA?Ct@CrACACA´AAy?p`CA A`AA? MB@%|BVCȺqB]C|A]C BriB(U?6}BcC0A`AA?'CAM@_CdCnCdCFCdC-݄BdC{?CC@A`AA?B 2Z@BC$C`A`AA?QB& A#Bp%@BlKX@ ;AtKX@A.a7C!?dB)`@pA`AA? BE@&BIzBBJzB'BJzB #BrCy?cBOozBA`AA?|ßBh@evBcB:oBcB7BcBAcBk?uwBcBA`AA?,BM+ADA?dCɚA?dC0DA?dCj@i@B>;A>dCA`AA?|"BGI!AB(C5B)CdB)Cu?BO?{BOC?pAA?uyA ABͫB B`ΫB>MAC1BC_> BB@pAA?dVPB1@WdB,A`B,A[A,AAN>CT?MfB}A@@pAA?zGBY@dѨB%5CBB&5C@&5C{B?8b?_Bb6C@pAA?QYB\@@'0CB0,CBABCzxCy?1Cv$B@pAA?Be@~tB'CpWnBT'CCT'C]BT'CCn?ItB&C@pAA?<AC.@;CN(CB{4CN(C[pHCN(CǨAN(C+|??2B APApAA?ZB?+@ wB`4CwB}3C٣B}3CyA}3Ci?v_wB3C`ApAA?P B@}lB. CԔB. CeHB. CQ@XCdWp?DB CpApAA?p=B7+AW@B&AiAApAA?lBM@>BtCBtCAtC\PBBxo?_BtCApAA?5_A)A6OBrTLCAqTLC @pTLC(AA1)?éB{PLCApAA?N(Bl#A'BgaC_BhaC~BhaCvE@C`?AEbB@AA?/ZB0 'ABV@CvB@CA@Cw4BB!Z?,BC@@AA?]C@NCAwFCAlzpCA (BA=}?LCA@AA?kBH@eiB쓦C^BCCCBChk?cB˦C@AA?>BO@eC^CB^CLߎA^CPB/*BVq?u6CR^C@AA?-C* @ @VCj AMRJCm AlCl ACk Ad}?~UC3A@AA?DB@\gBM'Cp._B'C烌B'CqegA'Cb?jB@'CAAA?QhB AEPB^CJBCFACX*BCB?}JBsCAAA?V9C_X@gICjZBECTZByM)CTZBvyA,-}CS|?wHCB AAA?fBc@l8B+C\B.C:/B.C]?֌Bw? BC0AAA?BAAcCABcC=%zABcC1A1CO ?AB@AAA?PB7O@CfvsCJC{sC>B{sCVB}By?FC{sCPAAA?AAp6AxCoAxC'F@)BA(B >'nA\xC`AAA?ӯBX̌@ BoC#9BoCBoCk|AoB9u?ڻBoCpAAA?~B(i@Z B*C,iB*CijB*C AU CAz?B$CAAA?mnB<@JVB҂CoQHBقCU4wBقC;A؂Cp?XUB^CAAA?8\BAIiBGb-B.QBb-BJeKBb-BU?|X_CwSo?eiB`,BAA?IBnc@pAC2KAC ABCBCM>DAC?AA?,BJd@UBj7BbBB$BB"A౎Cn? BXB@AA{C@C ACiACiAbIBjA~? CA@@AA?-B#@^hBWC1\B9CgB9C2~1@9CX?8hB0!C@AA?C@]Bl#CUBYCXCYCp#CYC+p?bB/˅C@AA? C<@;c&CDCٴ CCDCKCCDCQ@1A|?%C։DC@AA?S"Cg@P8ICuBCCuBBuBB:vC|?`JCB@AA?CG@%8CCg5CCBCxBB{?ZT:C{XCAAA?oBT@BXC;BgCBgCO@Blv?B,,CAAA?4B,@-YBBBBBB@zCp?XBҍB AAABaAM"B%ۆC"BцCL@цC+BGB'? !BÆC0AAA?AB@BR.CiB#CleB#CbAB8k?ɎBC@AAA?]Bpu@8B-;CB.;C,B.;CWA%@u?HB;CPAAA?kEB@i&BaB}"BNB5BNBl BNB[?&BB`AAA?@3BmA/BW@C(BT@CQAT@Cs?ANBjN?0B5CpAAA?LB`1@ʡAǸ C.A CosB CWE2B CA?OA4 CAAA?cPBA}QBHC;BHC?AHC$Au B Z`?PBGCAA? QCv@L UC4CCNC4CQTC4C@4C?T0UC4C?AA?,Cy|@gHC[BqBC{BĨC{BCBAC1}?/ICS~B@AA?\B#@VBA B(BeB BBeB B_BPWCMt?BUB@@AA? C$v|@AcC|C"C|C5C|C31A|Cdbz? CC@AA?%B&(@TBACAACBACBAC:/A?aBDC@AA?#Bf@c+BjVwC TBrVwCvBrVwCSbA⬆Bhq?ׇBTuwC@AA?xCo@cKBB?’B{B9[CzBCzBls?ĐBcB@AA?&C2@41CCq2CCeCC;A;"CU)|?1C<#CAAA?B&E@\BO(BHBX(BѨBV(B(BʖCgx?3Bv(BAAA?Bb@BECHBbCCBbCC@ C x?9BbCC AAA?}BuL@{Bn\COb|Bh\CBh\C[{Bh\Cmq?{BA\C0AAA?BE@SدBWZC B[ZCV C[ZC!FWB\ZC\x?BiC@AAA?D CQL@BԢmCBТmC3!CТmCx{]BТmCy?eBmCPAAA?#Bkۧ@BFCB#FCB#FC?B"FCo.]?NB;FC`AAA?TB M@kۘBYAƍB?AGB=A>A=Ax?ޘBApAAA?,B9@A_C&A_Cz:B_CrtB_Cb?uAS_CAA?P6Cx@)CCQCC;NSCCgBC?CC?AA?B8@[лBB7BBBB&@o)Crq?B>wB@AA?3SBC@kBIA&BABA BA=m?sB-uA@@AA?R+!C$@jBB{B Bf[C Bu$C B~w?BB@AAB_`@79B}0AB8~0AxB9~0AKؒ@W~0As?%B1A@AA?^vB@ˍBxBBBlBB A.nC_j?B}B@AA?BnF@|nB\=BJlB@Bj-B@B> B@BVMn?V?BCB@AAXm C0@jB-HBoBBCBBB0y?BۈBAAA'B @KBDVCKBVC2BVC;BVCf?J-KBdWCAAA?wB੣@$NIBBHBBiqBBI$ABd? IBxB AAA?Bak@CvBtwCqBpwCYhBpwCUBpwC 1p?vBjC0AAA]wAAl/B?C(B?C?B*BBo&?/B& Cܺ[B>& C-ACx?L,B! CAA]BJ AɭA/=5S8A85nA85X@4C>A 25?AA?VB.@GnB,{CA8C@AA?AAB(iCzՋBiCBl@TBKBl@TB#H?B)hC@AABIA=1BYBX.BYBY@YB BBVC12?V[3BaB@AA?@BeAU@BBCBCBCQAC1o?BIC@AA?VBnq@]Bb3Ct"UBd3CBd3CFXA̳C:^?]B3CAAA?AAɳB`@B@B 8C AAA?RtBOu@>B2BgFB2BB2B1B2Bxz?x)B'2B0AAA?\aA_AjABpAB ABj A~Cں/?AyBAA?-A,)A=;B4C3B4CrAF&7PBE&7mw?^=B4C?AA?@B7@$EC /C/&B/C\B/CJA{BKy?@C,C@AA? #B1A@gdB,MC[B,MC).A,MC10B7gA'N?fBrMC@@AA?5gvBn٢@zBlC<3qBjCJBkCAV'CUf? zBIC@AA?BRw@pTB6.KCDLB$.KC B$.KCQ%OB$.KCcm?SBJC@AA?xBD@0 BB3CwBB>3CB>3CeA>3Cy?Bp"C@AA?BX\@5BbCMBcCmBcCEABx?BoC@AA?AQ B{ AQBMA۫BRMAƦ@@CGB@Cdi?HBnKAAAA?|?B`@`BCBCZBCa˩@Cu?jB{CAAA?Lf9B@ ;zBB#taBB:ABAECn?zBBAA?~AA?^ABDRAB,@C'sAC>`AB?AA?dB/@2@BƏA;$BďAgBďA(Ǜ@=CPz?BA@AA?B@Bfo"C(e|Bdo"C@do"CcB7Cd8n?Bh"C@@AA?ģBG!@HNTBqCƭCBqCLIBqClBqCӄu?(TBhqC@AA?B<@BCqfBCգBC`ACu?5(BC@AA?BYU@(BzWB*BzWBAzWBz@iCgX?Z;(Bn0WB@AA?afB?@DZBNC TBWCLAVCr:AB,PCһv?PB6C@AA?0B,j@XBn%ByBn%BCn%BPBn%B{?vB%BAA?Bp!g@u8B4CkB4C)B4Cu@4C?&B4C?AA?3SB?^@XB CB CMB Cy!A C73j? B: C@AA?!A@cBCNBCޡAuߧBfBuߧBV?cBC@@AA?2B>@ڨEBABw5BABkBABY@jC~o?CmEBYB@@A?EC+AƴC4CC4C B4CC>7?,C4C@A?C AZ0GC4CLC4CeC4CxaC4C?IC4C@A?"CW~@CcU%6qC#5oC&5<-C4C?C*6@A?B@~B4.¦B]7Av+C]7T*B\7n~?6۸Bo6@A?9BAY4B4ChinB4CPA<57>)B?57 ?QWB4CAAAM^A1B3CB3CBCD;CC>B3CAA?{Bo@#8B4C))B4CB4CB4C.9?o|%B4C AA?C&Cf@K>C4C9C4CC4C@[B>7?7:C4C0AA?҅B`@kC4CG C4C`B4C.Bi57ׯ?E C4C@AA?A2Ad\ACACA3CaB3C9>wBCPAAV8JC%@)C4C$C4CoC4CB4C?*C4C`AA?-MA- =AcBdB0B4CƊB4C?~BpAA?%A^A'A4CAA? jXCYWC OCtLC2CtLC~A1B!z?lVC4C@A?A?kCY@eC>gC`C/gCpC/gCA,gC|?+dC(gCPA?A?&Cfq@CwB C9B.d8C8B:B7B=x? C$B`A?A?xC@C@Cj/CBGBkHBR%Ck?ݒB9BA@A?PBN@ᝥBCCLBCCBCC ٬ACCl?֦BeCCA@A?ɠ"Cz@ CE2.CC32.C6C32.C6B32.Cz{?V C(-CA@A?]B@' CJBOCJBZVBJB"BfCov?^ChJBA@A?uQC.f@~'CC'CCIvCCBC= }?'CCA@A?TCw@XdBGoC־BGoCqCGoCH4BGoCz?!*BxoCA@A?B@B#CB&CB&C֙aA&CUIw?BY"CA@A?uAM9ALAJpCA7pC_c|A8pCr9AsBU.-?2WApC@@@@A?̒C چ@ C]BĩCR]BeFpCR]BwBTkC|?ZC]B@@@A?e"Cg@78C]C *C^C C^CTxAw*B}u?0/C]]C@@@A?ԴCKX@C B^zC=BC=Bw:AP`C4~?)CrB@@@A?,aB@-C[IAB!AWE B"A)BDPCi?BddCA@@A?~C;Y@CȈCTCCkCC%BflB)x|?<C4CA@@A?jCO@C`BуC[`BGC[`B BlC:|?C-`B A@@A?4CA*[@䢔BoC`B}Cz*FC}CZB}CmAl?czBAC0A@@ABlo@Q$BC`BaQCBaQC>=BaQCs]?!BC@A@@A?5d6C|@=CC):CdCN,CdC{]A2C{?;CCPA@@A?B @9B"h*CFBg*C7Bg*C*B3Cgl?`B)C`A@@A?y;ZCC@v=WCdC϶RCdC]CdC0AdC }?GwYCȢCpA@@A?NVgB @rBĎCHBĎCBAyB5MCyB{l?8BCA@@A?Ba}@KB9pC(BpC4BpC9BpCRm?"BoCA@@AvGB0@|>BCq:BsC;BsCBsCD^f?m7*ACx??BCA@@A?pCi@lCm9C j~Cm9Cd.aCm9C(A @}~?C9CA@@A?[B@ܶB)C?үB.C C.CLGKB.C5Tx?xBCA@@A?~BAcBC=SLBCՖBCTACEo?cBN6C@@@A?EC1@ӔC̍BCeC6BeCECěCz?C/B@@AvCHT@FC'RUCCsSCTCrSCCrSCY~?_C;TC@@A?DfA޷CqCnHC˃C~3D˃Cm_C˃C(=?C\C@@A?rCF8@CC#4CC,CC ALC6x?ǹ3CCA@A?ĺC@FC' BjCWyBCWyBOBVyB?CC>B A@A?SCu@Bua^CZB^CC+C^CZߎB^Cmp?TBb_C0A@A?4C5@B0CDv{B8C+C-o{B4C-o{B:ADo{By?2CZ{B@A@A?#C(@r2CLC~.CLCsCLC[AAsez?M1C;MCPA@AGB&r@B=BռB>=BB?=B\De@N=B9r?B;7B`A@AC,f@ CC,CڼCCڼC΍AڼC z?= C+CpA@A?BBV7@ÑBhC#ZB½C5BýC@ĽCϳv?2Bo|CA@A?QPBMAlnB rC3dB<sC2A<sC'HA|BR?nB:IsCA@A?B=@B!BuBBKBB FAC w?iBBA@A?B0AA%jCA!jC.@!jCAA*C?MZAWCA@A?{Bx@-BuCBhCe*BhCAjBNg?1B_CA@A?%UBA*UBy6CyBy6C|Ay6C\*B!{@f?ߛBn86CA@A?"RB@RBCFBCGBC2A<Cy?BۇCA@AגB0@pBjBSBwB)BxBBxBq?pBB@@@A?¡Ca@RC(A)fCZA0ewCZA!gC0AC~?xUCErA@@A? CADCkHC0C!CMC!CO6A4CC ?CC@@A?IB oA;B?%yB!VA@ĊSCBŊSCB?qvxB A@@A?D@ODs'C[D2%C#zD2%CAC?D%C@@A?B@BˑCUBr9C4Br9C?!Ar9C ?QBDCA@A??CDw?@6C^B;C;B;C;B1)?<B&y? 7@CNBA@A?iC@T&GCmBFBiAC( FBX܄C& FBzB# FBa{?YBCAB A@A?HBֵ@УC{A CgAs}AgAԸBlHC"k?EzC 0A0A@A?>|C\@fC@CC@CO@WC@CBxMA}?CkBC@A@A?RXCX$u@cDC+iB>CiBkCiBO4BiB{?HC|BPA@A?BF&Ce@WCC\=CwCjA0CwCw AwCV{?KCրC`A@A?@BϾ@x!yB+B#sBhBBhB\An@BA@A?r"CE@ CLCDyCLC 1Cg@tkCC]CVC]BWC2{CXABy?exCC@@A?6BT@;vBCu$BzB=BxBV`AvB.ZX?5֡B B@@A? y&Cʞ@@'wCLB|C B@B B" 4C&HCzz?:,CBA@A?:³C~@PCXBzC}ƵBɖC}ƵBoB}ƵBA~?,ƢCsBA@AaBZ@RB6xByyBwBMBwBAqC f?IBvB A@A?BnAdB$eBi_BUhBAxnCBxnC] >+1oBl;oB0A@A?-Ci@CxtVCBLtVCiRCLtVCBLtVC&y?6CUC@A@A CC@CZ.NB C/NBC/NBZ|@gC,w?CPBPA@A?ꑃBol@BB QCwbBAQCBAQCJcBA?Hl?0BQC`A@A?AA96A6>BÙCr8BÙCGABWijBB?EB{CpA@A? Bg8ABGC`BACyAYB>BYB(?;ɈB+?CA@A?B@ŌBaV2CHB\V2CGB\V2CB\V2C+p?BhB2CA@A?UBl@^hBHA'BHANCHAJBHAUt?!BGPAA@A?TBv0AąACACGACRmABp3?KACA@A?8Bz@HB CB CTC COB Cuy?}Bi CA@A?8Bڬ@װBèCҩBèClBèC!A~èC3s?qB㳨CA@A?A;Ax5B_ C|+B{_ CzX?_ C(BC6[I?0$6BQI CA@A?CA#AqdBpBNBpBrA&\CB&\C@P?P,eB~B@@A?^C#.AsC@rC@3ҾC@ C@E|?@oCh@@@@A? E&C-T@fCC$C0C*C0C\A0Cr?ľCxC@@A?9C/k@r9C?CDCpCCpC6B9^C.u?D>CLC@@A?PCՆ@]C M5CCͬ5C}Cͬ5CxBe?a|?/C5C@@A?aB=@0CK?C92CCCIBCC8CԁqAѲt?3CsDC@@A0C`7AŗCCx!CCDCBBCr~?\CYCA@A?-uC9^@ٛC CiVCpCCpC\BoC~?CCA@A?Cʋ@r]CC-QC%CgC%CsB%C+o{?VCb8C A@A?GCa}@QCjjC#MCjC ĂAnTBpA@A?WfC[b@Cg)CCV!C>RCV!CpWAUBT~?/CCA@A?QB9x@d[BECBECpoBEC4A8A)\t?-BECA@A?B6&A| A/uB ApuB0(Q@puBM@\GqC'> AnBA@A?J#Ce@Cv/CC 0C@C 0CB 0C {? C0CA@A8B:AZIA BaA B, B B'@ B.?X@AGABA@A?ZC$@fB~C>4B~Csj6C~CB~Cz?BCA@A?A?A'BNBBkB@ @kB&A۠CȴC?m(BhBA@A?ABvAeAB"uSABAB4@ BE>$bdAB@AA?C4 @.:CC@AA?`C A1C C˹C"] CvC"] CX B.Cb}?RCK` C@AA?|B٨@B Co)xBVC?BVCfAVCST?hB+wC@AA?MhCPL@7wC/"C buC#C4тC#CA#CN|?|C:#C@AA?|GC@;CBts6CҏBPCҏBAҏByz?@CBBAAA?!uCȡ@HCEBBC|BI%C|BUBzBz?MCqBAAA??CθF@7$CBC&BVC&BXXB'BҾy?}(%CB AAA?ĈC:@bmCtCYhCtCCtCBtCv}?qCtC0AAA?X3Bq]t@"kA|uCp8eAuCBuCIBuC?oƆA/C@AAA?zC#@CSA#C[SA gCYSABlJPC[~?CAPAAA?B=@X9B7yC]BDyC^BDyCzFcAEyCu?B)C`AAA?C?@ 7Cd3 CgCM COBM CA&CBZx?jC~_ CpAAA?Iy CEs`@mCCMCCCC8fA?C{?MCFCAAA?W+B0|@"* C =dCp C=dCB=dC7Bf@B-x? i CsdCAAATBY.AJBJCKBCګ@Cg@6BNA CU=?'/JBhӞCAAA?KCXb@:LCO@ZMC@FC@@-/9C[}?܇LC٤@AAA?̚BH@0B⻵BOBBQ~BB AnCq?B>BAAAJB,@U|BΎC BΎCqtBΎCAW:BEz?ZBȎCAAA?B7A$B"1C{B"1CvBA!1C$jwABNG?H#BX0C@AA?-B&@xBvC BC+{BCB xC`?9BrC@@AA?~AMYC@AA?B@nSB6BUEB4Bc`B4B@4Brn1?CBjBAAA?}C]|@KBLCk"BCCClCCy?BsBAAA?9mCP\@^CWCZZC?CxzC?CB?C|?aCC AAA?pB%AX`BHCDٓBGCdVA&B.B&B-?BAC0AAA?DB=@BftC BtC&ޖAtC/UB#5Bn?hB^tC@AAA?C6@}CBwCBF5CB @BB~~? ~C(BPAAA?A;AlBר7CaB7C$B5p@XB5p@`>vjB8C`AAA?ChFm@$U;CKgCq3CfCBfCNBBc |?;CbCpAAA?8BAȃBl~CBX~C6q>X~CB`Bj\?f;B4CAAA?C[Co@GB0CB*C`uC*CS'NB*C` w?YBCAAA?BCKk@cK CdyB9 CnB#CnBYAnBz?N ClBAAA?X Ct-@ CB0 CB=CBJ@)C{? CBAAA?Bv2@]BPCIBPCBPCKLAPC5j? BICAAA?℟B߶@B3By1B)B%B)Bt:@.Bx?B BAAA?}BdzNA BmRC"AmRCUAmRCy@hAF? BcRC@ AA?YyC@|C\CvCk\CЇuCk\C?ߥ#Bϛ|?R7wC]C@@ AA?@@C9@,CۊCICCYoCC~ABCx?CXC@ AA?WB@K]BwQCBސCCߐC BߐCl?#B2C@ AA?"C6l@bΉBkCJBӭjC-CҭjC3BҭjCHWb?WB(iC@ AA?B-=@A:B1ÃCBCmKCCx BC p?բBmCA AA?,MAq A4yB BƀtB B2BCBCn>B_BA AA?BY@BigCwBgCI\CgCAgCq?"BC A AAC}_@ C$C:C$Cl!C$CˠB$C y?C#C0A AA?iBLO@0]BעCBCBCgAVE'Cs{b?vBC@A AA?9B@tBVBB(VBBB)VB@*VB*q?BQBPA AA?T2Cb@_8C⪳C/CdzC/CdzCO=dzC{?9C ڳC`A AA?GB@BGABGAͪBGA/HA|@CKu?mBW,AApA AA?ߎBy@(BL]CJBL]CBL]C"/=;%Bgw?rBM]CA AA?E.C'Y@-CZSUCSd.C5VUCT)C4VUC_@XB}|?2-CQkUCA AA? (Bw@ZBDGB [BOBBOBJ$8AOB6d?[BG^BA AA?IBź@~B)+C B'+C_VB'+C/BCDx?B+CA AA?+iBʒ@0{B:BCB :B&B:BaAuC=Zk??BBA AA? #B-"@QB)B; qBBBBRAByt?dBhB?0AA?I+CMF@ 7CECCǘCrCǘCŠAB*u?GCi@C@0AA?Aϭ A,AEgBpA|BgA`mClJB`mC{> A4B@@0AA?KC@0AA? B@ыBC tBCSBCIcAC0b?7 BCA0AA?N Cۨ5@C9CC9CW.C9C)2B9Cw?Cd CA0AA?fC`@ ujC qCa4eC qCdC qCC>Y-tBJ}?,jCApC A0AA?}0CUL@1قCAC1CAC#BACg"CB}? C4@C0A0AA?ƖB@TB$CMB$CsB$C A$C']?eKB %C@A0AA?DAUOABBRClA,nPC$|AYqAT=BYqA>BNCPA0AA?PB.@'ABPCx;BCPC#BCPC89@ *AA[W?T@B?OC`A0AA?@{B.b@ȯBGvCBGvC¦CGvCˉBGvCWr?,BvvCpA0AA?%CfL]@7q7CCB8C$BC%B+Bs[Ce|?7CtZBA0AA?tBq @MBBC'uLB(BCGC(BCEB(BC:j?csLBxBCA0AA?(`+Co@wE CZɽA CRɽAE2CPɽAOYA=ɽA}?{ CڦAA0AA?Ba@I;BgC?AgC"BgCA*BCHBCACABzO?.+BXC@@AA?#CXyAP@CvݳCB(;CVc>CVc>G6aB84C(x?CCC?@@@AA?5HC@C uCCɀuCaBɀuCjAB2t?rC MxC@@AA?# Ct@R!C犏CChCChCT{@)BE*z?%'CjbC@@AA?OBE@lBYCBPYCM8@*C˱B*CDZ?B&C@@AA?6;C =@_-CSFB*{(CTFB;ECTFB ATFBdz?+CJB@@AA?DBGO@aBHwCx[BwCm,CwCBwCi?qByCA@AA?g-Ct^@pC%MA>'C+PAipBC+PA$=B+PA {?lC&AA@AA?Z CD@BbtCB'tC'C'tC mB&tC[/y?rBC A@AA?ҐB0k@=B PAB=PAӟBB@A@AA?h*C8[@|`C8BC1CBCM$@CBCp@BBC2|?CBCPA@AA?C@#CBnCB wCB0BCt~?ґC#@B`A@AA?'B<{@$PBv^CݝBv^C}Bv^Co?v^C|v?NBي^CpA@AA?aB9@H/B`XC-0B/XCB/XCK $B0XC&X^?*/BYCA@AA?߸B؃@BW?NBX?(>BX?ۄ B4CNo?B (?A@AA?}B@ ABAB BB+"BBB?ABA@AA? C@%C/C?C/CB/C5B#^Ck}?o%CZ-CA@AA?(B *A2AfcCl|AscCZ"BscC!AtcC@?+AّC@PAA? B^@A{7B.@\3Bë@b-i@^9CAB^9Ce?~8B@C@@PAA?VC+ӭ@6}ClCvCpC 1CpC7BJCT|?.}CuC@PAA?OAc(+A9bBkC9[BLkCBCbBC>]BRC@PAA?t|CJ9@WCB}CB ѹCB&BB"~?aiCB@PAA?K"BVs@>#BhyC4BPyC-kBQyCuzACj?"B!C@PAA?5 C]@ BCB,BB- CBABy?SC>BAPAA?(8SCIBY@s=CґC8CˑCriCˑCo7ABˑC6}?=CxCAPAA?hBEe@ڎBB BBWBBœhBBHm?RBVMB APAA?Ce@"Cu6CC޽6CB޽6CAAGw/@uy?%"CO6C0APAA?(CL@ܾ CjCCCi1CCACao|?k Cg5C@APAA!\C;@QcC?B%Cm^C8B%CUC8B%C2"AC}?bC*%CPAPAA?MkBd@BBBBYkBB ACo?B/B`APAA?rBA-@;QB- $CAQB($C\B($CI B($Cf?>CNBx$CpAPAA?LCW@)lCC*C CC CJnC C͔|?EC3CAPAA?O CO<|@aCxCuC|C|C|C0XA|CR |? CCAPAA?78BAB:?BڎB:?BA:?BvBcCua?B>BAPAA?YBU@IxBBF1hBB1BB2BBv?YwB lBAPAA? BZ@B$CB$CB$CL>FIC{?B"C?`AA?aBTy@uBLCKoBﴢCBﴢC&BﴢCf?v~Bx_C@`AA?O_C@LaC kC[C kCV^C kC&@$ kC@&}?-^CkC@@`AA?#Cc@C HCC(HC.C(HCNA)HClz?!"CHC@`AA?oC0@C tCC tCRC tCp_@ Bw {?C#C@`AA?RCۅ@3B}aCBaC CaC#BaC0y?BaC@`AA? Btu@ :eBAwC>`BwCPCwC"BwCn?PiBhC@`AA?WB_@B-vCaևB].vC^C].vCB].vCq?,BwCA`AA?ŽB3c@6Br/CBφ.CJBφ.C2 Bφ.CmF?" #BK,CA`AA?1Co@lZCCOC,CC,CAsBlBL|?\[CC A`AA?>Bx@x$BBBB]jBBz@rCK?)'BB0A`AA@Bjɓ@cBPCWBGC?aBGCBx+Ckp?KB=C@A`AA?FYBV%AKBFB{BB֚@{CS)B|C>rBBPA`AA?BSe@BCBCb)CCBCu?89BXC`A`AAB@f:qBu3CJqBf3CCf3CMBf3CXo?pB3CpA`AA?1 BV@B/%CmgB%%CֻB%%CwA%%C8q?B|%CA`AA?=Bo*@\]BGpBTB>pB!æB=pB QA;pBe?^B@KBA`AA?^A+ABAґCf܏AґC|?AґCAx@LHBw/>AǑCA`AA?B!BAG8B@BE B@B!A@B~&AdC-H?W}Bҩ?B?pAA?6C@IC]XCDCXC~7$CXCBBM|?zHCSYC@pAA?/tC<@cC\UCCUCUBUC.A ZB%z?C1VC@@pAA CN@WB C-B C+C CWB Cy?GWBJC@pAA?BK@D'FB柯C@BCiBC;BC5^?dOB3C@pAA?BZ@BBPB BKAB B*6BaCCtA@pAA?5Cq @nUC\'C5JCN'CxZCN'C1*CN'C(}?AVCF'CApAA?"Cq@PB؄A-`B.}AF2C,}AfZnB)}Any?5BAApAA?MBկ@#B27C!B27C??27C(/BfL@j?'B6C ApAA?8IB@Q`B 3C@\B 3CZB 3CQA 3Ci%b?K`B63C0ApAA?BQ@2XA{BzAB:naBBHAB4'?D#AB@ApAA?=WBLJA!A sCAsC@?sCϿAf|BA?\|A=sCPApAA?Cy@&6B5+CB+C#C+Cy!B+Cz?(B+C`ApAA?=By@(B7yCB7yC[B7yC]APoB'bx?B5yCpApAA+C^@B;B-{B;B(C;Br7B;B0x?BU;BApAA? A)\Al*BDC"BDCF#DAaCdSBaC%??*B1CApAA?Bw/@MTB=KC;BAKC}BAKCpAAKCfm?TBKC?AA?%B@_bBC4vB-CiC-CWB-Cl?;vBbC@AA? B@.B͐CBCCSA BB BA?zBK-C@@AA?CU@AB6 CaB C%C C9]7B C}u?eBl C@AA?XO1CX@+CcC#CuCi 8CuCZAuC{??a-CdC@AA Cj@zv6CC;,-CGC LBGCk BɛB z?6CހC@AA?^2CU@/CBe(C~ŗBB~ŗB?eBC|x{?.C>B@AA?ՃBѪ@qZB=͒CSBV͒CBV͒C<6AV͒Cc?`B*CAAA? YC5@pPC0vBNKC/vB^ bC/vBA/vB}?RQCsBAAA?BS@\B'CIHB'CB'CzB'C:o?ߘBF6(C AAA?mBB@1B5B"3B/6B~B/6B~]B/6B4yW?UBUB0AAA?J"8B9G@tqAdnC^A.mC2A.mCl@.mCZ?LA`lC@AAA?_B?b@BCBXC?BXC阃AYCKw?DAb?JBT4CAAA?Ap.At@ŚB@Bv@B?C1>8P@0BAAYAHHApBBcBBčLACFB5APAAA?7~BAGBPC=r>BLC|!YALC)B/B0NZ?HBأC`AAAo BXU@BCe~BC9BCBC~v?3BCpAAA?\8B A>[AECWA8CWB8C`B8CgQ?AsxCAA?vB@6DBBw{EBBBBaBBoz?FBB?AA?Cf.@}BOoC*BOoCCOoCaAOoCȶy?+BkoC@AA? GB@$AViCeAViCRBViCu^@ViC@?A&xiC@@AA?VB@VeBggCgBsgCBsgC~xAOBZ?|fBL#hC@AA?OBfv@BCp@[JBP{B}B*{BٱB,{BEYArCPv?:BP{B0AAA?:BtU@ \B}RC]BtRCtBtRC[AtRCv?B՗RC@AAA?àB@:BQ-C@U-Cky? B -CPAAA/)Bq) AAȻBA໼BB໼B4A໼BvH?A`B`AAA?<]B]J@>BQӲA BӲA٤BӲAwBӲAbn?NBBαAAA?XAG1A9qA3C5XA3C/ACJ)BC>yA3C?AA?h׃Bv@MABC=BH C18BH CA%BǷi?|JBC@AAmFBWA`BkYC_BvZCg3AvZCY@B.?wB/ZC@@AA?XB;@fB%|BMTBe2|BEBe2|B@n2|Bw?>B!>|B@AABn@]BVB)m^BBlBBk$BBhj?*^B!:B@AA?KB5@OܝB>bC2 B>bCGB>bCA>bCls?eEBCbC@AA?&tB%@4`B0C`B0C^gYB0Ck(?Cvg?`Bk/C@AA?_^Ba AB<~CtB3~CWA3~CVBf(Cshj?0B\CAAA?(B@Bf#BBN#B莐BN#B#ACI`s?B`BAAAB(@B%C7B%C'B%C#A%Cft? МBޙ%C AAA?BH@IeBdCmBdC ;3BdCˠBB Cu?SB_C0AAA?1 BAlB=C3VBBC@BC8BB?a?5mBC@AAA? BS@=3Be|BtBb|BBb|B ˆ>sC {?TB{BAA#B)*@]BC\BCBCAC0? ^BC?AA?)BB6-@BxCBsCNgCsC~ͦBsCw?|\BeC@AA?!B+@q\BmCBmC+BmCҍBdB` z?&B lC@@AA?4B>@B0C[B6C2=B5C˹c@BCx?LB|C@AAAAExBCerBCAW ClcBW C7?cxB^C@AA?@BS@,\AMůBďAįB>AįB`=AįB>וAbB@AA?9B~@4BBTBBBBj=ABtDu?"̴BcB@AA?eB4CcX+?QB?AA?2B3-h@BWBW B֒WB B֒WBjBiCr?zBu}XB@AA?CK@C'CCC"CCC!CC>CC:x|?CJBC@@AA?WB>@fBgB{BwB5"BwB]ԭ@^!Cy?bBBB@AA?B.@WBZABHAe:BHA)AOAa{?F{BڷA@AA?вAA'AaKCݝAaKCЬi>aKC> AA<>OYAQKC@AA?UBӅ@iB^[CۖB^[CbbB^[C\?{Bpw?QB a[C@AA?^B@Cv4CbBv4CfBv4CgAt9?Kn|?jCq4CAAA?pVB)R@B)CiB)C(rB)CtB)C&k?7bB)CAAA?B7u@OC$CB$CB$CE+BGmCr}?CCL$CAA?JAśAM6q?CP\?C`>>B}?>Bu<&?C?AA?BH@yB C2WB CBB CH@*BRL{?B4C@AA?CܪBB@B=CpB:C%iB:CB @9C [y?BC@@AA?ΫBpD@5B4AX?}B3AoB3AoB3Av?DBA@AA?UBtApAI>CqAI>CAI>C@@$Am0?*Aˎ>C@AA?^2B|@,BCrB쁍C:\@CBBs?)B^}C@AA?_^HBs@TByC2ZBByC7ByCr 4@B q?"UBƶyCAA?١Bɰ@GB?BCBCXA4C?BC@@A?Co@LCB8sCB5gCBCC?"CB@A?CS@BFBC[ACBCjBC>33AC@A?C]sA7.CBCB›CB@1BC?CB@A?B5 AgBBUaBBKwBB@B>E?oBB@A?D@XDC DCKCC)BB? DCAA'C@MCBCBlCB?B?eCBAA?J@BH@POCB*OCB{ACcCC(?_VCB AA?њBA9BCPBCKIBCHUMBBN{?BC0AA?AeBnB@j CBpCB$BBBC>?.k*CB@AA?HAAxA" BB BBDAC:BC”>DBBPAA?C"@BB,BBB2CBXLBB?NBB`AA?B)E@BC3BCCCBC+?fABCpAA? B؝@fBCDBC:CC}BC ?/oBCAA?B@CCCCAC*CB?CCAA?DCv@_X.CC*CCCC5AB?$-CCAA?+!hCr@[TCCUCC[zCC0BC?UCCAA? BA@Bo@B2@Be!@C*>@BAA?PBu@8BB 7BBCBXBB?6BBAA? ݧB{AIBCBC8QBCd}BB?CBCAA?EANA4BB\BBĜ)ABVACDzQ?S5BB@@?A?C%@+ C8ڱAK̘CX3AQtCZ3AeAk3A}?;CkA@?ACS@oCM3C,.CM-C%BM-CgvBܦCS$v?{%Co/C@?A?}C<@ȭCCJ@C.cCدC.cCv|B.cCɩ~?C,C@?A [Cm@%ZCYCMbCWCJCWCKAp_B\gz?\CC@?A?VC^@O$CiC4CdrdCsCdrdC/BcrdCT|?BK8Cd5BCBCjBC"NK?1BQC0A?A?`JCFR@uRC.CJC.CAC.C3ALICz?tOCw.C@A?A?/!5Cf@ICaWC}ECWC,CWCB1&BГ{?NClXCPA?Af4B3BuAA?AWB K@pB;C lB ;CHB ;CA ;C{d?rB;CA?A?OlC0 `@kCF C9CF CߞCF Cą(CF C|?CP CA?A?BE@BuVCBVCчBVC~<B B u?ǯBVCA?A?kB&@BBKBB'BB?)BBGXw?)`BBA?A?A=A$B%7CrB%7Cq7>sI@Q- BsI@K^)? $B$6CA?AB@B=CBBACBx4BACB APC=y?]BQRB@@@A?B .ABChB^ͮCA)CB)CK>CmBpC@@A?/Cڢ@DZCoC*CCaCC BC$~?C)C@@A?8iC@lCC`B>ăC#pBDC#pBBpCF|?ڂCkB@@A?C]+@yCJTB CfBoCfBBdBsg}?`C'B@@A?|eB̨@iBCN_B恅CYABCBA@A@A?\TB@4RB՚CBԚC*ABԚC@ԚC)d?\LBWޙCPA@Aq|YC}{@oTCu ?G~C8?d0C8?űBr45C@}?_rC?`A@A?hBb@&>AKKC4AKCU CKCBKC4qZ?ADNCpA@A?&_"C]{@5B)C@BCJCCBC1x?BCA@A?@-Bv@WB=BeBBB{CB!kBBbs?2BQBA@A?aB@>:BB~?7B/B]C/BܥB/BM`d?y>Br>BA@A?SCup@SBB, BB!;CB9BBy?B-BA@A?COք@ CB C^B!C^BzA^BS{?Am CBA@A?LrBR@A&YBRCUBKC)YBKC[EM?@Cc?YBCA@A? BCۃ@#CBrCB|dCBJBB_}?<"CBA@A?(4B;AiSBA.A`A@@A?ͲB@WvBN[CpB[CDB[CT/B[Cp4k?lBCpA@@A?B܍@CpCmBC$IBCۚB'CxUt?C_ԭCA@@A?tQB\ʳ@CЁCgĆCԢÁCsCb7Bx?^CCA@@AWBzy@?BCBnCBnCi[@pCu?B>.CA@@A? .B=;A(+BcC,BcC$AcCACSL:?.Bv+CA@@A? B@ABgB}B`1BB`1B''4A[1B]w?eBtYBA@@A?նBD@nB"CB+C+B+C돣A?Cu?%B!CA@@A?lB@bBPAxB9A,}B:A.B:At?NB\AA@@A?ŋBA$MBBnC#6BGnCuBGnCPKBGnCn?MBEC@@@A?;DA0CDߡB5@D|B4D|Beb:B>vC?{>D3B@@A?zB)@2sBBCSBhCSBhC ,BhCJ?[5BOC@@A?r7]C@F{Ch4B rC@Bޑ>C@BeMB?CQz?NLrCJB@@As>C@CJCPC%8CHC%8Cuyg?PCz?a~CC@@A?;%'CC(2@T9CB3CzBlCzB3BސCv?53CtBA@A?CfH@CBBVC@BG C@BA7;dC?Sv?UCc>BA@A?Bӄ@BEB@BBKBB{ۤBB^5ACRt?B`BA@A B@9AB~B8BB7BBGABE{?B?BA@A?B2@5YB"dVCIB dVCB dVC/A dVC=z?!BU]VC@@@A?0C"@+Bs]CA@A?6Ch@ C6B:CB>CBGABkt?|O CB A@A? DCO`@ɛ&C~ÁC$"CC\CC{iBC$Xy?-CC0A@A?C@VCA䡔CWACWA r@LA=~?7řC|A@A@A?6pCԁu@OCr CJCs C@Cs CBs C5|?NC CPA@A?nCo{@I5CB&2CBBB`Bp8C{?4C3B`A@A?g'C/j_@/C;B)C@BHC@BCA$C[{?O/C뤤BpA@A?9C^@uRCC~[@GCXpS@%Z&CYpS@oBM7CD|?eRC)tN@A@A8)B}DA%BвCM!BɲCRAɲC諺AeCOk-?`)BCA@AKB|@B'BB&B(lC&B#/A'Bv?լBBA@A?'AOA|A DC>|A,CwACT[AC>>ozAvCA@A?GB&@r%BoXC.BoXC\BoXC AoXCx?yBVXCA@A?kA@A*/BFC(BFCп@tA@BqAX?D/Bj GCA@A?_B@/B`,yCaˏB^,yCRWB^,yC&AXBv?2^B&yCA@A?B9>A/s BCfBC. AC?n{C AP?# BHC@@A?4C@CcCmC(oCUC(oCPB(oCs?[CjC@@@A?C@ݣCsCgaBC(CC ACjn?uCsC@@A? /C@C\օCȟCۛCCۛCNBۛC|?@uCtC@@A?NC`@ICJA:;CAܛCANBAPy?0=CA@@A?"ƳC@|C*B"CoPBCoPBABpPB}?\C.\B@@A?Cӆ@jC~ qCCrC$7 CrCuN]@rC_u?=QCuCA@A?IC5@xC ]C1BqC*TC(C*TC{?B)TCU|?DzCCCA@A?C>@ZOC%CBC+CݯC+CHC+C>{?DCC A@A?6Bq@]BB%BQBARBCBDuC h?fBvB0A@AACW@-C{CD CvCBBA@A?K}B™@fcBCHeBCBC1BCPj?;dB-.CA@A?zpBX@ɜJB0CJB:C>3MB:CWH?;C+X?IB_CA@A?BW@BlpvABovA(BovA[AfCCw?BsAA@A?aB @fBAIۑBA0{BAASCUBo?BrAA@A?gB;4A-6BCn_&BCJSACmA~CBP?t6BC@@@A?)C@.CcCR,CNbC^CNbCjA4:B_t? ,CWcC@@A?A$A=B0C<BCcBX@CBۡBCgR? BBA@A?ܛOC᧏@-#C")BdC*-BBuC*-BB*-Bx?1'Cw4BA@A?A,AEBTC(ޜBfTCeBB CBN><BTC A@A?{9JC%@< (CCK$C ChC C nB C){?(CC0A@A?#q CX@ B3;BiOB:B*C:B^ؚB:B@s?SBB@A@A?fB_@0EBK]C,SABGM]CDBGM]C4kBFM]C3d?KB,?bCPA@A?iBQ@/B0CxB0CQ]A0CVBFCUh?hB1C`A@A?(=B@8ݠCB<ݠCB<ݠC5A<ݠCl y?BנCA@A?AB@ pBCcBC{CCoBC@BB@AA?NC@uC! ClC= C\$C= CQB= Ct|?5xCj CAAA?Q-qCHu@sCxcAkCcAboCcA\@cA D|?uCrcAAAA?X+C!%]@_+C+C(C!C&C!C?QCz?-'CZ|C AAA?A!Bij\@\BCBCaCCNACMq?BBd"C0AAA DCΚX@YhCTCCcCLCC CLCCVZB, BHt}?jC$C@AAA?VB$@'BCCBCCBCCACC4ov?B5BCPAAA? ?C{h@!sBC&BлC(&CлCߗBлC> u?غBC`AAABI@CB/CB99CaB99CDA99Cq?6BjGCpAAA?(Bw@6BPEB2B7EBȈB7EBAMCPHw?{BBAAA?Bܨ|@]EBcBxBJBCJB&IAJBUv?B$BAAA?xB @lBTRC B0SCB0SCA0SCCSv?N=BYOSCAAA?`g]Bd AxtBϻ CtB» CB» CAݞCUac?tBË CAAA?B @fC3CC2C^B2C&Bc8Cx?CCAAAiBAyBCB_BCx-BCAfCƓr?BCAAA?ʍB@k=mB C^@ECЖBAC'B|B'BjBCx?HCڵB@AA?|JB ABB B,B&4A,BALCD>*B^B@AA?zKC+7Aw/C?C(Ct?CSbCt?CTeBt?Cx?2C>C@AA?0KC@{C AC AfuC A?A8~?"C֩AAAA?4vBw@<7BYB@BZBNT/BZBBYCmn?ŹB BAAA?jCʌ@;CkC-YClC=NqClCu=B: C}?C7C AAA?ˆC>@N(bC5VC\C,VCC,VCAIC@AAA?7AALB_gBBBUgBǹTA֙CpFB֙C^>B&DBPAAA?ՉB9V@ oB/,CycdB!C}qjB!Cs?!C`V?rBC`AAAUAzCYi@$CBCBRmCBUA:C~?߆C1BpAAA?ZZ-C xf@(C#&Cm'C#&CmZ-C#&C@#&Co{?"(Cp_&CAAA? A>0AcBPCTVB;PCA؉ABډAM?ɞBPCAAA?9B>@FB:CLBIC 1BICdA&BiWj?2BXTCAAAB@B.C B.C3eB.C&rA.C>s?\B5CAAAkCF@BB{BBqCBэ'BB^Dz? BwBAAA?KB @ԼB-}`C.B2}`CB1}`C=]?}`Cy?B<`C@ AA?,]Cf@fCY"Cn#`CWCTCWC+AA+ C{{?gCC@@ AA?k"C@@=RB "C/HBzClnCzCBRB@ AAcFB~P@SB_ACMB8BC}=B8BC|/A8BC8l?BDC@ AA?eCGV@CAOCɑC,OC5C-OC.B[A |?CMC@ AA?WBi@=4 CC_C0vC~A0vC BCkdo?C6C@ AA?x*'C@l*EC{\BPAC]BC]BfiBuCB{?UICM]BA AA?;B`@" BפCBפCXCפC BפCx:k?ȔB̥CA AA?eCx@[C @|pVCl @RpCk @RAf @H}?[C@ A AA?F[Be@BD`C BID`C;RBID`CA1BWu?VnB _C0A AA?B?"@Ù CBBE CBB'`,BBBZBPCv?w C'=B@A AA?ܴcBUB@R+B.XkCl"B>>lC"B>>lCX=`B5m6?)BmCPA AA? "C8A@*E&C ߛCCFCs CFCl?\C|?&CKC`A AA?'#CAWs@0CaGKCw-CaGKCC`GKC.A;A|?0CoFKCpA AA?!;B,,AA26CfA36C? @A @`a>@A6CA AA?mABw@BoCBCCCC+3BCDw??B0CA AA?Z>C5BK@AGCBeGCB2CB|A"DCg}?ԩGC8BA AA?AǦ*AC!BgCBgC>AC^?BC0M?E!B2pCA AA:CY@"CCCCf{WCCqBC5~?"CCA AA?XB@AB{cvB:4BcvB;BcvB @cvBy?{iByvB@0AA?BCUIAn&CIBp{C`IBmC`IB'A_IB |?cCB@@0AA?iaZBh&ABܥC@0AA?vIC @C(CC"CC"C_A"CU}?͚CC@0AA Bz2AgBICcBIC]ADAbBDA?xQBCC@0AA?KԴB@C;*4Ck?C*4CaA*4C~Be*>4r?rC͛5C@0AA?\gC@w4C~sB/CsBCsBBsB{?2CFBA0AA?^DCq@(9CBM5CSBkOCRB]AOB4p|?V9C.QBA0AA?_C㝃@h]CHCXCHC9cCHC1'AHC}?4_C!IC A0AA?GB$@DB C(B| CRB{ C sBC5t?.[B[ C0A0AA?BaI@B4C$+B4C C4CB4Cou?zB~/4C@A0AA?}fB`@wBNAmB£ABţA]AxQChY?{B!APA0AA?BE@xBCC=BCCBCCBCC7mq?]DBC`A0AA? 4B ђ@p{B䷙C}BⷙC2"BᷙC&BBZs?ˋB`CpA0AA?+C=_@_WC#oBhC2oBsK@C2oB_7B2oB64|?HC{oBA0AA?kNCT@O|6C~C;7C~CaC~C-R(B~C|}?6C\~CA0AALB@BuC`BuCBuCpBuC]?mBuCA0AA? C'p@@ C`Ba C`BhTC`B@A,lC{?.+C``BA0AA?);BF1AmkB?#C=XB ?#C|A ?#C BCc?kB`#CA0AAB1A7>B)BY).B)Bs+A)B?'AjʎCb?4>BEB?@AA?BO@;C-\B̥C[B2B[BfB:jCVw?3CTB@@AA? B@gTAo CEAl C0hBl CZ Bl C?%AC@@@AA?O*Cu6x@\nSC Co7OC| CDiB| CB$Cn{?PCԎC@@AA?WmBN@"BzC^BPzCBPzCK@QzC l?NBxC@@AA?\q|C8@3C3C%.C:CaC:CC:C{?e3CMC@@AA?q{B@XCzEdCp8BCEdC.BCEdCBAB/r? BrcC@@AA?;Bz3@LB^`B%4BP]`BlvBQ]`B\WATlCPj?BJ*ZBA@AA?PZRCbM@YCTB RUCETB4KCETBA6iC[}?n"[CqVBA@AAs*Bք@B]C BCgo[BCWBD[C5Ks?yBRC A@AA?H EBjt@YBC'RAHCAHC@@wC< ?BF(C0A@AA?ISB@]B&C| TBT C AT C4Aw*C\L?n_BL!C@A@AA?B\@Z{B$CrtB$CWB$CxrA$Cui?d~B CPA@AA?csB@7ACB~A|B_kB|B?B|By8?AsB`A@AA?OdCFl@5;CyBLo=C$yB5C$yB:.B$yBq}?e;CBpA@AA?bCs@v>eCC+eC٪CnC٪CcB٪Clw~?eCCA@AA?ͿB@(KB.CB.ClB.C}?.Cv?IlB&CA@AAZBv@dB?e5CCB>e5C ГB>e5Cl2$B螲?v?(Bb5CA@AA?Q_B:LAC`B{fCB{fC|zA{fC$BIB3u?BfCA@AA?(IB+@inBM?C2B M?Cq C M?CyB M?Cz?Bef?C?PAA?kB@HBՌBB5ՌBC5ՌBaA5ՌBq?FBkB@PAA?13B΀-ABˇCBˇCtA/BB/BP?BXC@@PAA?,AJ2APByCBxyC(BBBBe?'BxC@PAA?4Cџ@C*C! C?CVC?C+B>C+tz?#CIC@PAA?}AvABMCB MC`Ba0AEC`0A31?BKC@PAA?WC@ CBCB+CB}C BBz? CTRB@PAA?C @xBC+BC.CC"~BCy?˦BCAPAAbC N@k&CCO CC9BCzBCV5z?6'CCAPAA?Bo@4~BCxHBïCaBïC QBc+Cs?BϯC APAA?4@C%H@C ưCr CڰCpCڰCBBڰC{?CC0APAA?wMB@ßBBv_BBhABD|BdDCZe?BB@APAA?:3B/*@i|B#Cx3BCACnACF(?B~CPAPAA?B;@B"B>\BkB*?\BFA+?\BţBkC^q?JBP4]B`APAA Cbf@C@ C 3@C3@2`m@2@n:z?UC@pAPAA7lBF@IBs&A܋B|&ArB|&AZA{&Ags?:BIAAPAA|BB@ʠBBCpBBCLBBC̺@oAzp?FBCCAPAA?aB-ƭ@/BCBC_7BCW"DAC\Du?{BhCAPAA?B+@hBvCO`PBvCJߐBvCAvCp?>uhBCAPAA?TB)sA{wB*J4C B,J4CAgA,J4C@V>P?1BR4C?`AA?Bީ@@B\CזB#C6'B#C@BCWg?췖BC@`AA??C$ߌ@bCBc]CBfCB7B'o[C([}?t)aC{B@@`AA?eÚCf@CtC~CtCS5CtCQBtCP~?1xCqC@`AA?[vCK@ iC-BFdCa-BCa-BBb-B~?NjCB@`AA?eB|@ B`CMQB`CB`CA2Bv?Bb~aC@`AA?B@ MB'CȝB'CgB'CXA ­C3j? Bp)C@`AAgC@EDBC0kBC@CC*BCUw?B-CA`AA?Bl@RCICEBJCZgBJC0}B,Az s?B1JCA`AA?n[Cc@3CXB^,C|BaC|BAB|BM]}?˻3C B A`AA?>cBN@ CrC=P CrC A#{B&C#{Br?v CsC0A`AA?"B פ@խBQܧCάB`ܧC(WB`ܧCE;BCi?KBCC@A`AA?9Bh@B`CɨB`CGB`CKMBb2B1j?B؏`CPA`AABw@*0eBlCdBMCqjBMC$*BMC:i?cBC`A`AA7CA#A ߩBByBBYBCiBCgQ?NBBpA`AA?oiB%@ߥBXB7BXB=AXBZB3ֈCGm?&B_BA`AA?B:~@B&-YBdB-YB%B-YB A-YBy?[@BYBA`AA?0A/EA"BCiAC"0?ACёA%TCJ2?TBњCA`AA?GBA?dJB%>?HB9@HB!@HB=Ǿ? PB?pAA?EB6<@[~B|B?xBY|B̃BY|Bu@M|BHEe?kB|B@pAA?Cni@$C3BC6BC5BOACW{?&CB@@pAA?0Bv@ΗCl-Cd~B-CB-CAC7w?<C+.C@pAA?B@ BABABAeХAAm?KB,[A@pAA?C`{@D_(C▕C\ CݫCBܫCfBqBy?$(CC@pAA?C@_CBfBB26CBbBBx?NCB@pAA?'FB<@FBOoC1B0CAy=C ApAA?b*C^@)CVBd)CVB[%CVB@ՈC{{?+*CjFB0ApAA?ՕB@)BqCBqC BqCBOwB[_r?BqC@ApAA??Bt@VBA.BABAI`AZ`RC/w?VB 2APApAA?ƑB-@1B?FQCrBHFQCۑBHFQC\AC2A?v?cBMQC`ApAA?+/Cl@gC|A(C|A?C|AlB|A}?`CNApApAA?7B@BBBBaBB@s>C,q?AğB BApAA?.B(A BՍCBՍC&BՍCE AՍCmE\?z BCApAA?\|B@=B깇C{B깇C4B깇CABWv?_ BBC?AA?*#B8@)IBCd?BCBC~ACR?JJBC@AA?EECz@hCXbBa]CfB'CfB9VBYC|?ȹiCjB@@AA?yCǁ@BCѠBAC0CAC^BACYr?/BϬC@AA?*C@CVHCCC:CCBC2z?xPC|B@AA?WCՐ@d|CdCsCgCCgC[BgC~?}CIrC@AA?[ȇBZ@BBuCB%uC|AB%uCtA:C)m? ABC@AA?CU^@,Bp1BoGB8q1B7C8q1BB8q1BYCʝB ?YC A?YCiB#B9b??ABYC@@AA?;wBs@SBBmBBXABBCq?MBqB@AA?<C@B3C(eB3C#!C3CsB3Ch w?*B 4C@AA?`͸Bd@B{C\AV8BYF\AoBXF\ApްAUF\An?PBG6gA@AA?bWC V@.BZBBVB~YCVB<AUBw?BB@AA?kC˽@IJ@CUCaACUCeCUCښBUC+}?AC=DCAAA?TBH=@eyBVlB5{BkB~gBkB@TCf?wB![BAAA?\ Br@ίBhCF|BvhCK BvhCpAthC|7q?-B'Cq@Cf[ACAw~)CA8A(Ad|?ClaA0AAA?-dBړ@p٥B B좥BB CB%hBBuw?EBSB@AAA7 CRo@cC&A)7C&AWC&ApA&Ab{?ZC APAAA?HB5np@DB>BDB/B|4B0B |XA[Czoy?BqB`AAA?A,Ab(B̶qABTqA@vCC)BvCCD?d'BsApAAA?OB?@FBQ{BB0Bp{Bn@HBp{B8@l{B#h?J%GB|BAA?x%^Bx@A4CWA4C(?B4CA4C׉4?1A4C?AA?AA|A%|C/A|CՅA BY#B BT>\AC@AA? BABCBC+iAc CABc C8?@BC@@AA?BUB\@oAlqCAbqCBbqC8TBbqC6?!hAIC@AA?VB-@?xBCBC0BC$ @^C6s?Bz5C@AA?aoC7@zC4ڨA­|CڨA~^CڨAwADIC~?{C SA@AA?B/@PB!AoBA4%BAWB?LCGq?mB?"A@AA?B̜@B&AB>A1~B>A6AICJl?sBîAAAARBZ@BC^B=CMB=C3xB@B/r?=BCAAA?Bc@CBC{BjB{Bqc|BCy??wC?qB AAA?~=Bt@MB.+uCB0+uCvB0+uCX>UBZz?B2uC0AAA?Y&AA@AA?PfBȲ@-JBCmKBƺC@BƺC).@B@[?aSKB}C@AA? B@^B9BBBCB/+BBN_y?B7BAAA?!^Bq@:B^UC B[UC۷B\UCAcBz?HB#UCAAAqB׹@l BգCGB{գCvBzգCBzգCM?lBʔC AAA? JjB@BC!BC%AC0GBCNl?7BHjC0AAA?B<@ڝB}CBCmBC1ABt?BC@AAA?]Ai@3BxBXAxB8A4ދCW(B4ދCם ?B BPAAA?4zB@u9BC%O'BC韖BCBC_o?9B@CAA?T C~ s@dBo3B<=3d!C==3X0B>=3?ABge3?AA?Cd@ƒACNC73BCoCBoCB8ʦC|?rBCC@AA?ʲC@BF"BWBBk(CB~BB y?-eBeB@@AA?Bژ@JB٠CXB٠C_B٠C27B٠Cq?"B\C@AA?[BW@(AmCAmCd)BmC^EBmC@?&A\$nC@AA?BB#*@BD"B0ͻBD"B{BD"BA\Cu?Bz"B@AA?7BU@BC{eBC2BC0?LBwt?ZBpC@AA?F@B@oBZhC:fBXhCAXhC^ BCV?oB]CAAA? BG֥@;B,>B'B>BB>B!׏B>B!b?B۵BAAA?GBc@ABB܋BBfBBuDAC7s?)B#B AAA?B@!BnC߱BnC-BnC@ق+C/z?BC0AAA?AXAQiA1!C}A#AHC@AAA?[B@aBhBlBŤhBBähB.6@<)nC$z?vBhBAA?xB6@ &tBCĒoBCL~BCk@C(O~?mgtBC?AA?B Q'@B(*CqB&*CޝB&*CACآw?B )C@AA?APAvDBw@B-?Bչ@Bύ-Av.dCjBv.dCK&?VDBBB@@AA?`BC@BSC|BSCIfBSC0@x|Ayf?⍂BSC@AA:BJ@BB BnBBnBf@ٺCu?݅BB@AA?_B Ŕ@.B C@NB CB C7@Cx?BfC@AA?Q%B)t@-BS3B*BH3BlBI3BکA`Cz{?vB3B@AAB-@kBOPCԪBHPCs7BHPCX6B$Cv?~B4CAAA?Bh@B+CaB+C4B+CK:@+Cy?B>#CAAA?vB@NVBN tC- AȽCAA?A@ AV4 At4pA4CB4CK07>A4?AA?2׍Bz@BBBBmBBA=Cxt?BB@AA?OB]_@@jU-A5HC@AA?pNB.q@n;JBCm:BC[ACA Cc?{KBC@AA?vQMB?@BICsBIC BIC+A#ЮA+ n?1BIC@AA?BP@PҐBpB/BpBǻBpB˽ApB"_w?BpBAAA?B@$)BBBBBB"4BBBמAD!|C|?^;BtAC@AA?LBH@B!CiB CC CHB Cs}|?B4C@AA?uBQ@3Ad.NC|AW.NC AV.NCAV.NC:>?ANC@@A D|w*Co@-C4Cb?SC4C@A?PC0@*CC|3C|3B4C?Cq3AA?C@BC#BC2,CCBBC6B?BCAA?oաAPAB4C]B4CB*"7D0C+"7?1B4C AA?ùBA@8BBBA҈t?3B0AA?EB=@s-B4CfB4C,B4C A4C?B4C@AA?NqC\@TTfCV4C_C̩4C˩4ZBЩ4?eC34PAA?^B@2B&BCBC"AC?BC`AA?A5qARB4CB4Ct{Bf%7N0Ce%7l?#B4CpAA?~A0A5@4C9ݷ@4CK@7B:#A7z%=*@4CAA1~ BvABB4CSB4C%A[%7]B]%7еy?GKB4CAA?T>C?Ӟ@fB4C>B4Ca],C4CpXB4C?>xB4CAA?ʴBu@3pBNqBC%BCnBC?4pBCAA?8FA-dABK5B v5wA4CEXB4C2?!B5AA?B@"åB4C.ҠB4C<"B4CB4C?oB4CAA? ASAW'?4C$?4C=J37w?F37rA<">4CAA?QuA&CAA3CրA3CBh@CߝAC>{A3C@@?A?!!C=@hD}CDחCtCחCA^B$?IDC@?A?C=@nCΓCCC|ȦCC"BBr~?CC@?A?jC/w@1XCUBhCB̦aCB)@>gCBz?d_C~B@?A?CR@Ck&CdCL$CCL$CAL$Cj|?ȗC>%C@?AC @W:Cc>C%AC>C]D>CB>C~?{C>CA?A?PCUL@CpCjLCԂCJCԂCAԂCr~?[CGCA?A?~C6z@_zC\sCsC mClB mCB8C$Bz?zCC A?A?|C;?@F)C [JC7CyKC=ieCyKCB۸A9@|?QCa"LC0A?A?LBg@;BUC8BCC|BCC"xbBCCAV?":BC@A?A?wCh!@ɚC BCBCBtWBBc~?3C BPA?A?B1@BB{BB|3BBުABl?rBOQB`A?A?B蒰@QB]BgB]BuuA]BnʴBekCr?BQ\BpA?A?~B@~BCZBYCotBYCFEBcBϗq?BɆCA?A?+A%;1Ah BI@? BM@r@p;C$Bp;C>?5UBAA?A? ,Bsw)AΘ BC BCaACKYA\C? B5CA?A?B@BmC&BjCBjC@DBI5Cx?qB6bCA?A?B@B8ڈCӵBڈCBڈCSpAGjBt?BuB$CA?A?m BCBc y?B`BA@A?XC@BzCCzCK6CzC4YBzC{?2BzCA@A?޸BMAjBФC@,kBФCEcBФC"?Ce?kBɲCA@A?@B@B'7{CVɸB,7{CtB,7{C7q@,7{C{st?BK{CA@AT*B3A7%BNlCFBllC߁ BjlC? `B$uT?QJBnlCA@A?eB@kBsRBBsRBPBsRBYNBuRBy?9PBRB@@@@A?]C@ÓC}CCbCCbCBbCR}?dCC@@@A?`!AC@-CzCJCYC[cCYC$BYCu?CДC@@@AnVCs@[C$CVC=@+BIC=@e[A6CNx?4"VC>@@@A?΋%C. N@)CC6C?hCC?hCd:BBu?P2C懈C@@@A?Ck@CACC߹@CU(C߹@CAKA<}? C}@CA@@A?86CBx@oC2A+kCtACtAKCtA*}}??hoC@AA@@A?C @CnV}C긼C "}C)%C "}COB?DBF=~?[tC H|C A@@A?zBCՙ@eRCaB[IC]aBR2C]aBDAklCfz?BNC`B0A@@A?"Cڏ@J0C BF,CB۔CBnBCB'|?-CB@A@@A?pprB@cAB/ABG BB7QABa>BAReBPA@@A?&CP@^ CNCg C-CZf>C-CPSB-CA{? CY%C`A@@AZAOBk=@+*BTJCy$B'TJC"uB'TJC@:A]":?-B2 HCpA@@A??B;@QשBl@`BGE@BGE@~s@GE@wuk?B0@A@@A?/B9@,BC-B΋CrB΋CmA΋C=yu?BʧCA@@A?MįB3R@B?6CyȷB=6CbȏB=6C\A7 @n?ǶBy6CA@@A?OaB73@TB34CRBP^4CA{BP^4CAP^4CSv?KB@4CA@@A?-BS@MBD`CKkBD`CBD`CAD`Cs?-B"`CA@@A?CRۄ@BuCBuCUCuCpZBuCvgy?mBtCA@@A?%B|LA3A%'C*A#'Ci1A#'CSpA#'CV >|3Ac CA@@A?'BG@]BZBC#:B[BCOB[BCVdACx?gBGC@@@A?5C@C7G;BC8BCA@A?3CW@,ECB=CBCBACx?GECB A@A?B @0BnDC“B;3C$& C;3C}B;3C//i?BՊC0A@A?u!Cm@^CZBfCZB!& CZB3@ZB3]y?5!CYB@A@A?*ECy@YQCBDgC,LC3DgC8C3DgCAMBC|?BPCy gCPA@A?*LC.@CCDUC ?CDUCTCDUC\ADUC[G}?6CCUC`A@A?;B' A:úB&6C"B\6CA@RB@D]?O3BɄ4CpA@A?nCCG@LrCKCfCC]rCCM:BACr}?qCCA@A 1B?9ABxAC-0BqACWB[AC[AGg?BڥACA@A?C| i@> CaC CaC CaCQUAaCz? CaCA@A?Cۆ@WCCTIC(CC(C@CCC{?[CޡCA@A?ϞsBxAB+_B>BK_BsBK_BBK_BO?"B܈BA@A?zB:A"4BrC-BbCBbCAbCZ?d4BӋCA@A7LB3A BwC&BwCӯUBwCZAwCy_??BoCA@A?̕BALYB =C#FB =CB =C0B =C;Qu?mYB =C@@@AB3}@B_C BrCWPArC}BjxBJ]?BکkC@@AC%گ@wCC9CCL-~CC_AaE Cz?pCC@@A?^WC@'eCm@QCi@}Bi@bKCP:C{?yCH(@@@A?pCp@ACy_Bh=Cb|_BNBb|_BgBkCx??\gAHC@A@A?KBv@BK C!òBr CE5?r CLB-B%?e?ƺBCPA@A?jC@w@KCvCyCvCOCvC@ .C~?’CCC`A@A?lC@7wCCsiCCCC;BC}?vCCpA@A?BCr@CO5C CD5C"BD5C"BBBz?P=C CA@A?HC4iv@C`pCCnpCCnpCS?csB#Qz?C"qCA@A?[SB4r A BWκA3BQºAi*BRºA`^c@ZºAE?ЬBtAA@A?9B|Q@nvBrDChwBDC`BDC@ALf?wBDCA@A?cBtAG~BaPC!BaPC0 BaPCB"Af?[B1OPCA@A?Ѷ8Bb'IAAށC;AށCAށC|(AށCiA޼CA@A?B%@BCF BCBC[BC/h?>B޷C@@@A+:DHA'C#&CWmC.%CD%D.%CbC-%C~?yC E%C@@A? pC@Q1CCsJ.CvCCvCBvCfz?#.CC@@A?$:CO@k/CB9,C:YB">C:YBFHA6YBՃy?^u.C,B@@A?{CAA'CB"CqB>)BqB{B]+TC]v?&CgA@@A?LA2C@΁CCBzCCBC4iCBz?n)C(՗CA@A?gB=A!hB6BsaBv6BVAaCO9BaCz> oB|5BA@A?gC>|@ӺBۀB^B~B C~B}B~Bvs?Ba~B A@A?WBom@iEBǂC BCċ CC BC2g?3BoC0A@A?SAF^$AWOBͭCBCIB|BŒ7AC`A@A?CK@E27CAj/C{AC{At*BcNCh{?58C ApA@A??ΦB>@B`rBeB!arBaBarBI5BHpC s?BsBA@A?DB/A4B XC5B/ XC?(B 5=B(B ?12B1HXCA@A?e.B)AB?AB؅AvVA؅A92ADC?B AA@A?ZB A4BwiC4B`iC?;B`iC?niCW?l5B[hCA@A?uB`6@f»BN CfBP CMCP C8_BP CYv?VBCA@A?ANK1A BBضBBhU@B$ACV1?: BoΛBA@A?2BS.A.BzCdYAzCs/BzCaAzC3GR?gBBuC@AA?_A ABVCKBK=VC@B,BF:UC,B?mBUC@@AA?5CxAJYCXCsUCxC CyC}ِB1Bzz?d;XC&C@AA?~BR@BC;B8CA8CgniBBnU?;BϒC@AA?4B@5B)Z CB= C~B= CAK'A= Cd?6BB@& C@AA?C\ @OCCCC(CC'"BCs?CCB>@AA?`]/Bћ@lr=BW}C9BzCAp@VBBBXB>?JBtCAAA?;OCC@g}+C%C (C?&COoC?&CB@&C{?/C"JCAAAʙ^C{@imCz^CxfC^CZPC^C`-A>"CG|?nCC AAA?yBۃ@JBiC~B(iC7W,A&iCB,VBvi?kBZfC0AAA?҂eC-^@ҕC]ڢBڽCڢBh:BܛCZCfCܛCvLBܛCx?"CBCAAA? CxÖ@gC B®C5BqC5B`XA4B{N~?sCnB AAA?v(BSc@r؉BwCBrwCCrwCs#BrwCqp?nBxwC0AAA?JCP@KmPC)CJC)CoDC)Cj@CCK}?TTCl)C@AAA?B8@ඣBRCXBzCBzC@=AL C2i?-lB^CPAAA?[mCuZ@/_CBwUC#BC#B1.B#B}?^C;gB`AAAWCzK@vC>+CsB>+CQ3C>+C_pYB>+Cϙz?JC+CpAAA?`JCOla@)CC*CC.AeCC"jBC<|?õ)CUCAAA?ko Cm@.CACAApCBAH@_LC̲z?zCAAAA?0=Cj@,yFCsC!GCsC/CsC~A9C}?(FC\CAAA?!CV@BlaCBjaCh1CjaCBjaCt?cBmVCAAA?NB@o1BciCSB^iCACB^iCJBCu?cBYCAAA?Hl>B4,A)AqAAXAJ6BYAAZA7H-?eAxA@@ AAjAA/kB/C"B,CIBB!CB>6ϿB̖C@ AA?veC@`CnvA,C+A>X$C)A\A'A$v? C!A@ AA?SAIAwB6B+pBB`EB9C B9C>PBsB@ AAߒC 'AhyC\F9BrtC}G9B+C}G9BBG9BY}?TzC5=B@ AA? CEN@B{C[B{C C{CMB{C\Qt?BCA AA?66YCAP@]wC{GC1qC{GCr+C C A AA?I7CC_@XBȀC~B̀C=oC̀CvB̀C {?B]C0A AA?,CHY@3UCzA$LCNQAexBNQAB*QC{?FTCyA@A AA?Bǖ@x+BBI;!BJB̴BJB ^HBJBlP?c(BGBPA AA?2ܓB/@BN CB" C B" Ce'@" COk?"ЉB eC`A AA?{By.AxB`B1NwBB~ArYC\BrYC^/?wBۂBpA AA?8cCc}@W0CC1CCՈCC&BC}?GV0CCA AA?+C@`@FBq(@BU-@O%CT-@WDBN-@z?OB0@A AA?u0B!RA$hB9CfB9CA9CzBXB8\?gB3CA AA?+B@-cBxbCOB}bC0B~bC,B=;B-lp?BbCA AAa*BS@XB2CݭB2CB2C4A2Cl{?ŹBBCA AA)ޚBH @XօBCyrBCBC.ACYw?B C@0AA? C@vH-C CuO'CCgBCm|B@Cx?o"CC@@0AA?*Cr@yKCRAYHCq,ApCq,ABICR{?*NC3*A@0AA?#B'@B"fC&BbfC?XBbfCPAKB^?͏B=kC@0AA?sB@Cm3A4CPAiC_3?IBCA0AA?$!BH@BPCOBPCBPCo#BPC w?uBRC@@AA?F,B!@uB:CL̊B^C@"%CB"%C C@EHCCpBCCBCDBtB^z?DCC@@AA~C@R$CȮCyuCЮCqBЮCB?Bǣx?O=!CωC@@AACgl@XCECJCEC-CECBECtB3x3C@@AA B;54ABjyC+BxC9*@xCAjClo ?B(BCA@AA?6zCצ@\C BVC/ B׌C- B(B- Bt}?|_C BA@AA?tWCy@u)CF&A?"CA1TBAS BbKCyz?)C7A A@AA??C>@p_CQA ESC9A&C9A?2B(zNCu|?3a_C} A0A@AA?B^@BOABD}ABD}A}BD}A^?Br@@A@AA?/AY A[B7CB7C~B*B@E-C *B@PR?CVB7CPA@AA]BCmz@NOCjCNuPCjC/0CjCmB,C|?&OC,oC`A@AA?CT@)BB7BBAZFCBLBB̮y? BYBpA@AA?0\B"@]_B Ct`B,+CB,+C9B,+Cbk?_BLCA@AA?Cn@^C Z[C+CZ[CCZ[C >Z[C|?rCWh[CA@AA?qBaE@B ښBoB ښB;B ښBBCUw?By֚BA@AA5B@5'AREWBv-BmGGBs-B]As-B1AwC7f?`8WB#BA@AA%KB @̋BC}BCBCfBC{ly?ӋBWC?PAA?qC@=BxC@BC5CC܇BC.v?BC@PAA?-B@BCBĹCx"BĹC BBq?B*C@@PAAC@CB(]C<5B"]CՌ@A$BFB?$B?=B]CAPAA?L6B֓@v?BᰄC ÖB C6LB C'A0Be? BC APAA?)CJC@B ՕCBՕC9 TCՕCZ-BՕC{?Y!BC0APAA?C7U@ BCBCLCCA2BCh?2BC?xABCA`AAj"BA9BPA1BPAAPA¢AJSCpW?H%:BAA`AA?ZB2@B@AeApApAA?B>@BC BCBCx@E(B ty?RBHCApAA?A?!AS BCAC?CA )C&? BCApAA?hB@vBNBN`BNB>4BNB-{#BNB]w?vBNBAA?RAAEA A4C A4C bAe76YBe7'>A4C?AA?;C@y$C[BC BbTC B:9]B B t{?^%CB@AA?A AeLBϚCBBCACvBCt??JBMC@@AA?%,CzV@ClACL A@ؚBÅC[BȅCGpBȅC!A 3CLWi?BڗCAAA?JBm@:iBYBjBlZBFBlZBv7BlZBf?CjB BAAA?[CtB@ǂCCHCC%YCCtBC~?pCC AAA?MBQb@BC Bt C7#Ct CIdBs Ct?B C0AAA?DJB_OAAL CA C87A Ce@|ɟCu>~A C@AAA?uB z@B7B?CcB?CB?CrA?COty?=B@CPAAA?$Ck@ICn C@Ct ClCt CWv@w C~,z?mC C`AAA?&۔B躢@B CgBC$BCvBlBsw? B]CpAAA?fB @TбBC]JBCOBCAvCIw?BCAAA?A/A/A ACACm&sAC\&A!X1C-0?jACAA?>iB%@BC BCBBC`@BB?ߡBC?AA?s1B@*;BCP97BCdACAcCpAAA?sByɦ@ 8BC C-'BC CLBC C#BC Ct?8B, CAAqBS7@xK_BCd`BCBC,BCy?^BC?AA?zIB@.+BWC@,BHCnAHCP?gA}B`6?п+B#dC@AA? wC}c@pCCzqCCwxCCV@C{}?,/oCVC@@AA?9B@BA{BկB{B!-~B{BAޏC}o?ѮB7B@AA?׾B) @J*$BKWC!|%B[WC޿C[WCB[WCR6f?b#BҗC@AA?C@K,C(C-CDCBDCzYBeB2A|?,CH C@AA?NBn(@6NCgC1CכC9\BכCcBC=y?`CћC@AA?Aeb-AEWBJ=CWB=C}AVA[;BXA4'?VB=CAAA?EB?@jNBC]OBGĊBGCAGCnjd??OBYCAAA?J&BU6@PsBi?CRBp?C_u?(B6?C AAA?BAB%ECB&ECsB&ECD" BB't?B$HC0AAA?@B@ߢB9/CB9/CB9/Cݧ@CDr?~Bbd/C@AAA?KeB\@GB hCUB hCB hC8B:$PBr?IBR hCPAAA?\Bda@ݬBC6BCBC@C Mx?gìB C`AAA?A3'A@nNC)@UNC@UNCZ~>SNC?>h*@&/NCAA?BZ@BB BBbBBAAC?{BB?AA?;qC@CHCCMCg[CMCM"B͛C]~?ĔCPC@AABn@B~rC:B|Bl:B{Bm A{BˏArCG?(:B{B@AA?єB,@b=B2B%>BBBBBBc?f=BB@AAo@A$AA"xC7׼A)xCg@BABp&>9ZAC@AA?oB@U4B6Ck3B6CYrB6C#{A6Cpa?D6B5CAAA?M2C@c5CXxC.1CUxCj0CUxC-?C|?6CnCAAA?Bε@ Bg+CzBw+CgBw+C $ACdj?B>+C AAAB@9QB#CҝB#CQB#C9A#Cr?^B#C0AAA?dBsl@@B{ CkB{ C]VB{ CU)B{ Czx?BQ C@AAA*Bz&Y@Bę-CQBș-C5Bș-ClA̰C |?B-CPAAA?~NCT@ Bj\CYBj\COC!Cj\CpBj\C}?Bi\CAA?=CS@Z.CN.CC&LCCAC?A.CC?AA?ZCRj@:SC[CiC[CC[CA[C{?ȢC`PC@AA?pBXA:B7A6:B7ANlA7A`A,x?CG?*:B3BA@@AA?BbFA{BvXCBmXC~AmXCABǷ>?BXC@AA?%0Cf@1C`9ACC`9ACDC`9AC,(B`9ACyB}?*C8AC@AA1bB@'ACWACK^BC @AC_=? AC@AA? Bݸ@-BB~BBBBD_MUA1C0AAA?ęB@BECGBDCpBDCABJz?,BnCAA?5AeBj C?:4@r5Cl?]BV C@AA?Om BAB"C B"CA"C?aAkdCK?XB6"C@AA|9SBO@ EBC=BCdAC8BʯBv+s?BhC@AA?2@BA+B $B B $BL>B $Bh A $Bf?I+Br$BAA?jA>AACCAC[)ABxBBP?AC?AArBΫ@BBU2C.BU2C0AU2C}A*C]!g?ABA2C@AA?2٣BU@èBC_BCSBC@C0z?z B뺋C@@AA-gBN@nB aCYBaCr`BaC ?aC]s?LmBaC@AA?FTBւ@GBQ.ACKBS.ACBS.AC2BB@A?kC S@k9CBJ.LCBCBvBB?ĂKCB@A?c;[CCC@qW)CB&CB܇CB BB?6'CBAA?B>@EBCBCqBC8BACn? BCAA?!B^@2BBjBBfBBABtV?BB AA?ؒC^@OCCyCC1 CC}AB?#$CC0AA?B @:\BC"VBCL CC3BC?x?hZ\BC@AA?aC@PCC(KCCxCC`1BC?,PCCPAA?&AByAĦBB*|BBABX#kBCZu?fPBB`AA?PBP5A0BBBB͜BB @B}X;?*[ BBpAA?ՃB|@^BCvBC~BC4 $BB?elBCAA?CN@D=CBzBBp CB4BB?BBAA?9B@4BBYoBBQ BB AC?;BBAA?HBjAXBCVBC1BCNABj^e?#UBCAA?Q}BpA.UBC+TBC BCJTBCZ~?ȔSBCAA?LB#n"ABCm2BC?CC BC?vBCAA?YATbAۗABˊAB0lo@BYAC*>zAB@@?A?^DAȏCCDvCkCvCBC~?iDGC@?A?rCa/[@׍CiCv?CCCCCAvޯB +|?ԐC}C@?A?pB7AݎBCŌ8B(CA(CAQ Cу?TBnaC@?A?uC@YcCC CCԎCC BCi}?jCC@?A?W}Cqv@چC 7BC3Bl2jC3B.B`C|?7)Ch.BA?A?RC|@CsBCUsBCUsByT@OsB"w?aCԓBA?A?B8d@8B٪.CӞBx-C}Bx-C"HB\dC0A?A?C t@cBсBBсB,CсBlBсBkCu?>BIB@A?A C}q@VBCXBC5(CCŐBC@u?LB CPA?AVCd@JCNHBrFCHBPbCHBAHBg}?MC>JB`A?A? B0 &AA1B[AeBA ?UCHAUC!q>A-xApA?A?B>@⺓BwCBrCBrCؒ|@rB~g?cB(CA?A?]CX@}~C:CxC:Ci_?C:Ct8eB@)~?~Cwz:CA?A?ܐ4B-AS)B>C*B>CA>CnqAB*??%B CA?A?'B@B,JGCBB(GChB(GC'AuFApg?TB%GCA?A?5ԔB@B*'@>ƂC@@@A?h/DFAsD2,>C"DZ A > ǃBb4Cka瞞AߎB`A@A?KmB@TB;\C'B9\C8(@d BjBd Bͷk?BB_T\CpA@A?g}Bv@G0BcGCI&B~C(0nB~CA~CL?3x+Bl~CA@A?FC@?BCJBCcCC*BBCx?IB3CA@A?B@BB9C`"BB3B~~?ŞC;gBpA@A?B"C@3LBbA#FBmABoAfBmA1j? KBPAA@A7Cf@MCiȐBKCtȐBBsȐBt1C;d|C{?3NCBA@A?זBm7ABOCBOCc-?OCBC:$?jsBDCA@A?B @BѤwA*"BdwA(m@(sCsfdA(sC@(sCU> A"7C@@@A?wCIJ@C@ C<C$"C~C%"C A&"Ct?h) Cb#C@@A?PC?@BCnqBĥCNf/CĥC^zBĥC&s?Y%B٥C@@A?`C@ TBmBBBg0CBٙBB?q?Bn"B@@A?tB0j@~8BCCB4ܫCCB4ܫCOAf#CQ^?B/CA@A?bC,@PfC޿AZ`CAiCABA)|?POmC[AA@A?C&ǃ@u&C9B"CBVCB0SAi1Cay?:?&C;B A@A?ĺAA7B.kCV]2BkCFA,CZB,CA>GGBC0A@A?JBb@5yBqCBqCvBqC.?qCC0BP>CBP>C@|Cy?B25CA@A?B@ lBB+iUBBq,BBsߍAB,s? mBB@@A?"B'AB~BBbBڤ@XC,BXCE>`BRB@@@A?6C@sC>L@nC/@B2@B;C&{?lqCwb@@@A?BC@bmC\BhCLD]BCKD]Bt~BID]Bl|?elCe!aB@@A? `BL\@lBC}BCwyBCBCkh?G?BC@@A?k ~Cj@WRCGC%FC>CC>CB>C'{?@HChC@@A?tCn@7CؘBd/CBBB>^BWCow?0C BA@A?jCCQ@%;C6\BϠC8\BD C8\BUAkC'y?OLC`BA@A?u9CX~@B`C1BlC}CkCCkC&w?BC A@A?]B'`@B;CrB;C#NB;CA;Cjs?xB6C0A@A?e-B\@Y+#CAChAABhAKBDC{gz?̼#CyA@A@A?ڂC@^CNIC|CNICtCNIC7AuAW~?C ICPA@A?w)NCUS@hLCHkCTACDkCUCDkCGڛAGkCo|? LCkC`A@AB,#A@IBNCY7CBNCx@NC)B:B@?tLBԶCpA@A?B{@TBƯA-3}BABAApRBAzk?#BrcAA@A?KB&pAaB\ CCBj CAj CRBB^?BWCA@A?B0@AvVCs1Al9CιBl9Cq-Bl9CTA?A*CA@A?AGAA`4CS(AD4C^g@D4C@BןS>AHʘCA@A?FdBABB|B-B3B-B@?ApCe?HBBA@A[BB5AX.BcUBCBcUBC'AcUBC0lA"VeAV?*.B$UBCA@A?֣MBCAB#XC|B"XCB"XC[A`B3p?0B(TC@AAUCg@POC fCZyJCCoYCCItAC j{?RCC@@AA3BC(BV3CL]AV3CÔBVBX?:B#C@AA?C*BNx@e?BuB87BƆbB BdžbBbzBȆbBA?2BBtAB@AA?6B-Ժ@i C=B CB h BB9AP^B AAA?>Bdu@xBC@BCFBC &BC.kp?`BC0AAA? =B{@B#߈CB3߈CbB3߈C@2߈Cu?JBC@AAA?,B{@BwuDB?BsEB4BsEB0@\eCu?BHBPAAA?F+B.@ lB-B>aB hB B hBtB hBe?m]kBB`AAA?4LB?@BBBB @B2B;DCGg?BdBpAAA?*lOC@z=CmCx>ClC7ZClCC:AlC|?AC8C0VCD^9CWCD^9CAȫ@Id}?ާCu5:C@AA?jB͏@ "C#C~C#CkB#CBBCs?$C#C@AA?#C@'CBCy8CvCW%CvCQAwC=x? CC@AAN'Ci@RCSB CNB"/CNBbAPBz?C B@AA?!C홪@ CxCRCxCCxC @xCy?0CeCAAA?2C@pC=BbbiC&BC%Bn#B$BGl}?6nC˚BAAA?Cm@fCmCpC mCC mCu B"mC}~?ΉC!nC AAA?QB\@fB"JCB'JCB'JCVA'JCqs?+B[C0AAA?4 Bج@N@B1'sC1BF'sC؁BF'sCB|Bq?EvBwsC@AAA?Bf@綅BXCzBJCCJCtBJCU)l?/kB$CPAAA?vC#@B[CBTC2BYC3B~B5B*\~?\C#B`AAA? C\@KBxCOPB|xC.3(C|xC B|xCZw?hLB.CpAAAbB@BYCԉB[CtB\C AiMBv?EBCAAA[BҠ@.BVB B}B:B}B]X B}Bo?쏉BBAAA?Ba@- CC:Cȼ CD:CbsBD:C[ $B By{?. C+A6CA AA? B,AH7GACGAsC@sC@CY7>7|DAf3CA AA?_4Cv@{B2?B2?iC2?}B2?C{?B#?A AA?8NB ADBfjC^=BfjCw*BfjC7ߐ@B'_?DB$jCA AA?)B|(3A{#B.$CHB/$CA/$CLAClO?#BS$C@0AA? FC@B,{C{BL{C.CL{C}CL{CL-y?BgC@@0AA?+B!@!7C:,@C92C+@C8B+@C}CrBAw?E4Cr>C@0AA?BTћ@bsABrA%B?tC%BB%B5?AB@0AA?mCA@3FvCɺC<2oCCսeCCqFA]uC(}?'vCOC@0AA?#!C<@~CDC CDCQ0CDC7BDC1;z?A C4CC@0AA? EC7@CsԯC?C=ԯC?kC=ԯC~B=ԯCIG|?C CA0AA?]BcĻ@dYBB5KBߚBH&AߚBF,BfCb?%BBA0AA?M C?@`joB CfB CIOC CWC C(p?iBdC A0AA?;xBR@C C CS> CY B*CF ;C*Cp?2 C.m C0A0AA?vCT@CiyCrByCeCyC.ByC=z?!CyC@A0AA? CX@B]CUB]Ch&C]Cz B]CSv?BtCPA0AA?nBy_@BB)BFCB)B7B)BK?<@{CJ?ZBBB`A0AA?PeC̑~@3CvPC4C|PC4͈C|PC ]B|PC}?.3CPCpA0AA?\PCu@%MCNJoB˱MCoB9POCoBM7?oBj}?nMCoBA0AA?C0@BяBBB-CBDBB-B{?zPBBA0AA?N^QB݂@MBCo BC-2BC ACDA?B@CA0AA?fBa A7lBBG`BBA/RBBa@C]4q?lBBA0AA?י%B{3AuA},C\A},CFB},C{A},C?tAZ,C@@AA?Kx?C@A:CR^C}5CR^C*,BCR^C*IAR^CS5{?3z:C]C@@@AA?[B7r@&B`CWBCXeBC/BjCdn?BDC@@AA?C A%CCr"CC(7BCwBC ^z?+i%Ca+C@@AA?,C@w}CjCZ CjCSFCjCcBjC]{? C\kC@@AA?rUC;@NBC{BC!C=H@ACP[C8CcC>CcC @cC{?NCCjC A@AA?k,WB巶@BsC~+B;oC^@;oC B뼵Bi?>gB_C0A@AA?/QCχG@iC@%A C%AH{C%A&C%A |?tC(A@A@AA?[HBh@WBCFBCp?C==BCm_?^ȯB CPA@AA?RPBЀ@!BBBB/cBB3yAB/w?pqBB`A@AA?) CtXM@cB@]CiB]C#C]CklB]CBx?oB]CpA@AA?Bz@F>BMB'BcBBcBUAdB]-y?Bx*BA@AA?NB}@uCC CC-dBC(B&Cx?QCCA@AAKaA;tAbkA6A]aA5Av@PCLAPCPp>gA@AA@AAB1@ZB/CݷB/CͽB/CA/Cz?YB/C@PAA?ڐC@CC CʆC)BʆCA Cuz?H]CC@@PAA?`Bt7@B;BBBIBB;BpCr*q?RBB@PAA? Cձ@JCC_ CCBCA<"C-z?GC'C@PAA?"CHj@[zC`CPC`C$C`CA`C{?, C'CC@PAAC@/ C4CCCCCoBCCM{AX}Axx?4C?qCC@PAA?OkB@/7B8!CQlB!ChB!C AB*k?B"CAPAA?( B!$O@cBNwUBd>VBP;UB8CO;UB>BN;UBIh?SaBUBAPAA?hTC`~@XCYC#QCYCTCYCd@YCq}?XCYC APAA?pBߙ(A|KB kCB'kC8xAM(CnBM(CܳK?BYЮC0APAA??B(d@ggBLC+BLCBLC5BLC o?|kB?AbC@`AA?C=ݱ@L>,CSI.A@'CnF.ABnF.ANBg>C; {?,C_#A@@`AA?,B}!AxT2BvC2,BvCԀcAvCFAU]Bh*?lMBkC>BmgA>B{? CxqBpA`AA?eBaY@~BD{CuBH{C+(BH{CwיAB f?(~B|CA`AA?VBU@u3BABBABUBABEAAB6y?{B=BA`AA?<A+AA}CAé}C!aAé}C@SB>r?޼Ak}C?pAA? Ct@C=CW!ClC#ClCRAkC>1y?AXCC@pAA?B@B畩C;B\CB\CW۬A\CV)r?QBٖC@@pAA?/Că@aBRBrBuBCuB}NBsBSu?HtBB@pAA?/NBΙ@pBWOBCnB}BC«B}BCRA}BCEj?MBBC@pAA?B&֑@| CC'C6ЂCFB5ЂC5B@By?? C>C@pAA?wCA5}C&NCduC&NCl1uC&NC?1Ac~?}C NC@pAA?AABYCRBYCL/IBbBBbBr'?B]YCApAA?AEOCsA,A)B?`'BNC0ApAA?)CQR@XClB1CD[kB"CD[kB@;[kBC{?$CIOkB@ApAA?C;Q@IC6H~C6C:H~C C:H~CiY@EH~C%|?}C`S~CPApAA?׊dBu@iB3EC@B'ECn] B'ECz$B1A j?;BDC`ApAApBx&ABr,iCҮBl,iCATB8BTBiN^?UBiCpApAA?By@BrdCzBudCևBudCX/AґBT{?yBoCApAA?3qEB A@BשC*BԩC5BԩC*@ԩCsd?xAABC?AA?XB&B A4BG|C*]BR|C"?BГBBT\?>ܖB'|C@AA?1C:@:CtB/4CsBm+CsBDAC\Z}?;CB@@AA?BZBAzuYBnCsRBCe#BC3;>A' Ck [?ӈ]BጪC@AA?C/h@t,CRCx(CRCtCRC BTAT|?Y,CRC@AA?z C/2l@o%CTC%"CTCBTC\JB@SBW{?%C60C@AA?-B$A)CB?\LBKB[LBa=@gCBgC?+]BIB@AA?5bC@7,CB]-CBUC‚BD,BĂB|?,CBAAA?NC@q'C>YCv(C8YCUnC8YCB8YC|?&CYCAAA?|:Bz@(LBPC_֋BRZCBRZC @QZCl?=BjbC AAA?fDB[@QB`CC(#BbCC_BbCC'gB)vAu?lBcCC0AAA?sB@WZtB{?CWtB{?C4KB{?C~A{?Co?WtBj?C@AAA?(CEt@BBbBBX2RCBNBBs{?yBшBPAAA?D{B=@Z.B1PnCUk?nBSiBAAA?Cy@DBr7CB7CC7C)A7C_z?B}7C AAA?^B @l GBryCEFBzryC}ICBzryCb??B:b?ϸGBTyC0AAA?Bx@B0C#B0CޕB0C7AaC}Jv?MB=C@AAA?|Bh,@BC\BCBCNACSv?SBCPAAASJB@x^B'CoB'C"B'C@5B'C,y?B-C`AAA? CK5n@CCBC CCR;BC}?GCCAA?eP C:M@CC3CC3CC3Cp˺A3C?C3C?AA?kaC+@;ĊC;=ĊCĊCḂC}?;CC@AA?zCR@CBSC⽐B,B⽐B%B^|C4z?LoC!B@@AAOC%N@C6CC|6C:C|6CB|6CV|?CG6C@AA?#Ci@C"% CnCN5 Cu2CN5 C BO5 C{?BpCJ C@AA?B7@B.CgBC CCBCr?}B C@AA?vaPB@}BYB}B%BkA%BB|C̪]?Mp}B2B@AA?AV$AMNB&bCBbC_A;B0AB;Bך?BbCAAA?B@B+B̡B*BB*BoSA*Bbw?ڋBRBAAALA}B@YB0{A1rB0AAA? B:@B`CBbCꓹBbCm{@lCrx?$hBC@AAA?(AWAA8CPAB37bCq|}?8C3bC@@AANB@B B$B@B$B?BA?B.v?BB@AA?9BW@>Bx7N@B6N@XB6N@%A87Cl6w?9&B֙M@@AA?S$BAaB#C Br#C@r#CeiB9CHY?L4B"C@AA?QdBAHdBjzBbLcBSzBn76BRzBS4AC"e?dB$B@AA?C@ЭBTuCBYuC RECXuC4οBXuC6z?3BuCAAA?RBk@OB{,CB{,C.B{,C ?{,CAfi?B@,CAAA?{AoyANBE8CNFB=8CA@B@&.?2NB8C AAA?b:BCsAA l@ڀAl@MABl@Al@T?RAd@0AAA?_Bb@lB,BSB,B;CLB,B?1_Cjm?}lB,B@AAA?0B Q@]WBBLHBBAɲBB\ABxy?J(BBAA?B=@0B4CzXB4C|B4C `@4CS?2B4C?AA?YB@C,BC+BCN%MBCACe|]?E+BC@AA?yFCP@7OCC!MCCfh@uB+AeCH?UAB0AAA?,B-@GB筰C208B㭰CB㭰CB㭰C!hx?GBCAA?]BABBeBB>CBCkt?IۏBB?AA?~B$M@[Ck>XCP Cl>XC`Bl>XCeBB{?CDGXC@AA?C;BA(VXBʗCPBʗC+vAʗCřA(_B[?iXBC@@AA?)B @/C怬CbB逬Cj6B逬CL-B%C3y?v+CC@AA?=BV@vACAkACp!BCW|AC?^uA`C@AA?BS@_BC|BCBC ACF{?BJC@AA?g'Bsg@WirBC]`BCBCὺACG:t?~rBC@AA?~=B2`AlBHC6QBHCBHC\AG#Bzg?KmB)PCAAA?BĘ@BFCb!BIC]BICAHC|?BCAAA?{AhAABnABĴ@+9CA+9C ?aA3BAA?i]A7AaB4C(!B4C:JA%7EFNB%7wU?B4C?AA?.A@A8,AEA[,A @Y,AA=C%?AXA@AA?AW*A"1A>ġCX^A>ġCA>ġCA}C\?@AǡC@@AA?@ֵAAjACHPACo/?CZ.:AB,>{jA&בC@AA?5eBWAO~BzoCL`ByoCKByoCü@mBn?~BIioC@AA? \B@?6B\\;B%BB\;BBD\;BA@A?bCdjAXB4CB4C C4CuA4C?B4CAA?ӔC-bAhCCv3Cv3PBv3?YC=i4AA?8ŢB@|B4C8QB4CB4C@A4Cr?;B4C AA?B4@o C8 CB_#B4C?* C0AA?bzAxw.A>lB7=7eBf=7jPvBo/7@AA?8AfhAKAc7/AAY7*?4CSA4C>AYQ6PAAdB*@X\BKBB@4C{?[͡B`AAcҢBYv@hB⸅5 B&5ǑB'5 A4CZ?YBH5pAA?C2Y@iH$C5Cෞ5?Cෞ50[A4C?$C}ڝ5AA?B@~@BBʋCdA?BAA?AH6AB4CB4CXA%7v7~B%7ڿ>QB4CAA?.AZAڞ%A4C ,A4CĒ@7OpuA7>;3A4CAA?zFC@aCfb5]Cb5gCb5hBb5?܉aC5AA?l5AqRAhBNABXknA4C$LB4C ?BAA?sA-A3+@4Cb@4CA?$7]@$7>,=3@4C@@?A??wCwAYCV4CCM7CyeCM7CaBM7Cf~?ZC<6C@?A?ِCy@!6C6llCC+jCC+jC@AZBm|?CjC@?A?,ߛCX@CC_YB=Ck/BCk/BI Bl/B-c}?XCB@?A?5D?AJCC*CjޔCDjޔCpeBkޔC?;C5C@?A?iLBhAB,4CB[5CA,?C,?+\?B8CA?A?E~tC@ {%CbCzC?bCTC?bC. C?bCy?v#CJV`CA?A?}>B @gB[KCBƹJCХAƹJC*A,εA><BҶFC A?A?hA_+A>A3C*A3C~dRARݳC5!BRݳC>#A:*C0A?A?d>BIw~@ @BCCBCBCACs?BPC@A?A?6BA eBybC5`BbCAbCB:CbK?F_eBCPA?A?,BW{@|BoqA #BSqABQqA@4qAlv?DNBiA`A?A?C>C[P@[CwCG$CbhCSCbhCr:AB~?epCYCpA?A?.DB]AXACfAC7BCG AC.1?AXSCA?A?B@IUB ChCwQBChC^BChC]B! QB$u?)Bt;hCA?A?vBl@B C+B Cǜ C C B C+r?BHCA?A?G$Cu@^*CJlB**CcaBGCcaBgAYCW|?w*CYQBA?A?QLB"(AgBB=\BBAB@B-Cd?+ȌBBA?A?zCC@hBMC~BMC9CMC)BMCH{?\B>CA?A?7B}@BOWCBLWC4CLWCĚUBKWC{?BWC@@@A?tC~@C^z/BC4$Bd:C5$B9A9$B{?jC'B@@A?3xCq͵@WCBCقB^CقB ׏B 7CA@A C{|@B BTBxnBuCxnB BxnBؙs?!kBFVB A@A?b&Cf@zYCCLCC<CCZ~AC4w?C C0A@A? BUu@|ˬB4Cw B4CB4Cm&B4Czo?HB 5C@A@A?B@^{BGBbuB,BB,B@]B,Bl?4rB1iBPA@A?nCz@'dCr.B߹\Cq.B}}Cq.BvfBq.B}?cC-B`A@AhFC`Y@vCB'@CBqCBrBB{?#CBpA@A?B@@:bBxCC[BCCČBCCcDACCZf?nbB DCA@A?~xB@ Bh+B4B~+BUB~+BJA}+B0r?:̳BBA@A?Xj>B'AYB;GNC޼BkONC< AP{AJBR{Af?BPNCA@A?~BB`"'AAABPAA BA B. A Bǭ>6AAuBA@A?B Q@|}Bh C]xBf CBf C?f Cii?-}B CA@ABv(AϘiBImA,_BmABmA AmAm?iB@]pAA@A?BB@eA$B A@@A?WC@ ?CEB :CEBnCEBRBEBk{?40@CNB0A@@A?2CW@@C 9B,&;C8B$C8BYA8NC{{?t?CؘB@A@@A?H+B.AŶPBGCjgLB GCPA GC`BZA1??XB?ECPA@@A?"B I@PMBCЊCɕB:ЊC&B:ЊC};A@BQo?+BC`A@@A?B/@BC5B C7B CaqmBC\k?-B@LCpA@@A?䝇Cnd@[C̍BF+C̍BC̍Bxh@zC~?&C1BA@@A? CTo@kC>CfC>C\iB>CŲAC?y?rCCA@@AQ C#@jB(B0ѼBB~ ,CBIBB`x? &BiBA@@A?IB@BBxyB BS֙B BY%>(CWp?ယB{BA@@AvBQCAHACCACݛACW5@oC 9>HADCA@@A?B)TABA@@A?]A&A+WAUCAiC>jCLA4@C9?{AkC@@A?mCV@!\CᢊCjC CVC CɭB C~?6՞CMC@@A?C mmA; CjeC9pCMfC'CMfCKBE HB~?CMfC@@A?R C@CABdASCdA@dA*t?CvA@@A?DJCO@CD(CEwC CKC CA7B C|?ցC*CA@A?ZBw@o~BoCrBqoCiBpoC ApoCgdf?-BޮCA@A?CӨd@M*C|B'C6|BFL C8|BTA"sC]z?6)C~B A@A?}By@BB "C_B"CZ9C"C.'B"C"`q?CB} C0A@A?B٘@ԣ_B?BZBB@BBB@BA@@BOb?EdB_B@A@A?AHAACB\6CK.Bz6CDBٜBm BٜBӊ;?BeCPA@A?Br@ BCSBCBCiAC{kq?PBzC`A@A?^B}@}B`BSrBB(wuBB;dBc|CA@ABz@y_xBAC!lBBCwBBC;@BCq?ѩxBCA@A?C5BN:AF(B{ CiBv CcBv C@?w C[?YT)B0C@@@A?wlC @T1C1BQ2CBCBD{BB-z?f5C,$B@@A?S3Cj@2~ICCCQsC@@A?aC@ eECCM>C,C){C,CmuB,CLz?-&ECC@@A?~Cl@HCEBC~YC) CrDYC) CBR@C8}?C CA@A?5B-@b%CC_ C6CC0A@A?fBk@ -C2>C+;*CG>C KbBG>CPBBNz?-C؏C@A@A?*CQn}@)C C$C Cu/*C C3@ C{?,'CI CPA@A?Bŷ@tBiCBCA]BC8PBC\p?DBs`C`A@A?jhCR`@{CAw5qCϑAf\CϑAtA9FC9~? nzCpApA@A?Bjԝ@ B*dB|&BM+dBͨBM+dBE AP+dB_o?֬B0fBA@A~ Clj@B AơBy AC{ A!A Aqy?BAA@A?DB@ެBFCmɬB~ClC~CbeB~Cu??ɬByCA@A?~B͍A՜BaCwGBaCq$:BaCA 7Bޒl?:B^aCA@A?XC @ACtC CtC!`CtCBAߌtCRr{?fCtCA@A?zy"Bt2AkxBB߷1B6B1B_A1BU9Am`CNa?BB1BA@AIAA B'BA'B@i]C6*Bi]C'?P Bz'B@@@A?FPB,#A4BڍCBj9BBBjB"dC #B"dCG'?B @B@@A?>C}@rCCo|C]C9C]C xB\ChG}?ĂC`C@@A?iC@BHCxBcܰCpRCcܰCCcܰCl?`BC@@A?aCb@9CKCRȳCPCFCPCAPC$~?JC$C@@A?1 C`R@*7B0lC8BtlCWCtlCUAtlCs?-BtkCA@A?,B5AW2BC9/B冘C @冘CBBfZ?x>BrcCA@A?B@$BCB]CHB]CAsB3'V?BJC A@A?q-C}@Cl A` C ApFC A?dB Az?CO@0A@A?dB_IABC?BAC}8@ABǐBABb,O?%BC@A@A?UB@(AC`A@A?ICYl@ O8C@C'2C@C]C@C )B@C}?B7Cw<CpA@A?rnB@GB\CpEB\Cč:B\C2@CBN?\HBK`CA@AtBdԑ@B"C1B"C7 B"CyOA"Cu?µB3#CA@A?_8B*A]BC E^BCACMB@CCO?7^BCA@A?azC@yCޙC3PCޙCeCޙCB{B$~?CIۙCA@A?zBÛ@sBSCBSCR,1BSCYBA t?!&AnCA@A?KtBAB>JCB>JCS B>JCd)BVAw5k?PBQJC@@A?a6C@CaQCCwALCLCeCLCJ|JB.UBz?3VCpC@@@A?bB.AC3ΥCAC C'B CB C}er?CC@@A?#B@)B!CaFBвC[AвCЦB1CEmX?JBC@@A?wEC@LCiCgEC>iC;C>iCATBy?PC<|hC@@AB›@BC?BںC-BںCBu'C=g?BԬC@@A?JC@@6ICSC֟FCSC~ICSC7@SC2K|?[ECQSCA@A?9BM@]Bu͛CBf͛CWBf͛C^cB˚C)-n?nB CA@A?DB֐@DCEHCICBHC,BBHC4QB!B:s?LCBm@ BuCYBeCCeCE_BeCs?=BUCA@A?SB@A8dB^RCB^RCjA^RCOKBAb?U#B~RCA@A?7Cˍ@B_CcB_CZC_CBA_C4z?zBzCA@A?B@_B^CB^CV"B^CCA^C]x?ABr^CA@A?PީB@BmcCnBqcC>BqcCȈAscC x?ѯBdC@@AA?zC7AQC$CvECxC8CxC>BxCz?HCC@AA?A+(AȩAuCѰA~BCyTA?!CD B?!C >WA4"C@AA?(BM@nBU C`Bl C Bl C!Al CX!X?NBEC@AA?Sy.C>@o8CQC5CQCk!CQCKA4/A N{?4;C-CQC@AA?,\Cɞ@)AC+?&@CBI|?ewCYМCCyМCCxМC-t?Cz?C2HC@AAA,XC}U@kC0CCCjKCCBCz{?CPCPAAAKBwMA]JBPCBPCV%BPCY@ PCRD?BFPC`AAA?ACeSAC=@mBAmBHh>uAiCAAAJB@ϲmBDvCmB-vCAeBAAA?GxB@5lB~B_B~BMwB~B@~Br??lBzBAAA?`B@ABu{B|CebB~C+A~CABBc?{B:C@@AA?Y*CG@m CHBCCtB(CtB BtB$lv?~ CzB@AA?B.@CrCD~B~C5B~C|`A*$Cu?q:Cr#C@AA?SnBb@?BvBc] ByB&ByB@yBܥ#?[B sC@AA0ORC2@:ClNB͙5C#NBgC#NBGB"NBCq{?#7C74B@AA?B6@ԃBLBBMBrBMB5AMBxr?0BTBAAA?Bh@W~B-B#hxB:-BB:-B&B:-BWj?΅BͷBAAA C3+@0?BOBBõB"5CµBFBµBw?`BnB AAA?AjBK@W8A>CA9>CKAB9>CA9>C]+? A@C0AAA?BBJ@'_BABSUBC^BhBC^B~BC^B]?@aB4 B@AAA?Bх@Bu"C'B,CAB,CA Y0Cnjt?BVCPAAA?B<@0 CC#CCtIBCcBBw?8 CC`AAA??8B Aw6BB&CB7CBCB>ACBvB!wC@6?lEBqBpAAA?&B@8(cBUCcB1UC$ C1UC!B2UCn?aBFUCAAA?H2Ci@D CIe$C| Cf$CQCf$C13D1AkC@ AA?.C@JCZCsCfZCvBfZC_bAiB9y?Mj!C,DC@@ AA?!CՋ@BZC3B0[C5 C0[CbA0[Cv?!(BC@ AA?B@BleCynBeC-CeCBeCAo?MeBnbC@ AA?!C:%@lFCmf\C@Ce\CBuBe\C*B_!BRz?0 IC;ZC@ AA?GB AB:YCBXYCfuBXYCAXYCd9?ΦB4 ZC@ AA?7!Co@7C~CC~C--C~C8A~C {?kCCA AA? Cf@+E0CpCn,CpCKBpCB.CP{?g/C[CA AA,.LCrt@CBb@JZC0CVC0C"C0C*2PB]CK}?rYC?1C@0AA?2CAAzB{PQC3uBPQCFBAC|FCC|FCZB|FC>}?DC+FCA0AA?BB:@:CCjC١BQC9BQCAEBBeB͘v?CCC A0AA?QBk@NBBBaBBaBm@ƓCt?iB-B0A0AA?aB,@BG[ABiH[APBmH[A)jAuH[AJ?5B\A@A0AA?GeXB@\RBPA.BQAGASABE=Cwa?bBAPA0AA&BbD[@TB C4lBCE "CCUBCx`t?l™BC`A0AA?B@\B rC ^BrCBrCyBrC?k?^BrCpA0AA?sB@_BJC*BlJC̓BlJCn BlJCSY?BJCA0AA?BvQ@BABOA$BOAڡALC x?TBgAA0AA?qW)Bt2AD,BC10&BuC CAvC:|A,BK?+Bs~CA0AA?% B3AA0CtØA9C$ıA9CH@8C2?N1AߕCA0AA?kBA@;B$AыB#A,B#AA#Az?OBA?@AAC9F@BtCBtCԣBtCO?tC x?qBC@@AA?MmC{AJCůC FCůC$ׇCůCiFBůC\^}?!!KCC@@@AA?M MC`@CjBhCwC,BhC9wC,BhCB,BhCr|? CVgC@@AA?%:CV@CoBC~BXC~B׬ACPA@AA?Ba@6B]C ъB\CzB\Cc\@w#B֠j?uBh\C`A@AA?_A AS> ByCz Bd|C?ACMaBC>Ď BL[CpA@AA?A10ABt BcGCS( BRGCp@SGCsABAZ?)7 BGCA@AA?FBCâ@B pCeB pCB pC tA pCתu?|̴BpCA@AA? h'BR+AABMAB+BB ABUR?cA4^BA@AA?{>A:A>wBUB~]BUB^t@viClBviC[?vB]UB@PAA?FCL@՛ C' C C' CB' CTlA䓞C z? C C@@PAA?CxA^C\CwNB\C1$C\CB\C$y?B\C@PAA?>Bz@ϐBVیCfB~یCpB*C~یC{B~یCr?̏BVuC@PAA?BƐ@X7B31C,0B21Ct,/C21C+C21Cg?e8B0C@PAA?~BƉ@!CmRCZCVRCxBVRC1AGA}w?=C*RC@PAA?V`Cx@RC2|CaDGC?|CֵtC?|C5B?|C|?HRC|CAPAA?=CK@d]Cz\BTC\BD#C\BEB1kC}?TV]Ca{\BAPAA?bC RG@/ChC_ChCD7ChC_UBhC3{? CrC APAA?C)Y@ǻCCNCACJCBJC֦BC7{?ߎCCC0APAA?BSm@BvmC!B}mCB}mCAfBvs?mBnmC@APAA3Bqi@B:ICϏB>DC2C>DChԌB>DCIt?gB=CPAPAA?hy-CiE@|Cq@CPn@GCPn@laBPn@)|?7C}i@`APAA?C{@sC# C|C# C,B# Cp!AC{?+C! CpAPAA?*&B*|&Aн&B:0Bp( B:0BA:0BO>A`Cd/?C'BW.BAPAA?LB;O@$BCBCBC:[@FBs7w?B] CAPAA?Bɉ@AAAvAgARuAASuA3T?ECۡ?&AA?`AA?<Cѭ@@BKtCBsCI8CsCaBsC-x?BPC@`AA?4`C@;C%C3C C΁C CB C|?;CC@@`AA?CB @C}B9wCßBpBßB|BgCu?$CeB@`AA?BB] A܉B1OB:B(xOB<5A(xOBeYB gCJ?R5B$OB@`AA?)B AB[B B^!BLmAXȓC1CXȓC,[?sB,B@`AA?B@(BmүC>ȦBQۯC֕BQۯC`6AQۯCr?'BC@`AAC#B(p@Bw/CBw/CBw/C?AлC^^y?9sBSG/CA`AA?\?FC@VCtC^XRCtC5CtCuA:CC}?VC3CA`AAi8Cр@TC"7}CYTC'7}C8C'7}CpBMnB|?!TCK}C A`AA?B@WEB?cCǩ,C>}B>"XcB@4C}?}4C&K>A`AA?,A"ATFBRB2BUBqAdCTBdC??_FBBA`AA?RӒAW ArӲAnoCAhoC?BvABR?A[C?pAA?k]Cr@VC%C[LC%CchC%CA%CJ}?WC#&C@pAA?Bx q@[CmC*C,mC.B,mCilBfBx? 4CܪmC@@pAA?dCC@CDC C4DCynC3DCGA/DCʜz?C^DC@pAA?b)C@N 3CC,CCG!CC/:A)C|?cA3CnߤC@pAA?)C @,CѭBKPCB7PJCBBB{? KCNLB@pAAOpCӹ@{pCBkCBvqCB|@B/~?pCB@pAA?OBBqABXCBύXCC=0BB;7B1\?}?BmYCApAA?RB@[HBӣCBӣCBӣCSc@ǧC-?ZBF3CApAA?54C қ@.CBpCBOCBGqBB6K|?~CЭB ApAA?8.C@BV@ǻB1K@QuC3K@bC3K@y?[B-@0ApAA?~B5@DB8B BdB$AeBf@B=C q?2 BB@ApAA? B@?CӔA~eCAqBAxBRPCbt{?IC@APApAA?.BhT@߫BC(BCQ CC)BCw? BbC`ApAAiB4(@DyBAB oBGBRABGBx BGB|r?,yBBpApAA??A2&&AƐbBl2CnNBl2CA@6ICjB6ICR?bB+2CApAAA#BASA<_CQSA0_CB0_C[_IA0_C O?eA_CAA?C% AmzC4CΫC4CC4C}B%7?NIC4C?AA?$C^@(CثCCثC#*CثCAثCt |?CC@AA?ߘB@BCBCC!CCBCj1v?˷B[bC@@AA?C*@KCBerCBvCB BB~~?DCqB@AA?>JB`@ȁB_.CBY.CBY.C¤yBY.C-am?TB{.C@AA?}B @B#nBGBmBA,_C AAA?t`BP @ooBXlBpBXlBBXlB8A<oCUc?nBhlB0AAA?JQICZw@S ChNAo7CNACNA_BNA P}?} C A@AAA?CB@ BBίBB8BBy&B8Co?B5BPAAA?dB@eQBc?THB$?VB$?+e@$?Kh?QB7 l?`AAA?EB6=@93BWCѻBWCBWCsAWCz?=@BDCpAAA? VA A~A8BA'Bj,/A'BfdA C~)?:"AsB?AA?,B A3A>CCA^>C=IB^>C8WA^>Cg?OA@0@C@AA?NjBP@0B$BĜB)$BDB)$BcA)$B@ME?BIB@@AA? ZC@IhCȜCiCȜCeGCȜC3 BC}?hCM̜C@AA?7B@`VBzB B}BHB}BsC TB@AA?MB@B~ڪCBӪCаBӪC#ߚA?!Cv?@|BΪC@AA?uBǯ@"VB4"C6B ?C8C ?C!xB ?CBu?B@DCAAA?.BW@ǡBQBcLBr6B[Br6B=Ar6BJt?BBAAA?]{BY@GBAB)A 5B'A_AF\FCl?᠍BŐA AAA?iB@YBBQBB0CB̌EBBu?ϨB]B0AAA?UB@BTCBTC1BTCl@>BTy?IBTC@AAA?B@jB u{CEBu{CBu{CA#B5y?B{CPAAA?:HCy@ţBIAKCA4CvA4C@]?Q7BcAQ7{>jA4C?AA?_Bᣢ@KByA<BeA8CAAA?Bu@@oBCeBCgBC D=BCtj?BoBC AAA?B@JBCBCxBC6bAC?v?KBPC0AAA?Ao&AB*Cg B'*CF @(*C@BMTCR9?LB^C@AAA?ݬBs@BCCBCC8BCC?CCxz? BECCPAAA?Bv!AN,ADCADCgvADCUADC$>W*ACCAA?TB@ACguACNxWBC6{ACm>?r2AC?AAB@=@BE$C}7BC$CBC$C-A!CaMs?=B#C@AA?P B)ABCJBCZyAtCvBtCyX?`BC@@AA? dB@i'CMB>'C.QB>'C A>'C3u?wBf'CAAA? FB##A^B~gC ?VBtgC%BtgC̳A΁NBe]?]BygCAAA?W B3PA1BqB=(BBABAⱙC`R?0BB AAA?8ByA BFTBUBTTB-BUTB@UTBa[?{BDžB0AAA?A/AxB#C!B#C?#CACY-?jLB_CAA?'B`AN6B4C1B4CUA4CÛA%7;S?o6B4C?AA?-Bp@BQ/B@aBa/BB^/BK BY/B?XٳAwEB@@AA%C:@7~C}BtC}BC}B B}B+R~?\~CH}B@AA?JTA8ыC@AA?lCC@2wBB CBF C(NCF C ?BF C:'z?Bo C@AA?kB5@CIC)CIC5mBIC0MB&B;{?RCQJC@AA? 2BOr"AKqBnsZC(eBpsZCZ%ApsZCBBi?pB{ZCAAA?臁Bwo@B_KsBGBIKsBv@_BIKsB+jUAB?AA-)Bi@.uBBsBBABBe@ mXC^U?* BaB@AASB:AmBC] CbBD] C*@D] CDB.C_?SemB_ C@@AA?xB{@.B|CB|C^&A|CBCx?"*BUC@AA?]mB@[B^iCB^iCA$B^iCwB{UBv?arBKiC@AA?B@gưBCBC)BCBіBNv?뤰BSC@AA?]B@dB̸B̿ B۸BB۸B#rCB۸Bw+h?BB@AA?AquAA'gGC͊A&gGC;@'gGC:uA*9AO >ԚAdGCAAAtBS@?jB ^C*B ^CB ^C}@ ^C67x?B(^CAA?`uB(@IBCC,BCdVBCwA4C?HBC?AA?*0XB@@BW?C2BW?CBW?CAC#q?BP?C@AA?oHB ҇@7KB!Bc4B,BB,B\.A,Bܧo?mwKBèB@@AA?BskA"B6C~B6CsC6C:DB6C{?qgB6C@AA@BmY&AɍBƃqC<8BƃqC@ȃqCmiBvBj?ՍBqC@AA?BM@@BBMzyBBDC@B?~-DC@A?OCы@ZBCkBC:5CCnzBClf?BC@A?DSVBȢ`ABC[BC`h@B/BBo?BC@A?tCn(A/CCS&CCCC^CC? )&CCAA?~BdAAB$AB ACBCLj> ABAA?ɥC@]ڊCBTCBCBGAB?v؊CB AA?BG CW@sBC̐BCKCC/`CC٥?7BC0AA?ACpoA 9BCBCX9BB$ CB5Y?YBC@AA?%B@BCBCBC@B?BCPAA?-B@mBB{BBCB @VBB;?FBB`AA?{Bf(@ BBnqBBCB͸BBs?zBBpAA? 0C9 @BCHBCqCCCC?BCAA? IC@"o?CCu@CCQCC |AC??CCAA?xEBbA+BC*BCnBC/@B7U?)BCAA?m7;C+@l8CCٝ8CC=CCe@C?78CCAA?HwBZABC BC ԉBCBC9V?BCAA?A6yAS@B҉H@B?B?CC=iC@BAA?B\ Ar2BCBC`$pBCBB?^BC@@?A?o@CԎ@PCRn BqUCk BJ"Ck B|MBVC_z?8VCC B@?A?!Cex@fCܜA Cfy,AW!Cfy,AA@?A?LtC&@>C +C.;Cs+C#Bs+C9B֯C y?U=C+C@?A?9Ck@$BCCB]Ch,C]CoSB]Ct?BV{C@?A3ƕBu]@{B1B9C̙B9CPˋB9C2@s@k?QݠB;9CpA?A?[sB@B5CzB5C*`B5Cƕ+BָBf?tBECA?A?C@}CV2C CO2CCO2C@SAO2C1y?CΈ2CA?A?B@gMB3CaB3C1C3C̝B3Cs?B{CA?A?%B@7B BB] BC] B QB] BMu?RBBA?A?!BFA5#Bn\C2Bn\C?]?b!B"Bd!B??#Bk\CA?A?D~B@LZB5B5C@@A?ʗCA AisC],CjCYC㇤CYChBYC|?֎C>CA@A?Bs@B0dACgB1AC~B1AC~@SA;s?Cs@CA@A?Bj@BCsNBCBC0@Ct?#BԬC A@A?BY!ABRB֚B_RBuAԇCDBԇCL2?ěBPB0A@A?C9!Cg@zCBCsB; %CrBC2WAoBDc{?[YCSB@A@A? BB@BY&BO,BH&BBH&B%fAH&B~q?`DBX!BPA@A?,gB@igBC]]BՉCBՉCAWBN?iBC`A@A?GFB@BCUB^C!@_CVBxIB!a?#جB@CpA@A?Fo.CL@zCΰCa=C˰CAC˰C2B˰CM{?CCA@A?B@wBWPCBWPCtBWPC@WPCkh?]BŘPCA@A?Bw@B1B,YBJBjBJBBCzw?BοA^sCA@A?>VBP@ʃdB؞Cz{[B؞C:#B؞C++A؞C4&b?bB˞CA@A?z.BGAgQB) CgFB" C7A" CAPC@c?ۅQB CA@A?BH?AjBYBsBYBAYBrAGjCgcC?BDYB@@@@A?ܞCن@.!C CK"C!lCB!lCⲕBC]u?%CC@@@A??C3AJCCMBCaLBrCaLBA2gCL~?CKB@@@A?މCU@B\L+CB8^+CAC8^+CB8^+C t?C,C@@@A?B>n@=B(VCBUCP CUCGBUCvd?zRBzwQC@@@A?qYC%s@CvfBcCBY(CBrB&jCG{? 'CBA@@A?"Bb(A('BC BCCASAC*\BC.?RBW#CA@@A? xC@hCuCcCCyCC]BC }?jhCǣC A@@A?73BAH|B%C>MB%Cwi@(BB(BXF?NBz΀C0A@@A?dB@~g>B;BxO:BBVF8BBvH?C>O?7BxB@A@@A? B@[}BnBCCvBBC͚CBCBBC˅m?B[CPA@@A?wBU@BBA/B A_A AzBOCtvd?B$A`A@@A?C׻y@C٘A?{C*ߘAh$C)ߘAOV2BߘAA~?2-CApA@@A?lB5@`9BC6BxCcBxC۩,BxCEp\?t7BCA@@A?0Bn@)BC'BCuBCalA#wCRl?wUBOCA@@A?B@QBECUۮCAUۮC}?rCCA@A?yB@;0\BCUBC̅_BC@C6J?5_BĈC A@A?GA&A AAgB?PAhBQA&C^B&C>A½B0A@A?_QaCOZz@_LCbAR HCbAOvCbA'8BbA}?"NC)A@A@A?*CU^@7CJAC7z1CJAC0CJACKA4XA|?9CACPA@A? B@ŭBCӻB6CahB6C.@iC5o?BC`A@A?PC/d@CDBCBRCBCAB`I|?$Cd?BpA@A?(y C0T@06CC<4C#CC#CB7B B{?A6CCA@A?9B@/BCGBwCLBwCvACf?B˞CA@A?Bt@+LBBoBBy/BB ^ABOq?5BդBA@A? BBS@}B"CB(C}iB(C8pA Bt?RBӘCA@A?B@BMD@BD@tCD@֎BD@py?ʿB@A@A?}C#@}B(BUB(B yC(B{gB(B~|?@Bn"BA@A?BMo A7XBCFBCABC< BC@t?w%YB;C@@@A?!ghCPKjAECʟC*@CğCB΃CğCCBğC@{?5A)C0A@A?C@$CB{CBI?CBJBBEv~?̀CA@A@A/B)`@:B8CBL8CWBL8CBq@t?BI,9CPA@AA A'A!tChXAxtCVABZBB:>%AtC`A@AlBܾ@{B[=CuBp=COBp=C5Ap=C,Hk?Id{BTCpA@A?Caa@BqCzBuC CuCvfAvCu%x?jBCA@ABъ@ymBCCqoB.Cg#C.COB.Cq?lB%CA@A?A8AAwCAuCV?C儨ACIc>cAnCA@A?EBt8AhBA!BbAV\A]AEARC,?BaAA@A?*AB.AJB3B2BB3BXACxBC31?JBBA@A?.A7AΗB[CAB[CAŭ@[CAA5@C-?kLBWCA@@@A?sBw@]DC A1=C:Ag~A:Ad$C_DCyu??C<~A@@A?XPRC@nrBqEC#B=DCzeC=DCbBC=DCu?B"AC@@A?mCh@ӌCBCBvCB@—B /u?HC5B@@A?!B܍@BDOA,Bu&A5Bu&A:'@i&A+bl?Bl_A@@A?-B @Cث3CfCW3C%^BW3CvB,ֳCA8+C A@A?|+C^g@ ^C4BC3B$<:C3Bx B3BF{?CB0A@A?$NCbR@GCLCACLCVCLCALC%}?GC\C@A@A?p{B~@BACb@B#FC-1A#FCBECvf?cB$MCPA@A?3CN@ACVC:CCk(CC9A #C|?DCC`A@A?OYB@+C/gCg7(C/gC&3B/gCB:BZM}@CNBC2?A?B)BA@A?=B\@B}RBBQBgBQB.v@whC-v?bBQBA@A0YBCAA|NCULAp|NC9(Aq|NC/AyAL?-$AANCA@A?B@EBB+B!B@@A?ط.Cɼ@"CCC CɥB C/C&C{?*"CC@@A?FdC.@$0CQC k-CCut CCd BrC^sz?3CC@@A?^SBNAuBQB BZ$QB,/AZ$QBVvBIhCS)J?*\B)eBA@A?d1 B2AvBz)CҀBz)C/@vCeBvC<4?0BO)CA@A?JBH AHA@ABC A@A?^BJ_@3XB~C0}BR~C!!=BR~CǏfAR~C8?BC0A@A?(# C?@cBCBC*(CCڈBCv?WBhC@A@A?DCOQ@4$XC BaMCQB5CQBKAvC|?YCDwBPA@A?ZB@FBECΚBEC#BsC0AAA? BK(A42BO>C0M*BrCD@CCBCD?D4BmC@AAA?BAUA\B?AZB[@ZB`AC"> ADeBPAAA?C]@@bBCQBCC7CC66BCy?BAC`AAA?B]@zSB%C TB%CJZB%CSt?{%C.T?tSB0CpAAA?|B$ʙ@B>FA֪BFABFA)BFAPu?BJEAAAA?B?>@Bez/CBkq/CuBkq/CBkq/CUt?紞BN>/CAAA?fșB@Bl; CWBa; CLBb; C@c; CMn?6ҊBy CAAA?8C<ބ@:CB2CB9CBB@B}?q9CBAAA?qݶB^@A)~B5A)~Bb4 C)~B4B)~Bak?A~BAAA?nZBABB0BBABN̉BaXClm?؟BB@AA?C|T@B:vIC(BwICeCCwICB&іCO?R7BgC@ AA?ԋC@S[B`ECB[EC%C[EC3W/B[ECy?@BEC@ AA?i>CX6@IjC|lCfeC|lCMC|lC4ΣBaB}?JjClCA AA?A@C'n@MCXCGCXC4CXC1AcBu|?cPCW\CA AA?2Ct=p@OQCCGC3C&C3C>BfCD|?QCâC A AA?@kvBܿ@a BBݯBBAB=BbCe?hBB0A AA?\`AP*A/:B;Cr5Bd;C @vCNBvCm%?<5BKyC@A AA?CD]R@}C-YBNC,YBB,YB|TBzC2z?C XBPA AA?CuW@Bh6CuBh6CmU#Ch6CiBh6CRy? B&26C`A AA?uBv@6eB•C!BCFCC6BCt??BCpA AA?B)jAB{ @q-B @钨@ @BH36C?BO7@A AA?E\B}<@BۮDB0.BDBBDBY?B+eCx?nxB(DBA AA?vB%%@BA0BAABAAzxOCu?v۳B'AA AA? BEiEA:5 B?BBTBavATB`2ACp@?p8 B BA AA?B2@NB~BB~BB~BA~BNX|?}Bs~B@@0AA?D8CX@!C ՗C?CԗCfhLCԗC8BԗC{?$CKC@0AA?Cu@Q$CMA CWMA~ CUMA1AJCs{?o"C A@0AA?%C E@-)CFBp&C'BC'BO@C|?-<*CcB@0AA?C1@6cCjbC]C|bC/C|bCB|bC~?bCC@0AA?X=C@sBbB B:BzC:BC:Byez?BBBA0AA? C@CCh#;C$!;C(M;CqNB(M;CB@'z?|EC;CA0AA?oBt|@'nB^CHB^CB^C n@^Co?yBF^C A0AA?Bg@%B&C B&CB&C@&Cgiw?ZBs&C0A0AA?$OA,AaAA3B!A4Bu~@ }CB }C>)A/B@A0AA?A (AX1BxCBCiA'*C-B@CPA0AA? B׏@صAB8zNC&CBNC CNC'BNC-k?BBNC`A0AA?5QB @=CBF|?D@C|4C@@@AA?MB\А@IvB>CQqB>CdB>CKA>Ci?vB8C@@AA?XBX@B( 0CbB 0C#B 0CL~BCy>u?B/C@@AA?gCR@|yCCqCÑC>CÑC[BÑC(~?Y~C렳C@@AA?krCH@pC9CeCܿCF {CܿCAݿCӪ}?voCάC@@AA?#Cג@$C|1IC*C+ICu.$C+IC9A+ICoz?l%C&ICA@AA?D C@=C>CCCJCC?/Cy?)CձCA@AA?5By@T|B>NCqB>NCB>NCmqAAOwt?4BFNC A@AA?szC0M@BSQA[B UQAjC UQAB UQAx?BUA0A@AA?B@BFCBFC_BFCo@:A's?BCZFC@A@AA?j^B@aƎB~vA\'B3uACB1uAPxA/uAo?wBhAPA@AA?4|B@B\BBPBCPB_kAPB1x?!BLB`A@AA?BV @RBCBCfBCPIBfCw?B3CpA@AAYA*%A_B$Bm!XB BfnA}CB}C\f+?U^BBA@AA?z&tBFA\6B(Bm./B,BB.BA0B.e?6BBA@AA?tB@ OABjC+-BeCrBfC'mBfC\p?(@BcCA@AA?6Av7ARA}o-CkAAxo-ChLAxo-CO)?zo-C+>TA`-C?PAA?BG@}BCzHBC\BC9w(BCRp?BuC@PAA? B0ApBŗVC gBkVC?A] B%͋B] B/?XgB:UC@@PAA?|B"@B&|CB%|C|lA%|C BKBj?ԢB{C@PAA?cBK@t/A3GB+A B!B!B#DA!Bo?OPA3B@PAA?LBG@ BCB;#CB;#CBCs?)BJC@PAA?KxB.; A'aA lB A lBFB lBޛA lB$?bAlB@PAA?`C37@CCCCiCC DBC/~?^CCAPAA?l^Cts@C2CN yCt2C@Ct2C5bB:C0~?sC8CAPAA?C\*Cʝi@]CҥCfaCҥCo>CҥC% >BҥC'{?CC APAA?zB@bB [CB[C_ C[CFB[CX/t?ضB[C0APAA?]Cis@mB^CBy^C{"KCy^CHBy^CWy?1@B%_C@APAA?AA?A5B.ARnB4mAۂC"BۂCny>]AJBPAPAA_B?!A;B{1C,Bq1ClQCAq1CAbCa?B C`APAA?@B-۸@5UB JCBJC:BJCfA=(Br?Q|B]CpAPAA?>A)'AQzA$ѰC\AqAѰCzG?ѰCmXA"-C֙>3byACAPAA?]A,ANB.BzB.BY@.B^A CoB?.B>ηBAPAAfB0@A@aA@ B@XB@\?j*A@?`AA?`8 A$B@`AA?Bq@ BA FBTA\CTAA"TADv?1BuA@`AA?B@VʗB;jCcBjCmBjC^MBjC %s?ʺBjC@`AA?;B@&}B;,CB;,C"$B;,CZaB^CKr?W@B:,C@`AA?c`nBA.BOCQ+BOCMBOC6 AOCfJ? 2BgNCA`AA?FNCA@L&C[CQC?CYC?C*C?CvK{?C 7CA`AA?\rB@:A'.C@A>.CXMB>.C_qA>.C&?>A.C A`AA?Byw@CB&CʶBcBʶBBCrQz?CB0A`AA?] CO@sAC/%:C_Cn):CJCn):C8A-@e{??C*:C@A`AA?BaZf@+C C'CC_BCGAMC {?4|CCPA`AA?kB2c@ʚB}CȍB}C.xB}Cc-B CIk?əBC`A`AA?gB@`AϸB.H}AϸB~IBϸB, BϸBİ?ʅAPBpA`AA?_GBAITB C|XIB C&B Cy AFCk?ƒUB2CA`AA?D@B72AרAA;CcAB;C.AB;Cm@B;C>2A;C?pAA?YBfl@%C*rCdvBpC BpCQB2Cgy?cCRIC@pAA{CMm@!1CB+CoBBpBQkB\dC}|? 1CeNB@@pAA?`EB:k@BuI$CbBI$C+&BI$C٨A$CEx?9B$C@pAA?eC@B?"CB8"CxvBC8"C^[B7"Cf2y?dBCC@pAA?=ClɈ@ CʥCm CʥCER#CʥCF%AʥCz?px CC@pAA?n]B@NAAIAAASBA@AA ?ALA@pAA?;B@OBB@pB|BNB}B9IB CuIo?B7{BApAA? B[A rBτ@tB.@"~B.@'@'@re? pB@ApAA?PCAqB CFBr C7$Cr C_EBr C$Yy?;fBa C ApAA[B:I@By/CB/CS-B/C[B{Cq?ixBg/C0ApAA?9CR@rC`CNC`CB`C7$vB܂B|?Ci^C@ApAA_A'ASJB[]C EBf]ChA̺,C>B̺,C8!?iJB;CPApAA? B@BbCBdC9BdC1BdCor?A‰BC`ApAAB2@BGэCÖBFэCOjCFэCBFэCD{?RB5̍CpApAA?Xc`BN@B;CB9CGA:C2Br*Cs8s?UBCAA?n BFAC5X6CW6SB4CEC4C'P{?GC^6?AA?3C@9CCCޤCICޤCOBޤCn{?C5C@AA?B1@vBֲC-BC8.-BC-7BtYCwhk?ܲB+C@@AA? GBƼ@7ByB͂BB&WBB?yC$m?dBYB@AA?9EBʧ@F%4BC4B~CGB~CA~CP?c%6BxC@AA?lC[@ePC>?"B"C AAA?C;@s CfCG CdCPBdCZYBB q|? C2C0AAA1AP/A\A,CiA4CbAg4+CgBg4+CA> rAiC@AAAB٣@}uBS C wBU C{BU C;e@U C4jm?B&CPAAA?!Bu@ϠBŊC;BŊC?CŊCQBŊC]{?ɠBĊC`AAA?BAc LB 8?84B= 8?[A= 8?A 4C\?yLB2,?AA?Bq&-AQBCWBC*BC8ACY?"BC?AA첵B@ BݲC%B.ݲCB.ݲCKB.ݲChn?BNC@AA?1Cԉ@C@C~CLAC~CC~C!BB }?@C\fC@@AA?WC&@XCCvC߈C5C߈C7AC{?̤CC@AA?LBlإ@kCjgCCgCI>@^OB C^OBfu?C gC@AA?mC{@/BCsBC 5CC(jBC?x?BC@AA?BT@&,B;BX CBB9CAAA?B@|BO|~C>B |~CB |~Ca*B |~C _?`B{}CAAA?fxjB@[BCWBCFBC@ABTb?ՆZBC AAA?%\BM@AMC7AMCܜBMC]BMCo6?N AmMC0AAA?зB b@&hBWCB^BWCBWC{BWC-p?|vgBWC@AAA?"BOA(-BBJe5?ёBYe5?AA?#.CG@%C3BECҢBMCҢBumBҢB:{?@CB@AA?ZqB ٢@5B-sA!Bm5tA.CBq5tAQBWCCC̎v?{BxtA@@AA?HsC̒@z fCjCJfCEjC}CEjCAFjC A~?eC@jC@AA?ԱB@gBCӂBXC1BYCXBYCo?BC@AA?:`B@BBj)B殤B)xB殤BXA+CJf?~DBB@AA? PBxAʂB|CNB|C&A|CqB74B)=f?ꚂB/|C@AA?Y0.BT)ȀOBiCKBiC.AiCAp0C O?wPB^CAAA?ABB@BKCBLCBLCSJA0Cfx?AB CAAA?yB"@o֔BEXCBFXC+1BFXC%ABAm?UB&XC AAA?E C @BCWBCr%CCG_BC|?B=C0AAA?AAm;BVB()BPBo%AT!CRBT!C9?*;BnB@AAA?<BGAACOAC~AC@C 3?&A!CAA?0YB6@\AB\ABB9BBBB% ?aAB?AA?BO@u?BxsZCBksZCgBlsZCu@nsZCt?ɡBCZC@AA?ݎdBQ@:TB̥CQB̥CFLB̥C,AҙCk?ˉBХC@@AA?iC-B8%A%B#CbD$B#C'A#CfAG"CH?;%BC@AA?AvD A@,B}C:)B$}CnAHB;BHB>-B 6~C@AA?B:AMAuBAuBv&AuBp_An݅C%Z?,AB@AAB@8BH CBH C&`]BH CvB1B"[q?UB] C@AA?!A2Ao#B&BwBs&B@k&B;`B[C*?"B;BAAA?B]@ Bφ:CBˆ:CBˆ:CAʆ:Cz?aBx:CAAA?UB&@B;B_2B:BB:B B:Bx?7)BB AAA?7UB&@C?AA?sB@ȋB@CmB@Cu/B@C=B@Cj?, BAC@AA?PkBq@$4BC5BCABC}BBeBl%w?ABC@@AA?DB=@,B9C3pB>CB>CA>CXu? BܗC@AA?bB{@{yC"B>{yC@{B\y?DקA3C?AA?:YBb@D΂B أClB!أC0B!أCpAACas?jB(ۣC@AA?*=B@'B"B?B.BxCB.B3?@3BB|?nB݈B@@AA?XB}@BSBBӓSBڄBӓSB4BѓSBkk?DB(SB@@A? C>FA/C4C*C4CiC4C B4C?6B4C@A?U1C=J@HC4CA*C4CSC4CB4C?eC4CAA?̙CC ABCGBCCC8CC?BCAAL6Cx@Z%C4C C4C`MC4Cu3B4C?!C4C AA?yA(A4BCBCmԃB4C C4CI ?BC0AA? AE\AhA@67dnA67@4C*A4C7>޷AZP7@AA?GB+x@CBrH5ծB H5 C H5BH5?B45PAA?f'C@pC4CC4CK%C4C0EA4C?""C4C`AA?lB@QAACBC$BC,R?XACpAAϓBAIVB;UB[BBΰv?ZBAA?)HC@V(CC)CCVfCC@DrBC?,)CCAA?׍AvAtB4C׌B4C(Az7Bz7BS?ŒB4CAA?iqB A4B4C7B4CB4C2@|%7?sB4CAAb C͂@C3COC3CC3CYAC?C3CAA?_B@B4CSB4C5C4C.`B4C?B4CAA?AƉAc}@4CUi@4Cm@4C&?4C>ͮw@4C@@?A?QCK@"aCuB\CEB??CEB2AƕCC{?^C_CA?A?{CJ@}CHC1CHC̀BHCA(C0x?f!CkIC A?A? C&@jpC +BB!+B"C +BdA+B~x?BB0A?AƖB@3B3;CB3;C0B3;CVBP}@fp?-B;C@A?A?s7C%S@%6C5C/C 5C:C 5Cg4A 5C:|?خ7C6CPA?A?hBF@"BBJBʣBoBʣB^@(C6k?-8B)hB`A?A?9BJ&AAE}C~A}CNďA}C_v7A SB(?A|~CpA?A??BZAXIB] B-BBABIGACX%?YMBc:BA?A?BC@~BƴBBBJBB*UBBqo?u3}BEBA?A?hAo1A B?,TBOA̿UB@oiCBoiC>/A WBA?A?BA:+ABMCMBMCE@ABA?y8B MCA?A?YB@؄A,CA,CJӯB,CIuB,CgN?qA,CA?A?4Cw̔@3 CFB&BFB(6CFBPgBFB}?- C$GB@@@A?C:v@mB1CBCMCCJBC p?MlBC@@A?]:C@@T/CmCBgC"CgCd} BgCu?%CC@@AhC]@74CyBF-C6zBTB6zB}ֆBrCAv?2C=|B@@A?ڣC:@iCTB0C^VBC^VBjlA^VBɅ}?cYCxXB@@A?sC0@O<)CMC%CMCnBMCB]AWw?,C3NCA@A CYt@+CtRsCCRsCCRsC?RsCMy?C;tCA@A?1CL@XCgB A@A?Cs@zC$BWGCkBCkB{+AmBz?#CB0A@A?TCCPm@i%ICzC0EC~C>C~CKE@B4F}?3YKC)΋C@A@A?qBu@BzC~BzCyBzC@zCs?daBzCPA@A?~B4P@B-CBLCi/sALC_B3Bg?B]C`A@A?B@A9B!=CZ4B=CPB=C}#B=C&h?x:B;CpA@A?"Cr@2C4C2C4C C4C,BH=6{?nL2C/M4CA@A>B )A;$BB%B2 BA2 BOv2A CQ@?H$BBA@A?v SB_AqB_ArBoAAnA!ADC_]?iqBkAA@A?B@>!Ba@XB_@-]B_@A:Cn?8B5@A@ARIBd@/BYC@)BYC YBYCqKBYCUf?/BYCA@A?&A);AB7A8B>6A@96AHIAfIC;0?~BYA@@@@A?|VC1@–AYB>A8BRCu? CtAA@@A?6C(@Q9C6tCc4C(tC2C(tC%@C {?gw8Ca<C A@@A?L]*Cq_@5BCԸBCnCCfRCCx?8B C0A@@A?6BF^@BiB+BiBYBiBo*Ax`nC"x?`BiB@A@@A?Bo#Ae+BC$BCy?C2%BC?lR.B͝CPA@@A?/B%@NBCBNgCg BNgCC3B4B7d?'BFC`A@@A?k9C! Z@#KCn?CECn?CV*)Cn?C A6AR}?ȚKCg.?CpA@@A?OyCg@h`CoPCJaCtPCCtPC-2BtPCj}?)xaCAeCA@@A?r(Bj@B 0?y@BZwCA@@A?B^@VBB*nBB-BBS H@gCx?(GB oBA@@A?AWd4AtBH'C_BL'C]|?M'CtACy(?f$B'C@@@A?]B@±BhrB;BtBCtB2CBtBk?B͂B@@A?<C @vbC9C3yZCUC BUCB2CMy?1eCgC@@A?B)@BbCsB?CwA?C|fBB2[?BC@@A?ڔbBwAF=B$C6B#CzA#CAثC? 8B C@@A|B,@}uB CEBCt?bBwBbBDl?|BBېCA@A?OAb$A\BQCVBQCPoAFAWBFASQ>~aBLOCA@A?!BAemBVBeلBcWB l@ՍC&`BՍC;?JBl=B A@A?䒎AAlAkCNYAC&5AIC:BBICZ>0B C0A@A?\Be@!C%B,1C%BB%BKIB y]Cy?C[%B@A@A??LCG^@ɻ-CZC~E%C\CرB\C0Bo]BLy?,C CPA@A?jŪB3@{BH5BBJ6B[}BI6B BTaCr?aB g6B`A@A?e;Bi1AB .BiCl *BYCG@XCW5 BbUB"?,,BUCpA@A?UfC`@IC:IBC#IBC#IBgx?ICGz?C[BA@A?a]9Bu(A10B CB9uCk@;uC,B:CKz]?ݔB ]CA@A?jBI'@# Cob\C Cxb\Cp8^Bxb\CêB߉!Bǽy? C\CA@A?B @DBiCYBiCUTBiCϧ}?iCy?mBZ_CA@A?QBh@BABA)BA#3 BA{y?웶BԙAA@A?'A~dBAeޯA׭CcA׭C&A׭C"A'CO>AC@@@A?CA;AB0BJ}C L(B]{C A܏B B܏B>+BxC@@A?Ҡ=C@:vC#ClC UCC UCpB%TBlRz?yCvC@@A?_^C(A7CɒCC7ܒC 7C7ܒCB CpBaY}?CrC@@A-B@B+[B}B[B9wB[B?A[BHn?{B!hB@@A?܍C>AmÔC'CPC'C*C'C]AB}?CSA^CKB^C=>BCpA@A?d,Cjd@CjCCjC =CjCNtBjCӟ{?yCjCA@A? B @_6BГC 6BC wBC'ACt[?5BCA@AA-AAʯC A̯C@/BA-B>uACA@A?AAA}AC{wACc 5ARB~BRBϕ>z1A'CA@A?~B0@BbCIBdCBdCqA}B{?yB(CA@A?ܑ B>AAw3C?QA{3Cc6A{3Cok@fC8?AAC@@@A?e>mCA2l_C]jCWCpVjC`:yCpVjCaBrVjCGz?dCjC@@A? CK A2CqC-CqCCqCCBqCb}?0CtqC@@A?\aBj<@+ɠBr(CB(C*tB(CAXpCd?6qB'C@@A?S%\C@LCܒC0HC˒CiC˒CBʒCm|?4LCIPC@@A?Bv@FCt@CJlC3t@CA3t@CtBCGAdq?!C@CA@AXBC@[BCSBCBSBCED?C'u?nYBj CA@A?C 2@.BBԙBBt0CBGBBsAhCA@A?BL@BvCVBvCBvC9BvCEt?BCA@A?a=BF8AdDB/CBhCՇx?+;C.C@@A?jBb@IBCBCBC AC j?ذBC@@A?{ B6 A<%tBwCяmBQwCoBQwCAQwC#]?fmBUhCA@A?lB@)BxC?SBxCBxC?ՔABw?6C^CA@A? B44A1dBߚA_BܚA_B@[GCmuB[GC7?!YBA A@A?ZBq@u7yBnBpBBKcBB8M@C^?W~BUB0A@A? Byk@RBBsB~BB~BlA~Bll?JB{B@A@A?HCuFy@DC3&C<=C:&CzB:&CABNC|?CCk&CPA@A?vC/k@bdRCCNCCGBCB>BU|?]RCC`A@A?}Cɝ{@CEeCZCWeC)CWeCk BVeCy?C',fCpA@A?A)B@sB̑BB"BcLB"BwBHC"r?PFBBA@A?BY-@JBCB焍CaC焍CB焍Cx?BqCA@A?w;B2/@B"^CB"^CB"^CwA(Bv?WFB_P^CA@A?"B@'BcA`BBRAvBRA!ҐASAҕw?/3B©AA@A?@B@b,Bx CRqBx Cf Bx CAx C7r?"Bt#C@AA?_CU@ KC[CHC[CqC[CF&B[CP|?JCL[C@@AA? rC AI4B9pC[BApCĥCApCA@pC$u?BC@AA?[wCg@CKCtBKCBKC?*KCu?BqCSLC@AA?YAC"@C{COC{CsښC{CJ]1A{CG ~?lChC@AA?ATC[GEAVICPdCCC0QdC6]C/QdCA/QdC|? NCeC@AA?~(%B7AxBLCkBnC P@%CW~B%C?K?/BhCAAA?ʌC`5@OCC MCC͇CCAFC~?ChCAAA?UAAASC]AC^&ACACZ>Av C AAA?ORB |@YBJB/BBz CBP+BB`Bt?BB0AAA?B@B*CB>3CB>3CA>3Cmo?.מB5?C@AAA?}Cb@OXCi#ARC#AB#A#BB=>C* }?XCB"APAAA?Bd @HBWhBBWhB:BWhBWAnC^?OB hB`AAA?e C.yM@BCBC&CCjBC[y?BփCpAAA?]IB@ 8oBZKC!nBtgC CtgCBtgClBLqC">BLqCnBLqCȺBLqCng??BVpCAAA?Ȣ9B bA_t?BC"CC"CzB"C}?@CC!C@AA?CE@3C_C0Ct_CBt_C5B .Bq{?4C_CAAA? !C@6oCSIC|CSIC_'CRIC AQICq#{?4CICAAA?VBՃ@qCn@COCR=CFBR=CCBzCXv?dC1C AAA?JBMv@@B́cC]BcCHBcC6.BD>Bi?bB)cC0AAA?BAAA?JnB|@VBCڹDBCY"BC֊!BCÑr?VBVCAAA?eB2AL_BRm6CߗKBVm6Cq7cBVm6C@Vm6CGp?_Bi|6C@ AA?$ZBp@B,gC(C'CUC'CC'C|?-Ca(CA AA?QC@`1CC)CHCIvsCHCBHCB|?2CCA AA?7B @ZB?ICqBICU,AICJB'AB?[}BbIC A AA?L0CHN@CHCMCHCA5CA AA? C*@B7ZCB4ZC*&C5ZCǜ^B5ZC|?B|ZCA AA?Bl@A6BxCJBvC BvC7=?8Cu?BC@0AA? Bo@A}B-C]B-C WzB-CҐAܶBYg?sBfC@@0AA?s B)AjB$N BA P B >@ P B6C~@UJCC&[?C8C('C8CoAC*|?HCCA0AA?HBl[@ٷB$CjBC$CR/@@$CBIC0t?1B)|$C A0AAaACx@5@IBpZBDzBDZBBEZBSBYC6n?lBQBPA0AA?$Br@P-B'CBV1C)BV1C•AV1Cw?!B1C`A0AA? B@ByNCbB}NCuB}NCAACvy?BNCpA0AA?OB @ mBǔFCfB͔FCgA̔FCAaA\?4.mBFCA0AA?PyBr@fTBb}CLLBZ}CQLxBZ}C0A[}CI]h?TBg}CA0AAB[f@ٺBAC&=BACO CACUBACS/{?WԺBZ4CA0AA?Bmz@ޑBs&6CաB}&6C[B}&6CsB}&6CPz?7B]H6C?@AAzŪAAFBL C%AB C~A\XCRB\XC>IBB"C@@AA?Q7BjATdBOӃBC@@AA?6 CR@ڷBCwBCuCC BCx?FBPCA@AAC@aC nC*CnCOCnC)BnC\?.kCEPCA@AA?uB_$ABЛC޽BЛCj BЛCSB=Cd?EBpћC A@AA?_xC@CCBWNCBySgCBIA?C|}?R C%B0A@AA?4B{@BГCJBΓCBΓC}AΓCc~w?B6C@A@AA?C;c@C} Cߝ@BL.RBBQBJCQBCBQB%y?.B2vQB@PAA?CC@~MC LCuFC LC!l=C LCAEpA }?MCyMC@PAA?BǛ@T֧BaAZvBAEBAAAr?_YB#AAPAA?=C@B[CbkB[Cf9C[C@nB[Cz?B/\CAPAA?}xB0`AB BgUB BuCA BdBVCJc?BiBS B APAA?Z)Ć@C$C#C$CSc2C$CA$CD|?C$C0APAA?\@Bŗ@R;B$VC=B-VC>C-VCAB-VCi?=B/VC@APAA?A|,BAB`cCP=BaC·AaCAC7,?IBLCPAPAA?B|@BCBC_BCt+B_ .CUz?MBSC`APAA?u$UBÒAʠB ;}CyB";}C#A";}COjBDvBf?BC}CpAPAA?B"I@ηB,C B,Cq?cB,CAYCw?`BDCAPAAr A4(ACBz\CԐ+Bs\C:$?} BY1B} BݾA?BB\C@`AA?BX@YBٱ=CB=CB=Cl@=C9u?G=B9>C@@`AA?9C0@z:C܏qCR3CqC9B@KBqB%BqBDlBqB|PAqBv?!-BXqB`A`AA?keB@krBݝB:gBݝBMBBݝBKAjwCpm?JsBԚBpA`AA?afXB@M}%B NOC*BNOCnBNOC´ANOCмd?i%BJOCA`AA?UB A/-OBf*C'=Be*C+RBe*Cf«@e*Cko?OB'C?pAA?PB|@BC\BCVACIPAz- C\&?jBC0 BAA0 B5|?m(CRB@AA? B@GB(kA2B^TAB]TA_L@QTAq?sBAAAA?Bl@ŅBB'BB8xBBX@C#i?2BtBAAA?zBYi@2B]ΤC|BXΤCBXΤC>ACms?1BC AAA?Bc@| B8Cc|B:CB:C{4DAqtCx?wBC0AAAoB@ BBG`C:B?`C B?`CMB@`Cf?BBw`C@AAARuB=@l Bn8(C=Bm8(CnUAm8(C(B7Cw?&B.1(CPAAA?9B8 AAICmAAC8BACk AAC[L?~AVѮC`AAA?TB%@{>B3CiB3C2OC3CMA3C |?ʆB3C?AA?1k=C&v@P;CR8C}?;CU8C@AA?)(B AlAKSC=AևCZ?~AՇClc?ÝCۉ>†AŲC@@AA?:Bj@aBŇC;BC_BC)BCu?ôBC@AA?.J(CӚ@0CHC0CHCCCHCt&AuALu|?0C HC@AA?#sC-@BEf5@B /@m=C /@6YB /@y?]Bl(@@AA? B@lB(]C$B(]CSB(]CbA(]C1x?Bf]C@AA?Bנ@B~QfCByQfCByQfC+ A|QfCMv?СB;fCAAA?עBl@`ƷALu$B̴A(t$BB(t$BoB(t$BܪJ?/A BAAA?q:B"@U8BCbBChBC ACDm?B,C AAABi@fY|BCrBC6BCjY4ACkn?|BC0AAA?/BaB05@6ԮB\TCPBcTC3BcTC,AbTCG{?JBUCAA?B<@ B6TBCZ!CC`BC?oBC?AA?*-B:A5> BBC* BܼCAܼCvBZC*}?CC AAA?iB|@nB{LCΔB{LCDB{LCPlA9Adx?a}B{LC0AAA? h7B/AہB4C'gB4C9{A4CxiBBci?3BFC@AAA?nB<@sBOCqBOCBOC3@,C{?M|BꗤCAA?GB@JBBBB_8BBG@B?BB?AA?IBaA,BdCV(BdCDVAdCAǓBL9?@+BLC@AAC r@{CbCj?BbCcBbC?BOz?vCC@@AA?賺B @BBDBBBBABp?/BB@AA?B@'sBAiBAXBAS8BAck?&sBzA@AABO%A/OBC`ACw@CA/pCk ?CB$C@AA?ȔB@r`BUC~BUCWs CUC]EBUCay?PBUC@AA?yB_w@M^BJCSBJCqS~BJC*AJCYo?^B JCAAA?ƑBTl@+JBNC$BLC(]BLCJAPCx?UyBCAAA?sAvxAJBB2BBA2}CηuB2}Cz2?JBB AAA?B69AlAC`=ACAC*@C^?șA=CAA?B@ BBCBCPAC?ƋBC?AA?gB)/@BNCoBQCBQCAAQCvt?sƋBC@AA?B8@B ߦBOBߦBBߦBz@ǷCrz?{BQB@@AAz+B@s#rB?nC#gBKnCBKnCAJnC[Ap? rBÙC@AA?u3B=@ҀB@aCB@aCB@aCBd5Bz?3vBL:aC@AA?&$BܾAYnBqCҌ^BqC51AqC8B C,;j?nBkuC@AA?3Bh@3B͒/CBɒ/C@sBɒ/CP@AeɱC5u?#B/C@AA?BA4ABABAB?pqvCACNA{C(?ACAA?gޏB"@ABABzBBBBx?AB?AA?AN@"BBCBBC9'VAhBn~FBhBX?<#BVC@AA?LdBz@BHCeBHC/sBHC5AHCoCz?7BHC@@AA?1AF%AAICS6AuICQ9>xICmEAˬAMI?A[IC@AA?hpB^@3BnԆCBqԆC7)DBqԆCAQBs?*zB܆C@AA?(:B =@B>0CzB>0CT$B>0C6yA>0C}?B=0C@@A?kFC@OCB_CB#uCBBB?CB@A?{Cz@dX7CBS81CBjCBCB?D:CB@A?BWA=BBѓBBtAC@BC'?9NBBAA?[vByABBb&BBAB)BCtw?bBBAA?B7J@@BBBAC>dڱABAA?_vhBaJABCC=BCx"HBCAB?'BCAA?BA6CB'WBBCBC4"CC?2CB@@?A?BC@fClC'ԚC CbC Cy%B!C}?筠C|4C@?A? B@LB?ϔBZs?BZs?PAZs?3O?C~B?@?A?̱CB@B CBC#pCCBCҀn? BfӏC@?A?UC7@`CSCZCCICCt(AB C|?U`C"C@?A?Cዖ@.CĉCPCFCCFC?6Cx?TC}CA?A?zC@C,C*C,CB,CVB YCv?C[%CA?A?QA[AȦB_.=CB*.=C'gHBANhCA'?,BdBc?A vAL()CAk()C wCAk()C@6C>A+)CA?A?CACaCAC)kBAC|?;C5ACA@ASC@73bC{C6[Cp{ClDCp{C)PAC"|?b`CCA@A?|B@" CBpCBBB BTC,4x?5 CB A@A?AAoAA'C}ACK@ ChPA CU>n AC0A@A?Bli@ƬBA2BA4BAAAq?rBnmA@A@A?VBY@_ BGBIBBBBd@B0t?=BOBPA@A?eC}@>(CTC~'wCOC}QCOCB'C\~?߀C!C`A@A9}lCld@e\CCIlXCCts|CCBCN}?[CCpA@A?6/CU"a@3C$ 1CC& 1C7GC& 1CU[B& 1Ca{?JC1CA@A? B@3 CvC1CC0BCbtwBJCx?CCA@A?9tBI@LBC=UBCNBC3PA5BCu? ԹBCA@A?zG)B%AEo#:ABECA@A?yAm)A7.BRC0%BRC[AEJB,FBFJB5?܂.B=CA@A?JreB0iAB ~CyB~Cr-B~CA Br?%ߑB~C@@@@A?#aBYA1B~kC zB0fkC,A.fkCXOB]Bb&?BjC@@@A?АBl AuBGCHnfBӇCP5BӇCCBAMB666?]iB\C@@@A?1Ca@p CCC,CAB,CABvt?ICIC@@@A?{qB@ìBlCBޢCAޢC€B9CJ_?vwBC@@@A݌C\+\A[CCaCCЇCC rAQvBdz}?CCA@@A?!ؠCG-A\sCQBOlC:BPC:B$C:B}?zqCBA@@A?AKC:@C6:C C6:C!C6:CaYB6:C|?-C:C A@@A?$BhT@R[BA B{AsA|A'BOCVr?BA0A@@A?B @n1C1C*C1CB1CCDC5y?0CJ1C@A@@A?OCX@*CkaCB!CAaC ޳BAaCfB5By?*Ci*aCPA@@A?.+B@B݆ALBAq܂BAAJCr?B'A`A@@A?B@BBzC)ǕBAzC~֔BAzCy>B1k?(B~zCpA@@A&B@B=CWEBDC¢BDC AC-bu?BbCA@@A?wB`@!B+ C"Bf ChBf C'.Bf CvW?Q"Bc CA@@A?èB@@CufCCufCHBufCEmBIBE{?WCͅfCA@@A?B/@MB5@`B^5@B[5@VAT5@0t?pB$4@A@@A1B=@ĀBB+:tBBBBABlFv?BB BA@@A? jA8AVAr-C|_Ar-CɎAr-CV@Cr?A-C@@@A?~VC!@KCBaPC'BC'B [A+B.}?֙CB@@A?ZA-AuBoCB}2CNBB%*CB@?[BȑC@@A?`B} ABkC BDCĩADC^7BqBAH?#{BKC@@A[ BG@B2VC>BB2VCaB2VCB9B Bp?!B-UC@@A?q9CԠ@BC9B6C9C6C"A6Cu?QB CA@A?.dwCu{?R"CC0A@A?XB@RϲBfCBBeCa CeC[BeCs?ڣB]C@A@AچC'X@BҜC5BC3kCC`BBC6x?ɎB:CPA@A?SBPAB&CB"&C)U^=%CĘBC[pR?M?BwKC`A@A?'@Bw A$B}GA#BGA+ AGCQBGC_?JlBTApA@A?=B@-BQCIByQC:ByQC/WBEBs?oBCA@A?NBε?AB:B6BI:B AfbCbBebCU? B:BA@A?eBDTAgBd@+B2e@A2e@Y6B*8CJl?UrB~`@A@A?bBS1A[BfB_RBrB%@^~CZB]~CN=?[B )BA@A?wB뻽@aB}CނB}CB}CXӴA}Cw?嵋B[iCA@A? NA[7A BBCOBBC@BC]wAy Bb7? BCC@@@A?fCGf0A7:CTsC[4CsCCsC+_CsC{?;CFtC@@A?pB@8NCKRwCaICCwCACwC_",CˇBx?dbOCvC@@A?-=B^=ABB0eBBVA턔C:BC'?ZgB%B@@A?ECք@-LCBCGCBC$=CBCy(A nA{?EwNC|CC@@A?GC$ܟ@UCħAC{C{AC%C{AC h B|ACw?rC @CA@A?A`tB"|?-C{CPA@A?B7@B8AB8Aѥ&B8AJpBEC?q?DB A`A@A?|=BrAуSBQWhB_TBWhBw@AWhB?BnCz=?RBjBpA@ACu@;BcC~qB-cCEC,cC4B+cCKy?BDcCA@A?B>6A wBBBB#FFABoA2€C(?bBqBA@A?FBܓ@(BC-BCX CC_BC u?¡B7CA@A?.Bŵ(ArB-MBdiB-MBhA-MB0(BzKgC9Z?+!sBMBA@A?SAS/A8)BPC9BKCz\?2B{ B,B.9?49)BvCA@A?>KB@;9B`CB `CL@B `CTiB~43B'{?i6B}`C@@@A?w4C$f&Az^CjZjBZCfjB9CfjBBnCc{?cC6kB@@A?HTBFF AR$BǂC[}BǂC7AǂCSX-BBDI?zBmC@@A?܉C@ ~CeCo݋CCRCCKAC }?ҏCiXC@@A?롮Bo{@BBC轉BBCϔBBC>vABCf`?BC@@A?rC@wCR7ACqC$7ACυC$7AChA%7AC}?tC6@CA@AdBϔ@ BϑBBHBuBHBCAdCr?BB`BA@A?(CC@Sj4C=Cq20C=CMQC=CjB=C|?H@6CWC A@A?B8)@-БBSCϋBC) ^BC>RfA,C'd?UB.C0A@A?%sBi@XdB7=C;Bi=C+SBi=CL~?BAm?1OBC~=C@A@A?BDZn@B3CGB3C+C3C{NC3Cj?BYCPA@A?+BF@BLICBKICBLICIBQA]t?BIC`A@A?/LCGs@&TC#aCVCaC>CaCZA<CV}?UC QCpA@A?vA@ABz1 CEBz C(\B= CC= C??oٲB CA@A?]Ba@lB{BPmB{BfxB{BB{Bcup?w`kBXBA@A?~Bh8Av9B\5C BM5C˨AN5C{AC0?BCA@AB @[BC3EBCzRBCثAΛC)r?MB&CA@A?Bd9A[BCfBCP1ACe:BB`?kBC@@@A?BO@B;BLBfBECfBBgBBh?mB!B@@A? ZC@CjCDCHHdCDCxCDCSBDCh}?*jCaC@@A?bBAuhBBõBCBqADB`mB8ZCR? BOB@@A??\C,a@CC?C Cf]B C)@>2Cw?CAAC@@A? wB @KCB6 C BB B YBĢCx?ECJBA@A?H|C;^@MC&CHC&CC&CB&C}?KCCA@A? ?B@SYBl C tBq C8Ap CbBC[U?B C A@A? CD@?;C'LCWO2CO{LC BN{LCBnAmz?d;CJjLC0A@A?)'CA@8YCm2AoOC3AB3AZB 8?C|?XC5A@A@A?PsGCVI@1C,CY-CC]CC>BCl}?G1CީCPA@AxJC?k@jKgCBIfCB))CBHuBzC>}?fC(B`A@A?B#@B8AB5vABBgvAqBfvA#HBcvABd?@B&@ApA@A?;B@j CsC CCBCdnB懡Cy? CCA@A?Bt-AeFB2ΰBVBFΰBoAFΰB`A3C0?BBA@A?/ Bz3ATBd/CjLBd/C`?BKNBB{#7?6/UBJ.CA@A?1B9@CPBB BBBB@B(v?ZBoBA@A? B@]SBԉBNBԉBBԉBA˚AԉB)z?DBB@AA?ؠBjc@-B2"CB"Ct:B"CpTBNB>Ki?JBC@@AA?SAa#AHLBSCFfDB$C@AA?Cٍ@xCvCmCGC"CmC(C"CmC!B"CmC| x?CkC@AA?)DC<=@CC7BCB\lCBBzC~?~CT_B@AAsC?|@5C&r1C_C-r1ChdC-r1CACs.~?DԃCz1C@AA?GNCMi@QC,BbMC,BZC,BP!C,BO.~?OCBAAA?[7Bѩ@BbCײBmbCBnbC9fA:BFp?7B`CAAA?A3AjHAC?ALCl+AC`BCm>AmC AAA?YW C@[CBC@ĥB{@C?ĥB @qCx? CB0AAA?k`tCCQ@!qbCLvCA[CRvC CRvC{l:BRvC@Z~?cChC@AAA?N3BAA~+7C A+7CQA+7CM@J@?A27CPAAA?FBAK@%"BZC7-#BZCAZC-ABW6? B.C`AAA?bBl[@B(@CB@C( A@CgB:NA+Dk?ǻB"@CpAAA?B@?BC[B CC C΁B Cxu? BCAAA? B @xA,BPA,BcB,BlρB,B\`T?A3BAAA?CQ n@*CVB-+$CSB ? CRBaA=C %}?*CWBAAA?BByϮ@kBBL B%B}B%BʡA$By?(BBAAA6B51A.B@*B@j%B@'?@d?P/B.@@AA?CQ@JCv@DCu@kBu@IB9C%R{?OKC|@@@AArC0AC)AGCACAp CA"n~?@DCzA@AA? Bܢ@C;CkCo;C)ZBo;CƇB-@z~w? C<=C@AA?HBS@;)C.CƩ%C.C_mB.C\oB\)CJ?z?b(CቮC@AA? B˞@ڕBtCْBCLBC-k@ %CFl?~B C@AA?/C(%AbC7*A6jzCg*ACg*ABi*A8~?dC߳AAAA?C@CkC$TC(CC(C[A)C8y?!9 CyCAAA?,B8w@v_B CʇB CjڌB C!@ Cbfc?ZsB]` C AAA?WCy@OC2VCɣHCVC3bCVCPAVC}?MOCXVC0AAA?Cgj@6ChnCZBbnCBC/1:BC-pBCP^ACwZ?(,BH}C@@ AA?MPCv@b{C@B5rC@BE*C@B!B6dCɉ}?H?}C@B@ AA?)C,I@2:B°VCwB VCC VCA VCv?BVCA AA?1wBG@kmBCjaBC2BCP=A,C_vQ?0oBsCA AA?mC@PB$A5BAp&CA׿;BA z? _B%HA A AA?HCC@g-CCs)CC1QYCC:ABCB|?`q+CcC0A AA?.PB@.Z@ӳC@oC>!AoCYo@oC ~!>@\)C@A AA?CTNV@bBѱBBбB;#CбBDy7BбBy?RBBPA AA?^BS@9RA[CA,x[CE;B,x[CyA,x[CW2?1aAp[C`A AA?oB&@9]BwCBwCYBwCXp@wCsAq?BwCpA AA?OA,3A;OWBxnCyRBnCA"jBB"jBt(?~WBnCA AA?d4Cы@}BsCrBsC<]kCsCGBsC |?)BgCA AA?GB$AeB] AAw A YBx At9Ax AV?}BgAA AA?lB]c@TPBASBA2KBA@Aܫx?NBA@0AA?hB'@F(CkABkABkAabABCSx?mCۺrA@@0AA?e.CV\@[ C]`CWEC{`CPC{`CcB{`C-+{? CiaC@0AA?BE@BC`BޠCaCݠCcBݠCv"q?tBC@0AA?C@0#CYC4CaCCaCACXz?g#CC@0AA?*BqkA2BLCBMC.A2AuB2AqN?KBCMC@0AA?S-C$@hMC @g*DC @1C @ڜHBW46CW2|?NCC @A0AA?\C,@%SBZB BB+CB)CBBy?*B-BA0AA?2?"C\@C DC#0C DC.C DCA DCt{?.C>C A0AA?U[C)<@ƷB8C B8CbNC8CB8Cv?Bx8C0A0AA?mBo@_7BpCmBpCmVBpCAC¯m?/BYC@A0AA?4 ClV@UpB\CvB\CgC\C`9A\Chy?B\CPA0AA?LBPz@ⶄBC BݕCBݕCv% BݕCo?plBɕC`A0AA?Q,A!-Az ACtAуC@уC@1Cq=>A=1CpA0AA?| B["AdA%vC_A+vCrA,vCABk?ACA0AA?B5"AmBCaB'C6A'CX4B Cid?AomB8CA0AA?B@hBNBBNB;BNB4AC{?bBi[B@@AA@AC Ä́BcC~BCM#Bg-CZBg-Cm?BaC@@@AA??BH@ +BZC|BCzCCdkACv?iBzC@@AA?B @FB?UB/BanVBbBanVBcBanVB"r?}B]~WB@@AA?%gBA B4CT)B3C?A3CͲBCV?׋B3C@@AA?YZBi@ԥB}CfBD}C/AD}CKOBtB8`?B|C@@AA?r6C@"B BB6 BjcoC6 BB6 B{?1BBA@AAA BV.AKB`BuM Ba_BU<@h_BBZC ? B+KBA@AA?*طC@C0BQWC0B C0B@0BI?-Ce!1B A@AAqC|@(C BCC BCeC BCh? BCxz?^CAC0A@AA?BN݋@gCfCPCaC BaCQABy?wC^C@A@AA?Bt@B,n&B+B f&BC f&B-IB f&Bt?ēBX&BPA@AA?pMB@WB BVB BB BA B~j?WB=B`A@AA?BcP@%BLBH BUB64BUBGAUBHG?B}BpA@AA?0iB>@ Cc׬CdBd׬CEBd׬C1AǮ%C'{?Cy۬CA@AAB u@B/CB/CpB/Cw`@/C"3u?B['CA@AA?^/B@%A)A7AEA8AkB8A64A8Ak?Ѷ*AvZA?PAA?8Bl@WNBC2FBCV5BCBC_?RBҨC@PAAB A N B QCiBRQC_ )@ A/} B A>[RBQC@@PAA?:>BA IBoFVBMg@BSB)ASBq8AhCr??IB'NB@PAA?Bt@ʼnBQB6B^B;$C^B?B^Bvs?B@B@PAA?^B@B ؽA'ҝBؽAӱBؽA AؽA)r?B-A@PAA?6#C@CCCȖCL=CȖCiBǖC{?iCOC@PAA?6C|@Bl9CBl9C(Cl9CHSAl9Cx?[Btd9CAPAA?~}BAA#MCtAϒMCI1JBϒMChAϒMCh ?^A,WLCAPAA?i,B`RAo\qB C NsB Ca@ CZVBe&BJ?qB=C APAA?g·B<A2rB2^CtBbC=nBbCc?ECc?QjtB(dC0APAA? Cӭ@zgB&vCBʀCU 1CʀC_BʀCݓx?VB9C@APAA?mCh*o@ lBE C&BH C3#CH Ci*{BH CFz?B2+CPAPAA?B@(BYC)BYC" BYCbzAB@+v?B YC`APAA?L3B4$*AB!CƉB$C:YA$CRBBc?ˉBCpAPAA?$OB-@@By@4B@iB@BA@/b?'B?APAA?;rB3@Cy̖CBy̖C*By̖CA1Bc|?C͖C?`AA?}"BANBcBBcB@BC@Cp?9ߵB}+C@`AA)YC@8+ICoۦCЂJCpۦCeAcCpۦCAqۦCO}?IC.ަCA`AA?nBI@d/BkC/0B,lCB,lC‚B,lCzd?v+BlCA`AA? B@*_BmRCiBpSC'2BpSCaB}Aiq?WBaSC A`AA?@Bw@AXwCWA&rwCB&rwCA5B&rwC4U?(QAwC0A`AA?mBwp%AoB}VAڗBVADOAӊECxұBҊEC]?2BЎA@A`AAB.ABixC-B_xC @`xC> B&Cv.?pBSCPA`AA?TzB@BCBCmEBCAC"w?˫B+zC`A`AA?9:CAz@\oCbFBuP CybFBeCxbFB$BwbFBt~?#XCHFBpA`AA?vAANAAɻAA8?KCTAKC7>cA#A?pAA>C@XC,6C=0 C$6CϿB$6CAذB1y?_CvC@pAA?Bͫ@HB@>C{B9>CtB9>CN?$@:>CJv?wB$C@@pAA?B?@rBCB{CB{C>B>LCt?|9BC@pAA?sBؖ@B'B3B-B2B-BA.BeWs?UBEB@pAA?B˰@BfCBjCvBjCVRBBYHw?|@BC@pAA?|BY@=+tBf|?V%CѥC@AA?"FCo@2CthC{2ChC*WChCBhC2b}?92CDhC@AA?3AC@oBCC֘BCC=CCuɘ@ISC1}?ACC@AA?3B*=A4B^BeB^B@A^BgVBC }^?UB?\B@AA?YA AE{vBJCHqBwJCXAkABkAp-?LuBtWJCAAA?:0B@@Bs1CA1CtB1Cz{8B1C?G?#2BCAAA?CA:A"BL'CoBK'CpXACRBC_a?#B&'C AAA??'B=h#ABa@AI@MBJ@@P@ M?BT,#@0AAA"HAi2A#AԚAA"ԚA/@ԚAKAAZGC>AaA@AAA?ѪB؝@BGBBGBcBGB9yAGBf^y?B!pBAA?nAE9AjLA'653KA)65@4C^tA4CN>w RA\>5?AA?#VBY AB8BSB8BA8BsB*Ck?,BB@AA?4B]@B9VBB9VB=7A9VB=BpiC]v?xDBD'VB@@AAC@2BgCGBgC[u&CgCAFKBgC{?B1JC@AA?H^C@^&C CZ^#C CLC ChuB C}?ˀ&C C@AA?2BE@BCBCBC9A? B;s?BzC@AA?BBf@ ɎB"C,B#CfB#CFB"CQq?yBkC@AA?{gBzAg*BclCBclC1AclCT5BCwm?2BiCAAA?+WrBSAɱNB CEB ChyB CDQA Ck?_OBS CAAA?B@ BQ COBQ CBQ CP)@Q C[{?BW C AAA?u;Bs@UB($C B($CC($C>B($Cy?MB>$C0AAA?/B0FA=B"B,BB^ BBAcCec?,=BNSBAA?#B6ABCtBCTUAC?BBzi?OBC?AA?B@BN-C[BI-C&ޮBI-C2]BI-C#P?}BfC@AA?o%B;QAGB"4B^?BD4BoBC4BHۉAB4BY?HFGBB@@AA?7C~@ C"nC7C,nCeC,nCB,nCُ|?Q C ;nC@AA?]NB;2@BFCBDC\BDCcR+BX!COv?ջB㤪C@AA?\EBB@wB9wjB~ilB3wjBOB5wjBs@;wjBo?QMwBejB@AA? eBV@[B|COBC3YBCj@mBt|?~B 'C@AA?.Bk@2BU+CBU+C&BU+CO[@⪯C|?fLBP+CAAA?YA=AAVCRAVC:@VBAUB >ACAAA?Ba@mB1CMVB1CCB1C@B1Cy?RfB1CAA?Bc@s>B4C4B4CB4C}B4C?3BdRo?qYB>TC@@AA?&uBц@UBN#B ȢBN#B CN#B{^BN#BFU{?B#B@AA?VxBJ8@AnAAACӦBA&qBAZ?)A A@AA?+B3A|0BӃC:mAӃC۳AӃC@F@NB"4?+$B*C@AA?}Bw"4AjB&PCJQBPCoD@PCTUEB(CZ?ZujB4C@AA? ;ZBFHDA0’BTBSBYB-rBYBlACkq?ΒBBAA?-BBJVAK@Ci@CUACIAC >0@C?AA?JB@:mBDCTBDCp$BDC>AA n?ǢlB)EC@AA?B@#B@RB@}B @@x8C"Dv?pB*\@@@AA?zBU AwBuBBxBϬ`BxBӦA CK>x?BOB@AA?BM@OJ[BˎBWHBΎB׬BΎBBΎB>FAA4CPAA?7/B~MADA4CUcA4CS-A4CO@4CU?GZA4C`AA?a2&BnŅAB4CR=B4CIFA4CUA%7HY?B4CpAA? BcAA4ĆA4CA4C~A*'7 >AA4CAA?AT:AP*~B4CN~B4CJ,BQ7BQ7X?}B4CAA?ƧBА@|B4Cj({B4CB4C(B4Cp?}B4CAA?Bd#AB4CB4CTB4C`HA4C?7רB4CAA?BNDeABC㬕BC@CCjA4C@@?A?M4C @}3CHC +C=ZICu1C=ZIC@CZICU[x?fk1CÚJC@?A?)KB*QC@?A?Bx:@YBJtC(BBtCBBtCه/BCtCe?oBXCA?A?'gB&ABn2Cj[B2C3uA2C;~BCt`?9B CA?A?ըB@B mC!BmCAPBO)?C BS)?CӈAS)?C]A'2AE?Br6?CA?A?¬ B^IA~B"SC BSCJASCvyWAԨAN?nsBNSC@@@A? /B@rBǬBBBBBA&BgC`U?BL$B@@A$C@~;C?BV7CVB5_ CVB4BճCy?hACXB@@A- A1b7A5ACQB 2AOQBZ@ShCFAShCC=bA;tB@@A?^>C+H@ÀCBI){CBUCB@B=n}?@CEB@@A?Bi@`9CaQCBaQCtBaQC1AAMxt?fC#RCA@AoC_@B}iC< B}iC;6C}iC;ZB}iCU`w?BBhCA@A?d.C @C_A+C_AtBC_Af[7B_A{?CA A@A?%›Bh@WLVBXCOBWCRBWCBWCca?YXBޛC0A@A?T+Bc@Y]CzgCUeCkC-BkCsADBw?[ CtC@A@A?@Bր@W3B#AGBAPѴBA]SAq|?nBPiCA@A? B Y>AoAϏCAϏCoBϏCB$AϏCBB}>B*A|>BiBOCu? B&BA@@A?"BC3An/BCBCpACht-AiSCEV?Oi/BC@@@A? QCH@hQZCeAUCeAOFCeAvA PBCiL|?(ZCWA@@A?KC<@;CC[8CC~BCpfBǷBjz?T9C֒C@@A?c B1@=BC쀓BC"'BCmAB([?IBC@@A? C@BsCڻB6sC&C6sCjB6sC5r?4;BTqC@@A?S`Bg(#B@ CA@A?;#C[@gCXCCXC,*CXCBAXC9y{?<CzXCA@A By@=BWNCQBeNCBeNCO@hNCApu?B]NC A@A? B:@Bb rCeB` rCWmlB` rC6A5xBe?,B rC0A@A?UB>@QBCC5gBCCBCCb1@CC;l?ӯBCC@A@A?9A UA:ADC@ACA;BB;B>A:ݍCPA@A?9B_f@ߖB=*CrBO*C$BO*Cm@O*Cl?B4+C`A@A?xCx@`CDEC(ObCBECCBEC?$BDEC}?.`CECpA@A?V0Bc*A@AzC/Am,CNZAm,ChCAB> A mCA@A?c`BAVBDCOWBDC.BDC<:!AeA^?WBDCA@A?&B4An\BCnVBC@םC^lBםCM7?xF]BCA@A?_Bc{ AZgBw@K]Ba@7:Ba@2Q A|9Ci?DgB@A@A?B:A='B!ۖCyFB%ۖCA%ۖC4AlByF?'BC@@@A?5C@iQCN/CVMCE/CP[BE/CC^&C^z?}UC~ C@@A?D.CӜADCL[YA?CkZYApCkZYA(BACz?V;CUA@@A?eC=@(kC:JCdC:JC aC:JC_: @ױAU|?QgCJC@@A?DOB!JAA޽(AgA&(ALA'(Ao@>Cu> A!lA@@A?7UBz@b C}%CT@ C%CB%C=gB>KCx? C뫥CA@A?{tBDͣ@B#CgBo#C9Cp#CTBp#C1s?B`"CA@A?xfA ABCBCD_B;BC;BC?yRB2~C0A@A?C0?@pdB ?CB?CPC?CoC?CIu?^Bt?C@A@A?2C܇I@CN/UCWC:/UCjB:/UCFdBBBD{? C)TCPA@A?kCC-?B%AA@A?B@BTCQBTC}HBTCFJAmCj?:BLCA@A?5B2A3A;V]B$AeV]BAeV]Bܻ@hV]Bn&?q4AR]BA@A?nA7-A]BCMACf=@C͎A>B!"?B3C@@@AvB}5ArC@C[Q CgC/+3BfC BBpr?CC@@A?R,B@l:BxCK4BxC~BxCAxCfC?53BwC@@A?*nBA C0C,C0CAWBe!CWB(k?C6C@@A?By@[ՋBBӜBB.BBDAB"j?gB/B@@A?ɭA19ACB CBC0gA1CB1C*?B CA@A?c͆C1@dCtB}^CrBYCrB-BrB:%~?גeCBA@A?B^@>8BiV5CYBdV5Cl݋BdV5CB1?-r?B@5C A@A? BPAAıBVFCsB C4`BꄢCG#CꄢC K?BC0A@A?VC\@+C_gC$CbgCBbgCjBMB|?F*C_ugC@A@A?Cg@*CӅCq]&C΅CC΅CABC{?Su*ClvCPA@A?jC^@pCCJWCDCEWCCEWCDBFWC|}?CCvVC`A@A?Bev@}g'CBF(CBnBBBSzCJ{?'CiBpA@A?0 Bo-A~PB<CBV*CA+CJB+CZW?BCA@A?HB+A_t)B~Cyh(B~C"B~C?wBOS?x)Be|CA@A? GB&@B@B@(B#@$lB:CyCs?3hB!@A@A?X.B3:-AbBC`ACm%BC'ACYT?_ BCA@AKFB#AsA$rC$A*rCV`B(rCA(rC Y?ArC@@@A?|B@0DBAt>BA%CAF=BAcnC?,AhBhB`A@A?KB>@BKAB̈́BgABsBhABDAldC|u?+BABpA@A?Bg@cBʦC-BʦCnBʦC.AʦCv?BߦCA@A? CV@ #B@?BP@(CQ@ևBP@yy?S:BԘ@A@A?A*ACB)`/C )ACXr? WB!C@AA?B @CECCECsFBECb{BVnACx?@CGEC@@AA?CK@OHCBCCKC_CJCkBIC~?oCC@AA?*BC@8CC4CCɢJCCAC|?ٿ8CC@AA?EC{@PC1TCLC1TCB1TCBB|?5RCO8TC@AA?VB_#@.BY$BOB$BF6B$B屓B= ]Cu?Bڻ&B@AA?$Ct@*CM.A;$CO.AsCO.A@>CJ{?*C5AAAA?CM@ GBBB̟B&C̟B>B̟Bh4x?DBsBAAA?eNC@Cp6A l CZACZAEBZA5{?C$B>C:)C>C^rB>Cxy?rWBRjC0AAA?MC/+f@hEC2CeAC2CvUC2CA2Cg1}? EC'C@AAA?0LCu@AlCNCjmCRC&CRCϦBFyB~B}? lC",CPAAA?UXCZi@B}CTBCK3CCBVBCy?TBC`AAA?#B]@wB_4CwBD4CBD4CY{BD4CC+C{?CE+C@AA?5BʾA6(A4BQAB7ABs@;Cl?`VAwB@AA?GFC@8B_CBY*`CCCY*`CBY*`C w?nB`CAAA?B@pCNɱC=!C&C]B&C."C@1CB@1CB*B C*Ba#B*Bv?bB+eBPA AAU"*B9AtBɓCiBɓChB>=AEB>=A@>=Ar?BBA@@0AA?3Ck AUVCiC0MCiC’CiCwfBB6=|?rWCdC@0AA[B@B3C|B93C$B93CoBC7a?rB72C@0AA?zB@)BCB6CB6CA6Cq?BOC@0AA?JB@M9BiC%1BCBC_LBC\?N`:B+'C@0AA?$X*C_&@C:8C&C:8C;7C:8C A:8C|?/CV8CA0AA?|BF:@aBȽCAB̽CTB̽CTA1Bw?BЈCA0AA?yAԆAҌBLC\BKC1B%CB%C?BqC A0AA?C@RyCcCVCcCLP$CcC AcC"z?CC0A0AA?j^BSe@B0CE\BCCԡ*CCCdBCCju?BbC@A0AA?B7\@BSjCVcB 4jCB 4jC}iA 4jC"?p?GBjCPA0AA? ANA{AsB-AB @B>_iACu3>AB`A0AA?B-@BNCB NC0B NCą A>Au?JBPNCpA0AA?'BA^B`RCXUB`RC^A`RC BEA%\?&_^B0RCA0AA?h~"B7A+dBpCGOBpChApCEB"rBFa?dBnpCA0AA?A0Am(sBkC΄]BkC[_=dkC]B^BNb?CsBkC@@AA?ZB@+BʰCڢBjCBjC@jCqr?|BC@@@AA?#CZ@*=C4}C (3Cݚ}CCݚ}CB5B{?c;CPk}C@@AA?z0AADB˹BZBB;JBdpCwOBdpCK,?ݖB+B@@AA?sIC@k5CD&CO/C]&C_C]&CxBB]&CN}?@5CjR'C@@AA?Bt8@FMBɚCkHBɚC8BɚC{ AɚCo`?iOBIC@@AA?KB57AmAC'JA&C0xB&C B&C` ?XuACA@AA?|Cl@B*FC%:HC%g?(CBHHC@PAA?'B[ A{A$SCXA3SCPA3SC@AT%?/aB1TC@@PAA?WAbA@BOCWX;B,C{AB$|BB?Z:BC@PAA?goBL@iB{cChBcCVBcC^@cCSj?BcC@PAA?qC/@#C\}BQ C\}BB\}BeB8WsCz?4a#C(8~B@PAA?>,#CϜ@C,mCǭC'mCV.C'mC{A(mCƪz?CWC@PAA?dC @fFC7CC7C|# C7C'_AG{@fsz?RC 8CAPAA?茧By@Bi"C徕Ba"C ӢBa"CgB@a"Cn??BCAPAA?uDC@RBeC=BpSC CpSCdoAqSC;y?BFC APAA?+BMAAτ=BAPVAJ;B0APAA?CZ@tFB'#C),B'#Cr0C'#C.B'#C%1y?GB^#C@APAA?BJ@ BC0BCLBC\?FCr?оBCPAPAAcAI2/ACAiB|;AiBп?iB'A:|nCLf>aAAj1iB`APAA?C3|@7jC*ChB*C C*C(A*C}?C*CpAPAA?/LC0@,CrC0CrCCrC@tRzB}?p7,CVrC?`AA?Y@B*C@B$BB1B=B2B;AwCr?3 BDB@`AA?ZB@0CBCB:BB_B5YC@y?{CLB@@`AA? &BFA5BuF,C3BWF,CAWF,C5B,#C%?`4B+C@`AA?\ B,A~BFC ~BFCdA.A[ɛB.A64?}B+FC@`AA?B{@u'-B ޑA@.BDߑAxBEߑABDߑARQ?-BȯA@`AA?,NNCc3@A>CcC4@CcCXCcCAcCH}?>C~cC@`AA?8Cі@ C'C5 CC&^CC٠BCZA|?W CCA`AA?UBQ>ArTBdCzTBC҈BCjACFPO?\TBCA`AA?m C3@SJBgWCBWC::CWCBWC>x?ռBXC A`AA?GB@QB]"CPB]"CB]"C#~A]"C[f?PB*"C0A`AA?(AyAA$Cd ACw6@ . CA8A . C>7 A˩C@A`AA?^yBo@NXBCOBC~ BC+LAC?,f?XB>CPA`AA?QBo+;A!BABA9NTBAejAA@_?k$"B=A`A`AA@BRB @AFiBX AiB qBiB BiBF?0ABpA`AA?A#A׻A CFhA CxA C;@'Bۭ-?ͼA"C?pAA?RB@JBu&CBt&CBt&C)AJCw?B@&C@pAA?O B@h%B_ʶAtbBʶȂ BʶA3oBTJCm?'B4ɷA@@pAA?B @; BC1BC;BCݠAa/Cri?BVkC@pAA?=,B0NAyA8C1SA9C3)A9Cbs{ACl>bAC@pAA?B3@!BBABjBMeCjBBjBw?BB@pAA?BӉ@BCPJBCoBC䑖@C|w?6BC@pAA?MBA0oAxCA.CEB.CcA.Ce)?"ACApAA?t^BwFNBAAxFNBw?"B2NB0ApAA?Ct@lCrBCjBCjBA[C C|?CgкB@ApAA?A'8AFXBBC%LBBCf?BCFB#ChX?`XBGHCPApAA?}cB*۟@g]B CB CB C;B Cx?4B C`ApAA?Bk@]Be}CiBe}Cl'B1tAABnA-1BB AZ#AAnZB=C3? BBA@AA?A$AdQBH`CQBiTCRxWA5*CуB5*C#YBB?AA?B !AрB#ACGBAC8@өXA BXAQ?@lB-TCpB-TCjC-TCdB-TCߛy?B{oTC@AA?хBH"@3Ba$CuɆB\$CcB\$C$)A.QCm?ćB$C@AA?gBz@$BB%BBSsBB#2B&8Cw?+B_B@AA?C @ COȖB(C<ȖBB<ȖBAdCLz?Ӓ CB@AAGWC@bB[Cc2B[CkAC[CrB[CIw?B6BGCAAA?;`B)A B BTƶBB\ABBBDC p?BBAAA?'(B4AH؀B㈲B.uB䈲BdA䈲Ba;B9Cp\f?܀B芲B AAA?cBi*@yBB#BByBBNBTCw?A*CAA?B#AvB)-BCBCiAC?ڵBC?AA?mB@BACB@C6.B@CͅBDBu?B C@AA?>y4Ce\@I*C"B%CB >CBfrAB|?+^*CנB@@AA?X\B{C@ACAC&P4BCAC{!?A@C@AA?͂^Ct@DCCCCCCICCa|?CC@AA?B_@̘B{B5ߒBkB(!BkBAkBr?BkB@AA?Bn@ěBfr@Bs@/Cs@sBs@bfw?B(@@AA?eB4Ag BCBCĂBCulBC\?7 BQCAAA?¹AB"ANxA[cCJeA[cCS6@[cC7An=Bx>OevA3cCAAA?&BXN@C5y?!B;C@AA?C'@zCyjC8 CyjC]ByjCA_AE[Be}?8pCjCAAA_*AC@A?BAVBC`BCNBCp_-AC {?.BC@A?ӿ4CAC@nCBJhCB4CB\+BC?zrCB@A? UBYAۦBBBBAB ~BCVl?ЦBB@A?#BPMAnACXAC?m?B¯AB˸>4ACAA?Cm@CBCB CB@C?CBAA?A@lABBBB(BC6@CCc?}BB AA?'Cf@HCCWCCCBDBC?b&CB`AA?U$BARBBwmTBBBB@BB{?WBBpAA?Z?C@UBC$BC<%CCBC?[BCAA?yA,zAACAC@z>C,/ABZ>*̧ACAA?MRBALBB8wBBbBBCBB'h?>BBAA?jA֑A)1BCƌ)BC @CB7BBO?81BCAA?tB;FABB5BBuAByACL?'RBB@@?A?gkC @'XCH'CbTC'C5}C'CI%B'C }?eUC,{&C@?ARC@V8C#L AUW4CB A4jCB A~XBB Ai{?59C.@@?A?OCA@<CM0BC10B2.B20B25B `CLw?:C0B@?A?1kBXE@muCsuBUCtuBèBtuBA+]qCNu?ICbGxB@?A?wB@?kBC fBVCBVC,!BVChe?`fBM0~CA?A?mBֶ@B8XCB@{BbBBBB@IBWB=Chn?βBBA?A?!B@;CRCC"RCB"RCAqA{?%CRCA?A?_BB@B{BJ*BȵBU*BBU*BzjAV*Bt?¼BSBA?A?zBU@$BpBBlBsClB\ӃAlBV|?BBA?A?9BnAB y:B(Bx:BȡAx:B 4B?bC l?BVG:B@@@A?9޷B8g@BrECuB|EC!B}ECPACm?BkC@@A?spB#@GAFB7AFBzMBFBzAFBf ?WBT"B@@A?-SBC@ȋB̐BYBːBBːBfBe|Cڴe?BB@@A?tiB,M@ KBպrCfFB$rC*;B$rC[|B$rC4N\? DBsC@@A?cAy>ArAvAAwAJ?FCAFC'>UAwAA@A?B1C2@C@xBC]xB_HC^xBHB^xB%{?wCBA@A?C+@UCayC>OC>yC4C>yCeAB=yCw|z?b CLyC A@A0dC@5DCkCL;C;kCՃC;kCB;kC_|?CCTkC0A@A?~C r@lpC6=CeC=CC=C;B=CV}?[pC"=C@A@A?^BdU@w!CvCC^vCނB^vC-:BڅB?{?o% CgvCPA@A?#Ba@BƯCq$BƯCP CƯC`BƯCu?kB¯C`A@A?߿BT@/LBCB&CB&CB Bv?7B CpA@A?Ĝ-CVq@uCCCCf%?CC!BC{?CfCA@A?uqB@qBEIAxJBSIAx63BUIAFA*ICi?QB_AA@A?B@ BWBBWBjBWB@WBUpw?SBXBA@A?B@iBQkB]BGkBABGkBXRAEkB"p?hBHBA@A_B2@$KBBBBBB@&C!Qv?qBB@@@@A?ȱCr@CcBwC(cB3 C(cB @lC4Wx?CzeB@@@A?ZfNCb@p$C{C C{CtC{C"B{CHz?$ "C{C@@@A?3B"4AeC|CCC|CҺ@|C CBo?CC@@@A?A`rA0AJxCTAxC@5B[A5BOj=@/wC@@@A?cCd@FCyC ACyClCyCB|ByC q}?EC CA@@ABs!@fC(;*CB;*C̏B;*CMWBCkw?C")CA@@A?2A b9AwBA B#A'c AyDFCJ0ByDFC)>9BWA A@@A?s0B%@4BBmڦBBBB–IBbYCd?BKB0A@@A? BqĔ@)$BrCBqCBqCdBqCk\?&(B qC@A@@A?uX9C4uV@7.CƺC)CC7aDCC1AC |?].CCPA@@A?&2CXI@p*C2WPC*C>WPCr5C>WPC6A;WPC{?X*CPC`A@@A?6B@kLBMC;0BMCSBMC9AcCw?9BQ;CpA@@A?,A0AWA(C3"AGQCF@CmACv>^A`CA@@A?HˤAAAAkAA{@7"GCYA7"GC>ꇟA]AA@@A?Bå@ CjI@=CiI@C BiI@8B%7C޼z?, CE@A@@A?AhB& AD%B C5BCjBC?ACƗh?#&BqCA@@A?X)B]EA Bx*BlBox*B! Bmx*Bt?Ax*BP?BB :*B@@@A?:C@CRC~BfCvT0CeCNCBeCyw?CwRC@@A?,Bi@G:BC8BNC`XBNCAX#C7j[?9BOC@@Ac|CQ@ˤ|C_^C#uC_^C)~C_^CA_^C }?Cc^C@@A?"B8AV;B2rC7B2rC@2rCBGxBy(?|N7BoC@@A?xBDV@إB⫫BڹBBg CB0BB0p?uBm.BA@A?Bh@B,?C͆B3?CIC3?CűB3?Cq?4BVCA@A? "/AC3^A%B^AB LC "C LCf?ZC A A@ABrU@ CB CvДBBvДB%AA1CꖡCX3CꖡCd@斡Cz?7CyLC@@A?hhC@^AHTC`A@A?lCv@#(CY Cn(C4j CC4j C!BCA |?Y(Czt CpA@A?p Cy@$B{ CBz CN!Cz C{^Bz Coy?+BA"BA@A?jB@@BCB퇌C;B퇌CxA쇌Cz?3,B}CA@AgBI@|B;>׊B;>ʥB;>hWA;>Oy?pB S=@@@A??B @B@mCrBXmC9rBXmCTBXdBhq?aB>WmC@@A?B@hB!WC>BVCCVC,AVCJv?|B6lC@@ACR;@CBCCtB.CtBpyGA{BBn~?CB@@AP CP@ClCClC ClCARAlCz?xC0|C@@A??ԩB@8B6GA[&B2GAOB2GAGvA2GAk?uB6AA@A?B]@׌B17C!nBW7C㳍BW7CAq@Jp?B8CA@A? B0@CNCּ CΊCBΊCl*B :Bw?r>CC A@A?CZ[6@QBBkB$B+C$BOB$B;z?BB0A@A?'B@3/C 1B*C̳1BAl`C8CCC@@A?CZC@ C BhC BB BACN{?!ClB@@A?73C9@WzCK|!BCC|!BHC|!B.6B|!Bz|?ޙCKg#B@@A?m1Cޙ@ CBCCBCӈTCBC~ZBBC V{?ct CgBC@@A?yCٝ@,BlBB9EBBBu:CBB˥BBBEx?KBpCBA@A?i@BA BCBVC{(AVC A/ACu?K BCA@A?FBm@ }BB-sBBCBjBBn?̚BB A@A?zi C0@" CCCCCCc_>|Cm6{? CC0A@A? }B l@?BlB(֎@ҖxC:+BTsC:+BB:+BLC^C%|?xC^+B@@AA??Cc@rC_BbC_BjfC_BVB_B&|?Cg?B@AA?fC~A6JCrBCYBCYBBXB?CC|sB@AA%Bх@n?BGéCB?éC^B?éCt@>éCav?/BC@AA?bB ¥@R B5C9B5C(VB5CYAB?rp?BwD6C@AA?=C@ $BA,fBA'CAsBAt?/B$AAAA?C\@CqC CۂCCۂCdAۂCly?COCAAA?;C @=MKCbCDCbC$/CbCh̤A;BZ}?CKCbC AAA?BCBA@ CUZC*CUZC)CUZCBUZCz?A CCZC0AAA?.B@8sBɏA[sBABAMXJBAig?>qB$A@AAA?C,;@G:C SC2{{?4C+B@AA?B3@7}B~B tBk~BBk~BrlAk~Bd?vB$‚B@AA?cC@SCjBJCpBgvCpBĥ.BpB)}?n8UCB@AA? QB @}BBnBjBDBjBh A zCfo?JBKB@AA?UC`*@Z6CC,CCBCVZB&#Cjz?4C|hCAAA?KC٫@Bp&BěBTh&BD6CTh&BhBSh&Bz?[B)%BAAA?8C@ٱ.CC*CC~BCCAC|?5-C˸C AAA?B @۲BXnC~BJnCvAJnCKBUhB,ho?B"mC0AAA?EAp7(AF}AkB٬AʀB@3CW.A3C4e>LAB@AAA?xB@nB6CC=KB.CCB.CCA.CCQp?5BCCPAAA? BGABBB.BznATC\BTC`?Bz0B`AAA?%R&C@+CоCB5C;C+C;C]iAʾCz:}?nbCCpAAA?B]@%-C CcC C֥B C&BCuz?$HC] CAAA?3B$A$BCBC |ACOBR~C m?cB8CAAA?*Bc@+BCZBCBCk-BCyMx?BpC@@ AA?aCJF@,LC B2ACCPByCQBYBRB2|?LC,B@ AA*Cy@B RB]"BDB8 CDB:ADBsv?B&.B@ AA?YC/@;CTBCTnBCTnB`$qACx? eCHJB@ AA?v+BT)AtbrBsB^dB \B@ \B-FBW[C[A?jB2qB@ AA?uC@OC CaC C|C Ch|AoCeC?9C CA AA?^>C[@H.CCk/*CzC0^NCzCBzCD|?j.C ѓCA AA?EUBZA1B|C"BtCdTKAtCBΕBj]?OßBÍC A AA?B@/BBaBB5XCB_BB\?BPB0A AA?V!CR@lBWқByBDBQcCDBe?CDBx?BoB@A AA?om CLG@XBABACA(AAzz? jBAPA AA?F0C@l@C BeCBg=CBAB1}?3% C@B`A AA?AF!AuBCmBC*NA~ECIB~EC:?tB1CpA AA?hAmAiBtPC`BtPCAABAx9?ziBtPCA AA?AIB&A%bB*cCNB*cC>!B)cC0A?Bj?abBcCA AA?sBAP~BGd CVgBId ChBId C-8>#d Ct?[}Bi C@0AA?)C%@ (CCl C6CdC6Cfd@TB{?J9CC@@AA?b:hB* AJYZB>CbBTB>CM9B>C@Bh[?yZBh?C@@AA?XBx@x=CzjBBjBBjB3oA.nCx?CkB@@AA?J5Cf@;&%CA#C[AZ!BC\AA_Aa{?,$CA@@AA3B1-A bB?eBmKBA@AA?7CuK@BoC–B|oCNMC|oCqC|oCu?ΔBoCA@AA?Z$BGAˢBsC:BsC?A5BлB2B$Z?gB^ tC A@AA?XB$AlBCTӍBCBC@Ck?ɍB'C0A@AA?иBԲ@y6BpCMnBpCsBpC3)?Bn?DBzXC@A@AA?CYo@C2|B7C%|B"'C%|B!B%|B |?C*MBPA@AA?Ba1@@QB ۝CbB۝CB۝CA۝CEn?QBfԝC`A@AAq'pB@BΊBstBΊB_AΊB9B|gyCou?HlB*̊BpA@AA?IA_$AlBeB32PBeBVX@CmC]BCmCR?kB_eBA@AA? B@v͘B1wBRB/wBAB/wBfo B.wBz? B͂wB@PAA? B AQ~BCxBC BC: BCgi?O{BC@@PAA?JXBlA=BCB9CA9CGBTC^?)Bw C@PAA?$GC2@iEC/CCC/CpFC/Cj?@/C|? EC>C@PAA?~%CIq@CԔBpCԔB;CԔBOBԔB/z?SC%B@PAA??C}@(C6CB5CJ A5CA^?xt?B{5C APAA?,B\FA;:BlxCPB|xCľ@~xCptB"BY?UBcxC0APAA?w4Be9AOkBUGC2@hBUGC՟AUGCHp B'AvW?QjB.GC@APAA?!5B3A8SBCmUKBCvACeA81C~\J?yTBղCPAPAA?C@lBMBTB^B6C]BcA\B|? B,.B`APAA?BƉ@0BFC .BECBEC ADC{?BCpAPAA?>BM`4A $BdB,#B\BAA\B-V AChZ?m$B?B?`AA?ʲB5@bcBBB(BSU B)BǤB XC q?,BHB@`AA?pCZ_@kBAgBACAe.LBAu?BA@@`AA?cB|@\B@&B@!A@Bp6C=J[?CB@@`AA?kBs@BaC!1BaC BaC껋AaC1w?BsC@`AAE)"Cvҝ@TCcC+CICs.CIC:AICK{?9CfC@`AA?B(@H+BiiC0,Bm*C_Bm*CAm*C/Y? ,BqC@`AA?C@?i CBR CBeCBA\{C+mz? CBA`AA?$C\L@SB!= C|LC; CPCC; C$B; C5{?_B2 CA`AA?/C@!CDk{Ci!CHk{C8CHk{CAFk{C+(}?X^!Cy{C A`AAʰBFA6RB!C1cB!C)6B!CKA!Cm?uB/ !C0A`AA?rB A6ޒBGgCt!BFgCBGgCAOBCg?B?gC@A`AA?G C;Ա@C{A9 C_A# C_AU:@lA}?MCAPA`AA?HBJ@YBL,C EBI,CBH,C9PBH,C-s?|ZB C`A`AA?A'AYpBq%FBg*YBo%FBj@[eCqB\eC Z\?BpBwFB?pAA?Z:BOA,^B}CB^}CPA^}C;@|BX.?!RB%~C@pAA?XBڹ@eIBnCBC㬍BCS6}@!ԳB|tn?BC@@pAA?YB_@JPB?pRBS?-aBS?RAX5CAW?QB̕?@pAA?XB(v@B\ABR^ABP^A \AACWw?qB=^A@pAA?,cBO@k#}B_C.|Bq_CXFBq_CJ?s_C/g?{B!_C@pAA?A*BABg:CXBFb:CQ@H@er#BH@?BO9C@pAA?cQCʬ@ CJAC`JA)[C`JA AaJA\W{?-CAApAA?M6C9@EC"CC"CåC"CAKCBKCn:>?3yBmAC@AA?B(@B j{BTB{BD~B{B BrCtv?:Bm|B@@AA?BBr@BLBXCBmC:BmCsBB)p?BVyC@AA?9i Ca @TCCD@CC %CC\ACc|?iC! C@AA??8C/'@+CnC!CkC.vQCkC68ZBkCu"}?C,C@AA?UB@C}BBCN{B=CB=C\XB=Cs?g|BC@AA?BLԥ@>$B`BTB`BB`B̋>`B w?B%aBAAA?B@BgEZC-%BgEZCCgEZC%BfEZCw?4BDZCAAA?޽Bʞ@BhC(BhCBhCp@RBU{?nrBhC AAA?FBx@yBR^ClBR^C( CR^C7cwBR^C_I{?xB E^C0AAA?`B@B¬CB¬C B¬Cf?¬Ct?њB5ŬC@AAA?vA?A BC'xBCt4AqB"BpBa?aBCAA?[B“@BwBCBCrACWBBu?3BC?AA? BF?@B C(B CB C֮@ CL{?{bB윬C@AA?B(@7BB5BBBBBBsk?=6B뢃B@@AA?$KB@6 CWCs CWC!BWC8B>C.{? Ca\C@AA?B@BӈCUTBӈCCӈCɔBӈCu?=$BֈC@AA?B>AwA5*BnA)B5@)Be AvCWz>PxAͼB@AA?B@B3jB BjBGBjB+BjBcS?{B B@AA?7 BJo@yBkCFBfCBfC AgC v?BCAAA?LBv,Ag AbWAtAjWA'`AmWA@qWA(S>/A%EAAAA?RBf@snbBTCNBTCەBTClATCq?bBKbC AAA?ɂB1 AB CjlB!CB!Cpx@!C r?5܄BC0AAA?RBX׽@NCA]BABAvıA@=CZo}?]C,A@AA?i`BG@B'B&PCD!BPCOBPC9APC}R?'BdPC@@AA?i5C폁@ZC6xC5- C7xC\C7xCjB7xC,|?ACd}C@AA?IBq@kB8UmB&UB,UmBA*UmBBLUoCbh?BX%mB@AA? BL?5Aq B@ܛCCB<ܛCA<ܛCxAwCo 8?. BKΛC@AA?lB@BTq>B4k>`_B8k>@AA?tBd@BBB<{C y1B>{CΗB>{C?FA>{C:m?BBЂCAAA SB-AJDBqA.BTA9LBTAY@XA^e?cDBa2AAAA?#/A=AXAA!BDA*!Bw7A*!Bu@yC>VAЉBAA?A#!MA:yBB BBM@Ca1&BC$E1?BB?AA?TAAB(OCB'OC }A'OCA8AbZD?FBXOC@AA?1BIA3BHY(B)BAY(BFA?Y(BAQ^C|S?Z3B=(B@@AA?e&B AuBB&'BBsBB4@Bq(Z?BR4B@AApTBaA"tA_B(Al_BtBl_B/Bk_BGTASpB@A?,CXU@CX C*PCA4C?C@A?ϊB5AQiB4CrB4CaB4CAa&7y"?3B4C@A?kfQB$fATBC{BCY BCJA4CRo?)BC@AjCA]xC/}5'Cw5Cw5wA4C?aC׍5AA?B?@2C-CC{BCB4C?!/CCAA??1CAP[C4CRC4CC4CDžB@T7?#r]C4C AAB@A CCSCC^BCdaB4C9?CC0AA?B2C}@8 C6>6C^>6i_C]>6B\>6?CK36@AA?B`AmAT A A_A4Cs>ѵAPAA?i`BAB4C*}B4CA%7tB%7Qc?sMB4C`AA?_B0%ABBC?C{B4C? BCpAAeBlA_BCTBC@ACɭA+OC@?A?XB<_@uzCٔCpnB۔CB۔C 2AjSBv?CCTC@?A?Ad'ApBrCMB\CGB. Cn C. Cl@?2B!BC@?A?:WCۦ@eX[C'CVC8CISC8C|I@r C:}?OGZCĠCA?A?@J=B`+A:B]lCSB&lCS@&lC BlbBqZ?ګBkCA?A?gB}@C?JCH CpLC\BpLCiB1Bx?iC1YC A?A?'C@ C%X?C?V?'c0C?V?}A?V?~Uz? C0U?0A?A?BG@=$BCPȟBCHCC]BCv?oPBϠC@A?A?McC@CwCtlCwC ˜CwCjYAwC~?-C`CPA?A?z5/B}.A)BgC*BbgC }eAbgC#AUNB&?[#.BgC`A?A?B^@+B6חC,BCJBCOBCZ\?NE,BCpA?A?&B^E@oTB w%CBm^%C Cm^%CMBm^%C t?B$CA?A?EA3.A1 BCBBC}2b@/CeB/C ?BCA?AmB`@0BJC2ʟBJCBJCEgA)eB~r?6*BCA?ABxKABՃByBB_ABbAWC;?6B* BA?A?RA BV?AQ)qA]CP[A]CA]C3Y@]C?qA]C@@@A?C/BUaA bBB[BBk?:.UCaB:.UC:?QgB B@@A?d ZC~+@CC\lCCj.CCBB;}?SCC@@A?sBѶ@lZBTbC3BTbCBTbCMoATbC\s? B bC@@A?-HC@~C8BCyC#8BC$8BgB ZCt}?CB@@A1g)C @<#CGaC8CYaC-CYaCu=\AYaC}|?ݼ!C)CA@A?C+@pC!CkC!C=C!C2AAZ˪C{z?CD!CA@A? A *A B'CB(CjA Co?B C+o>jB(C A@A?gCvנ@)0CCSqC CKC CA CP}?]z~C-C0A@A?(ZB?.A8BBJ3BB@BzgBSxCQ*4?S;BڅB@A@A?B@@|B0BBBBBP#AB{h?NBkBPA@A?AAAnwC^A^wC A,B$B,B~>AvC`A@A?ίB'@lByMC9BuMCBuMCd@Atw?dBsMCpA@AB֊@I%B/BDBB[BB/kKBBt?vٗBBA@A?#CBR5CNA?i?B5CA@A?HB@%RBϷC@BɷCVHBɷCLBɷCr?]QBCA@A?B@ B5԰CB6԰C omB6԰CsݜAl-Cg1y?ҬBٰC@@@@A?!C)@O:C1#C4CB#CCB#CFlCB#Cs|?7C#C@@@AA ARB]&Cu2MB&C:AwCBwC^>ZBX"C@@@A?WC@CB#C8BC5C8BlZSB8BqUz?$CӺB@@@A?qB}@QB<~BB~B(BB~B BCt?BkB@@@A?qC@m@HBEfCqBhfCGChfCBhfCu?6oBCA@@A?\j C&@C-AB.AC0AŭA@Ax?CAA@@A?{B@BIA"BHHJAQ@BDHJAbB@Cڳh?eB[JA A@@A?,Cf@*CAB#C|BG0C|BRA|B˾{? +CcB0A@@A?8Bz@BA[BsA|BsA AuAj;u?yByNA@A@@A?. C6X@JC9ԓBC:ԓBB4B:ԓBA}C(y?CؓBPA@@A?HBE8AAp C`\AK C@K C{ACA>wA|C`A@@A?Br@@|CC(C4C 9B4C uAkCy?LC;CpA@@A?۴9BM AIASB]A$SB B%SB@&SBg""?ABA@@AGB0@BtC BxCP}BxC{s B݁Bw?=BѯCA@@A?~pB̖@4XB^Cd PB^C\jeB^C@^CTh?YB[CA@@A?B@brBBYBBrBBABr?m|rBBA@@A?ƧB_=@mPB'8BT֤B!8B xB"8B<>bC={?ABr7B@@@A?BN@B,T2ByBdT2B_BcT2BA`T2Bd,q?nB$3B@@AqADAq@%B5@B)@=CE7 A=Cf=@B@@A?R4A2$0AQ BBBBB.=CeB.=C(?-B}nB@@A?0 BMa9AbaB/ C\B C@ CHB_Ca??VB C@@A?EB(#AA.c>\A>A>D?>Y?5A CA@A?~yB@*CCrC CC6ՍBCnB5g)C8Tv?CCA@A?FB=ABUB$qB>|BA>|BhC0BCE?m|BLB A@A?CCsel@ CICjCC UBCf##BʋB(z?cCexC0A@A?B@Bl]CBw]C ٺBw]Cvs?Aw]C~q?/BJC@A@A?jA"AAUBArVB AUC,>!BUCFD>}pAHBPA@A?#C!R@bCCCC(#CCp@C:|?])C%C`A@A?RZBGD@gBLC܁BLCƭBLCzALC k?āBLCpA@A?6eBI@BA(BAAACRB5DCY|l?}#BAA@A?;B7@;B䞲C75B۞C,B۞Cs,$B۞CK_?9;B}CA@A?~BD&@XBBC8$BBC%BBC6dBB}.y? 2BDCA@A?<B@e.A+AzCAC.yACAB-?/AC@@@A?6qAk@ BCpB.CLACۖqBCG> BC@@A? C@*CgEBC/'CQEBC BREBC,nB UdA/{?+C{AC@@A?T:C@aCC\CCCCIɑBեCY}? bC`C@@A?dA|+AB䪲C}BલCUAU1CBU1C(?B\C@@A? $C@-C(Bw&C|B C|B~A_oC,{?_.CmBA@A?KeC#@YCΈ\COCei\CxuCei\C<~Bgi\C }?PhZC $\CA@A/Byԡ@yBCbBCYBCg@Cft?SBC0A@A?:jC@CQ'CB-$CBF7CBeAC,g{?z.'C_B@A@A?wLnB1A .BP&C/B&CW ;B&Cc6@&CB?\,B{CPA@A?Bd%ABOBSRBXB0A CTB CW?BB`A@A?Bv@OBp5BjBq5BBr5BA\`aCt?$B5BpA@A?#B`@BPB\2BPBRBPB׳APBv?TbBPPBA@A"C̏@}CABuCAEBA~L.B!=C`K{?CYAA@A?.AARuABC>8A,Cc>@TCATC>A:AVCA@A-B@BrHCGzBjHCBjHC@oHCs?B~+C@@@A?)A?+AXBc3CnB}3C\B?CB?C4 ?MBM4C@@A "Ct*@ CCC@C5C@CQ6B@C{?x CiC@@A?C"@@CXCFFCC BCOBJ~Cz?C6C@@ACG@9/C\BA/y)C^BAB^BAgSBB%@CA{?2.CٌIA@@A?șDC׃@"CbCvCIvbCgCIvbCXFBJvbC{? l"CbCA@A?CRq@C!ZC C}[C\&C}[CHA|[CIy?1rCD\CA@A?]C@YC7dBPQCadBzfCadBOAadB}?uZCcB A@A?cBۣ@ip-B݀C(BԀCwBԀCBԀC[?p=+B[C0A@A? Cz0Z@wB1C#B1C$^2C1CB1C cv?غB1C@A@A?w]B_lA@B C2ABp Cc"Bp Cw@9mCt5N?sBB CPA@A?ׇB)_@ލB$CyVB3C C3ChnA3C`ow?B9C`A@A?Bt@BWc Cb'B|c C`B|c CQA|c Ct?IBf CpA@A?)B"A<0B @ -B @؎A @>Aa9CF?1Be@A@A?B &AvB9B@mBLBˑ@OB\BCXS?vB=OBA@A?!BOU@B8LGCy>B:LGC`C;LGCiAzAC A@A?@BAqBWVCmBPVCAPVC=p$BCٽN?rtB9C0A@A?$CM@C39BCl9BFCl9BA[WC)z?KCB@A@A?hBc@_c&B :Cl'B6CpB6C(A6C2Y?I$BCPA@A?)Bݠ@VّB;_CBYC+BYCNAYCRp?ByWC`A@A?BbBdAE[BABA,ANCS?ob]B.A@@AA?fBʴw@B:$C$&B<$CᳱB<$CkAwHCSt?B,C@AA-RB~P@75BDCBDCZI]BDC"B0Cr>m?:BC@AA?9C[@-ZBzCAB{C*,[ACAAA?C)2@&CoCdCmC!!CmCAmC r{?>SCCAAA?RB"@2B(G B+BgG BBfG BSAQWC^u?q!B9B AAA?_>C)ː@`AC!BAC!Bgq6C!BS)AnC}x|?AC/CB0AAA? FCJiS@!C{B\ CtBhCtBWBtB|?o>CkB@AAA?$:"CG@BYCB ZCESC ZCB ZCcy?wBsZCPAAA?jB鴱@zHBabCx8IBbCŒBbC(AbC[c?MIBa^C`AAA?)B@bBDByB3B+YC3BAA3By?BBpAAA?'>BBA}RB $CoJB $CeA $C A-BBS?RB+CAAABH@BB)BB2BB>jABy?aBBAAA?B@B`cCYB`cCeB`cC/@`cCLv?*BncC@AA?- C4@5CI@rCU@n%CU@9AU@cz?C8@@@AA?~dC@c`CJJC{BOKJC-*8COKJC+gBOKJCO`y?CLJC@AA?`Cԩ@pC9AJeC~9AWC}9AcAɛ?C'P}?rCލ:A@AA?*IeBq@B>CGBu,CͽAu,CFBX C{X?c BR$C@AA?/CYs@jCUAP CL"ABL"A,JAJQCWy?C A@AA)C#@,C CD&C C^C CA3B#|?--CCCAAA?B}\@\B7CGB7CtB7CRAv@scq?dB28CAAA? )Be@BvHCBHCBHC%BA?s?HdBnHC AAAC׻@%%WCDCLXCDC&{CDCaCDC~?WCFyDC0AAA?vcBhA@r}BՈC~BăCÝBăCErAăCj?}B|C@AAA?-A"#AmAMBOANB@-gCB-gCR3>A2OBPAAA?ܺCr@B3CC2B3C99C3C/B3C?lz?ѣBBJC`AAA?ivB@BABAoO!BAA5`OC g?1BDApAAA?+B"AA%aC A4aCB4aCyɴ@4aC5?mA:CAAA?3 B,A]$BNAbBNA?@CB@C e?6B<#OAAAAKbB9ABMA[BMA BMAVBIMC^8v?¢BpA@@ AAB>CW@0C1uC}'C_CN OC_CFsB_C {??1C0SC@ AA?B@xC~uCIBpCƾBpCT A Bvw?!CiC@ AA?E>CM~@OCCHC C1C CŲAHB}?OCx#C@ AA?B+@GB| BUJBE| BBD| BTJ5?| By?- BB@ AA?B`@ CԇC:CԇCۨBԇCZANB;PBx? CvڇCA AA?hC@C_ALB$ߊC&B @aoB$ACB$A C$A ؁B$Am?oBA!A A AA?By @BPChB"PCIMB"PC 5$BAl!q?PB$JPC0A AA?Bx @.BBߓBB\BBA$Ckk?BB@A AA?= C0l@BvֲC`BwֲCpCwֲCgBwֲCz?=FBزCPA AA?BKB A>BBT4BBn|%BBVm@:Ch?u>Bi|BA AA?"~Bd_@CːB$ B:BA BbBA B@VCs?sBn B@0AACS@rBCuChBC9>CC(CCar?nBC@@0AA?KB@BSB+q~BSBrBSBsASB3n? B{UB@0AA?FC@\CC#BxCG6CxCL]BxC[J{?ClC@0AA?ݨC @gC̨?C=C?CpC?C-@?CCy?HC?C@0AA?CF@C C|C CC CfA" C&z?9CC@0AA?CC@WCoBDzWCoB]*CoB4BuC|?UXC9oBA0AA?Z'C_@B: C3B7 CreRC7 CB6 CDz?̴BCA0AA?(B8AB=CfB =CB =C0BA0s?sB/G>C A0AA?BAo{BZ@J|BC@7BC@_@C@Gf?G|B[?@0A0AA?BR@²B-= C)7B>= CyB>= CA>= CB¥CBC.>'CCOBC>}?eB C@PAA? (BR`AA#P;BAFQ;B@FQ;B4ARbC>ޕA?B@@PAA?zPYC@r=C,CY~>C.C|nC.C?B/Cg|?m6=CC@PAA?oMC{@zwCsSCFCsSC.(CsSC BsSCz?a$CB|SC@PAA?B4c@\"B3 CyB1 C>ޣB1 Cu6B4B>w?B<C@PAA?GBx@T(BӠCBѠCBѠC6BѠC{t?wBʠC@PAA?B @DBOCB`OCCNiB`OCBA<[r?B`mOCAPAA?"ABq@Z8BFC09BOC;BOCpRBOCc? 8BJYCAPAA? A(A@AgE@YAwTE@@R7CC*AT? APAA? C@m$CCl"CCxBCKBƣC-\|?$CC0APAA?A%'AsB@m;Cp~B5TAC@`AA?%B|ˣ@(BC)BCtBCǰ?Cq?BC@@`AA?sB@FBh-CE9B>-ClC>-C@7B>-Cv?oB.C@`AA?C_@C)rCC1rC`6C1rCe^SB1rC{?C:rC@`AA? dC@[C*C:[C*C`hC*Cr"RA*C}?H[C*C@`AA? B@B7CBCHވBC}@B.m?ƗBC@`AA?IB޿@CBDCBLBB=pB81UCZz?^ CBA`AA?FB{@BkZCBpZC+LBpZCNnA BHx?BZCA`AA?B@xB1CjsB1CυB1CaB1C#o?8zB1C A`AA?# Cq@B.C|B.CC.CB.C z? 4B.C0A`AA?B1AB1|kCB5|kC_B6|kCZ@]Br?x^BNkC@A`AA?jBR@BACQBAC1dBAC?`+AACYu?}BACPA`AA?A=3(A\[Bk˜CUDBp˜CkLAߖCwBߖC:G?[BܜC?pAA?VCƮ@:͠BRAƠBGA-CGA区BHAHu?UƠBRA@pAA?U9B|A4BeKC%BJC'AJCP,qBETALaY?'܊BJC@@pAA?fC;A0BRkCRBkCE CkCtAkCly?}BDkC@pAA?Bp;A Bc;"CB+"C6BCGCC]a?2mB"C@pAA?B@ABB)CB9)CgB9)C#{ BC?t?4B٧)C@pAA?`cB@B C`yB C !B CUaAC)Dy?IB0 C@pAA?\B@C-OC C,OC4B,OCBWC{?JCKCApAA?xB4Ȩ@ C%CB#CB#C@J C-y? CxCApAA? A/AlBC^ACx4?CA@B, ?hxB:C ApAA?Cd@PCPCBCPCB CPCB4N9@7dCJ}?CrCB0ApAA?B^bA=yBB 8BuQ1B 8B~QA 8BAbCN?8BB8B@ApAA?S=Bs6ARBƒC2;BƒCbBƒC@?ABd? RB¯C?AA? "C@vBB=BB{?CBBB{?WB*B@AA?GBY@B;CdٸB;C4B;C|@;Cv?ZBF;C@@AA? jB O@XBBBB BBABBkv?BB@AA?ƙB@B_TCBnTC݄BmTCЍXABs?`BUC@AA?QC a@As&A2A[CwɦA[C(c@IC.AHC>AYC@AA?mB:S@rB+DByѣB'DBB'DBѯA'DBt?eB5BAAA?x~C@sBU@CbBU@CCU@CLA%BU@CŌ{?tB|h@CAAA?M6B55@Bp1C[Bp1CkrBp1C3n@p1Ce}?&Bi1C AAA?B_@Bl8CXBl8CCl8CAl8C- |?BX8C0AAA?1BE<;A AIsCANsC0BNsC'ANsC??IACAA?e8AlA`@B,Z@Bh3@C@CF<c@B?AA?b C@ű CEwCCDwCoBDwCBB ~{? CwwC@AA?aC&@B/_CB/_C.BC/_CnB/_Cf y?.UBI_C@@AA?WHBA8RBijCIBijCCqAijCXAjYB{M?$RBjC@AA?̃Ba@AB.H*CSB*H*CLB*H*CA$CQj?JB.9*C@AA?B\k@UB;Cr[B?C5yB?CAPBt?kBf$C@AA? BV@&BZ&CBZ&C;*BZ&C!'BZ&C5w? BU&C@AA?`Bw5@>B£CⱚBƣC3BƣCsMAGC !x?C$BȲCAAA?Af&AJcAnCiA|C5@|CnA!Cf>A2CAAA?IB:AfB*C4MB*C#B*CǬ%A|CkBj?[fB+C AAA?A!QcA6B@5B B#5BI9A#5Bk)AGaC?D?Bڹ4B?AA?E B. RAޘB5lC{B2lC%@ΔbBBƔbB-`?+BlC@AA?CȾ@B8CܬB8C?@&C8CdB8Cz?FAԇC@AA? BGAA+BȲA+B9tA+BXA犀C@!?-ArBAAA?&4Ai:AW B'CeA CrQA!C,A@C @?FE BeCAA?dA{A@BBd,BBACSBC'?--@BB?AA?B A&zByAf`BxA*@xA!DXB=C_?/AzB A@AA?OB*uAmBZ5SCtRBb5SC Ac5SC0B A!S?snB1QSC@@AA?B2)A[B5B֙ABP5B@AN5BI!BoaCWfV?[B5B@AA?ܕB@yBn$C3Br$CܑBr$C7?s$Cv?;B2C@AA?DA?@AlB@XvCwATXvCHATXvC^NAB;?4BvC@AA?;A3AP&AYCA\CęA[C$AC(=?E{ACAABd@ERBKBdžB ,3A4C?zB?AAHB@rQBBfC/2B`C'DB`C@`C[p?7.BBC@A?THC@ ~CBvxCBhCBBC?CB@A?mB/9A1*BB&BBИ|BBABa?1BB@A?8BAUBCBC|CCBC?BC@A?ZBҀAmIACACDϱ@CABc>ӧACAA?aC0 Am?>CCg5CCBC0BB?c>CCAA?l]B@r[BCOBCCCkBCӉ{?`[BC AA?BEC AHCB# CBCBBB?ACB0AA?E}B]1AsBCnBC/BCfBC~?qBC@AAhAuAnBCBCӈABuTFBB%B>BCPAA? B "pAAC]AC AC+AB>}AC`AA?B@BBXEBBӕCB!BB?BBpAA?B@pBCBCa CC,(BC??BCAA? B|@uBCúBCNBC.@BW?tBCAA?ꟅB(ABB3ABFBByBB|?DQBBAA?ABQA ABAB[AB +j@B{0?AB@@?A?CΎ%AC0tBxCtBǁCtBIQAtB~?CWB@?A?;Bd@YBB2UBB3AB4yBNFtCI?XBzB@?A?B@B VC WBVCAVCB3Cqo?BBBC@?A? kC@L#CHq\CCPq\CBPq\C|] B=!BsT{?!C!\C@?A?BZg@-CC'CCBCQB,CNz?,C֥CA?AC@ sCz~VCyhCVCCVCRBVC,}?sCBVCA?A?޹B~@nB%BbBfB BfB2OBdBzc?8oBqB A?A?&hCV@UC՗C}NCD՗C|~CD՗C?BD՗C*~?&zUCUC0A?A?ZC@΁C9qC1~C9qCܚC9qC@9qCJ~?hC$qC@A?ABʹ@7C3C=C3CVeB3C+pBҳC*v?/C 3CPA?A?éCe@3*C)}!Ctv+C_~!C C_~!CA0Cy|?)CL!C`A?A?₟BÄ@B30CIBS0CIBS0CB*TCeNu?BF0CpA?A?Bag@sBמC&BמCưBמC4BמCg?BÞCA?A? A/ABoUCq<BoUCBL @>B5!B;B ?TBUCA?A?0BY^7A)tB3CiB3C7A3CO;B۳Cdb?uB63CA?A?6a>BIAUBBjBBLAB/:BhǖCm?o[BB@@@A?(C@u CC|CFCeCCFCtBFCתz?[ CEC@@A?MCs@2#lCALBFgCLB0CLBYBr(gC}?mC{NB@@A?~m&BD)A+Bi}CyBi}Cd@i}CMzkBӒBK?*B1}C@@A?FBy-@*#C9CNC|9Cr˪A|9C Cmo@x?K"C8C@@A?B[8@[Be`CB\`C$B]`C|Ȧ@`1BΏw?bB~_`CA@A?B:A!CTCCPTCՕBQTCB?B x?+#C(TCA@A?|C@@B LLCH BLLC!.BLLCOB`Ayt?BuLCPA@A? B,AABbĴA^B@@^BphrAWC>aAŽB`A@A?B@=rBBBKUBBKUBտAKUBt?LBE;BpA@A?B*@kB)CB)CB)C`ACy?:B *CA@A?KBrlA:@B$CA8BC`BC'A CTM??BCA@A?yBB=BBxtCPHv?!CxBA@@A=B:@0B`(CZNB&C(B&CB-IA2BXk?]B#C A@@A?>B@9H"CO/2BC/2BB/2BFBȋ`CN{?A_!Cn?践BA@@A?NC@b+C)qC)C(qC!C(qCA(qC??CqkC@@A?[3B(AGBCbBC#&@ɣCCLBɣCU?ɢBQC@@A?:C.k@CICȤBICW5x?ZVBCPA@A?|A#A*BKuWC]!,B)WCA3AB-YBB?1,BWC`A@A?B}|$AA:CJA:C%A:C'MAu"C >AB3CpA@A?dBѣ@bBn[C%Bs[C+Bs[C +Bs[C`q?B[CA@A?Be@B:CB:CB:C"@:C)q?ǕB:CA@A? 6B@O~BAB9aBoABN%gBnABH:AgdCKw? NB ABA@A?/BN@BbC kBbC+BbCFK1BbCw?-BgC@@@A?JbBP@OBJCBJCaJAJCB"Cun?BfC@@A?5C1e@S1CCgV?C>CtV?Cx7(CtV?CaA4g5A/|?NCC?C@@A?BZ@{[BZC'BqC BqC%BqCzsk?โBbC@@A?~BV@#BDCSB@FBfCZ BBfCwBAfCM$BKB2w?!qBzgC0A@A7; C/b@lB*CKB*CW0C*Ce]B*Cu?{BV+C@A@A?A55A Bt.B'Bq .BB]_CB\_CTP?(rB-BPA@A%+C(P@hsCnjCyC8bC^7C8bC,A8bC0&|?C`C`A@A?hA#A5pB7B"pB6BEHA C+0B CmIE?d-qBBpA@A?|C^<@?wCۃCC܃C$C܃C?C"{?B{C&CA@A?(BD@WBCNBCV}BC,6BCĒo?CWBCA@A?-k-C<B>-CyABDg?5fB>CA@A?BGAHA C̒A! CNA" Cj A" C#?LA C@@@A?OYC@IC}CCC}CiC}CN$B}CC}?JC}C@@A?C@C˘AK Cq˘AACp˘AʰAg˘ARz?CWlA@@A?$B@&Bd B"Bx B5Bx B A/\Cp?BK$B@@A?B@NlBCUbB3C3}B3CZ@3CZY??nB,_C@@A?B5R@BWJCBC0BCqACm?TBiCA@A?B0A~AA[ AƠA_X@ȠA APC>ANAA@AYEB9`@;bB_;CaBg;C]Bg;CBBg;CQ8o?.B;C A@A?m C|*@BRTC-BRTCx(CRTCÏBRTCPv?BKYTC0A@A?7;CW@GCdA`HCA(*CA Av?QC|?vGC8A@A@A?4B6@gBeBB:BB:BACy?u@BiTCơBPTCCPTCOiBPTCas?B9SC@@AXC~@^CC{ԄCʒCxwCʒCA%Cm}?ACꍢC@@A?GTCS@RCJKCzC KCAB KChB fAz?IC7KCA@A?sC@áCpC C'pC8 C'pC9>Q(C'{?}CݓCA@A?z?Ct@ȽCC'gC{@CgC9CgC=@8C|?GDCGC A@A? A0A."BqcB"BPcBpA1CrB1CN>5 BB0A@A?ՠRCR@Rt:C-AB@zB;ARB; A1~B; AA=CUr?2BA@AAA?(Az$A|fBv-A99gB\-A@A>C,B>CE,?:fB)-APAAA?NB%A$aBvB+`BvB BvB%ABCv`?cBioB`AAA?ZBɇw@B'C&ΕBy'C/~#Cy'C9.By'Ct?lB^'CpAAA?NBÄ@BoCQBoC'AoCYCB.Bn?B qCAAA?B=A-eBvbC0&MBibCk'AhbC'#Bq8B@Z?ifBaCAAA?PBG@BJBf|BMB}3BMB$@IBcw?BB@AA?*C~@B*BBBUCBbBBqx?JQBB@@AA?jFBu3@BB@mA!X@A!X@;@a7C?5hAk@@AA?«B@!BĽ-AB'3A+C'3AǗB'3A`?OB[=A@AA?GMC}Q@X AC!Ag:C)A_\C)AB)A}?@C˿A@AA?a8Cї@6C, @D B @]e> B37C@ AA?BJ@ДBv$CBo$CU9Bn$C͚AdCW]?VB$CA AA?wB@BxC?QBxCaAxCܸBOB˪i?ձB.%CB CbBCC?B$C@A AA?8`AQ4AByBZByBJ@HކCVBHކCv?BBPA AA?o\B @QBuBHBԤuBy-BԤuB@4iqCXY?*oPBCuB`A AA?. B|LAɅBjBL~BjB[@C:ZBC;]?eB6BpA AA2BArBCBCOkAC SB\ƧBk?tBtCA AA?8A_?0A0jBvB5WBvBH?vB:OBqC(c?jBڕvB@0AA?ΝA2A3+BCqBC4AFCMmBFC.>2BC@@0AA02C+@l7C ;Cq3C;C,C;C@A@|?8C;;C@0AA?1JC|@wCZB]CZB}CZB]{BZBL{?uC[B@0AA?!fCᙜ@.1C/1CS0CO1CCO1CBO1C|?Rc1CY2C@0AA?A2A!-BVXC A0AA?C1BT.A\kBo2ClBq2CkAp2C$1B8Cn U? zjBo8C0A0AA?|[BFAVBNdCBLdCbLBLdCfALdCL?BZC@A0AA?RtBA߄A0C4A6C \A6C_{AЯB3 ?XWA CPA0AA?q2B=A$ BCCB@CtB@Cr@BkL?BC`A0AA?~B9@ɮB*CKRB*Cz)B*Cr@)C{?BCpA0AA?+B+@@2BְCwcBװCh2BװC!@\BXy?LBC@@AA?x~B MA]B_Cp\B_Cvj>A.BB]B6B.B\0?~`cBx_C@@@AA?& CU@CBCB CB@By?NCwB@@AA? C2@qBYBfBYB7CYBGBYB\u?yBJB@@AA?XB@vBB\xBB˖BBTAB=g?=wB^B@@AA?zCK@BBBB$BBaU5C"BB=VBBB}>{?4SBaCB@@AA?ZBw@ CxC C̬xCOB̬xC\ BYBy?T\ CxCA@AA?(C_@CCbCCcH1CCAC)|?ACm CA@AA?SB6 @PB)BB)BC)BQ.B)Buw?Bjg)B A@AA?BRdz@lBާC#BާCBާC0[AާC^x?PB5ާC0A@AA?QB<@щB>CB>CeB>C.?IA\-AEp?ЕB>C@A@AA?1C@ C;BC;BB;B0BbC||?ϡCNZ]AVUC@PAA?CM@BMCCBC_KCCҾBCz?BڋC@PAA?(Bq@[7BZ|CB |C/B |CA |CZw?B~|C@PAA?~B@#BBrB)BB)BQA'BYv?27BBAPAA? C@@tܵBpBB׿BmBB0ClBB@BmBBx?\B6BAPAA?v4B"A~13BU6Bz0Bj6B=1Ai6BmAaC=5L?nx3B7B APAA?B-3AB[CuBZC9h=0C vB0CsTH?v+BKC0APAA?,B@jC5B)C5BB5B-A/vaC{?^C5B@APAA?nByӮ@BBsBB\BB|BB{?B̅BPAPAA?z3%B2Aڏ6BuiB!B\iBA]iB&AXڄCFZ?H6BdB`APAA?peB.@B %BB %BB %B@B]Ce}?B %B@`AA?By@BxBBbBBbB7@C@x?%B]B@@`AA?$BaF@BCuB~C5A~C1BMB:s?B,C@`AA?/iCl@]*CB i*CB CB*AoCH|?p*CƬB@`AA?~A/AlSnB,?fCnBFfC BIB1BIB?+nB^fC@`AA?IAB#A=]A,C~ACBC-wJACp ?AQB@`AA?0KC@9VBnB(9BnBCnB BnBz?wBQBA`AA?;BAτAcWEAPnAVEAAVEA~ AVEA>`A/CAA`AA?{B%@kBbdCعBbdCABbdC92BABq? wBldC A`AA?B@BC_BCנBC=A⎝Cw{?vBk C0A`AA? XB/.A\Bx+CqB+C"B+C0ACo?B+C@A`AA?gB@_B̶BB˶BC˶B"B˶B[{?B^BPA`AA?0BaAPAxlAAlA.BlA'AlAXL?[ABjA?pAA?B( @QBBBBٍCB6j&BBv?<;BׁB@pAA?B%@*B^ o(B?K?B$)B@pAA?3Ab(AAzKCoAKC0/?KClA+;AK ?*QAVLC@pAA?^Br@OBlB4ZBlB EBlBMA)oCvo?>JBxFlB@pAA:BBa@$B2B>BY2B]BZ2B |@V`CUr?BLK2B@pAA?GAe$AAGC-AGCT@;%ABA=%A/>AFCApAA?LB@BbCBaC>BaCoAB֘v?TB*CApAAD Bf@bBk>CABj>Cp?Bj>CBgA|Cz?@QB8C ApAA?qBn@ }ABA=01BABAAAl?vABrtA0ApAAGLB4A5cQB-B]~:B-B8B-BT?iC*h?]{QBK)B@ApAA?|JBe(A@ZB?A!IB?AA2B?A@'DCro?ZB>A?AA?,.B)A)B\C5BXC!r@XCރB] B_7`?2BtC@AA?!B+@B~C*B~CB~CRA.C2q?ɠBC@@AA?xB@)B%A[B%A:A%A6BPC8!s?BCA@AA?~B8@yB=yBpB6yBB6yBB6yBGj?[zBWxB@AA?*%BT@kB@9BB89BB89B?NCĮt?B!B@AA?BE2AeAAiٲAA;;AAx@TIC_?AXA@AA?fB AMB1AxDB2A]mB2A'brB2Ap?&MB֔AAAA?+B$@=hB7uC B6uC6B6uCA:C3{?BpCAAA?B@uBCBCyBC5B0BZ؝C#>z?YBC AAA?=An@?B> @2A @IB @4B @[(l? BC?AAA? /By9A$BC_AqB ChA CBB/Cmm?)BwC?AA?cAj,AdBCE6WBC`@CGBpBCY?eBC@AA?2B9NJ@#CC*BCYBCXAMCK$}?|C̍C@@AA?*B @)BȢBBȢBfBȢB&BȢB#x?BBhB@AA?tB@BBѩBBdABB[dAwC&x?QB6B@AA?LAb AJB?XCp?CXC: = BS? Bu<]?yfWC@AA?_MBY!AA"C͔A,CɬkB,CA,CX?AbC@AA?B:@.+B"CvB"CB"COB"C;u?*BCAA?}\A)ABAC[AC'%ABFAB>RAC?AA?=BjkA]BXCBXC6AXCzEAcBK?BQC@AA?B=ABݪC=BݪC6A!ClB!Cfo?B֪C@@AA?B~@AaA~C ]ACQAC uACC?bA֤C@AA?@AWAxaiAoC;VAoCYD@oC,3@B>`AjAC@@A?YBAB4CB4C!A4CAZ%7"?VB4C@A?DBA"B{zB/fB/A/j~?كB/rp4@A?2B@B4C7B4CB4C`@4C/?VB4C@A?FAa2AB|B tB4CA C4CQ?1B@A?!AAFB4Ci*̶A4CAA?B=E@BC1zBCCCBC?BCAA?s,BAкB+k]58B(k]5 B(k]5'?4C?(B_]5AAkhA%AbAeB4C*QB4C6A%7cB%7K3[?BdB4C@@?A?=CM@pCiB ChBlBhBFAH4}Crz?ICPB@?AYBr @CCBC?KA"CC"CSo?TCC@?A?9zBZ@BĠC(eBàC,pBàCPA C i?p~BC@?A_oA$.AB:kCBGkCx8B^B%C^BD3? BkC@?A(ChC?ChC[ͮChC=A~zRBP?qC}hC A?A?B@WNB C A>CBB>C )B>CtB?B?C0A?A?Bw@CcCCcCBcCTA1Cw?CC@A?A?KB@ BCMYBCBC&@Cr6n?c;B CPA?A?½CQ@*BEAEBxDA+CxDAtBxDAvy?B^DA`A?A?Y B,ABQB'BJB({AS4CBS4CZ?(BBpA?A?9E Cy]@z$CQCCXC1BXC7BC;{?Lh$CCA?A?\BHZ@CBB.BBlDCGAd?CjC;CjC%ICjC7ZAjC|?K>CC@@A?sA@8B`9C؏4B29C*_BBwBB]ɹ>#>BbC@@A?4A ,A~B*ȤCqvBFȤCACBCk?T̃B2C@@A?4Bښ@CGOBCONB8BPNBB(zC u? CcCB@@A?_cBi@SGB_B~9B`BvB`B+ACx>?X?B3`BA@A? C@yBQ@;B\@=%C\@B\@x?CcB>CR}fA>CB-A cc?DBO>C@A@A?rB|@&DBxyB"^FB~tBuB~tBdlB~tBBPBBPBrVBqCA@@A?ؾ+C@@h2CQC5i-CQCR%CQCg@lFB|?1C/C A@@A?Bj@tBCMBCqLBCBFBqu? BƈC0A@@A?wGB!/}@ěB/yCMB0yCB0yCx*A0yC m?ByC@A@@A?h/Bw@BHsCBZUsC +BZUsC BfU}Bjk?ךB,xsCPA@@A?ĔCy@C彮CQCZCe*CZCOPBZCJ{?{C,®C`A@@A?SBͣ@FBRGC1BeGCĬBfGCKAfGCYq?h(BGCpA@@A"B@a&BCha BC~ȑBC/BCnACA@A?ɟ%B:ABBqCBC^~ACA*NBUA?A BKC A@A?noB@UBA:C7TB4:CF@B4:COAb@ws?1Bb\:C0A@A??AB;ē@॰B̓Cx߱B̓CzC̓CB̓Cst?B[BC@A@A?g\Cr@C0BCMHBN CMHBT:ARCft{?C_ZBPA@A?sCy6^BsC*AtCdWB̙BKS?Y^BȸC`A@A?B&[@pBbC[BbCjBbC@D;Bltw?4BbCpA@A?vB2@:B%ZdB3BgZdBmBhZdBLgAiZdBX?{W;BLeBA@A?dB듬@:wBqA]BqABqAAqAx?ݎBGAA@A?ɰBj`@2BŲ{CPB²{CB²{CyB²{Cq?2B̦{C@@@A?0B忑@E=CLB CLBTBLB 3B,SCv?C,QB@@A?VC 7AF4B@@A:BR@3B/kBBqkB,BqkB~P)AqkBݨk?EBlBA@A? Chy@uCAC>A C A@A?7ZC)@TCBXTCB[ZCB@B}?iTCzB0A@A?=TCz@5CNBh7CNB|lCNBSBNBSy}? 6C:ENB@A@A?B@ A|-CGAy-CƅBy-C0By-C+?OAy-CPA@A?Ct@۸CjA CKA/CJA@;A{]|?CA`A@A?=BXļ@FBԂVCPB݂VCnB݂VCAi Bem?BVCpA@A?Bb@n.QB@IBN@qBP@AR@g?x{QB'Z@A@A?|B7)AhmBuzlC6_BkzlC#MAjzlC+BaBEkf?lB^UlCA@A?u{Bm@BDC_BBC-jOBBCACWw?ܲBVyC@@@A?KJC_N@0CKgC&)C6gC5eC6gC=pB6gC|?1CXfC@@A?`#Cz@p5C[,,C+CY+CCY+CAC.{?T4C,x+C@@A?mB@; BR5CBCƕtBCyAC0?W BC@@A?Bp@xC2|BjB |B3B |B@%sCMx?tCC}B@@A?A>'AfuABBABk.ABhC BBhCoZ>hA+DCA@A?#8C@t CvB_1CҕBUbCѕB)BѕB{? CBA@A?oF\C4@ZAhBA@A?9B.JA1BWNC!BbNC.AbNC`A A"S?(2BLNCA@A?B'0@%BCBCBCnBC:p?h%BC@@@A?1)C@?}@CB1J7C6 BÆC6 B BCC{?ACKB@@A?VB,)AG C`jBC nBhA!nBB[Co? CUpB@@AސC˔@(C{CNC{C6C{C#kB{Cx~?SC{C@@A?kB^n@+BB[BBgNBBJBL{Cx?B?B@@A?#ŝA=AYiB~CcB~C;N B BeyB B ?thB}CA@AVC@őiCסoCfCӡoCBCӡoC*BJnB˕}?FiC8oCA@A?Bߦ@TBxCSBxCCxCAxCt?BRC A@A?sB9A=:B=C)V@hB@eB!@~B!@DA@x?&B @PA@A?B @B%A{BABAIAANz?B;NA`A@A?c\B@ xFBby]C>B_y]CNU5B_y]Cm@z%B;W? GBj]CpA@A?D)B((AD^B]C6B]C8}@]CόB.CQl?߸B#qCA@A?fBUO@BVdEC BFdECǮBFdEC.YBFdECg?.B,EC@AA CД@CQ5CƅC5CaTC5ClB5Cy:~?-Cv5C@@AA?ᚐBz@jB1CWBFCBC@AA?wBA@:A\C AAA?iV CAVC^CCF^CD8CF^CpYBF^Cz?SCy]C0AAA? oBWAmAz A,ABA-eBBATABA^;?HAA@AAA?יBLw@5nBW CDBW CCW C#DBW CRw?TB, CPAAA?vsB+u@IBevB]CB5vBB6vBA$AkAEPC06?@ByAAAA?B$ȥ@lBqBzBcB CcBY%BcBw?7!BgBAAA?9-C^I@CA|C+ A3B/ ApBOCR{?M7C/iA AAA?@NA>JAB{jB\BYB@.|CYz(B.|C?BB0AAA?^B/@UBPnCԥBPnC BPnCZ\~A^BiBU\r??B/1nC@AAA?xA ABՙCBՙCANVBb]BNVB9>B$CPAAAKAA(AA%A=B`AAA?LOUBN-HA#B C&B CEVB C)iA Cd^?F$B CpAAA?VB˸@L*B:CB:CmfB:CKA:Cb??*B>:CAAA?C @7C87CIB87Ct"C87C<B87CDX~?3C7C@@ AA?TB8@K"CCC!CśB!C BB*Cz?&"CΜC@ AA?sB>@$B4CB4C CB4C*A??d?:Bwr4C@ AA?oBO՚@ƳB@!BX@O&BX@=AZ@prr?/Bq@@ AA?XiB@B/CB/C9B/C#A/C37?B//C@ AA?@C4@+B}B|B|BY'C|BD7B|BBv?rB BA AA?BW˽@B]B/BiBCiB:(BiBRu?BxBA AA?C,@‡BxsCBvsC 1CvsCBvsC5Ty?^BZvsC A AAtA$3A7BB=CHBB=Cl@zC&BzC?EBF>C0A AA?C@0AA? C @BCB䒚CMC䒚C CB䒚C@w?BXC@@0AA?3MA9Z4A>Ac,CRJA~,C4AXCV"BXCU>eAіC@0AA?^1C @\CdB+CzdB1?C{dB B{dB>@{?C}.B@0AA?09B'A[B@0AA?”1Cx@ZC^By^\C^^BQrC^^BQرBCy}?PZCZB@0AAC@8C`CCz[C?q0Cz[C*Bz[C){?gCYCA0AA?C@JB?CMBACCCACBAC] y?BCCA0AA?B|@BBBBBBVACpw?BB A0AA?As!&A rAȅrCArC@zB׎BzBI>6A[rC0A0AA?lA!A*BC,,CIBK,,C]%B&C3A A6B_BKg8B_BAWCkBWC^>Uj8BB@@AA?(Cog@YCM>CC?CEC?C\wB?C{?QCLC@@AA?UnA>6AnACFA9ՀCA?TBwOATB>AC@@AAMCܾ@CȞCCɞCCɞCKAp C{?@CɞC@@AA?-B8@!B03C.B/&3C(B/&3Cӗn4C>@C(CcC'CcCF>CcCAcC9v}?(CHcC A@AA?2A/Ae.BVB^'BVBjA՗C,uB՗C>.BmB0A@AA?;BS@WBfCBfCBfC0z;@fCx?{B]C@A@AA?BE@;BB_B_B`B C`BH B`B|?_B-tBPA@AA?,8Bd@B̥Cj>uBΥCBΥCcBΥCv?6MBC`A@AA?IH-BM5A" BڱBUB߱BVT!B߱B@ڱB a?jB•B@PAA?CW0z?,BbiC@APAA?煈B@hB>Bo>bBq>>cBs>nFf?87BA>PAPAA?8BB5ɫ@{BCRBCPBCDACض|?LB{C@`AA?v8Bv@BHBgBAB;BABun@ABDy?BS,B@@`AAB @C=BC=BsB=B($B@mcCy?CCA#>CS@Cb]AC >qAhC@`AA?VzC @lBtCjBtCACtC7BtC x?yvBxCA`AA?2QBo@A AU|CyjAI|C3AH|CJ+A"Bi>AANCA`AA?!Bf/AOGB%CVC]-C4"A]-C$~?.C1h-C0A`AA? AA58BCC|"BCCC]ABYBBS[*?'8B7C@A`AA?HB}MAjEBC BCACڦRAɅC@pAA?:vB@1TYBydC QBydCIBydCYzBydC:c?YBtdC@pAA?Brb@"uBz:CkBz:CjBz:C.>^@z2f?tB<:C@pAA?BI@B՞AzBԞAiLBԞAGAGCfr?kB%wAApAA?`BA}RBG@HBG@UBG@9o[@G@k?mQBbq@ApAA?TuwBI3"A庆Bg`CؓuBj`CE\Bj`Cq@2Bp?B!`C ApAA?ABF\@BA BABAAqECglx?vB|A0ApAA? B>@.laBWCNBWCBWC>PBWCDw?aBaC?AA?C]BkA%B#\BB\BPA\BB wCba?*B*B@@AA?{BJ@ JB@CBBB@CB@C:B@C%k?JB$AC@AA?B@0 C毊CC毊CB毊Cu}BBܳz?5 CC@AA3JBAB!OCAPB$OCAB$OC~EA$OC AU?7Bv&OC@AA?B@ĖBgC:'BeCޡBeC%AdCw?pBC@AA?cB u@"BBBBBBn'BBv7{?bBBAAA?`B7A/(A;B @uB}oAuBH?vBw> ATBAAA?͙BX@AB BIB$ B&B$ BKKB$ B}z?B2B?AA?iB@2\BMBRB1BC1BӖB1B/9t?[BDB@AA?0Bƍ@[BBT{C2֣BT{CuBT{CAT{Coz?BB0L{C@@AA?IBs@FI=BSޢBZ3BOޢB BOޢBBOޢBAp?=BѢB@AA?8BK'AYBYCBBYCA BB BEt?;BjYC@AA?҈B2@ByBByBKByBj0?yB+^t?"B aB@AA?C%B_Ay-BZ1C.B\1CpA\1C@bB-9W?-BB6C@AA?+BO1A^@&IC@ICAICTNOAICb`> @bICAAA?j+AAA&B˿FB;BFB@AFBAeCS?C&B'FB?AA?B<@]ԯBaJABxaJA+BzaJAAaJA%x?`~BaIA@AA?oR'B_;AA&B/A &BwB &B:|MA&B})?Aԍ&B@@AA? B@lyBBIBBVBBBBBwx?_B@B@AA?.'AA93BsB;!BZBAAC];GBC;?3Bk=B@AA?|BA@BJ[BBg[B]Bg[B]3An[BRx?B\B@@A?5A arA4@B@BJ?C@CxJ=@B@A?B@N[BBXuRBBrrCB8BB8}?{TBB@AEGAbAP\ACIAC5@BіAB>>BC@A?6JCeAJ-&CB&CBUEuCBH=BB?&CBAA?B@BBBB3BB AB?BBAA?&Cc@R!BB<+BB"]CBEBB?BB AA~BD@pWBBzBBqBBAB>?DBB0AA?B DAؐBCBCBCbAC[?ƱBC@AA?&BlAdsBC uBCABvBBN?@tBCPAA?BH)+ACBC.BC'BCAB=??BC`AA?+sA*AaA B]A B0SACcACx >f`A BpAA?kC4S@"CCJBC&CC0"BC?kCCAA?\By'A8vBChBC BCP9BC?uvBCAA?⌠AiTAABB|AB@CBC# ?BB@@?A?oBtAB,B Bx+BvTGBx+BAx+B7I0?1BT)B@?A?fBio@BOuCCͿBKOuC CKOuCL4BLOuC+u?.BXuC@?A~B+A3dBMB1B8B?(ΐCB'ΐCIR>[B)B@?A?|ltB@3Bw4FB+BCDBC!Bm!+C!BA!Bh;z?sCMB@A?A?8B]@>BgC{IBqC CqChAqCx?BrCPA?AxAo2AfGBB3HBB0aAC)BCS&?`JIB+B`A?ANBL@'BC2BCCCڞBC5u?āB1hCpA?A?sAI AɼA :ByA :BJc@.bCA.bCG>!A:BA?A?vAI@A4)0BAH/&BA7AA`BX7MCQO?0BTAA?A? VkBy@&B$fB]eB(fBkVB(fBg@ٕCq?TBqB@@@A?&Biw@+BqC|AlqC:BlqC"{BlqCF?[A>oC@@A?0COK@WC_GCcNCGCX C GCBAw|?*`YCCGC@@A?zEB* A@BSTC-wBBSTCwwABSTC"P9BMB'H?7BRTC@@A?tbB] @ކB3CB 3C:jpB 3C#݄@CK^?-4B 3C@@A?B@O&B CB&C9B&C@JCk?VBCA@A?[B-y@U*B$mX@mBivX@GrBjvX@a@a7C1xh?mBJz@A@A?!B^SAXƀA$C;C}A<%Cp@<%C@AwJ C>sA"C A@A?m4B'@`B %CC B %CKB %C&@ %CNe?౉B$C0A@A?h"Cȭ@'d(C BQ)C BC BiAyWC^|? (CB@A@A?ƨBC@@;B}4BzA|CdWv?ȕBBA@A?.oBe@0BCBCdBC@ACl?o0BC@@@@A?FBe{@B~CB ~C=C ~C($B ~Ce t?ʾB<C@@@A?iB0@BxCBC3BC=3BC O?A캚BCBC#JA$ BAB$ BNH?B C A@@A?gkBT@B\/0CdB^/0C9 A^/0C\BCr?B[90C0A@@A|xB!@PBu2C%B'CL@'CBCQp?BC@A@@A?B~@B 4CB#4C&B#4CXnA#4CuQp?^YB:4CPA@@A8BK8AWǫACHAuC@uC oAmBC]>LAcC`A@@A?)BFo'ADBQCP?BLC/ALCqA,BuC?ZEB ΎCpA@@A?JA.$A6A4TC7ӘA3TC^B@3TC|AB>uASCA@@AwA(AARzCH~ARzCܭOARzCE=@IBlX>EAzCA@@AB@&RB1yBB1yBB1yBT@1yB#z?-B%yB@@@A?C'Cܜ@pC}gB#CsgB->CsgB(p[BsgB? z?iC0.fB@@A?|bB@7|BxCZioBjCbBjCA]B<-P?x{BZC@@A?EC@ \ CC8CCu~CCyBCz?D C C@@A?Z1CÍ@MCOC+EC4C1|C4Cq2BiC|?MC!C@@A?OCoY@̒BBOBB8V6CB"BBv?oBBA@A?bB6@NnBpBiBBdBB_ABg?qnB1BA@A?NB@MBoCUBjCaBjCBCQr?=BѡC A@A?XCR\@Zy.C+YC/C+YC|C+YCeB+YC|?c.CSYC0A@A?7B~@0 BC+B'CӉUB'CGBΨCWqs?BC@A@A?бBТ@O^BB S_BiB)BhBHOBhBak?^BPBPA@A?Bg@ԪBMBBMBh CMB^AMB$z?VBNB`A@A?ؽ B0AvdB\CM[BhC%\@hCCB4ћCNB?reBXCpA@A?HB{AGAICLAIC4FBICAIC[:?0AICA@A?XQBV@BBMCBMCo=BMCLBMC;y?YBMCA@A?AY&Af(B/0C4B.0CGA.0CNEAkCR?(B0C@@@A?teC^@õCSCCC CC@BC~?LC C@@AtcCr@1C5ݣC89(CnCCnCBnCE|?~)2CC@@A?B@4C%YCC>KxCC>JfAC>S}?XCF> A@A?]CI^@Ƽ/CCp=1CC]ECCBCy}?/CC0A@A?ziBT ABP B B7JB:B;QB:BB[B@A@A?BB@]dBtqC[2eBYwqCBYwqC BYwqCQll?!&eBqCPA@A?Q6BKAFMBCKBCAC8A+CY?MBC`A@A?gBAAJBUԃCG|BPԃCͩBPԃCb/$APԃCTi?5gB+ƒCpA@A?Y[ZB`@bAmiA߀AniAwBniAJ7BniA)6?QAwnAA@A?CFA)2ABC@BCPACBBCBqB[?BnC@@@A?\BO@_C B~~CU B˦BW B*AjVC@w?+ Cu B@@A?i1BBA1#B|>CLB+X>CA+X>CA%AL6+?-#B>C@@A?\ BX?)A/BKGB(B!GB؝@!GBBGeC 6-?_,BCB@@A?B!@w$sBBxlBB>BBTAB 7i? tBB@@A?G`B @#B?=4B?YB?ɁA5Cg[?{?B9Ʒ?A@A?CXҝ@`CllB0`ColBQColB|iBplB}?J`CvBA@A?'KC~J@TCu1?VC0?BBbB@AACw@J0 CᔜCoCޔC/CޔCAݔCs{?< CڈC@AA?ĭBr@dBYAL?BAINBA/@SCEABAAA?8C@UC*~ C:Cs CiWCs C?Bs CLF|?BC$m CAAA?o#Cl@ECCtC~C;*C~CA~C{?sC~C AAA?mBF:AK BwRC BpRCy@mRC>B3AD%?!B~RC0AAA?xBZ!A^CBI@CX~BE@Ch\CBF@C3nANOAg?"B@C@AAA?X Bp@2BBUMBBBBtBBtY?HBABPAAA?>cByKA=B'C+?5Bz'C ZB{'C_A{'C87a?X=BC`AAA?i@B0AZB9?hB?Aɀ4CLBɀ4CQe?]B>pAAAȷA_A\1BCʔ!BC˫*A8C?LB8C>?1BC@ AA?UC~A VCrCNUCrCPCrC@B|?rTCiC@@ AA$BNASCAIB@ AA?QBvB@l/C C' 0C CA CTCHC[x?,0C; C@ AA?fBFF@QBw;BhB};BB};B|A{;B̒BRB@ AA?B-@B}\C"Bv\C+Bv\CJ,AX!B&x?'BL\C@ AA?[C: @B [5CBY5CJ'CY5C-KBY5C2y?BX5CA AAꞝB@ֈBCBC61 BC!B Cٲt? @BOCA AA?oVBA 2BCZ2BqC2BqCP= CDU?R1B֝C A AA?r0B \AꫂAJܡAfAݡA2AݡAڒ@ݡA3>eAפA0A AA?tBs Ac&BMICBLICЧeBLICALICK?3%BIC@A AA?BU8@ dBxOB [BxOBBxOBAxOBm?VdBOBPA AA?B;ӵ@\B.uCpB4uCyB4uCiA4uCuu?B1C`A AA?ȟBnFA\B#B̑B#BXB$BA`UCd*s?YBB@0AA?B@*B0oC+BNoCBNoC$RANoC U?y)B\oC@@0AA? C~@/C&gC:1CgCeܤBgC瘽B`NB.{?K0CgC@0AA?JBY@*BpB>BBǎBBUBC4v?{B!B@0AA?1C@/>CbLCaR?CEC2 CECdA.C] }?>CE?C@0AA?mB\!AeOBCOB|C k?B|Cͬ@B|W?OB |C@0AA?1Cٌ@&CC1Y'C]CC\CADCg|?c&C\CA0AA?%C@dSBCmuBC&QXCC,BC9{?BfCA0AA??C@C+C@C)CMB)CSBRC|?ǒCҚC A0AA?B@ͬ^BۮB$VBЮBnBЮBbAЮBYa? I_BB0A0AA?Bv@B7CĩB7C'B7C+B,BJAr?BQ1C@A0AA?!A3DAI`B=ChNTB=Cع?=CNBCܷ[?`BCPA0AAȱBWU@FBCBCCBCў@CWy?lBC`A0AA?GGB}/A3vB"C#bB"CB"CAC p?{vB "C?@AA?:C@@|'CoB(CnBüBnBBoC{?((CČnB@@AA?xBrA}>B|C?BΒCvdBΒCAΒC-X?n?B C@@@AAе0B&A:B1?CU;B?CA?C^AX;Ai>?D:Br?C@@AA?Bc@BBBB(BB~A<0C/u?BB@@AAB@|\BkCB$kCB$kC@4kCw?BkC@@AA?MB;I@B>A&B>AvB>A ?JCt?ϱB3A@@AA?Cź@/1C5'C'C5'C3ZB5'C5BӚCu|? CS'CA@AA?ACi@CxCsCxCPCxC^@C0`|?CCA@AA?p/B}@ݤBBTBsBzBsBJBqBr?BpB A@AA?ƕB0+@eBsCEQB}C`B}CA?]CVm?щBnC0A@AALB@MFB=BB=B-B=BA=B}z?fB,>B@A@AA?7 A2A4B#ADBAgUAMC-TBMCe&?25BWzAPA@AA?zB+iA-B#CňB#CB#CF@#CFw?hBR)C@PAA? Cˇ@ CICu. CqICؿ CqIC@A;{? C IC@@PAA?t^B@XWB zBWBRcBCRcBv(BRcBn?VBB@PAA?"JB@lBjC3BdCpBdC7,@MBUm?BB |C@PAA?]C@!B龮CgB뾮C#B뾮C?龮C{?pBŮC@PAA?AD-ABء0CpBϡ0CAPC2=BPC?BB~0C@PAA?zB\ABFCYBFCCFC(ؐBFCs?B8CAPAA?3?_B%A6AB͏B xB͏B B͏B(A{C8y^?,B#BAPAA?;(Bz@BXA(B_AB_A@NSCPu?aBcA APAA?_B@d%BtC+BtCBtC6ׄAہB|?S5BtC0APAA?A!A2OBėC6BėC#KAB}iBB":??&OBC@APAA?!B`A0;BjnC)BjnC@AjnC~AiBZ?R;BknC@`AA?qmB2I@KBTMCeJBGMC]BFMC)@EMCd?.KB;MC@@`AA?} C<@,C_GBCiGBCgGB2AYGB{?8CHB@`AA?OWB6@VBHASBHA#BHA?A)RC^_?5WBA@`AA?B%>@9 BHC@1B7CB7CKB7Cb? BiC@`AA? 7A;A :BsC-3BsCOABgBB?9BXvC@`AA?B@;UBCK\BC~BCΘACv?kBSCA`AA?&BD5@'B-'/C?B2'/CZVB2'/C(ACz?Bn7/CA`AA?3LBAuBӂ C?=Bւ CkgAԂ CFYBkCh?LB C A`AA?Bא@Y`B|,CAB|,CȗC|,CB|,CO?y? RBd,C0A`AA?{BAnBCBCAC&sB]ئCx?BC?pAA?kBu&*AߝB%=CB%=CB%=C.9dA&=C"o?@B=C@@pAA?'B@FnBӟC\dBӟC~BӟC BӟCRm?HnBΟC@pAA?B @BBmDB8~BWDB["CWDBQ(BWDBr?3BB@pAA?>B:A$ߍB8@qB8@zA8@NB%6CEc?|B5@@pAA?;CB"A5ڦAr}CeAd}CW8Bd}CfIAd}C-?gA}C@pAA?cB@ȀB3DC|sB?DC%B>DC A>DCwv?BECApAA?B@"SB.GaC2B3GaCӣB3GaC{A5BRuz?mBUWaCApAA?hA HABzCnBzC+ACBCZO?B4C ApAA?BPAEGB sB6B sBB sB,AB sB0s?GBVsB?AA?B$*A|FA5-C>AG-Cs AG-CQ?ݰC兤>XHA[-C@AA?EB@B'AUB\A^C\AB^AGy?BȅA@@AA?=B@BzE CYB|E C%B|E C@"Cas?>xBL C@AA?uDjB A&B3KBB$KB#B$KBXA$KB+h?fq&BB@AA?1CB{ AсBdzCھqBezCAezCܑA܍B0 o?BzC@AA?NA*AiA%CQACb@CJ@ WCn8>|hAsuC@AA?jSB&͹@0BwCBwC)BwC @B|?BtCAAA?UFBL4AB\BhB\Bn?\B aBp=kC e? 8BqL\B?AA?jBKAaBABA"BA+n@$MCv?#DBA@AA?T;BDd A|AQțCe)AGțCDBGțCvAFțCȑL?FAC@@AA?ߵB1@HBUBBSB!BSBc@XBz?B[B@AA?aB9@}sBC:WBCBCOACp?sBC@AA?SBÔ@IBCCFBCCXBCCcACNz?P`BB=C@AA?yBAqBC BCBC6BC`k?BC?AA?Az`"Af\:A*;RC.)A:RCſ@:RCo@A?>Ol9ApQC@AA?6mB|AGB @u 6Bʏ@Bˏ@ߢA͏@uep?E HBs@@@AA?8HCA@CC6BCCC#,AC)~?CC@@B?RlBtQ@QC3CABXBV@>CCdBVB4C?|CAB+BAC6'Ch6Bg6L,B4C?OC6 AB?B%A"hB3CnjB3C'B3C0h[B3C! ?qiB3C0AB?[B3u^A^A6`A6 /B6@A6?۴A6@AB?*Ci@BёBCJfvCCaCC?BCPAB Ao]AV.BK65-BK6Ȣ@4Cn HB4C^4?/BRqK6pAB? AЄLA"A4CA4C@:*7^A9*7>ӭA4CAB?y4Bư@B4C2B4C6B4C%A4C?B4C@@?B?SBky@B ȊBgB5jB 7A5yCB5yC$d?1Ba B@?Bü1CtE@lBJCBTC?tCTCCTCw?[BYC@?B?C-@uB+UCՀB4CC4C,jB4CMy? BtC@?B?C@eBaC BjaC CjaCJlXBiaC)y?#BFaC@?B?>+.C[{@ҜDCC ?CCCCB CO}?!xDCCA?B?-AICpA?B?m^B AB#C:B#CA#C)B؎BKq?5BCA?B?[2B'AqBB+C/BB+CwBB+C@B+C)O?B$+C@@@B?3dC+=@#dCвCG;XC2ƲC@lC2ƲC-A2ƲC}? dCᾲC@@B?|CR@3B~Ci`Bn~C "Cm~C[9Bl~C~w?B~C@@B?AB.&Ac- B{C%B:éC4@tCF!BtC[>& B:C@@B?]BNT@CVBx(BVBdBVBTHAUC5z?bC\B@@B?aBq AvMBDC BxCBxCBC>_?ۅBCA@B?.B8A"BHRC=xB RC* @uASB^A9?B0QCA@B?3B@aB/cC"TB4cC!z8B4cCB̌Bht?O BVsC A@B?&B@ XBM+BKZB'BB'BONA'Bmd?YB8B0A@B?(B AA5BB5BfBuBfBbBfB`[?35B5B@A@B?YBp[@JB4CfB>CB>Ce: A\Bx?ViB;CPA@B?CCh@zCBCB?%CBw BB!{?C.'B`A@B?yBlW@kBGCBHCyBHC!AHC.r?"ћB0XCpA@B?WAkAb}AneCפAjeC C@ieCuAAFB#>AqeCA@B?\}_B\A $nB$xCdRB"xCJB"xCz?J2B˙l?mBxC@@@@B?l`B2%@BCB~CB~C6B~CSN?B }C@@@B?BGS@'~BC:BbCBbCOAbCg?BC@@@B?.BAq@VB]B B~BpB}BK@xBp?BwKB@@@B?/B*A==B_Bom8B_BoA_BjACqC?o=ByB@@@B7BBR@|B}uBIwB}uBB}uB)B}uB}j?:BrBA@@B?Br@BـC>BـCăBـC[rAngBm?BƳCA@@B?aBgA]B.CDBͿ.C/BͿ.C@Ϳ.C6? B.C A@@BBq@LϖBݲBLɗBYײBBYײB|BYײBhr?ǃBòB0A@@B?+B^;@]iC/ϣCpCCBCXxAZCy?CFC@A@@B?mBd@\MBB+xBBޫBBABao?@BPRBPA@@B?rB|7@vBCBCBCBC iY?BbC`A@@B#|AB7A+BB^oBB7AC+BC@L?_BBpA@@B?}kBT@&B`(AB`(A.B`(A B`(ASj?B((AA@@B?iB @iBLлAwBUлA'BUлAA zKC`x?rBwA@@@B?XB@yBC:BC,UBCϒAC: r?eBtC@@B?BRE@>BAթCBZҩClBZҩCç@C{if?BfȩC@@B?B@CMWCgC]WCyixB]WCBC-Fy?CٓC@@B?R`B2P@'B {CHiB${C=A${C(BFB~]j?_Bn{C@@B?ЬAC@@@B?C;d@q$C C@CC'CC?֪ABZ{?#C6ŎC@@B?Cgr@ CyCXCyCCyC?yCL{? C/_C@@B?xB>@$ CC(CƣCBƣCgˋBBy?  CC@@B?BA@eC*vC2C(vCMvB(vC>BNvB w?nCvC@@B?\B@^BFbCBQbCICQbCakBQbC?s?BLCA@B?B@@hBC@A@B?{~BT@WbB;2CzB52C%'B52C BYCbo?.B2CPA@B?pBK@>BChBCyBC6IBCko?"BC`A@B?+BkS3AdVB#&BrvMB&&B鮳A&&B=ATC[?&dVB+2BpA@B?BDj@NB%B:B(B5B(BٍHB(BMr?WNBBA@B?LB(A!eB$B(^PB$B-B$B A#!]Co?dBj$B@@@B?wvC}@ C C[g C CM4C C* A CI{?9C C@@B?-/Ce@/CC C51C C CC Cqf3B CA|?LCc C@@B?%By6@BCC/BCCLBCC-tAM$Cu?FBKC@@B?B@CCCC;BCB;:Bw?nCC@@B?5C@(CfAaCfA)\CfAiBfA7z?%%CAA@B? C@]'BnC5BnCCCnCBnC(t?B;CA@B?)BD@:B{?C@`tC@@@B?R:Cn}@:CíCD5CǭCF:CǭCR@ͭC?|?6;C{C@@B?Y-xB1@MB,B IBB[TBBD-@B{U?!$LBqHB@@B?HBqB@hBAB@Ab.BAAiB<=Cko?I%BqA@@B?J"C@CdCFYCWC9CWC]BWCAy?C?C@@B& Cq@BB#B(BC(B$A'BExy?KBbBA@B?ECwv@HCS?EJC@?C@?B@?/~?guIC?A@BfBs @&60BQB31BSBcC~SBfB~SBee?71B?&SB A@B?$BϥANCiG?BtC@AB?C@gUBCCbQBCC$CCC1BCC?>y?fBCC@@AB?CZC@XC9CC|CVC9CC[C9CC܆@9CC_}? XCCC@AB?r>B@TBm(CXQTBcm(CVBcm(CTIiBcm(CDNc?UB'C@AB?A4Cd@CCCCJBCCP BC>`{?CC@AB?֗B@aB*C)B*CdB*C!aB|Clt?RB0C@ABlcCT@> C+ǻB4"CoBLCoBbA\C(|?8a!C BAAB?=Ce6@uB¬C@B>C3~C>CLC>CJ{?pPB CAAB?ӢB@BBnB4B@B4B&@+B˅x?BB AABOBABABtA45BpA^@PCq?BUA0AABaAS9A_AޚC2AʚC?A@ʚCOWAe͡C*>.d~BNO?1B/sCPAAB?A(AJ=B C B C2A COʺA۞CV>?B C`AAB?/A.AŧAѸHCAŸHC] ? ƥAhA"ƥAK >ߨAޏHCpAAB?;.B/+A>ZoBdAK[B8dAw+A8dAkAKBC7l?5oBFScA@AB?:C*ȵ@.C<CdC8C)VC8C_R}B8CG>{?C C@@AB?8%C(h@!BDCZBPC)&CPC1BOCx?MBC@AB?t BNAϨBsCǭB{C@ABBBL? BC@AB?@B7AuB.iCdwB.iCA@/TBn5AHC0AAB?H/BD@ϠBHB BYBLBYBp?gB%Ak?yBFSB@AAB? C@`BZſBVBWſBmCWſB ?BWſB{?BBPAAB? B*>A4iB _C둂B _C @ ,BґB,B b?ЧBj_C`AAB?~UdB[k@BHCwBHCZBHCUB`Cu?"̝B<C@ AB?GB@nB<6SBB5SBtB5SBAAzhC]j?,BQB@@ AB?CDR@,&CC'CCACCzAB%<|?%CC@ AB?QCl@ CeCCveC;6/CveC49BveC%{?C8eC@ AB?>CǍ@ 2C}B3C}BCC}BA}B}?D3C}B@ AB?EB2@!B:XBBCYBy2eBDYB&fJAPljCh?yBYB@ AB?,BUEAaBYBјBQB@CBCe[?B-BA AB?F"B:^A-BR6 BB/6 BA06 B5 A \C.?ʦBBA AB? XC@CHjC#CHjC͹B HjC4@[ YBIw{?CTjC A AB?42B0)A£BgCCFBWCC=w@5{AQBg{AA\?BCC0A AB?RB@Bf)CBf)CyCf)CʘfBf)Cy?B+C@A ABB@BB"ҚBB BB)BBz?[֤BBPA AB?(:BSGAeBCmKBC6AC#ArCb?eB[C`A AB?@(AF1A*BWXCqBMXC$@NXC_B2)B:T?+BXC@0AB?BxA[ACv`A?C6A?C RAC->AC@@0AB?b5B@]vBnC+*B CBC>١C?Nu?BC@0AB?>9C1@ C݌(Co CH(CcCH(C\BH(C{?] CI(C@0AB?vBA@:DBՈCdCBCҒBClBCi?AB@C@0AB?CbBu>A28BC8BCCBC-@CW?97B.AaCA0AB?;C"Ø@ B[ͭCBYͭC7CYͭCBZͭCX{?;B`ȭCA0AB?B@ zB$xCpB xCB!xCA"xCЈh?zBixC A0AB?]ҚBJ@/nB?Bu?\Bx? xB#5CQu?QB?0A0AB?&l|BKALB^CB^CtWB^CIA^Ct?cBvC@A0AB?Bd@UB6CB6CB6C@hc=@|bz?J[B`6CPA0AB?raBWA݋B0]B B0]BIA0]B-GALkC%M?VBN\]B?@AB?JB@eBBtBeBLBeBEQ6AeىC6Mp?BvB@@AB?1C@BCBC@0CCBCy?iBC@@@AB?rBL`A[PB;CB CvB CԽ8B%,Bv?4BC@@AB?\BR,@KB&(C*LB(C|ٵB(CΙB(C gh?t"KBFC@@AB?Bk@>B buBBauB BauBeFAXqCy?L'BuB@@ABlB*@cB wBBwB xBwB @ݖCz?pBewC!q?< BB@PAB?KB@CoKCChKCuBhKC2*mB8A^t{? CXKC@PAB?)BA,:B` C5BL C AL CAC(C?\:B s C@PAB?h|eBd AeHBACr@BFC9BFC?BR?v HBϗC@PAB?ӋB@BC8 BCBC1DBCkY?mBњCAPAB?&C@F9C C. CCCC@ACC}?#CCAPAB?%B$dDANB^xBABxBYAxBArCa?OOBxB APAB?C ABl7C*Bl7Cx7Cl7C֜Bl7C+|??B67C0APAB?B@BLCDBLC^RBLC4@BAx?sBLC@`AB?~BjA@3JBݭC(DBޭCCVuBޭCrCAޭCM]?JBmC@@`AB?ToVCL.@4C0ݧCI-C0ݧCTzC0ݧC%#B1ݧCB&}?4C{ާC@`AB?T}BAjB˅CaB˅CD]B˅Cv?:,Ba?jBbʅC@`AB?I"B!1AsBiuBrjBXuBe AWuBGBzC7T?-'tB6B@`AB?B@BMBmBMBXBMBػAyӒCs?B43B@`AB?LyBB?@5UB CTrJB C/C C4 B Cv?eUBs CA`AB B>A`(BCiBCWACLJAOCvR?'BCA`AB?DJBpoAFBqn>B&0Bn>B6:Bn>B!@n>B7Pe?FB>B A`AB?gB` A^B{MB`ByMBL-ByMBA@_SCŏy?BkBB?pAB?BiCAȶCBi;BB*vBB`&BC'x?C/B@pABB9F@B CjBC%BC-kAC :z?NB)C@@pAB?J)B2@`mB%CcB&CB%C6{B%C/B<:AΉB<:Aho?OBm6A@@AB?g Bo@NAZB]ZA= BZAhAZAGAQkHCBD?BA@AB?A&AAx C Ax CB{@x C4AhCW3?A C@AB?q!B/5ALBBDD5BB׿ABA셃C'6[?LBm&B@AB?NAA"PA&C`A'&C7?C8AC>ҕAL&C@AB?; B*AA]EB+%QC[5B+%QClhA+%QCiZAQ)A^?]FB%QCAB?=B@LBCvBCBCAC?kBC?ABrB6ABaC%BaCgJBaC_A6B^r?dUB'aC@AB?MBA{"goBC@B?B{AoABjAB*@BACЊ>RGAB@B? aCA@/CB?r.CBӉCBiBB?6.CBAB?>C@j(CB)CBBB(7BC?X)CBAB?6'BF@b'CC(CCPBCCB?hP'CC AB?&BAErQBBRBB6ABlBCȷR?QBB0AB?A(8OA3rACTsACt ABd4AB4>"vAC@AB?ȢBA&j;BC8r:BC8BCBC?Jg9BCPAB?-zA3AACsACAB )BBd>AC`AB?MBz@օBCj&BC6kBC`&bAC?BCpAB?BI@qCBBCL)}?=HJCn`A@?BFB'R@]BC>ACȪBCE@Cw1?_BPC@?B?ڀCt@9-{C!.C vC!.CC!.CɝA!.C47~?q{C:.C@?B? Cc@7=B&BWaB'Ba=C'BlbB'Bs?rB?BA?B?mP C@C~CİC~CfC~CSm@~Cx?&CnCA?B?6 C|@CwgXC.&CeXCBeXCJDBBy{?!CFXC A?BJ`AaA|WC@@@BhTB@;B CzB CBB CA COm? B)3 C@@B?zCCSGN@qB=f|CbB=f|C!?C=f|CMB=BABAAAv?BcAA@B?ЩBAmBKC!B0tKC=XB0tKCDA0tKCMN?B+KC A@B?|C:@^yC,B+CBRrCB /@B Z{?^C^B0A@B?PB."AWB"YB WBfYB: BeYB'AZGjC Y?0VBb)ZB@A@B?m B TZA t @&B,,B>BP,B/BP,BAU,Bu?B-B`A@BmA2*A.B B@&B B-@‘C1B‘C8?.B BpA@BA N(AĔ;B܉wC'BۉwCڝ@BA,;BBŁB|bC̛BubCŊLBtbCGAԙ:Bo?MDBbCPA@@B?ĉBE@WQB@,@îBn+@YSBo+@YA\:C%rj?B-@`A@@B٢Bz@aBSCBZCBZCAZC~z?1B֏CpA@@BBK3A:ACACuACi5AB &?A#CA@@B?%B 3A}B[BOqNCIBZqNCzsAZqNCN B̊Avf?N[BNC@@@B?}5B [CA +BJC)&BJCAJCA"*ByK9?0BC@@B?uB @yB'Z\CB Z\CtAZ\CڵdB h!B}j?tB [C@@B?HGB^ABCrrBC~@oAC[BB،Y?̎BT2C@@B?wPB'5AaAnC-.AoCε@oCtAɷC >AC@@B?_XBc<AEC_CC_C>T?_CC/Br?CL_CA@B?8fkC@MCCBPDCBCBBB}? CCBA@B? B*L@BrY#CUBG#Cv9BG#C|#A裫C[r?ٹB?#C A@B?'qB~ A#qBA|rBaAq)6BcA+,rA cQCea?rBA0A@B?krA&?AVA_(CRVAj(C\ @j(C;#3AP,C'>(WAnRC@A@B?ˇBGCAW3B@B@FVB!@ A;C|j?yB2@PA@B?10BDOA"BjCBӳjC@AӳjC1PAIZBCEZBFAEZBy|?)*CBA@B?9Cy@`RCI%C TCB+%CvCC+%C|_BC4}? RCGV%CA@B?t!C+@]CC{CCKCC? ?C0{?fCYC A@B?fC7a@ /CP(B/C;U(B C;U(BBO^C|?R/Cn(B0A@B?8BD1AUBTC)sTBTCn6ATCAHCsX?QUBGC@A@B??B@kBABA2̬BAABECv?"Bd2APA@B?$Bz:A?MAWCx{EAXCAEAXC@XCz >7MAC`A@B?GsB@bBCBzNBOB)BPBoBCVu?FBp6BpA@B? B>A֣B>C'B>C@?>CB\B l?ףBp>C@@@B?ģ8CyG@)BC?=C$C8=CWC8=CB8=C{?C{=C@@B?BS@iBKCjBKC]BKCVAKCvt?9By-C@@B?!B58AE,A'7C,AT(7CO@T(7C AJ@;K0>eA9C@@B?B@"B]Cc:B]CvB]CۗDB&B?v?"\B{]C@@B?/CX@CC:YCIEC:YCJC:YCK-C:YCM~?+DC9YCA@B?AKA&Bg\CC$BCCo@NxAB*BNxA ? BCCA@BqB@aBXܵABMABNA5M?ŁAii?g/BrA A@B?"C1b@MB>CTC $4C>CnB>Cc{?oB >C0A@B?/BF@BC BC\CCᯚBCvv?iBC@A@B?;YBkWA4cnAщ8BeA݉8BA݉8BH~A݉8B+>/ynAI8BPA@B?DC J@ZBVC2BVCCVC}WA VCu|?EB-VC`A@B?qB @sMBC՜7BC?BCUġACY3m?MBACpA@B?~3BhYAiBeC6BeC5AeC3sB_GBWn?BeC@@B?UB@ C„CCC6BCAv Cx?eCjC@@@B?iBwAB7³BTáB³BB&C³BbMB³BYp?BB@@B?ӴB[@T2CnwACAwADB@wAdBHC5x?SCeťA@@B?BJ@JnjBoCBfCbBfCcA!Czg?g]B֪C@@B?2Bz@BB]CXBx]C5Bx]C&q@t]Cw?'B]C@@B?s CG$@QBCBkC#CkC~BkC!@x?ObBCA@B?ԌC˾@gnCA%oCAfCAhOBAx~?nCNAA@B?*/Cv@C"EVC\UCEVC3@CEVC\sB EVC#|? C58VC A@B?IqCJ@ NCCLCC9CCBCY~?%ONCC0A@B?sCa@J)C$B#C$BC$B>A?ICx{?)C B@A@B?gC@qRJC&]CBC#]C:C#]C B"]Cb~?BJCOCPA@B? BDZ@{BCDBCPCCSsRBCT{?ڮBC`A@B?>DBd@QB$B}:BBR*BBW@yC3h?QBsB@AB?GlB@BYCB^CUA^C8BaC{_?BC@@AB?ڀB@BBAJBAZAATBNCo?hBA@AB?^!C @CACC8Cķ6C8CѓCB8C,{?-CC@AB?gCڕ@I7ChCS=9C$hCvC"hC1B!hC}?W7ChC@AB?ⳭB9@yBBBBBB B~CTs?BB@AB?#C!@ShCBvCBB9CBBKBBBE{?gC BAAB?cCCh@ 2CCJd3CC\NPCCPACk}?3CCAAB?(C@BC8ByC%HCyCByCv{?BkC AAB?O+BL/ABC BC^@C"BaBwY?nB^C0AAB?BA0hBjCz_BjCɠBjC0AjC-kh?hBCC@AAB?rB@?SB^zC@AB?QC@Ǵ_CTC`CTC8 @CTCB=2C ~?`CVCAAB?!Cw@!CbCR!CbC pCbC}8@-0Co}?R"C6`CAAB?e9BMA(BCTBBCTB|ACTB@iCv;?B9SB AAB?.Bq1ABrCwBpCȷ@pCyBZ CW?qIBsC0AAB?C@ BfCBfCh=CfC8~BfC`|?BgC@AAB?xA=AJA3CoA3C*@g,C./ Bg,C?xAAVCPAAB?EbA.AhٱABAjB@eBQ}AZCS>I}AB@ AB?LBS@QBCBCxBCk BC,_u??BC@@ AB?Bm@3[BBEBoBdBpBU?BgXCs?BB@ ABBq@\Bc$C)B'CB'CAA'C u?B(C@ AB?#Cʃ@Z Cɓ4C YCu4CBu4C϶ABt?sM{?C!Z4C@ AB?΄BrZ@)HBABFAXBFA'sBGA[?BdڱA@ AB<=AAfBmCeBmC/ApfBBpfB&? AKyCBKyC.>NA\ɊB A ABwBa.4AesB0CiB 0CoYB 0CȀ@ICi? rB0C0A AB?mB^H@BB\BB BBjBCx?QB.B@A AB@%B>`AbyB^1sC6\B\1sC1A\1sC@zBp|B]?o.yB5/sCPA AB?B^zAYB$BnB$B{B$B@0ICMw?JBB@@0AB?_B!AdBoCZB5rC2zB5rCA6rCj?巀B2}C@0AB?XC+@sBCDC@BCDCmkCDC5"BDCZ}?BCVEC@0AB?S;B8,A(_BrC^BxC?wCbXB#C YK?_BڤC@0AB?P1A2AcG(BC&BC@fB?D?BfBK$?5(B*C@0AB?!Co@&MBCS>BCJCCeBCx?BCA0AB?A;KA> B'CBECr74@ÚC\BÚC?W BCA0AB?%B,@ddB*CC[B2CB2Ce1B2CLp?VdBC A0AB?:5BY'AlTB8pB+IB pBeB pBhA $pCh?TB6pB0A0AB?]B0!5A)KBK{C2 BN{Cߪ BN{CoB4B^n?VB {C@A0AB?DA=AC@@@AB?HBAB"BC~B"BC1nB"BC\B"BCQr?{}BAC@@AB?FB V8A$BUCWBUC;ּAUC9T!Bj6Bwa?܁BUC@@AB?p~A9(AAC`AC|%AC\BCn>AmC@@AB?T B\AJ#A6PByA6PB`@6PBAA hC2t> A*NB@@AB?l6B.mHACB_B;BBBABPA):YC J?CBBA@AB?TXB@ՓBCzBCExBCMBC4v?&BCA@AB?:BI@BCBCBCACz?<BC A@ABB@CC[CCVpBC(XB Ce|?CC0A@AB?V*BOIAuBcC^BeCAeCBFCg?vBC?PAB?KA< AiABCABC*o.AanA>BanAEY>bA CC@PAB?eB^@ sBC]0mBCY&BCAvpC`? uB!C@@PAB?ZB@ BBC=GBC%̖BCANJCQq?B}C@PAB?4^B@E3|B,C?rB,C䶏B,C4A,C~g?|B*C@PAB?eBZ@|BރBmBރBBރB7qAރBq?BB@PAB?_BAK;BC3BCXBC$FBC i?x:BŎC@PAB?1B+@B9sCB9sC;B9sC-. A9sC{?JB?sCAPAB?$B^A=Bi4@8.Bn4@:Aj4@*< B6CK?Y>B)E@APAB?^Af,AaA%fCA%fC:@%fCAHB-R ?AxZfC APAB?XB/J6AyAlCTAlCAlC@@Bh;?`AlC?`AB?B;@GB8-CשB8-C:B8-CGA8-C,x?B!J-C@`AB?|B?@BACBBACQBACAJ[YAhty?BAC@@`AB?/B@nB5tArB6tAvB 6tAF^AaCCC t?BuA@`AB?BJ@BotCYBltC'BltCq>AjtCz?BDtC@`AB}B@;mB ?JBZ?[BX?DAQ?;w?^;Bf!@?@`AB?OAN?AnA|*CA*CJA*C'AU$C?mA^JC@`AB?B'PA8BCNzBC}ִAC=<8A֚CA?BCA`AB?FB;A0B;d%C#B3d%C:Q=B3d%Cm@3d%C_?G"1BH%CA`AB?+B;1A#BiBBiBBiBt?iBb?#Bg/B?pAB?jHBkA56B"ZC!4-B&ZC1!A'ZCBpB)J?h6BîZC@pAB?gC͏@qC+B=lB+B" C+B6A+B}?C-B@@pAB?B&A;BS(C4ΎBU(CaWBU(C lAQBwu?Bk/C@pAB?B^@2BҳCBγCxwBγC膩AγC #y?uRBC@pAB?aBI:A8BEiCֶBEiCrCmBEiCiBUBv?2BZ>iC@pAB?\A[X5A1!B1›C<B.›CMA.›CA\CԟA?(!BC@pABFBK@,BCTHBC+BC AC9{?&BfC?AB?~8Bx AJBIBC AIBCj9BIBC[AIBCjsP?B+BC@AB?,5B\A1@mBAuRBAAACAPC9a?lBA@@AB?!B*5AxBCs^BCgAC?BGBe?kmyBC@AB?;A'$At3BπCM"BπC67@πCA:B>B7L?Jz3BUӀC@AB?3FB2AHXB4B EBFB\(BFB@R>Cl?kXB7BAB?TB^MAAB?ݿABdBBCABac?E#AB@@B?b>Av=AR:B4C 6B4CBGA#7USB#7>n?B4C@BmCI@@C\CCMCCBC?6CC@B?"C@AzC3CBC3C S'C3C`A3C?C3C@Bu-ByǔAَA4CA4CA4CH A%7->xA4C@B.(C@c3"C6.6a#C2.6RݹB2.6B4C?rG"C.6AB?BA* B4C9c B4CA4C.A"7;(?\ B4CABk#C@z-C-CI1CI1 IA4C?-CsX1 AB?B$A{BoNBpCrB?QB0AB?6AٔSA?cAK 7\AJ 7 A4C B4C"ɸ>RAr7PAB?ҡA~AOLA4C+A4C`?4CeA%75>xA4C`AB?ũApLAp\B4CsKB4CcYA%7LB%7`?\B4CpAB?hAYBAzAAC̏AC@}?4C?"AC@@?B?tBy@=B5A:B7A'C7A B7AVr?7BEA@?B?2B0_@B CBCCC}BCWav?3BeC@?B?C"@ˎBCeBC9CC BCt?ϭBPC@?B?1+BH@& B˰CX B˰CB˰CU~B˰CJ?BC@?B?^DBz(A3..BoBQ{/BoBAoB2jAC>?yC0B:BA?B?~&C@IC%B CB)CBABJ|?HCBA?B?ԧB@B CBDKCi0BDKCBDKCD?BPC A?B?B/@ CC)C CC)CׂBC)C/=BΡCy?] C\])C@A?B?JEB@(BiuC BpuCBpuC0ABp?ƱBduCPA?B?2B>BApBCgB Cp? CJ_BuCT?pBC`A?B?tWBr@6Bp{COBs{CBs{CkBs{Cn?EBSCpA?B?` B'=A&BN. BsB\. BAZ. Bpz*AVC}I?YmB^ B@@@B?HB@B܆AbB܆AB܆A!BDC w?BA@@B?CuW@RBCBCU5CC/BCpw?:BwC@@B?vB}@BBb*C¹Brb*C9Crb*CBrb*Ceq?÷B %*C@@B?B7@qC!ԻBLC:ԻBNA:ԻBCCBw?C8B@@B?lB @VLBCBC; CCpBCw?BᴋCA@B?F"B@DCQCcCA9CM:B@9CkBrCCv?@Ct7C A@B? B3AgBeCզBhCـARC BRCI^?BOC0A@B? 0B.@XBUCBUC 8BUC:@L.Caz?BRC@A@B?#x B&AhBPA@B?&B?SABn,BWBn,B!z@n,BitB_C Ca?BY,B`A@BB ?u@Bz`tC:B|`tCmB|`tCgAz`tC+|?BctCpA@B?BAB{BB{BkGB{BAVC)v? BveB@@@@B?!B?@ CBo CB:MBBG[dBC}qx?h CbB@@@B?cܞAbSA3B\CȌB\CċB_C&C_CV-?1B jC@@@B?YܤB\9@&BNJCBC3BDC?[CDCaBDC2{?QBJC A@@B? Bg@|=B7tBb=BC7tBpBD7tBt4BD7tBXg?>BosB0A@@B?A%-ABTfqC<BOfqCA6uBD8B:uB ?BQqC@A@@B?9NB @PBrCgBrCVBrCḨA$zBt2v?\BrCPA@@B?JB3 Am:vBCjBCWBCpACGr?rvB!C`A@@B?R0BA,ÆAb(BqA^(B\B^(BA_(Bs?ABpA@@B?СB:@rBdCBdC]MBdCaB?LBB&{?BdC@@@B?>B@B'mBBA(mBB?(mB&BJoCr?B1nB@@B?>2[B@ iB7sBBBh6sBBh6sBƦ@j6sBf&?BvnB@@B?VBDA%gBCjhB CTA CA CLN?fhBC@@B?nB@B)CϺB)CjB)C@B®C|Zx?B)C@@B?BBm/=AD(BC뾚BC/HABPBBHL?.Bm܎CA@BFBe1A-AI|CjA\C]@]CiyA.gC/>FaACA@B?K.Bj:AAbCUAnCdAnC7@C ?qAՓC A@B]BI@ C\B< C\BB\B^A*C{?- CMB0A@BBq@BwC#BqCXABqC(BÙBw?B莗C@A@BBNx@fBTuAGBuA.CuA CuAj?-BKAPA@B?BQ#AwBF3!C2BG3!CqBH3!C?P3!Cu?4BY8!C`A@B?ds?BoA`>Br X'Bmt'Blg>)}&`?n>B [CpA@B?Ab(AqݒAB׆AB(>AB=@ljC_ ?LڒAB@@@B?QBT@aBPC-BPCs]BPCr`BqpADOr?OBPC@@BB@uBqB"BqBBqBkAqBFJe?~BZB@@B?#UC@xMCPCOCTC\IXCSCl)ANCRy}? vMC[C@@B7.C"@,C͝CC^̝C[AkΫCP|?0CԷ#C@@B?CBAʹ@ݣ%BqۘB'BZטB$BZטB BZטBe?$B!B@@B?V vBpALABK.A&B̋VB&BtB&B5Q?3AB@@B?BA7B C7B C B CA CV[?ͪ7B CA@B?C?;@ C,B CPByBPB}AC9z?W CBA@BKTB}AAA^B۷A_B??B_B5A_B *?C;AB A@BPBS AFB ;CMBB ;CbB ;CݥA ;C`?YFBe;C0A@B?9B'ANB /;CFB/;CC,A/;CۆA6@M?}NB ;C@A@B?BK@#BC%BCBCEN!BCw?F B"פCPA@B?t"BuIA#+A=eCKA=eCB=eC @:eCv=?5AeC`A@B}iB@`{B: CrcB< CWB< C;@ Cs?{Bu C@@B? !B7J0AAAYMBAMB(KAMB^RA&yC\>A.B@@@B?C@"CTNCC$CSNCgBSNCBA {?"CNC@@B?VB1A|?BB:5ABB ABB.bCN ;?h?BȸB@@BB9@sBJCBC9κBCW@CZvs?_BC@@B? BQ@.BhA9,BxABxA*BxA[?+BpA@@B?B@RBCXBhCBhCqA]BEv?BCA@B?C큦@GB/B NB /B" 4C/BwB/B1{?BBA@B?b;MC=@hC<LJCfC;LJC1C;LJCQBBS~?hCJ‡C A@B?CR@EMCIo3A}Cn3Af1Cn3AW#cCsy?JB=BPA@BYBA~חB֬C,B֬CB֬Cg|@֬C_~t?I"BѩC`A@B?s6B.ABW^B{BX^BжAX^B7 B,xCp?EB`B@AB?q^B@MBBjCpBC)BC% -BC%s?bBC@AB?FBAVqB~CZBD>C73BD>CAABG f?B+C@AB?(wC7p@BC>CqDC >CQ0C >C2B >C^{?C>C@AB?Bt@TB DCEBDCdBDCxADCw?{BECAAB?B13@!bB*HC`B0HCB/HC[A/HC/l?bBv_CAAB?tB"@jBCߦBC? BCx-BjCSl?ʫBC AAB?mJB_]APBd=^CHBX=^CBX=^CGAb(BQ?SOB^C0AAB?jBtApBH%CBG%C'AG%CݛsBCNt?@ٵB%C@AAB?x7B~IcA`CB/)C[80B/)C B/)C A˗CY?SCB)CPAAB?FA0 BCBCBC?@Bp?kBCAAB?BǺA\BbJC'TBdJCBdJC:AeJC6d?\B5JC AAB? C3@U#C“}CڷC}Ch#"C}Cq@“}C}?#C}C0AAB?Bs,SA:ByC3,ByC7AyC*ABFO?c:BC@AAB?7FBl+A B_ C@B_ C_A_ CEB/Cdq?BYP C@ AB?qNC=@HC$B>ICq$B)PCp$B<]@_$B}?fHC$B@@ AB?Cp@,C&CͼC!CC!CFq?62,CX|?3CC@ AB?ݬBE@MBVCըB VCKB VC A VCt?EB:VC@ AB?B@YA$CɟA:C`B:CB:COC?XAKC@ AB?VB&g@IBCy)BCBC'4AãC:y?,B`C@ AB?J CQ@B5BB-Be#C-Bi-B.BBxy?BڀBA AB?.B@B/C>B/CPB/CzA/CERBQ*CA0AB?!C슨@CĜCBĜCgACĜCACB!BR>B%BT#?-B:;B~C0?CDBB@@@AB?QBAB_CQBaCBaC,AaC0o?r BHC@@AB?=AH?AtAZ=C`A[=CUa@A|BAX>*B=C@@AB?C+@iBdCTBXC'CXC';BWC~y? BQC@@AB6C@͸ CfCCfCBfCiA/KB|? CfC@@AB?ϿBp@T'BOABPAkNBPAG[BPAsy?BJAA@AB?BA@oBBćBBSBB BBFx?sBQBA@ABg4B9ABPC BPCKUBPCFR@PCQ?p}BFC A@AB?,BAA1A9BaXA9Bs8'B9B 1VA9BWP?H8AcjB?PAB?@B@BR@BQ@[BQ@EAQ@5q?B@@PAB?b?BKA}BdCTBdC,AdC!B C f?BhC@@PAB?4B_@s BaB;B}aBDBB~aBB_XC1s?Bq/B@PAB?Bl Az4>B-CE6B-CuB-CJB-Ck?=BC@PAB? *NB4ANBkCBvkCZNBvkCjAxkC[?DBAjC@PAB?N\B+ArAWCcAFCAFC#AFCE?ؐqA^C@PAB?B@SB>C0qB>C-CC>CW*:B>C"A|?B >CAPAB? A.AL%AiCؾAiC@iCj&A4CÔ?!AZ`CAPAB?fAq*AA?*C%GA:*C?@:*C=7AAC(?A`o*C?`AB?#Bma@ BCC.BC BC2@HBe|?]BxC@`AB?]nOB4@byeBo.CYBo.C\(Bo.CsEA7C}^n?dB..C@@`AB?CBy@BhB&BWB궱BWBAC%{? B5bB@`AB?AS-Am>BÕCi/BÕCgG@BM;BByG?>BҕC@`AB?B~9A{#BxHC,BxHCAxHC<kA8Ak8J?\#B>HC@`AB?ysA҆#AVAb 6CmAs 6Cs?c@s]Al@>)AB6C@`AB?YAoAASBWrC:BWrCn @WrCxA_yBUY:?V+BrerC?pAB㐁BvAȥBFCBFC;BFCDANCm??BLC@pAB?6SBd@׸BMBBMBBMBxAMBox?B``B@@pAB? Ag"A AVCkuoAdC0`@dC_NAƂ CJ>~AdC@pAB?iסB#V@5֞B^,?CdSB`,?C[B`,?CABlKCGBlKCyAlKCBr?TBKCAB?{u(B[`A"B4C:ـB4CdA4CB2B%7?B4C?AB?~AdA;_BCLBCAXCjJBXCkP?m1_B,C@AB?4B>A9B(C A(Ce=B(C&A(CY?AB\*)C@@ B?(Cs@!CCN!CCX/CCYAC?F!CC@ B 1Cl@ CBCBisSCB|eBB? #CB@ B?AiQAAC!rACLcABB !BB>ƾAC@ B?RfEC>0@CCCCC?EBC`A B?sB# A:^ABW@BHNABث@B>1AB@@? B??Cqv@xCBCBaBBACy?{ CrjB@? B?떸Bu@BToCB[oCbB[oC4AjBp?NBC@? B??B,@BCBCCBC=B9 Cw?yB C@? B?(BD@5CBp2CҳDBXCI+BXCOBXCYC~?yC-A A? B?mAuABBxI!C@BI!CZACBC] ?nABm!C@A? B?{(Bz@BtaB yBtaB;/BtaBhSBtaBor?NBaBPA? B?gB;m.A~Bd$C Bf$CuAf$CLBKCKau?WB$C`A? B?kB{OA%ׯAACAAC4AACJ+*@ ]A2 ?A$ BC@@@ B B@ƵB^CxB^CA^C!yBN(BPh?FB1^C@@ B?31BY@sBKAGuBEALBFAAHAvf?=rBU A@@ B?FBg@}BC4XBC\CC ACw?$1BUC@@ B?)CY؂@ CYRC!C)RC+C)RC-%A*RCo|?X CRC@@ B?^nByPAByߡAKBAVAATƦBPHCNk?EBjAA@ B?By˪@BsB|BBvBBA-"Cx?dBBA@ B?qB~ݮ@ BC<5BCuBCa2ACkiy?B/ԢC A@ B?[B:@B*zCzB*zCB*zC;A*zCx?FBAzC0A@ B?Aû-A閧A- BAE BԠ@QVC.AQVC>%vAVp B@A@ B?8B,AB$CiB$Cqe3B$C^A8I C= q?BpCPA@ B?Aͱ=A44B'B&B'B0tA'BdB䉁C۾L?LL4BBC4z? C|6C@@ B?ƉBy@*BqCyBwCcBwCBwCrs?hBC@@ B+zB/MA%B)B=B BA BuB$HCj?BB@@ B?eBQ0ABA&BbA@CBbAeAbAi5?6_BݔA@@ B?9C稂@aBBB̀BenC̀BÀBy?EBcBA@ BndC/@IICuCVJCuC{CuCOBBuC~?ICouCA@ B?InCy?ɻB"hBPA@ B?BLAe6CBziA%-BiAQF.AiA}B8FC5K?CBZIA`A@ B?nB1EA"BBxtBB5@TC8}BTCd?4BcOB@@@ B?oB@ \BM]B^B\BCDB\B m@CYCY_?\BB@@ B?FCi@N#B4C:[B~C;C~CB~Cv?BjC@@ B?B&ɋ@)LB$GCBGCBGCh[AGC|v?&BGC@@ B?ФB@CB CBBB$Ao,UC B|Bf?2B,sB@A@ B?:BvM@^B]'CB['CB['C?*Cxy?ԭB'CPA@ B?X3B`:AzBtA`~BtA?>tABBACCn?mB@vtA`A@ B? BAAYfBCBCˠBCwfACD|?IB*"C@@ B? B2AB+vCBuC @uC>A}B ?VBϐuC@@ B? C"@@BBbB/BuOC/ByA/BJx?JB@B@@ BFkB@F"CbGC(#C]GCNB]GCSBA"{?"CUGC@@ B?s-CVl@ q CӗC CӗC.MCӗCBӗCEv|?3_ CCA@ B?{CƜ@UC%C,<C%C$C%CNA%Cl|?C1%CA@ B?BA4BWCBZC1`BZCRcACNp?xгB C A@ BɓCxI@KB%޲BB)޲BC)޲B LB)޲B z?B\B0A@ B?w1CaW@Cn*COKC3"COKC =COKCwAOKC~?f*CRKC@A@ B?)yAW"AAB(A?B!T??BA Cg>_}AqBPA@ B?&A(AWAC(AC?CAzk#C ?ALC@@ B?b B@B(BOC&vBOCWBOCj3B% Cpr?BOC@@@ B?TC,@ǢC(-C/CONCqCONCT&APNCpnz?*CPC@@ B?}C@ABk BMRBB4{DCBBBx?+BB@@ B?7 kC^@RCC>SCYCYCZCSi0BZC~?GRCC@@ B?A7-A6gB#oCgB#oC[A4lBOB2lBhA@ CZ@"C7@"Cj>!Cu>@hC@A@ B?T BIAGBBY BBF*ABkACpB]BK>B, BK>BǰBcCv?$BS>B@A BjKCH@BCΪBC1CC6BCz?$ByC@A B? CD@͑B$CSB$CC$C0B$C{?mjB$C@A B?E"9B'8A)A>B+]A>BRuB>Bk@>B@,?ElA BAA B?މB@aB]CøB]CA(B]C_`B.Cn?JBCAA B?TB#@wBpUC,'BoUCa֮BoUC @Bxv?٨BvUC AA B?7B2v/A ^B2-kCA*-kCc.B*-kCJ7FA*-kCq*Q?=6BkC0AA B?9qsB?AIB@CLP5B@CɰB@C"A@CYj?JB@C@AA B?6BO&;A@B@@A B:p CV@5>CqB>C`BB_B*BC+|?>CqB@A B? B=94A(TB؏BJB ُB>ُBTo~B{C1C{? .C?C@A B? B'<@O CrBtCrBWBrB ģBC}x?d: CrB@A B?(>B"KOAfzBrXC*BrXCArXC[9@GB'|"?C BEXCAA B?CBwQAA9B0A9BA9Bp@pbC$>A@:BAA B?BL@B(CRB(CgB(CURA(C{?~B(C AA B?7B@A]^ACJKAC?ACAC>@^ACC0AA B?ǜBm@.Bf-C Bf-CWBf-CBf-C,n?&Bq-C@ A B?z:wBucAz&B B%BB BJɁBC B ȻAD B+\?r$&Be B@@ A B?DB$9Aw#BB%Cp_@B;Cž?CUFBCe:?BBsC@ A B?~IC˦@z:C(3C6C)3CWC)3CB)3CӢ}?̱:C6C@ A B?BU@κBBBBBB߰ABd7u? 4BzB@ A B? ~JB3m6AU$WB"U(CNB$U(CA$U(CA*CLQ?VB_(C@ A B?C@Ew$C]B[-C]B_B]BAeC|?ׂ$CKBA A B?% wBAdUPBCeFBCdBCqAC)l?OBĆCA A B?A:AI(B=A6BCAi(A@A9AiLCH?_)BA A A B?Gv_B*(AW'}BBV`BB|+A-C@@A B?T_BdASBT8BOΛBD8B6BB8BBS3bC7n?B8B@@@A B?wB@YiB)Co`B)C9dB)Cr?)CQi?~hBz)C@@A B?PdzB@B$CXB$CB$CB$C/a?rBC@@A B?mLB]@BπCcB̀CoBˀCAʀC]y?[BkuC@@A B?o+CI@bC=BWC=B5C=BFA=B}?PC?=B@@A Bg0BMAD5BB ?"BBBBH@襐C-\?5B_BA@A B? B~aKA'WB]C,/B]CJB]Cv\A]Cv?EB]CA@A B?BT@,BiXCBiXCPBiXC ?AiXCGy?BeXC?PA B?-BR@CB9AB9AxB9A|@?C"Ru?B:A@PA B`%B.ABAVBADBAFg@;PCDU?NBA@@PA B?5AAFAsC3AsCҪ@1~BA1~B%?:ANsC@PA B?A'A{n*BABAx@AA3QGCCJ?*B-A@PA B Bm1A=ACC)ACCHACCACCQ>AA4vDC@PA B?qovB(@VB$CfGBCp?!BC[OBqCu?qBC@PA BB}@PWBjCȇBlCBlCMذAkCbxx?b|BqC?`A B?`A$U'AfB㊜C\lNB䊜C'ACsBC; N?fBݍC@`A B?ķ CɎ@BdRaC BaRaC%CaRaCX YB`RaC1|?BIaC@@`A B?B4˖@\cB;BϋB!;BC!;BjB";B y?JBU8L܁AfB@`A B?XxGBAUA:KC/vA&KCKypB&KCk2B&KCpA?AJC?pA B?%dBKA/NNBʑCS;BʑC-AʑC A(B!W?$MBɑC@pA B?Q Cڪ@HB>C+KB>C)C>Cp}B>C}?ĞB:>C@@pA B?Ba2A"WB&CE FB"C+A"CAC,(C!f?$WB C@@B?SAAyACtTACA3C!9B3Cd>7rAC@B?ΟAViA&A3CA3C>3CACq*>TA3C@B?L7BAA4CoA4CoA4C`7?7BQ?A4C@B?>BO@YV_B3C_B3CG!C3C,B3C?6\B3CAB?*C@Cv4nCt41Bt4 ?B4C?s[Cbm4AB?bA"A@C@C0@3C"A3Cv=n@C AB?.Bev3AaB4CYB4CB4CA4CN{?}aB4C0AB?B@\B6.7B6&*C6oB6?B6@AB?RA^^AV?B4C$3B4CDA%74dB%7LP??B4CPABp BAփ@CY @C%AClWP@Cw~>a@C@@?B?Cf@QCkz?BPBA?B?PBjsrCo?4VBerC@A?B?%vBEA>{BBGBBBhAB,A#CF?ŤBXBPA?B?#B-4:AӪA CA CDB C^A C"?gA5C@@@B?m C@GC'c@|pC3b@h$C4b@OA>b@|?pCo_@@@B?B@QBBRBkB2.BkB BkB7Df?QBB@@B?MBlv@")B"_C(B_CB_CmB_Cc?'B^_C@@B?rCZ@EC'C$DC<'CbTB<'CgnBݭC{?-C׬'C@@B?["C@@ C-B CVBT2CVBBVBu|? CBA@B?-B2s@7BoCőBoC롘BoC[@oCxq?uAB~oCA@B?B)@jBիA}BثAH BثAPQT@At?ڒBVA A@B?A+}?TC,B@@@B?WB@UBCB)BC-BCRABpu?\BC@@@B?AW8A̷A4 B A4x B@^VCqA^VC>Amb B@@@B?eC`x@C]e`CCx`CCx`Cs6Ax`C{?C7`C@@@B?B@0dBH@-B@@E0sBA@ 8Bro8Ckx?C{@A@@B?~C@Z@BO9CO&BL9CCL9CK$BL9CKz?غBw9CA@@B?gB7@BKCyuBKCBKCmAm8A76w?BKC A@@B?B@OB;B2CB7B2CxB7B2CA!Cw?B42C0A@@B?OB7AbAe.jCӫAj.jC7sAj.jCp}qAXB/?\A2AjC@A@@B?OB!@BC!jBC*BCBCv?賀B$CPA@@B?sB;!A˒BzClBzC8]BzC&l@ȳBuq?kBzC@@@B?AR#A6A>C_AGj>Ca]?Fj>CtA\&Ar>:هA>C@@B?0;C܆V@Y CA CMAgCKA1BGA"{? CȥA@@B?\dC֔@2VCfChC{CC{C0B|C~?a#C޾C@@B?9Cl@)CBnBCBsnBB@snBBќoC+{?gCmB@@B?VC@f\CFC\CFCSNCFCXA<=A=~?(Z\C?FCA@B?CNJ@HBCX3BCmCCACz?BCA@B?Bٷ@BjC BjCBjC:0Aj5Cjs?&BmdC A@B?Bz@2(B(CB0CC0CxB/C}x?j=BC0A@B? XBJAyQBB0C-GB10C@B10CDJ?ZCg?`PBu0C@A@B?4Bv^.ATBSCASC¿(BSCMASCYJ?¢BBCPA@B?aBj5An|FBzC:4BzC)kBzCr[AzC}k?EAFB C@@@B?GB!@Ba?ABAABAAAAAO?zBBA@@B?NWC#b@BsXAiBީA\CީAeCAީAdz?7BA@@B B y@BC-BĆCBĆCI>ՆCyk?8BxC@@B?v Crk@CFBe!CFBDCFB6AFB{??FCyFB@@B?(Bk@+BCaBC,BC*Sf?q3C(z?>BpCA@B?j3BJ13A BCcBܼCAܼCz(:AB98BGtB.8B dB.8B u@ NC*q? BB@@B?Bhn@KtB>CuB>CKB>CIA>C=Il?BtB>C@@@B?wc C뱧@B BaB BLC BUB BDz?B+B@@B?-+C@J C7JC C|7JCEC|7JCkfB|7JC|? C JC@@B? B@bީB^FC)BXFCNBXFCAXFC=w?&B5.C@@B?6B|P-AB{AT/BAAA }BDCd`?aBDA@@B?շBN@:UBjCMBjCKBjCe1AjC/a? vTBsjCA@B?t0BASB+KC.AKC[AKC5@3(C}-?%rB CA@B?A9A@`BC'qBC@cB})BcB+%?BvC A@B? B0Q@uB9sC0B9sC{B9sCA|Bbz?xBT6sC0A@B?+BH&@FBC2͖BCz}BC>@Al+!Chv?54BC@A@B?vJBQA^BdBKBdB'BdB6AyCk?z^B~B@AB?X BJRA!B`wCZ!BPwCtAPwCϽAB85?u B׺wC@@AB?&ިB @UBRCCwBRCC4BRCCB)uAvv?BVCC@AB?hC@UaBCBC9CC~uBC@|?BJC@AB?e[Ba@B*}uAB}uAVC}uAS$SB}uAWv?ҦBywA@AB?~cC Z@(C8&C"C8&CxC8&CB8&C-}?)C_&C@AB?؄B0AI'B7A B5A*1B5AlB5A^QZ?&BS2AAAB?*hC1@ B*6CB%6CEC%6CB%6C|?4BH6CAAB?IMA,6A+A~C2lA ~CoGA ~Ch3AC g!?}!AeC AAB?BV@xCB/BBBB8OBvC{?~eCB0AAB?Bl@BBxBBTfBBVsA C,w?BB@AB?BI@^BDmCdBEmCUCEmCBEmC'x?BmC@@AB?(B1m7AXlAqCAٔqC@ٔqCԝA`SvBn>.AqC@AB?=yBq@wBCдBCșCCTBCw?.BC@AB?BD@]BMCBOC7ބBOC9A.Cמn?&B7C@AB?^Bd@@+bBClYB C*/B C )AP'Cca?dbBC@AB?d-A8AgnACdAC@CA'C;>mAnCAAB?Bt@B@A AB?A 0A<Br5 APB3CH#FB3C[B3CMA}Bg?PB"C@0AB?9B AB :B B* :BX5B( :BY!A" :B/$^?k&Bk[:B@0AB׬B@B~@CB}@CO&B}@CIA@Ay? B^?CA0AB?.B@ĢBσCqBσCӅdBσCA}A?>B:kv?B\σCA0AB?hBAACACTBCI}BCS?AʹC@@AB?BDJ@̔B)B B)BhB)Bg@FCz?%BFDB@@@AB?{BV@@ BWqCBBSqC CTqCTSBTqC|?mB qC@@AB?[Bj@}BiBqtBiB5CiB?AiBu|?XBmwB@@AB?2Bk@BCuÉBC @sBCxACt?QBC@@AB?::BR*A/7pB8GCr;UB8GCqFA8GCs0AA2g?`pBGC@@AB?BU@JB5CB5CjB5C!? 5C|?^B4C?PAB?mAر=A@BMtCD,BJtCJ@JtCBCcJ??BtkC@PAB?C1@$C'CEC9V?4BBxC?`AB CR@\8CfBCfB4CfB%@0BfB(~?/C@B@`AB?UʗB1@J=Bc`C,Be`CծBd`CjBd`Ct?&>B`C@@`AB?Av)AQDBCs3BCf@C(]%Bn}CLZ?qDBC@@B?B@{BC/2BC%BC?C?+BC@BK0B;@4yBCzBClBCۘAC9~?G[zBC@B?ëB|_@BBBBM2CBG|BB|?BB@B?C@CCBxAB0AB?ۿBACC;BC^hBCuBB?LCC@AB?^BQ@m[BC:BCACC BC?DBC@@?B?C=@/*CbCC)C}[C1cB}[C&5BC{?)CYC@?B?$A AB-B B3HB2AzC]bBzC>yBcB@?B?fC @2CBZCB<CBm4@rxC+Q|?CƱB@?B?Cm@oBXC^UBYCH4.CYC2BYCPy?7˵B0C@?B?NeB&@=wBȄBuBȄBc+BȄBHFAdvCh?snxB[ڄBA?B? )C3@XC(HCC"HC;C"HCS,B"HC |?/CĐHCA?B?-kC@BRLC5BOLCCOLC%93BNLCP+z?ZaBLC A?B?MBAcBBYBBvBBAvC>f?cB.B0A?B?!Bz@uB^C@B_C4-fB_CT BCky?CBC@A?B㎤B4}@8BGC BGCblBGC:C)BןAz?m!Br HC@@@B?y4BEAIBBBBiAB'6[ACv)?vBXB@@BC'V@$yCfCCfCi CfCT6Ae@KB{?ulC,fC@@B?'B .5AV0B+C0B+CA+C?AkC/'??^1B*C@@B?fCz@ʵwC1CBwC1C~-TC1C8U Bc"C~?xwCW*C@@B? C|S~@#CuBU3!CBBB7BC|? #CeڛBA@B?H?NC?@HCC5BCC\VCCRACz}?|HCŞCA@B?B>@vBxBBxB%BxBnBxBDw?B_ZB A@B?3B"@&BC'BCLICCAC@|?2BC0A@B?(dAw0AEkBHCfWBDCIJAşBBşBP}P?ԬkBC@A@B?xB@˃BHXCkBNXCRBNXC>@PXC:s?B4 YC@@@@B?)B@=BC|*BCxBCqACq?B#C@@@B?BH\@ȒCɪCAC9ǪCB9ǪC:Ar!C /z?qC0C@@@B?h}CB@t@Cq B4ACq BLCq BBq BF~?@CT} B@@@B?ɼBvɣ@ˠB0 C+B0 CB0 CçA0 C$u?B. C@@@B?Y}6C@CS C CV C=YCV C{`BV C۶|?jCjCA@@B?_B%B+A]BCUBCx@C}AB`oC>?'^BtCA@@BCBC+.?FB#)A@@B?B7@nC4zCTB2zC=B2zC.KBcBx?`C(zCA@B? vB AB;"~C>A("~CԡB("~C%B("~C%X?Bt}CA@B?fA0A}OpBRBcB#RBt@wCktBwC^?wpBḟB A@B?B@xB8CB8CC8CTB8C=9|?(-BL8C0A@B?@B@ABZABZA)BZA4#Ae=C z?_FB~A@@@B{BiABB B#B)=B#BAJ7C>j?hBVTB@@B?qB6!@jB' C~B' CLB' C'A擞C8Zn?6B C@@B?Cbf@.CiCLBlC5q%ClC+BmCC{z?5CC@@B?B@k'B_COB`CBaC3@C2v?B;C@@B?kB@B/CCB2CzB2Ch8@2C2u?̡BRCA@B?XBr@ocBӾOC XBξOCaBξOC|BξOCu?/dBOCA@B?WB"@B CwB CIB CN>A C|?B9C A@B?B*@BOA3CwBNA3CPBNA3CޝAC!Y{?B}=3C0A@B?ړBvk@RB)C3B)CzB)C͔AtҮCHz?'BÜ)C@AB?BY@B*;ZBB;ZBOB;ZB/oBƎjC'u?dBYB@@ABgB1AAxB>qC|B9qC<@B BBJFP?AAB`C@AB?^B5@.TB1BB/BB/B;;@1B֯v?B,B@AB?_Cz@"8C6B0C6B覅C6BsӴB6B}?7C5*B@AB?>BT@RCdC!rCdCBdC-AB4{CBbB|?YlCdC@AB?^XBO@:BBB*B$B*BJ8}v?B}>4CAAB?bjBR@ B7CM B7CyB7CB7CGz? B1C AAB?JBBA} A/CA*CNA*Cs@+C>x AC@@AB$B^@wBCd6BCnwBC9pBCzx? BC@ABxB@?B C"B CB CA Cv?%IB C@AB?@CEM@zC\:C C^:CB^:ClAtB|?CUCC@AB?Bs@RBWǪC2GBVǪCCVǪCKBVǪC=v?RBŪC@AB?AqAh8BHyC)B8yCk OAnhB]BnhBL8?8BcxyCAAB?A?i AwE_BAμDBAc-A?OCB?OC5?S_BAAAB?KSBCABBK BB߿eBB(ABq`?BB@ AB?ESBԝ@bB.CB-CB-C0>@.C{?.B#C@@ AB,C=@MCC CCHKCCԺBC}?9C~C@ AB?ٖBG@B̜CMB̜C>]B̜C@A̜C*y?BFɜC@ AB?+B2AtA⾯Cd3eAѾCGBѾCvAѾC?asANC@ AB?A+AASCܚASCg@SCrhANB}>ЫA[C@ AB?:BgM@rBjcCVB^cC~B^cCT^B^cCt?ZrBcCA AB? CJ]@KUB;z BBEz B$CFz BBQBGz B{}?=Bq B@0AB?Bl@wBSGCiBcGCwBcGC BcGCx?$wBGC@@0AB?SB@1BöCՠBĶC`yBĶC^AĶCy?C(BC@0AB?QAAA9BBA9BS@bbCBbbC?*A|9B@0AB?7B@/dBAB/AB/A9@3Az?BÄA@0AB?#B7!AÖ7A5PB#A&PBtA&PBA&PB5>/t5AB@0AB?2Bӵ A)B@BĒB6BB6B\@C.w?~BYB@@AB?_vB"Aj.B'B9B BٖB B B Bd?y.BzB@@@AB?ܮB?[@BW^BBW^BBW^B:!BkCZz?Bi:^B@@AB?ɏB :@B-CعB-CC-C/,B-C{?BB-C@@AB?c|B{@^BxAզBxA)CxApBxA]/|?BA@@ABBAzBQ<C?KBL<C`BL<CApBL<C z?wB+C@PAB>jBM@B]CTB]Cc*B]CV@]Cߦ{?Bd]C@@PAB?SBe@%B>ACB>AC_B>AC8 A>ACx?5B<9AC@B?@C`@_B3C&QB3C!Y6C3CaB3C?mB3C@B?3MBAUB4C B4CLB4Ci?%7?֌B4C@B?$Cѻ@C4C1C4C 0B4CA%7?mC4C@B?}B{A?1gB4C^B4C B4CdA4C}|?, fB4CAB?B!B&A9=B65Bg6~KAh6ΥA4CW?5d>B6AB? BsA*BBC.AC{A4C\?:BC AB?B`@RB4C@bB4C"C4C&gB4C?sB4C0AB?DBA3B4C B4CNcVB4C!WA4CBt?ɣ4B4C@?B?`B@^AB,)CQ@B,)CRlGB,)C?,)C_?ABa)C@?B?xRB;,@zWBߟGCfB֟GCiIC֟GCdB֟GCx?[B{GC@?B?IRC|@' ;CEBC6CDBCA\kCDBCbUBDBC}?K;CV@C@?B?9>C@eBCEC:CECW=CECR&@JCeA}?3BCCA?B?B^TAL7BŒBH0B0ŒBA1ŒBF BazC*;?6B BA?B?PB@KBCBC^BCr}AC'v?ːBC A?B?PZB@)A,1B%uAh!B%uA`dB%uA̼A%uALd? 1BuA0A?B;Bü@vBo* C Bn* CSBn* C-Ao* C_z?VB' C@@@B?YC@^EC8gCEC2gCukC2gCB1gC~?oECgC@@B?tZBC@ AcAC$AHACd\BHACIAHACH?Ae8AC@@B?ʝBr@BCcBCBCBCU\?EBC@@B?؆DB &AvBCȚCxZB@ȚCְ@?ȚCMBCU/c?4BC@@B?qB#,@JwBWCEmBWCBWCsBWCnl? wBWCA@B?}B@jBL??qB:?kC:?@rB:?y?jB?A@B?MtBѢ@VBfaECBjaECBjaEC AjaEC|?+BqEC A@BA:AxAɣBzA:ʣBFA:ʣBdACP?kALB0A@B?GuBL ARBrpCBspC~NBspCr[ABs?B-sC@@@@B?;%BT4A BݰBe BݰBAݰB_8Ai7C4D4? BB@@@B?9*BB{ACeA:CA C$B CmA C.?`AHC@@@B?VBst@gxB,ٜB,AB ٜB]B ٜB AH6CD=v?BB@@@B?"xC_@iCvGwC`CzGwCCzGwCi}1BzGwC#~?qiCSwC@@@B?z6%C=@)CצA;#CצA#CצA>JHCi|?)C,AA@@B?kBs@zBrCB$rC bB"rC]bBxBdv?B rCA@@B?OAޏ0A}B KC6AKCdv?KC"AܷA(?cALJC A@@B?,B4)A:)A$C0A@@B?,B:A]A2jCyVHA&jC1A&jCS@&jCXw>\A)jC@@@B?B>)@"B$B8ٜB{$BoB{$Bo6B{$Bev? BB@@B?BF@4B5B=}B5BB5BC[Af C/x?B:B@@B?VBPApBBl?iBB9"*@CsBC0p@?;YpBjB@@B?cC@MC CuC C8@OC CiB]vCC~?C C@@B?a Cݗ@RB%vBB%vB' C%vBA%vBF%{?BvBA@B?,B{^ AFZ BI2CB%I2CB%I2C`@%I2CM? Bƒ2CA@B?pBABlBBgB~ 4AiBO%B4CHw?BB A@B*3B-A6B'XCRB+XCMC!B+XC'@+XCnR?YB XC0A@B?-A5A B#dCщA#dC7A#dC4wA@BsG?u9 B dC@@@B?OBEW@[BN)C(BN)CO BN)C=?N)CA8tC@@B?CjJ@ CtUC6pCrUCG,*CrUCC BrUCo'{?7 CMC@@B?H&C @J C;BC;BvAC;BzoB;BF|?* CqC r?XӜB?wB A@B?Bg@g+CхCxBхC9EBхC AFB|?CԅC@@@B?UNB2!A~afBVCS^BYCAYCAbB;T?fBC@@B?fAA_= B"H CBH CR9A CUlB C>!B$ C@@B?B1@lB=!LCcBF!LCzBF!LC@@D!LCVg?lmBICLC@@BKB@ЯC C.B CB C }ADCj{?#~C C@@B?NXBE@ŵB{jC9ެB|jCHB|jCBHA}jCߊz?BtpCA@B?kA!AB6CWB6C$0@`@dB`@s*?74BF6CA@B?t,Bv:AwAwBBЦABB,BBB{ABB3g*?ջA_CB A@B?]TB A&QB C@B CsA CBCFt?4IBC@@@BIBAʍ*B C#B CCB C:@SVCoH?AF*B> C@@B?jBھ@&B2C/HB2CC2CJB2C[ty?3yB2C@@B?9B&*A=GB2*NC|4?B9*NCA9*NC6AQA(JZ?{FBANC@@BGBȰ@BtSCKBvSC CvSCAvSCm!|?K0BXC@@B?UB !y?. CYYiC@@AB?A5AAAK=BC2AV=BC;FCAVcABVcA,3>AdBC@AB?7^A_Ax]A~C䣨A~CyV@BsABu>lYAC@AB?C`ɼ@w$C8B3C8BRBC8Bhp?HyC~?&$CTB@AB?B@R0pBC@^BCRBCsUBCv?]pBlC@AB?㑽A),AQ@BMC*BMCȠ A6B*MB6B6?F@B=CAAB?EA*AaAoCHtAoCL@oC*CAC>@ACAAB?RB2At)B A&B A"cB A\+A A$i?')B*A@@AB?ϭBd@[BScCMPBZcCBZcCwBZcC޶t?(&[B4cC@AB?pB@B݊BiB݊B׺B݊BAnyC@|?BB@AB?n)~B1$@^BAܧuBAlBA~@wbFCr?͆BA@AB?)SBGrCAG BvCAvC\^BvCAvCP? B:vC@AB?RkB?PALBCkBC~PBC\@ Cq?WB܋CAAB?6BBR,?BOCPy?B*A@?B?uC"l@Bjm@Bjm@8Cjm@6Bjm@o,y?Ba`n@@?B?!CxɁ@3CC]dCC#0CCBC#{?WqCæC@?B?_EC6@=eCuBq\CuBCuB"BuB̵~?z`eCWtB@?B?dڙB%b@%BC.BC'BCAeȻBv?$BCA?B?B$A*BòC BòCKAòC8A1CF]?sw*BIJCA?B?ѻB#4@-BYvCeBYvCӸBYvCBYvC m?l-BvC A?B?$!B@tBvBBvBBvBAvBE|?ugBiB@@@B?YkBz A',BB&BrBTWBrBfCAsB P?,B[B@@B? SBA5B5CB%B5BB75BBEAB߰i?^>BqBA@B?B:wAC A@B?AAA"PCRAPC*!@ CwACx`>aA6C@@@@B?1ЯB_@{CC(mCC#BCB_Cv?^CC@@@B?\Bn@Cq@C@B@ʶBI7C2z?C@@@@BDB0A?C6>KAfeB@@@B?C3@'BҖC=BҖCc?CҖC BҖCy?BӖC@@@B?='B @By4CBr4CBr4Cr`7Ar4C5x?B4CA@@B?B,@ДBpC(BoC9iBoC;?eBLu?ʔBCA@@B?"B@OB*CB+C7lB+CACMw?IB6C A@@BO`A1)3Aѕ3B8B#B8BtHA8B+A%CW?4s3B2B@@@BOB(@(YBTRCPBTRC 8 BTRCɊAAzV?UXBSRC@@B?kBuu@nB>h,CͼBCh,CBCh,Ck@Hh,Cv?B{,C@@B?B骞@KBBBB1BBJ@B9z?-BB@@B?C@BVCB]C1C]C!xB]C|?B>C@@B?SK$BRA\OB?1B?YLA5CB5Cjo?xB:?A@B?oA;,AfAA"AA_%AAqA=C?2AAA@B?KB@oBeCuBeC;BeC@BeC(w?L_BC@@@BJWC9A1CYCo*C]CaC]CB]Cv}?1C#C@@B?yBK@BBJBBVoBB]&!B ZC)p?ȣB$B@@B?BDF@kBPABPANBPAP@QA6x?BCA@@B?zA2AAC3rAC ACB@muCL> A¼C@@B?C{AC@)DC/mAoT4C mAښLC mA\3AmA}~?DC^mAA@B?OBO2;A{!B5ICB6IC_A6IC6AA@?;2!BEICA@BA8AFATCATCN0ATC,GARB?ACC@@@B?\B #AA/BvA4BcB4BdA4B>?AB@@BCA@1Cy;CF] Cy;C6-By;CV5A3@|?C;C@@B?UBx`7Ax ACBACBDACB5|:?dC=3?%ADB@@B?BT@BM'Bp͞BK'BDBK'B!@ɑCx?<ɫB' B@@B?cBm%ARB6jCfB4jCF=B4jC@$A[Bl?9BjCA@B?.A>+AJAlCɜAlC&AlCn&AFPcB?G}A( mCA@B?9A:ABACBAC?~AACgiAB{N?qBGC@@B?Bv@CBCBCBC A- Cz?SBC@@@B? BoIA.B߻C&B滆CdA滆CABK?l/BrՆC@@B)dB.@/B]B(\zB]B7B]BxArDkC/s?Bo]B@@B?ĞB1@~BHCBHC 3BHCOl@HCy|?BHC@@B?KB@BiɯAg"A[]CA@B?V&B6mAx]CF@x]C$3?IAeC@0AB?!Bv@AnAՋCAՋC3rBՋC]AՋCmXM?AC@@ B?B2@H8B4Cq1B4CB4C`oB4CI~?L8B4C@ B׻4Cl@C4ChC4CVC4CKB4C?C4C@ B?iAkOAP(BC#BCIB4C0C4C{z?*BC@ B?EAIA B}Z5B7Z5@@4C:aB4C2?+ BS5@ B?cB1AB8<6B:<6B:<6`n@4C?'BL<6A B?gBA B6A~, C~,B~,{?U B1A B?HBB[ AZB4BO,.CO,)BO,?B1@@? B?=B@B[CB[C*B[C7A>[CN? BMC@? B?ECP@*C.^Cs#C-^CC-^CfAY Cp}?*CaZC@? B?6hB@.BA BABA]AAy?wB&A@? BB<@KB CB CxB C;? Cx?aBC@? B?B@BCCBC^BCUڗ?C8|?>BCA? B?`$B{@BQCjjBQC +CQC BQCJw?҃BQCA? B?bA AOJ4BC$BC7 A CHB C(E?d4BC@@@ B?4Bx@3BCrbBC BCAnoCz?_BC@@ B??C@CC CCX]jCCcBC}?MCC@@ B?sC _@YMCBKCLfCCCKCiCCKCںBCKC?CmMCKC@@ B?^Bz@CeB~BeB BeByB?"~mC^}?CeB@@ B?B->@B+&C/8B+&CB+&C@Cw?YB*&CA@ B?b?PBAӍB-VCg}B+VCB+VCНA Bho?BmVCA@ B?7wA:#*AAwBAPB:.AOBtA$CJ3?AB@@@@ B?ByIh@nFBC|BCqBCjAC?U{?-BC@@@ B?'BA@nBCdBCCCʵ1BCz?컹BC@@@ B?!B-NA%OBC EBC>ŨACRAC_?9PBC@@@ B?L A7A8'B"GC B3GCpAAGBA?fBUGC@@@ B?|AP%AI}@\Aa@mAڽ>vA@~LC,+>c@/AA@@ B?>B@&BJ$BBQ$BzBQ$B@əCty?BAC@@ B?5A(A #B4CB 4CV A 4CAhCxI?A#BuaGAC@@ B?͸A"AeBeĪCAfĪCg=Aˈ!ChQ&Bˈ!C!?LBLǪC@@ B?Bʢ@XBC#&BCBC掠@Cw{??B7 C@@ B?ʄ(Bd0A2LB3wAJ7B%3wAAA(3wAS^A2sCCzcb?"KBRuAA@ B?ÂB.%\A!r*BCBCAC ?A->B}Z?"4*BЕC@@@ B?*AU:ACBYxC4BZxCՏ@ZxC iBBQ?vCBxC@@ B?1B7@BhCN+BfCNBfC3A9B7y?JBC@@ B?©Aa(ABBA B BA@ BAA @C*7?)B>A@@ B?B.@BB~BBU CBBBCU|?&B=B@@ B?Aw0-APB6CϨ>B6Cש@6Cm)B6mC]?NPB?C@@ B?\BAB{CKB{CB{CNBB{Ce?xBeC@@ B?MBc6@CJCqBICͬBICBAԧC {?CͥC@@ B?B'm@BBC{BBCCBCuBBC|?EB.BC@@ BeA{)1AbdB/A+BAn@AAGC=?BKA@@A B?־>BUn.Aa/uAVC [AIC,BICAIC+?rA:]C@A B?|A/AYAsC AsC1iAsCVA:f|B?A&sC@A B?&8BO&A9B耍C(A」C=GB」CRA」C3 ]?BrC@A B?MBSAoBCꄉBC0AC<.BBr?qvBC@@A B?B'@BƒJC1 BJCLCJC_!BJCEPs?BnJC@@$B?I`BV@)BB"|BBBB=1BB? BB@$B?AhTA,@eB@eBPo>C-@Cn=2@aB@$B?wA1,A${jBBPBBZACmBC@??5iBB@$BVB zABBb BB|BBF?Bf?.BB@$B?WB&AˈBCeH BC VACuBAB3\?5BC@@?$B?6MCL@j$CkC@CjC% ~CjCBjC~?$CC@?$B?B(:@ډBzCD|BzC>BzC@AzCPu?㊉B~C@?$B?Cф@3CECCECCEC @:B ~?,3C4JC@?$B?aBO@wBGCiQBGCVBGCz @Av?B+GC@?$B?^B|AiF]BxCHBxCWBxCU=p@xCxo?g]BJxC@@@$B?BK)C|u@oBiCf]r?9>,BbC@@@$B?&A A+[B죢CAB룢C2AGC[BGC $4?[B͞C@@$B?qB@[CvQCCvQCgBvQC}=BEB|?MOCQC@@$B?&MB AlBΚCUBΚCE)BΚC&/A8C%On?_lBPښC@@$B?ODBoGAPBCSBCNBCGACb?2B}C@@$B?g\BM@%B$@Bg@XBh@P B66Cz?.9Bl@@@@$B?uBfכ@vB͝C/B̝CB̝C A͝C |?vB0ɝC@@$BBB&%A5BkC(%BkCGlAkC[8{B^Br?i'BykC@@$B?mBQ@BDCBDCmsBDCђ>ABX"y?BGC@@$B?Bز@BBWBB%BB[1@B[y?ʭBsB@@@$BA=A5^B4'CA3'C<}.@3'CACj-?B/ 'C@@$B? BzK@9BCBCHBCd@oCz?YMB-C@@(BJB@'ZBw6JPBB62B6B6?~BB@hBB]BB@{XBB4y?D}B B@@@(B?Bv@MBeCBeCCeC/+nBeC |?dBDaC@@(B?B@e\BWլBGBYլB&BYլBBYլB?w?\Bk߬B@@(B?nBv}@cBq6CڊBq6ClBq6C#@q6Cy?MB{6C@@@@(B?A B+y WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}) libpdb-redo-3.0.5/examples/example.cpp0000664000175000017500000000174214364232314017527 0ustar maartenmaarten// Simple example showing the use of libpdb-redo to calculate density statistics #include #include #include #include namespace fs = std::filesystem; int main() { // a sample structure file, lets use 1CBS const fs::path example("1cbs.cif.gz"); // load the mmCIF cif::file file(example); // and load this into a structure (note, structure caches data from the file, so order is important) cif::mm::structure structure(file); // now create the maps based on the MTZ file pdb_redo::MapMaker mm; float samplingRate = 0.75; mm.loadMTZ("1cbs_map.mtz", samplingRate); // create a map for the bonds in this structure pdb_redo::BondMap bm(structure); // and finally collect the statistics pdb_redo::EDIAStatsCollector collector(mm, structure, false, bm); auto r = collector.collect(); for (auto& ri: r) { // and do something with the data std::cout << ri.EDIAm << std::endl; } return 0; } libpdb-redo-3.0.5/include/0000775000175000017500000000000014364232314015171 5ustar maartenmaartenlibpdb-redo-3.0.5/include/pdb-redo/0000775000175000017500000000000014364232314016665 5ustar maartenmaartenlibpdb-redo-3.0.5/include/pdb-redo/AtomShape.hpp0000664000175000017500000000445014364232314021262 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // AtomShape, analogue to the similarly named code in clipper #pragma once #include namespace pdb_redo { // -------------------------------------------------------------------- // Class used in calculating radii class AtomShape { public: AtomShape(cif::row_handle atom, cif::row_handle atom_aniso, float resHigh, float resLow, bool electronScattering, std::optional bFactor = {}); AtomShape(const cif::mm::atom &atom, float resHigh, float resLow, bool electronScattering, std::optional bFactor = {}) : AtomShape(atom.get_row(), atom.get_row_aniso(), resHigh, resLow, electronScattering, bFactor) { } ~AtomShape(); AtomShape(const AtomShape &) = delete; AtomShape &operator=(const AtomShape &) = delete; float radius() const; float calculatedDensity(float r) const; float calculatedDensity(cif::point p) const; private: struct AtomShapeImpl *mImpl; }; } // namespace pdb_redo libpdb-redo-3.0.5/include/pdb-redo/BondMap.hpp0000664000175000017500000000660114364232314020721 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include #include #include #include #include namespace pdb_redo { class BondMapException : public std::runtime_error { public: BondMapException(const std::string &msg) : runtime_error(msg) { } }; class BondMap { public: BondMap(const cif::mm::structure &structure) : BondMap(structure.get_datablock(), structure.get_model_nr()) { } BondMap(const cif::datablock &db, size_t model_nr = 1); BondMap(const BondMap &) = delete; BondMap &operator=(const BondMap &) = delete; bool operator()(const std::string &atom_1, const std::string &atom_2) const { return isBonded(index.at(atom_1), index.at(atom_2)); } bool operator()(const cif::mm::atom &atom_1, const cif::mm::atom &atom_2) const { return operator()(atom_1.id(), atom_2.id()); } bool is1_4(const std::string &atom_1, const std::string &atom_2) const { uint32_t ixa = index.at(atom_1); uint32_t ixb = index.at(atom_2); return bond_1_4.count(key(ixa, ixb)); } bool is1_4(const cif::mm::atom &atom_1, const cif::mm::atom &atom_2) const { return is1_4(atom_1.id(), atom_2.id()); } // links coming from the struct_conn records: std::vector linked(const std::string &atom) const; // This list of atomID's is comming from either CCD or the CCP4 dictionaries loaded static std::vector atomIDsForCompound(const std::string &compoundID); private: bool isBonded(uint32_t ai, uint32_t bi) const { return bond.count(key(ai, bi)) != 0; } uint64_t key(uint32_t a, uint32_t b) const { if (a > b) std::swap(a, b); return static_cast(a) | (static_cast(b) << 32); } std::tuple dekey(uint64_t k) const { return std::make_tuple( static_cast(k >> 32), static_cast(k)); } uint32_t dim; std::unordered_map index; std::set bond, bond_1_4; std::map> link; }; } // namespace pdbx libpdb-redo-3.0.5/include/pdb-redo/ClipperWrapper.hpp0000664000175000017500000000437214364232314022343 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include namespace pdb_redo { clipper::Atom toClipper(const cif::mm::atom &atom); clipper::Atom toClipper(cif::row_handle atom, cif::row_handle aniso_row); inline clipper::Coord_orth toClipper(const cif::point &pt) { return { pt.m_x, pt.m_y, pt.m_z }; } inline cif::point toPoint(const clipper::Coord_orth &pt) { return { static_cast(pt.x()), static_cast(pt.y()), static_cast(pt.z()) }; } // -------------------------------------------------------------------- clipper::Spacegroup getSpacegroup(const cif::datablock &db); clipper::Cell getCell(const cif::datablock &db); // -------------------------------------------------------------------- cif::symop_data GetSymOpDataForRTop_frac(const clipper::RTop_frac &rt); int getSpacegroupNumber(const clipper::Spacegroup &sg); } // namespace pdb_redolibpdb-redo-3.0.5/include/pdb-redo/Compound.hpp0000664000175000017500000002374314364232314021173 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include #include #include #include "cif++.hpp" namespace pdb_redo { // -------------------------------------------------------------------- // The chemical composition of the structure in an mmCIF file is // defined in the class composition. A compositon consists of // entities. Each Entity can be either a polymer, a non-polymer // a macrolide or a water molecule. // Entities themselves are made up of compounds. And compounds // contain CompoundAtom records for each atom. class Compound; class Link; struct CompoundAtom; enum BondType { singleBond, doubleBond, tripleBond, delocalizedBond }; // -------------------------------------------------------------------- // struct containing information about an atom in a chemical compound // This information comes from the CCP4 monomer library. struct CompoundAtom { std::string id; cif::atom_type typeSymbol; std::string typeEnergy; float partialCharge; }; // -------------------------------------------------------------------- // struct containing information about the bonds // This information comes from the CCP4 monomer library. struct CompoundBond { std::string atomID[2]; BondType type; float distance; float esd; }; // -------------------------------------------------------------------- // struct containing information about the bond-angles // This information comes from the CCP4 monomer library. struct CompoundAngle { std::string atomID[3]; float angle; float esd; }; // -------------------------------------------------------------------- // struct containing information about the bond-angles // This information comes from the CCP4 monomer library. struct CompoundTorsion { std::string atomID[4]; float angle; float esd; int period; }; // -------------------------------------------------------------------- // struct containing information about the bond-angles // This information comes from the CCP4 monomer library. struct CompoundPlane { std::string id; std::vector atomID; float esd; }; // -------------------------------------------------------------------- // struct containing information about a chiral centre // This information comes from the CCP4 monomer library. enum ChiralVolumeSign { negativ, positiv, both }; struct CompoundChiralCentre { std::string id; std::string atomIDCentre; std::string atomID[3]; ChiralVolumeSign volumeSign; }; // -------------------------------------------------------------------- // a class that contains information about a chemical compound. // This information is derived from the ccp4 monomer library by default. // To create compounds, you'd best use the factory method. class Compound { public: Compound(const std::string &file, const std::string &id, const std::string &name, const std::string &group); // factory method, create a Compound based on the three letter code // (for amino acids) or the one-letter code (for bases) or the // code as it is known in the CCP4 monomer library. static const Compound *create(const std::string &id); // // this second factory method can create a Compound even if it is not // // recorded in the library. It will take the values from the CCP4 lib // // unless the value passed to this function is not empty. // static const Compound *create(const std::string &id, const std::string &name, // const std::string &type, const std::string &formula); // add an additional path to the monomer library. static void addMonomerLibraryPath(const std::string &dir); // accessors std::string id() const { return mID; } std::string name() const { return mName; } std::string type() const; std::string group() const { return mGroup; } std::vector atoms() const { return mAtoms; } std::vector bonds() const { return mBonds; } std::vector angles() const { return mAngles; } std::vector chiralCentres() const { return mChiralCentres; } std::vector planes() const { return mPlanes; } std::vector torsions() const { return mTorsions; } CompoundAtom get_atom_by_atom_id(const std::string &atomID) const; bool atomsBonded(const std::string &atomId_1, const std::string &atomId_2) const; float atomBondValue(const std::string &atomId_1, const std::string &atomId_2) const; float bondAngle(const std::string &atomId_1, const std::string &atomId_2, const std::string &atomId_3) const; float chiralVolume(const std::string ¢reID) const; std::string formula() const; float formulaWeight() const; int charge() const; bool isWater() const; bool isSugar() const; // std::vector isomers() const; // bool isIsomerOf(const Compound &c) const; // std::vector> mapToIsomer(const Compound &c) const; private: ~Compound(); cif::file mCF; std::string mID; std::string mName; std::string mGroup; std::vector mAtoms; std::vector mBonds; std::vector mAngles; std::vector mTorsions; std::vector mChiralCentres; std::vector mPlanes; }; // -------------------------------------------------------------------- // struct containing information about the bonds // This information comes from the CCP4 monomer library. struct LinkAtom { int compID; std::string atomID; bool operator==(const LinkAtom &rhs) const { return compID == rhs.compID and atomID == rhs.atomID; } }; struct LinkBond { LinkAtom atom[2]; BondType type; float distance; float esd; }; // -------------------------------------------------------------------- // struct containing information about the bond-angles // This information comes from the CCP4 monomer library. struct LinkAngle { LinkAtom atom[3]; float angle; float esd; }; // -------------------------------------------------------------------- // struct containing information about the bond-torsions // This information comes from the CCP4 monomer library. struct LinkTorsion { LinkAtom atom[4]; float angle; float esd; int period; }; // -------------------------------------------------------------------- // struct containing information about the bond-angles // This information comes from the CCP4 monomer library. struct LinkPlane { std::string id; std::vector atoms; float esd; }; // -------------------------------------------------------------------- // struct containing information about a chiral centre // This information comes from the CCP4 monomer library. struct LinkChiralCentre { std::string id; LinkAtom atomCentre; LinkAtom atom[3]; ChiralVolumeSign volumeSign; }; // -------------------------------------------------------------------- // a class that contains information about a chemical link between compounds. // This information is derived from the ccp4 monomer library by default. class Link { public: Link(cif::datablock &db); // Factory method. static const Link &create(const std::string &id); // accessors std::string id() const { return mID; } std::vector bonds() const { return mBonds; } std::vector angles() const { return mAngles; } std::vector chiralCentres() const { return mChiralCentres; } std::vector planes() const { return mPlanes; } std::vector torsions() const { return mTorsions; } float atomBondValue(const LinkAtom &atomId_1, const LinkAtom &atomId_2) const; float bondAngle(const LinkAtom &atomId_1, const LinkAtom &atomId_2, const LinkAtom &atomId_3) const; /// \brief Calculate the target chiral volume for \a id for the link between \a compound_id_1 and \a compound_id_2 /// The compound id's are required to calculate standard bond lengths in case these are not recorded in the link record float chiralVolume(const std::string &id, const std::string &compound_id_1, const std::string &compound_id_2) const; private: ~Link(); std::string mID; std::vector mBonds; std::vector mAngles; std::vector mTorsions; std::vector mChiralCentres; std::vector mPlanes; }; // -------------------------------------------------------------------- // Factory class for Compound and Link objects class CompoundFactory { public: static CompoundFactory &instance(); const Compound *get(std::string id); const Compound *create(std::string id); const Link *getLink(std::string id); const Link *createLink(std::string id); ~CompoundFactory(); void pushDictionary(const std::filesystem::path &inDictFile); void pushDictionary(std::istream &inDictionary); void popDictionary(); private: CompoundFactory(); class CompoundFactoryImpl *mImpl; }; } // namespace pdb_redolibpdb-redo-3.0.5/include/pdb-redo/DistanceMap.hpp0000664000175000017500000000600014364232314021562 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include #include #include #ifdef near #undef near #endif namespace pdb_redo { class DistanceMap { public: DistanceMap(const cif::mm::structure &p, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, float maxDistance); DistanceMap(const cif::mm::structure &p, float maxDistance) : DistanceMap(p, getSpacegroup(p.get_datablock()), getCell(p.get_datablock()), maxDistance) { } DistanceMap(const DistanceMap &) = delete; DistanceMap &operator=(const DistanceMap &) = delete; float operator()(const std::string &a, const std::string &b) const; std::vector near(const cif::mm::atom &atom, float maxDistance = 3.5f) const; static std::vector AlternativeSites(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell); private: using DistKeyType = std::tuple; using DistValueType = std::tuple; using DistMap = std::map; void AddDistancesForAtoms(const std::vector> &a, const std::vector> &b, DistMap &dm, int32_t rtix); const cif::mm::structure &mStructure; clipper::Cell cell; clipper::Spacegroup spacegroup; size_t dim; std::unordered_map index; std::map rIndex; float mMaxDistance, mMaxDistanceSQ; std::vector> mA; std::vector mIA, mJA; cif::point mD; // needed to move atoms to center std::vector mRtOrth; }; } // namespace pdb_redo libpdb-redo-3.0.5/include/pdb-redo/MapMaker.hpp0000664000175000017500000001410414364232314021073 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include // My apologies, but this code is emitting way too many warnings... #if defined(_MSC_VER) #pragma warning(disable : 4244) // possible loss of data (in conversion to smaller type) #endif namespace pdb_redo { using cif::kPI; template class Map { public: typedef FTYPE ftype; typedef typename clipper::Xmap Xmap; Map(); Map(const Map &rhs) = default; ~Map(); Map& operator=(const Map &rhs) = default; void calculateStats(); double rmsDensity() const { return mRMSDensity; } double meanDensity() const { return mMeanDensity; } operator Xmap &() { return mMap; } operator const Xmap &() const { return mMap; } Xmap &get() { return mMap; } const Xmap &get() const { return mMap; } // These routines work with CCP4 map files void read(const std::filesystem::path &f); void write(const std::filesystem::path &f); void write_masked(std::ostream &os, clipper::Grid_range range); void write_masked(const std::filesystem::path &f, clipper::Grid_range range); clipper::Spacegroup spacegroup() const { return mMap.spacegroup(); } clipper::Cell cell() const { return mMap.cell(); } /// \brief Create a masked map blotting out the density for all \a atom_ids in the structure contained in \a db Map masked(const cif::mm::structure &structure, const std::vector &atom_ids) const; /// \brief Return the z-weighted density sum for the atoms \a atom_ids in the structure contained in \a db float z_weighted_density(const cif::mm::structure &structure, const std::vector &atom_ids) const; private: Xmap mMap; double mMinDensity, mMaxDensity; double mRMSDensity, mMeanDensity; }; using clipper::HKL_data; using clipper::HKL_info; using clipper::data32::F_phi; using clipper::data32::F_sigF; using clipper::data32::Flag; using clipper::data32::Phi_fom; using clipper::Cell; using clipper::Grid_sampling; using clipper::Spacegroup; // -------------------------------------------------------------------- bool IsMTZFile(const std::string &p); // -------------------------------------------------------------------- template class MapMaker { public: typedef Map MapType; typedef typename MapType::Xmap Xmap; enum AnisoScalingFlag { as_None, as_Observed, as_Calculated }; MapMaker(); ~MapMaker(); MapMaker(const MapMaker &) = delete; MapMaker &operator=(const MapMaker &) = delete; void loadMTZ(const std::filesystem::path &mtzFile, float samplingRate, std::initializer_list fbLabels = {"FWT", "PHWT"}, std::initializer_list fdLabels = {"DELFWT", "PHDELWT"}, std::initializer_list foLabels = {"FP", "SIGFP"}, std::initializer_list fcLabels = {"FC_ALL", "PHIC_ALL"}, std::initializer_list faLabels = {"FAN", "PHAN"}); void loadMaps( const std::filesystem::path &fbMapFile, const std::filesystem::path &fdMapFile, float reshi, float reslo); // following works on both mtz files and structure factor files in CIF format void calculate(const std::filesystem::path &hklin, const cif::mm::structure &structure, bool noBulk, AnisoScalingFlag anisoScaling, float samplingRate, bool electronScattering = false, std::initializer_list foLabels = {"FP", "SIGFP"}, std::initializer_list freeLabels = {"FREE"}); void recalc(const cif::mm::structure &structure, bool noBulk, AnisoScalingFlag anisoScaling, float samplingRate, bool electronScattering = false); void printStats(); void writeMTZ(const std::filesystem::path &file, const std::string &project, const std::string &crystal); MapType &fb() { return mFb; } MapType &fd() { return mFd; } MapType &fa() { return mFa; } const MapType &fb() const { return mFb; } const MapType &fd() const { return mFd; } const MapType &fa() const { return mFa; } double resLow() const { return mResLow; } double resHigh() const { return mResHigh; } const Spacegroup &spacegroup() const { return mHKLInfo.spacegroup(); } const Cell &cell() const { return mHKLInfo.cell(); } const Grid_sampling &gridSampling() const { return mGrid; } private: void loadFoFreeFromReflectionsFile(const std::filesystem::path &hklin); void loadFoFreeFromMTZFile(const std::filesystem::path &hklin, std::initializer_list foLabels, std::initializer_list freeLabels); void fixMTZ(); MapType mFb, mFd, mFa; Grid_sampling mGrid; double mResLow, mResHigh; int mNumRefln = 1000, mNumParam = 20; // Cached raw data HKL_info mHKLInfo; HKL_data mFoData; HKL_data mFreeData; HKL_data mFcData, mFbData, mFdData, mFaData; HKL_data mPhiFomData; }; } // namespace pdb_redo libpdb-redo-3.0.5/include/pdb-redo/Minimizer.hpp0000664000175000017500000001353514364232314021350 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 22 mei, 2018 */ #pragma once #include #include #include "pdb-redo/BondMap.hpp" #include "pdb-redo/Compound.hpp" #include "pdb-redo/MapMaker.hpp" #include "pdb-redo/Restraints.hpp" // -------------------------------------------------------------------- namespace pdb_redo { class AtomLocationProvider { public: AtomLocationProvider(const AtomLocationProvider &) = delete; AtomLocationProvider &operator=(const AtomLocationProvider &) = delete; AtomLocationProvider(std::vector &atoms) : mAtoms(atoms) { } virtual ~AtomLocationProvider() {} virtual DPoint operator[](AtomRef atomID) const; virtual std::string atom(AtomRef atomID) const; protected: std::vector &mAtoms; }; // -------------------------------------------------------------------- class DFCollector { public: DFCollector(const DFCollector &) = delete; DFCollector &operator=(const DFCollector &) = delete; DFCollector() {} virtual ~DFCollector() {} virtual void add(AtomRef atom, double dx, double dy, double dz) = 0; void add(AtomRef atom, DPoint &&d) { add(atom, d.m_x, d.m_y, d.m_z); } }; // -------------------------------------------------------------------- class Minimizer { public: typedef clipper::Xmap XMap; Minimizer(const Minimizer &) = delete; Minimizer &operator=(const Minimizer &) = delete; virtual ~Minimizer() {} // factory method: static Minimizer *create(const cif::mm::polymer &poly, int first, int last, const BondMap &bm, const XMap &xMap, float mapWeight = 60, float plane5AtomsESD = 0.11); static Minimizer *create(cif::mm::structure &structure, const std::vector &atoms, const BondMap &bm, const XMap &xMap, float mapWeight = 60, float plane5AtomsESD = 0.11) { return create(structure, atoms, bm, plane5AtomsESD, &xMap, mapWeight); } // factory method for minimizer without density: static Minimizer *create(cif::mm::structure &structure, const std::vector &atoms, const BondMap &bm, float plane5AtomsESD = 0.11) { return create(structure, atoms, bm, plane5AtomsESD, nullptr, 0); } void dropTorsionRestraints(); void printStats(); virtual double refine(bool storeAtoms) = 0; double score(); virtual std::vector> getAtoms() const = 0; virtual void storeAtomLocations() = 0; protected: Minimizer(const cif::mm::structure &structure, const BondMap &bm, float plane5AtomsESD); static Minimizer *create(cif::mm::structure &structure, const std::vector &atoms, const BondMap &bm, float plane5AtomsESD, const XMap *xMap, float mapWeight); virtual void addResidue(const cif::mm::residue &res); virtual void addPolySection(const cif::mm::polymer &poly, int first, int last); virtual void addDensityMap(const XMap &xMap, float mapWeight); virtual void Finish(); double score(const AtomLocationProvider &loc); void addLinkRestraints(const cif::mm::residue &a, const cif::mm::residue &b, const std::string &atom_id_a, const std::string &atom_id_b, const std::string &linkName) { addLinkRestraints(a, b, atom_id_a, atom_id_b, Link::create(linkName)); } void addLinkRestraints(const cif::mm::residue &a, const cif::mm::residue &b, const std::string &atom_id_a, const std::string &atom_id_b, const Link &link); template double rmsz(const AtomLocationProvider &atoms, const std::vector &a) const { double result = 0; if (not a.empty()) { double sumZ = accumulate(a.begin(), a.end(), 0.0, [&atoms](double sum, const R &r) { double z = r.f(atoms); return sum + z; }); result = std::sqrt(sumZ / a.size()); } return result; } AtomRef ref(const cif::mm::atom &atom); bool mElectronScattering = false; // TODO: use! const cif::mm::structure &mStructure; const BondMap &mBonds; float mPlane5ESD; std::vector mAtoms, mReferencedAtoms; std::vector mRef2AtomIndex; std::map mRefIndex; std::vector mBondRestraints; std::vector mAngleRestraints; std::vector mTorsionRestraints; std::vector mTransPeptideRestraints; std::vector mChiralVolumeRestraints; std::vector mPlanarityRestraints; std::vector mNonBondedContactRestraints; std::unique_ptr mDensityRestraint; std::vector mRestraints; }; } // namespace pdb_redolibpdb-redo-3.0.5/include/pdb-redo/Ramachandran.hpp0000664000175000017500000000342614364232314021762 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 19 juni, 2018 */ #pragma once namespace pdb_redo { float calculateRamachandranZScore(const std::string &aa, bool prePro, float phi, float psi); enum RamachandranScore { rsNotAllowed, rsAllowed, rsFavoured }; RamachandranScore calculateRamachandranScore(const std::string &aa, bool prePro, float phi, float psi); } // namespace pdb_redo libpdb-redo-3.0.5/include/pdb-redo/ResolutionCalculator.hpp0000664000175000017500000000377314364232314023565 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include namespace pdb_redo { // -------------------------------------------------------------------- class ResolutionCalculator { public: ResolutionCalculator(double a, double b, double c, double alpha, double beta, double gamma); ResolutionCalculator(const clipper::Cell& cell); double operator()(int h, int k, int l) const { double tmpres = h * h * mCoefs[0] + h * k * mCoefs[1] + h * l * mCoefs[2] + k * k * mCoefs[3] + k * l * mCoefs[4] + l * l * mCoefs[5]; return 1.0 / std::sqrt(tmpres); } private: double mCoefs[6]; }; } libpdb-redo-3.0.5/include/pdb-redo/Restraints.hpp0000664000175000017500000001354414364232314021543 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 22 mei, 2018 */ #pragma once #include #include #include namespace pdb_redo { using DPoint = cif::point_type; // -------------------------------------------------------------------- class AtomLocationProvider; class DFCollector; // -------------------------------------------------------------------- typedef size_t AtomRef; typedef typename Map::Xmap Xmap; // -------------------------------------------------------------------- struct Restraint { virtual ~Restraint() {} virtual double f(const AtomLocationProvider &atoms) const = 0; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const = 0; virtual void print(const AtomLocationProvider &atoms) const = 0; }; struct BondRestraint : public Restraint { BondRestraint(AtomRef a, AtomRef b, double distance, double esd) : mA(a) , mB(b) , mDist(distance) , mDistESD(esd) { } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; AtomRef mA, mB; double mDist, mDistESD; }; struct AngleRestraint : public Restraint { AngleRestraint(AtomRef a, AtomRef b, AtomRef c, double angle, double esd) : mA(a) , mB(b) , mC(c) , mAngle(angle) , mESD(esd) { } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; AtomRef mA, mB, mC; double mAngle, mESD; }; struct TorsionRestraint : public Restraint { TorsionRestraint(AtomRef a, AtomRef b, AtomRef c, AtomRef d, double target, double esd, int periodicity) : mA(a) , mB(b) , mC(c) , mD(d) , mPeriodicity(periodicity) , mTarget(target) , mESD(esd) { } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; AtomRef mA, mB, mC, mD; int mPeriodicity; double mTarget, mESD; private: std::tuple CalculateTorsionGradients(float theta, DPoint p[4]) const; }; struct TransPeptideRestraint : public TorsionRestraint { TransPeptideRestraint(AtomRef a, AtomRef b, AtomRef c, AtomRef d, double esd = 2.0) : TorsionRestraint(a, b, c, d, 180.0, esd, 2) { } }; struct ChiralVolumeRestraint : public Restraint { ChiralVolumeRestraint(AtomRef c, AtomRef a1, AtomRef a2, AtomRef a3, double volume) : mCentre(c) , mA1(a1) , mA2(a2) , mA3(a3) , mVolume(volume) { } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; AtomRef mCentre, mA1, mA2, mA3; double mVolume; }; struct PlanarityRestraint : public Restraint { PlanarityRestraint(std::vector &&atoms, double esd) : mAtoms(std::move(atoms)) , mESD(esd) { if (mAtoms.size() < 3) throw std::runtime_error("Insufficient number of atoms in planar restraint"); } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; void calculatePlaneFunction(const AtomLocationProvider &atoms, double abcd[4]) const; std::vector mAtoms; double mESD; }; struct NonBondedContactRestraint : public Restraint { NonBondedContactRestraint(AtomRef a, AtomRef b, double minDist, double esd) : mA(a) , mB(b) , mMinDist(minDist) , mMinDistSq(minDist * minDist) , mDistESD(esd) { } virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; AtomRef mA, mB; double mMinDist, mMinDistSq, mDistESD; }; struct DensityRestraint : public Restraint { DensityRestraint(std::vector> &&atoms, const Xmap &xMap, double mapWeight = 60); virtual double f(const AtomLocationProvider &atoms) const; virtual void df(const AtomLocationProvider &atoms, DFCollector &d) const; virtual void print(const AtomLocationProvider &atoms) const; std::vector> mAtoms; const Xmap &mXMap; double mMapWeight; bool mElectronScattering = false; }; } // namespace pdb_redolibpdb-redo-3.0.5/include/pdb-redo/SkipList.hpp0000664000175000017500000001071214364232314021141 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: maandag 07 januari, 2019 Skip list for e.g. pepflip */ #pragma once #include #include #if __has_include() #include using std::experimental::optional; #else #include using std::optional; #endif namespace pdb_redo { struct ResidueSpec { std::string auth_asym_id; std::string auth_comp_id; std::string auth_seq_id; optional pdbx_PDB_ins_code; std::string label_asym_id; std::string label_comp_id; int label_seq_id; ResidueSpec() {} ResidueSpec(const std::string &auth_asym_id, const std::string &auth_comp_id, const std::string &auth_seq_id, const std::string &pdbx_PDB_ins_code, const std::string &label_asym_id, const std::string &label_comp_id, int label_seq_id) : auth_asym_id(auth_asym_id) , auth_comp_id(auth_comp_id) , auth_seq_id(auth_seq_id) #if __has_include() , pdbx_PDB_ins_code(pdbx_PDB_ins_code.empty() ? optional{} : std::experimental::make_optional(pdbx_PDB_ins_code.c_str()[0])) #else , pdbx_PDB_ins_code(pdbx_PDB_ins_code.empty() ? optional{} : std::make_optional(pdbx_PDB_ins_code.c_str()[0])) #endif , label_asym_id(label_asym_id) , label_comp_id(label_comp_id) , label_seq_id(label_seq_id) { } ResidueSpec(const ResidueSpec &rhs) = default; ResidueSpec &operator=(const ResidueSpec &rhs) = default; ResidueSpec(const cif::mm::residue &res) : auth_asym_id(res.get_auth_asym_id()) , auth_comp_id(res.get_compound_id()) , auth_seq_id(res.get_auth_seq_id()) , label_asym_id(res.get_asym_id()) , label_comp_id(res.get_compound_id()) , label_seq_id(res.get_seq_id()) { char ins_code = res.get_pdb_ins_code().c_str()[0]; if (ins_code != 0 and ins_code != ' ') pdbx_PDB_ins_code = ins_code; } ResidueSpec(const cif::mm::atom &atom) : auth_asym_id(atom.get_auth_asym_id()) , auth_comp_id(atom.get_label_comp_id()) , auth_seq_id(atom.get_auth_seq_id()) , label_asym_id(atom.get_label_asym_id()) , label_comp_id(atom.get_label_comp_id()) , label_seq_id(atom.get_label_seq_id()) { char ins_code = atom.get_pdb_ins_code().c_str()[0]; if (ins_code != 0 and ins_code != ' ') pdbx_PDB_ins_code = ins_code; } bool operator==(const ResidueSpec &rhs) const { return auth_asym_id == rhs.auth_asym_id and auth_comp_id == rhs.auth_comp_id and auth_seq_id == rhs.auth_seq_id and pdbx_PDB_ins_code == rhs.pdbx_PDB_ins_code and label_asym_id == rhs.label_asym_id and label_comp_id == rhs.label_comp_id and label_seq_id == rhs.label_seq_id; } }; using SkipList = std::vector; enum class SkipListFormat { OLD, CIF }; // -------------------------------------------------------------------- SkipList readSkipList(const std::filesystem::path &file); SkipList readSkipList(std::istream &is); void writeSkipList(std::ostream &os, const SkipList &list, SkipListFormat format); void writeSkipList(const std::filesystem::path &file, const SkipList &list, SkipListFormat format); } // namespace pdb_redolibpdb-redo-3.0.5/include/pdb-redo/Statistics.hpp0000664000175000017500000001234014364232314021530 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include "pdb-redo/DistanceMap.hpp" #include "pdb-redo/MapMaker.hpp" namespace pdb_redo { // -------------------------------------------------------------------- struct AtomData; class BoundingBox; struct ResidueStatistics { std::string asymID; int seqID; std::string compID; std::string authSeqID; double RSR, SRSR, RSCCS, EDIAm, OPIA; int ngrid; }; std::ostream &operator<<(std::ostream &os, const ResidueStatistics &st); // -------------------------------------------------------------------- template void iterateGrid(const clipper::Coord_orth &p, float r, const clipper::Xmap &m, F &&func) { using namespace clipper; Coord_frac fp = p.coord_frac(m.cell()); Coord_frac o = Coord_orth(r, r, r).coord_frac(m.cell()); o[0] = std::abs(o[0]); o[1] = std::abs(o[1]); o[2] = std::abs(o[2]); Coord_frac fMin = fp - o, fMax = fp + o; Coord_map mMin = fMin.coord_map(m.grid_sampling()), mMax = fMax.coord_map(m.grid_sampling()); Coord_grid gMin = mMin.floor(), gMax = mMax.ceil(); auto i0 = Xmap_base::Map_reference_coord(m, gMin); for (auto iu = i0; iu.coord().u() <= gMax[0]; iu.next_u()) for (auto iv = iu; iv.coord().v() <= gMax[1]; iv.next_v()) for (auto iw = iv; iw.coord().w() <= gMax[2]; iw.next_w()) func(iw); } // -------------------------------------------------------------------- class StatsCollector { public: StatsCollector(const StatsCollector &) = delete; StatsCollector &operator=(const StatsCollector &) = delete; StatsCollector(const MapMaker &mm, cif::mm::structure &structure, bool electronScattering); virtual std::vector collect() const; virtual std::vector collect(const std::string &asymID, int resFirst, int resLast, bool authNameSpace = true) const; virtual ResidueStatistics collect(std::initializer_list residues) const; virtual ResidueStatistics collect(std::initializer_list atoms) const; virtual ResidueStatistics collect(const std::vector &atoms) const; protected: using residue_list = std::vector>; // asym-seqid-compid std::vector collect(const residue_list &residues, BoundingBox &bbox, bool addWaters) const; void initialize(); virtual void calculate(std::vector &atomData) const; struct cmpGPt { bool operator()(const clipper::Coord_grid &a, const clipper::Coord_grid &b) const { int d = a.u() - b.u(); if (d == 0) d = a.v() - b.v(); if (d == 0) d = a.w() - b.w(); return d < 0; } }; typedef std::map GridPtDataMap; cif::mm::structure &mStructure; const MapMaker &mMapMaker; clipper::Spacegroup mSpacegroup; clipper::Cell mCell; clipper::Grid_sampling mGrid; float mResHigh, mResLow; bool mElectronScattering; std::map> mRmsScaled; void collectSums(std::vector &atomData, GridPtDataMap &gridPointDensity) const; void sumDensity(std::vector &atomData, GridPtDataMap &gridPointDensity, std::map> &zScoresPerAsym) const; // Other variables we cache double mMeanDensityFb, mRMSDensityFb, mRMSDensityFd; double mSZ; // average electron density in cell double mVF; // degrees of freedom double mVC; // cell volume? }; // -------------------------------------------------------------------- class EDIAStatsCollector : public StatsCollector { public: EDIAStatsCollector(MapMaker &mm, cif::mm::structure &structure, bool electronScattering, const BondMap &bondMap); protected: virtual void calculate(std::vector &atomData) const; DistanceMap mDistanceMap; const BondMap &mBondMap; std::map mRadii; }; } // namespace pdb_redo libpdb-redo-3.0.5/include/pdb-redo/Symmetry-2.hpp0000664000175000017500000001417714364232314021400 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #pragma once #include #include "pdb-redo/ClipperWrapper.hpp" namespace pdb_redo { // -------------------------------------------------------------------- // Functions to use when working with symmetry stuff clipper::Coord_orth CalculateOffsetForCell(const cif::mm::structure &structure, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell); std::vector AlternativeSites(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell); // int GetSpacegroupNumber(std::string spacegroup); // alternative for clipper's parsing code // std::string SpacegroupToHall(std::string spacegroup); cif::mm::atom symmetryCopy(const cif::mm::atom &atom, const cif::point &d, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, const clipper::RTop_orth &rt); std::string describeRToperation(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, const clipper::RTop_orth &rt); // -------------------------------------------------------------------- // To iterate over all symmetry copies of an atom class SymmetryAtomIteratorFactory { public: SymmetryAtomIteratorFactory(const cif::mm::structure &structure, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell); SymmetryAtomIteratorFactory(const cif::mm::structure &structure, int spacegroupNr, const clipper::Cell &cell); SymmetryAtomIteratorFactory(const SymmetryAtomIteratorFactory &) = delete; SymmetryAtomIteratorFactory &operator=(const SymmetryAtomIteratorFactory &) = delete; template class SymmetryAtomIterator { public: using iterator_category = std::forward_iterator_tag; using value_type = cif::mm::atom; using difference_type = std::ptrdiff_t; using pointer = value_type*; using reference = value_type &; SymmetryAtomIterator(const SymmetryAtomIteratorFactory &factory, const cif::mm::atom &atom, ConditionFunc &cond) : m_f(&factory) , m_i(0) , m_a(atom) , m_c(atom) , m_cond(cond) { while (not test() and m_i < m_f->mRtOrth.size()) ++m_i; } SymmetryAtomIterator(const SymmetryAtomIteratorFactory &factory, const cif::mm::atom &atom, ConditionFunc &cond, int) : SymmetryAtomIterator(factory, atom, cond) { m_i = m_f->mRtOrth.size(); } SymmetryAtomIterator(const SymmetryAtomIterator &iter) : m_f(iter.m_f) , m_i(iter.m_i) , m_a(iter.m_a) , m_c(iter.m_c) , m_cond(iter.m_cond) { } SymmetryAtomIterator &operator=(const SymmetryAtomIterator &iter) { if (this != &iter) { m_f = iter.m_f; m_i = iter.m_i; m_a = iter.m_a; m_c = iter.m_c; } return *this; } reference operator*() { return m_c; } pointer operator->() { return &m_c; } SymmetryAtomIterator operator++() { while (m_i < m_f->mRtOrth.size()) { ++m_i; if (test()) break; } return *this; } SymmetryAtomIterator operator++(int) { SymmetryAtomIterator result(*this); this->operator++(); return result; } bool operator==(const SymmetryAtomIterator &iter) const { return m_f == iter.m_f and m_i == iter.m_i; } bool operator!=(const SymmetryAtomIterator &iter) const { return m_f != iter.m_f or m_i != iter.m_i; } private: bool test() { bool result = false; if (m_i < m_f->mRtOrth.size()) { auto &rt = m_f->mRtOrth[m_i]; auto loc = m_a.get_location(); loc += m_f->mD; loc = toPoint(toClipper(loc).transform(rt)); loc -= m_f->mD; if (m_cond(loc)) { std::string rt_operation = describeRToperation(m_f->mSpacegroup, m_f->mCell, rt); m_c = cif::mm::atom(m_a, loc, rt_operation); result = true; } } return result; } const SymmetryAtomIteratorFactory *m_f; size_t m_i; cif::mm::atom m_a, m_c; ConditionFunc &m_cond; }; template class SymmetryAtomIteratorRange { public: SymmetryAtomIteratorRange(const SymmetryAtomIteratorFactory &f, const cif::mm::atom &a, ConditionFunc &&cond) : m_f(f) , m_a(a) , m_cond(std::move(cond)) { } SymmetryAtomIterator begin() { return SymmetryAtomIterator(m_f, m_a, m_cond); } SymmetryAtomIterator end() { return SymmetryAtomIterator(m_f, m_a, m_cond, 1); } private: const SymmetryAtomIteratorFactory &m_f; cif::mm::atom m_a; ConditionFunc m_cond; }; template SymmetryAtomIteratorRange operator()(const cif::mm::atom &a, ConditionFunc &&cond) const { return SymmetryAtomIteratorRange(*this, a, std::forward(cond)); } // std::string symop_mmcif(const cif::mm::atom& a) const; private: clipper::Spacegroup mSpacegroup; cif::point mD; // needed to move atoms to center std::vector mRtOrth; clipper::Cell mCell; }; } // namespace pdb_redolibpdb-redo-3.0.5/src/0000775000175000017500000000000014364232314014335 5ustar maartenmaartenlibpdb-redo-3.0.5/src/AtomShape.cpp0000664000175000017500000004064314364232314016731 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "pdb-redo/AtomShape.hpp" #include "pdb-redo/ClipperWrapper.hpp" #if __has_include() #include #define HAVE_NEWUOA 1 #elif __has_include() #include #define HAVE_DLIB 1 #else #error "Should have either newuoa or dlib" #endif namespace pdb_redo { using cif::atom_type; using cif::atom_type_traits; using cif::point; using cif::kPI; // -------------------------------------------------------------------- // sine integration function based on the description in // GalSim: The modular galaxy image simulation toolkit // B.T.P. Rowe et. al. // DOI: 10.1016/j.ascom.2015.02.002 double sineIntegration(double x) { struct P { double n, d; }; double result = 0; if (x <= 4) { const P kP[] = { { 1, 1, }, { -4.54393409816329991e-2, 1.01162145739225565e-2 }, { 1.15457225751016682e-3, 4.99175116169755106e-5 }, { -1.41018536821330254e-5, 1.55654986308745614e-7 }, { 9.43280809438713025e-8, 3.28067571055789734e-10 }, { -3.53201978997168357e-10, 4.5049097575386581e-13 }, { 7.08240282274875911e-13, 3.21107051193712168e-16 }, { -6.05338212010422477e-16, 0 } }; double xs = x * x; double xi = 1; double sn = 0, sd = 0; for (auto p : kP) { sn += xi * p.n; sd += xi * p.d; xi *= xs; } result = x * (sn / sd); } else { const P kF[] = { { 1, 1, }, { 7.44437068161936700618e2, 7.46437068161927678031e2, }, { 1.96396372895146869801e5, 1.97865247031583951450e5, }, { 2.37750310125431834034e7, 2.41535670165126845144e7, }, { 1.43073403821274636888e9, 1.47478952192985464958e9, }, { 4.33736238870432522765e10, 4.58595115847765779830e10, }, { 6.40533830574022022911e11, 7.08501308149515401563e11, }, { 4.20968180571076940208e12, 5.06084464593475076774e12, }, { 1.00795182980368574617e13, 1.43468549171581016479e13, }, { 4.94816688199951963482e12, 1.11535493509914254097e13, }, { -4.94701168645415959931e11, 0 } }, kG[] = { { 1, 1, }, { 8.1359520115168615e2, 8.19595201151451564e2, }, { 2.35239181626478200e5, 2.40036752835578777e5, }, { 3.12557570795778731e7, 3.26026661647090822e7, }, { 2.06297595146763354e9, 2.23355543278099360e9, }, { 6.83052205423625007e10, 7.87465017341829930e10, }, { 1.09049528450362786e12, 1.39866710696414565e12, }, { 7.57664583257834349e12, 1.17164723371736605e13, }, { 1.81004487464664575e13, 4.01839087307656620e13, }, { 6.43291613143049485e12, 3.99653257887490811e13, }, { -1.36517137670871689e12, 0 } }; double xs = std::pow(x, -2); double xi = 1; double sn = 0, sd = 0; for (auto p : kF) { sn += xi * p.n; sd += xi * p.d; xi *= xs; } double fx = (sn / sd) / x; sn = 0; sd = 0; xi = 1; for (auto p : kG) { sn += xi * p.n; sd += xi * p.d; xi *= xs; } double gx = (sn / sd) / (x * x); result = cif::kPI / 2 - fx * std::cos(x) - gx * std::sin(x); } return result; } // -------------------------------------------------------------------- // Internal class to cache some common data class DensityIntegration { public: DensityIntegration(float resolutionLow, float resolutionHigh); static DensityIntegration &instance(float resolutionLow, float resolutionHigh); double integrateRadius(float perc, float occupancy, double yi, const std::vector &fst) const; double integrateDensity(double r, int ks, const std::vector &fst) const; float a() const { return mA; } float b() const { return mB; } const std::vector &st() const { return mST; } const std::vector &sts() const { return mSTS; } const std::vector &wa() const { return mWA; } private: float mA, mB; int mM; // Gauss-Legendre quadrature weights and abscissae std::vector mWA, mST, mSTS; static std::list sInstances; }; std::list DensityIntegration::sInstances; DensityIntegration &DensityIntegration::instance(float resolutionLow, float resolutionHigh) { static std::mutex m; std::lock_guard lock(m); float a = 0.5f / resolutionLow, b = 0.5f / resolutionHigh; auto i = find_if(sInstances.begin(), sInstances.end(), [=](const DensityIntegration &di) { return di.mA == a and di.mB == b; }); if (i == sInstances.end()) { sInstances.emplace_back(resolutionLow, resolutionHigh); i = prev(sInstances.end()); } return *i; } DensityIntegration::DensityIntegration(float resolutionLow, float resolutionHigh) { mA = 0.5f / resolutionLow; mB = 0.5f / resolutionHigh; mM = static_cast(12.0 * std::sqrt(1.2 * mB) + 1); if (mM < 3) mM = 3; int N = 2 * mM; // int J = N; double xr = mB - mA; double xh = .5 * xr; double xm = 0.5 * (mB + mA); mWA = std::vector(N, 0); mST = std::vector(N, 0); mSTS = std::vector(N, 0); for (int i = 1, j = N; i <= mM; ++i, --j) { double z, zo, dp; z = std::cos(cif::kPI * (i - 0.25) / (N + 0.5)); do { double p1 = 1; double p2 = 0; for (int k = 1; k <= N; ++k) { double p3 = p2; p2 = p1; p1 = ((2 * k - 1) * z * p2 - (k - 1) * p3) / k; } dp = N * (z * p1 - p2) / (z * z - 1); zo = z; z = z - p1 / dp; } while (std::abs(z - zo) > 3e-14); mWA[i - 1] = xr / ((1 - z * z) * dp * dp); mWA[j - 1] = mWA[i - 1]; mST[i - 1] = xm - xh * z; mST[j - 1] = xm + xh * z; } transform(mST.begin(), mST.end(), mSTS.begin(), [](double s) { return s * s; }); } // -------------------------------------------------------------------- // Calculate Radius integral over r of calculated density // code inspired by radint.f in edstats double DensityIntegration::integrateDensity(double r, int ks, const std::vector &fst) const { double y = 0; double rt = r; if (rt < 0) rt = 0; if (rt > 1e-10) { double t = 4 * cif::kPI * rt; y = 0; for (size_t i = 0; i < mST.size(); ++i) y += fst[i] * sineIntegration(t * mST[i]); if (r < 0) y = y - ks * r; } return ks * y; } #if HAVE_NEWUOA template NewuoaClosure make_closure(F &function) { struct Wrap { static double call(void *data, long n, const double *values) { return reinterpret_cast(data)->operator()(n, values); } }; return NewuoaClosure{ &function, &Wrap::call }; } #endif double DensityIntegration::integrateRadius(float perc, float occupancy, double yi, const std::vector &fst) const { double yt = perc * 0.25 * cif::kPI * occupancy * yi; #if HAVE_NEWUOA double initialValue = 0.25; // code from newuoa-example const long variables_count = 1; const long number_of_interpolation_conditions = (variables_count + 1) * (variables_count + 2) / 2; double variables_values[] = { initialValue }; const double initial_trust_region_radius = 1e-3; const double final_trust_region_radius = 1e3; const long max_function_calls_count = 100; const size_t working_space_size = NEWUOA_WORKING_SPACE_SIZE(variables_count, number_of_interpolation_conditions); double working_space[working_space_size]; auto function = [&](long n, const double *x) { assert(n == 1); return this->integrateDensity(x[0], -1, fst); }; auto closure = make_closure(function); double result = newuoa_closure( &closure, variables_count, number_of_interpolation_conditions, variables_values, initial_trust_region_radius, final_trust_region_radius, max_function_calls_count, working_space); double y1 = 0; double y2 = -result; double x1 = 0; double x2 = variables_values[0]; #else auto function = [&](const double x) { return this->integrateDensity(x, -1, fst); }; auto r = dlib::find_min_global(function, { 1e-3 }, { 1e3 }, { false }, dlib::max_function_calls(10)); double result = r.x(0); double y1 = 0; double y2 = -r.y; double x1 = 0; double x2 = result; #endif const double kRE = 5e-5; if (y2 > yt) { for (int it = 0; it < 100; ++it) { double x = 0.5 * (x1 + x2); double y = integrateDensity(x, 1, fst); if (std::abs(y - yt) < kRE * std::abs(yt)) { result = x; break; } if ((y1 < yt and y < yt) or (y1 > yt and y > yt)) { x1 = x; y1 = y; } else { x2 = x; y2 = y; } } } else result = x2; return result; } // -------------------------------------------------------------------- struct AtomShapeImpl { virtual ~AtomShapeImpl() = default; AtomShapeImpl(point location, atom_type symbol, int charge, float uIso, float occupancy, float resHigh, float resLow, bool electronScattering) : mSymbol(symbol) , mCharge(charge) , mUIso(uIso) , mOccupancy(occupancy) , mResHigh(resHigh) , mResLow(resLow) , mElectronScattering(electronScattering) , mLocation(location) , mIntegrator(DensityIntegration::instance(resLow, resHigh)) { auto st = mIntegrator.st(); auto sts = mIntegrator.sts(); auto wa = mIntegrator.wa(); mYi = 0; mFst = std::vector(st.size(), 0); auto &D = mElectronScattering ? atom_type_traits(symbol).elsf() : atom_type_traits(symbol).wksf(charge); auto bIso = clipper::Util::u2b(uIso); if (bIso == 0 and cif::VERBOSE >= 0) std::cerr << "Zero b-factor?" << std::endl; float as = mIntegrator.a() * mIntegrator.a(); float bs = mIntegrator.b() * mIntegrator.b(); for (int i = 0; i < 6; ++i) { double bi = D.b[i] + bIso; mYi += D.a[i] * (std::exp(-bi * as) - std::exp(-bi * bs)) / bi; } for (size_t i = 0; i < st.size(); ++i) { double t = 0; for (int j = 0; j < 6; ++j) { double bj = D.b[j] + bIso; t += D.a[j] * std::exp(-bj * sts[i]); } mFst[i] = occupancy * wa[i] * t * st[i]; } for (size_t i = 0; i < 6; ++i) { mBW[i] = static_cast(-4 * kPI * kPI / (D.b[i] + bIso)); mAW[i] = static_cast(D.a[i] * std::pow(-mBW[i] / kPI, 1.5)); } } atom_type mSymbol; int mCharge; float mUIso, mOccupancy; float mResHigh, mResLow; bool mElectronScattering; point mLocation; const DensityIntegration &mIntegrator; double mYi; std::vector mFst; float mAW[6], mBW[6]; virtual float integratedRadius(float perc) const { float result = static_cast(mIntegrator.integrateRadius(perc, mOccupancy, mYi, mFst)); assert(not std::isnan(result)); return result; } virtual float calculatedDensity(float r) const { float rsq = r * r; return mOccupancy * (mAW[0] * std::exp(mBW[0] * rsq) + mAW[1] * std::exp(mBW[1] * rsq) + mAW[2] * std::exp(mBW[2] * rsq) + mAW[3] * std::exp(mBW[3] * rsq) + mAW[4] * std::exp(mBW[4] * rsq) + mAW[5] * std::exp(mBW[5] * rsq)); } virtual float calculatedDensity(point p) const { return calculatedDensity(distance(mLocation, p)); } }; struct AtomShapeAnisoImpl : public AtomShapeImpl { AtomShapeAnisoImpl(point location, atom_type symbol, int charge, clipper::U_aniso_orth &anisou, float occupancy, float resHigh, float resLow, bool electronScattering) : AtomShapeImpl(location, symbol, charge, static_cast(anisou.u_iso()), occupancy, resHigh, resLow, electronScattering) , mAnisoU(anisou) { auto &D = mElectronScattering ? atom_type_traits(symbol).elsf() : atom_type_traits(symbol).wksf(charge); const float fourpi2 = static_cast(4 * kPI * kPI); const float pi3 = static_cast(kPI * kPI * kPI); for (int i = 0; i < 6; ++i) { mAnisoInv[i] = clipper::Mat33sym<>( -2 * mAnisoU.mat00() - D.b[i] / fourpi2, -2 * mAnisoU.mat11() - D.b[i] / fourpi2, -2 * mAnisoU.mat22() - D.b[i] / fourpi2, -2 * mAnisoU.mat01(), -2 * mAnisoU.mat02(), -2 * mAnisoU.mat12()) .inverse(); double det = -mAnisoInv[i].det(); mAW[i] = static_cast(D.a[i] * std::sqrt(det / pi3)); mBW[i] = static_cast(-std::pow(det, 1.0f / 3)); } } float calculatedDensity(point p) const override { const point l = p - mLocation; const clipper::Coord_orth dxyz(l.m_x, l.m_y, l.m_z); return mOccupancy * static_cast( mAW[0] * std::exp(mAnisoInv[0].quad_form(dxyz)) + mAW[1] * std::exp(mAnisoInv[1].quad_form(dxyz)) + mAW[2] * std::exp(mAnisoInv[2].quad_form(dxyz)) + mAW[3] * std::exp(mAnisoInv[3].quad_form(dxyz)) + mAW[4] * std::exp(mAnisoInv[4].quad_form(dxyz)) + mAW[5] * std::exp(mAnisoInv[5].quad_form(dxyz))); } clipper::U_aniso_orth mAnisoU; std::array, 6> mAnisoInv; }; // -------------------------------------------------------------------- AtomShape::AtomShape(cif::row_handle atom, cif::row_handle atom_aniso, float resHigh, float resLow, bool electronScattering, std::optional bFactor) : mImpl(nullptr) { const auto &[x, y, z, charge, type_symbol, occupancy, compound_id] = atom.get, std::string, float, std::string>( "Cartn_x", "Cartn_y", "Cartn_z", "pdbx_formal_charge", "type_symbol", "occupancy", "label_comp_id"); atom_type type = type_symbol == "X" ? cif::Nn : atom_type_traits(type_symbol).type(); int formal_charge = charge.value_or(0); if (not charge.has_value()) { auto compound = cif::compound_factory::instance().create(compound_id); if (compound != nullptr and compound->atoms().size() == 1) formal_charge = compound->atoms().front().charge; } if (bFactor.has_value() and *bFactor != 0) mImpl = new AtomShapeImpl({ x, y, z }, type, formal_charge, static_cast(clipper::Util::b2u(*bFactor)), 1.0, resHigh, resLow, electronScattering); else if (not atom_aniso.empty()) { const auto &[u11, u12, u13, u22, u23, u33] = atom_aniso.get("U[1][1]", "U[1][2]", "U[1][3]", "U[2][2]", "U[2][3]", "U[3][3]"); clipper::U_aniso_orth u(u11, u22, u33, u12, u13, u23); while (u.det() < 1.0e-20) u = u + clipper::U_aniso_orth(0.01, 0.01, 0.01, 0, 0, 0); mImpl = new AtomShapeAnisoImpl({ x, y, z }, type, formal_charge, u, occupancy, resHigh, resLow, electronScattering); } else { const auto &[u_iso, b_iso] = atom.get, std::optional>("U_iso_or_equiv", "B_iso_or_equiv"); float iso = 0; if (u_iso.has_value()) iso = *u_iso; else if (b_iso.has_value()) iso = *b_iso / static_cast(8 * kPI * kPI); if (iso == 0) iso = 2.0f / static_cast(8 * kPI * kPI);; mImpl = new AtomShapeImpl({ x, y, z }, type, formal_charge, iso, occupancy, resHigh, resLow, electronScattering); } } // AtomShape::AtomShape(const cif::mm::atom &atom, float resHigh, float resLow, bool electronScattering, float bFactor) // : mImpl(new AtomShapeImpl(atom.get_location(), atom.type(), atom.charge(), static_cast(clipper::Util::b2u(bFactor)), // 1.0, resHigh, resLow, electronScattering)) // { // } AtomShape::~AtomShape() { delete mImpl; } float AtomShape::radius() const { return mImpl->integratedRadius(0.95f); } float AtomShape::calculatedDensity(float r) const { return mImpl->calculatedDensity(r); } float AtomShape::calculatedDensity(point p) const { return mImpl->calculatedDensity(p); } } // namespace pdb_redo libpdb-redo-3.0.5/src/BondMap.cpp0000664000175000017500000002562314364232314016371 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include namespace pdb_redo { // -------------------------------------------------------------------- struct CompoundBondInfo { std::string mID; std::set> mBonded; bool bonded(uint32_t a1, uint32_t a2) const { return mBonded.count({a1, a2}) > 0; } }; // -------------------------------------------------------------------- class CompoundBondMap { public: static CompoundBondMap &instance() { static std::unique_ptr s_instance(new CompoundBondMap); return *s_instance; } bool bonded(const std::string &compoundID, const std::string &atomID1, const std::string &atomID2); private: CompoundBondMap() {} uint32_t getAtomID(const std::string &atomID) { std::string id(atomID); uint32_t result; auto i = mAtomIDIndex.find(id); if (i == mAtomIDIndex.end()) { result = uint32_t(mAtomIDIndex.size()); mAtomIDIndex[id] = result; } else result = i->second; return result; } std::map mAtomIDIndex; std::vector mCompounds; std::mutex mMutex; }; bool CompoundBondMap::bonded(const std::string &compoundID, const std::string &atomID1, const std::string &atomID2) { std::lock_guard lock(mMutex); using namespace std::literals; std::string id(compoundID); uint32_t a1 = getAtomID(atomID1); uint32_t a2 = getAtomID(atomID2); if (a1 > a2) std::swap(a1, a2); for (auto &bi : mCompounds) { if (bi.mID != id) continue; return bi.bonded(a1, a2); } bool result = false; // not found in our cache, calculate CompoundBondInfo bondInfo{id}; auto compound = cif::compound_factory::instance().create(compoundID); if (not compound) { if (cif::VERBOSE >= 0) std::cerr << "Missing compound bond info for " << compoundID << std::endl; } else { for (auto &atom : compound->bonds()) { uint32_t ca1 = getAtomID(atom.atom_id[0]); uint32_t ca2 = getAtomID(atom.atom_id[1]); if (ca1 > ca2) std::swap(ca1, ca2); bondInfo.mBonded.insert({ca1, ca2}); result = result or (a1 == ca1 and a2 == ca2); } } mCompounds.push_back(bondInfo); return result; } // -------------------------------------------------------------------- BondMap::BondMap(const cif::datablock &db, size_t model_nr) { using namespace cif::literals; auto &compoundBondInfo = CompoundBondMap::instance(); // First collect the atoms from the datablock std::vector atoms; for (auto rh : db["atom_site"].find("pdbx_PDB_model_num"_key == model_nr or "pdbx_PDB_model_num"_key == cif::null)) atoms.push_back(rh); dim = uint32_t(atoms.size()); for (auto &atom : atoms) index[atom["id"].as()] = uint32_t(index.size()); auto bindAtoms = [this](const std::string &a, const std::string &b) { uint32_t ixa = index[a]; uint32_t ixb = index[b]; bond.insert(key(ixa, ixb)); }; auto linkAtoms = [this, &bindAtoms](const std::string &a, const std::string &b) { bindAtoms(a, b); link[a].insert(b); link[b].insert(a); }; // collect all compounds first std::set compounds; for (const auto &comp_id : db["chem_comp"].rows("id")) compounds.insert(comp_id); // make sure we also have all residues in the polyseq for (const auto &mon_id : db["entity_poly_seq"].rows("mon_id")) { if (compounds.count(mon_id)) continue; if (cif::VERBOSE > 1) std::cerr << "Warning: mon_id " << mon_id << " is missing in the chem_comp category" << std::endl; compounds.insert(mon_id); } cif::Progress progress(compounds.size(), "Creating bond map"); // some helper indices to speed things up a bit using atom_map_key_type = std::tuple; std::map atomMapByAsymSeqAndAtom; for (auto a : atoms) { atom_map_key_type key = a.get("label_asym_id", "label_seq_id", "label_atom_id", "auth_seq_id"); atomMapByAsymSeqAndAtom[key] = a.get("id"); } // first link all residues in a polyseq std::string lastAsymID, lastAuthSeqID; int lastSeqID = 0; for (const auto &[asymID, seqID, authSeqID] : db["pdbx_poly_seq_scheme"].rows("asym_id", "seq_id", "pdb_seq_num")) { if (asymID != lastAsymID) // first in a new sequece { lastAsymID = asymID; lastSeqID = seqID; lastAuthSeqID = authSeqID; continue; } auto kc = make_tuple(asymID, lastSeqID, "C", lastAuthSeqID); auto kn = make_tuple(asymID, seqID, "N", authSeqID); if (atomMapByAsymSeqAndAtom.count(kc) and atomMapByAsymSeqAndAtom.count(kn)) { auto c = atomMapByAsymSeqAndAtom.at(kc); auto n = atomMapByAsymSeqAndAtom.at(kn); bindAtoms(c, n); } // if (not(c.empty() or n.empty())) lastSeqID = seqID; lastAuthSeqID = authSeqID; } for (auto l : db["struct_conn"]) { atom_map_key_type ka = l.get("ptnr1_label_asym_id", "ptnr1_label_seq_id", "ptnr1_label_atom_id", "ptnr1_auth_seq_id"); atom_map_key_type kb = l.get("ptnr2_label_asym_id", "ptnr2_label_seq_id", "ptnr2_label_atom_id", "ptnr2_auth_seq_id"); if (atomMapByAsymSeqAndAtom.count(ka) and atomMapByAsymSeqAndAtom.count(kb)) { auto a = atomMapByAsymSeqAndAtom.at(ka); auto b = atomMapByAsymSeqAndAtom.at(kb); linkAtoms(a, b); } } // then link all atoms in the compounds for (auto c : compounds) { if (c == "HOH" or c == "H2O" or c == "WAT") { if (cif::VERBOSE > 1) std::cerr << "skipping water in bond map calculation" << std::endl; continue; } auto bonded = [c, &compoundBondInfo](cif::row_handle a, cif::row_handle b) { auto label_a = a.get("label_atom_id"); auto label_b = b.get("label_atom_id"); return compoundBondInfo.bonded(c, label_a, label_b); }; // loop over poly_seq_scheme for (const auto &[asymID, seqID] : db["pdbx_poly_seq_scheme"].find(cif::key("mon_id") == c, "asym_id", "seq_id")) { std::vector rAtoms; copy_if(atoms.begin(), atoms.end(), back_inserter(rAtoms), [asymID=asymID,seqID=seqID](cif::row_handle a) { return a["label_asym_id"] == asymID and a["label_seq_id"] == seqID; }); for (uint32_t i = 0; i + 1 < rAtoms.size(); ++i) { for (uint32_t j = i + 1; j < rAtoms.size(); ++j) { if (bonded(rAtoms[i], rAtoms[j])) bindAtoms(rAtoms[i].get("id"), rAtoms[j].get("id")); } } } // loop over pdbx_nonpoly_scheme for (auto r : db["pdbx_nonpoly_scheme"].find(cif::key("mon_id") == c)) { std::string asymID; cif::tie(asymID) = r.get("asym_id"); std::vector rAtoms; copy_if(atoms.begin(), atoms.end(), back_inserter(rAtoms), [&](cif::row_handle a) { return a["label_asym_id"] == asymID; }); for (uint32_t i = 0; i + 1 < rAtoms.size(); ++i) { for (uint32_t j = i + 1; j < rAtoms.size(); ++j) { if (bonded(rAtoms[i], rAtoms[j])) { uint32_t ixa = index[rAtoms[i].get("id")]; uint32_t ixb = index[rAtoms[j].get("id")]; bond.insert(key(ixa, ixb)); } } } } // loop over pdbx_branch_scheme for (const auto &[asym_id, pdb_seq_num] : db["pdbx_branch_scheme"].find(cif::key("mon_id") == c, "asym_id", "pdb_seq_num")) { std::vector rAtoms; copy_if(atoms.begin(), atoms.end(), back_inserter(rAtoms), [id = asym_id, nr = pdb_seq_num](cif::row_handle a) { return a["label_asym_id"] == id and a["auth_seq_id"] == nr; }); for (uint32_t i = 0; i + 1 < rAtoms.size(); ++i) { for (uint32_t j = i + 1; j < rAtoms.size(); ++j) { if (bonded(rAtoms[i], rAtoms[j])) { uint32_t ixa = index[rAtoms[i].get("id")]; uint32_t ixb = index[rAtoms[j].get("id")]; bond.insert(key(ixa, ixb)); } } } } } // start by creating an index for single bonds std::multimap b1_2; for (auto &bk : bond) { uint32_t a, b; std::tie(a, b) = dekey(bk); b1_2.insert({a, b}); b1_2.insert({b, a}); } std::multimap b1_3; for (uint32_t i = 0; i < dim; ++i) { auto a = b1_2.equal_range(i); std::vector s; for (auto j = a.first; j != a.second; ++j) s.push_back(j->second); for (size_t si1 = 0; si1 + 1 < s.size(); ++si1) { for (size_t si2 = si1 + 1; si2 < s.size(); ++si2) { uint32_t x = s[si1]; uint32_t y = s[si2]; if (isBonded(x, y)) continue; b1_3.insert({x, y}); b1_3.insert({y, x}); } } } for (uint32_t i = 0; i < dim; ++i) { auto a1 = b1_2.equal_range(i); auto a2 = b1_3.equal_range(i); for (auto ai1 = a1.first; ai1 != a1.second; ++ai1) { for (auto ai2 = a2.first; ai2 != a2.second; ++ai2) { uint32_t b1 = ai1->second; uint32_t b2 = ai2->second; if (isBonded(b1, b2)) continue; bond_1_4.insert(key(b1, b2)); } } } } std::vector BondMap::linked(const std::string &atom_id) const { auto i = link.find(atom_id); std::vector result; if (i != link.end()) result = std::vector(i->second.begin(), i->second.end()); return result; } std::vector BondMap::atomIDsForCompound(const std::string &compoundID) { std::vector result; auto *compound = cif::compound_factory::instance().create(compoundID); if (compound == nullptr) throw BondMapException("Missing bond information for compound " + compoundID); for (auto &compAtom : compound->atoms()) result.push_back(compAtom.id); return result; } } // namespace pdbx libpdb-redo-3.0.5/src/ClipperWrapper.cpp0000664000175000017500000001473414364232314020011 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "pdb-redo/ClipperWrapper.hpp" namespace pdb_redo { // -------------------------------------------------------------------- clipper::Atom toClipper(cif::row_handle atom, cif::row_handle aniso_row) { const double kPI = cif::kPI; clipper::Atom result; cif::point location = atom.get("Cartn_x", "Cartn_y", "Cartn_z"); result.set_coord_orth({ location.m_x, location.m_y, location.m_z }); if (atom["occupancy"].empty()) result.set_occupancy(1.0); else result.set_occupancy(atom["occupancy"].as()); std::string element = atom["type_symbol"].as(); if (not atom["pdbx_formal_charge"].empty()) { int charge = atom["pdbx_formal_charge"].as(); if (std::abs(charge) > 1) element += std::to_string(charge); if (charge < 0) element += '-'; else element += '+'; } result.set_element(element); if (not atom["U_iso_or_equiv"].empty()) result.set_u_iso(atom["U_iso_or_equiv"].as()); else if (not atom["B_iso_or_equiv"].empty()) result.set_u_iso(atom["B_iso_or_equiv"].as() / (8 * kPI * kPI)); else throw std::runtime_error("Missing B_iso or U_iso"); if (aniso_row.empty()) result.set_u_aniso_orth(clipper::U_aniso_orth(nan("0"), 0, 0, 0, 0, 0)); else { const auto &[u11, u12, u13, u22, u23, u33] = aniso_row.get("U[1][1]", "U[1][2]", "U[1][3]", "U[2][2]", "U[2][3]", "U[3][3]"); result.set_u_aniso_orth(clipper::U_aniso_orth(u11, u22, u33, u12, u13, u23)); } return result; } clipper::Atom toClipper(const cif::mm::atom &atom) { return toClipper(atom.get_row(), atom.get_row_aniso()); } // -------------------------------------------------------------------- clipper::Spacegroup getSpacegroup(const cif::datablock &db) { std::string spacegroup = db["symmetry"].find1(cif::key("entry_id") == db.name(), "space_group_name_H-M"); if (spacegroup == "P 1-") spacegroup = "P -1"; else if (spacegroup == "P 21 21 2 A") spacegroup = "P 21 21 2 (a)"; else if (spacegroup.empty()) throw std::runtime_error("No spacegroup, cannot continue"); try { return clipper::Spacegroup{ clipper::Spgr_descr(cif::get_space_group_number(spacegroup)) }; } catch (const clipper::Message_fatal &m) { // std::cout << m.text() << std::endl; } try { return clipper::Spacegroup{ clipper::Spgr_descr(spacegroup) }; } catch (const clipper::Message_fatal &e) { std::cerr << e.text() << std::endl; } throw std::runtime_error("Unsupported spacegroup: " + spacegroup); } clipper::Cell getCell(const cif::datablock &db) { const auto &[a, b, c, alpha, beta, gamma] = db["cell"].find1(cif::key("entry_id") == db.name(), "length_a", "length_b", "length_c", "angle_alpha", "angle_beta", "angle_gamma"); return clipper::Cell{ clipper::Cell_descr(a, b, c, alpha, beta, gamma) }; } // -------------------------------------------------------------------- cif::symop_data GetSymOpDataForRTop_frac(const clipper::RTop_frac &rt) { auto &rot = rt.rot(); auto &trn = rt.trn(); auto rte = [&rot](int i, int j) { return static_cast(lrint(rot(i, j))); }; std::array krt{ rte(0, 0), rte(0, 1), rte(0, 2), rte(1, 0), rte(1, 1), rte(1, 2), rte(2, 0), rte(2, 1), rte(2, 2)}; for (int i = 0; i < 3; ++i) { int n = lrint(trn[i] * 24); int d = 24; if (n == 0 or std::abs(n) == 24) continue; // is 0, 0 in our table for (int j = 5; j > 1; --j) if (n % j == 0 and d % j == 0) { n /= j; d /= j; } n = (n + d) % d; switch (i) { case 0: krt[9] = n; krt[10] = d; break; case 1: krt[11] = n; krt[12] = d; break; case 2: krt[13] = n; krt[14] = d; break; } } return cif::symop_data{ krt }; } // -------------------------------------------------------------------- // std::ostream &operator<<(std::ostream &os, const cif::symop_data &s) // { // os << '['; // bool first = true; // for (auto i : s.data()) // { // if (not std::exchange(first, false)) // os << ", "; // os << i; // } // os << ']'; // return os; // } int getSpacegroupNumber(const clipper::Spacegroup &sg) { std::set sg_ops; for (int i = 0; i < sg.num_symops(); ++i) { const auto &symop = sg.symop(i); for (int u : {-1, 0, 1}) for (int v : {-1, 0, 1}) for (int w : {-1, 0, 1}) { if (i == 0 and u == 0 and v == 0 and w == 0) continue; auto rtop = clipper::RTop_frac( symop.rot(), symop.trn() + clipper::Vec3<>(u, v, w)); sg_ops.insert(GetSymOpDataForRTop_frac(rtop)); } } auto s = cif::kSymopNrTable, e = s + cif::kSymopNrTableSize; int result = 0; while (s != e) { auto t = s + 1; while (t->spacegroup() == s->spacegroup()) ++t; if (static_cast(t - s) != sg_ops.size()) { s = t; continue; } size_t seen = 0; for (auto &k : sg_ops) { if (std::find_if(s, t, [&k](const cif::symop_datablock &b) { return b.symop() == k; }) != t) ++seen; } if (seen != sg_ops.size()) { s = t; continue; } result = s->spacegroup(); break; } return result; } } // namespace pdb_redolibpdb-redo-3.0.5/src/Compound.cpp0000664000175000017500000006637514364232314016646 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include #include "pdb-redo/Compound.hpp" namespace fs = std::filesystem; namespace pdb_redo { using cif::kPI; using cif::atom_type_traits; // -------------------------------------------------------------------- // Compound helper classes struct CompoundAtomLess { bool operator()(const CompoundAtom &a, const CompoundAtom &b) const { int d = a.id.compare(b.id); if (d == 0) d = a.typeSymbol - b.typeSymbol; return d < 0; } }; struct CompoundBondLess { bool operator()(const CompoundBond &a, const CompoundBond &b) const { int d = a.atomID[0].compare(b.atomID[0]); if (d == 0) d = a.atomID[1].compare(b.atomID[1]); if (d == 0) d = a.type - b.type; return d < 0; } }; // -------------------------------------------------------------------- // Compound Compound::Compound(const std::string &file, const std::string &id, const std::string &name, const std::string &group) : mID(id) , mName(name) , mGroup(group) { try { mCF.load(file); // locate the datablock auto &db = mCF["comp_" + id]; auto &compoundAtoms = db["chem_comp_atom"]; for (auto row : compoundAtoms) { std::string atom_id, symbol, energy; float charge; cif::tie(atom_id, symbol, energy, charge) = row.get("atom_id", "type_symbol", "type_energy", "partial_charge"); mAtoms.push_back({atom_id, atom_type_traits(symbol).type(), energy, charge}); } sort(mAtoms.begin(), mAtoms.end(), CompoundAtomLess()); auto &compBonds = db["chem_comp_bond"]; for (auto row : compBonds) { CompoundBond b; std::string type, aromatic; cif::tie(b.atomID[0], b.atomID[1], type, b.distance, b.esd) = row.get("atom_id_1", "atom_id_2", "type", "value_dist", "value_dist_esd"); using cif::iequals; if (iequals(type, "single") or iequals(type, "sing")) b.type = singleBond; else if (iequals(type, "double") or iequals(type, "doub")) b.type = doubleBond; else if (iequals(type, "triple") or iequals(type, "trip")) b.type = tripleBond; else if (iequals(type, "deloc") or iequals(type, "aromat") or iequals(type, "aromatic")) b.type = delocalizedBond; else { if (cif::VERBOSE > 0) std::cerr << "Unimplemented chem_comp_bond.type " << type << " in " << id << std::endl; b.type = singleBond; } if (b.atomID[0] > b.atomID[1]) swap(b.atomID[0], b.atomID[1]); mBonds.push_back(b); } sort(mBonds.begin(), mBonds.end(), CompoundBondLess()); for (auto row : db["chem_comp_angle"]) { CompoundAngle a; cif::tie(a.atomID[0], a.atomID[1], a.atomID[2], a.angle, a.esd) = row.get("atom_id_1", "atom_id_2", "atom_id_3", "value_angle", "value_angle_esd"); mAngles.push_back(a); } for (auto row : db["chem_comp_tor"]) { CompoundTorsion a; cif::tie(a.atomID[0], a.atomID[1], a.atomID[2], a.atomID[3], a.angle, a.esd, a.period) = row.get("atom_id_1", "atom_id_2", "atom_id_3", "atom_id_4", "value_angle", "value_angle_esd", "period"); mTorsions.push_back(a); } for (auto row : db["chem_comp_chir"]) { CompoundChiralCentre cc; std::string volumeSign; cif::tie(cc.id, cc.atomIDCentre, cc.atomID[0], cc.atomID[1], cc.atomID[2], volumeSign) = row.get("id", "atom_id_centre", "atom_id_1", "atom_id_2", "atom_id_3", "volume_sign"); if (volumeSign == "negativ" or volumeSign == "negative") cc.volumeSign = negativ; else if (volumeSign == "positiv" or volumeSign == "positive") cc.volumeSign = positiv; else if (volumeSign == "both") cc.volumeSign = both; else { if (cif::VERBOSE > 0) std::cerr << "Unimplemented chem_comp_chir.volume_sign " << volumeSign << " in " << id << std::endl; continue; } mChiralCentres.push_back(cc); } auto &compPlanes = db["chem_comp_plane_atom"]; for (auto row : compPlanes) { std::string atom_id, plane_id; float esd; cif::tie(atom_id, plane_id, esd) = row.get("atom_id", "plane_id", "dist_esd"); auto i = find_if(mPlanes.begin(), mPlanes.end(), [&](auto &p) { return p.id == plane_id; }); if (i == mPlanes.end()) mPlanes.emplace_back(CompoundPlane{plane_id, {atom_id}, esd}); else i->atomID.push_back(atom_id); } } catch (const std::exception &ex) { std::cerr << "Error loading ccp4 file for " << id << " from file " << file << std::endl; throw; } } std::string Compound::formula() const { std::string result; std::map atoms; float chargeSum = 0; for (auto r : mAtoms) { atoms[atom_type_traits(r.typeSymbol).symbol()] += 1; chargeSum += r.partialCharge; } auto c = atoms.find("C"); if (c != atoms.end()) { result = "C"; if (c->second > 1) result += std::to_string(c->second); atoms.erase(c); auto h = atoms.find("H"); if (h != atoms.end()) { result += " H"; if (h->second > 1) result += std::to_string(h->second); atoms.erase(h); } } for (auto a : atoms) { if (not result.empty()) result += ' '; result += a.first; if (a.second > 1) result += std::to_string(a.second); } int charge = lrint(chargeSum); if (charge != 0) result += ' ' + std::to_string(charge); return result; } float Compound::formulaWeight() const { float result = 0; for (auto r : mAtoms) result += atom_type_traits(r.typeSymbol).weight(); return result; } int Compound::charge() const { float result = 0; for (auto r : mAtoms) result += r.partialCharge; return lrint(result); } std::string Compound::type() const { std::string result; // known groups are (counted from ccp4 monomer dictionary) // D-pyranose // DNA // L-PEPTIDE LINKING // L-SACCHARIDE // L-peptide // L-pyranose // M-peptide // NON-POLYMER // P-peptide // RNA // furanose // non-polymer // non_polymer // peptide // pyranose // saccharide if (cif::iequals(mID, "gly")) result = "peptide linking"; else if (cif::iequals(mGroup, "l-peptide") or cif::iequals(mGroup, "L-peptide linking") or cif::iequals(mGroup, "peptide")) result = "L-peptide linking"; else if (cif::iequals(mGroup, "DNA")) result = "DNA linking"; else if (cif::iequals(mGroup, "RNA")) result = "RNA linking"; // else // result = mGroup; return result; } bool Compound::isWater() const { return mID == "HOH" or mID == "H2O"; } bool Compound::isSugar() const { return cif::iequals(mGroup, "furanose") or cif::iequals(mGroup, "pyranose"); } CompoundAtom Compound::get_atom_by_atom_id(const std::string &atomID) const { CompoundAtom result = {}; for (auto &a : mAtoms) { if (a.id == atomID) { result = a; break; } } if (result.id != atomID) throw std::out_of_range("No atom " + atomID + " in Compound " + mID); return result; } const Compound *Compound::create(const std::string &id) { auto result = CompoundFactory::instance().get(id); if (result == nullptr) result = CompoundFactory::instance().create(id); return result; } bool Compound::atomsBonded(const std::string &atomId_1, const std::string &atomId_2) const { auto i = find_if(mBonds.begin(), mBonds.end(), [&](const CompoundBond &b) { return (b.atomID[0] == atomId_1 and b.atomID[1] == atomId_2) or (b.atomID[0] == atomId_2 and b.atomID[1] == atomId_1); }); return i != mBonds.end(); } float Compound::atomBondValue(const std::string &atomId_1, const std::string &atomId_2) const { auto i = find_if(mBonds.begin(), mBonds.end(), [&](const CompoundBond &b) { return (b.atomID[0] == atomId_1 and b.atomID[1] == atomId_2) or (b.atomID[0] == atomId_2 and b.atomID[1] == atomId_1); }); return i != mBonds.end() ? i->distance : 0; } // bool Compound::isIsomerOf(const Compound &c) const // { // bool result = false; // for (;;) // { // // easy tests first // if (mID == c.mID) // { // result = true; // break; // } // if (mAtoms.size() != c.mAtoms.size()) // break; // if (mBonds.size() != c.mBonds.size()) // break; // if (mChiralCentres.size() != c.mChiralCentres.size()) // break; // // same number of atoms of each type? // std::map aTypeCount, bTypeCount; // bool sameAtomNames = true; // for (size_t i = 0; i < mAtoms.size(); ++i) // { // auto &a = mAtoms[i]; // auto &b = c.mAtoms[i]; // aTypeCount[a.typeSymbol] += 1; // bTypeCount[b.typeSymbol] += 1; // if (a.id != b.id or a.typeSymbol != b.typeSymbol) // sameAtomNames = false; // } // if (not sameAtomNames and aTypeCount != bTypeCount) // break; // bool sameBonds = sameAtomNames; // for (size_t i = 0; sameBonds and i < mBonds.size(); ++i) // { // sameBonds = // mBonds[i].atomID[0] == c.mBonds[i].atomID[0] and // mBonds[i].atomID[1] == c.mBonds[i].atomID[1] and // mBonds[i].type == c.mBonds[i].type; // } // if (sameBonds) // { // result = true; // break; // } // // implement rest of tests // std::vector> mapping; // result = StructuresAreIsomeric(mAtoms, mBonds, c.mAtoms, c.mBonds, mapping); // if (cif::VERBOSE and result) // { // for (auto &m : mapping) // std::cerr << " " << std::get<0>(m) << " => " << std::get<1>(m) << std::endl; // } // break; // } // return result; // } // std::vector> Compound::mapToIsomer(const Compound &c) const // { // std::vector> result; // bool check = StructuresAreIsomeric(mAtoms, mBonds, c.mAtoms, c.mBonds, result); // if (not check) // throw std::runtime_error("Compounds " + id() + " and " + c.id() + " are not isomers in call to mapToIsomer"); // return result; // } // std::vector Compound::isomers() const // { // std::vector result; // auto &db = IsomerDB::instance(); // if (db.count(mID)) // { // result = db[mID]; // auto i = find(result.begin(), result.end(), mID); // assert(i != result.end()); // result.erase(i); // } // return result; // } float Compound::bondAngle(const std::string &atomId_1, const std::string &atomId_2, const std::string &atomId_3) const { float result = nanf("1"); for (auto &a : mAngles) { if (not(a.atomID[1] == atomId_2 and ((a.atomID[0] == atomId_1 and a.atomID[2] == atomId_3) or (a.atomID[2] == atomId_1 and a.atomID[0] == atomId_3)))) continue; result = a.angle; break; } return result; } // static float calcC(float a, float b, float alpha) //{ // float f = b * std::sin(alpha * kPI / 180); // float d = std::sqrt(b * b - f * f); // float e = a - d; // float c = std::sqrt(f * f + e * e); // // return c; // } float Compound::chiralVolume(const std::string ¢reID) const { float result = 0; for (auto &cv : mChiralCentres) { if (cv.id != centreID) continue; // calculate the expected chiral volume // the edges float a = atomBondValue(cv.atomIDCentre, cv.atomID[0]); float b = atomBondValue(cv.atomIDCentre, cv.atomID[1]); float c = atomBondValue(cv.atomIDCentre, cv.atomID[2]); // the angles for the top of the tetrahedron float alpha = bondAngle(cv.atomID[0], cv.atomIDCentre, cv.atomID[1]); float beta = bondAngle(cv.atomID[1], cv.atomIDCentre, cv.atomID[2]); float gamma = bondAngle(cv.atomID[2], cv.atomIDCentre, cv.atomID[0]); float cosa = static_cast(std::cos(alpha * kPI / 180)); float cosb = static_cast(std::cos(beta * kPI / 180)); float cosc = static_cast(std::cos(gamma * kPI / 180)); result = (a * b * c * std::sqrt(1 + 2 * cosa * cosb * cosc - (cosa * cosa) - (cosb * cosb) - (cosc * cosc))) / 6; if (cv.volumeSign == negativ) result = -result; break; } return result; } // -------------------------------------------------------------------- Link::Link(cif::datablock &db) { mID = db.name(); auto &linkBonds = db["chem_link_bond"]; for (auto row : linkBonds) { LinkBond b; std::string type, aromatic; cif::tie(b.atom[0].compID, b.atom[0].atomID, b.atom[1].compID, b.atom[1].atomID, type, b.distance, b.esd) = row.get("atom_1_comp_id", "atom_id_1", "atom_2_comp_id", "atom_id_2", "type", "value_dist", "value_dist_esd"); using cif::iequals; if (iequals(type, "single") or iequals(type, "sing")) b.type = singleBond; else if (iequals(type, "double") or iequals(type, "doub")) b.type = doubleBond; else if (iequals(type, "triple") or iequals(type, "trip")) b.type = tripleBond; else if (iequals(type, "deloc") or iequals(type, "aromat") or iequals(type, "aromatic")) b.type = delocalizedBond; else { if (cif::VERBOSE > 0) std::cerr << "Unimplemented chem_link_bond.type " << type << " in " << mID << std::endl; b.type = singleBond; } // if (b.atom[0] > b.atom[1]) // swap(b.atom[0], b.atom[1]); mBonds.push_back(b); } // sort(mBonds.begin(), mBonds.end(), LinkBondLess()); auto &linkAngles = db["chem_link_angle"]; for (auto row : linkAngles) { LinkAngle a; cif::tie(a.atom[0].compID, a.atom[0].atomID, a.atom[1].compID, a.atom[1].atomID, a.atom[2].compID, a.atom[2].atomID, a.angle, a.esd) = row.get("atom_1_comp_id", "atom_id_1", "atom_2_comp_id", "atom_id_2", "atom_3_comp_id", "atom_id_3", "value_angle", "value_angle_esd"); mAngles.push_back(a); } for (auto row : db["chem_link_tor"]) { LinkTorsion a; cif::tie(a.atom[0].compID, a.atom[0].atomID, a.atom[1].compID, a.atom[1].atomID, a.atom[2].compID, a.atom[2].atomID, a.atom[3].compID, a.atom[3].atomID, a.angle, a.esd, a.period) = row.get("atom_1_comp_id", "atom_id_1", "atom_2_comp_id", "atom_id_2", "atom_3_comp_id", "atom_id_3", "atom_4_comp_id", "atom_id_4", "value_angle", "value_angle_esd", "period"); mTorsions.push_back(a); } auto &linkChir = db["chem_link_chir"]; for (auto row : linkChir) { LinkChiralCentre cc; std::string volumeSign; cif::tie(cc.id, cc.atomCentre.compID, cc.atomCentre.atomID, cc.atom[0].compID, cc.atom[0].atomID, cc.atom[1].compID, cc.atom[1].atomID, cc.atom[2].compID, cc.atom[2].atomID, volumeSign) = row.get("id", "atom_centre_comp_id", "atom_id_centre", "atom_1_comp_id", "atom_id_1", "atom_2_comp_id", "atom_id_2", "atom_3_comp_id", "atom_id_3", "volume_sign"); if (volumeSign == "negativ" or volumeSign == "negative") cc.volumeSign = negativ; else if (volumeSign == "positiv" or volumeSign == "positive") cc.volumeSign = positiv; else if (volumeSign == "both") cc.volumeSign = both; else { if (cif::VERBOSE > 0) std::cerr << "Unimplemented chem_link_chir.volume_sign " << volumeSign << " in " << mID << std::endl; continue; } mChiralCentres.push_back(cc); } auto &linkPlanes = db["chem_link_plane"]; for (auto row : linkPlanes) { int compID; std::string atomID, planeID; float esd; cif::tie(planeID, compID, atomID, esd) = row.get("plane_id", "atom_comp_id", "atom_id", "dist_esd"); auto i = find_if(mPlanes.begin(), mPlanes.end(), [&](auto &p) { return p.id == planeID; }); if (i == mPlanes.end()) { std::vector atoms{LinkAtom{compID, atomID}}; mPlanes.emplace_back(LinkPlane{planeID, move(atoms), esd}); } else i->atoms.push_back({compID, atomID}); } } const Link &Link::create(const std::string &id) { auto result = CompoundFactory::instance().getLink(id); if (result == nullptr) result = CompoundFactory::instance().createLink(id); if (result == nullptr) throw std::runtime_error("Link with id " + id + " not found"); return *result; } Link::~Link() { } float Link::atomBondValue(const LinkAtom &atom1, const LinkAtom &atom2) const { auto i = find_if(mBonds.begin(), mBonds.end(), [&](auto &b) { return (b.atom[0] == atom1 and b.atom[1] == atom2) or (b.atom[0] == atom2 and b.atom[1] == atom1); }); return i != mBonds.end() ? i->distance : 0; } float Link::bondAngle(const LinkAtom &atom1, const LinkAtom &atom2, const LinkAtom &atom3) const { float result = nanf("1"); for (auto &a : mAngles) { if (not(a.atom[1] == atom2 and ((a.atom[0] == atom1 and a.atom[2] == atom3) or (a.atom[2] == atom1 and a.atom[0] == atom3)))) continue; result = a.angle; break; } return result; } float Link::chiralVolume(const std::string ¢reID, const std::string &compound_id_1, const std::string &compound_id_2) const { float result = 0; auto bondValue = [&](const LinkAtom &a, const LinkAtom &b) -> float { float result = atomBondValue(a, b); if (result == 0) { if (a.compID != b.compID) throw std::runtime_error("cannot calculate chiral volume since bond lengths are missing"); auto cmp = Compound::create(a.compID == 1 ? compound_id_1 : compound_id_2); if (cmp == nullptr) throw std::runtime_error("cannot calculate chiral volume since compound is not known"); result = cmp->atomBondValue(a.atomID, b.atomID); } return result; }; auto angle = [&](const LinkAtom &a, const LinkAtom &b, const LinkAtom &c) -> float { float result = bondAngle(a, b, c); if (std::isnan(result)) { if (a.compID != b.compID or a.compID != c.compID) throw std::runtime_error("cannot calculate chiral volume since bond lengths are missing"); auto cmp = Compound::create(a.compID == 1 ? compound_id_1 : compound_id_2); if (cmp == nullptr) throw std::runtime_error("cannot calculate chiral volume since compound is not known"); result = cmp->bondAngle(a.atomID, b.atomID, c.atomID); } return result; }; for (auto &cv : mChiralCentres) { if (cv.id != centreID) continue; // calculate the expected chiral volume // the edges float a = bondValue(cv.atomCentre, cv.atom[0]); float b = bondValue(cv.atomCentre, cv.atom[1]); float c = bondValue(cv.atomCentre, cv.atom[2]); // the angles for the top of the tetrahedron float alpha = angle(cv.atom[0], cv.atomCentre, cv.atom[1]); float beta = angle(cv.atom[1], cv.atomCentre, cv.atom[2]); float gamma = angle(cv.atom[2], cv.atomCentre, cv.atom[0]); float cosa = static_cast(std::cos(alpha * kPI / 180)); float cosb = static_cast(std::cos(beta * kPI / 180)); float cosc = static_cast(std::cos(gamma * kPI / 180)); result = (a * b * c * std::sqrt(1 + 2 * cosa * cosb * cosc - (cosa * cosa) - (cosb * cosb) - (cosc * cosc))) / 6; if (cv.volumeSign == negativ) result = -result; break; } return result; } // -------------------------------------------------------------------- // a factory class to generate compounds const std::map kAAMap{ {"ALA", 'A'}, {"ARG", 'R'}, {"ASN", 'N'}, {"ASP", 'D'}, {"CYS", 'C'}, {"GLN", 'Q'}, {"GLU", 'E'}, {"GLY", 'G'}, {"HIS", 'H'}, {"ILE", 'I'}, {"LEU", 'L'}, {"LYS", 'K'}, {"MET", 'M'}, {"PHE", 'F'}, {"PRO", 'P'}, {"SER", 'S'}, {"THR", 'T'}, {"TRP", 'W'}, {"TYR", 'Y'}, {"VAL", 'V'}, {"GLX", 'Z'}, {"ASX", 'B'}}; const std::map kBaseMap{ {"A", 'A'}, {"C", 'C'}, {"G", 'G'}, {"T", 'T'}, {"U", 'U'}, {"DA", 'A'}, {"DC", 'C'}, {"DG", 'G'}, {"DT", 'T'}}; // -------------------------------------------------------------------- class CompoundFactoryImpl { public: CompoundFactoryImpl(); CompoundFactoryImpl(const std::filesystem::path &file, CompoundFactoryImpl *next); CompoundFactoryImpl(std::istream &data, CompoundFactoryImpl *next); ~CompoundFactoryImpl() { delete mNext; } Compound *get(std::string id); Compound *create(std::string id); const Link *getLink(std::string id); const Link *createLink(std::string id); CompoundFactoryImpl *pop() { auto result = mNext; mNext = nullptr; delete this; return result; } std::string unalias(const std::string &resName) const { std::string result = resName; auto &e = const_cast(mFile)["comp_synonym_list"]; for (auto synonym : e["chem_comp_synonyms"]) { if (cif::iequals(synonym["comp_alternative_id"].as(), resName) == false) continue; result = synonym["comp_id"].as(); cif::trim(result); break; } if (result.empty() and mNext) result = mNext->unalias(resName); return result; } bool isKnownPeptide(const std::string &resName) { return mKnownPeptides.count(resName) or (mNext != nullptr and mNext->isKnownPeptide(resName)); } bool isKnownBase(const std::string &resName) { return mKnownBases.count(resName) or (mNext != nullptr and mNext->isKnownBase(resName)); } private: std::shared_timed_mutex mMutex; std::string mPath; std::vector mCompounds; std::vector mLinks; std::set mKnownPeptides; std::set mKnownBases; std::set mMissing; cif::file mFile; CompoundFactoryImpl *mNext = nullptr; }; // -------------------------------------------------------------------- CompoundFactoryImpl::CompoundFactoryImpl() { for (const auto &[key, value] : kAAMap) mKnownPeptides.insert(key); for (const auto &[key, value] : kBaseMap) mKnownBases.insert(key); } CompoundFactoryImpl::CompoundFactoryImpl(const std::filesystem::path &file, CompoundFactoryImpl *next) : mPath(file.string()) , mFile(file) , mNext(next) { const std::regex peptideRx("(?:[lmp]-)?peptide", std::regex::icase); auto &cat = mFile["comp_list"]["chem_comp"]; for (auto chemComp : cat) { std::string group, threeLetterCode; cif::tie(group, threeLetterCode) = chemComp.get("group", "three_letter_code"); if (std::regex_match(group, peptideRx)) mKnownPeptides.insert(threeLetterCode); else if (cif::iequals(group, "DNA") or cif::iequals(group, "RNA")) mKnownBases.insert(threeLetterCode); } } CompoundFactoryImpl::CompoundFactoryImpl(std::istream &data, CompoundFactoryImpl *next) : mFile(data) , mNext(next) { const std::regex peptideRx("(?:[lmp]-)?peptide", std::regex::icase); auto &cat = mFile["comp_list"]["chem_comp"]; for (auto chemComp : cat) { std::string group, threeLetterCode; cif::tie(group, threeLetterCode) = chemComp.get("group", "three_letter_code"); if (std::regex_match(group, peptideRx)) mKnownPeptides.insert(threeLetterCode); else if (cif::iequals(group, "DNA") or cif::iequals(group, "RNA")) mKnownBases.insert(threeLetterCode); } } Compound *CompoundFactoryImpl::get(std::string id) { std::shared_lock lock(mMutex); cif::to_upper(id); Compound *result = nullptr; for (auto cmp : mCompounds) { if (cmp->id() == id) { result = cmp; break; } } if (result == nullptr and mNext != nullptr) result = mNext->get(id); return result; } Compound *CompoundFactoryImpl::create(std::string id) { cif::to_upper(id); Compound *result = get(id); if (result == nullptr and mMissing.count(id) == 0 and not mFile.empty()) { std::unique_lock lock(mMutex); auto &cat = mFile["comp_list"]["chem_comp"]; auto rs = cat.find(cif::key("three_letter_code") == id); if (not rs.empty()) { auto row = rs.front(); std::string name, group; uint32_t numberAtomsAll, numberAtomsNh; cif::tie(name, group, numberAtomsAll, numberAtomsNh) = row.get("name", "group", "number_atoms_all", "number_atoms_nh"); cif::trim(name); cif::trim(group); if (not mFile.contains("comp_" + id)) { auto clibd_mon = fs::path(getenv("CLIBD_MON")); fs::path resFile = clibd_mon / cif::to_lower_copy(id.substr(0, 1)) / (id + ".cif"); if (not fs::exists(resFile) and (id == "COM" or id == "CON" or "PRN")) // seriously... resFile = clibd_mon / cif::to_lower_copy(id.substr(0, 1)) / (id + '_' + id + ".cif"); if (not fs::exists(resFile)) mMissing.insert(id); else { mCompounds.push_back(new Compound(resFile.string(), id, name, group)); result = mCompounds.back(); } } else { mCompounds.push_back(new Compound(mPath, id, name, group)); result = mCompounds.back(); } } if (result == nullptr and mNext != nullptr) result = mNext->create(id); } return result; } const Link *CompoundFactoryImpl::getLink(std::string id) { std::shared_lock lock(mMutex); cif::to_upper(id); const Link *result = nullptr; for (auto link : mLinks) { if (link->id() == id) { result = link; break; } } if (result == nullptr and mNext != nullptr) result = mNext->getLink(id); return result; } const Link *CompoundFactoryImpl::createLink(std::string id) { cif::to_upper(id); const Link *result = getLink(id); if (result == nullptr) { std::unique_lock lock(mMutex); if (mFile.contains("link_" + id)) { result = new Link(mFile["link_" + id]); mLinks.push_back(result); } if (result == nullptr and mNext != nullptr) result = mNext->createLink(id); } return result; } // -------------------------------------------------------------------- CompoundFactory::CompoundFactory() : mImpl(nullptr) { const char *clibdMon = getenv("CLIBD_MON"); if (clibdMon != nullptr) { fs::path db = fs::path(clibdMon) / "list" / "mon_lib_list.cif"; if (fs::exists(db)) pushDictionary(db); } if (mImpl == nullptr) { if (cif::VERBOSE > 0) std::cerr << "Could not load the mon_lib_list.cif file from CCP4, please make sure you have installed CCP4 and sourced the environment." << std::endl; mImpl = new CompoundFactoryImpl(); } } CompoundFactory::~CompoundFactory() { delete mImpl; } CompoundFactory &CompoundFactory::instance() { static CompoundFactory sInstance; return sInstance; } void CompoundFactory::pushDictionary(const fs::path &inDictFile) { if (not fs::exists(inDictFile)) throw std::runtime_error("file not found: " + inDictFile.string()); try { mImpl = new CompoundFactoryImpl(inDictFile.string(), mImpl); } catch (const std::exception &ex) { std::cerr << "Error loading dictionary " << inDictFile << std::endl; throw; } } void CompoundFactory::pushDictionary(std::istream &is) { mImpl = new CompoundFactoryImpl(is, mImpl); } void CompoundFactory::popDictionary() { assert(mImpl != nullptr); if (mImpl != nullptr) mImpl = mImpl->pop(); // should not pop the last one! assert(mImpl != nullptr); } // id is the three letter code const Compound *CompoundFactory::get(std::string id) { return mImpl->get(id); } const Compound *CompoundFactory::create(std::string id) { return mImpl->create(id); } const Link *CompoundFactory::getLink(std::string id) { return mImpl->getLink(id); } const Link *CompoundFactory::createLink(std::string id) { return mImpl->createLink(id); } } // namespace pdb_redolibpdb-redo-3.0.5/src/DistanceMap.cpp0000664000175000017500000003024014364232314017230 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "pdb-redo/ClipperWrapper.hpp" #include "pdb-redo/DistanceMap.hpp" #include "pdb-redo/Symmetry-2.hpp" namespace pdb_redo { using cif::point; // -------------------------------------------------------------------- std::vector DistanceMap::AlternativeSites(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell) { std::vector result; // to make the operation at index 0 equal to identity result.push_back(clipper::RTop_orth::identity()); for (int i = 0; i < spacegroup.num_symops(); ++i) { const auto &symop = spacegroup.symop(i); for (int u : { -1, 0, 1 }) for (int v : { -1, 0, 1 }) for (int w : { -1, 0, 1 }) { if (i == 0 and u == 0 and v == 0 and w == 0) continue; auto rtop = clipper::RTop_frac( symop.rot(), symop.trn() + clipper::Vec3<>(u, v, w)) .rtop_orth(cell); result.push_back(std::move(rtop)); } } return result; } // -------------------------------------------------------------------- std::tuple calculateCenterAndRadius(const std::vector> &atoms) { std::vector pts; for (const auto &[ix, pt] : atoms) pts.emplace_back(pt); auto center = centroid(pts); float radius = 0; for (auto &pt : pts) { float d = static_cast(distance(pt, center)); if (radius < d) radius = d; } return std::make_tuple(center, radius); } // -------------------------------------------------------------------- DistanceMap::DistanceMap(const cif::mm::structure &p, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, float maxDistance) : mStructure(p) , cell(cell) , spacegroup(spacegroup) , dim(0) , mMaxDistance(maxDistance) , mMaxDistanceSQ(maxDistance * maxDistance) { using namespace cif::literals; // First collect the atoms from the datablock std::vector atoms; auto &db = p.get_datablock(); for (auto a : p.atoms()) atoms.push_back(a.get_row()); dim = uint32_t(atoms.size()); std::vector locations(dim); // bounding box point pMin(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()), pMax(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); for (auto &atom : atoms) { const auto &[id, x, y, z] = atom.get("id", "Cartn_x", "Cartn_y", "Cartn_z"); size_t ix = index.size(); index[id] = ix; rIndex[ix] = id; cif::point pt{ x, y, z }; locations[ix] = pt; if (pMin.m_x > pt.m_x) pMin.m_x = pt.m_x; if (pMin.m_y > pt.m_y) pMin.m_y = pt.m_y; if (pMin.m_z > pt.m_z) pMin.m_z = pt.m_z; if (pMax.m_x < pt.m_x) pMax.m_x = pt.m_x; if (pMax.m_y < pt.m_y) pMax.m_y = pt.m_y; if (pMax.m_z < pt.m_z) pMax.m_z = pt.m_z; }; // correct locations so that the median of x, y and z are inside the cell std::vector c(locations.size()); auto median = [&]() { return dim % 1 == 0 ? c[dim / 2] : (c[dim / 2 - 1] + c[dim / 2]) / 2; }; transform(locations.begin(), locations.end(), c.begin(), [](point &l) { return static_cast(l.m_x); }); sort(c.begin(), c.end()); float mx = median(); transform(locations.begin(), locations.end(), c.begin(), [](point &l) { return static_cast(l.m_y); }); sort(c.begin(), c.end()); float my = median(); transform(locations.begin(), locations.end(), c.begin(), [](point &l) { return static_cast(l.m_z); }); sort(c.begin(), c.end()); float mz = median(); if (cif::VERBOSE > 1) std::cerr << "median position of atoms: " << point(mx, my, mz) << std::endl; auto calculateD = [&](float m, float c) { float d = 0; while (m + d < -(c / 2)) d += c; while (m + d > (c / 2)) d -= c; return d; }; mD.m_x = calculateD(mx, static_cast(cell.a())); mD.m_y = calculateD(my, static_cast(cell.b())); mD.m_z = calculateD(mz, static_cast(cell.c())); clipper::Coord_orth D = toClipper(mD); if (mD.m_x != 0 or mD.m_y != 0 or mD.m_z != 0) { if (cif::VERBOSE > 1) std::cerr << "moving coorinates by " << mD.m_x << ", " << mD.m_y << " and " << mD.m_z << std::endl; for_each(locations.begin(), locations.end(), [&](point &p) { p += mD; }); } pMin -= mMaxDistance; // extend bounding box pMax += mMaxDistance; mRtOrth = AlternativeSites(spacegroup, cell); DistMap dist; std::vector>>> residues; // loop over poly_seq_scheme for (const auto &[asymID, seqID] : db["pdbx_poly_seq_scheme"].rows("asym_id", "seq_id")) { std::vector> rAtoms; for (size_t i = 0; i < dim; ++i) { if (atoms[i]["label_asym_id"] == asymID and atoms[i]["label_seq_id"] == seqID) rAtoms.emplace_back(i, locations[i]); } AddDistancesForAtoms(rAtoms, rAtoms, dist, 0); auto &&[center, radius] = calculateCenterAndRadius(rAtoms); residues.emplace_back(center, radius, std::move(rAtoms)); } // treat waters special std::string water_entity_id = db["entity"].find1("type"_key == "water", "id"); for (size_t i = 0; i < dim; ++i) { if (atoms[i]["label_entity_id"] == water_entity_id) { auto pt = locations[i]; residues.emplace_back(pt, 0.f, std::vector>{ { i, pt } }); } } // loop over pdbx_nonpoly_scheme for (const auto &[asymID, entityID] : db["pdbx_nonpoly_scheme"].rows("asym_id", "entity_id")) { if (entityID == water_entity_id) continue; std::vector> rAtoms; for (size_t i = 0; i < dim; ++i) { if (atoms[i]["label_asym_id"] == asymID) rAtoms.emplace_back(i, locations[i]); } AddDistancesForAtoms(rAtoms, rAtoms, dist, 0); auto &&[center, radius] = calculateCenterAndRadius(rAtoms); residues.emplace_back(center, radius, std::move(rAtoms)); } // loop over pdbx_branch_scheme for (const auto &[asym_id, pdb_seq_num] : db["pdbx_branch_scheme"].rows("asym_id", "pdb_seq_num")) { std::vector> rAtoms; for (size_t i = 0; i < dim; ++i) { if (atoms[i]["label_asym_id"] == asym_id and atoms[i]["label_seq_id"] == pdb_seq_num) rAtoms.emplace_back(i, locations[i]); } AddDistancesForAtoms(rAtoms, rAtoms, dist, 0); auto &&[center, radius] = calculateCenterAndRadius(rAtoms); residues.emplace_back(center, radius, std::move(rAtoms)); } cif::Progress progress(residues.size() * (residues.size() - 1), "Creating distance map"); for (size_t i = 0; i + 1 < residues.size(); ++i) { const auto &[centerI, radiusI, atomsI] = residues[i]; for (size_t j = i + 1; j < residues.size(); ++j) { progress.consumed(1); const auto &[centerJ, radiusJ, atomsJ] = residues[j]; // first case, no symmetry operations auto d = distance(centerI, centerJ) - radiusI - radiusJ; if (d < mMaxDistance) { AddDistancesForAtoms(atomsI, atomsJ, dist, 0); continue; } // now try all symmetry operations to see if we can move rj close to ri clipper::Coord_orth cI = toClipper(centerI); clipper::Coord_orth cJ = toClipper(centerJ); auto minR2 = d; int32_t kbest = 0; for (int32_t k = 1; k < static_cast(mRtOrth.size()); ++k) { auto &rt = mRtOrth[k]; auto pJ = (cJ + D).transform(rt) - D; double r2 = std::sqrt((cI - pJ).lengthsq()) - radiusI - radiusJ; if (minR2 > r2) { minR2 = static_cast(r2); kbest = k; } } if (minR2 < mMaxDistance) AddDistancesForAtoms(atomsI, atomsJ, dist, kbest); } } // Store as a sparse CSR compressed matrix size_t nnz = dist.size(); mA.reserve(nnz); mIA.reserve(dim + 1); mJA.reserve(nnz); size_t lastR = 0; mIA.push_back(0); for (const auto &[key, value] : dist) { size_t col, row; std::tie(row, col) = key; if (row != lastR) // new row { for (size_t ri = lastR; ri < row; ++ri) mIA.push_back(mA.size()); lastR = row; } mA.push_back(value); mJA.push_back(col); } for (size_t ri = lastR; ri < dim; ++ri) mIA.push_back(mA.size()); } // -------------------------------------------------------------------- void DistanceMap::AddDistancesForAtoms(const std::vector> &a, const std::vector> &b, DistMap &dm, int32_t rtix) { for (const auto &[ixa, loc_a] : a) { clipper::Coord_orth pa = toClipper(loc_a); for (const auto &[ixb, loc_b] : b) { if (ixa == ixb) continue; clipper::Coord_orth pb = toClipper(loc_b); if (rtix) pb = pb.transform(mRtOrth[rtix]); auto d = static_cast((pa - pb).lengthsq()); if (d > mMaxDistanceSQ) continue; d = std::sqrt(d); dm[std::make_tuple(ixa, ixb)] = std::make_tuple(d, rtix); dm[std::make_tuple(ixb, ixa)] = std::make_tuple(d, -rtix); } } } float DistanceMap::operator()(const std::string &a, const std::string &b) const { size_t ixa, ixb; try { ixa = index.at(a); } catch (const std::out_of_range &ex) { throw std::runtime_error("atom " + a + " not found in distance map"); } try { ixb = index.at(b); } catch (const std::out_of_range &ex) { throw std::runtime_error("atom " + b + " not found in distance map"); } // if (ixb < ixa) // std::swap(ixa, ixb); size_t L = mIA[ixa]; size_t R = mIA[ixa + 1] - 1; while (L <= R) { size_t i = (L + R) / 2; if (mJA[i] == ixb) return std::get<0>(mA[i]); if (mJA[i] < ixb) L = i + 1; else R = i - 1; } return 100.f; } std::vector DistanceMap::near(const cif::mm::atom &atom, float maxDistance) const { using namespace cif::literals; assert(maxDistance <= mMaxDistance); if (maxDistance > mMaxDistance) throw std::runtime_error("Invalid max distance in DistanceMap::near"); std::string a_id = atom.id(); std::string alta = atom.get_label_alt_id(); size_t ixa; try { ixa = index.at(a_id); } catch (const std::out_of_range &ex) { throw std::runtime_error("atom " + a_id + " not found in distance map"); } std::vector result; auto &atom_site = atom.get_row().get_category(); for (size_t i = mIA[ixa]; i < mIA[ixa + 1]; ++i) { float d; int32_t rti; std::tie(d, rti) = mA[i]; if (d > maxDistance) continue; size_t ixb = mJA[i]; std::string b_id = rIndex.at(ixb); auto altb = atom_site.find1("id"_key == b_id, "label_alt_id"); if (altb != alta and not altb.empty() and not alta.empty()) continue; auto atom_b = mStructure.get_atom_by_id(b_id); if (rti > 0) result.emplace_back(symmetryCopy(atom_b, mD, spacegroup, cell, mRtOrth.at(rti))); else if (rti < 0) result.emplace_back(symmetryCopy(atom_b, mD, spacegroup, cell, mRtOrth.at(-rti).inverse())); else result.emplace_back(atom_b); } return result; } } // namespace pdb_redo libpdb-redo-3.0.5/src/MapMaker.cpp0000664000175000017500000010145214364232314016541 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include #include #include #include "pdb-redo/ClipperWrapper.hpp" #include "pdb-redo/MapMaker.hpp" #include "pdb-redo/ResolutionCalculator.hpp" #include "pdb-redo/Statistics.hpp" #include "pdb-redo/Symmetry-2.hpp" #ifdef _MSC_VER #include #define mkstemp _mktemp #endif namespace fs = std::filesystem; namespace pdb_redo { // -------------------------------------------------------------------- // a private ccp4 map file implementation // 1 NC # of Columns (fastest changing in map) // 2 NR # of Rows // 3 NS # of Sections (slowest changing in map) // 4 MODE Data type // 0 = envelope stored as signed bytes (from // -128 lowest to 127 highest) // 1 = Image stored as Integer*2 // 2 = Image stored as Reals // 3 = Transform stored as Complex Integer*2 // 4 = Transform stored as Complex Reals // 5 == 0 // Note: Mode 2 is the normal mode used in // the CCP4 programs. Other modes than 2 and 0 // may NOT WORK // 5 NCSTART Number of first COLUMN in map // 6 NRSTART Number of first ROW in map // 7 NSSTART Number of first SECTION in map // 8 NX Number of intervals along X // 9 NY Number of intervals along Y // 10 NZ Number of intervals along Z // 11 X length Cell Dimensions (Angstroms) // 12 Y length " // 13 Z length " // 14 Alpha Cell Angles (Degrees) // 15 Beta " // 16 Gamma " // 17 MAPC Which axis corresponds to Cols. (1,2,3 for X,Y,Z) // 18 MAPR Which axis corresponds to Rows (1,2,3 for X,Y,Z) // 19 MAPS Which axis corresponds to Sects. (1,2,3 for X,Y,Z) // 20 AMIN Minimum density value // 21 AMAX Maximum density value // 22 AMEAN Mean density value (Average) // 23 ISPG Space group number // 24 NSYMBT Number of bytes used for storing symmetry operators // 25 LSKFLG Flag for skew transformation, =0 none, =1 if foll // 26-34 SKWMAT Skew matrix S (in order S11, S12, S13, S21 etc) if // LSKFLG .ne. 0. // 35-37 SKWTRN Skew translation t if LSKFLG .ne. 0. // Skew transformation is from standard orthogonal // coordinate frame (as used for atoms) to orthogonal // map frame, as // Xo(map) = S * (Xo(atoms) - t) // 38 future use (some of these are used by the MSUBSX routines // . " in MAPBRICK, MAPCONT and FRODO) // . " (all set to zero by default) // . " // 52 " // 53 MAP Character string 'MAP ' to identify file type // 54 MACHST Machine stamp indicating the machine type // which wrote file // 55 ARMS Rms deviation of map from mean density // 56 NLABL Number of labels being used // 57-256 LABEL(20,10) 10 80 character text labels (ie. A4 format) enum CCP4MapFileMode : uint32_t { AS_REALS = 2 // do not support anything else for now... }; struct CCP4MapFileHeader { uint32_t NC, NR, NS; CCP4MapFileMode MODE; int32_t NCSTART, NRSTART, NSSTART; uint32_t NX, NY, NZ; float cellLengths[3]; float cellAngles[3]; uint32_t MAPC, MAPR, MAPS; float AMIN, AMAX, AMEAN; uint32_t ISPG; uint32_t NSYMBT; uint32_t LSKFLG; float SKWMAT[9]; float SKWTRN[3]; uint32_t UNUSED[15]; char MAP[4] = {'M', 'A', 'P', ' '}; uint32_t MACHST = 0x00004144; float ARMS; uint32_t NLABL = 1; char LABEL[200 * 4]; }; template std::tuple CalculateMapStatistics(const clipper::Xmap &xmap, clipper::Grid_range r) { FTYPE amin = std::numeric_limits::max(), amax = std::numeric_limits::min(); long double asum = 0, asum2 = 0; size_t n = 0; clipper::Xmap_base::Map_reference_coord c(xmap); for (int g0 = r.min()[0]; g0 <= r.max()[0]; ++g0) for (int g1 = r.min()[1]; g1 <= r.max()[1]; ++g1) for (int g2 = r.min()[2]; g2 <= r.max()[2]; ++g2) { c.set_coord({g0, g1, g2}); FTYPE v = xmap[c]; asum += v; asum2 += v * v; if (amin > v) amin = v; if (amax < v) amax = v; ++n; } FTYPE mean = static_cast(asum / n); FTYPE rmsd = static_cast(std::sqrt((asum2 / n) - (mean * mean))); return std::make_tuple(amin, amax, mean, rmsd); } template void writeCCP4MapFile(std::ostream &os, clipper::Xmap &xmap, clipper::Grid_range range) { static_assert(sizeof(CCP4MapFileHeader) == 256 * 4, "Map header is of incorrect size"); // static_assert(__BYTE_ORDER == __LITTLE_ENDIAN, "Code for big endian systems is not implemented yet"); auto &spacegroup = xmap.spacegroup(); int spaceGroupNumber = spacegroup.descr().spacegroup_number(); int orderFMS[3] = {3, 1, 2}; switch (spaceGroupNumber) { case 1: case 2: case 3: case 4: case 10: case 16: case 17: case 18: case 20: case 21: case 23: orderFMS[0] = 2; orderFMS[2] = 3; break; } int orderXYZ[3]; for (int i = 0; i < 3; ++i) orderXYZ[orderFMS[i] - 1] = i; int grid[3], gridFMSMin[3], gridFMSMax[3], dim[3]; for (int i = 0; i < 3; ++i) { grid[i] = xmap.grid_sampling()[i]; gridFMSMin[orderXYZ[i]] = range.min()[i]; gridFMSMax[orderXYZ[i]] = range.max()[i]; } for (size_t i = 0; i < 3; ++i) dim[i] = gridFMSMax[i] - gridFMSMin[i] + 1; auto cellDescription = xmap.cell().descr(); CCP4MapFileHeader h = {}; int r = snprintf(h.LABEL, sizeof(h.LABEL), "%s", "Map created with map-maker from the PDB-REDO suite of applications"); for (size_t i = r; i < sizeof(h.LABEL); ++i) h.LABEL[i] = ' '; h.NC = dim[0]; h.NR = dim[1]; h.NS = dim[2]; h.MODE = AS_REALS; h.NCSTART = gridFMSMin[0]; h.NRSTART = gridFMSMin[1]; h.NSSTART = gridFMSMin[2]; h.NX = grid[0]; h.NY = grid[1]; h.NZ = grid[2]; h.cellLengths[0] = cellDescription.a(); h.cellLengths[1] = cellDescription.b(); h.cellLengths[2] = cellDescription.c(); h.cellAngles[0] = cellDescription.alpha_deg(); h.cellAngles[1] = cellDescription.beta_deg(); h.cellAngles[2] = cellDescription.gamma_deg(); h.MAPC = orderFMS[0]; h.MAPR = orderFMS[1]; h.MAPS = orderFMS[2]; h.ISPG = spaceGroupNumber; h.NSYMBT = spacegroup.num_symops() * 80; std::tie(h.AMIN, h.AMAX, h.AMEAN, h.ARMS) = CalculateMapStatistics(xmap, range); os.write(reinterpret_cast(&h), sizeof(h)); const std::string kSpaces(80, ' '); for (int si = 0; si < spacegroup.num_symops(); ++si) { std::string symop = spacegroup.symop(si).format(); os.write(symop.c_str(), symop.length()); os.write(kSpaces.c_str(), 80 - symop.length()); } clipper::Xmap_base::Map_reference_coord c(xmap); const uint32_t kSectionLength = dim[0] * dim[1]; std::vector section(kSectionLength); int g[3]; for (g[2] = gridFMSMin[2]; g[2] <= gridFMSMax[2]; ++g[2]) { auto si = section.begin(); for (g[1] = gridFMSMin[1]; g[1] <= gridFMSMax[1]; ++g[1]) for (g[0] = gridFMSMin[0]; g[0] <= gridFMSMax[0]; ++g[0]) { c.set_coord({g[orderXYZ[0]], g[orderXYZ[1]], g[orderXYZ[2]]}); *si++ = static_cast(xmap[c]); } assert(si == section.end()); os.write(reinterpret_cast(section.data()), kSectionLength * sizeof(float)); } } // -------------------------------------------------------------------- bool IsMTZFile(const fs::path &p) { bool result = false; std::ifstream f(p); if (f.is_open()) { char sig[5] = {}; f.read(sig, 4); result = sig == std::string("MTZ "); } return result; } // -------------------------------------------------------------------- template Map::Map() { } template Map::~Map() { } template void Map::calculateStats() { double sum = 0, sum2 = 0; int count = 0; mMinDensity = std::numeric_limits::max(); mMaxDensity = std::numeric_limits::min(); for (auto ix = mMap.first(); not ix.last(); ix.next()) { auto v = mMap[ix]; if (std::isnan(v)) throw std::runtime_error("map contains NaN values"); if (mMinDensity > v) mMinDensity = v; if (mMaxDensity < v) mMaxDensity = v; ++count; sum += v; sum2 += v * v; } mMeanDensity = sum / count; mRMSDensity = std::sqrt((sum2 / count) - (mMeanDensity * mMeanDensity)); } template void Map::read(const std::filesystem::path &f) { fs::path mapFile(f); fs::path dataFile = mapFile; if (cif::VERBOSE > 0) std::cout << "Reading map from " << mapFile << std::endl; if (mapFile.extension() == ".gz") { // file is compressed fs::path p = mapFile.parent_path(); std::string s = mapFile.filename().string(); cif::gzio::ifstream in(mapFile); char tmpFileName[] = "/tmp/map-tmp-XXXXXX"; if (mkstemp(tmpFileName) < 0) throw std::runtime_error(std::string("Could not create temp file for map: ") + strerror(errno)); dataFile = fs::path(tmpFileName); std::ofstream out(dataFile); if (not in.is_open() or not out.is_open()) throw std::runtime_error("Could not handle compressed map file"); out << in.rdbuf(); } if (not fs::exists(dataFile)) throw std::runtime_error("Could not open map file " + mapFile.string()); using namespace clipper; CCP4MAPfile mapin; mapin.open_read(dataFile.string()); mapin.import_xmap(mMap); mapin.close_read(); if (dataFile != mapFile) fs::remove(dataFile); calculateStats(); } template void Map::write(const std::filesystem::path &f) { write_masked(f, mMap.grid_asu()); } template void Map::write_masked(std::ostream &os, clipper::Grid_range r) { writeCCP4MapFile(os, mMap, r); } template void Map::write_masked(const std::filesystem::path &f, clipper::Grid_range r) { std::ofstream file(f, std::ios_base::binary); if (not file.is_open()) throw std::runtime_error("Could not open map file for writing: " + f.string()); write_masked(file, r); } // -------------------------------------------------------------------- template Map Map::masked(const cif::mm::structure &structure, const std::vector &atoms) const { Map result(*this); auto rtops = AlternativeSites(getSpacegroup(structure.get_datablock()), getCell(structure.get_datablock())); for (auto &atom : atoms) { float radius = cif::atom_type_traits(atom.get_type()).radius(cif::radius_type::van_der_waals); if (std::isnan(radius)) radius = cif::atom_type_traits(atom.get_type()).radius(cif::radius_type::calculated); if (std::isnan(radius)) // TODO: now what? radius = 200; auto cloc = toClipper(atom.get_location()); for (auto &rt : rtops) { auto rcloc = cloc.transform(rt); iterateGrid(toClipper(toPoint(rcloc)), radius, result.mMap, [&result, radiusSq = radius * radius, a = atom.get_location()](auto iw) { cif::point p = toPoint(iw.coord_orth()); if (distance_squared(a, p) < radiusSq) result.mMap[iw] = -10; }); } } return result; } template float Map::z_weighted_density(const cif::mm::structure &structure, const std::vector &atoms) const { FTYPE result = 0; for (auto &atom : atoms) { auto co = toClipper(atom.get_location()); auto a_cf = co.coord_frac(mMap.cell()); auto a_cm = a_cf.coord_map(mMap.grid_sampling()); FTYPE dv; clipper::Interp_nearest::interp(mMap, a_cm, dv); result += dv * static_cast(atom.get_type() == cif::atom_type::D ? cif::atom_type::H : atom.get_type()); } return result; } // -------------------------------------------------------------------- template class Map; template class Map; // -------------------------------------------------------------------- template MapMaker::MapMaker() { } template MapMaker::~MapMaker() { } template void MapMaker::loadMTZ(const fs::path &f, float samplingRate, std::initializer_list fbLabels, std::initializer_list fdLabels, std::initializer_list foLabels, std::initializer_list fcLabels, std::initializer_list faLabels) { fs::path hklin(f); if (cif::VERBOSE > 0) std::cerr << "Reading map from " << hklin << std::endl << " with labels: FB: " << cif::join(fbLabels, ",") << std::endl << " with labels: FD: " << cif::join(fdLabels, ",") << std::endl << " with labels: FA: " << cif::join(faLabels, ",") << std::endl << " with labels: FO: " << cif::join(foLabels, ",") << std::endl << " with labels: FC: " << cif::join(fcLabels, ",") << std::endl; fs::path dataFile = hklin; if (hklin.extension() == ".gz") { // file is compressed fs::path p = hklin.parent_path(); std::string s = hklin.filename().string(); cif::gzio::ifstream in(hklin); char tmpFileName[] = "/tmp/mtz-tmp-XXXXXX"; if (mkstemp(tmpFileName) < 0) throw std::runtime_error(std::string("Could not create temp file for mtz: ") + strerror(errno)); dataFile = fs::path(tmpFileName); std::ofstream out(dataFile); out << in.rdbuf(); } if (not fs::exists(dataFile)) throw std::runtime_error("Could not open mtz file " + hklin.string()); const std::string kBasePath("/%s/%s/[%s]"); using clipper::CCP4MTZfile; CCP4MTZfile mtzin; mtzin.open_read(dataFile.string()); mtzin.import_hkl_info(mHKLInfo); bool hasFAN = false, hasFREE = false; const std::regex rx(R"(^/[^/]+/[^/]+/(.+) \S$)"); for (auto &label : mtzin.column_labels()) { std::smatch m; if (not std::regex_match(label, m, rx)) continue; if (m[1] == "FAN") { hasFAN = true; continue; } if (m[1] == "FREE") { hasFREE = true; continue; } } mtzin.import_hkl_data(mFbData, cif::format(kBasePath, "*", "*", cif::join(fbLabels, ",")).str()); mtzin.import_hkl_data(mFdData, cif::format(kBasePath, "*", "*", cif::join(fdLabels, ",")).str()); if (hasFAN) mtzin.import_hkl_data(mFaData, cif::format(kBasePath, "*", "*", cif::join(faLabels, ",")).str()); mtzin.import_hkl_data(mFoData, cif::format(kBasePath, "*", "*", cif::join(foLabels, ",")).str()); mtzin.import_hkl_data(mFcData, cif::format(kBasePath, "*", "*", cif::join(fcLabels, ",")).str()); if (hasFREE) mtzin.import_hkl_data(mFreeData, cif::format(kBasePath, "*", "*", "FREE").str()); mtzin.import_hkl_data(mPhiFomData, cif::format(kBasePath, "*", "*", "PHWT,FOM").str()); mtzin.close_read(); if (dataFile != hklin) fs::remove(dataFile); Cell cell = mHKLInfo.cell(); Spacegroup spacegroup = mHKLInfo.spacegroup(); ResolutionCalculator rc(cell); mResHigh = 99; mResLow = 0; for (auto hi = mFoData.first_data(); not hi.last(); hi = mFoData.next_data(hi)) { auto res = rc(hi.hkl().h(), hi.hkl().k(), hi.hkl().l()); if (mResHigh > res) mResHigh = res; if (mResLow < res) mResLow = res; } if (mResLow == 0 and mResHigh == 99) throw std::runtime_error("Empty Fo map"); // fixMTZ(); mGrid.init(spacegroup, cell, mHKLInfo.resolution(), samplingRate); // define grid clipper::Xmap &fbMap = mFb; clipper::Xmap &fdMap = mFd; clipper::Xmap &faMap = mFa; fbMap.init(spacegroup, cell, mGrid); // define map fbMap.fft_from(mFbData); // generate map fdMap.init(spacegroup, cell, mGrid); // define map fdMap.fft_from(mFdData); // generate map if (not mFaData.is_null()) { faMap.init(spacegroup, cell, mGrid); faMap.fft_from(mFaData); } if (cif::VERBOSE > 0) { std::cerr << "Read Xmaps with sampling rate: " << samplingRate << std::endl << " stored resolution: " << mHKLInfo.resolution().limit() << std::endl << " calculated reshi = " << mResHigh << " reslo = " << mResLow << std::endl << " spacegroup: " << spacegroup.symbol_hm() << std::endl << " cell: " << cell.format() << std::endl << " grid: " << mGrid.format() << std::endl; printStats(); } mFb.calculateStats(); mFd.calculateStats(); } // -------------------------------------------------------------------- template void MapMaker::loadMaps(const fs::path &fbMapFile, const fs::path &fdMapFile, float reshi, float reslo) { mResHigh = reshi; mResLow = reslo; mFb.read(fbMapFile); mFd.read(fdMapFile); if (not mFb.cell().equals(mFd.cell())) throw std::runtime_error("Fb and Fd map do not contain the same cell"); clipper::Resolution reso(reshi); mHKLInfo.init(mFb.spacegroup(), mFb.cell(), reso, true); mGrid = mFb.get().grid_sampling(); } // -------------------------------------------------------------------- std::ostream &operator<<(std::ostream &os, const clipper::HKL &hkl) { os << "h: " << hkl.h() << ", " << "k: " << hkl.k() << ", " << "l: " << hkl.l(); return os; }; // -------------------------------------------------------------------- template void MapMaker::calculate(const fs::path &hklin, const cif::mm::structure &structure, bool noBulk, AnisoScalingFlag anisoScaling, float samplingRate, bool electronScattering, std::initializer_list foLabels, std::initializer_list freeLabels) { if (IsMTZFile(hklin)) loadFoFreeFromMTZFile(hklin, foLabels, freeLabels); else loadFoFreeFromReflectionsFile(hklin); recalc(structure, noBulk, anisoScaling, samplingRate, electronScattering); } // -------------------------------------------------------------------- template void MapMaker::loadFoFreeFromReflectionsFile(const fs::path &hklin) { using clipper::HKL; cif::file reflnsFile(hklin); auto &reflns = reflnsFile.front(); // m_xname = reflns["exptl_crystal"].front()["id"].as(); // m_pname = reflns["entry"].front()["id"].as(); float a, b, c, alpha, beta, gamma; cif::tie(a, b, c, alpha, beta, gamma) = reflns["cell"].front().get( "length_a", "length_b", "length_c", "angle_alpha", "angle_beta", "angle_gamma"); using clipper::Cell_descr; Cell cell = Cell(Cell_descr{a, b, c, alpha, beta, gamma}); // if (not cell2.equals(m_cell)) // throw std::runtime_error("Reflections file and coordinates file do not agree upon the cell parameters"); // -------------------------------------------------------------------- // Read reflections file to calculate resolution low and high ResolutionCalculator rc(a, b, c, alpha, beta, gamma); double hires = 99; for (auto r : reflns["refln"]) { int h, k, l; cif::tie(h, k, l) = r.get("index_h", "index_k", "index_l"); double res = rc(h, k, l); if (hires > res) hires = res; } std::string spacegroupDescr = reflns["symmetry"].front()["space_group_name_H-M"].as(); auto spacegroup = Spacegroup(clipper::Spgr_descr{spacegroupDescr}); mHKLInfo = HKL_info(spacegroup, cell, clipper::Resolution{hires}, true); // m_crystal = MTZcrystal(m_xname, m_pname, m_cell); mFoData.init(mHKLInfo, mHKLInfo.cell()); mFreeData.init(mHKLInfo, mHKLInfo.cell()); for (auto ih = mFreeData.first(); not ih.last(); ih.next()) mFreeData[ih].set_null(); // -------------------------------------------------------------------- enum FreeRConvention { frXPLO, frCCP4 } freeRConvention = frXPLO; int freeRefl = 1, workRefl = 0; if (false /*m_statusXPLO*/) { freeRConvention = frCCP4; freeRefl = 0; workRefl = 1; } bool first = false; for (auto r : reflns["refln"]) { int h, k, l; char flag; float F, sigF; cif::tie(h, k, l, flag, F, sigF) = r.get("index_h", "index_k", "index_l", "status", "F_meas_au", "F_meas_sigma_au"); int ix = mHKLInfo.index_of(HKL{h, k, l}); if (ix < 0) { if (cif::VERBOSE > 0) std::cerr << "Ignoring hkl(" << h << ", " << k << ", " << l << ")" << std::endl; continue; } if (first and (flag == freeRefl or flag == workRefl)) { std::cerr << "Non-standard _refln.status column detected" << std::endl << "Assuming " << (freeRConvention == frXPLO ? "XPLOR" : "CCP4") << " convention for free R flag" << std::endl; first = false; } mFoData[ix] = F_sigF(F, sigF); switch (flag) { case 'o': case 'h': case 'l': mFreeData[ix] = Flag(1); break; case 'f': mFreeData[ix] = Flag(0); break; case '0': case '1': mFreeData[ix] = Flag(workRefl == flag ? 1 : 0); break; default: if (cif::VERBOSE > 1) std::cerr << "Unexpected value in status: '" << flag << "' for hkl(" << h << ", " << k << ", " << l << ")" << std::endl; break; } } } // -------------------------------------------------------------------- template void MapMaker::loadFoFreeFromMTZFile(const fs::path &hklin, std::initializer_list foLabels, std::initializer_list freeLabels) { if (cif::VERBOSE > 0) std::cerr << "Recalculating maps from " << hklin << std::endl; const std::string kBasePath("/%s/%s/[%s]"); using clipper::CCP4MTZfile; CCP4MTZfile mtzin; mtzin.open_read(hklin.string()); mtzin.import_hkl_info(mHKLInfo); mtzin.import_hkl_data(mFoData, cif::format(kBasePath, "*", "*", cif::join(foLabels, ",")).str()); mtzin.import_hkl_data(mFreeData, cif::format(kBasePath, "*", "*", cif::join(freeLabels, ",")).str()); mtzin.close_read(); } // -------------------------------------------------------------------- template void MapMaker::recalc(const cif::mm::structure &structure, bool noBulk, AnisoScalingFlag anisoScaling, float samplingRate, bool electronScattering) { Cell cell = mHKLInfo.cell(); Spacegroup spacegroup = mHKLInfo.spacegroup(); // The calculation work std::vector atoms; for (auto a : structure.atoms()) atoms.push_back(toClipper(a)); mFcData.init(mHKLInfo, cell); if (not electronScattering) { auto &exptl = structure.get_category("exptl"); electronScattering = not exptl.empty() and exptl.front()["method"] == "ELECTRON CRYSTALLOGRAPHY"; } clipper::ScatteringFactors::selectScattteringFactorsType( electronScattering ? clipper::SF_ELECTRON : clipper::SF_WAASMAIER_KIRFEL); if (noBulk) { clipper::SFcalc_aniso_fft sfc; sfc(mFcData, atoms); } else { clipper::SFcalc_obs_bulk sfcb; sfcb(mFcData, mFoData, atoms); if (cif::VERBOSE > 0) std::cerr << "Bulk correction volume: " << sfcb.bulk_frac() << std::endl << "Bulk correction factor: " << sfcb.bulk_scale() << std::endl; } if (anisoScaling != as_None) { clipper::SFscale_aniso::TYPE F = clipper::SFscale_aniso::F; clipper::SFscale_aniso sfscl; if (anisoScaling == as_Observed) sfscl(mFoData, mFcData); // scale Fobs else sfscl(mFcData, mFoData); // scale Fcal if (cif::VERBOSE > 0) std::cerr << "Anisotropic scaling:" << std::endl << sfscl.u_aniso_orth(F).format() << std::endl; } // now do sigmaa calc mFbData.init(mHKLInfo, cell); mFdData.init(mHKLInfo, cell); mPhiFomData.init(mHKLInfo, cell); HKL_data flag(mHKLInfo, cell); const int freeflag = 0; for (auto ih = mFreeData.first(); not ih.last(); ih.next()) { if (not mFoData[ih].missing() and (mFreeData[ih].missing() or mFreeData[ih].flag() == freeflag)) flag[ih].flag() = clipper::SFweight_spline::BOTH; else flag[ih].flag() = clipper::SFweight_spline::NONE; } // do sigmaa calc clipper::SFweight_spline sfw(mNumRefln, mNumParam); sfw(mFbData, mFdData, mPhiFomData, mFoData, mFcData, flag); // mFbData now contains 2mFo - DFc // mFdData now contains mFo - DFc fixMTZ(); ResolutionCalculator rc(cell); mResHigh = 99; mResLow = 0; for (auto hi = mFoData.first_data(); not hi.last(); hi = mFoData.next_data(hi)) { auto res = rc(hi.hkl().h(), hi.hkl().k(), hi.hkl().l()); if (mResHigh > res) mResHigh = res; if (mResLow < res) mResLow = res; } if (cif::VERBOSE > 1) std::cerr << "calculated reshi = " << mResHigh << " reslo = " << mResLow << std::endl; // samplingRate /= 2; mGrid.init(spacegroup, cell, mHKLInfo.resolution(), samplingRate); // define grid clipper::Xmap &fbMap = mFb; clipper::Xmap &fdMap = mFd; fbMap.init(spacegroup, cell, mGrid); // define map fbMap.fft_from(mFbData); // generate map fdMap.init(spacegroup, cell, mGrid); // define map fdMap.fft_from(mFdData); // generate map if (cif::VERBOSE > 0) { std::cerr << "Read Xmaps with sampling rate: " << samplingRate << std::endl << " resolution: " << mResHigh << std::endl << " cell: " << cell.format() << std::endl << " grid: " << mGrid.format() << std::endl; printStats(); } mFb.calculateStats(); mFd.calculateStats(); } template void MapMaker::fixMTZ() { Spacegroup spacegroup = mHKLInfo.spacegroup(); enum { A1, // A1: FC = 2mFo - FM A2, // A2: FC >= 2mFo - FM A3, // A3: FD = FM - mFo A4, // A4: FD = 2(FM - mFo) C5, // C5: FC = 2mFo - FM C6, // C6: FM = mFo C7, // C7: FD = mFo - FC C8, // C8: FD = 2(mFo - FC) C9, // C9: FD <= mFo - FC T10, // 10: FM = FC (unobserved only) T11, // 11: FD = 0 (unobserved only) TestCount }; std::vector tests(TestCount, true); // first run the tests to see if we need to fix anything if (cif::VERBOSE > 0) std::cerr << "Testing MTZ file" << std::endl; for (auto ih = mFbData.first(); not ih.last(); ih.next()) { clipper::HKL_class cls(spacegroup, ih.hkl()); auto W = mPhiFomData[ih].fom(); auto FM = mFbData[ih].f(); auto PM = mFbData[ih].phi() * 180 / kPI; auto FD = mFdData[ih].f(); auto PD = mFdData[ih].phi() * 180 / kPI; auto FO = mFoData[ih].f(); auto FC = mFcData[ih].f(); auto PC = mFcData[ih].phi() * 180 / kPI; auto WFO = W * FO; if (std::abs(std::fmod(std::abs(PM - PC) + 180, 360) - 180) > 90) FM = -FM; if (std::abs(std::fmod(std::abs(PD - PC) + 180, 360) - 180) > 90) FD = -FD; if (mFoData[ih].missing() or W == 0) { if (tests[T10] and std::abs(FM - FC) > 0.05) { tests[T10] = false; if (cif::VERBOSE > 0) std::cerr << "Test 10 failed at " << ih.hkl() << std::endl; } if (tests[T11] and std::abs(FD) > 0.05) { tests[T11] = false; if (cif::VERBOSE > 0) std::cerr << "Test 11 failed at " << ih.hkl() << std::endl; } } else if (cls.centric()) { if (tests[C5] and std::abs(FC + FM - 2 * WFO) > 0.05) { tests[C5] = false; if (cif::VERBOSE > 0) std::cerr << "Test C5 failed at " << ih.hkl() << std::endl; } if (tests[C6] and std::abs(FM - WFO) > 0.05) { tests[C6] = false; if (cif::VERBOSE > 0) std::cerr << "Test C6 failed at " << ih.hkl() << std::endl; } if (tests[C7] and std::abs(FC + FD - WFO) > 0.05) { tests[C7] = false; if (cif::VERBOSE > 0) std::cerr << "Test C7 failed at " << ih.hkl() << std::endl; } if (tests[C8] and std::abs(FC + 0.5 * FD - WFO) > 0.05) { tests[C8] = false; if (cif::VERBOSE > 0) std::cerr << "Test C8 failed at " << ih.hkl() << std::endl; } if (tests[C9] and (1.01 * FC + FD - WFO) < -0.05) { tests[C9] = false; if (cif::VERBOSE > 0) std::cerr << "Test C9 failed at " << ih.hkl() << std::endl; } } else { if (tests[A1] and std::abs(FC + FM - 2 * WFO) > 0.05) { tests[A1] = false; if (cif::VERBOSE > 0) std::cerr << "Test A1 failed at " << ih.hkl() << std::endl; } if (tests[A2] and 1.01 * FC + FM - 2 * WFO < -0.05) { tests[A2] = false; if (cif::VERBOSE > 0) std::cerr << "Test A2 failed at " << ih.hkl() << std::endl; } if (tests[A3] and std::abs(FM - FD - WFO) > 0.05) { tests[A3] = false; if (cif::VERBOSE > 0) std::cerr << "Test A3 failed at " << ih.hkl() << std::endl; } if (tests[A4] and std::abs(FM - 0.5 * FD - WFO) > 0.05) { tests[A4] = false; if (cif::VERBOSE > 0) std::cerr << "Test A4 failed at " << ih.hkl() << std::endl; } } } using clipper::HKL_class; using clipper::data32::F_phi; const F_phi fzero(0, 0); // mtzfix... for (auto ih = mFbData.first(); not ih.last(); ih.next()) { if (mFbData[ih].missing() or mFdData[ih].missing()) continue; auto PM = mFbData[ih].phi() * 180 / kPI; auto PD = mFdData[ih].phi() * 180 / kPI; auto PC = mFcData[ih].phi() * 180 / kPI; if (std::abs(std::fmod(std::abs(PM - PC) + 180, 360) - 180) > 90) { mFbData[ih].f() = -mFbData[ih].f(); mFbData[ih].phi() = mFcData[ih].phi(); } if (std::abs(std::fmod(std::abs(PD - PC) + 180, 360) - 180) > 90) { mFdData[ih].f() = -mFdData[ih].f(); mFdData[ih].phi() = mFcData[ih].phi(); } auto mFo = mFbData[ih] - mFdData[ih]; HKL_class cls(spacegroup, ih.hkl()); if (not mFoData[ih].missing() and mPhiFomData[ih].fom() > 0) { if (cls.centric()) { if (not tests[C6]) mFbData[ih] = mFo; if (not tests[C7] and tests[C8]) mFdData[ih].f() = mFdData[ih].f() / 2; } else { if (tests[A3] and not tests[A4]) mFdData[ih] = mFdData[ih] + mFdData[ih]; } } else { if (not tests[T10]) { if ((not cls.centric() and tests[A1]) or (cls.centric() and (tests[C5] or tests[C7] or tests[C8]))) { mFbData[ih] = mFcData[ih]; } } if (not tests[T11]) mFdData[ih] = fzero; } } } template void MapMaker::printStats() { // calc R and R-free std::vector params(mNumParam, 1.0); clipper::BasisFn_spline basisfn(mFoData, mNumParam, 1.0); clipper::TargetFn_scaleF1F2 targetfn(mFcData, mFoData); clipper::ResolutionFn rfn(mHKLInfo, basisfn, targetfn, params); double r1w = 0, f1w = 0, r1f = 0, f1f = 0; const int freeflag = 0; for (auto ih = mFoData.first_data(); not ih.last(); ih = mFoData.next_data(ih)) { if (mFcData[ih].missing()) continue; // throw std::runtime_error("missing Fc"); double Fo = mFoData[ih].f(); double Fc = std::sqrt(rfn.f(ih)) * mFcData[ih].f(); if (mFreeData[ih].flag() == freeflag) { r1f += fabs(Fo - Fc); f1f += Fo; } else { r1w += fabs(Fo - Fc); f1w += Fo; } } if (f1f < 0.1) f1f = 0.1; r1f /= f1f; if (f1w < 0.1) f1w = 0.1; r1w /= f1w; std::cerr << "R-factor : " << r1w << std::endl << "Free R-factor : " << r1f << std::endl; } template void MapMaker::writeMTZ(const fs::path &file, const std::string &pname, const std::string &cname) { if (mHKLInfo.is_null()) throw std::runtime_error("HKL info not initialized"); clipper::CCP4MTZfile mtz; clipper::MTZdataset dataset(pname, 0); clipper::MTZcrystal crystal(cname, pname, mHKLInfo.cell()); const std::string col = "/" + pname + "/" + cname + "/"; mtz.open_write(file.string()); mtz.export_hkl_info(mHKLInfo); mtz.export_crystal(crystal, col); mtz.export_dataset(dataset, col); if (not mFreeData.is_null()) mtz.export_hkl_data(mFreeData, col + "[FREE]"); if (not mFoData.is_null()) mtz.export_hkl_data(mFoData, col + "[FP,SIGFP]"); if (not mFcData.is_null()) mtz.export_hkl_data(mFcData, col + "[FC_ALL,PHIC_ALL]"); if (not mFbData.is_null()) mtz.export_hkl_data(mFbData, col + "[FWT,PHWT]"); if (not mFdData.is_null()) mtz.export_hkl_data(mFdData, col + "[DELFWT,PHDELWT]"); if (not mPhiFomData.is_null()) mtz.export_hkl_data(mPhiFomData, col + "[PHI,FOM]"); mtz.close_write(); } template class MapMaker; template class MapMaker; } // namespace pdb_redo libpdb-redo-3.0.5/src/Minimizer.cpp0000664000175000017500000011022714364232314017007 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 22 mei, 2018 */ #include #include #include #include #include "pdb-redo/Minimizer.hpp" #include "pdb-redo/Symmetry-2.hpp" namespace fs = std::filesystem; namespace pdb_redo { // -------------------------------------------------------------------- const uint32_t kRefSentinel = std::numeric_limits::max(); const double kNonBondedContactDistanceSq = 15.0 * 15.0, kMaxPeptideBondLengthSq = 3.5 * 3.5; // -------------------------------------------------------------------- struct lessAtom { bool operator()(const cif::mm::atom &a, const cif::mm::atom &b) const { return a.id().compare(b.id()) < 0; } }; typedef std::set AtomSet; // -------------------------------------------------------------------- DPoint AtomLocationProvider::operator[](AtomRef atomID) const { if (atomID >= mAtoms.size()) throw std::range_error("Unknown atom " + std::to_string(atomID)); return mAtoms[atomID].get_location(); } std::string AtomLocationProvider::atom(AtomRef atomID) const { if (atomID >= mAtoms.size()) throw std::range_error("Unknown atom " + std::to_string(atomID)); auto &a = mAtoms[atomID]; return std::to_string(a.get_label_seq_id()) + ' ' + a.get_label_atom_id(); } // -------------------------------------------------------------------- Minimizer::Minimizer(const cif::mm::structure &structure, const BondMap &bonds, float plane5AtomsESD) : mStructure(structure) , mBonds(bonds) , mPlane5ESD(plane5AtomsESD) { } void Minimizer::addResidue(const cif::mm::residue &res) { auto compound = Compound::create(res.get_compound_id()); // r.get_compound(); if (not compound) throw std::runtime_error("Missing compound information for " + res.get_compound_id()); for (auto a : res.atoms()) { (void)ref(a); mAtoms.push_back(a); } for (auto &b : compound->bonds()) { try { if (compound->get_atom_by_atom_id(b.atomID[0]).typeSymbol == cif::H or compound->get_atom_by_atom_id(b.atomID[1]).typeSymbol == cif::H) { continue; } cif::mm::atom a1 = res.get_atom_by_atom_id(b.atomID[0]); cif::mm::atom a2 = res.get_atom_by_atom_id(b.atomID[1]); if (not(a1 and a2)) continue; mBondRestraints.emplace_back(ref(a1), ref(a2), b.distance, b.esd); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing bond restraints: " << ex.what() << std::endl; continue; } } for (auto &a : compound->angles()) { try { if (compound->get_atom_by_atom_id(a.atomID[0]).typeSymbol == cif::H or compound->get_atom_by_atom_id(a.atomID[1]).typeSymbol == cif::H or compound->get_atom_by_atom_id(a.atomID[2]).typeSymbol == cif::H) { continue; } cif::mm::atom a1 = res.get_atom_by_atom_id(a.atomID[0]); cif::mm::atom a2 = res.get_atom_by_atom_id(a.atomID[1]); cif::mm::atom a3 = res.get_atom_by_atom_id(a.atomID[2]); if (not(a1 and a2 and a3)) continue; mAngleRestraints.emplace_back( ref(a1), ref(a2), ref(a3), a.angle, a.esd); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing angle restraints: " << ex.what() << std::endl; continue; } } for (auto &a : compound->torsions()) { if (a.esd == 0) continue; try { if (compound->get_atom_by_atom_id(a.atomID[0]).typeSymbol == cif::H or compound->get_atom_by_atom_id(a.atomID[1]).typeSymbol == cif::H or compound->get_atom_by_atom_id(a.atomID[2]).typeSymbol == cif::H or compound->get_atom_by_atom_id(a.atomID[3]).typeSymbol == cif::H) { continue; } cif::mm::atom a1 = res.get_atom_by_atom_id(a.atomID[0]); cif::mm::atom a2 = res.get_atom_by_atom_id(a.atomID[1]); cif::mm::atom a3 = res.get_atom_by_atom_id(a.atomID[2]); cif::mm::atom a4 = res.get_atom_by_atom_id(a.atomID[3]); if (a1 and a2 and a3 and a4) mTorsionRestraints.emplace_back(ref(a1), ref(a2), ref(a3), ref(a4), a.angle, a.esd, a.period); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing torsion restraints: " << ex.what() << std::endl; continue; } } for (auto &cv : compound->chiralCentres()) { try { if (compound->get_atom_by_atom_id(cv.atomID[0]).typeSymbol == cif::H or compound->get_atom_by_atom_id(cv.atomID[1]).typeSymbol == cif::H or compound->get_atom_by_atom_id(cv.atomID[2]).typeSymbol == cif::H) { continue; } cif::mm::atom cc = res.get_atom_by_atom_id(cv.atomIDCentre); cif::mm::atom a1 = res.get_atom_by_atom_id(cv.atomID[0]); cif::mm::atom a2 = res.get_atom_by_atom_id(cv.atomID[1]); cif::mm::atom a3 = res.get_atom_by_atom_id(cv.atomID[2]); if (not(cc and a1 and a2 and a3)) continue; auto volume = compound->chiralVolume(cv.id); mChiralVolumeRestraints.emplace_back(ref(cc), ref(a1), ref(a2), ref(a3), volume * 6); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing chiral volume restraints: " << ex.what() << std::endl; continue; } } for (auto &p : compound->planes()) { try { std::vector atoms; for (auto a : p.atomID) { if (compound->get_atom_by_atom_id(a).typeSymbol == cif::H) continue; auto a1 = res.get_atom_by_atom_id(a); if (not a1) continue; atoms.push_back(ref(a1)); } if (atoms.size() > 3) mPlanarityRestraints.emplace_back(move(atoms), p.esd); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing planarity restraints: " << ex.what() << std::endl; continue; } } } void Minimizer::addPolySection(const cif::mm::polymer &poly, int first, int last) { const cif::mm::monomer *prev = nullptr; // used to link residues for (auto &r : poly) { if (r.get_seq_id() < first) { prev = &r; continue; } if (r.get_seq_id() <= last) addResidue(r); if (prev != nullptr) try { cif::mm::atom c = prev->get_atom_by_atom_id("C"), n = r.get_atom_by_atom_id("N"); if (c and n and distance_squared(c, n) < kMaxPeptideBondLengthSq) { bool trans = not cif::mm::monomer::is_cis(*prev, r); if (trans) addLinkRestraints(*prev, r, "C", "N", r.get_compound_id() == "PRO" ? "PTRANS" : "TRANS"); else addLinkRestraints(*prev, r, "C", "N", r.get_compound_id() == "PRO" ? "PCIS" : "CIS"); if (trans) { cif::mm::atom ca1 = prev->get_atom_by_atom_id("CA"); cif::mm::atom ca2 = r.get_atom_by_atom_id("CA"); mTransPeptideRestraints.emplace_back(TransPeptideRestraint{ ref(ca1), ref(c), ref(n), ref(ca2) }); } // add planar restraints std::vector atoms = { ref(prev->get_atom_by_atom_id("CA")), ref(c), ref(prev->get_atom_by_atom_id("O")), ref(n), ref(r.get_atom_by_atom_id("CA")) }; mPlanarityRestraints.emplace_back(PlanarityRestraint{ move(atoms), mPlane5ESD }); } } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing plane-5-atoms restraints: " << ex.what() << std::endl; // continue; } if (r.get_seq_id() > last) break; prev = &r; } // Add link BondRestraints // for (auto& a1: mAtoms) // { // // TODO: implement based on struct_conn information and radii from ener_lib? // } } void Minimizer::addDensityMap(const XMap &xMap, float mapWeight) { std::vector> densityAtoms; densityAtoms.reserve(mAtoms.size()); transform(mAtoms.begin(), mAtoms.end(), back_inserter(densityAtoms), [this](const cif::mm::atom &a) { double z = static_cast(a.get_type()); double weight = 1; double occupancy = a.get_occupancy(); if (occupancy > 1) occupancy = 1; // TODO: cryo_em support return std::make_pair(ref(a), z * weight * occupancy); }); mDensityRestraint.reset(new DensityRestraint(move(densityAtoms), xMap, mapWeight)); } void Minimizer::Finish() { if (mAtoms.empty()) throw std::runtime_error("No atoms to refine"); fs::path enerLibFilePath(getenv("CLIBD_MON")); enerLibFilePath /= "ener_lib.cif"; cif::file enerLibFile(enerLibFilePath); auto &db = enerLibFile["energy"]; auto &libAtom = db["lib_atom"]; std::set> nbc; SymmetryAtomIteratorFactory saif(mStructure, getSpacegroup(mStructure.get_datablock()), getCell(mStructure.get_datablock())); auto add_nbc = [this, &nbc, &libAtom](const cif::mm::atom &a1, const cif::mm::atom &a2) { AtomRef ra1 = ref(a1); AtomRef ra2 = ref(a2); if (nbc.count(std::make_tuple(ra1, ra2))) return; if (find_if(mAngleRestraints.begin(), mAngleRestraints.end(), [&](auto &ar) { return (ar.mA == ra1 and ar.mC == ra2) or (ar.mA == ra2 and ar.mC == ra1); }) != mAngleRestraints.end()) return; if ((a1.get_label_comp_id() == "PRO" or a1.get_label_comp_id() == "HYP") and a1.get_label_seq_id() == a2.get_label_seq_id() + 1 and a1.get_label_atom_id() == "CD") { return; } if ((a2.get_label_comp_id() == "PRO" or a2.get_label_comp_id() == "HYP") and a2.get_label_seq_id() == a1.get_label_seq_id() + 1 and a2.get_label_atom_id() == "CD") { return; } if ((a1.get_label_comp_id() == "ASN" or a2.get_label_comp_id() == "NAG") and a1.get_label_atom_id() == "OD1" and a2.get_label_atom_id() == "C1") { return; } if ((a1.get_label_comp_id() == "NAG" or a2.get_label_comp_id() == "ASN") and a1.get_label_atom_id() == "C1" and a2.get_label_atom_id() == "OD1") { return; } double minDist = 2.8; if (mBonds.is1_4(a1, a2)) { if (cif::VERBOSE > 1) std::cerr << "1_4 for " << a1 << " and " << a2 << std::endl; minDist = 2.64; } else if ((a1.get_label_seq_id() + 1 == a2.get_label_seq_id() and a1.get_label_atom_id() == "O" and a2.get_label_atom_id() == "C") or (a2.get_label_seq_id() + 1 == a1.get_label_seq_id() and a2.get_label_atom_id() == "O" and a1.get_label_atom_id() == "C")) { minDist = 2.84; } else { try { auto c1 = Compound::create(a1.get_label_comp_id()); auto c2 = Compound::create(a2.get_label_comp_id()); std::string et1 = c1->get_atom_by_atom_id(a1.get_label_atom_id()).typeEnergy; std::string et2 = c2->get_atom_by_atom_id(a2.get_label_atom_id()).typeEnergy; if (not(et1.empty() or et2.empty())) { auto r1 = libAtom.find(cif::key("type") == et1); auto r2 = libAtom.find(cif::key("type") == et2); if (not(r1.empty() or r2.empty())) { if (cif::atom_type_traits(a1.get_type()).is_metal()) minDist = r1.front()["ion_radius"].as(); else minDist = r1.front()["vdw_radius"].as(); if (cif::atom_type_traits(a2.get_type()).is_metal()) minDist += r2.front()["ion_radius"].as(); else minDist += r2.front()["vdw_radius"].as(); // OK, now that we're here, see if the atoms are in the same residue... if (a1.get_label_asym_id() == a2.get_label_asym_id() and a1.get_label_seq_id() == a2.get_label_seq_id()) minDist *= 0.84; std::string hbType1 = r1.front()["hb_type"].as(), hbType2 = r2.front()["hb_type"].as(); static const std::regex donorRx("B|D|H"), acceptorRx("B|A|H"); if (regex_match(hbType1, donorRx) and regex_match(hbType2, acceptorRx)) { minDist -= 0.5; if (hbType1 == "H") minDist -= 0.3; } if (regex_match(hbType2, donorRx) and regex_match(hbType1, acceptorRx)) { minDist -= 0.5; if (hbType2 == "H") minDist -= 0.3; } } } // so-called strange exceptions in coot code if (find(mAtoms.begin(), mAtoms.end(), a2) == mAtoms.end()) { switch (std::abs(a1.get_label_seq_id() - a2.get_label_seq_id())) { case 1: if ((a1.get_label_atom_id() == "O" and a2.get_label_atom_id() == "CA") or (a1.get_label_atom_id() == "CA" and a2.get_label_atom_id() == "O") or (a1.get_label_atom_id() == "N" and a2.get_label_atom_id() == "CB") or (a1.get_label_atom_id() == "CB" and a2.get_label_atom_id() == "N") or (a1.get_label_atom_id() == "C" and a2.get_label_atom_id() == "CB") or (a1.get_label_atom_id() == "CB" and a2.get_label_atom_id() == "C")) { minDist = 2.7; } break; case 2: if ((a1.get_label_atom_id() == "C" and a2.get_label_atom_id() == "N") or (a1.get_label_atom_id() == "N" and a2.get_label_atom_id() == "C")) { minDist = 2.7; } break; } } } catch (const std::exception &ex) { if (cif::VERBOSE > 0) std::cerr << "err calculating nbc distance: " << ex.what() << std::endl; minDist = 2.8; } } mNonBondedContactRestraints.emplace_back(ra1, ra2, minDist, 0.02); nbc.insert(std::make_tuple(ra1, ra2)); nbc.insert(std::make_tuple(ra2, ra1)); }; // now add the non-bonded restraints for (auto &a1 : mAtoms) { for (auto a2 : mStructure.atoms()) { if (a1 == a2 or mBonds(a1, a2)) continue; for (auto s_a2 : saif(a2, [l = a1.get_location()](const cif::point &p) { return distance_squared(p, l) <= kNonBondedContactDistanceSq; })) { add_nbc(a1, a2); } } } // create reverse index (for dfcollector) mRef2AtomIndex = std::vector(mReferencedAtoms.size(), kRefSentinel); for (size_t i = 0; i < mAtoms.size(); ++i) { AtomRef ar = ref(mAtoms[i]); assert(ar < mRef2AtomIndex.size()); mRef2AtomIndex[ar] = i; } // collect the restraints for (auto &r : mBondRestraints) mRestraints.push_back(&r); for (auto &r : mAngleRestraints) mRestraints.push_back(&r); for (auto &r : mTransPeptideRestraints) mRestraints.push_back(&r); for (auto &r : mTorsionRestraints) mRestraints.push_back(&r); for (auto &r : mPlanarityRestraints) mRestraints.push_back(&r); for (auto &r : mChiralVolumeRestraints) mRestraints.push_back(&r); for (auto &r : mNonBondedContactRestraints) mRestraints.push_back(&r); if (mDensityRestraint) mRestraints.push_back(mDensityRestraint.get()); // report if (cif::VERBOSE > 1) std::cout << "created " << mBondRestraints.size() << " bond restraints" << std::endl << "created " << mAngleRestraints.size() << " angle restraints" << std::endl << "created " << mTorsionRestraints.size() << " torsion restraints" << std::endl << "created " << mPlanarityRestraints.size() << " plane restraints" << std::endl << "created " << mTransPeptideRestraints.size() << " trans peptide restraints" << std::endl << "created " << mChiralVolumeRestraints.size() << " chiral vol restraints" << std::endl << "created " << mNonBondedContactRestraints.size() << " non-bonded-contact restraints" << std::endl << std::endl; AtomLocationProvider loc(mReferencedAtoms); if (cif::VERBOSE > 2) for (auto r : mRestraints) r->print(loc); } void Minimizer::dropTorsionRestraints() { for (auto &r : mTorsionRestraints) mRestraints.erase(std::remove(mRestraints.begin(), mRestraints.end(), &r), mRestraints.end()); mTorsionRestraints.clear(); } AtomRef Minimizer::ref(const cif::mm::atom &atom) { std::string atomID = atom.id(); AtomRef result; auto k = mRefIndex.find(atomID); if (k != mRefIndex.end()) result = k->second; else { result = static_cast(mReferencedAtoms.size()); mReferencedAtoms.push_back(atom); mRefIndex[atomID] = result; } return result; } void Minimizer::addLinkRestraints(const cif::mm::residue &a, const cif::mm::residue &b, const std::string &atom_id_a, const std::string &atom_id_b, const Link &link) { auto c1 = cif::compound_factory::instance().create(a.get_compound_id()); auto c2 = cif::compound_factory::instance().create(b.get_compound_id()); auto getCompoundAtom = [&](const LinkAtom &la) { return la.compID == 1 ? c1->get_atom_by_atom_id(la.atomID) : c2->get_atom_by_atom_id(la.atomID); }; assert(link.bonds().size() == 1); bool a_is_1 = link.bonds().front().atom[0].compID == 1 ? link.bonds().front().atom[0].atomID == atom_id_a : link.bonds().front().atom[1].atomID == atom_id_a; auto getAtom = [&](const LinkAtom &la) { if (la.compID == 1) return a_is_1 ? a.get_atom_by_atom_id(la.atomID) : b.get_atom_by_atom_id(la.atomID); else return a_is_1 ? b.get_atom_by_atom_id(la.atomID) : a.get_atom_by_atom_id(la.atomID); }; for (auto &bond : link.bonds()) { try { if (getCompoundAtom(bond.atom[0]).type_symbol == cif::H or getCompoundAtom(bond.atom[1]).type_symbol == cif::H) { continue; } cif::mm::atom a1 = getAtom(bond.atom[0]); cif::mm::atom a2 = getAtom(bond.atom[1]); mBondRestraints.emplace_back(ref(a1), ref(a2), bond.distance, bond.esd); } catch (const std::exception &ex) { if (cif::VERBOSE > 0) std::cerr << "While processing bond restraints: " << ex.what() << std::endl; continue; } } for (auto &angle : link.angles()) { try { if (getCompoundAtom(angle.atom[0]).type_symbol == cif::H or getCompoundAtom(angle.atom[1]).type_symbol == cif::H or getCompoundAtom(angle.atom[2]).type_symbol == cif::H) { continue; } cif::mm::atom a1 = getAtom(angle.atom[0]); cif::mm::atom a2 = getAtom(angle.atom[1]); cif::mm::atom a3 = getAtom(angle.atom[2]); mAngleRestraints.emplace_back(ref(a1), ref(a2), ref(a3), angle.angle, angle.esd); } catch (const std::exception &ex) { if (cif::VERBOSE > 1) std::cerr << "While processing angle restraints: " << ex.what() << std::endl; continue; } } for (auto &torsion : link.torsions()) { if (torsion.esd == 0) continue; try { if (getCompoundAtom(torsion.atom[0]).type_symbol == cif::H or getCompoundAtom(torsion.atom[1]).type_symbol == cif::H or getCompoundAtom(torsion.atom[2]).type_symbol == cif::H or getCompoundAtom(torsion.atom[3]).type_symbol == cif::H) { continue; } cif::mm::atom a1 = getAtom(torsion.atom[0]); cif::mm::atom a2 = getAtom(torsion.atom[1]); cif::mm::atom a3 = getAtom(torsion.atom[2]); cif::mm::atom a4 = getAtom(torsion.atom[3]); mTorsionRestraints.emplace_back(ref(a1), ref(a2), ref(a3), ref(a4), torsion.angle, torsion.esd, torsion.period); } catch (const std::exception &ex) { if (cif::VERBOSE > 0) std::cerr << "While processing torsion restraints: " << ex.what() << std::endl; continue; } } for (auto ¢er : link.chiralCentres()) { try { if (getCompoundAtom(center.atom[0]).type_symbol == cif::H or getCompoundAtom(center.atom[1]).type_symbol == cif::H or getCompoundAtom(center.atom[2]).type_symbol == cif::H) { continue; } cif::mm::atom cc = getAtom(center.atomCentre); cif::mm::atom a1 = getAtom(center.atom[0]); cif::mm::atom a2 = getAtom(center.atom[1]); cif::mm::atom a3 = getAtom(center.atom[2]); auto volume = link.chiralVolume(center.id, a.get_compound_id(), b.get_compound_id()); mChiralVolumeRestraints.emplace_back(ref(cc), ref(a1), ref(a2), ref(a3), volume); } catch (const std::exception &ex) { if (cif::VERBOSE > 0) std::cerr << "While processing chiral volume restraints: " << ex.what() << std::endl; continue; } } for (auto &plane : link.planes()) { try { std::vector atoms; for (auto atom : plane.atoms) { if (getCompoundAtom(atom).type_symbol == cif::H) continue; atoms.push_back(ref(getAtom(atom))); } if (atoms.size() > 3) mPlanarityRestraints.emplace_back(PlanarityRestraint{ move(atoms), plane.esd }); } catch (const std::exception &ex) { if (cif::VERBOSE > 0) std::cerr << "While processing planarity restraints: " << ex.what() << std::endl; continue; } } } void Minimizer::printStats() { AtomLocationProvider loc(mReferencedAtoms); // for (auto &r : mBondRestraints) // std::cout << mReferencedAtoms[r.mA] << " -> " << mReferencedAtoms[r.mB] << " = " << r.f(loc) << std::endl; double bondScore = rmsz(loc, mBondRestraints); double angleScore = rmsz(loc, mAngleRestraints); double torsionScore = rmsz(loc, mTorsionRestraints); double chiralityVolumeScore = rmsz(loc, mChiralVolumeRestraints); double planarityScore = rmsz(loc, mPlanarityRestraints); double transpeptideScore = rmsz(loc, mTransPeptideRestraints); double nbcScore = rmsz(loc, mNonBondedContactRestraints); double densityScore = mDensityRestraint ? mDensityRestraint->f(loc) : 0; std::cerr << " Bonds: " << bondScore << std::endl << " Angles: " << angleScore << std::endl << " Torsion: " << torsionScore << std::endl << " Chirality: " << chiralityVolumeScore << std::endl << " Planarity: " << planarityScore << std::endl << " Transpeptide: " << transpeptideScore << std::endl << " Non-Bonded-Contact: " << nbcScore << std::endl << " Density: " << densityScore << std::endl; } double Minimizer::score() { AtomLocationProvider loc(mReferencedAtoms); return score(loc); } double Minimizer::score(const AtomLocationProvider &loc) { double result = 0; for (auto r : mRestraints) { if (cif::VERBOSE > 2) r->print(loc); result += r->f(loc); } if (cif::VERBOSE > 3) std::cout << "score: " << result << std::endl; return result; } // -------------------------------------------------------------------- #include // for debugging norm of gradient #include class GSLAtomLocation : public AtomLocationProvider { public: GSLAtomLocation(std::vector &atoms, const std::vector &fixedAtoms, const std::vector &index, const gsl_vector *v) : AtomLocationProvider(atoms) , mFixedLocations(fixedAtoms) , mIndex(index) , mV(v) { assert(mIndex.size() == mFixedLocations.size()); if (cif::VERBOSE > 2) { for (size_t i = 0; i < mIndex.size(); ++i) { size_t ri = mIndex[i]; if (ri == kRefSentinel) continue; DPoint p = { gsl_vector_get(mV, ri * 3), gsl_vector_get(mV, ri * 3 + 1), gsl_vector_get(mV, ri * 3 + 2) }; std::cout << mAtoms[i] << p << std::endl; } } } virtual DPoint operator[](AtomRef atom) const; void storeLocations(); private: const std::vector &mFixedLocations; const std::vector &mIndex; const gsl_vector *mV; }; DPoint GSLAtomLocation::operator[](AtomRef atomID) const { assert(atomID < mIndex.size()); size_t ix = mIndex.at(atomID); if (ix == kRefSentinel) return mFixedLocations.at(atomID); return DPoint( gsl_vector_get(mV, ix * 3 + 0), gsl_vector_get(mV, ix * 3 + 1), gsl_vector_get(mV, ix * 3 + 2)); } void GSLAtomLocation::storeLocations() { for (size_t i = 0; i < mIndex.size(); ++i) { size_t ri = mIndex[i]; if (ri == kRefSentinel) continue; DPoint p = { gsl_vector_get(mV, ri * 3), gsl_vector_get(mV, ri * 3 + 1), gsl_vector_get(mV, ri * 3 + 2) }; mAtoms[i].set_location(p); } } // -------------------------------------------------------------------- class GSLDFCollector : public DFCollector { public: GSLDFCollector(const std::vector &atoms, const std::vector &index, gsl_vector *df) : mAtoms(atoms) , mIndex(index) , mDF(df) { for (size_t ix : mIndex) { if (ix == kRefSentinel) continue; gsl_vector_set(mDF, ix * 3 + 0, 0.0); gsl_vector_set(mDF, ix * 3 + 1, 0.0); gsl_vector_set(mDF, ix * 3 + 2, 0.0); } } ~GSLDFCollector(); virtual void add(AtomRef atom, double dx, double dy, double dz); private: // for debugging std::string label(AtomRef atom) const { std::string atomName = " " + mAtoms[atom].get_label_atom_id(); atomName += std::string(5 - atomName.length(), ' '); return std::to_string(mAtoms[atom].get_label_seq_id()) + atomName; } const std::vector &mAtoms; const std::vector &mIndex; gsl_vector *mDF; }; GSLDFCollector::~GSLDFCollector() { if (cif::VERBOSE > 2) { std::cerr << std::string(cif::get_terminal_width(), '-') << std::endl << "Collected gradient: " << std::endl; for (size_t i = 0; i < mAtoms.size(); ++i) { size_t ix = mIndex[i]; if (ix == kRefSentinel) continue; double dx = gsl_vector_get(mDF, ix * 3 + 0); double dy = gsl_vector_get(mDF, ix * 3 + 1); double dz = gsl_vector_get(mDF, ix * 3 + 2); std::cerr << "atom: " << label(i) << " d: " << std::setprecision(10) << dx << " " << dy << " " << dz << std::endl; } std::cerr << std::string(cif::get_terminal_width(), '-') << std::endl; } } void GSLDFCollector::add(AtomRef atom, double dx, double dy, double dz) { assert(atom < mIndex.size()); size_t ix = mIndex[atom]; if (ix != kRefSentinel) { gsl_vector_set(mDF, ix * 3 + 0, gsl_vector_get(mDF, ix * 3 + 0) + dx); gsl_vector_set(mDF, ix * 3 + 1, gsl_vector_get(mDF, ix * 3 + 1) + dy); gsl_vector_set(mDF, ix * 3 + 2, gsl_vector_get(mDF, ix * 3 + 2) + dz); if (cif::VERBOSE > 4) std::cerr << "atom: " << label(atom) << " d: " << std::setprecision(10) << dx << ", " << dy << ", " << dz << std::endl; } } // -------------------------------------------------------------------- class GSLMinimizer : public Minimizer { public: GSLMinimizer(const cif::mm::structure &structure, const BondMap &bm, float plane5AtomsESD) : Minimizer(structure, bm, plane5AtomsESD) { } virtual void Finish() { Minimizer::Finish(); for (auto &a : mReferencedAtoms) mFixedLocations.push_back(a.get_location()); } ~GSLMinimizer() { if (m_s != nullptr) gsl_multimin_fdfminimizer_free(m_s); } virtual double refine(bool storeAtoms); virtual std::vector> getAtoms() const; virtual void storeAtomLocations(); private: static double F(const gsl_vector *v, void *params); static void Df(const gsl_vector *v, void *params, gsl_vector *df); static void Fdf(const gsl_vector *x, void *params, double *f, gsl_vector *df); double F(const gsl_vector *v); void Df(const gsl_vector *v, gsl_vector *df); void Fdf(const gsl_vector *x, double *f, gsl_vector *df); std::vector mFixedLocations; gsl_multimin_fdfminimizer *m_s = nullptr; }; double GSLMinimizer::refine(bool storeAtoms) { const size_t iterations = 4000; gsl_multimin_function_fdf fdf = {}; fdf.f = &GSLMinimizer::F; fdf.df = &GSLMinimizer::Df; fdf.fdf = &GSLMinimizer::Fdf; fdf.n = mAtoms.size() * 3; fdf.params = this; auto T = gsl_multimin_fdfminimizer_conjugate_pr; auto x = gsl_vector_alloc(3 * mAtoms.size()); size_t ix = 0; for (auto &a : mAtoms) { auto l = a.get_location(); gsl_vector_set(x, ix++, l.m_x); gsl_vector_set(x, ix++, l.m_y); gsl_vector_set(x, ix++, l.m_z); } m_s = gsl_multimin_fdfminimizer_alloc(T, 3 * mAtoms.size()); float tolerance = 0.06f; double stepSize = 0.1 * gsl_blas_dnrm2(x); gsl_multimin_fdfminimizer_set(m_s, &fdf, x, stepSize, tolerance); double gradLim = std::sqrt(mRestraints.size()) * 0.15; if (gradLim < 0.3) gradLim = 0.3; for (size_t i = 0; i < iterations; ++i) { int status = gsl_multimin_fdfminimizer_iterate(m_s); if (cif::VERBOSE > 2) { ix = 0; for (auto &a : mAtoms) { auto l = a.get_location(); cif::point p{ static_cast(gsl_vector_get(m_s->x, ix + 0)), static_cast(gsl_vector_get(m_s->x, ix + 1)), static_cast(gsl_vector_get(m_s->x, ix + 2)) }; ix += 3; std::cerr << a << " l: " << l << " => p: " << p << " d = " << (p - l) << std::endl; } } if (status != 0) { if (status != GSL_ENOPROG) std::cerr << "Unexpected result from gsl_multimin_fdfminimizer_iterate: " << status << std::endl; else if (cif::VERBOSE > 0) std::cerr << "Minimizer stopped at iteration " << i << " at " << m_s->f << std::endl; break; } status = gsl_multimin_test_gradient(m_s->gradient, gradLim); if (cif::VERBOSE > 1) { double norm = gsl_blas_dnrm2(m_s->gradient); std::cout << "iteration number " << i << " with f: " << m_s->f << " status from gsl_multimin_test_gradient() " << status << " for norm " << norm << std::endl; } if (status == GSL_SUCCESS) { if (cif::VERBOSE > 0) std::cerr << "Minimum found at iteration " << i << " at " << m_s->f << std::endl; break; } if (status != GSL_CONTINUE) break; } gsl_vector_free(x); if (storeAtoms) storeAtomLocations(); return m_s->f; } std::vector> GSLMinimizer::getAtoms() const { std::vector> result; for (size_t i = 0; i < mRef2AtomIndex.size(); ++i) { size_t ri = mRef2AtomIndex[i]; if (ri == kRefSentinel) continue; DPoint p = { gsl_vector_get(m_s->x, ri * 3), gsl_vector_get(m_s->x, ri * 3 + 1), gsl_vector_get(m_s->x, ri * 3 + 2) }; result.emplace_back(mReferencedAtoms[i].id(), p); } return result; } void GSLMinimizer::storeAtomLocations() { GSLAtomLocation loc(mReferencedAtoms, mFixedLocations, mRef2AtomIndex, m_s->x); loc.storeLocations(); } double GSLMinimizer::F(const gsl_vector *v, void *params) { GSLMinimizer *self = reinterpret_cast(params); return self->F(v); } void GSLMinimizer::Df(const gsl_vector *v, void *params, gsl_vector *df) { GSLMinimizer *self = reinterpret_cast(params); self->Df(v, df); } void GSLMinimizer::Fdf(const gsl_vector *v, void *params, double *f, gsl_vector *df) { GSLMinimizer *self = reinterpret_cast(params); self->Fdf(v, f, df); if (cif::VERBOSE > 2) std::cout << "FDF => " << std::setprecision(10) << *f << std::endl; } double GSLMinimizer::F(const gsl_vector *v) { GSLAtomLocation loc(mReferencedAtoms, mFixedLocations, mRef2AtomIndex, v); // return score(loc); auto F = score(loc); if (cif::VERBOSE > 2) std::cout << "F => " << std::setprecision(10) << F << std::endl; return F; } void GSLMinimizer::Df(const gsl_vector *v, gsl_vector *df) { GSLAtomLocation loc(mReferencedAtoms, mFixedLocations, mRef2AtomIndex, v); GSLDFCollector c(mReferencedAtoms, mRef2AtomIndex, df); for (auto r : mRestraints) r->df(loc, c); } void GSLMinimizer::Fdf(const gsl_vector *x, double *f, gsl_vector *df) { GSLAtomLocation loc(mReferencedAtoms, mFixedLocations, mRef2AtomIndex, x); *f = score(loc); GSLDFCollector c(mReferencedAtoms, mRef2AtomIndex, df); for (auto r : mRestraints) r->df(loc, c); } // -------------------------------------------------------------------- Minimizer *Minimizer::create(const cif::mm::polymer &poly, int first, int last, const BondMap &bonds, const XMap &xMap, float mapWeight, float plane5AtomsESD) { std::unique_ptr result(new GSLMinimizer(*poly.get_structure(), bonds, plane5AtomsESD)); result->addPolySection(poly, first, last); result->addDensityMap(xMap, mapWeight); result->Finish(); return result.release(); } Minimizer *Minimizer::create(cif::mm::structure &structure, const std::vector &atoms, const BondMap &bm, float plane5AtomsESD, const XMap *xMap, float mapWeight) { std::unique_ptr result(new GSLMinimizer(structure, bm, plane5AtomsESD)); std::vector residues; for (auto atom : atoms) { auto &res = structure.get_residue(atom); auto ri = std::find_if(residues.begin(), residues.end(), [rp = &res](const cif::mm::residue *r) { return r == rp; }); if (ri != residues.end()) continue; residues.emplace_back(&res); } // sort by asym, seq_id sort(residues.begin(), residues.end(), [](const cif::mm::residue *a, const cif::mm::residue *b) { int d = a->get_asym_id().compare(b->get_asym_id()); if (d == 0) d = a->get_seq_id() - b->get_seq_id(); return d < 0; }); auto &polymers = structure.polymers(); for (auto ri = residues.begin(); ri != residues.end(); ++ri) { auto res = *ri; auto monomer = dynamic_cast(res); if (monomer == nullptr) { result->addResidue(*res); continue; } int startSeqID = monomer->get_seq_id(); int endSeqID = startSeqID; while (ri != residues.end()) { if ((*ri)->get_seq_id() != endSeqID + 1 or (*ri)->get_asym_id() != monomer->get_asym_id()) break; ++endSeqID; ++ri; } auto pi = find_if(polymers.begin(), polymers.end(), [id = monomer->get_asym_id()](cif::mm::polymer &poly) { return poly.get_asym_id() == id; }); if (pi == polymers.end()) throw std::runtime_error("cif::mm::polymer not found for asym ID " + monomer->get_asym_id()); result->addPolySection(*pi, startSeqID, endSeqID); } // Add any residue that might be bonded to our list of residues via a struct_conn record auto &db = structure.get_datablock(); auto &struct_conn = db["struct_conn"]; std::vector> linked; for (auto r : struct_conn) { const auto &[ptnr1_label_asym_id, ptnr1_label_seq_id, ptnr1_auth_seq_id] = r.get("ptnr1_label_asym_id", "ptnr1_label_seq_id", "ptnr1_auth_seq_id"); const auto &[ptnr2_label_asym_id, ptnr2_label_seq_id, ptnr2_auth_seq_id] = r.get("ptnr2_label_asym_id", "ptnr2_label_seq_id", "ptnr2_auth_seq_id"); auto ai = find_if(residues.begin(), residues.end(), [asym_id = ptnr1_label_asym_id, seq_id = ptnr1_label_seq_id, auth_seq_id = ptnr1_auth_seq_id](const cif::mm::residue *res) { return res->get_asym_id() == asym_id and res->get_seq_id() == seq_id and res->get_auth_seq_id() == auth_seq_id; }); auto bi = find_if(residues.begin(), residues.end(), [asym_id = ptnr2_label_asym_id, seq_id = ptnr2_label_seq_id, auth_seq_id = ptnr2_auth_seq_id](const cif::mm::residue *res) { return res->get_asym_id() == asym_id and res->get_seq_id() == seq_id and res->get_auth_seq_id() == auth_seq_id; }); if (ai == residues.end() and bi == residues.end()) continue; const cif::mm::residue *ra = *ai; const cif::mm::residue *rb = *bi; const auto &[ptnr1_label_atom_id, ptnr2_label_atom_id, link_id] = r.get("ptnr1_label_atom_id", "ptnr2_label_atom_id", "ccp4_link_id"); if (ai != residues.end() and bi != residues.end()) { linked.emplace_back(ra, rb, ptnr1_label_atom_id, ptnr2_label_atom_id, link_id); continue; } if (ai != residues.end()) { residues.emplace_back(&structure.get_residue(ptnr2_label_asym_id, ptnr2_label_seq_id, ptnr2_auth_seq_id)); linked.emplace_back(ra, residues.back(), ptnr1_label_atom_id, ptnr2_label_atom_id, link_id); } else { residues.emplace_back(&structure.get_residue(ptnr1_label_asym_id, ptnr1_label_seq_id, ptnr1_auth_seq_id)); linked.emplace_back(rb, residues.back(), ptnr1_label_atom_id, ptnr2_label_atom_id, link_id); } } // The struct conn records for (const auto &[a, b, atom_a, atom_b, link_id] : linked) { if (not link_id.empty()) { result->addLinkRestraints(*a, *b, atom_a, atom_b, link_id); continue; } try { result->addLinkRestraints(*a, *b, atom_a, atom_b, a->get_compound_id() + "-" + b->get_compound_id()); } catch (const std::exception &e) { result->addLinkRestraints(*b, *a, atom_a, atom_b, b->get_compound_id() + "-" + a->get_compound_id()); } } if (xMap != nullptr and mapWeight != 0) result->addDensityMap(*xMap, mapWeight); result->Finish(); return result.release(); } } // namespace pdb_redo libpdb-redo-3.0.5/src/Ramachandran.cpp0000664000175000017500000000663614364232314017433 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 19 juni, 2018 */ #define _USE_MATH_DEFINES #include #include #include #include #include #include "pdb-redo/Ramachandran.hpp" namespace pdb_redo { const double kPI = M_PI; // -------------------------------------------------------------------- class RamachandranTables { public: static RamachandranTables &instance() { std::lock_guard lock(sMutex); static RamachandranTables sInstance; return sInstance; } clipper::Ramachandran &table(const std::string &aa, bool prePro) { std::lock_guard lock(sMutex); auto i = mTables.find(std::make_tuple(aa, prePro)); if (i == mTables.end()) { clipper::Ramachandran::TYPE type; if (aa == "GLY") type = clipper::Ramachandran::Gly2; else if (aa == "PRO") type = clipper::Ramachandran::Pro2; else if (aa == "ILE" or aa == "VAL") type = clipper::Ramachandran::IleVal2; else if (prePro) type = clipper::Ramachandran::PrePro2; else type = clipper::Ramachandran::NoGPIVpreP2; i = mTables.emplace(make_pair(std::make_tuple(aa, prePro), clipper::Ramachandran(type))).first; } return i->second; } private: std::map, clipper::Ramachandran> mTables; static std::mutex sMutex; }; std::mutex RamachandranTables::sMutex; float calculateRamachandranZScore(const std::string &aa, bool prePro, float phi, float psi) { auto &table = RamachandranTables::instance().table(aa, prePro); return static_cast(table.probability(phi * kPI / 180, psi * kPI / 180)); } RamachandranScore calculateRamachandranScore(const std::string &aa, bool prePro, float phi, float psi) { auto &table = RamachandranTables::instance().table(aa, prePro); phi *= static_cast(kPI / 180); psi *= static_cast(kPI / 180); RamachandranScore result; if (table.favored(phi, psi)) result = rsFavoured; else if (table.allowed(phi, psi)) result = rsAllowed; else result = rsNotAllowed; return result; } } // namespace pdb_redolibpdb-redo-3.0.5/src/ResolutionCalculator.cpp0000664000175000017500000000526114364232314021222 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #define _USE_MATH_DEFINES #include #include "pdb-redo/ResolutionCalculator.hpp" namespace pdb_redo { const double kPI = M_PI; ResolutionCalculator::ResolutionCalculator(const clipper::Cell &cell) : ResolutionCalculator(cell.a(), cell.b(), cell.c(), 180 * cell.alpha() / kPI, 180 * cell.beta() / kPI, 180 * cell.gamma() / kPI) { } ResolutionCalculator::ResolutionCalculator(double a, double b, double c, double alpha, double beta, double gamma) { double deg2rad = std::atan(1.0) / 45.0; double ca = std::cos(deg2rad * alpha); double sa = std::sin(deg2rad * alpha); double cb = std::cos(deg2rad * beta); double sb = std::sin(deg2rad * beta); double cg = std::cos(deg2rad * gamma); double sg = std::sin(deg2rad * gamma); double cast = (cb * cg - ca) / (sb * sg); double cbst = (cg * ca - cb) / (sg * sa); double cgst = (ca * cb - cg) / (sa * sb); double sast = std::sqrt(1 - cast * cast); double sbst = std::sqrt(1 - cbst * cbst); double sgst = std::sqrt(1 - cgst * cgst); double ast = 1 / (a * sb * sgst); double bst = 1 / (b * sg * sast); double cst = 1 / (c * sa * sbst); mCoefs[0] = ast * ast; mCoefs[1] = 2 * ast * bst * cgst; mCoefs[2] = 2 * ast * cst * cbst; mCoefs[3] = bst * bst; mCoefs[4] = 2 * bst * cst * cast; mCoefs[5] = cst * cst; } } // namespace pdb_redo libpdb-redo-3.0.5/src/Restraints.cpp0000664000175000017500000004131614364232314017204 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: dinsdag 22 mei, 2018 */ #include #include #include "pdb-redo/ClipperWrapper.hpp" #include "pdb-redo/Minimizer.hpp" #include "pdb-redo/Restraints.hpp" namespace pdb_redo { using clipper::Coord_frac; using clipper::Coord_grid; using clipper::Coord_map; using clipper::Coord_orth; // -------------------------------------------------------------------- double BondRestraint::f(const AtomLocationProvider &atoms) const { double d = mDist - distance(atoms[mA], atoms[mB]); double result = (d * d) / (mDistESD * mDistESD); if (cif::VERBOSE > 2) std::cerr << "bond::f() = " << atoms.atom(mA) << " <> " << atoms.atom(mB) << " " << atoms[mA] << " <> " << atoms[mB] << " => " << result << std::endl; return result; } void BondRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { auto a1 = atoms[mA], a2 = atoms[mB]; auto bi = distance(a1, a2); if (bi < 0.1) bi = 0.1; auto c = 2 * (1 - mDist / bi) / (mDistESD * mDistESD); if (cif::VERBOSE > 2) std::cerr << "bond::df(): " << atoms.atom(mA) << " <> " << atoms.atom(mB) << ' ' << bi << ' ' << mDist << ' ' << mDistESD << std::endl; df.add(mA, (a1 - a2) * c); df.add(mB, (a2 - a1) * c); } void BondRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "bond " << atoms.atom(mA) << " to " << atoms.atom(mB) << " => " << mDist << " / " << mDistESD << std::endl; } // -------------------------------------------------------------------- double AngleRestraint::f(const AtomLocationProvider &atoms) const { DPoint p[3] = {atoms[mA], atoms[mB], atoms[mC]}; double c = cosinus_angle(p[1], p[0], p[1], p[2]); double angle = std::atan2(std::sqrt(1 - c * c), c) * 180 / cif::kPI; double d = mAngle - angle; double result = (d * d) / (mESD * mESD); if (cif::VERBOSE > 2) std::cerr << "angle::f() " << atoms.atom(mA) << "/" << atoms.atom(mB) << "/" << atoms.atom(mC) << ' ' << " = " << result << std::endl; return result; } void AngleRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { const double kRadToDegree = 180.0 / cif::kPI, kDegreeToRad = 1 / kRadToDegree; if (cif::VERBOSE > 2) std::cerr << "angle::df() " << atoms.atom(mA) << "/" << atoms.atom(mB) << "/" << atoms.atom(mC) << ' ' << ": " << std::endl; DPoint k = atoms[mA], l = atoms[mB], m = atoms[mC]; auto aVec = (k - l); auto bVec = (m - l); auto a = distance(k, l); if (a < 0.01) { a = 0.01; aVec = DPoint{0.01, 0.01, 0.01}; }; auto b = distance(m, l); if (b < 0.01) { b = 0.01; bVec = DPoint{0.01, 0.01, 0.01}; }; auto cosTheta = dot_product(aVec, bVec) / (a * b); if (cosTheta > 1.0) cosTheta = 1.0; if (cosTheta < -1.0) cosTheta = -1.0; auto theta = std::acos(cosTheta); if (theta < 0.001) theta = 0.001; auto target = mAngle * kDegreeToRad; auto wf = 2 * (theta - target) * kRadToDegree * kRadToDegree / (mESD * mESD); auto prem = -wf / std::sin(theta); df.add(mA, prem * (cosTheta * (l - k) / (a * a) + (m - l) / (a * b))); df.add(mC, prem * (cosTheta * (l - m) / (b * b) + (k - l) / (a * b))); auto term1 = (l - k) * -cosTheta / (a * a) + (l - m) * -cosTheta / (b * b); auto term2 = ((l - k) + (l - m)) / (a * b); df.add(mB, prem * (term1 + term2)); } void AngleRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "angle " << atoms.atom(mA) << " ; " << atoms.atom(mB) << " ; " << atoms.atom(mC) << " => " << mAngle << " / " << mESD << std::endl; } // -------------------------------------------------------------------- std::tuple TorsionRestraint::CalculateTorsionGradients(float theta, DPoint p[4]) const { auto a = p[1] - p[0], b = p[2] - p[1], c = p[3] - p[2]; auto blensq = b.length_sq(); auto blen = std::sqrt(blensq); if (blen < 0.01) { blen = 0.01; blensq = 0.0001; } auto H = -dot_product(a, c), J = dot_product(a, b), K = dot_product(b, c), L = 1 / blensq; auto E = dot_product(a, cross_product(b, c)) / blen; auto G = H + J * K * L; auto F = 1 / G; if (G == 0) F = 999999999.9; DPoint dH[4] = {c, -c, a, -a}; DPoint dK[4] = {{}, -c, c - b, b}; DPoint dJ[4] = {-b, b - a, a, {}}; DPoint dL[4] = {{}, 2.0 * (p[2] - p[1]) * L * L, -2.0 * (p[2] - p[1]) * L * L, {}}; DPoint dM[4] = { {-(b.m_y * c.m_z - b.m_z * c.m_y), -(b.m_z * c.m_x - b.m_x * c.m_z), -(b.m_x * c.m_y - b.m_y * c.m_x)}, {(b.m_y * c.m_z - b.m_z * c.m_y) + (a.m_y * c.m_z - a.m_z * c.m_y), (b.m_z * c.m_x - b.m_x * c.m_z) + (a.m_z * c.m_x - a.m_x * c.m_z), (b.m_x * c.m_y - b.m_y * c.m_x) + (a.m_x * c.m_y - a.m_y * c.m_x)}, {(b.m_y * a.m_z - b.m_z * a.m_y) - (a.m_y * c.m_z - a.m_z * c.m_y), -(a.m_z * c.m_x - a.m_x * c.m_z) + (b.m_z * a.m_x - b.m_x * a.m_z), -(a.m_x * c.m_y - a.m_y * c.m_x) + (a.m_y * b.m_x - a.m_x * b.m_y)}, {-(b.m_y * a.m_z - b.m_z * a.m_y), -(b.m_z * a.m_x - b.m_x * a.m_z), -(a.m_y * b.m_x - a.m_x * b.m_y)}}; DPoint dE[4]{ dM[0] / blen, dM[1] / blen + E * (p[2] - p[1]) * L, dM[2] / blen - E * (p[2] - p[1]) * L, dM[3] / blen}; auto eff = E * F * F; auto jl = J * L; auto kl = K * L; auto jk = J * K; return std::make_tuple( F * dE[0] - eff * (dH[0] + jl * dK[0] + kl * dJ[0] + jk * dL[0]), F * dE[1] - eff * (dH[1] + jl * dK[1] + kl * dJ[1] + jk * dL[1]), F * dE[2] - eff * (dH[2] + jl * dK[2] + kl * dJ[2] + jk * dL[2]), F * dE[3] - eff * (dH[3] + jl * dK[3] + kl * dJ[3] + jk * dL[3])); } double TorsionRestraint::f(const AtomLocationProvider &atoms) const { double result = 0; double cos_a1 = cosinus_angle(atoms[mB], atoms[mA], atoms[mC], atoms[mB]); double cos_a2 = cosinus_angle(atoms[mC], atoms[mB], atoms[mD], atoms[mC]); if (cos_a1 <= 0.9 and cos_a2 <= 0.9) { double period = 360.0; if (mPeriodicity > 0) period /= mPeriodicity; double theta = dihedral_angle(atoms[mA], atoms[mB], atoms[mC], atoms[mD]); double diff = std::fmod(std::abs(theta - mTarget) + period / 2, period) - period / 2; if (not std::isnan(diff)) result = (diff * diff) / (mESD * mESD); if (cif::VERBOSE > 2) std::cerr << "torsion::f() = " << result << " for theta " << theta << " diff: " << diff << " target: " << mTarget << " sigma: " << mESD << " atoms: " << atoms.atom(mA) << ", " << atoms.atom(mB) << ", " << atoms.atom(mC) << ", " << atoms.atom(mD) << std::endl; } return result; } void TorsionRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { if (cif::VERBOSE > 2) std::cerr << "torsion::df() " << atoms.atom(mA) << "/" << atoms.atom(mB) << "/" << atoms.atom(mC) << "/" << atoms.atom(mD) << ' ' << ": " << std::endl; double cos_a1 = cosinus_angle(atoms[mB], atoms[mA], atoms[mC], atoms[mB]); double cos_a2 = cosinus_angle(atoms[mC], atoms[mB], atoms[mD], atoms[mC]); if (cos_a1 <= 0.9 and cos_a2 <= 0.9) { double period = 360.0; if (mPeriodicity > 0) period /= mPeriodicity; double theta = dihedral_angle(atoms[mA], atoms[mB], atoms[mC], atoms[mD]); double diff = std::fmod(std::abs(theta - mTarget) + period / 2, period) - period / 2; if (not std::isnan(diff)) { auto tt = std::tan(cif::kPI * theta / 180); double scale = 180.0 / ((1 + tt * tt) * cif::kPI); auto w = 1 / (mESD * mESD); DPoint p[4] = {atoms[mA], atoms[mB], atoms[mC], atoms[mD]}; DPoint d[4]; std::tie(d[0], d[1], d[2], d[3]) = CalculateTorsionGradients(theta, p); df.add(mA, 2.0 * diff * d[0] * scale * w); df.add(mB, 2.0 * diff * d[1] * scale * w); df.add(mC, 2.0 * diff * d[2] * scale * w); df.add(mD, 2.0 * diff * d[3] * scale * w); } } } void TorsionRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "torsion " << atoms.atom(mA) << " ; " << atoms.atom(mB) << " ; " << atoms.atom(mC) << " ; " << atoms.atom(mD) << " => " << mPeriodicity << " / " << mESD << std::endl; } // -------------------------------------------------------------------- const double kChiralVolumeESD = 0.2; // according to coot that's a reasonable value... double ChiralVolumeRestraint::f(const AtomLocationProvider &atoms) const { auto chiralVolume = dot_product(atoms[mA1] - atoms[mCentre], cross_product(atoms[mA2] - atoms[mCentre], atoms[mA3] - atoms[mCentre])); double d = mVolume - chiralVolume; double result = (d * d) / (kChiralVolumeESD * kChiralVolumeESD); if (cif::VERBOSE > 2) std::cerr << "chiral::f() = " << result << std::endl; return result; } void ChiralVolumeRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { if (cif::VERBOSE > 2) std::cerr << "chiral::df(): " << std::endl; DPoint centre = atoms[mCentre]; DPoint a = atoms[mA1] - centre; DPoint b = atoms[mA2] - centre; DPoint c = atoms[mA3] - centre; auto chiralVolume = dot_product(a, cross_product(b, c)); auto d = chiralVolume - mVolume; auto s = 2 * d / (kChiralVolumeESD * kChiralVolumeESD); df.add(mCentre, s * DPoint{ -(b.m_y * c.m_z - b.m_z * c.m_y) - (a.m_z * c.m_y - a.m_y * c.m_z) - (a.m_y * b.m_z - a.m_z * b.m_y), -(b.m_z * c.m_x - b.m_x * c.m_z) - (a.m_x * c.m_z - a.m_z * c.m_x) - (a.m_z * b.m_x - a.m_x * b.m_z), -(b.m_x * c.m_y - b.m_y * c.m_x) - (a.m_y * c.m_x - a.m_x * c.m_y) - (a.m_x * b.m_y - a.m_y * b.m_x)}); df.add(mA1, s * DPoint{b.m_y * c.m_z - b.m_z * c.m_y, b.m_z * c.m_x - b.m_x * c.m_z, b.m_x * c.m_y - b.m_y * c.m_x}); df.add(mA2, s * DPoint{a.m_z * c.m_y - a.m_y * c.m_z, a.m_x * c.m_z - a.m_z * c.m_x, a.m_y * c.m_x - a.m_x * c.m_y}); df.add(mA3, s * DPoint{a.m_y * b.m_z - a.m_z * b.m_y, a.m_z * b.m_x - a.m_x * b.m_z, a.m_x * b.m_y - a.m_y * b.m_x}); } void ChiralVolumeRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "chiral volume " << atoms.atom(mA1) << " ; " << atoms.atom(mA2) << " ; " << atoms.atom(mA3) << " => " << mVolume << " / " << kChiralVolumeESD << std::endl; } // -------------------------------------------------------------------- void PlanarityRestraint::calculatePlaneFunction(const AtomLocationProvider &atoms, double abcd[4]) const { DPoint center; for (auto &a : mAtoms) center += atoms[a]; center /= mAtoms.size(); clipper::Matrix mat(3, 3); for (auto &a : mAtoms) { mat(0, 0) += (atoms[a].m_x - center.m_x) * (atoms[a].m_x - center.m_x); mat(1, 1) += (atoms[a].m_y - center.m_y) * (atoms[a].m_y - center.m_y); mat(2, 2) += (atoms[a].m_z - center.m_z) * (atoms[a].m_z - center.m_z); mat(0, 1) += (atoms[a].m_x - center.m_x) * (atoms[a].m_y - center.m_y); mat(0, 2) += (atoms[a].m_x - center.m_x) * (atoms[a].m_z - center.m_z); mat(1, 2) += (atoms[a].m_y - center.m_y) * (atoms[a].m_z - center.m_z); } mat(1, 0) = mat(0, 1); mat(2, 0) = mat(0, 2); mat(2, 1) = mat(1, 2); /*auto eigen = */mat.eigen(true); abcd[0] = mat(0, 0); abcd[1] = mat(1, 0); abcd[2] = mat(2, 0); double sumSq = 1e-20 + abcd[0] * abcd[0] + abcd[1] * abcd[1] + abcd[2] * abcd[2]; abcd[0] /= sumSq; abcd[1] /= sumSq; abcd[2] /= sumSq; abcd[3] = abcd[0] * center.m_x + abcd[1] * center.m_y + abcd[2] * center.m_z; } double PlanarityRestraint::f(const AtomLocationProvider &atoms) const { double abcd[4]; calculatePlaneFunction(atoms, abcd); double result = accumulate(mAtoms.begin(), mAtoms.end(), 0., [&atoms, &abcd, esd = mESD](double sum, AtomRef a) { double v = abcd[0] * atoms[a].m_x + abcd[1] * atoms[a].m_y + abcd[2] * atoms[a].m_z - abcd[3]; double r = v / esd; return sum + r * r; }); if (cif::VERBOSE > 2) { std::vector as; transform(mAtoms.begin(), mAtoms.end(), back_inserter(as), [](auto &a) { std::stringstream s; s << a; return s.str(); }); std::cerr << "plane::f() = " << result << " for " << mAtoms.size() << " atoms " << cif::join(as, ", ") << std::endl; } return result; } void PlanarityRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { if (cif::VERBOSE > 2) { std::vector as; transform(mAtoms.begin(), mAtoms.end(), back_inserter(as), [](auto &a) { std::stringstream s; s << a; return s.str(); }); std::cerr << "plane::df() for " << mAtoms.size() << " atoms " << cif::join(as, ", ") << std::endl; } double abcd[4]; calculatePlaneFunction(atoms, abcd); for (auto &a : mAtoms) { auto l = atoms[a]; auto deviLen = l.m_x * abcd[0] + l.m_y * abcd[1] + l.m_z * abcd[2] - abcd[3]; df.add(a, 2 * deviLen * DPoint{abcd[0], abcd[1], abcd[2]} / (mESD * mESD)); } } void PlanarityRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "plane "; for (auto &a : mAtoms) std::cout << atoms.atom(a) << ' '; std::cout << "=> " << 0 << " / " << mESD << std::endl; } // -------------------------------------------------------------------- double NonBondedContactRestraint::f(const AtomLocationProvider &atoms) const { double result = 0; double distance = distance_squared(atoms[mA], atoms[mB]); if (distance < mMinDistSq) { double d = mMinDist - std::sqrt(distance); result = (d * d) / (mDistESD * mDistESD); } if (cif::VERBOSE > 2) std::cerr << "non-bonded-contact::f() = " << result << " min-dist is " << mMinDist << " and dist is " << std::sqrt(distance) << " a1: " << atoms.atom(mA) << " a2: " << atoms.atom(mB) << std::endl << " a1: " << atoms[mA] << " a2: " << atoms[mB] << std::endl; return result; } void NonBondedContactRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { auto a1 = atoms[mA], a2 = atoms[mB]; auto bi = distance_squared(a1, a2); if (bi < mMinDistSq) { bi = std::sqrt(bi); if (bi < 0.1) bi = 0.1; if (cif::VERBOSE > 2) std::cerr << "non-bonded::df(): " << atoms.atom(mA) << " and " << atoms.atom(mB) << " " << "distance: " << bi << " " << "target: " << mMinDist << std::endl; double c = 2 * (1 - mMinDist / bi) / (mDistESD * mDistESD); df.add(mA, (a1 - a2) * c); df.add(mB, (a2 - a1) * c); } } void NonBondedContactRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "nbc " << atoms.atom(mA) << " " << atoms.atom(mB) << " => " << distance(atoms[mA], atoms[mB]) << ' ' << mMinDist << " / " << mDistESD << std::endl; } // -------------------------------------------------------------------- DensityRestraint::DensityRestraint(std::vector> &&atoms, const Xmap &xMap, double mapWeight) : mAtoms(move(atoms)) , mXMap(xMap) , mMapWeight(mapWeight) { } double DensityRestraint::f(const AtomLocationProvider &atoms) const { double result = 0; for (auto &a : mAtoms) { Coord_orth p = toClipper(atoms[a.first]); Coord_frac pf = p.coord_frac(mXMap.cell()); result += a.second * mXMap.interp(pf); } if (cif::VERBOSE > 2) std::cerr << "density::f() = " << -result << std::endl; return mMapWeight * -result; } void DensityRestraint::df(const AtomLocationProvider &atoms, DFCollector &df) const { if (cif::VERBOSE > 2) std::cerr << "density::df(): " << std::endl; for (auto &a : mAtoms) { Coord_orth p = toClipper(atoms[a.first]); Coord_frac pf = p.coord_frac(mXMap.cell()); auto pm = pf.coord_map(mXMap.grid_sampling()); clipper::Grad_map grad; double dv; clipper::Interp_cubic::interp_grad(mXMap, pm, dv, grad); auto gradFrac = grad.grad_frac(mXMap.grid_sampling()); auto gradOrth = gradFrac.grad_orth(mXMap.cell()); df.add(a.first, DPoint{gradOrth.dx(), gradOrth.dy(), gradOrth.dz()} * mMapWeight * -a.second); } } void DensityRestraint::print(const AtomLocationProvider &atoms) const { std::cout << "density " << std::endl; } } // namespace pdb_redolibpdb-redo-3.0.5/src/SkipList.cpp0000664000175000017500000001150214364232314016602 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Created by: Maarten L. Hekkelman Date: maandag 07 januari, 2019 */ #include #include #include "pdb-redo/SkipList.hpp" namespace fs = std::filesystem; namespace pdb_redo { // -------------------------------------------------------------------- void writeOLDSkipList(std::ostream &os, const SkipList &list) { os << ':'; for (auto &res : list) os << res.auth_asym_id << res.auth_seq_id << (res.pdbx_PDB_ins_code and *res.pdbx_PDB_ins_code ? *res.pdbx_PDB_ins_code : ' ') << ':'; } void writeCIFSkipList(std::ostream &os, const SkipList &list) { cif::file file; auto &db = file.emplace_back("skip"); auto &&[cat, ignore] = db.emplace("skip_list"); for (auto &res : list) cat->emplace({{"auth_asym_id", res.auth_asym_id}, {"auth_comp_id", res.auth_comp_id}, {"auth_seq_id", res.auth_seq_id}, {"pdbx_PDB_ins_code", std::string{res.pdbx_PDB_ins_code and *res.pdbx_PDB_ins_code ? *res.pdbx_PDB_ins_code : '?'}}, {"label_asym_id", res.label_asym_id}, {"label_comp_id", res.label_comp_id}, {"label_seq_id", res.label_seq_id}}); file.save(os); } // -------------------------------------------------------------------- void writeSkipList(std::ostream &os, const SkipList &list, SkipListFormat format) { switch (format) { case SkipListFormat::OLD: writeOLDSkipList(os, list); break; case SkipListFormat::CIF: writeCIFSkipList(os, list); break; default: break; } } void writeSkipList(const fs::path &file, const SkipList &list, SkipListFormat format) { std::ofstream os(file, std::ios::binary); writeSkipList(os, list, format); } // -------------------------------------------------------------------- SkipList readOLDSkipList(std::istream &is) { SkipList result; char separator = 0; if (is.rdbuf()->in_avail() > 0) is.read(&separator, 1); if (separator != ':') throw std::runtime_error("Not an old format skip list"); while (not is.eof()) { ResidueSpec spec{}; char chain = 0; is.read(&chain, 1); int seq_nr; is >> seq_nr; char ins_code = 0; is.read(&ins_code, 1); if (is.rdbuf()->in_avail() > 0) is.read(&separator, 1); if (chain == 0) break; if (separator != ':' and separator != 0) throw std::runtime_error("Invalid old format skiplist"); spec.auth_asym_id.push_back(chain); spec.auth_seq_id = std::to_string(seq_nr); if (ins_code != ' ' and ins_code != 0) spec.pdbx_PDB_ins_code = ins_code; result.push_back(spec); } return result; } SkipList readCIFSkipList(std::istream &is) { SkipList result; cif::file file; file.load(is); auto &db = file["skip"]; auto &cat = db["skip_list"]; for (const auto &[auth_asym_id, auth_comp_id, auth_seq_id, pdbx_PDB_ins_code, label_asym_id, label_comp_id, label_seq_id] : cat.rows("auth_asym_id", "auth_comp_id", "auth_seq_id", "pdbx_PDB_ins_code", "label_asym_id", "label_comp_id", "label_seq_id")) { result.emplace_back(auth_asym_id, auth_comp_id, auth_seq_id, pdbx_PDB_ins_code, label_asym_id, label_comp_id, label_seq_id); } return result; } SkipList readSkipList(std::istream &is) { try { return readCIFSkipList(is); } catch (const std::exception &e) { if (cif::VERBOSE > 0) std::cerr << e.what() << std::endl; is.rdbuf()->pubseekpos(0); } return readOLDSkipList(is); } SkipList readSkipList(std::filesystem::path &file) { std::ifstream is(file); return readSkipList(is); } } // namespace pdb_redolibpdb-redo-3.0.5/src/Statistics.cpp0000664000175000017500000007353114364232314017204 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include #include "pdb-redo/AtomShape.hpp" #include "pdb-redo/BondMap.hpp" #include "pdb-redo/ClipperWrapper.hpp" #include "pdb-redo/Statistics.hpp" // -------------------------------------------------------------------- namespace pdb_redo { using clipper::Coord_grid; using clipper::Coord_orth; using clipper::Xmap; using cif::atom_type_traits; // -------------------------------------------------------------------- std::ostream &operator<<(std::ostream &os, const ResidueStatistics &st) { if (st.compID == "HOH") os << st.asymID << '_' << st.authSeqID << '_' << st.compID << '\t'; else os << st.asymID << '_' << st.seqID << '_' << st.compID << '\t'; os << st.RSR << '\t' << st.SRSR << '\t' << st.RSCCS << '\t' << st.ngrid << '\t' << st.EDIAm << '\t' << st.OPIA; return os; } // -------------------------------------------------------------------- double anorm(double x) { return 0.5 * erfc(-x * std::sqrt(0.5)); } double phinvs(double p) { // // ALGORITHM AS241 APPL. STATIST. (1988) VOL. 37, NO. 3. // // Produces the normal deviate Z corresponding to a given lower tail // area of P; Z is accurate to about 1 part in 10**16. // Coefficients for P close to 0.5 const double A[8] = { 3.3871328727963666080, 1.3314166789178437745e+2, 1.9715909503065514427e+3, 1.3731693765509461125e+4, 4.5921953931549871457e+4, 6.7265770927008700853e+4, 3.3430575583588128105e+4, 2.5090809287301226727e+3}, B[8] = {0, 4.2313330701600911252e+1, 6.8718700749205790830e+2, 5.3941960214247511077e+3, 2.1213794301586595867e+4, 3.9307895800092710610e+4, 2.8729085735721942674e+4, 5.2264952788528545610e+3}; // Coefficients for P not close to 0, 0.5 or 1. const double C[8] = { 1.42343711074968357734e0, 4.63033784615654529590e0, 5.76949722146069140550e0, 3.64784832476320460504e0, 1.27045825245236838258e0, 2.41780725177450611770e-1, 2.27238449892691845833e-2, 7.74545014278341407640e-4, }, D[8] = {0, 2.05319162663775882187e0, 1.67638483018380384940e0, 6.89767334985100004550e-1, 1.48103976427480074590e-1, 1.51986665636164571966e-2, 5.47593808499534494600e-4, 1.05075007164441684324e-9}; // Coefficients for P near 0 or 1. const double E[8] = { 6.65790464350110377720e0, 5.46378491116411436990e0, 1.78482653991729133580e0, 2.96560571828504891230e-1, 2.65321895265761230930e-2, 1.24266094738807843860e-3, 2.71155556874348757815e-5, 2.01033439929228813265e-7, }, F[8] = {0, 5.99832206555887937690e-1, 1.36929880922735805310e-1, 1.48753612908506148525e-2, 7.86869131145613259100e-4, 1.84631831751005468180e-5, 1.42151175831644588870e-7, 2.04426310338993978564e-15}; if (p < 0 or p > 1) throw std::runtime_error("P should be >=0 and <=1"); double q = p - 0.5; double result; if (std::abs(q) < 0.425) { double r = 0.180625e0 - q * q; result = q * (((((((A[7] * r + A[6]) * r + A[5]) * r + A[4]) * r + A[3]) * r + A[2]) * r + A[1]) * r + A[0]) / (((((((B[7] * r + B[6]) * r + B[5]) * r + B[4]) * r + B[3]) * r + B[2]) * r + B[1]) * r + 1); } else { double r; if (q < 0) r = p; else r = 1 - p; r = std::sqrt(-std::log(r)); if (r <= 5) { r -= 1.6; result = (((((((C[7] * r + C[6]) * r + C[5]) * r + C[4]) * r + C[3]) * r + C[2]) * r + C[1]) * r + C[0]) / (((((((D[7] * r + D[6]) * r + D[5]) * r + D[4]) * r + D[3]) * r + D[2]) * r + D[1]) * r + 1); } else { r -= 0.5; result = (((((((E[7] * r + E[6]) * r + E[5]) * r + E[4]) * r + E[3]) * r + E[2]) * r + E[1]) * r + E[0]) / (((((((F[7] * r + F[6]) * r + F[5]) * r + F[4]) * r + F[3]) * r + F[2]) * r + F[1]) * r + 1); } if (q < 0) result = -result; } return result; } double errsol(double a) { auto c = std::sqrt(2.0 / kPI); auto b = std::abs(a); double result = 0; if (b > 3 / c) { auto x = std::abs(std::pow(b, 1 / 3.0) - 2 * std::pow(kPI / b, 2)); if (a < 0) x = -x; for (;;) { auto xx = x * x; auto y = c * std::exp(-0.5 * xx); auto d = (b * (2 * anorm(x) - 1 - x * y) / xx - x) / (b * y - 3); x -= d; if (std::abs(d) <= 1e-4) break; } result = x; } return result; } // -------------------------------------------------------------------- class PointWeightFunction { public: PointWeightFunction(cif::point center, float atomRadius) : m_Center(center) , m_Radius(atomRadius) { m_P[0] = P{-1.0f, 0, 1.0f, 1.0822f}; m_P[1] = P{5.1177f, 1.29366f, -0.4f, 1.4043f}; m_P[2] = P{-0.9507f, 2, 0, 2}; } float operator()(cif::point p) const { float d = distance(m_Center, p); d /= m_Radius; float result = 0; for (auto &pi : m_P) { if (d > pi.x) continue; result = pi.m * (d - pi.c) * (d - pi.c) + pi.b; // assert(result != 0); if (result == 0) result = std::numeric_limits::epsilon(); break; } return result; } private: struct P { float m, c, b, x; }; cif::point m_Center; float m_Radius; P m_P[3]; }; // -------------------------------------------------------------------- struct AtomGridData { AtomGridData(const Coord_grid &gp, double density) : p(gp) , density(density) { } Coord_grid p; double density; }; struct AtomDataSums { size_t ngrid = 0; double rfSums[2] = {}; // sums for R-Factor double edSums[2] = {}; // Sums for ED1 and ED3 double ccSums[3] = {}; // Sums for CC calculation double rgSums[2] = {}; double swSums[3] = {}; // Sums used for sample CC calculation AtomDataSums &operator+=(const AtomDataSums &rhs) { ngrid += rhs.ngrid; rfSums[0] += rhs.rfSums[0]; rfSums[1] += rhs.rfSums[1]; edSums[0] += rhs.edSums[0]; edSums[1] += rhs.edSums[1]; ccSums[0] += rhs.ccSums[0]; ccSums[1] += rhs.ccSums[1]; ccSums[2] += rhs.ccSums[2]; rgSums[0] += rhs.rgSums[0]; rgSums[1] += rhs.rgSums[1]; swSums[0] += rhs.swSums[0]; swSums[1] += rhs.swSums[1]; swSums[2] += rhs.swSums[2]; return *this; } double cc() const { double s = (ccSums[1] - (edSums[0] * edSums[0]) / ngrid) * (ccSums[2] - (edSums[1] * edSums[1]) / ngrid); return (ccSums[0] - edSums[0] * edSums[1] / ngrid) / std::sqrt(s); } double srg() const { double rgsq = rgSums[0] / rgSums[1]; double rg = std::sqrt(rgsq); return std::sqrt(swSums[0] - rgsq * swSums[1] + 0.5 * rgsq * rgsq * swSums[2]) / (rg * rgSums[1]); } }; struct AtomData { AtomData(cif::mm::atom atom, float radius) : atom(atom) , asymID(atom.get_label_asym_id()) , seqID(atom.get_label_seq_id()) , authSeqID(atom.get_auth_seq_id()) , radius(radius) , occupancy(atom.get_occupancy()) { } cif::mm::atom atom; std::string asymID; int seqID; std::string authSeqID; // required for waters float radius; float occupancy; std::vector points; double averageDensity = 0; double edia = 0; AtomDataSums sums; }; // -------------------------------------------------------------------- std::tuple CalculateMapStatistics(const Xmap &f) { double sum = 0, sum2 = 0; int count = 0; for (auto ix = f.first(); not ix.last(); ix.next()) { auto v = f[ix]; if (std::isnan(v)) throw std::runtime_error("map contains NaN values"); ++count; sum += v; sum2 += v * v; } float meanDensity = static_cast(sum / count); float rmsDensity = static_cast(std::sqrt((sum2 / count) - (meanDensity * meanDensity))); return std::make_tuple(meanDensity, rmsDensity); } // -------------------------------------------------------------------- class BoundingBox { public: template BoundingBox(const cif::mm::structure &structure, List atoms, float margin) { mXMin = mYMin = mZMin = std::numeric_limits::max(); mXMax = mYMax = mZMax = std::numeric_limits::min(); for (auto &atom : atoms) { auto l = atom.get_location(); if (mXMin > l.m_x) mXMin = l.m_x; if (mXMax < l.m_x) mXMax = l.m_x; if (mYMin > l.m_y) mYMin = l.m_y; if (mYMax < l.m_y) mYMax = l.m_y; if (mZMin > l.m_z) mZMin = l.m_z; if (mZMax < l.m_z) mZMax = l.m_z; } mXMin -= margin; mXMax += margin; mYMin -= margin; mYMax += margin; mZMin -= margin; mZMax += margin; } bool contains(const cif::point &p) const { return p.m_x >= mXMin and p.m_x <= mXMax and p.m_y >= mYMin and p.m_y <= mYMax and p.m_z >= mZMin and p.m_z <= mZMax; } private: float mXMin, mXMax, mYMin, mYMax, mZMin, mZMax; }; // -------------------------------------------------------------------- StatsCollector::StatsCollector(const MapMaker &mm, cif::mm::structure &structure, bool electronScattering) : mStructure(structure) , mMapMaker(mm) , mElectronScattering(electronScattering) { mSpacegroup = mm.spacegroup(); mCell = mm.cell(); mGrid = mm.gridSampling(); mResHigh = static_cast(mm.resHigh()); mResLow = static_cast(mm.resLow()); initialize(); } void StatsCollector::initialize() { // easiest way to prime this map: for (auto &asym_id : mStructure.get_datablock()["struct_asym"].rows("id")) mRmsScaled[asym_id] = { 1, 1 }; mMeanDensityFb = mMapMaker.fb().meanDensity(); mRMSDensityFb = mMapMaker.fb().rmsDensity(); mRMSDensityFd = mMapMaker.fd().rmsDensity(); // calculate degrees of freedom auto omcd = mCell.matrix_orth(); mVF = 1; mVC = 1; for (int i = 0; i < 3; ++i) { mVC *= omcd(i, i); mVF *= omcd(i, i) / mGrid[i]; } mVF *= std::pow(2 / mResHigh, 3); mSZ = 0; // double so = 0; // const double C = std::sqrt(2.0 / kPI); for (auto &a : mStructure.atoms()) { auto t = a.get_type(); if (t <= cif::atom_type::He) continue; float w = a.get_occupancy() * t; if (w <= 0) continue; mSZ += w; // float bIso = Util::u2b(a.uIso()); // if (bIso < 4) // bIso = 4; // float x = std::sqrt(bIso) / mResHigh; // x = w * (2 * anorm(x) - 1 - C * x * std::exp(-0.5 * std::pow(x, 2))) / std::pow(x, 3); // // so += x; } // auto bo = mSZ; mSZ = mSZ * mSpacegroup.num_symops() / mVC; // mMeanBIso = std::pow(mResHigh * errsol(bo / so), 2); // Calculate overall rms data std::vector atomData; for (auto atom : mStructure.atoms()) { AtomShape shape(atom, mResHigh, mResLow, mElectronScattering); float radius = shape.radius(); if (cif::VERBOSE > 2) std::cerr << (atomData.size() + 1) << '\t' << atom_type_traits(atom.get_type()).symbol() << '\t' << radius << std::endl; atomData.emplace_back(atom, radius); } GridPtDataMap gridPointDensity; std::map> zScoresPerAsym; sumDensity(atomData, gridPointDensity, zScoresPerAsym); // Now that we have the density data, we can calculate the correction/rescale factors for (auto zsc : zScoresPerAsym) { // collect array of z-scores std::vector &zdca0 = zsc.second; auto &z = zdca0; auto vf = mVF; sort(z.begin(), z.end()); double qa = 0, qb = 1; size_t nd = z.size(); size_t n = static_cast(round(vf * nd)); if (n > 100) { size_t i1 = static_cast((n + 1) * anorm(-1.5)) + 1; size_t i2 = static_cast((n + 1) * anorm(1.5)); size_t ns = i2 - i1 + 1; double vr = (nd - 1) / (n - 1.0); double sw = 0, swx = 0, swxs = 0, swy = 0, swxy = 0, swys = 0; for (auto i = i1; i <= i2; ++i) { double qx = phinvs(static_cast(i) / (n + 1)); double x = vr * i; size_t j = static_cast(x); x -= j; // assert(j < z.size()); if (j < 1 or j >= z.size()) continue; auto qyd = (1.0 - x) * z[j - 1] + x * z[j] - qx; auto wx = std::exp(-0.5 * qx * qx); sw += wx; swx += wx * qx; swxs += wx * qx * qx; swy += wx * qyd; swxy += wx * qx * qyd; swys += wx * qyd * qyd; } double dd = 1.0 / (sw * swxs - swx * swx); qa = dd * (swxs * swy - swx * swxy); qb = dd * (sw * swxy - swx * swy); if (cif::VERBOSE > 1) { swys = dd * (swys - (qa * swy + qb * swxy)) / (ns - 2); std::cerr << std::endl << "Intercept & gradient before LS: " << qa << " (" << std::sqrt(swys * swxs) << ") " << qb << " (" << std::sqrt(swys * sw) << ')' << std::endl; } qb += 1.0; if (cif::VERBOSE > 1) { std::cerr << std::endl << "Rescale SD(delta-rho) using Q-Q plot for asym " << zsc.first << ':' << std::endl << std::string(54, '=') << std::endl << "Input & updated SD(delta-rho): " << mRMSDensityFd << " ; " << qb * mRMSDensityFd << std::endl << std::endl; } } mRmsScaled[zsc.first] = std::make_pair(qa * mRMSDensityFd, qb * mRMSDensityFd); } } std::vector StatsCollector::collect() const { std::vector> residues; std::vector atoms; for (auto atom : mStructure.atoms()) { if (atom.is_water()) continue; auto k = std::make_tuple(atom.get_label_asym_id(), atom.get_label_seq_id(), atom.get_auth_seq_id()); if (residues.empty() or residues.back() != k) { residues.emplace_back(move(k)); atoms.emplace_back(std::move(atom)); } } BoundingBox bbox(mStructure, atoms, 5.0f); return collect(residues, bbox, true); } std::vector StatsCollector::collect(const std::string &asymID, int resFirst, int resLast, bool authNameSpace) const { residue_list residues; std::vector atoms; // for (auto atom : mStructure.atoms()) // { // if (atom.is_water()) // continue; // if (authNameSpace) // { // int auth_seq_id = stoi(atom.get_auth_seq_id()); // if (atom.get_auth_asym_id() != asymID or auth_seq_id < resFirst or auth_seq_id > resLast) // continue; // } // else // { // if (atom.get_label_asym_id() != asymID or atom.get_label_seq_id() < resFirst or atom.get_label_seq_id() > resLast) // continue; // } // auto k = std::make_tuple(atom.get_label_asym_id(), atom.get_label_seq_id(), atom.get_auth_seq_id()); // if (residues.empty() or residues.back() != k) // { // residues.emplace_back(move(k)); // atoms.emplace_back(std::move(atom)); // } // } for (auto atom : mStructure.atoms()) { if (atom.is_water()) continue; if (authNameSpace) { int auth_seq_id = stoi(atom.get_auth_seq_id()); if (atom.get_auth_asym_id() != asymID or auth_seq_id < resFirst or auth_seq_id > resLast) continue; } else { if (atom.get_label_asym_id() != asymID or atom.get_label_seq_id() < resFirst or atom.get_label_seq_id() > resLast) continue; } auto k = std::make_tuple(atom.get_label_asym_id(), atom.get_label_seq_id(), atom.get_auth_seq_id()); if (residues.empty() or residues.back() != k) residues.emplace_back(move(k)); } for (const auto &[asymID, seqID, authSeqID] : residues) { auto &res = mStructure.get_residue(asymID, seqID, authSeqID); for (auto atom : res.unique_atoms()) atoms.push_back(atom); } BoundingBox bbox(mStructure, atoms, 5.0f); return collect(residues, bbox, false); } std::vector StatsCollector::collect(const residue_list &residues, BoundingBox &bbox, bool addWaters) const { std::vector atomData; // BoundingBox bb(mStructure, residues, 5.0f); for (auto atom : mStructure.atoms()) { if (atom.is_water()) { if (not addWaters) continue; } else if (not bbox.contains(atom.get_location())) continue; AtomShape shape(atom, mResHigh, mResLow, mElectronScattering); float radius = shape.radius(); if (cif::VERBOSE > 2) std::cerr << (atomData.size() + 1) << '\t' << atom_type_traits(atom.get_type()).symbol() << '\t' << radius << std::endl; atomData.emplace_back(atom, radius); } calculate(atomData); std::set missing; std::vector result; // And now collect the per residue information for (const auto &[asymID, seqID, authSeqID] : residues) { // TODO: Need to do something with hetero residues (alternate compound types) auto &res = mStructure.get_residue(asymID, seqID, authSeqID); auto compID = res.get_compound_id(); AtomDataSums sums; std::vector resAtomData; for (const auto &d : atomData) { if (d.asymID == asymID and d.seqID == seqID and d.authSeqID == authSeqID) resAtomData.push_back(&d); } std::vector atomIDs; try { if (not missing.count(compID)) { atomIDs = BondMap::atomIDsForCompound(compID); for (auto &compAtom : atomIDs) { if (compAtom == "OXT") continue; for (auto d : resAtomData) { if (d->atom.get_label_atom_id() != compAtom) continue; // We used to factor in the occupancy here, but that seems to be incorrect // since occupancy was already used. // sums += d->sums * d->occupancy; sums += d->sums; break; } resAtomData.erase( std::remove_if(resAtomData.begin(), resAtomData.end(), [id = compAtom](const AtomData *d) { return d->atom.get_label_atom_id() == id; }), resAtomData.end()); } } } catch (const BondMapException &ex) { std::cerr << "Missing information for compound '" << compID << '\'' << std::endl << ex.what() << std::endl; missing.insert(compID); } // atoms that were present but not part of the Compound for (auto d : resAtomData) sums += d->sums; // EDIA std::set alts; if (not missing.count(compID)) alts = res.get_alternate_ids(); if (alts.empty()) alts.insert(""); double EDIAm = 0, OPIA = 0, OCC = 0; for (auto alt : alts) { double ediaSum = 0, occSum = 0; size_t n = 0, m = 0; for (const auto &d : atomData) { if (d.asymID != asymID or d.seqID != seqID or d.authSeqID != authSeqID) continue; if (alt.empty()) { resAtomData.push_back(&d); continue; } auto altd = d.atom.get_label_alt_id(); if (altd.empty() or altd == alt) resAtomData.push_back(&d); } if (atomIDs.empty()) { for (const auto &d : resAtomData) { occSum += d->occupancy; ediaSum += std::pow(d->edia + 0.1, -2); ++n; if (d->edia >= 0.8) ++m; } } else { for (auto &compAtom : atomIDs) { if (compAtom == "OXT") continue; for (auto d : resAtomData) { if (d->atom.get_label_atom_id() != compAtom) continue; occSum += d->occupancy; ediaSum += std::pow(d->edia + 0.1, -2); ++n; if (d->edia >= 0.8) ++m; } } } if (n == 0) // I'm paranoid continue; OCC += occSum; EDIAm += occSum * (1 / std::sqrt(ediaSum / n) - 0.1); OPIA += occSum * (100. * m / n); } if (atomIDs.empty()) { EDIAm = std::nan("0"); OPIA = std::nan("0"); } else { EDIAm /= OCC; OPIA /= OCC; } result.emplace_back(ResidueStatistics{asymID, seqID, compID, authSeqID, (sums.rfSums[0] / sums.rfSums[1]), // rsr sums.srg(), // srsr sums.cc(), // rsccs EDIAm, // ediam OPIA, // opia static_cast(round(mVF * sums.ngrid))}); // ngrid } if (addWaters) { for (const auto &d : atomData) { const cif::mm::atom &atom = d.atom; if (not atom.is_water()) continue; result.emplace_back(ResidueStatistics{d.asymID, d.seqID, "HOH", d.authSeqID, (d.sums.rfSums[0] / d.sums.rfSums[1]), // rsr d.sums.srg(), // srsr d.sums.cc(), // rsccs d.edia, // ediam (d.edia > 0.8 ? 100. : 0.), // opia static_cast(round(mVF * d.sums.ngrid))}); // ngrid } } return result; } ResidueStatistics StatsCollector::collect(std::initializer_list residues) const { std::vector atoms; for (auto &r : residues) for (auto a : r->atoms()) atoms.push_back(a); return collect(atoms); } ResidueStatistics StatsCollector::collect(std::initializer_list atoms) const { std::vector v(atoms); return collect(v); } ResidueStatistics StatsCollector::collect(const std::vector &atoms) const { std::vector atomData; BoundingBox bb(mStructure, atoms, 4.f); for (auto atom : mStructure.atoms()) { if (not bb.contains(atom.get_location())) continue; AtomShape shape(atom, mResHigh, mResLow, mElectronScattering); float radius = shape.radius(); if (cif::VERBOSE > 2) std::cerr << (atomData.size() + 1) << '\t' << atom_type_traits(atom.get_type()).symbol() << '\t' << radius << std::endl; atomData.emplace_back(atom, radius); } calculate(atomData); AtomDataSums sums; size_t n = 0, m = 0; double ediaSum = 0; for (auto &atom : atoms) { ++n; auto ci = find_if(atomData.begin(), atomData.end(), [=](auto &d) { return d.asymID == atom.get_label_asym_id() and d.seqID == atom.get_label_seq_id() and d.atom.get_label_atom_id() == atom.get_label_atom_id(); }); if (ci == atomData.end()) continue; sums += ci->sums; ediaSum += std::pow(ci->edia + 0.1, -2); if (ci->edia >= 0.8) ++m; } ResidueStatistics result{ "", 0, "", "", (sums.rfSums[0] / sums.rfSums[1]), // rsr sums.srg(), // srsr sums.cc(), // rsccs 1 / std::sqrt(ediaSum / n) - 0.1, // ediam 100. * m / n, // opia static_cast(round(mVF * sums.ngrid)) // ngrid }; return result; } void StatsCollector::sumDensity(std::vector &atomData, GridPtDataMap &gridPointDensity, std::map> &zScoresPerAsym) const { using namespace clipper; const Xmap &Fb = mMapMaker.fb(); const Xmap &Fd = mMapMaker.fd(); // First step, iterate over atoms, then over grid points covered by this atom // collecting per gridpoint statistics for (auto &data : atomData) { auto &atom = data.atom; if (atom.get_occupancy() == 0) continue; AtomShape shape(atom, mResHigh, mResLow, mElectronScattering); std::string asymID = data.asymID; if (atom.is_water()) asymID = "0"; auto radius = data.radius; double sumDensity = 0; iterateGrid(toClipper(atom.get_location()), radius, Fb, [&](Xmap_base::Map_reference_coord &iw) { auto p = toPoint(iw.coord_orth()); double d = distance(p, atom.get_location()); if (d <= radius) { double density = shape.calculatedDensity(p); if (std::isnan(density)) return; gridPointDensity[iw.coord()] += density; data.points.emplace_back(iw.coord(), density); sumDensity += density; zScoresPerAsym[data.asymID].push_back(Fd[iw] / (Fd.multiplicity(iw.coord()) * mRMSDensityFd)); } }); data.averageDensity = sumDensity / data.points.size(); } } void StatsCollector::collectSums(std::vector &atomData, GridPtDataMap &gridPointDensity) const { using namespace clipper; const Xmap &Fb = mMapMaker.fb(); const Xmap &Fd = mMapMaker.fd(); cif::Progress progress(atomData.size(), "Stats calculation"); // Iterate over the atom data to collect the sums for (auto &d : atomData) { auto rmsScaledF = mRmsScaled.at(d.asymID); for (auto gp : d.points) { ++d.sums.ngrid; auto gpd = gridPointDensity[gp.p]; if (gpd == 0) continue; double e = gp.density / gpd; double t = e * mSZ / rmsScaledF.second; Xmap_base::Map_reference_coord ix(Fb, gp.p); double fb = Fb[ix]; double fd = Fd[ix]; double ed1 = e * (fb - rmsScaledF.first) / rmsScaledF.second + t; double ed2 = e * (fd - rmsScaledF.first) / rmsScaledF.second; double ed3 = ed1 - ed2; d.sums.rfSums[0] += std::abs(ed2); d.sums.rfSums[1] += std::abs(ed1 + ed3); double w = gp.density / d.averageDensity; if (w < 0) w = 0; if (w > 1) w = 1; d.sums.rgSums[0] += w * ed2 * ed2; d.sums.rgSums[1] += w * ed1 * ed1; d.sums.swSums[0] += (w * ed2) * (w * ed2); d.sums.swSums[1] += (w * ed1) * (w * ed2); d.sums.swSums[2] += (w * ed1) * (w * ed1); ed1 -= t; ed3 -= t; d.sums.ccSums[0] += ed1 * ed3; d.sums.ccSums[1] += ed1 * ed1; d.sums.ccSums[2] += ed3 * ed3; d.sums.edSums[0] += ed1; d.sums.edSums[1] += ed3; } progress.consumed(1); } } void StatsCollector::calculate(std::vector &atomData) const { GridPtDataMap gridPointDensity; std::map> zScoresPerAsym; sumDensity(atomData, gridPointDensity, zScoresPerAsym); collectSums(atomData, gridPointDensity); } // -------------------------------------------------------------------- EDIAStatsCollector::EDIAStatsCollector(MapMaker &mm, cif::mm::structure &structure, bool electronScattering, const BondMap &bondMap) : StatsCollector(mm, structure, electronScattering) , mDistanceMap(structure, mm.spacegroup(), mm.cell(), 3.5f) , mBondMap(bondMap) { // create a atom radius map, for EDIA const double kResolutions[] = { 0.5, 1.0, 1.5, 2.0, 2.5}; // The following numbers were harvested with the application collect-b-factors const double kAverageBFactors[] = { 6.31912, // 0.5 14.4939, // 1.0 20.8827, // 1.5 27.7075, // 2.0 55.6378 // 2.5 }; const int kAverageBFactorCount = sizeof(kAverageBFactors) / sizeof(double); int i = static_cast(floor(mResHigh / 0.5)) - 1; if (i > kAverageBFactorCount - 1) i = kAverageBFactorCount - 1; if (i < 0) i = 0; float ediaBFactor; if (i < kAverageBFactorCount - 1) ediaBFactor = kAverageBFactors[i] + ((kAverageBFactors[i + 1] - kAverageBFactors[i]) * (mResHigh - kResolutions[i]) / (kResolutions[i + 1] - kResolutions[i])); else ediaBFactor = kAverageBFactors[i]; if (cif::VERBOSE > 1) std::cerr << "Calculating radii with B Factor " << ediaBFactor << std::endl; for (auto atom : mStructure.atoms()) { if (mRadii.count(atom.get_type())) continue; AtomShape shape(atom, mResHigh, mResLow, mElectronScattering, ediaBFactor); mRadii[atom.get_type()] = shape.radius(); if (cif::VERBOSE > 1) std::cerr << "Radius for atom with type " << atom_type_traits(atom.get_type()).symbol() << " is " << mRadii[atom.get_type()] << std::endl; } } void EDIAStatsCollector::calculate(std::vector &atomData) const { StatsCollector::calculate(atomData); const Xmap &Fb = mMapMaker.fb(); // Xmap& fd = mMapMaker.fd(); struct lessAtom { bool operator()(const cif::mm::atom &a, const cif::mm::atom &b) const { return a.id().compare(b.id()) < 0; } }; typedef std::set atomSet; // Calculate EDIA scores cif::Progress progress(atomData.size(), "EDIA calculation"); for (auto &data : atomData) { auto &atom = data.atom; float radius = mRadii.at(atom.get_type()); // if (cif::VERBOSE > 2) // std::cerr << (atomData.size() + 1) << '\t' // << atom_type_traits(atom.get_type()).symbol() << '\t' // << radius << std::endl; PointWeightFunction w(atom.get_location(), radius); std::vector atomsNearBy = mDistanceMap.near(atom, 3.5f); std::vector wn; for (auto a : atomsNearBy) wn.emplace_back(a.get_location(), mRadii.at(a.get_type())); float ediaSum[2] = {}; iterateGrid(toClipper(atom.get_location()), radius, Fb, [&](auto iw) { cif::point p = toPoint(iw.coord_orth()); // EDIA calculations auto fb = Fb[iw]; float z = 0; if (fb >= mMeanDensityFb + mRMSDensityFb) z = static_cast((fb - mMeanDensityFb) / mRMSDensityFb); if (z > 1.2) z = 1.2f; float wp = w(p); // And divide the ownership atomSet S, D, I; if (wp != 0) { if (wp < 0) D.insert(atom); else { S.insert(atom); I.insert(atom); } } for (size_t i = 0; i < atomsNearBy.size(); ++i) { float wpi = wn[i](p); if (wpi == 0) continue; if (wpi < 0) D.insert(atomsNearBy[i]); else if (wpi > 0) { S.insert(atomsNearBy[i]); if (not mBondMap(atomsNearBy[i], atom)) I.insert(atomsNearBy[i]); } } float o = 0; if (wp > 0) { if (I.size() == 1) o = 1; else { float sumpb = accumulate(I.begin(), I.end(), 0.f, [p](float s, const cif::mm::atom& b) -> float { return s + distance(p, b.get_location()); }); o = 1 - distance(atom.get_location(), p) / sumpb; } } else if (D.count(atom) and S.empty()) { if (D.size() == 1) o = 1; else { float sumpb = accumulate(D.begin(), D.end(), 0.f, [p](float s, const cif::mm::atom& b) -> float { return s + distance(p, b.get_location()); }); o = 1 - distance(atom.get_location(), p) / sumpb; } } ediaSum[0] += z * wp * o; if (wp > 0) ediaSum[1] += wp; }); data.edia = ediaSum[0] / ediaSum[1]; if (data.edia < 0) data.edia = 0; progress.consumed(1); } } } // namespace pdb_redo libpdb-redo-3.0.5/src/Symmetry-2.cpp0000664000175000017500000002523714364232314017042 0ustar maartenmaarten/*- * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2020 NKI/AVL, Netherlands Cancer Institute * * Redistribution 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 above copyright notice, this * list of conditions and the following disclaimer * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "cif++.hpp" #include "pdb-redo/ClipperWrapper.hpp" #include "pdb-redo/Symmetry-2.hpp" namespace c = cif; namespace pdb_redo { // -------------------------------------------------------------------- clipper::Coord_orth CalculateOffsetForCell(const cif::mm::structure &structure, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell) { using namespace cif::literals; auto &atoms = structure.atoms(); size_t dim = atoms.size(); std::vector locations; locations.reserve(dim); // bounding box cif::point pMin(std::numeric_limits::max(), std::numeric_limits::max(), std::numeric_limits::max()), pMax(std::numeric_limits::min(), std::numeric_limits::min(), std::numeric_limits::min()); for (auto &atom : atoms) { cif::point pt = atom.get_location(); locations.push_back(toClipper(pt)); if (pMin.m_x > pt.m_x) pMin.m_x = pt.m_x; if (pMin.m_y > pt.m_y) pMin.m_y = pt.m_y; if (pMin.m_z > pt.m_z) pMin.m_z = pt.m_z; if (pMax.m_x < pt.m_x) pMax.m_x = pt.m_x; if (pMax.m_y < pt.m_y) pMax.m_y = pt.m_y; if (pMax.m_z < pt.m_z) pMax.m_z = pt.m_z; }; // correct locations so that the median of x, y and z are inside the cell std::vector c(dim); auto median = [&]() { return dim % 1 == 0 ? c[dim / 2] : (c[dim / 2 - 1] + c[dim / 2]) / 2; }; std::transform(locations.begin(), locations.end(), c.begin(), [](auto &l) { return static_cast(l[0]); }); std::sort(c.begin(), c.end()); float mx = median(); std::transform(locations.begin(), locations.end(), c.begin(), [](auto &l) { return static_cast(l[1]); }); std::sort(c.begin(), c.end()); float my = median(); std::transform(locations.begin(), locations.end(), c.begin(), [](auto &l) { return static_cast(l[2]); }); std::sort(c.begin(), c.end()); float mz = median(); if (cif::VERBOSE > 1) std::cerr << "median position of atoms: " << cif::point(mx, my, mz) << std::endl; auto calculateD = [&](float m, float c) { float d = 0; assert(c != 0); if (c != 0) { while (m + d < -(c / 2)) d += c; while (m + d > (c / 2)) d -= c; } return d; }; if (cell.a() == 0 or cell.b() == 0 or cell.c() == 0) throw std::runtime_error("Invalid cell, contains a dimension that is zero"); cif::point D; D.m_x = calculateD(mx, static_cast(cell.a())); D.m_y = calculateD(my, static_cast(cell.b())); D.m_z = calculateD(mz, static_cast(cell.c())); if (D.m_x != 0 or D.m_y != 0 or D.m_z != 0) { if (cif::VERBOSE > 1) std::cerr << "moving coorinates by " << D.m_x << ", " << D.m_y << " and " << D.m_z << std::endl; } return toClipper(D); } // -------------------------------------------------------------------- std::vector AlternativeSites(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell) { std::vector result; // to make the operation at index 0 equal to identity result.push_back(clipper::RTop_orth::identity()); for (int i = 0; i < spacegroup.num_symops(); ++i) { const auto &symop = spacegroup.symop(i); for (int u : {-1, 0, 1}) for (int v : {-1, 0, 1}) for (int w : {-1, 0, 1}) { if (i == 0 and u == 0 and v == 0 and w == 0) continue; auto rtop = clipper::RTop_frac( symop.rot(), symop.trn() + clipper::Vec3<>(u, v, w)) .rtop_orth(cell); result.push_back(std::move(rtop)); } } return result; } // -------------------------------------------------------------------- // Unfortunately, clipper has a different numbering scheme than PDB // for rotation numbers. So we created a table to map those. // Perhaps a bit over the top, but hey.... int32_t GetRotationalIndexNumber(int spacegroup, const clipper::RTop_frac &rt) { auto k = GetSymOpDataForRTop_frac(rt); const size_t N = cif::kSymopNrTableSize; int32_t L = 0, R = static_cast(N - 1); while (L <= R) { int32_t i = (L + R) / 2; if (cif::kSymopNrTable[i].spacegroup() < spacegroup) L = i + 1; else R = i - 1; } for (size_t i = L; i < N and cif::kSymopNrTable[i].spacegroup() == spacegroup; ++i) { if (cif::kSymopNrTable[i].symop() == k) return cif::kSymopNrTable[i].rotational_number(); } throw std::runtime_error("Symmetry operation was not found in table, cannot find rotational number"); } // ----------------------------------------------------------------------- std::string SpacegroupToHall(std::string spacegroup) { int nr = cif::get_space_group_number(spacegroup); // yeah, sucks, I know, might be looping three times this way std::string result; for (size_t i = 0; i < cif::kNrOfSpaceGroups; ++i) { auto &sp = cif::kSpaceGroups[i]; if (sp.nr == nr) { result = sp.Hall; break; } } if (result.empty()) throw std::runtime_error("Spacegroup name " + spacegroup + " was not found in table"); return result; } clipper::Spgr_descr GetCCP4SpacegroupDescr(int nr) { for (size_t i = 0; i < cif::kNrOfSpaceGroups; ++i) { auto &sg = cif::kSpaceGroups[i]; if (sg.nr == nr) return clipper::Spgr_descr(sg.Hall, clipper::Spgr_descr::Hall); } throw std::runtime_error("Invalid spacegroup number: " + std::to_string(nr)); } // -------------------------------------------------------------------- std::string describeRToperation(const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, const clipper::RTop_orth &rt) { auto spacegroup_nr = getSpacegroupNumber(spacegroup); if (not(rt.is_null() or rt.equals(clipper::RTop_orth::identity(), 0.0001f))) { for (int i = 0; i < spacegroup.num_symops(); ++i) { const auto &symop = spacegroup.symop(i); for (int u : {-1, 0, 1}) for (int v : {-1, 0, 1}) for (int w : {-1, 0, 1}) { // if (i == 0 and u == 0 and v == 0 and w == 0) // continue; auto rtop = clipper::RTop_frac( symop.rot(), symop.trn() + clipper::Vec3<>(u, v, w)) .rtop_orth(cell); if (rtop.rot().equals(rt.rot(), 0.00001) and rtop.trn().equals(rt.trn(), 0.000001)) { // gotcha auto rtop_f = rtop.rtop_frac(cell); int rnr = GetRotationalIndexNumber(spacegroup_nr, rtop_f); uint32_t t[3] = { static_cast(5 + static_cast(rint(rtop_f.trn()[0]))), static_cast(5 + static_cast(rint(rtop_f.trn()[1]))), static_cast(5 + static_cast(rint(rtop_f.trn()[2])))}; if (t[0] > 9 or t[1] > 9 or t[2] > 9) throw std::runtime_error("Symmetry operation has an out-of-range translation."); return std::to_string(rnr) + "_" + std::to_string(t[0]) + std::to_string(t[1]) + std::to_string(t[2]); } } } } return "1_555"; } // -------------------------------------------------------------------- cif::mm::atom symmetryCopy(const cif::mm::atom &atom, const cif::point &d, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell, const clipper::RTop_orth &rt) { auto loc = atom.get_location(); loc += d; loc = toPoint(toClipper(loc).transform(rt)); loc -= d; std::string rt_operation = describeRToperation(spacegroup, cell, rt); return cif::mm::atom(atom, loc, rt_operation); } // ----------------------------------------------------------------------- SymmetryAtomIteratorFactory::SymmetryAtomIteratorFactory(const cif::mm::structure &p, const clipper::Spacegroup &spacegroup, const clipper::Cell &cell) : mSpacegroup(spacegroup) , mD(toPoint(CalculateOffsetForCell(p, mSpacegroup, cell))) , mRtOrth(AlternativeSites(mSpacegroup, cell)) , mCell(cell) { } SymmetryAtomIteratorFactory::SymmetryAtomIteratorFactory(const cif::mm::structure &p, int spacegroupNr, const clipper::Cell &cell) : SymmetryAtomIteratorFactory(p, clipper::Spacegroup{GetCCP4SpacegroupDescr(spacegroupNr)}, cell) { } // string SymmetryAtomIteratorFactory::symop_mmcif(const cif::cif::mm::atom& a) const // { // string result; // if (not a.isSymmetryCopy()) // result = "1_555"; // else // { // auto rtop_o = a.symop(); // for (int i = 0; i < mSpacegroup.num_symops(); ++i) // { // const auto& symop = mSpacegroup.symop(i); // for (int u: { -1, 0, 1}) // for (int v: { -1, 0, 1}) // for (int w: { -1, 0, 1}) // { // // if (i == 0 and u == 0 and v == 0 and w == 0) // // continue; // auto rtop = clipper::RTop_frac( // symop.rot(), symop.trn() + clipper::Vec3<>(u, v, w) // ).rtop_orth(mCell); // if (rtop.rot().equals(rtop_o.rot(), 0.00001) and rtop.trn().equals(rtop_o.trn(), 0.000001)) // { // // gotcha // auto rtop_f = rtop.rtop_frac(mCell); // int rnr = GetRotationalIndexNumber(mSpacegroupNr, rtop_f); // uint32_t t[3] = { // static_cast(5 + static_cast(rint(rtop_f.trn()[0]))), // static_cast(5 + static_cast(rint(rtop_f.trn()[1]))), // static_cast(5 + static_cast(rint(rtop_f.trn()[2]))) // }; // if (t[0] > 9 or t[1] > 9 or t[2] > 9) // throw runtime_error("Symmetry operation has an out-of-range translation."); // result += to_string(rnr) + "_" // + to_string(t[0]) // + to_string(t[1]) // + to_string(t[2]); // return result; // } // } // } // } // return result; // } } // namespace pdb_redolibpdb-redo-3.0.5/test/0000775000175000017500000000000014364232314014525 5ustar maartenmaartenlibpdb-redo-3.0.5/test/1cbs-test.eds0000664000175000017500000002333614364232314017036 0ustar maartenmaartenRESIDUE RSR SRSR RSCCS NGRID EDIAm OPIA PRO_A_1 0.100 0.019 0.890 48 0.125 42.9 ASN_A_2 0.090 0.013 0.889 48 0.700 87.5 PHE_A_3 0.041 0.008 0.957 53 1.053 100.0 SER_A_4 0.060 0.012 0.937 29 1.060 100.0 GLY_A_5 0.049 0.014 0.947 19 1.079 100.0 ASN_A_6 0.064 0.011 0.915 40 1.036 100.0 TRP_A_7 0.035 0.007 0.967 62 1.088 100.0 LYS_A_8 0.082 0.012 0.933 49 0.668 66.7 ILE_A_9 0.041 0.009 0.960 37 1.052 100.0 ILE_A_10 0.048 0.010 0.956 38 0.996 100.0 ARG_A_11 0.045 0.009 0.958 53 1.048 100.0 SER_A_12 0.048 0.011 0.942 27 1.056 100.0 GLU_A_13 0.046 0.009 0.964 43 1.035 100.0 ASN_A_14 0.043 0.009 0.965 35 1.045 100.0 PHE_A_15 0.040 0.009 0.961 53 1.089 100.0 GLU_A_16 0.063 0.011 0.927 51 0.945 88.9 GLU_A_17 0.100 0.013 0.842 52 0.846 77.8 LEU_A_18 0.044 0.010 0.958 37 1.059 100.0 LEU_A_19 0.039 0.009 0.972 40 1.011 100.0 LYS_A_20 0.126 0.015 0.882 60 0.204 55.6 VAL_A_21 0.059 0.013 0.938 37 0.834 85.7 LEU_A_22 0.051 0.011 0.926 42 1.005 100.0 GLY_A_23 0.071 0.017 0.883 21 1.015 100.0 VAL_A_24 0.040 0.010 0.955 34 1.087 100.0 ASN_A_25 0.074 0.013 0.908 46 0.955 100.0 VAL_A_26 0.075 0.014 0.899 41 0.870 71.4 MET_A_27 0.075 0.012 0.902 52 0.916 75.0 LEU_A_28 0.056 0.011 0.930 44 1.024 100.0 ARG_A_29 0.097 0.010 0.855 68 0.713 63.6 LYS_A_30 0.128 0.018 0.844 62 0.091 44.4 ILE_A_31 0.063 0.011 0.903 44 1.006 100.0 ALA_A_32 0.055 0.012 0.967 22 0.970 80.0 VAL_A_33 0.049 0.012 0.954 36 1.027 100.0 ALA_A_34 0.051 0.015 0.950 26 1.070 100.0 ALA_A_35 0.049 0.013 0.953 25 1.043 100.0 ALA_A_36 0.038 0.013 0.966 23 1.092 100.0 SER_A_37 0.050 0.013 0.939 32 1.001 100.0 LYS_A_38 0.148 0.014 0.867 61 0.103 44.4 PRO_A_39 0.047 0.011 0.949 33 1.023 100.0 ALA_A_40 0.053 0.013 0.955 23 0.989 100.0 VAL_A_41 0.047 0.010 0.937 33 1.007 100.0 GLU_A_42 0.079 0.011 0.936 52 0.866 77.8 ILE_A_43 0.033 0.009 0.976 39 0.958 87.5 LYS_A_44 0.090 0.012 0.934 55 0.135 66.7 GLN_A_45 0.060 0.010 0.923 47 0.968 100.0 GLU_A_46 0.160 0.015 0.849 66 0.074 44.4 GLY_A_47 0.042 0.015 0.962 22 0.999 100.0 ASP_A_48 0.067 0.011 0.949 46 0.969 87.5 THR_A_49 0.053 0.012 0.943 36 0.958 85.7 PHE_A_50 0.046 0.009 0.949 51 1.031 100.0 TYR_A_51 0.050 0.009 0.961 60 1.020 100.0 ILE_A_52 0.043 0.009 0.951 38 1.057 100.0 LYS_A_53 0.069 0.010 0.947 48 0.236 77.8 THR_A_54 0.038 0.009 0.963 31 1.083 100.0 SER_A_55 0.064 0.012 0.935 28 1.001 83.3 THR_A_56 0.038 0.009 0.975 34 1.084 100.0 THR_A_57 0.039 0.011 0.976 31 1.014 100.0 VAL_A_58 0.039 0.010 0.965 31 1.094 100.0 ARG_A_59 0.068 0.010 0.942 59 0.896 90.9 THR_A_60 0.045 0.010 0.965 32 1.003 100.0 THR_A_61 0.044 0.010 0.962 34 1.055 100.0 GLU_A_62 0.098 0.012 0.881 53 0.709 66.7 ILE_A_63 0.041 0.010 0.969 38 1.014 100.0 ASN_A_64 0.058 0.011 0.941 46 0.973 87.5 PHE_A_65 0.048 0.009 0.946 53 1.015 100.0 LYS_A_66 0.116 0.012 0.847 54 0.410 55.6 VAL_A_67 0.040 0.011 0.974 32 1.009 100.0 GLY_A_68 0.046 0.014 0.965 18 1.060 100.0 GLU_A_69 0.069 0.010 0.879 49 1.084 100.0 GLU_A_70 0.096 0.012 0.909 57 0.727 55.6 PHE_A_71 0.043 0.009 0.956 53 1.042 100.0 GLU_A_72 0.090 0.013 0.891 58 0.610 44.4 GLU_A_73 0.045 0.010 0.964 46 1.045 100.0 GLN_A_74 0.067 0.011 0.945 50 0.885 77.8 THR_A_75 0.037 0.011 0.978 33 1.055 100.0 VAL_A_76 0.075 0.013 0.932 37 0.718 71.4 ASP_A_77 0.049 0.010 0.949 41 1.048 100.0 GLY_A_78 0.059 0.017 0.912 22 1.050 100.0 ARG_A_79 0.078 0.012 0.911 74 0.874 72.7 PRO_A_80 0.053 0.012 0.944 36 0.963 100.0 CYS_A_81 0.033 0.009 0.989 29 0.989 100.0 LYS_A_82 0.103 0.012 0.934 56 0.312 55.6 SER_A_83 0.043 0.011 0.954 30 1.089 100.0 LEU_A_84 0.046 0.011 0.968 40 0.935 87.5 VAL_A_85 0.042 0.010 0.957 32 1.098 100.0 LYS_A_86 0.072 0.012 0.937 49 0.851 66.7 TRP_A_87 0.041 0.008 0.959 63 1.051 100.0 GLU_A_88 0.079 0.011 0.898 49 1.001 100.0 SER_A_89 0.047 0.011 0.963 29 1.005 100.0 GLU_A_90 0.054 0.010 0.940 46 0.988 88.9 ASN_A_91 0.047 0.010 0.958 40 1.035 100.0 LYS_A_92 0.044 0.009 0.958 43 1.031 100.0 MET_A_93 0.046 0.008 0.970 37 0.951 87.5 VAL_A_94 0.055 0.010 0.940 33 1.024 100.0 CYS_A_95 0.036 0.009 0.987 29 1.034 100.0 GLU_A_96 0.127 0.012 0.924 59 0.144 55.6 GLN_A_97 0.049 0.010 0.960 45 1.020 100.0 LYS_A_98 0.146 0.014 0.893 63 0.063 55.6 LEU_A_99 0.062 0.012 0.903 49 0.894 87.5 LEU_A_100 0.091 0.014 0.862 58 0.697 75.0 LYS_A_101 0.152 0.019 0.788 81 0.055 22.2 GLY_A_102 0.073 0.022 0.880 32 0.761 75.0 GLU_A_103 0.159 0.022 0.818 81 0.040 33.3 GLY_A_104 0.046 0.020 0.969 26 0.896 75.0 PRO_A_105 0.041 0.011 0.970 39 0.957 85.7 LYS_A_106 0.159 0.014 0.819 58 0.108 55.6 THR_A_107 0.036 0.010 0.968 34 1.077 100.0 SER_A_108 0.054 0.011 0.939 28 1.022 100.0 TRP_A_109 0.040 0.007 0.961 65 1.075 100.0 THR_A_110 0.043 0.010 0.958 30 1.098 100.0 ARG_A_111 0.040 0.008 0.960 50 1.088 100.0 GLU_A_112 0.084 0.010 0.912 47 0.867 77.8 LEU_A_113 0.063 0.010 0.942 41 0.747 75.0 THR_A_114 0.049 0.010 0.949 34 1.058 100.0 ASN_A_115 0.115 0.013 0.915 47 0.308 62.5 ASP_A_116 0.067 0.011 0.915 40 0.975 100.0 GLY_A_117 0.035 0.012 0.976 17 1.012 100.0 GLU_A_118 0.042 0.008 0.960 43 1.096 100.0 LEU_A_119 0.052 0.010 0.958 37 0.997 87.5 ILE_A_120 0.044 0.008 0.960 34 1.087 100.0 LEU_A_121 0.041 0.009 0.968 35 1.096 100.0 THR_A_122 0.036 0.010 0.977 31 1.078 100.0 MET_A_123 0.043 0.008 0.974 36 0.925 75.0 THR_A_124 0.052 0.010 0.961 34 1.076 100.0 ALA_A_125 0.052 0.011 0.933 24 1.073 100.0 ASP_A_126 0.066 0.012 0.913 45 1.008 100.0 ASP_A_127 0.159 0.018 0.764 54 0.169 37.5 VAL_A_128 0.048 0.010 0.961 35 0.977 85.7 VAL_A_129 0.044 0.009 0.963 32 1.078 100.0 CYS_A_130 0.024 0.008 0.994 25 0.995 100.0 THR_A_131 0.043 0.008 0.971 28 1.058 100.0 ARG_A_132 0.055 0.008 0.930 51 0.829 81.8 VAL_A_133 0.036 0.009 0.974 30 1.072 100.0 TYR_A_134 0.052 0.008 0.953 55 1.043 100.0 VAL_A_135 0.024 0.009 0.985 31 1.057 100.0 ARG_A_136 0.056 0.010 0.945 57 0.962 90.9 GLU_A_137 0.101 0.012 0.878 64 0.716 55.6 REA_B_0 0.043 0.006 0.949 109 0.992 100.0 HOH_C_300 0.041 0.022 0.945 6 1.146 100.0 HOH_C_301 0.056 0.032 0.972 5 1.130 100.0 HOH_C_302 0.049 0.031 0.977 6 1.050 100.0 HOH_C_303 0.037 0.026 0.947 5 1.019 100.0 HOH_C_304 0.035 0.031 0.962 5 1.087 100.0 HOH_C_305 0.025 0.026 0.983 5 1.084 100.0 HOH_C_306 0.016 0.022 0.989 4 1.164 100.0 HOH_C_307 0.034 0.026 0.959 5 1.095 100.0 HOH_C_308 0.084 0.032 0.813 9 0.842 100.0 HOH_C_309 0.034 0.027 0.974 5 1.033 100.0 HOH_C_310 0.036 0.025 0.950 5 1.045 100.0 HOH_C_311 0.040 0.036 0.917 6 1.083 100.0 HOH_C_312 0.051 0.024 0.988 4 1.092 100.0 HOH_C_313 0.100 0.037 0.804 7 0.714 0.0 HOH_C_314 0.085 0.035 0.926 7 0.877 100.0 HOH_C_315 0.037 0.031 0.943 6 1.174 100.0 HOH_C_316 0.026 0.020 0.961 4 1.032 100.0 HOH_C_317 0.050 0.033 0.954 5 0.988 100.0 HOH_C_318 0.033 0.025 0.962 4 1.138 100.0 HOH_C_319 0.088 0.034 0.866 6 0.820 100.0 HOH_C_320 0.048 0.030 0.959 5 1.117 100.0 HOH_C_321 0.031 0.027 0.975 4 1.151 100.0 HOH_C_322 0.032 0.022 0.962 4 1.144 100.0 HOH_C_323 0.032 0.030 0.970 4 1.085 100.0 HOH_C_324 0.047 0.031 0.953 6 0.765 0.0 HOH_C_325 0.082 0.029 0.810 6 0.775 0.0 HOH_C_326 0.035 0.020 0.972 5 1.008 100.0 HOH_C_327 0.190 0.045 0.742 8 0.611 0.0 HOH_C_328 0.086 0.036 0.807 7 0.849 100.0 HOH_C_329 0.095 0.059 0.875 9 0.294 0.0 HOH_C_330 0.075 0.032 0.878 8 1.089 100.0 HOH_C_331 0.110 0.041 0.769 8 0.546 0.0 HOH_C_332 0.121 0.037 0.534 8 0.842 100.0 HOH_C_333 0.048 0.037 0.948 7 0.981 100.0 HOH_C_334 0.127 0.044 0.639 8 0.636 0.0 HOH_C_335 0.082 0.036 0.804 7 1.121 100.0 HOH_C_336 0.105 0.052 0.847 8 0.250 0.0 HOH_C_337 0.041 0.035 0.956 6 0.951 100.0 HOH_C_338 0.056 0.033 0.889 5 0.998 100.0 HOH_C_339 0.051 0.036 0.944 7 0.864 100.0 HOH_C_340 0.058 0.034 0.934 6 1.026 100.0 HOH_C_341 0.085 0.041 0.756 9 0.462 0.0 HOH_C_342 0.075 0.032 0.916 6 1.000 100.0 HOH_C_343 0.072 0.029 0.867 5 1.038 100.0 HOH_C_344 0.071 0.040 0.896 10 0.770 0.0 HOH_C_345 0.048 0.032 0.952 6 1.064 100.0 HOH_C_346 0.097 0.032 0.753 7 0.896 100.0 HOH_C_347 0.069 0.037 0.857 7 1.108 100.0 HOH_C_348 0.137 0.040 0.698 10 0.571 0.0 HOH_C_349 0.109 0.039 0.634 10 0.630 0.0 HOH_C_350 0.052 0.037 0.974 6 0.924 100.0 HOH_C_351 0.044 0.028 0.885 6 1.046 100.0 HOH_C_352 0.039 0.035 0.969 8 0.902 100.0 HOH_C_353 0.092 0.045 0.877 8 0.855 100.0 HOH_C_354 0.080 0.034 0.865 8 0.908 100.0 HOH_C_355 0.106 0.061 0.694 9 0.000 0.0 HOH_C_356 0.089 0.061 0.934 8 0.376 0.0 HOH_C_357 0.077 0.036 0.808 6 0.799 0.0 HOH_C_358 0.148 0.038 0.823 10 0.826 100.0 HOH_C_359 0.091 0.051 0.898 6 0.844 100.0 HOH_C_360 0.050 0.028 0.891 6 1.105 100.0 HOH_C_361 0.090 0.045 0.925 6 0.897 100.0 HOH_C_362 0.073 0.040 0.847 6 0.878 100.0 HOH_C_363 0.046 0.041 0.945 7 0.899 100.0 HOH_C_364 0.107 0.040 0.764 9 0.726 0.0 HOH_C_365 0.055 0.036 0.903 7 0.969 100.0 HOH_C_366 0.077 0.041 0.908 6 1.118 100.0 HOH_C_367 0.036 0.030 0.963 6 0.973 100.0 HOH_C_368 0.033 0.034 0.961 8 0.891 100.0 HOH_C_369 0.089 0.040 0.761 8 0.890 100.0 HOH_C_370 0.090 0.041 0.694 9 0.691 0.0 HOH_C_371 0.074 0.054 0.887 9 0.271 0.0 HOH_C_372 0.099 0.045 0.909 10 0.573 0.0 HOH_C_373 0.072 0.041 0.906 9 0.609 0.0 HOH_C_374 0.075 0.048 0.880 7 0.689 0.0 HOH_C_375 0.046 0.033 0.932 6 1.084 100.0 HOH_C_376 0.036 0.030 0.954 5 1.013 100.0 HOH_C_377 0.072 0.041 0.916 7 0.920 100.0 HOH_C_378 0.115 0.037 0.414 9 0.398 0.0 HOH_C_379 0.186 0.046 0.822 11 0.398 0.0 HOH_C_380 0.082 0.038 0.813 8 0.314 0.0 HOH_C_381 0.126 0.039 0.703 11 0.155 0.0 HOH_C_382 0.084 0.043 0.839 10 0.454 0.0 HOH_C_383 0.124 0.043 0.518 8 0.829 100.0 HOH_C_384 0.075 0.046 0.954 8 0.730 0.0 HOH_C_385 0.086 0.037 0.924 7 0.789 0.0 HOH_C_386 0.116 0.028 0.685 7 0.801 100.0 HOH_C_387 0.103 0.042 0.795 7 0.836 100.0 HOH_C_388 0.066 0.042 0.964 7 0.729 0.0 HOH_C_389 0.107 0.038 0.824 8 0.840 100.0 HOH_C_390 0.073 0.038 0.821 7 0.963 100.0 HOH_C_391 0.055 0.033 0.897 6 0.879 100.0 HOH_C_392 0.088 0.041 0.810 7 0.731 0.0 HOH_C_393 0.045 0.031 0.967 6 1.128 100.0 HOH_C_394 0.095 0.046 0.800 9 0.787 0.0 HOH_C_395 0.082 0.037 0.860 8 0.743 0.0 HOH_C_396 0.068 0.027 0.936 8 0.845 100.0 HOH_C_397 0.081 0.038 0.699 7 0.748 0.0 HOH_C_398 0.065 0.035 0.906 9 0.902 100.0 HOH_C_399 0.075 0.037 0.946 7 0.733 0.0 libpdb-redo-3.0.5/test/1mdn.mtz0000664000175000017500000002533014364232314016123 0ustar maartenmaartenMTZ DA@@0A,KD`A0?A?C@0@@AC@0?@@CY@ @A6DffFA @A C33@ ??@YGD33A ?@@PASC9@ ?@@C33@ @@AC33@?AAA@@AffA@@@LRC@?@`ADff@?@ACff@?@@@ffC33@@?`D33@@@@3sCff@@`A33B333@@AffC@@PAB @??PAf&C33@?@@YC@?@@ffC@@@ALC@@@AC̬@@@?A =DA?@ٖC33@@@@@@C@@@͌C̜@@ACff@?@A C33??@ AA,@?@@LC@@?`AB?@@@0AC@@@@Cy@@@@A̱Cff@@AJCy@@@A$C@@@ AC333@A@3DA??@L'C @?@@A3sC33S@?@AQCff&@?@pAfC@@@0Af&C33@@@?C@@@ A3\C,@@@?@@ffC@@@@@AfČ@?AZZZZ@@A١C̼@@@?C`@@@A3D!A?@0Aͬ D@?@ALC@?@AC33@?A`AB?@?Af&D@@@@@33ZCff&@@@`A33JCff&@@@AC`@@@@AfDff@@@@@3DA@@ZZZZ@?DC`@@ AB?AAf&Cff@??@ZZZZ?@@@cC333@?@@AB??@A͌D@@@A̹Č@@@ACff@@@0A B̌?@@?@3DIA@@@@AfD@@@@@gC333@@?AZZZZ@@@PAZZZZ@@Af DlA@@AYC@@?@AZZZZ@?@PACfff@@?@ Af&C̬@@?AAYCff@@@?`AffB?@@@@@AXC333@@@@@3Cy@@@@A3CffF@@@@@A33XC333@@@@@@Dff@@@@@AfD A@@?A`#D33A@@@ZZZZ@AZZZZ@`AپC@A`AC33A??@ZZZZ?@@AZZZZ?@pA C@?@ALbC333@@@@ͬDA@@`A Cff@@@@33AC33@@@?AfDffA@@@@@@!DA@@@@A D33@@@Af Dff@?`AZZZZ@@@ZZZZ@ADCy@@?ٙC̬@APAC@?@PAZZZZ?@?ZZZZ?@ Aff3C @?A@@;DffA@?AZZZZ@@@@33CCff&@@@AfC33@@@A͌C@@@@?tB̌?@@@?3C33@@@@AC@@?pADff&B@AZZZZ@AZZZZ@@fDAAA@"Dff.A??AZZZZ?@@0AZZZZ?@ AfD@?@PA`GDA@@ZZZZ@@fC@@@AC?@@ABff?@A@ܳD33A@@?pA-C33@@@@@A)D33cA@@@AC@@`Af&vD33A@@AaC9@??@ZZZZ?@@AZZZZ?@@3Cff@?@fDA?AA3sĎA??AZZZZ??@@ZZZZ??@@dB̌???@@YC33@??A@͌C@?@? AZZZZ?@@@Aff^C,@?@@A@C̬@?@@@C@?@@A3C33s@?@@@ffB??@@@Af&C̬@?@@@A͌+DA?@?ADB@ AZZZZ@@AZZZZ@@AZZZZ@@@3FCfff@@A@B33@@??AZZZZ@?@@@ZZZZ@?@A Cl@@?@A3C@@@Af"DA@@@@ D@@@@0AC̜@@@@A8C33@@@@?@fDA@@@@@@,&D@@@@@A` D@@@@Cfff@@@@ALD33@@@?PAZZZZ@@@@0AZZZZ@@@@ D33+A@@@PAB@@@?AZZZZ@@?@AZZZZ@@?@ Cl@@@?@pAC̜@@@?A@nCffF@@@@?@@33B?@@@@@A8C33@@@@@AvB?@@@@A8C@@@@@AfFD@@@@@@PACfff@@@@@@ A3 Dff@@@@?pAD@@AZZZZ@@AZZZZ@@AىC@@@pA.BffF@@A?ͬ DA@??`AZZZZ@?@@AfuCL@@?@AB?@?@Af&C@@@AL'Cff@@@@?3Cff@@@@ A3C@@@@@L C@@@@?`AyxD9A@@@@@@ALC̬@@@@@@\B?@??ZZZZ@@@AC@@@0AC,@@@AD A@?AZZZZ@?@AD33@@?@@Bff?@?@A3sD@@@?ALC33@@@@@ِCl@@@@AffRC,@@@@AC33@@@@@@D33@@@@@ADff@@ZZZZ@@A33=C33s@@@A,B33@@@A33sC33@@??@A(C @@?@@AC@@?@ALC@@?@Af&C̼@@@A3s #include #include #include #include #include #include #include "pdb-redo/AtomShape.hpp" #include "pdb-redo/MapMaker.hpp" #include "pdb-redo/Statistics.hpp" #include "pdb-redo/SkipList.hpp" namespace fs = std::filesystem; namespace tt = boost::test_tools; namespace utf = boost::unit_test; using namespace pdb_redo; // -------------------------------------------------------------------- fs::path gTestDir = fs::current_path(); bool init_unit_test() { // not a test, just initialize test dir if (boost::unit_test::framework::master_test_suite().argc == 2) { gTestDir = boost::unit_test::framework::master_test_suite().argv[1]; if (fs::exists(gTestDir / "minimal-components.cif")) cif::compound_factory::instance().push_dictionary(gTestDir / "minimal-components.cif"); } return true; } // -------------------------------------------------------------------- BOOST_AUTO_TEST_CASE(symm_1) { if (not fs::exists(gTestDir / "1mdn.mtz")) return; const std::string spacegroup = "I 1 21 1"; int nr = cif::get_space_group_number(spacegroup); BOOST_TEST(nr == 5005); // clipper::Spacegroup sgr(clipper::Spgr_descr{ spacegroup, clipper::Spgr_descr::HM }); // BOOST_TEST(sgr.symbol_hm() == spacegroup); using clipper::CCP4MTZfile; CCP4MTZfile mtzin; mtzin.open_read((gTestDir / "1mdn.mtz").string()); HKL_info mHKLInfo; mtzin.import_hkl_info(mHKLInfo); nr = pdb_redo::getSpacegroupNumber(mHKLInfo.spacegroup()); BOOST_TEST(nr == 5005); } // -------------------------------------------------------------------- // skip list test BOOST_AUTO_TEST_CASE(skip_1) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); auto& chain = structure.polymers().front(); SkipList skiplist; int n = 10; for (auto& res: chain) { skiplist.emplace_back(res); if (--n == 0) break; } for (const auto fmt: { SkipListFormat::OLD, SkipListFormat::CIF }) { std::stringstream ss; writeSkipList(ss, skiplist, fmt); BOOST_CHECK(skiplist.size() == 10); // std::cout << ss.str() << std::endl; SkipList list2 = readSkipList(ss); BOOST_CHECK(list2.size() == skiplist.size()); if (list2.size() != skiplist.size()) continue; for (std::size_t i = 0; i < skiplist.size(); ++i) { BOOST_CHECK(skiplist[i].auth_asym_id == list2[i].auth_asym_id); BOOST_CHECK(skiplist[i].auth_seq_id == list2[i].auth_seq_id); BOOST_CHECK(skiplist[i].pdbx_PDB_ins_code == list2[i].pdbx_PDB_ins_code); } } } // -------------------------------------------------------------------- // atom radii calculated with AtomShape and NEWUOA struct TestRadius { std::string type; float radius; } kTestRadii[] = { { "N", 1.073270559310913086f }, { "C", 1.077472805976867676f }, { "C", 1.060930848121643066f }, { "O", 1.037933468818664551f }, { "C", 1.080411434173583984f }, { "C", 1.080696582794189453f }, { "C", 1.090956211090087891f }, { "N", 1.02884829044342041f }, { "C", 1.017064213752746582f }, { "C", 0.985809326171875f }, { "O", 0.9498787522315979004f }, { "C", 1.032562017440795898f }, { "C", 1.043723225593566895f }, { "O", 1.000524282455444336f }, { "N", 1.057830214500427246f }, { "N", 0.9573949575424194336f }, { "C", 0.9534692764282226562f }, { "C", 0.9520707130432128906f }, { "O", 0.9262598156929016113f }, { "C", 0.938775181770324707f }, { "C", 0.9474387764930725098f }, { "C", 0.9400410056114196777f }, { "C", 0.9585416316986083984f }, { "C", 0.9261589646339416504f }, { "C", 0.9467949271202087402f }, { "C", 0.935360252857208252f }, { "N", 0.930846095085144043f }, { "C", 0.9431300163269042969f }, { "C", 0.9361689090728759766f }, { "O", 0.9119053483009338379f }, { "C", 0.9605298042297363281f }, { "O", 0.9615512490272521973f }, { "N", 0.9203097224235534668f }, { "C", 0.9396781325340270996f }, { "C", 0.9424930214881896973f }, { "O", 0.9095469117164611816f }, { "N", 0.9243852496147155762f }, { "C", 0.9413107037544250488f }, { "C", 0.9356296658515930176f }, { "O", 0.9198570847511291504f }, { "C", 0.9559983015060424805f }, { "C", 0.9961333274841308594f }, { "O", 0.9828038811683654785f }, { "N", 1.007446646690368652f }, { "N", 0.9110313653945922852f }, { "C", 0.9231967926025390625f }, { "C", 0.9301134943962097168f }, { "O", 0.9059692621231079102f }, { "C", 0.917514503002166748f }, { "C", 0.9176003932952880859f } }; BOOST_AUTO_TEST_CASE(atom_shape_1, *utf::tolerance(0.0001f)) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); const float kResHi = 1.80009, kResLo = 7.99918; const size_t N = sizeof(kTestRadii) / sizeof(TestRadius); size_t i = 0; for (auto& atom: structure.atoms()) { if (i >= N) break; pdb_redo::AtomShape shape(atom, kResHi, kResLo, false); BOOST_CHECK_EQUAL(cif::atom_type_traits(atom.get_type()).symbol(), kTestRadii[i].type); float radius = shape.radius(); float test = kTestRadii[i].radius; BOOST_TEST(radius == test); ++i; } } // -------------------------------------------------------------------- cif::file operator""_cf(const char* text, size_t length) { struct membuf : public std::streambuf { membuf(char* text, size_t length) { this->setg(text, text, text + length); } } buffer(const_cast(text), length); std::istream is(&buffer); return cif::file(is); } // -------------------------------------------------------------------- BOOST_AUTO_TEST_CASE(map_maker_1) { pdb_redo::MapMaker mm; float samplingRate = 0.75; mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); BOOST_TEST(mm.resHigh() == 1.8, tt::tolerance(0.01)); BOOST_TEST(mm.resLow() == 8.0, tt::tolerance(0.01)); } BOOST_AUTO_TEST_CASE(map_maker_2) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); MapMaker mm; float samplingRate = 0.75; auto aniso = MapMaker::as_None; // if (vm.count("aniso-scaling")) // { // if (vm["aniso-scaling"].as() == "observed") // aniso = MapMaker::as_Observed; // else if (vm["aniso-scaling"].as() == "calculated") // aniso = MapMaker::as_Calculated; // } mm.calculate(gTestDir / ".." / "examples" / "1cbs_map.mtz", structure, false, aniso, samplingRate, false); BOOST_TEST(mm.resHigh() == 1.8, tt::tolerance(0.01)); BOOST_TEST(mm.resLow() == 8.0, tt::tolerance(0.01)); } // -------------------------------------------------------------------- // First residues from 1cbs struct TestResidue { std::string compID; std::string asymID; int seqID; double RSR, SRSR, RSCCS; size_t NGRID; double EDIAm, OPIA; }; BOOST_AUTO_TEST_CASE(stats_1) { cif::VERBOSE = 2; // read test data first (output from previous stats version) std::vector test; std::ifstream testFile(gTestDir / "1cbs-test.eds"); BOOST_ASSERT(testFile.is_open()); std::string line; std::getline(testFile, line); BOOST_ASSERT(line.substr(0, 7) == "RESIDUE"); while (std::getline(testFile, line)) { auto fields = cif::split(line, "\t"); BOOST_ASSERT(fields.size() == 7); auto id = cif::split(fields[0], "_"); BOOST_ASSERT(id.size() == 3); test.push_back({ id[0], id[1], std::stoi(id[2]), std::stod(fields[1]), std::stod(fields[2]), std::stod(fields[3]), static_cast(std::stoi(fields[4])), std::stod(fields[5]), std::stod(fields[6]) }); } const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); MapMaker mm; float samplingRate = 1.5; mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); BondMap bm(structure); pdb_redo::EDIAStatsCollector collector(mm, structure, false, bm); auto r = collector.collect(); auto ti = test.begin(); for (auto& ri: r) { BOOST_ASSERT(ti != test.end()); auto t = *ti++; if (std::isnan(t.RSCCS)) continue; BOOST_TEST(ri.asymID == t.asymID); BOOST_TEST(ri.compID == t.compID); BOOST_TEST(std::abs(ri.RSR - t.RSR) <= 0.01, tt::tolerance(0.01)); BOOST_TEST(std::abs(ri.SRSR - t.SRSR) <= 0.01, tt::tolerance(0.01)); if (not (std::isnan(ri.RSCCS) and std::isnan(t.RSCCS))) BOOST_TEST(std::abs(ri.RSCCS - t.RSCCS) <= 0.1, tt::tolerance(0.1)); else BOOST_CHECK(std::isnan(ri.RSCCS) == std::isnan(t.RSCCS)); if (not (std::isnan(ri.EDIAm) or std::isnan(t.EDIAm))) { BOOST_TEST(std::abs(ri.EDIAm - t.EDIAm) <= 0.1, tt::tolerance(0.1)); if (std::abs(ri.EDIAm - t.EDIAm) > 0.1) std::cerr << ri << std::endl; BOOST_TEST(std::abs(ri.OPIA - t.OPIA) <= 0.1, tt::tolerance(0.1)); } else { BOOST_CHECK(std::isnan(ri.EDIAm) == std::isnan(t.EDIAm)); } BOOST_TEST(ri.ngrid == t.NGRID); } } // -------------------------------------------------------------------- // test stats on a file with an unkown residue, should give nan's for EDIA BOOST_AUTO_TEST_CASE(stats_2) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file = cif::pdb::read(example.string()); BOOST_CHECK(file.is_valid()); auto &db = file.front(); // Rename a compound to an unknown ID for (auto r: db["chem_comp"].find(cif::key("id") == "ALA")) { r["id"] = "U_K"; break; } for (auto r: db["pdbx_poly_seq_scheme"].find(cif::key("mon_id") == "ALA")) r["mon_id"] = "U_K"; file.save("/tmp/1cbs-test.cif"); // and load this into a structure (note, structure caches data from the file, so order is important) cif::mm::structure structure(file); MapMaker mm; float samplingRate = 0.75; mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); BondMap bm(structure); pdb_redo::EDIAStatsCollector collector(mm, structure, false, bm); auto r = collector.collect(); for (auto& ri: r) { BOOST_CHECK(ri.compID != "ALA"); if (ri.compID != "U_K") continue; BOOST_CHECK(not std::isnan(ri.RSR)); BOOST_CHECK(not std::isnan(ri.SRSR)); BOOST_CHECK(not std::isnan(ri.RSCCS)); BOOST_CHECK(std::isnan(ri.EDIAm)); BOOST_CHECK(std::isnan(ri.OPIA)); } } libpdb-redo-3.0.5/test/rsr-test.cpp0000664000175000017500000001561014364232314017017 0ustar maartenmaarten#define BOOST_TEST_MODULE Libpdb_redo_Test #include #include #include #include #include "pdb-redo/AtomShape.hpp" #include "pdb-redo/MapMaker.hpp" #include "pdb-redo/Statistics.hpp" #include "pdb-redo/DistanceMap.hpp" #include "pdb-redo/Minimizer.hpp" namespace fs = std::filesystem; namespace tt = boost::test_tools; namespace utf = boost::unit_test; // -------------------------------------------------------------------- fs::path gTestDir = fs::current_path(); BOOST_AUTO_TEST_CASE(init) { cif::VERBOSE = 1; // not a test, just initialize test dir if (boost::unit_test::framework::master_test_suite().argc == 2) { gTestDir = boost::unit_test::framework::master_test_suite().argv[1]; if (fs::exists(gTestDir / "minimal-components.cif")) cif::compound_factory::instance().push_dictionary(gTestDir / "minimal-components.cif"); } } // -------------------------------------------------------------------- BOOST_AUTO_TEST_CASE(refine_0) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); auto &chain = structure.polymers().front(); pdb_redo::MapMaker mm; float samplingRate = 0.75; mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); pdb_redo::BondMap bonds(structure); auto minimizer = pdb_redo::Minimizer::create(chain, 3, 3, bonds, mm.fb()); minimizer->printStats(); auto score = minimizer->refine(true); std::cout << "minimizer score: " << score << std::endl; minimizer->printStats(); std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; cif::file refFile(example.string()); cif::mm::structure reference(refFile); auto &refChain = reference.polymers().front(); auto &atoms3 = chain.at(2).atoms(); auto &refAtoms3 = refChain.at(2).atoms(); BOOST_ASSERT(atoms3.size() == refAtoms3.size()); double d_sum = 0; for (size_t i = 0; i < atoms3.size(); ++i) { auto a1 = atoms3.at(i); auto a2 = refAtoms3.at(i); auto d = distance(a1, a2); d_sum += d * d; std::cout << a1 << ": " << a1.get_location() << " => " << a2.get_location() << " distance: " << d << std::endl; } auto rmsd = std::sqrt(d_sum / atoms3.size()); std::cout << "RMSd: " << rmsd << std::endl; BOOST_CHECK(rmsd < 0.2); std::cout << std::string(cif::get_terminal_width(), '=') << std::endl; } BOOST_AUTO_TEST_CASE(refine_1) { const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); cif::file file(example.string()); cif::mm::structure structure(file); pdb_redo::BondMap bonds(structure); pdb_redo::MapMaker mm; float samplingRate = 0.75; mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); auto &chain = structure.polymers().front(); auto &atoms3 = chain.at(2).atoms(); auto minimizer = pdb_redo::Minimizer::create(chain, 3, 3, bonds, mm.fb()); minimizer->printStats(); // nudge the atoms of the third residue auto &res3 = chain.at(2); for (auto a : res3.atoms()) structure.move_atom(a, cif::nudge(a.get_location(), 0.5f)); cif::file refFile(example.string()); cif::mm::structure reference(refFile); auto &refChain = reference.polymers().front(); auto &refAtoms3 = refChain.at(2).atoms(); BOOST_ASSERT(atoms3.size() == refAtoms3.size()); for (size_t i = 0; i < atoms3.size(); ++i) { auto a1 = atoms3.at(i); auto a2 = refAtoms3.at(i); std::cout << a1 << ": " << a1.get_location() << " => " << a2.get_location() << " distance: " << distance(a1, a2) << std::endl; } std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; minimizer->printStats(); auto score = minimizer->refine(true); std::cout << "minimizer score: " << score << std::endl; minimizer->printStats(); double d_sum = 0; std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; for (size_t i = 0; i < atoms3.size(); ++i) { auto a1 = atoms3.at(i); auto a2 = refAtoms3.at(i); auto d = distance(a1, a2); d_sum += d * d; std::cout << a1 << ": " << a1.get_location() << " => " << a2.get_location() << " distance: " << d << std::endl; } auto rmsd = std::sqrt(d_sum / atoms3.size()); std::cout << "RMSd: " << rmsd << std::endl; BOOST_CHECK(rmsd < 0.2); std::cout << std::string(cif::get_terminal_width(), '=') << std::endl; } // BOOST_AUTO_TEST_CASE(refine_2) // { // const fs::path example(gTestDir / ".." / "examples" / "1cbs.cif.gz"); // cif::file file(example.string()); // cif::mm::structure structure(file); // const float kNearBy = 3; // pdb_redo::DistanceMap dm(structure, kNearBy); // // Move the REA residue somewhat // auto &rea = structure.get_residue("B"); // std::vector atoms; // for (auto a : rea.atoms()) // { // for (auto b : dm.near(a, kNearBy)) // { // if (find(atoms.begin(), atoms.end(), b) != atoms.end()) // continue; // atoms.push_back(b); // } // } // // // translate by { 0.1, 0.1, 0.1 } and then // // // rotate around 1, 0, 0 for 5 degrees // // const float angle = 5 * (cif::kPI / 180); // // cif::quaternion q( // // std::cos(angle / 2), std::sin(angle / 2), 0, 0 // // ); // // for (auto a : rea.atoms()) // // a.translate_and_rotate({ 0.1, 0.1, 0.1 }, q); // for (auto a : rea.atoms()) // { // auto l = a.get_location(); // l = nudge(l, 0.5); // a.set_location(l); // } // cif::file refFile(example.string()); // cif::mm::structure reference(refFile); // auto &atomsRea = rea.atoms(); // auto &refAtomsRea = reference.get_residue("B").atoms(); // BOOST_ASSERT(atomsRea.size() == refAtomsRea.size()); // for (size_t i = 0; i < atomsRea.size(); ++i) // { // auto a1 = atomsRea.at(i); // auto a2 = refAtomsRea.at(i); // std::cout << a1 << ": " << a1.get_location() << " => " << a2.get_location() << " distance: " << distance(a1, a2) << std::endl; // } // std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; // pdb_redo::MapMaker mm; // float samplingRate = 0.75; // mm.loadMTZ(gTestDir / ".." / "examples" / "1cbs_map.mtz", samplingRate); // pdb_redo::BondMap bonds(structure); // auto minimizer = pdb_redo::Minimizer::create(structure, atoms, bonds, mm.fb()); // minimizer->printStats(); // auto score = minimizer->refine(true); // std::cout << "minimizer score: " << score << std::endl; // minimizer->printStats(); // std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; // double d_sum = 0; // for (size_t i = 0; i < atomsRea.size(); ++i) // { // auto a1 = atomsRea.at(i); // auto a2 = refAtomsRea.at(i); // auto d = distance(a1, a2); // d_sum += d * d; // std::cout << a1 << ": " << a1.get_location() << " => " << a2.get_location() << " distance: " << d << std::endl; // } // auto rmsd = std::sqrt(d_sum / atomsRea.size()); // std::cout << "RMSd: " << rmsd << std::endl; // BOOST_CHECK(rmsd < 0.2); // std::cout << std::string(cif::get_terminal_width(), '-') << std::endl; // }